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