157 lines
5.2 KiB
JavaScript
157 lines
5.2 KiB
JavaScript
// DarkPlasma_ClearEquip 2.1.3
|
|
// Copyright (c) 2020 DarkPlasma
|
|
// This software is released under the MIT license.
|
|
// http://opensource.org/licenses/mit-license.php
|
|
|
|
/**
|
|
* 2024/03/17 2.1.3 TypeScript移行
|
|
* 2021/07/05 2.1.2 MZ 1.3.2に対応
|
|
* 2021/06/22 2.1.1 サブフォルダからの読み込みに対応
|
|
* 2020/10/30 2.1.0 プラグインコマンドを追加
|
|
* 2020/10/10 2.0.2 リファクタ
|
|
* 2020/09/29 2.0.1 プラグインコマンドに説明を追加
|
|
* 2020/09/08 2.0.0 パラメータ名を変更
|
|
* 2020/08/27 1.0.0 MZ版公開
|
|
*/
|
|
|
|
/*:
|
|
* @plugindesc 装備をすべてはずす
|
|
* @author DarkPlasma
|
|
* @license MIT
|
|
*
|
|
* @target MZ
|
|
* @url https://github.com/elleonard/DarkPlasma-MZ-Plugins/tree/release
|
|
*
|
|
* @param clearEquipWhenMemberIsOut
|
|
* @desc パーティから外れたときに装備をすべてはずすかどうか
|
|
* @text パーティアウト時装備はずす
|
|
* @type boolean
|
|
* @default false
|
|
*
|
|
* @command clearEquip
|
|
* @text 装備をはずす
|
|
* @desc 指定したアクターの装備をはずします。
|
|
* @arg actorId
|
|
* @text アクター
|
|
* @type actor
|
|
* @arg equipTypes
|
|
* @text 装備タイプID
|
|
* @desc はずす装備タイプ一覧
|
|
* @type number[]
|
|
*
|
|
* @command clearAllMemberEquip
|
|
* @text 全員の装備をはずす
|
|
* @desc パーティメンバー全員の装備をはずします。
|
|
* @arg equipTypes
|
|
* @text 装備タイプID
|
|
* @desc はずす装備タイプ一覧
|
|
* @type number[]
|
|
*
|
|
* @command clearAllEquip
|
|
* @text 装備をすべてはずす
|
|
* @desc 指定したアクターの装備をすべてはずします。
|
|
* @arg actorId
|
|
* @text アクター
|
|
* @type actor
|
|
*
|
|
* @command clearAllMemberAllEquip
|
|
* @text 全員の装備をすべてはずす
|
|
* @desc パーティメンバー全員の装備をすべてはずします。
|
|
*
|
|
* @help
|
|
* version: 2.1.3
|
|
* プラグインパラメータの設定をONにしておくと、
|
|
* パーティからメンバーが脱退したとき、
|
|
* そのメンバーの装備を固定装備を除いてすべてはずします。
|
|
*
|
|
* プラグインコマンドによって、指定アクターやパーティ全員の装備を
|
|
* 装備タイプを指定したり全部位について、固定装備を除いてはずすことができます。
|
|
*/
|
|
|
|
(() => {
|
|
'use strict';
|
|
|
|
const pluginName = document.currentScript.src.replace(/^.*\/(.*).js$/, function () {
|
|
return arguments[1];
|
|
});
|
|
|
|
function parseArgs_clearEquip(args) {
|
|
return {
|
|
actorId: Number(args.actorId || 0),
|
|
equipTypes: JSON.parse(args.equipTypes || '[]').map((e) => {
|
|
return Number(e || 0);
|
|
}),
|
|
};
|
|
}
|
|
|
|
function parseArgs_clearAllMemberEquip(args) {
|
|
return {
|
|
equipTypes: JSON.parse(args.equipTypes || '[]').map((e) => {
|
|
return Number(e || 0);
|
|
}),
|
|
};
|
|
}
|
|
|
|
function parseArgs_clearAllEquip(args) {
|
|
return {
|
|
actorId: Number(args.actorId || 0),
|
|
};
|
|
}
|
|
|
|
const command_clearEquip = 'clearEquip';
|
|
|
|
const command_clearAllMemberEquip = 'clearAllMemberEquip';
|
|
|
|
const command_clearAllEquip = 'clearAllEquip';
|
|
|
|
const command_clearAllMemberAllEquip = 'clearAllMemberAllEquip';
|
|
|
|
const pluginParametersOf = (pluginName) => PluginManager.parameters(pluginName);
|
|
|
|
const pluginParameters = pluginParametersOf(pluginName);
|
|
|
|
const settings = {
|
|
clearEquipWhenMemberIsOut: String(pluginParameters.clearEquipWhenMemberIsOut || false) === 'true',
|
|
};
|
|
|
|
const _Game_Party_removeActor = Game_Party.prototype.removeActor;
|
|
Game_Party.prototype.removeActor = function (actorId) {
|
|
// パーティメンバーがはずれたときに装備をすべてはずす
|
|
if (settings.clearEquipWhenMemberIsOut && this._actors.includes(actorId)) {
|
|
$gameActors.actor(actorId)?.clearEquipments();
|
|
}
|
|
_Game_Party_removeActor.call(this, actorId);
|
|
};
|
|
/**
|
|
* 指定した装備タイプIDの装備を可能であればはずす
|
|
* @param {number[]} equipTypes 装備タイプIDリスト
|
|
*/
|
|
Game_Actor.prototype.clearEquipByEquipTypes = function (equipTypes) {
|
|
[...Array(this.equipSlots().length).keys()]
|
|
.filter((slotId) => {
|
|
return equipTypes.includes(this.equipSlots()[slotId]) && this.isEquipChangeOk(slotId);
|
|
})
|
|
.forEach((slotId) => this.changeEquip(slotId, null));
|
|
};
|
|
PluginManager.registerCommand(pluginName, command_clearEquip, function (args) {
|
|
const parsedArgs = parseArgs_clearEquip(args);
|
|
const actor = $gameParty.members().find((actor) => actor.actorId() === parsedArgs.actorId);
|
|
if (actor) {
|
|
actor.clearEquipByEquipTypes(parsedArgs.equipTypes);
|
|
}
|
|
});
|
|
PluginManager.registerCommand(pluginName, command_clearAllEquip, function (args) {
|
|
const parsedArgs = parseArgs_clearAllEquip(args);
|
|
const actor = $gameParty.members().find((actor) => actor.actorId() === parsedArgs.actorId);
|
|
if (actor) {
|
|
actor.clearEquipments();
|
|
}
|
|
});
|
|
PluginManager.registerCommand(pluginName, command_clearAllMemberEquip, function (args) {
|
|
const parsedArgs = parseArgs_clearAllMemberEquip(args);
|
|
$gameParty.members().forEach((actor) => actor.clearEquipByEquipTypes(parsedArgs.equipTypes));
|
|
});
|
|
PluginManager.registerCommand(pluginName, command_clearAllMemberAllEquip, function () {
|
|
$gameParty.members().forEach((actor) => actor.clearEquipments());
|
|
});
|
|
})();
|