Stellaris günlüklerinde bu hafta kodlamada yapılan değişiklerden bahsediliyor.
Merhabalar!
Bugün 2.2 Le Guin yaması ile gelecek kodlama değişikliklerinden bahsedeceğiz. Çok fazla teknik detaya gireceğimiz için istiyorsanız bu günlüğü es geçebilirsiniz.
Değişen her şeyi gösteremem, bu nedenle sadece önemlilerinden bahsedeceğim.
Ufak tefek olanlar
- Ardışık if/else_if/else sentaksları artık tetiklemelere ve etkilere de etki ediyor. Modunuzu tekrar gözden geçirin, eski sentakslar sorun çıkarmasa bile istenmeyen şeylere yol açabilir.
- Kaynaklarla ilgili değiştirilemeyen şekilde kodlanmış tetiklemeler ve etkiler neredeyse tamamen kaldırıldı, yerlerine her türlü kaynağı alabilenler getirildi. Örneğin “energy >= 200” yerine artık “resource_stockpile_compare = { resource = energy value >= 200 }” veya “add_resource = { my_mod_resource = 10 }” gibi şeyler kullanacaksınız.
- Çoğu yeni “ekonomi birimi” otomatik olarak yaratılan etkilerle geliyor. Eğer yeni bir Bölge eklerseniz, bir gezegende o türden bölgelerin sayısını arttıran bir etki olacak. Yeni bir iş yaratırsanız da aynı şekilde olacak. Gördüğünüz zaman daha iyi anlayacaksınız.
- Rastgele olan (random_*) etkilerin ağırlıkları olması. Baya eski bir koddu ve bazılarınız daha önceden bulmuş olabilir. Neredeyse tüm random_* etkileri bazı seçeneklerin daha çok seçilmesi konusunda ayarlanabilir. Ağırlık için bir taban ve ekleyen/çarpan etkiler gerekir.
random_playable_country = { limit = { # has comms with 16 or more empires count_country = { limit = { is_country_type = default has_communications = prev } count >= 16 } } weights = { base = 1 modifier = { # strongly weighted towards democracies add = 6 has_authority = auth_democratic } modifier = { # twice as likely for players mult = 2 is_ai = no } } country_event = { id = my_mod.1 } }Gezegen & Ekonomi Değişiklikleri
Çoğu içerik tasarımcısının dediği gibi script (yazı betiği) öğrenmenin en iyi yolu script okumaktır. Bu yüzden örnekleri bol tutacağım.
Gezegen Özellikleri
common\deposits\
Eski maden yatağı kavramı 2.2’de değiştirilmesine rağmen kodlarda hala maden yatağı (deposit) olarak geçiyor. Eski maden yataklarından daha esnekler ve tile sistemine bağlı değiller. Örneğin gezegenin iklimi değiştirildiğinde (terraform) yataklar da değişebilir. İnşa engelleyen şeyler temizlendiğinde de bazı etkilere sahip olabilir.d_rich_mountain = { is_for_colonizeable = yes use_for_min_max_adjustments = yes category = deposit_cat_minerals use_weights_for_terraforming_swap_types = yes should_swap_deposit_on_terraforming = yes terraforming_swap_types = { d_submerged_ore_veins } planet_modifier = { district_mining_max = 3 } potential = { OR = { is_planet_class = pc_continental is_planet_class = pc_desert is_planet_class = pc_alpine is_planet_class = pc_arctic is_planet_class = pc_arid is_planet_class = pc_tundra is_planet_class = pc_gaia } } drop_weight = { weight = @low modifier = { factor = @planet_type_bonus is_cold = yes } } }d_minerals_2 = { resources = { category = orbital_mining_deposits produces = { minerals = 2 } } station = shipclass_mining_station is_for_colonizeable = no potential = { OR = { is_planet_class = pc_asteroid is_planet_class = pc_molten is_planet_class = pc_toxic is_planet_class = pc_frozen is_planet_class = pc_barren is_planet_class = pc_barren_cold is_planet_class = pc_broken is_planet_class = pc_shattered } } drop_weight = { weight = 5 modifier = { factor = 0.5 OR = { is_planet_class = pc_molten is_planet_class = pc_toxic is_planet_class = pc_frozen } } modifier = { factor = 2.0 is_asteroid = yes } } }d_collapsed_burrows = { icon = d_deep_sinkhole time = 120 is_for_colonizeable = yes category = deposit_cat_blockers potential = { always = no } # added by event planet_modifier = { planet_max_districts_add = -1 } on_cleared = { create_pop = { species = owner } } resources = { category = deposit_blockers cost = { energy = 300 } } }Bölgeler
common\districts\
Daha önceki günlüklerde de bahsettiğimiz gibi Bölgeler eski “tile” sisteminin yerine geçiyor. Bunun kodları ise inşaat süresi, nerede inşa edilebileceği, başka gezegen türlerinde neye dönüştürülebileceği (makine dünyaları vs), inşaat ve bakım masrafı, gezegene olan etkileri ve yapay zekanın öncelik verme ağırlığı.district_mining = { base_buildtime = 240 min_for_deposits_on_planet = 1 max_for_deposits_on_planet = 15 show_on_uncolonized = { habitable_structure = no NOR = { is_planet_class = pc_machine is_planet_class = pc_hive is_planet_class = pc_city } } potential = { habitable_structure = no NOT = { is_planet_class = pc_machine is_planet_class = pc_hive is_planet_class = pc_city } } allow = { NOT = { has_modifier = resort_colony } } conversion_ratio = 1 convert_to = { district_mining_uncapped } resources = { category = planet_districts cost = { minerals = @base_cost } upkeep = { energy = 1 } } planet_modifier = { planet_housing_add = 2 } triggered_planet_modifier = { potential = { exists = owner owner = { has_valid_civic = civic_agrarian_idyll } } modifier = { planet_housing_add = 1 } } triggered_planet_modifier = { potential = { exists = owner owner = { is_hive_empire = yes } } modifier = { job_mining_drone_add = 3 } } triggered_planet_modifier = { potential = { exists = owner owner = { is_machine_empire = yes } } modifier = { job_mining_drone_add = 2 } } triggered_planet_modifier = { potential = { exists = owner owner = { is_gestalt = no is_fallen_empire_spiritualist = no } } modifier = { job_miner_add = 2 } } triggered_planet_modifier = { potential = { exists = owner owner = { is_fallen_empire_spiritualist = yes } } modifier = { job_fe_acolyte_mine_add = 2 } } triggered_desc = { trigger = { exists = owner owner = { is_gestalt = yes } } text = job_mining_drone_effect_desc } triggered_desc = { trigger = { exists = owner owner = { is_gestalt = no is_fallen_empire_spiritualist = no } } text = job_miner_effect_desc } triggered_desc = { trigger = { exists = owner owner = { is_fallen_empire_spiritualist = yes } } text = job_fe_acolyte_mine_effect_desc } prerequisites = { tech_mechanized_mining } ai_weight = { weight = 1 modifier = { factor = 3 owner = { has_monthly_income = { resource = minerals value < 0 } } } modifier = { factor = 2 free_housing < 0 } modifier = { factor = 3 any_owned_pop = { is_unemployed = yes } } # No one to work it anyway modifier = { factor = 0 free_housing > 0 NOT = { any_owned_pop = { is_unemployed = yes } } } } ai_resource_production = { minerals = 1 trigger = { always = yes } } }Binalar
common\building\
Binalar çoğunlukla aynı ama yukarıda da görebileceğiniz bazı yeni işlevselliğe sahipler. Örneğin “triggered_planet_modifier” binayı kimin kontrol ettiğine göre normal iş, dron işi veya fabrika işleri verebilir. İnşa maliyeti, bakım masrafı ve kaynak üretimi “resources={}” altında. Foundry ise sadece iş ekliyor herhangi bir kaynak üretmiyor.building_foundry_2 = { base_buildtime = 480 can_build = no category = manufacturing allow = { has_upgraded_capital = yes } triggered_planet_modifier = { potential = { exists = owner owner = { is_hive_empire = yes } } modifier = { job_alloy_drone_add = 5 } } triggered_planet_modifier = { potential = { exists = owner owner = { is_machine_empire = yes } } modifier = { job_fabricator_add = 5 } } triggered_planet_modifier = { potential = { exists = owner owner = { is_regular_empire = yes } } modifier = { job_foundry_add = 5 } } resources = { category = planet_buildings cost = { minerals = 600 volatile_motes = 50 } upkeep = { energy = 4 volatile_motes = 1 } } upgrades = { building_foundry_3 } prerequisites = { tech_alloys_1 } triggered_desc = { trigger = { exists = owner owner = { is_regular_empire = yes } } text = job_foundry_effect_desc } triggered_desc = { trigger = { exists = owner owner = { is_hive_empire = yes } } text = job_alloy_drone_effect_desc } triggered_desc = { trigger = { exists = owner owner = { is_machine_empire = yes } } text = job_fabricator_effect_desc } ai_weight = { weight = 1 modifier = { factor = 4 owner = { has_monthly_income = { resource = alloys value < 15 } } } } ai_resource_production = { alloys = 1 trigger = { always = yes } } }[/code] İşler common\pop_jobs\ Binaların eklediği işler ise diğerlerinden tamamen ayrı ama yine de tanıdık bir sentakste yazıldı. Enforcer işi normalde 1 Unity üretiyor, Polis Devletiyseniz ise 2. Ayrıca Anti-Crime Campaign etkisi varsa bakım masrafı 2 enerji daha fazla ama aynı şekilde suçu daha fazla düşürüyor. [code]enforcer = { category = specialist condition_string = SPECIALIST_JOB_TRIGGER building_icon = building_precinct_house clothes_texture_index = 5 possible = { specialist_job_check_trigger = yes } resources = { category = planet_enforcers produces = { unity = 1 } produces = { trigger = { owner = { has_valid_civic = civic_police_state } } unity = 1 } upkeep = { trigger = { planet = { has_modifier = anticrime_campaign } } energy = 2 } } pop_modifier = { pop_defense_armies_add = 2 } planet_modifier = { planet_crime_add = -25 } triggered_planet_modifier = { potential = { owner = { has_non_swapped_tradition = tr_domination_judgment_corps } } modifier = { planet_crime_add = -5 } } triggered_planet_modifier = { potential = { planet = { has_modifier = anticrime_campaign } } modifier = { planet_crime_add = -10 } } weight = { weight = @specialist_job_weight modifier = { factor = 0.2 has_citizenship_rights = no NOT = { has_trait = trait_mechanical } } modifier = { factor = 2 has_trait = trait_resilient } modifier = { factor = 2 has_trait = trait_very_strong } modifier = { factor = 1.5 has_trait = trait_strong } modifier = { factor = 10 is_enslaved = yes has_slavery_type = { type = slavery_military } } modifier = { factor = 0.50 has_trait = trait_weak } modifier = { factor = 0.1 can_take_servant_job = yes } modifier = { factor = 1.5 has_job = enforcer } } }Sosyal Tabakalar
Yukarıdaki Enforcer’ın üyesi olduğu Uzmanlar gibi tabakalar (veya sınıflar) da aynı şekilde çalışır. Kaynak tüketimi, üretimi, etkileri ve ayarları vardır. Gestalt Bilinç imparatorlukları için olan simple_drone tabakası en basit örnek olabilir:simple_drone = { rank = 0 clothes_texture_index = 2 # This is called whenever a Pop is created, moved to a different planet, or gets a new owner assign_to_pop = { exists = owner owner = { is_gestalt = yes } } weight = { weight = 1 } pop_modifier = { pop_housing_usage_base = 1 pop_amenities_usage_no_happiness_base = 1 } # scope: pop to be resettled allow_resettlement = { always = yes } resettlement_cost = { energy = 100 } unemployment_resources = { category = unemployment_resources # Standby Mode Crime event upkeep = { trigger = { planet = { has_modifier = standby_mode } } energy = 2 } } resources = { category = pop_category_drones upkeep = { trigger = { is_organic_species = yes } food = @living_standard_food_normal } upkeep = { trigger = { is_robotic_species = yes } energy = @living_standard_energy_normal } } }Kaynaklar
Kaynaklar artık tamamen kodlanabilir yani oyuna kendi kaynaklarınızı kolayca ekleyebilirsiniz. Bu kodlar biraz değişti, pazarda ticaret edilebilirliği, eksiye düşerseniz ne olur ve yapay zeka önceliği gibi şeyler de içeriyor. Stratejik kaynaklar da bu veri tabanında yer alıyor.food = { tradable = yes market_amount = 100 market_price = 100 max = 10000 deficit_modifier = food_deficit #found in static modifiers ai_weight = { weight = 1 } ai_wants = { base = 300 } }[code] [code]sr_dark_matter = { tradable = yes market_amount = 5 market_price = 100 max = 10000 prerequisites = { "tech_mine_dark_matter" } visibility_prerequisite = { always = yes } ai_weight = { weight = 100 } }Hepimiz 2.2 ve MegaCorp için son rötuşları yapıyoruz, gelecek hafta 2.2 yama notlarını yayınlayacağız.