====== Funktionen aufrufen ======
=====variabler Funktionsaufruf mit xpcall=====
Ich hatte folgende Problemstellung:
Ich will mehrere Funktionen in einem Table speichern und diese dann per table.getn(funktionstable) aufrufen.
**Lösung:** Per xpcall aufrufen.
**Lösungsproblemstellung:** Leider nur ohne Argumente machbar
**Fazit:** Schreiben einer eigenen Funktion welche xpcall mit Argumenten erlaubt
**Achtung:** xpcall direkt zu überschreiben hat leider Spielinterne Funktionen zerschossen, also hab ich die Funktion xpcall_args genannt
==== Code ====
function xpcall_args(func, err, ...)
local args = table.getn(arg)
if args == 0 then return xpcall(function() return func() end, err)
elseif args == 1 then return xpcall(function() return func(arg[1]) end, err)
elseif args == 2 then return xpcall(function() return func(arg[1],arg[2]) end, err)
elseif args == 3 then return xpcall(function() return func(arg[1],arg[2],arg[3]) end, err)
elseif args == 4 then return xpcall(function() return func(arg[1],arg[2],arg[3],arg[4]) end, err)
elseif args == 5 then return xpcall(function() return func(arg[1],arg[2],arg[3],arg[4],arg[5]) end, err)
elseif args == 6 then return xpcall(function() return func(arg[1],arg[2],arg[3],arg[4],arg[5],arg[6]) end, err)
elseif args == 7 then return xpcall(function() return func(arg[1],arg[2],arg[3],arg[4],arg[5],arg[6],arg[7]) end, err)
elseif args == 8 then return xpcall(function() return func(arg[1],arg[2],arg[3],arg[4],arg[5],arg[6],arg[7],arg[8]) end, err)
elseif args == 9 then return xpcall(function() return func(arg[1],arg[2],arg[3],arg[4],arg[5],arg[6],arg[7],arg[8],arg[9]) end, err)
elseif args == 10 then return xpcall(function() return func(arg[1],arg[2],arg[3],arg[4],arg[5],arg[6],arg[7],arg[8],arg[9],arg[10]) end, err)
elseif args == 11 then return xpcall(function() return func(arg[1],arg[2],arg[3],arg[4],arg[5],arg[6],arg[7],arg[8],arg[9],arg[10],arg[11]) end, err)
elseif args == 12 then return xpcall(function() return func(arg[1],arg[2],arg[3],arg[4],arg[5],arg[6],arg[7],arg[8],arg[9],arg[10],arg[11],arg[12]) end, err)
else assert(false,"Zuviele Argumente fuer XP Call!")
end
end
==== Beispielanwendung ====
xpcall_beispiel = {}
table.insert(xpcall_beispiel, function()
Message("xpcall_args Beispiel:")
end)
table.insert(xpcall_beispiel, function(_a,_b)
Message(_a.." ".._b)
end)
--Message(table.getn(xpcall_beispiel))
for i = 1,table.getn(xpcall_beispiel) do
xpcall_args( xpcall_beispiel[i],nil,"@color:255,255,0","Farbiger Text" )
end