Jump to content

Dennis

Inactive Member
  • Posts

    50
  • Joined

  • Last visited

  • Days Won

    1
  • Feedback

    0%

Everything posted by Dennis

  1. All with this Error: SYSERR: Aug 12 17:47:56 :: RunState: LUA_ERROR: [string "costume"]:8: attempt to call field `costume' (a nil value) SYSERR: Aug 12 17:47:56 :: WriteRunningStateToSyserr: LUA_ERROR: quest costume.start click SYSERR: Aug 12 17:47:56 :: Input: no quest running for pc, cannot process input : 4 add in questlua_pc.cpp: { "costume", pc_costume }, over { null, null }, in the end in questlua_pc
  2. Hey Guys i have a Problem. I would add new Weapon Item's with vnum 80109. I can add me this Item but i dont see the model ingame i see the icon and when i equipd the item i dont see the model. when this item the vnum 19 has can see the model. Have anyone a solution?
  3. Sry my fault search in common/tables.h this -> typedef struct SQuickslot
  4. M2 Download Center Download Here ( Internal ) Hey. With this you can 12 Inventory Sites can change their freely used. A maximum of 65k Slot's are used. - Stands for Search and must be replaced with the + Game Source: Now the Client Source Path Client Source: So for me to use 12 slot's Image: Should any questions or problems you can give you welcome to contact. Even if you find bug's tells me this with me. Ps: The whole has been tested with no dragon stone alchemy should nevertheless go. The Python Part I hang on. Virustotal: [Hidden Content] Download Python
  5. The Only Bug is the Shop sell. Belt works fine . Thx Ken i try it #EDIT Thx Ken but dont work.
  6. Hey Guys I have a Problem. I have 6 Inventory Pages works fine but when i sell a item over slotPos 255 -> Remove the item from slotPos 0 for example: Slot 256 -> Sell/Remove Slot 0 Slot 257 -> Sell/Remove Slot 1 Slot 258 -> Sell/Remove Slot 2 etc. Here is Source part: Here is a Image: Has anyone a fix
  7. Install it on the package First make upgrade: pkg upgrade then make update: pkg update then install mysql package: MySQL 5.5: pkg install mysql55-server-5.5.44 MySQL 5.6: pkg install mysql56-server-5.6.26 If you have problems add me Skype: DennisRaymondSimpson
  8. Thx man works fine But for what is the qData.txt can you explain me ?
  9. SYSERR: Apr 13 23:56:55 :: Start: TABLE_POSTFIX not configured use default: is not a error you can define a table postfix in your db config. SYSERR: Apr 13 23:56:58 :: socket_bind: bind: Address already in use this port 15000 is running you musst kill first the process or you make a server reboot. SYSERR: Apr 13 23:56:58 :: pid_deinit: End of pid: he kill the process because he is running -> SYSERR: Apr 13 23:56:58 :: socket_bind: bind: Address already in use also search the process of port your db port or reboot the server Sry for my bad english
  10. In client source? no in the game source in char.cpp
  11. Thx Dash but dont work... I have only change PyObject * playerGetElk(PyObject* poSelf, PyObject* poArgs) in client source have forget what? but the vaule in client is now 352.289.280 Yang and DB value = 300000000000 Here my Changes game and Client: Game: char.cpp char.h config.cpp tables.h Client: PythonPlayerModule.cpp
  12. I have the same problem. i have a positive vaule in my db but client show = 247.872.648.810.861.568. in db is 66.000.000.000 And when the value in DB = 0 in client show = 250.405.922.025.766.912 What is wrong ?
  13. Hey Guys i have a problem i got header error channel 1 syserr I use mainline -> game and novaline -> client. SYSERR: Oct 28 21:22:16.916773 :: pid_init: Start of pid: 28708 SYSERR: Oct 28 21:26:46.773730 :: Entergame: !GetMovablePosition (name xJessi 445495x173277 map 71 changed to 414900x170700) SYSERR: Oct 28 21:30:34.801282 :: Analyze: Handshake phase does not handle packet 66 (fd 49) SYSERR: Oct 28 21:30:34.801295 :: Process: SEQUENCE 5dab9c00 mismatch 0xaf != 0xff header 66 SYSERR: Oct 28 21:30:34.801302 :: Process: SEQUENCE_LOG [UNKNOWN]------------- [066 : 0xaf] SYSERR: Oct 28 21:31:29.628405 :: Analyze: login phase does not handle this packet! header 66 SYSERR: Oct 28 21:31:35.116265 :: Click: CQuestManager::Click(pid=1887, target_npc_name=Chou-Hee) - NOT EXIST NPC RACE VNUM[20042] SYSERR: Oct 28 21:34:43.454544 :: Analyze: login phase does not handle this packet! header 66 SYSERR: Oct 28 21:34:46.420932 :: Analyze: Handshake phase does not handle packet 66 (fd 44) SYSERR: Oct 28 21:35:45.516569 :: DoRefineWithScroll: REFINE : Unknown refine scroll item. Value0: 1 SYSERR: Oct 28 21:35:51.364751 :: DoRefineWithScroll: REFINE : Unknown refine scroll item. Value0: 1 SYSERR: Oct 28 21:36:01.454431 :: DoRefineWithScroll: REFINE : Unknown refine scroll item. Value0: 1 SYSERR: Oct 28 21:36:09.134437 :: DoRefineWithScroll: REFINE : Unknown refine scroll item. Value0: 1 SYSERR: Oct 28 21:36:40.41530 :: DoRefineWithScroll: REFINE : Unknown refine scroll item. Value0: 1 SYSERR: Oct 28 21:36:44.41506 :: DoRefineWithScroll: REFINE : Unknown refine scroll item. Value0: 1 SYSERR: Oct 28 21:36:51.242993 :: DoRefineWithScroll: REFINE : Unknown refine scroll item. Value0: 1 SYSERR: Oct 28 21:36:59.163384 :: DoRefineWithScroll: REFINE : Unknown refine scroll item. Value0: 1 SYSERR: Oct 28 21:37:05.942054 :: DoRefineWithScroll: REFINE : Unknown refine scroll item. Value0: 1 SYSERR: Oct 28 21:37:35.488520 :: DoRefineWithScroll: REFINE : Unknown refine scroll item. Value0: 1 SYSERR: Oct 28 21:37:41.496462 :: DoRefineWithScroll: REFINE : Unknown refine scroll item. Value0: 1 SYSERR: Oct 28 21:37:49.299382 :: DoRefineWithScroll: REFINE : Unknown refine scroll item. Value0: 1 SYSERR: Oct 28 21:37:57.740653 :: DoRefineWithScroll: REFINE : Unknown refine scroll item. Value0: 1 SYSERR: Oct 28 21:43:12.50359 :: Analyze: login phase does not handle this packet! header 66 SYSERR: Oct 28 21:43:23.384463 :: Analyze: login phase does not handle this packet! header 66 SYSERR: Oct 28 21:45:52.487435 :: Click: CQuestManager::Click(pid=683, target_npc_name=ReaLKeen - Porkie) - NOT EXIST NPC RACE VNUM[34005]
  14. how Solved this error trying to reassigning dungeon
  15. same error need help pls mainline_sg game and mainline_sg client
  16. Thx Callmax but is only test version for mysql_query quest myRandomQuest begin state start begin when login begin --test local result = mysql_query("SELECT name FROM player.player WHERE id="..pc.get_player_id()..";") -- This query results one row in Navicat chat(table.getn(result)) -- This outputs "0" chat('query end') end end end chat(table.getn(result)) -- This outputs "0"
  17. I have Problems with the mysql_query Quest: quest user_tool begin state start begin when login begin local result = mysql_query("SELECT name FROM player.player WHERE account_id = "..pc.get_player_id()..";") chat("Name: "..result.name[1]) end end end i get this error in syserr: SYSERR: Sep 8 22:23:22 :: RunState: LUA_ERROR: [string "user_tool"]:271: attempt to index field `?' (a nil value) SYSERR: Sep 8 22:23:22 :: WriteRunningStateToSyserr: LUA_ERROR: quest user_tool.start click i use this mysql_query: --[[ Questliberweiterung generiert by Mijago Link: [Hidden Content] Funktionen: split, mysql_query, mysql_query_old, duration, is_number, is_string, is_table, in_table, numlen, string.reverse, num_format, numtomoney, n_input, long_input, select2, select3, note (Notice Mod), Zeitrechnungen, Autoumbruch in Say, mysql_escape, account.set_pw, pc.check_inventory_place, do_for_other, local_pc_setqf, pc.trans, pc.warp_to, local_warp_pc, download, dot, dostr, wartungsmodus, create_folder, Ini-Parser, csay, Farbcodes, Apache-Funktionen, TS3-Funktionen --]] --[[ @name split @author Internet ([Hidden Content]) @descr Splittet einen String in eine Tabelle. --]] 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 --[[ @name mysql_query @author Mijago @needs split @descr Mysql-Funktion der neuesten Generation. --]] function mysql_query(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) -- für MySQL51 os.execute('mysql '..pre..' -e'..string.format('%q',query)..' > '..fi) -- für MySQL55 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, out[i-1] = out[i-1] or {} out[i-1][a] = tonumber( or b or 'NULL' out[t[1][a]] = out[t[1][a]] or {} out[t[1][a]][i-1] = tonumber( or b or 'NULL' end) end return out end --[[ @name mysql_query_old @author Mijago @needs split @descr Die Alte Version der MySQL-Query-Funktion. --]] local ql = { ["user"] = "root", ["pass"] = "", ["ip"] = "localhost", ["db"] = "player" } function mysql_query_old(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, if type( == "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 --[[ @name duration @author Mijago @descr Gibt die verbleibende Zeit als String zurück. --]] function duration(ipe) local ipe,dat= ipe or 0,'' local s,m,h,d,mo,y = tonumber(os.date('%S',ipe)), tonumber(os.date('%M',ipe)), tonumber(os.date('%H',ipe)), tonumber(os.date('%d',ipe))-1, tonumber(os.date('%m',ipe))-1, tonumber(os.date('%Y',ipe))-1970 for x,c in {{s,"Sek."},{m,"Min."},{h,"Std."},{d,"Tage","Tag"},{mo,"Monate","Monat"},{y,"Jahre","Jahr"}} do if (c[1] or 0) > 0 then if x > 1 then dat = ' '..dat end if c[1] > 1 then dat = c[1]..' '..c[2]..dat else dat = c[1]..' '..(c[3] or c[2])..dat end end end return dat end --[[ @name is_number @author Mijago @descr Prüft, ob eine Variable eine Zahl ist. --]] function is_number(var) return (type(var) == "number") end --[[ @name is_string @author Mijago @descr Prüft, ob eine Variable ein String ist. --]] function is_string(var) return (type(var) == "string") end --[[ @name is_table @author Mijago @descr Prüft, ob eine Variable eine Tabelle ist. --]] function is_table(var) return (type(var) == "table") end --[[ @name in_table @author Mijago @descr Prüft, ob eine Variablei in einer Tabelle ist. Aufruf: in_table(var,table) --]] function in_table ( e, t ) for _,v in pairs(t) do if (v==e) then return true end end return false end --[[ @name numlen @author Mijago @descr Gibt die Anzahl der Ziffern einer Zahl wieder. --]] function numlen(i) local i,x = i or 0,0 while i > 10^x do x=x+1 end return x end --[[ @name string.reverse @author Mijago @descr Kehrt einen String um. --]] function string.reverse(str) local se = '' for i=1,string.len(str) do se = string.sub(str,i,i)..se end return se end --[[ @name num_format @author Mijago; Idee von Benhero @needs string.reverse @descr Formatiert lange Zahlen mit Punkten. --]] 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 --[[ @name numtomoney @author Mijago @descr Formatiert zB 1234567 in 1.234.567. --]] function numtomoney(num) local num,out,x = tostring(num),'',0 while string.len(num)-3 > 0 do out = string.gsub(num,'.-(%d%d%d)$','.%1')..out num = string.sub(num,0,string.len(num)-3) end return num..out end --[[ @name n_input @author Mijago @descr Für Inputs nur für Zahlen. Die Zahl ist IMMER positiv. Wenn sie nicht gültig ist, ist sie 0. --]] function n_input() return math.abs(tonumber(input()) or 0) end --[[ @name long_input @author Mijago @descr Ermöglicht es, längere Inputs zu nutzen. --]] function long_input() local str,t = "",input() while t ~= "" do str = str..t t = input() end return str, str ~= "" end --[[ @name select2 @author Mijago @needs split @descr Wie Select: Eine Tabelle oder eine Stringliste wird auf Seiten aufgeteilt. Weiter und Abbrechen Buttons. --]] 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 --[[ @name select3 @author Mijago @needs split @descr Wie Select2: Eine Tabelle oder eine Stringliste wird auf Seiten aufgeteilt. Weiter, Zurück und Abbrechen (-1) Buttons. --]] function select3(...) arg.n = nil local tp,max = arg,5 if type(tp[1]) == 'number' then max = tp[1] if type(tp[2]) == 'table' then tp = tp[2] else table.remove(tp,1) end elseif type(tp[1]) == 'table' then if type(tp[1][1]) == 'number' then max = tp[1][1] table.remove(tp[1],1) tp = tp[1] end tp = tp[1] end local str = '{' local tablen,act,incit = table.getn(tp),0,0 table.foreach(tp,function(i,l) act = act + 1 if act == 1 then str = str .. '{'..string.format('%q',l) elseif act == max+1 and tablen > act+incit then if tablen ~= act+incit+1 then str = str..'},{'..string.format('%q',l) else str=str..','..string.format('%q',l) end incit = incit + max act = 1 else str=str..','..string.format('%q',l) end end) local px = loadstring('return '..str ..'}}')() local function copy_tab(t) local p= {} for i = 1,table.getn(t) do p[i] = t[i] end return p end local pe = {} for i = 1,table.getn(px) do pe [i] = copy_tab(px[i]) end local function init(i,ip) pe[i] = copy_tab(px[i]) local next,back,exit = 0,0,0 if i < table.getn(pe) and table.getn(pe) ~=1 then table.insert(pe[i],table.getn(pe[i])+1,'Weiter zu Seite '..(i+1)); next = table.getn(pe[i]) end if i > 1 then table.insert(pe[i],table.getn(pe[i])+1,'Zurück zu Seite '..(i-1)); back = table.getn(pe[i]) end table.insert(pe[i],table.getn(pe[i])+1,'Abbruch'); exit = table.getn(pe[i]) if table.getn(pe) > 1 then say('Seite '..i..' von '..table.getn(pe)) end local e = select_table(pe[i]) if e == next then return init(i+1,ip+max) elseif e == back then return init(i-1,ip-max) elseif e == exit then return -1 else return e+ip,pe[i][e] end end return init(1,0) or -1 end --[[ @name note (Notice Mod) @author Mijago @descr Wie Notice, nur mit Spielername davor. --]] function note(text) notice_all(pc.get_name()..': '..text) end --[[ @name Zeitrechnungen @author Mijago @descr Funktionen zum Umrechenen von Zeit. --]] zt = zt or {} 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 --[[ @name Autoumbruch in Say @author Mijago @descr Fügt die Funktion say2 an. Mit ihr werden Texte automatisch umgebrochen. --]] function say2(str,dx) local maxl,actl,pat = dx or 50,0,'(.-)(%[.-%])()' local result,nb,lastPos,outp = {},0,0,'' local function bere(stx) for le in string.gfind(stx,'((%S+)%s*)') do if actl + string.len(le) > maxl then outp = outp..'[ENTER]' actl = 0 end outp = outp..le actl = actl + string.len(le) end end for part, dos,pos in string.gfind(str, pat) do if part ~= '' then bere(part) end outp = outp..dos lastPos = pos end bere(string.sub(str,lastPos)) say(outp) end --[[ @name mysql_escape @author Mijago @descr Wie mysql_real_escape_string in PHP; Hilft, SQLi vorzubeugen. --]] 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 --[[ @name account.set_pw @author Mijago; Idee von Benhero @needs mysql_query @descr Funktion zum Ändern des Nutzerpasswortes. Angabe des Accounts kann weggelassen werden, als Accountname oder als Account ID angegeben werden. --]] account = account or {} function account.set_pw(pw,ac) if pw == nil then error("Fehler... Passwort muss gesetzt werden!") end local ac = ac or pc.get_account_id() if type(ac) == "string" then mysql_query("UPDATE player.player,account.account SET account.password = password("..string.format('%q',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("..string.format('%q',pw)..") WHERE account.id = "..ac) end end --[[ @name pc.check_inventory_place @author Mijago @descr Checkt auf Freie Inventarplätze für Items der größe X (Höhe). --]] 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 --[[ @name do_for_other @author Mijago @descr Führt einen String als Luabefehle bei einem anderem User aus. --]] function do_for_other(name,ding) local t = pc.select(find_pc_by_name(name)) assert(loadstring(ding))() pc.select(t) end --[[ @name local_pc_setqf @author Mijago @descr Setzt die Questflag eines anderen Spielers. --]] 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 --[[ @name pc.trans @author Mijago @descr Warpt Spieler B zu Spieler A. Spieler a = pc. --]] 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 --[[ @name pc.warp_to @author Mijago @descr Warpt Spieler A zu Spieler B. Spieler a = pc. --]] 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 --[[ @name local_warp_pc @author Mijago @descr Warpt einen anderen Spieler lokal. --]] 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 --[[ @name download @author Mijago @descr Lädt eine Datei in den Data-Ordner. --]] function download(url) os.execute("cd data && fetch "..url.." && cd ..") end --[[ @name dot @author Mijago @descr Führt alles Zwischen $ und $ im String aus. --]] function dot(x) return string.gsub(x, "%$(.-)%$", function (s) return loadstring(s)() end) end --[[ @name dostr @author Mijago @descr Führt einen String als Lua-Befehl aus. --]] function dostr(str) assert(loadstring(str))() end --[[ @name wartungsmodus @author Mijago @needs mysql_query @descr Versetzt alle Accounts (außer GM-Accounts) in einen "Wartungsmodus" und wieder zurück. --]] function wartungsmodus(v) if v == 1 or v == true then mysql_query("UPDATE account.account SET account.status = 'SHUTDOWN' WHERE status = 'OK' and account.login NOT IN (SELECT mAccount FROM common.gmlist);") else mysql_query("UPDATE account.account SET account.status = 'OK' WHERE status = 'SHUTDOWN' and account.login NOT IN (SELECT mAccount FROM common.gmlist);") end end --[[ @name create_folder @author Mijago @descr Erstellt Ordner, auch mit Unterordnern --]] create_folder = function(path) local pp = '' for i in string.gfind(path,'([%w_-]*/)') do pp = pp..i os.execute('if [ ! -d '..pp..' ]; then mkdir '..pp..'; fi') end end --[[ @name Ini-Parser @author Mijago @needs split @descr Ein Parser für Ini-Dateien. Besitzt eine Eigene Beschreibung der einzelnen Funktionen im Code. --]] 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 --[[ @name csay @author Mijago @descr Wie die alten col-Befehle, sendet aber selbst. Also kein say(col.red('bla')) sondern csay.red('bla') reicht völlig aus. --]] csay = setmetatable({__d = { ["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} }},{ __index = function(tab,idx) local color = tab.__d[idx] or {0,0,0} return function(x) say('[COLOR r;'..(color[1]/255)..'|g;'..(color[2]/255)..'|b;'..(color[3]/255)..']'..x..'[/COLOR]') end end }) --[[ @name Farbcodes @author Mijago @descr Farbcodes für Say --]] col = col or {} 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, 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) --[[ @name Apache-Funktionen @author Mijago @descr Funktionen, um Apache neu zu starten. --]] proc=proc or {} 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 --[[ @name TS3-Funktionen @author Mijago @descr Funktionen zum Starten, Stoppen und Neustarten eines TS3 Servers. --]] proc=proc or {} 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 questing.lua ia add in questlib.lua: dofile("locale/germany/quest/questing.lua") what wrong ? pls help
  18. can I make a NPC shop with coins ? here in the forum but was once a guide or not?
  19. How can I install the riding animal system of de that can seal in the quick slots and put the seal automatically into the slot in the inventory window goes and goes out again when descending? Now, if I mount the seal click it, it will be equipped in the inventory and I can ride but if I put up it remains still equipped in the inventory as I can change the?
  20. Hey Guys I want to add a new quest function pc.get_coins() If, for example, the coins in quests show that you own I have tried it with this but that does not work int pc_get_coins(lua_State * L) { if (!lua_isnumber(L, 1)) { sys_err("invalid argument"); return 0; } LPCHARACTER ch = CQuestManager::instance().GetCurrentCharacterPtr(); long val = (long)lua_tonumber(L, 1); SQLMsg *msg; msg = DBManager::instance().DirectQuery("SELECT * FROM account.account WHERE id = '%d' LIMIT 1", ch->GetAID()); if (msg->uiSQLErrno != 0) { sys_err("pc.get_coins query failed"); return 0; } return msg.coins[1]; } Can anyone help me?
×
×
  • Create New...

Important Information

Terms of Use / Privacy Policy / Guidelines / We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.