4,951
edits
m (_getPetEffect(): Fix new lines) |
Falterfire (talk | contribs) (Added new getPets function for use in the new ModifierTables module that's in progress) |
||
(8 intermediate revisions by 2 users not shown) | |||
Line 9: | Line 9: | ||
local Icons = require('Module:Icons') | local Icons = require('Module:Icons') | ||
local Skills = require('Module:Skills') | local Skills = require('Module:Skills') | ||
local | local CombatAreas = require('Module:CombatAreas') | ||
Line 41: | Line 41: | ||
local skillID = Skills.getSkillID(skillName) | local skillID = Skills.getSkillID(skillName) | ||
for i, pet in pairs(PetData.Pets) do | for i, pet in pairs(PetData.Pets) do | ||
if(skillID == pet.skill) then | --Deliberately excluding Ty. He knows what he did. | ||
if(skillID == pet.skill and pet.name ~= 'Ty') then | |||
result = Shared.clone(pet) | result = Shared.clone(pet) | ||
--Make sure every pet has an id, and account for Lua being 1-index | --Make sure every pet has an id, and account for Lua being 1-index | ||
Line 49: | Line 50: | ||
end | end | ||
return result | return result | ||
end | |||
function p.getPets(checkFunc) | |||
local result = {} | |||
for i, pet in Shared.skpairs(PetData.Pets) do | |||
if checkFunc(pet) then | |||
local newPet = Shared.clone(pet) | |||
newPet.id = i - 1 | |||
table.insert(result, newPet) | |||
end | |||
end | |||
return result | |||
end | |||
function p._getPetSource(pet) | |||
local sourceOverrides = { | |||
-- Format: ['PetName'] = {'Source', UseIcon} | |||
-- UseIcon = true if Source has an associated icon, false otherwise | |||
['Asura'] = {'Slayer', true}, | |||
['Ripper the Reindeer'] = {'[[Events#Christmas_Event_2020|Christmas Event 2020]]', false}, | |||
['Jerry the Giraffe'] = {'[[Golbin Raid|Golbin Raid Shop]]', false}, | |||
['Preston the Platypus'] = {'[[Golbin Raid|Golbin Raid Shop]]', false} | |||
} | |||
local petSource = '' | |||
local useIcon = true | |||
local override = sourceOverrides[pet.name] | |||
if override ~= nil then | |||
petSource = override[1] ~= nil and override[1] or pet.acquiredBy | |||
useIcon = override[2] | |||
elseif pet.acquiredBy ~= nil then | |||
petSource = pet.acquiredBy | |||
end | |||
-- Determine icon type (if any) | |||
local iconType = nil | |||
if Skills.getSkillID(petSource) ~= nil then | |||
iconType = 'skill' | |||
else | |||
local combatArea = CombatAreas.getArea(petSource) | |||
if combatArea ~= nil then | |||
iconType = combatArea.type | |||
end | |||
end | |||
if useIcon then | |||
petSource = Icons.Icon({petSource, type=iconType}) | |||
end | |||
return petSource | |||
end | end | ||
function p._getPetEffect(pet) | function p._getPetEffect(pet) | ||
if pet.modifiers ~= nil then | local effectOverrides = { | ||
['Ripper the Reindeer'] = 'None', | |||
} | |||
if effectOverrides[pet.name] ~= nil then | |||
return effectOverrides[pet.name] | |||
elseif pet.modifiers ~= nil then | |||
local effects = {} | local effects = {} | ||
for effectName, effectValue in pairs(pet.modifiers) do | for effectName, effectValue in pairs(pet.modifiers) do | ||
table.insert(effects, Constants. | table.insert(effects, Constants._getModifierText(effectName, effectValue, false)) | ||
end | end | ||
return table.concat(effects, '<br/>') | return table.concat(effects, '<br/>') | ||
Line 69: | Line 123: | ||
result = result..'!Pet!!Name!!Effect' | result = result..'!Pet!!Name!!Effect' | ||
result = result..'\r\n|-\r\n|'..Icons.Icon({pet.name, type='pet', size='60', notext=true}) | result = result..'\r\n|-\r\n|'..Icons.Icon({pet.name, type='pet', size='60', notext=true}) | ||
result = result..'||[['..pet.name..']]||'..pet | result = result..'||[['..pet.name..']]||'..p._getPetEffect(pet) | ||
result = result..'\r\n|}' | result = result..'\r\n|}' | ||
return result | return result | ||
Line 87: | Line 141: | ||
local pet = p.getPet(name) | local pet = p.getPet(name) | ||
local effect = (args.effect ~= nil and args.effect ~= '') and args.effect or p._getPetEffect(pet) | local effect = (args.effect ~= nil and args.effect ~= '') and args.effect or p._getPetEffect(pet) | ||
local completionReq = (pet.ignoreCompletion ~= nil and pet.ignoreCompletion) and 'No' or 'Yes' | |||
local | |||
local dropChance = nil | local dropChance = nil | ||
Line 105: | Line 148: | ||
dropChance = '1 in '..odds..' ('..Shared.round(100 / odds, 2, 2)..'%)' | dropChance = '1 in '..odds..' ('..Shared.round(100 / odds, 2, 2)..'%)' | ||
end | end | ||
result = '{| class="wikitable" style="float:right; clear:right;"\r\n|-\r\n' | result = '{| class="wikitable" style="float:right; clear:right;"\r\n|-\r\n' | ||
result = result..'! '..name..'\r\n|-\r\n| ' | result = result..'! '..name..'\r\n|-\r\n| ' | ||
result = result..Icons.Icon({name, type='pet', size='250', notext=true}) | result = result..Icons.Icon({name, type='pet', size='250', notext=true}) | ||
result = result.. | result = result.."\r\n|-\r\n|'''Pet ID:''' "..pet.id | ||
result = result.."\r\n|-\r\n|'''Source:''' "..p._getPetSource(pet) | |||
result = result.. | |||
if dropChance ~= nil then | if dropChance ~= nil then | ||
result = result.. | result = result.."\r\n|-\r\n|'''Drop Chance:''' "..dropChance | ||
end | end | ||
result = result.."\r\n|-\r\n| style =\"width: 250px;\"|'''Effect:''' "..effect | |||
result = result.. | result = result .. "\r\n|-\r\n|'''Part of 100% Completion:''' " .. completionReq .. "\r\n|}" | ||
return result | return result | ||
Line 124: | Line 165: | ||
function p.getPetPageTable() | function p.getPetPageTable() | ||
local result = '' | local result = '' | ||
local petList = Shared.clone(PetData.Pets) | |||
result = '{|class="wikitable lighttable"' | |||
result = | |||
result = result..'\r\n|-\r\n! Name !! Image !! Acquired From !! Effect' | result = result..'\r\n|-\r\n! Name !! Image !! Acquired From !! Effect' | ||
Line 167: | Line 177: | ||
result = result..'\r\n|-\r\n|[['..thisPet.name..']]' | result = result..'\r\n|-\r\n|[['..thisPet.name..']]' | ||
result = result..'||'..Icons.Icon({thisPet.name, size='60', type='pet', notext=true}) | result = result..'||'..Icons.Icon({thisPet.name, size='60', type='pet', notext=true}) | ||
result = result..'||'..p._getPetSource(thisPet) | |||
result = result..'||'..p._getPetEffect(thisPet) | |||
end | |||
result = result..'\r\n|}' | |||
return result | |||
end | |||
function p.getDungeonBoxPetText(frame) | |||
local dungeonName = frame.args ~= nil and frame.args[1] or frame | |||
local dung = CombatAreas.getArea(dungeonName) | |||
if dung == nil then | |||
return 'ERROR: Invalid dungeon name '..dungeonName..'[[Category:Pages with script errors]]' | |||
end | |||
local result = '' | |||
local pet = p.getPetByID(dung.petID) | |||
if pet ~= nil then | |||
result = "\r\n|-\r\n|'''[[Pets#Boss Pets|Pet]]:'''<br/>" | |||
result = result..Icons.Icon({pet.name, type='pet'}) | |||
if | local dropChance = '' | ||
if dung.name == 'Into the Mist' then | |||
dropChance = 'Guaranteed after 5 clears' | |||
else | else | ||
local odds = pet.obtained.dungeonCompletion[1][2] | |||
dropChance = '1 in '..odds..' ('..Shared.round(100 / odds, 2, 2)..'%)' | |||
end | end | ||
result = result.. | result = result.."\r\n|-\r\n|'''Pet Drop Chance:'''<br/>"..dropChance | ||
end | end | ||
return result | return result |