17,105
edits
(getItemDataExport: Implement) |
(Update for v1.1) |
||
Line 6: | Line 6: | ||
local p = {} | local p = {} | ||
local | local GameData = require('Module:GameData') | ||
local Constants = require('Module:Constants') | local Constants = require('Module:Constants') | ||
Line 24: | Line 24: | ||
'Holiday Scarf', 'Gingerbread House', 'Gingerbread Man', 'Edible Candy Cane', | 'Holiday Scarf', 'Gingerbread House', 'Gingerbread Man', 'Edible Candy Cane', | ||
'Locked Chest', 'Locked Chest Key', 'Event Token (Holiday 2021)'} | 'Locked Chest', 'Locked Chest Key', 'Event Token (Holiday 2021)'} | ||
function p.getItemByID(ID) | function p.getItemByID(ID) | ||
return GameData.getEntityByID('items', ID) | |||
end | end | ||
function p.getItem(name) | function p.getItem(name) | ||
name = string.gsub(name, "%%27", "'") | name = string.gsub(name, "%%27", "'") | ||
name = string.gsub(name, "'", "'") | name = string.gsub(name, "'", "'") | ||
return GameData.getEntityByName('items', name) | |||
end | end | ||
function p.getItems(checkFunc) | function p.getItems(checkFunc) | ||
return GameData.getEntities('items', checkFunc) | |||
end | end | ||
Line 75: | Line 43: | ||
--Special Overrides: | --Special Overrides: | ||
-- Equipment stats first | -- Equipment stats first | ||
if item.equipmentStats ~= nil and item.equipmentStats[StatName] ~= nil then | |||
result = item.equipmentStats[StatName] | result = item.equipmentStats[StatName] | ||
elseif StatName == 'isTwoHanded' then | elseif StatName == 'isTwoHanded' then | ||
Line 83: | Line 51: | ||
result = false | result = false | ||
end | end | ||
elseif string.find(StatName, '^(.+)LevelRequired$') ~= nil and item.equipRequirements | elseif string.find(StatName, '^(.+)LevelRequired$') ~= nil and item.equipRequirements ~= nil then | ||
local skillName = Shared.titleCase(string.match(StatName, '^(.+)LevelRequired$')) | local skillName = Shared.titleCase(string.match(StatName, '^(.+)LevelRequired$')) | ||
if skillName ~= nil then | if skillName ~= nil then | ||
local skillID = Constants.getSkillID(skillName) | local skillID = Constants.getSkillID(skillName) | ||
if skillID ~= nil then | if skillID ~= nil then | ||
for i, requirement in ipairs(item.equipRequirements) do | |||
if requirement.type == "SkillLevel" and requirement.skillID == skillID then | |||
result = requirement.Level | |||
break | |||
end | |||
end | |||
end | end | ||
end | end | ||
Line 94: | Line 67: | ||
result = p._getWeaponAttackType(item) | result = p._getWeaponAttackType(item) | ||
elseif StatName == 'description' then | elseif StatName == 'description' then | ||
result = item. | result = item.customDescription | ||
if result == nil or result == '' then result = 'No Description' end | if result == nil or result == '' then result = 'No Description' end | ||
elseif StatName == 'completionReq' then | elseif StatName == 'completionReq' then | ||
Line 128: | Line 101: | ||
--Gets the value of a given modifier for a given item | --Gets the value of a given modifier for a given item | ||
--asString is false by default, when true it writes the full bonus text | --asString is false by default, when true it writes the full bonus text | ||
function p._getItemModifier(item, modifier, | function p._getItemModifier(item, modifier, skillID, asString) | ||
if asString == nil then asString = false end | if asString == nil then asString = false end | ||
if | if skillID == '' then | ||
skillID = nil | |||
elseif | elseif string.find(skillID, ':') == nil then | ||
-- Try to find a skill ID if it looks like a skill name has been passed | |||
skillID = Constants.getSkillID(skillID) | |||
end | end | ||
Line 141: | Line 115: | ||
if type(item.modifiers[modifier]) == 'table' then | if type(item.modifiers[modifier]) == 'table' then | ||
for i, subVal in Shared.skpairs(item.modifiers[modifier]) do | for i, subVal in Shared.skpairs(item.modifiers[modifier]) do | ||
if subVal[1] == | if subVal[1] == skillID then | ||
result = subVal[2] | result = subVal[2] | ||
break | break | ||
Line 152: | Line 126: | ||
if asString then | if asString then | ||
if | if skillID ~= nil then | ||
return Constants._getModifierText(modifier, { | return Constants._getModifierText(modifier, {skillID, result}) | ||
else | else | ||
return Constants._getModifierText(modifier, result) | return Constants._getModifierText(modifier, result) | ||
Line 163: | Line 137: | ||
function p.hasCombatStats(item) | function p.hasCombatStats(item) | ||
if item.equipmentStats ~= nil then | |||
-- Ensure at least one stat has a non-zero value | -- Ensure at least one stat has a non-zero value | ||
for statName, statVal in pairs(item.equipmentStats) do | for statName, statVal in pairs(item.equipmentStats) do | ||
if statVal ~= 0 then return true end | if statVal ~= 0 then | ||
return true | |||
end | |||
end | end | ||
end | end | ||
Line 174: | Line 150: | ||
function p._hasLevelRequirements(item) | function p._hasLevelRequirements(item) | ||
--Function true if an item has at least one level requirement to equip | --Function true if an item has at least one level requirement to equip | ||
if item.equipRequirements | if item.equipRequirements ~= nil then | ||
for idx, requirement in ipairs(item.equipRequirements) do | |||
if requirement.type == 'SkillLevel' and requirement.level > 1 then | |||
return true | |||
end | |||
end | |||
end | |||
return false | |||
end | end | ||
Line 204: | Line 178: | ||
function p._getWeaponAttackType(item) | function p._getWeaponAttackType(item) | ||
if (item.validSlots ~= nil and Shared.contains(item.validSlots, 'Weapon')) or | |||
(item.occupiesSlots ~= nil and Shared.contains(item.occupies, 'Weapon')) then | |||
if Shared.contains({'melee', 'ranged', 'magic'}, item.attackType) then | if Shared.contains({'melee', 'ranged', 'magic'}, item.attackType) then | ||
local iconType = item.attackType ~= 'melee' and 'skill' or nil | local iconType = item.attackType ~= 'melee' and 'skill' or nil | ||
Line 223: | Line 197: | ||
end | end | ||
-- TODO Move this function to an appropriate Skills module | |||
function p.getPotionTable(frame) | function p.getPotionTable(frame) | ||
local potionName = frame.args ~= nil and frame.args[1] or frame | local potionName = frame.args ~= nil and frame.args[1] or frame | ||
Line 237: | Line 212: | ||
for i, tier in ipairs(tiers) do | for i, tier in ipairs(tiers) do | ||
local tierName = potionName..' '..tier | local tierName = potionName..' '..tier | ||
local potion = p. | local potion = p.getItemByName(tierName) | ||
if potion ~= nil then | if potion ~= nil then | ||
table.insert(resultPart, '\r\n|-') | table.insert(resultPart, '\r\n|-') | ||
table.insert(resultPart, '\r\n|'..Icons.Icon({tierName, type='item', notext=true, size='60'})) | table.insert(resultPart, '\r\n|'..Icons.Icon({tierName, type='item', notext=true, size='60'})) | ||
table.insert(resultPart, '||'..Icons.Icon({tierName, tier, type='item', noicon=true})) | table.insert(resultPart, '||'..Icons.Icon({tierName, tier, type='item', noicon=true})) | ||
table.insert(resultPart, '||'..potion. | table.insert(resultPart, '||'..potion.charges..'||'..(potion.customDescription or '')) | ||
end | end | ||
end | end | ||
Line 251: | Line 226: | ||
function p._getOtherItemBoxText(item) | function p._getOtherItemBoxText(item) | ||
resultPart = {} | local resultPart = {} | ||
--For equipment, show the slot they go in | --For equipment, show the slot they go in | ||
if item.validSlots ~= nil then | if item.validSlots ~= nil then | ||
Line 282: | Line 257: | ||
end | end | ||
--For weapons with a special attack, show the details | --For weapons with a special attack, show the details | ||
if item. | if item.specialAttacks ~= nil and not Shared.tableIsEmpty(item.specialAttacks) then | ||
table.insert(resultPart, "\r\n|-\r\n|'''Special Attack:'''") | table.insert(resultPart, "\r\n|-\r\n|'''Special Attack:'''") | ||
for i, | for i, spAttID in ipairs(item.specialAttacks) do | ||
local spAtt = GameData.getEntityByID('attacks', spAttID) | |||
if spAtt ~= nil then | |||
table.insert(resultPart, '\r\n* ' .. spAtt.defaultChance .. '% chance for ' .. spAtt.name .. ':') | |||
table.insert(resultPart, '\r\n** ' .. spAtt.description) | |||
end | |||
end | end | ||
end | end | ||
--For potions, show the number of charges | --For potions, show the number of charges | ||
if item. | if item.charges ~= nil then | ||
table.insert(resultPart, "\r\n|-\r\n|'''Charges:''' "..item. | table.insert(resultPart, "\r\n|-\r\n|'''Charges:''' "..item.charges) | ||
end | end | ||
--For food, show how much it heals for | --For food, show how much it heals for | ||
Line 302: | Line 280: | ||
end | end | ||
--For items with modifiers, show what those are | --For items with modifiers, show what those are | ||
if item.modifiers ~= nil and Shared. | if item.modifiers ~= nil and not Shared.tableIsEmpty(item.modifiers) then | ||
table.insert(resultPart, "\r\n|-\r\n|'''Modifiers:'''\r\n"..Constants.getModifiersText(item.modifiers, true)) | table.insert(resultPart, "\r\n|-\r\n|'''Modifiers:'''\r\n"..Constants.getModifiersText(item.modifiers, true)) | ||
end | end | ||
Line 311: | Line 289: | ||
local itemName = frame.args ~= nil and frame.args[1] or frame | local itemName = frame.args ~= nil and frame.args[1] or frame | ||
local item = p.getItem(itemName) | local item = p.getItem(itemName) | ||
if item == nil then | if item == nil then | ||
return "ERROR: No item named "..itemName.." exists in the data module[[Category:Pages with script errors]]" | return "ERROR: No item named "..itemName.." exists in the data module[[Category:Pages with script errors]]" | ||
end | end | ||
return p._getOtherItemBoxText(item | return p._getOtherItemBoxText(item) | ||
end | end | ||
function p._getItemCategories(item) | function p._getItemCategories(item) | ||
local resultPart = {} | local resultPart = {} | ||
if item.category ~= nil then table.insert(resultPart, '[[Category:'..item.category..']]') end | local isEquipment = item.validSlots ~= nil or item.occupiesSlots ~= nil or item.equipmentStats ~= nil | ||
if item.type ~= nil then table.insert(resultPart, '[[Category:'..item.type..']]') end | if item.category ~= nil then | ||
if item.tier ~= nil then table.insert(resultPart, '[[Category:'..Shared.titleCase(item.tier)..' '..item.type..']]') end | table.insert(resultPart, '[[Category:'..item.category..']]') | ||
if item. | end | ||
if item.type ~= nil then | |||
table.insert(resultPart, '[[Category:'..item.type..']]') | |||
end | |||
if isEquipment and item.tier ~= nil then | |||
table.insert(resultPart, '[[Category:'..Shared.titleCase(item.tier)..' '..item.type..']]') | |||
end | |||
if item.specialAttacks ~= nil and not Shared.tableIsEmpty(item.specialAttacks) then | |||
table.insert(resultPart, '[[Category:Items With Special Attacks]]') | |||
end | |||
if item.validSlots ~= nil then | if item.validSlots ~= nil then | ||
local slotRemap = { | local slotRemap = { | ||
Line 369: | Line 352: | ||
end | end | ||
-- TODO May be better placed in Shop module | |||
function p.getSkillcapeTable(frame) | function p.getSkillcapeTable(frame) | ||
local skillName = frame.args ~= nil and frame.args[1] or frame | local skillName = frame.args ~= nil and frame.args[1] or frame | ||
Line 379: | Line 363: | ||
table.insert(resultPart, '!Skillcape!!Name!!Effect') | table.insert(resultPart, '!Skillcape!!Name!!Effect') | ||
table.insert(resultPart, '\r\n|-\r\n|'..Icons.Icon({cape.name, type='item', size='60', notext=true})) | table.insert(resultPart, '\r\n|-\r\n|'..Icons.Icon({cape.name, type='item', size='60', notext=true})) | ||
table.insert(resultPart, '||'..Icons.Icon({cape.name, type='item', noicon=true})..'||'..cape. | table.insert(resultPart, '||'..Icons.Icon({cape.name, type='item', noicon=true})..'||'..(cape.customDescription or '')) | ||
table.insert(resultPart, '\r\n|}') | table.insert(resultPart, '\r\n|}') | ||
return table.concat(resultPart) | return table.concat(resultPart) | ||
Line 388: | Line 372: | ||
local resultPart = {} | local resultPart = {} | ||
table.insert(resultPart, '{|') | table.insert(resultPart, '{|') | ||
for i, item in | for i, item in ipairs(GameData.rawData.items) do | ||
if i % 17 == 1 then | if i % 17 == 1 then | ||
table.insert(resultPart, '\r\n|-\r\n|') | table.insert(resultPart, '\r\n|-\r\n|') | ||
Line 550: | Line 534: | ||
:tag('th'):wikitext('GPValue'):done() | :tag('th'):wikitext('GPValue'):done() | ||
for i, item in ipairs( | for i, item in ipairs(GameData.rawData.items) do | ||
resultTable:tag('tr') | resultTable:tag('tr') | ||
:tag('td'):wikitext(item.id):done() | :tag('td'):wikitext(item.id):done() |