ページ 11

【解決済み】スクリプトでのアイテムの所持数の増やし方

Posted: 2016年9月05日(月) 19:46
by ミミミン
ツクール初心者です。プログラミングはある程度できます。

自分はパーティが最初に持っているアイテムを増やしたくて、スクリプトでの増やし方を検索しました。
すると、
$gameParty.gainItem($dataItems[1], 1);
というようにメソッドを呼べばいいことがわかりました。
そこで自分で適当なプラグインを作成し、以下のように書きました。
(function() {
$gameParty.gainItem($dataItems[4], 1);
})();
しかしながら「nullにgainItemというメソッドはありません」と言った内容のメッセージがデバックモードで検出されました。
自分もgamePartyという変数をどうやって持ってくるのか理解できていないため理屈はわかるのですが、どうすればいいかわかりません。
初歩的な質問ですが、よろしければご回答いただけると幸いです。

Re: スクリプトでのアイテムの所持数の増やし方

Posted: 2016年9月05日(月) 20:07
by まっつUP
ミミミン様
お世話になります。

私は、javascriptに関して詳しく理解してはおりませんが
「パーティが最初に持っているアイテムを増やしたくて」という場合には
ニューゲーム時の後に移動するマップの自動実行イベント等に
イベントコマンドの「アイテムの増減」または「スクリプト」で増減させればよいのではないかと思います。

Re: スクリプトでのアイテムの所持数の増やし方

Posted: 2016年9月05日(月) 22:08
by ミミミン
RPGで笑顔様、ご返信ありがとうございます。

マップイベントで自動実行でアイテムを増やせばよかったのですね。
ツクールの考え方を一つ勉強させていただきました、ありがとうございます。

しかしながら今後の勉強のためにも、スクリプトの方でのアイテムの増やし方も知っておきたいため、引き続き回答を募集させていただきます。
宜しくお願い致します。

Re: スクリプトでのアイテムの所持数の増やし方

Posted: 2016年9月05日(月) 23:39
by トリアコンタン
最初のコードでは、ゲーム起動直後、スクリプトファイルが読み込まれた瞬間に実行してします。
その時点では$gamePartyも$dataItemsもnullが入っているのでエラーになってしまいます。

プラグイン制作の基本として、既存の関数、メソッドに対してコードを付け加えることで機能を追加します。
今回はニューゲームした直後にアイテムを増加させる処理を追加するので、例えば「newgame」でコアスクリプトを検索してそれっぽい名前がついている関数を探しましょう。
すると「DataManager.setupNewGame」というのが見付かると思います。これがニューゲームを実行した際に呼ばれる関数です。

以前に処理を保持してから関数を上書きして、元の関数を新しい関数の最初で呼び出してから、実行したいコードを記述します。
以下の例の通りです。

コード: 全て選択

(function() {
    'use strict';

    // 上書きする前の関数を変数に入れます。(JavaScriptでは関数への参照を変数に代入することができます)
    var _DataManager_setupNewGame = DataManager.setupNewGame;
    DataManager.setupNewGame = function() {
        // 関数の最初で保持しておいた上書き前の関数を呼び出します。(applyは変数に入れた関数を実行するメソッド)
        _DataManager_setupNewGame.apply(this, arguments);
        // 自分が入れたい処理を実行します。
        $gameParty.gainItem($dataItems[4], 1);
    };
})();

Re: スクリプトでのアイテムの所持数の増やし方

Posted: 2016年9月06日(火) 11:51
by ミミミン
トリアコンタンさま

ご返信ありがとうございます。おかげさまで解決出来ました。
このように既存の関数をラップして使うんですね、勉強になりました。ありがとうございます。