ページ 34

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

Posted: 2024年12月22日(日) 01:12
by うさぎさん
こんな感じです

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

Posted: 2024年12月22日(日) 01:29
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;
    }
)

// アクションリストに追加スキルをマージ
if (additionalActions.length > 0) {
    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");
}
これだとどうでしょう。
追加スキルがなかったらこのコモンイベントは一切何もしないはず。。

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

Posted: 2024年12月22日(日) 01:42
by うさぎさん
いえいえ、こちらも対応いただいている身なので謝らないでください。

一応動作としては、何も装備していなければエラーはおきませんでした。
ですが多分、数回程テストしたのですがアクターidが1番以外のアクターが
スキルを装備している時に派生攻撃をしようとするとエラーになりますね。

アクター1は問題なく動きました。

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

Posted: 2024年12月22日(日) 02:04
by WTR
アクターがうまく切り替わってないような気がしますね…

もともと使っていた変数1を使って

◆変数の操作:#0001 = 直前に行動したアクターのID

コード: 全て選択

const battler = $gameActors.actor($gameVariables.value(1));

// メモ欄を参照して追加スキルを持つ防具の配列を取得
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;
    }
)

// アクションリストに追加スキルをマージ
if (additionalActions.length > 0) {
    for (let i = 0; i < battler._actions.length; i += additionalActions.length + 1) {
        battler._actions.splice(i + 1, 0, ...additionalActions);
    }
    console.log(battler.actorId(), battler._actions);
    BattleManager.forceAction(battler);
    this.setWaitMode("action");
}
にしたら変わるでしょうか。(変わらない気がするんだけど…

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

Posted: 2024年12月22日(日) 02:12
by うさぎさん
もともと使ってたものだと、装備していてもいなくても攻撃後にエラーになりますね。
一応なんですけど、通常攻撃の仕様効果にコモンイベントを設定して実行しているのですが、問題ないですよね?

書いていただいたスクリプトをコモンイベントで設定して、設定したコモンイベントを
通常攻撃のスキルに設定しています。

エラーの内容です。
スクリーンショット 2024-12-22 020706.png
何度も付き合わせてしまい申し訳ないです。
夜も遅いですし、無理なさらずに

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

Posted: 2024年12月22日(日) 02:49
by WTR
コモンイベントをちゃんと設定せずにコンソールからデバッグ実行して動かしてたのですが
それがよろしくなかったようです。
通常攻撃にコモンイベントをつけるということはエネミーの通常攻撃時にも実行されるので
そのへんも考慮しないとダメでした。

一旦寝てもう一度考えます。。

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

Posted: 2024年12月22日(日) 13:04
by chro
何やら大変そうですので、プラグインを試作してみました。
たぶんコモンイベントやスクリプトでは、希望の仕様は無理だと思います。

防具のメモに、以下を記載してください。,区切りで複数のスキルを指定出来ます。
<防具派生スキル:11>
11のみ
<防具派生スキル:12,13>
12と13


そもそもコモンイベントの発動タイミングからして、行動回数が追加された場合、意図しない動作のはずです。

コモンイベントの場合、装備スロット番号を指定する方法があります。
最初の1行のみ、2,3,4とスロット番号を変えたものをそれぞれスクリプトで用意すれば、スロットの組み合わせだけで済みます。

コード: 全て選択

const slotId = 2; //0から始まる装備スロット番号
const tag = '追加スキル'; //メモの名前

const battler = $gameActors.actor($gameVariables.value(1));
const equips = battler && battler.equips();
const armor = equips && equips[slotId];
const skillId = armor && Number(armor.meta[tag]); 
if (skillId) {
    battler.forceAction(skillId, -2);
    BattleManager.forceAction(battler);
    this.setWaitMode('action');
}

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

Posted: 2024年12月22日(日) 13:28
by WTR
起きたら勝手に解決してたかもしれない。こういうこともあるのか
私もコモンイベントの線はもうないかな…という気がしていたので妥当かと思います。

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

Posted: 2024年12月22日(日) 13:42
by うさぎさん
WTRさん、chroさん、お二方ありがとうございます!
WTRさんのおかげで理想の形に近づくことができて、chroさんのプラグインのおかげで完璧な形になりました。

特にWTRさんには昨日から何度も対応してもらっていたので感謝の気持ちでいっぱいです。
本当にありがとうございました。
これで作業効率と時間が大幅に改善できそうです

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

Posted: 2024年12月23日(月) 14:15
by うさぎさん
すみません、解決済みにしたのですが最後にもう一個だけ質問させてください。

chroさんが作ってくださったプラグインにTPが100以上の時に、例えば防具のメモ欄に<フィニッシュ>と記述された防具があったら 、
TPが100以外の時は、フィニッシュ攻撃に派生せず、100以上ならフィニッシュ攻撃に派生するという条件をつける事は可能ですか?

スキルを装備する装備タイプは[コンボ]で、フィニッシュ攻撃はコンボ【F】という装備タイプを作ってます。

フィニッシュ攻撃はそこに装備している防具のidを参照する感じです。

プラグインのどこを編集したらこの条件に出来るのかがわからず、質問に至っています。