ページ 11

【解決済み】アクターにイベントを持たせる方法について

Posted: 2023年4月18日(火) 02:50
by あふろ
現在ツクールでガンシューティングを作成しているのですが、決定ボタンを押したら銃を構えるということをやろうとしてるのですが、その方法がマップ一つ一つに並列処理で決定が押されたら銃を構えるという方法になってしまっていて正直かなり嫌な実装方法となってしまっています。並列処理で決定を押している間何度も実行しているのも処理が重くなって許せないです。
そこでアイテムにコモンイベントを持たせて、そのアイテムを所持した状態でイベント以外で決定ボタンを押した場合に銃を構える方法に切り替えようと思ったのですが、アクター本体にコモンイベントは設定できるのでしょうか?

Re: アクターにイベントを持たせる方法について

Posted: 2023年4月18日(火) 17:51
by 剣崎 宗二
その機能はデフォルトではございません。

プラグインで作るにしろ、「アクターのコモンイベント」はどういう動作になるのか少なくとも私には想像がつきません。
無理やり考えるなら「全マップに存在する並行実行コモンイベント」と同じような物になりますが…

しっかり仕様(決定ボタンを押した際の動作。例えば目の前にイベントがある場合、決定ボタンは銃を構えるのか、それとも目の前のイベントを起動するのか、等々)を固めて、どこか依頼を受けている方に専用プラグインとして依頼するのが宜しいかと考えます。

Re: アクターにイベントを持たせる方法について

Posted: 2023年4月18日(火) 21:36
by あふろ
回答ありがとうございます。
そういった機能もプラグインもないということが分かっただけでもありがたいです。
今後どうするかの方向性が定まりますので。

Re: アクターにイベントを持たせる方法について

Posted: 2023年4月18日(火) 23:50
by あふろ
スクリプト作成依頼というのは、平均相場はどれくらいなのでしょうか?
勿論内容の複雑さにもよるでしょうが。

Re: アクターにイベントを持たせる方法について

Posted: 2023年4月19日(水) 22:19
by 名無し蛙
あふろ さんが書きました:現在ツクールでガンシューティングを作成しているのですが、決定ボタンを押したら銃を構えるということをやろうとしてるのですが、その方法がマップ一つ一つに並列処理で決定が押されたら銃を構えるという方法になってしまっていて正直かなり嫌な実装方法となってしまっています。並列処理で決定を押している間何度も実行しているのも処理が重くなって許せないです。
そこでアイテムにコモンイベントを持たせて、そのアイテムを所持した状態でイベント以外で決定ボタンを押した場合に銃を構える方法に切り替えようと思ったのですが、アクター本体にコモンイベントは設定できるのでしょうか?
用語に違和感(アクターではなくプレイヤ?)があるんですけど要はこういう事をしたいんですか?

コード: 全て選択

/*:
 * @target MZ
 */

(() => {
    'use strict'

    const _Game_Player_triggerButtonAction = Game_Player.prototype.triggerButtonAction;
    Game_Player.prototype.triggerButtonAction = function() {
        if ( _Game_Player_triggerButtonAction.apply(this, arguments) ) return true;
        if (Input.isTriggered("ok")) {
            const item = $gameParty.allItems().find(item => item.meta['決定時起動イベント']);
            if (item) {
                $gameTemp.reserveCommonEvent(+item.meta['決定時起動イベント']);
                if ($gameMap.setupStartingEvent()) {
                    return true;
                }
            }
        }
        return false;
    };
})();
アイテムのメモ欄に<決定時起動イベント:10>などのタグを付けて
それを所持している場合に決定キーを押した時の挙動が変化します。(既存の処理に引っ掛からない場合)
あふろ さんが書きました:スクリプト作成依頼というのは、平均相場はどれくらいなのでしょうか?
勿論内容の複雑さにもよるでしょうが。
状況に拠るので何とも。自分の場合は有償依頼なら5000円~0が二つ増えるくらいじゃないですかね。
平たく言えば拘束時間と契約期間に比例します。
あとはそのプロジェクトに拠って収益を得る目処が立っているのか、とかも。
上のコードみたいに簡単に思いつく程度のものならわざわざ金銭を要求するほどのものでもないですけど
十数時間、数十時間、数百時間とそのプロジェクトの為に割かなければいけない時間に応じて金額は上がりますし
またメンテナンス期間(納品後、いつまで動作を保証するか。バグや競合発生時に無償対応をするか)
によっても大きく変動します。(対応する為の知識を保ち続ける事も拘束時間と考える為)

予め実装してもらいたい仕様を伝え、見積もりを取ってもらい、契約期間を設定し
どこにコストが掛かるのか説明をしっかり受けて双方合意の上で契約締結する事が肝要ですね。

Re: アクターにイベントを持たせる方法について

Posted: 2023年4月19日(水) 23:19
by あふろ
返信ありがとうございます
やりたいことを箇条書きすると
①、設定したボタンが押された場合、プレイヤーにイベントを走らせる(拡張性を持たせるために”決定”と決め打ちしない)
②、イベントは設定したボタンが押されたらアクターの画像変更とピクチャの変更を行う(後に仕様変更がある場合に備えて押した瞬間に変更してもう一度押したら元に戻る仕様と、押している間画像変更して離したら元に戻るの2パターンから選べるといいです。そしてこれらの処理は一度呼び出したら終了するまで何度も同じメソッドを叩かない)
③、もしくは画像変更処理はアイテムに持たせて、プレイヤーは設定されたボタンが押されたら所持アイテムのイベントを呼び出す(この場合でも押した瞬間だけの処理か押している間の処理かは選べるといいです)
④、会話などの決定ボタンイベントおよび自動実行イベントが走っている間はこのプラグイン機能をOFFにする。
⑤、一々すべてのマップにイベント設定するのではなく、メニューボタンを押す感じで一度設定したらどこでも呼び出せる。
上記が難しい場合は
⑤+設定したボタンが押されたら特定のアイテムのコモンイベントを呼び出せるかつ並列処理のようにループで何度も呼び出さないように、ボタンを一度押すか押し続ける(一度だけメソッドを呼んでアイテムイベント呼び出しフラグtrue)。もう一度押すか離す(もう一度だけメソッドを呼んでアイテムイベント呼び出しフラグfalse)。が欲しい機能です。
これでわかるでしょうか?

Re: アクターにイベントを持たせる方法について

Posted: 2023年4月20日(木) 00:09
by 名無し蛙
「所持アイテム」とは具体的にどういう状態でしょうか
「アイテムの増減」によってパーティアイテムに一つ以上所持している、という事でしょうか?
また、もしも複数のアイテムが存在する場合はどのイベントがチョイスされるのでしょう?

その程度なら先程書いたコードをコピーして適当なtxtファイルにペースト
拡張子を.jsに変更してpluginsフォルダに入れて適用すれば反映されると思うのですが

Re: アクターにイベントを持たせる方法について

Posted: 2023年4月20日(木) 02:23
by あふろ
そうですね、例えばプラグイン側にリストを作成してツクール側から登録→登録されたアイテムと同じ名称またはIDかもしくは何か固有のプライマリキーを持ったアイテムが一つ以上所持している場合にそのアイテムに付与されたコモンイベントを叩く。
叩くイベントは装備アイテムで、今回はガンシューティングなので現在装備している武器を選択(これも今後の仕様変更に備えてツクール側から武器、防具、アクセサリなどを選べるといいです)
もし装備品にイベントが設定されていないもしくはそもそも装備をしてない場合は何もしない。
こんな感じでわかるでしょうか?

Re: アクターにイベントを持たせる方法について

Posted: 2023年4月20日(木) 06:52
by 名無し蛙
あふろ さんが書きました:もし装備品にイベントが設定されていないもしくはそもそも装備をしてない場合は何もしない。
要はパーティの先頭メンバーの装備に拠って
マップ画面で決定ボタンを押した時に特定のコモンイベントを起動するようにしたい、という事ですか?
プラグインパラメータに切り出すのは面倒なので適当にハードコーディングするとこんな感じですか。

コード: 全て選択

/*:
 * @target MZ
 */

(() => {
    'use strict'

    let _previousKey = false;
    const _Game_Player_triggerButtonAction = Game_Player.prototype.triggerButtonAction;
    Game_Player.prototype.triggerButtonAction = function() {
        if ( _Game_Player_triggerButtonAction.apply(this, arguments) ) return true;
        if (Input.isTriggered("ok")) {
            const item = $gameParty.leader().equips()[0];
            if (item && item.meta['決定時起動イベント']) {
                $gameTemp.reserveCommonEvent(+item.meta['決定時起動イベント']);
                if ($gameMap.setupStartingEvent()) {
                    return true;
                }
            }
        }

        const released = _previousKey && !Input.isPressed("ok");
        _previousKey = Input.isPressed("ok");
        if (released) {
            const item = $gameParty.leader().equips()[0];
            if (item && item.meta['離脱時起動イベント']) {
                $gameTemp.reserveCommonEvent(+item.meta['離脱時起動イベント']);
                if ($gameMap.setupStartingEvent()) {
                    return true;
                }
            }
        }
        return false;
    };
})();
先頭メンバーの武器(equips()[0])を判定して
<決定時起動イベント:10>というタグがメモ欄に書かれている場合は
決定キーを押した時にコモンイベント10が起動します。また、
<離脱時起動イベント:20>というタグがメモ欄に書かれている場合は
決定キーを離した時にコモンイベント20が起動します。

キーを変えたい場合は"ok"の部分を変更、
装備部位を変更したい場合はequips()[x]の部分を変更って感じですかね
.

Re: アクターにイベントを持たせる方法について

Posted: 2023年4月20日(木) 21:46
by あふろ
書いていただいたコードを入れて試してみました。
こういうことをやりたかったんです!並列処理だと何度も呼び出す都合上SEなどが重複してしまって駄目だったんですが、これで何とかなりました!
ありがとうございます!