forked from pokemoncentral/wiki-lua-modules
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathDebRes-1.lua
143 lines (109 loc) · 3.37 KB
/
DebRes-1.lua
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
--[[
Crea una tabella in cui sono presenti tutte le debolezze e
resistenze di un Pokémon nella prima generazione.
Per i Pokémon con più forme, crea solo le tabelle
effettivamente diverse, inserendo nel titolo tutte le
forme che condividono la stessa.
Può essere chiamato con il nome di un Pokémon, es:
{{#invoke: DebRes/1 | DebRes | Parasect }}
Oppure con una combinazione di tipi:
{{#invoke: DebRes/1 | DebRes | Coleottero | Erba }}
{{#invoke: DebRes/1 | DebRes | type1=Coleottero | type2=Erba }}
--]]
local dr = {}
local mw = require('mw')
local w = require('Wikilib')
local list = require('Wikilib-lists')
local oop = require('Wikilib-oop')
local tab = require('Wikilib-tables')
local multigen = require('Wikilib-multigen')
local drp = require('DebRes')
local et = require('EffTipi-1')
local pokes = require("Poké-data")
--[[
Questa classe rappresenta una tabella di efficacia
tipi di prima generazione. Primariamente, contiene
informazioni riguardo l'efficacia dei vari tipi di
attacchi contro un certo Pokémon, ovvero contro una
certa combinazione di tipi; oltre a ciò, possiede
le righe che compongono il footer.
--]]
dr.EffTable = oop.makeClass(drp.EffTable)
--[[
Tutti i possibili moltiplicatori dell'efficacia
--]]
dr.EffTable.allEff = {
0, 0.25, 0.5, 1, 2, 4, -- Standard
}
--[[
Costruttore della classe: ha in ingresso il
nome del Pokémon, nella forma nome + sigla gioco,
e, opzionalmente, il nome esteso dell gioco
--]]
dr.EffTable.new = function(name, formName)
local types
if type(name) == 'table' and type(formName) == 'table' then
types = table.map(name, string.lower)
else
types = multigen.getGen(pokes[name], 1)
end
local this = setmetatable(dr.EffTable.super.super.new(),
dr.EffTable)
this.collapse = ''
local monoType = types.type1 == types.type2
-- Dati per la stampa
this:createColors(types)
--[[
Per ogni possibile efficacia, se vi sono
tipi che la hanno, inserisce una table
con i loro nomi all'indice dell'efficacia
stessa
--]]
for _, eff in ipairs(dr.EffTable.allEff) do
local types = et.difesa(eff, types.type1, types.type2, 'Tanfo')
if #types > 0 then
--[[
I tipi devono essere ordinati per il
confronto e la conversione a stringa
--]]
table.sort(types)
this[eff] = types
end
end
this.footer = {}
return this
end
--[[
Funzione d'interfaccia al wikicode: prende in ingresso
il nome di un Pokémon o una coppia di tipi
e genera le table dell'efficacia tipi di prima generazione. Se
il Pokémon ha più forme, ritorna una table per ogni forma,
tutte collassabili con solo quella della forma base
estesa al caricamento della pagina.
--]]
dr.debRes = function(frame)
local p = w.trimAndMap(mw.clone(frame.args), string.lower)
local pokeData = pokes[string.parseInt(p[1]) or p[1]]
or pokes[mw.text.decode(p[1])]
--[[
If no data is found, the first parameter is
the type, that is no Pokémon is given and
types are directly provided
--]]
if not pokeData then
local types = {}
types.type1 = p[1] or p.type1 or p.type
types.type2 = p[2] or p.type2 or types.type1
return tostring(dr.EffTable.new(types, {}))
end
pokeData = multigen.getGen(pokeData, 1)
return list.makeFormsLabelledBoxes({
name = pokeData.name:lower(),
makeBox = dr.EffTable.new,
printBoxes = dr.EffTable.printEffTables
})
end
dr.DebRes, dr.debres = dr.debRes, dr.debRes
local arg = {"Parasect"}
print(dr.DebRes{args=arg})
-- return dr