Anonymous

Module:Constants: Difference between revisions

From Melvor Idle
Correct modifier definition
(Update various modifier properties)
(Correct modifier definition)
(28 intermediate revisions by 5 users not shown)
Line 21: Line 21:
["GlobalPreservationChance"] = { text = "{V}% Chance to Preserve Resources in Skills" },
["GlobalPreservationChance"] = { text = "{V}% Chance to Preserve Resources in Skills" },
["RunePreservation"] = { text = "{V}% Rune Preservation", skills = {'Magic'} },
["RunePreservation"] = { text = "{V}% Rune Preservation", skills = {'Magic'} },
["MaxHitpoints"] = { text = "{VX} Maximum Hitpoints", skills = {'Combat'} },
["MaxHitpoints"] = { text = "{VX} Maximum Hitpoints", skills = {'Combat', 'Hitpoints'} },
["ChanceToDoubleItemsSkill"] = { text = "{V}% Chance to Double Items in {SV0}" },
["ChanceToDoubleItemsSkill"] = { text = "{V}% Chance to Double Items in {SV0}" },
["autoSlayerUnlocked"] = { text = "{V} Auto Slayer Unlocked", skills = {'Slayer'} },
["autoSlayerUnlocked"] = { text = "{V} Auto Slayer Unlocked", skills = {'Slayer'} },
["HitpointRegeneration"] = { text = "{V}% Hitpoint Regeneration", skills = {'Combat'} },
["HitpointRegeneration"] = { text = "{V}% Hitpoint Regeneration", skills = {'Combat', 'Hitpoints'} },
["PotionChargesFlat"] = { text = "{V} Charges per Potion" },
["PotionChargesFlat"] = { text = "{V} Charges per Potion" },
["SkillInterval"] = { text = "{VMS}s {SV0} Interval", isIncreaseNegative = true, isSkill = true },
["SkillInterval"] = { text = "{VMS}s {SV0} Interval", isIncreaseNegative = true, isSkill = true },
Line 31: Line 31:
["DamageToSlayerTasks"] = { text = "{V}% Damage To Slayer Tasks", skills = {'Combat'} },
["DamageToSlayerTasks"] = { text = "{V}% Damage To Slayer Tasks", skills = {'Combat'} },
["Lifesteal"] = { text = "{V}% Lifesteal", skills = {'Combat'} },
["Lifesteal"] = { text = "{V}% Lifesteal", skills = {'Combat'} },
["HPRegenFlat"] = { text = "{VX} Flat HP Regen", skills = {'Combat'} },
["HPRegenFlat"] = { text = "{VX} Flat HP Regen", skills = {'Combat', 'Hitpoints'} },
["ChanceToDoubleOres"] = { text = "{V}% Chance to Double Ores in Mining", skills = {'Mining'} },
["ChanceToDoubleOres"] = { text = "{V}% Chance to Double Ores in Mining", skills = {'Mining'} },
["MonsterRespawnTimer"] = { text = "{VMS}s Monster Respawn Timer", isIncreaseNegative = true, skills = {'Combat'} },
["MonsterRespawnTimer"] = { text = "{VMS}s Monster Respawn Timer", isIncreaseNegative = true, skills = {'Combat'} },
Line 68: Line 68:
["ChanceToDoubleItemsGlobal"] = { text = "{V}% Chance to Double Items Globally" },
["ChanceToDoubleItemsGlobal"] = { text = "{V}% Chance to Double Items Globally" },
["GPGlobal"] = { text = "{V}% GP from all sources (Except Item Selling)", skills = {'Combat', 'Thieving', 'Agility'} },
["GPGlobal"] = { text = "{V}% GP from all sources (Except Item Selling)", skills = {'Combat', 'Thieving', 'Agility'} },
["RangedAccuracyBonus"] = { text = "{V} Ranged Accuracy Bonus", skills = {'Combat'} },
["RangedAccuracyBonus"] = { text = "{V}% Ranged Accuracy Bonus", skills = {'Combat'} },
["AutoEatThreshold"] = { text = "{V}% Auto Eat Threshold", skills = {'Combat'} },
["AutoEatThreshold"] = { text = "{V}% Auto Eat Threshold", skills = {'Combat'} },
["freeBonfires"] = { text = "+ Automatically relight bonfires for free", skills = {'Firemaking'} },
["freeBonfires"] = { text = "+ Automatically relight bonfires for free", skills = {'Firemaking'} },
Line 109: Line 109:
["summoningSynergy_1_12"] = {text = "If the Enemy is your current Slayer Task, {V}% Enemy Accuracy Rating.", skills = {"Combat"}, inverseSign = true},
["summoningSynergy_1_12"] = {text = "If the Enemy is your current Slayer Task, {V}% Enemy Accuracy Rating.", skills = {"Combat"}, inverseSign = true},
["summoningSynergy_1_13"] = {text = "Grants flat Melee & Ranged Defence Bonus equal to your Damage Reduction", skills = {"Combat"}},
["summoningSynergy_1_13"] = {text = "Grants flat Melee & Ranged Defence Bonus equal to your Damage Reduction", skills = {"Combat"}},
["summoningSynergy_1_14"] = {text = "If the Enemy has more combined Evasion Ratings than the Player, grants {V}% Hitpoint Regeneration.", skills = {"Combat"}},
["summoningSynergy_1_14"] = {text = "If the Enemy has more combined Evasion Ratings than the Player, grants {V}% Hitpoint Regeneration.", skills = {"Combat", "Hitpoints"}},
["summoningSynergy_1_15"] = {text = "If the Player is BURNING, grants {V} Melee, Ranged and Magic Defence Bonus.", skills = {"Combat"}},
["summoningSynergy_1_15"] = {text = "If the Player is BURNING, grants {V} Melee, Ranged and Magic Defence Bonus.", skills = {"Combat"}},
["summoningSynergy_2_12"] = {text = "Grants Slayer Coins equal to {V}% of HP leeched from Lifesteal.", skills = {"Slayer"}},
["summoningSynergy_2_12"] = {text = "Grants Slayer Coins equal to {V}% of HP leeched from Lifesteal.", skills = {"Slayer"}},
Line 141: Line 141:
["summoningSynergy_6_12"] = {text = "While fighting your current Slayer Task, grants {V}% of your Melee Max Hit as Minimum Damage.", skills = {"Combat", 'Melee'}},
["summoningSynergy_6_12"] = {text = "While fighting your current Slayer Task, grants {V}% of your Melee Max Hit as Minimum Damage.", skills = {"Combat", 'Melee'}},
["summoningSynergy_6_13"] = {text = "While fighting a Ranged Enemy, grants {V}% Damage Reduction.", skills = {"Combat"}},
["summoningSynergy_6_13"] = {text = "While fighting a Ranged Enemy, grants {V}% Damage Reduction.", skills = {"Combat"}},
["summoningSynergy_6_14"] = {text = "While using a Melee Weapon, grants {V}% of your Melee Max Hit as Flat HP Regen.", skills = {"Combat", 'Melee'}},
["summoningSynergy_6_14"] = {text = "While using a Melee Weapon, grants {V}% of your Melee Max Hit as Flat HP Regen.", skills = {"Combat", 'Melee', 'Hitpoints'}},
["summoningSynergy_6_15"] = {text = "If the Enemy is BURNING, effects from the Minotaur Familiar are tripled.", skills = {"Combat", 'Melee'}},
["summoningSynergy_6_15"] = {text = "If the Enemy is BURNING, effects from the Minotaur Familiar are tripled.", skills = {"Combat", 'Melee'}},
["summoningSynergy_7_8"] = {text = "While fighting a Magic Enemy, grants {V} Ranged Accuracy Bonus and {V} Ranged Strength Bonus.", skills = {"Combat", 'Ranged'}},
["summoningSynergy_7_8"] = {text = "While fighting a Magic Enemy, grants {V} Ranged Accuracy Bonus and {V} Ranged Strength Bonus.", skills = {"Combat", 'Ranged'}},
["summoningSynergy_7_12"] = {text = "While fighting your current Slayer Task, grants {V}% of your Ranged Max Hit as Minimum Damage.", skills = {"Combat", 'Ranged'}},
["summoningSynergy_7_12"] = {text = "While fighting your current Slayer Task, grants {V}% of your Ranged Max Hit as Minimum Damage.", skills = {"Combat", 'Ranged'}},
["summoningSynergy_7_13"] = {text = "While fighting a Magic Enemy, grants {V}% Damage Reduction.", skills = {"Combat"}},
["summoningSynergy_7_13"] = {text = "While fighting a Magic Enemy, grants {V}% Damage Reduction.", skills = {"Combat"}},
["summoningSynergy_7_14"] = {text = "While using a Ranged Weapon, grants {V}% of your Ranged Max Hit as HP Regeneration.", skills = {"Combat", 'Ranged'}},
["summoningSynergy_7_14"] = {text = "While using a Ranged Weapon, grants {V}% of your Ranged Max Hit as HP Regeneration.", skills = {"Combat", 'Ranged', 'Hitpoints'}},
["summoningSynergy_7_15"] = {text = "Your Ranged Attacks now have {V}% to inflict BURNING on the Enemy.", skills = {"Combat", 'Ranged'}},
["summoningSynergy_7_15"] = {text = "Your Ranged Attacks now have {V}% to inflict BURNING on the Enemy.", skills = {"Combat", 'Ranged'}},
["summoningSynergy_8_12"] = {text = "Grants Slayer Coins equal to {V}% of your Magic Damage while on Slayer Task.", skills = {'Slayer'}},
["summoningSynergy_8_12"] = {text = "Grants Slayer Coins equal to {V}% of your Magic Damage while on Slayer Task.", skills = {'Slayer'}},
["summoningSynergy_8_13"] = {text = "While fighting a Melee Enemy, grants {V}% Damage Reduction.", skills = {"Combat"}},
["summoningSynergy_8_13"] = {text = "While fighting a Melee Enemy, grants {V}% Damage Reduction.", skills = {"Combat"}},
["summoningSynergy_8_14"] = {text = "Grants {V}% of your Max Hit as HP Regeneration if using a Magic Attack Style.", skills = {"Combat", 'Magic'}},
["summoningSynergy_8_14"] = {text = "Grants {V}% of your Max Hit as HP Regeneration if using a Magic Attack Style.", skills = {"Combat", 'Magic', 'Hitpoints'}},
["summoningSynergy_9_11"] = {text = "The Chef in Thieving now deals no damage to you.", skills = {'Thieving'}},
["summoningSynergy_9_11"] = {text = "The Chef in Thieving now deals no damage to you.", skills = {'Thieving'}},
["summoningSynergy_9_16"] = {text = "Crafting Recipes that require Dragonhide now use {V} quantity to create. Recipe cost cannot go below 1.", skills = {'Crafting'}, inverseSign = true},
["summoningSynergy_9_16"] = {text = "Crafting Recipes that require Dragonhide now use {V} quantity to create. Recipe cost cannot go below 1.", skills = {'Crafting'}, inverseSign = true},
Line 157: Line 157:
["summoningSynergy_10_11"] = {text = "Successfully pickpocketting the Miner in Thieving will now grant {V} Rune Essence.", skills = {'Thieving'}},
["summoningSynergy_10_11"] = {text = "Successfully pickpocketting the Miner in Thieving will now grant {V} Rune Essence.", skills = {'Thieving'}},
["summoningSynergy_10_16"] = {text = "{V}% chance to double when creating Leather, Hard Leather or Dragonhide Armour in Crafting.", skills = {'Crafting'}},
["summoningSynergy_10_16"] = {text = "{V}% chance to double when creating Leather, Hard Leather or Dragonhide Armour in Crafting.", skills = {'Crafting'}},
["summoningSynergy_10_17"] = {text = "{V}% Smithing & Runecrafting Preservation Chance."},
["summoningSynergy_10_17"] = {text = "{V}% Smithing & Runecrafting Preservation Chance.", skills = {'Smithing', 'Runecrafting'}},
["summoningSynergy_10_18"] = {text = "While the Elemental Potion is active in Runecrafting, grants a chance to get random Combination Runes. The chance and quantity is equal to that of the Elemental Potion.", skills = {'Runecrafting'}},
["summoningSynergy_10_18"] = {text = "While the Elemental Potion is active in Runecrafting, grants a chance to get random Combination Runes. The chance and quantity is equal to that of the Elemental Potion.", skills = {'Runecrafting'}},
["summoningSynergy_10_19"] = {text = "Grants {V} Fire Runes while creating Elemental Runes.", skills = {'Runecrafting'}},
["summoningSynergy_10_19"] = {text = "Grants {V} Fire Runes while creating Elemental Runes.", skills = {'Runecrafting'}},
Line 165: Line 165:
["summoningSynergy_11_19"] = {text = "While Thieving any NPC, 50% chance to grant +100% GP, 35% chance to grant 4x Items, or 15% chance to receive no items or GP at all.", skills = {'Thieving'}},
["summoningSynergy_11_19"] = {text = "While Thieving any NPC, 50% chance to grant +100% GP, 35% chance to grant 4x Items, or 15% chance to receive no items or GP at all.", skills = {'Thieving'}},
["summoningSynergy_12_13"] = {text = "While fighting your current Slayer Task, {V}% Damage Reduction.", skills = {"Combat"}},
["summoningSynergy_12_13"] = {text = "While fighting your current Slayer Task, {V}% Damage Reduction.", skills = {"Combat"}},
["summoningSynergy_12_14"] = {text = "While fighting your current Slayer Task, {V}% Hitpoints Regeneration.", skills = {"Combat"}},
["summoningSynergy_12_14"] = {text = "While fighting your current Slayer Task, {V}% Hitpoints Regeneration.", skills = {"Combat", "Hitpoints"}},
["summoningSynergy_13_14"] = {text = "{V}% Hitpoints Regeneration if you have less than 75% Current HP.", skills = {"Combat"}},
["summoningSynergy_13_14"] = {text = "{V}% Hitpoints Regeneration if you have less than 75% Current HP.", skills = {"Combat", "Hitpoints"}},
["summoningSynergy_16_17"] = {text = "{V}% chance to preserve resources in Crafting when creating Rings or Amulets only.", skills = {'Crafting'}},
["summoningSynergy_16_17"] = {text = "{V}% chance to preserve resources in Crafting when creating Rings or Amulets only.", skills = {'Crafting'}},
["summoningSynergy_16_18"] = {text = "Crafting Potions now last twice as long. Bonus is applied when a new potion is activated. Charges are used per Crafting action.", skills = {'Crafting'}},
["summoningSynergy_16_18"] = {text = "Crafting Potions now last twice as long. Bonus is applied when a new potion is activated. Charges are used per Crafting action.", skills = {'Crafting'}},
Line 199: Line 199:
["ChanceToConvertSeedDrops"] = { text = "{V}% chance to convert combat seed drops to herbs", skills = {'Combat'} },
["ChanceToConvertSeedDrops"] = { text = "{V}% chance to convert combat seed drops to herbs", skills = {'Combat'} },
["CompostPreservationChance"] = { text = "{V}% Chance to preserve Compost or Weird Gloop applied to Farming Plots when harvesting", skills = {'Farming'} },
["CompostPreservationChance"] = { text = "{V}% Chance to preserve Compost or Weird Gloop applied to Farming Plots when harvesting", skills = {'Farming'} },
["Confusion"] = { text = "Take {V}% of remaining HP as damage on a succesful attack", isIncreaseNegative = true, skills = {'Combat'} },
["Confusion"] = { text = "{V}% of remaining Hitpoints taken as damage on a successful attack (once per turn)", isIncreaseNegative = true, skills = {'Combat'} },
["curseImmunity"] = { text = "Immune to curses", skills = {'Combat'} },
["curseImmunity"] = { text = "Immune to curses", skills = {'Combat'} },
["DamageReductionPercent"] = { text = "{V}% increased damage reduction", skills = {'Combat'} },
["DamageReductionPercent"] = { text = "{V}% Damage Reduction", skills = {'Combat'} },
["DamageTaken"] = { text = "Take {V}% more Damage from attacks", isIncreaseNegative = true, skills = {'Combat'} },
["DamageTaken"] = { text = "{V}% more Damage taken", isIncreaseNegative = true, skills = {'Combat'} },
["debuffImmunity"] = { text = "Immune to debuffs", skills = {'Combat'} },
["debuffImmunity"] = { text = "Immune to debuffs", skills = {'Combat'} },
["Decay"] = { text = "Take {V}% of Max HP as damage on a succesful attack", isIncreaseNegative = true, skills = {'Combat'} },
["Decay"] = { text = "{V}% of Maximum Hitpoints taken as damage on a successful attack (once per turn)", isIncreaseNegative = true, skills = {'Combat'} },
["doubleItemsSkill"] = { text = "x{VMUL} Items received from {SV0}", unsigned = true },
["doubleItemsSkill"] = { text = "x{VMUL} Items received from {SV0}", unsigned = true },
["doubleOresMining"] = { text = "x{VMUL} Ores received from Mining", unsigned = true, skills = {'Mining'} },
["doubleOresMining"] = { text = "x{VMUL} Ores received from Mining", unsigned = true, skills = {'Mining'} },
Line 213: Line 213:
["FlatReflectDamage"] = { text = "{VX} Reflect Damage", skills = {'Combat'} },
["FlatReflectDamage"] = { text = "{VX} Reflect Damage", skills = {'Combat'} },
["freeCompost"] = { text = "Composting crops in Farming is free", skills = {'Farming'} },
["freeCompost"] = { text = "Composting crops in Farming is free", skills = {'Farming'} },
["GlobalEvasion"] = { text = "{V}% increased Evasion Ratings", skills = {'Combat'} },
["GlobalEvasion"] = { text = "{V}% Global Evasion", skills = {'Combat'} },
["golbinRaidIncreasedMaximumAmmo"] = { text = "{V}% Maximum Ammo in Golbin Raid", skills = {'Combat'} },
["golbinRaidIncreasedMaximumAmmo"] = { text = "{V}% Maximum Ammo in Golbin Raid", skills = {'Combat'} },
["golbinRaidIncreasedMaximumRunes"] = { text = "{V}% Maximum Runes in Golbin Raid", skills = {'Combat'} },
["golbinRaidIncreasedMaximumRunes"] = { text = "{V}% Maximum Runes in Golbin Raid", skills = {'Combat'} },
Line 290: Line 290:
["ChanceToPreserveFood"] = { text = "{V}% chance to Preserve Food when eaten", skills = {'Combat'} },
["ChanceToPreserveFood"] = { text = "{V}% chance to Preserve Food when eaten", skills = {'Combat'} },
["ElementalEffectChance"] = { text = "{V}% chance to apply Burn, Frostburn or Freeze when hitting with a Magic attack (once per turn)", skills = {'Combat'} },
["ElementalEffectChance"] = { text = "{V}% chance to apply Burn, Frostburn or Freeze when hitting with a Magic attack (once per turn)", skills = {'Combat'} },
["EndOfTurnHealing2"] = { text = "{V}% of current hitpoints every 2 turns", skills = {'Combat'} },
["EndOfTurnHealing2"] = { text = "{V}% of current hitpoints every 2 turns", skills = {'Combat', 'Hitpoints'} },
["EndOfTurnHealing3"] = { text = "{V}% of current hitpoints every 3 turns", skills = {'Combat'} },
["EndOfTurnHealing3"] = { text = "{V}% of current hitpoints every 3 turns", skills = {'Combat', 'Hitpoints'} },
["EndOfTurnHealing5"] = { text = "{V}% of current hitpoints every 5 turns", skills = {'Combat'} },
["EndOfTurnHealing5"] = { text = "{V}% of current hitpoints every 5 turns", skills = {'Combat', 'Hitpoints'} },
["freeProtectItem"] = { text = "The Protect Item Prayer costs nothing", skills = {'Prayer'} },
["freeProtectItem"] = { text = "The Protect Item Prayer costs nothing", skills = {'Prayer'} },
["frostBurnImmunity"] = { text = "{V}% chance to ignore Frostburn", skills = {'Combat'} },
["frostBurnImmunity"] = { text = "{V}% chance to ignore Frostburn", skills = {'Combat'} },
Line 307: Line 307:
["PoisonReflectChance"] = { text = "{V}% chance to poison attackers when hit", skills = {'Combat'} },
["PoisonReflectChance"] = { text = "{V}% chance to poison attackers when hit", skills = {'Combat'} },
["rangedImmunity"] = { text = "Immune to Ranged attacks", skills = {'Combat'} },
["rangedImmunity"] = { text = "Immune to Ranged attacks", skills = {'Combat'} },
["RegenerationInterval"] = { text = "{VMS}s Hitpoint Regeneration interval", isIncreaseNegative = true, skills = {'Combat'} },
["RegenerationInterval"] = { text = "{VMS}s Hitpoint Regeneration interval", isIncreaseNegative = true, skills = {'Combat', 'Hitpoints'} },
["slowImmunity"] = { text = "{V}% chance to ignore Slow effects", skills = {'Combat'} },
["slowImmunity"] = { text = "{V}% chance to ignore Slow effects", skills = {'Combat'} },
["SurgeSpellAccuracy"] = { text = "{V}% Accuracy Rating when using Surge spells", skills = {'Combat'} },
["SurgeSpellAccuracy"] = { text = "{V}% Accuracy Rating when using Surge spells", skills = {'Combat'} },
Line 337: Line 337:
["bypassAllSlayerItems"] = { text = "Bypass All Slayer Area item requirements", skills = {'Combat'} },
["bypassAllSlayerItems"] = { text = "Bypass All Slayer Area item requirements", skills = {'Combat'} },
["ChanceAdditionalBarSmithing"] = { text = "{V}% Chance to gain +1 additional bar in Smithing (Cannot be doubled)", skills = {'Smithing'} },
["ChanceAdditionalBarSmithing"] = { text = "{V}% Chance to gain +1 additional bar in Smithing (Cannot be doubled)", skills = {'Smithing'} },
["ChanceAdditionalPerfectItem"] = { text = "{V} chance to receive an additional Perfect Item from Cooking (Cannot be doubled)", skills = {'Cooking'} },
["ChanceAdditionalPerfectItem"] = { text = "{V}% chance to receive an additional Perfect Item from Cooking (Cannot be doubled)", skills = {'Cooking'} },
["ChanceDarkBlade"] = { text = "{V}% chance to apply Dark Blade Effect (+1% Max Hit) to the Attacker per successful hit (Stacks up to 30 times)", skills = {'Combat'} },
["ChanceDarkBlade"] = { text = "{V}% chance to apply Dark Blade Effect (+1% Max Hit) to the Attacker per successful hit (Stacks up to 30 times)", skills = {'Combat'} },
["ChanceDoubleSlayerTaskKill"] = { text = "{V}% chance for a Slayer Task kill to count as 2 kills (Rewards Slayer Coins for 2nd kill, but not Slayer XP)", skills = {'Combat'} },
["ChanceDoubleSlayerTaskKill"] = { text = "{V}% chance for a Slayer Task kill to count as 2 kills (Rewards Slayer Coins for 2nd kill, but not Slayer XP)", skills = {'Combat'} },
Line 373: Line 373:
["ChanceToIncreaseSleepDuration"] = { text = "{V}% chance for Sleep applied to the Enemy to last an extra 1 Attack Turn", skills = {'Combat'} },
["ChanceToIncreaseSleepDuration"] = { text = "{V}% chance for Sleep applied to the Enemy to last an extra 1 Attack Turn", skills = {'Combat'} },
["ChanceToPreserveConsumable"] = { text = "{V}% chance to preserve Consumable Slot charges" },
["ChanceToPreserveConsumable"] = { text = "{V}% chance to preserve Consumable Slot charges" },
["coalGainedOnCookingFailure"] = { text = "{V} Coal Ore when failing to Cook Food", inverseSign = true, skills = {'Cooking'} },
["coalGainedOnCookingFailure"] = { text = "{V} Coal Ore when failing to Cook Food", skills = {'Cooking'} },
["CookingSuccessCap"] = { text = "{V}% Cooking success chance cap", skills = {'Cooking'} },
["CookingSuccessCap"] = { text = "{V}% Cooking success chance cap", skills = {'Cooking'} },
["CraftingJewelryPreservation"] = { text = "{V}% chance to preserve resources in Crafting when making jewelry", skills = {'Crafting'} },
["CraftingJewelryPreservation"] = { text = "{V}% chance to preserve resources in Crafting when making jewelry", skills = {'Crafting'} },
Line 387: Line 387:
["DamageReductionAgainstSlayerTasks"] = { text = "{V}% Damage Reduction when fighting a Slayer Task monster", skills = {'Combat'} },
["DamageReductionAgainstSlayerTasks"] = { text = "{V}% Damage Reduction when fighting a Slayer Task monster", skills = {'Combat'} },
["DamageReductionWithMagic2HWeapon"] = { text = "{V}% Damage Reduction when using a Magic 2-Handed Weapon", skills = {'Combat'} },
["DamageReductionWithMagic2HWeapon"] = { text = "{V}% Damage Reduction when using a Magic 2-Handed Weapon", skills = {'Combat'} },
["DamageTakenAddedAsPrayerPoints"] = { text = "{V}% of all damage taken is added as Prayer Points (Rounded down)", skills = {'Combat'} },
["DamageTakenAddedAsPrayerPoints"] = { text = "{VD}% of all damage taken is added as Prayer Points (Rounded down)", skills = {'Combat'} },
["DamageTakenPerAttack"] = { text = "{V}% of Current HP taken as damage per Attack", isIncreaseNegative = true, skills = {'Combat'} },
["DamageTakenPerAttack"] = { text = "{V}% of Current HP taken as damage per Attack", isIncreaseNegative = true, skills = {'Combat'} },
["DamageTakenWhenAsleep"] = { text = "{V}% damage taken when asleep", isIncreaseNegative = true, skills = {'Combat'} },
["DamageTakenWhenAsleep"] = { text = "{V}% damage taken when asleep", isIncreaseNegative = true, skills = {'Combat'} },
Line 396: Line 396:
["decreaseEnemyEvasionOnStun"] = { text = "When a Stun is applied to the Target, -10% Global Evasion Rating for the remainder of the fight (Stacks up to 3 times)", skills = {'Combat'} },
["decreaseEnemyEvasionOnStun"] = { text = "When a Stun is applied to the Target, -10% Global Evasion Rating for the remainder of the fight (Stacks up to 3 times)", skills = {'Combat'} },
["disableGoldenStardustDrops"] = { text = "No longer receive Golden Stardust from Astrology", isIncreaseNegative = true, skills = {'Astrology'} },
["disableGoldenStardustDrops"] = { text = "No longer receive Golden Stardust from Astrology", isIncreaseNegative = true, skills = {'Astrology'} },
["disableHPRegeneration"] = { text = "Passive Hitpoint Regeneration is disabled", isIncreaseNegative = true, skills = {'Combat'} },
["disableHPRegeneration"] = { text = "Passive Hitpoint Regeneration is disabled", isIncreaseNegative = true, skills = {'Combat', 'Hitpoints'} },
["disableLifesteal"] = { text = "Disables all sources of Lifesteal", isIncreaseNegative = true, skills = {'Combat'} },
["disableLifesteal"] = { text = "Disables all sources of Lifesteal", isIncreaseNegative = true, skills = {'Combat'} },
["disableSalamanderItemReduction"] = { text = "Item Cost reduction is disabled when making Salamander Tablets in Summoning (Excludes Shard Cost)", isIncreaseNegative = true, skills = {'Summoning'} },
["disableSalamanderItemReduction"] = { text = "Item Cost reduction is disabled when making Salamander Tablets in Summoning (Excludes Shard Cost)", isIncreaseNegative = true, skills = {'Summoning'} },
Line 407: Line 407:
["Duality"] = { text = "For each Target Attack Turn: 50% chance for the Target to apply -50% Attack Interval to itself for 2 turns", skills = {'Combat'} },
["Duality"] = { text = "For each Target Attack Turn: 50% chance for the Target to apply -50% Attack Interval to itself for 2 turns", skills = {'Combat'} },
["EndOfTurnEvasion2"] = { text = "Gains up to {V}% Global Evasion Rating every 2 turns (Lasts 2 turns)", skills = {'Combat'} },
["EndOfTurnEvasion2"] = { text = "Gains up to {V}% Global Evasion Rating every 2 turns (Lasts 2 turns)", skills = {'Combat'} },
["EndOfTurnMaxHealing2"] = { text = "Heal {V}% of max hitpoints every 2 turns", skills = {'Combat'} },
["EndOfTurnMaxHealing2"] = { text = "Heal {V}% of max hitpoints every 2 turns", skills = {'Combat', 'Hitpoints'} },
["EnemyDamageReduction"] = { text = "Enemy Damage Reduction is decreased by flat {V}%", isIncreaseNegative = true, skills = {'Combat'} },
["EnemyDamageReduction"] = { text = "Enemy Damage Reduction is decreased by flat {V}%", isIncreaseNegative = true, skills = {'Combat'} },
["EvasionAgainstMagic"] = { text = "{V}% Global Evasion against Magic targets", skills = {'Combat'} },
["EvasionAgainstMagic"] = { text = "{V}% Global Evasion against Magic targets", skills = {'Combat'} },
Line 420: Line 420:
["FlatCraftingDragonhideCost"] = { text = "{V} Dragonhide costs when Crafting (Cannot be reduced below 1)", isIncreaseNegative = true, skills = {'Crafting'} },
["FlatCraftingDragonhideCost"] = { text = "{V} Dragonhide costs when Crafting (Cannot be reduced below 1)", isIncreaseNegative = true, skills = {'Crafting'} },
["FlatFarmingYield"] = { text = "{V} harvest quantity from Farming (Cannot be doubled or multiplied)", skills = {'Farming'} },
["FlatFarmingYield"] = { text = "{V} harvest quantity from Farming (Cannot be doubled or multiplied)", skills = {'Farming'} },
["FlatHPRegenBasedOnMagicMaxHit"] = { text = "{V}% of Magic max hit as flat hitpoints regeneration", skills = {'Combat'} },
["FlatHPRegenBasedOnMagicMaxHit"] = { text = "{V}% of Magic max hit as flat hitpoints regeneration", skills = {'Combat', 'Hitpoints'} },
["FlatHPRegenBasedOnMeleeMaxHit"] = { text = "{V}% of Melee max hit as flat hitpoint regeneration", skills = {'Combat'} },
["FlatHPRegenBasedOnMeleeMaxHit"] = { text = "{V}% of Melee max hit as flat hitpoint regeneration", skills = {'Combat', 'Hitpoints'} },
["FlatHPRegenBasedOnRangedMaxHit"] = { text = "{V}% of Ranged max hit as flat hitpoints regeneration", skills = {'Combat'} },
["FlatHPRegenBasedOnRangedMaxHit"] = { text = "{V}% of Ranged max hit as flat hitpoints regeneration", skills = {'Combat', 'Hitpoints'} },
["FlatMagicAccuracyBonusPerAttackInterval"] = { text = "{V} Flat Magic Accuracy Bonus per 0.1s Attack Interval. This is doubled if a 2-Handed Weapon is currently equipped", skills = {'Combat'} },
["FlatMagicAccuracyBonusPerAttackInterval"] = { text = "{V} Flat Magic Accuracy Bonus per 0.1s Attack Interval. This is doubled if a 2-Handed Weapon is currently equipped", skills = {'Combat'} },
["FlatMagicAttackBonus"] = { text = "{V} Magic Attack Bonus", skills = {'Combat'} },
["FlatMagicAttackBonus"] = { text = "{V} Magic Attack Bonus", skills = {'Combat'} },
Line 455: Line 455:
["GPFromAgilityPerActiveObstacle"] = { text = "{V}% GP from Agility per active Obstacle", skills = {'Agility'} },
["GPFromAgilityPerActiveObstacle"] = { text = "{V}% GP from Agility per active Obstacle", skills = {'Agility'} },
["GPFromBurningMonsters"] = { text = "{V}% GP from burning Monsters", skills = {'Combat'} },
["GPFromBurningMonsters"] = { text = "{V}% GP from burning Monsters", skills = {'Combat'} },
["GPFromItemAlchemy"] = { text = "{V}% Item Alchemy Item sale price conversion" },
["GPFromItemAlchemy"] = { text = "{VX100}% Item Alchemy Item sale price conversion" },
["GPFromMonstersFlatBasedOnEvasion"] = { text = "{V}% of enemy's highest evasion rating as GP on kill", skills = {'Combat'} },
["GPFromMonstersFlatBasedOnEvasion"] = { text = "{V}% of enemy's highest evasion rating as GP on kill", skills = {'Combat'} },
["GPFromNegativeObstacles"] = { text = "{V}% GP from Agility Obstacles that contain a negative modifier", skills = {'Agility'} },
["GPFromNegativeObstacles"] = { text = "{V}% GP from Agility Obstacles that contain a negative modifier", skills = {'Agility'} },
Line 468: Line 468:
["halveDamageReduction"] = { text = "Damage Reduction is halved (Floored)", isIncreaseNegative = true, skills = {'Combat'} },
["halveDamageReduction"] = { text = "Damage Reduction is halved (Floored)", isIncreaseNegative = true, skills = {'Combat'} },
["halvedWoodcuttingDoubleChance"] = { text = "Chance to double Logs while Woodcutting is halved", isIncreaseNegative = true , skills = {'Woodcutting'}},
["halvedWoodcuttingDoubleChance"] = { text = "Chance to double Logs while Woodcutting is halved", isIncreaseNegative = true , skills = {'Woodcutting'}},
["HealingOnAttackBasedOnDR"] = { text = "Heal for {VX}% of your damage reduction on attacking an enemy (once per turn)", skills = {'Combat'} },
["HealingOnAttackBasedOnDR"] = { text = "Heal for {VX}% of your damage reduction on attacking an enemy (once per turn)", skills = {'Combat', 'Hitpoints'} },
["healOnHitBasedOnTargetDR"] = { text = "Heal for {V}% of the Target's base Damage Reduction on a successful attack (once per turn)", inverseSign = true, skills = {'Combat'} },
["healOnHitBasedOnTargetDR"] = { text = "Heal for {VX}% of the Target's base Damage Reduction on a successful attack (once per turn)", skills = {'Combat', 'Hitpoints'} },
["HealWhenSleep"] = { text = "When Sleep is applied to you, heal for {V}% of your Max HP", skills = {'Combat'} },
["HealWhenSleep"] = { text = "When Sleep is applied to you, heal for {V}% of your Max HP", skills = {'Combat', 'Hitpoints'} },
["HealWhenStunned"] = { text = "When a stun is applied to you, heal for {V}% of your Max HP", skills = {'Combat'} },
["HealWhenStunned"] = { text = "When a stun is applied to you, heal for {V}% of your Max HP", skills = {'Combat', 'Hitpoints'} },
["HerbSackChanceThievingFarmer"] = { text = "{V}% chance to receive a Herb Sack when gaining a Common Drop from Thieving the Farmer", skills = {'Thieving'} },
["HerbSackChanceThievingFarmer"] = { text = "{V}% chance to receive a Herb Sack when gaining a Common Drop from Thieving the Farmer", skills = {'Thieving'} },
["HitpointRegenerationAgainstSlayerTasks"] = { text = "{V}% Hitpoint Regeneration when fighting Slayer Task monsters", skills = {'Combat'} },
["HitpointRegenerationAgainstSlayerTasks"] = { text = "{V}% Hitpoint Regeneration when fighting Slayer Task monsters", skills = {'Combat', 'Hitpoints'} },
["HPRegenWhenEnemyHasMoreEvasion"] = { text = "{V}% hitpoint regeneration when the enemy has more combined evasion ratings than the player", skills = {'Combat'} },
["HPRegenWhenEnemyHasMoreEvasion"] = { text = "{V}% hitpoint regeneration when the enemy has more combined evasion ratings than the player", skills = {'Combat', 'Hitpoints'} },
["InfernalSpellAccuracy"] = { text = "{V}% Accuracy Rating when using Archaic Spells that use Infernal Runes", skills = {'Combat', 'Magic'} },
["InfernalSpellAccuracy"] = { text = "{V}% Accuracy Rating when using Archaic Spells that use Infernal Runes", skills = {'Combat', 'Magic'} },
["JavelinProduction"] = { text = "{V} base Javelins produced per action in Fletching", skills = {'Fletching'} },
["JavelinProduction"] = { text = "{V} base Javelins produced per action in Fletching", skills = {'Fletching'} },
Line 508: Line 508:
["PassiveCookInterval"] = { text = "{V}% Passive Cook Interval", isIncreaseNegative = true, skills = {'Cooking'} },
["PassiveCookInterval"] = { text = "{V}% Passive Cook Interval", isIncreaseNegative = true, skills = {'Cooking'} },
["PlayerDamageReduction"] = { text = "Reduce Player damage reduction by {V}%", isIncreaseNegative = true, skills = {'Combat'} },
["PlayerDamageReduction"] = { text = "Reduce Player damage reduction by {V}%", isIncreaseNegative = true, skills = {'Combat'} },
["PlayerRage"] = { text = "When hit, {V}% chance to gain a stack of Rage: +2% Max Hit and -2% Attack Interval (Stacks up to 10 times)", skills = {'Combat'} },
["PlayerRage"] = { text = "When hit, gain a stack of Rage: +2% Max Hit and -2% Attack Interval (Stacks up to 10 times)", skills = {'Combat'} },
["PoisonDOTDamage"] = { text = "{V}% Damage taken from Poison", skills = {'Combat'} },
["PoisonDOTDamage"] = { text = "{V}% Damage taken from Poison", skills = {'Combat'} },
["PoisonSpellAccuracy"] = { text = "{V}% Accuracy Rating when using Archaic Spells that use Poison Runes", skills = {'Combat', 'Magic'} },
["PoisonSpellAccuracy"] = { text = "{V}% Accuracy Rating when using Archaic Spells that use Poison Runes", skills = {'Combat', 'Magic'} },
Line 537: Line 537:
["SlayerCoinsBasedOnTargetDR"] = { text = "Gain Slayer Coins equal to {V}% of the Target Damage Reduction", skills = {'Combat'} },
["SlayerCoinsBasedOnTargetDR"] = { text = "Gain Slayer Coins equal to {V}% of the Target Damage Reduction", skills = {'Combat'} },
["SlayerCoinsPerDamage"] = { text = "{V}% Damage Dealt gained as Slayer Coins", skills = {'Combat'} },
["SlayerCoinsPerDamage"] = { text = "{V}% Damage Dealt gained as Slayer Coins", skills = {'Combat'} },
["SlayerCoinsPerMagicDamageSlayerTask"] = { text = "{V}% of Magic Damage Dealt against Slayer Task monsters gained as Slayer Coins", skills = {'Combat'} },
["SlayerCoinsPerMagicDamageSlayerTask"] = { text = "{VD}% of Magic Damage Dealt against Slayer Task monsters gained as Slayer Coins", skills = {'Combat'} },
["SlayerCoinsPerPoisonDamage"] = { text = "Gain Slayer Coins euqal to {V}% of Poison damage dealt to Target", skills = {'Combat'} },
["SlayerCoinsPerPoisonDamage"] = { text = "{VD}% of Poison damage dealt is gained as Slayer Coins", skills = {'Combat'} },
["SlayerTaskMonsterAccuracy"] = { text = "{V}% Slayer Task monster Accuracy Rating", skills = {'Combat'} },
["SlayerTaskMonsterAccuracy"] = { text = "{V}% Slayer Task monster Accuracy Rating", skills = {'Combat'} },
["SmithingDragonGearPreservation"] = { text = "{V}% chance to preserve resources in Smithing when making Dragon Gear", skills = {'Smithing'} },
["SmithingDragonGearPreservation"] = { text = "{V}% chance to preserve resources in Smithing when making Dragon Gear", skills = {'Smithing'} },
Line 593: Line 593:
["TownshipSwampProduction"] = { text = "{V}% Township Building Production in Swamp Biome", skills = {'Township'} },
["TownshipSwampProduction"] = { text = "{V}% Township Building Production in Swamp Biome", skills = {'Township'} },
["TownshipTaxPerCitizen"] = { text = "{V}% GP gained from Township Citizen Tax", skills = {'Township'} },
["TownshipTaxPerCitizen"] = { text = "{V}% GP gained from Township Citizen Tax", skills = {'Township'} },
["TownshipTraderStock"] = { text = "{V} Township Trader GP Limit per visit", skills = {'Township'} },
["TownshipValleyProduction"] = { text = "{V}% Township Building Production in Valley Biome", skills = {'Township'} },
["TownshipValleyProduction"] = { text = "{V}% Township Building Production in Valley Biome", skills = {'Township'} },
["TownshipWaterProduction"] = { text = "{V}% Township Building Production in Water Biome", skills = {'Township'} },
["TownshipWaterProduction"] = { text = "{V}% Township Building Production in Water Biome", skills = {'Township'} },
Line 600: Line 601:
["WoodcuttingJewelryChance"] = { text = "{V}% chance for Silver or Gold Jewelry to drop instead of a Bird's Nest from Woodcutting", skills = {'Woodcutting'} },
["WoodcuttingJewelryChance"] = { text = "{V}% chance for Silver or Gold Jewelry to drop instead of a Bird's Nest from Woodcutting", skills = {'Woodcutting'} },
["WoodcuttingXPAddedAsFiremakingXP"] = { text = "{V}% Woodcutting XP added as Firemaking XP", skills = {'Woodcutting', 'Firemaking'} },
["WoodcuttingXPAddedAsFiremakingXP"] = { text = "{V}% Woodcutting XP added as Firemaking XP", skills = {'Woodcutting', 'Firemaking'} },
["XPFromNegativeObstacles"] = { text = "{V}% Agility Skill XP from Obstacles that contain a negative modifier", skills = {'Agility'} }
["XPFromNegativeObstacles"] = { text = "{V}% Agility Skill XP from Obstacles that contain a negative modifier", skills = {'Agility'} },
-- New 1.1.2 modifiers
["enableNightfallSeason"] = { text = "There is a 20% chance of a Nightfall Season occurring in Township", skills = {'Township'} },
["enableSolarEclipseSeason"] = { text = "There is a 20% chance of a Solar Eclipse Season occurring in Township", skills = {'Township'} },
["EssenceFromMining"] = { text = "{V} base quantity received from Essence nodes in Mining", skills = {'Mining'} },
["MasteryTokens"] = { text = "{V} Mastery Tokens received", skills = {'Woodcutting', 'Fishing', 'Firemaking', 'Cooking', 'Mining', 'Smithing', 'Thieving', 'Farming', 'Fletching', 'Crafting', 'Runecrafting', 'Herblore', 'Agility', 'Summoning', 'Astrology'} },
["TownshipRepairCost"] = { text = "{V}% Township repair costs", isIncreaseNegative = true, skills = {'Township'} },
["TownshipTraderCost"] = { text = "{V}% Township Trader costs", isIncreaseNegative = true, skills = {'Township'} }
}
}


Line 670: Line 678:


function p.getEquipmentSlotName(id)
function p.getEquipmentSlotName(id)
return type(id) == 'number' and GameData.rawData.equipmentSlots[id] or 'Invalid'
local slotData = GameData.getEntityByID('equipmentSlots', id)
if slotData ~= nil then
return slotData.name
end
end
end


function p.getEquipmentSlotID(name)
function p.getEquipmentSlotID(name)
return GameData.rawData.equipmentSlots[name]
local slotData = GameData.getEntityByName('equipmentSlots', name)
if slotData ~= nil then
return slotData.id
end
end
end


Line 686: Line 700:
return Shared.titleCase(styleNum)
return Shared.titleCase(styleNum)
end
end
return "ERROR: Invalid combat style[[Category:Pages with script errors]]"
return Shared.printError('Invalid combat style')
end
end


Line 706: Line 720:
function p.getSlayerTierByLevel(level)
function p.getSlayerTierByLevel(level)
if type(level) ~= 'number' or level < 1 then
if type(level) ~= 'number' or level < 1 then
return "ERROR: Invalid Slayer level [[Category:Pages with script errors]]"
return Shared.printError('Invalid Slayer level')
end
end
Line 727: Line 741:
end
end
end
end
return "ERROR: Invalid Slayer tier[[Category:Pages with script errors]]"
return Shared.printError('Invalid Slayer tier')
end
end


Line 735: Line 749:
return tier.display
return tier.display
else
else
return "ERROR: Invalid Slayer tier[[Category:Pages with script errors]]"
return Shared.printError('Invalid Slayer tier')
end
end
end
end
Line 781: Line 795:


if modName == nil then
if modName == nil then
return 'ERROR: Invalid modifier type for ' .. modifier .. '[[Category:Pages with script errors]]'
return Shared.printError('Invalid modifier type for "' .. modifier .. '"')
end
end
Line 862: Line 876:


if skill ~= nil and skill ~= '' then
if skill ~= nil and skill ~= '' then
value = {p.getSkillID(skill), value}
value = { { ["skillID"] = p.getSkillID(skill), ["value"] = value } }
end
end


Line 868: Line 882:
end
end


function p.getModifiersText(modifiers, doColor)
function p.getModifiersText(modifiers, doColor, inline, maxVisible)
if inline == nil then inline = false end
if type(maxVisible) ~= 'number' then maxVisible = nil end
if modifiers == nil or Shared.tableIsEmpty(modifiers) then
if modifiers == nil or Shared.tableIsEmpty(modifiers) then
return ''
return ''
end
end


local modArray = {}
local modArray = { ["visible"] = {}, ["overflow"] = {} }
local modCount = { ["visible"] = 0, ["overflow"] = 0 }
local insertKey = 'visible'
for bonus, value in pairs(modifiers) do
for bonus, value in pairs(modifiers) do
table.insert(modArray, p._getModifierText(bonus, value, doColor))
-- If there is a single by skill modifier with multiple values, this will
-- appear as multiple rows. Split these so the number of visible lines is
-- always accurate
local valueArray = nil
if type(value) == 'table' then
valueArray = value
else
valueArray = {value}
end
for i, subVal in ipairs(valueArray) do
if type(subVal) == 'table' and subVal.skillID ~= nil then
subVal = {subVal}
end
if maxVisible ~= nil and not inline and insertKey == 'visible' and modCount[insertKey] >= maxVisible then
insertKey = 'overflow'
end
table.insert(modArray[insertKey], p._getModifierText(bonus, subVal, doColor))
modCount[insertKey] = modCount[insertKey] + 1
end
end
if inline then
return table.concat(modArray['visible'], ' and ')
else
if modCount['overflow'] == 1 then
table.insert(modArray['visible'], modArray['overflow'][1])
end
local overflowText = ''
if modCount['overflow'] > 1 then
-- Number of other modifiers has exceeded the specified maximum
overflowText = table.concat({
'<br/><span class="mw-collapsible mw-collapsed" ',
'data-expandtext="Show ' .. Shared.formatnum(modCount['overflow']) .. ' more modifiers" ',
'data-collapsetext="Hide">',
table.concat(modArray['overflow'], '<br/>'),
'</span>'
})
end
return table.concat(modArray['visible'], '<br/>') .. overflowText
end
end
return table.concat(modArray, "<br/>")
end
end


Line 897: Line 951:
local baseName = p.getModifierDetails(modifier)
local baseName = p.getModifierDetails(modifier)
if baseName == nil then
if baseName == nil then
return { 'ERROR: Modifier '..modifier..' is invalid' }
return { Shared.printError('Modifier "' .. modifier .. '" is invalid') }
end
end


Line 910: Line 964:


return skillArray
return skillArray
end
-- Returns a modifiers table indicating modifiersNew less modifiersOld
-- The returned table can be passed to getModifiersText to obtain the
-- result in a human readable format
function p.getModifiersDifference(modifiersOld, modifiersNew)
local modHasPrefix = {}
local modDiff, modDiffBase = {}, {}
local allMods = {
{ ["mods"] = (modifiersNew or {}), ["mult"] = 1 },
{ ["mods"] = (modifiersOld or {}), ["mult"] = -1 }
}
-- Generate modifiers table containing only variances
-- Create modDiffBase with mod base names (less 'increased'/'decreased' prefixes),
for i, modDef in ipairs(allMods) do
for modName, value in pairs(modDef.mods) do
local modBaseName, modIsIncrease = modName, true
if Shared.startsWith(modName, "increased") or Shared.startsWith(modName, "decreased") then
modBaseName = string.sub(modName, 10)
modIsIncrease = Shared.startsWith(modName, "increased")
modHasPrefix[modBaseName] = true
end
local modMult = (modIsIncrease and 1 or -1) * modDef.mult
if type(value) == 'table' then
-- Skill specific modifier
if modDiffBase[modBaseName] == nil then
modDiffBase[modBaseName] = {}
end
for j, subVal in ipairs(value) do
if type(subVal) == 'table' and subVal.skillID ~= nil then
modDiffBase[modBaseName][subVal.skillID] = (modDiffBase[modBaseName][subVal.skillID] or 0) + subVal.value * modMult
end
end
else
modDiffBase[modBaseName] = (modDiffBase[modBaseName] or 0) + value * modMult
end
end
end
-- Transform modDiffBase into modDiff with the appropriate mod name within the return value
for modBaseName, value in pairs(modDiffBase) do
if type(value) == 'table' then
-- Skill specific modifier
for skillID, subVal in pairs(value) do
if subVal ~= 0 then
local modName = nil
if modHasPrefix[modBaseName] then
modName = (subVal < 0 and 'decreased' or 'increased') .. modBaseName
else
modName = modBaseName
end
if modDiff[modName] == nil then
modDiff[modName] = {}
end
table.insert(modDiff[modName], { ["skillID"] = skillID, ["value"] = math.abs(subVal) })
end
end
elseif value ~= 0 then
local modName = nil
if modHasPrefix[modBaseName] then
modName = (value < 0 and 'decreased' or 'increased') .. modBaseName
else
modName = modBaseName
end
modDiff[modName] = (modDiff[modName] or 0) + math.abs(value)
end
end
return modDiff
end
end