Template:FollowerList: Difference between revisions

From UO Outlands Wiki
Jump to navigation Jump to search
No edit summary
mNo edit summary
 
(2 intermediate revisions by the same user not shown)
Line 1: Line 1:
local p = {}
<noinclude><big>''Editing this template will '''not''' change what the template displays, see [[Template:{{PAGENAME}}#Editing|#Editing]] for more information</big>''


function p.singleCreature(frame)
  local creatureName = frame.args[1]
  local creatureType = frame.args[2]
  local imageOverride = frame.args[3]
  local namespace = frame.args[4]
  local iconImage = ""


  local wikiTable = ""
{{PAGENAME}} generates a list of a group of followers, i.e. summons or tameables.
  local array
  -- Change the array being pulled from if a valid creatureType is provided, also formats the creatureType to be used in Err messages and sets an iconImage
  if string.find(string.lower(creatureType),"strangeland") then
    array = mw.loadData("Module:StrangelandsCreatureData")
    creatureType = " " .. creatureType .. ""
    iconImage = "[[File:icon-strangelands.png|right|50px|link=Strangelands#Strangelands_Creatures|Strangeland Creature]]"
  elseif string.find(string.lower(creatureType),"ship") then
    array = mw.loadData("Module:ShipCreatureData")
    creatureType = " " .. creatureType .. ""
    iconImage = "[[File:shipdeed.png|right|30px|link=Ships|Ship Creature]]"
  else
    array = mw.loadData("Module:WildCreatureData") -- Array containing wild creature data from another module
    creatureType = " wild "
  end


  local creature = array[creatureName]
== Template ==
The tables are sortable, the sorting arrows are just black... (Click the links on the right to show the tables)
<div class="mw-collapsible mw-collapsed" data-expandtext="Show Tameable List">
{{FollowerList|tameable}}
</div><br>
<div class="mw-collapsible mw-collapsed" data-expandtext="Show Summons List">
{{FollowerList|summon}}
</div>
</noinclude><onlyinclude>{{#invoke:Creatures|listFollowerGroup|group={{{group|{{{1|}}}}}}}}</onlyinclude>


  if creature then
== Parameters ==
    local formmatedName = string.gsub(string.lower(creatureName), "%s+", "")
{| class="wikitable" style="text-align:center"
    local imageName = string.gsub(formmatedName, "%p+", "") .. ".jpg"
! Name
! Alias
! Default Value
! Function
! Example
|-
| group
| 1
| all
| style="text-align:left"| The type of follower to list, won't list anything if left blank. Not case-sensitive.
| tame/summon
|}


    if imageOverride and imageOverride ~= "" then
== Editing ==
      imageName = imageOverride
This template is generated by [[Module:Creatures]], which formats the creature data into this table, this cannot be edited without a basic understanding of Lua, or at least general programming. However the creature data is either pulled from [[Module:SummonableCreatureData]] alone or [[Module:TameableCreatureData]] and a [[Module:WildCreatureData]] based on the group specified. These module's documentation (linked at the top of its pages) give details on how to structure data in the Lua table, after editing it is recommended that editors make sure the template still functions properly.
    end


    -- Automaticly add categories
These modules were created by [[User:TheGmaster]], feel free to dm any questions/concerns/requests directly via Discord @thegmaster1.
    if namespace == "" or namespace == nil then
      wikiTable = wikiTable .. "[[Category:" .. creature.location .. "]]"
      wikiTable = wikiTable .. "[[Category:" .. creature.slayer .. " Creatures]]"
 
      if creature.bosstype ~= "" then
        wikiTable = wikiTable .. "[[Category:" .. creature.bosstype .. "es]] [[Category:Bosses]]"
      end
    end
 
    wikiTable = [=[__NOTOC__
        <table class="wikitable" style="text-align:center">
        <th style="border-right:none; border-bottom:none; width:110px">
        <th colspan="7" style="border-width: 1px 0px 0px; height:100px; vertical-align:bottom;"> [[File:]=] ..
        imageName .. [=[|link=]]
        <th style="vertical-align:top; border-left:none; border-bottom:none; margin-left: 15px; width:110px>]=] ..
        iconImage .. [=[
        <tr>
        <th style="border-top:none" colspan="9">[[]=] .. creatureName .. [=[]]
        <tr>
        <th>Slayer
        <th>Difficulty
        <th>Gold Value
        <th>Hits
        <th colspan="2">Melee Damage
        <th>Wrestling
        <th>Armor
        <th>Magic Resist
        <tr>
        <td>]=] .. creature.slayer .. [=[
        <td>]=] .. creature.difficulty .. [=[
        <td>]=] .. creature.goldvalue .. [=[
        <td>]=] .. creature.hits .. [=[
        <td colspan="2">]=] .. creature.minmeleedmg .. creature.maxmeleedmg .. [=[
        <td>]=] .. creature.wrestling .. [=[
        <td>]=] .. creature.armor .. creature.armormin .. [=[
        <td>]=] .. creature.magicresist .. creature.magicresistmin .. [=[
        <tr>
        <th>Parry
        <th>Attack Speed
        <th>Magery
        <th colspan="2">Spell Damage
        <th>Poison
        <th>Poison Resist
        <th>Stealth
        <th>AI
        <tr>
        <td>]=] .. creature.parry .. [=[
        <td>]=] .. creature.atkspd .. [=[
        <td>]=] .. creature.magery .. [=[
        <td colspan="2">]=] .. creature.minspelldmg .. creature.maxspelldmg .. [=[
        <td>]=] .. creature.poisontype .. [=[
        <td>]=] .. creature.poisonresist .. creature.poisonresistmin .. [=[
        <td>]=] .. creature.stealth .. [=[
        <td>]=] .. creature.ai .. "</table>"
 
    return wikiTable
  else
    return '<h1 style="color:FireBrick;"><big>Creature Table Template Error: No' ..
        creatureType .. 'creature by the name "' .. creatureName .. '" was found (Case-sensitive)</big></h1>'
  end
end
 
function p.singleFollower(frame)
  local creatureArray = mw.loadData("Module:WildCreatureData")
  local tameableArray = mw.loadData("Module:TameableCreatureData")
  local summonArray = mw.loadData("Module:SummonableCreatureData")
 
  -- Parameters passed when the function is invoked
  local followerName = frame.args[1]  -- Sun Wyrm
  local followerType = frame.args[2]  -- tame/summon
  local imageOverride = frame.args[3] -- sunwyrm.png
  local namespace = frame.args[4]    -- {{NAMESPACE}}
 
  local wikiTable = ""
 
  local creature = creatureArray[followerName]
  local tameable = tameableArray[followerName]
  local summon = summonArray[followerName]
 
  if not string.find(string.lower(followerType),"summon") and tameable then
    local formmatedName = string.gsub(string.lower(followerName), "%s+", "")
    local imageName = string.gsub(formmatedName, "%p+", "") .. ".jpg"
 
    if imageOverride and imageOverride ~= "" then
      imageName = imageOverride
    end
 
    -- Automaticlly add categories
    if namespace == "" or namespace == nil then
      if creature then
        wikiTable = wikiTable .. "[[Category:" .. creature.location .. "]]"
        wikiTable = wikiTable .. "[[Category:" .. creature.slayer .. " Creatures]]"
      end
      wikiTable = wikiTable .. "[[Category:Tameable Creatures]]"
      wikiTable = wikiTable .. "[[Category:" .. tameable.class .. " Class Tameable]]"
      wikiTable = wikiTable .. "[[Category:" .. tameable.combat .. " Tameable]]"
    end
 
    wikiTable = [=[__NOTOC__
      <table class="wikitable" style="text-align:center">
      <th style="border-right:none; border-bottom:none; width:110px">
      <th colspan="6" style="border-width: 1px 0px 0px; height:100px; vertical-align:bottom;"> [[File:]=] ..
        imageName .. [=[|link=]]
      <th style="vertical-align:top; border-left:none; border-bottom:none; margin-left: 15px; width:110px>[[File:icon-]=] ..
        string.lower(tameable.class) .. [=[class.png|link=Animal_Taming#Tamed_Classes|]=] ..
        tameable.class .. [=[ Class|right]]
      <tr>
      <th style="border-top:none" colspan="8">[[]=] .. followerName .. [=[]]
      <tr>
      <th>Min Taming
      <th>Control Slots
      <th>Hits
      <th>Class
      <th colspan="2">]=] .. tameable.combat .. [=[ Damage
      <th>Armor
      <th>Wrestling
      <tr>
      <td>]=] .. tameable.taming .. [=[
      <td>]=] .. tameable.slots .. [=[
      <td>]=] .. tameable.hits .. [=[
      <td>]=] .. tameable.class .. [=[
      <td colspan="2>]=] .. tameable.mindmg .. " - " .. tameable.maxdmg .. [=[
      <td>]=] .. tameable.armor .. tameable.armormin .. [=[
      <td>]=] .. tameable.wrestling .. [=[
      <tr>
      <th>Attack Speed
      <th>Magic Resist
      <th>Poison Resist
      <th>Special Resist
      <th>Poison
      <th>Poisoning
      <th>Stealth
      <th>Underdog Scalar
      <tr>
      <td>]=] .. tameable.atkspd .. [=[
      <td>]=] .. tameable.magicresist .. tameable.magicresistmin .. [=[
      <td>]=] .. tameable.poisonresist .. tameable.poisonresistmin .. [=[
      <td>]=] .. tameable.specialresist .. [=[
      <td>]=] .. tameable.poisontype .. [=[
      <td>]=] .. tameable.poisoning .. [=[
      <td>]=] .. tameable.stealth .. [=[
      <td>]=] .. tameable.underdogscalar .. "</table>"
 
    return wikiTable
  elseif not string.find(string.lower(followerType),"tame") and summon then
    local formmatedName = string.gsub(string.lower(followerName), "%s+", "")
    local imageName = string.gsub(formmatedName, "%p+", "") .. ".jpg"
    local spelliconImage = "[[File:" ..
    summon.spellicon ..
    ".png|44px|link=Spirit Speak#" .. summon.spellname .. "|" .. summon.spellname .. summon.tometier .. "|right]]"
 
    if summon.necro == true then
      spelliconImage = spelliconImage ..
          "[[File:SpellPlus.png|right]]<br><br>[[File:iconvengefulspirit.png|link=Necromancy#Undead Summons|Vengeful Spirit|right]]"
    end
 
    if imageOverride and imageOverride ~= "" then
      imageName = imageOverride
    end
 
    -- Automaticlly add categories
    if namespace == "" or namespace == nil then
      if creature then
        wikiTable = wikiTable .. "[[Category:" .. creature.location .. "]]"
        wikiTable = wikiTable .. "[[Category:" .. creature.slayer .. " Creatures]]"
      end
      wikiTable = wikiTable .. "[[Category:Summonable Creatures]]"
    end
 
    wikiTable = [=[__NOTOC__
      <table class="wikitable" style="text-align:center">
      <th style="border-right:none; border-bottom:none; width:110px">
      <th colspan="5" style="border-width: 1px 0px 0px; height:100px; vertical-align:bottom;"> [[File:]=] ..
        imageName .. [=[|link=]]
      <th style="vertical-align:top; border-left:none; border-bottom:none; margin-left: 5px; width:110px>]=] ..
        spelliconImage .. [=[
      <tr>
      <th style="border-top:none" colspan="7">[[]=] .. followerName .. [=[]]
      <tr>
      <th>Spell
      <th>Control Slots
      <th>Hits
      <th colspan="2">]=] .. summon.combat .. [=[ Damage
      <th>Armor
      <th>Wrestling
      <tr>
      <td>]=] .. summon.spellname .. summon.tometier .. [=[
      <td>]=] .. summon.slots .. [=[
      <td>]=] .. summon.hits .. [=[
      <td colspan="2>]=] .. summon.mindmg .. " - " .. summon.maxdmg .. [=[
      <td>]=] .. summon.armor .. summon.armormin .. [=[
      <td>]=] .. summon.wrestling .. [=[
      <tr>
      <th>Attack Speed
      <th>Magic Resist
      <th>Poison Resist
      <th>Special Resist
      <th>Poison
      <th>Poisoning
      <th>Stealth
      <tr>
      <td>]=] .. summon.atkspd .. [=[
      <td>]=] .. summon.magicresist .. summon.magicresistmin .. [=[
      <td>]=] .. summon.poisonresist .. summon.poisonresistmin .. [=[
      <td>]=] .. summon.specialresist .. [=[
      <td>]=] .. summon.poisontype .. [=[
      <td>]=] .. summon.poisoning .. [=[
      <td>]=] .. summon.stealth .. "</table>"
 
    return wikiTable
  else
    return '<h1 style="color:FireBrick;"><big>FollowerTable Template Error: No tamed/summoned follower found by the name "' ..
        followerName .. '" (Case-sensitive)</big></h1>'
  end
end
 
function p.listSlayerGroup(frame)
  local creatureArray = mw.loadData("Module:WildCreatureData")
 
  local slayerGroup = frame.args[1]
  local position = frame.args[2]
  local wikiTable = ""
 
  if position and string.find(string.lower(position), "start") then
    wikiTable = [[<table class="wikitable sortable" style="text-align:center">
        <th>Name
        <th>Location
        <th>Slayer
        <th>Difficulty
        <th>Gold Value
        <th>Hits
        <th colspan="2">Melee Dmg
        <th>Wrestling
        <th>Armor
        <th>Magic Resist
        <th>Parry
        <th>AtkSpd
        <th>Magery
        <th colspan="2">Spell Dmg
        <th>Poison
        <th>Poisoning
        <th>Poison Resist
        <th>Stealth
        <th>AI
        <th>Speed
        <th>Unique Scalar]]
  else
    wikiTable = ""
  end
 
  for creatureName, creature in pairs(creatureArray) do
    if creature.slayer == slayerGroup then
      wikiTable = wikiTable .. [=[<tr>
          <td>[[]=] .. creatureName .. [=[]]
          <td>]=] .. creature.location .. [=[
          <td>]=] .. creature.slayer .. [[
          <td>]] .. creature.difficulty .. [[
          <td>]] .. creature.goldvalue .. [[
          <td>]] .. creature.hits .. [[
          <td colspan="2">]] .. creature.minmeleedmg .. creature.maxmeleedmg .. [[
          <td>]] .. creature.wrestling .. [[
          <td>]] .. creature.armor .. creature.armormin .. [[
          <td>]] .. creature.magicresist .. creature.magicresistmin .. [[
          <td>]] .. creature.parry .. [[
          <td>]] .. creature.atkspd .. [[
          <td>]] .. creature.magery .. [[
          <td colspan="2">]] .. creature.minspelldmg .. creature.maxspelldmg .. [[
          <td>]] .. creature.poisontype .. [[
          <td>]] .. creature.poisoning .. [[
          <td>]] .. creature.poisonresist .. creature.poisonresistmin .. [[
          <td>]] .. creature.stealth .. [[
          <td>]] .. creature.ai .. [[
          <td>]] .. creature.speed .. [[
          <td>]] .. creature.uniquescalar
    end
  end
  if position and position and string.find(string.lower(position), "end") then
    wikiTable = wikiTable .. "</table>"
  end
  return wikiTable
end
 
function p.listLocationGroup(frame)
  local locationGroup = frame.args[1]
  local position = frame.args[2]
  local wikiTable = ""
 
  local array
  -- Change the array being pulled from if a valid creatureType is provided, also formats the creatureType to be used in Err messages and sets an iconImage
  if string.find(string.lower(locationGroup),"strangeland") then
    array = mw.loadData("Module:StrangelandsCreatureData")
  elseif string.find(string.lower(locationGroup),"ship") then
    array = mw.loadData("Module:ShipCreatureData")
  else
    array = mw.loadData("Module:WildCreatureData")
  end
 
  if position and string.find(string.lower(position), "start") then
    wikiTable = [[<table class="wikitable sortable" style="text-align:center">
      <th>Name
      <th>Slayer
      <th>Difficulty
      <th>Gold Value
      <th>Hits
      <th colspan="2">Melee Dmg
      <th>Wrestling
      <th>Armor
      <th>Magic Resist
      <th>Parry
      <th>AtkSpd
      <th>Magery
      <th colspan="2">Spell Dmg
      <th>Poison
      <th>Poisoning
      <th>Poison Resist
      <th>Stealth
      <th>AI
      <th>Speed
      <th>Unique Scalar]]
  end
 
  for creatureName, creature in pairs(array) do
    if string.find(creature.location, "[[" .. locationGroup .. "]]") then
      wikiTable = wikiTable .. [=[<tr>
        <td>[[]=] .. creatureName .. [=[]]
        <td>]=] .. creature.slayer .. [[
        <td>]] .. creature.difficulty .. [[
        <td>]] .. creature.goldvalue .. [[
        <td>]] .. creature.hits .. [[
        <td colspan="2">]] .. creature.minmeleedmg .. creature.maxmeleedmg .. [[
        <td>]] .. creature.wrestling .. [[
        <td>]] .. creature.armor .. creature.armormin .. [[
        <td>]] .. creature.magicresist .. creature.magicresistmin .. [[
        <td>]] .. creature.parry .. [[
        <td>]] .. creature.atkspd .. [[
        <td>]] .. creature.magery .. [[
        <td colspan="2">]] .. creature.minspelldmg .. creature.maxspelldmg .. [[
        <td>]] .. creature.poisontype .. [[
        <td>]] .. creature.poisoning .. [[
        <td>]] .. creature.poisonresist .. creature.poisonresistmin .. [[
        <td>]] .. creature.stealth .. [[
        <td>]] .. creature.ai .. [[
        <td>]] .. creature.speed .. [[
        <td>]] .. creature.uniquescalar
    end
  end
 
  if position and position and string.find(string.lower(position), "end") then
    wikiTable = wikiTable .. "</table>"
  end
 
  return wikiTable
end
 
function p.listFollowerGroup(frame)
  local followerArray
 
  local followerGroup = frame.args["group"]
  local wikiTable = ""
 
  if string.find(string.lower(followerGroup),"tame") then
    followerArray = mw.loadData("Module:TameableCreatureData")
    local creatureArray = mw.loadData("Module:WildCreatureData")
 
    wikiTable = [[<table class="wikitable sortable" style="text-align:center">
        <th>Name
        <th>Location
        <th>Slots
        <th>Taming
        <th>Class
        <th>Hits
        <th>Combat
        <th colspan="2"> Damage
        <th>Wrestling
        <th>Armor
        <th>Magic Resist
        <th>AtkSpd
        <th>Poison
        <th>Poisoning
        <th>Poison Resist
        <th>Special Resist
        <th>Stealth
        <th>Cooldown Ability
        <th>Innate Ability
        <th>Passive Ability
        <th>Underdog Scalar]]
 
    for followerName, follower in pairs(followerArray) do
      local creature = creatureArray[followerName]
      local cooldownability = follower.cooldownability
      local innateability = follower.innateability
      local passiveability = follower.passiveability
 
      if type(follower.cooldownability) == "table" then
        cooldownability = ""
        for i, ability in ipairs(follower.cooldownability) do
          if i > 1 then
            cooldownability = cooldownability..","
          end
 
          cooldownability = cooldownability..ability
        end
      end
 
      if type(follower.innateability) == "table" then
        innateability = ""
        for i, ability in ipairs(follower.innateability) do
          if i > 1 then
            innateability = innateability..","
          end
 
          innateability = innateability..ability
        end
      end
 
      if type(follower.passiveability) == "table" then
        passiveability = ""
        for i, ability in ipairs(follower.passiveability) do
          if i > 1 then
            passiveability = passiveability..","
          end
 
          passiveability = passiveability..ability
        end
      end
 
      wikiTable = wikiTable .. [=[<tr>
          <td>[[]=] .. followerName .. [=[]]
          <td>]=] .. creature.location .. [=[
          <td>]=] .. follower.slots .. [[
          <td>]] .. follower.taming .. [[
          <td>]] .. follower.class .. [[
          <td>]] .. follower.hits .. [[
          <td>]] .. follower.combat .. [[
          <td colspan="2">]] .. follower.mindmg .. follower.maxdmg .. [[
          <td>]] .. follower.wrestling .. [[
          <td>]] .. follower.armor .. [[
          <td>]] .. follower.magicresist .. [[
          <td>]] .. follower.atkspd .. [[
          <td>]] .. follower.poisontype .. [[
          <td>]] .. follower.poisoning .. [[
          <td>]] .. follower.poisonresist .. [[
          <td>]] .. follower.specialresist .. [[
          <td>]] .. follower.stealth .. [[
          <td>]] .. cooldownability .. [[
          <td>]] .. innateability .. [[
          <td>]] .. passiveability .. [[
          <td>]] .. follower.underdogscalar
    end
  elseif string.find(string.lower(followerGroup),"summon") then
    followerArray = mw.loadData("Module:SummonableCreatureData")
 
    wikiTable = [[<table class="wikitable sortable" style="text-align:center">
        <th>Name
        <th>Spell
        <th>Slots
        <th>Type
        <th>Hits
        <th>Combat
        <th colspan="2"> Damage
        <th>Wrestling
        <th>Armor
        <th>Magic Resist
        <th>AtkSpd
        <th>Poison
        <th>Poisoning
        <th>Poison Resist
        <th>Special Resist
        <th>Stealth
        <th>Cooldown Ability
        <th>Innate Ability
        <th>Passive Ability]]
 
    for followerName, follower in pairs(followerArray) do
      local cooldownability = follower.cooldownability
      local innateability = follower.innateability
      local passiveability = follower.passiveability
      local summonType
 
      if type(follower.cooldownability) == "table" then
        cooldownability = ""
        for i, ability in ipairs(follower.cooldownability) do
          if i > 1 then
            cooldownability = cooldownability..","
          end
 
          cooldownability = cooldownability..ability
        end
      end
 
      if type(follower.innateability) == "table" then
        innateability = ""
        for i, ability in ipairs(follower.innateability) do
          if i > 1 then
            innateability = innateability..","
          end
 
          innateability = innateability..ability
        end
      end
 
      if type(follower.passiveability) == "table" then
        passiveability = ""
        for i, ability in ipairs(follower.passiveability) do
          if i > 1 then
            passiveability = passiveability..","
          end
 
          passiveability = passiveability..ability
        end
      end
 
      if follower.necro and follower.necro == true then
        summonType = "[[Necromancy]]"
      else
        summonType = "[[Spirit Speak|Regular]]"
      end
 
      wikiTable = wikiTable .. [=[<tr>
          <td>[[]=] .. followerName .. [=[]]
          <td>]=] .. follower.spellname .. [[
          <td>]] .. summonType .. [[
          <td>]] .. follower.slots .. [[
          <td>]] .. follower.hits .. [[
          <td>]] .. follower.combat .. [[
          <td colspan="2">]] .. follower.mindmg .. follower.maxdmg .. [[
          <td>]] .. follower.wrestling .. [[
          <td>]] .. follower.armor .. [[
          <td>]] .. follower.magicresist .. [[
          <td>]] .. follower.atkspd .. [[
          <td>]] .. follower.poisontype .. [[
          <td>]] .. follower.poisoning .. [[
          <td>]] .. follower.poisonresist .. [[
          <td>]] .. follower.specialresist .. [[
          <td>]] .. follower.stealth .. [[
          <td>]] .. cooldownability .. [[
          <td>]] .. innateability .. [[
          <td>]] .. passiveability
    end
  end
 
 
 
  wikiTable = wikiTable .. "</table>"
 
  return wikiTable
end
 
function p.listBosses(frame)
  local creatureArray = mw.loadData("Module:WildCreatureData")
 
  local bossesToList = frame.args[1] -- Main Boss
  local typeOfBoss = string.lower(bossesToList)
 
  local wikiTable = [[<table class="wikitable sortable" style="text-align:center">
    <th>Name
    <th>Location
    <th>Slayer
    <th>Difficulty
    <th>Base Hits
    <th colspan="2">Melee Damage
    <th>Wrestling
    <th>Armor
    <th>Magic Resist
    <th>Parry
    <th>Magery
    <th colspan="2">Spell Damage
    <th>Poison
    <th>Poisoning
    <th>Poison Resist
    <th>Stealth]]
 
  for creatureName, creature in pairs(creatureArray) do
    if string.lower(creature.bosstype) == typeOfBoss or typeOfBoss == "all" then
      if creature.bosstype ~= "" and creature.bosstype ~= "Boss Summon" then
        local imageType = ".jpg"
        local imagePrefix = ""
 
        if creature.bosstype == "Main Boss" then
          imageType = ".gif"
        elseif creature.bosstype == "Shrine Boss" then
          imageType = ".png"
        elseif creature.bosstype == "Omni Boss" then
          imageType = ".gif"
          imagePrefix = "omni"
        end
 
        local formmatedName = string.gsub(string.lower(creatureName), "%s+", "")
        local imageName = imagePrefix .. string.gsub(formmatedName, "%p+", "") .. imageType
 
        wikiTable = wikiTable .. [[<tr>
          <td>]] .. "[[File:" .. imageName .. "|link=" .. creatureName .. "]]<br />[[" .. creatureName .. [=[]]
          <td>]=] .. creature.location .. [=[
          <td>]=] .. creature.slayer .. [[
          <td>]] .. creature.difficulty .. [[
          <td>]] .. creature.hits .. [[
          <td colspan="2">]] .. creature.minmeleedmg .. creature.maxmeleedmg .. [[
          <td>]] .. creature.wrestling .. [[
          <td>]] .. creature.armor .. creature.armormin .. [[
          <td>]] .. creature.magicresist .. creature.magicresistmin .. [[
          <td>]] .. creature.parry .. [[
          <td>]] .. creature.magery .. [[
          <td colspan="2">]] .. creature.minspelldmg .. creature.maxspelldmg .. [[
          <td>]] .. creature.poisontype .. [[
          <td>]] .. creature.poisoning .. [[
          <td>]] .. creature.poisonresist .. creature.poisonresistmin .. [[
          <td>]] .. creature.stealth
      end
    end
  end
 
  wikiTable = wikiTable .. "</table>"
 
  return wikiTable
end
 
function p.listAbilities(frame)
  local tameableArray = mw.loadData("Module:TameableCreatureData")
  local summonArray = mw.loadData("Module:SummonableCreatureData")
  local abilityArray = mw.loadData("Module:FollowerAbilityData")
 
  local creature = frame.args[1]    -- Warpig
  local followerType = frame.args[2] -- Tameable/Summon
  local follower = ""
 
  if string.lower(followerType) ~= "summon" and tameableArray[creature] then
    follower = tameableArray[creature]
  elseif string.lower(followerType) ~= "tameable" and summonArray[creature] then
    follower = summonArray[creature]
  else
    follower = "undefined"
  end
 
  local wikiTable = ""
 
  if follower and follower ~= "undefined" then -- List a follower's abilities if a follower is given
    wikiTable = [[<table class="wikitable" style="text-align:center">
      <th>Ability
      <th>Type
      <th>Description]]
 
    local abilities = {}
 
    for i, creatureAbility in pairs({ follower.cooldownability, follower.innateability, follower.passiveability }) do
      if creatureAbility and creatureAbility ~= "" and type(creatureAbility) == "table" then
        for index, ability in pairs(creatureAbility) do
          table.insert(abilities, ability)
        end
      elseif creatureAbility and creatureAbility ~= "" then
        table.insert(abilities, creatureAbility)
      end
    end
 
    for i, ability in pairs(abilities) do
      wikiTable = wikiTable .. [[<tr>
          <td>]] .. ability .. [[
          <td>]] .. abilityArray[ability].type .. [[
          <td style="text-align:left">]] .. abilityArray[ability].description
    end
  elseif follower == "undefined" then -- List all abilities and the followers that have them
    wikiTable = [[<table class="wikitable sortable" style="text-align:center">
      <th>Ability
      <th>Type
      <th>Description
      <th>Creatures]]
 
    for abilityName, ability in pairs(abilityArray) do
      wikiTable = wikiTable .. [[<tr>
          <td>]] .. abilityName .. [[
          <td>]] .. ability.type .. [[
          <td style="text-align:left">]] .. ability.description .. [[<td>]]
 
      -- Find and list any followers with the ability
      for i, array in pairs({ tameableArray, summonArray }) do
        for followerName, followerStats in pairs(array) do
 
          local followerAbilityType = ""
 
          if ability.type == "Cooldown" then
            followerAbilityType = followerStats.cooldownability
          elseif ability.type == "Innate" then
            followerAbilityType = followerStats.innateability
          elseif ability.type == "Passive" then
            followerAbilityType = followerStats.passiveability
          end
 
          if type(followerAbilityType) == "table" then
            for creatureName, value in pairs(followerAbilityType) do
              if value == abilityName then
                if array == summonArray and tameableArray[followerName] and summonArray[followerName] then
                  wikiTable = wikiTable .. "[[" .. followerName .. "|"..followerName.." (Summon)]],<br>"
                else
                  wikiTable = wikiTable .. "[[" .. followerName .. "]],<br>"
                end
              end
            end
          elseif followerAbilityType == abilityName then
            if array == summonArray and tameableArray[followerName] and summonArray[followerName] then
              wikiTable = wikiTable .. "[[" .. followerName .. "|"..followerName.." (Summon)]],<br>"
            else
              wikiTable = wikiTable .. "[[" .. followerName .. "]],<br>"
            end
          end
        end
      end
 
      -- Cut out the extra line break
      if string.find(wikiTable, "<br>") then
        wikiTable = string.reverse(wikiTable)
        wikiTable = string.sub(wikiTable, 6)
        wikiTable = string.reverse(wikiTable)
      end
    end
  else -- If a follower is given but doesn't exist
    return
    '<h1 style="color:FireBrick;"><big>Follower Ability Table Template Error: No tamed/summoned follower found by the name "' ..
    creature .. '" (Case-sensitive)</big></h1>'
  end
 
  wikiTable = wikiTable .. "</table>"
 
  return wikiTable
end
 
function p.summonStatIncrease(frame)
  local summonArray = mw.loadData("Module:SummonableCreatureData")
 
  local summonName = frame.args[1] -- A summon given to display, defaults to {{PAGENAME}}
  local wikiTable = '<table class="wikitable" style="text-align:center">'
 
  local summon = summonArray[summonName]
 
  if summon then
    local stats = {
      ["hits"] = summon.unformattedhits,
      ["atkspd"] = summon.atkspd,
      ["mindmg"] = summon.mindmg,
      ["maxdmg"] = summon.maxdmg,
      ["wrestling"] = summon.wrestling,
      ["armor"] = summon.armor,
      ["magicresist"] = summon.magicresist
    }
 
    for statName, stat in pairs(stats) do
      if type(stats[statName]) == "string" then
        stats[statName] = 0
      end
    end
 
    wikiTable = wikiTable .. [=[<th colspan="6">[[File:]=] .. summon.spellicon .. [=[.png|center|link=]]<br>[[]=] .. summonName .. [=[]]
      <tr>
      <th rowspan="2">Stat
      <th colspan="5"> Spirit Speak Skill
      <tr>
      <th>Base
      <th>80
      <th>100
      <th>120
      <th>150
      <tr>
      <th>Hits
      <td>]=] .. stats.hits .. [[
      <td>]] .. stats.hits * 1.5 * (80 / 100) .. [[
      <td>]] .. stats.hits * 1.5 * (100 / 100) .. [[
      <td>]] .. stats.hits * 1.5 * (120 / 100) .. [[
      <td>]] .. stats.hits * 1.5 * (150 / 100) .. [[
      <tr>
      <th>Attack Speed
      <td>]] .. stats.atkspd .. [[
      <td>]] .. stats.atkspd * 1.125 * (80 / 100) .. [[
      <td>]] .. stats.atkspd * 1.125 * (100 / 100) .. [[
      <td>]] .. stats.atkspd * 1.125 * (120 / 100) .. [[
      <td>]] .. stats.atkspd * 1.125 * (150 / 100) .. [[
      <tr>
      <th>]] .. summon.combat .. [[ Damage
      <td>]] .. stats.mindmg .. " - " .. stats.maxdmg .. [[
      <td>]] .. stats.mindmg * 1.25 * (80 / 100) .. " - " .. stats.maxdmg * 1.25 * (80 / 100) .. [[
      <td>]] .. stats.mindmg * 1.25 * (100 / 100) .. " - " .. stats.maxdmg * 1.25 * (100 / 100) .. [[
      <td>]] .. stats.mindmg * 1.25 * (120 / 100) .. " - " .. stats.maxdmg * 1.25 * (120 / 100) .. [[
      <td>]] .. stats.mindmg * 1.25 * (150 / 100) .. " - " .. stats.maxdmg * 1.25 * (150 / 100) .. [[
      <tr>
      <th>Wrestling
      <td>]] .. stats.wrestling .. [[
      <td>]] .. stats.wrestling * 1.25 * (80 / 100) .. [[
      <td>]] .. stats.wrestling * 1.25 * (100 / 100) .. [[
      <td>]] .. stats.wrestling * 1.25 * (120 / 100) .. [[
      <td>]] .. stats.wrestling * 1.25 * (150 / 100) .. [[
      <tr>
      <th>Armor
      <td>]] .. stats.armor .. [[
      <td>]] .. stats.armor + (25 * (80 / 100)) .. [[
      <td>]] .. stats.armor + (25 * (100 / 100)) .. [[
      <td>]] .. stats.armor + (25 * (120 / 100)) .. [[
      <td>]] .. stats.armor + (25 * (150 / 100)) .. [[
      <tr>
      <th>Magic Resist
      <td>]] .. stats.magicresist .. [[
      <td>]] .. stats.magicresist + (50 * (80 / 100)) .. [[
      <td>]] .. stats.magicresist + (50 * (100 / 100)) .. [[
      <td>]] .. stats.magicresist + (50 * (120 / 100)) .. [[
      <td>]] .. stats.magicresist + (50 * (150 / 100)) .. [[
      </table>]]
 
    return wikiTable
  else
    return '<h1 style="color:FireBrick;"><big>Summon Stat Table Template Error: No summoned follower found by the name "' ..
        summonName .. '" (Case-sensitive)</big></h1>'
  end
end
 
function p.checkCreatureValue(frame)
  local creatureName = frame.args[1] -- Name of the creature to check for
  local creatureType = frame.args[2] -- Wild/Tameable/Summonable/Ships/Strangelands, defaults to Wild
  local creatureStat = frame.args[3] -- location/name/slayer
  local value = frame.args[4] -- Aegis Keep/Molten Mongbat/Deamonic/true, defaults to true (has value)
  local valueIfTrue = frame.args[5]
  local valueIfFalse = frame.args[6]
 
  if not creatureStat or creatureStat == "" then
    creatureStat = "name"
  end
 
  local dataSource
 
  -- Set the requested data source
  if creatureType and string.lower(creatureType) == "tameable" then
    dataSource = mw.loadData("Module:TameableCreatureData")
  elseif creatureType and string.lower(creatureType) == "summonable" then
    dataSource = mw.loadData("Module:SummonableCreatureData")
  elseif creatureType and string.lower(creatureType) == "ships" then
    dataSource = mw.loadData("Module:ShipCreatureData")
  elseif creatureType and string.lower(creatureType) == "tameable" then
    dataSource = mw.loadData("Module:TameableCreatureData")
  elseif creatureType and string.lower(creatureType) == "strangelands" then
    dataSource = mw.loadData("Module:StrangelandsCreatureData")
  else
    dataSource = mw.loadData("Module:WildCreatureData")
  end
 
  local creature = dataSource[creatureName]
 
  if creature then
    local stat = creature[creatureStat]
 
    if creatureStat == "name" then
      return true -- "creature match found in datasource"
    elseif not value or value == "" then
      if stat then
        return valueIfTrue -- "stat exists for this creature"
      else
        return valueIfFalse -- "stat does not exist for this creature"
      end
    else
      if stat and string.lower(stat) == string.lower(value) then
        return valueIfTrue -- "stat is equal to the value"
      else
        return valueIfFalse -- "stat is not equal to the value or doesn't exist"
      end
    end
  else
    return valueIfFalse -- "creature not found in datasource"
  end
end
 
function p.creaturePage(frame)
  local creature = frame.args[1]
  local imageOverride = frame.args[2]
  local page = ""
 
  if imageOverride and imageOverride ~= "" then
    imageOverride = "|image="..imageOverride
  end
 
  local creatureArray = mw.loadData("Module:WildCreatureData")
  local tameableArray = mw.loadData("Module:TameableCreatureData")
  local summonArray = mw.loadData("Module:SummonableCreatureData")
  local strangelandsArray = mw.loadData("Module:StrangelandsCreatureData")
  local shipsArray = mw.loadData("Module:ShipCreatureData")
 
  if creatureArray[creature] then
    page = page.."{{CreatureTable"..imageOverride.."}}\n"
  end
 
  if shipsArray[creature] then
    page = page.."== Ship Creature Stats ==\n{{CreatureTable|type=ships"..imageOverride.."}}\n"
  end
 
  if tameableArray[creature] then
    page = page.."== Tameable Stats ==\n{{FollowerTable|type=tameable"..imageOverride.."}}<br>{{FollowerAbilities|type=tameable}}<br>{{TamedScalarLevels}}\n"
  end
 
  if summonArray[creature] then
    page = page.."== Summoned Creature Stats ==\n{{FollowerTable|type=summon"..imageOverride.."}}<br>{{FollowerAbilities|type=summon}}<br>{{SummonStatIncrease}}\n"
  end
 
  if strangelandsArray[creature] then
    page = page.."== Strangelands Creature Stats==\n{{CreatureTable|type=strangelands"..imageOverride.."}}\n"
  end
 
  return page
end
 
function p.test()
  return "{{CreatureTable}}"
end
 
return p

Latest revision as of 22:59, 11 November 2024

Editing this template will not change what the template displays, see #Editing for more information


FollowerList generates a list of a group of followers, i.e. summons or tameables.

Template

The tables are sortable, the sorting arrows are just black... (Click the links on the right to show the tables)


Parameters

Name Alias Default Value Function Example
group 1 all The type of follower to list, won't list anything if left blank. Not case-sensitive. tame/summon

Editing

This template is generated by Module:Creatures, which formats the creature data into this table, this cannot be edited without a basic understanding of Lua, or at least general programming. However the creature data is either pulled from Module:SummonableCreatureData alone or Module:TameableCreatureData and a Module:WildCreatureData based on the group specified. These module's documentation (linked at the top of its pages) give details on how to structure data in the Lua table, after editing it is recommended that editors make sure the template still functions properly.

These modules were created by User:TheGmaster, feel free to dm any questions/concerns/requests directly via Discord @thegmaster1.