Jump to content

diper

Miembro
  • Contador contenido

    25
  • Ingreso

  • Última visita

  • Días ganados

    1

Actividad de reputación

  1. Me Gusta
    diper got a reaction from Mari Carmen Rodriguez Morete in Nuevo encryptyador para el publico   
    Jajaja despues de que te enseñe a encryptar jajajaja dises que no sean ratas jajajaja
  2. Me Gusta
    diper got a reaction from santos2002 in Nuevo encryptyador para el publico   
    Jajaja despues de que te enseñe a encryptar jajajaja dises que no sean ratas jajajaja
  3. Me Gusta
    diper got a reaction from llollo300 in Nuevo encryptyador para el publico   
    Jajaja despues de que te enseñe a encryptar jajajaja dises que no sean ratas jajajaja
  4. Me Gusta
    diper got a reaction from dracux in Nuevo encryptyador para el publico   
    Jajaja despues de que te enseñe a encryptar jajajaja dises que no sean ratas jajajaja
  5. Me Gusta
    diper got a reaction from Leandro Andrade in Nuevo questlib 2012 aun en test   
    Hola Amigos de Metin zone les traigo este ques lib 2012 mas complejo que aun no ee testeado muy bien pero ee tomado algunas funciones pero parese que trae nuevas funcionas para las nuevas quest que estan saliiendo en foros alemanes y italianos espero que les sirva.
     

    print('Questlib by Mijago | 22.03.2012') ql = {} col = {} zt = {} proc = {} -- Einstellungen zur Lib: mijago_include_compat = true do -- Zur Nutzung auf Windoof | MySQL funktioniert auf Windoof nicht! local old_print = print if number == nil then number = function(i,l) return math.random(i,l) end end if pc == nil then pc = {} pc.get_name = function() return '-name-' end pc.count_item = function() return 200 end pc.remove_item = function() return end pc.give_item = function(i,l) print('<GiveItem>',i,l) end pc.warp = function(i,l) print('<Warp>',i,l) end pc.warp_local = function(m,x,y) print('<Warp>',m,x,y) end pc.give_item2 = pc.give_item pc.get_map_index = function() return 1 end pc.get_local_y = function() return 200 end pc.get_local_x = function() return 400 end pc.get_empire = function() return 2 end pc.getqf = function() return 222313 end get_time = os.time end if cmdchat == nil then cmdchat = function() old_print('<cmdchat>') end end if wait == nil then wait = function () old_print('<wait>') end end if input == nil then input = function () old_print('<input>'); return 101 end end if say == nil then say = function (...) local st = '' table.foreachi(arg,function(i,l) st = st..l..'t' end) old_print('<say>',st) end end if chat == nil then chat = function (txt) old_print('<Chat>',txt) end end if notice == nil then notice = function (txt) old_print('<notice>',txt) end end if setbg == nil then setbg = function (txt) old_print('<setbg>',txt) end end if say_size == nil then say_size = function (a,b) old_print('<say_size>',a,b) end end if notice_all == nil then notice_all = function (txt) old_print('<notice_all>',txt) end end if game == nil then game = {} game.set_event_flag = function(a,b) print('<game.set_event_flag>',a,b) end end if select == nil then select = function (...) local st = '' table.foreachi(arg,function(i,l) st = st..l..'t' end) old_print('<select>',st) return math.random(0,table.getn(arg)) end end end doit = os.execute ql.mysql = { ["user"] = "root", ["pass"] = "", ["ip"] = "localhost", } ------------------------------------------------------------------------------- -- function select2(tab,...) arg.n = nil if type(tab) ~= "table" and type(tab) == 'number' then table.insert(arg,1,tab) tab = arg elseif type(tab) ~= "table" and type(tab) == 'string' then table.insert(arg,1,tab) table.insert(arg,1,8) tab = arg elseif type(tab) == "table" and type(tab[1]) == 'string' then table.insert(tab,1,8) end local max = tab[1]; table.remove(tab,1) local tablen,outputstr,outputcount,nextc,incit = table.getn(tab),"",0,0,0 table.foreach(tab, function(i,l) outputcount = outputcount + 1 if outputcount == 1 then outputstr=outputstr..'sel = select("'..l..'"' elseif outputcount == max and tablen > outputcount+incit then if tablen ~= outputcount+incit+1 then outputstr=outputstr..',"'..l..'","Nächste Seite") + '..incit..' ' if nextc > 0 then outputstr = outputstr..'end ' end outputstr=outputstr..'; if sel == '..(incit+max+1)..' then ' -- Anfangen der neuen Abfrage nextc, outputcount, incit= nextc+1,0,incit+max else outputstr=outputstr..',"'..l..'"' end else outputstr=outputstr..',"'..l..'"' end end ) outputstr = outputstr..') + '..incit if nextc > 0 then outputstr = outputstr..' end' end outputstr= outputstr.. '; return sel' print(outputstr) local sel = assert(loadstring(outputstr))() tablen,outputstr,outputcount,nextc,incit = nil,nil,nil,nil,nil -- Speicher freimachen return sel end function arraytoselect(arr,abbr) local d = 'sel = select(' local i = 0 for i=1,getn(arr),1 do d = d..'"'..arr[i]..'",' if abbr ~= nil then if i == getn(arr) then d = d..'"'..abbr..'"' end end end d = d..")nreturn sel" return assert(loadstring(d))() end function dostr(str) assert(loadstring(str))() end ------------------------------------------------------------------------------- -- Veränderte Lua-Funktionen do local old_tonumber = tonumber tonumber = function(str) if old_tonumber(str) == nil then return 0,false else return old_tonumber(str),true end end end ------------------------------------------------------------------------------- -- Datenspeicherung function writelog(text,var,file) if var == nil then var = 1 end if var == 1 then local data = io.open('syserr','a+') data:write(os.date()..'::t'..text.."n") data:close() elseif var == 2 then local data = io.open('syslog','a+') data:write(os.date()..'::t'..text.."n") data:close() elseif var == 3 then local data = io.open(file,'a+') data:write(os.date()..'::t'..text.."n") data:close() end end function watch_table(tab) local meta,myname,tabn = {},pc.get_name(),tostring(tab) local lo = function(typ,index,wert) writelog(tabn..' - '..myname..': '..typ..' ['..index..'] = '..wert,3,'tables') end meta.__newindex = function(ta,index,wert) --writelog(tabn..' - '..myname..': Newindex ['..index..'] = '..wert,3,'tables') lo('newindex',index,wert) rawset(ta,index,wert) end meta.__index = function(ta,index,wert) lo('index',index,wert) error('Fehlerhafter Zugriff bei '..index) end meta.__call = function(ta,index,wert) lo('call',index,wert) end setmetatable(tab, meta) end ------------------------------------------------------------------------------- -- account account = account or {} function account.set_pw(pw,ac) if pw == nil then error("Fehler... Passwort muss gesetzt werden!") end if ac == nil then ac = pc.get_account_id() end if type(ac) == "string" then mysql_query("UPDATE player.player,account.account SET account.password = password('"..pw.."') WHERE account.id = player.account_id and player.name = '"..ac.."' LIMIT 1") elseif type(ac) == "number" then mysql_query("UPDATE account.account SET account.password = password('"..pw.."') WHERE account.id = "..ac) end end ------------------------------------------------------------------------------- -- PCI pci = {} function pci:new(name) local out = {} if name == nil then name = pc.get_name() end local info = mysql_query("SELECT * FROM player.player WHERE name = '"..name.."' LIMIT 1",ql.mysql["user"],ql.mysql["pass"],ql.mysql["ip"]) local reich = mysql_query("select player_index.empire FROM player.player INNER JOIN player.player_index ON player.account_id = player_index.id WHERE player.name = '"..pc.get_name().."'",ql.mysql["user"],ql.mysql["pass"],ql.mysql["ip"]) out.name = name out.level = info.level[1] out.playtime = info.playtime[1] out.job = info.job[1] out.account_id = info.account_id[1] out.id = info.id[1] out.voice = info.voice[1] out.dir = info.dir[1] out.x = info.x[1] out.y = info.y[1] out.z = info.z[1] out.map_index = info.map_index[1] out.exit_y = info.exit_y[1] out.exit_x = info.exit_x[1] out.exit_map_index = info.exit_map_index[1] out.hp = info.hp[1] out.mp = info.mp[1] out.stamina = info.stamina[1] out.random_hp = info.random_hp[1] out.random_sp = info.random_sp[1] out.level_step = info.level_step[1] out.st = info.st[1] out.ht = info.ht[1] out.dx = info.dx[1] out.iq = info.iq[1] out.exp= info.exp[1] out.gold = info.gold[1] out.stat_point = info.stat_point[1] out.skill_point = info.skill_point[1] out.ip = info.ip[1] out.part_main = info.part_main[1] out.part_hair = info.part_hair[1] out.skill_group = info.skill_group[1] out.last_play = info.last_play[1] out.alignment = info.alignment[1] out.change_name = info.change_name[1] out.sub_skill_point = info.sub_skill_point[1] out.horse_skill_point = info.horse_skill_point[1] out.horse_riding = info.horse_riding[1] out.horse_hp_droptime = info.horse_hp_droptime[1] out.horse_level = info.horse_level[1] out.horse_stamina = info.horse_stamina[1] out.horse_hp = info.horse_hp[1] out.stat_reset_count = info.stat_reset_count[1] out.empire = reich.empire[1] setmetatable(out, { __index = pci }) print('Daten für '..name..' erfolgreich geladen!') return out end function pci:update() local info = mysql_query("SELECT * FROM player.player WHERE name = '"..self.name.."' LIMIT 1",ql.mysql["user"],ql.mysql["pass"],ql.mysql["ip"]) self.level = info.level[1] self.playtime = info.playtime[1] self.job = info.job[1] self.account_id = info.account_id[1] self.id = info.id[1] self.voice = info.voice[1] self.dir = info.dir[1] self.x = info.x[1] self.y = info.y[1] self.z = info.z[1] self.map_index = info.map_index[1] self.exit_y = info.exit_y[1] self.exit_x = info.exit_x[1] self.exit_map_index = info.exit_map_index[1] self.hp = info.hp[1] self.mp = info.mp[1] self.stamina = info.stamina[1] self.random_hp = info.random_hp[1] self.random_sp = info.random_sp[1] self.level_step = info.level_step[1] self.st = info.st[1] self.ht = info.ht[1] self.dx = info.dx[1] self.iq = info.iq[1] self.exp= info.exp[1] self.gold = info.gold[1] self.stat_point = info.stat_point[1] self.skill_point = info.skill_point[1] self.ip = info.ip[1] self.part_main = info.part_main[1] self.part_hair = info.part_hair[1] self.skill_group = info.skill_group[1] self.last_play = info.last_play[1] self.alignment = info.alignment[1] self.change_name = info.change_name[1] self.sub_skill_point = info.sub_skill_point[1] self.horse_skill_point = info.horse_skill_point[1] self.horse_riding = info.horse_riding[1] self.horse_hp_droptime = info.horse_hp_droptime[1] self.horse_level = info.horse_level[1] self.horse_stamina = info.horse_stamina[1] self.horse_hp = info.horse_hp[1] self.stat_reset_count = info.stat_reset_count[1] print('Daten für '..self.name..' erfolgreich geupdated!') end ------------------------------------------------------------------------------- -- Strings function rm_nlc(s) return string.gsub(s, "%A", "") end -- alles außer Buchstaben weg function rm_ndc(s) return string.gsub(s, "%D", "") end -- alles außer Zahlen weg function rm_lc(s) return string.gsub(s, "%a", "") end -- alle Buchstaben weg function rm_dc(s) return string.gsub(s, "%d", "") end -- alle Zahlen weg function rm_ucc(s) return string.gsub(s, "%u", "") end -- alle großgeschriebenen Buchstaben weg function rm_lcc(s) return string.gsub(s, "%l", "") end -- alle kleingeschriebenen Buchstaben weg function rm_nanc(s) return string.gsub(s, "%W", "") end -- alle nicht-alphanumerischen Zeichen weg function string.reverse(str) local se = '' for i=1,string.len(str) do se = string.sub(str,i,i)..se end return se end function num_format(num) if type(num) == "number" then num = tostring(num) end if string.len(num) <= 3 then return num end return string.reverse(string.gsub(string.reverse(num),'(%d%d%d)','%1.')) end function wartungsmodus(v) if v == 1 then mysql_query("UPDATE account.account SET account.status = 'SHUTDOWN' WHERE status = 'OK' and account.login NOT IN (SELECT mAccount FROM common.gmlist);") elseif v == 0 then mysql_query("UPDATE account.account SET account.status = 'OK' WHERE status = 'SHUTDOWN' and account.login NOT IN (SELECT mAccount FROM common.gmlist);") end end ------------------------------------------------------------------------------- --[[ iti iti = {} function iti:new(name) -- The constructor local out = {} local info = mysql_query_on("SELECT * FROM player.item WHERE vnum = "..name.." LIMIT 1") out.vnum = tonumber(name) setmetatable(out, { __index = iti }) -- Inheritance print('Daten für Item '..name..' erfolgreich geladen!') return out end --]] ------------------------------------------------------------------------------- -- Say CFG UNFINISHED - In Arbeit! --[[ sayer = {} function sayer:new() local out = {} out.maxlen = 50 out.maxlines = 15 out.lines=0 out.text = 'say("' self.sayopen = 1 setmetatable(out, { __index = sayer }) return out end function sayer:add(txt) if self.lines >= self.maxlines then self.lines = 0 self.text = self.text..'"); wait();' self.sayopen = 0 end if self.sayopen == 0 then self.text = self.text..' say("' self.sayopen = 1 end if self.lines ~= 0 then self.text = self.text ..'[ENTER]' end if string.len(txt) < self.maxlen then self.text = self.text ..txt end self.lines = self.lines+1 end function sayer:send() if self.sayopen == 1 then self.text = self.text..'"); ' self.sayopen = 1 end --assert(loadstring(self.text))() s.out=loadstring(self.text)() print(self.text) end function sayer:wait() if self.sayopen == 1 then self.text = self.text..'"); ' self.sayopen = 0 end self.text = self.text..' wait();' self.sayopen = 0 self.lines=0 end function sayer:input() if self.sayopen == 1 then self.text = self.text..'"); ' self.sayopen = 0 end self.text = self.text..'input();' self.sayopen = 0 self.lines=0 end function sayer:select(tab) if self.sayopen == 1 then self.text = self.text..'"); ' self.sayopen = 0 end local un = "'"..join("','",tab).."'" self.text = self.text..'select('..un..');' self.sayopen = 0 self.lines=0 end function sayer:clear() self.maxlen = 50 self.maxlines = 6 self.lines=0 self.text = 'say("' self.sayopen = 1 end --]] ------------------------------------------------------------------------------- -- MYSQL - FUNKTIONEN -- Einzelbefehle function mysql_escape(str) str = string.gsub(str,"%", "") -- str = string.gsub(str,"%0", "0") Gibt einen fehler aus | Wer rausfindet, warum.. Bitte mir Schreiben (Mijago) str = string.gsub(str,"%n", "n") str = string.gsub(str,"%r", "r") str = string.gsub(str,"%x1a", "Z") str = string.gsub(str,"%'", "'") str = string.gsub(str,'%"', '"') return str end function backup_files() -- Backuppt den Share-Ordner local now = os.date('%d-%m-%Y_%H:%M:%S') -- Aus absicht einzelne Zeilen! (Zur besseren Kommentierung und dass nicht ein Fehler alle Scripts behindert) os.execute('mkdir /backup/ && mkdir /backup/share') -- Ordner erstellen, falls nicht vorhanden os.execute('tar -cvzf ./locale/ /backup/share/'..now..'_locale.tar.gz') -- Packen os.execute('tar -cvzf ./data/ /backup/share/'..now..'_data.tar.gz') -- Packen end function backup_main() -- Backuppt die Hauptdatenbanken local now = os.date('%d-%m-%Y_%H:%M:%S') -- Aus absicht einzelne Zeilen! (Zur besseren Kommentierung und dass nicht ein Fehler alle Scripts behindert) os.execute('mkdir /backup/ && mkdir /backup/main') -- Ordner erstellen, falls nicht vorhanden os.execute('mkdir /backup/main/'..now) -- Ordner für das Backup erstellen os.execute('mkdir /backup/main/'..now..'/player/') -- Player-DB vorbereiten os.execute('mkdir /backup/main/'..now..'/account/') -- Account-DB vorbereiten os.execute('cp /var/db/mysql/player/player* /backup/main/'..now..'/player/') -- Player DBs Kopieren os.execute('cp /var/db/mysql/player/quest.* /backup/main/'..now..'/player/') -- Quest DB Kopieren os.execute('cp /var/db/mysql/player/guild* /backup/main/'..now..'/player/') -- Guild DBs Kopieren os.execute('cp /var/db/mysql/account/account.* /backup/main/'..now..'/account/') -- Guild DBs Kopieren os.execute('tar -cvzf /backup/main/'..now..'/ /backup/main/'..now..'.tar.gz') -- Packen os.execute('rm -R /backup/main/'..now..'/') -- Daten wieder löschen end function backup() -- Backuppt alle Datenbanken local now = os.date('%d-%m-%Y_%H:%M:%S') -- Aus absicht einzelne Zeilen! (Zur besseren Kommentierung und dass nicht ein Fehler alle Scripts behindert) os.execute('mkdir /backup/ && mkdir /backup/all') -- Ordner erstellen, falls nicht vorhanden os.execute('mkdir /backup/all/'..now) -- Ordner für das Backup erstellen os.execute('tar -cvzf /var/db/mysql/ /backup/all/'..now..'.tar.gz') -- Packen end function mysql_query(query,user,pass,db,ip) local pre = '' if query == '' or query == nil then error("Query muss gesetzt sein!") end user = user or ql.mysql["user"] pass = pass or ql.mysql["pass"] ip = ip or ql.mysql["ip"] if user ~= '' and user ~= nil then pre = pre..' -u'..user end if pass ~= '' and pass ~= nil then pre = pre..' -p'..pass end if db ~= '' and db ~= nil then pre = pre..' -D'..db end if ip ~= '' and ip ~= nil then pre = pre..' -h'..ip end math.randomseed(os.time()); local rand = math.random(0,10^7) -- Erstellen der Pfadvariable local path = 'data/mysql_output_'..os.time()..'_'..rand..'_'..pc.get_vid() os.execute ("mysql "..pre.." --e=""..query.."" > "..path) -- Laden und Auflisten der Dateiinhalte local fi,q = io.open(path,"r"),{["l"] = {},["out"]={}} if fi == nil then return "ERROR" end for line in fi:lines() do table.insert(q.l,(split(line,"t"))) end os.remove(path) if type(q.l[1]) ~= "table" then return "ERROR" --error("Fehler bei der MySQL Verbindung oder bei der Rückgabe! Abbruch!") end local ix = 0 table.foreachi(q.l,function(i,l) if i > 1 then table.foreach(l,function(i2,l2) if q.out[q.l[1][i2]] == nil then q.out[q.l[1][i2]] = {} end local c = tonumber(l2) if type(c) == "number" and l2 == tostring(c) then q.out[q.l[1][i2]][i-1] = c else q.out[q.l[1][i2]][i-1] = l2 end end) end end) -- ENDE der eigentlichen MySQL-Funktion -- START Zusatz: Hanashi-Kompatibilität & Fehlerbehandlung q.out.__data = q.l[1] setmetatable(q.out, { __index = function(a,b) if type(b) == "number" then return (a[a.__data[b]] or {"ERROR"}) end return "ERROR" --error("Fehler bei Indexierung: Index "..b.." ist nicht vorhanden!") end}) return q.out end -- Für mehrere CFG's mysql = {} function mysql:connect(ip,user,passwd,db) local out = {} out.ip = ip out.user = user out.pass = passwd if db == nil then db = 'player' end out.db = db out.querycount = 0 out.querylist = {} out.ql = {} setmetatable(out, { __index = mysql }) return out end function mysql:query(query) self.lastquery = mysql_query(query,self.user,self.pass,self.db,self.ip) self.lq = self.lastquery self.querycount = self.querycount +1 self.querylist[self.querycount] = self.lq self.ql = self.querylist return self.lastquery, self.querycount end function mysql:setcfg(ip,user,pass,db) if ip ~= nil then self.ip = ip end if user ~= nil then self.user = user end if pass ~= nil then self.pass = pass end self.db = db end ------------------------------------------------------------------------------- -- FARBCODES col.list= { { 'lightcoral', 240,128,128 },{ 'rosybrown', 188,143,143 }, { 'indianred', 205,92,92 },{ 'red', 255,0,0 },{ 'firebrick', 178,34,34 },{ 'brown', 165,42,42 }, { 'darkred', 139,0,0 },{ 'maroon', 128,0,0 },{ 'mistyrose', 255,228,225 },{ 'salmon', 250,128,114 }, { 'tomato', 255,99,71 },{ 'darksalmon', 233,150,122 },{ 'coral', 255,127,80 },{ 'orangered', 255,69,0 }, { 'lightsalmon', 255,160,122 },{ 'sienna', 160,82,45 },{ 'seashell', 255,245,238 },{ 'chocolate', 210,105,30 }, { 'saddlebrown', 139,69,19 },{ 'sandybrown', 244,164,96 },{ 'peachpuff', 255,218,185 },{ 'peru', 205,133,63 }, { 'linen', 250,240,230 },{ 'bisque', 255,228,196 },{ 'darkorange', 255,140,0 },{ 'burlywood', 222,184,135 }, { 'antiquewhite', 250,235,215 },{ 'tan', 210,180,140 },{ 'navajowhite', 255,222,173 },{ 'blanchedalmond', 255,235,205 }, { 'papayawhip', 255,239,213 },{ 'moccasin', 255,228,181 },{ 'orange', 255,165,0 },{ 'wheat', 245,222,179 }, { 'oldlace', 253,245,230 },{ 'floralwhite', 255,250,240 },{ 'darkgoldenrod', 184,134,11 },{ 'goldenrod', 218,165,32 }, { 'cornsilk', 255,248,220 },{ 'gold', 255,215,0 },{ 'lemonchiffon', 255,250,205 },{ 'khaki', 240,230,140 }, { 'palegoldenrod', 238,232,170 },{ 'darkkhaki', 189,183,107 },{ 'ivory', 255,255,240 },{ 'lightyellow', 255,255,224 }, { 'beige', 245,245,220 },{ 'lightgoldenrodyellow', 250,250,210 },{ 'yellow', 255,255,0 },{ 'olive', 128,128,0 }, { 'olivedrab', 107,142,35 },{ 'yellowgreen', 154,205,50 },{ 'darkolivegreen', 85,107,47 },{ 'greenyellow', 173,255,47 }, { 'chartreuse', 127,255,0 },{ 'lawngreen', 124,252,0 },{ 'darkseagreen', 143,188,139 },{ 'honeydew', 240,255,240 }, { 'palegreen', 152,251,152 },{ 'lightgreen', 144,238,144 },{ 'lime', 0,255,0 },{ 'limegreen', 50,205,50 }, { 'forestgreen', 34,139,34 },{ 'green', 0,128,0 },{ 'darkgreen', 0,100,0 },{ 'seagreen', 46,139,87 }, { 'mediumseagreen', 60,179,113 },{ 'springgreen', 0,255,127 },{ 'mintcream', 245,255,250 },{ 'mediumspringgreen', 0,250,154 }, { 'mediumaquamarine', 102,205,170 },{ 'aquamarine', 127,255,212 },{ 'turquoise', 64,224,208 },{ 'lightseagreen', 32,178,170 }, { 'mediumturquoise', 72,209,204 },{ 'azure', 240,255,255 },{ 'lightcyan', 224,255,255 },{ 'paleturquoise', 175,238,238 }, { 'aqua', 0,255,255 },{ 'cyan', 0,255,255 },{ 'darkcyan', 0,139,139 },{ 'teal', 0,128,128 }, { 'darkslategray', 47,79,79 },{ 'darkturquoise', 0,206,209 },{ 'cadetblue', 95,158,160 },{ 'powderblue', 176,224,230 }, { 'lightblue', 173,216,230 },{ 'deepskyblue', 0,191,255 },{ 'skyblue', 135,206,235 },{ 'lightskyblue', 135,206,250 }, { 'steelblue', 70,130,180 },{ 'aliceblue', 240,248,255 },{ 'dodgerblue', 30,144,255 },{ 'lightslategray', 119,136,153 }, { 'slategray', 112,128,144 },{ 'lightsteelblue', 176,196,222 },{ 'cornflowerblue', 100,149,237 },{ 'royalblue', 65,105,225 }, { 'ghostwhite', 248,248,255 },{ 'lavender', 230,230,250 },{ 'blue', 0,0,255 },{ 'mediumblue', 0,0,205 }, { 'darkblue', 0,0,139 },{ 'midnightblue', 25,25,112 },{ 'navy', 0,0,128 },{ 'slateblue', 106,90,205 }, { 'darkslateblue', 72,61,139 },{ 'mediumslateblue', 123,104,238 },{ 'mediumpurple', 147,112,219 },{ 'blueviolet', 138,43,226 }, { 'indigo', 75,0,130 },{ 'darkorchid', 153,50,204 },{ 'darkviolet', 148,0,211 },{ 'mediumorchid', 186,85,211 }, { 'thistle', 216,191,216 },{ 'plum', 221,160,221 },{ 'violet', 238,130,238 },{ 'fuchsia', 255,0,255 }, { 'magenta', 255,0,255 },{ 'darkmagenta', 139,0,139 },{ 'purple', 128,0,128 },{ 'orchid', 218,112,214 }, { 'mediumvioletred', 199,21,133 },{ 'deeppink', 255,20,147 },{ 'hotpink', 255,105,180 },{ 'lavenderblush', 255,240,245 }, { 'palevioletred', 219,112,147 },{ 'crimson', 220,20,60 },{ 'pink', 255,192,203 },{ 'lightpink', 255,182,193 }, { 'white', 255,255,255 },{ 'snow', 255,250,250 },{ 'whitesmoke', 245,245,245 },{ 'gainsboro', 220,220,220 }, { 'lightgray', 211,211,211 },{ 'silver', 192,192,192 },{ 'darkgray', 169,169,169 },{ 'gray', 128,128,128 }, { 'dimgray', 105,105,105 },{ 'black', 0,0,0 },{ 'aliceblue', 240,248,255 },{ 'antiquewhite', 250,235,215 }, { 'aqua', 0,255,255 },{ 'aquamarine', 127,255,212 },{ 'azure', 240,255,255 },{ 'beige', 245,245,220 }, { 'bisque', 255,228,196 },{ 'black', 0,0,0 },{ 'blanchedalmond', 255,235,205 },{ 'blue', 0,0,255 }, { 'blueviolet', 138,43,226 },{ 'brown', 165,42,42 },{ 'burlywood', 222,184,135 },{ 'cadetblue', 95,158,160 }, { 'chartreuse', 127,255,0 },{ 'chocolate', 210,105,30 },{ 'coral', 255,127,80 },{ 'cornflowerblue', 100,149,237 }, { 'cornsilk', 255,248,220 },{ 'crimson', 220,20,60 },{ 'cyan', 0,255,255 },{ 'darkblue', 0,0,139 }, { 'darkcyan', 0,139,139 },{ 'darkgoldenrod', 184,134,11 },{ 'darkgray', 169,169,169 },{ 'darkgreen', 0,100,0 }, { 'darkkhaki', 189,183,107 },{ 'darkmagenta', 139,0,139 },{ 'darkolivegreen', 85,107,47 },{ 'darkorange', 255,140,0 }, { 'darkorchid', 153,50,204 },{ 'darkred', 139,0,0 },{ 'darksalmon', 233,150,122 },{ 'darkseagreen', 143,188,139 }, { 'darkslateblue', 72,61,139 },{ 'darkslategray', 47,79,79 },{ 'darkturquoise', 0,206,209 },{ 'darkviolet', 148,0,211 }, { 'deeppink', 255,20,147 },{ 'deepskyblue', 0,191,255 },{ 'dimgray', 105,105,105 },{ 'dodgerblue', 30,144,255 }, { 'firebrick', 178,34,34 },{ 'floralwhite', 255,250,240 },{ 'forestgreen', 34,139,34 },{ 'fuchsia', 255,0,255 }, { 'gainsboro', 220,220,220 },{ 'ghostwhite', 248,248,255 },{ 'gold', 255,215,0 },{ 'goldenrod', 218,165,32 }, { 'gray', 128,128,128 },{ 'green', 0,128,0 },{ 'greenyellow', 173,255,47 },{ 'honeydew', 240,255,240 }, { 'hotpink', 255,105,180 },{ 'indianred', 205,92,92 },{ 'indigo', 75,0,130 },{ 'ivory', 255,255,240 }, { 'khaki', 240,230,140 },{ 'lavender', 230,230,250 },{ 'lavenderblush', 255,240,245 },{ 'lawngreen', 124,252,0 }, { 'lemonchiffon', 255,250,205 },{ 'lightblue', 173,216,230 },{ 'lightcoral', 240,128,128 },{ 'lightcyan', 224,255,255 }, { 'lightgoldenrodyellow', 250,250,210 },{ 'lightgray', 211,211,211 },{ 'lightgreen', 144,238,144 },{ 'lightpink', 255,182,193 }, { 'lightsalmon', 255,160,122 },{ 'lightseagreen', 32,178,170 },{ 'lightskyblue', 135,206,250 },{ 'lightslategray', 119,136,153 }, { 'lightsteelblue', 176,196,222 },{ 'lightyellow', 255,255,224 },{ 'lime', 0,255,0 },{ 'limegreen', 50,205,50 }, { 'linen', 250,240,230 },{ 'magenta', 255,0,255 },{ 'maroon', 128,0,0 },{ 'mediumaquamarine', 102,205,170 }, { 'mediumblue', 0,0,205 },{ 'mediumorchid', 186,85,211 },{ 'mediumpurple', 147,112,219 },{ 'mediumseagreen', 60,179,113 }, { 'mediumslateblue', 123,104,238 },{ 'mediumspringgreen', 0,250,154 },{ 'mediumturquoise', 72,209,204 },{ 'mediumvioletred', 199,21,133 }, { 'midnightblue', 25,25,112 },{ 'mintcream', 245,255,250 },{ 'mistyrose', 255,228,225 },{ 'moccasin', 255,228,181 }, { 'navajowhite', 255,222,173 },{ 'navy', 0,0,128 },{ 'oldlace', 253,245,230 },{ 'olive', 128,128,0 }, { 'olivedrab', 107,142,35 },{ 'orange', 255,165,0 },{ 'orangered', 255,69,0 },{ 'orchid', 218,112,214 }, { 'palegoldenrod', 238,232,170 },{ 'palegreen', 152,251,152 },{ 'paleturquoise', 175,238,238 },{ 'palevioletred', 219,112,147 }, { 'papayawhip', 255,239,213 },{ 'peachpuff', 255,218,185 },{ 'peru', 205,133,63 },{ 'pink', 255,192,203 }, { 'plum', 221,160,221 },{ 'powderblue', 176,224,230 },{ 'purple', 128,0,128 },{ 'red', 255,0,0 }, { 'rosybrown', 188,143,143 },{ 'royalblue', 65,105,225 },{ 'saddlebrown', 139,69,19 },{ 'salmon', 250,128,114 }, { 'sandybrown', 244,164,96 },{ 'seagreen', 46,139,87 },{ 'seashell', 255,245,238 },{ 'sienna', 160,82,45 }, { 'silver', 192,192,192 },{ 'skyblue', 135,206,235 },{ 'slateblue', 106,90,205 },{ 'slategray', 112,128,144 }, { 'snow', 255,250,250 },{ 'springgreen', 0,255,127 },{ 'steelblue', 70,130,180 },{ 'tan', 210,180,140 }, { 'teal', 0,128,128 },{ 'thistle', 216,191,216 },{ 'tomato', 255,99,71 },{ 'turquoise', 64,224,208 }, { 'violet', 238,130,238 },{ 'wheat', 245,222,179 },{ 'white', 255,255,255 },{ 'whitesmoke', 245,245,245 }, { 'yellow', 255,255,0 },{ 'yellowgreen', 154,205,50 }} table.foreachi(col.list,function(a,b) col[b[1]] = function(text) return "[COLOR r;"..(b[2]/255.0).."|g;"..(b[3]/255.0).."|b;"..(b[4]/255.0).."]"..text..'[/COLOR]' end end) ------------------------------------------------------------------------------- -- ZEIT - FUNKTIONEN --- Tage zt.d_j = function(d) return d/365 end zt.d_mo = function(d) return d/12 end zt.d_h = function(d) return d*24 end zt.d_m = function(d) return d*24*60 end zt.d_s = function(d) return d*24*60*60 end zt.d_hs = function(d) return d*24*60*60*100 end zt.d_ms = function(d) return d*24*60*60*1000 end --- Stunden zt.h_j = function(h) return h/24/365 end zt.h_mo = function(h) return h/24/12 end zt.h_d = function(h) return h/24 end zt.h_m = function(h) return h*60 end zt.h_s = function(h) return h*60*60 end zt.h_hs = function(h) return h*60*60*100 end zt.h_ms = function(h) return h*60*60*1000 end --- Minuten zt.m_j = function(m) return m/60/24/365 end zt.m_mo = function(m) return m/60/24/12 end zt.m_d = function(m) return m/60/24 end zt.m_h = function(m) return m/60 end zt.m_s = function(m) return m*60 end zt.m_hs = function(m) return m*60*100 end zt.m_ms = function(m) return m*60*1000 end --- Sekunden zt.s_j = function(s) return s/60/60/24/365 end zt.s_mo = function(s) return s/60/60/24/12 end zt.s_d = function(s) return s/60/60/24 end zt.s_h = function(s) return s/60/60 end zt.s_m = function(s) return s/60 end zt.s_hs = function(s) return s*100 end zt.s_ms = function(s) return s*1000 end ------------------------------------------------------------------------------- -- PC - Funktionen function local_pc_warp(name, x, y,mid) local target = find_pc_by_name(name) local t = pc.select(target) if mid == nil then mid = pc.get_map_index() end pc.warp_local(mid, x*100, y*100) pc.select(t) end function pc.warp_to(vid) if vid == nil then error"VID muss gesetzt sein! (pc.warp_to)" elseif type(vid) == "string" then vid = find_pc_by_name(vid) if vid == 0 then error"Spieler nicht gefunden" end end local me = pc.select(vid) local x,y = pc.get_x()*100,pc.get_y()*100 pc.select(me) pc.warp(x,y) end function pc.trans(vid) if vid == nil then error"VID muss gesetzt sein! (pc.warp_to)" elseif type(vid) == "string" then vid = find_pc_by_name(vid) if vid == 0 then error"Spieler nicht gefunden" end end local x,y = pc.get_x()*100,pc.get_y()*100 local me = pc.select(vid) pc.warp(x,y) pc.select(me) end function local_pc_setqf(name, qf,wert) -- Für die aktuelle Quest local target = find_pc_by_name(name) local t = pc.select(target) pc.setqf(qf,wert) pc.select(t) end function do_for_other(name,ding) local t = pc.select(find_pc_by_name(name)) assert(loadstring(ding))() pc.select(t) end function pc.check_inventory_place(size) if size <= 0 or size > 3 then return -1 end function check(c) for i = 0,size-1 do item.select_cell(e[c+(5*i)]) if item.get_id() ~= 0 then return false end end return true end for i = 0,89 do if check(i) then return i end end return -1 end ------------------------------------------------------------------------------- -- ALLGEMEINE FUNKTIONEN function dot(x)-- Führt alles zwischen $ $ aus. Verschachtelungen nicht in einem Aufruf möglich. return string.gsub(x, "%$(.-)%$", function (s) return loadstring(s)() end) end function download(url) os.execute("cd data && fetch "..url.." && cd ..") end ql.test = function() print('Die Lib Funktioniert!') chat('Die Lib Funktioniert!') end ql.about = function() print('Diese Lib wurde von Mijago programmiert.') chat('Diese Lib wurde von Mijago programmiert.') end function note(text) notice_all('|>~ '..text) end function split(str, delim, maxNb) -- Eliminate bad cases... if str == nil then return str end if string.find(str, delim) == nil then return { str } end if maxNb == nil or maxNb < 1 then maxNb = 0 -- No limit end local result = {} local pat = "(.-)" .. delim .. "()" local nb = 0 local lastPos for part, pos in string.gfind(str, pat) do nb = nb + 1 result[nb] = part lastPos = pos if nb == maxNb then break end end -- Handle the last field if nb ~= maxNb then result[nb + 1] = string.sub(str, lastPos) end return result end function getn(list) local i = 0 table.foreachi(list, function(a,b) i = i+1 end) return i end function join(delimiter, list) local len = getn(list) if len == 0 then return "" end local string = list[1] for i = 2, len do string = string .. delimiter .. list[i] end return string end function is_table(var) if (type(var) == "table") then return true else return false end end function is_number(var) if (type(var) == "number") then return true else return false end end function is_string(var) if (type(var) == "string") then return true else return false end end function in_table ( e, t ) for _,v in pairs(t) do if (v==e) then return true end end return false end function in_text(str,te) for i = 0,string.len(str) do if string.sub(str, i,i+string.len(te)-1) == te then return i end end return -1 end function machweg(str,weg) while in_text(str,weg) == true do for i = 0,string.len(str) do if string.sub(str, i,i+string.len(weg)-1) == weg then str = string.sub(str,0,i-1)..string.sub(str,i+string.len(weg),string.len(str)) end end end return str end -- string.gsub(str,weg,'') reicht auch xD function numlen(num) return string.len(tostring(num)) end function delay_s(delay) delay = delay or 1 local time_to = os.time() + delay while os.time() < time_to do end end function distance(x1,y1,x2,y2) dx=x2-x1 dy=y2-y1 dist=math.sqrt(math.pow(dx,2)+math.pow(dy,2)) return dist end function makereadonly(t) -- the metatable local mt = { __index = t, __newindex = function(t, k, v) error("trying to modify constant field " .. tostring(k), 2) end } return setmetatable({}, mt) end function allwords () local line = io.read() local pos = 1 return function() while line do local s, e = string.find(line, "%w+", pos) if s then pos = e + 1 return string.sub(line, s, e) else line = io.read() pos = 1 end end return nil end end function case(wert,...) arg.n = nil for _,b in arg do if b[1] == wert or b[1] == nil then return b[2]() end end end function is(n, f) return {n, f} end function def(f) return {nil, f} end ------------------------------------------------------------------------------- -- Iniparser & -writer do -- Funktionen: -- var = ini.new() -- var = ini.open(path) -- var:write_str(sub,name,wert) -- var:write_int(sub,name,wert) -- var:write_bool(sub,name,boolean) -- var:clear() -- var:read_str(sub,name,norm) -- Gibt einen String zurück. -| -- var:read_int(sub,name,norm) -- Gibt eine zahl zurück -| norm wird zurückgegeben, wenn sub[name] nicht existiert. -- var:read_bool(sub,name,norm) -- Gibt true / False zurück -| -- var:delete_key(sub,nm) -- var:delete_section(sub) local ini_f = {} ini = {} function ini_f:append(sub,nm,wert) if nm == '' or nm == nil then return end self:parse() if self.sub[sub] == nil then self.sub[sub] = {} end self.sub[sub][nm] = wert self:writeit() end function ini_f:write_str(sub,nm,wert) self:append(sub,nm,wert) end function ini_f:write_int(sub,nm,wert) self:append(sub,nm,wert) end function ini_f:write_bool(sub,nm,bool) if not type(bool) == "boolean" then return end local bin = 0 if bool == true then bin = 1 end self:append(sub,nm,bin) return bin end function ini_f:clear() self.sub = {} self.path = '' end function ini_f:writeit() local out = '' table.foreach(self.sub, function(i,l) out = out..'['..i..']n' table.foreach(l, function(i2,l2) out=out..i2..'='..l2..'n' end ) end ) local d = io.open(self.path,'w') d:write(out) d:close() end function ini_f:delete_key(sub,nm) if sub == '' or nm == '' or sub == nil or nm == nil then return end self:parse() self.sub[sub][nm] = nil self:writeit() end function ini_f:delete_section(sub) if sub == '' or sub == nil then return end self:parse() self.sub[sub]= nil self:writeit() end function ini_f:parse() self.sub = {} if self.path == '' or self.path == nil then return end local d,i = io.open(self.path,"r"),'non' if d == nil then d = io.open(self.path,"w") end for line in d:lines() do if string.sub(line,1,1) == "[" then i = string.sub(line,2,string.len(line)-1) self.sub[i] = {} else local inp = split(line,'=') self.sub[i][inp[1]] = inp[2] end end d:close() end function ini_f:read_str(sub,nm,norm) if sub == '' or nm == '' or sub == nil or nm == nil then return end self:parse() if self.sub[sub] == nil then return norm end if self.sub[sub][nm] == nil then return norm else return self.sub[sub][nm] end end function ini_f:read_int(sub,nm,norm) if sub == '' or nm == '' or sub == nil or nm == nil then return end self:parse() if self.sub[sub] == nil then return norm end if self.sub[sub][nm] == nil then return norm else return tonumber(self.sub[sub][nm]) end end function ini_f:read_bool(sub,nm,norm) -- Norm wird zurückgegeben, wenn der Key nm nicht existiert if sub == '' or nm == '' or sub == nil or nm == nil then return end self:parse() if self.sub[sub] == nil then return norm end if self.sub[sub][nm] == nil then return norm end if self.sub[sub][nm] == "1" then return true else return false end end function ini_f:open(path) self.path = path self:parse() end function ini.new() local out = {} out.path = '' out.sub = {} setmetatable(out, { __index = ini_f }) return out end function ini.open(path) local dat = ini.new() dat:clear() dat.path=path dat:open(path) return dat end end ------------------------------------------------------------------------------- -- Programmsteuerung proc.apache_start = function() os.execute('apachectl start') end proc.apache_stop = function() os.execute('apachectl stop') end proc.apache_restart = function() os.execute('apachectl restart') end proc.apache_graceful = function() os.execute('apachectl graceful') end proc.ts3_start = function(path) os.execute('cd '..path..' && sh ts3server_startscript.sh start') end proc.ts3_stop = function(path) os.execute('cd '..path..' && sh ts3server_startscript.sh stop') end proc.ts3_restart = function(path) os.execute('cd '..path..' && sh ts3server_startscript.sh restart') end ------------------------------------------------------------------------------- --[[ Funktionsliste download(url) -> lädt die Datei in den Data-Ordner ql.test() -> gibt einen Teststring aus. (Zum testen, ob die Lib funktionert) ql.about() -> Gibt Informationen über das Script aus col.[FARBNAME] -> Gibt Text in say() farbig aus. Englische Farbnamen! (Beinhaltet 281 Farben) [String] note(text) -> Entspricht notice_all('|>~ TEXT') local_pc_setqf(name,qf,wert) -> Setzt bei einem Anderen Spieler eine Quest-flag local_pc_warp(name, x, y,mid) -> Teleportiert den Spieler NAME an die Kooridinaten x & y auf der Map mit dem index mid. mid kann auch leer bleiben do_for_other(name,dot) -> Führt die Befehle in dot für den Spieler name aus. Mit ; trennen writelog(text,var,file) -> Füllt die Logs. 1 = syserr, 2 = syslog, 3 = "file" doit(cmd) -> Führt einen FreeBSD Befehl aus (auch Befehlsketten mit &&) --- Spezielle pci:new(name) -> erstellt auf der genutzten Variable (zb pt = pci:new('[SA]Mijago') ) eine Liste mit allen Info's über den Spieler (alle Spalten aus player.player) pci:update -> updatet die mit pci:new erstellte Variable select2(tab) -> Sortiert eine Tabelle in Selects; auf Seiten aufgeteilt. Der erste Tabelleneintrag muss eine Zahl sein; Sie gibt die maximale Anzahl der Select-Einträg / Seite an. --- MySQL mysql_query(query,user,pw,db,ip) -> wie php mysql_query (gibt es auch so aus: out.id[1] = 7754 zB) mysql_query2(query,user,pw,db,ip) -> NUR für Query's wie Update, Insert etc. mysql_escape(str) -> Equivalent mit dem aus PHP bekannten mysql_escape_real_string backup() -> Backuppt alle MySQL-Datenbanken backup_main() -> Backuppt die wichtigsten MySQL-Datenbanken backup_files() -> Backuppt den Share - Ordner --- Lua-erweiterung watch_table(tab) -> Schreibt alle änderungen an der Tabelle in eine Datei. arraytoselect(array,abbr) -> erstellt aus einem Array eine Select()-Abfrage und gibt deren Auswahl zurück. Wenn "abbr" gesetzt ist, fügt die Funktion einen eintrag mit dem Wert von "abbr" ein. is_table(var) -> Prüft, ob eine Variable eine Tabelle ist [boolean] is_string(var) -> Prüft, ob eine Variable ein String ist [boolean] is_number(var) -> Prüft, ob eine Variable eine Zahl ist [boolean] in_table(e,t) -> Prüft, ob e in dem Array t vorhanden ist. [boolean] in_table(str,te) -> Prüft, ob te in dem string str vorhanden ist. [boolean] machweg(str,weg) -> Entfernt alle 'weg' aus 'str' [string] split(str, delim, maxNb) -> Teilt den Text 'str' mit dem Delimenter 'delim' auf (in maximal 'maxNb' Teile). maxNb kann leer gelassen werden. [Array] join(delimiter, list) -> Gegenteil von Split. List ist ein Array. Bsp: s = join('|',{'a','b'}) -> s = 'a|b' getn(array) -> Gibt die Anzahl der Einträge eines Array's aus. [Integer] delay_s(delay) -> Scriptpause für -delay- Sekunden numlen(num) -> gibt die Anzahl der Ziffern in der Zahl num an [Integer] distance(x1,y1,x2,y2) -> Distanz zwischen 2 Punkten [Integer] makereadonly(t) -> Sperrt die Tabelle (ReadOnly) allwords() -> Liest alle Wörter aus einer Datei und gibt sie zurück. Vorher io.open! --- Zeitrechnungen zt.d_j(d) -> Tage zu Jahre zt.d_mo(d) -> Tage zu Monate zt.d_h(d) -> Tage zu Stunden zt.d_m(d) -> Tage zu Minuten zt.d_s(d) -> Tage zu Sekunden zt.d_hs(d) -> Tage zu Hunderstelsekunden zt.d_ms(d) -> Tage zu Millisekunden zt.h_j(h) -> Stunden zu Jahre zt.h_mo(h) -> Stunden zu Monate zt.h_d(h) -> Stunden zu Tage zt.h_m(h) -> Stunden zu Minuten zt.h_s(h) -> Stunden zu Sekunden zt.h_hs(h) -> Stunden zu Hunderstelsekundne zt.h_ms(h) -> Stunden zu Millisekunden zt.m_j(m) -> Minuten zu Jahre zt.m_mo(m) -> Minuten zu Monate zt.m_d(m) -> Minuten zu Tage zt.m_h(m) -> Minuten zu Stunden zt.m_s(m) -> Minuten zu Sekunden zt.m_hs(m) -> Minuten zu Hunderstelsekunden zt.m_ms(m) -> Minuten zu Millisekunden zt.s_j(s) -> Sekunden zu Jahre zt.s_mo(s) -> Sekunden zu Monate zt.s_d(s) -> Sekunden zu Tage zt.s_h(s) -> Sekunden zu Stunden zt.s_m(s) -> Sekunden zu Minuten zt.s_hs(s) -> Sekunden zu Hunderstelsekunden zt.s_ms(s) -> Sekunden zu Millisekunden --- Programmbasierende Befehle proc.apache_start() -> Startet Apache proc.apache_stop() -> Stoppt Apache proc.apache_restart() -> Startet Apache neu proc.apache_graceful() -> Startet Apache neu, ohne vorhandene Verbindungen zu kappen proc.ts3_start(path) -> Startet den Teamspeak3 Server im Pfad 'path' proc.ts3_stop(path) -> Startet den Teamspeak3 Server im Pfad 'path' neu proc.ts3_restart(path) -> Stopp den Teamspeak3 Server im Pfad 'path' --]] makereadonly(col) makereadonly(zt) makereadonly(proc) makereadonly(ql) -- Compat 5.1 Release 5 Einbindung if mijago_include_compat then -- -- Compat-5.1 -- Copyright Kepler Project 2004-2006 (Debes iniciar sesión para ver el contenido del enlace en esta publicación.) -- According to Lua 5.1 -- $Id: compat-5.1.lua,v 1.22 2006/02/20 21:12:47 carregal Exp $ -- _COMPAT51 = "Compat-5.1 R5" local LUA_DIRSEP = '/' local LUA_OFSEP = '_' local OLD_LUA_OFSEP = '' local POF = 'luaopen_' local LUA_PATH_MARK = '?' local LUA_IGMARK = ':' local assert, error, getfenv, ipairs, loadfile, loadlib, pairs, setfenv, setmetatable, type = assert, error, getfenv, ipairs, loadfile, loadlib, pairs, setfenv, setmetatable, type local find, format, gfind, gsub, sub = string.find, string.format, string.gfind, string.gsub, string.sub -- -- avoid overwriting the package table if it's already there -- package = package or {} local _PACKAGE = package package.path = LUA_PATH or os.getenv("LUA_PATH") or ("./?.lua;" .. "./pack/?.lua;" .. "/usr/local/share/lua/5.0/?.lua;" .. "/usr/local/share/lua/5.0/?/?.lua;" .. "/usr/local/share/lua/5.0/?/init.lua" ) package.cpath = LUA_CPATH or os.getenv("LUA_CPATH") or "./?.so;" .. "./pack/?.so;" .. "./l?.so;" .. "/usr/local/lib/lua/5.0/?.so;" .. "/usr/local/lib/lua/5.0/l?.so" -- -- make sure require works with standard libraries -- package.loaded = package.loaded or {} package.loaded.debug = debug package.loaded.string = string package.loaded.math = math package.loaded.io = io package.loaded.os = os package.loaded.table = table package.loaded.base = _G package.loaded.coroutine = coroutine local _LOADED = package.loaded -- -- avoid overwriting the package.preload table if it's already there -- package.preload = package.preload or {} local _PRELOAD = package.preload -- -- looks for a file `name' in given path -- local function findfile (name, pname) name = gsub (name, "%.", LUA_DIRSEP) local path = _PACKAGE[pname] assert (type(path) == "string", format ("package.%s must be a string", pname)) for c in gfind (path, "[^;]+") do c = gsub (c, "%"..LUA_PATH_MARK, name) local f = io.open (c) if f then f:close () return c end end return nil -- not found end -- -- check whether library is already loaded -- local function loader_preload (name) assert (type(name) == "string", format ( "bad argument #1 to `require' (string expected, got %s)", type(name))) assert (type(_PRELOAD) == "table", "`package.preload' must be a table") return _PRELOAD[name] end -- -- Lua library loader -- local function loader_Lua (name) assert (type(name) == "string", format ( "bad argument #1 to `require' (string expected, got %s)", type(name))) local filename = findfile (name, "path") if not filename then return false end local f, err = loadfile (filename) if not f then error (format ("error loading module `%s' (%s)", name, err)) end return f end local function mkfuncname (name) name = gsub (name, "^.*%"..LUA_IGMARK, "") name = gsub (name, "%.", LUA_OFSEP) return POF..name end local function old_mkfuncname (name) --name = gsub (name, "^.*%"..LUA_IGMARK, "") name = gsub (name, "%.", OLD_LUA_OFSEP) return POF..name end -- -- C library loader -- local function loader_C (name) assert (type(name) == "string", format ( "bad argument #1 to `require' (string expected, got %s)", type(name))) local filename = findfile (name, "cpath") if not filename then return false end local funcname = mkfuncname (name) local f, err = loadlib (filename, funcname) if not f then funcname = old_mkfuncname (name) f, err = loadlib (filename, funcname) if not f then error (format ("error loading module `%s' (%s)", name, err)) end end return f end local function loader_Croot (name) local p = gsub (name, "^([^.]*).-$", "%1") if p == "" then return end local filename = findfile (p, "cpath") if not filename then return end local funcname = mkfuncname (name) local f, err, where = loadlib (filename, funcname) if f then return f elseif where ~= "init" then error (format ("error loading module `%s' (%s)", name, err)) end end -- create `loaders' table package.loaders = package.loaders or { loader_preload, loader_Lua, loader_C, loader_Croot, } local _LOADERS = package.loaders -- -- iterate over available loaders -- local function load (name, loaders) -- iterate over available loaders assert (type (loaders) == "table", "`package.loaders' must be a table") for i, loader in ipairs (loaders) do local f = loader (name) if f then return f end end error (format ("module `%s' not found", name)) end -- sentinel local sentinel = function () end -- -- new require -- function _G.require (modname) assert (type(modname) == "string", format ( "bad argument #1 to `require' (string expected, got %s)", type(name))) local p = _LOADED[modname] if p then -- is it there? if p == sentinel then error (format ("loop or previous error loading module '%s'", modname)) end return p -- package is already loaded end local init = load (modname, _LOADERS) _LOADED[modname] = sentinel local actual_arg = _G.arg _G.arg = { modname } local res = init (modname) if res then _LOADED[modname] = res end _G.arg = actual_arg if _LOADED[modname] == sentinel then _LOADED[modname] = true end return _LOADED[modname] end -- findtable local function findtable (t, f) assert (type(f)=="string", "not a valid field name ("..tostring(f)..")") local ff = f.."." local ok, e, w = find (ff, '(.-)%.', 1) while ok do local nt = rawget (t, w) if not nt then nt = {} t[w] = nt elseif type(t) ~= "table" then return sub (f, e+1) end t = nt ok, e, w = find (ff, '(.-)%.', e+1) end return t end -- -- new package.seeall function -- function _PACKAGE.seeall (module) local t = type(module) assert (t == "table", "bad argument #1 to package.seeall (table expected, got "..t..")") local meta = getmetatable (module) if not meta then meta = {} setmetatable (module, meta) end meta.__index = _G end -- -- new module function -- function _G.module (modname, ...) local ns = _LOADED[modname] if type(ns) ~= "table" then ns = findtable (_G, modname) if not ns then error (string.format ("name conflict for module '%s'", modname)) end _LOADED[modname] = ns end if not ns._NAME then ns._NAME = modname ns._M = ns ns._PACKAGE = gsub (modname, "[^.]*$", "") end setmetatable(ns, {__index = _G}) setfenv (2, ns) for i, f in ipairs (arg) do f (ns) end end end
  6. Me Gusta
    diper got a reaction from Wananazo Music in Nuevo encryptyador para el publico   
    Jajaja despues de que te enseñe a encryptar jajajaja dises que no sean ratas jajajaja
  7. Gracias
    diper got a reaction from Ronald Eduardo Sosa Shilta in Nuevo encryptyador para el publico   
    Jajaja despues de que te enseñe a encryptar jajajaja dises que no sean ratas jajajaja
  8. Me Gusta
    diper got a reaction from Phyton89 in Nuevo encryptyador para el publico   
    Jajaja despues de que te enseñe a encryptar jajajaja dises que no sean ratas jajajaja
  9. Me Gusta
    diper got a reaction from Metin2Sparda in Nuevo encryptyador para el publico   
    Jajaja despues de que te enseñe a encryptar jajajaja dises que no sean ratas jajajaja
  10. Me Gusta
    diper reacted to SeMa™ in Age Of Metin Decrypt.   
    Buenas , hoy os vengo a traer el desencriptador del age of metin un cliente que lleva un par de cosillas que quizas os interesen.
     
    Trailer:
     
     

     
     
    Web:
     

    Debes iniciar sesión para ver el contenido del enlace en esta publicación.  
     
     
    AoM_m2.rar (86 KB)

    Debes iniciar sesión para ver el contenido del enlace en esta publicación.  
    Un saludo.
  11. Me Gusta
    diper got a reaction from anferny20 in [AYUDA]Necesito 3DS MAX y plugins   
    noseaas gay yo los tengo hablamos en skype y te paso el plugin busca el 3d max 7 o 8 no las otras versiones sin no las lite del 3d masx de esos dos entaringa estan los 3d max
  12. Me Gusta
    diper reacted to Akroma in Guia para convertirse en un buen desencriptador   
    Bueno MZ, debido a mi ausencia de vacaciones, e ido meditando el hacer 1 guia para convertiros en desencriptadores i dominar italia :trolldad: , al cabo de mucho pensarlo, decidire publicar 1 extensa guia dividida en varias partes, en la qual aprendereis, desde que programas usar para desencriptar a mano, hasta algun que otro arxivo python que he creado io que te saca todo lo que es cambiable en el cliente, tambien os digo que el echo de que sepamos invertir processos de desencriptacion no significa que podamos hacerlas, vease el ejemplo de los types del .es.
     
    Division de las guias:
    1- (esta) Presentacion de contenidos a estudiar en las guias.
     
    2- Programas, que se usaran i varios trucos para tener 1 desencriptacion/encriptacion rapida i limpia.
     
    3- desencriptacion manual, lo qual incluye: editacion de m2.exe, formato de extension del .epk, xml corrupto, LZO, types, i arxivos .VI del .sg
     
    4- en esta parte se arian practicas, colgaria 1 root, con varias encriptaciones puestas por mi, i debereis desencriptarlo, el echo de que nadie lo consiga no significa que el arxivo se ponga desencriptado, aparte pondre arxivos buenos, como pueden ser cosas del infinity metin2, i demas servers que andan full encriptados, pero pasados por mi mano antes.
     
    5- Dudas i preguntas
  13. Me Gusta
    diper reacted to Serex in [Release]Cliente Metin2 Extasis + Descompilador   
    Muchos de vosotros recordareis Metin2 Extasis, un servidor que dió mucho que hablar, un servidor innovador, uno de los mejores que han pasado por este foro, en mi opinión claro.
     
    De parte del equipo de Metin2 Zone os traemos todo nuestro antiguo trabajo, el cliente Metin2 Extasis COMPLETO y repito COMPLETO, tiene todo implementado esta perfecto para usarse, es la ultima versión del cliente de Metin2 Extasis.
     
    Como sabeis este cliente se encontraba encriptado, pues decidimos publicar el desencriptador para el cliente con lo que todos podreis usar y moldear el cliente a vuestro gusto, ademas de sacar lo que os guste de el.
     
     
    Aqui os dejo mas información sobre que trae este cliente:
     
    -Habilidades mejoradas con un mejor diseño.
     

     
    -Tema cristalino en español
     
    -Item_proto en español incluyendo gran parte de las nuevas armas,armaduras y accesorios.
     
    -Mob_proto en español incluyendo gran parte de nuevos mobs.
     
    -Sistema de puntos de logro listo para usar en el cliente(Aunque debes disponer de el en el servidor).
     

     
    -Nuevos mapas que pocos abreis visto, a parte de los de las fotos hay muchos mas implementados.
     
    -Tambien podreis ver gran parte de los nuevos mobs implementados.
     

     

     

     

     
     
     
    -Armaduras nuevas implementadas.
     

     
     

     
    -Infinidad de nuevas armas, muchas mas a parte de las de las fotos:
     

    Debes iniciar sesión para ver el contenido del enlace en esta publicación.
    Debes iniciar sesión para ver el contenido del enlace en esta publicación.
    Debes iniciar sesión para ver el contenido del enlace en esta publicación.
    Debes iniciar sesión para ver el contenido del enlace en esta publicación.
    Debes iniciar sesión para ver el contenido del enlace en esta publicación.
    Debes iniciar sesión para ver el contenido del enlace en esta publicación.
    Debes iniciar sesión para ver el contenido del enlace en esta publicación.  
    -Nuevos sellos para las monturas:
     

     
    -Nuevas monturas implementadas y atacan:
     

    http-~~-//www.youtube.com/watch?v=24-_YoXcLq4&feature=player_embedded
     
    -Nuevas mascotas implementadas:
     

    Debes iniciar sesión para ver el contenido del enlace en esta publicación.
    Debes iniciar sesión para ver el contenido del enlace en esta publicación.
    Debes iniciar sesión para ver el contenido del enlace en esta publicación.
    Debes iniciar sesión para ver el contenido del enlace en esta publicación.
    Debes iniciar sesión para ver el contenido del enlace en esta publicación.
    Debes iniciar sesión para ver el contenido del enlace en esta publicación.  
    -Ademas de todo esto cuenta con un excelente diseño, y un excelente loguin, con teclado, y la opcion de guardar contraseña y ID.
     

     
    Bueno y ya todos os estareis preguntando:
    ¿Donde lo descargo como lo consigo?
     
     

    Debes iniciar sesión para ver el contenido del enlace en esta publicación.
    Debes iniciar sesión para ver el contenido del enlace en esta publicación.  
    La contraseña de los .rar es: www.Metin2Zone.net
  14. Me Gusta
    diper got a reaction from ahynoa in Nuevo questlib 2012 aun en test   
    Hola Amigos de Metin zone les traigo este ques lib 2012 mas complejo que aun no ee testeado muy bien pero ee tomado algunas funciones pero parese que trae nuevas funcionas para las nuevas quest que estan saliiendo en foros alemanes y italianos espero que les sirva.
     

    print('Questlib by Mijago | 22.03.2012') ql = {} col = {} zt = {} proc = {} -- Einstellungen zur Lib: mijago_include_compat = true do -- Zur Nutzung auf Windoof | MySQL funktioniert auf Windoof nicht! local old_print = print if number == nil then number = function(i,l) return math.random(i,l) end end if pc == nil then pc = {} pc.get_name = function() return '-name-' end pc.count_item = function() return 200 end pc.remove_item = function() return end pc.give_item = function(i,l) print('<GiveItem>',i,l) end pc.warp = function(i,l) print('<Warp>',i,l) end pc.warp_local = function(m,x,y) print('<Warp>',m,x,y) end pc.give_item2 = pc.give_item pc.get_map_index = function() return 1 end pc.get_local_y = function() return 200 end pc.get_local_x = function() return 400 end pc.get_empire = function() return 2 end pc.getqf = function() return 222313 end get_time = os.time end if cmdchat == nil then cmdchat = function() old_print('<cmdchat>') end end if wait == nil then wait = function () old_print('<wait>') end end if input == nil then input = function () old_print('<input>'); return 101 end end if say == nil then say = function (...) local st = '' table.foreachi(arg,function(i,l) st = st..l..'t' end) old_print('<say>',st) end end if chat == nil then chat = function (txt) old_print('<Chat>',txt) end end if notice == nil then notice = function (txt) old_print('<notice>',txt) end end if setbg == nil then setbg = function (txt) old_print('<setbg>',txt) end end if say_size == nil then say_size = function (a,b) old_print('<say_size>',a,b) end end if notice_all == nil then notice_all = function (txt) old_print('<notice_all>',txt) end end if game == nil then game = {} game.set_event_flag = function(a,b) print('<game.set_event_flag>',a,b) end end if select == nil then select = function (...) local st = '' table.foreachi(arg,function(i,l) st = st..l..'t' end) old_print('<select>',st) return math.random(0,table.getn(arg)) end end end doit = os.execute ql.mysql = { ["user"] = "root", ["pass"] = "", ["ip"] = "localhost", } ------------------------------------------------------------------------------- -- function select2(tab,...) arg.n = nil if type(tab) ~= "table" and type(tab) == 'number' then table.insert(arg,1,tab) tab = arg elseif type(tab) ~= "table" and type(tab) == 'string' then table.insert(arg,1,tab) table.insert(arg,1,8) tab = arg elseif type(tab) == "table" and type(tab[1]) == 'string' then table.insert(tab,1,8) end local max = tab[1]; table.remove(tab,1) local tablen,outputstr,outputcount,nextc,incit = table.getn(tab),"",0,0,0 table.foreach(tab, function(i,l) outputcount = outputcount + 1 if outputcount == 1 then outputstr=outputstr..'sel = select("'..l..'"' elseif outputcount == max and tablen > outputcount+incit then if tablen ~= outputcount+incit+1 then outputstr=outputstr..',"'..l..'","Nächste Seite") + '..incit..' ' if nextc > 0 then outputstr = outputstr..'end ' end outputstr=outputstr..'; if sel == '..(incit+max+1)..' then ' -- Anfangen der neuen Abfrage nextc, outputcount, incit= nextc+1,0,incit+max else outputstr=outputstr..',"'..l..'"' end else outputstr=outputstr..',"'..l..'"' end end ) outputstr = outputstr..') + '..incit if nextc > 0 then outputstr = outputstr..' end' end outputstr= outputstr.. '; return sel' print(outputstr) local sel = assert(loadstring(outputstr))() tablen,outputstr,outputcount,nextc,incit = nil,nil,nil,nil,nil -- Speicher freimachen return sel end function arraytoselect(arr,abbr) local d = 'sel = select(' local i = 0 for i=1,getn(arr),1 do d = d..'"'..arr[i]..'",' if abbr ~= nil then if i == getn(arr) then d = d..'"'..abbr..'"' end end end d = d..")nreturn sel" return assert(loadstring(d))() end function dostr(str) assert(loadstring(str))() end ------------------------------------------------------------------------------- -- Veränderte Lua-Funktionen do local old_tonumber = tonumber tonumber = function(str) if old_tonumber(str) == nil then return 0,false else return old_tonumber(str),true end end end ------------------------------------------------------------------------------- -- Datenspeicherung function writelog(text,var,file) if var == nil then var = 1 end if var == 1 then local data = io.open('syserr','a+') data:write(os.date()..'::t'..text.."n") data:close() elseif var == 2 then local data = io.open('syslog','a+') data:write(os.date()..'::t'..text.."n") data:close() elseif var == 3 then local data = io.open(file,'a+') data:write(os.date()..'::t'..text.."n") data:close() end end function watch_table(tab) local meta,myname,tabn = {},pc.get_name(),tostring(tab) local lo = function(typ,index,wert) writelog(tabn..' - '..myname..': '..typ..' ['..index..'] = '..wert,3,'tables') end meta.__newindex = function(ta,index,wert) --writelog(tabn..' - '..myname..': Newindex ['..index..'] = '..wert,3,'tables') lo('newindex',index,wert) rawset(ta,index,wert) end meta.__index = function(ta,index,wert) lo('index',index,wert) error('Fehlerhafter Zugriff bei '..index) end meta.__call = function(ta,index,wert) lo('call',index,wert) end setmetatable(tab, meta) end ------------------------------------------------------------------------------- -- account account = account or {} function account.set_pw(pw,ac) if pw == nil then error("Fehler... Passwort muss gesetzt werden!") end if ac == nil then ac = pc.get_account_id() end if type(ac) == "string" then mysql_query("UPDATE player.player,account.account SET account.password = password('"..pw.."') WHERE account.id = player.account_id and player.name = '"..ac.."' LIMIT 1") elseif type(ac) == "number" then mysql_query("UPDATE account.account SET account.password = password('"..pw.."') WHERE account.id = "..ac) end end ------------------------------------------------------------------------------- -- PCI pci = {} function pci:new(name) local out = {} if name == nil then name = pc.get_name() end local info = mysql_query("SELECT * FROM player.player WHERE name = '"..name.."' LIMIT 1",ql.mysql["user"],ql.mysql["pass"],ql.mysql["ip"]) local reich = mysql_query("select player_index.empire FROM player.player INNER JOIN player.player_index ON player.account_id = player_index.id WHERE player.name = '"..pc.get_name().."'",ql.mysql["user"],ql.mysql["pass"],ql.mysql["ip"]) out.name = name out.level = info.level[1] out.playtime = info.playtime[1] out.job = info.job[1] out.account_id = info.account_id[1] out.id = info.id[1] out.voice = info.voice[1] out.dir = info.dir[1] out.x = info.x[1] out.y = info.y[1] out.z = info.z[1] out.map_index = info.map_index[1] out.exit_y = info.exit_y[1] out.exit_x = info.exit_x[1] out.exit_map_index = info.exit_map_index[1] out.hp = info.hp[1] out.mp = info.mp[1] out.stamina = info.stamina[1] out.random_hp = info.random_hp[1] out.random_sp = info.random_sp[1] out.level_step = info.level_step[1] out.st = info.st[1] out.ht = info.ht[1] out.dx = info.dx[1] out.iq = info.iq[1] out.exp= info.exp[1] out.gold = info.gold[1] out.stat_point = info.stat_point[1] out.skill_point = info.skill_point[1] out.ip = info.ip[1] out.part_main = info.part_main[1] out.part_hair = info.part_hair[1] out.skill_group = info.skill_group[1] out.last_play = info.last_play[1] out.alignment = info.alignment[1] out.change_name = info.change_name[1] out.sub_skill_point = info.sub_skill_point[1] out.horse_skill_point = info.horse_skill_point[1] out.horse_riding = info.horse_riding[1] out.horse_hp_droptime = info.horse_hp_droptime[1] out.horse_level = info.horse_level[1] out.horse_stamina = info.horse_stamina[1] out.horse_hp = info.horse_hp[1] out.stat_reset_count = info.stat_reset_count[1] out.empire = reich.empire[1] setmetatable(out, { __index = pci }) print('Daten für '..name..' erfolgreich geladen!') return out end function pci:update() local info = mysql_query("SELECT * FROM player.player WHERE name = '"..self.name.."' LIMIT 1",ql.mysql["user"],ql.mysql["pass"],ql.mysql["ip"]) self.level = info.level[1] self.playtime = info.playtime[1] self.job = info.job[1] self.account_id = info.account_id[1] self.id = info.id[1] self.voice = info.voice[1] self.dir = info.dir[1] self.x = info.x[1] self.y = info.y[1] self.z = info.z[1] self.map_index = info.map_index[1] self.exit_y = info.exit_y[1] self.exit_x = info.exit_x[1] self.exit_map_index = info.exit_map_index[1] self.hp = info.hp[1] self.mp = info.mp[1] self.stamina = info.stamina[1] self.random_hp = info.random_hp[1] self.random_sp = info.random_sp[1] self.level_step = info.level_step[1] self.st = info.st[1] self.ht = info.ht[1] self.dx = info.dx[1] self.iq = info.iq[1] self.exp= info.exp[1] self.gold = info.gold[1] self.stat_point = info.stat_point[1] self.skill_point = info.skill_point[1] self.ip = info.ip[1] self.part_main = info.part_main[1] self.part_hair = info.part_hair[1] self.skill_group = info.skill_group[1] self.last_play = info.last_play[1] self.alignment = info.alignment[1] self.change_name = info.change_name[1] self.sub_skill_point = info.sub_skill_point[1] self.horse_skill_point = info.horse_skill_point[1] self.horse_riding = info.horse_riding[1] self.horse_hp_droptime = info.horse_hp_droptime[1] self.horse_level = info.horse_level[1] self.horse_stamina = info.horse_stamina[1] self.horse_hp = info.horse_hp[1] self.stat_reset_count = info.stat_reset_count[1] print('Daten für '..self.name..' erfolgreich geupdated!') end ------------------------------------------------------------------------------- -- Strings function rm_nlc(s) return string.gsub(s, "%A", "") end -- alles außer Buchstaben weg function rm_ndc(s) return string.gsub(s, "%D", "") end -- alles außer Zahlen weg function rm_lc(s) return string.gsub(s, "%a", "") end -- alle Buchstaben weg function rm_dc(s) return string.gsub(s, "%d", "") end -- alle Zahlen weg function rm_ucc(s) return string.gsub(s, "%u", "") end -- alle großgeschriebenen Buchstaben weg function rm_lcc(s) return string.gsub(s, "%l", "") end -- alle kleingeschriebenen Buchstaben weg function rm_nanc(s) return string.gsub(s, "%W", "") end -- alle nicht-alphanumerischen Zeichen weg function string.reverse(str) local se = '' for i=1,string.len(str) do se = string.sub(str,i,i)..se end return se end function num_format(num) if type(num) == "number" then num = tostring(num) end if string.len(num) <= 3 then return num end return string.reverse(string.gsub(string.reverse(num),'(%d%d%d)','%1.')) end function wartungsmodus(v) if v == 1 then mysql_query("UPDATE account.account SET account.status = 'SHUTDOWN' WHERE status = 'OK' and account.login NOT IN (SELECT mAccount FROM common.gmlist);") elseif v == 0 then mysql_query("UPDATE account.account SET account.status = 'OK' WHERE status = 'SHUTDOWN' and account.login NOT IN (SELECT mAccount FROM common.gmlist);") end end ------------------------------------------------------------------------------- --[[ iti iti = {} function iti:new(name) -- The constructor local out = {} local info = mysql_query_on("SELECT * FROM player.item WHERE vnum = "..name.." LIMIT 1") out.vnum = tonumber(name) setmetatable(out, { __index = iti }) -- Inheritance print('Daten für Item '..name..' erfolgreich geladen!') return out end --]] ------------------------------------------------------------------------------- -- Say CFG UNFINISHED - In Arbeit! --[[ sayer = {} function sayer:new() local out = {} out.maxlen = 50 out.maxlines = 15 out.lines=0 out.text = 'say("' self.sayopen = 1 setmetatable(out, { __index = sayer }) return out end function sayer:add(txt) if self.lines >= self.maxlines then self.lines = 0 self.text = self.text..'"); wait();' self.sayopen = 0 end if self.sayopen == 0 then self.text = self.text..' say("' self.sayopen = 1 end if self.lines ~= 0 then self.text = self.text ..'[ENTER]' end if string.len(txt) < self.maxlen then self.text = self.text ..txt end self.lines = self.lines+1 end function sayer:send() if self.sayopen == 1 then self.text = self.text..'"); ' self.sayopen = 1 end --assert(loadstring(self.text))() s.out=loadstring(self.text)() print(self.text) end function sayer:wait() if self.sayopen == 1 then self.text = self.text..'"); ' self.sayopen = 0 end self.text = self.text..' wait();' self.sayopen = 0 self.lines=0 end function sayer:input() if self.sayopen == 1 then self.text = self.text..'"); ' self.sayopen = 0 end self.text = self.text..'input();' self.sayopen = 0 self.lines=0 end function sayer:select(tab) if self.sayopen == 1 then self.text = self.text..'"); ' self.sayopen = 0 end local un = "'"..join("','",tab).."'" self.text = self.text..'select('..un..');' self.sayopen = 0 self.lines=0 end function sayer:clear() self.maxlen = 50 self.maxlines = 6 self.lines=0 self.text = 'say("' self.sayopen = 1 end --]] ------------------------------------------------------------------------------- -- MYSQL - FUNKTIONEN -- Einzelbefehle function mysql_escape(str) str = string.gsub(str,"%", "") -- str = string.gsub(str,"%0", "0") Gibt einen fehler aus | Wer rausfindet, warum.. Bitte mir Schreiben (Mijago) str = string.gsub(str,"%n", "n") str = string.gsub(str,"%r", "r") str = string.gsub(str,"%x1a", "Z") str = string.gsub(str,"%'", "'") str = string.gsub(str,'%"', '"') return str end function backup_files() -- Backuppt den Share-Ordner local now = os.date('%d-%m-%Y_%H:%M:%S') -- Aus absicht einzelne Zeilen! (Zur besseren Kommentierung und dass nicht ein Fehler alle Scripts behindert) os.execute('mkdir /backup/ && mkdir /backup/share') -- Ordner erstellen, falls nicht vorhanden os.execute('tar -cvzf ./locale/ /backup/share/'..now..'_locale.tar.gz') -- Packen os.execute('tar -cvzf ./data/ /backup/share/'..now..'_data.tar.gz') -- Packen end function backup_main() -- Backuppt die Hauptdatenbanken local now = os.date('%d-%m-%Y_%H:%M:%S') -- Aus absicht einzelne Zeilen! (Zur besseren Kommentierung und dass nicht ein Fehler alle Scripts behindert) os.execute('mkdir /backup/ && mkdir /backup/main') -- Ordner erstellen, falls nicht vorhanden os.execute('mkdir /backup/main/'..now) -- Ordner für das Backup erstellen os.execute('mkdir /backup/main/'..now..'/player/') -- Player-DB vorbereiten os.execute('mkdir /backup/main/'..now..'/account/') -- Account-DB vorbereiten os.execute('cp /var/db/mysql/player/player* /backup/main/'..now..'/player/') -- Player DBs Kopieren os.execute('cp /var/db/mysql/player/quest.* /backup/main/'..now..'/player/') -- Quest DB Kopieren os.execute('cp /var/db/mysql/player/guild* /backup/main/'..now..'/player/') -- Guild DBs Kopieren os.execute('cp /var/db/mysql/account/account.* /backup/main/'..now..'/account/') -- Guild DBs Kopieren os.execute('tar -cvzf /backup/main/'..now..'/ /backup/main/'..now..'.tar.gz') -- Packen os.execute('rm -R /backup/main/'..now..'/') -- Daten wieder löschen end function backup() -- Backuppt alle Datenbanken local now = os.date('%d-%m-%Y_%H:%M:%S') -- Aus absicht einzelne Zeilen! (Zur besseren Kommentierung und dass nicht ein Fehler alle Scripts behindert) os.execute('mkdir /backup/ && mkdir /backup/all') -- Ordner erstellen, falls nicht vorhanden os.execute('mkdir /backup/all/'..now) -- Ordner für das Backup erstellen os.execute('tar -cvzf /var/db/mysql/ /backup/all/'..now..'.tar.gz') -- Packen end function mysql_query(query,user,pass,db,ip) local pre = '' if query == '' or query == nil then error("Query muss gesetzt sein!") end user = user or ql.mysql["user"] pass = pass or ql.mysql["pass"] ip = ip or ql.mysql["ip"] if user ~= '' and user ~= nil then pre = pre..' -u'..user end if pass ~= '' and pass ~= nil then pre = pre..' -p'..pass end if db ~= '' and db ~= nil then pre = pre..' -D'..db end if ip ~= '' and ip ~= nil then pre = pre..' -h'..ip end math.randomseed(os.time()); local rand = math.random(0,10^7) -- Erstellen der Pfadvariable local path = 'data/mysql_output_'..os.time()..'_'..rand..'_'..pc.get_vid() os.execute ("mysql "..pre.." --e=""..query.."" > "..path) -- Laden und Auflisten der Dateiinhalte local fi,q = io.open(path,"r"),{["l"] = {},["out"]={}} if fi == nil then return "ERROR" end for line in fi:lines() do table.insert(q.l,(split(line,"t"))) end os.remove(path) if type(q.l[1]) ~= "table" then return "ERROR" --error("Fehler bei der MySQL Verbindung oder bei der Rückgabe! Abbruch!") end local ix = 0 table.foreachi(q.l,function(i,l) if i > 1 then table.foreach(l,function(i2,l2) if q.out[q.l[1][i2]] == nil then q.out[q.l[1][i2]] = {} end local c = tonumber(l2) if type(c) == "number" and l2 == tostring(c) then q.out[q.l[1][i2]][i-1] = c else q.out[q.l[1][i2]][i-1] = l2 end end) end end) -- ENDE der eigentlichen MySQL-Funktion -- START Zusatz: Hanashi-Kompatibilität & Fehlerbehandlung q.out.__data = q.l[1] setmetatable(q.out, { __index = function(a,b) if type(b) == "number" then return (a[a.__data[b]] or {"ERROR"}) end return "ERROR" --error("Fehler bei Indexierung: Index "..b.." ist nicht vorhanden!") end}) return q.out end -- Für mehrere CFG's mysql = {} function mysql:connect(ip,user,passwd,db) local out = {} out.ip = ip out.user = user out.pass = passwd if db == nil then db = 'player' end out.db = db out.querycount = 0 out.querylist = {} out.ql = {} setmetatable(out, { __index = mysql }) return out end function mysql:query(query) self.lastquery = mysql_query(query,self.user,self.pass,self.db,self.ip) self.lq = self.lastquery self.querycount = self.querycount +1 self.querylist[self.querycount] = self.lq self.ql = self.querylist return self.lastquery, self.querycount end function mysql:setcfg(ip,user,pass,db) if ip ~= nil then self.ip = ip end if user ~= nil then self.user = user end if pass ~= nil then self.pass = pass end self.db = db end ------------------------------------------------------------------------------- -- FARBCODES col.list= { { 'lightcoral', 240,128,128 },{ 'rosybrown', 188,143,143 }, { 'indianred', 205,92,92 },{ 'red', 255,0,0 },{ 'firebrick', 178,34,34 },{ 'brown', 165,42,42 }, { 'darkred', 139,0,0 },{ 'maroon', 128,0,0 },{ 'mistyrose', 255,228,225 },{ 'salmon', 250,128,114 }, { 'tomato', 255,99,71 },{ 'darksalmon', 233,150,122 },{ 'coral', 255,127,80 },{ 'orangered', 255,69,0 }, { 'lightsalmon', 255,160,122 },{ 'sienna', 160,82,45 },{ 'seashell', 255,245,238 },{ 'chocolate', 210,105,30 }, { 'saddlebrown', 139,69,19 },{ 'sandybrown', 244,164,96 },{ 'peachpuff', 255,218,185 },{ 'peru', 205,133,63 }, { 'linen', 250,240,230 },{ 'bisque', 255,228,196 },{ 'darkorange', 255,140,0 },{ 'burlywood', 222,184,135 }, { 'antiquewhite', 250,235,215 },{ 'tan', 210,180,140 },{ 'navajowhite', 255,222,173 },{ 'blanchedalmond', 255,235,205 }, { 'papayawhip', 255,239,213 },{ 'moccasin', 255,228,181 },{ 'orange', 255,165,0 },{ 'wheat', 245,222,179 }, { 'oldlace', 253,245,230 },{ 'floralwhite', 255,250,240 },{ 'darkgoldenrod', 184,134,11 },{ 'goldenrod', 218,165,32 }, { 'cornsilk', 255,248,220 },{ 'gold', 255,215,0 },{ 'lemonchiffon', 255,250,205 },{ 'khaki', 240,230,140 }, { 'palegoldenrod', 238,232,170 },{ 'darkkhaki', 189,183,107 },{ 'ivory', 255,255,240 },{ 'lightyellow', 255,255,224 }, { 'beige', 245,245,220 },{ 'lightgoldenrodyellow', 250,250,210 },{ 'yellow', 255,255,0 },{ 'olive', 128,128,0 }, { 'olivedrab', 107,142,35 },{ 'yellowgreen', 154,205,50 },{ 'darkolivegreen', 85,107,47 },{ 'greenyellow', 173,255,47 }, { 'chartreuse', 127,255,0 },{ 'lawngreen', 124,252,0 },{ 'darkseagreen', 143,188,139 },{ 'honeydew', 240,255,240 }, { 'palegreen', 152,251,152 },{ 'lightgreen', 144,238,144 },{ 'lime', 0,255,0 },{ 'limegreen', 50,205,50 }, { 'forestgreen', 34,139,34 },{ 'green', 0,128,0 },{ 'darkgreen', 0,100,0 },{ 'seagreen', 46,139,87 }, { 'mediumseagreen', 60,179,113 },{ 'springgreen', 0,255,127 },{ 'mintcream', 245,255,250 },{ 'mediumspringgreen', 0,250,154 }, { 'mediumaquamarine', 102,205,170 },{ 'aquamarine', 127,255,212 },{ 'turquoise', 64,224,208 },{ 'lightseagreen', 32,178,170 }, { 'mediumturquoise', 72,209,204 },{ 'azure', 240,255,255 },{ 'lightcyan', 224,255,255 },{ 'paleturquoise', 175,238,238 }, { 'aqua', 0,255,255 },{ 'cyan', 0,255,255 },{ 'darkcyan', 0,139,139 },{ 'teal', 0,128,128 }, { 'darkslategray', 47,79,79 },{ 'darkturquoise', 0,206,209 },{ 'cadetblue', 95,158,160 },{ 'powderblue', 176,224,230 }, { 'lightblue', 173,216,230 },{ 'deepskyblue', 0,191,255 },{ 'skyblue', 135,206,235 },{ 'lightskyblue', 135,206,250 }, { 'steelblue', 70,130,180 },{ 'aliceblue', 240,248,255 },{ 'dodgerblue', 30,144,255 },{ 'lightslategray', 119,136,153 }, { 'slategray', 112,128,144 },{ 'lightsteelblue', 176,196,222 },{ 'cornflowerblue', 100,149,237 },{ 'royalblue', 65,105,225 }, { 'ghostwhite', 248,248,255 },{ 'lavender', 230,230,250 },{ 'blue', 0,0,255 },{ 'mediumblue', 0,0,205 }, { 'darkblue', 0,0,139 },{ 'midnightblue', 25,25,112 },{ 'navy', 0,0,128 },{ 'slateblue', 106,90,205 }, { 'darkslateblue', 72,61,139 },{ 'mediumslateblue', 123,104,238 },{ 'mediumpurple', 147,112,219 },{ 'blueviolet', 138,43,226 }, { 'indigo', 75,0,130 },{ 'darkorchid', 153,50,204 },{ 'darkviolet', 148,0,211 },{ 'mediumorchid', 186,85,211 }, { 'thistle', 216,191,216 },{ 'plum', 221,160,221 },{ 'violet', 238,130,238 },{ 'fuchsia', 255,0,255 }, { 'magenta', 255,0,255 },{ 'darkmagenta', 139,0,139 },{ 'purple', 128,0,128 },{ 'orchid', 218,112,214 }, { 'mediumvioletred', 199,21,133 },{ 'deeppink', 255,20,147 },{ 'hotpink', 255,105,180 },{ 'lavenderblush', 255,240,245 }, { 'palevioletred', 219,112,147 },{ 'crimson', 220,20,60 },{ 'pink', 255,192,203 },{ 'lightpink', 255,182,193 }, { 'white', 255,255,255 },{ 'snow', 255,250,250 },{ 'whitesmoke', 245,245,245 },{ 'gainsboro', 220,220,220 }, { 'lightgray', 211,211,211 },{ 'silver', 192,192,192 },{ 'darkgray', 169,169,169 },{ 'gray', 128,128,128 }, { 'dimgray', 105,105,105 },{ 'black', 0,0,0 },{ 'aliceblue', 240,248,255 },{ 'antiquewhite', 250,235,215 }, { 'aqua', 0,255,255 },{ 'aquamarine', 127,255,212 },{ 'azure', 240,255,255 },{ 'beige', 245,245,220 }, { 'bisque', 255,228,196 },{ 'black', 0,0,0 },{ 'blanchedalmond', 255,235,205 },{ 'blue', 0,0,255 }, { 'blueviolet', 138,43,226 },{ 'brown', 165,42,42 },{ 'burlywood', 222,184,135 },{ 'cadetblue', 95,158,160 }, { 'chartreuse', 127,255,0 },{ 'chocolate', 210,105,30 },{ 'coral', 255,127,80 },{ 'cornflowerblue', 100,149,237 }, { 'cornsilk', 255,248,220 },{ 'crimson', 220,20,60 },{ 'cyan', 0,255,255 },{ 'darkblue', 0,0,139 }, { 'darkcyan', 0,139,139 },{ 'darkgoldenrod', 184,134,11 },{ 'darkgray', 169,169,169 },{ 'darkgreen', 0,100,0 }, { 'darkkhaki', 189,183,107 },{ 'darkmagenta', 139,0,139 },{ 'darkolivegreen', 85,107,47 },{ 'darkorange', 255,140,0 }, { 'darkorchid', 153,50,204 },{ 'darkred', 139,0,0 },{ 'darksalmon', 233,150,122 },{ 'darkseagreen', 143,188,139 }, { 'darkslateblue', 72,61,139 },{ 'darkslategray', 47,79,79 },{ 'darkturquoise', 0,206,209 },{ 'darkviolet', 148,0,211 }, { 'deeppink', 255,20,147 },{ 'deepskyblue', 0,191,255 },{ 'dimgray', 105,105,105 },{ 'dodgerblue', 30,144,255 }, { 'firebrick', 178,34,34 },{ 'floralwhite', 255,250,240 },{ 'forestgreen', 34,139,34 },{ 'fuchsia', 255,0,255 }, { 'gainsboro', 220,220,220 },{ 'ghostwhite', 248,248,255 },{ 'gold', 255,215,0 },{ 'goldenrod', 218,165,32 }, { 'gray', 128,128,128 },{ 'green', 0,128,0 },{ 'greenyellow', 173,255,47 },{ 'honeydew', 240,255,240 }, { 'hotpink', 255,105,180 },{ 'indianred', 205,92,92 },{ 'indigo', 75,0,130 },{ 'ivory', 255,255,240 }, { 'khaki', 240,230,140 },{ 'lavender', 230,230,250 },{ 'lavenderblush', 255,240,245 },{ 'lawngreen', 124,252,0 }, { 'lemonchiffon', 255,250,205 },{ 'lightblue', 173,216,230 },{ 'lightcoral', 240,128,128 },{ 'lightcyan', 224,255,255 }, { 'lightgoldenrodyellow', 250,250,210 },{ 'lightgray', 211,211,211 },{ 'lightgreen', 144,238,144 },{ 'lightpink', 255,182,193 }, { 'lightsalmon', 255,160,122 },{ 'lightseagreen', 32,178,170 },{ 'lightskyblue', 135,206,250 },{ 'lightslategray', 119,136,153 }, { 'lightsteelblue', 176,196,222 },{ 'lightyellow', 255,255,224 },{ 'lime', 0,255,0 },{ 'limegreen', 50,205,50 }, { 'linen', 250,240,230 },{ 'magenta', 255,0,255 },{ 'maroon', 128,0,0 },{ 'mediumaquamarine', 102,205,170 }, { 'mediumblue', 0,0,205 },{ 'mediumorchid', 186,85,211 },{ 'mediumpurple', 147,112,219 },{ 'mediumseagreen', 60,179,113 }, { 'mediumslateblue', 123,104,238 },{ 'mediumspringgreen', 0,250,154 },{ 'mediumturquoise', 72,209,204 },{ 'mediumvioletred', 199,21,133 }, { 'midnightblue', 25,25,112 },{ 'mintcream', 245,255,250 },{ 'mistyrose', 255,228,225 },{ 'moccasin', 255,228,181 }, { 'navajowhite', 255,222,173 },{ 'navy', 0,0,128 },{ 'oldlace', 253,245,230 },{ 'olive', 128,128,0 }, { 'olivedrab', 107,142,35 },{ 'orange', 255,165,0 },{ 'orangered', 255,69,0 },{ 'orchid', 218,112,214 }, { 'palegoldenrod', 238,232,170 },{ 'palegreen', 152,251,152 },{ 'paleturquoise', 175,238,238 },{ 'palevioletred', 219,112,147 }, { 'papayawhip', 255,239,213 },{ 'peachpuff', 255,218,185 },{ 'peru', 205,133,63 },{ 'pink', 255,192,203 }, { 'plum', 221,160,221 },{ 'powderblue', 176,224,230 },{ 'purple', 128,0,128 },{ 'red', 255,0,0 }, { 'rosybrown', 188,143,143 },{ 'royalblue', 65,105,225 },{ 'saddlebrown', 139,69,19 },{ 'salmon', 250,128,114 }, { 'sandybrown', 244,164,96 },{ 'seagreen', 46,139,87 },{ 'seashell', 255,245,238 },{ 'sienna', 160,82,45 }, { 'silver', 192,192,192 },{ 'skyblue', 135,206,235 },{ 'slateblue', 106,90,205 },{ 'slategray', 112,128,144 }, { 'snow', 255,250,250 },{ 'springgreen', 0,255,127 },{ 'steelblue', 70,130,180 },{ 'tan', 210,180,140 }, { 'teal', 0,128,128 },{ 'thistle', 216,191,216 },{ 'tomato', 255,99,71 },{ 'turquoise', 64,224,208 }, { 'violet', 238,130,238 },{ 'wheat', 245,222,179 },{ 'white', 255,255,255 },{ 'whitesmoke', 245,245,245 }, { 'yellow', 255,255,0 },{ 'yellowgreen', 154,205,50 }} table.foreachi(col.list,function(a,b) col[b[1]] = function(text) return "[COLOR r;"..(b[2]/255.0).."|g;"..(b[3]/255.0).."|b;"..(b[4]/255.0).."]"..text..'[/COLOR]' end end) ------------------------------------------------------------------------------- -- ZEIT - FUNKTIONEN --- Tage zt.d_j = function(d) return d/365 end zt.d_mo = function(d) return d/12 end zt.d_h = function(d) return d*24 end zt.d_m = function(d) return d*24*60 end zt.d_s = function(d) return d*24*60*60 end zt.d_hs = function(d) return d*24*60*60*100 end zt.d_ms = function(d) return d*24*60*60*1000 end --- Stunden zt.h_j = function(h) return h/24/365 end zt.h_mo = function(h) return h/24/12 end zt.h_d = function(h) return h/24 end zt.h_m = function(h) return h*60 end zt.h_s = function(h) return h*60*60 end zt.h_hs = function(h) return h*60*60*100 end zt.h_ms = function(h) return h*60*60*1000 end --- Minuten zt.m_j = function(m) return m/60/24/365 end zt.m_mo = function(m) return m/60/24/12 end zt.m_d = function(m) return m/60/24 end zt.m_h = function(m) return m/60 end zt.m_s = function(m) return m*60 end zt.m_hs = function(m) return m*60*100 end zt.m_ms = function(m) return m*60*1000 end --- Sekunden zt.s_j = function(s) return s/60/60/24/365 end zt.s_mo = function(s) return s/60/60/24/12 end zt.s_d = function(s) return s/60/60/24 end zt.s_h = function(s) return s/60/60 end zt.s_m = function(s) return s/60 end zt.s_hs = function(s) return s*100 end zt.s_ms = function(s) return s*1000 end ------------------------------------------------------------------------------- -- PC - Funktionen function local_pc_warp(name, x, y,mid) local target = find_pc_by_name(name) local t = pc.select(target) if mid == nil then mid = pc.get_map_index() end pc.warp_local(mid, x*100, y*100) pc.select(t) end function pc.warp_to(vid) if vid == nil then error"VID muss gesetzt sein! (pc.warp_to)" elseif type(vid) == "string" then vid = find_pc_by_name(vid) if vid == 0 then error"Spieler nicht gefunden" end end local me = pc.select(vid) local x,y = pc.get_x()*100,pc.get_y()*100 pc.select(me) pc.warp(x,y) end function pc.trans(vid) if vid == nil then error"VID muss gesetzt sein! (pc.warp_to)" elseif type(vid) == "string" then vid = find_pc_by_name(vid) if vid == 0 then error"Spieler nicht gefunden" end end local x,y = pc.get_x()*100,pc.get_y()*100 local me = pc.select(vid) pc.warp(x,y) pc.select(me) end function local_pc_setqf(name, qf,wert) -- Für die aktuelle Quest local target = find_pc_by_name(name) local t = pc.select(target) pc.setqf(qf,wert) pc.select(t) end function do_for_other(name,ding) local t = pc.select(find_pc_by_name(name)) assert(loadstring(ding))() pc.select(t) end function pc.check_inventory_place(size) if size <= 0 or size > 3 then return -1 end function check(c) for i = 0,size-1 do item.select_cell(e[c+(5*i)]) if item.get_id() ~= 0 then return false end end return true end for i = 0,89 do if check(i) then return i end end return -1 end ------------------------------------------------------------------------------- -- ALLGEMEINE FUNKTIONEN function dot(x)-- Führt alles zwischen $ $ aus. Verschachtelungen nicht in einem Aufruf möglich. return string.gsub(x, "%$(.-)%$", function (s) return loadstring(s)() end) end function download(url) os.execute("cd data && fetch "..url.." && cd ..") end ql.test = function() print('Die Lib Funktioniert!') chat('Die Lib Funktioniert!') end ql.about = function() print('Diese Lib wurde von Mijago programmiert.') chat('Diese Lib wurde von Mijago programmiert.') end function note(text) notice_all('|>~ '..text) end function split(str, delim, maxNb) -- Eliminate bad cases... if str == nil then return str end if string.find(str, delim) == nil then return { str } end if maxNb == nil or maxNb < 1 then maxNb = 0 -- No limit end local result = {} local pat = "(.-)" .. delim .. "()" local nb = 0 local lastPos for part, pos in string.gfind(str, pat) do nb = nb + 1 result[nb] = part lastPos = pos if nb == maxNb then break end end -- Handle the last field if nb ~= maxNb then result[nb + 1] = string.sub(str, lastPos) end return result end function getn(list) local i = 0 table.foreachi(list, function(a,b) i = i+1 end) return i end function join(delimiter, list) local len = getn(list) if len == 0 then return "" end local string = list[1] for i = 2, len do string = string .. delimiter .. list[i] end return string end function is_table(var) if (type(var) == "table") then return true else return false end end function is_number(var) if (type(var) == "number") then return true else return false end end function is_string(var) if (type(var) == "string") then return true else return false end end function in_table ( e, t ) for _,v in pairs(t) do if (v==e) then return true end end return false end function in_text(str,te) for i = 0,string.len(str) do if string.sub(str, i,i+string.len(te)-1) == te then return i end end return -1 end function machweg(str,weg) while in_text(str,weg) == true do for i = 0,string.len(str) do if string.sub(str, i,i+string.len(weg)-1) == weg then str = string.sub(str,0,i-1)..string.sub(str,i+string.len(weg),string.len(str)) end end end return str end -- string.gsub(str,weg,'') reicht auch xD function numlen(num) return string.len(tostring(num)) end function delay_s(delay) delay = delay or 1 local time_to = os.time() + delay while os.time() < time_to do end end function distance(x1,y1,x2,y2) dx=x2-x1 dy=y2-y1 dist=math.sqrt(math.pow(dx,2)+math.pow(dy,2)) return dist end function makereadonly(t) -- the metatable local mt = { __index = t, __newindex = function(t, k, v) error("trying to modify constant field " .. tostring(k), 2) end } return setmetatable({}, mt) end function allwords () local line = io.read() local pos = 1 return function() while line do local s, e = string.find(line, "%w+", pos) if s then pos = e + 1 return string.sub(line, s, e) else line = io.read() pos = 1 end end return nil end end function case(wert,...) arg.n = nil for _,b in arg do if b[1] == wert or b[1] == nil then return b[2]() end end end function is(n, f) return {n, f} end function def(f) return {nil, f} end ------------------------------------------------------------------------------- -- Iniparser & -writer do -- Funktionen: -- var = ini.new() -- var = ini.open(path) -- var:write_str(sub,name,wert) -- var:write_int(sub,name,wert) -- var:write_bool(sub,name,boolean) -- var:clear() -- var:read_str(sub,name,norm) -- Gibt einen String zurück. -| -- var:read_int(sub,name,norm) -- Gibt eine zahl zurück -| norm wird zurückgegeben, wenn sub[name] nicht existiert. -- var:read_bool(sub,name,norm) -- Gibt true / False zurück -| -- var:delete_key(sub,nm) -- var:delete_section(sub) local ini_f = {} ini = {} function ini_f:append(sub,nm,wert) if nm == '' or nm == nil then return end self:parse() if self.sub[sub] == nil then self.sub[sub] = {} end self.sub[sub][nm] = wert self:writeit() end function ini_f:write_str(sub,nm,wert) self:append(sub,nm,wert) end function ini_f:write_int(sub,nm,wert) self:append(sub,nm,wert) end function ini_f:write_bool(sub,nm,bool) if not type(bool) == "boolean" then return end local bin = 0 if bool == true then bin = 1 end self:append(sub,nm,bin) return bin end function ini_f:clear() self.sub = {} self.path = '' end function ini_f:writeit() local out = '' table.foreach(self.sub, function(i,l) out = out..'['..i..']n' table.foreach(l, function(i2,l2) out=out..i2..'='..l2..'n' end ) end ) local d = io.open(self.path,'w') d:write(out) d:close() end function ini_f:delete_key(sub,nm) if sub == '' or nm == '' or sub == nil or nm == nil then return end self:parse() self.sub[sub][nm] = nil self:writeit() end function ini_f:delete_section(sub) if sub == '' or sub == nil then return end self:parse() self.sub[sub]= nil self:writeit() end function ini_f:parse() self.sub = {} if self.path == '' or self.path == nil then return end local d,i = io.open(self.path,"r"),'non' if d == nil then d = io.open(self.path,"w") end for line in d:lines() do if string.sub(line,1,1) == "[" then i = string.sub(line,2,string.len(line)-1) self.sub[i] = {} else local inp = split(line,'=') self.sub[i][inp[1]] = inp[2] end end d:close() end function ini_f:read_str(sub,nm,norm) if sub == '' or nm == '' or sub == nil or nm == nil then return end self:parse() if self.sub[sub] == nil then return norm end if self.sub[sub][nm] == nil then return norm else return self.sub[sub][nm] end end function ini_f:read_int(sub,nm,norm) if sub == '' or nm == '' or sub == nil or nm == nil then return end self:parse() if self.sub[sub] == nil then return norm end if self.sub[sub][nm] == nil then return norm else return tonumber(self.sub[sub][nm]) end end function ini_f:read_bool(sub,nm,norm) -- Norm wird zurückgegeben, wenn der Key nm nicht existiert if sub == '' or nm == '' or sub == nil or nm == nil then return end self:parse() if self.sub[sub] == nil then return norm end if self.sub[sub][nm] == nil then return norm end if self.sub[sub][nm] == "1" then return true else return false end end function ini_f:open(path) self.path = path self:parse() end function ini.new() local out = {} out.path = '' out.sub = {} setmetatable(out, { __index = ini_f }) return out end function ini.open(path) local dat = ini.new() dat:clear() dat.path=path dat:open(path) return dat end end ------------------------------------------------------------------------------- -- Programmsteuerung proc.apache_start = function() os.execute('apachectl start') end proc.apache_stop = function() os.execute('apachectl stop') end proc.apache_restart = function() os.execute('apachectl restart') end proc.apache_graceful = function() os.execute('apachectl graceful') end proc.ts3_start = function(path) os.execute('cd '..path..' && sh ts3server_startscript.sh start') end proc.ts3_stop = function(path) os.execute('cd '..path..' && sh ts3server_startscript.sh stop') end proc.ts3_restart = function(path) os.execute('cd '..path..' && sh ts3server_startscript.sh restart') end ------------------------------------------------------------------------------- --[[ Funktionsliste download(url) -> lädt die Datei in den Data-Ordner ql.test() -> gibt einen Teststring aus. (Zum testen, ob die Lib funktionert) ql.about() -> Gibt Informationen über das Script aus col.[FARBNAME] -> Gibt Text in say() farbig aus. Englische Farbnamen! (Beinhaltet 281 Farben) [String] note(text) -> Entspricht notice_all('|>~ TEXT') local_pc_setqf(name,qf,wert) -> Setzt bei einem Anderen Spieler eine Quest-flag local_pc_warp(name, x, y,mid) -> Teleportiert den Spieler NAME an die Kooridinaten x & y auf der Map mit dem index mid. mid kann auch leer bleiben do_for_other(name,dot) -> Führt die Befehle in dot für den Spieler name aus. Mit ; trennen writelog(text,var,file) -> Füllt die Logs. 1 = syserr, 2 = syslog, 3 = "file" doit(cmd) -> Führt einen FreeBSD Befehl aus (auch Befehlsketten mit &&) --- Spezielle pci:new(name) -> erstellt auf der genutzten Variable (zb pt = pci:new('[SA]Mijago') ) eine Liste mit allen Info's über den Spieler (alle Spalten aus player.player) pci:update -> updatet die mit pci:new erstellte Variable select2(tab) -> Sortiert eine Tabelle in Selects; auf Seiten aufgeteilt. Der erste Tabelleneintrag muss eine Zahl sein; Sie gibt die maximale Anzahl der Select-Einträg / Seite an. --- MySQL mysql_query(query,user,pw,db,ip) -> wie php mysql_query (gibt es auch so aus: out.id[1] = 7754 zB) mysql_query2(query,user,pw,db,ip) -> NUR für Query's wie Update, Insert etc. mysql_escape(str) -> Equivalent mit dem aus PHP bekannten mysql_escape_real_string backup() -> Backuppt alle MySQL-Datenbanken backup_main() -> Backuppt die wichtigsten MySQL-Datenbanken backup_files() -> Backuppt den Share - Ordner --- Lua-erweiterung watch_table(tab) -> Schreibt alle änderungen an der Tabelle in eine Datei. arraytoselect(array,abbr) -> erstellt aus einem Array eine Select()-Abfrage und gibt deren Auswahl zurück. Wenn "abbr" gesetzt ist, fügt die Funktion einen eintrag mit dem Wert von "abbr" ein. is_table(var) -> Prüft, ob eine Variable eine Tabelle ist [boolean] is_string(var) -> Prüft, ob eine Variable ein String ist [boolean] is_number(var) -> Prüft, ob eine Variable eine Zahl ist [boolean] in_table(e,t) -> Prüft, ob e in dem Array t vorhanden ist. [boolean] in_table(str,te) -> Prüft, ob te in dem string str vorhanden ist. [boolean] machweg(str,weg) -> Entfernt alle 'weg' aus 'str' [string] split(str, delim, maxNb) -> Teilt den Text 'str' mit dem Delimenter 'delim' auf (in maximal 'maxNb' Teile). maxNb kann leer gelassen werden. [Array] join(delimiter, list) -> Gegenteil von Split. List ist ein Array. Bsp: s = join('|',{'a','b'}) -> s = 'a|b' getn(array) -> Gibt die Anzahl der Einträge eines Array's aus. [Integer] delay_s(delay) -> Scriptpause für -delay- Sekunden numlen(num) -> gibt die Anzahl der Ziffern in der Zahl num an [Integer] distance(x1,y1,x2,y2) -> Distanz zwischen 2 Punkten [Integer] makereadonly(t) -> Sperrt die Tabelle (ReadOnly) allwords() -> Liest alle Wörter aus einer Datei und gibt sie zurück. Vorher io.open! --- Zeitrechnungen zt.d_j(d) -> Tage zu Jahre zt.d_mo(d) -> Tage zu Monate zt.d_h(d) -> Tage zu Stunden zt.d_m(d) -> Tage zu Minuten zt.d_s(d) -> Tage zu Sekunden zt.d_hs(d) -> Tage zu Hunderstelsekunden zt.d_ms(d) -> Tage zu Millisekunden zt.h_j(h) -> Stunden zu Jahre zt.h_mo(h) -> Stunden zu Monate zt.h_d(h) -> Stunden zu Tage zt.h_m(h) -> Stunden zu Minuten zt.h_s(h) -> Stunden zu Sekunden zt.h_hs(h) -> Stunden zu Hunderstelsekundne zt.h_ms(h) -> Stunden zu Millisekunden zt.m_j(m) -> Minuten zu Jahre zt.m_mo(m) -> Minuten zu Monate zt.m_d(m) -> Minuten zu Tage zt.m_h(m) -> Minuten zu Stunden zt.m_s(m) -> Minuten zu Sekunden zt.m_hs(m) -> Minuten zu Hunderstelsekunden zt.m_ms(m) -> Minuten zu Millisekunden zt.s_j(s) -> Sekunden zu Jahre zt.s_mo(s) -> Sekunden zu Monate zt.s_d(s) -> Sekunden zu Tage zt.s_h(s) -> Sekunden zu Stunden zt.s_m(s) -> Sekunden zu Minuten zt.s_hs(s) -> Sekunden zu Hunderstelsekunden zt.s_ms(s) -> Sekunden zu Millisekunden --- Programmbasierende Befehle proc.apache_start() -> Startet Apache proc.apache_stop() -> Stoppt Apache proc.apache_restart() -> Startet Apache neu proc.apache_graceful() -> Startet Apache neu, ohne vorhandene Verbindungen zu kappen proc.ts3_start(path) -> Startet den Teamspeak3 Server im Pfad 'path' proc.ts3_stop(path) -> Startet den Teamspeak3 Server im Pfad 'path' neu proc.ts3_restart(path) -> Stopp den Teamspeak3 Server im Pfad 'path' --]] makereadonly(col) makereadonly(zt) makereadonly(proc) makereadonly(ql) -- Compat 5.1 Release 5 Einbindung if mijago_include_compat then -- -- Compat-5.1 -- Copyright Kepler Project 2004-2006 (Debes iniciar sesión para ver el contenido del enlace en esta publicación.) -- According to Lua 5.1 -- $Id: compat-5.1.lua,v 1.22 2006/02/20 21:12:47 carregal Exp $ -- _COMPAT51 = "Compat-5.1 R5" local LUA_DIRSEP = '/' local LUA_OFSEP = '_' local OLD_LUA_OFSEP = '' local POF = 'luaopen_' local LUA_PATH_MARK = '?' local LUA_IGMARK = ':' local assert, error, getfenv, ipairs, loadfile, loadlib, pairs, setfenv, setmetatable, type = assert, error, getfenv, ipairs, loadfile, loadlib, pairs, setfenv, setmetatable, type local find, format, gfind, gsub, sub = string.find, string.format, string.gfind, string.gsub, string.sub -- -- avoid overwriting the package table if it's already there -- package = package or {} local _PACKAGE = package package.path = LUA_PATH or os.getenv("LUA_PATH") or ("./?.lua;" .. "./pack/?.lua;" .. "/usr/local/share/lua/5.0/?.lua;" .. "/usr/local/share/lua/5.0/?/?.lua;" .. "/usr/local/share/lua/5.0/?/init.lua" ) package.cpath = LUA_CPATH or os.getenv("LUA_CPATH") or "./?.so;" .. "./pack/?.so;" .. "./l?.so;" .. "/usr/local/lib/lua/5.0/?.so;" .. "/usr/local/lib/lua/5.0/l?.so" -- -- make sure require works with standard libraries -- package.loaded = package.loaded or {} package.loaded.debug = debug package.loaded.string = string package.loaded.math = math package.loaded.io = io package.loaded.os = os package.loaded.table = table package.loaded.base = _G package.loaded.coroutine = coroutine local _LOADED = package.loaded -- -- avoid overwriting the package.preload table if it's already there -- package.preload = package.preload or {} local _PRELOAD = package.preload -- -- looks for a file `name' in given path -- local function findfile (name, pname) name = gsub (name, "%.", LUA_DIRSEP) local path = _PACKAGE[pname] assert (type(path) == "string", format ("package.%s must be a string", pname)) for c in gfind (path, "[^;]+") do c = gsub (c, "%"..LUA_PATH_MARK, name) local f = io.open (c) if f then f:close () return c end end return nil -- not found end -- -- check whether library is already loaded -- local function loader_preload (name) assert (type(name) == "string", format ( "bad argument #1 to `require' (string expected, got %s)", type(name))) assert (type(_PRELOAD) == "table", "`package.preload' must be a table") return _PRELOAD[name] end -- -- Lua library loader -- local function loader_Lua (name) assert (type(name) == "string", format ( "bad argument #1 to `require' (string expected, got %s)", type(name))) local filename = findfile (name, "path") if not filename then return false end local f, err = loadfile (filename) if not f then error (format ("error loading module `%s' (%s)", name, err)) end return f end local function mkfuncname (name) name = gsub (name, "^.*%"..LUA_IGMARK, "") name = gsub (name, "%.", LUA_OFSEP) return POF..name end local function old_mkfuncname (name) --name = gsub (name, "^.*%"..LUA_IGMARK, "") name = gsub (name, "%.", OLD_LUA_OFSEP) return POF..name end -- -- C library loader -- local function loader_C (name) assert (type(name) == "string", format ( "bad argument #1 to `require' (string expected, got %s)", type(name))) local filename = findfile (name, "cpath") if not filename then return false end local funcname = mkfuncname (name) local f, err = loadlib (filename, funcname) if not f then funcname = old_mkfuncname (name) f, err = loadlib (filename, funcname) if not f then error (format ("error loading module `%s' (%s)", name, err)) end end return f end local function loader_Croot (name) local p = gsub (name, "^([^.]*).-$", "%1") if p == "" then return end local filename = findfile (p, "cpath") if not filename then return end local funcname = mkfuncname (name) local f, err, where = loadlib (filename, funcname) if f then return f elseif where ~= "init" then error (format ("error loading module `%s' (%s)", name, err)) end end -- create `loaders' table package.loaders = package.loaders or { loader_preload, loader_Lua, loader_C, loader_Croot, } local _LOADERS = package.loaders -- -- iterate over available loaders -- local function load (name, loaders) -- iterate over available loaders assert (type (loaders) == "table", "`package.loaders' must be a table") for i, loader in ipairs (loaders) do local f = loader (name) if f then return f end end error (format ("module `%s' not found", name)) end -- sentinel local sentinel = function () end -- -- new require -- function _G.require (modname) assert (type(modname) == "string", format ( "bad argument #1 to `require' (string expected, got %s)", type(name))) local p = _LOADED[modname] if p then -- is it there? if p == sentinel then error (format ("loop or previous error loading module '%s'", modname)) end return p -- package is already loaded end local init = load (modname, _LOADERS) _LOADED[modname] = sentinel local actual_arg = _G.arg _G.arg = { modname } local res = init (modname) if res then _LOADED[modname] = res end _G.arg = actual_arg if _LOADED[modname] == sentinel then _LOADED[modname] = true end return _LOADED[modname] end -- findtable local function findtable (t, f) assert (type(f)=="string", "not a valid field name ("..tostring(f)..")") local ff = f.."." local ok, e, w = find (ff, '(.-)%.', 1) while ok do local nt = rawget (t, w) if not nt then nt = {} t[w] = nt elseif type(t) ~= "table" then return sub (f, e+1) end t = nt ok, e, w = find (ff, '(.-)%.', e+1) end return t end -- -- new package.seeall function -- function _PACKAGE.seeall (module) local t = type(module) assert (t == "table", "bad argument #1 to package.seeall (table expected, got "..t..")") local meta = getmetatable (module) if not meta then meta = {} setmetatable (module, meta) end meta.__index = _G end -- -- new module function -- function _G.module (modname, ...) local ns = _LOADED[modname] if type(ns) ~= "table" then ns = findtable (_G, modname) if not ns then error (string.format ("name conflict for module '%s'", modname)) end _LOADED[modname] = ns end if not ns._NAME then ns._NAME = modname ns._M = ns ns._PACKAGE = gsub (modname, "[^.]*$", "") end setmetatable(ns, {__index = _G}) setfenv (2, ns) for i, f in ipairs (arg) do f (ns) end end end
×
×
  • Crear nuevo...