/*:ja * @plugindesc v1.01 (Lunatic Pack) アクションの最初または最後に発生する効果を追加します。 * @author Yanfly Engine Plugins * * @help * 翻訳:ムノクラ * https://fungamemake.com/ * https://twitter.com/munokura/ * * =========================================================================== * 導入 * =========================================================================== * * このプラグインは以下のプラグインを必要とします: * - YEP_BattleEngineCore * * このプラグインをプラグイン管理で上記のプラグインの下に置きます。 * * 時々、戦闘で行動に追加の効果を追加します。 * これらの効果は、HPをさらに追加すること、 * 他の全てが起こった後に新しいステートを使用者に適用すること、 * デバフを削除すること、アニメーションを再生すること、 * 今度の行動によって直接与えられる全ダメージの一部を吸収することもできます。 * このルナティックパックは、アイテムやスキルを強化したり、 * ステートの結果としてそれらをグローバル化したりするために使用できる * 新しい効果のバッチを提供します。 * * *注意*:このプラグインはRPGツクールMVバージョン1.5.0以降でよく使われます。 * まだ低いバージョンでこのプラグインを使用することができます、 * しかしそれなしでプラグインパラメータを変更することは困難でしょう。 * * =========================================================================== * メモタグ * =========================================================================== * * スキル、アイテム、ステートのメモ欄に次のメモタグを挿入して、 * これらの効果のいずれかを与えます。 * * --- * * スキル、アイテム、ステートのメモタグ * * * - このプラグインのメモタグのほとんどは上記のフォーマットに従います。 * 'timing'は'Begin'・'End'のいずれかに置き換えられ、 * 'effect'は下記のEFFECTの章のエントリに置き換えられます。 * * スキル/アイテムにもっと効果を与えるために複数のメモタグを挿入してください。 * 多数の効果が存在する場合、それらが発生する順番は次のとおりです。 * 最初にスキル/アイテム、 * 優先順位の高いものから低いものへ順に並べたステート効果。 * * =-=-=-= アクションタイミング =-=-=-= * * * - タイミングが'begin'の場合、 * この効果はアクションのコストが使用された後に発生します。 * * * - タイミングが'終了'の場合、 * 現在のアクションの終了時に全てのアクションシーケンスが完了した後に * 発生します。 * * =-=-=-= アクション効果 =-=-=-= * * --- アニメーション効果 --- * * * * * * - アクションを実行している使用者でアニメーションxが再生されます。 * エフェクトラインに'Mirror'を挿入すると、 * アニメーションはミラーリングされます。 * 'Delayy'を挿入して'y'を数値に置き換えると、 * アニメーションの再生前にアニメーションがyフレーム遅延します。 * 提案者:Yanfly * * --- HP 効果 --- * * * * - 'effect'を上記の形式に置き換えます。 * 'x'を使用者に適用したい一定量のHPに置き換えます。 * 提案者:Yanfly * * * * - 'effect'を上記の形式に置き換えます。 * 使用者に適用するには、 * 'x'を使用者のMaxHPのx%に等しいHPに置き換えます。 * 提案者:Yanfly * * * - エンドアクションでのみ機能します。 * 上記のフォーマットを使用してください。 * 'x'をこのアクションの使用者に与えられた総HPダメージの * パーセンテージで置き換えHP回復します。 * 提案者:Yanfly * * * - エンドアクションでのみ機能します。 * 上記のフォーマットを使用してください。 * 使用者がこのアクションで与えた全てのHPダメージの合計の'x%'が * 使用者のダメージになります。 * 提案者:Yanfly * * --- MP 効果 --- * * * * - 'effect''を上記の形式に置き換えます。 * 'x'を使用者に適用したい一定量のMPに置き換えます。 * 提案者:Yanfly * * * * - 'effect'を上記の形式に置き換えます。 * 使用者に適用するには、 * 'x'を使用者のMaxMPのx%に等しいMPに置き換えます。 * 提案者:Yanfly * * * - エンドアクションでのみ機能します。 * 上記のフォーマットを使用してください。 * 'x'をこのアクションによって使用者が直接与えた全ての総MPダメージの割合で * 置き換えてください。 * MPを回復します。 * 提案者:Yanfly * * * - エンドアクションでのみ機能します。 * 上記のフォーマットを使用してください。 * 'x'をこのアクションによって使用者によって * 直接与えられた全ての総MPダメージの割合で置き換えてください。 * MPとして自己ダメージを与えます。 * 提案者:Yanfly * * --- TP 効果 --- * * * * - 'effect'を上記の形式に置き換えます。 * 'x'を使用者に適用したい一定量のTPに置き換えます。 * 提案者:Yanfly * * * * - 'effect'を上記の形式に置き換えます。 * 使用者に適用するには、'x'を使用者のMaxTPのx%に等しいTPに置き換えます。 * 提案者:Yanfly * * --- バフ/デバフ効果 --- * * * * * * - 'effect'を上記の形式に置き換えます。 * 'x'を次のパラメータのいずれかに置き換えます。 * 'MaxHP'、'MaxMP'、'ATK'、'DEF'、'MAT'、'MDF'、'AGI'、'LUK'を指定すると、 * それぞれの効果が変わります。 * 能力値'y'ターンでフォーマットを使用する場合、 * 'y'をバフ・デバフを持続させたいターン数に置き換えてください。 * 'y'が使用されていない場合、代わりに5ターン持続します。 * 提案者:Yanfly * * * * - 'effect'を上記の形式に置き換えます。 * 'x'を次のパラメータのいずれかで置き換えます。 * 'MaxHP'、'MaxMP'、'ATK'、'DEF'、'MAT'、'MDF'、'AGI'、'LUK'を指定すると、 * それぞれのパラメータが削除されます。 * 条件が満たされた場合、使用者からバフ/デバフが解除。 * 'y'が使用されていない場合、代わりに5ターン持続します。 * 提案者:Yanfly * * --- ステート効果 --- * * * - 'effect'を上記の形式に置き換えます。 * 'x'を使用者に追加したいステートIDに置き換えます。 * 提案者:Yanfly * * * - 'effect'を上記の形式に置き換えます。 * 'x'を使用者から削除したいステートIDに置き換えます。 * 提案者:Yanfly * * =========================================================================== * ルナティックモード - 効果コード * =========================================================================== * * RPGツクールMV1.5.0+を使用しているJavaScript経験豊富な使用者に、 * プラグインで使用できる新しいメモタグ効果を追加するか、 * プラグインパラメーターから現在存在するメモタグ効果の効果を変更できます。 * 次のようになります。 * * --- * * // --------- * // Animation * // --------- * if (data.match(/ANIMATION[ ](\d+)/i)) { * var animationId = parseInt(RegExp.$1); * var mirror = data.match(/MIRROR/i); * if (data.match(/DELAY[ ](\d+)/i)) { * var delay = parseInt(RegExp.$1); * } else { * var delay = 0; * } * user.startAnimation(animationId, mirror, delay); * * ... * * // ------------------------------- * // Add new effects above this line * // ------------------------------- * } else { * skip = true; * } * * --- * * このコードビットで使用されている各変数は、次のとおりです。 * * -------------------- -------------------------------------------------- * 変数: 参照: * -------------------- -------------------------------------------------- * item アクションで使用されているアイテム * skill アクションで使用されているスキル * * isItem アクションがアイテムの場合はtrueを返します * isSkill アクションがスキルの場合はtrueを返します * * a アクション使用者を返します * user アクション使用者を返します * subject アクション使用者を返します * * b アクションの現在の対象を返します * target アクションの現在の対象を返します * * s[x] スイッチxを返す(true/false) * v[x] 変数xの現在値を返す * * user._result 使用者の現在の結果 * target._result 対象の現在の結果 * userPreviousResult 変更前の使用者の結果 * targetPreviousResult 変更前の対象の結果 * * totalHpDamage アクションによるHPのダメージの合計 * totalMpDamage アクションを受けたMPのダメージの合計 * * skip デフォルト:false。trueの場合、ポップアップ * * --- * * 効果コードを元のステートに戻す必要がある場合、 * プラグイン管理からプラグインを削除し、もう一度追加してください。 * コードはデフォルトに戻ります。 * * =========================================================================== * Changelog * =========================================================================== * * Version 1.01: * - Bypass the isDevToolsOpen() error when bad code is inserted into a script * call or custom Lunatic Mode code segment due to updating to MV 1.6.1. * * Version 1.00: * - Finished Plugin! * * =========================================================================== * End of Helpfile * =========================================================================== * * @param Effect Code * @text 効果コード * @type note * @desc LUNATICMODE:各メモタグのエフェクトのコード。使用されている変数についてはヘルプファイルを参照してください。 * @default "// ---------\n// Animation\n// ---------\nif (data.match(/ANIMATION[ ](\\d+)/i)) {\n var animationId = parseInt(RegExp.$1);\n var mirror = data.match(/MIRROR/i);\n if (data.match(/DELAY[ ](\\d+)/i)) {\n var delay = parseInt(RegExp.$1);\n } else {\n var delay = 0;\n }\n user.startAnimation(animationId, mirror, delay);\n\n// --------------\n// Flat Gain/Loss\n// --------------\n} else if (data.match(/([\\+\\-]\\d+)[ ]HP/i)) {\n value = parseInt(RegExp.$1);\n user.gainHp(value);\n\n} else if (data.match(/([\\+\\-]\\d+)[ ]MP/i)) {\n value = parseInt(RegExp.$1);\n user.gainMp(value);\n\n} else if (data.match(/([\\+\\-]\\d+)[ ]TP/i)) {\n value = parseInt(RegExp.$1);\n user.gainTp(value);\n\n// --------------------\n// Percentile Gain/Loss\n// --------------------\n} else if (data.match(/([\\+\\-]\\d+)([%%])[ ]HP/i)) {\n rate = parseFloat(RegExp.$1) * 0.01;\n value = Math.round(user.mhp * rate);\n user.gainHp(value);\n\n} else if (data.match(/([\\+\\-]\\d+)([%%])[ ]MP/i)) {\n rate = parseFloat(RegExp.$1) * 0.01;\n value = Math.round(user.mmp * rate);\n user.gainMp(value);\n\n} else if (data.match(/([\\+\\-]\\d+)([%%])[ ]TP/i)) {\n rate = parseFloat(RegExp.$1) * 0.01;\n value = Math.round(user.maxTp() * rate);\n user.gainTp(value);\n\n// ------------------------\n// Add/Remove Buffs/Debuffs\n// ------------------------\n} else if (data.match(/ADD[ ](.*)[ ]BUFF/i)) {\n var str = String(RegExp.$1).toUpperCase();\n var paramId = DataManager.getParamId(str);\n if (data.match(/(\\d+)[ ]TURN/i)) {\n var turns = parseInt(RegExp.$1);\n } else {\n var turns = 5;\n }\n if (paramId >= 0) {\n user.addBuff(paramId, turns);\n } else {\n skip = true;\n }\n\n} else if (data.match(/REMOVE[ ](.*)[ ](?:BUFF|DEBUFF)/i)) {\n var str = String(RegExp.$1).toUpperCase();\n var paramId = DataManager.getParamId(str);\n if (paramId >= 0) {\n user.removeBuff(paramId);\n } else {\n skip = true;\n }\n\n// -----------------\n// Add/Remove States\n// -----------------\n} else if (data.match(/ADD STATE[ ](\\d+)/i)) {\n var stateId = parseInt(RegExp.$1);\n user.addState(stateId);\n\n} else if (data.match(/REMOVE STATE[ ](\\d+)/i)) {\n var stateId = parseInt(RegExp.$1);\n if (user.isStateAffected(stateId)) {\n user.removeState(stateId);\n } else {\n skip = true;\n }\n\n// ------------\n// Drain/Recoil\n// ------------\n} else if (data.match(/(\\d+)([%%])[ ]TOTAL HP[ ](?:DMG|DAMAGE)/i)) {\n if (totalHpDamage !== 0) {\n rate = parseFloat(RegExp.$1) * 0.01;\n value = Math.round(totalHpDamage * rate);\n if (data.match(/DRAIN/i)) {\n user.gainHp(value);\n } else if (data.match(/RECOIL/i)) {\n user.gainHp(-value);\n } else {\n skip = true;\n }\n }\n\n} else if (data.match(/(\\d+)([%%])[ ]TOTAL MP[ ](?:DMG|DAMAGE)/i)) {\n if (totalMpDamage !== 0) {\n rate = parseFloat(RegExp.$1) * 0.01;\n value = Math.round(totalMpDamage * rate);\n if (data.match(/DRAIN/i)) {\n user.gainMp(value);\n } else if (data.match(/RECOIL/i)) {\n user.gainMp(-value);\n } else {\n skip = true;\n }\n }\n\n// -------------------------------\n// Add new effects above this line\n// -------------------------------\n} else {\n skip = true;\n}" * */