Günlük: Stellaris - Kodlama Değişiklikleri
#1
diarystl.png
Stellaris günlüklerinde bu hafta kodlamada yapılan değişiklerden bahsediliyor.

https://forum.paradoxplaza.com/forum/ind...2.1130525/ :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.

Kod:
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.

Kod:
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
       }      
   }
}

Kod:
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
       }
   }
}

Kod:
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ığı.

Kod:
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.

Kod:
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
       }
   }
}

İş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.

Kod:
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:

Kod:
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.

Kod:
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
   }
}

Kod:
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.
[+] 2 üye Ragnvaldr nickli üyenin bu iletisini beğendi.
Ara
Cevapla
 




Konuyu Okuyanlar: 1 Ziyaretçi



Strategyturk Forumları

Strategyturk Forumları tüm Türk stratejiseverler için büyük ve kaliteli bir platform olma amacı güder. Forum içerisinde çok sayıda strateji oyunu için bölüm ve bu bölümlerde haber konuları, rehberler, mod tanıtımları, multiplayer etkinlikleri ve üye paylaşımları için alanlar yer alır.