Module:Prayer
From Melvor Idle
Documentation for this module may be created at Module:Prayer/doc
local p = {}
local SkillData = mw.loadData('Module:Skills/data')
local Shared = require('Module:Shared')
local Icons = require('Module:Icons')
function p.getPrayerByID(id)
local result = Shared.clone(SkillData.Prayer[id + 1])
if result ~= nil and result.id == nil then result.id = id end
return result
end
function p.getPrayer(name)
local result = nil
for i, prayer in pairs(SkillData.Prayer) do
local prayName = prayer.name
if prayName == name then
result = Shared.clone(prayer)
result.id = i - 1
break
end
end
return result
end
function p.getPrayerCost(prayer)
local costLines = {}
if prayer.pointsPerPlayer > 0 then
local pluralString = prayer.pointsPerPlayer > 1 and 's' or ''
table.insert(costLines, prayer.pointsPerPlayer..' Prayer Point'..pluralString..' per player attack')
end
if prayer.pointsPerEnemy > 0 then
local pluralString = prayer.pointsPerEnemy > 1 and 's' or ''
table.insert(costLines, prayer.pointsPerEnemy..' Prayer Point'..pluralString..' per enemy attack')
end
if prayer.pointsPerRegen > 0 then
local pluralString = prayer.pointsPerRegen > 1 and 's' or ''
table.insert(costLines, prayer.pointsPerRegen..' Prayer Point'..pluralString..' when health regenerates')
end
return table.concat(costLines, '<br/>')
end
function p.formatEffectLine(var, val)
if var == 'prayerBonusDefence' then
return '+'..val..'% [[Combat#Melee Evasion Rating|Melee Evasion Rating]]'
elseif var == 'prayerBonusStrength' then
return '+'..val..'% [[Combat#Melee Max Hit|Melee Strength]]'
elseif var == 'prayerBonusAttack' then
return '+'..val..'% [[Combat#Melee Accuracy Rating|Melee Accuracy Rating]]'
elseif var == 'prayerBonusDefenceRanged' then
return '+'..val..'% [[Combat#Ranged Evasion Rating|Ranged Evasion Rating]]'
elseif var == 'prayerBonusAttackRanged' then
return '+'..val..'% [[Combat#Ranged Accuracy Rating|Ranged Accuracy Rating]]'
elseif var == 'prayerBonusStrengthRanged' then
return '+'..val..'% [[Combat#Ranged Max Hit|Ranged Strength]]'
elseif var == 'prayerBonusDefenceMagic' then
return '+'..val..'% [[Combat#Magic Evasion Rating|Ranged Evasion Rating]]'
elseif var == 'prayerBonusAttackMagic' then
return '+'..val..'% [[Combat#Magic Accuracy Rating|Magic Accuracy Rating]]'
elseif var == 'prayerBonusDamageMagic' then
return '+'..val..'% [[Combat#Magic Max Hit|Magic Damage]]'
elseif var == 'prayerBonusHitpoints' then
return val..'x Restore Rate for [[Hitpoints]]'
elseif var == 'prayerBonusProtectItem' then
return 'Prevents losing an item upon [[Death]]'
elseif var == 'prayerBonusProtectFromMelee' then
return '85% chance to dodge Melee attacks'
elseif var == 'prayerBonusProtectFromRanged' then
return '85% chance to dodge Ranged attacks'
elseif var == 'prayerBonusProtectFromMagic' then
return '85% chance to dodge Magic attacks'
elseif var == 'prayerBonusHitpointHeal' then
return 'Heal +'..val..'% HP when HP falls below 10%'
elseif var == 'prayerBonusDamageReduction' then
return '+'..val..'% [[Damage Reduction]]'
else
return '+'..val..' of unknown bonus '..var..'[[Category:Unknown Prayer Bonus]]'
end
end
function p._getPrayerEffect(prayer, asList)
if asList == nil then asList = false end
local chr = asList and '* ' or ''
local bonusLines = {}
for i, var in Shared.skpairs(prayer.vars) do
local val = prayer.values[i]
table.insert(bonusLines, chr..p.formatEffectLine(var, val))
end
if prayer.pointsPerPlayer > 0 then
local val = 0.2 * prayer.pointsPerPlayer
table.insert(bonusLines, chr.."+"..Shared.round(val, 2, 2).." Prayer XP per damage done")
end
return table.concat(bonusLines, '\r\n')
end
function p.getPrayerEffect(frame)
local prayerName = frame.args ~= nil and frame.args[1] or frame[1]
local asListTxt = frame.args ~= nil and frame.args[2] or frame[2]
local asList = asListTxt ~= nil and asListTxt ~= 'false' and asListTxt ~= 'no'
local prayer = p.getPrayer(prayerName)
if prayer == nil then
return "ERROR: Could not find a prayer named "..prayerName
end
return p._getPrayerEffect(prayer, asList)
end
function p._getPrayerStat(prayer, statName)
if statName == "prayerCost" then
return p.getPrayerCost(prayer)
elseif statName == "prayerEffect" then
return p._getPrayerEffect(prayer)
elseif statName == "prayerEffectList" then
return p.getPrayerEffect(prayer, true)
elseif statName == 'prayerLevel' then
return Icons._SkillReq('Prayer', prayer['prayerLevel'], true)
else
return prayer[statName]
end
end
function p.getPrayerStat(frame)
local prayerName = frame.args ~= nil and frame.args[1] or frame[1]
local statName = frame.args ~= nil and frame.args[2] or frame[2]
local prayer = p.getPrayer(prayerName)
if prayer == nil then
return "ERROR: Could not find a prayer named "..prayerName
end
return p._getPrayerStat(prayer, statName)
end
function p._getPrayerCategories(prayer)
return '[[Category:Prayers]]'
end
function p.getPrayerCategories(frame)
local prayerName = frame.args ~= nil and frame.args[1] or frame[1]
local prayer = p.getPrayer(prayerName)
if prayer == nil then
return "ERROR: Could not find a prayer named "..prayerName
end
return p._getPrayerCategories(prayer)
end
return p