※2025/10/6、英wikiよりkagi翻訳を通しました。機械翻訳なので一部不自然な日本語があるかもしれません。ぜひ編集してくれるとありがたいです。
スクリプト値は、値を計算する関数であり、スクリプト内のほぼどこでも使用できます。
.txt ファイルの <code>common/script_values</code> に定義します。
スクリプト値は単一の数値にもできます:
<code>minor_stress_gain = 20</code>
次のように使用します:
<code>add_stress = minor_stress_gain</code>
また、数式として、数式演算子・エフェクト・トリガーを使うこともできます:<syntaxhighlight lang="c">
sum_of_all_skills_value = {
add = intrigue
add = diplomacy
add = stewardship
add = martial
add = learning
}
</syntaxhighlight>
===数式===
数式は波括弧で宣言し、次の形式に従います:<syntaxhighlight lang="c">
name_of_scripted_value = {
# 数学的な操作
add = number/scripted value/scope.something
subtract = ...
multiply = ...
divide = ... # 0 で割らないように注意
modulo = ...
value = ... # 値をこの数に設定
max = ... # 現在値がこれより高い場合、この数に切り下げます。例: "max = 10" は 15 を 10 にします
min = ... # 現在値がこれより低い場合、この数に引き上げます
round = yes # 四捨五入
ceiling = yes # 切り上げ(正の無限大方向)
floor = yes # 切り下げ(負の無限大方向)
if = { # 条件を満たす場合に処理します。"if" の中にさらに "if" を入れることも可能
limit = { いくつかの条件 }
add = 5
divide = ...
...
}
else_if = { # 直前の "if" を満たさなかった場合に、こちらの条件をチェックして処理します。複数の "else_if" を並べられます
limit = { いくつかの条件 }
operations...
}
else = { # 上の "if" と "else_if" が満たされなかった場合の処理
}
fixed_range = { # 固定小数の乱数を範囲で与えます(例: 1.242)
min = ... script value
max = ...
}
integer_range = { # 整数の乱数を範囲で与えます(例: 1)
min = ...
max = ...
}
}
</syntaxhighlight>スクリプト値はゲーム状態を変更できない点に注意してください。変数の設定や多くのエフェクトの実行はできません。
スクリプト値をどのスコープで使っているかを忘れないでください。それによって使用できるトリガーやエフェクトが制限されます。たとえば、州(province)には <code>age</code> はありません。
===実行順序===
操作は定義された順に実行されます。例:<syntaxhighlight lang="c">
value = {
add = 5
multiply = 4
max = 10
add = 5
}
</syntaxhighlight>これは結果が「15」になります。"max = 10" が最後の "add = 5" の前に適用されるためです。
===インライン化===
数式はスクリプト値が使える場所ならどこでもインラインで書けます。
したがって、数式を 1 回しか使わない場合は、名前を付けて script_values フォルダに置く必要はありません。
例:<syntaxhighlight lang="c">
add_gold = {
value = gold
multiply = { # そう、数式演算子の中にもインラインで書けます
value = 1
multiply = 0.5
}
}
</syntaxhighlight>
===チェーン===
名前付きスクリプト数式はスコープのチェーンで参照できます。たとえば、次の数式を定義した場合:<syntaxhighlight lang="c">
example_age = {
value = age
}
</syntaxhighlight>次のように動作します:<syntaxhighlight lang="c">
add_gold = {
value = mother.example_age
}
</syntaxhighlight>
=== 範囲 ===
スクリプト値は範囲も定義できます。
<code>add_gold = { 1 5 }</code> は 1 から 5 のゴールドを加算します。
<code>add_gold = { named_value another_named_value }</code> は名前付き値(数式を含む)を解決します。
範囲の中に数式をインラインで書くことはできません。例えば <code>add_gold = { { value = 1 add = 2 } some_named_value }</code> のようにはできません。
その必要がある場合は、スクリプト数学システムの integer_range または fixed_range を使用してください。
=== リスト ===
スクリプト値は every_ および ordered_ リストをサポートします。
<code>add_gold = { every_child = { add = 1 } }</code> は、子どもの数だけゴールドを加算します。<syntaxhighlight lang="c">
add_gold = {
ordered_child = {
order_by = age
max = 3
add = age
}
}
</syntaxhighlight>any_ リストは使用しないでください。これらはトリガーで使用します!
=== スコーピング ===
通常のスクリプトと同様に、スクリプト値の中でもスコープを変更できます。例:<syntaxhighlight lang="c">
add_gold = {
father = {
every_child = { add = 1 }
}
}
</syntaxhighlight>これは、あなたの父親に子どもがいる数だけゴールドを加算します。
=== 現在の値の保存 ===
計算の途中で現在の値を取得するために <code>save_temporary_value_as</code> を使用できます。<syntaxhighlight lang="c">
temp = {
add = 10
divide = 2
save_temporary_value_as = temp_total
multiply = scope:temp_total
}
</syntaxhighlight>これは 25 になります。値をそれ自身で乗算しています = (10/2)^2
これは、同じ値を何度も再計算しないようにするため、負荷の高いスクリプト値で役立ちます。
また、その値が正か負かに基づいて異なる計算を適用するためにも使用できます。
=== UI での表示 ===
キャラクター向けのスクリプト値であれば、ルートをプレイヤーとして次のように表示できます:<syntaxhighlight lang="c">
text_single = {
raw_text = "[GetPlayer.MakeScope.ScriptValue('my_value')]"
}
</syntaxhighlight><code>GetPlayer</code> は、必要に応じて <code>HoldingView.GetProvince</code> など他のプロモートに置き換えてください。
特定のスコープが不要なスクリプト値であれば、<code>EmptyScope</code> 上で実行できます。
<code>"[EmptyScope.ScriptValue('my_value')]"</code>
また、次の構文を使って UI から値やスコープを渡すこともできます:
<code>"[GuiScope.SetRoot( GetPlayer.MakeScope ).AddScope( 'target', CharacterWindow.GetCharacter.MakeScope ).ScriptValue('sval_name')]"</code>
'''注意!''' UI は ''毎フレーム'' スクリプト値を計算します。
複雑なスクリプト値の大きなリストは大きなラグの原因になります。
そのような場合は、変数にそのスクリプト値を代入して、それを表示することを検討してください。
詳細は [[Interface#Displaying a variable or script value|Interface/Displaying_a_variable_or_script_value]] を参照してください。
{{Modding navbox}}