Изучаем и используем
Автор:
Савромат
Дата: 11 мая 2014, 14:08 · Просмотров: 5 172

Дата: 11 мая 2014, 14:08 · Просмотров: 5 172
Скрипты - важная часть игры, позволяющая при разумном применении здорово улучшить геймплей. Я не особенно силен в компьютерах, так, продвинутый чайник, и скрипты использовал в первом Риме "по логике и здравому смыслу" - и по образцу. Получалось неплохо, но в Риме 2 скрипты имеют несколько другую структуру. Поэтому создал эту тему - чтобы советоваться, спрашивать и изучать скрипты.
Начнем со скрипта pun_carthage.lua из ГуВ
Скрипт
Правильно ли я понимаю что
[[
start_defense(
String name for this campaign_defense object,
String defending faction,
String cqi of defending force (if nil it loads from savegame),
Int number of regions player has to own to trigger release,
Table of strings of region names that should trigger release if the player owns them,
opt String message_event to trigger on release
)
returns campaign defense object
]]
cd_karalis = start_defense("Karalis", "pun_rome", Karalis_Defender_ID, 10, Settlements_Close_To_Karalis, "pun_rome_releasing_defenders_1");
для активации защитного скрипта в Каралисе за Рим надо чтобы игрок (=Карфаген) владел 10 поселениями в т.ч. примыкающим к Каралису?
Начнем со скрипта pun_carthage.lua из ГуВ
Скрипт
Спойлер (раскрыть)
-- this line needs to be present - due to the way this script file is loaded by the main script it
-- does not have access to the global script environment. This line gives it access.
setfenv(1, _G.script_env);
-- include the intro cutscene script
require (local_faction .. "_intro")
--------------------------------------------------------------------------------- --
--------------------------------------------------------------------------------- --
--
-- FACTION SCRIPT
--
-- This script sets up the default start camera (for a multiplayer game) and
-- the intro cutscene/objective for a playable faction. The filename for this
-- script must match the name of the faction.
--
--------------------------------------------------------------------------------- --
--------------------------------------------------------------------------------- --
output("campaign script loaded for " .. local_faction);
-------------------------------------------------------
-- Intro Cutscene Playback
-- This function constructs and starts the
-- intro cutscene. The intro cutscene is generally
-- declared in the <faction_name>_intro.lua file
-------------------------------------------------------
function cutscene_intro_start()
output("Playing intro cutscene for " .. local_faction);
cutscene_intro_construct();
cutscene_intro:start();
end;
-------------------------------------------------------
-- Faction Start declaration/config
-- This object decides what to do when the faction
-- is initialised - do we play the cutscene, do we
-- position the camera at the start, or do we do
-- nothing, stuff like that.
--
-- Comment out the line adding the intro cutscene
-- to not play it (not ready for playtesting etc.)
-------------------------------------------------------
fs_player = faction_start:new(local_faction, cam_start_x, cam_start_y, cam_start_h, cam_start_r);
-- singleplayer initialisation
fs_player:register_new_sp_game_callback(function() faction_new_sp_game_startup() end);
fs_player:register_each_sp_game_callback(function() faction_each_sp_game_startup() end);
-- multiplayer initialisation
fs_player:register_new_mp_game_callback(function() faction_new_mp_game_startup() end);
fs_player:register_each_mp_game_callback(function() faction_each_mp_game_startup() end);
fs_player:register_intro_cutscene_callback(function() cutscene_intro_start() end); -- comment out to not have intro cutscene
-------------------------------------------------------
-- This gets called each time the script restarts,
-- this could be at the start of a new game or
-- loading from a save-game (including coming back
-- from a campaign battle). Don't tamper with it.
-------------------------------------------------------
function start_game_for_faction(should_show_cutscene)
output("start_game_for_faction() called");
-- starts the playable faction script
fs_player:start(should_show_cutscene);
end;
-------------------------------------------------------
-- This gets called only once - at the start of a
-- new game. Initialise new game stuff for this
-- faction here
-------------------------------------------------------
function faction_new_sp_game_startup()
output("faction_new_sp_game_startup() called");
-- put stuff here to be initialised on a new singleplayer game
-- Spawn_Defenses();
Spawn_Additional_Roman_Forces();
cm:apply_effect_bundle("pun_faction_scripted_minor_reduced_upkeep", "pun_rome", -1);
cm:apply_effect_bundle("pun_faction_scripted_minor_reduced_upkeep", "pun_syracuse", -1);
cm:apply_effect_bundle("pun_faction_scripted_minor_reduced_upkeep", "pun_gaetuli", -1);
cm:apply_effect_bundle("pun_faction_scripted_minor_reduced_upkeep", "pun_masaesyli", -1);
cm:apply_effect_bundle("pun_faction_scripted_minor_reduced_upkeep", "pun_emporion", -1);
cm:apply_effect_bundle("pun_faction_scripted_minor_reduced_upkeep", "pun_cessetani", -1);
cm:apply_effect_bundle("pun_faction_scripted_minor_reduced_upkeep", "pun_lusitani", -1);
cm:apply_effect_bundle("pun_faction_scripted_minor_reduced_upkeep", "pun_oretani", -1);
cm:apply_effect_bundle("pun_faction_scripted_minor_reduced_upkeep", "pun_arevaci", -1);
cm:apply_effect_bundle("pun_faction_scripted_minor_reduced_upkeep", "pun_volcae", -1);
cm:grant_unit("settlement:pun_sicilia_syracuse", "Gre_Citizen_Cav");
cm:grant_unit("settlement:pun_sicilia_syracuse", "Gre_Thorax_Sword");
cm:grant_unit("settlement:pun_sicilia_syracuse", "Gre_Thorax_Sword");
cm:grant_unit("settlement:pun_sicilia_syracuse", "Gre_Onager");
cm:grant_unit("settlement:pun_mauretania_rutubis", "Afr_Archers");
cm:grant_unit("settlement:pun_mauretania_rutubis", "Afr_Archers");
cm:grant_unit("settlement:pun_mauretania_rutubis", "Afr_Chariot_Raiders");
cm:grant_unit("settlement:pun_mauretania_rutubis", "Afr_Chariot_Raiders");
cm:grant_unit("settlement:pun_mauretania_siga", "Num_Noble_Infantry");
cm:grant_unit("settlement:pun_mauretania_siga", "Afr_Archers");
cm:grant_unit("settlement:pun_numidia_sitifi", "Afr_Archers");
cm:grant_unit("settlement:pun_numidia_sitifi", "Afr_Chariot_Raiders");
cm:grant_unit("settlement:pun_hispania_citerior_emporiae", "Gre_Thorax_Sword");
cm:grant_unit("settlement:pun_hispania_citerior_emporiae", "Gre_Peltasts");
cm:grant_unit("settlement:pun_hispania_citerior_emporiae", "Gre_Peltasts");
cm:grant_unit("settlement:pun_hispania_citerior_emporiae", "Gre_Onager");
cm:grant_unit("settlement:pun_hispania_citerior_cissis", "Ibe_Vet_Shield_Warriors");
cm:grant_unit("settlement:pun_hispania_citerior_cissis", "Ibe_Guerilla_Warriors");
cm:grant_unit("settlement:pun_lusitania_olisipo", "Ibe_Lusitani_Spear");
cm:grant_unit("settlement:pun_lusitania_olisipo", "Ibe_Lusitani_Guerillas");
cm:grant_unit("settlement:pun_lusitania_olisipo", "Ibe_Lusitani_Guerillas");
cm:grant_unit("settlement:pun_lusitania_olisipo", "Ibe_Lusitani_Nobles");
cm:grant_unit("settlement:pun_celtiberia_libisosa", "Ibe_Scutarii_Cav");
cm:grant_unit("settlement:pun_celtiberia_libisosa", "Ibe_Balearic_Slingers");
cm:grant_unit("settlement:pun_celtiberia_libisosa", "Ibe_Balearic_Slingers");
cm:grant_unit("settlement:pun_celtiberia_numantia", "Ibe_Celtiberian_Cav");
cm:grant_unit("settlement:pun_celtiberia_numantia", "Ibe_Balearic_Slingers");
cm:grant_unit("settlement:pun_celtiberia_numantia", "Ibe_Painted_Warriors");
cm:grant_unit("settlement:pun_celtiberia_numantia", "Ibe_Painted_Warriors");
cm:grant_unit("settlement:pun_gallia_transalpina_tolosa", "Cel_Chosen_Sword");
cm:grant_unit("settlement:pun_gallia_transalpina_tolosa", "Cel_Heavy_Horse");
cm:grant_unit("settlement:pun_gallia_transalpina_tolosa", "Cel_Gallic_Hunters");
end;
function faction_new_mp_game_startup()
output("faction_new_mp_game_startup() called");
-- put stuff here to be initialised on a new multiplayer game
end;
-------------------------------------------------------
-- This gets called any time the game loads in,
-- singleplayer including from a save game and
-- from a campaign battle. Put stuff that needs
-- re-initialising each campaign load in here
-------------------------------------------------------
function faction_each_sp_game_startup()
output("faction_each_sp_game_startup() called");
-- put stuff here to be initialised each time a singleplayer game loads
-- Start_Defenses();
-- scripting.game_interface:show_shroud(false);
end;
function faction_each_mp_game_startup()
output("faction_each_mp_game_startup() called");
-- put stuff here to be initialised each time a multiplayer game loads
end;
-------------------------------------------------------
-- This gets called after the intro cutscene ends,
-- Kick off any missions or similar scripts here
-------------------------------------------------------
function start_faction()
output("start_faction() called");
-- startup missions
cm:trigger_custom_mission("pun_carthage", "objective_pun_carthage_1_primary");
cm:steal_user_input(true);
progress_on_mission_accepted(function() Zoom_To_Mission_Ebro_01() end, 0);
end;
Karalis_Defender_ID = nil;
Tarentum_Defender_ID = nil;
Corfinium_Defender_ID = nil;
Rome_Defender_ID = nil;
function Spawn_Defenses()
-- create_force_in_garrison(String faction to which the force belongs, String unit breakdown of the force, String region of garrison, String label for force)
-- returns cqi of new character
Karalis_Defender_ID = create_force_in_garrison(
"pun_rome",
"Rom_Equites,Rom_Equites,Rom_Equites,Rom_Triarii,Rom_Triarii,Rom_Principes,Rom_Principes, Rom_Principes,Rom_Hastati,Rom_Hastati,Rom_Hastati,Rom_Rorarii,Rom_Rorarii,Rom_Velites, Rom_Velites,Rom_Velites,Rom_Leves,Rom_Leves,Rom_Leves",
"pun_corsica_et_sardinia_karalis",
"karalis_defenders"
);
Tarentum_Defender_ID = create_force_in_garrison(
"pun_rome",
"Rom_Equites,Rom_Equites,Rom_Equites,Rom_Triarii,Rom_Triarii,Rom_Principes,Rom_Principes, Rom_Principes,Rom_Hastati,Rom_Hastati,Rom_Hastati,Rom_Rorarii,Rom_Rorarii,Rom_Velites, Rom_Velites,Rom_Velites,Rom_Leves,Rom_Leves,Rom_Leves",
"pun_magna_graecia_tarentum",
"tarentum_defenders"
);
Corfinium_Defender_ID = create_force_in_garrison(
"pun_rome",
"Rom_Equites,Rom_Equites,Rom_Equites,Rom_Equites,Rom_Triarii,Rom_Triarii,Rom_Triarii, Rom_Principes,Rom_Principes,Rom_Principes,Rom_Principes,Rom_Hastati,Rom_Hastati,Rom_Hastati, Rom_Hastati,Rom_Velites,Rom_Velites,Rom_Velites,Rom_Velites",
"pun_umbria_et_picenum_corfinium",
"corfinium_defenders"
);
Rome_Defender_ID = create_force_in_garrison(
"pun_rome",
"Rom_Equites,Rom_Equites,Rom_Equites,Rom_Equites,Rom_Triarii,Rom_Triarii,Rom_Triarii, Rom_Triarii,Rom_Principes,Rom_Principes,Rom_Principes,Rom_Principes,Rom_Principes, Rom_Hastati,Rom_Hastati,Rom_Velites,Rom_Velites,Rom_Velites,Rom_Velites",
"pun_latium_et_campania_roma",
"corfinium_defenders"
);
-- principal enemy faction gets big reduction in army upkeep to pay for this system
cm:apply_effect_bundle("pun_faction_scripted_reduced_upkeep", "pun_rome", -1);
end;
function Start_Defenses()
--[[
start_defense(
String name for this campaign_defense object,
String defending faction,
String cqi of defending force (if nil it loads from savegame),
Int number of regions player has to own to trigger release,
Table of strings of region names that should trigger release if the player owns them,
opt String message_event to trigger on release
)
returns campaign defense object
]]
cd_karalis = start_defense("Karalis", "pun_rome", Karalis_Defender_ID, 10, Settlements_Close_To_Karalis, "pun_rome_releasing_defenders_1");
cd_tarentum = start_defense("Tarentum", "pun_rome", Tarentum_Defender_ID, 12, Settlements_Close_To_Tarentum);
cd_corfinium = start_defense("Corfinium", "pun_rome", Corfinium_Defender_ID, 13, Settlements_Close_To_Corfinium, "pun_rome_releasing_defenders_2");
cd_rome = start_defense("Rome", "pun_rome", Rome_Defender_ID, 14, Settlements_Close_To_Rome, "pun_rome_releasing_defenders_3");
-- prevent the campaign defense objects from attempting to award upkeep for their armies as the AI is not aware of that system
cd_karalis:set_should_award_upkeep(false);
cd_tarentum:set_should_award_upkeep(false);
cd_corfinium:set_should_award_upkeep(false);
cd_rome:set_should_award_upkeep(false);
end;
function Spawn_Additional_Roman_Forces()
cm:grant_unit("settlement:pun_umbria_et_picenum_pisaurum", "Rom_Principes");
cm:grant_unit("settlement:pun_umbria_et_picenum_pisaurum", "Rom_Principes");
cm:grant_unit("settlement:pun_umbria_et_picenum_pisaurum", "Rom_Triarii");
cm:grant_unit("settlement:pun_umbria_et_picenum_pisaurum", "Rom_Triarii");
cm:grant_unit("settlement:pun_umbria_et_picenum_pisaurum", "Rom_Velites");
cm:grant_unit("settlement:pun_sicilia_lilybaeum", "Rom_Principes");
cm:grant_unit("settlement:pun_sicilia_lilybaeum", "Rom_Principes");
cm:grant_unit("settlement:pun_sicilia_lilybaeum", "Rom_Principes");
cm:grant_unit("settlement:pun_sicilia_lilybaeum", "Rom_Triarii");
cm:grant_unit("settlement:pun_sicilia_lilybaeum", "Rom_Triarii");
cm:grant_unit("settlement:pun_sicilia_lilybaeum", "Rom_Velites");
cm:grant_unit("settlement:pun_sicilia_lilybaeum", "Rom_Velites");
cm:grant_unit("settlement:pun_sicilia_lilybaeum", "Rom_Velites");
end;
--
-- Mission Ebro 01
--
local Mission_Ebro_01_X_1 = 236.9;
local Mission_Ebro_01_Y_1 = 286.5;
local Mission_Ebro_01_Z_1 = 0.81;
local Mission_Ebro_01_H_1 = -1.03;
local Mission_Ebro_01_X_2 = 207.1;
local Mission_Ebro_01_Y_2 = 304.3;
local Mission_Ebro_01_Z_2 = 0.8;
local Mission_Ebro_01_H_2 = -1.03;
local Mission_Ebro_01_Pan_Time = 20;
function Zoom_To_Mission_Ebro_01()
dismiss_advice();
-- move camera to revolt
local x, y, z, h = CampaignUI.GetCameraPosition();
-- cache camera position so we can return it afterwards
local zoom_time = 2;
scroll_camera_with_direction(
zoom_time,
{x, y, z, h},
{Mission_Ebro_01_X_1, Mission_Ebro_01_Y_1, Mission_Ebro_01_Z_1, Mission_Ebro_01_H_1}
);
cm:trigger_custom_mission("pun_carthage", "objective_pun_carthage_ebro_1");
progress_on_mission_accepted(function() Mission_Ebro_01_Issued() end, 0);
add_callback(function() Mission_Ebro_01_Pan_1() end, zoom_time, "Mission_Ebro_01");
end;
function Mission_Ebro_01_Pan_1()
local x, y, z, h = CampaignUI.GetCameraPosition();
scroll_camera_with_direction(
Mission_Ebro_01_Pan_Time,
{x, y, z, h},
{Mission_Ebro_01_X_2, Mission_Ebro_01_Y_2, Mission_Ebro_01_Z_2, Mission_Ebro_01_H_2}
);
add_callback(function() Mission_Ebro_01_Pan_2() end, Mission_Ebro_01_Pan_Time + 1, "Mission_Ebro_01");
end;
function Mission_Ebro_01_Pan_2()
local x, y, z, h = CampaignUI.GetCameraPosition();
scroll_camera_with_direction(
Mission_Ebro_01_Pan_Time,
{x, y, z, h},
{Mission_Ebro_01_X_1, Mission_Ebro_01_Y_1, Mission_Ebro_01_Z_1, Mission_Ebro_01_H_1}
);
add_callback(function() Mission_Ebro_01_Pan_1() end, Mission_Ebro_01_Pan_Time + 1, "Mission_Ebro_01");
end;
function Mission_Ebro_01_Issued()
remove_callback("Mission_Ebro_01");
cm:steal_user_input(false);
local x, y, z, h = CampaignUI.GetCameraPosition();
-- return camera to start position
scroll_camera_with_direction(
1,
{x, y, z, h},
{cam_start_x, cam_start_y, cam_start_h, cam_start_r}
);
end;
-- this line needs to be present - due to the way this script file is loaded by the main script it
-- does not have access to the global script environment. This line gives it access.
setfenv(1, _G.script_env);
-- include the intro cutscene script
require (local_faction .. "_intro")
--------------------------------------------------------------------------------- --
--------------------------------------------------------------------------------- --
--
-- FACTION SCRIPT
--
-- This script sets up the default start camera (for a multiplayer game) and
-- the intro cutscene/objective for a playable faction. The filename for this
-- script must match the name of the faction.
--
--------------------------------------------------------------------------------- --
--------------------------------------------------------------------------------- --
output("campaign script loaded for " .. local_faction);
-------------------------------------------------------
-- Intro Cutscene Playback
-- This function constructs and starts the
-- intro cutscene. The intro cutscene is generally
-- declared in the <faction_name>_intro.lua file
-------------------------------------------------------
function cutscene_intro_start()
output("Playing intro cutscene for " .. local_faction);
cutscene_intro_construct();
cutscene_intro:start();
end;
-------------------------------------------------------
-- Faction Start declaration/config
-- This object decides what to do when the faction
-- is initialised - do we play the cutscene, do we
-- position the camera at the start, or do we do
-- nothing, stuff like that.
--
-- Comment out the line adding the intro cutscene
-- to not play it (not ready for playtesting etc.)
-------------------------------------------------------
fs_player = faction_start:new(local_faction, cam_start_x, cam_start_y, cam_start_h, cam_start_r);
-- singleplayer initialisation
fs_player:register_new_sp_game_callback(function() faction_new_sp_game_startup() end);
fs_player:register_each_sp_game_callback(function() faction_each_sp_game_startup() end);
-- multiplayer initialisation
fs_player:register_new_mp_game_callback(function() faction_new_mp_game_startup() end);
fs_player:register_each_mp_game_callback(function() faction_each_mp_game_startup() end);
fs_player:register_intro_cutscene_callback(function() cutscene_intro_start() end); -- comment out to not have intro cutscene
-------------------------------------------------------
-- This gets called each time the script restarts,
-- this could be at the start of a new game or
-- loading from a save-game (including coming back
-- from a campaign battle). Don't tamper with it.
-------------------------------------------------------
function start_game_for_faction(should_show_cutscene)
output("start_game_for_faction() called");
-- starts the playable faction script
fs_player:start(should_show_cutscene);
end;
-------------------------------------------------------
-- This gets called only once - at the start of a
-- new game. Initialise new game stuff for this
-- faction here
-------------------------------------------------------
function faction_new_sp_game_startup()
output("faction_new_sp_game_startup() called");
-- put stuff here to be initialised on a new singleplayer game
-- Spawn_Defenses();
Spawn_Additional_Roman_Forces();
cm:apply_effect_bundle("pun_faction_scripted_minor_reduced_upkeep", "pun_rome", -1);
cm:apply_effect_bundle("pun_faction_scripted_minor_reduced_upkeep", "pun_syracuse", -1);
cm:apply_effect_bundle("pun_faction_scripted_minor_reduced_upkeep", "pun_gaetuli", -1);
cm:apply_effect_bundle("pun_faction_scripted_minor_reduced_upkeep", "pun_masaesyli", -1);
cm:apply_effect_bundle("pun_faction_scripted_minor_reduced_upkeep", "pun_emporion", -1);
cm:apply_effect_bundle("pun_faction_scripted_minor_reduced_upkeep", "pun_cessetani", -1);
cm:apply_effect_bundle("pun_faction_scripted_minor_reduced_upkeep", "pun_lusitani", -1);
cm:apply_effect_bundle("pun_faction_scripted_minor_reduced_upkeep", "pun_oretani", -1);
cm:apply_effect_bundle("pun_faction_scripted_minor_reduced_upkeep", "pun_arevaci", -1);
cm:apply_effect_bundle("pun_faction_scripted_minor_reduced_upkeep", "pun_volcae", -1);
cm:grant_unit("settlement:pun_sicilia_syracuse", "Gre_Citizen_Cav");
cm:grant_unit("settlement:pun_sicilia_syracuse", "Gre_Thorax_Sword");
cm:grant_unit("settlement:pun_sicilia_syracuse", "Gre_Thorax_Sword");
cm:grant_unit("settlement:pun_sicilia_syracuse", "Gre_Onager");
cm:grant_unit("settlement:pun_mauretania_rutubis", "Afr_Archers");
cm:grant_unit("settlement:pun_mauretania_rutubis", "Afr_Archers");
cm:grant_unit("settlement:pun_mauretania_rutubis", "Afr_Chariot_Raiders");
cm:grant_unit("settlement:pun_mauretania_rutubis", "Afr_Chariot_Raiders");
cm:grant_unit("settlement:pun_mauretania_siga", "Num_Noble_Infantry");
cm:grant_unit("settlement:pun_mauretania_siga", "Afr_Archers");
cm:grant_unit("settlement:pun_numidia_sitifi", "Afr_Archers");
cm:grant_unit("settlement:pun_numidia_sitifi", "Afr_Chariot_Raiders");
cm:grant_unit("settlement:pun_hispania_citerior_emporiae", "Gre_Thorax_Sword");
cm:grant_unit("settlement:pun_hispania_citerior_emporiae", "Gre_Peltasts");
cm:grant_unit("settlement:pun_hispania_citerior_emporiae", "Gre_Peltasts");
cm:grant_unit("settlement:pun_hispania_citerior_emporiae", "Gre_Onager");
cm:grant_unit("settlement:pun_hispania_citerior_cissis", "Ibe_Vet_Shield_Warriors");
cm:grant_unit("settlement:pun_hispania_citerior_cissis", "Ibe_Guerilla_Warriors");
cm:grant_unit("settlement:pun_lusitania_olisipo", "Ibe_Lusitani_Spear");
cm:grant_unit("settlement:pun_lusitania_olisipo", "Ibe_Lusitani_Guerillas");
cm:grant_unit("settlement:pun_lusitania_olisipo", "Ibe_Lusitani_Guerillas");
cm:grant_unit("settlement:pun_lusitania_olisipo", "Ibe_Lusitani_Nobles");
cm:grant_unit("settlement:pun_celtiberia_libisosa", "Ibe_Scutarii_Cav");
cm:grant_unit("settlement:pun_celtiberia_libisosa", "Ibe_Balearic_Slingers");
cm:grant_unit("settlement:pun_celtiberia_libisosa", "Ibe_Balearic_Slingers");
cm:grant_unit("settlement:pun_celtiberia_numantia", "Ibe_Celtiberian_Cav");
cm:grant_unit("settlement:pun_celtiberia_numantia", "Ibe_Balearic_Slingers");
cm:grant_unit("settlement:pun_celtiberia_numantia", "Ibe_Painted_Warriors");
cm:grant_unit("settlement:pun_celtiberia_numantia", "Ibe_Painted_Warriors");
cm:grant_unit("settlement:pun_gallia_transalpina_tolosa", "Cel_Chosen_Sword");
cm:grant_unit("settlement:pun_gallia_transalpina_tolosa", "Cel_Heavy_Horse");
cm:grant_unit("settlement:pun_gallia_transalpina_tolosa", "Cel_Gallic_Hunters");
end;
function faction_new_mp_game_startup()
output("faction_new_mp_game_startup() called");
-- put stuff here to be initialised on a new multiplayer game
end;
-------------------------------------------------------
-- This gets called any time the game loads in,
-- singleplayer including from a save game and
-- from a campaign battle. Put stuff that needs
-- re-initialising each campaign load in here
-------------------------------------------------------
function faction_each_sp_game_startup()
output("faction_each_sp_game_startup() called");
-- put stuff here to be initialised each time a singleplayer game loads
-- Start_Defenses();
-- scripting.game_interface:show_shroud(false);
end;
function faction_each_mp_game_startup()
output("faction_each_mp_game_startup() called");
-- put stuff here to be initialised each time a multiplayer game loads
end;
-------------------------------------------------------
-- This gets called after the intro cutscene ends,
-- Kick off any missions or similar scripts here
-------------------------------------------------------
function start_faction()
output("start_faction() called");
-- startup missions
cm:trigger_custom_mission("pun_carthage", "objective_pun_carthage_1_primary");
cm:steal_user_input(true);
progress_on_mission_accepted(function() Zoom_To_Mission_Ebro_01() end, 0);
end;
Karalis_Defender_ID = nil;
Tarentum_Defender_ID = nil;
Corfinium_Defender_ID = nil;
Rome_Defender_ID = nil;
function Spawn_Defenses()
-- create_force_in_garrison(String faction to which the force belongs, String unit breakdown of the force, String region of garrison, String label for force)
-- returns cqi of new character
Karalis_Defender_ID = create_force_in_garrison(
"pun_rome",
"Rom_Equites,Rom_Equites,Rom_Equites,Rom_Triarii,Rom_Triarii,Rom_Principes,Rom_Principes, Rom_Principes,Rom_Hastati,Rom_Hastati,Rom_Hastati,Rom_Rorarii,Rom_Rorarii,Rom_Velites, Rom_Velites,Rom_Velites,Rom_Leves,Rom_Leves,Rom_Leves",
"pun_corsica_et_sardinia_karalis",
"karalis_defenders"
);
Tarentum_Defender_ID = create_force_in_garrison(
"pun_rome",
"Rom_Equites,Rom_Equites,Rom_Equites,Rom_Triarii,Rom_Triarii,Rom_Principes,Rom_Principes, Rom_Principes,Rom_Hastati,Rom_Hastati,Rom_Hastati,Rom_Rorarii,Rom_Rorarii,Rom_Velites, Rom_Velites,Rom_Velites,Rom_Leves,Rom_Leves,Rom_Leves",
"pun_magna_graecia_tarentum",
"tarentum_defenders"
);
Corfinium_Defender_ID = create_force_in_garrison(
"pun_rome",
"Rom_Equites,Rom_Equites,Rom_Equites,Rom_Equites,Rom_Triarii,Rom_Triarii,Rom_Triarii, Rom_Principes,Rom_Principes,Rom_Principes,Rom_Principes,Rom_Hastati,Rom_Hastati,Rom_Hastati, Rom_Hastati,Rom_Velites,Rom_Velites,Rom_Velites,Rom_Velites",
"pun_umbria_et_picenum_corfinium",
"corfinium_defenders"
);
Rome_Defender_ID = create_force_in_garrison(
"pun_rome",
"Rom_Equites,Rom_Equites,Rom_Equites,Rom_Equites,Rom_Triarii,Rom_Triarii,Rom_Triarii, Rom_Triarii,Rom_Principes,Rom_Principes,Rom_Principes,Rom_Principes,Rom_Principes, Rom_Hastati,Rom_Hastati,Rom_Velites,Rom_Velites,Rom_Velites,Rom_Velites",
"pun_latium_et_campania_roma",
"corfinium_defenders"
);
-- principal enemy faction gets big reduction in army upkeep to pay for this system
cm:apply_effect_bundle("pun_faction_scripted_reduced_upkeep", "pun_rome", -1);
end;
function Start_Defenses()
--[[
start_defense(
String name for this campaign_defense object,
String defending faction,
String cqi of defending force (if nil it loads from savegame),
Int number of regions player has to own to trigger release,
Table of strings of region names that should trigger release if the player owns them,
opt String message_event to trigger on release
)
returns campaign defense object
]]
cd_karalis = start_defense("Karalis", "pun_rome", Karalis_Defender_ID, 10, Settlements_Close_To_Karalis, "pun_rome_releasing_defenders_1");
cd_tarentum = start_defense("Tarentum", "pun_rome", Tarentum_Defender_ID, 12, Settlements_Close_To_Tarentum);
cd_corfinium = start_defense("Corfinium", "pun_rome", Corfinium_Defender_ID, 13, Settlements_Close_To_Corfinium, "pun_rome_releasing_defenders_2");
cd_rome = start_defense("Rome", "pun_rome", Rome_Defender_ID, 14, Settlements_Close_To_Rome, "pun_rome_releasing_defenders_3");
-- prevent the campaign defense objects from attempting to award upkeep for their armies as the AI is not aware of that system
cd_karalis:set_should_award_upkeep(false);
cd_tarentum:set_should_award_upkeep(false);
cd_corfinium:set_should_award_upkeep(false);
cd_rome:set_should_award_upkeep(false);
end;
function Spawn_Additional_Roman_Forces()
cm:grant_unit("settlement:pun_umbria_et_picenum_pisaurum", "Rom_Principes");
cm:grant_unit("settlement:pun_umbria_et_picenum_pisaurum", "Rom_Principes");
cm:grant_unit("settlement:pun_umbria_et_picenum_pisaurum", "Rom_Triarii");
cm:grant_unit("settlement:pun_umbria_et_picenum_pisaurum", "Rom_Triarii");
cm:grant_unit("settlement:pun_umbria_et_picenum_pisaurum", "Rom_Velites");
cm:grant_unit("settlement:pun_sicilia_lilybaeum", "Rom_Principes");
cm:grant_unit("settlement:pun_sicilia_lilybaeum", "Rom_Principes");
cm:grant_unit("settlement:pun_sicilia_lilybaeum", "Rom_Principes");
cm:grant_unit("settlement:pun_sicilia_lilybaeum", "Rom_Triarii");
cm:grant_unit("settlement:pun_sicilia_lilybaeum", "Rom_Triarii");
cm:grant_unit("settlement:pun_sicilia_lilybaeum", "Rom_Velites");
cm:grant_unit("settlement:pun_sicilia_lilybaeum", "Rom_Velites");
cm:grant_unit("settlement:pun_sicilia_lilybaeum", "Rom_Velites");
end;
--
-- Mission Ebro 01
--
local Mission_Ebro_01_X_1 = 236.9;
local Mission_Ebro_01_Y_1 = 286.5;
local Mission_Ebro_01_Z_1 = 0.81;
local Mission_Ebro_01_H_1 = -1.03;
local Mission_Ebro_01_X_2 = 207.1;
local Mission_Ebro_01_Y_2 = 304.3;
local Mission_Ebro_01_Z_2 = 0.8;
local Mission_Ebro_01_H_2 = -1.03;
local Mission_Ebro_01_Pan_Time = 20;
function Zoom_To_Mission_Ebro_01()
dismiss_advice();
-- move camera to revolt
local x, y, z, h = CampaignUI.GetCameraPosition();
-- cache camera position so we can return it afterwards
local zoom_time = 2;
scroll_camera_with_direction(
zoom_time,
{x, y, z, h},
{Mission_Ebro_01_X_1, Mission_Ebro_01_Y_1, Mission_Ebro_01_Z_1, Mission_Ebro_01_H_1}
);
cm:trigger_custom_mission("pun_carthage", "objective_pun_carthage_ebro_1");
progress_on_mission_accepted(function() Mission_Ebro_01_Issued() end, 0);
add_callback(function() Mission_Ebro_01_Pan_1() end, zoom_time, "Mission_Ebro_01");
end;
function Mission_Ebro_01_Pan_1()
local x, y, z, h = CampaignUI.GetCameraPosition();
scroll_camera_with_direction(
Mission_Ebro_01_Pan_Time,
{x, y, z, h},
{Mission_Ebro_01_X_2, Mission_Ebro_01_Y_2, Mission_Ebro_01_Z_2, Mission_Ebro_01_H_2}
);
add_callback(function() Mission_Ebro_01_Pan_2() end, Mission_Ebro_01_Pan_Time + 1, "Mission_Ebro_01");
end;
function Mission_Ebro_01_Pan_2()
local x, y, z, h = CampaignUI.GetCameraPosition();
scroll_camera_with_direction(
Mission_Ebro_01_Pan_Time,
{x, y, z, h},
{Mission_Ebro_01_X_1, Mission_Ebro_01_Y_1, Mission_Ebro_01_Z_1, Mission_Ebro_01_H_1}
);
add_callback(function() Mission_Ebro_01_Pan_1() end, Mission_Ebro_01_Pan_Time + 1, "Mission_Ebro_01");
end;
function Mission_Ebro_01_Issued()
remove_callback("Mission_Ebro_01");
cm:steal_user_input(false);
local x, y, z, h = CampaignUI.GetCameraPosition();
-- return camera to start position
scroll_camera_with_direction(
1,
{x, y, z, h},
{cam_start_x, cam_start_y, cam_start_h, cam_start_r}
);
end;
Правильно ли я понимаю что
[[
start_defense(
String name for this campaign_defense object,
String defending faction,
String cqi of defending force (if nil it loads from savegame),
Int number of regions player has to own to trigger release,
Table of strings of region names that should trigger release if the player owns them,
opt String message_event to trigger on release
)
returns campaign defense object
]]
cd_karalis = start_defense("Karalis", "pun_rome", Karalis_Defender_ID, 10, Settlements_Close_To_Karalis, "pun_rome_releasing_defenders_1");
для активации защитного скрипта в Каралисе за Рим надо чтобы игрок (=Карфаген) владел 10 поселениями в т.ч. примыкающим к Каралису?