Modifierサンプル

近郊部の周囲にゴールド

性能

「近郊部を建設すると、近郊部に隣接するタイルにゴールド+2。」
を文明の特性に追加

sql

INSERT INTO Types (Type, Kind)
VALUES ('MODIFIER_PLAYER_DISTRICTS_ATTACH_MODIFIER', 'KIND_MODIFIER')
;
INSERT OR IGNORE INTO DynamicModifiers (ModifierType, CollectionType, EffectType)
VALUES ('MODIFIER_PLAYER_DISTRICTS_ATTACH_MODIFIER', 'COLLECTION_PLAYER_DISTRICTS', 'EFFECT_ATTACH_MODIFIER')
;
/* Modifier */
INSERT INTO Modifiers (ModifierId, ModifierType, SubjectRequirementSetId, SubjectStackLimit)
VALUES
	('GOLD_ADJACENT_TO_NEIGHBORHOOD', 'MODIFIER_PLAYER_DISTRICTS_ATTACH_MODIFIER', 'DISTRICT_IS_NEIGHBORHOOD', NULL)

,	('GOLD_ADJACENT_TO_NEIGHBORHOOD_MODIFIER', 'MODIFIER_PLAYER_ADJUST_PLOT_YIELD', 'PLOT_IS_ADJACENT_TO_NEIGHBORHOOD', 1)
;
INSERT INTO ModifierArguments (ModifierId, Name, Value)
VALUES
	('GOLD_ADJACENT_TO_NEIGHBORHOOD', 'ModifierId', 'GOLD_ADJACENT_TO_NEIGHBORHOOD_MODIFIER')

,	('GOLD_ADJACENT_TO_NEIGHBORHOOD_MODIFIER', 'Amount', 2)
,	('GOLD_ADJACENT_TO_NEIGHBORHOOD_MODIFIER', 'YieldType', 'YIELD_GOLD')
;
/* Requirements */
INSERT INTO RequirementSets (RequirementSetId, RequirementSetType)
VALUES ('PLOT_IS_ADJACENT_TO_NEIGHBORHOOD', 'REQUIREMENTSET_TEST_ALL')
;
INSERT INTO RequirementSetRequirements (RequirementSetId, RequirementId)
VALUES ('PLOT_IS_ADJACENT_TO_NEIGHBORHOOD', 'REQUIRES_PLOT_IS_ADJACENT_TO_NEIGHBORHOOD')
;
INSERT INTO Requirements (RequirementId, RequirementType)
VALUES ('REQUIRES_PLOT_IS_ADJACENT_TO_NEIGHBORHOOD', 'REQUIREMENT_PLOT_ADJACENT_TO_OWNER')
;
/* Requirements IGNORE Expansion2 */
INSERT OR IGNORE INTO RequirementSets (RequirementSetId, RequirementSetType)
VALUES ('DISTRICT_IS_NEIGHBORHOOD', 'REQUIREMENTSET_TEST_ALL')
;
INSERT OR IGNORE INTO RequirementSetRequirements (RequirementSetId, RequirementId)
VALUES ('DISTRICT_IS_NEIGHBORHOOD', 'REQUIRES_DISTRICT_IS_NEIGHBORHOOD')
;
INSERT OR IGNORE INTO Requirements (RequirementId, RequirementType)
VALUES ('REQUIRES_DISTRICT_IS_NEIGHBORHOOD', 'REQUIREMENT_DISTRICT_TYPE_MATCHES')
;
INSERT OR IGNORE INTO RequirementArguments (RequirementId, Name, Value)
VALUES ('REQUIRES_DISTRICT_IS_NEIGHBORHOOD', 'DistrictType', 'DISTRICT_NEIGHBORHOOD')
;

INSERT INTO TraitModifiers (TraitType, ModifierId)
VALUES ('TRAIT_CIVILIZATION_ADJACENT_DISTRICTS', 'GOLD_ADJACENT_TO_NEIGHBORHOOD')
;

構成ツリー

  • [A] プレイヤーの所有する区域にModifierを追加する
    • 追加するModifierのID:[B]
    • Modifierを追加する区域に条件をつける
      • 以下の全ての条件を満たす区域
        • 種類が以下に一致する区域
          • 区域の種類:近郊部
  • [B] プレイヤーの領土の産出量を調整する
    • 調整する産出量:+2
    • 基本出力の種類:ゴールド
    • 調整するタイルに条件をつける
      • 以下の全ての条件を満たすタイル
        • Modifierの所有者に隣接するタイル

[A]のModifierを、日本文明のUAにセットしているので
日本の都市にある近郊部の隣接タイルがゴールド+2を出すようになります

構成表

解説

TypesDynamicModifiers の追加

Modifierの対象に別のModifierをセットする ATTACH_MODIFIER 系において
ver.1.0.0.341では、プレイヤーの所有全区域を対象にしたModifierTypeが無いので追加している

INSERT OR IGNORE INTO DynamicModifiers (ModifierType, CollectionType, EffectType)

今後追加されることを考慮して、すでに存在していた場合は追加を行わないINSERT OR IGNORE INTOを使っている

RequirementType: REQUIREMENT_PLOT_ADJACENT_TO_OWNER

近郊部区域に持たせたModifierのRequirementTypeに使用
単純に「近郊部区域に隣接」の条件付けだと、他の近郊部や別文明のものにまで適用されてしまうため
(パンテオンの'戦の神'のような状態)

RequirementSets: DISTRICT_IS_NEIGHBORHOOD

同じIDのRequirementSetsがGSに含まれているためINSERT OR IGNORE INTOを使っている
内容は同じで各IDを変えて追加すれば、INSERT OR IGNORE INTOを使う必要は全くない

/* Requirements IGNORE Expansion2 */
INSERT OR IGNORE INTO RequirementSets (RequirementSetId, RequirementSetType)
VALUES ('DISTRICT_IS_NEIGHBORHOOD', 'REQUIREMENTSET_TEST_ALL')
;

SubjectStackLimit = 1

MODIFIER_PLAYER_ADJUST_PLOT_YIELDでタイルの産出量を調整する箇所で一緒に設定している
これによって「複数の近郊部に隣接しているタイル」で効果が重複しないようにしている
逆にこの設定をせずに効果を無尽蔵に重複させたり、2つまで重複が可能などの設定もできる