Differenze tra le versioni di "Modulo:EffTipi"

ok, si accettano commenti
(Calcolo automatico efficacia tipi (lavori in corso))
 
(ok, si accettano commenti)
 
-- !!! gestione dell'abbreviazione "coleot" senza scassare gli indici
local nomi = {["normale"] = 1, ["fuoco"] = 2, ["acqua"] = 3, ["elettro"] = 4, ["erba"] = 5, ["ghiaccio"] = 6, ["lotta"] = 7, ["veleno"] = 8, ["terra"] = 9, ["volante"] = 10, ["psico"] = 11, ["coleottero"] = 12, ["roccia"] = 13, ["spettro"] = 14, ["drago"] = 15, ["buio"] = 16, ["acciaio"] = 17}
["lotta"] = 7, ["veleno"] = 8, ["terra"] = 9, ["volante"] = 10, ["psico"] = 11, ["coleottero"] = 12,
["roccia"] = 13, ["spettro"] = 14, ["drago"] = 15, ["buio"] = 16, ["acciaio"] = 17}
 
-- riga: attaccante, colonna: difensore
local eff = {{1,1,1,1,1,1,1,1,1,1,1,1,0.5,0,1,1,0.5},
{1,0.5,0.5,1,2,2,1,1,1,1,1,2,0.5,1,0.5,1,2}, {1,2,0.5,1,0.5,1,1,1,2,1,1,1,2,1,0.5,1,1},
{1,1,2,0.5,1,1,1,0,2,1,1,1,1,1,0.5,1,1}, {1,0.5,2,1,0.5,1,1,0.5,2,0.5,1,0.5,2,1,0.5,1,0.5},
{1,0.5,0.5,1,2,0.5,1,1,2,2,1,1,1,1,2,1,0.5}, {2,1,1,1,1,2,1,0.5,1,0.5,0.5,0.5,2,0,1,2,2},
{1,1,1,1,2,1,1,0.5,0.5,1,1,1,0.5,0.5,1,1,0}, {1,2,1,2,0.5,1,1,2,1,0,1,0.5,2,1,1,1,2},
{1,1,1,0.5,2,1,2,1,1,1,1,2,0.5,1,1,1,0.5}, {1,1,1,1,1,1,2,2,1,1,0.5,1,1,1,1,0,0.5},
{1,0.5,1,1,2,1,0.5,0.5,1,0.5,2,1,1,0.5,1,2,0.5}, {1,2,1,1,1,2,0.5,1,0.5,2,1,2,1,1,1,1,0.5},
{0,1,1,1,1,1,1,1,1,1,2,1,1,2,1,0.5,0.5}, {1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,0.5},
{1,1,1,1,1,1,0.5,1,1,1,2,1,1,2,1,0.5,0.5}, {1,0.5,0.5,0.5,1,2,1,1,1,1,1,1,2,1,1,1,0.5}}
 
-- EfficaciaCalcola l'efficacia di un attacco. Argomenti:(0 {nome- tipo0.25 attaccante,- 0.5 nome- tipo11 difensore,- nome2 tipo2- difensore}4)
local function attacca(attaccante, difensore1, difensore2)
et.attacca = function(frame)
local e = eff[nomi[frame.args[1]attaccante]][nomi[frame.args[2]difensore1]]
if (frame.args[3]difensore2) then
e = e * eff[nomi[frame.args[1]]][nomi[frame.args[3]difensore2]]
end
return e
end
 
et.attacca = function(frame)
-- print(et.attacca({["args"]={"acqua","normale","acqua"}}))
return attacca(frame.args[1],frame.args[2],frame.args[3])
 
end
-- todo: trova tutti i tipi su cui T ha efficacia N
 
-- trovacerca tutti i tipi che attaccandosoddisfano T1,T2una hannocondizione efficacia Ndata
local function cerca_tipi(test)
-- [eff, t1, t2] (cominciamo con un tipo solo...)
et.tipiConEff = function(frame)
-- cicla et.attacca per tutti i tipi con nomi, trova quelli con eff data, listali
local t = {}
 
-- trova un modo migliore per impacchettare, se proprio crea funzione accessoria
for k,v in pairs(nomi) do -- usa solo chiave, valore non serve...
if (et.attaccatest({["args"]={k,frame.args[2]}})==frame.args[1]) then
-- print("Trovato: ",k) --debug
table.insert(t,k)
end
end
 
-- trova tutti i tipi che attaccando tipo1,tipo2 hanno efficacia eff
-- et.tipiConEff({["args"]={0.5,"acciaio"}})
local function attaccanti_con_eff(eff,tipo1,tipo2)
return cerca_tipi(function (x) return attacca(x,tipo1,tipo2)==eff end)
end
 
et.attaccanti_con_eff = function(frame)
return attaccanti_con_eff(frame.args[1],frame.args[2],frame.args[3])
end
 
-- todo: trova tutti i tipi su cui Ttipo ha efficacia Neff
local function attaccati_con_eff(tipo,eff)
cerca_tipi(function (x) return attacca(tipo,x)==eff end)
end
 
et.tipiConEffattaccati_con_eff = function(frame)
return attaccati_con_eff(frame.args[1],frame.args[2])
end
 
return et
7 028

contributi