返信先: ACE3について

ホーム フォーラム TRI Gaming フォーラム ACE3について 返信先: ACE3について

#266361
アバター画像NSTomoS
参加者

Unconscious からの復帰に Epinephrine が与える影響ついて

ここに書いた情報は 2020/05/04 時点の情報です.
ace のアップデートや,TRI鯖の設定変更等が原因で変わる恐れがあります.

変更されたそうなので,以下の内容は参照しないで下さい.
ACE3 の実装を読む参考になるかもしれないので一応残しておきます.

advancedMedication=false の場合の挙動

NSTomoSのミスで誤っている可能性があります…

まとめ

  • Epinephrine 打った時に,バイタルが安定していればすぐに復帰する.
  • Epinephrine には即時的な効果しかないので,一度 Epinephrine を打った後で,バイタルを安定させた場合は,再度 Epinephrine を打つ必要がある.

以下はメモ(裏付け)なので興味ない人は読み飛ばしてください

経験的には

  • Epinephrine を打つと復帰が早くなる
    • 「(バイタルが安定していれば?)Epinephrine を打つと(15 秒以内?)の復帰率 100 % な気がする」との報告も

ドキュメントの説明では

  • > Epinephrine can boost the chances of waking up by increasing the amount of checks the wake up chance
    • Epinephrine を打つと復帰するかのチェック回数が増える
    • チェック回数が増えることで復帰率が上がる
      • 経験的な知見と矛盾するように見える

コード上では

  • fnc_handleStateUnconscious.sqf
    private _wakeUpCheckInterval = SPONTANEOUS_WAKE_UP_INTERVAL;
    if (EGVAR(medical,spontaneousWakeUpEpinephrineBoost) > 1) then {
        private _epiEffectiveness = [_unit, "Epinephrine", false] call EFUNC(medical_status,getMedicationCount);
        _wakeUpCheckInterval = _wakeUpCheckInterval * linearConversion [0, 1, _epiEffectiveness, 1, 1 / EGVAR(medical,spontaneousWakeUpEpinephrineBoost), true];
        TRACE_2("epiBoost",_epiEffectiveness,_wakeUpCheckInterval);
    };
    
    • 設定的には spontaneousWakeUpEpinephrineBoost1より大きい場合に wakeUpCheckInterval の値を(小さく)変更する.(=チェック回数が増える)
      • ドキュメント通りの実装
        • 過去に打った回数を参照して効果率を変化させて線形変換しているっぽい
      • 現状のTRI鯖では, force ace_medical_spontaneousWakeUpEpinephrineBoost = 1; に設定されている
        • つまり,現状のTRI鯖では,Epinephrine は Unconscious からの復帰に影響しないはず…
          • 経験的な知見と矛盾する?
        • 現状のTRI鯖では,Epinephrine は Unconscious からの spontaneousWake(自発的な復帰) に影響しない
      • もしかしたら advancedMedication=true の場合にのみ通る path かもしれない???
  • fnc_medicationLocal.sqf
    // Exit with basic medication handling if advanced medication not enabled
    if (!GVAR(advancedMedication)) exitWith {
        switch (_classname) do {
            case "Morphine": {
            private _painSuppress = GET_PAIN_SUPPRESS(_patient);
                _patient setVariable [VAR_PAIN_SUPP, (_painSuppress + MORPHINE_PAIN_SUPPRESSION) min 1, true];
            };
            case "Epinephrine": {
                [QEGVAR(medical,WakeUp), _patient] call CBA_fnc_localEvent;
            };
        };
    };
    
    • advancedMedication=false の場合は Epinephrine を打つと ["ace_medical_WakeUp", _patient] call CBA_fnc_localEvent" が call される
    • "ace_medical_WakeUp" の内容はここっぽい
      
      class WakeUp {
          targetState = "Injured";
          condition = QEFUNC(medical_status,hasStableVitals);
          events[] = {QEGVAR(medical,WakeUp)};
          onTransition = QUOTE([ARR_2(_this,false)] call EFUNC(medical_status,setUnconsciousState));
      };
      
      • Vitals が安定していれば UnconsciousStatefalse が set される?(=バイタルが安定していれば Unconscious から復帰する)
        • 呼び出し関係を理解していないので正確ではない可能性があるが,経験的な動作と一致

コードまとめ

  • Unconscious からの復帰に Epinephrine が与える影響は二種類ある
    • Epinephrine 打った時に,バイタルが安定していれば(即)復帰する
      • (現状のTRI鯖で有効な)普段目にする効果
      • advancedMedication=false の場合のみ
    • Epinephrine が効いている間, バイタルが安定していれば確率的に復帰する回数が増える(spontaneousWakeUpEpinephrineBoost)
      • ドキュメントにはこっちしか書いてなかった
  • 後者の影響が advancedMedication=false で有効かは不明(調べるの面倒で力尽きました)
    • 例えば,バイタルが安定していない状態で Epinephrine 打った直後にバイタルが安定した場合に追加で Epinephrine を打つ必要があるかどうか
    • 現状のTRI鯖の設定では ace_medical_spontaneousWakeUpEpinephrineBoost = 1; なので advancedMedication の設定に関わらず spontaneousWakeUpEpinephrineBoost は無効
  • この返信は6年、 2ヶ月前にアバター画像NSTomoSが編集しました。
  • この返信は6年、 2ヶ月前にアバター画像NSTomoSが編集しました。
  • この返信は6年、 2ヶ月前にアバター画像NSTomoSが編集しました。
  • この返信は6年、 2ヶ月前にアバター画像NSTomoSが編集しました。
  • この返信は6年、 2ヶ月前にアバター画像NSTomoSが編集しました。
  • この返信は5年、 2ヶ月前にアバター画像NSTomoSが編集しました。