Jump to content

Leandro Andrade

Miembro
  • Contador contenido

    0
  • Ingreso

  • Última visita

Actividad de reputación

  1. Me Gusta
    Leandro Andrade reacted to DrPolitica in SERVERFILE M2U - PT/BR   
  2. Me Gusta
    Leandro Andrade reacted to 【ℛ-𝓝】ℛ𝔂𝓼𝒆 in [SERVERFILES] Kallavi2 v2   
    Game-MySQL: Debes iniciar sesión para ver el contenido del enlace en esta publicación.
    MakePack: Debes iniciar sesión para ver el contenido del enlace en esta publicación.
    Cliente: Debes iniciar sesión para ver el contenido del enlace en esta publicación.
    Source: Debes iniciar sesión para ver el contenido del enlace en esta publicación.
    Desactivar licencia: Debes iniciar sesión para ver el contenido del enlace en esta publicación.
     
     
     
     
     
    AGRADECE CON ESTE BOTÓN
    🡃
  3. Me Gusta
    Leandro Andrade reacted to Soren in AdminTool V5.   
    Buenas metin2zone, hoy les traigo el programa AdminTool V5 para administrar vuestro servidor de Metin2
     
    Fotos del programa:
     

     
     

     

     

     
     

     
    Link:
    Debes iniciar sesión para ver el contenido del enlace en esta publicación.
  4. Me Gusta
    Leandro Andrade reacted to 【ℛ-𝓝】ℛ𝔂𝓼𝒆 in [SERVERFILES] Multi-Lenguaje > Wonder2   
    Presentación completa: Debes iniciar sesión para ver el contenido del enlace en esta publicación.
     
    [DESCARGAS]
    Debes iniciar sesión para ver el contenido del enlace en esta publicación.
     
    Visual Studio: 2019
    MySQL: 5.6
     
    Datos de acceso en el juego:
    Usuario: justmt2
    Contraseña: 12345
    En el archivo serverinfo.py buscar y cambiar 
    "auth1":30041,
     
    Clave: www.metin2academy.com
     

  5. Me Gusta
    Leandro Andrade reacted to hernan in [APORTE] MultiHack + DMG | Servidores Privados   
    PARA EL QUE BUSCABA HACKER PARA GUABINA
    LE DEJO UN LINK, ES UNA PAGINA DONDE HAY VARIOS HACKER Y LOS USAN EN GUABINA...
    NO LO HE USADO PERSONALMENTE ASI QUE NO SE SI ESTEN ACTUALIZADOS: 
    Debes iniciar sesión para ver el contenido del enlace en esta publicación.  
  6. Me Gusta
    Leandro Andrade reacted to Josevasqueez in [APORTE] MultiHack + DMG | Servidores Privados   
    Contenido del MultiHack:
    Level Bot
    Buscador de Metines
    Auto Ataque
    Hack de Damage
    Teleport
    ¡Muchas otras cosas!
    Vídeo de Muestra:

    LINKS DE DESCARGA: 
    Debes iniciar sesión para ver el contenido del enlace en esta publicación.
  7. Me Gusta
    Leandro Andrade reacted to PwnD in ServerFiles. 2012 (Arthur) Todo implementado. Files Por Mega   
    Fotos




     
     
    Traen evoluciones.
    Tiene tiendas modificadas.
    Tiene mapas implantados y ubicados con Npc...
    Traen 2 chs implantados.
    Son 100% estables.
    Son 100% español!!
    Los files llevan proteccion. Defensa contra Api tool .. ect xd
    Los files estan solo para montarlo y jugar.. xD
     
    ¡LO UNICO QUE FALTA!
     
    ¡Montarlo! 
     
     
    Links para montarlo correctamente;
    Si no quereis cambiar el GAME teneis que usar este cliente, el oficial .
    Los files Estan Subidos por Mega y el Cliente Por Mediafire
     
     
    Condiciones:
     
     
    Hago esto mas que nada porque hay mucha gente que lo a usado le a servidor y no al gracias, ni seguir el tema, yo sé que dar las gracias y seguir el tema es voluntario pero me enfada que vallan a haber visitas y no se agradesca nada lo siento mucho.
     
    -Tambien lo ago para que la gente se registre en Metin2Zone.
     
     
     
    Para iniciar los files se pone 
    Primero se pone: cd /home/game 
    Segundo se pone: ./start.sh[/size]
    Para apagarlo se pone cd /home/game && close.sh
     
     
    Instant 
    Id : root Password: 5f7a2g9ac2
     
    Navicat
    Id : root Password: 5f7a2g9ac2
     
    FTP
    Id: root Password: 5f7a2g9ac2
     
     
     
    Fuente:
     
    Metin2 Rayo, Creador del Metin2 rayo: Arthurx0
    Subido a Mega Por DreamHQ
    _____________________________________________________________________________________
     
    Perdonen mi ausencia aquí les dejare el link así no tengo que ir mandan mps xD Gracias a todos! (:
     
    Instant O Server Files(Link Renovado By DreamHQ): 
    Debes iniciar sesión para ver el contenido del enlace en esta publicación.
    Pass para descomprimir el Instat o ServerFiles: maximouj
    Cliente: Subido Por MI!
    Debes iniciar sesión para ver el contenido del enlace en esta publicación.
     
     
    Tambien Les Dejo El Metin2.BIN(Devén Remplazar eso en el cliente Subido por  LuisCbr13):
     
    Debes iniciar sesión para ver el contenido del enlace en esta publicación.
     
    Denme Gracias  
     
    Creditos // 
    Creado Por
     
    Metin2 Rayo, Creador del Metin2 rayo: Arthurx0
     
    Posteado Por 
    ZonaPro
    Subido a Mega Por DreamHQ
    Metin2.bin  Por LuisCbr13
     
    Pd : Esto Lo Hize Por los que Tienen el Mismo Problema Que Yo Que no Le Cargan las Pagina de DepositFiles 4share entres Otras etc..
    Bye Fin
  8. Me Gusta
    Leandro Andrade reacted to ChuchoGamer in Python - Chat Sistema Emotion   
    Les comparto este sistema que es bastante bueno espero que les guste y logren ponerlo


    link de descarga

    Debes iniciar sesión para ver el contenido del enlace en esta publicación.
  9. Me Gusta
    Leandro Andrade reacted to Thanato in Bug de hp   
    Bueno os hago hoy otra guia, esta consiste en quitar el bug de hp sin necesidad de quest.
     
     
    Para arreglarlo es simple os vais a navicat. En navicat os vais a player, y en player haceis esto:
     

    Debes iniciar sesión para ver el contenido del enlace en esta publicación.  
    le dais en player a design table, luego de esto os saldra una pestaña con unos datos, buscais hp:

    Debes iniciar sesión para ver el contenido del enlace en esta publicación.  
    Y en hp justo al lado cambiais el smallint por int::

    Debes iniciar sesión para ver el contenido del enlace en esta publicación.  
    Asi desbugueareis el hp cuando pasa el limite de 32k de hp que empieza a bugearse cuando vais a otro mapa que os sale el hp negativa.
     
    Espero que os haya servido.
    Atentamente Thanato.
  10. Me Gusta
    Leandro Andrade reacted to PACI in Ranking De Kills   
    Hola MZ, como no hacia nada pensé en dejaros el la quest de ranking de kills que tengo en mi server, la he traducido para español.
     
    Bueno, método simple:
     
    Se descargan
    Debes iniciar sesión para ver el contenido del enlace en esta publicación.  
    Después se conectan al FTP ( Filezilla o WinSCP ), se dirigen a:
     

    /usr/rain/channel/share_data/locale/spain/quest En caso de tener otras files, solo cambian la parte de " rain " para el otro nombre
     
    Y Mueven la quest hacia ai. Despues de eso, abre el archivo locale.lua y al final ponen:

    Kills.quest Despues van a la maquina virtual y escriben esto:

    cd /usr/rain/channel/share_data/locale/spain/quest Le dan ENTER
     
    Y despues escriben esto:

    ./qc Kills.quest Despues o dan reboot, o con un personage GM hacen /reload q
     
    Y es todo...
     
    Buenas Noches
     
    Me olvide de que esto iba en Quests Metin2 --"
  11. Me Gusta
    Leandro Andrade reacted to Shogun in [Quest] Ranking in-game   
    Función mysql y otras escritas por el mismo autor para quien le interese:
     

    Debes iniciar sesión para ver el contenido del enlace en esta publicación.
  12. Me Gusta
    Leandro Andrade reacted to pepineitor in [QUEST]Anti-Exp   
    Debes iniciar sesión para ver el contenido del enlace en esta publicación.
  13. Me Gusta
    Leandro Andrade reacted to diper 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
  14. Me Gusta
    Leandro Andrade reacted to -YC- in [Quest-Pack]Muchas Quest xd   
    Hola amigos de Zone bueno les vengo a postearles varias quest (No son mías) las he tomado de varios files hispanos pero bueno al grano xd
     
    iré agregando conforme encuentre xd
     
    trae estas quest:
     
    Comerciante de anillo 
    Anilloteleporter
    Anillo antiexp
    autorates
    banear por pergamino
    cambio de raza
    cambio de reino
    cambio de bonus (evita el bot de bonus)
    panel de control gm
    loteria
    mineria
    sistema de renos
    munturas con bonus
    quest de informacion al loguearnos saldra un texto
    npc de eventos te invoca un jefe
     
     
    PD: NO SON MIS QUEST

    Debes iniciar sesión para ver el contenido del enlace en esta publicación.
  15. Me Gusta
    Leandro Andrade reacted to RecursosMóviles in Instalación de ItemShop 2.0 Metin2 + Vídeo   
    Hola a todos!
    A continuación vamos a explicar como realizar la instalación de la ItemShop que proporciona
    Recursos Móviles para los clientes de Metin2.
    1) Accederemos con nuestro usuario a
    Debes iniciar sesión para ver el contenido del enlace en esta publicación.
    2) En el menú de WEBMASTER entraremos en Herramientas ? Scripts ItemShop
     
    3) Una vez dentro de la sección Scripts Itemshop, descargaremos la ItemShop para Metin2:

     
    4) Extraemos los ficheros a una carpeta o directorio, por ejemplo itemshop, nos quedará algo así:

     
    5) Subimos la carpeta o directorio itemshop a nuestro Hosting.
    6) Deberemos acceder por el navegador a la ruta relativa /itemshop/setup_mysql.php (Ej:
    Debes iniciar sesión para ver el contenido del enlace en esta publicación.
    7) Una vez aquí configuraremos los datos para la conexión con nuestra base de datos:

     
    En el caso del ejemplo utilizaremos los siguientes datos de conexión:
    Host: localhost (Si tenéis base de datos remota tendréis que poner la IP de la base de
    datos)
    Login: semontejano (Usuario de la base de datos, normalmente es root)
    Password: aquí hay que poner la contraseña de acceso a la base de datos
    Bases de datos a crear: itemshop o itemshoprm por ejemplo…
     
     
    Una vez configurado los datos, le daremos a Crear para crear la base de datos y tablas
    utilizadas por la ItemShop.
     
     
    8) Como nos indica, falta configurar el archivo config.fn.php que vamos a continuación y
    borrar el archivo setup_mysql.php
    9) Pasamos a configurar el config.fn.php, solo tenemos que completar con nuestros datos,
    está comentando que es cada cosa y si tenéis dudas podéis contactar con el Soporte de
    Recursos Móviles:
     
     
     
    Una vez configurado el config.fn.php guardamos y ya podemos acceder a nuestra
    itemshop con los datos de administración o una cuenta del juego.
    Desde el navegador:
    Debes iniciar sesión para ver el contenido del enlace en esta publicación.
    administracion / passadmin
    ¡Y ya tenemos instalada nuestra ItemShop para Metin2!
     
    Versión en Vídeo: 
    Debes iniciar sesión para ver el contenido del enlace en esta publicación.  

       
     
  16. Me Gusta
    Leandro Andrade reacted to ByBoom in Item-Shop Metin2 2014   
    Features: 
    - Select character/server
    - Security key  (default: GF9001)
    - Admin Panel
    - Add item with discount/tempo/bonus.
    - Run in Game.
    - Multi-Language (DE,FR,EN,PL,ES,RO)
     
    Download Link:Debes iniciar sesión para ver el contenido del enlace en esta publicación.
     
     
    Fonte: Metin2 Area
  17. Me Gusta
    Leandro Andrade reacted to Croqueta in [Release]arma   
    con esta quest sepuede cambiar perlas con armas cuando ablan con el npc creo que era el pescador

    Debes iniciar sesión para ver el contenido del enlace en esta publicación.
  18. Me Gusta
    Leandro Andrade reacted to Santy!. in Release gremios desbugeados   
    Bueno biendo que muchos sv tienen gremios bug aqui les traigo las quest de mis files reparadas x mi

    Debes iniciar sesión para ver el contenido del enlace en esta publicación.
  19. Me Gusta
    Leandro Andrade reacted to JamesBond007 in [Recopilacion]Quest De Metin2Zone   
    Ola metin2Zone Aqui traigo Una Recopilacion de Quest en Formato de Quest Yo pienso compartir todas mis cosas no soy como otros que empiezan a cobrar disfruten las cosas que valla trayendo
     
    Incluye el pack:
    -100 muertes
    -Guerra Reinos
    -AlmacenPortatil
    -Anillo de porter
    -Banco
    -BancoPortatil
    -ControlGM
    -Desafio
    -Sistema de GPS
    -Sistema de Puntos
    -Sistema de Logros
    -Automensaje
    -Azucar Caballo
    -Bienvenida
    -GmOnline
    -Informacion del Pj
    -Informacion del Servidor
    -Loteria
    -Pascua
    -SuraFantasma
    -Varita de Halloween
    -AutoRates
    -CambioRaza
    -DuelPoints
    -EquipoAlEmpezar
    -Habilidades a P
    -Halloween
    -Navidad
    -Sanvalentin
    -RetoDemonio
    -Menu Caballo
     
    En Total son 31 Quest Disfrutarlas para vuestro servidor
     
    Disfrutenlas MZ
     
    Descarga:
    Debes iniciar sesión para ver el contenido del enlace en esta publicación. Descarga:
    Debes iniciar sesión para ver el contenido del enlace en esta publicación. Descarga:
    Debes iniciar sesión para ver el contenido del enlace en esta publicación.  
    Un saludo para metin2zone.
  20. Me Gusta
    Leandro Andrade reacted to Serex in Modificar extensiones .EPK y .EIX   
    Bueno algunos veréis este tema algo inútil, pero lo dejo por aquí para la gente que no sepa como se hace, no todos empezamos sabiendo hacer todo.
     
    La guia consiste en cambiar las extensiones .EIX y .EPK de nuestro cliente y que nuestro metin2.bin las lea bien.
     
    1- Cambiamos todas las extensiones de los .EPK y .EIX de nuestro cliente por otra extensión de 3 letras.
     
    2- Abrimos nuestro archivo metin2.bin con un editor hexadecimal, si no tienes uno en google encuentras rapido.
     
    3- Buscamos la siguiente palabra en modo string: .epk
     

     
    Aquí veis que nos encontramos epk y eix, renombramos estas letras por las que pusiste en tus archivos anteriormente y guardamos.
     
    Una vez hecho esto esta todo listo y nuestro cliente debería leer correctamente las nuevas extensiones.
     
    Herramienta para cambiar extensiones (Editar a vuestro gusto con bloc de notas):
    Debes iniciar sesión para ver el contenido del enlace en esta publicación. Para usarla la metéis en la carpeta pack, hacéis doble click y listo ya tenéis todas las extensiones cambiadas.
    Gracias a Sema por la herramienta.
  21. Me Gusta
    Leandro Andrade reacted to Robert in [Encriptacion]Esconder ficheros en el launcher!   
    Bueno navegando por internet encontre una manera de esconder el pong del editor hex y ficheros tambien!Bueno aqui viene la guya:

    -Primero descargais esto:
    Debes iniciar sesión para ver el contenido del enlace en esta publicación.
    -Segundo miras atento todo lo que pone en las imagenes :
     


    -Tercero probamos si se lanza sin los root


    -En el cuarto paso podeis abrir el launcher con el editor hex y vereis que ya no encuentra el pong!
    Gracias por leerlo
    Contraseña: www.metin2zone.net
  22. Me Gusta
    Leandro Andrade reacted to Randaron in HackSheildPro completamente funcionando   
    Para files 2089M, y 34K 

    Debes iniciar sesión para ver el contenido del enlace en esta publicación. Para files 40k

    Debes iniciar sesión para ver el contenido del enlace en esta publicación.  
  23. Me Gusta
    Leandro Andrade reacted to ALEXANDER2020 in TEXTURA SUELO   
    Debes iniciar sesión para ver el contenido del enlace en esta publicación.
     

     
     

    Debes iniciar sesión para ver el contenido del archivo adjunto en esta publicación.
  24. Me Gusta
    Leandro Andrade reacted to SeMa™ in Nuevo creador de autopatch Oficial.   
    Buenos dias a todos, hace un rato que estaba haciendo 1 autopatch como el oficial y pues cogí el mismo e hice un sistema como el de epvp pero el autopach lo he rebajado de peso mucho y consegui hacerlo funcionar con un pequeño gui creado en vbasic.
    El peso final del autopach quedó en 6 mb, y en el de epvp quedaba en 12 o 16mb.
     
    Aqui una imagen 
     

     
    Bueno, aqui os dejo la descarga.
     
    Autopatcher Creator.rar (3.5 MB) Debes iniciar sesión para ver el contenido del enlace en esta publicación.!8sxVBYYB!emAmfFrDrRuHNdC_eIdolUu31oUD-lVAkLyS4mza1d4   Parte del Servidor para el que no lo tenga :   serverside.rar (531 KB) Debes iniciar sesión para ver el contenido del enlace en esta publicación.!M94UFCTT!Jfx_7gj7fZ7m-X-WoO-EfV0aH_Y7jCEMgN7Xm_2n4bs     Debes iniciar sesión para ver el contenido del enlace en esta publicación.    
    PD: al darle a editar autopatch te abre los archivos esenciales para editarlo, lenguaje, posiciones de las imagenes, botones, etc...
     
    Un saludo
  25. Me Gusta
    Leandro Andrade reacted to grimtales in [AUTOPATCH]actualizador Adios neoncube!   
    wenas a todo MZ ps aki traiendoles la ultima novedad en lanzador -actualizador espero y lo suban a importantes
    estos aportes no son de todos los dias mucho menos darle el privilegio a MZ ser el segundo foro en ser posteado
    weno ya enfade de tanta mamada bla bla bla al grano este actualizador por asi llamarle es como el neoncube
    solo que mejor mas fino y editable yo tube el honor de probarlo y va de 10 xD
     

     

    el archivo .rar bienen en 2 partes, la parte del cliente y la parte del servidor
    ojo: los botones estan en chino pero eso es facilisimo de hacer y hasta crearle su propio diseño

     
     
    pasamos a la configuracion de cliente
     
    como ven lo que esta en el rar carpeta cliente copian todo y lo extraen en la raiz

     
    una ves echo eso abrimos con un editor de texto el archivo llamado patch.cfg
    y nos saldra esto:

     
     
    y lo configuramos asi:


    Debes iniciar sesión para ver el contenido del enlace en esta publicación. Url de tu sitio en donde se recupera la contraseña de la cuenta  

    Debes iniciar sesión para ver el contenido del enlace en esta publicación. URL de tu sitio, específicamente el registro  
    config.exe Nombre del archivo de configuración
     
    metin2client.bin o metin2.exe Nombre del ejecutable (depende cual es su iniciador)
     

    Debes iniciar sesión para ver el contenido del enlace en esta publicación. Dirección en donde se encuentra patch.ver(el del servidor-web)  

    Debes iniciar sesión para ver el contenido del enlace en esta publicación. Dirección en donde se encuentra el archivo a descargar.ojo todo archivo.rar de actualizacion debera ser renombrado como (parche.rar) es algo que se corregira para la vercion v2 supongo ya que mi amigo Zeler se durmio y no me di cuenta de ello ya ke si queremos subir otra actualizacion tendriamos que borrar esa y subir la nueva y los users nuevos como bajarian
    la actualizacion viejita si ya no esta disponible weno mañana le comento y agrego aqui los cambios que hubiese
     
    Iniciar Palabra que se muestra en el botón del autopatch
     
    Ahora en patch.ver(cliente)
    Como no se ha usado tiene esto, 0.0.0.0, se cambia automáticamente cuando se descarga una actualización.
     
    ojo: en la carpeta llamada patchskin es donde se encuentran las imagenes ke editaran a su gusto
     
    pasamos a la parte del servidor-web
    subimos lo que se encuentra dentro de la carpeta servidor-web y lo subimos al host vía FTP,

     
    se crea una carpeta con el nombre patch y debe de kedar asi /www/patch
    Metí los ficheros (todos los de servidor-web) ya ahora vamos a usar el autopatch, en el patch.ver del servidor web, le agregas un 1, quedando de la siguiente manera 0.0.0.1, lo subes a tu servidor web y creas el parche, escoges los ficheros nuevos y los comprimes, si van dentro de la carpeta pack, crea una carpeta pack y mete allí los ficheros, comprimiendo y que el nombre sea el que pusiste en: Debes iniciar sesión para ver el contenido del enlace en esta publicación. del patch.cfg, lo subes a tu servidor web e inicias el parche.
    y a disfrutar de tu Lanzador-Actualizador muy bonito y editable
     
    PD: Si quieren bajar y namas meter el launcher les tira error, necesitan hacer todo el procedimiento.

     
    asi ke ni lo intenten, hagan todo el procedimiento o si no les tirara error
     
    y recuerden dar gracias no cuesta nada la neta!

     
    CREDITOS Y CREADOR

     
    Mr.Troll
     
    para que vean que gran amigo es de todos nosotros
     

    [25/09/2012 11:28:22 p.m.] Grimtales:lo posteare [25/09/2012 11:28:22 p.m.] Grimtales: con tu permiso [25/09/2012 11:28:27 p.m.] Grimtales: en MZ? [25/09/2012 11:28:38 p.m.] Grimtales: o ke solo se kede en tu web? [25/09/2012 11:28:51 p.m.] Jickson A. Troll Works: na, postealo allí [25/09/2012 11:28:51 p.m.] Jickson A. Troll Works: xD [25/09/2012 11:28:57 p.m.] Jickson A. Troll Works: me cae bien esa gente PD2:al que le gusto y sirvio den gracias y al ke no que se joda!!
     
     
    jajaaja ayer ya era de madrugada y se me olvido
    Debes iniciar sesión para ver el contenido del enlace en esta publicación.
×
×
  • Crear nuevo...