ページ 1 / 1
【解決】HIME_PartySwitchingSceneでのエラー
Posted: 2019年9月15日(日) 11:36
by ムノクラ
HIME_PartySwitchingScene.js
の動作確認をしたところ、エラーが出ました。
状況
コアスクリプト 1.6.2
HIME_PartyManager.js 1.11
http://himeworks.com/2016/02/party-manager-mv/
https://fungamemake.com/archives/3695
HIME_PartySwitchingScene.js 1.2
http://himeworks.com/2016/03/party-switching-scene/
HIME_PartyManager.js で最大パーティメンバーを3に設定。
HIME_PartySwitchingScene.js で交代シーンを呼び、4人目を追加しようと操作するとブザーが鳴るはずが、エラーが出てしまいます。
使用したスクリプトは下記です。
コード: 全て選択
var party = $gameSystem.reserveParty()
party.addActor(2)
party.addActor(3)
party.addActor(4)
party.addActor(5)
SceneManager.push(Scene_PartySwitch)
最大人数設定を変更する前(-1:多分無制限)は動いていたので、使用方法が間違っている可能性は低いと考えます。
スクリプトの修正が必要と予想しますが、HimeWorks様は休止されているようです。
修正箇所がお分かりの方はご指導下さい。
エラーは下記です。
コード: 全て選択
rpg_managers.js:1949 TypeError: Cannot read property 'isAppeared' of null
at rpg_objects.js:4802
at Array.filter (<anonymous>)
at Game_Party.battleMembers (rpg_objects.js:4801)
at Game_Party.leader (rpg_objects.js:4811)
at Game_Player.refresh (rpg_objects.js:7437)
at Game_Party.swapOrder (rpg_objects.js:5109)
at Scene_PartySwitch.swapMembers (HIME_PartySwitchingScene.js:501)
at Scene_PartySwitch.onActorOk (HIME_PartySwitchingScene.js:475)
at Window_PartySwitchAvailable.Window_Selectable.callHandler (rpg_windows.js:902)
at Window_PartySwitchAvailable.Window_Selectable.callOkHandler (rpg_windows.js:1171)

- SS02.png (37.26 KiB) 閲覧された回数 2951 回
Re: HIME_PartySwitchingSceneでのエラー
Posted: 2019年9月15日(日) 15:19
by ecf5DTTzl6h6lJj02
ムノクラ さんが書きました:HIME_PartySwitchingScene.js
の動作確認をしたところ、エラーが出ました。
状況
コアスクリプト 1.6.2
HIME_PartyManager.js 1.11
http://himeworks.com/2016/02/party-manager-mv/
https://munokura.tk/archives/3695
HIME_PartySwitchingScene.js 1.2
http://himeworks.com/2016/03/party-switching-scene/
HIME_PartyManager.js で最大パーティメンバーを3に設定。
HIME_PartySwitchingScene.js で交代シーンを呼び、4人目を追加しようと操作するとブザーが鳴るはずが、エラーが出てしまいます。
使用したスクリプトは下記です。
コード: 全て選択
var party = $gameSystem.reserveParty()
party.addActor(2)
party.addActor(3)
party.addActor(4)
party.addActor(5)
SceneManager.push(Scene_PartySwitch)
最大人数設定を変更する前(-1:多分無制限)は動いていたので、使用方法が間違っている可能性は低いと考えます。
スクリプトの修正が必要と予想しますが、HimeWorks様は休止されているようです。
修正箇所がお分かりの方はご指導下さい。
エラーは下記です。
コード: 全て選択
rpg_managers.js:1949 TypeError: Cannot read property 'isAppeared' of null
at rpg_objects.js:4802
at Array.filter (<anonymous>)
at Game_Party.battleMembers (rpg_objects.js:4801)
at Game_Party.leader (rpg_objects.js:4811)
at Game_Player.refresh (rpg_objects.js:7437)
at Game_Party.swapOrder (rpg_objects.js:5109)
at Scene_PartySwitch.swapMembers (HIME_PartySwitchingScene.js:501)
at Scene_PartySwitch.onActorOk (HIME_PartySwitchingScene.js:475)
at Window_PartySwitchAvailable.Window_Selectable.callHandler (rpg_windows.js:902)
at Window_PartySwitchAvailable.Window_Selectable.callOkHandler (rpg_windows.js:1171)
SS01.png
SS02.png
HIME_PartySwitchingScene.js が、パーティーの追加/入れ替えの際に、
パーティーメンバーの最大数をチェックしておらず、最大数を超えて、メンバーを追加しようとするため
エラーが発生するようです。(入れ替えの際も、パーティーにアクターを追加してから、インデックスを入れ替えて、該当メンバーを削除という処理をしてます。)
まず、パーティーメンバーの最大数を超えて、メンバー追加することが可能ので、追加できないように変更します。 HIME_PartySwitchngScene.js の278行目あたりから始まるScene_PartySwitch.prototype.onPartyOk 関数を次のように変更します。
コード: 全て選択
Scene_PartySwitch.prototype.onPartyOk = function() {
if(this._listWindow._data._maxPartyMembers <= this._listWindow.index()){
SoundManager.playBuzzer();
this._listWindow.activate();
}
else{
this._helpWindow.setText($.selectText);
this._listWindow.deactivate();
this._availableWindow.activate();
this._availableWindow.select(0);
}
};
つづいて、入れ替えの際に、パーティーがいっぱいだったら、一時的に、パーティーの最大数を拡張するように変更します。311行目あたりから始まる
Scene_PartySwitch.prototype.swapMembers関数を次のように変更します。
コード: 全て選択
Scene_PartySwitch.prototype.swapMembers = function() {
var sIdx = this._listWindow.index()
var tIdx = this._availableWindow.index();
var party = this._listWindow._data
var otherParty = this._availableWindow._data;
var oldActor = party.members()[sIdx];
var newActor = otherParty.members()[tIdx];
var isFull = Party.isPartyFull(1);
if (newActor) {
if(isFull){
Party.setMaxPartyMembers(1, party._maxPartyMembers + 1);
}
party.addActor(newActor.actorId())
party.swapOrder(newActor.index(), sIdx);
otherParty.removeActor(newActor.actorId());
if (isFull){
Party.setMaxPartyMembers(1, party._maxPartyMembers - 1);
}
}
if (oldActor) {
otherParty.addActor(oldActor.actorId());
otherParty.swapOrder(otherParty.members().indexOf(oldActor), tIdx);
party.removeActor(oldActor.actorId());
}
this._listWindow.refresh();
this._availableWindow.refresh();
};
これで、おそらく、動作するはずですが、きちんとチェックしてないので、不具合がでたらごめんなさい。
Re: HIME_PartySwitchingSceneでのエラー
Posted: 2019年9月15日(日) 20:29
by ムノクラ
ご指導いただいたコードに入れ替えたところ、想定通りに動作いたしました。
ありがとうございました!
Re: HIME_PartySwitchingSceneでのエラー
Posted: 2019年9月16日(月) 12:44
by ecf5DTTzl6h6lJj02
ムノクラ さんが書きました:ご指導いただいたコードに入れ替えたところ、想定通りに動作いたしました。
すいません、改めてコードを見返したら、色々やらかしていることに気づきました。
このコードだと、人数制限をかけてないパーティの追加/入れ替えの際や、
パーティーをスイッチして1番以外のパーティーを動かしているときに正しく動作しませんでした。
次のコードに再修正してください。
Scene_PartySwitch.prototype.onPartyOk 関数の変更
コード: 全て選択
Scene_PartySwitch.prototype.onPartyOk = function() {
if(this._listWindow._data._maxPartyMembers != -1 && this._listWindow._data._maxPartyMembers <= this._listWindow.index()){
SoundManager.playBuzzer();
this._listWindow.activate();
}
else{
this._helpWindow.setText($.selectText);
this._listWindow.deactivate();
this._availableWindow.activate();
this._availableWindow.select(0);
}
};
Scene_PartySwitch.prototype.onActorOk 関数の変更
コード: 全て選択
Scene_PartySwitch.prototype.onActorOk = function() {
if( this._availableWindow._data._maxPartyMembers != -1 &&
this._availableWindow._data._maxPartyMembers <= this._availableWindow.index()){
SoundManager.playBuzzer();
this._availableWindow.activate();
}
else{
this.swapMembers();
this._helpWindow.setText($.startText);
this._availableWindow.deselect();
this._availableWindow.deactivate();
this._listWindow.activate();
}
};
Scene_PartySwitch.prototype.swapMembers 関数の変更
コード: 全て選択
Scene_PartySwitch.prototype.swapMembers = function() {
var sIdx = this._listWindow.index()
var tIdx = this._availableWindow.index();
var party = this._listWindow._data
var otherParty = this._availableWindow._data;
var oldActor = party.members()[sIdx];
var newActor = otherParty.members()[tIdx];
var isFull = Party.isPartyFull(party._id);
if (newActor) {
if(isFull){
Party.setMaxPartyMembers(party._id, party._maxPartyMembers + 1);
}
party.addActor(newActor.actorId())
party.swapOrder(newActor.index(), sIdx);
otherParty.removeActor(newActor.actorId());
if (isFull){
Party.setMaxPartyMembers(party._id, party._maxPartyMembers - 1);
}
}
if (oldActor) {
otherParty.addActor(oldActor.actorId());
otherParty.swapOrder(otherParty.members().indexOf(oldActor), tIdx);
party.removeActor(oldActor.actorId());
}
this._listWindow.refresh();
this._availableWindow.refresh();
};
お手数おかけして申し訳ありませんが、よろしくお願いします。
Re: HIME_PartySwitchingSceneでのエラー
Posted: 2019年9月16日(月) 17:46
by ムノクラ
ecf5DTTzl6h6lJj02 さんが書きました:
すいません、改めてコードを見返したら、色々やらかしていることに気づきました。
このコードだと、人数制限をかけてないパーティの追加/入れ替えの際や、
パーティーをスイッチして1番以外のパーティーを動かしているときに正しく動作しませんでした。
次のコードに再修正してください。
入れ替えて動作確認したところ、問題なく動きました。
ありがとうございます。
参考までに確認したケースを挙げておきます。
1.人数制限を3にした状態
パーティメンバー追加、離脱
2番のパーティにスイッチしての同上
2.人数制限を-1にした状態
パーティメンバー追加、離脱
2番のパーティにスイッチしての同上