Module:Item stats

local p = {} local Cargo = mw.ext.cargo local Expr = mw.ext.ParserFunctions.expr local Calc = require("Module:Calculate")._main local data = mw.loadData('Module:Attribute bonuses/data')

local MIXED = "MIXED" local PERCENT = "PERCENT" local UNKNOWN = "UNKNOWN"

local property = { "bonus_strength", "bonus_agility", "bonus_intelligence", "bonus_damage", "bonus_health", "bonus_health_regeneration_flat", "bonus_armor", "bonus_attack_speed", "bonus_movement_speed_percent", "bonus_mana", "bonus_mana_regeneration_flat", "bonus_spell_damage", "title", }

function p.result( frame ) local page = frame:getParent.args[1] or mw.title.getCurrentTitle.text local Unique1 = frame:getParent.args["Unique1"]

local Contains = function(sz, character) return type(sz) == "string" and string.find(sz, character) and true end local ContainsSlash = function(sz) return Contains(sz, "/") end

local round = function(num, numDecimalPlaces) return math.floor(num * (10^(numDecimalPlaces or 0)) + 0.5) / (10^(numDecimalPlaces or 0)) end local round2 = function(num) return round(num, 2) end

local AttributeBonuses = function(param) return tostring(data[param]) end

local AttributeID = function(param) return frame:expandTemplate{ title = 'Attribute ID', args = { param } } end

local ItemData = Cargo.query( 'items', table.concat(property, ", "), { where='_pageName="' .. page .. '"', groupBy='_pageID' } )[1]

local _2number = function(something) if (ContainsSlash(something)) then return something else return tonumber(something) end end

-- define_values local strength = _2number(ItemData[property[1]]) or 0 local agility = _2number(ItemData[property[2]]) or 0 local intelligence = _2number(ItemData[property[3]]) or 0

if (not ContainsSlash(strength) and not ContainsSlash(agility) and not ContainsSlash(intelligence) and (strength + agility + intelligence == 0)) then return "" end

local attack_damage = {strength, agility, intelligence}

for i,v in ipairs(attack_damage) do   if (v == 0) then elseif (ContainsSlash(_2number(ItemData[property[4]]) or 0)) then if (ContainsSlash(v)) then attack_damage[i] = Calc({ "v1+v2", ["v1"] = v, ["v2"] = ItemData[property[4]] }) else attack_damage[i] = Calc({ tostring(v) .. "+v1", ["v1"] = ItemData[property[4]] }) end else if (ContainsSlash(v)) then attack_damage[i] = Calc({ "v1+" .. tostring(_2number(ItemData[property[4]]) or 0), ["v1"] = v }) else attack_damage[i] = v + (_2number(ItemData[property[4]]) or 0) end end end

-- Strength local health = 0 local health_for_strength = 0 if (ContainsSlash(_2number(ItemData[property[5]]) or 0)) then if (ContainsSlash(strength)) then health = Calc({ "v1+v2*" .. AttributeBonuses("bonus health"), ["v1"] = ItemData[property[5]], ["v2"] = strength }) health_for_strength = Calc({ "v1+" .. AttributeBonuses("primary attribute multiplier") .. "*v2*" .. AttributeBonuses("bonus health"), ["v1"] = ItemData[property[5]], ["v2"] = strength }) else health = Calc({ "v1+" .. tostring(strength) .. "*" .. AttributeBonuses("bonus health"), ["v1"] = ItemData[property[5]] }) health_for_strength = Calc({ "v1+" .. AttributeBonuses("primary attribute multiplier") .. "*" .. tostring(strength) .. "*" .. AttributeBonuses("bonus health"), ["v1"] = ItemData[property[5]] }) end else if (ContainsSlash(strength)) then health = Calc({ tostring(_2number(ItemData[property[5]]) or 0) .. "+v1*" .. AttributeBonuses("bonus health"), ["v1"] = strength }) health_for_strength = Calc({ tostring(_2number(ItemData[property[5]]) or 0) .. "+" .. AttributeBonuses("primary attribute multiplier") .. "*v1*" .. AttributeBonuses("bonus health"), ["v1"] = strength }) else health = (_2number(ItemData[property[5]]) or 0) + strength * (AttributeBonuses("bonus health") or 0) health_for_strength = (_2number(ItemData[property[5]]) or 0) + data["primary attribute multiplier"] * strength * (AttributeBonuses("bonus health") or 0) end end

local health_regeneration_flat = _2number(ItemData[property[6]]) or 0 local health_regeneration_amplification = 0 local health_regeneration_amplification_for_strength = 0 if (ContainsSlash(strength)) then health_regeneration_amplification = Calc({ "v1*" .. AttributeBonuses("bonus health regeneration percent") .. "*0.01", ["v1"] = strength }) health_regeneration_amplification_for_strength = Calc({ AttributeBonuses("primary attribute multiplier") .. "*v1*" .. AttributeBonuses("bonus health regeneration percent") .. "*0.01", ["v1"] = strength }) else health_regeneration_amplification = strength * (AttributeBonuses("bonus health regeneration percent") or 0) * 0.01 health_regeneration_amplification_for_strength = data["primary attribute multiplier"] * strength * (AttributeBonuses("bonus health regeneration percent") or 0) * 0.01 end local health_regeneration_flag = UNKNOWN local health_regeneration = 0 local health_regeneration_for_strength = 0

if (health_regeneration_flat ~= 0) then if (health_regeneration_amplification ~= 0) then health_regeneration_flag = MIXED health_regeneration = health_regeneration_flat; health_regeneration_for_strength = health_regeneration_flat; if (ContainsSlash(health_regeneration)) then if (ContainsSlash(health_regeneration_amplification)) then health_regeneration = Calc({ "v1*(1+v2)", ["v1"] = health_regeneration, ["v2"] = health_regeneration_amplification }) health_regeneration_for_strength = Calc({ "v1*(1+v2)", ["v1"] = health_regeneration_for_strength, ["v2"] = health_regeneration_amplification_for_strength }) else health_regeneration = Calc({ "v1*(1+" .. tostring(health_regeneration_amplification) ..")", ["v1"] = health_regeneration }) health_regeneration_for_strength = Calc({ "v1*(1+" .. tostring(health_regeneration_amplification_for_strength) ..")", ["v1"] = health_regeneration_for_strength }) end else if (ContainsSlash(health_regeneration_amplification)) then health_regeneration = Calc({ tostring(health_regeneration) .. "*(1+v1)", ["v1"] = health_regeneration_amplification }) health_regeneration_for_strength = Calc({ tostring(health_regeneration_for_strength) .. "*(1+v1)", ["v1"] = health_regeneration_amplification_for_strength }) else health_regeneration = health_regeneration * (1 + health_regeneration_amplification) health_regeneration_for_strength = health_regeneration_for_strength * (1 + health_regeneration_amplification_for_strength) end end end elseif (health_regeneration_amplification ~= 0) then health_regeneration_flag = PERCENT health_regeneration = health_regeneration_amplification health_regeneration_for_strength = health_regeneration_amplification_for_strength else health_regeneration_flag = UNKNOWN health_regeneration = 0 health_regeneration_for_strength = 0 end

local magic_resistance = 0 local magic_resistance_for_strength = 0 if (ContainsSlash(strength)) then magic_resistance = Calc({ "v1*" .. tostring(AttributeBonuses("bonus magic resistance")) .. "*0.01", ["v1"] = strength }) magic_resistance_for_strength = Calc({ AttributeBonuses("primary attribute multiplier") .. "*v1*" .. tostring(AttributeBonuses("bonus magic resistance")) .. "*0.01", ["v1"] = strength }) else magic_resistance = strength * (AttributeBonuses("bonus magic resistance") or 0) * 0.01 magic_resistance_for_strength = data["primary attribute multiplier"] * strength * (AttributeBonuses("bonus magic resistance") or 0) * 0.01 end

local attack_damage_for_strength = attack_damage[1]

-- Agility local armor = 0 local armor_for_agility = 0 if (ContainsSlash(_2number(ItemData[property[7]]) or 0)) then if (ContainsSlash(agility)) then armor = Calc({ "v1+v2*" .. AttributeBonuses("bonus armor"), ["v1"] = ItemData[property[7]], ["v2"] = agility }) armor_for_agility = Calc({ "v1+" .. AttributeBonuses("primary attribute multiplier") .. "*v2*" .. AttributeBonuses("bonus armor"), ["v1"] = ItemData[property[7]], ["v2"] = agility }) else armor = Calc({ "v1+" .. tostring(agility) .. "*" .. AttributeBonuses("bonus armor"), ["v1"] = ItemData[property[7]] }) armor_for_agility = Calc({ "v1+" .. AttributeBonuses("primary attribute multiplier") .. "*" .. tostring(agility) .. "*" .. AttributeBonuses("bonus armor"), ["v1"] = ItemData[property[7]] }) end else if (ContainsSlash(agility)) then armor = Calc({ tostring(_2number(ItemData[property[7]]) or 0) .. "+v1*" .. AttributeBonuses("bonus armor"), ["v1"] = agility }) armor_for_agility = Calc({ tostring(_2number(ItemData[property[7]]) or 0) .. "+" .. AttributeBonuses("primary attribute multiplier") .. "*v1*" .. AttributeBonuses("bonus armor"), ["v1"] = agility }) else armor = (_2number(ItemData[property[7]]) or 0) + agility * (AttributeBonuses("bonus armor") or 0) armor_for_agility = (_2number(ItemData[property[7]]) or 0) + data["primary attribute multiplier"] * agility * (AttributeBonuses("bonus armor") or 0) end end

local attack_speed = 0 local attack_speed_for_agility = 0 if (ContainsSlash(_2number(ItemData[property[8]]) or 0)) then if (ContainsSlash(agility)) then attack_speed = Calc({ "v1+v2*" .. AttributeBonuses("bonus attack speed"), ["v1"] = ItemData[property[8]], ["v2"] = agility }) attack_speed_for_agility = Calc({ "v1+" .. AttributeBonuses("primary attribute multiplier") .. "*v2*" .. AttributeBonuses("bonus attack speed"), ["v1"] = ItemData[property[8]], ["v2"] = agility }) else attack_speed = Calc({ "v1+" .. tostring(agility) .. "*" .. AttributeBonuses("bonus attack speed"), ["v1"] = ItemData[property[8]] }) attack_speed_for_agility = Calc({ "v1+" .. AttributeBonuses("primary attribute multiplier") .. "*" .. tostring(agility) .. "*" .. AttributeBonuses("bonus attack speed"), ["v1"] = ItemData[property[8]] }) end else if (ContainsSlash(agility)) then attack_speed = Calc({ tostring(_2number(ItemData[property[8]]) or 0) .. "+v1*" .. AttributeBonuses("bonus attack speed"), ["v1"] = agility }) attack_speed_for_agility = Calc({ tostring(_2number(ItemData[property[8]]) or 0) .. "+" .. AttributeBonuses("primary attribute multiplier") .. "*v1*" .. AttributeBonuses("bonus attack speed"), ["v1"] = agility }) else attack_speed = (_2number(ItemData[property[8]]) or 0) + agility * (AttributeBonuses("bonus attack speed") or 0) attack_speed_for_agility = (_2number(ItemData[property[8]]) or 0) + data["primary attribute multiplier"] * agility * (AttributeBonuses("bonus attack speed") or 0) end end

local movement_speed_percent = 0 local movement_speed_percent_for_agility = 0 if (ContainsSlash(_2number(ItemData[property[9]]) or 0)) then if (ContainsSlash(agility)) then movement_speed_percent = Calc({ "v1+v2*" .. AttributeBonuses("bonus movement speed"), ["v1"] = ItemData[property[9]], ["v2"] = agility }) movement_speed_percent_for_agility = Calc({ "v1+" .. AttributeBonuses("primary attribute multiplier") .. "*v2*" .. AttributeBonuses("bonus movement speed"), ["v1"] = ItemData[property[9]], ["v2"] = agility }) else movement_speed_percent = Calc({ "v1+" .. tostring(agility) .. "*" .. AttributeBonuses("bonus movement speed"), ["v1"] = ItemData[property[9]] }) movement_speed_percent_for_agility = Calc({ "v1+" .. AttributeBonuses("primary attribute multiplier") .. "*" .. tostring(agility) .. "*" .. AttributeBonuses("bonus movement speed"), ["v1"] = ItemData[property[9]] }) end else if (ContainsSlash(agility)) then movement_speed_percent = Calc({ tostring(_2number(ItemData[property[9]]) or 0) .. "+v1*" .. AttributeBonuses("bonus movement speed"), ["v1"] = agility }) movement_speed_percent_for_agility = Calc({ tostring(_2number(ItemData[property[9]]) or 0) .. "+" .. AttributeBonuses("primary attribute multiplier") .. "*v1*" .. AttributeBonuses("bonus movement speed"), ["v1"] = agility }) else movement_speed_percent = (_2number(ItemData[property[9]]) or 0) + agility * (AttributeBonuses("bonus movement speed") or 0) movement_speed_percent_for_agility = (_2number(ItemData[property[9]]) or 0) + data["primary attribute multiplier"] * agility * (AttributeBonuses("bonus movement speed") or 0) end end

local attack_damage_for_agility = attack_damage[2]

-- Intelligence local mana = 0 local mana_for_intelligence = 0 if (ContainsSlash(_2number(ItemData[property[10]]) or 0)) then if (ContainsSlash(intelligence)) then mana = Calc({ "v1+v2*" .. AttributeBonuses("bonus mana"), ["v1"] = ItemData[property[10]], ["v2"] = intelligence }) mana_for_intelligence = Calc({ "v1+" .. AttributeBonuses("primary attribute multiplier") .. "*v2*" .. AttributeBonuses("bonus mana"), ["v1"] = ItemData[property[10]], ["v2"] = intelligence }) else mana = Calc({ "v1+" .. tostring(intelligence) .. "*" .. AttributeBonuses("bonus mana"), ["v1"] = ItemData[property[10]] }) mana_for_intelligence = Calc({ "v1+" .. AttributeBonuses("primary attribute multiplier") .. "*" .. tostring(intelligence) .. "*" .. AttributeBonuses("bonus mana"), ["v1"] = ItemData[property[10]] }) end else if (ContainsSlash(intelligence)) then mana = Calc({ tostring(_2number(ItemData[property[10]]) or 0) .. "+v1*" .. AttributeBonuses("bonus mana"), ["v1"] = intelligence }) mana_for_intelligence = Calc({ tostring(_2number(ItemData[property[10]]) or 0) .. "+" .. AttributeBonuses("primary attribute multiplier") .. "*v1*" .. AttributeBonuses("bonus mana"), ["v1"] = intelligence }) else mana = (_2number(ItemData[property[10]]) or 0) + intelligence * (AttributeBonuses("bonus mana") or 0) mana_for_intelligence = (_2number(ItemData[property[10]]) or 0) + data["primary attribute multiplier"] * intelligence * (AttributeBonuses("bonus mana") or 0) end end

local mana_regeneration_flat = _2number(ItemData[property[11]]) or 0 local mana_regeneration_amplification = 0 local mana_regeneration_amplification_for_intelligence = 0 if (ContainsSlash(intelligence)) then mana_regeneration_amplification = Calc({ "v1*" .. AttributeBonuses("bonus mana regeneration percent") .. "*0.01", ["v1"] = intelligence }) mana_regeneration_amplification_for_intelligence = Calc({ AttributeBonuses("primary attribute multiplier") .. "*v1*" .. AttributeBonuses("bonus mana regeneration percent") .. "*0.01", ["v1"] = intelligence }) else mana_regeneration_amplification = intelligence * (AttributeBonuses("bonus mana regeneration percent") or 0) * 0.01 mana_regeneration_amplification_for_intelligence = data["primary attribute multiplier"] * intelligence * (AttributeBonuses("bonus mana regeneration percent") or 0) * 0.01 end local mana_regeneration_flag = UNKNOWN local mana_regeneration = 0 local mana_regeneration_for_intelligence = 0

if (mana_regeneration_flat ~= 0) then if (mana_regeneration_amplification ~= 0) then mana_regeneration_flag = MIXED mana_regeneration = mana_regeneration_flat; mana_regeneration_for_intelligence = mana_regeneration_flat; if (ContainsSlash(mana_regeneration)) then if (ContainsSlash(mana_regeneration_amplification)) then mana_regeneration = Calc({ "v1*(1+v2)", ["v1"] = mana_regeneration, ["v2"] = mana_regeneration_amplification }) mana_regeneration_for_intelligence = Calc({ "v1*(1+v2)", ["v1"] = mana_regeneration, ["v2"] = mana_regeneration_amplification_for_intelligence }) else mana_regeneration = Calc({ "v1*(1+" .. tostring(mana_regeneration_amplification) ..")", ["v1"] = mana_regeneration }) mana_regeneration_for_intelligence = Calc({ "v1*(1+" .. tostring(mana_regeneration_amplification_for_intelligence) ..")", ["v1"] = mana_regeneration }) end else if (ContainsSlash(mana_regeneration_amplification)) then mana_regeneration = Calc({ tostring(mana_regeneration) .. "*(1+v1)", ["v1"] = mana_regeneration_amplification }) mana_regeneration_for_intelligence = Calc({ tostring(mana_regeneration) .. "*(1+v1)", ["v1"] = mana_regeneration_amplification_for_intelligence }) else mana_regeneration = mana_regeneration * (1 + mana_regeneration_amplification) mana_regeneration_for_intelligence = mana_regeneration * (1 + mana_regeneration_amplification_for_intelligence) end end end elseif (mana_regeneration_amplification ~= 0) then mana_regeneration_flag = PERCENT mana_regeneration = mana_regeneration_amplification mana_regeneration_for_intelligence = mana_regeneration_amplification_for_intelligence else mana_regeneration_flag = UNKNOWN mana_regeneration = 0 mana_regeneration_for_intelligence = 0 end

local spell_damage = 0 local spell_damage_for_intelligence = 0 if (ContainsSlash(_2number(ItemData[property[12]]) or 0)) then if (ContainsSlash(intelligence)) then spell_damage = Calc({ "(v1+v2*" .. AttributeBonuses("bonus spell damage") .. ")*0.01", ["v1"] = ItemData[property[12]], ["v2"] = intelligence }) spell_damage_for_intelligence = Calc({ "(v1+" .. AttributeBonuses("primary attribute multiplier") .. "*v2*" .. AttributeBonuses("bonus spell damage") .. ")*0.01", ["v1"] = ItemData[property[12]], ["v2"] = intelligence }) else spell_damage = Calc({ "(v1+" .. tostring(intelligence) .. "*" .. AttributeBonuses("bonus spell damage") .. ")*0.01", ["v1"] = ItemData[property[12]] }) spell_damage_for_intelligence = Calc({ "(v1+" .. AttributeBonuses("primary attribute multiplier") .. "*" .. tostring(intelligence) .. "*" .. AttributeBonuses("bonus spell damage") .. ")*0.01", ["v1"] = ItemData[property[12]] }) end else if (ContainsSlash(intelligence)) then spell_damage = Calc({ "(" .. tostring(_2number(ItemData[property[12]]) or 0) .. "+v1*" .. AttributeBonuses("bonus spell damage") .. ")*0.01", ["v1"] = intelligence }) spell_damage_for_intelligence = Calc({ "(" .. tostring(_2number(ItemData[property[12]]) or 0) .. "+" .. AttributeBonuses("primary attribute multiplier") .. "*v1*" .. AttributeBonuses("bonus spell damage") .. ")*0.01", ["v1"] = intelligence }) else spell_damage = ((_2number(ItemData[property[12]]) or 0) + intelligence * (AttributeBonuses("bonus spell damage") or 0)) * 0.01 spell_damage_for_intelligence = ((_2number(ItemData[property[12]]) or 0) + data["primary attribute multiplier"] * intelligence * (AttributeBonuses("bonus spell damage") or 0)) * 0.01 end end

local attack_damage_for_intelligence = attack_damage[3] -- END define_values

-- showing_string -- General local szHealth = "" if (health ~= 0) then szHealth = tostring(health) .. " health" end

local szHealthRegeneration = "" if (health_regeneration_flag == MIXED) then if (ContainsSlash(health_regeneration)) then if (ContainsSlash(health_regeneration_amplification)) then szHealthRegeneration = Calc({ "v1 round4", ["v1"] = health_regeneration_amplification, "%" }) .. " health regen amplification (at least " .. Calc({ "v1 round2", ["v1"] = health_regeneration }) .. " health regen)" else szHealthRegeneration = tostring(round2(health_regeneration_amplification * 100)) .. "% health regen amplification (at least " .. Calc({ "v1 round2", ["v1"] = health_regeneration }) .. " health regen)" end else szHealthRegeneration = tostring(round2(health_regeneration_amplification * 100)) .. "% health regen amplification (at least " .. tostring(round2(health_regeneration)) .. " health regen)" end elseif (health_regeneration_flag == PERCENT) then if (ContainsSlash(health_regeneration_amplification)) then szHealthRegeneration = Calc({ "v1 round4", ["v1"] = health_regeneration_amplification, "%" }) .. " health regen amplification" else szHealthRegeneration = tostring(round2(health_regeneration_amplification * 100)) .. "% health regen amplification" end end

local szMagicResistance = "" if (magic_resistance ~= 0) then if (ContainsSlash(magic_resistance)) then szMagicResistance = Calc({ "v1 round4", ["v1"] = magic_resistance, "%" }) .. " magic resistance" else szMagicResistance = tostring(round2(magic_resistance * 100)) .. "% magic resistance" end end

local szArmor = "" if (armor ~= 0) then if (ContainsSlash(armor)) then szArmor = Calc({ "v1 round2", ["v1"] = armor }) .. " armor" else szArmor = tostring(round2(armor)) .. " armor" end end

local szAttackSpeed = "" if (attack_speed ~= 0) then szAttackSpeed = tostring(attack_speed) .. " attack speed" end

local szMovementSpeed = "" if (movement_speed_percent ~= 0) then if (ContainsSlash(movement_speed_percent)) then szMovementSpeed = Calc({ "v1 round4", ["v1"] = movement_speed_percent }) .. "% movement speed" else szMovementSpeed = tostring(round2(movement_speed_percent)) .. "% movement speed" end end

local szMana = "" if (mana ~= 0) then szMana = tostring(mana) .. " mana" end

local szManaRegeneration = "" if (mana_regeneration_flag == MIXED) then if (ContainsSlash(mana_regeneration)) then if (ContainsSlash(mana_regeneration_amplification)) then szManaRegeneration = Calc({ "v1 round4", ["v1"] = mana_regeneration_amplification, "%" }) .. " mana regen amplification (at least " .. Calc({ "v1 round2", ["v1"] = mana_regeneration }) .. " mana regen)" else szManaRegeneration = tostring(round2(mana_regeneration_amplification * 100)) .. "% mana regen amplification (at least " .. Calc({ "v1 round2", ["v1"] = mana_regeneration }) .. " mana regen)" end else szManaRegeneration = tostring(round2(mana_regeneration_amplification * 100)) .. "% mana regen amplification (at least " .. tostring(round2(mana_regeneration)) .. " mana regen)" end elseif (mana_regeneration_flag == PERCENT) then if (ContainsSlash(mana_regeneration_amplification)) then szManaRegeneration = Calc({ "v1 round4", ["v1"] = mana_regeneration_amplification, "%" }) .. " mana regen amplification" else szManaRegeneration = tostring(round2(mana_regeneration_amplification * 100)) .. "% mana regen amplification" end end

local szSpellDamage = "" if (spell_damage ~= 0) then if (ContainsSlash(spell_damage)) then szSpellDamage = Calc({ "v1 round4", ["v1"] = spell_damage, "%" }) .. " spell damage" else szSpellDamage = tostring(round2(spell_damage * 100)) .. "% spell damage" end end

-- Special -- Strength local szHealthForStrength = "" if (health_for_strength ~= 0) then szHealthForStrength = tostring(health_for_strength) .. " health" end

local szHealthRegenerationForStrength = "" if (health_regeneration_flag == MIXED) then if (ContainsSlash(health_regeneration_for_strength)) then if (ContainsSlash(health_regeneration_amplification_for_strength)) then szHealthRegenerationForStrength = Calc({ "v1 round4", ["v1"] = health_regeneration_amplification_for_strength, "%" }) .. " health regen amplification (at least " .. Calc({ "v1 round2", ["v1"] = health_regeneration_for_strength }) .. " health regen)" else szHealthRegenerationForStrength = tostring(round2(health_regeneration_amplification_for_strength * 100)) .. "% health regen amplification (at least " .. Calc({ "v1 round2", ["v1"] = health_regeneration_for_strength }) .. " health regen)" end else szHealthRegenerationForStrength = tostring(round2(health_regeneration_amplification_for_strength * 100)) .. "% health regen amplification (at least " .. tostring(round2(health_regeneration_for_strength)) .. " health regen)" end elseif (health_regeneration_flag == PERCENT) then if (ContainsSlash(health_regeneration_amplification_for_strength)) then szHealthRegenerationForStrength = Calc({ "v1 round4", ["v1"] = health_regeneration_amplification_for_strength, "%" }) .. " health regen amplification" else szHealthRegenerationForStrength = tostring(round2(health_regeneration_amplification_for_strength * 100)) .. "% health regen amplification" end end

local szMagicResistanceForStrength = "" if (magic_resistance_for_strength ~= 0) then if (ContainsSlash(magic_resistance_for_strength)) then szMagicResistanceForStrength = Calc({ "v1 round4", ["v1"] = magic_resistance_for_strength, "%" }) .. " magic resistance" else szMagicResistanceForStrength = tostring(round2(magic_resistance_for_strength * 100)) .. "% magic resistance" end end

local szStrengthTable = { szHealthForStrength, szHealthRegenerationForStrength, szMagicResistanceForStrength, szArmor, szAttackSpeed, szMovementSpeed, szMana, szManaRegeneration, szSpellDamage, }

-- Agility local szArmorForAgility = "" if (armor_for_agility ~= 0) then if (ContainsSlash(armor_for_agility)) then szArmorForAgility = Calc({ "v1 round2", ["v1"] = armor_for_agility }) .. " armor" else szArmorForAgility = tostring(round2(armor_for_agility)) .. " armor" end end

local szAttackSpeedForAgility = "" if (attack_speed_for_agility ~= 0) then szAttackSpeedForAgility = tostring(attack_speed_for_agility) .. " attack speed" end

local szMovementSpeedForAgility = "" if (movement_speed_percent_for_agility ~= 0) then if (ContainsSlash(movement_speed_percent_for_agility)) then szMovementSpeedForAgility = Calc({ "v1 round4", ["v1"] = movement_speed_percent_for_agility }) .. "% movement speed" else szMovementSpeedForAgility = tostring(round2(movement_speed_percent_for_agility)) .. "% movement speed" end end

local szAgilityTable = { szHealth, szHealthRegeneration, szMagicResistance, szArmorForAgility, szAttackSpeedForAgility, szMovementSpeedForAgility, szMana, szManaRegeneration, szSpellDamage, }

-- Intelligence local szManaForIntelligence = "" if (mana_for_intelligence ~= 0) then szManaForIntelligence = tostring(mana_for_intelligence) .. " mana" end

local szManaRegenerationForIntelligence = "" if (mana_regeneration_flag == MIXED) then if (ContainsSlash(mana_regeneration_for_intelligence)) then if (ContainsSlash(mana_regeneration_amplification_for_intelligence)) then szManaRegenerationForIntelligence = Calc({ "v1 round4", ["v1"] = mana_regeneration_amplification_for_intelligence, "%" }) .. " mana regen amplification (at least " .. Calc({ "v1 round2", ["v1"] = mana_regeneration_for_intelligence }) .. " mana regen)" else szManaRegenerationForIntelligence = tostring(round2(mana_regeneration_amplification_for_intelligence * 100)) .. "% mana regen amplification (at least " .. Calc({ "v1 round2", ["v1"] = mana_regeneration_for_intelligence }) .. " mana regen)" end else szManaRegenerationForIntelligence = tostring(round2(mana_regeneration_amplification_for_intelligence * 100)) .. "% mana regen amplification (at least " .. tostring(round2(mana_regeneration_for_intelligence)) .. " mana regen)" end elseif (mana_regeneration_flag == PERCENT) then if (ContainsSlash(mana_regeneration_amplification_for_intelligence)) then szManaRegenerationForIntelligence = Calc({ "v1 round4", ["v1"] = mana_regeneration_amplification_for_intelligence, "%" }) .. " mana regen amplification" else szManaRegenerationForIntelligence = tostring(round2(mana_regeneration_amplification_for_intelligence * 100)) .. "% mana regen amplification" end end

local szSpellDamageForIntelligence = "" if (spell_damage_for_intelligence ~= 0) then if (ContainsSlash(spell_damage_for_intelligence)) then szSpellDamageForIntelligence = Calc({ "v1 round4", ["v1"] = spell_damage_for_intelligence, "%" }) .. " spell damage" else szSpellDamageForIntelligence = tostring(round2(spell_damage_for_intelligence * 100)) .. "% spell damage" end end

local szIntelligenceTable = { szHealth, szHealthRegeneration, szMagicResistance, szArmor, szAttackSpeed, szMovementSpeed, szManaForIntelligence, szManaRegenerationForIntelligence, szSpellDamageForIntelligence, }

-- Damage local damage_flag = nil if (attack_damage_for_strength == 0) then szStrengthTable[10] = "" end if (attack_damage_for_strength ~= 0) then szStrengthTable[10] = tostring(attack_damage_for_strength) .. " "   if damage_flag ~= nil then szStrengthTable[10] = szStrengthTable[10] .. "attack damage" else szStrengthTable[10] = szStrengthTable[10] .. "attack damage" end damage_flag = not damage_flag end

if (attack_damage_for_agility == 0) then szAgilityTable[10] = "" end if (attack_damage_for_agility ~= 0) then szAgilityTable[10] = tostring(attack_damage_for_agility) .. " "   if damage_flag ~= nil then szAgilityTable[10] = szAgilityTable[10] .. "attack damage" else szAgilityTable[10] = szAgilityTable[10] .. "attack damage" end damage_flag = not damage_flag end

if (attack_damage_for_intelligence == 0) then szIntelligenceTable[10] = "" end if (attack_damage_for_intelligence ~= 0) then szIntelligenceTable[10] = tostring(attack_damage_for_intelligence) .. " "   if damage_flag ~= nil then szIntelligenceTable[10] = szIntelligenceTable[10] .. "attack damage" else szIntelligenceTable[10] = szIntelligenceTable[10] .. "attack damage" end damage_flag = not damage_flag end -- END showing_string

local iCount = 0 local iIndex = 0 -- counting for _,sz in ipairs(szStrengthTable) do   if sz ~= "" then iCount = iCount + 1 end end local szStrength = "* For " .. AttributeID("strength") .. " heroes, " .. (Unique1 or "it grants") .. " " for _,sz in ipairs(szStrengthTable) do    if (sz ~= "") then if (iIndex == 0) then szStrength = szStrength .. sz     elseif (iIndex == iCount - 1) then szStrength = szStrength .. " and " .. sz .. "."     else szStrength = szStrength .. ", " .. sz     end iIndex = iIndex + 1 end end if (iCount == 0) then szStrength = "" end iCount = 0 iIndex = 0

for _,sz in ipairs(szAgilityTable) do   if sz ~= "" then iCount = iCount + 1 end end local szAgility = "* For " .. AttributeID("agility") .. " heroes, " .. (Unique1 or "it grants") .. " " for _,sz in ipairs(szAgilityTable) do    if (sz ~= "") then if (iIndex == 0) then szAgility = szAgility .. sz     elseif (iIndex == iCount - 1) then szAgility = szAgility .. " and " .. sz .. "."     else szAgility = szAgility .. ", " .. sz     end iIndex = iIndex + 1 end end if (iCount == 0) then szAgility = "" end iCount = 0 iIndex = 0

for _,sz in ipairs(szIntelligenceTable) do   if sz ~= "" then iCount = iCount + 1 end end local szIntelligence = "* For " .. AttributeID("intelligence") .. " heroes, " .. (Unique1 or "it grants") .. " " for _,sz in ipairs(szIntelligenceTable) do    if (sz ~= "") then if (iIndex == 0) then szIntelligence = szIntelligence .. sz     elseif (iIndex == iCount - 1) then szIntelligence = szIntelligence .. " and " .. sz .. "."     else szIntelligence = szIntelligence .. ", " .. sz     end iIndex = iIndex + 1 end end if (iCount == 0) then szIntelligence = "" end -- END counting

-- combine local strings = {szStrength, szAgility, szIntelligence}

local szResult = "" for _,sz in ipairs(strings) do   if (sz ~= "") then if (szResult ~= "") then szResult = szResult .. "\n" .. sz     else szResult = szResult .. sz     end end end -- END combine return szResult end

return p