====== 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