Envision, Create, Share

Welcome to HBGames, a leading amateur game development forum and Discord server. All are welcome, and amongst our ranks you will find experts in their field from all aspects of video game design and development.

DoubleX RMMV Skill Progress

DoubleX

Just a nameless weakling
Member

Note
This plugin's available for commercial use

Purpose
Lets you to set some skills to progress to some other skills after gaining enough skill experience and meeting some prerequisites

Introduction
Code:
 *    1. This plugin lets users to set some skills to progress to some other

 *       skills after gaining enough skill experience and meeting some

 *       prerequisites, like progressing from Fire I to Fire II when the

 *       actor's at least level 9 and gained 100 skill experience for Fire I

 *    2. Skill experience's gained from using that skill as well as hitting

 *       targets with that skill

Videos
http://www.youtube.com/watch?v=ly6LlNpo8jc

Games using this plugin
None so far

Parameters
Code:
 * @param isEnabled

 * @desc Sets whether this plugin will be enabled

 * It'll be the contents of a function returning a Boolean

 * @default return true;

 *

 * @param condNotePriority

 * @desc Sets the data type priority of cond notetags

 * It'll be the contents of a function returning an String Array

 * @default return ["states", "armors", "weapons", "currentClass", "actor"];

 *

 * @param condNoteChainingRule

 * @desc Sets how to use multiple cond notetags

 * It'll be the contents of a function returning a String

 * @default return "every";

 *

 * @param defaultMax

 * @desc Sets the default max experience before chaining max notetags

 * It'll be the contents of a function returning a positive Number

 * @default return 10;

 *

 * @param maxNotePriority

 * @desc Sets the data type priority of max notetags

 * It'll be the contents of a function returning a String Array

 * @default return ["states", "armors", "weapons", "currentClass", "actor"];

 *

 * @param maxNoteChainingRule

 * @desc Sets how to use multiple max notetags

 * It'll be the contents of a function returning a String

 * @default return "/";

 *

 * @param defaultUseGain

 * @desc Sets the default useGain before chaining useGain notetags

 * It'll be the contents of a function returning a Number

 * @default return 2;

 *

 * @param useGainNotePriority

 * @desc Sets the data type priority of useGain notetags

 * It'll be the contents of a function returning an String Array

 * @default return ["states", "armors", "weapons", "currentClass", "actor"];

 *

 * @param useGainNoteChainingRule

 * @desc Sets how to use multiple useGain notetags

 * It'll be the contents of a function returning a String

 * @default return "*";

 *

 * @param defaultHitGain

 * @desc Sets the default hitGain before chaining hitGain notetags

 * It'll be the contents of a function returning a Number

 * @default return 1;

 *

 * @param hitGainNotePriority

 * @desc Sets the data type priority of hitGain notetags

 * It'll be the contents of a function returning an String Array

 * @default return ["states", "armors", "weapons", "currentClass", "actor"];

 *

 * @param hitGainNoteChainingRule

 * @desc Sets how to use multiple hitGain notetags

 * It'll be the contents of a function returning a String

 * @default return "*";

 *

 * @param nextNotePriority

 * @desc Sets the data type priority of next notetags

 * It'll be the contents of a function returning an String Array

 * @default return ["actor", "currentClass"];

 *

 * @param nextNoteChainingRule

 * @desc Sets how to use multiple next notetags

 * It'll be the contents of a function returning a String

 * @default return "every";

 *

 * @param defaultKeepCurrent

 * @desc Set default keepCurrent before chaining keepCurrent notetags

 * It'll be the contents of a function returning a Boolean

 * @default return true;

 *

 * @param keepCurrentNotePriority

 * @desc Sets the data type priority of keepCurrent notetags

 * It'll be the contents of a function returning an String Array

 * @default return ["actor", "currentClass"];

 *

 * @param keepCurrentNoteChainingRule

 * @desc Sets how to use multiple keepCurrent notetags

 * It'll be the contents of a function returning a String

 * @default return "first";

 *

 * @param willEnd

 * @desc Sets what will happen right before progressing a skill

 * It'll be the contents of a function with its return value unused

 * @default

 *

 * @param willEndNotePriority

 * @desc Sets the data type priority of willEnd notetags

 * It'll be the contents of a function returning an String Array

 * @default return ["states", "armors", "weapons", "currentClass", "actor"];

 *

 * @param willEndNoteChainingRule

 * @desc Sets how to use multiple willEnd notetags

 * It'll be the contents of a function returning a String

 * @default return "every";

 *

 * @param didEnd

 * @desc Sets what will happen right after progressing a skill

 * It'll be the contents of a function with its return value unused

 * @default $gameTemp.reserveCommonEvent(1);

 *

 * @param didEndNotePriority

 * @desc Sets the data type priority of didEnd notetags

 * It'll be the contents of a function returning an String Array

 * @default return ["states", "armors", "weapons", "currentClass", "actor"];

 *

 * @param didEndNoteChainingRule

 * @desc Sets how to use multiple didEnd notetags

 * It'll be the contents of a function returning a String

 * @default return "every";

 *

 * @param cmdLineH

 * @desc Sets the skill progress command window line height

 * It'll be the contents of a function returning a Number

 * @default return Window_Command.prototype.lineHeight.call(this);

 *

 * @param cmdFontSize

 * @desc Sets the skill progress command window standard font size

 * It'll be the contents of a function returning a Number

 * @default return Window_Command.prototype.standardFontSize.call(this);

 *

 * @param cmdPadding

 * @desc Sets the skill progress command window standard padding

 * It'll be the contents of a function returning a Number

 * @default return Window_Command.prototype.standardPadding.call(this);

 *

 * @param cmdTextPadding

 * @desc Sets the skill progress command window text padding

 * It'll be the contents of a function returning a Number

 * @default return Window_Command.prototype.textPadding.call(this);

 *

 * @param cmdBackOpacity

 * @desc Sets the skill progress command window standard back opacity

 * It'll be the contents of a function returning a Number

 * @default return Window_Command.prototype.standardBackOpacity.call(this);

 *

 * @param cmdTranslucentOpacity

 * @desc Sets the skill progress command window translucent opacity

 * It'll be the contents of a function returning a Number

 * @default return Window_Command.prototype.translucentOpacity.call(this);

 *

 * @param cmdSpacing

 * @desc Sets the skill progress command window spacing

 * It'll be the contents of a function returning a Number

 * @default return Window_Command.prototype.spacing.call(this);

 *

 * @param cmdWinW

 * @desc Sets the skill progress command window width

 * It'll be the contents of a function returning a Number

 * @default return Window_Command.prototype.windowWidth.call(this);

 *

 * @param cmdWinH

 * @desc Sets the skill progress command window height

 * It'll be the contents of a function returning a Number

 * @default return Window_Command.prototype.windowHeight.call(this);

 *

 * @param cmdWinX

 * @desc Sets the skill progress command window x position

 * It'll be the contents of a function returning a Number

 * @default return 0;

 *

 * @param cmdWinY

 * @desc Sets the skill progress command window y position

 * It'll be the contents of a function returning a Number

 * @default return 0;

 *

 * @param cmdView

 * @desc Sets the skill progress command window view progress command text

 * It'll be the contents of a function returning a String

 * @default return "View Progress";

 *

 * @param cmdUse

 * @desc Sets the skill progress command window use skill command text

 * It'll be the contents of a function returning a String

 * @default return "Use";

 *

 * @param statLineH

 * @desc Sets the skill progress stat window line height

 * It'll be the contents of a function returning a Number

 * @default return Window_Selectable.prototype.lineHeight.call(this);

 *

 * @param statFontSize

 * @desc Sets the skill progress stat window standard font size

 * It'll be the contents of a function returning a Number

 * @default return Window_Selectable.prototype.standardFontSize.call(this);

 *

 * @param statPadding

 * @desc Sets the skill progress stat window standard padding

 * It'll be the contents of a function returning a Number

 * @default return Window_Selectable.prototype.standardPadding.call(this);

 *

 * @param statTextPadding

 * @desc Sets the skill progress stat window text padding

 * It'll be the contents of a function returning a Number

 * @default return Window_Selectable.prototype.textPadding.call(this);

 *

 * @param statBackOpacity

 * @desc Sets the skill progress stat window standard back opacity

 * It'll be the contents of a function returning a Number

 * @default return Window_Selectable.prototype.standardBackOpacity.call(this);

 *

 * @param statTranslucentOpacity

 * @desc Sets the skill progress stat window translucent opacity

 * It'll be the contents of a function returning a Number

 * @default return Window_Selectable.prototype.translucentOpacity.call(this);

 *

 * @param statSpacing

 * @desc Sets the skill progress stat window spacing

 * It'll be the contents of a function returning a Number

 * @default return Window_Selectable.prototype.spacing.call(this);

 *

 * @param statWinW

 * @desc Sets the skill progress stat window width

 * It'll be the contents of a function returning a Number

 * @default return Graphics.boxWidth;

 *

 * @param statWinH

 * @desc Sets the skill progress stat window height

 * It'll be the contents of a function returning a Number

 * @default return this.fittingHeight(2);

 *

 * @param statWinX

 * @desc Sets the skill progress stat window x position

 * It'll be the contents of a function returning a Number

 * @default return 0;

 *

 * @param statWinY

 * @desc Sets the skill progress stat window y position

 * It'll be the contents of a function returning a Number

 * @default return 0;

 *

 * @param condLineH

 * @desc Sets the skill progress condition window line height

 * It'll be the contents of a function returning a Number

 * @default return Window_Selectable.prototype.lineHeight.call(this);

 *

 * @param condFontSize

 * @desc Sets the skill progress condition window standard font size

 * It'll be the contents of a function returning a Number

 * @default return Window_Selectable.prototype.standardFontSize.call(this);

 *

 * @param condPadding

 * @desc Sets the skill progress condition window standard padding

 * It'll be the contents of a function returning a Number

 * @default return Window_Selectable.prototype.standardPadding.call(this);

 *

 * @param condTextPadding

 * @desc Sets the skill progress condition window text padding

 * It'll be the contents of a function returning a Number

 * @default return Window_Selectable.prototype.textPadding.call(this);

 *

 * @param condBackOpacity

 * @desc Sets the skill progress condition window standard back opacity

 * It'll be the contents of a function returning a Number

 * @default return Window_Selectable.prototype.standardBackOpacity.call(this);

 *

 * @param condTranslucentOpacity

 * @desc Sets the skill progress condition window translucent opacity

 * It'll be the contents of a function returning a Number

 * @default return Window_Selectable.prototype.translucentOpacity.call(this);

 *

 * @param condSpacing

 * @desc Sets the skill progress condition window spacing

 * It'll be the contents of a function returning a Number

 * @default return Window_Selectable.prototype.spacing.call(this);

 *

 * @param condWinW

 * @desc Sets the skill progress condition window width

 * It'll be the contents of a function returning a Number

 * @default return Graphics.boxWidth / 2;

 *

 * @param condWinH

 * @desc Sets the skill progress condition window height

 * It'll be the contents of a function returning a Number

 * @default return Graphics.boxHeight - this.fittingHeight(2);

 *

 * @param condWinX

 * @desc Sets the skill progress condition window x position

 * It'll be the contents of a function returning a Number

 * @default return 0;

 *

 * @param condWinY

 * @desc Sets the skill progress condition window y position

 * It'll be the contents of a function returning a Number

 * @default return this.fittingHeight(2);

 *

 * @param nextLineH

 * @desc Sets the skill progress next skill window line height

 * It'll be the contents of a function returning a Number

 * @default return Window_Selectable.prototype.lineHeight.call(this);

 *

 * @param nextFontSize

 * @desc Sets the skill progress next skill window standard font size

 * It'll be the contents of a function returning a Number

 * @default return Window_Selectable.prototype.standardFontSize.call(this);

 *

 * @param nextPadding

 * @desc Sets the skill progress next skill window standard padding

 * It'll be the contents of a function returning a Number

 * @default return Window_Selectable.prototype.standardPadding.call(this);

 *

 * @param nextTextPadding

 * @desc Sets the skill progress next skill window text padding

 * It'll be the contents of a function returning a Number

 * @default return Window_Selectable.prototype.textPadding.call(this);

 *

 * @param nextBackOpacity

 * @desc Sets the skill progress next skill window standard back opacity

 * It'll be the contents of a function returning a Number

 * @default return Window_Selectable.prototype.standardBackOpacity.call(this);

 *

 * @param nextTranslucentOpacity

 * @desc Sets the skill progress next skill window translucent opacity

 * It'll be the contents of a function returning a Number

 * @default return Window_Selectable.prototype.translucentOpacity.call(this);

 *

 * @param nextSpacing

 * @desc Sets the skill progress next skill window spacing

 * It'll be the contents of a function returning a Number

 * @default return Window_Selectable.prototype.spacing.call(this);

 *

 * @param nextWinW

 * @desc Sets the skill progress next skill window width

 * It'll be the contents of a function returning a Number

 * @default return Graphics.boxWidth / 2;

 *

 * @param nextWinH

 * @desc Sets the skill progress next skill window height

 * It'll be the contents of a function returning a Number

 * @default return Graphics.boxHeight - this.fittingHeight(2);

 *

 * @param nextWinX

 * @desc Sets the skill progress next skill window x position

 * It'll be the contents of a function returning a Number

 * @default return Graphics.boxWidth / 2;

 *

 * @param nextWinY

 * @desc Sets the skill progress next skill window y position

 * It'll be the contents of a function returning a Number

 * @default return this.fittingHeight(2);

 *

 * @param varIds

 * @desc Sets the list of ids of game variables used by this plugin

 * It'll be the contents of a function returning a Number Array

 * @default return [];

 *

 * @param switchIds

 * @desc Sets the list of ids of game switches used by this plugin

 * It'll be the contents of a function returning a Number Array

 * @default return [];

Notetags
Code:
 *    # Actor/Class/Weapon/Armor/State/Skill Notetag contents:

 *      1. cond suffix1 suffix2: entry1, entry2

 *         - Sets a prerequisite to be met for the skill to be progressed with

 *           descriptions to be shown

 *         - suffix1 and suffix2 can be cfg, val, switch, var or script

 *         - (Advanced)Please refer to Cond Functions in the configuration

 *           region for using cfg or script suffixes

 *         - The result of entry1 can be anything as it's used as truthy/falsy

 *           to check whether the prerequisite's met

 *         - The result of entry2 can be any String as the condition

 *           descriptions

 *         - If the result of entry2 is falsy, the result of entry1 will also

 *           be treated as falsy

 *           (Reference tag: INVALID_COND_DESC)

 *         - If there's no such effective notetag, the skill involved won't

 *           progress

 *         - E.g.:

 *           <skill progress cond switch var: 1, 2> will set a prerequisite

 *           for the skill to be progressed as the value of the game switch

 *           with id 1, with descriptions to be shown as the value of the game

 *           variable with id 2, provided that that variable stores a String

 *      2. max suffix1: entry1

 *         - Sets the maximum experience of the skill to be progressed

 *         - suffix1 can be cfg, val, var or script

 *         - (Advanced)Please refer to Max Functions in the configuration

 *           region for using cfg or script suffixes, or the eval variant

 *         - The result of entry1 can be any positive Number as the maximum

 *           experience

 *         - Having an invalid result is the same as not meeting prerequisites

 *           (Reference tag: INVALID_MAX)

 *         - If the maximum experience of the skill to be progressed's reduced

 *           to become not greater than its current experience, the skill will

 *           be ended progressing immediately

 *           (Reference tag: REDUCED_MAX_END_SKILL_PROGRESS)

 *         - E.g.:

 *           <skill progress max var: 1> will set the maximum experience of

 *           the skill to be progressed as the value of the game variable with

 *           id 1

 *      3. useGain suffix1: entry1

 *         - Sets the experience gain of the skill to be progressed upon using

 *           it

 *         - suffix1 can be cfg, val, var or script

 *         - (Advanced)Please refer to useGain Functions in the configuration

 *           region for using cfg or script suffixes, or the eval variant

 *         - The result of entry1 can be any Number as the experience gain

 *         - All invalid results will be regarded as 0

 *           (Reference tag: INVALID_GAIN)

 *         - E.g.:

 *           If the game variable with id 1 is "return this.luk;", then

 *           <skill progress useGain script&#058; 1> will set the experience gain

 *           of the skill to be progressed upon using it as the luk of the

 *           user at that moment

 *      4. hitGain suffix1: entry1

 *         - Sets the experience gain of the skill to be progressed when the

 *           skill hits a target

 *         - suffix1 can be cfg, val, var or script

 *         - (Advanced)Please refer to hitGain Functions in the configuration

 *           region for using cfg or script suffixes, or the eval variant

 *         - The result of entry1 can be any Number as the experience gain

 *         - All invalid results will be regarded as 0

 *           (Reference tag: INVALID_GAIN)

 *         - E.g.:

 *           If HG1 in the configuration region is "return this.level;", then

 *           <skill progress hitGain cfg: HG1> will set the experience gain

 *           of the skill to be progressed when the skill hits a target as the

 *           level of the user at that moment

 *      5. next suffix1: entry1

 *         - Sets the skill to learn upon ending progressing the current one

 *         - suffix1 can be cfg, val, var or script

 *         - (Advanced)Please refer to Next Functions in the configuration

 *           region for using cfg or script suffixes, or the eval variant

 *         - The result of entry1 can be an Array of any valid id of the skills

 *           to learn

 *         - If the val suffix's used, the skill ids should be concatenated

 *           with the underscore, like 4_5 being skills with id 4 and 5

 *           (Reference tag: NUMBER_ARRAY)

 *         - If the var suffix's used, the variable referred by the entry

 *           should have skill ids concatenated with the underscore, like 4_5

 *           being skills with id 4 and 5

 *           (Reference tag: NUMBER_ARRAY)

 *         - Having an invalid result is the same as not meeting prerequisites

 *           (Reference tag: INVALID_NEXT)

 *         - E.g.:

 *           <skill progress next val: 4_5> will set the skills to learn upon

 *           ending progressing the current one as those with id 4 and 5

 *      6. keepCurrent suffix1: entry1

 *         - Sets whether the current skill will be kept instead of forgotten

 *           when it ends progressing

 *         - suffix1 can be cfg, val, switch, var or script

 *         - (Advanced)Please refer to keepCurrent Functions in the

 *           configuration region for using cfg or script suffixes, or the

 *           eval variant

 *         - The result of entry1 can be anything as it's used as truthy/falsy

 *           to sets whether the current skill will be kept

 *         - E.g.:

 *           <skill progress keepCurrent>

 *           return false;

 *           </skill progress keepCurrent>

 *           will set the current skill to be forgotten

 *      7. willEnd suffix1: entry1

 *         - Runs extra events just before ending progressing the skill

 *         - suffix1 can be cfg, event or script

 *         - (Advanced)Please refer to willEnd Functions in the configuration

 *           region for using cfg or script suffixes, or the eval variant

 *         - The entry1 is supposed to cause something to happen instead of

 *           returning anything

 *         - The willEnd parameter counterpart will always be run first

 *           (Reference tag: RUN_DEFAULT_FIRST)

 *         - E.g.:

 *           <skill progress willEnd event: 1> will reserve the common event

 *           with id 1 just after ending progressing the skill

 *      8. didEnd suffix1: entry1

 *         - Runs extra events just after ending progressing the skill

 *         - suffix1 can be cfg, event or script

 *         - (Advanced)Please refer to didEnd Functions in the configuration

 *           region for using cfg or script suffixes, or the eval variant

 *         - The entry1 is supposed to cause something to happen instead of

 *           returning anythinganything

 *         - The didEnd parameter counterpart will always be run first

 *           (Reference tag: RUN_DEFAULT_FIRST)

 *         - E.g.:

 *           If DE1 in the configuration region is unchanged,

 *           <skill progress didEnd cfg: DE1> will close the actor window

 *           when the skill involved ended progressing outside battles

 *           (Please refer to DE1 for details)

Script Calls
Code:
 *    # (Advanced)Configuration manipulations

 *      1. $gameSystem.skillProgress.params.param

 *         - Returns the stored value of param listed in the plugin manager or

 *           their configuration counterparts

 *         - E.g.:

 *           $gameSystem.skillProgress.params.isEnabled will return the

 *           contents of a function returning a Boolean indicating whether

 *           this plugin's enabled

 *      2. $gameSystem.skillProgress.params.param = funcContents

 *         - Sets the stored value of param listed in the plugin manager or

 *           their configuration counterpart as funcContents, which is the

 *           contents of a function

 *         - E.g.:

 *           $gameSystem.skillProgress.params.isEnabled = "return false;" will

 *           set the stored value of parameter isEnabled shown on the plugin

 *           manager or its configuration counterpart as "return false;",

 *           causing the corresponding function to always return false, thus

 *           always disabling this plugin

 *         - $gameSystem.skillProgress.params.param changes will be saved

 *         - DoubleX_RMMV.Skill_Progress.params.param = func, where func is

 *           the corresponding function having funcContents as its contents,

 *           should be explicitly called immediately afterwards

 *      3. $gameSystem.skillProgress.cfgs.cfg

 *         - Basically the same as $gameSystem.skillProgress.params.param,

 *           except that this script call applies to configurations found in

 *           the configuration region only

 *      4. $gameSystem.skillProgress.cfgs.cfg = funcContents

 *         - Basically the same as

 *           $gameSystem.skillProgress.params.param = funcContents, except that

 *           this script call applies to configurations found in the

 *           configuration region only

 *         - DoubleX_RMMV.Skill_Progress.cfgs.cfg = func, where func is the

 *           corresponding function having funcContents as its contents,

 *           should be explicitly called immediately afterwards

 *      5. $gameSystem.skillProgress.notes.note

 *         - Basically the same as $gameSystem.skillProgress.params.param,

 *           except that this script call applies to notetag values found in

 *           the configuration region

 *      6. $gameSystem.skillProgress.notes.note = funcContents

 *         - Basically the same as

 *           $gameSystem.skillProgress.params.param = funcContents, except

 *           that this script call applies to notetag values found in the

 *           configuration region

 *         - DoubleX_RMMV.Skill_Progress.notes.note = func, where func is the

 *           corresponding function having funcContents as its contents,

 *           should be explicitly called immediately afterwards

 *    # (Advanced)Actor/Class/Weapon/Armor/State/Skill notetag manipulations

 *      All meta.skillProgress changes can be saved if

 *      DoubleX RMMV Dynamic Data is used

 *      1. meta.skillProgress.note

 *         - note is either of the following:

 *           cond(corresponds to notetag content

 *                cond suffix1 suffix2: entry1, entry2)

 *           max(corresponds to notetag content max suffix1: entry1)

 *           useGain(corresponds to notetag content useGain suffix1: entry1)

 *           hitGain(corresponds to notetag content hitGain suffix1: entry1)

 *           next(corresponds to notetag content next suffix1: entry1)

 *           keepCurrent(corresponds to notetag content

 *                      keepCurrent suffix1: entry1)

 *           willEnd(corresponds to notetag content willEnd suffix1: entry1)

 *           didEnd(corresponds to notetag content didEnd suffix1: entry1)

 *         - Returns the Array of Objects in this form:

 *           { suffixi: suffixi, entryi: entryi }

 *           Which corresponds to <skill progress note suffixi: entryi>

 *         (Reference tag: MULTI_SUFFIX_ENTRY)

 *         - E.g.:

 *           $dataWeapons[3].meta.skillProgress.cond will return the Array of

 *           Object

 *           [{ suffix1: "switch", entry1: "1", suffix2: "var", entry2: "2" }]

 *           if the effective notetag of  weapon with id 3 is

 *           <skill progress cond switch var: 1, 2>

 *      2. meta.skillProgress.note = [{ suffixi: suffixi, entryi: entryi }]

 *         (Reference tag: MULTI_SUFFIX_ENTRY)

 *         - note is either of the following:

 *           cond(corresponds to notetag content

 *                cond suffix1 suffix2: entry1, entry2)

 *           max(corresponds to notetag content max suffix1: entry1)

 *           useGain(corresponds to notetag content useGain suffix1: entry1)

 *           hitGain(corresponds to notetag content hitGain suffix1: entry1)

 *           next(corresponds to notetag content next suffix1: entry1)

 *           keepCurrent(corresponds to notetag content

 *                       keepCurrent suffix1: entry1)

 *           willEnd(corresponds to notetag content willEnd suffix1: entry1)

 *           didEnd(corresponds to notetag content didEnd suffix1: entry1)

 *         - Sets the notetag to be the same as

 *           <skill progress note suffixi: entryi>

 *         - E.g.:

 *           $dataArmors[4].meta.skillProgress.cond =

 *           [{ suffix1: "switch", entry1: "1", suffix2: "var", entry2: "2" }]

 *           will set the max notetag of the armor with id 4 to be the same as

 *           <skill progress cond switch var: 1, 2>

 *    # Actor manipulations

 *      1. skillProgressCondDesc(skillId)

 *         - Returns the mapping with the condition descriptions as the keys

 *           and their statuses as the values for the skill with id skillId to

 *           progress for the actor involved

 *         - The mapping being empty means that the skill involved won't

 *           progress due to having no effective cond notetags and is thus

 *           treated as a normal skill

 *           (Reference tag: SKILL_COND_DESCS)

 *         - The mapping having only truthy values means that the prerequisites

 *           are met under the cond notetag chaining rule

 *           (Reference tag: SKILL_COND_DESCS)

 *         - (Advanced)It's supposed to return an Object

 *         - E.g.:

 *           $gameParty.aliveMembers()[0].skillProgressCondDesc(3) will return

 *           the mapping with the condition descriptions as the keys and their

 *           statuses as the values for the skill with id 3 to progress for

 *           the 1st alive party member

 *         - (Advanced)Using this script call might recache the return value

 *         - (Advanced)It's supposed to be Nullipotent other than possibly

 *           recaching the return value

 *      2. maxSkillProgress(skillId)

 *         - Returns the maximum experience needed to end progressing the

 *           skill with id skillId for the actor involved

 *         - (Advanced)It's supposed to return a positive Number

 *         - E.g.:

 *           If the maximum experience needed to end progressing the skill

 *           with id 3 is 400 for the 1st alive party member, then

 *           $gameParty.aliveMembers()[0].maxSkillProgress(3) will return 400

 *         - (Advanced)Using this script call might recache the return value

 *         - (Advanced)It's supposed to be Nullipotent other than possibly

 *           recaching the return value

 *      3. useGainSkillProgress(skillId)

 *         - Returns the experience gain of the skill with id skillId to be

 *           progressed upon use for the actor involved

 *         - (Advanced)It's supposed to return a Number

 *         - E.g.:

 *           If the experience gain of the skill with id 4 to be progressed

 *           upon use for the actor with id 1 is 100, then

 *           $gameActors.actor(1).useGainSkillProgress(4) will return 100

 *         - (Advanced)Using this script call might recache the return value

 *         - (Advanced)It's supposed to be Nullipotent other than possibly

 *           recaching the return value

 *      4. hitGainSkillProgress(skillId, target, value)

 *         - Returns the experience gain of the skill with id skillId to be

 *           progressed upon hitting target target with damage value for the

 *           actor involved

 *         - (Advanced)It's supposed to return a Number

 *         - E.g.:

 *           If the experience gain of the skill with id 5 to be progressed

 *           upon hitting the 1st enemy with 400 damage for the actor with id

 *           2 is 100, then

 *           $gameActors.actor(2).hitGainSkillProgress(

 *           5, $gameTroop.aliveMembers()[0], 400) will return 100

 *         - (Advanced)Using this script call might recache the return value

 *         - (Advanced)It's supposed to be Nullipotent other than possibly

 *           recaching the return value

 *      5. nextSkillProgress(skillId)

 *         - Returns the list of skill ids to be learned upon ending

 *           progressing that with id skillId for the actor involved

 *         - (Advanced)It's supposed to return a list of valid skill ids

 *         - E.g.:

 *           $gameParty.aliveMembers()[$gameParty.aliveMembers().length - 1].

 *           nextSkillProgress(6) will return the list of skill ids to be

 *           learnt upon ending progressing that with id 6 for the last alive

 *           party member

 *         - (Advanced)Using this script call might recache the return value

 *         - (Advanced)It's supposed to be Nullipotent other than possibly

 *           recaching the return value

 *      6. isKeepSkillProgress(skillId)

 *         - Returns whether the skill with id skillId will be kept or

 *           forgotten upon ending its progression for the actor involved

 *         - (Advanced)It's supposed to return a Boolean

 *         - E.g.:

 *           $gameParty.aliveMembers()[$gameParty.aliveMembers().length - 1].

 *           isKeepSkillProgress(4) will return whether the skill with id 4

 *           will be kept or forgotten upon ending its progression for the

 *           last alive party member

 *      7. currentSkillProgress(skillId)

 *         - Returns the current experience of the skill with id skillId to be

 *           progressed for the actor involved

 *         - (Advanced)It's supposed to return a nonnegative Number that is

 *           not greater than the maximum experience of the same skill

 *         - E.g.:

 *           $gameParty.aliveMembers()[0].currentSkillProgress(3) returns the

 *           current experience of the skill with id 3 to be progressed for

 *           the 1st alive party member

 *         - (Advanced)It's supposed to be Nullipotent

 *      8. setCurrentSkillProgress(skillId, value)

 *         - Sets the current experience of the skill with id skillId to be

 *           progressed for the actor involved as value

 *         - (Advanced)value is supposed to be a nonnegative Number that is

 *           not greater than the maximum experience of the same skill, so

 *           it'll be clamped if it's out of range and discarded if it's not

 *           a Number

 *           (Reference tag: CURRENT_EXP_RANGE)

 *         - E.g.:

 *           $gameParty.aliveMembers()[0].setCurrentSkillProgress(3, 100) sets

 *           the current experience of the skill with id 3 to be progressed

 *           for the 1st alive party member as 100

 *         - (Advanced)It's supposed to be Idempotent

 *      9. (Advanced)raiseAllSkillProgressNoteChangeFactors()

 *         - Applies the script call

 *           raiseSkillProgressNoteChangeFactor(note, factor) to all notes and

 *           factors

 *      10. (Advanced)raiseSkillProgressNoteChangeFactor(note, factor)

 *         - Notifies that the notetag note might need to be recached due to

 *           potential changes in factor factor

 *         - note is either of the following:

 *           "cond"(corresponds to notetag content

 *                  cond suffix1 suffix2: entry1 entry2)

 *           "max"(corresponds to notetag content max suffix1: entry1)

 *           "useGain"(corresponds to notetag content useGain suffix1: entry1)

 *           "hitGain"(corresponds to notetag content hitGain suffix1: entry1)

 *           "next"(corresponds to notetag content next suffix1: entry1)

 *           "keepCurrent"(corresponds to notetag content

 *                         keepCurrent suffix1: entry1)

 *           "willEnd"(corresponds to notetag content willEnd suffix1: entry1)

 *           "didEnd"(corresponds to notetag content didEnd suffix1: entry1)

 *         - factor is either of the following:

 *           "states"(Changes in state notetags)

 *           "armors"(Changes in armor notetags)

 *           "weapons"(Changes in weapon notetags)

 *           "currentClass"(Changes in class notetags)

 *           "actor"(Changes in actor notetags)

 *           "priority"(Changes in the corresponding note priorities)

 *           "chainingRule"(Changes in the corresponding note chaining rules)

 *           "result"(Changes in all intermediate results for the note)

 *         - It's supposed to be Idempotent

 *         - E.g.:

 *           $gameParty.aliveMembers()[0].raiseSkillProgressNoteChangeFactor(

 *           "cond", "states") will notify the 1st alive party member that the

 *           cond notetags might need to be recached due to potential changes

 *           in the states or their cond notetags

 *      11. (Advanced)skillProgressNoteResult(note, part)

 *         - Returns the cached intermediate result of part part in note note

 *           for the actor involved

 *         - note is either of the following:

 *           "cond"(corresponds to notetag content

 *                  cond suffix1 suffix2: entry1 entry2)

 *           "max"(corresponds to notetag content max suffix1: entry1)

 *           "useGain"(corresponds to notetag content useGain suffix1: entry1)

 *           "hitGain"(corresponds to notetag content hitGain suffix1: entry1)

 *           "next"(corresponds to notetag content next suffix1: entry1)

 *           "keepCurrent"(corresponds to notetag content

 *                         keepCurrent suffix1: entry1)

 *           "willEnd"(corresponds to notetag content willEnd suffix1: entry1)

 *           "didEnd"(corresponds to notetag content didEnd suffix1: entry1)

 *         - part is either of the following:

 *           "states"(All effective state notetags)

 *           "armors"(All effective armor notetags)

 *           "weapons"(All effective weapon notetags)

 *           "currentClass"(All effective class notetags)

 *           "actor"(All effective actor notetags)

 *         - It's supposed to be Nullipotent other than possible recaching

 *         - E.g.:

 *           $gameParty.aliveMembers()[0].skillProgressNoteResult(

 *           "cond", "states") will return the cached intermediate result of

 *           all effective cond notetags in states for the 1t alive party

 *           member

 *      12. (Advanced)invalidateSkillProgressNoteResult(note, part)

 *         - Invalidates the cached intermediate result of part part in note

 *           note for the actor involved

 *         - note is either of the following:

 *           "cond"(corresponds to notetag content

 *                  cond suffix1 suffix2: entry1 entry2)

 *           "max"(corresponds to notetag content max suffix1: entry1)

 *           "useGain"(corresponds to notetag content useGain suffix1: entry1)

 *           "hitGain"(corresponds to notetag content hitGain suffix1: entry1)

 *           "next"(corresponds to notetag content next suffix1: entry1)

 *           "keepCurrent"(corresponds to notetag content

 *                         keepCurrent suffix1: entry1)

 *           "willEnd"(corresponds to notetag content willEnd suffix1: entry1)

 *           "didEnd"(corresponds to notetag content didEnd suffix1: entry1)

 *         - part is either of the following:

 *           "states"(All effective state notetags)

 *           "armors"(All effective armor notetags)

 *           "weapons"(All effective weapon notetags)

 *           "currentClass"(All effective class notetags)

 *           "actor"(All effective actor notetags)

 *         - It's supposed to be Idempotent

 *         - E.g.:

 *           $gameParty.aliveMembers()[0].invalidateSkillProgressNoteResult(

 *           "cond", "states") will invalidate the cached intermediate result

 *           of all effective cond notetags in states for the 1t alive party

 *           member

Plugin Commands
Code:
 *      1. skillProgressCondDesc actorId skillId

 *         - The same as the script call skillProgressCondDesc(skillId) in

 *           Actor manipulations for the actor with id actorId

 *      2. maxSkillProgress actorId skillId

 *         - The same as the script call maxSkillProgress(skillId) in Actor

 *           manipulations for the actor with id actorId

 *      3. useGainSkillProgress actorId skillId

 *         - The same as the script call useGainSkillProgress(skillId) in

 *           Actor manipulations for the actor with id actorId

 *      4. hitGainSkillProgress actorId skillId target value

 *         - The same as the script call

 *           hitGainSkillProgress(skillId, target, value) in Actor

 *           manipulations for the actor with id actorId

 *      5. nextSkillProgress actorId skillId

 *         - The same as the script call nextSkillProgress(skillId) in Actor

 *           manipulations for the actor with id actorId

 *      6. isKeepSkillProgress actorId skillId

 *         - The same as the script call isKeepSkillProgress(skillId) in Actor

 *           manipulations for the actor with id actorId

 *      7. currentSkillProgress actorId skillId

 *         - The same as the script call currentSkillProgress(skillId) in

 *           Actor manipulations for the actor with id actorId

 *      8. setCurrentSkillProgress actorId skillId value

 *         - The same as the script call

 *           setCurrentSkillProgress(skillId, value) in Actor manipulations

 *           for the actor with id actorId

 *      9. (Advanced)raiseAllSkillProgressNoteChangeFactors actorId

 *         - The same as the script call

 *           raiseAllSkillProgressNoteChangeFactors() in Actor manipulations

 *           for the actor with id actorId

 *      10. (Advanced)raiseSkillProgressNoteChangeFactor actorId note factor

 *         - The same as the script call

 *           raiseSkillProgressNoteChangeFactor(note, factor) in Actor

 *           manipulations for the actor with id actorId

 *      11. (Advanced)skillProgressNoteResult actorId note part

 *         - The same as the script call skillProgressNoteResult(note, part)

 *           in Actor manipulations for the actor with id actorId

 *      12. (Advanced)invalidateSkillProgressNoteResult actorId note part

 *         - The same as the script call

 *           invalidateSkillProgressNoteResult(note, part) in Actor

 *           manipulations for the actor with id actorId

Configurations
Code:
        /**

         * The this pointer refers to the Window_SkillProgressStat involved

         * This configuration has no parameter counterparts

         * Sets the skill progress stat window y position

         * Hotspot/Nullipotent

         * @since v1.00a @version v1.00a

         * @param {Number} current - The current skill progress status

         * @param {Number} max - The maximum skill progress status

         * @param {Number} isKeep - If the skill will be kept upon progress

         */

        drawStat: function(current, max, isKeep) {

            var line1Rect = this.itemRectForText(0);

            var line2Rect = this.itemRectForText(1);

            var line1Text = "Progress: " + current + "/" + max;

            var line2Text = "Is Kept After Progress: " + isKeep;

            this.drawText(line1Text, line1Rect.x, line1Rect.y, line1Rect.width);

            this.drawText(line2Text, line2Rect.x, line2Rect.y, line2Rect.width);

        }, // drawStat

Author Notes
Code:
 *      1. DoubleX RMMV Skill Progress aims to give extreme control and

 *         freedom to users by making it as flexible as I can with as little

 *         damage to user-friendliness as I can

 *      2. The configuration region is generally for more advanced uses, as

 *         most ordinary cases should be covered by parameters and notetags

 *      3. (Advanced)You might have to have a basic knowledge on what this

 *         Plugin Implementation does to fully utilize this plugin in intended

 *         ways and solid understanding on how this Plugin Implementation

 *         works to fully utilize this plugin with creative and unintended

 *         uses

Instructions
Code:
 *      1. If you want to edit configurations instead of parameters, you must

 *         open this js file to access its configuration region

 *      2. The default plugin file name is doublex_rmmv_skill_progress_v100a

 *         If you want to change that, you must edit the value of

 *         DoubleX_RMMV.Skill_Progress_File, which must be done via opening

 *         this plugin js file directly

 *      3. If you wish to use DoubleX RMMV Skill Progress Unit Test, place it

 *         right below this plugin

Prerequisites
Code:
 *      Abilities:

 *      1. Nothing special for most ordinary cases

 *      2. Little RMMV plugin development proficiency for more advanced uses

 *      3. Some RMMV plugin development proficiency to fully utilize this

 *         plugin in intended ways

 *      4. Decent RMMV plugin development proficiency to fully utilize this

 *         plugin with creative and unintended uses

Terms Of Use
Code:
 *      1. Commercial use's always allowed and crediting me's always optional.

 *      2. You shall keep this plugin's Plugin Info part's contents intact.

 *      3. You shalln't claim that this plugin's written by anyone other than

 *         DoubleX or my aliases. I always reserve the right to deny you from

 *         using any of my plugins anymore if you've violated this.

 *      4. If you repost this plugin directly(rather than just linking back),

 *         you shall inform me of these direct repostings. I always reserve

 *         the right to request you to edit those direct repostings.

 *      5. CC BY 4.0, except those conflicting with any of the above, applies

 *         to this plugin, unless you've my permissions not needing follow so.

 *      6. I always reserve the right to deny you from using this plugin

 *         anymore if you've violated any of the above.

Authors
DoubleX

Todo
Code:
 *      1. Add <skill progress instant suffix1: entry1>, where a falsy result

 *         from entry1 will let players to end progressing the skill at

 *         anytime they choose instead of always immediately

Changelog
Code:
 *      v1.00a(GMT 0400 13-Nov-2019):

 *      1. 1st version of this plugin finished

Download Links
DoubleX RMMV Skill Progress
DoubleX RMMV Skill Progress Unit Test
DoubleX RMMV Skill Progres Compatibility
 
I had to study this a long time to figure out how exactly people where suppose to use this.
Honestly I expected plug-in parameters that just listed skills from the database. And you'd set the requirements and specifications there.

I mean you weren't kidding that this is for people who that are knowledgeable in plugin development. But in my opinion it's too unwieldy and impractical. People who are knowledgeable might find it easier to cobble something together on their own. And it looks like you keep track of character's skill progression in game variables. Which I expect would be very messy and hard to keep track of.
 

DoubleX

Just a nameless weakling
Member

coyotecraft":1hz30nq3 said:
I had to study this a long time to figure out how exactly people where suppose to use this.
Honestly I expected plug-in parameters that just listed skills from the database. And you'd set the requirements and specifications there.

I mean you weren't kidding that this is for people who that are knowledgeable in plugin development. But in my opinion it's too unwieldy and impractical. People who are knowledgeable might find it easier to cobble something together on their own. And it looks like you keep track of character's skill progression in game variables. Which I expect would be very messy and hard to keep track of.
Thanks for your feedback.
Actually this plugin's my experiment on my new plugin UI design for really advanced complex plugins, in which this plugin itself clearly isn't :)
The goal of this design is to fulfill as many user functional needs as possible while still letting them to use multiple ways to do the same thing.
Although I've tried hard to keep the user-friendliness in mind, such an unwieldy and impractical result is what I can come up with so far.
Therefore, I'd like to get feedback like what you've given to me so I can think how to improve the user-friendliness of this plugin UI design in my upcoming advanced complex plugin(The main theme of that plugin would be maximum amount of freedom on the user side, so I don't want to abandon such plugin UI design altogether).
 

Thank you for viewing

HBGames is a leading amateur video game development forum and Discord server open to all ability levels. Feel free to have a nosey around!

Discord

Join our growing and active Discord server to discuss all aspects of game making in a relaxed environment. Join Us

Content

  • Our Games
  • Games in Development
  • Emoji by Twemoji.
    Top