#author("2023-07-21T05:21:37+09:00","","")
#author("2023-07-22T02:53:14+09:00","","")
// ▼このページのdescriptionとKeywordです
#description(Going MediavalのEffectors.jsonの編集方法についてまとめております。)
#keywords(Effectors.json,json編集,going medieval,ゴーイングメディーバル,日本語,ストラテジー,サバイバル,攻略)
#sitemap(0.8)
// ▲ここまで
// ▼ここから本文
///------------------------------------------------------------------------------
*Effectors.jsonの編集方法について [#about]
///------------------------------------------------------------------------------
~住民の行動を処理する数値情報が含まれるため、このファイルの編集は慎重に行ってほしい。
~変更を加えるたびに多重にバックアップを取り、うまくいかなくなったら前のバックアップへ遡ること。
#contents

///------------------------------------------------------------------------------
**ファイルの場所 [#FileLocation]
///------------------------------------------------------------------------------
#code(php,menu,outline,icon,literal,nonumber){{
C:\Program Files(x86)\Steam\steamapps\common\Going Medieval\Going Medieval_Data\StreamingAssets\StatsSystem\Effectors.json
}}

///------------------------------------------------------------------------------
**ステート変化と行動優先度 [#explanation]
///------------------------------------------------------------------------------
~「重装備によって移動速度がXX%下がる」、といったステータス変化系の数値と、「空腹度が限界なら食事の優先度を上げる」といった行動優先度処理の数値が一つのjsonにまとめられているため、編集したいIDがどちらであるかを理解し、優先度処理をいじりたい場合は別途、StatsModelRepository.jsonおよびScheduleModelRepository.jsonにも目を通すこと。
#code(php,menu,outline,icon,literal,nonumber){{
C:\Program Files (x86)\Steam\steamapps\common\Going Medieval\Going Medieval_Data\StreamingAssets\StatsSystem\StatsModelRepository.json
}}
#code(php,menu,outline,icon,literal,nonumber){{
C:\Program Files(x86)\Steam\steamapps\common\Going Medieval\Going Medieval_Data\StreamingAssets\ScheduleModelRepository.json
}}
///------------------------------------------------------------------------------
**1日の経験値キャップ量を変更する [#edit]
///------------------------------------------------------------------------------
スキル経験値の1日あたりに稼げる量は実質的に決まっている。
大人だと、どれだけ経験値稼ぎをさせても、1日あたり1280~2000ほどしか稼げず、スキルに☆がついていることの意味が薄れてしまう。
#code(php,menu,outline,icon,literal,nonumber){{
        {
          "devName": "AgeXPCapAdult",//大人ステータスを持つ住民の経験値キャップ補正
          "type": "5",
          "parameters": [
            {
              "key": "Attribute",
              "value": "106"
            },
            {
              "key": "Multiplier",
              "value": "0.8"//1600という基準の経験値キャップに0.8が掛け算されている
            }
          ]
        },
}}

この0.8という数字を、たとえば10にしてやると、経験値キャップが16000になる
///------------------------------------------------------------------------------
**盾装備時の攻撃速度ペナルティを変更する [#edit]
///------------------------------------------------------------------------------
#code(php,menu,outline,icon,literal,nonumber){{
    {
      "id": "ShieldCombatSpeedHigh",//タワーシールド着用時に付与されるステート変化
      "locKeys": [
        {
          "language": 1,
          "name": "effector_name_ShieldCombatSpeedHigh"
        }
      ],
      "uiGroup": 4,
      "effects": [
        {
          "devName": "CombatSpeedImpactHigh",
          "type": "5",
          "parameters": [
            {
              "key": "Attribute",//特性
              "value": "26"//近接武器攻撃の間隔補正
            },
            {
              "key": "Multiplier",//乗算される
              "value": "1.25"//バニラなら1.25倍
            }
          ]
        }
      ]
    },

}}

///------------------------------------------------------------------------------
***疑似的に二刀流を実装する(上級者向け) [#edit1]
///------------------------------------------------------------------------------
~ダガーを左手に持つ盾として実装し、その盾が、仮にShieldCombatSpeedDualSwordとかいう新ステートを付与させ、その新ステートが攻撃間隔を0.5倍に短縮するようにする。
流れ↓
①Equipment.jsonのダガーを盾扱いに変更するか、完全に新アイテムとして実装する場合は先にResources.jsonに実装して、その後にEquipment.jsonで「これは盾ですよ」という定義をする。
②Equipment.jsonにて、装備時にShieldCombatSpeedDualSwordというステートを付与させるようにする。
③Effectors.jsonにて、ShieldCombatSpeedDualSwordというステートは攻撃間隔を短縮するステートであることを定義する。
///------------------------------------------------------------------------------
**行動優先度を編集するには [#i492e12f]
///------------------------------------------------------------------------------
~筆者が2021年に自作したMODである睡眠スケジュール改善MODを例にとる。
NEXUSに上げていたものは2年前のゲームバージョン用のものなので今は機能しない。

バニラの住民は、スケジュールが睡眠になっていると、睡眠ゲージが100%に達しても、絶対に起床しない。
例えば、襲撃後に睡眠リズムが崩れ、昼寝をした後に、正規の就寝時間が来ると、''眠くないけど翌朝まで寝続ける''、といった挙動を取る。
これが効率厨には許せなかった。
住民の睡眠や食事をする意思決定処理には作業優先度システムと同じものが使われており、この優先度を、「欲求ゲージ残量に応じて変化するステート」で調節している。
具体的に言うと、
#code(php,menu,outline,icon,literal,nonumber){{
「作業をする」が優先度3
「睡眠する」が優先度4
「睡眠ゲージ」が0になった場合、「疲れ果てた」ステートが付与される。
「疲れ果てた」ステートの効果により、「睡眠する」の優先度を「-2」する
よって「睡眠する」の優先度が2になり、作業よりも睡眠を優先するようになる。
}}
といった流れで処理が行われている。
欲求ゲージの残量に応じてどのステートが付与されるのか、はStatsModelRepository.jsonで定義され、
そのステートがどの行動優先度をいくつ繰り上げるのか、はEffectors.jsonで定義される。
ただ、行動優先度を下手にいじると、目の前に豪華な料理があっても絶対に食べず餓死する、といった現象が起こるため、
ScheduleModelRepository.jsonを読み、それぞれのスケジュール(睡眠、自由、娯楽、仕事の4つ)で優先度の数値がどのようになっているかを勉強する必要がある。

睡眠スケジュール改善MODは、十分に眠れたなら、起床して食事や宗教の祈りを優先するように行動させることを目的としていた。
「十分に眠れた」ステートに、睡眠優先度を実行不可能レベルに落とす効果を定義することで、睡眠ゲージが100%に達した場合、食事や娯楽の必要があれば強制的に起床するという動作を実現していた。
ただし、睡眠ゲージが90%以上ある状態で強制起床した場合、睡眠ゲージが89%以下にならない限り、再就寝せず、「暇を持て余している」状態で朝を待つ、といった挙動を取る問題点があった。
///------------------------------------------------------------------------------

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS