No edit summary |
No edit summary |
||
| Line 73: | Line 73: | ||
for i, e in ipairs(enemies) do | for i, e in ipairs(enemies) do | ||
local tab = {} | local tab = {} | ||
tab.label = "[[File:" .. e[1] .. ".png{{!}}25x25px{{!}} | tab.label = "[[File:" .. e[1] .. ".png{{!}}25x25px{{!}}link__TABBER_EQ__]] " .. u.formatName(e[1]) | ||
tab.content = p.enemy_stats(e):gsub('|', '{{!}}') | tab.content = p.enemy_stats(e):gsub('|', '{{!}}') | ||
table.insert(tabs, tab) | table.insert(tabs, tab) | ||
Revision as of 03:02, 25 October 2025
Documentation for this module may be created at Module:Enemies/doc
1 u = require("Module:Util");
2 lt = require("Module:Loot_Table");
3 edb = require("Module:Enemies_DB");
4 -- Format: {Name, Area, Damage, Accuracy, Defence, Magic Defence, HP, Weakness, {Loot1,Loot2}, Is Boss(optional), Image Path(optional)}
5 local p = {};
6
7 function p.get_enemy_from_name(name)
8 for _, e in ipairs(edb) do
9 if u.formatName(e[1]) == name then
10 return e
11 end
12 end
13 return nil
14 end
15
16 function p.enemy_table(enemy)
17 if type(enemy) ~= "table" then
18 enemy = p.get_enemy_from_name(enemy)
19 end
20 if enemy == nil or next(enemy[9]) == nil then
21 return ''
22 end
23 return lt.lt(enemy[1],enemy[9])
24 end
25
26 function p.enemy_stats(name)
27 local enemy = nil
28 if type(name) == 'table' then
29 enemy = name
30 else
31 enemy = p.get_enemy_from_name(name)
32 end
33 return [=[{{{!}} class="article-table"
34 ! Enemy
35 ![[File:health.png{{!}}20px{{!}}link=]] Health
36 ![[File:damage.png{{!}}20px{{!}}link=]] Damage
37 ![[File:accuracy.png{{!}}20px{{!}}link=]] Accuracy
38 ![[File:defence.png{{!}}20px{{!}}link=]] Defense
39 ![[File:magic_defence.png{{!}}20px{{!}}link=]] Magic Defense
40 ![[File:weapon_type.png{{!}}20px{{!}}link=]] Weakness
41 {{!}}-
42 {{!}} [[File: ]=] .. (enemy[11] and enemy[11] or (enemy[1] .. '.png')) .. [[{{!}}40px{{!}}link=]] .. u.formatName(enemy[1]) .. ']]\n'.. u.formatName(enemy[1]) .. [[
43
44 {{!}}]] .. enemy[7] .. [[
45
46 {{!}}]] .. enemy[3] .. [[
47
48 {{!}}]] .. enemy[4] .. [[
49
50 {{!}}]] .. enemy[5] .. [[
51
52 {{!}}]] .. enemy[6] .. [[
53
54 {{!}}]] .. u.formatName(enemy[8]) .. [[
55
56 {{!}}}
57
58 ]] .. p.enemy_table(enemy)
59 end
60
61 function p.enemy_zone_tabber(areaEnemies)
62 local enemies = {}
63 local tabs = {}
64 if type(areaEnemies) == 'string' then
65 for _, enemy in ipairs(edb) do
66 if enemy[2] == areaEnemies then
67 table.insert(enemies, enemy)
68 end
69 end
70 else
71 enemies = areaEnemies
72 end
73 for i, e in ipairs(enemies) do
74 local tab = {}
75 tab.label = "[[File:" .. e[1] .. ".png{{!}}25x25px{{!}}link__TABBER_EQ__]] " .. u.formatName(e[1])
76 tab.content = p.enemy_stats(e):gsub('|', '{{!}}')
77 table.insert(tabs, tab)
78 end
79 return mw.ext.tabber.render(tabs)
80 end
81
82 function p.enemy_all_tabber()
83 local areas = {}
84 local result = "<tabber>"
85 for _, e in ipairs(edb) do
86 if areas[e[2]] == nil then
87 areas[e[2]] = {}
88 end
89 table.insert(areas[e[2]], e)
90 end
91 for a, e in pairs(areas) do
92 result = result .. "\n|-|" .. a .. "=\n" .. p.enemy_zone_tabber(e)
93 end
94 return result .. "</tabber>"
95 end
96
97 function p.enemy_page_before(name)
98 local enemy = nil
99 if type(name) == 'table' then
100 enemy = name
101 name = u.formatName(name[1])
102 else
103 for _, e in ipairs(edb) do
104 if u.formatName(e[1]) == name then
105 enemy = e
106 break
107 end
108 end
109 end
110 return [[
111 {{Infobox Enemies
112 | title= ]] .. u.formatName(enemy[1]) .. [[
113 | image= ]] .. (enemy[11] and enemy[11] or (enemy[1] .. '.png')) .. [[
114 | imagewidth= 90
115 | health= ]] .. enemy[7] .. [[
116 | accuracy= ]] .. enemy[4] .. [[
117 | damage= ]] .. enemy[3] .. [[
118 | defence= ]] .. enemy[5] .. [[
119 | magicDefence= ]] .. enemy[6] .. [[
120 | weakness= ]] .. enemy[8] .. [[
121 }}]]
122 end
123 function p.enemy_page_after(name)
124 local enemy = nil
125 if type(name) == 'table' then
126 enemy = name
127 else
128 enemy = p.get_enemy_from_name(name)
129 end
130 return [[{{Navbox Enemies}}
131 ]] .. (enemy[2] and '[[Category:' .. enemy[2] .. ']]' or "") .. (enemy[8] ~= "none" and "[[Category:Enemies Weak to " .. enemy[8] .. "]]" or "") .. '[[Category:Enemies]]' .. [[
132 ]]
133 end
134
135 -- Infobox
136 function p.tepb(frame)
137 return mw.getCurrentFrame():preprocess(p.enemy_page_before(frame.args[1] or frame:getParent():getTitle()))
138 end
139 -- Loot Table
140 function p.tet(frame)
141 return mw.getCurrentFrame():preprocess("\n= Loot =\n" .. p.enemy_table(frame.args[1] or frame:getParent():getTitle()))
142 end
143 --Category and navbox
144 function p.tepa(frame)
145 return mw.getCurrentFrame():preprocess(p.enemy_page_after(frame.args[1] or frame:getParent():getTitle()))
146 end
147
148 --Area
149 function p.ta(frame)
150 return mw.getCurrentFrame():preprocess(p.enemy_zone_tabber(frame.args[1] or frame:getParent():getTitle()))
151 end
152 --Area
153 function p.tad(frame)
154 return p.enemy_zone_tabber(frame.args[1] or frame:getParent():getTitle())
155 end
156
157 --All Areas
158 function p.taa()
159 return mw.getCurrentFrame():preprocess(p.enemy_all_tabber())
160 end
161
162 return p
