■記事リスト / ▼下のスレッド
■22925 / 親記事) |
相手との技量差で回避率を変化させるには?
|
□投稿者/ Shun -(2016/12/10(Sat) 17:01:53) [ID:nE4DXYig]
| まず、バトルコンフィグにて以下のような命中率・回避率の計算式を設定しております。
命中補正 命中 / 2 * (Call(攻撃側地形適応修正, 攻撃側ユニットID, 防御側ユニットID, 武器番号) + Call(夜間補正, 攻撃側ユニットID)) + Call(照準値補正,攻撃側ユニットID) + 攻撃値 + Call(命中率特殊技能補正,攻撃側ユニットID)
回避補正 回避 / 2 * (Call(防御側地形適応修正, 防御側ユニットID) + Call(夜間補正, 防御側ユニットID)) + 運動性 + Call(回避率特殊技能補正,防御側ユニットID)
命中率 (攻撃側補正 - 防御側補正) * Call(命中率サイズ補正,防御側ユニットID,攻撃側ユニットID) + Call(命中率距離補正,攻撃側ユニットID,防御側ユニットID) - Call(命中率地形効果補正,防御側ユニットID) + Call(連続ターゲット補正, 防御側ユニットID)
最終命中率 最終値 + Call(最終命中補正, 攻撃側ユニットID, 最終値) - Call(最終回避補正, 防御側ユニットID, 最終値)
各種サブルーチンの内、最終回避補正に関するサブルーチンは以下のようにしており、そこに記されている回避系技能は正しく機能しています
最終回避補正:
Local Re_hit = 0
# 見切りを持っている場合、回避値に+10される # 極を持っている場合、回避値に+30される # 予知を持っている場合、反撃時のみ回避値に+30される
If Morale(Pilot(Args(1))) >= 130 Then If Info(パイロット,Pilot(Args(1)),特殊能力所有,見切り) = 1 Then Re_hit = Re_hit + 10 EndIf
If Info(パイロット,Pilot(Args(1)),特殊能力所有,極) = 1 Then Re_hit = Re_hit + 30 EndIf
If Info(パイロット,Pilot(Args(1)),特殊能力所有,予知) = 1 Then If Party(Pilot(Args(1))) <> フェイズ Then Re_hit = Re_hit + 30 EndIf EndIf EndIf
# 天才を持っている場合、回避値に+20される
If Info(パイロット,Pilot(Args(1)),特殊能力所有,天才) = 1 Then Re_hit = Re_hit + 20 EndIf
Return Re_hit
その上で、以下のようなユニット特殊能力を作ろうとしているのですが、 こちらに攻撃を仕掛ける相手の技量を参照する方法が分からず質問させていただきました。
幽蝶の舞 ダミー特殊能力=幽蝶の舞 幽蝶の舞=解説 相手との技量差に応じて最終回避率に補正。;技量が高いほど効果がアップ。
雛形として、最終回避補正のサブルーチン内に他の以下のような記述で再現してみたのですが、
If Info(ユニット,UnitID(Args(1)),特殊能力所有,幽蝶の舞) = 1 Then #相手よりも技量が勝っていれば補正がかかる。 If 0 < Info(パイロット, Pilot(Args(1)), "技量") - Info(パイロット, 相手パイロット, "技量") Then Re_hit = Re_hit + Info(パイロット, Pilot(Args(1)), "技量") - Info(パイロット, 相手パイロット, "技量") EndIf EndIf
この表記だと、ターゲットへカーソル合わせの時に表示される敵側の命中が0%で表記され、 しかし、実際に攻撃が始まった時のシステム文では
○○(ユニット名)は○○(武器名)で攻撃をかけた。 命中率 = ○○%
となっている箇所の命中率の数値は0%でなく、幽蝶の舞の補正がかかってないデフォルトの数値になってて、 実際に命中している事例もあったりして額面通りの数値になってなかったりと不具合が発生するようです。
もしかしたらサブルーチン内の相手側の技量の参照方法に問題があるかもしれませんが、 正しい参照の仕方があれば教えていただきたいと思います。
|
|
|
▽[全レス2件(ResNo.1-2 表示)]
■22927 / ResNo.1) |
Re[1]: 相手との技量差で回避率を変化させるには?
|
□投稿者/ dip -(2016/12/12(Mon) 19:19:04) [ID:rwBu6WTa]
| 2016/12/13(Tue) 02:57:34 編集(投稿者)
まず最初に、パイロット能力値を参照する場合は「Pilot」より「PilotID」を使用した方が正確に情報を取得できると思います。 「Pilot」はパイロットの名称を参照するので、ザコパイロット等は同名の別パイロットのデータを参照する場合があります。
本題ですけど、確かバトルコンフィグ処理中だと「相手パイロット」「相手ユニットID」はかなりの頻度で書き換わってたような? 「相手パイロット」が原因なら下記の様に変更すれば機能すると思います……たぶん。
#_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
最終命中率 最終値 + Call(最終命中補正, 攻撃側ユニットID, 最終値) - Call(最終回避補正, 防御側ユニットID, 最終値, 攻撃側ユニットID)
# Args(1)は既にユニットIDなのでUnitID(Args(1))のUnitID()は不要かと…
If Info(ユニット,Args(1),特殊能力所有,幽蝶の舞) = 1 Then #相手よりも技量が勝っていれば補正がかかる。 If 0 < Info(パイロット, PilotID(Args(1)), "技量") - Info(パイロット, PilotID(Args(3)), "技量") Then Re_hit = Re_hit + Info(パイロット, PilotID(Args(1)), "技量") - Info(パイロット, PilotID(Args(3)), "技量") EndIf EndIf
|
|
|
■22928 / ResNo.2) |
Re[2]: 相手との技量差で回避率を変化させるには?
|
□投稿者/ Shun -(2016/12/14(Wed) 19:11:43) [ID:nE4DXYig]
| ありがとうございました。今度はちゃんと相手に応じた技量値を参照してくれるようになりました。
|
解決済み! |
|
■記事リスト /
レス記事表示 →
[親記事-2]
|