保存変数について
Posted: 2024年9月23日(月) 00:29
質問失礼します。現在プラグインを制作中なのですが、保存変数が保存されないという問題が発生しております。
$gamePartyにthis._uniqueItemが保存されません。他のプラグインで$gamePartyに同じような処理を書いたものは問題なく動作します。ご回答お待ちしております。
試したのは
・他のプラグインとの兼ね合い←他のプラグインを全部抜いても保存されない。
・変数の定義を即時関数の外側においてみる←だめでした。
長くなりますが、以下コードです。
$gamePartyにthis._uniqueItemが保存されません。他のプラグインで$gamePartyに同じような処理を書いたものは問題なく動作します。ご回答お待ちしております。
試したのは
・他のプラグインとの兼ね合い←他のプラグインを全部抜いても保存されない。
・変数の定義を即時関数の外側においてみる←だめでした。
長くなりますが、以下コードです。
コード: 全て選択
/*:
* @plugindesc ユニークアイテムIDプラグイン
* @author PPP
* @help MV ユニークアイテムIDを設定するプラグインです。
*
*/
(function () {
"use strict";
const pluginName = 'PPP_UniqueItemId';
var UniqueItemId = UniqueItemId || {};
UniqueItemId.ITEM_ORIGIN_ID = 2001;
UniqueItemId.WEAPON_ORIGIN_ID = 2001;
UniqueItemId.ARMOR_ORIGIN_ID = 2001;
UniqueItemId.linkUniqueItem = function(dataArray, uniqueItem) {
if (uniqueItem && dataArray[uniqueItem.originalId]) {
dataArray[uniqueItem.id] = Object.assign({}, dataArray[uniqueItem.originalId]);
dataArray[uniqueItem.id].id = uniqueItem.id;
}
};
UniqueItemId.unlinkUniqueItem = function(dataArray, uniqueItem) {
if (uniqueItem && dataArray[uniqueItem.id]) {
delete dataArray[uniqueItem.id];
while (dataArray.length > 0 && !dataArray[dataArray.length - 1]) {
dataArray.pop();
}
}
};
UniqueItemId.minIndex = function(array, originId) {
array = array.slice(originId);
var id = array.findIndex(element => !element);
return id !== -1 ? id + originId : array.length + originId;
};
// Game_Party
var _Game_Party_initialize = Game_Party.prototype.initialize;
Game_Party.prototype.initialize = function() {
_Game_Party_initialize.apply(this, arguments);
console.log(this._uniqueItems);
this._uniqueItems = this._uniqueItems || {};
this._uniqueItems.items = this._uniqueItems.items || [];
this._uniqueItems.weapons = this._uniqueItems.weapons || [];
this._uniqueItems.armors = this._uniqueItems.armors || [];
this._lastUniqueItem = this._lastUniqueItem || null;
this.restoreUniqueItem();
};
Game_Party.prototype.restoreUniqueItem = function() {
this._uniqueItems.items.forEach(item =>
UniqueItemId.linkUniqueItem($dataItems, item));
this._uniqueItems.weapons.forEach(weapon =>
UniqueItemId.linkUniqueItem($dataWeapons, weapon));
this._uniqueItems.armors.forEach(armor =>
UniqueItemId.linkUniqueItem($dataArmors, armor));
};
Game_Party.prototype.gainUniqueItem = function(item) {
if (DataManager.isItem(item)) {
var uniqueItem = this.createUniqueItem(this.getOriginalItemId(item));
UniqueItemId.linkUniqueItem($dataItems, uniqueItem);
this.gainItem($dataItems[uniqueItem.id], 1);
this._lastUniqueItem = $dataItems[uniqueItem.id];
} else if (DataManager.isWeapon(item)) {
var uniqueWeapon = this.createUniqueWeapon(this.getOriginalItemId(item));
UniqueItemId.linkUniqueItem($dataWeapons, uniqueWeapon);
this.gainItem($dataWeapons[uniqueWeapon.id], 1);
this._lastUniqueItem = $dataWeapons[uniqueWeapon.id];
} else if (DataManager.isArmor(item)) {
var uniqueArmor = this.createUniqueArmor(this.getOriginalItemId(item));
UniqueItemId.linkUniqueItem($dataArmors, uniqueArmor);
this.gainItem($dataArmors[uniqueArmor.id], 1);
this._lastUniqueItem = $dataArmors[uniqueArmor.id];
}
};
var _Game_Party_loseItem = Game_Party.prototype.loseItem;
Game_Party.prototype.loseItem = function(item, amount, includeEquip) {
if (DataManager.isItem(item)) {
var uniqueItem = this._uniqueItems.items[item.id];
UniqueItemId.unlinkUniqueItem($dataItems, uniqueItem);
} else if (DataManager.isWeapon(item)) {
var uniqueWeapon = this._uniqueItems.weapons[item.id];
UniqueItemId.unlinkUniqueItem($dataWeapons, uniqueWeapon);
} else if (DataManager.isArmor(item)) {
var uniqueArmor = this._uniqueItems.armors[item.id];
UniqueItemId.unlinkUniqueItem($dataArmors, uniqueArmor);
}
_Game_Party_loseItem.call(this, item, amount, includeEquip);
};
Game_Party.prototype.getLastUniqueItem = function() {
return this._lastUniqueItem;
};
Game_Party.prototype.getOriginalItemId = function(item) {
if (DataManager.isItem(item)) {
var uniqueItem = this._uniqueItems.items[item.id];
return uniqueItem ? uniqueItem.originalId : item.id;
} else if (DataManager.isWeapon(item)) {
var uniqueWeapon = this._uniqueItems.weapons[item.id];
return uniqueWeapon ? uniqueWeapon.originalId : item.id;
} else if (DataManager.isArmor(item)) {
var uniqueArmor = this._uniqueItems.armors[item.id];
return uniqueArmor ? uniqueArmor.originalId : item.id;
}
};
Game_Party.prototype.createUniqueItem = function(originalId) {
var id = UniqueItemId.minIndex(this._uniqueItems.items, UniqueItemId.ITEM_ORIGIN_ID);
this._uniqueItems.items[id] = {
id: id,
originalId: originalId,
variables: {}
};
return this._uniqueItems.items[id];
};
Game_Party.prototype.createUniqueWeapon = function(originalId) {
var id = UniqueItemId.minIndex(this._uniqueItems.weapons, UniqueItemId.WEAPON_ORIGIN_ID);
console.log(id)
this._uniqueItems.weapons[id] = {
id: id,
originalId: originalId,
variables: {}
};
return this._uniqueItems.weapons[id];
};
Game_Party.prototype.createUniqueArmor = function(originalId, id) {
var id = UniqueItemId.minIndex(this._uniqueItems.armors, UniqueItemId.ARMOR_ORIGIN_ID);
this._uniqueItems.armors[id] = {
id: id,
originalId: originalId,
variables: {}
};
return this._uniqueItems.armors[id];
};
Game_Party.prototype.getItemVariable = function(item, index) {
var uniqueItem = null;
if (DataManager.isItem(item)) {
uniqueItem = this._uniqueItems.items[item.id];
} else if (DataManager.isWeapon(item)) {
uniqueItem = this._uniqueItems.weapons[item.id];
} else if (DataManager.isArmor(item)) {
uniqueItem = this._uniqueItems.armors[item.id];
}
if (uniqueItem) {
return uniqueItem.variables ? uniqueItem.variables[index] : undefined;
}
return undefined;
};
Game_Party.prototype.setItemVariable = function(item, index, value) {
var uniqueItem = null;
if (DataManager.isItem(item)) {
uniqueItem = this._uniqueItems.items[item.id];
} else if (DataManager.isWeapon(item)) {
uniqueItem = this._uniqueItems.weapons[item.id];
} else if (DataManager.isArmor(item)) {
uniqueItem = this._uniqueItems.armors[item.id];
}
if (uniqueItem) {
uniqueItem.variables = uniqueItem.variables || {};
uniqueItem.variables[index] = value;
}
};
Game_Party.prototype.uniqueItems = function() {
return this._uniqueItems.items;
};
Game_Party.prototype.uniqueWeapons = function() {
return this._uniqueItems.weapons;
};
Game_Party.prototype.uniqueArmors = function() {
return this._uniqueItems.armors;
};
var _Game_Party_items = Game_Party.prototype.items;
Game_Party.prototype.items = function() {
var items = _Game_Party_items.apply(this);
return items.filter(item => item);
};
var _Game_Party_weapons = Game_Party.prototype.weapons;
Game_Party.prototype.weapons = function() {
var weapons = _Game_Party_weapons.apply(this);
return weapons.filter(weapon => weapon);
};
var _Game_Party_armors = Game_Party.prototype.armors;
Game_Party.prototype.armors = function() {
var armors = _Game_Party_armors.apply(this);
return armors.filter(armor => armor);
};
var _DataManager_isItem = DataManager.isItem;
DataManager.isItem = function(item) {
return item && !!$gameParty.uniqueItems()[item.id] || _DataManager_isItem.call(this, item);
};
var _DataManager_isWeapon = DataManager.isWeapon;
DataManager.isWeapon = function(item) {
return item && !!$gameParty.uniqueWeapons()[item.id] || _DataManager_isWeapon.call(this, item);
};
var _DataManager_isArmor = DataManager.isArmor;
DataManager.isArmor = function(item) {
return item && !!$gameParty.uniqueArmors()[item.id] || _DataManager_isArmor.call(this, item);
};
})();