No edit summary |
No edit summary |
||
| Line 1: | Line 1: | ||
u = require("Module:Util") | u = require("Module:Util") | ||
edb = require("Module:Enemy_DB") | edb = require("Module:Enemy_DB") | ||
adb = require("Module:Area_DB") | |||
lt = require("Module:Loot_Table") | lt = require("Module:Loot_Table") | ||
local p = {} | local p = {} | ||
| Line 42: | Line 43: | ||
end | end | ||
function p.enemy_zone_tabber(enemies) | function p.enemy_zone_tabber(enemies) | ||
result = [[ | result = [[<ul id="dtabs]] .. enemies[1][2] .. [["> | ||
]] | ]] | ||
for idx, e in ipairs(enemies) do | |||
if not (idx == 1) then | |||
result = result .. "," | |||
end | |||
result = result .. e[1] | |||
end | |||
result = result .. [[</ul>]] | |||
for _, e in ipairs(enemies) do | for _, e in ipairs(enemies) do | ||
result = result .. e[1] .. [[ | result = result .. [[<div id="]] .. string.lower(string.gsub(e[1], "%s", "")) .. [["> | ||
]] .. p.enemy_stats(e):gsub('|', '{{!}}') | ]] .. p.enemy_stats(e):gsub('|', '{{!}}') [[ | ||
</div> | |||
]] | ]] | ||
end | end | ||
return result | return result | ||
end | |||
function p.enemy_all_tabber() | function p.enemy_all_tabber() | ||
result = [[< | result = [[<ul id="dtabsAllAreas">]] | ||
]] | for idx, a in ipairs(adb) do | ||
if not (idx == 1) then | |||
result = result .. "," | |||
end | |||
result = result .. a[1] | |||
end | |||
result = result .. [[</ul>]] | |||
area = [[]] | area = [[]] | ||
enemies = {} | enemies = {} | ||
for | for _, e in ipairs(edb) do | ||
if e[2] ~= area and area ~= [[]] then | if e[2] ~= area and area ~= [[]] then | ||
result = result .. [[<div id="]] .. string.lower(string.gsub(area, "%s", "")) .. [["> | |||
result = result .. [[< | ]] .. p.enemy_zone_tabber(enemies) .. [[</div> | ||
]] | |||
enemies = {} | enemies = {} | ||
end | end | ||
| Line 70: | Line 83: | ||
end | end | ||
return result .. area .. [[= | return result .. area .. [[= | ||
]] .. p.enemy_zone_tabber(enemies) | ]] .. p.enemy_zone_tabber(enemies) | ||
end | end | ||
function p.enemy_page_before(name) | function p.enemy_page_before(name) | ||
enemy = nil | enemy = nil | ||
Revision as of 20:34, 7 March 2024
Documentation for this module may be created at Module:Enemies/doc
u = require("Module:Util")
edb = require("Module:Enemy_DB")
adb = require("Module:Area_DB")
lt = require("Module:Loot_Table")
local p = {}
function round(n)
return n + 0.5 - (n + 0.5) % 1
end
function p.enemy_table(enemy)
result = [[]]
for _, e in ipairs(enemy[8]) do
-- TODO: refactor 1 - 1 -> 1 conversion to loot table module if possible
result = result .. lt.ltr({args= {e[1], (e[2] == e[3] and u.c(e[2]) or (u.c(e[2]) .. ' - ' .. u.c(e[3]))), e[4], e[6], e[5] and enemy[2], image=e['image']}})
end
return lt.lt({args= {result, area=enemy[2]}}) .. [[
]]
end
function p.enemy_stats(enemy)
return [[{| class="loot-table"
!Enemy
]] .. '![[File: Heart.png|20px]]\n![[File: Attack.png|20px]]\n![[File: Accuracy.png|20px]]\n![[File: Speed.png|20px]]\n![[File: Defence.png|20px]]' .. [[
|-
|]] .. '[[' .. [[File: ]] .. (enemy['raw_image'] and enemy['raw_image'] or ((enemy['image'] or enemy[1]:gsub(' ', ''):gsub('%(', ''):gsub('%)', '')) .. 'Icon.png')) .. [[|40px|link=]] .. enemy[1] .. ']]' .. [[
|]] .. enemy[1] .. [[
|]] .. enemy[7] .. [[
|]] .. enemy[2] .. [[
|]] .. enemy[3] .. [[
|]] .. enemy[4] .. [[
|]] .. enemy[5] .. [[
|]] .. enemy[6] .. [[
|}
]] .. p.enemy_table(enemy)
end
function p.enemy_zone_tabber(enemies)
result = [[<ul id="dtabs]] .. enemies[1][2] .. [[">
]]
for idx, e in ipairs(enemies) do
if not (idx == 1) then
result = result .. ","
end
result = result .. e[1]
end
result = result .. [[</ul>]]
for _, e in ipairs(enemies) do
result = result .. [[<div id="]] .. string.lower(string.gsub(e[1], "%s", "")) .. [[">
]] .. p.enemy_stats(e):gsub('|', '{{!}}') [[
</div>
]]
end
return result
end
function p.enemy_all_tabber()
result = [[<ul id="dtabsAllAreas">]]
for idx, a in ipairs(adb) do
if not (idx == 1) then
result = result .. ","
end
result = result .. a[1]
end
result = result .. [[</ul>]]
area = [[]]
enemies = {}
for _, e in ipairs(edb) do
if e[2] ~= area and area ~= [[]] then
result = result .. [[<div id="]] .. string.lower(string.gsub(area, "%s", "")) .. [[">
]] .. p.enemy_zone_tabber(enemies) .. [[</div>
]]
enemies = {}
end
table.insert(enemies, e)
area = e[2]
end
return result .. area .. [[=
]] .. p.enemy_zone_tabber(enemies)
end
function p.enemy_page_before(name)
enemy = nil
if type(name) == 'table' then
enemy = name
name = name[1]
else
for _, e in ipairs(edb) do
if e[1] == name then
enemy = e
break
end
end
end
return [[
{{Infobox Monsters
| title= ]] .. enemy[1] .. [[
| image= ]] .. (enemy['raw_image'] and enemy['raw_image'] or ((enemy['image'] or enemy[1]:gsub(' ', ''):gsub('%(', ''):gsub('%)', '')) .. 'Icon.png')) .. [[
| imagewidth= 90
| health= ]] .. enemy[7] .. [[
| damage= ]] .. enemy[3] .. [[
| accuracy= ]] .. enemy[4] .. [[
| speed= ]] .. enemy[5] .. [[
| defence= ]] .. enemy[6] .. [[
| areas= ]] .. enemy[2] .. [[
}}]]
end
function p.enemy_page_after(name)
enemy = nil
if type(name) == 'table' then
enemy = name
name = name[1]
else
for _, e in ipairs(edb) do
if e[1] == name then
enemy = e
break
end
end
end
return [[{{Navbox Monsters}}
]] .. '[[Category:' .. enemy[2] .. ']] [[Category:Monsters]]' .. [[
]]
end
function p.enemy_page(name)
enemy = nil
for _, e in ipairs(edb) do
if e[1] == name then
enemy = e
break
end
end
return p.enemy_page_before(enemy) .. [[
== Loot ==
]] .. p.enemy_table(enemy) .. p.enemy_page_after(enemy)
end
function p.tep(frame)
return p.enemy_page(frame.args[1] or frame:getParent():getTitle())
end
function p.tepb(frame)
return p.enemy_page_before(frame.args[1] or frame:getParent():getTitle())
end
function p.tepa(frame)
return p.enemy_page_after(frame.args[1] or frame:getParent():getTitle())
end
function p.tet(frame)
name = frame.args[1] or frame:getParent():getTitle()
for _, e in ipairs(edb) do
if e[1] == name then
return [[
== Loot ==
]] .. p.enemy_table(e)
end
end
end
function p.tes(frame)
name = frame.args[1] or frame:getParent():getTitle()
for _, e in ipairs(edb) do
if e[1] == name then
return p.enemy_stats(e)
end
end
end
return p