48
edits
Falterfire (talk | contribs) (Tweaked getPrayerEffect to ensure it properly forms lists) |
(Add "For Each Unholy Mark stack on the enemy:" to unholy prayers) |
||
(20 intermediate revisions by 3 users not shown) | |||
Line 1: | Line 1: | ||
local p = {} | local p = {} | ||
local Shared = require('Module:Shared') | local Shared = require('Module:Shared') | ||
local Constants = require('Module:Constants') | |||
local GameData = require('Module:GameData') | |||
local Icons = require('Module:Icons') | local Icons = require('Module:Icons') | ||
local | local Items = require('Module:Items') | ||
local ItemSources = require('Module:Items/SourceTables') | |||
function p.getPrayerByID(id) | function p.getPrayerByID(id) | ||
return GameData.getEntityByID('prayers', id) | |||
end | end | ||
function p.getPrayer(name) | function p.getPrayer(name) | ||
return GameData.getEntityByName('prayers', name) | |||
end | end | ||
function p. | function p.getPrayers(checkFunc) | ||
return GameData.getEntities('prayers', checkFunc) | |||
end | |||
--Returns the expansion icon for the prayer if it has one | |||
function p.getExpansionIcon(frame) | |||
local prayerName = frame.args ~= nil and frame.args[1] or frame | |||
local prayer = p.getPrayer(prayerName) | |||
if prayer == nil then | |||
return Shared.printError('No prayer named "' .. prayerName .. '" exists in the data module') | |||
end | |||
return Icons.getExpansionIcon(prayer.id) | |||
end | end | ||
function p. | 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 | end | ||
function p._getPrayerEffect(prayer, asList) | function p._getPrayerEffect(prayer, asList) | ||
if asList == nil then asList = false end | |||
local chr = asList and '* ' or '' | |||
local bonusLines = {} | |||
if prayer.isUnholy then | |||
table.insert(bonusLines, "For each Unholy Mark stack on the enemy:") | |||
end | |||
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 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 | end | ||
function p.getPrayerEffect(frame) | 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 Shared.printError('No prayer named "' .. prayerName .. '" exists in the data module') | |||
end | |||
return p._getPrayerEffect(prayer, asList) | |||
end | end | ||
function p._getPrayerStat(prayer, statName) | 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) | |||
elseif statName == 'prayerLevel' then | |||
return Icons._SkillReq('Prayer', prayer.level) | |||
else | |||
return prayer[statName] | |||
end | |||
end | end | ||
function p.getPrayerStat(frame) | 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 Shared.printError('No prayer named "' .. prayerName .. '" exists in the data module') | |||
end | |||
return p._getPrayerStat(prayer, statName) | |||
end | end | ||
function p._getPrayerCategories(prayer) | function p._getPrayerCategories(prayer) | ||
return '[[Category:Prayers]]' | |||
end | end | ||
function p.getPrayerCategories(frame) | 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 Shared.printError('No prayer named "' .. prayerName .. '" exists in the data module') | |||
end | |||
return p._getPrayerCategories(prayer) | |||
end | end | ||
function p.getPrayerTable(frame) | function p.getPrayerTable(frame) | ||
return p.getPrayerTableFiltered(frame, function(prayer) return true end) | |||
end | |||
function p.getUnholyPrayerTable(frame) | |||
return p.getPrayerTableFiltered(frame, function(prayer) return prayer.isUnholy end) | |||
end | |||
function p.getPrayerTableFiltered(frame, prayerPredicate) | |||
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})..' Level' | |||
result = result..'!!Effects!!Point Cost' | |||
local prayerList = p.getPrayers(prayerPredicate) | |||
table.sort(prayerList, function(a, b) | |||
if a.level == b.level then | |||
return a.name < b.name | |||
else | |||
return a.level < b.level | |||
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.getExpansionIcon(prayer.id) .. Icons.Icon({prayer.name, type='prayer', noicon=true}) | |||
result = result..'||style="text-align:right;"| '..prayer.level | |||
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.getExpansionIcon(item.id) .. Icons.Icon({item.name, type='item', noicon=true}) | |||
result = result..'||style="text-align:right;"|'..Shared.formatnum(item.prayerPoints) | |||
result = result..'||'..ItemSources._getItemSources(item, false, false) | |||
end | |||
result = result..'\r\n|}' | |||
return result | |||
end | end | ||
return p | return p |
edits