Modifier改変 3
タイルの必要条件
水車小屋
米と小麦による食料+1。都市が川に隣接している必要がある。
水車小屋を建設すると
水車小屋のある都市が所有するタイルで、米か小麦のあるタイルは食料が+1される
Modifierの構成
BuildingModifiers
BuildingType
BUILDING_WATER_MILL
ModifierId
WATERMILL_ADDRICEFOOD
Modifiers
ModifierId
WATERMILL_ADDRICEFOOD
ModifierType
MODIFIER_CITY_PLOT_YIELDS_ADJUST_PLOT_YIELD
ModifierArguments
ModifierId
WATERMILL_ADDRICEFOOD
Name
Amount
Value
1
ModifierArguments
ModifierId
WATERMILL_ADDRICEFOOD
Name
YieldType
Value
YIELD_FOOD
SubjectRequirementSetId
RESOURCE_IS_RICE
RequirementSets
RequirementSetId
RESOURCE_IS_RICE
RequirementSetType
REQUIREMENTSET_TEST_ALL
RequirementSetRequirements
RequirementSetId
RESOURCE_IS_RICE
RequirementId
REQUIRES_RICE_IN_PLOT
Requirements
RequirementId
REQUIRES_RICE_IN_PLOT
RequirementType
REQUIREMENT_PLOT_RESOURCE_TYPE_MATCHES
RequirementArguments
RequirementId
REQUIRES_RICE_IN_PLOT
Name
ResourceType
Value
RESOURCE_RICE
BuildingModifiers
BuildingType
BUILDING_WATER_MILL
ModifierId
WATERMILL_ADDWHEATYIELD
Modifiers
ModifierId
WATERMILL_ADDWHEATYIELD
ModifierType
MODIFIER_CITY_PLOT_YIELDS_ADJUST_PLOT_YIELD
ModifierArguments
ModifierId
WATERMILL_ADDWHEATYIELD
Name
Amount
Value
1
ModifierArguments
ModifierId
WATERMILL_ADDWHEATYIELD
Name
YieldType
Value
YIELD_FOOD
SubjectRequirementSetId
RESOURCE_IS_WHEAT
RequirementSets
RequirementSetId
RESOURCE_IS_WHEAT
RequirementSetType
REQUIREMENTSET_TEST_ALL
RequirementSetRequirements
RequirementSetId
RESOURCE_IS_WHEAT
RequirementId
REQUIRES_WHEAT_IN_PLOT
Requirements
RequirementId
REQUIRES_WHEAT_IN_PLOT
RequirementType
REQUIREMENT_PLOT_RESOURCE_TYPE_MATCHES
RequirementArguments
RequirementId
REQUIRES_WHEAT_IN_PLOT
Name
ResourceType
Value
RESOURCE_WHEAT
この構成をツリーで表記すると
-
都市の領土の産出量を調整する
-
調整する産出量:+1
-
基本出力の種類:食料
-
調整するタイルに条件をつける
-
都市の領土の産出量を調整する
-
調整する産出量:+1
-
基本出力の種類:食料
-
調整するタイルに条件をつける
と、なり
水車小屋には米強化と小麦強化の2つのModifierがセットされている
複数Modifierセット
水車小屋には2つのModifierがセットされているが
どちらの効果も「タイルの食料+1」の部分は変わらないので
-
都市の領土の産出量を調整する
-
調整する産出量:+1
-
基本出力の種類:食料
-
調整するタイルに条件をつける
-
以下のいずれかの条件を満たすタイル
-
設置されている資源の種類が以下に一致するタイル
-
設置されている資源の種類が以下に一致するタイル
上のように1つのModifierでまとめた構成でも同じ性能になるが
Modifier改変の観点から見ると
米の食料+1 / 小麦の文化力+1
または
米の食料+2 / 小麦の食料+1
のようにする改変は、2つのModifierに分かれている方がやりやすくなる
必要条件の改変
タイルに資源「米」があることを指定しているREQUIRES_RICE_IN_PLOTの部分を
UPDATE RequirementArguments /* RequirementArguments で更新 */
SET Value = 'RESOURCE_BANANAS' /* Value の内容を RESOURCE_BANANAS に */
WHERE RequirementId = 'REQUIRES_RICE_IN_PLOT' /* RequirementId が REQUIRES_RICE_IN_PLOT の箇所を */
; /* 終了 */
と改変すると、タイルの条件指定が資源「バナナ」があるになる
Requirements
RequirementId
REQUIRES_RICE_IN_PLOT
RequirementType
REQUIREMENT_PLOT_RESOURCE_TYPE_MATCHES
(条件:タイルにある資源が一致)
RequirementArguments
RequirementId
REQUIRES_RICE_IN_PLOT
Name
ResourceType
Value
RESOURCE_RICE → RESOURCE_BANANAS
(資源の種類:バナナ)
-
この改変ではRequirementIdを変更していない
-
RequirementIdはただの識別IDなので、名称にRICEと書かれても動作に支障はない
-
ただ識別はとてもしにくいので、編集の際にややこしくなる
-
RequirementIdは他でも使い回してることが多いので
他で使われていた場合、そのModifierも効果が変わってしまう
なのでなるべく<RequirementArguments>の中身だけ変更したりせず
既存の<Requirements>から探してくるか、新しく作成した方が良い
新しく作成の場合
効果差し替えと同じようなやり方になる
INSERT INTO Modifiers (ModifierId, ModifierType, SubjectRequirementSetId)
VALUES ('WATERMILL_ADDBANANASFOOD', 'MODIFIER_CITY_PLOT_YIELDS_ADJUST_PLOT_YIELD', 'PLOT_HAS_BANANAS_REQUIREMENTS')
;
INSERT INTO ModifierArguments (ModifierId, Name, Value)
VALUES
('WATERMILL_ADDBANANASFOOD', 'Amount', 1)
, ('WATERMILL_ADDBANANASFOOD', 'YieldType', 'YIELD_FOOD')
;
INSERT INTO RequirementSets (RequirementSetId, RequirementSetType)
VALUES ('PLOT_HAS_BANANAS_REQUIREMENTS', 'REQUIREMENTSET_TEST_ALL')
;
INSERT INTO RequirementSetRequirements (RequirementSetId, RequirementId)
VALUES ('PLOT_HAS_BANANAS_REQUIREMENTS', 'REQUIRES_PLOT_HAS_BANANAS')
;
INSERT INTO Requirements (RequirementId, RequirementType)
VALUES ('REQUIRES_PLOT_HAS_BANANAS', 'REQUIREMENT_PLOT_RESOURCE_TYPE_MATCHES')
;
INSERT INTO RequirementArguments (RequirementId, Name, Value)
VALUES ('REQUIRES_PLOT_HAS_BANANAS', 'ResourceType', 'RESOURCE_BANANAS')
;
UPDATE BuildingModifiers
SET ModifierId = 'WATERMILL_ADDBANANASFOOD'
WHERE ModifierId = 'WATERMILL_ADDRICEFOOD'
;
BuildingModifiers
BuildingType
BUILDING_WATER_MILL
ModifierId
WATERMILL_ADDRICEFOOD
WATERMILL_ADDBANANASFOOD
Modifiers
ModifierId
WATERMILL_ADDBANANASFOOD
ModifierType
MODIFIER_CITY_PLOT_YIELDS_ADJUST_PLOT_YIELD
ModifierArguments
ModifierId
WATERMILL_ADDBANANASFOOD
Name
Amount
Value
1
ModifierArguments
ModifierId
WATERMILL_ADDBANANASFOOD
Name
YieldType
Value
YIELD_FOOD
SubjectRequirementSetId
PLOT_HAS_BANANAS_REQUIREMENTS
RequirementSets
RequirementSetId
PLOT_HAS_BANANAS_REQUIREMENTS
RequirementSetType
REQUIREMENTSET_TEST_ALL
RequirementSetRequirements
RequirementSetId
PLOT_HAS_BANANAS_REQUIREMENTS
RequirementId
REQUIRES_PLOT_HAS_BANANAS
Requirements
RequirementId
REQUIRES_PLOT_HAS_BANANAS
RequirementType
REQUIREMENT_PLOT_RESOURCE_TYPE_MATCHES
RequirementArguments
RequirementId
REQUIRES_PLOT_HAS_BANANAS
Name
ResourceType
Value
RESOURCE_BANANAS