ultimate-angel-zerachiel/www/js/plugins/YEP_StatAllocation.js
2024-01-17 11:38:37 -06:00

2557 lines
89 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

//=============================================================================
// Yanfly Engine Plugins - Stat Allocation
// YEP_StatAllocation.js
//=============================================================================
var Imported = Imported || {};
Imported.YEP_StatAllocation = true;
var Yanfly = Yanfly || {};
Yanfly.StatAlc = Yanfly.StatAlc || {};
Yanfly.StatAlc.version = 1.02;
//=============================================================================
/*:
* @plugindesc v1.02 Add a menu to your game to allocate stats for party
* members. Stats can be allocated through AP, JP, or items!
* @author Yanfly Engine Plugins
*
* @help
* ============================================================================
* Introduction
* ============================================================================
*
* Lots of players love to customization in games. It lets them put a bit of a
* personal touch in the games they like to play, and what a better way to do
* that than through Stat Allocation? With the Stat Allocation, players can
* alter the amount of MaxHP, MaxMP, ATK, DEF, etc. through a new resource, AP,
* which stands for Allocation Points. AP is usually gained through leveling up
* and is then used to boost stats!
*
* However, if AP is not your thing, you can also allocate stats through JP
* (using the Job Points plugin) or through items! This plugin gives you, the
* game dev, three different ways to allocate stats with!
*
* Stat Allocation in this plugin is tied to classes and not actors as a whole.
* This means that the allocation build that an actor can vary depending on the
* class the actor currently is. This means the player can experiment with
* multiple allocation builds instead of a one-size fits all allocation build
* if class changing is involved.
*
* Classes can also offer different parameters to allocate points into, too.
* A warrior class may give options for ATK and DEF while a mage class can give
* options for MaxMP or MAT. This can be done through the usage of notetags for
* each class.
*
* You can adjust the allocation rules for how each stat, too, from the name to
* the icon to the cost to the effect to the maximum number of times the stat
* can be allocated into. These can all be done through the plugin parameters.
*
* ============================================================================
* Notetags
* ============================================================================
*
* If you want to give certain classes different stats to allocate into, use
* the following notetag setups:
*
* Class Notetags:
*
* <Stat Allocation: x, x, x>
*
* or
*
* <Stat Allocation>
* x
* x
* x
* </Stat Allocation>
* - Replace 'x' with a stat to add it to a list of parameters that players
* can allocate points into. Insert as many 'x' entries as you need. They
* will appear in the menu in the order they've been placed. Unaffiliated
* stats will not appear in the menu. Use any of the stats below:
*
* ---
*
* Param: Stands for:
*
* mhp Max HP
* mmp Max MP
* atk Attack
* def Defense
* mat Magic Attack
* mdf Magic Defense
* agi Agility
* luk Luck
*
* XParam:
*
* hit Hit Rate
* eva Evasion Rate
* cri Critical Hit Rate
* cev Critical Evasion Rate
* mev Magic Evasion Rate
* mrf Magic Reflection Rate
* cnt Counterattack Rate
* hrg HP Regeneration Rate
* mrg MP Regeneration Rate
* trg TP Regeneration Rate
*
* SParam:
*
* tgr Target Rate
* grd Guard Effect Rate
* rec Recovery Rate
* pha Pharmacology (Item Effectiveness)
* mcr MP Cost Rate
* tcr TP Charge Rate
* pdr Physical Damage Rate
* mdr Magical Damage Rate
* fdr Floor Damage Rate
* exr Experience Rate
*
* ---
*
* These can be inserted into the 'Default Parameters' plugin parameter, too,
* to change up the default listing and make it apply to every class that does
* not have their own unique notetag setup.
*
* ============================================================================
* Main Menu Manager - Positioning the Allocate Command
* ============================================================================
*
* For those using the Main Menu Manager and would like to position the Allocate
* command in a place you'd like, use the following format:
*
* Name: Yanfly.Param.StatAlcCmdName
* Symbol: statAllocate
* Show: $gameSystem.isShowStatAllocate()
* Enabled: $gameSystem.isEnableStatAllocate()
* Ext:
* Main Bind: this.commandPersonal.bind(this)
* Actor Bind: SceneManager.push(Scene_StatAllocation)
*
* Insert the above setup within a Main Menu Manager slot. Provided you copy
* the exact settings to where you need it, it will appear there while using
* all of the naming, enabling, disabling, hiding, and showing effects done by
* the plugin parameters.
*
* Remember to turn off 'Auto Add Menu' from the plugin parameters.
*
* ============================================================================
* Plugin Commands
* ============================================================================
*
* You can use the following plugin commands for various Stat Allocation
* related effects in your game!
*
* Plugin Commands:
*
* ShowStatAllocate
* HideStatAllocate
* - This will show or hide the main menu's Stat Allocation command.
*
* EnableStatAllocate
* DisableStatAllocate
* - This will enable or disable the main menu's Stat Allocation command.
*
* ShowRevertAllocate
* HideRevertAllocate
* - This will show or hide the Allocation scene's 'Revert' command.
*
* EnableRevertAllocate
* DisableRevertAllocate
* - This will enable or disable the Allocation scene's 'Revert' command.
*
* OpenStatAllocate x
* - This will open up the stat allocation menu for the party member whose
* index is equal to x. 0 is the first slot.
*
* ============================================================================
* Lunatic Mode - Script Calls
* ============================================================================
*
* You can use the following script calls to give actors extra AP to use.
*
* Script Calls:
*
* var actor = $gameActors.actor(actorId);
* actor.gainBonusAp(x, classId);
* - Replace 'actorId' with the ID of the actor you wish to affect.
* Replace 'x' with the amount of AP you wish to apply to the actor.
* Replace 'classId' with the ID of the class you wish to give AP to.
* You can keep 'classId' as 0 to make it affect the actor's current class.
*
* var actor = $gameActors.actor(actorId);
* actor.setBonusAp(x, classId);
* - Replace 'actorId' with the ID of the actor you wish to affect.
* Replace 'x' with the amount of AP you wish to set the actor's AP to.
* Replace 'classId' with the ID of the class you wish to set the AP to.
* You can keep 'classId' as 0 to make it affect the actor's current class.
*
* ============================================================================
* Changelog
* ============================================================================
*
* Version 1.02:
* - Fixed an exploit that would allow actors to fully regain HP/MP.
*
* Version 1.01:
* - Bugfixed for those who didn't have Allocate appear.
* - Added plugin command to open up Stat Allocation scene.
*
* Version 1.00:
* - Finished Plugin!
*
* ============================================================================
* End of Helpfile
* ============================================================================
*
* @param ---General---
* @default
*
* @param Command Text
* @parent ---General---
* @desc This is the text used for the menu command.
* @default Allocate
*
* @param Auto Add Menu
* @parent ---General---
* @desc Automatically add the 'Stat Allocate' command to the main menu?
* NO - false YES - true
* @default true
*
* @param Show Command
* @parent ---General---
* @type boolean
* @on Show
* @off Hide
* @desc Show the Stat Allocate command in the main menu by default?
* NO - false YES - true
* @default true
*
* @param Enable Command
* @parent ---General---
* @type boolean
* @on Enable
* @off Disable
* @desc Enable the Stat Allocate command in the main menu by default?
* NO - false YES - true
* @default true
*
* @param Auto Place Command
* @parent ---General---
* @type boolean
* @on Automatic
* @off Manual
* @desc Allow this plugin to decide the menu placement position?
* NO - false YES - true
* @default true
*
* @param Left/Right Allocate
* @parent ---General---
* @type boolean
* @on Allow
* @off Don't Allow
* @desc Allow allocating (and unallocating) with LEFT/RIGHT keys?
* NO - false YES - true
* @default true
*
* @param ---AP---
* @default
*
* @param AP Name
* @parent ---AP---
* @desc How 'AP' appears in your game.
* @default AP
*
* @param AP Icon
* @parent ---AP---
* @desc Icon index used for AP.
* @default 87
*
* @param AP Formula
* @parent ---AP---
* @desc The formula code for how much AP the actor should have at
* the calculated level.
* @default (level - 1) * 5
*
* @param AP Amount Format
* @parent ---AP---
* @desc Format used when displaying available AP.
* %1 - Amount %2 - AP Text %3 - AP Icon
* @default %1\c[4]%2\c[0]%3
*
* @param Show AP in Menu
* @parent ---AP---
* @type boolean
* @on Show
* @off Hide
* @desc Showthe AP in the menus?
* NO - false YES - true
* @default true
*
* @param ---Command Window---
* @default
*
* @param Text Alignment
* @parent ---Command Window---
* @type combo
* @option left
* @option center
* @option right
* @desc How to align the text for the command window.
* left center right
* @default center
*
* @param Allocate Command
* @parent ---Command Window---
* @desc The command text used for Stat Allocation.
* @default Allocate
*
* @param Revert Command
* @parent ---Command Window---
* @desc The command text used for reverting allocation settings.
* @default Revert
*
* @param Show Revert
* @parent Revert Command
* @type boolean
* @on Show
* @off Hide
* @desc Show the Revert command by default?
* NO - false YES - true
* @default true
*
* @param Enable Revert
* @parent Revert Command
* @type boolean
* @on Enable
* @off Disable
* @desc Enable the Revert command by default?
* NO - false YES - true
* @default true
*
* @param Finish Command
* @parent ---Command Window---
* @desc The command text used for Finish/Leaving the scene.
* Leave this blank to not include it.
* @default Finish
*
* @param ---Allocation Window---
* @default
*
* @param Default Parameters
* @parent ---Allocation Window---
* @type string[]
* @desc A list of the parameters to be listed in the allocation
* window. Refer to help file for a list of parameters.
* @default ["mhp","mmp","atk","def","mat","mdf","agi","luk"]
*
* @param Allocate Refresh
* @parent ---Allocation Window---
* @type boolean
* @on YES
* @off NO
* @desc Refresh actor after each allocation?
* Recommended to be on, but it can potentially lag.
* @default false
*
* @param Small Item Names
* @parent ---Allocation Window---
* @type boolean
* @on YES
* @off NO
* @desc Make item names smaller for the costs?
* @default false
*
* @param drawCode
* @text Draw Code
* @parent ---Allocation Window---
* @type note
* @desc Code used to draw the parameters.
* @default "// Initialize Variables\nvar param = this._list[index].ext;\nvar data = this.paramData(param);\nvar rect = this.itemRectForText(index);\n// Draw Gauge\nvar gaugeColor1 = data.gaugeColor1 || '#000000';\nvar gaugeColor2 = data.gaugeColor2 || '#000000';\nvar rate = this.paramAllocationRate(param);\nvar width = this.contentsWidth() - 330;\nthis.drawGauge(rect.x, rect.y, width, rate, gaugeColor1, gaugeColor2);\n// Draw Parameter Name\nthis.drawParamName(param, rect.x + this.textPadding(), rect.y, width);\n// Draw Parameter Values\nthis.drawParamValues(param, rect.x + this.textPadding(), rect.y, width);\n// Draw Parameter Cost\nthis.drawParamCost(param, rect.x + rect.width - width, rect.y, width);"
*
* @param Base Parameters
* @parent ---Allocation Window---
*
* @param mhp Settings
* @parent Base Parameters
* @type struct<paramSettings>
* @desc Settings for this parameter.
* @default {"name":"auto","iconIndex":"0","description":"\"Increases the maximum health of this unit by +10.\"","gaugeColor1":"#e08040","gaugeColor2":"#f0c040","allocationBonus":"10","maxAllocations":"100","apCost":"\"cost = 1 + Math.floor(times / 10);\"","jpCost":"\"cost = 0;\"","itemId":"0","itemCost":"\"cost = 1;\""}
*
* @param mmp Settings
* @parent Base Parameters
* @type struct<paramSettings>
* @desc Settings for this parameter.
* @default {"name":"auto","iconIndex":"0","description":"\"Increases the maximum MP of this unit by +5.\"","gaugeColor1":"#4080c0","gaugeColor2":"#40c0f0","allocationBonus":"5","maxAllocations":"100","apCost":"\"cost = 1 + Math.floor(times / 10);\"","jpCost":"\"cost = 0;\"","itemId":"0","itemCost":"\"cost = 1;\""}
*
* @param atk Settings
* @parent Base Parameters
* @type struct<paramSettings>
* @desc Settings for this parameter.
* @default {"name":"auto","iconIndex":"0","description":"\"Increases the physical attack power of this unit by +1.\"","gaugeColor1":"#ed1c24","gaugeColor2":"#f26c4f","allocationBonus":"1","maxAllocations":"100","apCost":"\"cost = 1;\"","jpCost":"\"cost = 0;\"","itemId":"0","itemCost":"\"cost = 1;\""}
*
* @param def Settings
* @parent Base Parameters
* @type struct<paramSettings>
* @desc Settings for this parameter.
* @default {"name":"auto","iconIndex":"0","description":"\"Increases the physical defense of this unit by +1.\"","gaugeColor1":"#f7941d","gaugeColor2":"#fdc689","allocationBonus":"1","maxAllocations":"100","apCost":"\"cost = 1;\"","jpCost":"\"cost = 0;\"","itemId":"0","itemCost":"\"cost = 1;\""}
*
* @param mat Settings
* @parent Base Parameters
* @type struct<paramSettings>
* @desc Settings for this parameter.
* @default {"name":"auto","iconIndex":"0","description":"\"Increases the magical attack power of this unit by +1.\"","gaugeColor1":"#605ca8","gaugeColor2":"#bd8cbf","allocationBonus":"1","maxAllocations":"100","apCost":"\"cost = 1;\"","jpCost":"\"cost = 0;\"","itemId":"0","itemCost":"\"cost = 1;\""}
*
* @param mdf Settings
* @parent Base Parameters
* @type struct<paramSettings>
* @desc Settings for this parameter.
* @default {"name":"auto","iconIndex":"0","description":"\"Increases the magical defense of this unit by +1.\"","gaugeColor1":"#448ccb","gaugeColor2":"#a6caf4","allocationBonus":"1","maxAllocations":"100","apCost":"\"cost = 1;\"","jpCost":"\"cost = 0;\"","itemId":"0","itemCost":"\"cost = 1;\""}
*
* @param agi Settings
* @parent Base Parameters
* @type struct<paramSettings>
* @desc Settings for this parameter.
* @default {"name":"auto","iconIndex":"0","description":"\"Increases the agility of this unit by +1.\"","gaugeColor1":"#39b54a","gaugeColor2":"#82ca9c","allocationBonus":"1","maxAllocations":"100","apCost":"\"cost = 1;\"","jpCost":"\"cost = 0;\"","itemId":"0","itemCost":"\"cost = 1;\""}
*
* @param luk Settings
* @parent Base Parameters
* @type struct<paramSettings>
* @desc Settings for this parameter.
* @default {"name":"auto","iconIndex":"0","description":"\"Increases the luck of this unit by +1.\"","gaugeColor1":"#fff568","gaugeColor2":"#fffac3","allocationBonus":"1","maxAllocations":"100","apCost":"\"cost = 1;\"","jpCost":"\"cost = 0;\"","itemId":"0","itemCost":"\"cost = 1;\""}
*
* @param Extra Parameters
* @parent ---Allocation Window---
*
* @param hit Settings
* @parent Extra Parameters
* @type struct<paramSettings>
* @desc Settings for this parameter.
* @default {"name":"auto","iconIndex":"0","description":"\"Increases the physical hit rate of this unit by +0.5%.\"","gaugeColor1":"#ca3c7a","gaugeColor2":"#ff9fc9","allocationBonus":"0.005","maxAllocations":"10","apCost":"\"cost = 3;\"","jpCost":"\"cost = 0;\"","itemId":"0","itemCost":"\"cost = 1;\""}
*
* @param eva Settings
* @parent Extra Parameters
* @type struct<paramSettings>
* @desc Settings for this parameter.
* @default {"name":"auto","iconIndex":"0","description":"\"Increases the physical evasion rate of this unit by +0.5%.\"","gaugeColor1":"#ca3c7a","gaugeColor2":"#ff9fc9","allocationBonus":"0.005","maxAllocations":"10","apCost":"\"cost = 3;\"","jpCost":"\"cost = 0;\"","itemId":"0","itemCost":"\"cost = 1;\""}
*
* @param cri Settings
* @parent Extra Parameters
* @type struct<paramSettings>
* @desc Settings for this parameter.
* @default {"name":"auto","iconIndex":"0","description":"\"Increases the critical hit rate of this unit by +0.5%.\"","gaugeColor1":"#ca3c7a","gaugeColor2":"#ff9fc9","allocationBonus":"0.005","maxAllocations":"10","apCost":"\"cost = 3;\"","jpCost":"\"cost = 0;\"","itemId":"0","itemCost":"\"cost = 1;\""}
*
* @param cev Settings
* @parent Extra Parameters
* @type struct<paramSettings>
* @desc Settings for this parameter.
* @default {"name":"auto","iconIndex":"0","description":"\"Increases the critical evasion rate of this unit by +0.5%.\"","gaugeColor1":"#ca3c7a","gaugeColor2":"#ff9fc9","allocationBonus":"0.005","maxAllocations":"10","apCost":"\"cost = 3;\"","jpCost":"\"cost = 0;\"","itemId":"0","itemCost":"\"cost = 1;\""}
*
* @param mev Settings
* @parent Extra Parameters
* @type struct<paramSettings>
* @desc Settings for this parameter.
* @default {"name":"auto","iconIndex":"0","description":"\"Increases the magic evasion rate of this unit by +0.5%.\"","gaugeColor1":"#ca3c7a","gaugeColor2":"#ff9fc9","allocationBonus":"0.005","maxAllocations":"10","apCost":"\"cost = 3;\"","jpCost":"\"cost = 0;\"","itemId":"0","itemCost":"\"cost = 1;\""}
*
* @param mrf Settings
* @parent Extra Parameters
* @type struct<paramSettings>
* @desc Settings for this parameter.
* @default {"name":"auto","iconIndex":"0","description":"\"Increases the magic reflection rate of this unit by +1%.\"","gaugeColor1":"#ca3c7a","gaugeColor2":"#ff9fc9","allocationBonus":"0.01","maxAllocations":"10","apCost":"\"cost = 3;\"","jpCost":"\"cost = 0;\"","itemId":"0","itemCost":"\"cost = 1;\""}
*
* @param cnt Settings
* @parent Extra Parameters
* @type struct<paramSettings>
* @desc Settings for this parameter.
* @default {"name":"auto","iconIndex":"0","description":"\"Increases the counterattack rate of this unit by +1%.\"","gaugeColor1":"#ca3c7a","gaugeColor2":"#ff9fc9","allocationBonus":"0.01","maxAllocations":"10","apCost":"\"cost = 3;\"","jpCost":"\"cost = 0;\"","itemId":"0","itemCost":"\"cost = 1;\""}
*
* @param hrg Settings
* @parent Extra Parameters
* @type struct<paramSettings>
* @desc Settings for this parameter.
* @default {"name":"auto","iconIndex":"0","description":"\"Increases the HP regeneration rate of this unit by +1%.\"","gaugeColor1":"#ca3c7a","gaugeColor2":"#ff9fc9","allocationBonus":"0.01","maxAllocations":"20","apCost":"\"cost = 3;\"","jpCost":"\"cost = 0;\"","itemId":"0","itemCost":"\"cost = 1;\""}
*
* @param mrg Settings
* @parent Extra Parameters
* @type struct<paramSettings>
* @desc Settings for this parameter.
* @default {"name":"auto","iconIndex":"0","description":"\"Increases the MP regeneration rate of this unit by +1%.\"","gaugeColor1":"#ca3c7a","gaugeColor2":"#ff9fc9","allocationBonus":"0.01","maxAllocations":"20","apCost":"\"cost = 3;\"","jpCost":"\"cost = 0;\"","itemId":"0","itemCost":"\"cost = 1;\""}
*
* @param trg Settings
* @parent Extra Parameters
* @type struct<paramSettings>
* @desc Settings for this parameter.
* @default {"name":"auto","iconIndex":"0","description":"\"Increases the TP regeneration rate of this unit by +1%.\"","gaugeColor1":"#ca3c7a","gaugeColor2":"#ff9fc9","allocationBonus":"0.01","maxAllocations":"20","apCost":"\"cost = 3;\"","jpCost":"\"cost = 0;\"","itemId":"0","itemCost":"\"cost = 1;\""}
*
* @param Special Parameters
* @parent ---Allocation Window---
*
* @param tgr Settings
* @parent Special Parameters
* @type struct<paramSettings>
* @desc Settings for this parameter.
* @default {"name":"auto","iconIndex":"0","description":"\"Increases the target rate of this unit by -1%.\"","gaugeColor1":"#8c6239","gaugeColor2":"#c69c6d","allocationBonus":"0.01","maxAllocations":"10","apCost":"\"cost = 5;\"","jpCost":"\"cost = 0;\"","itemId":"0","itemCost":"\"cost = 1;\""}
*
* @param grd Settings
* @parent Special Parameters
* @type struct<paramSettings>
* @desc Settings for this parameter.
* @default {"name":"auto","iconIndex":"0","description":"\"Increases the guard effect rate of this unit by +5%.\"","gaugeColor1":"#8c6239","gaugeColor2":"#c69c6d","allocationBonus":"0.05","maxAllocations":"20","apCost":"\"cost = 5;\"","jpCost":"\"cost = 0;\"","itemId":"0","itemCost":"\"cost = 1;\""}
*
* @param rec Settings
* @parent Special Parameters
* @type struct<paramSettings>
* @desc Settings for this parameter.
* @default {"name":"auto","iconIndex":"0","description":"\"Increases the recovery effect rate of this unit by +5%.\"","gaugeColor1":"#8c6239","gaugeColor2":"#c69c6d","allocationBonus":"0.05","maxAllocations":"20","apCost":"\"cost = 5;\"","jpCost":"\"cost = 0;\"","itemId":"0","itemCost":"\"cost = 1;\""}
*
* @param pha Settings
* @parent Special Parameters
* @type struct<paramSettings>
* @desc Settings for this parameter.
* @default {"name":"auto","iconIndex":"0","description":"\"Increases the item effectiveness rate of this unit by +5%.\"","gaugeColor1":"#8c6239","gaugeColor2":"#c69c6d","allocationBonus":"0.05","maxAllocations":"20","apCost":"\"cost = 5;\"","jpCost":"\"cost = 0;\"","itemId":"0","itemCost":"\"cost = 1;\""}
*
* @param mcr Settings
* @parent Special Parameters
* @type struct<paramSettings>
* @desc Settings for this parameter.
* @default {"name":"auto","iconIndex":"0","description":"\"Decrease the MP cost of skills of this unit by -1%.\"","gaugeColor1":"#8c6239","gaugeColor2":"#c69c6d","allocationBonus":"-0.01","maxAllocations":"50","apCost":"\"cost = 5;\"","jpCost":"\"cost = 0;\"","itemId":"0","itemCost":"\"cost = 1;\""}
*
* @param tcr Settings
* @parent Special Parameters
* @type struct<paramSettings>
* @desc Settings for this parameter.
* @default {"name":"auto","iconIndex":"0","description":"\"Increase the TP charge rate of this unit by +1%.\"","gaugeColor1":"#8c6239","gaugeColor2":"#c69c6d","allocationBonus":"0.01","maxAllocations":"50","apCost":"\"cost = 5;\"","jpCost":"\"cost = 0;\"","itemId":"0","itemCost":"\"cost = 1;\""}
*
* @param pdr Settings
* @parent Special Parameters
* @type struct<paramSettings>
* @desc Settings for this parameter.
* @default {"name":"auto","iconIndex":"0","description":"\"Decrease the physical damage received by this unit by -1%.\"","gaugeColor1":"#8c6239","gaugeColor2":"#c69c6d","allocationBonus":"-0.01","maxAllocations":"50","apCost":"\"cost = 5;\"","jpCost":"\"cost = 0;\"","itemId":"0","itemCost":"\"cost = 1;\""}
*
* @param mdr Settings
* @parent Special Parameters
* @type struct<paramSettings>
* @desc Settings for this parameter.
* @default {"name":"auto","iconIndex":"0","description":"\"Decrease the magical damage received by this unit by -1%.\"","gaugeColor1":"#8c6239","gaugeColor2":"#c69c6d","allocationBonus":"-0.01","maxAllocations":"50","apCost":"\"cost = 5;\"","jpCost":"\"cost = 0;\"","itemId":"0","itemCost":"\"cost = 1;\""}
*
* @param fdr Settings
* @parent Special Parameters
* @type struct<paramSettings>
* @desc Settings for this parameter.
* @default {"name":"auto","iconIndex":"0","description":"\"Decrease the floord damage received by this unit by -1%.\"","gaugeColor1":"#8c6239","gaugeColor2":"#c69c6d","allocationBonus":"-0.01","maxAllocations":"50","apCost":"\"cost = 1;\"","jpCost":"\"cost = 0;\"","itemId":"0","itemCost":"\"cost = 1;\""}
*
* @param exr Settings
* @parent Special Parameters
* @type struct<paramSettings>
* @desc Settings for this parameter.
* @default {"name":"auto","iconIndex":"0","description":"\"Increase the EXP received by this unit by +1%.\"","gaugeColor1":"#8c6239","gaugeColor2":"#c69c6d","allocationBonus":"0.01","maxAllocations":"100","apCost":"\"cost = 1;\"","jpCost":"\"cost = 0;\"","itemId":"0","itemCost":"\"cost = 1;\""}
*
* @param ---Revert---
* @default
*
* @param RevertConfirmationText
* @text Confirmation Text
* @parent ---Revert---
* @type note
* @desc The text to display for the revert window.
* @default "Do you wish to revert all allocated parmeters?\nAll \\c[4]AP\\c[0], \\c[4]JP\\c[0], and \\c[4]Items\\c[0] will be refunded."
*
* @param RevertWinWidth
* @text Window Width
* @parent ---Revert---
* @type number
* @min 1
* @desc Window width for the revert window.
* @default 700
*
* @param RevertYes
* @text Yes Text
* @parent ---Revert---
* @desc Text for 'Yes' in the Revert Confirmation Window.
* @default Revert
*
* @param RevertNo
* @text No Text
* @parent ---Revert---
* @desc Text for 'No' in the Revert Confirmation Window.
* @default Don't Revert
*
*/
/*~struct~paramSettings:
* @param name
* @text Name
* @desc Name to use for this parameter. Use 'auto' for automatic naming.
* @default auto
*
* @param iconIndex
* @text Icon
* @desc Icon to use for this parameter.
* @default 0
*
* @param description
* @text Help Description
* @type note
* @desc Help description used for this parameter.
* @default "Line1\nLine2"
*
* @param gaugeColor1
* @text Gauge Color 1
* @desc This is the gauge color 1 for this parameter in a
* hex color format. #rrggbb
* @default #ffffff
*
* @param gaugeColor2
* @text Gauge Color 2
* @desc This is the gauge color 2 for this parameter in a
* hex color format. #rrggbb
* @default #ffffff
*
* @param allocationBonus
* @text Allocation Bonus
* @desc The bonus value added per allocation.
* @default 1
*
* @param maxAllocations
* @text Max Allocations
* @type number
* @min 1
* @desc Maximum number of times this stat can be allocated.
* @default 100
*
* @param apCost
* @text AP Cost
* @type note
* @desc The AP cost to upgrade this parameter.
* cost = final value times = times already upgraded
* @default "cost = 1 + times;"
*
* @param jpCost
* @text JP Cost
* @type note
* @desc The JP cost to upgrade this parameter. Req: YEP_JobPoints.
* cost = final value times = times already upgraded
* @default "cost = 0;"
*
* @param itemId
* @text Item ID
* @type item
* @desc The ID of the item used for the cost.
* Leave it at 0 if you don't want an item cost.
* @default 0
*
* @param itemCost
* @text Item Cost
* @type note
* @desc The item cost to upgrade this parameter.
* cost = final value times = times already upgraded
* @default "cost = 1;"
*
*/
//=============================================================================
//=============================================================================
// Parameter Variables
//=============================================================================
Yanfly.Parameters = PluginManager.parameters("YEP_StatAllocation");
Yanfly.Param = Yanfly.Param || {};
Yanfly.Param.StatAlcCmdName = String(Yanfly.Parameters["Command Text"]);
Yanfly.Param.StatAlcAutoAdd = eval(String(Yanfly.Parameters["Auto Add Menu"]));
Yanfly.Param.StatAlcShowCmd = String(Yanfly.Parameters["Show Command"]);
Yanfly.Param.StatAlcShowCmd = eval(Yanfly.Param.StatAlcShowCmd);
Yanfly.Param.StatAlcEnableCmd = String(Yanfly.Parameters["Enable Command"]);
Yanfly.Param.StatAlcEnableCmd = eval(Yanfly.Param.StatAlcEnableCmd);
Yanfly.Param.StatAlcAutoPlace = String(Yanfly.Parameters["Auto Place Command"]);
Yanfly.Param.StatAlcAutoPlace = eval(Yanfly.Param.StatAlcAutoPlace);
Yanfly.Param.StatAlcLfRt = String(Yanfly.Parameters["Left/Right Allocate"]);
Yanfly.Param.StatAlcLfRt = eval(Yanfly.Param.StatAlcLfRt);
Yanfly.Param.StatAlcAP = String(Yanfly.Parameters["AP Name"]);
Yanfly.Param.StatAlcAPIcon = Number(Yanfly.Parameters["AP Icon"]);
Yanfly.Param.StatAlcAPAmtFmt = String(Yanfly.Parameters["AP Amount Format"]);
Yanfly.Param.StatAlcAPMenu = eval(String(Yanfly.Parameters["Show AP in Menu"]));
Yanfly.Param.StatAlcTextAlign = String(Yanfly.Parameters["Text Alignment"]);
Yanfly.Param.StatAlcAllocateCmd = String(Yanfly.Parameters["Allocate Command"]);
Yanfly.Param.StatAlcRevertCmd = String(Yanfly.Parameters["Revert Command"]);
Yanfly.Param.StatAlcRevertShow = eval(String(Yanfly.Parameters["Show Revert"]));
Yanfly.Param.StatAlcRevertEnable = String(Yanfly.Parameters["Enable Revert"]);
Yanfly.Param.StatAlcRevertEnable = eval(Yanfly.Param.StatAlcRevertEnable);
Yanfly.Param.StatAlcFinishCmd = String(Yanfly.Parameters["Finish Command"]);
Yanfly.Param.StatAlcList = JSON.parse(Yanfly.Parameters["Default Parameters"]);
Yanfly.Param.StatAlcRefresh = String(Yanfly.Parameters["Allocate Refresh"]);
Yanfly.Param.StatAlcRefresh = eval(Yanfly.Param.StatAlcRefresh);
Yanfly.Param.StatAlcDrawCode = JSON.parse(Yanfly.Parameters["drawCode"]);
Yanfly.Param.StatAlcDrawCode = new Function(
"index",
Yanfly.Param.StatAlcDrawCode
);
Yanfly.Param.StatAlcSmItemName = String(Yanfly.Parameters["Small Item Names"]);
Yanfly.Param.StatAlcSmItemName = eval(Yanfly.Param.StatAlcSmItemName);
Yanfly.Param.StatAlcRevConfirmText = JSON.parse(
Yanfly.Parameters["RevertConfirmationText"]
);
Yanfly.Param.StatAlcRevWinWidth = String(Yanfly.Parameters["RevertWinWidth"]);
Yanfly.Param.StatAlcRevYes = String(Yanfly.Parameters["RevertYes"]);
Yanfly.Param.StatAlcRevNo = String(Yanfly.Parameters["RevertNo"]);
Yanfly.SetupParameters = function () {
Yanfly.Param.StatAlcAPFormula = new Function(
"level",
"return " + String(Yanfly.Parameters["AP Formula"])
);
Yanfly.Param.StatAlcParamSettings = {
mhp: Yanfly.ConvertParameterStructure("mhp Settings"),
mmp: Yanfly.ConvertParameterStructure("mmp Settings"),
atk: Yanfly.ConvertParameterStructure("atk Settings"),
def: Yanfly.ConvertParameterStructure("def Settings"),
mat: Yanfly.ConvertParameterStructure("mat Settings"),
mdf: Yanfly.ConvertParameterStructure("mdf Settings"),
agi: Yanfly.ConvertParameterStructure("agi Settings"),
luk: Yanfly.ConvertParameterStructure("luk Settings"),
hit: Yanfly.ConvertParameterStructure("hit Settings"),
eva: Yanfly.ConvertParameterStructure("eva Settings"),
cri: Yanfly.ConvertParameterStructure("cri Settings"),
cev: Yanfly.ConvertParameterStructure("cev Settings"),
mev: Yanfly.ConvertParameterStructure("mev Settings"),
mrf: Yanfly.ConvertParameterStructure("mrf Settings"),
cnt: Yanfly.ConvertParameterStructure("cnt Settings"),
hrg: Yanfly.ConvertParameterStructure("hrg Settings"),
mrg: Yanfly.ConvertParameterStructure("mrg Settings"),
trg: Yanfly.ConvertParameterStructure("trg Settings"),
tgr: Yanfly.ConvertParameterStructure("tgr Settings"),
grd: Yanfly.ConvertParameterStructure("grd Settings"),
rec: Yanfly.ConvertParameterStructure("rec Settings"),
pha: Yanfly.ConvertParameterStructure("pha Settings"),
mcr: Yanfly.ConvertParameterStructure("mcr Settings"),
tcr: Yanfly.ConvertParameterStructure("tcr Settings"),
pdr: Yanfly.ConvertParameterStructure("pdr Settings"),
mdr: Yanfly.ConvertParameterStructure("mdr Settings"),
fdr: Yanfly.ConvertParameterStructure("fdr Settings"),
exr: Yanfly.ConvertParameterStructure("exr Settings"),
};
};
Yanfly.ConvertParameterStructure = function (parameterName) {
var data = JSON.parse(Yanfly.Parameters[parameterName]);
data.description = JSON.parse(data.description);
data.allocationBonus = Number(data.allocationBonus);
data.maxAllocations = Math.max(1, Number(data.maxAllocations));
data.apCost = new Function(
"times",
"var cost = 0;\n " + JSON.parse(data.apCost) + "\nreturn Math.ceil(cost);"
);
data.jpCost = new Function(
"times",
"var cost = 0;\n " + JSON.parse(data.jpCost) + "\nreturn Math.ceil(cost);"
);
data.itemId = Number(data.itemId);
data.itemCost = new Function(
"times",
"var cost = 0;\n " + JSON.parse(data.itemCost) + "\nreturn Math.ceil(cost);"
);
return data;
};
Yanfly.SetupParameters();
//=============================================================================
// DataManager
//=============================================================================
Yanfly.StatAlc.DataManager_isDatabaseLoaded = DataManager.isDatabaseLoaded;
DataManager.isDatabaseLoaded = function () {
if (!Yanfly.StatAlc.DataManager_isDatabaseLoaded.call(this)) return false;
if (!Yanfly._loaded_YEP_StatAllocation) {
this.processStatAllocationNotetags1($dataClasses);
Yanfly._loaded_YEP_StatAllocation = true;
}
return true;
};
DataManager.processStatAllocationNotetags1 = function (group) {
for (var n = 1; n < group.length; n++) {
var obj = group[n];
var notedata = obj.note.split(/[\r\n]+/);
obj.statAllocationList = JsonEx.makeDeepCopy(Yanfly.Param.StatAlcList);
var customMode = "none";
for (var i = 0; i < notedata.length; i++) {
var line = notedata[i];
if (line.match(/<Stat[ ](?:Allocation|Allocate):[ ](.*)>/i)) {
obj.statAllocationList = this.extractStatAllocationList(RegExp.$1);
} else if (line.match(/<Stat[ ](?:Allocation|Allocate)>/i)) {
obj.statAllocationList = [];
var customMode = "stat allocation";
} else if (line.match(/<Stat[ ](?:Allocation|Allocate)>/i)) {
var customMode = "none";
} else if (customMode === "stat allocation") {
line = line.toLowerCase().trim();
if (line === "maxhp") line = "mhp";
if (line === "maxmp") line = "mmp";
obj.statAllocationList.push(line);
}
}
}
};
DataManager.extractStatAllocationList = function (data) {
var array = [];
var list = data.split(",");
var length = list.length;
for (var i = 0; i < length; ++i) {
var str = list[i];
array.push(str.trim().toLowerCase());
}
return array;
};
//=============================================================================
// TextManager
//=============================================================================
TextManager.ap = function () {
return Yanfly.Param.StatAlcAP;
};
//=============================================================================
// Game_System
//=============================================================================
Yanfly.StatAlc.Game_System_initialize = Game_System.prototype.initialize;
Game_System.prototype.initialize = function () {
Yanfly.StatAlc.Game_System_initialize.call(this);
this.initStatAllocation();
};
Game_System.prototype.initStatAllocation = function () {
this._showStatAlloccate = Yanfly.Param.StatAlcShowCmd;
this._enableStatAllocate = Yanfly.Param.StatAlcEnableCmd;
this._showRevertAllocate = Yanfly.Param.StatAlcRevertShow;
this._enableRevertAllocate = Yanfly.Param.StatAlcRevertEnable;
};
Game_System.prototype.isShowStatAllocate = function () {
if (this._showStatAlloccate === undefined) this.initStatAllocation();
return this._showStatAlloccate;
};
Game_System.prototype.isEnableStatAllocate = function () {
if (this._enableStatAllocate === undefined) this.initStatAllocation();
return this._enableStatAllocate;
};
Game_System.prototype.isShowRevertAllocate = function () {
if (this._showRevertAllocate === undefined) this.initStatAllocation();
return this._showRevertAllocate;
};
Game_System.prototype.isEnableRevertAllocate = function () {
if (this._enableRevertAllocate === undefined) this.initStatAllocation();
return this._enableRevertAllocate;
};
//=============================================================================
// Game_BattlerBase
//=============================================================================
Yanfly.StatAlc.Game_BattlerBase_param = Game_BattlerBase.prototype.param;
Game_BattlerBase.prototype.param = function (paramId) {
var value = Yanfly.StatAlc.Game_BattlerBase_param.call(this, paramId);
value += this.paramAllocationBonus(paramId);
return value;
};
Game_BattlerBase.prototype.paramAllocationBonus = function (paramId) {
return 0;
};
Yanfly.StatAlc.Game_BattlerBase_xparam = Game_BattlerBase.prototype.xparam;
Game_BattlerBase.prototype.xparam = function (xparamId) {
var value = Yanfly.StatAlc.Game_BattlerBase_xparam.call(this, xparamId);
value += this.xparamAllocationBonus(xparamId);
return value;
};
Game_BattlerBase.prototype.xparamAllocationBonus = function (xparamId) {
return 0;
};
Yanfly.StatAlc.Game_BattlerBase_sparam = Game_BattlerBase.prototype.sparam;
Game_BattlerBase.prototype.sparam = function (sparamId) {
var value = Yanfly.StatAlc.Game_BattlerBase_sparam.call(this, sparamId);
value += this.sparamAllocationBonus(sparamId);
return value;
};
Game_BattlerBase.prototype.sparamAllocationBonus = function (sparamId) {
return 0;
};
//=============================================================================
// Game_Actor
//=============================================================================
Yanfly.StatAlc.Game_Actor_initMembers = Game_Actor.prototype.initMembers;
Game_Actor.prototype.initMembers = function () {
Yanfly.StatAlc.Game_Actor_initMembers.call(this);
this.initStatAllocation();
this.initAllocationPoints();
};
Game_Actor.prototype.initStatAllocation = function () {
this._paramAllocationTimes = {};
this._xparamAllocationTimes = {};
this._sparamAllocationTimes = {};
};
Game_Actor.prototype.initAllocationPoints = function () {
this._bonusAllocationPoints = {};
this._spentAllocationPoints = {};
};
Game_Actor.prototype.initAllocationPointsCheck = function () {
if (this._bonusAllocationPoints === undefined) this.initAllocationPoints();
if (this._spentAllocationPoints === undefined) this.initAllocationPoints();
};
Game_Actor.prototype.getParamAllocateTimes = function (paramId, classId) {
classId = classId || this._classId;
if (this._paramAllocationTimes === undefined) this.initStatAllocation();
if (this._paramAllocationTimes[classId] === undefined) {
this._paramAllocationTimes[classId] = [0, 0, 0, 0, 0, 0, 0, 0];
}
var max = this.getParamAllocateMax(paramId);
return this._paramAllocationTimes[classId][paramId].clamp(0, max);
};
Game_Actor.prototype.gainParamAllocateTimes = function (
paramId,
times,
classId
) {
classId = classId || this._classId;
if (this._paramAllocationTimes === undefined) this.initStatAllocation();
var value = this.getParamAllocateTimes(paramId) + times;
var maxHp = this.mhp;
var maxMp = this.mmp;
this.setParamAllocateTimes(paramId, value);
var maxHpDifference = this.mhp - maxHp;
var maxMpDifference = this.mmp - maxMp;
this._hp += maxHpDifference;
this._mp += maxMpDifference;
};
Game_Actor.prototype.setParamAllocateTimes = function (
paramId,
times,
classId
) {
classId = classId || this._classId;
if (this._paramAllocationTimes === undefined) this.initStatAllocation();
if (this._paramAllocationTimes[classId] === undefined) {
this._paramAllocationTimes[classId] = [0, 0, 0, 0, 0, 0, 0, 0];
}
this._paramAllocationTimes[classId][paramId] = times;
var max = this.getParamAllocateMax(paramId);
this._paramAllocationTimes[classId][paramId] = this._paramAllocationTimes[
classId
][paramId].clamp(0, max);
if (Yanfly.Param.StatAlcRefresh) this.refresh();
};
Game_Actor.prototype.getParamAllocateBoost = function (paramId) {
var data = Yanfly.Param.StatAlcParamSettings;
if (paramId === 0) return data.mhp.allocationBonus;
if (paramId === 1) return data.mmp.allocationBonus;
if (paramId === 2) return data.atk.allocationBonus;
if (paramId === 3) return data.def.allocationBonus;
if (paramId === 4) return data.mat.allocationBonus;
if (paramId === 5) return data.mdf.allocationBonus;
if (paramId === 6) return data.agi.allocationBonus;
if (paramId === 7) return data.luk.allocationBonus;
return 1;
};
Game_Actor.prototype.getParamAllocateMax = function (paramId) {
var data = Yanfly.Param.StatAlcParamSettings;
if (paramId === 0) return data.mhp.maxAllocations;
if (paramId === 1) return data.mmp.maxAllocations;
if (paramId === 2) return data.atk.maxAllocations;
if (paramId === 3) return data.def.maxAllocations;
if (paramId === 4) return data.mat.maxAllocations;
if (paramId === 5) return data.mdf.maxAllocations;
if (paramId === 6) return data.agi.maxAllocations;
if (paramId === 7) return data.luk.maxAllocations;
return 100;
};
Game_Actor.prototype.paramAllocationBonus = function (paramId) {
if ($gameTemp._ignoreStatAllocations) return 0;
return Math.ceil(
this.getParamAllocateTimes(paramId) * this.getParamAllocateBoost(paramId)
);
};
Game_Actor.prototype.getXParamAllocateTimes = function (paramId, classId) {
classId = classId || this._classId;
if (this._xparamAllocationTimes === undefined) this.initStatAllocation();
if (this._xparamAllocationTimes[classId] === undefined) {
this._xparamAllocationTimes[classId] = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0];
}
var max = this.getXParamAllocateMax(paramId);
return this._xparamAllocationTimes[classId][paramId].clamp(0, max);
};
Game_Actor.prototype.gainXParamAllocateTimes = function (
paramId,
times,
classId
) {
classId = classId || this._classId;
if (this._xparamAllocationTimes === undefined) this.initStatAllocation();
var value = this.getXParamAllocateTimes(paramId) + times;
this.setXParamAllocateTimes(paramId, value);
};
Game_Actor.prototype.setXParamAllocateTimes = function (
paramId,
times,
classId
) {
classId = classId || this._classId;
if (this._xparamAllocationTimes === undefined) this.initStatAllocation();
if (this._xparamAllocationTimes[classId] === undefined) {
this._xparamAllocationTimes[classId] = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0];
}
this._xparamAllocationTimes[classId][paramId] = times;
var max = this.getXParamAllocateMax(paramId);
this._xparamAllocationTimes[classId][paramId] = this._xparamAllocationTimes[
classId
][paramId].clamp(0, max);
if (Yanfly.Param.StatAlcRefresh) this.refresh();
};
Game_Actor.prototype.getXParamAllocateBoost = function (paramId) {
var data = Yanfly.Param.StatAlcParamSettings;
if (paramId === 0) return data.hit.allocationBonus;
if (paramId === 1) return data.eva.allocationBonus;
if (paramId === 2) return data.cri.allocationBonus;
if (paramId === 3) return data.cev.allocationBonus;
if (paramId === 4) return data.mev.allocationBonus;
if (paramId === 5) return data.mrf.allocationBonus;
if (paramId === 6) return data.cnt.allocationBonus;
if (paramId === 7) return data.hrg.allocationBonus;
if (paramId === 8) return data.mrg.allocationBonus;
if (paramId === 9) return data.trg.allocationBonus;
return 1;
};
Game_Actor.prototype.getXParamAllocateMax = function (paramId) {
var data = Yanfly.Param.StatAlcParamSettings;
if (paramId === 0) return data.hit.maxAllocations;
if (paramId === 1) return data.eva.maxAllocations;
if (paramId === 2) return data.cri.maxAllocations;
if (paramId === 3) return data.cev.maxAllocations;
if (paramId === 4) return data.mev.maxAllocations;
if (paramId === 5) return data.mrf.maxAllocations;
if (paramId === 6) return data.cnt.maxAllocations;
if (paramId === 7) return data.hrg.maxAllocations;
if (paramId === 8) return data.mrg.maxAllocations;
if (paramId === 9) return data.trg.maxAllocations;
return 100;
};
Game_Actor.prototype.xparamAllocationBonus = function (paramId) {
if ($gameTemp._ignoreStatAllocations) return 0;
return (
this.getXParamAllocateTimes(paramId) * this.getXParamAllocateBoost(paramId)
);
};
Game_Actor.prototype.getSParamAllocateTimes = function (paramId, classId) {
classId = classId || this._classId;
if (this._sparamAllocationTimes === undefined) this.initStatAllocation();
if (this._sparamAllocationTimes[classId] === undefined) {
this._sparamAllocationTimes[classId] = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0];
}
var max = this.getSParamAllocateMax(paramId);
return this._sparamAllocationTimes[classId][paramId].clamp(0, max);
};
Game_Actor.prototype.gainSParamAllocateTimes = function (
paramId,
times,
classId
) {
classId = classId || this._classId;
if (this._sparamAllocationTimes === undefined) this.initStatAllocation();
var value = this.getSParamAllocateTimes(paramId) + times;
this.setSParamAllocateTimes(paramId, value);
};
Game_Actor.prototype.setSParamAllocateTimes = function (
paramId,
times,
classId
) {
classId = classId || this._classId;
if (this._sparamAllocationTimes === undefined) this.initStatAllocation();
if (this._sparamAllocationTimes[classId] === undefined) {
this._sparamAllocationTimes[classId] = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0];
}
this._sparamAllocationTimes[classId][paramId] = times;
var max = this.getSParamAllocateMax(paramId);
this._sparamAllocationTimes[classId][paramId] = this._sparamAllocationTimes[
classId
][paramId].clamp(0, max);
if (Yanfly.Param.StatAlcRefresh) this.refresh();
};
Game_Actor.prototype.getSParamAllocateBoost = function (paramId) {
var data = Yanfly.Param.StatAlcParamSettings;
if (paramId === 0) return data.tgr.allocationBonus;
if (paramId === 1) return data.grd.allocationBonus;
if (paramId === 2) return data.rec.allocationBonus;
if (paramId === 3) return data.pha.allocationBonus;
if (paramId === 4) return data.mcr.allocationBonus;
if (paramId === 5) return data.tcr.allocationBonus;
if (paramId === 6) return data.pdr.allocationBonus;
if (paramId === 7) return data.mdr.allocationBonus;
if (paramId === 8) return data.fdr.allocationBonus;
if (paramId === 9) return data.exr.allocationBonus;
return 1;
};
Game_Actor.prototype.getSParamAllocateMax = function (paramId) {
var data = Yanfly.Param.StatAlcParamSettings;
if (paramId === 0) return data.tgr.maxAllocations;
if (paramId === 1) return data.grd.maxAllocations;
if (paramId === 2) return data.rec.maxAllocations;
if (paramId === 3) return data.pha.maxAllocations;
if (paramId === 4) return data.mcr.maxAllocations;
if (paramId === 5) return data.tcr.maxAllocations;
if (paramId === 6) return data.pdr.maxAllocations;
if (paramId === 7) return data.mdr.maxAllocations;
if (paramId === 8) return data.fdr.maxAllocations;
if (paramId === 9) return data.exr.maxAllocations;
return 100;
};
Game_Actor.prototype.sparamAllocationBonus = function (paramId) {
if ($gameTemp._ignoreStatAllocations) return 0;
return (
this.getSParamAllocateTimes(paramId) * this.getSParamAllocateBoost(paramId)
);
};
Game_Actor.prototype.baseAp = function () {
return Math.max(0, Yanfly.Param.StatAlcAPFormula.call(this, this.level));
};
Game_Actor.prototype.bonusAp = function () {
this.initAllocationPointsCheck();
this._bonusAllocationPoints[this._classId] =
this._bonusAllocationPoints[this._classId] || 0;
return Math.max(0, this._bonusAllocationPoints[this._classId]);
};
Game_Actor.prototype.spentAp = function () {
this.initAllocationPointsCheck();
this._spentAllocationPoints[this._classId] =
this._spentAllocationPoints[this._classId] || 0;
return Math.max(0, this._spentAllocationPoints[this._classId]);
};
Game_Actor.prototype.totalAp = function () {
return Math.max(0, this.baseAp() + this.bonusAp());
};
Game_Actor.prototype.availableAp = function () {
return Math.max(0, this.totalAp() - this.spentAp());
};
Game_Actor.prototype.spendAp = function (value) {
this.initAllocationPointsCheck();
this._spentAllocationPoints[this._classId] =
this._spentAllocationPoints[this._classId] || 0;
this._spentAllocationPoints[this._classId] += value;
};
Game_Actor.prototype.setBonusAp = function (value, classId) {
this.initAllocationPointsCheck();
classId = classId || this._classId;
this._bonusAllocationPoints[classId] = value;
};
Game_Actor.prototype.gainBonusAp = function (value, classId) {
this.initAllocationPointsCheck();
classId = classId || this._classId;
var ap = this._bonusAllocationPoints[classId] || 0;
ap += value;
this.setBonusAp(value, classId);
};
//=============================================================================
// Game_Interpreter
//=============================================================================
Yanfly.StatAlc.Game_Interpreter_pluginCommand =
Game_Interpreter.prototype.pluginCommand;
Game_Interpreter.prototype.pluginCommand = function (command, args) {
Yanfly.StatAlc.Game_Interpreter_pluginCommand.call(this, command, args);
if (command.match(/ShowStatAllocate/i)) {
$gameSystem._showStatAlloccate = true;
} else if (command.match(/HideStatAllocate/i)) {
$gameSystem._showStatAlloccate = false;
} else if (command.match(/EnableStatAllocate/i)) {
$gameSystem._enableStatAllocate = true;
} else if (command.match(/DisableStatAllocate/i)) {
$gameSystem._enableStatAllocate = false;
} else if (command.match(/ShowRevertAllocate/i)) {
$gameSystem._showRevertAllocate = true;
} else if (command.match(/HideRevertAllocate/i)) {
$gameSystem._showRevertAllocate = false;
} else if (command.match(/EnableRevertAllocate/i)) {
$gameSystem._enableRevertAllocate = true;
} else if (command.match(/DisableRevertAllocate/i)) {
$gameSystem._enableRevertAllocate = false;
} else if (command.match(/OpenStatAllocat/i)) {
var index = args.shift() || 0;
$gameParty.members().forEach(function (actor) {
ImageManager.reserveFace(actor.faceName());
}, this);
$gameParty.setMenuActor($gameParty.members()[index]);
SceneManager.push(Scene_StatAllocation);
}
};
Game_Interpreter.prototype.argsToString = function (args) {
var str = "";
var length = args.length;
for (var i = 0; i < length; ++i) {
str += args[i] + " ";
}
return str.trim();
};
//=============================================================================
// Window_Base
//=============================================================================
Window_Base.prototype.drawActorAp = function (actor, x, y) {
var fmt = Yanfly.Param.StatAlcAPAmtFmt;
var icon = "\\i[" + Yanfly.Param.StatAlcAPIcon + "]";
var name = Yanfly.Param.StatAlcAP;
var amount = actor.availableAp();
var text = fmt.format(amount, name, icon);
this.drawTextEx(text, x, y);
};
Yanfly.StatAlc.Window_Base_drawActorStatus =
Window_Base.prototype.drawActorSimpleStatus;
Window_Base.prototype.drawActorSimpleStatus = function (actor, x, y, width) {
Yanfly.StatAlc.Window_Base_drawActorStatus.call(this, actor, x, y, width);
if (!Yanfly.Param.StatAlcAPMenu) return;
if (Yanfly.Param.MenuTpGauge) {
y += this.lineHeight() * 3;
} else {
y += this.lineHeight() * 2.5;
x -= Window_Base._faceWidth + this.standardPadding() - this.textPadding();
}
this.drawActorAp(actor, x, y);
};
//=============================================================================
// Window_MenuCommand
//=============================================================================
Yanfly.StatAlc.Window_MenuCommand_addOriginalCommands =
Window_MenuCommand.prototype.addOriginalCommands;
Window_MenuCommand.prototype.addOriginalCommands = function () {
Yanfly.StatAlc.Window_MenuCommand_addOriginalCommands.call(this);
if (Yanfly.Param.StatAlcAutoAdd) this.addStatAllocationCommand();
};
Window_MenuCommand.prototype.addStatAllocationCommand = function () {
if (!Yanfly.Param.StatAlcAutoPlace) return;
if (!$gameSystem.isShowStatAllocate()) return;
if (this.findSymbol("statAllocate") > -1) return;
var text = Yanfly.Param.StatAlcCmdName;
var enabled = $gameSystem.isEnableStatAllocate();
this.addCommand(text, "statAllocate", enabled);
};
//=============================================================================
// Window_StatAllocationCommand
//=============================================================================
function Window_StatAllocationCommand() {
this.initialize.apply(this, arguments);
}
Window_StatAllocationCommand.prototype = Object.create(
Window_Command.prototype
);
Window_StatAllocationCommand.prototype.constructor =
Window_StatAllocationCommand;
Window_StatAllocationCommand.prototype.initialize = function () {
Window_Command.prototype.initialize.call(this, 0, 0);
};
Window_StatAllocationCommand.prototype.windowWidth = function () {
return 240;
};
Window_StatAllocationCommand.prototype.numVisibleRows = function () {
return 4;
};
Window_StatAllocationCommand.prototype.itemTextAlign = function () {
return Yanfly.Param.StatAlcTextAlign;
};
Window_StatAllocationCommand.prototype.makeCommandList = function () {
this.addAllocateCommand();
this.addCustomCommands();
this.addRevertCommand();
this.addFinishCommand();
};
Window_StatAllocationCommand.prototype.addAllocateCommand = function () {
var name = Yanfly.Param.StatAlcAllocateCmd;
this.addCommand(name, "allocate", true);
};
Window_StatAllocationCommand.prototype.addCustomCommands = function () {};
Window_StatAllocationCommand.prototype.addRevertCommand = function () {
if (!$gameSystem.isShowRevertAllocate()) return;
var name = Yanfly.Param.StatAlcRevertCmd;
var enabled = $gameSystem.isEnableRevertAllocate();
this.addCommand(name, "revert", enabled);
};
Window_StatAllocationCommand.prototype.addFinishCommand = function () {
if (Yanfly.Param.StatAlcFinishCmd === "") return;
var name = Yanfly.Param.StatAlcFinishCmd;
this.addCommand(name, "cancel", true);
};
//=============================================================================
// Window_AllocationList
//=============================================================================
function Window_AllocationList() {
this.initialize.apply(this, arguments);
}
Window_AllocationList.prototype = Object.create(Window_Command.prototype);
Window_AllocationList.prototype.constructor = Window_AllocationList;
Window_AllocationList.prototype.initialize = function (x, y) {
this._windowWidth = Graphics.boxWidth - x;
this._windowHeight = Graphics.boxHeight - y;
Window_Command.prototype.initialize.call(this, x, y);
this.calculateConstants();
this.deactivate();
this._lastIndex = 0;
this.deselect();
};
Window_AllocationList.prototype.calculateConstants = function () {
var max = 0;
for (var i = 0; i < 8; ++i) {
max = Math.max(max, $gameActors.actor(1).paramMax(i));
}
max = Yanfly.Util.toGroup(max);
this._bonusWidth = this.textWidth("(+" + max + ") ");
this._bonusWidth = Math.max(this._bonusWidth, this.textWidth("(+9.99%) "));
};
Window_AllocationList.prototype.paramData = function (param) {
return Yanfly.Param.StatAlcParamSettings[param];
};
Window_AllocationList.prototype.windowWidth = function () {
return this._windowWidth;
};
Window_AllocationList.prototype.windowHeight = function () {
return this._windowHeight;
};
Window_AllocationList.prototype.textWidthEx = function (text) {
return this.drawTextEx(text, 0, this.contents.height);
};
Window_AllocationList.prototype.setActor = function (actor) {
if (this._actor === actor) return;
this._actor = actor;
this.refresh();
};
Window_AllocationList.prototype.activate = function () {
Window_Command.prototype.activate.call(this);
this.select(this._lastIndex);
};
Window_AllocationList.prototype.deactivate = function () {
this._lastIndex = this.index();
Window_Command.prototype.deactivate.call(this);
};
Window_AllocationList.prototype.updateHelp = function () {
if (this.currentSymbol() === "param") {
this._helpWindow.setText(this.paramData(this.currentExt()).description);
} else if (this.currentSymbol() === "xparam") {
this._helpWindow.setText(this.paramData(this.currentExt()).description);
} else if (this.currentSymbol() === "sparam") {
this._helpWindow.setText(this.paramData(this.currentExt()).description);
} else {
this._helpWindow.clear();
}
};
Window_AllocationList.prototype.makeCommandList = function () {
if (!this._actor) return;
var list = this._actor.currentClass().statAllocationList;
var length = list.length;
for (var i = 0; i < length; ++i) {
var item = list[i];
this.addParameterItem(item);
}
};
Window_AllocationList.prototype.addParameterItem = function (item) {
var param = item.trim().toLowerCase();
switch (param) {
case "mhp":
case "mmp":
case "atk":
case "def":
case "mat":
case "mdf":
case "agi":
case "luk":
this.addCommand(param, "param", this.isParamEnabled(param), param);
break;
case "hit":
case "eva":
case "cri":
case "cev":
case "mev":
case "mrf":
case "cnt":
case "hrg":
case "mrg":
case "trg":
this.addCommand(param, "xparam", this.isParamEnabled(param), param);
break;
case "tgr":
case "grd":
case "rec":
case "pha":
case "mcr":
case "tcr":
case "pdr":
case "mdr":
case "fdr":
case "exr":
this.addCommand(param, "sparam", this.isParamEnabled(param), param);
break;
}
};
Window_AllocationList.prototype.isParamEnabled = function (param) {
var params = ["mhp", "mmp", "atk", "def", "mat", "mdf", "agi", "luk"];
var xparams = [
"hit",
"eva",
"cri",
"cev",
"mev",
"mrf",
"cnt",
"hrg",
"mrg",
"trg",
];
var sparams = [
"tgr",
"grd",
"rec",
"pha",
"mcr",
"tcr",
"pdr",
"mdr",
"fdr",
"exr",
];
if (params.contains(param)) {
var paramId = params.indexOf(param);
var times = this._actor.getParamAllocateTimes(paramId);
} else if (xparams.contains(param)) {
var paramId = xparams.indexOf(param);
var times = this._actor.getXParamAllocateTimes(paramId);
} else if (sparams.contains(param)) {
var paramId = sparams.indexOf(param);
var times = this._actor.getSParamAllocateTimes(paramId);
} else {
return false;
}
var max = this.paramData(param).maxAllocations;
if (times >= max) return false;
if (!this.meetApCost(param, paramId, times)) return false;
if (!this.meetJpCost(param, paramId, times)) return false;
if (!this.meetItemCost(param, paramId, times)) return false;
return true;
};
Window_AllocationList.prototype.meetApCost = function (param, paramId, times) {
var apCost = this.paramData(param).apCost.call(this, times);
return this._actor.availableAp() >= apCost;
};
Window_AllocationList.prototype.meetJpCost = function (param, paramId, times) {
if (!Imported.YEP_JobPoints) return true;
var jpCost = this.paramData(param).jpCost.call(this, times);
return this._actor.jp() >= jpCost;
};
Window_AllocationList.prototype.meetItemCost = function (
param,
paramId,
times
) {
var itemId = this.paramData(param).itemId;
if (itemId <= 0) return true;
var item = $dataItems[itemId];
if (!item) return true;
var itemCost = this.paramData(param).itemCost.call(this, times);
return $gameParty.numItems(item) >= itemCost;
};
Window_AllocationList.prototype.drawItem = function (index) {
this.changePaintOpacity(true);
var symbol = this.commandSymbol(index);
this.drawParamItem(index);
};
Window_AllocationList.prototype.drawParamItem = function (index) {
var data = this.paramData(this._list[index].ext);
Yanfly.Param.StatAlcDrawCode.call(this, index);
return;
var param = this._list[index].ext;
var data = this.paramData(param);
var rect = this.itemRectForText(index);
// Draw Gauge
var gaugeColor1 = data.gaugeColor1 || "#000000";
var gaugeColor2 = data.gaugeColor2 || "#000000";
var rate = this.paramAllocationRate(param);
var width = this.contentsWidth() - 330;
this.drawGauge(rect.x, rect.y, width, rate, gaugeColor1, gaugeColor2);
// Draw Parameter Name
this.drawParamName(param, rect.x + this.textPadding(), rect.y, width);
// Draw Parameter Values
this.drawParamValues(param, rect.x + this.textPadding(), rect.y, width);
// Draw Parameter Cost
this.drawParamCost(param, rect.x + rect.width - width, rect.y, width);
};
Window_AllocationList.prototype.paramAllocationRate = function (param) {
var a = 0;
// Base
if (param === "mhp") var a = this._actor.getParamAllocateTimes(0);
if (param === "mmp") var a = this._actor.getParamAllocateTimes(1);
if (param === "atk") var a = this._actor.getParamAllocateTimes(2);
if (param === "def") var a = this._actor.getParamAllocateTimes(3);
if (param === "mat") var a = this._actor.getParamAllocateTimes(4);
if (param === "mdf") var a = this._actor.getParamAllocateTimes(5);
if (param === "agi") var a = this._actor.getParamAllocateTimes(6);
if (param === "luk") var a = this._actor.getParamAllocateTimes(7);
// Extra
if (param === "hit") var a = this._actor.getXParamAllocateTimes(0);
if (param === "eva") var a = this._actor.getXParamAllocateTimes(1);
if (param === "cri") var a = this._actor.getXParamAllocateTimes(2);
if (param === "cev") var a = this._actor.getXParamAllocateTimes(3);
if (param === "mev") var a = this._actor.getXParamAllocateTimes(4);
if (param === "mrf") var a = this._actor.getXParamAllocateTimes(5);
if (param === "cnt") var a = this._actor.getXParamAllocateTimes(6);
if (param === "hrg") var a = this._actor.getXParamAllocateTimes(7);
if (param === "mrg") var a = this._actor.getXParamAllocateTimes(8);
if (param === "trg") var a = this._actor.getXParamAllocateTimes(9);
// Special
if (param === "tgr") var a = this._actor.getSParamAllocateTimes(0);
if (param === "grd") var a = this._actor.getSParamAllocateTimes(1);
if (param === "rec") var a = this._actor.getSParamAllocateTimes(2);
if (param === "pha") var a = this._actor.getSParamAllocateTimes(3);
if (param === "mcr") var a = this._actor.getSParamAllocateTimes(4);
if (param === "tcr") var a = this._actor.getSParamAllocateTimes(5);
if (param === "pdr") var a = this._actor.getSParamAllocateTimes(6);
if (param === "mdr") var a = this._actor.getSParamAllocateTimes(7);
if (param === "fdr") var a = this._actor.getSParamAllocateTimes(8);
if (param === "exr") var a = this._actor.getSParamAllocateTimes(9);
var b = 1;
// Base
if (param === "mhp") var b = this._actor.getParamAllocateMax(0);
if (param === "mmp") var b = this._actor.getParamAllocateMax(1);
if (param === "atk") var b = this._actor.getParamAllocateMax(2);
if (param === "def") var b = this._actor.getParamAllocateMax(3);
if (param === "mat") var b = this._actor.getParamAllocateMax(4);
if (param === "mdf") var b = this._actor.getParamAllocateMax(5);
if (param === "agi") var b = this._actor.getParamAllocateMax(6);
if (param === "luk") var b = this._actor.getParamAllocateMax(7);
// Extra
if (param === "hit") var b = this._actor.getXParamAllocateMax(0);
if (param === "eva") var b = this._actor.getXParamAllocateMax(1);
if (param === "cri") var b = this._actor.getXParamAllocateMax(2);
if (param === "cev") var b = this._actor.getXParamAllocateMax(3);
if (param === "mev") var b = this._actor.getXParamAllocateMax(4);
if (param === "mrf") var b = this._actor.getXParamAllocateMax(5);
if (param === "cnt") var b = this._actor.getXParamAllocateMax(6);
if (param === "hrg") var b = this._actor.getXParamAllocateMax(7);
if (param === "mrg") var b = this._actor.getXParamAllocateMax(8);
if (param === "trg") var b = this._actor.getXParamAllocateMax(9);
// Special
if (param === "tgr") var b = this._actor.getSParamAllocateMax(0);
if (param === "grd") var b = this._actor.getSParamAllocateMax(1);
if (param === "rec") var b = this._actor.getSParamAllocateMax(2);
if (param === "pha") var b = this._actor.getSParamAllocateMax(3);
if (param === "mcr") var b = this._actor.getSParamAllocateMax(4);
if (param === "tcr") var b = this._actor.getSParamAllocateMax(5);
if (param === "pdr") var b = this._actor.getSParamAllocateMax(6);
if (param === "mdr") var b = this._actor.getSParamAllocateMax(7);
if (param === "fdr") var b = this._actor.getSParamAllocateMax(8);
if (param === "exr") var b = this._actor.getSParamAllocateMax(9);
return a / b;
};
Window_AllocationList.prototype.getParamAutoName = function (param) {
// Basic
if (param === "mhp") return TextManager.param(0);
if (param === "mmp") return TextManager.param(1);
if (param === "atk") return TextManager.param(2);
if (param === "def") return TextManager.param(3);
if (param === "mat") return TextManager.param(4);
if (param === "mdf") return TextManager.param(5);
if (param === "agi") return TextManager.param(6);
if (param === "luk") return TextManager.param(7);
// Extra
if (param === "hit") return "Physical Hit Rate";
if (param === "eva") return "Physical Evasion Rate";
if (param === "cri") return "Critical Hit Rate";
if (param === "cev") return "Critical Evasion";
if (param === "mev") return "Magical Evasion";
if (param === "mrf") return "Magical Reflection";
if (param === "cnt") return "Counterattack";
if (param === "hrg") return "HP Regeneration";
if (param === "mrg") return "MP Regeneration";
if (param === "trg") return "TP Regeneration";
// Special
if (param === "tgr") return "Target Rate";
if (param === "grd") return "Guard Power";
if (param === "rec") return "Recovery";
if (param === "pha") return "Item Effect";
if (param === "mcr") return "MP Cost";
if (param === "tcr") return "TP Charge";
if (param === "pdr") return "Physical Damage Received";
if (param === "mdr") return "Magical Damage Received";
if (param === "fdr") return "Floor Damage Received";
if (param === "exr") return "EXP Multiplier";
return "";
};
Window_AllocationList.prototype.getParamValue = function (param) {
// Basic
if (param === "mhp") return this._actor.mhp;
if (param === "mmp") return this._actor.mmp;
if (param === "atk") return this._actor.atk;
if (param === "def") return this._actor.def;
if (param === "mat") return this._actor.mat;
if (param === "mdf") return this._actor.mdf;
if (param === "agi") return this._actor.agi;
if (param === "luk") return this._actor.luk;
// Extra
if (param === "hit") return this._actor.hit;
if (param === "eva") return this._actor.eva;
if (param === "cri") return this._actor.cri;
if (param === "cev") return this._actor.cev;
if (param === "mev") return this._actor.mev;
if (param === "mrf") return this._actor.mrf;
if (param === "cnt") return this._actor.cnt;
if (param === "hrg") return this._actor.hrg;
if (param === "mrg") return this._actor.mrg;
if (param === "trg") return this._actor.trg;
// Special
if (param === "tgr") return this._actor.tgr;
if (param === "grd") return this._actor.grd;
if (param === "rec") return this._actor.rec;
if (param === "pha") return this._actor.pha;
if (param === "mcr") return this._actor.mcr;
if (param === "tcr") return this._actor.tcr;
if (param === "pdr") return this._actor.pdr;
if (param === "mdr") return this._actor.mdr;
if (param === "fdr") return this._actor.fdr;
if (param === "exr") return this._actor.exr;
return 0;
};
Window_AllocationList.prototype.isFlatParam = function (param) {
var params = ["mhp", "mmp", "atk", "def", "mat", "mdf", "agi", "luk"];
return params.contains(param);
};
Window_AllocationList.prototype.drawParamName = function (param, x, y, width) {
var data = this.paramData(param);
if (data.iconIndex > 0) {
this.drawIcon(data.iconIndex, x, y + 2);
x += Window_Base._iconWidth + 4;
}
var name = data.name;
if (name === "auto") name = this.getParamAutoName(param);
this.changeTextColor(this.systemColor());
this.drawText(name, x, y, width - x);
};
Window_AllocationList.prototype.drawParamValues = function (
param,
x,
y,
width
) {
width -= this.textPadding();
$gameTemp._ignoreStatAllocations = true;
var bonus = this.getParamValue(param);
$gameTemp._ignoreStatAllocations = false;
var full = this.getParamValue(param);
bonus = full - bonus;
if (this.isFlatParam(param)) {
var bonusText = Yanfly.Util.toGroup(bonus);
var fullText = Yanfly.Util.toGroup(full);
} else {
var bonusText = (bonus * 100).toFixed(1) + "%";
var fullText = (full * 100).toFixed(1) + "%";
}
if (bonus >= 0) {
bonusText = "(+" + bonusText + ")";
} else {
bonusText = "(" + bonusText + ")";
}
this.changeTextColor(this.powerUpColor());
this.drawText(bonusText, x, y, width, "right");
width -= this._bonusWidth;
this.changeTextColor(this.normalColor());
this.drawText(fullText, x, y, width, "right");
};
Window_AllocationList.prototype.drawParamCost = function (param, x, y, width) {
this.resetFontSettings();
width -= this.textPadding();
this.changePaintOpacity(this.isParamEnabled(param));
width = this.drawItemCost(param, x, y, width);
width = this.drawJpCost(param, x, y, width);
width = this.drawCostAp(param, x, y, width);
};
Window_AllocationList.prototype.drawItemCost = function (param, x, y, width) {
var data = this.paramData(param);
if (data.itemId <= 0) return width;
var item = $dataItems[data.itemId];
if (!item) return width;
var params = ["mhp", "mmp", "atk", "def", "mat", "mdf", "agi", "luk"];
var xparams = [
"hit",
"eva",
"cri",
"cev",
"mev",
"mrf",
"cnt",
"hrg",
"mrg",
"trg",
];
var sparams = [
"tgr",
"grd",
"rec",
"pha",
"mcr",
"tcr",
"pdr",
"mdr",
"fdr",
"exr",
];
if (params.contains(param)) {
var paramId = params.indexOf(param);
var times = this._actor.getParamAllocateTimes(paramId);
} else if (xparams.contains(param)) {
var paramId = xparams.indexOf(param);
var times = this._actor.getXParamAllocateTimes(paramId);
} else if (sparams.contains(param)) {
var paramId = sparams.indexOf(param);
var times = this._actor.getSParamAllocateTimes(paramId);
} else {
return width;
}
var itemCost = data.itemCost.call(this, times);
if (itemCost <= 0) return width;
if (itemCost > $gameParty.numItems(item)) {
var fmt = "×\\c[25]%1\\c[0]/%2";
} else {
var fmt = "×%1/%2";
}
var amount = Yanfly.Util.toGroup($gameParty.numItems(item));
var total = fmt.format(Yanfly.Util.toGroup(itemCost), amount);
var text = total;
if (item.iconIndex > 0) text += "\\i[" + item.iconIndex + "]";
if (Yanfly.Param.StatAlcSmItemName) {
text += "\\}" + item.name + "\\{";
} else {
text += item.name;
}
var textWidth = this.textWidthEx(text);
x = x + width - textWidth;
this.drawTextEx(text, x, y);
width -= textWidth + this.textPadding();
return width;
};
Window_AllocationList.prototype.drawJpCost = function (param, x, y, width) {
if (!Imported.YEP_JobPoints) return width;
var params = ["mhp", "mmp", "atk", "def", "mat", "mdf", "agi", "luk"];
var xparams = [
"hit",
"eva",
"cri",
"cev",
"mev",
"mrf",
"cnt",
"hrg",
"mrg",
"trg",
];
var sparams = [
"tgr",
"grd",
"rec",
"pha",
"mcr",
"tcr",
"pdr",
"mdr",
"fdr",
"exr",
];
if (params.contains(param)) {
var paramId = params.indexOf(param);
var times = this._actor.getParamAllocateTimes(paramId);
} else if (xparams.contains(param)) {
var paramId = xparams.indexOf(param);
var times = this._actor.getXParamAllocateTimes(paramId);
} else if (sparams.contains(param)) {
var paramId = sparams.indexOf(param);
var times = this._actor.getSParamAllocateTimes(paramId);
} else {
return width;
}
var jpCost = this.paramData(param).jpCost.call(this, times);
if (jpCost <= 0) return width;
var icon = "\\i[" + Yanfly.Icon.Jp + "]";
var fmt = Yanfly.Param.JpMenuFormat;
if (jpCost > this._actor.jp()) {
var fmt2 = "\\c[25]%1\\c[0]/%2";
} else {
var fmt2 = "%1/%2";
}
var amount = Yanfly.Util.toGroup(this._actor.jp());
var total = fmt2.format(Yanfly.Util.toGroup(jpCost), amount);
var text = fmt.format(total, Yanfly.Param.Jp, icon);
var textWidth = this.textWidthEx(text);
x = x + width - textWidth;
this.drawTextEx(text, x, y);
width -= textWidth + this.textPadding();
return width;
};
Window_AllocationList.prototype.drawCostAp = function (param, x, y, width) {
var params = ["mhp", "mmp", "atk", "def", "mat", "mdf", "agi", "luk"];
var xparams = [
"hit",
"eva",
"cri",
"cev",
"mev",
"mrf",
"cnt",
"hrg",
"mrg",
"trg",
];
var sparams = [
"tgr",
"grd",
"rec",
"pha",
"mcr",
"tcr",
"pdr",
"mdr",
"fdr",
"exr",
];
if (params.contains(param)) {
var paramId = params.indexOf(param);
var times = this._actor.getParamAllocateTimes(paramId);
} else if (xparams.contains(param)) {
var paramId = xparams.indexOf(param);
var times = this._actor.getXParamAllocateTimes(paramId);
} else if (sparams.contains(param)) {
var paramId = sparams.indexOf(param);
var times = this._actor.getSParamAllocateTimes(paramId);
} else {
return width;
}
var apCost = this.paramData(param).apCost.call(this, times);
if (apCost <= 0) return width;
var fmt = Yanfly.Param.StatAlcAPAmtFmt;
if (apCost > this._actor.availableAp()) {
var fmt2 = "\\c[25]%1\\c[0]/%2";
} else {
var fmt2 = "%1/%2";
}
var amount = Yanfly.Util.toGroup(this._actor.availableAp());
var total = fmt2.format(Yanfly.Util.toGroup(apCost), amount);
var apText = TextManager.ap();
var apIcon = "\\i[" + Yanfly.Param.StatAlcAPIcon + "]";
var text = fmt.format(total, apText, apIcon);
var textWidth = this.textWidthEx(text);
x = x + width - textWidth;
this.drawTextEx(text, x, y);
width -= textWidth + this.textPadding();
return width;
};
if (Yanfly.Param.StatAlcLfRt) {
Window_AllocationList.prototype.cursorRight = function (wrap) {
if (!this.isCommandEnabled(this.index())) return;
this.processOk();
};
Window_AllocationList.prototype.cursorLeft = function (wrap) {
if (!this._actor) return;
var param = this.currentExt();
var params = ["mhp", "mmp", "atk", "def", "mat", "mdf", "agi", "luk"];
var xparams = [
"hit",
"eva",
"cri",
"cev",
"mev",
"mrf",
"cnt",
"hrg",
"mrg",
"trg",
];
var sparams = [
"tgr",
"grd",
"rec",
"pha",
"mcr",
"tcr",
"pdr",
"mdr",
"fdr",
"exr",
];
if (params.contains(param)) {
var paramId = params.indexOf(param);
var times = this._actor.getParamAllocateTimes(paramId);
} else if (xparams.contains(param)) {
var paramId = xparams.indexOf(param);
var times = this._actor.getXParamAllocateTimes(paramId);
} else if (sparams.contains(param)) {
var paramId = sparams.indexOf(param);
var times = this._actor.getSParamAllocateTimes(paramId);
} else {
return;
}
if (times <= 0) return;
times -= 1;
if (params.contains(param)) {
this._actor.gainParamAllocateTimes(paramId, -1);
} else if (xparams.contains(param)) {
this._actor.gainXParamAllocateTimes(paramId, -1);
} else if (sparams.contains(param)) {
this._actor.gainSParamAllocateTimes(paramId, -1);
}
var data = Yanfly.Param.StatAlcParamSettings[param];
var apCost = data.apCost.call(this, times);
this._actor.spendAp(-apCost);
if (Imported.YEP_JobPoints) {
var jp = data.jpCost.call(this, times);
this._actor.gainJp(jp);
}
if (data.itemId > 0) {
var item = $dataItems[data.itemId];
var cost = data.itemCost.call(this, times);
$gameParty.gainItem(item, cost);
}
if (param === "mhp" || param === "mmp") {
this._actor._hp = Math.min(this._actor._hp, this._actor.mhp);
this._actor._mp = Math.min(this._actor._mp, this._actor.mmp);
}
SoundManager.playCancel();
SceneManager._scene.refreshWindows();
};
} // Yanfly.Param.StatAlcLfRt
//=============================================================================
// Window_AllocationRevert
//=============================================================================
function Window_AllocationRevert() {
this.initialize.apply(this, arguments);
}
Window_AllocationRevert.prototype = Object.create(Window_Command.prototype);
Window_AllocationRevert.prototype.constructor = Window_AllocationRevert;
Window_AllocationRevert.prototype.initialize = function () {
this._lines = Yanfly.Param.StatAlcRevConfirmText.split("\n").length;
this._lines += 2;
Window_Command.prototype.initialize.call(this, 0, 0);
this.refresh();
this.deactivate();
this.x = Math.ceil((Graphics.boxWidth - this.width) / 2);
this.y = Math.ceil((Graphics.boxHeight - this.height) / 2);
this.openness = 0;
};
Window_AllocationRevert.prototype.windowWidth = function () {
return Yanfly.Param.StatAlcRevWinWidth;
};
Window_AllocationRevert.prototype.itemTextAlign = function () {
return "center";
};
Window_AllocationRevert.prototype.numVisibleRows = function () {
return this._lines;
};
Window_AllocationRevert.prototype.itemRect = function (index) {
var rect = new Rectangle();
var maxCols = this.maxCols();
rect.width = this.itemWidth();
rect.height = this.itemHeight();
rect.x = (index % maxCols) * (rect.width + this.spacing()) - this._scrollX;
rect.y = (this._lines - 2 + index) * this.lineHeight();
return rect;
};
Window_AllocationRevert.prototype.makeCommandList = function () {
this.addCommand(Yanfly.Param.StatAlcRevYes, "revertYes", true);
this.addCommand(Yanfly.Param.StatAlcRevNo, "cancel", true);
};
Window_AllocationRevert.prototype.refresh = function () {
Window_Command.prototype.refresh.call(this);
this.drawTextEx(Yanfly.Param.StatAlcRevConfirmText, this.textPadding(), 0);
};
//=============================================================================
// Scene_Menu
//=============================================================================
Yanfly.StatAlc.Scene_Menu_createCommandWindow =
Scene_Menu.prototype.createCommandWindow;
Scene_Menu.prototype.createCommandWindow = function () {
Yanfly.StatAlc.Scene_Menu_createCommandWindow.call(this);
this._commandWindow.setHandler(
"statAllocate",
this.commandPersonal.bind(this)
);
};
Yanfly.StatAlc.Scene_Menu_onPersonalOk = Scene_Menu.prototype.onPersonalOk;
Scene_Menu.prototype.onPersonalOk = function () {
if (this._commandWindow.currentSymbol() === "statAllocate") {
SceneManager.push(Scene_StatAllocation);
} else {
Yanfly.StatAlc.Scene_Menu_onPersonalOk.call(this);
}
};
//=============================================================================
// Scene_StatAllocation
//=============================================================================
function Scene_StatAllocation() {
this.initialize.apply(this, arguments);
}
Scene_StatAllocation.prototype = Object.create(Scene_MenuBase.prototype);
Scene_StatAllocation.prototype.constructor = Scene_StatAllocation;
Scene_StatAllocation.prototype.initialize = function () {
Scene_MenuBase.prototype.initialize.call(this);
};
Scene_StatAllocation.prototype.create = function () {
Scene_MenuBase.prototype.create.call(this);
this.createHelpWindow();
this.createCommandWindow();
this.createStatusWindow();
this.createAllocationWindow();
this.createRevertWindow();
this.refreshActor();
};
Scene_StatAllocation.prototype.createCommandWindow = function () {
this._commandWindow = new Window_StatAllocationCommand();
var win = this._commandWindow;
win.y = this._helpWindow.height;
win.setHandler("pagedown", this.nextActor.bind(this));
win.setHandler("pageup", this.previousActor.bind(this));
win.setHandler("cancel", this.commandCancel.bind(this));
win.setHandler("allocate", this.commandAllocate.bind(this));
win.setHandler("revert", this.commandRevert.bind(this));
this.addWindow(win);
};
Scene_StatAllocation.prototype.createStatusWindow = function () {
var wx = this._commandWindow.width;
var wy = this._helpWindow.height;
var ww = Graphics.boxWidth - wx;
var wh = this._commandWindow.height;
this._statusWindow = new Window_SkillStatus(wx, wy, ww, wh);
this.addWindow(this._statusWindow);
};
Scene_StatAllocation.prototype.createAllocationWindow = function () {
var y = this._commandWindow.y + this._commandWindow.height;
this._allocationWindow = new Window_AllocationList(0, y);
var win = this._allocationWindow;
win.setHelpWindow(this._helpWindow);
win.setHandler("cancel", this.onAllocationCancel.bind(this));
win.setHandler("param", this.onAllocationParam.bind(this));
win.setHandler("xparam", this.onAllocationParam.bind(this));
win.setHandler("sparam", this.onAllocationParam.bind(this));
this.addWindow(win);
};
Scene_StatAllocation.prototype.refreshActor = function () {
this.actor().refresh();
var actor = this.actor();
actor.refresh();
this._commandWindow.refresh();
this._statusWindow.setActor(actor);
this._allocationWindow.setActor(actor);
};
Scene_StatAllocation.prototype.refreshWindows = function () {
this._commandWindow.refresh();
this._statusWindow.refresh();
this._allocationWindow.refresh();
};
Scene_StatAllocation.prototype.onActorChange = function () {
this.refreshActor();
this._commandWindow.activate();
};
Scene_StatAllocation.prototype.commandCancel = function () {
this._actor.refresh();
this.popScene();
};
Scene_StatAllocation.prototype.commandAllocate = function () {
this._allocationWindow.activate();
};
Scene_StatAllocation.prototype.onAllocationCancel = function () {
this._commandWindow.activate();
this._allocationWindow.deselect();
this._helpWindow.clear();
};
Scene_StatAllocation.prototype.onAllocationParam = function () {
this.processAllocationCost();
if (this._allocationWindow.currentSymbol() === "param") {
this.processAllocateParam();
} else if (this._allocationWindow.currentSymbol() === "xparam") {
this.processAllocateXParam();
} else if (this._allocationWindow.currentSymbol() === "sparam") {
this.processAllocateSParam();
}
};
Scene_StatAllocation.prototype.processAllocationCost = function () {
var param = this._allocationWindow.currentExt();
var data = this._allocationWindow.paramData(param);
this.processAllocationCostAp(param, data);
this.processAllocationCostJp(param, data);
this.processAllocationCostItems(param, data);
};
Scene_StatAllocation.prototype.processAllocationCostAp = function (
param,
data
) {
var params = ["mhp", "mmp", "atk", "def", "mat", "mdf", "agi", "luk"];
var xparams = [
"hit",
"eva",
"cri",
"cev",
"mev",
"mrf",
"cnt",
"hrg",
"mrg",
"trg",
];
var sparams = [
"tgr",
"grd",
"rec",
"pha",
"mcr",
"tcr",
"pdr",
"mdr",
"fdr",
"exr",
];
if (params.contains(param)) {
var paramId = params.indexOf(param);
var times = this._actor.getParamAllocateTimes(paramId);
} else if (xparams.contains(param)) {
var paramId = xparams.indexOf(param);
var times = this._actor.getXParamAllocateTimes(paramId);
} else if (sparams.contains(param)) {
var paramId = sparams.indexOf(param);
var times = this._actor.getSParamAllocateTimes(paramId);
} else {
return;
}
var apCost = data.apCost.call(this, times);
if (apCost <= 0) return;
this._actor.spendAp(apCost);
};
Scene_StatAllocation.prototype.processAllocationCostJp = function (
param,
data
) {
var params = ["mhp", "mmp", "atk", "def", "mat", "mdf", "agi", "luk"];
var xparams = [
"hit",
"eva",
"cri",
"cev",
"mev",
"mrf",
"cnt",
"hrg",
"mrg",
"trg",
];
var sparams = [
"tgr",
"grd",
"rec",
"pha",
"mcr",
"tcr",
"pdr",
"mdr",
"fdr",
"exr",
];
if (params.contains(param)) {
var paramId = params.indexOf(param);
var times = this._actor.getParamAllocateTimes(paramId);
} else if (xparams.contains(param)) {
var paramId = xparams.indexOf(param);
var times = this._actor.getXParamAllocateTimes(paramId);
} else if (sparams.contains(param)) {
var paramId = sparams.indexOf(param);
var times = this._actor.getSParamAllocateTimes(paramId);
} else {
return;
}
var jpCost = data.jpCost.call(this, times);
if (jpCost <= 0) return;
this._actor.gainJp(-jpCost);
};
Scene_StatAllocation.prototype.processAllocationCostItems = function (
param,
data
) {
var itemId = data.itemId;
if (itemId <= 0) return;
var item = $dataItems[itemId];
if (!item) return;
var params = ["mhp", "mmp", "atk", "def", "mat", "mdf", "agi", "luk"];
var xparams = [
"hit",
"eva",
"cri",
"cev",
"mev",
"mrf",
"cnt",
"hrg",
"mrg",
"trg",
];
var sparams = [
"tgr",
"grd",
"rec",
"pha",
"mcr",
"tcr",
"pdr",
"mdr",
"fdr",
"exr",
];
if (params.contains(param)) {
var paramId = params.indexOf(param);
var times = this._actor.getParamAllocateTimes(paramId);
} else if (xparams.contains(param)) {
var paramId = xparams.indexOf(param);
var times = this._actor.getXParamAllocateTimes(paramId);
} else if (sparams.contains(param)) {
var paramId = sparams.indexOf(param);
var times = this._actor.getSParamAllocateTimes(paramId);
} else {
return;
}
var itemCost = data.itemCost.call(this, times);
if (itemCost <= 0) return;
$gameParty.loseItem(item, itemCost);
};
Scene_StatAllocation.prototype.processAllocateParam = function () {
var param = this._allocationWindow.currentExt();
var params = ["mhp", "mmp", "atk", "def", "mat", "mdf", "agi", "luk"];
var paramId = params.indexOf(param);
this._actor.gainParamAllocateTimes(paramId, 1);
this._allocationWindow.activate();
this.refreshWindows();
};
Scene_StatAllocation.prototype.processAllocateXParam = function () {
var param = this._allocationWindow.currentExt();
var params = [
"hit",
"eva",
"cri",
"cev",
"mev",
"mrf",
"cnt",
"hrg",
"mrg",
"trg",
];
var paramId = params.indexOf(param);
this._actor.gainXParamAllocateTimes(paramId, 1);
this._allocationWindow.activate();
this.refreshWindows();
};
Scene_StatAllocation.prototype.processAllocateSParam = function () {
var param = this._allocationWindow.currentExt();
var params = [
"tgr",
"grd",
"rec",
"pha",
"mcr",
"tcr",
"pdr",
"mdr",
"fdr",
"exr",
];
var paramId = params.indexOf(param);
this._actor.gainSParamAllocateTimes(paramId, 1);
this._allocationWindow.activate();
this.refreshWindows();
};
Scene_StatAllocation.prototype.createRevertWindow = function () {
this._revertWindow = new Window_AllocationRevert();
this.addChild(this._revertWindow);
var win = this._revertWindow;
win.setHandler("cancel", this.onRevertCancel.bind(this));
win.setHandler("revertYes", this.onRevertConfirm.bind(this));
};
Scene_StatAllocation.prototype.commandRevert = function () {
this._revertWindow.activate();
this._revertWindow.select(0);
this._revertWindow.open();
};
Scene_StatAllocation.prototype.onRevertCancel = function () {
this._revertWindow.close();
this._commandWindow.activate();
};
Scene_StatAllocation.prototype.onRevertConfirm = function () {
this.processRevertAllParams();
this._revertWindow.close();
this._commandWindow.activate();
this._commandWindow.select(0);
this.refreshWindows();
};
Scene_StatAllocation.prototype.processRevertAllParams = function () {
var params = ["mhp", "mmp", "atk", "def", "mat", "mdf", "agi", "luk"];
var xparams = [
"hit",
"eva",
"cri",
"cev",
"mev",
"mrf",
"cnt",
"hrg",
"mrg",
"trg",
];
var sparams = [
"tgr",
"grd",
"rec",
"pha",
"mcr",
"tcr",
"pdr",
"mdr",
"fdr",
"exr",
];
var allParams = params.concat(xparams).concat(sparams);
var length = allParams.length;
for (var i = 0; i < length; ++i) {
var param = allParams[i];
this.processRevertParam(param);
}
};
Scene_StatAllocation.prototype.processRevertParam = function (param) {
var params = ["mhp", "mmp", "atk", "def", "mat", "mdf", "agi", "luk"];
var xparams = [
"hit",
"eva",
"cri",
"cev",
"mev",
"mrf",
"cnt",
"hrg",
"mrg",
"trg",
];
var sparams = [
"tgr",
"grd",
"rec",
"pha",
"mcr",
"tcr",
"pdr",
"mdr",
"fdr",
"exr",
];
// Identify Basic Variables
if (params.contains(param)) {
var paramId = params.indexOf(param);
var times = this._actor.getParamAllocateTimes(paramId);
} else if (xparams.contains(param)) {
var paramId = xparams.indexOf(param);
var times = this._actor.getXParamAllocateTimes(paramId);
} else if (sparams.contains(param)) {
var paramId = sparams.indexOf(param);
var times = this._actor.getSParamAllocateTimes(paramId);
} else {
return;
}
// Loop through all times and their costs
var jp = 0;
var items = {};
while (times > 0) {
times -= 1;
if (params.contains(param)) {
this._actor.gainParamAllocateTimes(paramId, -1);
} else if (xparams.contains(param)) {
this._actor.gainXParamAllocateTimes(paramId, -1);
} else if (sparams.contains(param)) {
this._actor.gainSParamAllocateTimes(paramId, -1);
}
var data = Yanfly.Param.StatAlcParamSettings[param];
var apCost = data.apCost.call(this, times);
this._actor.spendAp(-apCost);
if (Imported.YEP_JobPoints) {
jp += data.jpCost.call(this, times);
}
if (data.itemId > 0) {
items[data.itemId] = items[data.itemId] || 0;
items[data.itemId] += data.itemCost.call(this, times);
}
}
// Return consumed resources
if (Imported.YEP_JobPoints) this._actor.gainJp(jp);
for (var key in items) {
var item = $dataItems[key];
var amount = items[key];
$gameParty.gainItem(item, amount);
}
if (param === "mhp" || param === "mmp") {
this._actor._hp = Math.min(this._actor._hp, this._actor.mhp);
this._actor._mp = Math.min(this._actor._mp, this._actor.mmp);
}
};
//=============================================================================
// Utilities
//=============================================================================
Yanfly.Util = Yanfly.Util || {};
if (!Yanfly.Util.toGroup) {
Yanfly.Util.toGroup = function (inVal) {
return inVal;
};
} // Yanfly.Util.toGroup
//=============================================================================
// End of File
//=============================================================================