brainwashing-school/js/plugins/DarkPlasma_ClearEquip.js
2025-02-25 10:53:19 -06:00

189 lines
5.4 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());
}
);
})();