【鋼四模組報】變數系統應用全解

【鋼四模組報】變數系統應用全解

來自專欄鋼鐵雄心四Mod製作相關4 人贊了文章

變數系統是1.5版本新加入的強力系統。它將允許改派們存儲一些數字(或者說數量)來用於效果與條件。


應用範圍

有四種可以應用變數的作用域:

* Countries - 國家* States - 省份* Unit Leaders - 將領* Global - 全球

每個國家,省份與將領都擁有自己的變數池。「全球」有點獨特,它存儲的變數是用於全球的,而非具體到某個特定國家。


調用變數

在種種效果與條件中,您可以通過為變數命名以調用它們。變數名除少數特殊字元外不區分大小寫,您可以隨意命名自己的變數。儘管為了一致性和未來校對的方便,我們還是建議避免使用下劃線"_"以外的特殊字元或是數字。

默認情況下,您可以調用當前作用域下的變數。而如果您想去調用某一特定作用域下的變數:

ENG.var_name42.var_nameglobal.var_nameROOT.var_nameFROM.FROM.var_nameevent_target:event_target_name.var_nameglobal_event_target:event_target_name.var_name

您可以使用國家代碼來調用目標國家的變數。以上例子中調用了英國的。

您可以使用省份id來調用目標省份的變數。以上例子中調用了42號省份的。

您可以通過"global"來調用全球變數。

您可以使用諸如"ROOT""PREV"或是"FROM"等語句來調用不同的作用域,並且您也可以把它們組合起來用。

您可以通過"event_target:event_target_name"調用Event Target下的變數

變數默認情況下是0,當您調用一個不存在的變數,數值會判定為0,您可以使用以下方式來調整當前語句中的默認值:

var_name?123

當您使用這種方式調用變數,默認值便會是123。


相關效果語句

有以下效果語句可以使用

  • set_variable

set_variable = { var = var_name value = 123}set_variable = { var = var_name value = var_name_2}#短版set_variable = { var_name = var_name_2 }

第一段演示了將變數設置為具體數值,第二段演示了將變數設置為某一變數的數值,第三段演示了一種快捷寫法。

不要嘗試如下做法:

set_variable = { 1 = 2 }

  • clear_variable

clear_variable = var_name

這樣會清除這樣一個變數,當變數被清除後,它便不再存在。

  • 加減乘除

add_to_variable#加subtract_from_variable#減multiply_variable#乘divide_variable#除

使用方式均與"set_variable"相似

add_to_variable = { var = var_name value = 123}add_to_variable = { var = var_name value = var_name_2}#短版add_to_variable = { var_name = var_name_2 }

不要除以零,真的。

  • clamp_variable

clamp_variable = { var = var_name min = var_name_2 max = var_name_3}

將會把變數限定在這一範圍里,換句話說,當該變數小於變數2時,會將該變數設置為變數2的值,當該變數大於變數3時,會將該變數設置為變數3的值,在兩者之間時則保持不變。而且,您隨時都可以使用具體數值而非必須是變數。

  • round_variable

round_variable = var_name

取整,換句話說,這會把當前變數設置為最近的整數。(五舍六入)


相關條件語句

  • check_variable

check_variable = { var = var_name value = var_name_2 compare = less_than}

根據"compare"中設定的比法,比較變數與目標值的大小。

compare可用語句列表:

less_than#小於less_than_or_equals#小於等於greater_than#大於greater_than_or_equals#大於等於equals#相等not_equals#不等

您也可以不寫"compare",這種情況下會進行"大於或等於"的比較。

同時還有一種快捷寫法:

check_variable = { var_name = var_name_2 }check_variable = { var_name < var_name_2 }check_variable = { var_name > var_name_2 }

不要嘗試其他比較方法了,這種寫法下只有這三種。

  • has_variable

has_variable = var_name

這會檢測目標作用域下是否存在某一變數。


動態變數名

ENG = { TUR = { set_variable = { var_name@PREV = 5 } }}

這樣會為TUR設置一個名為"var_name@ENG"的變數。

類似的寫法還有:

set_variable = { var_name@PREV.PREV = 5 }set_variable = { var_name@GER = 5 }set_variable = { var_name@42 = 5 }


替代Event_target系統

set_variable = { var_name = POL.id }var:var_name = { set_variable = { var_name_2 = 125 }}

變數系統可以設置一個指代國家或省份的變數,並且可以通過類似event_target:event_target_name的形式調用。

在這裡設置id時同樣可以使用PREV,FROM或是ROOT等語句。

儘管可以用於國家或省份,但是將領可就缺席了,在這個系統里他們根本是後媽養的。


變數與本地化

您可以通過如下方式在本地化文件中調用變數:

[?var_name]

同時您還可以通過如下方式調整您的變數顯示的方式:

§R[?var_name]§!

這樣會使當前變數顯示為紅色。

具體關於本地化修飾詳見相關教程。


臨時變數

臨時變數是一種允許您在當前一段效果與條件中存儲變數的功能,當效果與條件執行完畢後該變數將刪除。這會為複雜計算創造便利。

臨時變數的使用方法與變數相似:

set_temp_variable = { temp1 = a }multiply_temp_variable = { temp1 = 2 }set_temp_variable = { temp2 = b }divide_temp_variable = { temp2 = 3 }subtract_from_temp_variable = { temp1 = temp2 }set_variable = { c = temp1 }

範例中進行了"c = a * 2 - b / 3"的運算。

全部相關語句:

set_temp_variableadd_to_temp_variablesubtract_from_temp_variablemultiply_temp_variabledivide_temp_variableclamp_temp_variable

同時注意,假如您在事件里使用了if語句,那麼這段語句中條件里使用的臨時變數仍然可以在效果里被調用,其他類似情況下同樣如此。


  • 隨機變數

您可以使用如下方式來將一個變數設置為隨機值:

set_variable = { var_name = random }

這會使該變數被隨機設置為0-1之間的小數。

當條件語句應用於AI相關的語句時(如ai_will_do),請務必使用"ai_random"而非"random"


  • 內核變數

有很多內核變數可供調用,它們只能被讀取而不能被運算。

調用方式就像調用任何普通的變數一樣:

set_variable = { var_name = political_power }

這會使名為"var_name"的變數設置為擁有的政治點數。

全部可用的內核變數有:

#國家ai_irrationalityai_wants_divisionsalliance_naval_strength_ratioalliance_strength_ratioamount_manpower_in_deployment_queueamount_research_slotsany_war_scorecasualtiescommand_powercommand_power_dailycompare_autonomy_progress_ratiodays_mission_timeout (days_mission_timeout@GER_mefo_bills_mission)enemies_naval_strength_ratioenemies_strength_ratiohas_added_tension_amounthas_political_powerhas_stabilityhas_war_supportland_doctrine_levelmanpowermanpower_per_military_factorymax_available_manpowermax_manpowermodifier (modifier@stability_weekly)num_controlled_statesnum_core_statesnum_divisionsnum_faction_membersnum_occupied_statesnum_of_available_civilian_factoriesnum_of_available_military_factoriesnum_of_available_naval_factoriesnum_of_civilian_factoriesnum_of_civilian_factories_available_for_projectsnum_of_controlled_statesnum_of_factoriesnum_of_military_factoriesnum_of_naval_factoriesnum_of_nukesnum_owned_controlled_statesnum_owned_statesnum_subjectsnum_tech_sharing_groupsopinion (opinion@country)original_research_slotsparty_popularity (party_popularity@neutrality)political_powerpolitical_power_dailypolitical_power_growthresource (resource@steel)resource_consumed (resource_consumed@steel)resource_exported (resource_exported@steel)resource_imported (resource_imported@steel)resource_produced (resource_produced@steel)stabilitysurrender_progress#省份modifier (modifier@local_building_slots)industrial_complex_levelresistancearms_factory_levelinfrastructure_levelstate_populationstate_strategic_valuestate_and_terrain_strategic_value#將領attack_levelattack_skill_levelaverage_statsavg_defensive_combat_statusavg_offensive_combat_statusavg_unit_planning_ratioavg_units_acclimationdefense_leveldefense_skill_levelhas_orders_groupleader_modifierlogistics_levellogistics_skill_levelnum_armorednum_artillerynum_assigned_traitsnum_basic_traitsnum_battle_plansnum_cavalrynum_infantrynum_max_traitsnum_mechanizednum_motorizednum_personality_traitsnum_rocketnum_specialnum_status_traitsnum_terrain_traitsnum_traitsnum_unitsnum_units_crossing_rivernum_units_defensive_combatsnum_units_defensive_combats_onnum_units_in_combatnum_units_offensive_combatsnum_units_offensive_combats_againstnum_units_on_climateplanning_levelplanning_skill_levelskillskill_levelsum_unit_terrain_modifierunit_modifierunit_ratio_ready_for_plan#全球difficultythreat

另外有一種說法是大部分條件語句都可以直接作為內核變數調用,沒有經過測試。


Debug

在進行測試時有這些控制台語句可供使用

set_var var_name 1get_var var_namelist_varslist_vars TUR

同時運行如下效果語句可以按要求把數值錄入到日誌文件中:

print_variables = { file = log_file text = header_text append = yes print_global = yes var_list = { a b c } #optional}


以上就是所有內容了。


推薦閱讀:

TAG:遊戲 | 鋼鐵雄心4遊戲 |