rpg_object内のステータス初期化処理について、新規ステータスを追加する方法について

アリクイマン
記事: 44
登録日時: 2018年5月06日(日) 12:30

rpg_object内のステータス初期化処理について、新規ステータスを追加する方法について

投稿記事by アリクイマン » 2018年5月06日(日) 12:45

■やりたいこと
・HPやMPのような、戦闘中に頻繁に変動する新規ステータスを追加したい。
・各ステータスは各actor,enemy別々の値をもたせたい。

■やったこと
・rpg_objectのGame_BattlerBase内記述を変更し、
 新規で「cp」というステータスを追加することはできた。

コード: 全て選択

Object.defineProperties(Game_BattlerBase.prototype, {
  // 中略
  // 新規追加
  cp: { get: function() { return this._hp; }, configurable: true },
}

Game_BattlerBase.prototype.initMembers = function() {
  // 中略
  // 追加
  this._cp = 0;
};


■教えていただきたいこと
・現在はthis._cp = 0;でcpの値を0にしているが、
 この箇所を、各actor及びenemyのメモ欄に記載されている値に設定したい。
 this._cp = parseInt($dataActors[this._actorId].meta.cp);
 という記述をして見たが、Game_BattleBaseは親クラスであるからか、
 actorIdを取得することができなかった。
・新規追加ステータスを武器や装備、状態異常等で変動させる方法もわからなかった。

よろしくお願いいたします。

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

Re: rpg_object内のステータス初期化処理について、新規ステータスを追加する方法について

投稿記事by まっつUP » 2018年5月06日(日) 14:17

アリクイマン様

this._actorIdが取得できないのはthis._actorIdへの値の代入よりも先に
Game_BattlerBase.prototype.initMembersが実行されるからだと思います。

なので先に0だけ代入しておいて
Game_Actor.prototype.initializeと
Game_Enemy.prototype.initializeに
各メモの値を取得する処理をフックするのがよいと思います。

変動に関しては場合によるのでこれというのは思いつかないです。
RPGで笑顔を・・・

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

github
https://github.com/mattuup/RPGMakerMZ
アリクイマン
記事: 44
登録日時: 2018年5月06日(日) 12:30

Re: rpg_object内のステータス初期化処理について、新規ステータスを追加する方法について

投稿記事by アリクイマン » 2018年5月06日(日) 15:38

まっつUP様

ありがとうございます。
なるほど、Game_BattlerBase.prototype.initMembers内ではまだactorIdは代入されていないのですね。

>Game_Actor.prototype.initializeと
>Game_Enemy.prototype.initializeに
>各メモの値を取得する処理をフックするのがよいと思います。

ありがとうございます。
Game_Actor.prototype.setup及び
Game_Enemy.prototype.setupにて、
他要素の初期化がされているようにも見えますが、
付近に他ステータス(hpやmp、攻撃力等)を設定している記述がないように見えました。
つまり、ステータスの初期化は
Game_Actor.prototype.initializeと
Game_Enemy.prototype.initializeで、
全て行われている、ということなのでしょうか。

>変動に関しては場合によるのでこれというのは思いつかないです。

想定していたものは、固定値で1増やす、1減らす程度の変動です。
特定の武器・防具を装備している時などに、その武器・防具のメモ欄等の情報から
指定数値分の上限を想定していました。
また、レベルアップではなく、イベントやアイテムの使用で、の増減も考えていました。

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

Re: rpg_object内のステータス初期化処理について、新規ステータスを追加する方法について

投稿記事by まっつUP » 2018年5月06日(日) 18:42

Game_Battler.prototype.initialize.call(this);
が実行されているのでここを追うと共通するパラメータの初期化処理が
行われているのが分かると思います。

変動についてはデフォルトの
Game_Actor.prototype.paramBaseや
Game_Actor.prototype.paramPlusなどを
参考にしてみてください。
注意点はthis._cpを毎回this._cpで参照するのではなく
新しく関数を作って、this._cpに計算を加えた結果を返り値として得るようにすることです。
(場合によっては無限再帰のおそれがあるのでその時はthis._cpを直接使うかもしれません。)

ただ、全部を一から組むのは大変なので
自分は失念してしまったのですが
バトラーに新しいパラメータを追加できるプラグインが
配布されていたと思うので、利用してみては。
RPGで笑顔を・・・

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

github
https://github.com/mattuup/RPGMakerMZ
アリクイマン
記事: 44
登録日時: 2018年5月06日(日) 12:30

Re: rpg_object内のステータス初期化処理について、新規ステータスを追加する方法について

投稿記事by アリクイマン » 2018年5月06日(日) 22:41

まっつUP様

ありがとうございます。

>変動についてはデフォルトの
>Game_Actor.prototype.paramBaseや
>Game_Actor.prototype.paramPlusなどを
>参考にしてみてください。

場所まで教えていただきありがとうございます。

>ただ、全部を一から組むのは大変なので
>自分は失念してしまったのですが
>バトラーに新しいパラメータを追加できるプラグインが
>配布されていたと思うので、利用してみては。

まっつUP様が知っている物と同じかどうかはわかりませんが、
使用して見たところ、ステータスを利用した別の処理を実行するのに
不具合が生じたことと、
後学の為に自作しようとしている所存であります。

“MV:質問” へ戻る