/*------------------------------ Copyright (c) 2025 PotatoDragon Released under the MIT License. https://opensource.org/license/mit ------------------------------*/ /*: @target MZ @url https://raw.githubusercontent.com/pota-gon/RPGMakerMZ/refs/heads/main/plugins/Data/State/MemberState.js @plugindesc Member State Ver1.0.0 (2025/1/1) @author PotatoDragon @license MIT License @help English Help Translator: munokura This is an unofficial English translation of the plugin help, created to support global RPG Maker users. Feedback is welcome to improve translation quality (see: https://github.com/munokura/PotatoDragon-MZ-plugins ). Original plugin by PotatoDragon. Please check the latest official version at: https://github.com/pota-gon/RPGMakerMZ/wiki ----- ## Overview Create a member state that applies to each member count. ## How to Use 1. Create a member state that applies to each member count. Check "Release at end of battle." 2. Set the member state in the plugin parameters. 3. A member state is granted for each member count in battle. @param MemberStates @text Member State @desc Member State Settings @type struct[] @default [] */ /*:ja @plugindesc メンバーステート Ver1.0.0(2025/1/1) @url https://raw.githubusercontent.com/pota-gon/RPGMakerMZ/refs/heads/main/plugins/Data/State/MemberState.js @target MZ @author ポテトードラゴン ・アップデート情報 Ver1.0.0: 公開 Copyright (c) 2025 ポテトードラゴン Released under the MIT License. https://opensource.org/license/mit @help ## 概要 メンバーの人数ごとに効果を発揮するメンバーステートを作成します ## 使い方 1. メンバーの人数ごとに効果を発揮するメンバーステートを作成 このとき、「戦闘終了時に解除」にチェックを入れてください 2. プラグインパラメータにて、メンバーステートの設定を実施 3. 戦闘でメンバーの人数ごとにメンバーステートが付与されます @param MemberStates @type struct[] @text メンバーステート @desc メンバーステート設定 @default [] */ (() => { 'use strict'; // ベースプラグインの処理 function Potadra_getPluginName(extension = 'js') { const reg = new RegExp(".+\/(.+)\." + extension); return decodeURIComponent(document.currentScript.src).replace(reg, '$1'); } function Potadra_convertBool(bool) { if (bool === "false" || bool === '' || bool === undefined) { return false; } else { return true; } } function Potadra_numberArray(data) { return data ? JSON.parse(data).map(Number) : []; } // パラメータ用定数 const plugin_name = Potadra_getPluginName(); const params = PluginManager.parameters(plugin_name); // 各パラメータ用定数 let MemberStates; if (params.MemberStates) MemberStates = JSON.parse(params.MemberStates); // メンバーステート判定: アクター function memberActorState() { const alive_members = $gameParty.aliveMembers(); for (const s of MemberStates) { const state = JSON.parse(s); const count = Number(state.count || 1); const member_state = Number(state.member_state || 0); const actor = Potadra_convertBool(state.actor); const member_state_actors = Potadra_numberArray(state.member_state_actors); if (!actor) continue; // メンバーステート判定: アクター if (alive_members.length === count) { for (const member of alive_members) { // メンバーステートID指定 if (member_state_actors.length >= 1) { const member_id = member.actorId(); for (const id of member_state_actors) { if (id === member_id && !member.isStateAffected(member_state)) { member.addState(member_state); return true; } } } else { // メンバーステートを付与 if (!member.isStateAffected(member_state)) member.addState(member_state); } } } else { for (const member of alive_members) { // メンバーの判定を満たさなかったら、メンバーを解除 member.eraseState(member_state); } } } } // メンバーステート判定: 敵キャラ function memberEnemyState() { const alive_members = $gameTroop.aliveMembers(); for (const s of MemberStates) { const state = JSON.parse(s); const count = Number(state.count || 1); const member_state = Number(state.member_state || 0); const enemy = Potadra_convertBool(state.enemy); const member_state_enemies = Potadra_numberArray(state.member_state_enemies); if (!enemy) continue; // メンバーステート判定: 敵キャラ if (alive_members.length === count) { for (const member of alive_members) { // メンバーステートID指定 if (member_state_enemies.length >= 1) { const member_id = member.enemyId(); for (const id of member_state_enemies) { if (id === member_id && !member.isStateAffected(member_state)) { member.addState(member_state); return true; } } } else { // メンバーステートを付与 if (!member.isStateAffected(member_state)) member.addState(member_state); } } } else { for (const member of alive_members) { // メンバーの判定を満たさなかったら、メンバーを解除 member.eraseState(member_state); } } } } /** * 戦闘開始処理 * * @param {} advantageous - */ const _Game_Battler_onBattleStart = Game_Battler.prototype.onBattleStart; Game_Battler.prototype.onBattleStart = function(advantageous) { // メンバーステート判定: アクター memberActorState(); // メンバーステート判定: 敵キャラ memberEnemyState(); _Game_Battler_onBattleStart.apply(this, arguments); }; /** * アクション実行 * * @param {} target - */ const _Game_Action_apply = Game_Action.prototype.apply; Game_Action.prototype.apply = function(target) { _Game_Action_apply.apply(this, arguments); // メンバーステート判定: アクター memberActorState(); // メンバーステート判定: 敵キャラ memberEnemyState(); }; })();