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') local Constants = require('Module:Constants') local Items = require('Module:Items') local ItemSources = require('Module:Items/SourceTables') 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.getPrayers(checkFunc) local result = {} for i, prayer in ipairs(SkillData.Prayer) do if checkFunc(prayer) then table.insert(result, prayer) 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._getPrayerEffect(prayer, asList) if asList == nil then asList = false end local chr = asList and '* ' or '' local bonusLines = {} if type(prayer.modifiers) == 'table' then for bonusKey, bonusVal in Shared.skpairs(prayer.modifiers) do table.insert(bonusLines, chr .. Constants._getModifierText(bonusKey, bonusVal, false)) end end if type(prayer.enemyModifiers) == 'table' then for bonusKey, bonusVal in Shared.skpairs(prayer.enemyModifiers) do table.insert(bonusLines, chr .. 'Gives the enemy: ' .. Constants._getModifierText(bonusKey, bonusVal, false)) end end --If there are no actual effects, just use the prayer's description if Shared.tableCount(prayer.modifiers) == 0 then table.insert(bonusLines, chr..prayer.description) end if prayer.pointsPerPlayer > 0 then -- Prayer XP ratio is 1/3 in game but is divided by 10 here as HP/damage values -- displayed to the player are multiplied by 10 in the standard game mode local xpRatio = 1 / 30 local val = xpRatio * prayer.pointsPerPlayer table.insert(bonusLines, chr.."+"..Shared.round(val, 3, 3).." Prayer XP per damage done") end if asList then return table.concat(bonusLines, '\r\n') else return table.concat(bonusLines, '<br/>') end 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']) 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 function p.getPrayerTable(frame) local result = '{| class="wikitable sortable stickyHeader"' result = result..'\r\n|-class=headerRow-0' result = result..'\r\n!colspan="2"|Prayer!!'..Icons.Icon({"Prayer", type="skill", notext=true})..' Lvl' result = result..'!!Effects!!Point Cost' local prayerList = Shared.clone(SkillData.Prayer) table.sort(prayerList, function(a, b) if a.prayerLevel == b.prayerLevel then return a.name < b.name else return a.prayerLevel < b.prayerLevel end end) for i, prayer in ipairs(prayerList) do result = result..'\r\n|-' result = result..'\r\n|'..Icons.Icon({prayer.name, type='prayer', notext=true, size='50'}) result = result..'||'..Icons.Icon({prayer.name, type='prayer', noicon=true})..'||'..prayer.prayerLevel result = result..'||'..p._getPrayerEffect(prayer) result = result..'||'..p.getPrayerCost(prayer) end result = result..'\r\n|}' return result end function p.getBonesTable(frame) local result = '{| class="wikitable sortable stickyHeader"' result = result..'\r\n|- class="headerRow-0"' result = result..'\r\n!colspan="2"|Bone!!Prayer Points!!Sources' local itemArray = Items.getItems(function(item) return item.prayerPoints ~= nil and item.prayerPoints > 0 end) table.sort(itemArray, function(a, b) return a.prayerPoints < b.prayerPoints end) for i, item in ipairs(itemArray) do result = result..'\r\n|-' result = result..'\r\n|'..Icons.Icon({item.name, type='item', notext=true, size='50'}) result = result..'||'..Icons.Icon({item.name, type='item', noicon=true}) result = result..'||style="text-align:right;"|'..item.prayerPoints result = result..'||'..ItemSources._getItemSources(item, false, false) end result = result..'\r\n|}' return result end return p