「効果」の版間の差分
(効果の日本語化(kagi)、データベースは省略) |
(相違点なし)
|
2025年10月6日 (月) 05:07時点における版
※2025/10/6、英wikiよりkagi翻訳を通しました。機械翻訳なので一部不自然な日本語があるかもしれません。ぜひ編集してくれるとありがたいです。
エフェクトはゲーム状態を変更するスクリプトコマンドです。
利用可能なコードエフェクトの完全な一覧はeffects.logにあります。
エフェクトブロック
エフェクトは effect スクリプトブロック内で実行されます。
それらは明示的にそのように名付けられている場合(例: 決断の effect = { }
ブロック)もあれば、名称がそのブロックがいつ実行されるかを示唆する場合もあります(例: イベントの immediate = { }
ブロックはイベントが発火した直後、イベントウィンドウが開く前に即座に実行されます。これに対し、イベントの after = { }
ブロックは、イベントの選択肢が選ばれた後に実行されます)。
一部のエフェクトブロックは、他の事象が起きたときに実行されます(例: キャラクター間インタラクションの on_accept
ブロック)。これはon_actionsと混同しないでください。
場合によっては、エフェクトは他の要素も受け付けるハイブリッドブロックで使用されます。 例: イベントの選択肢
option = { is_shown = { is_ai = yes } ai_will_do = { base = 100 } add_gold = 100 }
このブロックでは、add_gold
が選択肢が選ばれたときに実行されるエフェクトですが、is_shown = { }
はトリガーブロック、ai_will_do
はAIロジックブロックです。
エフェクトの文法
コードエフェクト
コードエフェクトにはあらかじめ定められた文法があります。通常、動作には特定のスコープタイプのコンテキストが必要です。
コンソールコマンド script_docs は effects.log を出力し、そこに存在するすべてのコードトリガーの一覧が Documents\Paradox Interactive\Crusader Kings III\logs に書き出されます。
コードエフェクトにはいくつかの形式があります:
ブール形式
ブールエフェクトは = yes
を伴います。
エフェクトは通常、実行されるスコープに依存しますが、それ以外に引数は必要としません。
例: このエフェクトは現在のキャラクタースコープを投獄から解放します。
release_from_prison = yes
単純形式
単純なエフェクトは、=
の右辺に単一の引数を必要とします。
引数には以下を指定できます:
- スコープ
例: このエフェクトは対象スコープを現在のキャラクタースコープの配偶者にします
marry = scope:bride
- データベースキー
例: このエフェクトは現在のキャラクタースコープの監獄タイプを変更します
change_prison_type = house_arrest
- 数値
例: このエフェクトは指定した額のゴールドを現在のキャラクタースコープに追加します
add_gold = 1000
複合形式
複合エフェクトはスクリプトブロック内で複数のパラメータを使用します。パラメータには、ブール値、スコープ、データベースキー、数値、フラグ値を指定できます。
例: このエフェクトは保存済みスコープで指定した対象キャラクターを現在のキャラクタースコープの囚人にし、自宅軟禁にします。
imprison= { target = scope:imprisoned_character type = house_arrest }
一部のコードエフェクトには単純形式と複合形式の両方が存在します。
scripted_effects
scripted_effects は、スクリプトの可読性を高め重複を避けるために、複数のエフェクトのまとまりを単一の記述で置き換えられるマクロです。
それらは common/scripted_effects に定義され、エフェクトが許可されている場所であればどこでも使用できます。
scripted_effect は他の scripted_effect を使用できますが、再帰は許可されていません。
単純形式
単純な scripted_effect はあらかじめ決められたエフェクトのセットを実行します。
例: あるキャラクターにゴールド、威信、信仰心を付与するために次のエフェクトセットを繰り返し使用している場合:
add_gold = 1000 add_prestige = 1000 add_piety = 1000
同じトリガー群を各所で繰り返す代わりに、scripted_effect として定義できます:
give_gold_prestige_piety = { add_gold = 1000 add_prestige = 1000 add_piety = 1000 }
このエフェクト群を実行する必要がある箇所では、次の記述に置き換えられます:
give_gold_prestige_piety = yes
scripted_effects はさまざまな文脈で使用されうるため、定義内で root
や prev
のような曖昧なイベントターゲットの使用は避けることが推奨されます。
複合形式
scripted_effects は、引数の受け渡しを可能にするリテラルなテキスト置換を扱う複合形式を持つこともできます。
例: あるキャラクターにゴールド、威信、信仰心を付与するために次のエフェクトセットを繰り返し使用している場合:
add_gold = 1000 add_prestige = 1000 add_piety = 1000
このトリガー群を scripted_effect として定義しますが、固定の数値を用いる代わりに、scripted_effect 内では二つの $ 記号で囲んだ大文字の引数名を使用します:
give_gold_prestige_piety = { add_gold = $VALUE$ add_prestige = $VALUE$ add_piety = $VALUE$ }
使用時には、scripted_effect の複合形式で、同じ名前(ただし $ 記号なし)を使って期待される引数を指定します:
give_gold_prestige_piety = { VALUE = 1000 }
この形式では、scripted_effect 内の $VALUE$ の出現箇所すべてが引数で文字通り置き換えられます。テキスト置換は scripted_trigger が評価される前に行われます。 このため、イベントターゲットや script_value を渡す目的で scripted_effect の引数を使用する際は注意が必要です。これらの解釈はコンテキストに依存するためです。
例: あるキャラクターが別のキャラクターにゴールドを渡す scripted_effect を考えます:
give_gold = { $GIVER$ = { remove_short_term_gold = $VALUE$ $TAKER$ = { add_gold = $VALUE$ } } }
父親から母親にお金を渡すためにキャラクタースコープから次のように使用した場合:
give_gold = { GIVER = father TAKER = mother VALUE = 1000 }
テキスト置換がリテラルであるため、scripted_effect は次のように解釈されます:
give_gold = { father = { remove_short_term_gold = 1000 mother = { add_gold = 1000 } } }
その結果、お金を受け取るキャラクターが意図した相手ではなくなります。
この問題を避けるために、scripted_effect 内で引数をコンテキストを切り替える前にスコープとして保存できます。
give_gold = { $GIVER$ = { save_scope_as = giver } $TAKER$ = { save_scope_as = taker } save_scope_value_as = { name = gold_amount value = $VALUE$ } scope:giver = { remove_short_term_gold = scope:gold_amount scope:taker = { add_gold = scope:gold_amount } } clear_saved_scope = giver clear_saved_scope = taker }