ページ 2 / 4
Re: 現在制作中の戦闘システムについて
Posted: 2024年12月21日(土) 21:32
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回目も同様です。
Re: 現在制作中の戦闘システムについて
Posted: 2024年12月21日(土) 22:41
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 に防具から取得した追加スキルを順番を考慮して直接ねじ込んでいる…みたいな処理です。
わりとトリッキーな気がします。
勉強の素材としては少々扱いにくいかもしれません。
Re: 現在制作中の戦闘システムについて
Posted: 2024年12月21日(土) 23:15
by うさぎさん
いえいえ、書いていただけるだけでもありがたいです!
スクリプトの件なのですが、TypeError
Cannot read property 'item' of undefined
というエラーは、参照先に何もないから起こるエラーですかね?
item というのは何を指しているのでしょうか?
Re: 現在制作中の戦闘システムについて
Posted: 2024年12月21日(土) 23:50
by WTR
ああそうだ その件を忘れていました
なにも装備しなくてもエラーは出ないと思うんですが
そのエラーがいつ出るのかわからなくて…
テストプレイ中に F8 押してコンソール開いた状態でエラーを起こせますか?
なんと出ているでしょうか。
Re: 現在制作中の戦闘システムについて
Posted: 2024年12月22日(日) 00:13
by うさぎさん
すみません、画像粗いかもですがこんな感じです。
エラーは攻撃したあとに怒りますね。
通常攻撃後にコモンイベントが発動するタイミングだと思います。
戦闘行動の強制絡みでの、他プラグインとの競合っぽい感じかもしれません
Re: 現在制作中の戦闘システムについて
Posted: 2024年12月22日(日) 00:34
by WTR
うーむ…
NRP_BattleEventEXMZ.js のバージョンを見てもらってもよいでしょうか。
v1.091 ですかね
788行目でエラーが出てるということなんですが
そのエラーメッセージにはならなそうなんですよね…
あと直接の原因ではなさそうですが
AP7F_AnimationDamage.js も最新版ではないっぽいです。エラーメッセージと行数がずれてる
Re: 現在制作中の戦闘システムについて
Posted: 2024年12月22日(日) 00:41
by うさぎさん
バージョンは1.091ですね。
試しにoffにしてテストプレイしたところ、今度は
TypeError
Cannot read property 'makeTargets' of undefined
とエラーメッセージが出てきました。
Re: 現在制作中の戦闘システムについて
Posted: 2024年12月22日(日) 00:56
by WTR
788行目でエラーが出てるということなんですが
そのエラーメッセージにはならなそうなんですよね…
これは嘘でした。そのメッセージが出る可能性はある。
けどなんでかわからないんですよね…
何も装備していないときにだけ出る、ということでしたっけ
Re: 現在制作中の戦闘システムについて
Posted: 2024年12月22日(日) 01:01
by うさぎさん
厳密に言うと、何も装備していないというのは、
スキルに見立てた防具を装備していない時という条件の時ですね。
武器や盾、体などに何も装備していない場合は特に問題ないです。
WTRさんが書いてくださったスクリプトを使用したことで今まで攻撃[1]~[5]という装備タイプに当てはめていた防具をコンボという装備タイプだけに設定する事が可能になりました。
そのコンボという装備タイプを今は5枠に拡張しています。
恐らくはここに何も装備していない時に起こっているんじゃないかと思うんですよね。
Re: 現在制作中の戦闘システムについて
Posted: 2024年12月22日(日) 01:07
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");
これに差し替えてもらってもよいでしょうか。
コンソールの表示はどうなるでしょうか。