建築修改

建築是維多利亞3中提供生產、行政、軍事單位等的主體,不同的建築有著不同的產出與消耗,本頁面旨在為各模組製作者提供指引。

結構組成

首先,我們要了解一個建築由哪些部分組成,不同的建築其實內部的結構都是一樣,只是相關的代碼不同其消耗與產出也不同。Documents/Paradox Interactive/Victoria 3/mods/mod名称/common/

  1. 建築組(building groups),這是一個建築的基礎,建築沒有對應的建築組便不會在遊戲中正確的出現。建築組的文件路徑為common/building_groups,此為建築組文件所在的文件夾,不同類型的建築有其所屬的建築組,不同的建築組對應著製造業、農業、基礎設施等,而不同的建築組其所擁有的效果也不同,在官方的建築組文件里也有相關代碼的說明。
  2. 建築(buildings),這是建築的本體,文件路徑為common/buildings,根據建築所屬的建築組的不同,可分為製造業、農業、種植園、政府建築、軍事建築等。
  3. 生產方式組(production method groups),每一個建築均包含若干生產方式組,文件路徑為common/production_method_groups,生產方式組是單或多種生產方式的集合。
  4. 生產方式(production methods),建築的消耗與產出由生產方式而決定,文件路徑為common/production_methods,同時建築的相關修正也由生產方式所提供。
  5. 圖標(icons),建築與生產方式都有對應的圖標來顯示在界面上。
  6. 模型,該建築顯示在地圖上的模型,如工廠、兵營等,可為空。

建築組

簡易示例

我們以一個簡單的建築組來示例,首先,我們要在common/building_groups里創建一個帶BOM的UTF-8格式的txt文件,名稱為new_building_groups(new_bg等也可以)

bg_new = {   #这是建筑组的名称,格式必须为bg_xxxxxx
	category = urban    #这是建筑组所属的类别,urban(城市)、rural(乡村)、development(开发)
	always_possible = yes    #这是建筑组所属建筑是否能无限制修建,no即为有限制的修建(资源、等级限制等)
	economy_of_scale = yes    #这是建筑每级是否能获得吞吐量修正(自给建筑除外)
	cash_reserves_max = 25000    #建筑最高的储备金
	should_auto_expand = { 
		default_auto_expand_rule = yes    #自动扩建的条件
	}
	economy_of_scale_ai_factor = 2.0    #这是ai考虑吞吐量影响的因素数值
}

此為主組的示例,建築組分為擁有完整條件的主建築組與附屬主建築組的子建築組,以下為子組的示例:

bg_new_industry = {
	parent_group = bg_new    #附属于哪一个主建筑组,可直接套游戏原有的建筑组
	lens = light_industry    #该建筑组内的建筑分属什么类型的建筑,此外还有重工业(heavy_industry)、农业(agriculture)等,如写在主建筑里则为一个大类(比如农业就包括了所有的农田)
	urbanization = 20    #每级城市化率
	infrastructure_usage_per_level = 2    #建筑每级所使用的基础设施值
}

一個主建築組及其子建築組,合起來就是一個完整的建築組,雖然建築可以分屬在主建築組內,但是多個子建築組能分開對應不同的建築類型,如輕工業與重工業分屬在製造業內,製造業建築組的條件屬性均可應用輕重工業,如果只是新建一個子建築組,那就可以直接附屬在遊戲原主建築組內。

官方建築組效果代碼一覽

以下說明基於百度翻譯與個人校對

  • parent_group = parent_group_key 如果設置了主組,則該建築組則會被視為指定建築組的子組,默認無。
  • always_possible = yes/no 如果為是,則該建築組內的建築始終能無視所在省份的資源限制,默認否。
  • economy_of_scale = yes/no 如果為是,則任何非自給建築或該組的子組的建築將會獲得每級大於1的規模經濟吞吐量修正。默認否。
  • is_subsistence = yes/no 如果為是,則該建築組內的建築被視為符合特殊規則的自給建築,默認否。
  • default_building = building_type_key 除非該省份指定其它建築類型,否則指定的默認建築類型將會建造,默認無。
  • lens = lens_key 如果指定,則確定此組中的透鏡建築將會分類,默認無。
  • auto_place_buildings = yes/no 是否自動放置建築
  • capped_by_resources = yes/no 是否受限於資源
  • discoverable_resource = yes/no 是否為可發現資源
  • depletable_resource = yes/no 是否為可耗盡資源
  • can_use_slaves = yes/no 默認為否,設置為是將為所包含的建築與建築組啟用奴隸。
  • land_usage = urban/rural 建築使用的省份資源類型,城市=城市化,農村=耕地。默認無省份資源使用情況,如果未指定,將返回在主建築組樹中找到的第一個非默認土地使用類型。
  • cash_reserves_max = number 該組建築的現金儲備可存入的英鎊最高金額(每級)。如果未指定或設置為0,則將使用主組中的值,默認值0
  • inheritable_construction =  yes/no 如果為是,這個建築群的建築將在國家易手或分裂國家合併後倖存下來。
  • stateregion_max_level = yes/no 如果是,則此組中具有has_max_level屬性的任何建築類型都將考慮其對省份區域而非省份級別的級別限制。
  • urbanization = number 該組建築每級提供的城市化數值。
  • should_auto_expand = trigger 如果啟用了自動擴展,則該組中的建築應在何種條件下自動擴展(在更具體的組或建築類型覆蓋上觸發)。如果該觸發器有任何內容,則遊戲將認為該建築可能是自動擴展的,因此不要在此處寫入無法計算為真的觸發器。
  • hiring_rate = X 一周內建築可以僱傭的最大人員數,(默認NDefines::NEeconomy::HIRING_RATE)
  • proportionality_limit = X 建築對人群類型不成比例的容忍度有多高,默認(NDefines::NEeconomy::EMPLOYMENT_PROPORTIONALITY_LIMIT)
  • hires_unemployed_only = yes 如果為是,該組建築只能從失業池中僱傭,默認否。

建築

現在,讓我們在common/buildings里創建一個帶BOM的UTF-8格式的txt文件,名稱為隨意,以下為簡單示範。

new_building = {   #这是建筑的名称
	building_group = bg_new_industry    #这是建筑所属的建筑组
	texture = "gfx/interface/icons/building_icons/new_industry.dds"    #这是建筑所用的图标路径,无则会使用默认占位符(恐怖笑脸)
	city_type = city    #这是建筑所属的城市类型,有则要在城市类型里添加模型路径,无则不用
	levels_per_mesh = 5    #建筑多少级在地图上生成一个模型
	unlocking_technologies = {    #由什么科技解锁
		manufacturies
	}
	production_method_groups = {    #该建筑的包含什么生产方式组
		pmg_new_default
		pmg_automation_new_building
		pmg_ownership_capital_new_building
	}
	required_construction = construction_cost_high    #修建所需的建造力花费条件,游戏文件里的common\script_values\building_values.txt有所有的花费数值
	ai_value = 2000    #这是ai修建该建筑的优先度
	possible = {    #不分私人与政府建造部门的限制条件
		owner = { is_player = yes }    #所有者为玩家操作
		error_check = {    #条件检查,该条件为与海相邻,无则不能建设
			severity = fail
			is_sea_adjacent = yes
		}
	}
#################
	can_build_government = {    #如需分开政府与私人建造部门则按照这个样式来写(来自福寿膏种植园)
		error_check = {
			severity = fail
			owner = { NOT = { is_banning_goods = g:opium } }    #该条件为所有者无商品(福寿膏)禁止
		}
	}
	can_build_private = {
		error_check = {
			severity = fail
			owner = { NOT = { is_banning_goods = g:opium } }
		}
	}
	expandable = no    #这是是否可扩大与缩小规模
	downsizeable = no
}

現在一個建築已經弄好了,下一步就是設置該建築的生產方式組與其包含的生產方式。

模組製作指引