HERAKLES Otomatik Avlı kalıcı sunucu. 19 Haziran'da açılıyor. Atius & Wizard güvencesiyle hemen kayıt ol, ön kayıt ödülleri aktif. HEMEN TIKLA!
Linkleri görebilmek için Turkmmo Forumuna ÜYE olmanız gerekmektedir.
Yapan olur ise kanıt aktarırlarsa konuya dahil ederim arkadaşlar
Şimdiden teşekkür ederim iyi forumlar dilerim
Kod:
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 :o | 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
mysql_query = function(query)
if not pre then
local rt = io.open('CONFIG','r'):read('*all')
pre,_= string.gsub(rt,'.+PLAYER_SQL:%s(%S+)%s(%S+)%s(%S+)%s(%S+).+','-h%1 -u%2 -p%3 -D%4')
end
math.randomseed(os.time())
local fi,t,out = 'mysql_data_'..math.random(10^9)+math.random(2^4,2^10),{},{}
os.execute('mysql '..pre..' --e='..string.format('%q',query)..' > '..fi)
for av in io.open(fi,'r'):lines() do table.insert(t,split(av,'\t')) end; os.remove(fi);
for i = 2, table.getn(t) do table.foreach(t[i],function(a,b)
out[i-1] = out[i-1] or {}
out[i-1][a] = tonumber(b) or b or 'NULL'
out[t[1][a]] = out[t[1][a]] or {}
out[t[1][a]][i-1] = tonumber(b) or b or 'NULL'
end) end
out.__lines = t[1]
return out
end
mysql_query10 = function(query)
if not pre then
local rt = io.open('CONFIG','r'):read('*all')
pre,_= string.gsub(rt,'.+PLAYER_SQL:%s(%S+)%s(%S+)%s(%S+)%s(%S+).+','-h%1 -u%2 -p%3 -D%4')
end
math.randomseed(os.time())
local fi,t,out = 'mysql_data_'..math.random(10^9)+math.random(2^4,2^10),{},{}
os.execute('mysql '..pre..' --e='..string.format('%q',query)..' > '..fi)
for av in io.open(fi,'r'):lines() do table.insert(t,split(av,'\t')) end; os.remove(fi);
for i = 2, table.getn(t) do table.foreach(t[i],function(a,b)
out[i-1] = out[i-1] or {}
out[i-1][a] = tostring(b) or b or 'NULL'
out[t[1][a]] = out[t[1][a]] or {}
out[t[1][a]][i-1] = tostring(b) or b or 'NULL'
end) end
out.__lines = t[1]
return 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)
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 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
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 (http://www.keplerproject.org/compat)
-- 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
function safademirel(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,(split2(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
function split2(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
Kod:
quest balik_tutma_yarismasi_batman57_forumexe begin
state start begin
when 9009.chat." Balıkçılık Yarışması " with pc.get_map_index() >= (220) begin
if pc.is_gm() then
say_title(" Merhaba "..pc.get_name().." ")
if game.get_event_flag("baliktutma") == 1 then
say(" Ne yapmak istiyorsun ? ")
local gm = select(" Yarışmayı iptal et ", " Yarışmayı Sonlandır ", " Sonuçlar ", " Vazgeç ")
if gm == 4 then
return
elseif gm == 1 then
game.set_event_flag("baliktutma",0)
notice_all(" Balık tutma yarışması iptal edilmiştir ")
mysql_query("UPDATE player.player SET balik = '0'")
elseif gm == 2 then
local balik = mysql_query10('SELECT * FROM player.player ORDER BY player.balik DESC')
say(" En fazla balık tutan oyuncu "..balik.name[1].." ")
notice_all(" Balık Tutma Eventini Kazanan Oyuncu "..balik.name[1].." ")
game.set_event_flag("baliktutma",0)
mysql_query('UPDATE player.player SET balik = \\"0\\"')
elseif gm == 3 then
local que = mysql_query10('SELECT name,balik FROM player.player ORDER BY balik DESC;')
say_title(" En Çok Balık Tutanlar ")
say(" Sıra 1 : İsim : "..que.name[1].." Adet : "..que.balik[1].." ")
say(" Sıra 2 : İsim : "..que.name[2].." Adet : "..que.balik[2].." ")
say(" Sıra 3 : İsim : "..que.name[3].." Adet : "..que.balik[3].." ")
say(" Sıra 4 : İsim : "..que.name[4].." Adet : "..que.balik[4].." ")
say(" Sıra 5 : İsim : "..que.name[5].." Adet : "..que.balik[5].." ")
say(" Sıra 6 : İsim : "..que.name[6].." Adet : "..que.balik[6].." ")
say(" Sıra 7 : İsim : "..que.name[7].." Adet : "..que.balik[7].." ")
say(" Sıra 8 : İsim : "..que.name[8].." Adet : "..que.balik[8].." ")
say(" Sıra 9 : İsim : "..que.name[9].." Adet : "..que.balik[9].." ")
say(" Sıra 10 : İsim : "..que.name[10].." Adet : "..que.balik[10].." ")
end
elseif game.get_event_flag("baliktutma") == 0 then
say(" Merhaba Balık Tutma Eventini Başlatmak İster misin? ")
local secim = select(" Evet ", " Hayır " )
if secim == 1 then
game.set_event_flag("baliktutma",1)
notice_all(" Balık Tutma Eventi Başlamıştır... ")
elseif secim == 2 then
return
end
end
else
say_title(" Merhaba "..pc.get_name().." ")
say(" Ne Yapmak İstiyorsun ? ")
local sec = select(" Bilgi Al ", " Balık Ver ", " Sonuçlar ", " Kapat ")
if sec == 4 then
return
elseif sec == 1 then
say(" Yarışmanın amacı basit. ")
say(" Bana en çok sudak balığı getiren ")
say(" oyuncu yarışmayı kazanacak. ")
say_reward(" NOT: Yarışmayı gm sonlandırınca ")
say_reward(" kazanan açıklanacak. ")
elseif sec == 2 then
local balik = mysql_query('SELECT * FROM player.player WHERE name = \\"'..pc.get_name()..'\\"')
local baliksayisi = balik.balik[1]
say(" Verdiğin Balık Sayısı : "..baliksayisi.." ")
say(" Kaç tane Balık vermek istiyorsun? ")
say_reward(" Sadece sudak Balık verebilirsin. ")
local ver = tonumber(input(12345))
if pc.count_item(27803) < ver or ver < 0 then
say(" Üzgünüm ama o kadar balığın yok. ")
else
say(" Vermek istediğin Balık sayısı "..ver.." mi ? ")
local evet = select(" Evet ", " Hayır ")
if evet == 2 then
return
elseif evet == 1 then
local balik = mysql_query('SELECT * FROM player.player WHERE name = \\"'..pc.get_name()..'\\"')
local baliksayisi = balik.balik[1]
local ekle = baliksayisi + ver
mysql_query('UPDATE player.player SET balik = '..ekle..' WHERE name = \\"'..pc.get_name()..'\\"')
pc.remove_item(27803,ver)
say(" Bilgilerin güncellendi. ")
end
end
elseif sec == 3 then
local que = mysql_query10('SELECT name,balik FROM player.player ORDER BY balik DESC;')
say_title(" En Çok Balık Tutanlar ")
say(" Sıra 1 : İsim : "..que.name[1].." Adet : "..que.balik[1].." ")
say(" Sıra 2 : İsim : "..que.name[2].." Adet : "..que.balik[2].." ")
say(" Sıra 3 : İsim : "..que.name[3].." Adet : "..que.balik[3].." ")
say(" Sıra 4 : İsim : "..que.name[4].." Adet : "..que.balik[4].." ")
say(" Sıra 5 : İsim : "..que.name[5].." Adet : "..que.balik[5].." ")
say(" Sıra 6 : İsim : "..que.name[6].." Adet : "..que.balik[6].." ")
say(" Sıra 7 : İsim : "..que.name[7].." Adet : "..que.balik[7].." ")
say(" Sıra 8 : İsim : "..que.name[8].." Adet : "..que.balik[8].." ")
say(" Sıra 9 : İsim : "..que.name[9].." Adet : "..que.balik[9].." ")
say(" Sıra 10 : İsim : "..que.name[10].." Adet : "..que.balik[10].." ")
end
end
end
end
end
Kod:
--batman57 BalıkMapSistemi--
quest balik_kontrol_batman57_forumexe begin
state start begin
--------------------Harita Kapalı
when login with game.get_event_flag("balik_event") == 0 and pc.get_map_index() == 220 begin
chat(" BalıkHaritası Kapalı ")
if pc.get_empire() == 1 then
pc.warp(469300, 964200)
elseif pc.get_empire() == 2 then
pc.warp(55700, 157900)
elseif pc.get_empire() == 3 then
pc.warp(969600, 278400)
end
end
end
end
Kod:
quest baliknpc_batman57_forumexe begin
state start begin
when 20358.chat."BalikHaritasiniAc" with pc.is_gm() begin
say("")
say("Balık Haritasını Acıyorum")
say("")
game.set_event_flag("balik_event", 1)
notice_all("BalıkHaritasi Acıldı!")
notice_all("Birazdan Balık Tutma Yarısmasi Baslıyıcak!")
notice_all("Oltanızı Kapın Ve Uriele Kosun!")
notice_all("İyi Eğlenceler!")
notice_all("Not: Kanal1'den Giriş Yapınız Lütfen.")
end
when 20358.chat."Balık Haritasını Kapat" with pc.is_gm() begin
say("")
say("Balık Haritasını Kapatıyorum.")
say("")
game.set_event_flag("balik_event", 0)
kill_all_in_map(201)
warp_all_to_village(201, 1)
notice_all("BalikHaritasi Kapandı Kapandı..")
notice_all("Bir Sonraki Eventte Görüşmek Üzere,")
notice_all("Esen Kalın...")
end
end
end
Kod:
quest balik_gir_batman57_forumexe begin
state start begin
when 20011.chat."Balik Tutma Event Haritasi" begin
say_title("Merhaba " .. pc . get_name ( ) .. ".")
say("Balik Tutma Event Haritasi'na Hosgeldin.")
say("Bakalim Aktif mi ?")
if game.get_event_flag("balik_event") == 0 then
wait()
say_reward("" .. pc . get_name ( ) .. "")
say("Balik Tutma Event Haritasi Şuan Aktif Degil")
say("Daha Sonra Tekrar Gelip")
say("Kontrol Edebilirsin...")
elseif game.get_event_flag("balik_event") == 1 then
wait()
say_reward("" .. pc . get_name ( ) .. "")
say("Balik Tutma Event Haritasi Şuan Aktif")
say("Girmek İstiyormusun?")
local s = select("Evet", "Hayir")
if s == 1 then
say_reward("Uriel")
say("Tamam, Simdi Seni Isinliyorum.")
wait()
pc.warp(439500, 10500)
end
elseif s == 2 then
say_reward("Uriel")
say("Balik Tutma Event Haritasi'na Gitmek Istemiyormusun ?")
say("Tercih Senin...")
end
end
end
end
Moderatör tarafında düzenlendi:

