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

返信する
ミミミン
記事: 5
登録日時: 2016年9月05日(月) 19:31

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

投稿記事 by ミミミン »

ツクール初心者です。プログラミングはある程度できます。

自分はパーティが最初に持っているアイテムを増やしたくて、スクリプトでの増やし方を検索しました。
すると、
$gameParty.gainItem($dataItems[1], 1);
というようにメソッドを呼べばいいことがわかりました。
そこで自分で適当なプラグインを作成し、以下のように書きました。
(function() {
$gameParty.gainItem($dataItems[4], 1);
})();
しかしながら「nullにgainItemというメソッドはありません」と言った内容のメッセージがデバックモードで検出されました。
自分もgamePartyという変数をどうやって持ってくるのか理解できていないため理屈はわかるのですが、どうすればいいかわかりません。
初歩的な質問ですが、よろしければご回答いただけると幸いです。
最後に編集したユーザー ミミミン [ 2016年9月06日(火) 12:01 ], 累計 1 回
アバター
まっつUP
記事: 1149
登録日時: 2016年8月11日(木) 15:38
お住まい: タケノコ王国

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

投稿記事 by まっつUP »

ミミミン様
お世話になります。

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

ツイッター(ツクラーの巣窟)(閲覧は自己責任でお願いします)
https://twitter.com/mattuup

github
https://github.com/mattuup/RPGMakerMZ
ミミミン
記事: 5
登録日時: 2016年9月05日(月) 19:31

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

投稿記事 by ミミミン »

RPGで笑顔様、ご返信ありがとうございます。

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

しかしながら今後の勉強のためにも、スクリプトの方でのアイテムの増やし方も知っておきたいため、引き続き回答を募集させていただきます。
宜しくお願い致します。
アバター
トリアコンタン
記事: 2311
登録日時: 2015年11月10日(火) 21:13
お住まい: きのこ王国
連絡する:

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

投稿記事 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);
    };
})();
プラグイン関連のトラブルが発生した際の切り分けと報告の方法です。
http://qiita.com/triacontane/items/2e227e5b5ce9503a2c30

[Blog] : http://triacontane.blogspot.jp/
[Twitter]: https://twitter.com/triacontane/
[GitHub] : https://github.com/triacontane/
ミミミン
記事: 5
登録日時: 2016年9月05日(月) 19:31

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

投稿記事 by ミミミン »

トリアコンタンさま

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

“MV:質問”に戻る