【解決済み】現在制作中の戦闘システムについて

うさぎさん
記事: 39
登録日時: 2019年8月30日(金) 20:32

Re: 現在制作中の戦闘システムについて

投稿記事 by うさぎさん »

WTR さんが書きました:2回行動で派生スキルが3つあったら
1回目通常行動 -> 派生スキル1 -> 2回目通常行動 -> 派生スキル2 -> 派生スキル3

3回行動で派生スキルが3つだったら
1回目通常行動 -> 派生スキル1 -> 2回目通常行動 -> 派生スキル2 -> 3回目通常行動 -> 派生スキル3

3回行動で派生スキルが1つだったら
1回目通常行動 -> 派生スキル1 -> 2回目通常行動 -> 3回目通常行動

こんな感じでしょうか?
いえ、派生スキルが3つあったら
1回目通常攻撃 > 派生スキル1,2,3 と全て繰り出す感じですね。
2回目も同様です。
アバター
WTR
記事: 625
登録日時: 2015年12月22日(火) 19:14

Re: 現在制作中の戦闘システムについて

投稿記事 by WTR »

コード: 全て選択

// 最後に行動したアクターを取得
const battlerId = $gameTemp.lastActionData(2);
const battler = $gameActors.actor(battlerId);

// メモ欄を参照して追加スキルを持つ防具の配列を取得
const armors = battler.armors().filter(armor => armor.meta.hasOwnProperty("追加スキル"));

// ↑を追加スキルの配列に変換
const additionalActions = armors.map(armor => {
        const action = new Game_Action(battler, true);
        action.setSkill(Number(armor.meta["追加スキル"]));
        action.setTarget(battler._lastTargetIndex);
        return action;
    }
)

// アクションリストに追加スキルをマージ
for (let i = 0; i < battler._actions.length; i += additionalActions.length + 1) {
    battler._actions.splice(i + 1, 0, ...additionalActions);
}

BattleManager.forceAction(battler);
this.setWaitMode("action");
こんな感じ…でしょうか。ちょっと自信がなくなってきましたが

なかなか解説が難しいところでもあります。
あまりツクール的なことはしてなくて filter とか map とか splice とか JS の配列操作が中心なので
そのへんは https://developer.mozilla.org/ja/docs/W ... ects/Array あたりを参照して頂くとして
ツクール的な工夫は
もともと変数1で取得していた最後に行動したアクターは
実は $gameTemp.lastActionData(2) で取得できるのでスクリプトに組み込んでしまいました。

battler のアクションは battler._actions に格納されているのですが
戦闘行動の強制というのはこれを上書きする処理です。

上書きではなく追加したいので battler.forceAction はやめて
battler._actions に防具から取得した追加スキルを順番を考慮して直接ねじ込んでいる…みたいな処理です。

わりとトリッキーな気がします。
勉強の素材としては少々扱いにくいかもしれません。
Twitter、はじめました。
https://twitter.com/wtr_in_reverie/
うさぎさん
記事: 39
登録日時: 2019年8月30日(金) 20:32

Re: 現在制作中の戦闘システムについて

投稿記事 by うさぎさん »

いえいえ、書いていただけるだけでもありがたいです!

スクリプトの件なのですが、TypeError
Cannot read property 'item' of undefined
というエラーは、参照先に何もないから起こるエラーですかね?

item というのは何を指しているのでしょうか?
アバター
WTR
記事: 625
登録日時: 2015年12月22日(火) 19:14

Re: 現在制作中の戦闘システムについて

投稿記事 by WTR »

ああそうだ その件を忘れていました
なにも装備しなくてもエラーは出ないと思うんですが
そのエラーがいつ出るのかわからなくて…

テストプレイ中に F8 押してコンソール開いた状態でエラーを起こせますか?
なんと出ているでしょうか。
Twitter、はじめました。
https://twitter.com/wtr_in_reverie/
うさぎさん
記事: 39
登録日時: 2019年8月30日(金) 20:32

Re: 現在制作中の戦闘システムについて

投稿記事 by うさぎさん »

すみません、画像粗いかもですがこんな感じです。
スクリーンショット 2024-12-22 000742.png
エラーは攻撃したあとに怒りますね。
通常攻撃後にコモンイベントが発動するタイミングだと思います。

戦闘行動の強制絡みでの、他プラグインとの競合っぽい感じかもしれません
アバター
WTR
記事: 625
登録日時: 2015年12月22日(火) 19:14

Re: 現在制作中の戦闘システムについて

投稿記事 by WTR »

うーむ…

NRP_BattleEventEXMZ.js のバージョンを見てもらってもよいでしょうか。
v1.091 ですかね

788行目でエラーが出てるということなんですが
そのエラーメッセージにはならなそうなんですよね…

あと直接の原因ではなさそうですが
AP7F_AnimationDamage.js も最新版ではないっぽいです。エラーメッセージと行数がずれてる
Twitter、はじめました。
https://twitter.com/wtr_in_reverie/
うさぎさん
記事: 39
登録日時: 2019年8月30日(金) 20:32

Re: 現在制作中の戦闘システムについて

投稿記事 by うさぎさん »

バージョンは1.091ですね。
試しにoffにしてテストプレイしたところ、今度は

TypeError
Cannot read property 'makeTargets' of undefined

とエラーメッセージが出てきました。
スクリーンショット 2024-12-22 003934.png
アバター
WTR
記事: 625
登録日時: 2015年12月22日(火) 19:14

Re: 現在制作中の戦闘システムについて

投稿記事 by WTR »

788行目でエラーが出てるということなんですが
そのエラーメッセージにはならなそうなんですよね…
これは嘘でした。そのメッセージが出る可能性はある。
けどなんでかわからないんですよね…

何も装備していないときにだけ出る、ということでしたっけ
Twitter、はじめました。
https://twitter.com/wtr_in_reverie/
うさぎさん
記事: 39
登録日時: 2019年8月30日(金) 20:32

Re: 現在制作中の戦闘システムについて

投稿記事 by うさぎさん »

厳密に言うと、何も装備していないというのは、
スキルに見立てた防具を装備していない時という条件の時ですね。
武器や盾、体などに何も装備していない場合は特に問題ないです。

WTRさんが書いてくださったスクリプトを使用したことで今まで攻撃[1]~[5]という装備タイプに当てはめていた防具をコンボという装備タイプだけに設定する事が可能になりました。

そのコンボという装備タイプを今は5枠に拡張しています。
恐らくはここに何も装備していない時に起こっているんじゃないかと思うんですよね。
アバター
WTR
記事: 625
登録日時: 2015年12月22日(火) 19:14

Re: 現在制作中の戦闘システムについて

投稿記事 by WTR »

コード: 全て選択

// 最後に行動したアクターを取得
const battlerId = $gameTemp.lastActionData(2);
const battler = $gameActors.actor(battlerId);

// メモ欄を参照して追加スキルを持つ防具の配列を取得
const armors = battler.armors().filter(armor => armor.meta.hasOwnProperty("追加スキル"));

// ↑を追加スキルの配列に変換
const additionalActions = armors.map(armor => {
        const action = new Game_Action(battler, true);
        action.setSkill(Number(armor.meta["追加スキル"]));
        action.setTarget(battler._lastTargetIndex);
        return action;
    }
)

// アクションリストに追加スキルをマージ
for (let i = 0; i < battler._actions.length; i += additionalActions.length + 1) {
    battler._actions.splice(i + 1, 0, ...additionalActions);
}
console.log(battler._actions);
BattleManager.forceAction(battler);
this.setWaitMode("action");
これに差し替えてもらってもよいでしょうか。
コンソールの表示はどうなるでしょうか。
Twitter、はじめました。
https://twitter.com/wtr_in_reverie/
返信する

“MZ:質問”に戻る