$dataActorsについて

返信する
Mr.あきちゃん
記事: 68
登録日時: 2017年7月23日(日) 02:51

$dataActorsについて

投稿記事 by Mr.あきちゃん »

いつも大変お世話になっております。誠にありがとうございます。
さて、今回は指定したアクターの最大レベルを上げる、という処理で困っております。

アクターは、
 1:一郎
 2:二郎
 3:三郎
 4:四郎
 5:五郎
(数字はアクターID)というように登録してあります。

これをプレイ中に並び替えをして、
 一郎
 五郎
 三郎
 四郎
 二郎
という順にした時、
$dataActors[5].maxLevel += 10; ←五郎の最大レベルを10上げる
とやると、五郎ではなく二郎(並び順で5番目のアクター)の最大レベルが上ってしまいます。

でも、
$gameMessage.add($dataActors[5].name);
とすると、「五郎」とちゃんと5番目に登録しているアクター名が表示されるのです。

同じ$dataActorsなのに、maxLevelの時だけアクターIDが並び順に準じてしまうのですが、
何か良い方法はないでしょうか?
ちなみに実際には、最大レベルを上げるアクターIDは、
$gameParty.targetActor().actorId() ←アップするアイテムを使用したアクター
にしています。

何卒、よろしくお願いいたします。
アバター
しぐれん
記事: 975
登録日時: 2017年3月28日(火) 22:22
連絡する:

Re: $dataActorsについて

投稿記事 by しぐれん »

$dataActorは初期値が設定されている部分です。
ポケモンでいえば種族値が格納されている部分と考えてください。

$dataActorではなく$gameActorを参照してみてください。
現在、プラグイン依頼はお休み中です。
Mr.あきちゃん
記事: 68
登録日時: 2017年7月23日(日) 02:51

Re: $dataActorsについて

投稿記事 by Mr.あきちゃん »

しぐれん様

こんばんは。お世話になります。
実は$gameActorでもやってみたのですが、$gameActor.maxLevelだと、エラーになるのです…
それとも「.maxLevel」がいけないのでしょうか?

いずれにせよ、.nameだと登録されているIDを返すのに、
何故.maxLevelの時は並び順のIDなのかが解せないのです。

あるいは「指定したアクターの並び順」を返す方法はないでしょうかね?
アバター
しぐれん
記事: 975
登録日時: 2017年3月28日(火) 22:22
連絡する:

Re: $dataActorsについて

投稿記事 by しぐれん »

ソースコード見て調べてきました。
$gameActorに入っているデータは Game_Actorクラスですが、$gameActor[0].maxLevel()とカッコを付ければ取得できます。
ただ、レベルキャップを設定する方法ですとmaxLevel()を再定義するのが良いと思います。

以下のコードをプラグインにして導入してみてください。
この状態で、$gameActorに対して._maxLevelに数値を代入すれば望む結果が得られるかもしれません。

コード: 全て選択

(function(){
    const Game_Actor_setup=Game_Actor.prototype.setup;
    Game_Actor.prototype.setup(id){
    Game_Actor_setup.call(this,id);
    this._maxLevel = $dataActors[actorId].maxLevel;
     }
    Game_Actor.prototype.maxLevel =function(){
    	return this._maxLevel;
    } 
     
})();
また、パーティの並び順に対応したデータが欲しい場合、$gameParty.members()[順番]で取得します。
先頭キャラが0で加入人数-1までの数でアクセスできます。
現在、プラグイン依頼はお休み中です。
Mr.あきちゃん
記事: 68
登録日時: 2017年7月23日(日) 02:51

Re: $dataActorsについて

投稿記事 by Mr.あきちゃん »

しぐれん様

おはようございます。今回はご尽力いただき、本当にありがとうございます。
ご教示頂いたものをプラグインに組み込んでみたのですが、
やり方が悪いのか、エラーになってしまいます。以下、実際の構文です。
(念のため、他の組み込んでいるプラグインは無効にしてあります)

$gameActors[$gameVariables.value(11)]._maxLevel += 10;
(変数11には、アイテムを使用したアクターの「登録ID」が入っています。
 実際の「並び順」ではありません)
↑とやると、「Cannot read property '_maxLevel' of undefined.」となります。

大変に申し訳ないのですが、例文をご教示いただけないでしょうか?
お手数をおかけいたしまして本当に申し訳ありません。
何卒よろしくお願いいたします。
Mr.あきちゃん
記事: 68
登録日時: 2017年7月23日(日) 02:51

Re: $dataActorsについて

投稿記事 by Mr.あきちゃん »

大変お世話になります。
お詫びです。

$dataActorsとかの問題ではなく、どうやら「レベルの脇に最大レベルも表示する」
といじった方がおかしかったようです。
(現在調査中です)

しぐれん様には、いらぬ混乱を招くようなことをしてしまい、
大変申し訳ありませんでした。
アバター
しぐれん
記事: 975
登録日時: 2017年3月28日(火) 22:22
連絡する:

Re: $dataActorsについて

投稿記事 by しぐれん »

古いセーブデータを読み込んだ時の処理を入れていなかったので、このままだと動きませんでした。
新規データ作成時には動きますか?
セーブデータ読み込み時に、データを再作成する処理を追加したので、前回のプラグインに追加してみてください。

コード: 全て選択

const Scene_Load_onLoadSuccess=Scene_Load.prototype.onLoadSuccess;
Scene_Load.prototype.onLoadSuccess =function(){
  Scene_Load_onLoadSuccess.call(this);
  $gameActors.for_each(actor){
   if(actor){
       if(!actor._maxLevel){
             actor._maxLevel = actor.actor().maxLevel;
       }
    }
   });

};
現在、プラグイン依頼はお休み中です。
Mr.あきちゃん
記事: 68
登録日時: 2017年7月23日(日) 02:51

Re: $dataActorsについて

投稿記事 by Mr.あきちゃん »

しぐれん様

お世話になります。
しぐれん様、誠にありがとうございました!
原因は↑お詫びにも書いたとおり、「レベルの脇に最大レベルも表示する」という
スクリプトの方だったのですが、それは今回しぐれん様にご教示頂いた構文のおかげで
解決したのです。
しぐれん様には的はずれな事をさせてしまい、本当に申し訳ありませんでした。
(結果的には、そのおかげで解決したのですが)

本当にありがとうございました。
アバター
しぐれん
記事: 975
登録日時: 2017年3月28日(火) 22:22
連絡する:

Re: $dataActorsについて

投稿記事 by しぐれん »

無事に解決できたのであればよかったです。
今後も頑張ってください。
現在、プラグイン依頼はお休み中です。
返信する

“MV:質問”に戻る