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