Anonymous

Module:Constants: Difference between revisions

From Melvor Idle
Added ability to mark modifiers as affecting specific skills
(Added the coloring aspect of the getModifier thing)
(Added ability to mark modifiers as affecting specific skills)
(32 intermediate revisions by 2 users not shown)
Line 2: Line 2:


local ConstantData = mw.loadData('Module:Constants/data')
local ConstantData = mw.loadData('Module:Constants/data')
local ItemData = mw.loadData('Module:Items/data')
local Shared = require('Module:Shared')


--Just hardcoding these because I guess that's where we're at
--Just hardcoding these because I guess that's where we're at
local modifierTypes = {
local modifierTypes = {
  ["increasedGlobalAccuracy"] = { text = "+{V}% Global Accuracy", },
["MeleeStrengthBonus"] = { text = "{V}% Melee Strength Bonus", skills = {'Combat'} },
   ["increasedMeleeAccuracyBonus"] = { text = "+{V}% Melee Accuracy Bonus", },
   ["DamageToDungeonMonsters"] = { text = "{V}% Damage To Dungeon Monsters", skills = {'Combat'} },
   ["increasedMeleeStrengthBonus"] = { text = "+{V}% Melee Strength Bonus", },
   ["GlobalMasteryXP"] = { text = "{V}% Global Mastery XP", skills = {'Woodcutting', 'Fishing', 'Firemaking', 'Cooking', 'Mining', 'Smithing', 'Thieving', 'Farming',
   ["increasedMeleeEvasion"] = { text = "+{V}% Melee Evasion", },
                                                                    'Fletching', 'Crafting', 'Runecrafting', 'Herblore', 'Agility'} },
   ["increasedRangedAccuracyBonus"] = { text = "+{V}% Ranged Accuracy Bonus", },
   ["ChanceRandomPotionHerblore"] = { text = "{V}% chance to gain a second potion of a random tier", skills = {'Herblore'} },
   ["increasedRangedStrengthBonus"] = { text = "+{V}% Ranged Strength Bonus", },
   ["FlatPrayerCostReduction"] = { text = "{V} Prayer Point Cost for Prayers", inverseSign = true, skills = {'Prayer'} },
   ["increasedRangedEvasion"] = { text = "+{V}% Ranged Evasion", },
   ["MinEarthSpellDmg"] = { text = "{VX} Min Earth Spell Dmg", skills = {'Magic'} },
   ["increasedMagicAccuracyBonus"] = { text = "+{V}% Magic Accuracy Bonus", },
   ["SlayerTaskLength"] = { text = "{V}% Slayer Task Length/Qty", skills = {'Slayer'} },
   ["increasedMagicDamageBonus"] = { text = "+{V}% Magic Damage Bonus", },
   ["ChanceToDoubleLootCombat"] = { text = "{V}% Chance To Double Loot in Combat", skills = {'Combat'} },
   ["increasedMagicEvasion"] = { text = "+{V}% Magic Evasion", },
   ["GPFromAgility"] = { text = "{V}% GP From Agility", skills = {'Agility'} },
   ["increasedMaxHitFlat"] = { text = "+{VX} Max Hit", },
   ["SkillXP"] = { text = "{V1}% {SV0} Skill XP" },
   ["increasedMaxHitPercent"] = { text = "+{V}% Max Hit", },
   ["MiningNodeHP"] = { text = "{V} Mining Node HP", skills = {'Mining'} },
   ["increasedDamageReduction"] = { text = "+{V}% Damage Reduction", },
   ["StaminaPerObstacle"] = { text = "{V} Stamina per Agility Obstacle Completion", skills = {'Agility'} },
   ["increasedChanceToDoubleLootCombat"] = { text = "+{V}% Chance To Double Loot in Combat", },
   ["ChanceToDoubleItems"] = { text = "{V} Chance To Double Items" },
   ["increasedSlayerCoins"] = { text = "+{V}% Slayer Coins", },
   ["FarmingYield"] = { text = "{V}% Farming Yield", skills = {'Farming'} },
   ["increasedSlayerXP"] = { text = "+{V}% Slayer XP", },
   ["GPFromMonstersFlat"] = { text = "{V} GP From Monsters", skills = {'Combat'} },
   ["increasedHPRegenFlat"] = { text = "+{V} Flat HP Regen", },
   ["GlobalPreservationChance"] = { text = "{V}% Chance to Preserve Resources in Skills" },
   ["increasedGPGlobal"] = { text = "+{V}% Global GP (except Item Sales)", },
   ["RunePreservation"] = { text = "{V}% Rune Preservation", skills = {'Magic'} },
   ["increasedGPFromMonsters"] = { text = "+{V}% GP From Monsters", },
   ["MaxHitpoints"] = { text = "{VX} Maximum Hitpoints", skills = {'Combat'} },
   ["increasedGPFromMonstersFlat"] = { text = "+{V} GP From Monsters", },
   ["ChanceToDoubleItemsSkill"] = { text = "{V1}% Chance to Double Items in {SV0}" },
   ["increasedGPFromThieving"] = { text = "+{V}% GP From Thieving", },
   ["autoSlayerUnlocked"] = { text = "{V} Auto Slayer Unlocked", skills = {'Slayer'} },
   ["increasedGPFromThievingFlat"] = { text = "+{V} GP From Thieving", },
   ["HitpointRegeneration"] = { text = "{V}% Hitpoint Regeneration", skills = {'Combat'} },
   ["increasedGPFromAgility"] = { text = "+{V}% GP From Agility", },
   ["SlayerXP"] = { text = "{V}% Slayer XP", skills = {'Slayer'} },
   ["decreasedGPFromAgility"] = { text = "-{V}% GP From Agility", isNegative = true },
   ["PotionChargesFlat"] = { text = "{V} Charges per Potion" },
   ["increasedDamageToBosses"] = { text = "+{V}% Damage To Bosses", },
   ["SkillInterval"] = { text = "{VMS1}s {SV0} Interval", isIncreaseNegative = true },
   ["increasedDamageToSlayerTasks"] = { text = "+{V}% Damage To Slayer Tasks", },
   ["BankSpace"] = { text = "{V} Bank Space" },
   ["increasedDamageToSlayerAreaMonsters"] = { text = "+{V}% Damage To Slayer Area Monsters", },
   ["MinHitBasedOnMaxHit"] = { text = "{V}% of Maximum Hit added to Minimum Hit", skills = {'Combat'} },
   ["increasedDamageToCombatAreaMonsters"] = { text = "+{V}% Damage To Combat Area Monsters", },
   ["DamageToSlayerTasks"] = { text = "{V}% Damage To Slayer Tasks", skills = {'Combat'} },
   ["increasedDamageToDungeonMonsters"] = { text = "+{V}% Damage To Dungeon Monsters", },
   ["Lifesteal"] = { text = "{V}% Lifesteal", skills = {'Combat'} },
   ["increasedDamageToAllMonsters"] = { text = "+{V}% Damage To All Monsters", },
   ["HPRegenFlat"] = { text = "{V} Flat HP Regen", skills = {'Combat'} },
   ["increasedAutoEatEfficiency"] = { text = "+{V}% Auto Eat Efficiency", },
   ["ChanceToDoubleOres"] = { text = "{V}% Chance to Double Ores in Mining", skills = {'Combat'} },
   ["increasedAutoEatThreshold"] = { text = "+{V}% Auto Eat Threshold", },
   ["MaxStamina"] = { text = "{V} Max Stamina" },
   ["increasedAutoEatHPLimit"] = { text = "+{V}% Auto Eat HP Limit", },
   ["MonsterRespawnTimer"] = { text = "{VMS}s Monster Respawn Timer", isIncreaseNegative = true, skills = {'Combat'} },
   ["increasedFoodHealingValue"] = { text = "+{V}% Food Healing Value", },
   ["SkillPreservationChance"] = { text = "{V1}% Chance to Preserve Resources in {SV0}" },
   ["increasedChanceToPreservePrayerPoints"] = { text = "+{V}% Chance To Preserve Prayer Points", },
   ["DamageToCombatAreaMonsters"] = { text = "{V}% Damage To Combat Area Monsters", skills = {'Combat'} },
   ["increasedFlatPrayerCostReduction"] = { text = "+{V} Flat Prayer Cost Reduction", },
   ["TreeCutLimit"] = { text = "{V} Tree Cut Limit", skills = {'Woodcutting'} },
   ["increasedMinAirSpellDmg"] = { text = "+{V} Min Air Spell Dmg", },
   ["EquipmentSets"] = { text = "{V} Equipment Sets" },
   ["increasedMinWaterSpellDmg"] = { text = "+{V} Min Water Spell Dmg", },
   ["HiddenSkillLevel"] = { text = "{V1} Hidden {SV0} Level" },
   ["increasedMinEarthSpellDmg"] = { text = "+{V} Min Earth Spell Dmg", },
   ["ChanceToPreservePrayerPoints"] = { text = "{V}% Chance To Preserve Prayer Points", skills = {'Prayer'} },
   ["increasedMinFireSpellDmg"] = { text = "+{V} Min Fire Spell Dmg", },
   ["ReflectDamage"] = { text = "{V}% Reflect Damage", skills = {'Combat'} },
   ["increasedAmmoPreservation"] = { text = "+{V}% Ammo Preservation", },
   ["MeleeEvasion"] = { text = "{V}% Melee Evasion", skills = {'Combat'} },
   ["increasedRunePreservation"] = { text = "+{V}% Rune Preservation", },
   ["DamageToSlayerAreaMonsters"] = { text = "{V}% Damage To Slayer Area Monsters", skills = {'Combat'} },
   ["increasedHiddenSkillLevel"] = { text = "+{V1} Hidden {SV0} Level", },
   ["GPFromMonsters"] = { text = "{V}% GP From Monsters", skills = {'Combat'} },
   ["decreasedPlayerAttackSpeed"] = { text = "-{V} Player Attack Speed", },
   ["MagicEvasion"] = { text = "{V}% Magic Evasion", skills = {'Combat'} },
   ["decreasedPlayerAttackSpeedPercent"] = { text = "-{V}% Player Attack Speed", },
   ["PlayerAttackSpeedPercent"] = { text = "{V}% Player Attack Speed", isIncreaseNegative = true, skills = {'Combat'} },
   ["increasedSlayerAreaEffectNegationFlat"] = { text = "+{V}% Flat Slayer Area Effect Negation", },
   ["PreservationChance"] = { text = "{V}% Chance to Preserve Resources" },
   ["decreasedMonsterRespawnTimer"] = { text = "-{VMS}s Monster Respawn Timer", },
   ["DamageReduction"] = { text = "{V}% Damage Reduction", skills = {'Combat'} },
   ["decreasedGlobalAccuracy"] = { text = "-{V}% Global Accuracy", isNegative = true },
   ["MinWaterSpellDmg"] = { text = "{VX} Min Water Spell Dmg", skills = {'Magic'} },
   ["decreasedMeleeAccuracyBonus"] = { text = "-{V}% Melee Accuracy Bonus", isNegative = true },
   ["DamageToAllMonsters"] = { text = "{V}% Damage To All Monsters", skills = {'Combat'} },
   ["decreasedMeleeStrengthBonus"] = { text = "-{V}% Melee Strength Bonus", isNegative = true },
   ["golbinRaidIncreasedStartingRuneCount"] = { text = "{V} to starting Elemental Rune count" },
   ["decreasedMeleeEvasion"] = { text = "-{V}% Melee Evasion", isNegative = true },
   ["FoodHealingValue"] = { text = "{V}% Food Healing Value", skills = {'Combat'} },
   ["decreasedRangedAccuracyBonus"] = { text = "-{V} Ranged Accuracy Bonus", isNegative = true },
   ["MinFireSpellDmg"] = { text = "{VX} Min Fire Spell Dmg", skills = {'Magic'} },
   ["decreasedRangedStrengthBonus"] = { text = "-{V}% Ranged Strength Bonus", isNegative = true },
   ["SlayerCoins"] = { text = "{V}% Slayer Coins", skills = {'Slayer'} },
   ["decreasedRangedEvasion"] = { text = "-{V}% Ranged Evasion", isNegative = true },
   ["GPFromThievingFlat"] = { text = "{V} GP From Thieving", skills = {'Thieving'} },
   ["decreasedMagicAccuracyBonus"] = { text = "-{V}% Magic Accuracy Bonus", isNegative = true },
   ["GlobalAccuracy"] = { text = "{V}% Global Accuracy", skills = {'Combat'} },
   ["decreasedMagicDamageBonus"] = { text = "-{V}% Magic Damage Bonus", isNegative = true },
   ["ChanceToDoubleLootThieving"] = { text = "{V}% Chance To Double Loot in Thieving", skills = {'Thieving'} },
   ["decreasedMagicEvasion"] = { text = "-{V}% Magic Evasion", isNegative = true },
   ["SlayerAreaEffectNegationFlat"] = { text = "{V}% Flat Slayer Area Effect Negation", skills = {'Combat'} },
   ["decreasedMaxHitFlat"] = { text = "-{V} Max Hit", isNegative = true },
   ["MagicAccuracyBonus"] = { text = "{V}% Magic Accuracy Bonus", skills = {'Combat'} },
   ["decreasedMaxHitPercent"] = { text = "-{V}% Max Hit", isNegative = true },
   ["SkillIntervalPercent"] = { text = "{V1}% {SV0} Interval", isIncreaseNegative = true },
   ["decreasedDamageReduction"] = { text = "-{V}% Damage Reduction", isNegative = true },
   ["GlobalSkillXP"] = { text = "{V}% Global Skill XP" },
   ["decreasedChanceToDoubleLootCombat"] = { text = "-{V}% Chance To Double Loot in Combat", isNegative = true },
   ["MeleeAccuracyBonus"] = { text = "{V}% Melee Accuracy Bonus", skills = {'Combat'} },
   ["decreasedSlayerCoins"] = { text = "-{V}% Slayer Coins", isNegative = true },
   ["DamageToBosses"] = { text = "{V}% Damage To Bosses", skills = {'Combat'} },
   ["decreasedSlayerXP"] = { text = "-{V}% Slayer XP", isNegative = true },
   ["ChanceToPreservePotionCharge"] = { text = "{V}% Chance To Preserve Potion Charge" },
   ["decreasedHPRegenFlat"] = { text = "-{V} Flat HP Regen", isNegative = true },
   ["MaxHitPercent"] = { text = "{V}% Max Hit", skills = {'Combat'} },
   ["decreasedGPGlobal"] = { text = "-{V}% GP from all sources (Except Item Selling)", isNegative = true },
   ["AltMagicSkillXP"] = { text = "{V}% Alt. Magic Skill XP", skills = {'Magic'} },
   ["decreasedGPFromMonsters"] = { text = "-{V}% GP From Monsters", isNegative = true },
   ["StaminaPreservationChance"] = { text = "{V}% Chance to Preserve Stamina" },
   ["decreasedGPFromMonstersFlat"] = { text = "-{V} GP From Monsters", isNegative = true },
   ["MinAirSpellDmg"] = { text = "{VX} Min Air Spell Dmg", skills = {'Combat'} },
   ["decreasedDamageToBosses"] = { text = "-{V}% Damage To Bosses", isNegative = true },
   ["AutoEatEfficiency"] = { text = "{V}% Auto Eat Efficiency", skills = {'Combat'} },
   ["decreasedDamageToSlayerTasks"] = { text = "-{V}% Damage To Slayer Tasks", isNegative = true },
   ["GPFromThieving"] = { text = "{V}% GP From Thieving", skills = {'Thieving'} },
   ["decreasedDamageToSlayerAreaMonsters"] = { text = "-{V}% Damage To Slayer Area Monsters", isNegative = true },
   ["ChanceToDoubleItemsGlobal"] = { text = "{V}% Chance to Double Items Globally" },
   ["decreasedDamageToCombatAreaMonsters"] = { text = "-{V}% Damage To Combat Area Monsters", isNegative = true },
   ["GPGlobal"] = { text = "{V}% GP from all sources (Except Item Selling)", skills = {'Combat', 'Thieving', 'Agility'} },
   ["decreasedDamageToDungeonMonsters"] = { text = "-{V}% Damage To Dungeon Monsters", isNegative = true },
   ["RangedAccuracyBonus"] = { text = "{V} Ranged Accuracy Bonus", skills = {'Combat'} },
   ["decreasedDamageToAllMonsters"] = { text = "-{V}% Damage To All Monsters", isNegative = true },
   ["AutoEatThreshold"] = { text = "{V}% Auto Eat Threshold", skills = {'Combat'} },
   ["decreasedAutoEatEfficiency"] = { text = "-{V}% Auto Eat Efficiency", isNegative = true },
   ["PlayerAttackSpeed"] = { text = "{VMS}s Player Attack Speed", isIncreaseNegative = true, skills = {'Combat'} },
   ["decreasedAutoEatThreshold"] = { text = "-{V}% Auto Eat Threshold", isNegative = true },
   ["freeBonfires"] = { text = "+ Automatically relight bonfires for free", skills = {'Firemaking'} },
   ["decreasedAutoEatHPLimit"] = { text = "-{V}% Auto Eat HP Limit", isNegative = true },
   ["AutoEatHPLimit"] = { text = "{V}% Auto Eat HP Limit", skills = {'Combat'} },
   ["decreasedFoodHealingValue"] = { text = "-{V}% Food Healing Value", isNegative = true },
   ["BankSpaceShop"] = { text = "{V} Bank Space from Shop" },
   ["decreasedChanceToPreservePrayerPoints"] = { text = "-{V}% Chance To Preserve Prayer Points", isNegative = true },
   ["BirdNestDropRate"] = { text = "{V}% Bird Nest drop rate", skills = {'Woodcutting'} },
   ["decreasedFlatPrayerCostReduction"] = { text = "-{V} Flat Prayer Cost Reduction", isNegative = true },
   ["RangedEvasion"] = { text = "{V}% Ranged Evasion", skills = {'Combat'} },
   ["decreasedMinAirSpellDmg"] = { text = "-{V} Min Air Spell Dmg", isNegative = true },
   ["ChanceDoubleHarvest"] = { text = "{V}% chance for double harvest", skills = {'Farming'} },
   ["decreasedMinWaterSpellDmg"] = { text = "-{V} Min Water Spell Dmg", isNegative = true },
   ["golbinRaidStartingWeapon"] = { text = "Start the Golbin Raid with an {IV}" },
   ["decreasedMinEarthSpellDmg"] = { text = "-{V} Min Earth Spell Dmg", isNegative = true },
   ["AttackRolls"] = { text = "+Lucky Hit Chance (Roll twice, take the better result)", skills = {'Combat'} },
   ["decreasedMinFireSpellDmg"] = { text = "-{V} Min Fire Spell Dmg", isNegative = true },
   ["AmmoPreservation"] = { text = "{V}% Ammo Preservation", skills = {'Ranged'} },
   ["decreasedAmmoPreservation"] = { text = "-{V}% Ammo Preservation", isNegative = true },
   ["RangedStrengthBonus"] = { text = "{V}% Ranged Strength Bonus", skills = {'Combat'} },
   ["decreasedRunePreservation"] = { text = "-{V}% Rune Preservation", isNegative = true },
   ["MagicDamageBonus"] = { text = "{V}% Magic Damage Bonus", skills = {'Combat'} },
   ["decreasedHiddenSkillLevel"] = { text = "-{V1} Hidden {SV0} Level", isNegative = true },
   ["MasteryXP"] = { text = "{V1}% {SV0} Mastery XP" },
   ["increasedPlayerAttackSpeed"] = { text = "+{V} Player Attack Speed", isNegative = true },
   ["dungeonEquipmentSwapping"] = { text = "{V} Dungeon Equipment Swapping", skills = {'Combat'} },
   ["increasedPlayerAttackSpeedPercent"] = { text = "+{V}% Player Attack Speed", isNegative = true },
   ["SeeingGoldChance"] = { text = "{V}% chance for Silver Ore to also produce a Gold Bar when smithed", skills = {'Smithing'} },
   ["increasedMonsterRespawnTimer"] = { text = "+{VMS}s Monster Respawn Timer", isNegative = true },
   ["ElementalRuneGain"] = { text = "{V} runes received when generating random elemental runes", skills = {'Runecrafting'} },
   ["decreasedSlayerAreaEffectNegationFlat"] = { text = "-{V}% Flat Slayer Area Effect Negation", isNegative = true },
   ["StaminaCost"] = { text = "{V} Stamina Cost per action", isIncreaseNegative = true },
   ["increasedGPFromSales"] = { text = "+{V}% GP From Sales", },
   ["GPFromSales"] = { text = "{V}% GP From Sales" },
   ["increasedBankSpace"] = { text = "+{V} Bank Space", },
   ["MaxHitFlat"] = { text = "{VX} Max Hit", skills = {'Combat'} },
   ["increasedBankSpaceShop"] = { text = "+{V} Bank Space from Shop", },
   ["ChanceNoDamageMining"] = { text = "{V}% chance to do zero damage to Ores and Rune Essence", skills = {'Mining'} },
  ["increasedChanceToPreservePotionCharge"] = { text =  "+{V}% Chance To Preserve Potion Charge", },
   ["ChanceForElementalRune"] = { text = "{V}% chance to receive random elemental runes per Runecraft", skills = {'Runecrafting'} },
  ["decreasedGPFromSales"] = { text =  "-{V}% GP From Sales", isNegative = true },
  ["decreasedBankSpace"] = { text =  "-{V} Bank Space", isNegative = true },
  ["decreasedBankSpaceShop"] = { text =  "-{V} Bank Space from Shop", isNegative = true },
  ["decreasedChanceToPreservePotionCharge"] = { text =  "-{V}% Chance To Preserve Potion Charge", isNegative = true },
  ["decreasedSkillInterval"] = { text =  "-{V1} {SV0} Interval", },
  ["decreasedSkillIntervalPercent"] = { text =  "-{V1}% {SV0} Interval", },
  ["increasedChanceToDoubleLootThieving"] = { text =  "+{V}% Chance To Double Loot in Thieving", },
  ["increasedPreservationChance"] = { text =  "+{V}% Chance to Preserve Resources", },
  ["increasedStaminaPreservationChance"] = { text =  "+{V}% Chance to Preserve Stamina", },
  ["increasedGlobalMasteryXP"] = { text =  "+{V}% Global Mastery XP", },
  ["increasedGlobalSkillXP"] = { text =  "+{V}% Global Skill XP", },
  ["decreasedGlobalSkillXP"] = { text =  "-{V}% Global Skill XP", isNegative = true },
  ["increasedMasteryXP"] = { text =  "+{V1}% {SV0} Mastery XP", },
  ["increasedSkillXP"] = { text =  "+{V1}% {SV0} Skill XP", },
  ["increasedMaxStamina"] = { text =  "+{V}% Max Stamina", },
  ["increasedMiningNodeHP"] = { text =  "+{V} Mining Node HP", },
  ["increasedSkillInterval"] = { text =  "+{V1} {SV0} Interval", isNegative = true },
  ["increasedSkillIntervalPercent"] = { text =  "+{V1}% {SV0} Interval", isNegative = true },
  ["decreasedChanceToDoubleLootThieving"] = { text =  "-{V}% Chance To Double Loot in Thieving", isNegative = true },
  ["decreasedPreservationChance"] = { text =  "-{V}% Chance to Preserve Resources", isNegative = true },
  ["decreasedStaminaPreservationChance"] = { text =  "-{V}% Chance to Preserve Stamina", isNegative = true },
  ["decreasedGlobalMasteryXP"] = { text =  "-{V}% Global Mastery XP", isNegative = true },
  ["decreasedMasteryXP"] = { text =  "-{V1}% {SV0} Mastery XP", isNegative = true },
  ["decreasedSkillXP"] = { text =  "-{V1}% {SV0} Skill XP", isNegative = true },
  ["decreasedMaxStamina"] = { text =  "-{V} Max Stamina", isNegative = true },
  ["decreasedMiningNodeHP"] = { text =  "-{V} Mining Node HP", isNegative = true },
  ["decreasedGPFromThieving"] = { text =  "-{V}% GP From Thieving", isNegative = true },
  ["decreasedGPFromThievingFlat"] = { text =  "-{V} GP From Thieving", isNegative = true },
  ["dungeonEquipmentSwapping"] = { text =  "{V} Dungeon Equipment Swapping", },
  ["increasedEquipmentSets"] = { text =  "+{V} Equipment Sets", },
  ["autoSlayerUnlocked"] = { text =  "{V} Auto Slayer Unlocked", },
  ["increasedTreeCutLimit"] = { text =  "+{V} Tree Cut Limit", },
  ["increasedChanceToDoubleItems"] = { text =  "+{V} Chance To Double Items", },
  ["decreasedChanceToDoubleItems"] = { text =  "-{V} Chance To Double Items", isNegative = true },
  ["increasedGlobalPreservationChance"] = { text =  "+{V}% Chance to Preserve Resources in Skills", },
  ["decreasedGlobalPreservationChance"] = { text =  "-{V}% Chance to Preserve Resources in Skills", isNegative = true },
  ["increasedFarmingYield"] = { text =  "+{V}% Farming Yield", },
  ["decreasedFarmingYield"] = { text =  "-{V}% Farming Yield", isNegative = true },
  ["increasedMaxHitpoints"] = { text =  "+{VX} Maximum Hitpoints", },
  ["decreasedMaxHitpoints"] = { text =  "-{VX} Maximum Hitpoints", isNegative = true },
  ["increasedStaminaPerObstacle"] = { text =  "+{V} Stamina per Agility Obstacle Completion", },
  ["decreasedStaminaPerObstacle"] = { text =  "+{V} Stamina per Agility Obstacle Completion", isNegative = true },
  ["increasedSlayerTaskLength"] = { text =  "+{V}% Slayer Task Length/Qty", },
  ["decreasedSlayerTaskLength"] = { text =  "+{V}% Slayer Task Length/Qty", isNegative = true },
  ["decreasedFlatPrayerCostReduction"] = { text =  "+{V} Prayer Point Cost for Prayers", isNegative = true },
  ["increasedFlatPrayerCostReduction"] = { text =  "+{V} Prayer Point Cost for Prayers", },
  ["increasedStaminaCost"] = { text =  "+{V} Stamina Cost per action", isNegative = true },
  ["decreasedStaminaCost"] = { text =  "+{V} Stamina Cost per action", },
  ["increasedChanceToDoubleItemsSkill"] = { text =  "+{V1}% Chance to Double Items in {SV0}", },
  ["decreasedChanceToDoubleItemsSkill"] = { text =  "+{V1}% Chance to Double Items in {SV0}", isNegative = true },
  ["increasedChanceToDoubleItemsGlobal"] = { text =  "+{V}% Chance to Double Items Globally", },
  ["decreasedChanceToDoubleItemsGlobal"] = { text =  "+{V}% Chance to Double Items Globally", isNegative = true },
  ["increasedLifesteal"] = { text =  "+{V}% Lifesteal", },
  ["decreasedLifesteal"] = { text =  "+{V}% Lifesteal", isNegative = true },
  ["increasedReflectDamage"] = { text =  "+{V}% Reflect Damage", },
  ["decreasedReflectDamage"] = { text =  "+{V}% Reflect Damage", isNegative = true },
}
}
--Difficulties are hard coded which is dumb but means hardcoding them here too
local Difficulties = {
    [0] = 'Very Easy',
    [1] = 'Easy',
    [2] = 'Medium',
    [3] = 'Hard',
    [4] = 'Very Hard',
    [5] = 'Elite',
    [6] = 'Insane'}
function p.getDifficultyString(difficulty)
  return Difficulties[difficulty]
end


function p.getSkillName(skillID)
function p.getSkillName(skillID)
Line 166: Line 127:
end
end


function p.getSkillID(skillName)
  return ConstantData.skill[skillName]
end
function p.getEquipmentSlotName(id)
  for slotName, i in Shared.skpairs(ConstantData.equipmentSlot) do
    if i == id then
      return slotName
    end
  end
  return 'Invalid'
end
function p.getEquipmentSlotID(name)
  return ConstantData.equipmentSlot[name]
end
function p.getCombatStyleName(styleNum)
  for name, num in Shared.skpairs(ConstantData.attackType) do
    if num == styleNum then
      return name
    end
  end
  return "ERROR: Invalid combat style[[Category:Pages with script errors]]"
end


function p.getModifierText(modifier, value, doColor)
function p.getSlayerTierName(tier)
  for name, num in Shared.skpairs(ConstantData.slayerTier) do
    if num == tier then
      return name
    end
  end
  return "ERROR: Invalid Slayer tier[[Category:Pages with script errors]]"
end
 
function p.getSlayerTierNameByLevel(lvl)
  for i, tier in Shared.skpairs(ConstantData.Slayer.Tiers) do
    if tier.minLevel <= lvl and (tier.maxLevel >= lvl or tier.maxLevel == -1) then
      return tier.display
    end
  end
  return 'N/A'
end
 
function p.getSlayerTier(name)
  for i, tier in Shared.skpairs(ConstantData.Slayer.Tiers) do
    if tier.display == name then
      local result = Shared.clone(tier)
      result.id = i - 1
      return result
    end
  end
end
 
function p.getSlayerTierByID(tierID)
  if ConstantData.Slayer.Tiers[tierID + 1] == nil then
    return nil
  end
 
  local result = Shared.clone(ConstantData.Slayer.Tiers[tierID + 1])
  result.id = tierID
  return result
end
 
--Turns a modifier name like 'increasedMeleeAccuracyBonus' into several pieces of data:
--Base Name, Text, Sign, and IsNegative
--ex. "MeleeAccuracyBonus", "+{V}% Melee Accuracy", "+", false
function p.getModifierDetails(modifierName)
  local baseName = modifierName
  local isIncrease = true
  local isNegative = false
 
  if Shared.startsWith(modifierName, "increased") or Shared.startsWith(modifierName, "decreased") then
    baseName = string.sub(modifierName, 10)
    isIncrease = Shared.startsWith(modifierName, "increased")
  end
 
  local modifier = modifierTypes[baseName]
  if modifier == nil then
    mw.log(baseName)
    return nil
  end
 
  local isPositive = isIncrease
  if modifier.isIncreaseNegative then
    isPositive = not isPositive
  end
 
  local sign = "+"
  if (not isIncrease and not modifier.inverseSign) or (isIncrease and modifier.inverseSign) then
    sign = "-"
  end
 
  return baseName, modifier.text, sign, not isPositive
end
 
function p._getModifierText(modifier, value, doColor)
   if doColor == nil then doColor = true end
   if doColor == nil then doColor = true end
   local template = modifierTypes[modifier]
   local modName, modText, sign, isNegative = p.getModifierDetails(modifier)


   if template == nil then
   if modName == nil then
     return 'ERROR: Invalid modifier type [[Category:Pages with script errors]]'
     return 'ERROR: Invalid modifier type [[Category:Pages with script errors]]'
   end
   end


   local result = template.text
   local result = modText


   if type(value) == 'table' then
   if type(value) == 'table' then
     if value[1] ~= nil then
     if Shared.tableCount(value) > 0 and type(value[1]) == 'table' then
      result = string.gsub(result, '{SV0}', p.getSkillName(value[1]))
      --Potentially return multiple rows if necessary
      local resultArray = {}
      for i, subVal in Shared.skpairs(value) do
        table.insert(resultArray, p._getModifierText(modifier, subVal, doColor))
      end
      return table.concat(resultArray, '<br/>')
    else
      if value[1] ~= nil then
        local skillName = p.getSkillName(value[1])
        if skillName ~= nil then
          result = string.gsub(result, '{SV0}', p.getSkillName(value[1]))
        end
      end
      if value[2] ~= nil then
        result = string.gsub(result, '{V1}', sign..value[2])
        result = string.gsub(result, '{VMS1}', sign..(value[2] / 1000))
      end
     end
     end
     if value[2] ~= nil then
  else
      result = string.gsub(result, '{V1}', value[2])
     if string.find(result, '{IV}', 1, true) ~= nil and tonumber(value) ~= nil then
      local item = ItemData.Items[tonumber(value) + 1]
      if item ~= nil then
        result = string.gsub(result, '{IV}', item.name)
      end
     end
     end
  else
     result = string.gsub(result, '{V}', sign..value)
     result = string.gsub(result, '{V}', value)
     result = string.gsub(result, '{VMS}', sign..(value / 1000))
     result = string.gsub(result, '{VMS}', value / 1000)
     result = string.gsub(result, '{VX}', sign..(value * 10))
     result = string.gsub(result, '{VX}', value * 10)
   end
   end


   if doColor then
   if doColor then
     if template.isNegative ~= nil and template.isNegative then
     if isNegative ~= nil and isNegative then
       result = '<span color="red">'..result..'</span>'
       result = '<span style="color:red">'..result..'</span>'
     else
     else
       result = '<span color="green">'..result..'</span>'
       result = '<span style="color:green">'..result..'</span>'
     end
     end
   end
   end


   return result
   return result
end
function p.getModifierText(frame)
  local modifier = frame.args ~= nil and frame.args[1] or frame[1]
  local value = frame.args ~= nil and frame.args[2] or frame[2]
  local skill = frame.args ~= nil and frame.args.skill or frame.skill
  local doColor = frame.args ~= nil and frame.args[3] or frame[3]
  if doColor ~= nil then
    doColor = string.upper(doColor) ~= 'FALSE'
  end
  if skill ~= nil and skill ~= '' then
    value = {p.getSkillID(skill), value}
  end
  return p._getModifierText(modifier, value, doColor)
end
function p.getModifierSkills(modifiers)
  local skillArray = {}
  for modifier, value in Shared.skpairs(modifiers) do
    if type(value) == 'table' then
      for i, subVal in Shared.skpairs(value) do
        local skillName = p.getSkillName(subVal[1])
        if not Shared.contains(skillArray, skillName) then
          table.insert(skillArray, skillName)
        end
      end
    end
    local baseName = p.getModifierDetails(modifier)
    if modifierTypes[baseName].skills ~= nil then
      for i, skillName in Shared.skpairs(modifierTypes[baseName].skills) do
        if not Shared.contains(skillArray, skillName) then
          table.insert(skillArray, skillName)
        end
      end
    end
  end
  return skillArray
end
end


return p
return p