【解決済み】追加能力値の反撃率について

返信する
アバター
ビービー
記事: 308
登録日時: 2016年1月12日(火) 18:40

【解決済み】追加能力値の反撃率について

投稿記事 by ビービー »

こんにちは。

反撃についてわからない事があるので質問させていただきます。
現在制作中のゲームで、反撃率を100%に設定したアクターが物理攻撃をされた場合、ダメージを受けずに反撃をしているのですが、これをダメージを受けたうえで反撃するようにするにはどのようにすればよいでしょうか?
最後に編集したユーザー ビービー [ 2016年9月18日(日) 15:04 ], 累計 1 回
------------------------------------------------------
Twitterやってます。
https://twitter.com/BB_ENTER
ブログもやってます。
http://bb-entertainment-blog.blogspot.jp/
アバター
ビービー
記事: 308
登録日時: 2016年1月12日(火) 18:40

Re: 追加能力値の反撃率について

投稿記事 by ビービー »

色々やって見てはいるものの”ダメージを受けたうえで反撃”という事がなかなかできず困っています。
お知恵をお貸しください。

いちおうここまでやってみたことを書いておきます。
rpg_managers.jsをこのように書き換えてみました。

コード: 全て選択

BattleManager.invokeAction = function(subject, target) {
    this._logWindow.push('pushBaseLine');
//    if (Math.random() < this._action.itemCnt(target)) {
//        this.invokeCounterAttack(subject, target);
//    } else if 
// を切り取って、
    if (Math.random() < this._action.itemMrf(target)) {
        this.invokeMagicReflection(subject, target);
    } else {
        this.invokeNormalAction(subject, target);
    }
    subject.setLastTarget(target);
    this._logWindow.push('popBaseLine');
    this.refreshStatus();
};

BattleManager.invokeNormalAction = function(subject, target) {
    var realTarget = this.applySubstitute(target);
    this._action.apply(realTarget);
    this._logWindow.displayActionResults(subject, realTarget);
// ここにコピー
    if (Math.random() < this._action.itemCnt(target)) {
        this.invokeCounterAttack(subject, target);
    }
};
別パターンもやってみました。

コード: 全て選択

BattleManager.invokeAction = function(subject, target) {
    this._logWindow.push('pushBaseLine');
    if (Math.random() < this._action.itemCnt(target)) {
// ここを下の方から持ってきて追加
        this.invokeNormalAction(subject, target);
//-----------------------------------------------
        this.invokeCounterAttack(subject, target);
    } else if (Math.random() < this._action.itemMrf(target)) {
        this.invokeMagicReflection(subject, target);
    } else {
        this.invokeNormalAction(subject, target);
    }
    subject.setLastTarget(target);
    this._logWindow.push('popBaseLine');
    this.refreshStatus();
とやってみて、”攻撃を受けたうえで反撃する”という事自体はこれでできていました。
しかしダメージ表示がおかしく、敵がアクターを攻撃したタイミングで、アニメーションはアクターに表示されるんですがダメージ表示が出ず、その後反撃で受けるはずのダメージ数値が攻撃をしたはずの敵に教示され、そのあとで反撃アニメーションがはじまり何の数値も出ずに終了します。
敵とアクターのHPを見るとダメージ表示がおかしいだけで内部では正常に動作しているようなのです。
ちなみにバトルログも問題なかったです。

どうすればダメージ表示を”最初の攻撃を受けた側””反撃を受けた側”とちゃんと表示できるようになるのでしょうか?
よろしくお願いします。
------------------------------------------------------
Twitterやってます。
https://twitter.com/BB_ENTER
ブログもやってます。
http://bb-entertainment-blog.blogspot.jp/
奏ねこま
記事: 702
登録日時: 2016年1月20日(水) 20:04

Re: 追加能力値の反撃率について

投稿記事 by 奏ねこま »

調べてみました。

どうやらBattleManager.updateActionメソッドは1回の実行につき1体分の処理しか想定しておらず、
invokeNormalActionとinvokeCounterAttackを同時に実行してしまうと
ダメージ表示対象が上書きされたりHPダメージがリセットされてしまったりするようです。

そこで、カウンター発生時はupdateActionを2回実行するようにし、
1回目はinvokeNormalAction、2回目はinvokeCounterAttackを実行するようにしてみました。

コード: 全て選択

BattleManager.updateAction = function() {
    // add start
    if (this._counter) {
        this.invokeCounterAttack(this._counter.subject, this._counter.target);
        this._counter = null;
        return;
    }
    // add end
    var target = this._targets.shift();
    if (target) {
        this.invokeAction(this._subject, target);
    } else {
        this.endAction();
    }
};

BattleManager.invokeAction = function(subject, target) {
    this._logWindow.push('pushBaseLine');
    if (Math.random() < this._action.itemCnt(target)) {
        this._counter = {subject:subject, target:target};   // add
        this.invokeNormalAction(subject, target);           // add
        //this.invokeCounterAttack(subject, target);        // delete
    } else if (Math.random() < this._action.itemMrf(target)) {
        this.invokeMagicReflection(subject, target);
    } else {
        this.invokeNormalAction(subject, target);
    }
    subject.setLastTarget(target);
    this._logWindow.push('popBaseLine');
    this.refreshStatus();
};
addとかdeleteとか書いてあるところが、追加、削除した部分です。
add startとadd endは、その間の行が追加した部分です。
this._counterは新しく追加した変数です。元のBattleManagerにはありません。

以上、まだ微妙に納得しきれない部分がありますが、こんな感じでいかがでしょうか。
アバター
ビービー
記事: 308
登録日時: 2016年1月12日(火) 18:40

Re: 追加能力値の反撃率について

投稿記事 by ビービー »

調べていただきありがとうございます。

試してみたところダメージを受けたうえで反撃するようにすることができました。
これにて解決とさせていただきます。
本当にありがとうございました。
------------------------------------------------------
Twitterやってます。
https://twitter.com/BB_ENTER
ブログもやってます。
http://bb-entertainment-blog.blogspot.jp/
返信する

“MV:質問”に戻る