/*:
* @plugindesc v1.26 Random prefixes/suffixes
* @author DreamX
*
* @param Bonus Parameter Text
* @desc Text to add when an item got bonus parameter values. Default: %1%2
* @default %1%2
*
* @param Bonus Parameter Price Multiplier
* @desc Multiply each bonus paramater point by this amount to add to the price. Default: 10
* @default 10
*
* @param Icon Combination Starting Index
* @desc Use a number higher than the number of normal icons you have in the icon sheet. Default: 6000
* @default 6000
*
* @param -Old Notetags-
*
* @param Default Chance
* @desc If using chances for the prefix/suffix, this is the default chance.
* @default 10
*
* @param Always Choose Prefix/Suffix
* @desc Even if the chances for a prefix/suffix item are under 100%, add one. default: true
* @default true
*
* @param Edit Database For Old Notetags
* @desc Edits the database to convert old notetags to new notetags. Default: false
* @default false
*
* @help
* This plugin must be named DreamX_RandomPrefixesSuffixes in order for
* parameters to work properly.
*
* Requires Yanfly Item Core.
* Items may only be randomized if there item type is independent (check Item
* Core parameters. By default weapons and armors are independent, but regular
* items are not. You'll need to change the parameters from the default for
* regular items).
*
* Do not use prefix/suffix notetags with starting items. If you want an actor
* to start with an randomized item, add the item to the party and then equip
* them with it.
*
* ============================================================================
* How Items Are Combined
* ============================================================================
* If the base item is named "Sword", the prefix item is named "Strong"
* and the suffix item is named "Of Fire"
* You would get Strong Sword Of Fire.
*
* The new item have the traits of both prefix and suffix items and add their
* params. For example, if the prefix item has +10 ATK and the base item has
* +20 ATK, the new item wil have +30 ATK.
* Meta will be a combination of the prefix and suffix item meta, in other words,
* the notetags.
* Price will be the original plus the prices of the prefix and suffix item.
* Note will be the notes of the original, the prefix and the suffix items
* except that the meta and prefix notetag portions will be removed.
*
* ============================================================================
* Affix Choices
* ============================================================================
* You can have unlimited amounts of prefix and suffix combinations.
* Each set of choices should begin on its own line.
* You can enter ranges to select randomly for a set of numbers (ids).
* After a number or set of numbers, you will enter the chance.
* If the chances do not add up to 100%, there is a chance none will be chosen.
* It's up to you use percentages that add up to less than or equal to 100%.
* Not doing so many result in undesired results.
*
* Here's an example with suffixes.
*
* 5-8 11 50% 10 50%
* 7 100%
*
* In this example, one id from 5-8, and 11 has a 50% chance of being chosen,
* and id 10 has a 50% of being chosen.
* Then, 7 has a 100% chance of being chosen.
*
* Here's another example with prefixes this time.
*
* 12-15 20 22 25%
*
* In this example, one id from 12-15, 20 or 22 has a 25% of being chosen.
* So, there is a 75% of none being chosen.
*
* ============================================================================
* Augment Choices
* ============================================================================
* Augment choices work much the same way as affix choices, except you will
* also be what type of augment the augment is. The augment ids should be for
* the item part of the database only, not weapon/armor. The augments will be
* applied when the new item is created.
*
*
* Glyph 17-19 50% 20-23 26 50%
*
*
* In this example, the augment type is Glyph. There is a 50% chance to use 17,
* 18 or 19 as the augment, and a 50% chance to use 20, 21, 22, 23 or 26
* instead.
*
* You can use multiple lines. Here's another example.
*
* Glyph 17-19 50% 20-23 26 50%
* Orb 50-56 25% 7 50%
*
* ============================================================================
* Affix Choices (Old Notetags)
* ============================================================================
* Add and/or to a weapon/armor's note
* with the letters being weapon/armor ids. You can have as many ids
* as you want. The ids must be the same type as the base item,
* ie. weapon ids for a weapon, etc.
* When the party gains that equipment, it'll randomly choose a prefix
* and/or suffix and add the traits, params, price and meta to a new item,
* also changing the name. The new item is then added instead of the
* base item.
*
* Example:
*
* As you can see, you can add item id ranges. In addition to the single ids,
* item ids 5, 6, 7, 8, 9 and 10 will be added to the pool in this example.
* ============================================================================
* Notetags For Prefix and Suffix Items:
* ============================================================================
* Won't add the prefix/suffix name
*
*
* There will be no added space when adding the prefix/suffix name for this
* item.
*
* Will capitalize the first letter of the
* new item's name and lower case every other letter
*
*
* The new item will have the animation of this prefix/suffix item.
* ---
*
* The new item will have the icon of the prefix/suffix item.
* ---
*
* The prefix/suffix item name when added to the new item will be x.
* This is useful if you want to have a different name in the database.
* ---
*
* The new item will have the weapon type of the prefix/suffix item.
* Weapons only.
* ---
*
* The new item will have the armor type of the prefix/suffix item.
* Armor only.
* ---
*
* The new item uses prefix/suffix items from the weapon database instead of
* the armor database.
* Armor only.
* ---
*
* The new item uses prefix/suffix items from the armor database instead of
* the weapon database.
* Weapon only.
* ---
*
* The new item's success rate will be combined with that of the prefix/suffix
* item.
* Regular (non-weapon, non-armor) items only.
* ---
*
* The new item's damage variance will be combined with that of the prefix/suffix
* item.
* Regular (non-weapon, non-armor) items only.
* ---
*
* The new item's damage formula will be combined with that of the prefix/suffix
* item.
* Regular (non-weapon, non-armor) items only.
* ---
*
* The new item's consumable type (yes or no) will be replaced by that of the
* prefix-suffix item.
* Regular (non-weapon, non-armor) items only.
* ---
*
* The new item's hit type will be replaced by that of the prefix-suffix item.
* Regular (non-weapon, non-armor) items only.
* ---
*
* The new item's occasion type will be replaced by that of the prefix-suffix
* item.
* Regular (non-weapon, non-armor) items only.
* ---
*
* The new item's item type will be replaced by that of the prefix-suffix item.
* Regular (non-weapon, non-armor) items only.
* ---
*
* The new item's scope will be replaced by that of the prefix-suffix item.
* Regular (non-weapon, non-armor) items only.
* ---
*
* The new item's critical hit type (yes or no) will be replaced by that of the
* prefix-suffix item.
* Regular (non-weapon, non-armor) items only.
* ---
*
* The new item's damage type will be replaced by that of the prefix-suffix
* item.
* Regular (non-weapon, non-armor) items only.
* ---
*
* The new item's damage element will be replaced by that of the prefix-suffix
* item.
* Regular (non-weapon, non-armor) items only.
* ---
*
* This will allow the new item derived from this item to have its icon
* overlay or by overlayed with another item. It must exist on at least two of
* the following items when the new item is being made: the base item, prefix
* item or suffix item.
* --
* with x as the order. This will determine the order
* in which the icons are overlayed. Lower values are placed first, with
* higher values overlayed on top of those.
* ============================================================================
* Affix Parameters
* ============================================================================
*
* Here is an example of how to add random bonus parameter values. Put this in
* a prefix or suffix item.
*
* We put the name of the parameter first, then the range of possible values.
* The first number (5 for ATK or -10 for DEF in this example) must be equal to
* or less than the second number (10 for ATK or 20 for DEF in this example).
* Here are the parameter names: MHP, MMP, ATK, DEF, MAT, MDF, AGI, LUK
*
* If you want to guarantee a certain value, it is better to just use the
* database.
*
* For the plugin parameter "Bonus Parameter Text", here are the text codes:
* %1 - The + sign if the bonus is positive.
* %2 - The highest value of the random parameter bonuses applied on the item.
* Can be negative.
* ============================================================================
* Affix/Augment Requirements
* ============================================================================
*
* x
*
* Replace x with code. This is a requirement for prefix/suffix or augment item.
*
* Example:
*
* $gameSwitches.value(1);
*
* In this example, it requires that switch 1 is on.
* ============================================================================
* Affix Effects
* ============================================================================
*
* var atkBonus = Math.floor((Math.random() * 100) + 50);
* newItem.params[2] += atkBonus;
* newItem.name += " +" + atkBonus;
* newItem.price += atkBonus;
*
*
* Here's an example of how to add a custom effect to the new item from the
* prefix/suffix item. You'll need to know some javascript.
*
* In this example, we are applying a random ATK bonus between 50 and 150 to
* the new item and also adding that bonus to the name of the new item. In
* additon, we also add to the price the ATK bonus.
*
* Here are the variables provided to you by plugin for these effects:
* item - the prefix/suffix item the effect is taken from.
* baseItem - the baseItem.
* newItem = the new item to be created.
* ============================================================================
* Affix Chance Type For Old Notetags
* ============================================================================
* This section is for use for the and notetags only.
*
*
* Replace x with the percent chance of getting that prefix or suffix.
* Example: for a 25% chance.
*
* Every prefix/suffix with the same percentage gets added to the same percentage
* pool.
* A random number between 1 and 100 will be generated and the lowest
* percentage pool that the random number is less than or equal to will be
* chosen.
*
* For example, if the pools are 10%, 20% and 30% and the random number was 15,
* you get a prefix/suffix from the pool with percentage 20%.
*
* If you get over the highest percentage, you will get one of the
* prefixes/suffixes from the highest percentage pool. Having a combined
* percentage (total of all chances for all prefix/suffix choices for a base
* item) of 100 is recommended but not required.
*
* If none of the prefix or suffix items for the base item have a chance notetag,
* then the item will be randomly chosen as normal with each prefix or suffix
* having an equal probability.
*
* If at least one but not all of the prefix/suffix items for the base item has
* a chance notetag, then the prefix/suffixes that don't have a percent notetag
* will be assigned the default chance specified in the parameter for this
* plugin.
* ============================================================================
* Function Calls provided by this plugin
* ============================================================================
* For use in custom requirements:
*
* this.averagePartyLevel()
* Returns the average level of the party.
*
* this.averagePartyBattleMemberLevel()
* Returns the average level of party battle members.
* ============================================================================
* Terms Of Use
* ============================================================================
* Free to use and modify for commercial and noncommercial games, with credit.
* Credit Yanfly. This script uses code from their Item Core plugin.
* ============================================================================
* Credits
* ============================================================================
* DreamX
* Yanfly for Item Core plugin.
*/
//=============================================================================
// Import
//=============================================================================
var Imported = Imported || {};
Imported.DreamX_RandomPrefixSuffix = true;
var DreamX = DreamX || {};
DreamX.RandomPrefixSuffix = DreamX.RandomPrefixSuffix || {};
(function () {
//==========================================================================
// Parameter Variables
//==========================================================================
var parameters = PluginManager.parameters('DreamX_RandomPrefixesSuffixes');
var paramDefaultChance = parseInt(parameters['Default Chance'] || 10);
var paramBonusParamText = String(parameters['Bonus Parameter Text']);
var paramMultiplier = parseInt(parameters['Bonus Parameter Price Multiplier'] || 10);
var paramEditOld = eval(parameters['Edit Database For Old Notetags'] || false);
var paramAlwaysChoose = eval(parameters['Always Choose Prefix/Suffix'] || true);
var paramCombIconStarting = parseInt(parameters['Icon Combination Starting Index'] || 6000);
DreamX.RandomPrefixSuffix.DataManager_loadDatabase = DataManager.loadDatabase;
DataManager.loadDatabase = function () {
DreamX.RandomPrefixSuffix.DataManager_loadDatabase.call(this);
if (!Imported.YEP_ItemCore) {
throw new Error('DreamX_RandomPrefixesSuffixes requires Yanfly Item Core');
}
var independentItemCount = Yanfly.Param.ItemMaxItems
+ Yanfly.Param.ItemMaxWeapons + Yanfly.Param.ItemMaxArmors;
if (independentItemCount <= 0) {
throw new Error("DreamX_RandomPrefixesSuffixes requires Yanfly "
+ "Item Core to have independent items enabled.");
}
};
DreamX.RandomPrefixSuffix.DataManager_isDatabaseLoaded = DataManager.isDatabaseLoaded;
DataManager.isDatabaseLoaded = function () {
if (!DreamX.RandomPrefixSuffix.DataManager_isDatabaseLoaded.call(this))
return false;
if (!DreamX.RandomPrefixSuffixLoaded) {
if (paramEditOld) {
this.editRandomPrefixSuffixMetaNotes($dataArmors);
this.editRandomPrefixSuffixMetaNotes($dataWeapons);
}
this.processDXRPSNotetags($dataWeapons);
this.processDXRPSNotetags($dataArmors);
this.processDXRPSNotetags($dataItems);
DreamX.RandomPrefixSuffixLoaded = true;
}
return true;
};
// just go through the array
DataManager.processDXRPSNotetags = function (dataArray) {
for (var i = 0; i < dataArray.length; i++) {
var element = dataArray[i];
if (!element)
continue;
this.processDXRPSNotetagsChoices(element);
this.processDXRPSNotetagRequirements(element);
this.processDXRPSNotetagEffects(element);
this.processDXRPSNotetagsAugmentChoices(element);
}
};
DataManager.processDXRPSNotetagRequirements = function (item) {
var evalMode = 'none';
var notedata = item.note.split(/[\r\n]+/);
var jsScript = "";
for (var i = 0; i < notedata.length; i++) {
var line = notedata[i];
if (line.match(/<(?:PREFIX SUFFIX REQUIREMENT)>/i)) {
evalMode = 'custom requirement';
} else if (line.match(/<\/(?:PREFIX SUFFIX REQUIREMENT)>/i)) {
evalMode = 'none';
} else if (evalMode === 'custom requirement') {
jsScript = jsScript + line + '\n';
}
}
if (jsScript.length === 0) {
item.DXRPSRequirement = true;
} else {
item.DXRPSRequirement = jsScript;
}
};
DataManager.processDXRPSNotetagEffects = function (item) {
var evalMode = 'none';
var notedata = item.note.split(/[\r\n]+/);
var jsScript = "";
for (var i = 0; i < notedata.length; i++) {
var line = notedata[i];
if (line.match(/<(?:PREFIX SUFFIX EFFECT)>/i)) {
evalMode = 'custom effect';
} else if (line.match(/<\/(?:PREFIX SUFFIX EFFECT)>/i)) {
evalMode = 'none';
} else if (evalMode === 'custom effect') {
jsScript = jsScript + line + '\n';
}
}
if (jsScript.length > 0) {
item.DXRPSEffect = jsScript;
}
};
DataManager.processDXRPSNotetagsAugmentChoices = function (element) {
var evalMode = 'none';
var notedata = element.note.split(/[\r\n]+/);
var augmentChoiceLines = [];
element.DXRPSAugmentChoices = [];
if (!Imported.YEP_X_AttachAugments) {
return;
}
for (var i = 0; i < notedata.length; i++) {
var line = notedata[i];
if (line.match(/<(?:PREFIX SUFFIX AUGMENTS)>/i)) {
evalMode = 'augments';
} else if (line.match(/<\/(?:PREFIX SUFFIX AUGMENTS)>/i)) {
evalMode = 'none';
} else if (evalMode === 'augments') {
augmentChoiceLines.push(line);
}
}
for (var i = 0; i < augmentChoiceLines.length; i++) {
var line = augmentChoiceLines[i];
var lineSplit = line.trim().replace(/,/g, " ").split(new RegExp("\\s{1,}"));
// choose 0 or 1 (probably better to use 1 and change augment type
// to 2) If I decide to allow datatype choosing
//var dataType = lineSplit[0];
var augmentType = lineSplit[0];
// use 2 instead of 1 if I decide to allow data type choosing
lineSplit.splice(0, 1);
var choiceSplit = lineSplit.toString().replace(/,/g, " ").split(new RegExp("\\s{1,}"));
var numberLine = "";
var lineChoices = [];
for (var j = 0; j < choiceSplit.length; j++) {
var split = choiceSplit[j];
if (split.indexOf("%") !== -1) {
var chance = parseInt(split.replace("%", ""));
lineChoices.push({chance: chance, line: numberLine.trim()});
numberLine = "";
} else {
numberLine += split + " ";
}
}
// element.DXRPSAugmentChoices.push({lineChoices: lineChoices,
// augmentType: augmentType, dataType: dataType});
element.DXRPSAugmentChoices.push({lineChoices: lineChoices,
augmentType: augmentType});
lineChoices = [];
}
};
DataManager.processDXRPSNotetagsChoices = function (element) {
var evalMode = 'none';
var notedata = element.note.split(/[\r\n]+/);
var choiceNoteLines = [];
element.DXRPSAffixChoices = [];
for (var i = 0; i < notedata.length; i++) {
var line = notedata[i];
if (line.match(/<(?:SUFFIXES)>/i)) {
evalMode = 'suffix';
} else if (line.match(/<\/(?:SUFFIXES)>/i)) {
evalMode = 'none';
} else if (line.match(/<(?:PREFIXES)>/i)) {
evalMode = 'prefix';
} else if (line.match(/<\/(?:PREFIXES)>/i)) {
evalMode = 'none';
} else if (evalMode === 'suffix' || evalMode === 'prefix') {
choiceNoteLines.push({affixType: evalMode, line: line});
}
}
for (var i = 0; i < choiceNoteLines.length; i++) {
var line = choiceNoteLines[i].line;
var affixType = choiceNoteLines[i].affixType;
var lineSplit = line.trim().replace(/,/g, " ").split(new RegExp("\\s{1,}"));
var numberLine = "";
var lineChoices = [];
for (var j = 0; j < lineSplit.length; j++) {
var split = lineSplit[j];
if (split.indexOf("%") !== -1) {
var chance = parseInt(split.replace("%", ""));
lineChoices.push({chance: chance, line: numberLine.trim()});
numberLine = "";
} else {
numberLine += split + " ";
}
}
element.DXRPSAffixChoices.push({lineChoices: lineChoices,
affixType: affixType});
lineChoices = [];
}
};
DreamX.randomArrayElement = function (array) {
var diceRoll = Math.floor(Math.random() * array.length);
var selected = array[diceRoll];
return selected;
};
DreamX.parseNumberRanges = function (string) {
var nums = [];
var stringSplit = string.trim().replace(/,/g, " ").split(new RegExp("\\s{1,}"));
for (var i = 0; i < stringSplit.length; i++) {
var split = stringSplit[i].split("-");
var min = parseInt(split[0]);
var max = split[1] ? parseInt(split[1]) : min;
if (!min || min > max) {
continue;
}
for (var j = min; j <= max; j++) {
nums.push(j);
}
}
return nums;
};
DataManager.editRandomPrefixSuffixMetaNotes = function (dataArray) {
for (var i = 0; i < dataArray.length; i++) {
var element = dataArray[i];
if (!element)
continue;
var elementMeta = element.meta;
var value;
if (elementMeta.affix) {
value = elementMeta.affix;
delete elementMeta.affix;
elementMeta.suffix = value;
}
if (elementMeta.prefixAffixReplaceAnim) {
value = elementMeta.prefixAffixReplaceAnim;
delete elementMeta.prefixAffixReplaceAnim;
elementMeta.prefixSuffixReplaceAnim = value;
}
if (elementMeta.prefixAffixReplaceIcon) {
value = elementMeta.prefixAffixReplaceIcon;
delete elementMeta.prefixAffixReplaceIcon;
elementMeta.prefixSuffixReplaceIcon = value;
}
if (elementMeta.prefixAffixName) {
value = elementMeta.prefixAffixName;
delete elementMeta.prefixAffixName;
elementMeta.prefixSuffixName = value;
}
if (elementMeta.prefixAffixParameters) {
value = elementMeta.prefixAffixParameters;
delete elementMeta.prefixAffixParameters;
elementMeta.prefixSuffixParameters = value;
}
if (elementMeta.prefixAffixChance) {
value = elementMeta.prefixAffixChance;
delete elementMeta.prefixAffixChance;
elementMeta.prefixSuffixChance = value;
}
element.note.replace("Prefix Affix", "Prefix Suffix");
element.note.replace("DreamX.RandomPrefixAffix", "DreamX.RandomPrefixSuffix");
}
};
DreamX.RandomPrefixSuffix.evaluateCustomEffect = function (item, bItem, nItem) {
var baseItem = bItem;
var newItem = nItem;
var affixItem = item;
if (affixItem.DXRPSEffect) {
eval(affixItem.DXRPSEffect);
}
};
DreamX.RandomPrefixSuffix.isValidItem = function (item) {
if (!item) {
return false;
}
if (!eval(item.DXRPSRequirement)) {
return false;
}
return true;
};
DreamX.RandomPrefixSuffix.averagePartyLevel = function () {
return this.DXAverageLevelUtility($gameParty.allMembers());
};
DreamX.RandomPrefixSuffix.averagePartyBattleMemberLevel = function () {
return this.DXAverageLevelUtility($gameParty.battleMembers());
};
DreamX.RandomPrefixSuffix.DXAverageLevelUtility = function (memberArray) {
if (memberArray.length <= 0) {
return 0;
}
var sum = 0;
memberArray.forEach(function (member) {
sum += member.level;
});
return sum / memberArray.length;
};
DreamX.RandomPrefixSuffix.makeChoices = function (arrayOfIDs, dataType) {
var mapArray = [];
var percentMap = new Map();
var diceRoll;
var choseIDPool = false;
var poolIndex = -1;
// get rid of bad ids
for (var i = 0; i < arrayOfIDs.length; i++) {
var testItem = dataType[ arrayOfIDs[i] ];
if (!this.isValidItem(testItem)) {
arrayOfIDs.splice(i, 1);
i--;
}
}
// first test if there are any percents among the ids
var hasPercent = arrayOfIDs.some(function (id) {
return dataType[id].meta.prefixSuffixChance;
});
// if no percents, just return the array
if (hasPercent === false) {
return arrayOfIDs;
}
for (var i = 0; i < arrayOfIDs.length; i++) {
var percent = dataType[ arrayOfIDs[i] ].meta.prefixSuffixChance
? dataType[ arrayOfIDs[i] ].meta.prefixSuffixChance : paramDefaultChance;
if (percentMap.has(percent)) {
// push into array
percentMap.get(percent).push(arrayOfIDs[i]);
} else {
// put in an array
percentMap.set(percent, [arrayOfIDs[i]]);
}
}
// get everything from the map
percentMap.forEach(function (value, key, map) {
// push an object with the percent and ids
mapArray.push({percent: key, ids: value});
});
// sort the array from lowest percent to highest
mapArray.sort(function (a, b) {
return a.percent - b.percent;
});
//roll the dice
diceRoll = Math.floor((Math.random() * 100) + 1);
if (diceRoll <= mapArray[mapArray.length - 1].percent) {
for (i = 0; i < mapArray.length && !choseIDPool; i++) {
if (mapArray[i].percent >= diceRoll) {
poolIndex = i;
choseIDPool = true;
}
}
} else if (paramAlwaysChoose === true) {
poolIndex = mapArray.length - 1;
}
if (poolIndex === -1) {
return undefined;
}
return mapArray[poolIndex].ids;
};
DreamX.RandomPrefixSuffix.combineWithArmorWeapon = function (prefixSuffixItem, newItem) {
newItem.traits = newItem.traits.concat(prefixSuffixItem.traits);
for (var i = 0; i < prefixSuffixItem.params.length; i++) {
newItem.params[i] += prefixSuffixItem.params[i];
}
if (prefixSuffixItem.meta.prefixSuffixParameters) {
this.randomizeBonusParameters(prefixSuffixItem.meta.prefixSuffixParameters, newItem);
}
if (newItem.wtypeId) {
if (prefixSuffixItem.meta.prefixSuffixReplaceWeaponType) {
newItem.wtypeId = prefixSuffixItem.wtypeId;
}
} else {
if (prefixSuffixItem.meta.prefixSuffixReplaceArmorType) {
newItem.atypeId = prefixSuffixItem.atypeId;
}
}
};
DreamX.RandomPrefixSuffix.combineWithRegularItem = function (prefixSuffixItem, newItem) {
// combinations
newItem.effects = newItem.effects.concat(prefixSuffixItem.effects);
// combine speed
newItem.speed += prefixSuffixItem.speed;
if (newItem.meta.prefixSuffixCombineSuccess) {
// combine successRate
newItem.successRate += prefixSuffixItem.successRate;
}
if (newItem.meta.prefixSuffixCombineVariance) {
// combine variance
newItem.damage.variance += prefixSuffixItem.damage.variance;
}
if (newItem.meta.prefixSuffixCombineDamageFormula) {
// combine variance
newItem.damage.formula += prefixSuffixItem.damage.formula;
}
//-----------
// replaces
if (newItem.meta.prefixSuffixReplaceConsumable) {
// replace consumable boolean
newItem.consumable = prefixSuffixItem.consumable;
}
if (newItem.meta.prefixSuffixReplaceHitType) {
// replace hit type
newItem.hitType = prefixSuffixItem.hitType;
}
if (newItem.meta.prefixSuffixReplaceOccasion) {
// replace occasion
newItem.occasion = prefixSuffixItem.occasion;
}
if (newItem.meta.prefixSuffixReplaceItemType) {
// replace item type
newItem.itypeId = prefixSuffixItem.itypeId;
}
if (newItem.meta.prefixSuffixReplaceScope) {
// replace item type
newItem.scope = prefixSuffixItem.scope;
}
if (newItem.meta.prefixSuffixReplaceCriticalHits) {
// replace critical hit boolean
newItem.damage.critical = prefixSuffixItem.damage.critical;
}
if (newItem.meta.prefixSuffixReplaceDamageType) {
// replace item type
newItem.damage.type = prefixSuffixItem.damage.type;
}
if (newItem.meta.prefixSuffixReplaceDamageElement) {
// replace item type
newItem.damage.elementId = prefixSuffixItem.damage.elementId;
}
// combine repeats. since repeats defaults to 1 we'll add anything
// above 1.
newItem.repeats += prefixSuffixItem.repeats - 1;
// combine tp gain
newItem.tpGain += prefixSuffixItem.tpGain;
};
DreamX.RandomPrefixSuffix.randomizeBonusParameters = function (notetag, newItem) {
var parameterSplit = notetag.trim().split(new RegExp("\\s"));
var i = 0;
while (i < parameterSplit.length) {
var parameterID = DreamX.RandomPrefixSuffix.interpretParamNote(parameterSplit[i]);
i++;
var min = parseInt(parameterSplit[i].split("|")[0]) || 0;
var max = parseInt(parameterSplit[i].split("|")[1]) || 0;
if (parameterID !== undefined) {
var paramRoll = Math.floor((Math.random() * (max - min + 1)) + min);
if (parameterID >= 0 && parameterID < newItem.params.length) {
newItem.params[parameterID] += paramRoll;
newItem.price += paramRoll * paramMultiplier;
if (!newItem._DXHighestParamBonus
|| (newItem._DXHighestParamBonus
&& newItem._DXHighestParamBonus < paramRoll)) {
newItem._DXHighestParamBonus = paramRoll;
newItem._DXHighestParamID = parameterID;
}
}
}
i++;
}
};
DreamX.RandomPrefixSuffix.paramStringIDArray = function () {
return ["MHP", "MMP", "ATK", "DEF", "MAT", "MDF", "AGI", "LUK"];
};
DreamX.RandomPrefixSuffix.interpretParamNote = function (string) {
var paramID = parseInt(string);
if (paramID)
return paramID;
paramID = this.paramStringIDArray().indexOf(string);
return paramID;
};
DreamX.RandomPrefixSuffix.ChoosePrefixSuffixItem = function (itemMeta, dataType) {
var itemArray = [];
var itemSplit = itemMeta.trim().replace(/,/g, " ").split(new RegExp("\\s{1,}"));
for (var i = 0; i < itemSplit.length; i++) {
var word = itemSplit[i];
if (word.indexOf("-") !== -1) {
var start = word.split("-")[0];
var end = word.split("-")[1];
start = parseInt(start);
end = parseInt(end);
for (var j = start; j <= end; j++) {
itemArray.push(j);
}
} else {
itemArray.push(word);
}
}
var choices = this.makeChoices(itemArray, dataType);
if (choices && choices.length >= 1) {
var itemID = choices[Math.floor(Math.random() * choices.length)];
return dataType[itemID];
}
return undefined;
};
DataManager.processYanflyWeaponArmorTags = function (processArray) {
var item = processArray[1];
if (Imported.YEP_AbsorptionBarrier) {
this.processABRNotetags2(processArray);
}
if (Imported.YEP_AutoPassiveStates) {
this.processAPSNotetags1(processArray);
}
if (Imported.YEP_BaseParamControl) {
this.processBPCNotetags1(processArray);
}
if (Imported.YEP_BattleEngineCore) {
this.processBECNotetags4(processArray);
this.processBECNotetags5(processArray);
}
if (Imported.YEP_BuffsStatesCore) {
this.processBSCNotetags2(processArray);
}
if (Imported.YEP_DamageCore) {
this.processDMGNotetags2(processArray);
}
if (Imported.YEP_DashToggle) {
this.processDashNotetags1(processArray);
}
if (Imported.YEP_ElementAbsorb) {
this.processEleAbsNotetags1(processArray);
}
if (Imported.YEP_ElementReflect) {
this.processEleRefNotetags1(processArray);
}
if (Imported.YEP_EquipBattleSkills) {
this.processEBSNotetags3(processArray);
}
if (Imported.YEP_EquipCore) {
this.processEquipNotetags2(processArray);
}
if (Imported.YEP_ExtraParamFormula) {
this.processXParamNotetags(processArray);
}
if (Imported.YEP_InstantCast) {
this.processInstantNotetags2(processArray);
}
if (Imported.YEP_JobPoints) {
this.processJPNotetags4(processArray);
}
if (Imported.YEP_LifeSteal) {
this.processLSNotetags1(processArray);
}
if (Imported.YEP_RowFormation) {
this.processRowNotetags3(processArray);
}
if (Imported.YEP_SkillCore) {
this.processGSCNotetags2(processArray);
}
if (Imported.YEP_SpecialParamFormula) {
this.processSParamNotetags(processArray);
}
if (Imported.YEP_Taunt) {
this.processTauntNotetags1(processArray);
}
if (Imported.YEP_WeaponAnimation) {
this.processWANotetags1(processArray);
}
if (Imported.YEP_WeaponUnleash) {
this.processWULNotetags1(processArray);
}
if (Imported.YEP_X_ArmorScaling) {
this.processARSNotetags2(processArray);
}
if (Imported.YEP_X_BattleSysATB) {
this.processATBNotetags2(processArray);
}
if (Imported.YEP_X_BattleSysCTB) {
this.processCTBNotetags2(processArray);
}
if (Imported.YEP_X_ChangeBattleEquip) {
this.processCBENotetags(processArray);
}
if (Imported.YEP_X_CriticalControl) {
this.processCritNotetags2(processArray);
}
if (Imported.YEP_X_EquipRequirements) {
this.processEqReqNotetags1(processArray);
}
if (Imported.YEP_X_EquipSkillTiers) {
this.processESTierNotetags2(processArray);
}
if (Imported.YEP_X_ItemDurability) {
this.processIDurNotetags1(processArray);
}
if (Imported.YEP_X_LimitedSkillUses) {
this.processLSUNotetags3(processArray);
}
if (Imported.YEP_X_PartyLimitGauge) {
this.processPLGNotetags2(processArray);
}
if (Imported.YEP_X_SelectionControl) {
this.processSelectNotetags2(processArray);
}
if (Imported.YEP_X_SkillCostItems) {
this.processSCINotetags2(processArray);
}
if (Imported.YEP_X_SkillCooldowns) {
this.processSCDNotetags3(processArray);
}
if (Imported.YEP_StealSnatch) {
this.processStealNotetags4(processArray);
}
if (Imported.YEP_X_CounterControl) {
this.processCounterNotetags2(processArray);
}
};
DataManager.processYanflyRegularItemTags = function (processArray) {
if (Imported.YEP_AbsorptionBarrier) {
this.processABRNotetags1(processArray);
}
if (Imported.YEP_BattleEngineCore) {
this.processMELODYNotetags(processArray);
this.processBECNotetags2(processArray);
}
if (Imported.YEP_BuffsStatesCore) {
this.processBSCNotetags3(processArray);
}
if (Imported.YEP_DamageCore) {
this.processDMGNotetags1(processArray);
}
if (Imported.YEP_EnemyLevels) {
this.processELVNotetags2(processArray);
}
if (Imported.YEP_EnhancedTP) {
this.processETPNotetags2(processArray);
}
if (Imported.YEP_ExtraEnemyDrops) {
this.processEEDNotetagsI(processArray);
}
if (Imported.YEP_InstantCast) {
this.processInstantNotetags1(processArray);
}
if (Imported.YEP_ItemSynthesis) {
this.processISNotetagsI(processArray);
this.processISNotetags1(processArray, 0);
}
if (Imported.YEP_JobPoints) {
this.processJPNotetags2(processArray);
}
if (Imported.YEP_LifeSteal) {
this.processLSNotetags2(processArray);
}
if (Imported.YEP_RowFormation) {
this.processRowNotetags2(processArray);
}
if (Imported.YEP_SkillCore) {
this.processObjectNotetags(processArray);
}
if (Imported.YEP_SkillLearnSystem) {
this.processSLSNotetagsI(processArray);
}
if (Imported.YEP_StealSnatch) {
this.processStealNotetagsI(processArray);
this.processStealNotetags2(processArray);
}
if (Imported.YEP_TargetCore) {
this.processTargetNotetags1(processArray);
}
if (Imported.YEP_X_ArmorScaling) {
this.processARSNotetags1(processArray);
}
if (Imported.YEP_X_BattleSysATB) {
this.processATBNotetags1(processArray);
}
if (Imported.YEP_X_BattleSysCTB) {
this.processCTBNotetags1(processArray);
}
if (Imported.YEP_X_CounterControl) {
this.processCounterNotetagsI(processArray);
this.processCounterNotetags4(processArray);
}
if (Imported.YEP_X_CriticalControl) {
this.processCritNotetags1(processArray);
}
if (Imported.YEP_X_ItemUpgrades) {
this.processUpgradeNotetags2(processArray);
}
if (Imported.YEP_X_LimitedSkillUses) {
this.processLSUNotetags2(processArray);
}
if (Imported.YEP_X_MoreCurrencies) {
this.processMCNotetagsI(processArray);
}
if (Imported.YEP_X_PartyLimitGauge) {
this.processPLGNotetags3(processArray);
}
if (Imported.YEP_X_SelectionControl) {
this.processSelectNotetagsI(processArray);
this.processSelectNotetags1(processArray, false);
}
if (Imported.YEP_X_SkillCostItems) {
this.processSCINotetagsI(processArray);
}
if (Imported.YEP_X_StateCategories) {
this.processStCNotetags2(processArray);
}
if (Imported.YEP_X_Subclass) {
this.processSubclassNotetags3(processArray);
}
};
DataManager.processYanflyAllItemTags = function (processArray) {
// item core notetags are always processed as this plugin requires
// item core
this.processItemCoreNotetags(processArray);
if (Imported.YEP_CoreEngine) {
this.processCORENotetags1(processArray);
}
if (Imported.YEP_ShopMenuCore) {
this.processShopNotetags(processArray);
}
if (Imported.YEP_StealSnatch) {
this.processStealNotetags3(processArray);
}
if (Imported.YEP_X_AttachAugments) {
this.processAugmentNotetags2(processArray);
}
if (Imported.YEP_X_ItemDurability) {
this.processIDurNotetags2(processArray);
}
if (Imported.YEP_X_ItemUpgrades) {
this.processUpgradeNotetags1(processArray);
}
if (Imported.YEP_X_SkillCooldowns) {
this.processSCDNotetags2(processArray);
}
if (Imported.YEP_X_SkillCostItems) {
this.processSCINotetags3(processArray);
}
};
DataManager.processYanflyArmorTags = function (processArray) {
if (Imported.YEP_ExtraEnemyDrops) {
this.processEEDNotetagsA(processArray);
}
if (Imported.YEP_ItemSynthesis) {
this.processISNotetagsA(processArray);
this.processISNotetags1(processArray, 2);
}
if (Imported.YEP_SkillLearnSystem) {
this.processSLSNotetagsA(processArray);
}
if (Imported.YEP_StealSnatch) {
this.processStealNotetagsA(processArray);
}
if (Imported.YEP_X_AttachAugments) {
this.processAugmentNotetags1(processArray, false);
}
if (Imported.YEP_X_CounterControl) {
this.processCounterNotetagsA(processArray);
}
if (Imported.YEP_X_MoreCurrencies) {
this.processMCNotetags1(processArray, 2);
}
};
DataManager.processYanflyWeaponTags = function (processArray) {
if (Imported.YEP_ExtraEnemyDrops) {
this.processEEDNotetagsW(processArray);
}
if (Imported.YEP_ExtraEnemyDrops) {
this.processEEDNotetagsW(processArray);
}
if (Imported.YEP_ItemSynthesis) {
this.processISNotetagsW(processArray);
}
if (Imported.YEP_SkillLearnSystem) {
this.processSLSNotetagsW(processArray);
}
if (Imported.YEP_StealSnatch) {
this.processStealNotetagsW(processArray);
}
if (Imported.YEP_X_AttachAugments) {
this.processAugmentNotetags1(processArray, true);
}
if (Imported.YEP_X_CounterControl) {
this.processCounterNotetagsW(processArray);
}
if (Imported.YEP_X_MoreCurrencies) {
this.processMCNotetags1(processArray, 1);
}
};
DataManager.processYanflyTags = function (item) {
var processArray = ["", item];
this.processYanflyAllItemTags(processArray);
if (item.wtypeId || item.atypeId) {
this.processYanflyWeaponArmorTags(processArray);
}
if (item.wtypeId) {
this.processYanflyWeaponTags(processArray);
} else if (item.atypeId) {
this.processYanflyArmorTags(processArray);
} else {
this.processYanflyRegularItemTags(processArray);
}
};
DreamX.RandomPrefixSuffix.deletePrefixSuffixNotes = function (item) {
// remove prefix and suffix notetags from note
item.note = item.note.replace(new RegExp("\\\n?"), "")
.replace(new RegExp("\\\n?"), "");
// remove the prefixes and suffixes from meta. we don't want repeats
delete item.meta.prefix;
delete item.meta.suffix;
delete item.DXRPSAffixChoices;
};
DreamX.RandomPrefixSuffix.combineWithBaseItem = function (prefixSuffixItem, newItem, itemType) {
var prefixSuffixName = prefixSuffixItem.meta.prefixSuffixName
? prefixSuffixItem.meta.prefixSuffixName : prefixSuffixItem.name;
var newNameAdd = prefixSuffixName;
if (!prefixSuffixItem.meta.prefixSuffixDontAddName) {
if (itemType === "prefix") {
if (!prefixSuffixItem.meta.prefixSuffixNoNameSpace) {
newNameAdd += " ";
}
newItem.name = newNameAdd + newItem.name;
} else if (itemType === "suffix") {
if (!prefixSuffixItem.meta.prefixSuffixNoNameSpace) {
newNameAdd = " " + newNameAdd;
}
newItem.name += newNameAdd;
}
}
newItem.name = newItem.name.trim();
if (prefixSuffixItem.meta.prefixSuffixCapitalizeFirstLetter) {
newItem.name = newItem.name.toLowerCase();
newItem.name = newItem.name[0].toUpperCase() + newItem.name.slice(1);
}
// combine augment choices
newItem.DXRPSAugmentChoices
= newItem.DXRPSAugmentChoices.concat(prefixSuffixItem.DXRPSAugmentChoices);
// combine prices
newItem.price += prefixSuffixItem.price;
// combine descriptions
newItem.description += prefixSuffixItem.description;
// combine notes
newItem.note += prefixSuffixItem.note + "\n";
// change meta
for (var notetag in prefixSuffixItem.meta) {
newItem.meta[notetag] = prefixSuffixItem.meta[notetag];
}
if (prefixSuffixItem.meta.prefixSuffixReplaceAnim) {
newItem.animationId = prefixSuffixItem.animationId;
}
if (prefixSuffixItem.meta.prefixSuffixReplaceIcon) {
newItem.iconIndex = prefixSuffixItem.iconIndex;
} else if (prefixSuffixItem.meta.OverlayIcon && newItem.meta.OverlayIcon) {
this.addIconOverlay(prefixSuffixItem, newItem);
}
// if weapon or armor
if (newItem.wtypeId || newItem.atypeId) {
this.combineWithArmorWeapon(prefixSuffixItem, newItem);
} else {
// if regular item
this.combineWithRegularItem(prefixSuffixItem, newItem);
}
};
DreamX.RandomPrefixSuffix.addIconOverlay = function (source, dest) {
var overlayIconOrder = source.meta.OverlayIconOrder || 0;
overlayIconOrder = parseInt(overlayIconOrder);
if (!dest.overlayIcons) {
dest.overlayIcons = [];
}
dest.overlayIcons.push({index: source.iconIndex,
order: overlayIconOrder});
};
DreamX.RandomPrefixSuffix.choose = function (choiceObj, dataType) {
var diceRoll = Math.floor(Math.random() * 100) + 1;
var lineChoices = choiceObj.lineChoices;
var validChoices = [];
for (var i = 0; i < lineChoices.length; i++) {
var lineChoice = lineChoices[i];
var numbers = DreamX.parseNumberRanges(lineChoice.line);
var validNumbers = [];
numbers.forEach(function (number) {
var item = dataType[number];
if (DreamX.RandomPrefixSuffix.isValidItem(item)) {
validNumbers.push(number);
}
});
if (validNumbers.length <= 0) {
continue;
}
validChoices.push({chance: lineChoice.chance,
numbers: validNumbers});
}
validChoices.sort(function (a, b) {
if (a.chance === b.chance) {
// randomly select between the two if they have the same chance
return Math.randomInt(2) === 0;
} else {
return a.chance - b.chance;
}
});
for (var i = 0; i < validChoices.length; i++) {
var chance = validChoices[i].chance;
var numbers = validChoices[i].numbers;
if (diceRoll <= chance) {
return DreamX.randomArrayElement(numbers);
break;
} else {
diceRoll -= chance;
}
}
};
DreamX.RandomPrefixSuffix.makeItem = function (baseItem) {
// make a deep copy of the original item
var newItem = JSON.parse(JSON.stringify(baseItem));
var dataType;
newItem.note += "\n";
// item type
if (newItem.wtypeId) {
dataType = $dataWeapons;
} else if (newItem.atypeId) {
dataType = $dataArmors;
} else {
dataType = $dataItems;
}
if (newItem.meta.prefixSuffixUseArmorDatabase) {
dataType = $dataArmors;
} else if (newItem.meta.prefixSuffixUseWeaponDatabase) {
dataType = $dataWeapons;
}
// add icon of original icon index if overlay
if (baseItem.meta.OverlayIcon) {
this.addIconOverlay(baseItem, newItem);
}
if (newItem.meta.prefix) {
var prefixItem = this.ChoosePrefixSuffixItem(newItem.meta.prefix, dataType);
this.combineWithBaseItem(prefixItem, newItem, "prefix");
this.evaluateCustomEffect(prefixItem, baseItem, newItem);
}
if (newItem.meta.suffix) {
var suffixItem = this.ChoosePrefixSuffixItem(newItem.meta.suffix, dataType);
this.combineWithBaseItem(suffixItem, newItem, "suffix");
this.evaluateCustomEffect(suffixItem, baseItem, newItem);
}
for (var i = 0; i < newItem.DXRPSAffixChoices.length; i++) {
var line = newItem.DXRPSAffixChoices[i];
var affixType = line.affixType;
var id = DreamX.RandomPrefixSuffix.choose(line, dataType);
if (!id) {
continue;
}
var affixItem = dataType[id];
this.combineWithBaseItem(affixItem, newItem, affixType);
this.evaluateCustomEffect(affixItem, baseItem, newItem);
if (affixItem.meta.OverlayIcon) {
this.addIconOverlay(affixItem, newItem);
}
}
this.deletePrefixSuffixNotes(newItem);
newItem.DXRPSItem = true;
newItem.DXRPSNewItem = true;
if (newItem._DXHighestParamBonus && newItem._DXHighestParamBonus !== 0) {
var sign = newItem._DXHighestParamBonus > 0 ? "+" : "";
var bonusParamText = paramBonusParamText.format(sign, newItem._DXHighestParamBonus);
newItem.name = newItem.name + " " + bonusParamText;
delete newItem._DXHighestParamBonus;
delete newItem._DXHighestParamID;
}
if (newItem.overlayIcons) {
if (!$gameSystem.overlayIcons) {
$gameSystem.overlayIcons = [];
}
var newCombIconId = paramCombIconStarting
+ $gameSystem.overlayIcons.length;
newItem.overlayIcons.sort(function (a, b) {
return a.order - b.order;
});
$gameSystem.overlayIcons.push(newItem.overlayIcons);
newItem.iconIndex = newCombIconId;
}
newItem.nonIndependent = false;
newItem.originalBaseItemId = baseItem.id;
newItem.DXRPS124V = true;
DataManager.processYanflyTags(newItem);
DataManager.registerNewItem(newItem);
newItem = JSON.parse(JSON.stringify($gameTemp.lastDXRPSItemCreated));
newItem.DXRPSNewItem = true;
return newItem;
};
DreamX.RandomPrefixSuffix.GainPrefixSuffixItem = function (item, amount, includeEquip) {
for (var i = 0; i < amount; i++) {
$gameParty.gainItem(DreamX.RandomPrefixSuffix.makeItem(item), 1, includeEquip);
}
}
DreamX.RandomPrefixSuffix.Game_Party_gainItem = Game_Party.prototype.gainItem;
Game_Party.prototype.gainItem = function (item, amount, includeEquip) {
if (!item || item.DXRPSDummyItem) {
return;
}
// must have one of the meta tags and be a weapon/armor
if (amount > 0 && DreamX.RandomPrefixSuffix.isConfiguredForPrefixSuffix(item)) {
DreamX.RandomPrefixSuffix.GainPrefixSuffixItem(item, amount, includeEquip);
} else {
DreamX.RandomPrefixSuffix.Game_Party_gainItem.call(this, item, amount, includeEquip);
}
};
Game_Party.prototype.getMatchingBaseItem = function (baseItem, equipped) {
if (!baseItem)
return null;
if (DataManager.isItem(baseItem))
var group = this.items();
if (DataManager.isWeapon(baseItem))
var group = this.weapons();
if (DataManager.isArmor(baseItem))
var group = this.armors();
if (equipped) {
for (var a = 0; a < this.members().length; ++a) {
var actor = this.members()[a];
if (!actor)
continue;
if (DataManager.isWeapon(baseItem)) {
group = group.concat(actor.weapons());
} else if (DataManager.isArmor(baseItem)) {
group = group.concat(actor.armors());
}
}
}
var baseItemId = baseItem.id;
for (var i = 0; i < group.length; ++i) {
var item = group[i];
if (!item)
continue;
if (!item.baseItemId)
continue;
if (item.baseItemId !== baseItemId && item.originalBaseItemId !== baseItemId) {
continue;
}
return item;
}
return null;
};
// DreamX.RandomPrefixSuffix.Game_Actor_changeEquipById = Game_Actor.prototype.changeEquipById;
// Game_Actor.prototype.changeEquipById = function (etypeId, itemId) {
// if (itemId > 0) {
// var slotId = etypeId - 1;
// if (this.equipSlots()[slotId] === 1) {
// var baseItem = $dataWeapons[itemId];
// } else {
// var baseItem = $dataArmors[itemId];
// }
// if (baseItem && DreamX.RandomPrefixSuffix.isConfiguredForPrefixSuffix(baseItem)) {
// $gameParty.gainItem(baseItem, 1);
// this.changeEquip(slotId, $gameTemp.lastDXRPSItemCreated);
// return;
// }
// }
// DreamX.RandomPrefixSuffix.Game_Actor_changeEquipById.call(this, etypeId, itemId)
// };
DreamX.RandomPrefixSuffix.isConfiguredForPrefixSuffix = function (item) {
if (!item || item.DXRPSItem)
return false;
if (!item.meta.suffix && !item.meta.prefix && item.DXRPSAffixChoices.length <= 0)
return false;
if (item.wtypeId) {
return Yanfly.Param.ItemMaxWeapons > 0;
} else if (item.atypeId) {
return Yanfly.Param.ItemMaxArmors > 0;
} else {
return Yanfly.Param.ItemMaxItems > 0;
}
};
//==========================================================================
// Item Core Stuff
//==========================================================================
// returns true if it was marked as one
DataManager.isDXRPSItem = function (item) {
if (item && item.DXRPSItem && item.DXRPSItem === true) {
return true;
}
return false;
};
// returns true if it was marked as one
DataManager.isDXRPSNewItem = function (item) {
if (item && item.DXRPSNewItem) {
return true;
}
return false;
};
// its valid if its an item made by this plugin
DreamX.RandomPrefixSuffix.DataManager_isNewItemValid = DataManager.isNewItemValid;
DataManager.isNewItemValid = function (item) {
if (this.isDXRPSNewItem(item)) {
return true;
}
return DreamX.RandomPrefixSuffix.DataManager_isNewItemValid.call(this, item);
};
// it is a weapon if its an dxrpgs item and has a weapon type id
DreamX.RandomPrefixSuffix.DataManager_isWeapon = DataManager.isWeapon;
DataManager.isWeapon = function (item) {
if (!item) {
return false;
}
if (item.wtypeId) {
return true;
}
return DreamX.RandomPrefixSuffix.DataManager_isWeapon.call(this, item);
};
// it is an item if its an dxrpgs item and has a item type id
DreamX.RandomPrefixSuffix.DataManager_isItem = DataManager.isItem;
DataManager.isItem = function (item) {
if (!item) {
return false;
}
if (item.itypeId) {
return true;
}
return DreamX.RandomPrefixSuffix.DataManager_isItem.call(this, item);
};
// it is armor if its an dxrpgs item and has a armor type id
DreamX.RandomPrefixSuffix.DataManager_isArmor = DataManager.isArmor;
DataManager.isArmor = function (item) {
if (!item) {
return false;
}
if (item.atypeId) {
return true;
}
return DreamX.RandomPrefixSuffix.DataManager_isArmor.call(this, item);
};
Game_Party.prototype.numIndependentItems = function (baseItem) {
var value = 0;
if (!DataManager.isIndependent(baseItem))
return this.numItems(baseItem);
var id = baseItem.id;
var dataType;
if (DataManager.isItem(baseItem)) {
var group = this.items();
dataType = $dataItems;
}
if (DataManager.isWeapon(baseItem)) {
var group = this.weapons();
dataType = $dataWeapons;
}
if (DataManager.isArmor(baseItem)) {
var group = this.armors();
dataType = $dataArmors;
}
for (var i = 0; i < group.length; ++i) {
var item = group[i];
if (!item)
continue;
var dxrpsBaseItem;
if (item.DXRPSItem) {
dxrpsBaseItem = dataType[item.baseItemId];
}
if ((item.baseItemId && item.baseItemId === id)
|| (dxrpsBaseItem && dxrpsBaseItem.baseItemId === id))
value += 1;
}
return value;
};
DreamX.RandomPrefixSuffix.applyAugments = function (newItem) {
if (!newItem.DXRPSChosenAugments || newItem.id === newItem.baseItemId) {
return;
}
for (var i = 0; i < newItem.DXRPSChosenAugments.length; i++) {
var obj = newItem.DXRPSChosenAugments[i];
var augmentType = obj.augmentType;
//var dataType = obj.dataType;
var dataType = $dataItems;
var id = obj.id;
ItemManager.checkAugmentSlots(newItem);
for (var j = 0; j < newItem.augmentSlots.length; j++) {
var slot = newItem.augmentSlots[j];
if (slot !== augmentType || newItem.augmentSlotItems[j] !== 'none') {
continue;
}
ItemManager.applyAugmentEffects(newItem, dataType[id], j, 1);
break;
}
}
delete newItem.DXRPSChosenAugments;
delete newItem.DXRPSChosenAugments;
};
DreamX.RandomPrefixSuffix.chooseAugments = function (newItem) {
if (newItem.id !== newItem.baseItemId || newItem.DXRPSChosenAugments
|| newItem.DXRPSAugmentChoices.length <= 0) {
return;
}
newItem.DXRPSChosenAugments = [];
for (var i = 0; i < newItem.DXRPSAugmentChoices.length; i++) {
var line = newItem.DXRPSAugmentChoices[i];
var augmentType = line.augmentType;
//var dataType = line.dataType;
var dataType = $dataItems;
var id = DreamX.RandomPrefixSuffix.choose(line, dataType);
dataType = 'item';
if (!id) {
continue;
}
newItem.DXRPSChosenAugments.push({id: id, dataType: dataType, augmentType: augmentType});
}
};
DreamX.RandomPrefixSuffix.DataManager_addNewIndependentItem = DataManager.addNewIndependentItem;
DataManager.addNewIndependentItem = function (baseItem, newItem) {
var originalNote = newItem.note;
DreamX.RandomPrefixSuffix.DataManager_addNewIndependentItem.call(this, baseItem, newItem);
if (!this.isDXRPSItem(newItem))
return;
DreamX.RandomPrefixSuffix.chooseAugments(newItem);
DreamX.RandomPrefixSuffix.applyAugments(newItem);
newItem.DXRPSNewItem = false;
newItem.note = originalNote;
newItem.nonIndependent = false;
$gameTemp.lastDXRPSItemCreated = newItem;
};
DreamX.RandomPrefixSuffix.Window_ItemStatus_drawLargeIcon = Window_ItemStatus.prototype.drawLargeIcon;
Window_ItemStatus.prototype.drawLargeIcon = function () {
var iconIndex = this._item.iconIndex;
if (iconIndex < paramCombIconStarting) {
return DreamX.RandomPrefixSuffix.Window_ItemStatus_drawLargeIcon.call(this);
}
this.DXDrawLargeIcon();
};
Window_Base.prototype.DXDrawLargeIcon = function () {
var iconIndex = this._item.iconIndex;
var overlayArrayIndex = iconIndex - paramCombIconStarting;
var overlayIcons = $gameSystem.overlayIcons[overlayArrayIndex];
for (var i = 0; i < overlayIcons.length; i++) {
var iconId = overlayIcons[i].index;
this.DXDrawLargeIconOverlay(iconId);
}
};
Window_Base.prototype.DXDrawLargeIconOverlay = function (iconIndex) {
var bitmap = ImageManager.loadSystem('IconSet');
var pw = Window_Base._iconWidth;
var ph = Window_Base._iconHeight;
var sx = iconIndex % 16 * pw;
var sy = Math.floor(iconIndex / 16) * ph;
var dw = Yanfly.Param.ItemIconSize;
var dh = Yanfly.Param.ItemIconSize;
var dx = (Window_Base._faceWidth - dw) / 2;
var dy = (Window_Base._faceHeight - dh) / 2;
this.contents._context.imageSmoothingEnabled = false;
this.contents.blt(bitmap, sx, sy, pw, ph, dx, dy, dw, dh);
this.contents._context.imageSmoothingEnabled = true;
};
//==========================================================================
// Window_Base
//==========================================================================
DreamX.RandomPrefixSuffix.Window_Base_drawIcon = Window_Base.prototype.drawIcon;
Window_Base.prototype.drawIcon = function (iconIndex, x, y) {
if (iconIndex >= paramCombIconStarting) {
var overlayArrayIndex = iconIndex - paramCombIconStarting;
var overlayIcons = $gameSystem.overlayIcons[overlayArrayIndex];
for (var i = 0; i < overlayIcons.length; i++) {
var iconId = overlayIcons[i].index;
DreamX.RandomPrefixSuffix.Window_Base_drawIcon.call(this, iconId, x, y);
}
return;
}
DreamX.RandomPrefixSuffix.Window_Base_drawIcon.call(this, iconIndex, x, y);
};
//==========================================================================
// Compatibility
//==========================================================================
// since the new item names don't show up by default, must alias this and
// make the new items before hand
if (Imported.YEP_VictoryAftermath) {
DreamX.RandomPrefixSuffix.BattleManager_gainDropItems = BattleManager.gainDropItems;
BattleManager.gainDropItems = function () {
this.convertPrefixSuffix();
DreamX.RandomPrefixSuffix.BattleManager_gainDropItems.call(this);
};
} else {
DreamX.RandomPrefixSuffix.BattleManager_displayDropItems = BattleManager.displayDropItems;
BattleManager.displayDropItems = function () {
this.convertPrefixSuffix();
DreamX.RandomPrefixSuffix.BattleManager_displayDropItems.call(this);
};
}
BattleManager.convertPrefixSuffix = function () {
for (var i = 0; i < this._rewards.items.length; i++) {
var item = this._rewards.items[i];
if (DreamX.RandomPrefixSuffix.isConfiguredForPrefixSuffix(item)) {
$gameParty.gainItem(item, 1);
var dummy = JSON.parse(JSON.stringify($gameTemp.lastDXRPSItemCreated));
dummy.DXRPSDummyItem = true;
$gameTemp.lastDXRPSItemCreated = undefined;
this._rewards.items[i] = dummy;
}
}
};
if (Imported.YEP_ShopMenuCore) {
DreamX.RandomPrefixSuffix.Scene_Shop_doBuyItem = Scene_Shop.prototype.doBuyItem;
Scene_Shop.prototype.doBuyItem = function (number) {
var item = this._item;
if (!item || !item.DXRPSDummyShopItem) {
return DreamX.RandomPrefixSuffix.Scene_Shop_doBuyItem.call(this, number);
}
var dataType;
if (item.wtypeId) {
dataType = $dataWeapons;
} else if (item.atypeId) {
dataType = $dataArmors;
} else {
dataType = $dataItems;
}
var actualItem = dataType[item.baseItemId];
actualItem = JSON.parse(JSON.stringify(actualItem));
actualItem.DXRPSNewItem = true;
$gameParty.gainItem(actualItem, number);
};
DreamX.RandomPrefixSuffix.Window_ShopInfo_drawLargeIcon = Window_ShopInfo.prototype.drawLargeIcon;
Window_ShopInfo.prototype.drawLargeIcon = function () {
var iconIndex = this._item.iconIndex;
if (iconIndex < paramCombIconStarting) {
return DreamX.RandomPrefixSuffix.Window_ShopInfo_drawLargeIcon.call(this);
}
this.DXDrawLargeIcon();
};
} else {
DreamX.RandomPrefixSuffix.Scene_Shop_doBuy = Scene_Shop.prototype.doBuy;
Scene_Shop.prototype.doBuy = function (number) {
var item = this._item;
if (!item || !item.DXRPSDummyShopItem) {
return DreamX.RandomPrefixSuffix.Scene_Shop_doBuy.call(this, number);
}
var dataType;
if (item.wtypeId) {
dataType = $dataWeapons;
} else if (item.atypeId) {
dataType = $dataArmors;
} else {
dataType = $dataItems;
}
var actualItem = dataType[item.baseItemId];
actualItem = JSON.parse(JSON.stringify(actualItem));
actualItem.DXRPSNewItem = true;
$gameParty.loseGold(number * this.buyingPrice());
$gameParty.gainItem(actualItem, number);
};
}
if (Imported.YEP_X_ItemDurability) {
DreamX.RandomPrefixSuffix.ItemManager_makeDurability = ItemManager.makeDurability;
ItemManager.makeDurability = function (item, variance) {
if (!item || (item.DXRPSItem && item.id === item.baseItemId)) {
return;
}
DreamX.RandomPrefixSuffix.ItemManager_makeDurability.call(this, item, variance);
};
}
if (Imported.ShopManager) {
/* Setup shop goods, if needed */
DreamX.RandomPrefixSuffix.Game_Shop_setupGoods = Game_Shop.prototype.setupGoods;
Game_Shop.prototype.setupGoods = function (goods) {
if (this._needsSetup) {
for (var i = 0; i < goods.length; i++) {
var data = goods[i];
var type = data[0];
var id = data[1];
var dataType;
switch (type) {
case 0:
dataType = $dataItems;
break;
case 1:
dataType = $dataWeapons;
break;
case 2:
dataType = $dataArmors;
break;
}
var item = dataType[id];
if (DreamX.RandomPrefixSuffix.isConfiguredForPrefixSuffix(item)) {
var newItem = DreamX.RandomPrefixSuffix.makeItem(item);
DataManager.registerNewItem(newItem);
var dummy = $gameTemp.lastDXRPSItemCreated;
dummy.DXRPSDummyShopItem = true;
data[1] = dummy.id;
}
}
}
DreamX.RandomPrefixSuffix.Game_Shop_setupGoods.call(this, goods);
};
}
})();