--[[ | API debug ( http://atelier801.com/topic?f=6&t=793167 par Alexpp, version 2_1) | !! Mettre après les fonctions eventNewPlayer, eventKeyboard si vous en avez !! | | Initialisation de l'api: | | mdebug = apidebug() | --! normalement présent dans tout les scripts: | for name, player in pairs(tfm.get.room.playerList) do eventNewPlayer(name) end | | Fonctions disponible après init | print(...) | mdebug.log(...) | - ...: any → Toutes données à surveiller/debugger | | printf(format, ...) | mdebug.logs(format,...) | - format: string → chaine de mise en forme, ex: "C'est quoi ça: %s ?" (%s = data) | - ...: any → Toutes données à surveiller/debugger | | mdebug.log2(...) | S'affiche dans le mini panneau | - ...: any → Toutes données à surveiller/debugger | | mdebug.logs2(format, ...) | S'affiche dans le mini panneau | - format: string → chaine de mise en forme, ex: "C'est quoi ça: %s ?" (%s = data) | - ...: any → Toutes données à surveiller/debugger | | mdebug.print(data) | fonction print d'origine | | mdebug.panel(playerName, ShowPanel) | Fonction pour afficher ou non (ShowPanel) le(s) panneau(x) à playerName | - playerName: string → Nom du joueur | - ShowPanel: boolean → true / false | -]] local function apidebug() --[[ Début configuration ]]-- local Active = true --! false: totalement inactif, true: activation possible pour les admins local ShowPanel = true --! Affiche ou non le(s) panneau(x) debug aux admins au démarrage local Admins = { Alexpp=true, ["+Alexpp"]=true } --! Liste d'accès (Première lettre en majuscule) local SwitchKeycode= 110 --! Touche pour (dés)activer le(s) panneau(x) à un admin (110 = touche point du pavé numérique, false=désactivé) local Coord1 = {id=1000, x=-235, y=-100, w=230, h=800, a=0.7} --! Configuration du gros panneau (false=désactivé) local Coord2 = {id=1001, x= 5, y=-100, a=0.7} --! Configuration du panneau monoligne (false=désactivé) --[[ Fin configuration ]]-- local self = {} local UseDebug = {} local DEBUG = {} self._eventNewPlayer = _G.eventNewPlayer self._eventKeyboard = _G.eventKeyboard self._print = _G.print self.eventNewPlayer = function (playerName) if self._eventNewPlayer then self._eventNewPlayer(playerName) end if Admins[playerName] then if SwitchKeycode then tfm.exec.bindKeyboard(playerName, SwitchKeycode, true, true) end UseDebug[playerName] = ShowPanel self.Panel(playerName, ShowPanel) end end self.eventKeyboard = function(playerName, keyCode) if self._eventKeyboard then self._eventKeyboard(playerName, keyCode) end if Admins[playerName] and SwitchKeycode and keyCode == SwitchKeycode then if UseDebug[playerName] == nil then UseDebug[playerName] = ShowPanel else UseDebug[playerName] = not UseDebug[playerName] end self.Panel(playerName, UseDebug[playerName]) end end self.print = function (...) local value = table.concat(self._arg2table(...), ', ') self._print(value) self.addDebug(value) end self.printf = function (format, ...) if not next({...}) then self.print(format) return end local p,value = pcall(function(f, ...) return f:format(self.unpack(self._arg2table(...)))end, format, ...) if not p then value = ("Error: printf('%s', #arg:%d, %s)"):format(format, #{...}, value) end self._print(value) self.addDebug(value) end self.Panel = function (playerName, ShowPanel) if ShowPanel then if Coord1 then ui.addTextArea(Coord1.id, "DEBUG", playerName, Coord1.x, Coord1.y, Coord1.w, Coord1.h, nil,nil, Coord1.a, true) end if Coord2 then ui.addTextArea(Coord2.id, "MINI DEBUG", playerName, Coord2.x, Coord2.y, 0, 0, nil,nil, Coord2.a, true) end else if Coord1 then ui.removeTextArea(Coord1.id, playerName) end if Coord2 then ui.removeTextArea(Coord2.id, playerName) end end end self.tostring = function (data,level) local out,pad,key,val,i="","","","",0 if level ~= nil then pad = string.rep("\t", level) -- for i=0,level,1 do pad=pad.."\t" end level=level+1 else level=1 end if level == 3 then return pad.."maxlevel reached" end if type(data) == 'table' then for key, val in pairs(data) do if type(val) == 'table' then out=out..pad.."["..key.."]=<br>"..self.tostring(val,level).."<br>" else out=out..pad.."["..key.."]='"..tostring(val).."'<br>" end end else out=pad..tostring(data) end return out end self.unpack = function (t, i) i = i or 1 if t[i] ~= nil then return t[i], self.unpack(t, i + 1) end end self._arg2table = function (...) local val,k,v = {} for k,v in ipairs({...}) do if type(v) == "number" or type(v) == "string" then table.insert(val,v) else table.insert(val,self.tostring(v)) end end return val end self.addDebug = function (value) if Coord1 then table.insert(DEBUG, value) if #table.concat(DEBUG, '<br>') > 900 then table.remove(DEBUG,1) end ui.updateTextArea(Coord1.id, table.concat(DEBUG,'<br>')..'<br>....') --[[ , playerName) ]] end end self.print2 = function ( ...) local value = table.concat(self._arg2table(...), ', ') self._print(value) if Coord2 then ui.updateTextArea(Coord2.id, value) --[[ , playerName) ]] end end self.printf2 = function (format, ...) if not next({...}) then self.print2(format) return end local p,value = pcall(function(f, ...) return f:format(self.unpack(self._arg2table(...)))end, format, ...) if not p then value = ("Error: [debug].logs2('%s', #arg:%d, %s)"):format(format, #{...}, value) end self._print(value) if Coord2 then ui.updateTextArea(Coord2.id, value) --[[ , playerName) ]] end end if Active then _G.print = self.print _G.printf = self.printf _G.eventNewPlayer = self.eventNewPlayer _G.eventKeyboard = self.eventKeyboard return { print = self._print ,log = self.print ,logs = self.printf ,log2 = self.print2 ,logs2 = self.printf2 ,panel = self.Panel } else return { print=function()end ,log=function()end ,logs=function()end ,log2=function()end ,logs2=function()end ,panel=function()end } end end --[[ Exemples: function eventLoop(time, time2) mdebug.log2('log2', time, time2) mdebug.logs2('logs2 %d %d', time, time2) mdebug.log('log', time, time2) mdebug.logs('logs %d %d', time, time2) print('print', time, time2) printf('printf %d %d', time, time2) end --!]] mdebug = apidebug() for name, player in pairs(tfm.get.room.playerList) do eventNewPlayer(name) end --[[ Exemples: print('test1 ', 42) print('test2', 'test2.2') print('test2', 'test2.2', {'test2.3.1', 'test2.3.2'}) print({'test2.3.1', 'test2.3.2'}) local f = '%d' printf('testX '..f..' %s %s', math.pi, f:format(math.pi), {x='test2.3.1', y='test2.3.2'}) --!]] tfm.exec.disableAfkDeath(true) tfm.exec.disableAutoTimeLeft(true) tfm.exec.newGame(10) tfm.exec.setGameTime(99999) print(mdebug) mdebug.log2('Hello', 'world !')