【解決済】アイテム消費武器&投擲武器

安曇野
記事: 8
登録日時: 2017年2月05日(日) 21:25

【解決済】アイテム消費武器&投擲武器

投稿記事by 安曇野 » 2017年2月05日(日) 21:44

初めて質問させていただきます。

件名の通り、アイテムを消費して使用する武器と、武器自体を投げて使用する武器(投げナイフなど)を
作りたいと思いましたが、それらしいプラグインもなかったので素人なりにスクリプトを書いてみました。

しかし、思うように動かないのが現状です。
スクリプトは以下の通りです。

------------------------ここから------------------------

(function() {

Game_Action.prototype.makeDamageValue = function(target, critical) {
var item = this.item();
var baseValue = this.evalDamageFormula(target);
var value = baseValue * this.calcElementRate(target);
if (this.isPhysical()) {
value *= target.pdr;
}
if (this.isMagical()) {
value *= target.mdr;
}
if (baseValue < 0) {
value *= target.rec;
}
if (critical) {
value = this.applyCritical(value);
}
value = this.applyVariance(value, item.damage.variance);
value = this.applyGuard(value, target);
value /= this.checkUseWeapon(target); //必要なアイテムが無い場合は攻撃力ダウン
value = Math.round(value);
return value;
};

Game_Action.prototype.checkUseWeapon = function(target) {
var weapon = target._equips[0]._itemId;
if (weapon.meta.use_item) {
if ($dataItems[weapon.meta.use_item] >= 1) {
$gameParty.loseItem($dataItems[weapon.meta.use_item], 1);
return 1;
} else {
return 4;
}
} else if (weapon.meta.use_weapon) {
$gameParty.loseItem($dataWeapons[weapon], 1, true);
return 1;
}
return 1;
};

})();

------------------------ここまで------------------------

補足ですが、武器のメモ欄に<use_item:1>として、アイテムの番号を指定します。
投擲武器の場合は<use_weapon>としています。

また、テストプレイにてアクターが攻撃しようとすると「Cannot read property '0' of undefined」と表示され、
エネミーが攻撃しようとすると「Cannot read property 'use_item' of undefined」と表示されます。
後者についてはアクターかエネミーかを判別して条件分岐すれば回避できそうな気もしますが……。

javascriptの知識も乏しく、限界を感じましたので、皆様のお力添えをいただきたいと思います。
どうぞよろしくお願いいたします。
最後に編集したユーザー 安曇野 on 2017年7月09日(日) 17:11 [ 編集 1 回目 ]

安曇野
記事: 8
登録日時: 2017年2月05日(日) 21:25

Re: アイテム消費武器&投擲武器

投稿記事by 安曇野 » 2017年2月05日(日) 21:46

追記

書き忘れておりました。
テストプレイに関しては投擲武器を試してそこでつまづいてしまいましたので、
アイテム消費武器についてはチェックしておりません。

よろしくお願いします。
アバター
まっつUP
記事: 1155
登録日時: 2016年8月11日(木) 15:38
お住まい: タケノコ王国

Re: アイテム消費武器&投擲武器

投稿記事by まっつUP » 2017年2月05日(日) 22:27

安曇野様
お世話になります。

エラーが出るのはエネミーに装備が設定されていないからです。
RPGで笑顔を・・・

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

github
https://github.com/mattuup/RPGMakerMZ
アバター
ぶちょー
記事: 40
登録日時: 2016年8月25日(木) 12:15
連絡を取る:

Re: アイテム消費武器&投擲武器

投稿記事by ぶちょー » 2017年2月06日(月) 02:51

こんばんは。

おそらく2つとも、「武器ごとに通常攻撃のIDを指定するプラグイン」と「アイテムを消費するスキルのプラグイン」で可能だと思います。

前者は特典のプラグインに WeaponSkill.js というのがあります。
後者は「ひきも記は閉鎖しました。」様(http://hikimoki.sakura.ne.jp/index.html)にスキルコスト拡張というプラグインがあるので、そちらを利用されると良いと思います。
---------------------------------------------------------------------------------------
[Homepage] http://nyannyannyan.bake-neko.net/
  RGSS3/RGSS2/Pluginの配布を行っています。
  HPでのみ配布しているPluginもあります。
[Blog] http://kazaricat.blog.fc2.com/
  主にゲーム製作の進捗。
[Plugin]
  サンプルに「ゆるドラシル」を使用します(`・ω・´)
  http://yurudora.com/tkool/
安曇野
記事: 8
登録日時: 2017年2月05日(日) 21:25

Re: アイテム消費武器&投擲武器

投稿記事by 安曇野 » 2017年2月06日(月) 23:52

◆まっつUP様◆

早速の返信ありがとうございます。
コードの書き直しをしてみました。

コード: 全て選択

Game_Action.prototype.checkUseWeapon = function(target) {
   if (target.isActor()) {
      var weapon = target._equips[0];
      if (weapon.meta.use_item) {
         if ($dataItems[weapon.meta.use_item] >= 1) {
            $gameParty.loseItem($dataItems[weapon.meta.use_item], 1);
            return 1;
         } else {
            return 4;
         }
      } else if (weapon.meta.use_weapon) {
         $gameParty.loseItem($dataWeapons[weapon.item_Id], 1, true);
         return 1;
      }
   }   
   return 1;
};

また、以前は

コード: 全て選択

var weapon = target._equips[0]._itemId;

となっていましたが、これでは以降がおかしくなってしまうので修正しました。
ただ、これではエラーが出てうまく動きませんでした。
アクターかエネミーかを判別する方法は調べてもなかなか見つからず、おそらくこれだろうというところです。


◆ぶちょー様◆

プラグインの紹介ありがとうございます。
たしかに、教えてくださったプラグインでいけそうですね。

勉強がてら自分で作ってみたいので、紹介されたプラグインのスクリプトを参考にしてみようかと思います。
アバター
ぶちょー
記事: 40
登録日時: 2016年8月25日(木) 12:15
連絡を取る:

Re: アイテム消費武器&投擲武器

投稿記事by ぶちょー » 2017年2月07日(火) 20:30

>>安曇野様
ご自身での制作の件、了解したしました。

答えを言うだけなのは簡単ですが、勉強されているということですので、
お節介ながら、いくつか助言をさせてください。

……書いてから、本当にお節介かもと思い、添付ファイルにまとめました。
不要であれば見なくても大丈夫です。

adivice.txt に助言が書いてあります。答えは書いてありません。
useItemOrWeapon.txt は私なりに書いたスクリプトです。
添付ファイル
advice.txt
(765 バイト) ダウンロード数: 26 回
useItemOrWeapon.txt
(1.37 KiB) ダウンロード数: 46 回
---------------------------------------------------------------------------------------
[Homepage] http://nyannyannyan.bake-neko.net/
  RGSS3/RGSS2/Pluginの配布を行っています。
  HPでのみ配布しているPluginもあります。
[Blog] http://kazaricat.blog.fc2.com/
  主にゲーム製作の進捗。
[Plugin]
  サンプルに「ゆるドラシル」を使用します(`・ω・´)
  http://yurudora.com/tkool/
安曇野
記事: 8
登録日時: 2017年2月05日(日) 21:25

Re: アイテム消費武器&投擲武器

投稿記事by 安曇野 » 2017年2月08日(水) 00:28

ぶちょー様

アドバイスとスクリプトありがとうございます!
お節介だなど、とんでもございません。
さっそくアドバイスの方を読ませていただきました。これを参考に直していってみようと思います。
書いていただいたスクリプトは自分で完成させた暁に、もしくはどうしても行き詰った際に開こうかと思います。

私のために時間を割いていただき、ありがとうございました。
アバター
ぶちょー
記事: 40
登録日時: 2016年8月25日(木) 12:15
連絡を取る:

Re: アイテム消費武器&投擲武器

投稿記事by ぶちょー » 2017年2月11日(土) 00:05

あ、良かったです。

私もJavascriptは勉強中でして、何かの足しになれば幸いです。
---------------------------------------------------------------------------------------
[Homepage] http://nyannyannyan.bake-neko.net/
  RGSS3/RGSS2/Pluginの配布を行っています。
  HPでのみ配布しているPluginもあります。
[Blog] http://kazaricat.blog.fc2.com/
  主にゲーム製作の進捗。
[Plugin]
  サンプルに「ゆるドラシル」を使用します(`・ω・´)
  http://yurudora.com/tkool/

“MV:質問” へ戻る