Sari la conținut

Robot

Members
  • Număr conținut

    69
  • Înregistrat

  • Ultima Vizită

Orice postat de Robot

  1. Hello my own use simple anti cheat protection like enigma; What u need? Simple php file for logging Win32modules for 2.2 or 2.7 and badlist.php(https://www.mediafire.com/?3bo3f7nntdp8zb0) and secur.dll(https://www.mediafire.com/?oa9j4zg02jacg1b) What this Functions: Base protection > Name + Byte Folder Secuirty > BGM + Miles + Lib + Main Folder Folder Check > ".py" + ".mix" + ".m3d" + ".bat" + ".flt" + ".asi" Hash Check > Miles folder, python core, security base dll, os.pyc(for baseinit methode) TaskList Check Windows Check Script; import sys import os import app import time import thread import dbg import ui import md5 import urllib import uiCommon from os.path import basename try: import win32api except: syslog('Cant import win32api module') dbg.LogBox("Cant import win32api module") app.Exit() DATA_URL = "http://koray.zz.mu/imtn2/client/" launchername = sys.executable taskname = basename(launchername) launchers = os.path.getsize(taskname) launchersize = int(launchers) check=' '.join(os.listdir(os.getcwd())) check_miles=' '.join(os.listdir(os.getcwd()+"miles")) check_bgm=' '.join(os.listdir(os.getcwd()+"bgm")) check_lib=' '.join(os.listdir(os.getcwd()+"lib")) check_folder=' '.join(os.listdir(os.getcwd())) ######preparation################################# ##HashFonk def getMd5(file): m = md5.new() fp = open(file,"rb") while 1: data = fp.read(1024) if not data:break m.update(data) fp.close() return m.hexdigest() def getMD5ByFileName(file): try: file = file.strip() md5hash = md5.new() dllFile = open(file, 'rb') tmpFileBlock = dllFile.read() dllFile.close() md5hash.update(tmpFileBlock) md5hash = md5hash.hexdigest() return md5hash except: return '' def ReturnMd5(file,hash): if(getMd5(file) != hash ):return TRUE else:return FALSE def syslog(s): file = open('syserr.txt', 'a') file.write('n' + s + 'n') file.close() def ingameNotifyPopupAndExit(text = ''): popup = uiCommon.PopupDialog() popup.SetWidth(700) popup.SetText(text) popup.Show() time.sleep(7) ###/////////###################################### #Base Security > Name+Byte def BaseCheck(): global launchername, taskname, launchersize if not taskname == "metin2cliento.exe" or launchersize == "3171985": dbg.LogBox("Wrong launcher") os.system("taskkill /im %s /f" % taskname) #Folder Secuirty > BGM + Miles + Lib + Main Folder def FileCheck(): global check, check_bgm, check_folder, check_miles, check_lib banned_ext=[".mix", ".m3d", ".flt", ".asi", ".bat"] miles_clean=["mssa3d.m3d", "mssds3d.m3d", "mssdsp.flt", "mssdx7.m3d", "msseax.m3d", "mssmp3.asi", "mssrsx.m3d", "msssoft.m3d", "mssvoice.asi"] lib_clean=['__future__.pyc','copy_reg.pyc','linecache.pyc','ntpath.pyc','os.pyc','site.pyc','stat.pyc','string.pyc','traceback.pyc','types.pyc','UserDict.pyc','urllib.pyc','win32con.pyc','threading.pyc'] folder_clean=['BGM', 'artpclnt.dll', 'pn.dll', 'channel.inf', 'config.exe', 'devil.dll', 'DSETUP.dll', 'errorlog.exe', 'errorlog.txt', 'granny2.dll', 'ijl15.dll', 'ilu.dll', 'locale.cfg', 'metin2cliento.exe', 'metin2.cfg', 'mouse.cfg', 'mscoree.dll', 'MSS32.DLL', 'msvcp60.dll', 'MSVCRTD.DLL', 'patchw32.dll', 'python22.dll', 'SpeedTreeRT.dll', 'syserr.txt', 'unicows.dll', 'hshield', 'lib', 'mark', 'miles', 'pack', 'temp', 'upload', 'patchskin', 'skins', 'screenshot'] bgm_clean=['a_rhapsody_of_war.mp3','another_way.mp3','back_to_back.mp3','blacksea.mp3','catacomb_of_devil.mp3','characterselect.mp3','death_of_landmark.mp3','desert.mp3','enter_the_east.mp3','follow_war_god.mp3','last-war2.mp3','login_window.mp3','lost_my_name.mp3','m2bg.mp3','misty_forest.mp3','monkey_temple.mp3','mountain_of_death.mp3','mt.mp3','only_my_battle.mp3','open_the_gate.mp3','save_me.mp3','wedding.mp3','wonderland.mp3','xmas.mp3'] for i in miles_clean: check_miles=check_miles.replace(i, '') for i in lib_clean: check_lib=check_lib.replace(i, '') for i in bgm_clean: check_bgm=check_bgm.replace(i, '') for i in folder_clean: check_folder=check_folder.replace(i, '') for i in banned_ext: if check.find(i) != -1: f=open("syserr.txt", "w") nome="%s%s" % (i[0].upper(), i[1:]) f.write("[HACKSHIELD]Invaild File!n" + nome) f.close() app.Exit() if check_bgm.find(i) != -1: f=open("syserr.txt", "w") nome="%s%s" % (i[0].upper(), i[1:]) f.write("[HACKSHIELD]Invaild File!n" + nome) f.close() app.Exit() if check_miles.find(i) != -1: f=open("syserr.txt", "w") nome="%s%s" % (i[0].upper(), i[1:]) f.write("[HACKSHIELD]Invaild File!n" + nome) f.close() app.Exit() if check_lib.find(i) != -1: f=open("syserr.txt", "w") nome="%s%s" % (i[0].upper(), i[1:]) f.write("[HACKSHIELD]Invaild File!n" + nome) f.close() app.Exit() if check_folder.find(i) != -1: f=open("syserr.txt", "w") nome="%s%s" % (i[0].upper(), i[1:]) f.write("[HACKSHIELD]Invaild File!n" + nome) f.close() app.Exit() #Folder check > ".py" def PyDelete(): while 1 == 1: files = [f for f in os.listdir('.') if os.path.isfile(f)] for f in files: if f.endswith(".py"): f1 = f try: os.remove(f) except: pass if f1 == "logininfo.py": syslog("[HACKSHIELD]Detected Hack File") app.Exit("") time.sleep(1) #######Hash Control def HashCheck(): ##Miles if len(os.listdir('miles')) != 10 : return 'Wrong file detected' d = { 'miles/mss32.dll': '6400e224b8b44ece59a992e6d8233719', 'miles/mssa3d.m3d':'e089ce52b0617a6530069f22e0bdba2a', 'miles/mssds3d.m3d':'85267776d45dbf5475c7d9882f08117c', 'miles/mssdsp.flt':'cb71b1791009eca618e9b1ad4baa4fa9', 'miles/mssdx7.m3d':'2727e2671482a55b2f1f16aa88d2780f', 'miles/msseax.m3d':'788bd950efe89fa5166292bd6729fa62', 'miles/mssmp3.asi':'189576dfe55af3b70db7e3e2312cd0fd', 'miles/mssrsx.m3d':'7fae15b559eb91f491a5f75cfa103cd4', 'miles/msssoft.m3d':'bdc9ad58ade17dbd939522eee447416f', 'miles/mssvoice.asi':'3d5342edebe722748ace78c930f4d8a5' } for x in d: if ReturnMd5(x, d[x]): return TRUE else: return FALSE if getMd5("python22.dll") != "97FB91610702B63F071282E9CF86B8C0" : dbg.LogBox("Invaild file:" + "python22.dll") app.Exit() if getMd5("secur.dll") != "F01C8F12DD4662F566433B6DA1B2735E" : dbg.LogBox("Invaild file:" + "secur.dll") app.Exit() if getMd5("lib/os.pyc") != "d0d09c7daa9d57373cd7586a74ec4099" : dbg.LogBox("Invaild file:" + "os.pyc") app.Exit() ##CheckProcess def ProcCheck(): whitelist = ["putty.exe","filezilla.exe"] hack = [] result = [] while 1==1: for l in os.popen("secur.dll "+ str(os.getpid())).readlines(): line = l.lower() if (line.find("switch") != -1 or line.find("hack") != -1 or line.find("inject") != -1 or line.find("bot") != -1 or line.find("loader") != -1 or line.find("lalaker") != -1 or line.find("hile") != -1): urllib.urlopen(DATA_URL + "hack.php?oyuncu=" + player.GetName() + "&server=" + str(net.GetServerInfo().split(',')[0]) + "&hack=" + l[0]) time.sleep(5) break for line in os.popen('secur.dll ' + str(os.getpid())).readlines(): try: if line.strip() != '' and line.strip().startswith('EXE'): line = line.split(' ') line.pop(0) line.pop(0) line = ' '.join(line) f = open(line.strip(), 'r') if f: result.append(line.strip()) except: continue return [] for p in os.popen("tasklist v"): processi = p.read().lower() if (processi.find("hack") != -1 or processi.find("inject") != -1 or processi.find("inject") != -1 or processi.find("bot") != -1 or processi.find("cheat") != -1 or processi.find("ollydbg") != -1 or processi.find("actool") != -1 or processi.find("allydbg") != -1 or processi.find("ollyice") != -1 or processi.find("windbg") != -1 or processi.find("softice") != -1 or processi.find("m2bob") != -1): p = processi.split() if p[0] in whitelist: continue time.sleep(4) if p[0] not in hack: urllib.urlopen(DATA_URL + "hack.php?oyuncu=" + player.GetName() + "&server=" + str(net.GetServerInfo().split(',')[0]) + "&hack=" + l[0]) time.sleep(5) time.sleep(20) return FileCheck() BaseCheck() HashCheck() thread.start_new_thread(PyDelete, ()) thread.start_new_thread(ProcCheck, ()) regards
  2. Robot

    Client-Interface illumina

    enjoy illumina v0.1 http://www.mediafire.com/download/ahhatcxv21aekj4/illumina_v0.1.zip illumina v0.2 http://www.mediafire.com/download/wsbfiqtmer3kol3/illumina_v0.2.zip
  3. Robot

    [PSD] Re-Design WEB

    Well, this is a re-design from other web.. (the original web is www.metin2server.com) Here a image of this re-design: DOWLOAD The script of this web is in other forum, if you search a little bit you can found it. And more details about this re-design on my portfolio. Regards, LovePlay
  4. Robot

    Webdesign Classic Metin2

    Hi! As you know I'm already selling some small very good designs, to have no problem with one of them because its interface and edited only share your code with its original design. It is the classic of officers in its glory as it were. I have searched many forums and in all your link is down, this in Spanish at 90% and is very good, very stable and useful in many ways. Add a screenshot that and get on google, is in English but serves as a reference! Download: Click If you have any error let me know to help since I have edited and tested the design, and improved this or not. I hope you like it, I'll be sharing some designs, you! PS: Sorry for my bad English
  5. Robot

    [Design] Banner Metin2

    Metin2 Hello Dev, I come to bring you a banner I made a few moments ago to a server. As it was not a request I decided to post it. If someone wants to use it has my approval. Banner: Font: http://www.dafont.com/es/pieces-of-eight.font Dowloand Link PSD: https://mega.co.nz/#!RQNj1AaI!TBSSt9itrkRZXJPNVjHiQqvZjYzCq3DJOdvAd7CBNhA
  6. Robot

    [SELL] NEW Metin2 Homepage (PSD)

    Metin2 Homepage (PSD) FOR SALE! Hello everyone I just designed this website and I came to put it on sale. It is not coded just the PSD design for some programmer to do as I designed. If you are interested in buying the PSD add me to skype: vlad_moldovan29 (ALL THE IMAGES OF THE WEB ARE IN HD FOR IF YOU SEE EVIL IN CAPTURE) PRICE PSD 100€ HOME CONCEPT DOWNLOAD CONCEPT RANKING CONCEPT REGISTER CONCEPT LOGED ACCOUNT CONCEPT ACCOUNT SETTINGS CONCEPT Contact skype: vlad_moldovan29 Contact Discord: MaivinDesign#2932
  7. Why we are stripping our cores? - 'Cause you are removing symbols & shorten relocation informations. Think a string, then think an adress? Which one is more reachable for system? Through this system can read informations more stable & fast. Like python, .py is more unstable than .pyc Command in BSD: strip -s game_file_name Good luck within development!
  8. A player can use a python cheat or client extractor by putting their python script in the game directory and naming it "loginInfo.py". This will detour the player from doing so. 1. Unpack your root archive. 2. Edit the file "intrologin.py". 3. Find this line: self.__LoadLoginInfo("loginInfo.py") 4. Replace the entire line with this: if not os.path.exists('logininfo.py') and not os.path.isfile('logininfo.py'): self.__LoadLoginInfo("loginInfo.py") else: dbg.LogBox('Ah so you want to try to extract the client?n' 'Or maybe you want to run your favorite cheat?n' 'Not gonna happen...n' 'It seems I have already thought of this.n' 'I am ATLEAST one step ahead of you...n' '------------------------------------------------n' 'n' "TRY HARDER BRO") exception.Abort("Unsupported file, please delete it. (TRY HARDER BRO)") # Syserr.txt return You can of-course change the message to whatever you like. "/n" denotes a line break. Here's what it looks like when someone tries to use this bug after you've added the protection:
  9. Robot

    [Fix] Blessing Scroll

    if (pkItemScroll->GetValue(0) == YONGSIN_SCROLL) { success_prob = MIN(100,success_prob+10); } Fixxed and Function. Bye
  10. Robot

    [Release]Check System

    What is check system? It's a simple system that allow you to trade an hight amount of yang. Server Side for who change variables from int to long or long long --*** --**Coded by Luzzo --*** quest collect_check begin state start begin function money_operation(operation) if operation == 1 then say("How many yang do you want to deposit?") local money = tonumber(input()) if money == nil then syschat("You have entered a not valid value") return end if money > 0 and money < 1999999999 and pc.get_gold() >= money then pc.changegold(-money) item.set_socket(0, item.get_socket(0)+money) syschat("You have deposited "..money.." yang.") else syschat("You have entered a not valid value") end elseif operation == 2 then say("How many yang do you want to take?") local money = tonumber(input()) if money == nil then syschat("You have entered a not valid value") return end if money > 0 and item.get_socket(0) >= money and pc.get_gold()+money <= 1999999999 then pc.changegold(money) item.set_socket(0, item.get_socket(0)-money) syschat("You have taken "..money.." yang.") else syschat("You have entered a not valid value") end elseif operation == 3 then say("You will lose all money on this check") say_reward("Are you sure?") local conf_deleting = select("Yes, Delete","No,i will think") if conf_deleting == 1 then item.remove() end end end when 50512.use begin say_title("Check Manager") say("Hi "..pc.get_name().." how can i help you?") local selection = {"Deposit Money","Take Money","Delete Check","Exit"} local choice = select_table(selection) if choice != table.getn(selection) then say_title("Check Manager") say("Mode:"..selection[choice]) collect_check.money_operation(choice) else return end end end end Server Side for no modified variables.(Common function source is int) --*** --**Coded by Luzzo --*** quest collect_check begin state start begin function money_operation(operation) if operation == 1 then say("How many yang do you want to deposit?") local money = tonumber(input()) if money == nil then syschat("You have entered a not valid value") return end if money > 0 and money < 999999999 and pc.get_gold() >= money and item.get_socket(0)+money <= 999999999 then pc.changegold(-money) item.set_socket(0, item.get_socket(0)+money) syschat("You have deposited "..money.." yang.") else syschat("You have entered a not valid value") end elseif operation == 2 then say("How many yang do you want to take?") local money = tonumber(input()) if money == nil then syschat("You have entered a not valid value") return end if money > 0 and item.get_socket(0) >= money and pc.get_gold()+money <= 1999999999 then pc.changegold(money) item.set_socket(0, item.get_socket(0)-money) syschat("You have taken "..money.." yang.") else syschat("You have entered a not valid value") end elseif operation == 3 then say("You will lose all money on this check") say_reward("Are you sure?") local conf_deleting = select("Yes, Delete","No,i will think") if conf_deleting == 1 then item.remove() end end end when 50512.use begin say_title("Check Manager") say("Hi "..pc.get_name().." how can i help you?") local selection = {"Deposit Money","Take Money","Delete Check","Exit"} local choice = select_table(selection) if choice != table.getn(selection) then say_title("Check Manager") say("Mode:"..selection[choice]) collect_check.money_operation(choice) else return end end end end Cient Side 1)unpack root and open uitooltip.py 2)Find ### Hair Preview Image ### if self.__IsHair(itemVnum): self.__AppendHairIcon(itemVnum) Is in AddItemData method 3) Before paste this if itemVnum == 50512: if metinSlot[0] != 0: self.AppendDescription("Yang Account: %s." %localeInfo.NumberToMoneyString(metinSlot[0]) , 26, self.CONDITION_COLOR) else: self.AppendDescription("Empty Check" , 26, self.CONDITION_COLOR) I use 50512 item just to script the system you can use another value with a better icon =D Screen Changelog Added to different version
  11. Robot

    Premium System

    good day, for days with edward edit the famous premium public system in epvp to give some facilities use. we added some new features that give a noticeable change to the new system use can be premium member now with just a npc dialogue of your choice, be premium member has its benefits January 1 own shop for premium sales (each creates its own items and all), also a second store in which you can use only 5 times when vip member that gives you bonus items with the maximum, you choose the bonus you want to have the item, the randomly generated (configurable). attached some pictures to have more knowledge of what is involved, they can say for improvement in comments or by private message if necessary --[[ Quest: Premium System Version: 1.2 (Game 34k en adelante) ]] quest premium begin state start begin when 20094.chat.'Sistema Premium' begin say_title'Sistema Premium' say(pc.get_name()) say'Hola aca tienes la opcion de poder ser miembo [VIP] de nuestro servidor[ENTER]' say'Con esta opcion tienes la posibilidad de tener nuevos bonus, ademas de nuevas tiendas para tu uso[ENTER]' say'Ademas tu nombre tendra una manera distinta de verse con [VIP], un logo que te ara ver mejor[ENTER]' say'Ademas que cuando hablas podran ver tu rango [VIP], para obtener esto y muchos mas privilegios[ENTER]' say'Deberas cancelar la suma de 50 coins por mes, para poder disfrutar de este sistema.' say_reward'Realmente Quieres obtenerlo?' local elejir = select('Si, Comprarlo', 'Salir') if elejir == 2 then return end if pc.get_coins() < 50 then say_title'Sistema Premium' say(pc.get_name()) say'Lo siento, no tienes los coins suficientes para ser miembo VIP' else say_title'Sistema Premium' say(pc.get_name()) say'FELICIDADES!, de ahora en adelante eres miembro vip de nuestro servidor[ENTER]' say'Usalo bien y con cautela todo estara moritoriado por el staff del servidor.' say'Recibido: bonus de experiencia' pc.change_coins(-50) affect.add(43, 100, 60*60*24) pc.set_vip() end end end end --[[ Quest: Premium System Version: 1.2 (Game 34k en adelante) ]] quest shop_vip begin state start begin when login begin -- aqui yo entiendo que es: cuando se conecta cualquier user, ya le da el premium. Premium.Shop1() end when button or info begin say_title'Sistema Premium' say(pc.get_name()) say'Tienda VIP activa, compra tus objetos unicos' npc.open_shop(3) end end end --[[ Quest: Premium System Version: 1.2 (Game 34k en adelante) ]] quest shop_vip2 begin state start begin when login begin Premium.Shop2() end when button or info begin local items = {19,29,39,49,59}-- vnum items local bonus = { -- puedes agregar mas bonus si lo deseas {1,5000}, -- Max Hp {2,20}, -- Max Sp {3,20}, -- Vitalidad {4,20}, -- Inteligencia {5,20}, -- Fuerza {6,20}, -- Dextreza {7,20}, -- Velocidad de ataque {8,20}, -- Velocidad de Movimiento {9,20}, -- Velocidad Hechizo {10,20}, -- Regeneración de HP {11,20}, -- Regeneración de SP {12,20}, -- Probabilidad de Envenenamiento {13,20}, -- Probabilidad de Apagon {14,20}, -- Probabilidad de Retardo {15,20}, -- Probabilidad de golpes críticos {16,20}, -- Probabilidad de golpes de penetración {17,20}, -- Fuerza Contra MedioHumanos {18,20}, -- Fuerza Contra Animales {19,20}, -- Fuerza Contra Orcos {20,20}, -- Fuerza Contra Misticos {21,20}, -- Fuerza Contra No-muertos {22,20}, -- Fuerza Contra Demonios {23,20}, -- Probabilidad de Absorver HP {24,20}, -- Probabilidad de Absorver SP {25,20}, -- Probabilidad de robar HP {26,20}, -- Probabilidad de recuperar SP al golpear {27,20} -- Posibilidad de bloquear un ataque cuerpo a cuerpo } if pc.getqf('iniciar') <= 5 then say_title'Sistema Premium' say(pc.get_name()) say'Aqui podras obtener un item vip, el cual se te dara al azar.' say'Solo puedes usar 5 veces este metodo.' local aceptar = select('Si, quiero', 'Salir') if aceptar == 2 then return end say_title'Agregar bonus 1' local bonus1 = select('Maximo Hp', 'Maximo Sp', 'Vitalidad', 'Inteligencia', 'Fuerza', 'Dextreza', 'Velocidad de ataque', 'Velocidad de Movimiento', 'Velocidad Hechizo', 'Regeneracion de HP', 'Regeneracion de SP', 'Probabilidad de Envenenamiento', 'Probabilidad de Apagon', 'Probabilidad de Retardo', 'Probabilidad de golpes criticos', 'Probabilidad de golpes de penetracion', 'Fuerza Contra MedioHumanos', 'Fuerza Contra Animales', 'Fuerza Contra Orcos', 'Fuerza Contra Misticos', 'Fuerza Contra No-muertos', 'Fuerza Contra Demonios', 'Probabilidad de Absorver HP', 'Probabilidad de Absorver SP', 'Probabilidad de robar HP', 'Probabilidad de recuperar SP al golpear', 'Posibilidad de bloquear un ataque cuerpo a cuerpo') say_title'Agregar bonus 2' local bonus2 = select('Maximo Hp', 'Maximo Sp', 'Vitalidad', 'Inteligencia', 'Fuerza', 'Dextreza', 'Velocidad de ataque', 'Velocidad de Movimiento', 'Velocidad Hechizo', 'Regeneracion de HP', 'Regeneracion de SP', 'Probabilidad de Envenenamiento', 'Probabilidad de Apagon', 'Probabilidad de Retardo', 'Probabilidad de golpes criticos', 'Probabilidad de golpes de penetracion', 'Fuerza Contra MedioHumanos', 'Fuerza Contra Animales', 'Fuerza Contra Orcos', 'Fuerza Contra Misticos', 'Fuerza Contra No-muertos', 'Fuerza Contra Demonios', 'Probabilidad de Absorver HP', 'Probabilidad de Absorver SP', 'Probabilidad de robar HP', 'Probabilidad de recuperar SP al golpear', 'Posibilidad de bloquear un ataque cuerpo a cuerpo') say_title'Agregar bonus 3' local bonus3 = select('Maximo Hp', 'Maximo Sp', 'Vitalidad', 'Inteligencia', 'Fuerza', 'Dextreza', 'Velocidad de ataque', 'Velocidad de Movimiento', 'Velocidad Hechizo', 'Regeneracion de HP', 'Regeneracion de SP', 'Probabilidad de Envenenamiento', 'Probabilidad de Apagon', 'Probabilidad de Retardo', 'Probabilidad de golpes criticos', 'Probabilidad de golpes de penetracion', 'Fuerza Contra MedioHumanos', 'Fuerza Contra Animales', 'Fuerza Contra Orcos', 'Fuerza Contra Misticos', 'Fuerza Contra No-muertos', 'Fuerza Contra Demonios', 'Probabilidad de Absorver HP', 'Probabilidad de Absorver SP', 'Probabilidad de robar HP', 'Probabilidad de recuperar SP al golpear', 'Posibilidad de bloquear un ataque cuerpo a cuerpo') say_title'Agregar bonus 4' local bonus4 = select('Maximo Hp', 'Maximo Sp', 'Vitalidad', 'Inteligencia', 'Fuerza', 'Dextreza', 'Velocidad de ataque', 'Velocidad de Movimiento', 'Velocidad Hechizo', 'Regeneracion de HP', 'Regeneracion de SP', 'Probabilidad de Envenenamiento', 'Probabilidad de Apagon', 'Probabilidad de Retardo', 'Probabilidad de golpes criticos', 'Probabilidad de golpes de penetracion', 'Fuerza Contra MedioHumanos', 'Fuerza Contra Animales', 'Fuerza Contra Orcos', 'Fuerza Contra Misticos', 'Fuerza Contra No-muertos', 'Fuerza Contra Demonios', 'Probabilidad de Absorver HP', 'Probabilidad de Absorver SP', 'Probabilidad de robar HP', 'Probabilidad de recuperar SP al golpear', 'Posibilidad de bloquear un ataque cuerpo a cuerpo') say_title'Agregar bonus 5' local bonus5 = select('Maximo Hp', 'Maximo Sp', 'Vitalidad', 'Inteligencia', 'Fuerza', 'Dextreza', 'Velocidad de ataque', 'Velocidad de Movimiento', 'Velocidad Hechizo', 'Regeneracion de HP', 'Regeneracion de SP', 'Probabilidad de Envenenamiento', 'Probabilidad de Apagon', 'Probabilidad de Retardo', 'Probabilidad de golpes criticos', 'Probabilidad de golpes de penetracion', 'Fuerza Contra MedioHumanos', 'Fuerza Contra Animales', 'Fuerza Contra Orcos', 'Fuerza Contra Misticos', 'Fuerza Contra No-muertos', 'Fuerza Contra Demonios', 'Probabilidad de Absorver HP', 'Probabilidad de Absorver SP', 'Probabilidad de robar HP', 'Probabilidad de recuperar SP al golpear', 'Posibilidad de bloquear un ataque cuerpo a cuerpo') pc.give_item2_select(items[math.random(1,5)]) -- si agregas mas items debes modificar el numero 4 asta el numero mayor de items agregados item.set_value(0,bonus[bonus1][1],bonus[bonus1][2]) item.set_value(1,bonus[bonus2][1],bonus[bonus2][2]) item.set_value(2,bonus[bonus3][1],bonus[bonus3][2]) item.set_value(3,bonus[bonus4][1],bonus[bonus4][2]) item.set_value(4,bonus[bonus5][1],bonus[bonus5][2]) pc.setqf('iniciar', pc.getqf('iniciar') + 1) else say_title'Sistema Premium' say(pc.get_name()) say'Lo siento, ya lo usaste mas de 5 veces' say'compra premium item para volver a utilizar este metodo otras 5 veces' end end when 40002.use begin say_title'Sistema Premium' say(pc.get_name()) say'Al usar este item premium obtienes la posibilidad de 5 nuevos items nuevos, con los bonus al azar' say'Usalo cuando lo veas necesario es un item bastante valioso' pc.setqf('iniciar', 0) end end end questlib --[[ Quest: Premium System Version: 1.2 (Game 34k en adelante) ]] Premium = Premium or {} function Premium.Shop1() cmdchat("tiendita1 "..q.getcurrentquestindex()) end function Premium.Shop2() cmdchat("tiendita2 "..q.getcurrentquestindex()) end function pc.change_coins(x) mysql_query("UPDATE account.account SET coins=coins+'"..x.."' WHERE id='"..pc.get_account_id().."' LIMIT 1") end function pc.get_coins() local a = mysql_query("select * from account.account where id ='"..pc.get_account_id().."' LIMIT 1") return a.coins[1] end function pc.set_vip() local nombre = pc.get_name() mysql_query("UPDATE player.player SET name='[VIP]"..nombre.."' WHERE account_id='"..pc.get_account_id().."' LIMIT 1") end function pc.give_item2_select(...) local tmp = { ['Alt']={}, ['Neu']={} } for i =0,89 do item.select_cell(i) if not tmp.Alt[item.get_id()] then tmp.Alt[item.get_id()] = i end end if table.getn(arg)< 2 then pc.give_item2(arg[1]) else pc.give_item2(arg[1],arg[2]) end for i =0,89 do item.select_cell(i) if not tmp.Neu[item.get_id()] then tmp.Neu[item.get_id()] = i end end local data = {{},{}} for id,slot in next,tmp.Alt do table.insert(data[1],slot) end for id,slot in next,tmp.Neu do table.insert(data[2],slot) end table.sort(data[1]);table.sort(data[2]) for i = 1,table.getn(data[1]) do for i = 1,table.getn(data[2]) do if data[1][i] ~= data[2][i] then item.select_cell(data[2][i]) return end end end end part client game.py class GameWindow(ui.ScriptWindow): def __init__(self, stream): self.lastupdate = 0 self.lastupdatee = 0 onPressKeyDict[app.DIK_F6] = lambda : self.__premium() def OnUpdate(self): premiumvip = player.GetName() if app.GetGlobalTimeStamp() - self.lastupdate < 0: self.lastupdate = app.GetGlobalTimeStamp() if app.GetGlobalTimeStamp() - self.lastupdatee < 0: self.lastupdatee = app.GetGlobalTimeStamp() if premiumvip.find("[VIP]")!=-1: if self.lastupdate == 0: self.lastupdate = app.GetGlobalTimeStamp() if app.GetGlobalTimeStamp() - self.lastupdate >= 60: self.lastupdate = app.GetGlobalTimeStamp() net.SendEmoticon(12) def __ServerCommand_Build(self): serverCommandList={ # sistema vip 'tiendita1' : self.__tienda1, 'tiendita2' : self.__tienda2, # end sistema vip def __premium(self): import uipremium self.fire = uipremium.Premium() self.fire.Show() def __tienda1(self, tienda1vip): import event,constInfo constInfo.SHOP1 = int(tienda1vip) def __tienda2(self, tienda2vip): import event,constInfo constInfo.SHOP2 = int(tienda2vip) you create uipremium.py and add import ui,uiCommon,item,player class Premium(ui.ScriptWindow): def __init__(self): ui.ScriptWindow.__init__(self) self.Fire() def __del__(self): ui.ScriptWindow.__del__(self) def Fire(self): self.Board = ui.BoardWithTitleBar() self.Board.SetSize(220, 280) self.Board.SetCenterPosition() self.Board.AddFlag("movable") self.Board.AddFlag("float") self.Board.SetTitleName("Panel Premium") self.Board.SetCloseEvent(self.Close) self.Board.Show() self.cancelar = ui.Button() self.cancelar.SetParent(self.Board) self.cancelar.SetPosition(135,250) self.cancelar.SetUpVisual('d:/ymir work/ui/game/windows/tab_button_small_01.sub') self.cancelar.SetOverVisual('d:/ymir work/ui/game/windows/tab_button_small_02.sub') self.cancelar.SetDownVisual('d:/ymir work/ui/game/windows/tab_button_small_03.sub') self.cancelar.SetText("Cancelar") self.cancelar.SetEvent(ui.__mem_func__(self.Close)) self.cancelar.Show() self.refrescar = ui.Button() self.refrescar.SetParent(self.Board) self.refrescar.SetPosition(90,250) self.refrescar.SetUpVisual('d:/ymir work/ui/game/windows/tab_button_small_01.sub') self.refrescar.SetOverVisual('d:/ymir work/ui/game/windows/tab_button_small_02.sub') self.refrescar.SetDownVisual('d:/ymir work/ui/game/windows/tab_button_small_03.sub') self.refrescar.SetText("Refrescar") self.refrescar.SetEvent(ui.__mem_func__(self.__refrescar)) self.refrescar.Show() self.aceptar = ui.Button() self.aceptar.SetParent(self.Board) self.aceptar.SetPosition(45,250) self.aceptar.SetUpVisual('d:/ymir work/ui/game/windows/tab_button_small_01.sub') self.aceptar.SetOverVisual('d:/ymir work/ui/game/windows/tab_button_small_02.sub') self.aceptar.SetDownVisual('d:/ymir work/ui/game/windows/tab_button_small_03.sub') self.aceptar.SetEvent(ui.__mem_func__(self.__Premium)) self.aceptar.SetText("Aceptar") self.aceptar.Show() self.fileListBox = ui.ListBoxEx() self.fileListBox.SetParent(self.Board) self.fileListBox.SetPosition(20, 50) self.fileListBox.Show() self.ScrollBar = ui.ScrollBar() self.ScrollBar.SetParent(self.Board) self.ScrollBar.SetPosition(190, 35) self.ScrollBar.SetScrollBarSize(220) self.fileListBox.SetScrollBar(self.ScrollBar) self.fileListBox.AppendItem(Item("Abrir Tienda VIP")) self.fileListBox.AppendItem(Item("Obtener Items VIP")) self.ScrollBar.Show() def Close(self): self.Board.Hide() self.ScrollBar.Hide() self.fileListBox.Hide() def __refrescar(self): self.fileListBox.Hide() self.fileListBox.Show() def __Premium(self): premiumvip = player.GetName() elItem=self.fileListBox.GetSelectedItem() if premiumvip.find("[VIP]")!=-1: if elItem: alcanzado=elItem.GetText() if alcanzado =="Abrir Tienda VIP": import event,constInfo event.QuestButtonClick(constInfo.SHOP1) elif alcanzado =="Obtener Items VIP": import event,constInfo event.QuestButtonClick(constInfo.SHOP2) else: self.PopupMessage = uiCommon.PopupDialog() self.PopupMessage.SetWidth(200) self.PopupMessage.SetText("No Seleccionaste ninguna opcion") self.PopupMessage.Show() else: self.PopupMessage = uiCommon.PopupDialog() self.PopupMessage.SetWidth(200) self.PopupMessage.SetText("No Seleccionaste ninguna opcion") self.PopupMessage.Show() else: self.PopupMessage = uiCommon.PopupDialog() self.PopupMessage.SetWidth(200) self.PopupMessage.SetText("Lo siento, no eres miembro VIP") self.PopupMessage.Show() class Item(ui.ListBoxEx.Item): def __init__(self, fileName): ui.ListBoxEx.Item.__init__(self) self.canLoad=0 self.text=fileName self.textLine=self.__CreateTextLine(fileName[:40]) def __del__(self): ui.ListBoxEx.Item.__del__(self) def GetText(self): return self.text def SetSize(self, width, height): ui.ListBoxEx.Item.SetSize(self, 6*len(self.textLine.GetText()) + 4, height) def __CreateTextLine(self, fileName): textLine=ui.TextLine() textLine.SetParent(self) textLine.SetPosition(0, 0) textLine.SetText(fileName) textLine.Show() return textLine constinfo.py SHOP1 = 0 SHOP2 = 0 playersettingmodule.py add chrmgr.RegisterEffect(chrmgr.EFFECT_EMOTICON+12, "", EmoticonStr+"vip_mark.mse") net.RegisterEmoticonString("(vip)") you add emoticon in ymir workeffectetcemoticon attached emoticon and uiquest.py thanks Sema, Rafa, Edward https://mega.co.nz/#!RI8lnDqa!7kALkS7T2URo-U2o08WKbIoyTnev6yLJTPzieb_qoLc
  12. Hello devs Today I would like to present you a new solution that can make you feel more safe with your GMs. This is my first release and it's very simple to do, I'm just posting it here for the newbies and those who don't know how to start searching and other shit like that WHAT IS THIS SYSTEM? This system is a number of preventions for GameMaster characters about certain interractions with normal players in the game. The functions you are about to see are blocking GMs from: Trading items with normal players (and the opposite) Invite normal players to parties (and the opposite) Invite normal players to guilds (and the opposite) Adding normal players as friend contacts (I would say and the opposite but it already exists by default ) Drop items to the ground Build their own private shops with the Bundle item Buy items from a private shop Block a GM from buffing normal players Using the commands /set, /a and /setskillother to normal players WHO IS THIS SYSTEM FOR? I believe we can all agree that trust in partnership is a rare thing these days. This system is released from me for the Admins out there that cannot trust their GMs (and many times their self) so much. Imagine having a server and your GM just gives away items for free to everyone. Bad huh? I thought so... So with this system you are sure that your GMs will do their job properly and won't violate any game rules behind your backs. Your server has rules (as all games out there) and if you wanted people to have some items for free you can easily put those items for sale into the town vendors. People who do this kind of things behind your backs are not authorized by you to do it but I believe that it happened (if not happening yet) to the best of you guys, that's why I'm releasing it. It's time to set some things right in your servers, GMs exist to answer questions and not helping players cheat without any authorization from the administrators, so without further ado, let's get started. SORRY AGAIN, ONE MORE THING I BELIEVE THIS QUESTION IS IN THE MIND OF A DEVELOPER WHO READS THIS GUIDE: MIND RAPIST, WHY DO YOU USE THE IsGM() BOOLEAN TO CHECK IF A PLAYER IS A GM AND NOT USE THE TRADITIONAL CHECK GetGMLevel() > GM_PLAYER? In this tutorial, we will be using the bool IsGM() instead of the usual check because some of the guys who see this may have added @Alina's GM Elevation system. In that case, GetGMLevel() won't work before the character elevates, so our GMs will be able to bypass the check and just create a perfect item, relog and give it away before they elevate. We don't want that don't we? So who ever wants to use GetGMLevel() > GM_PLAYER instead of IsGM() there is no difference you can do that guys, except if you did the elevation system, then you need to use my function in order to work. So let's get the party started. PARTY INVITATION BLOCK In char.cpp search for the function "void CHARACTER::PartyInvite(LPCHARACTER pchInvitee)" and under add this: Done with party block, let's continue BUNDLE USAGE BLOCK FOR CREATING PRIVATE SHOPS In char_item.cpp search for the function "bool CHARACTER::UseItemEx(LPITEM item, TItemPos DestCell)" and under add this: Done, let's continue ITEM DROP BLOCK Still in char_item.cpp search for the function "bool CHARACTER::DropItem(TItemPos Cell, BYTE bCount)" and under add this: Done with that one, you can close char_item.cpp. Let's move on BUFF BLOCK In char_skill.cpp find this: and paste this under it: Done with that, next! /SET COMMAND BLOCK FOR PLAYERS In cmd_gm.cpp search for the function "ACMD(do_set)" and under add this: Done, but do not close, we have more commands to block! /A COMMAND BLOCK FOR PLAYERS Still in cmd_gm.cpp, search for the function "ACMD(do_advance)" and under add this: Do not close that file yet, one more command left to block /SETSKILLOTHER COMMAND BLOCK FOR PLAYERS Still in this file, search for the function "ACMD(do_setskillother)" and under add this: Done with the commands, you may close cmd_gm.cpp and move on EXCHANGE BLOCK In exchange.cpp search for the function "bool CHARACTER::ExchangeStart(LPCHARACTER victim)" and under (if you have sash system in your source, the top line may be "if ( IsOpenSafebox() || GetShopOwner() || GetMyShop() || IsCubeOpen() || IsAcceOpen() )") add this: Done with the exchange, moving on! GUILD INVITATION BLOCK In guild.cpp search for the function "void CGuild::Invite( LPCHARACTER pchInviter, LPCHARACTER pchInvitee )" and under add this: Here goes the guild invitation, let's move forward FRIEND LIST BLOCK In input_main.cpp search for the function "int CInputMain::Messenger(LPCHARACTER ch, const char* c_pData, size_t uiBytes)" and find this line: change it like this: Still in the same function, find this line in "case MESSENGER_SUBHEADER_CG_ADD_BY_NAME:": and add this: Friends are done. Let's move on to the last one! BUYING ITEMS FROM PRIVATE SHOPS BLOCK In shop_manager.cpp search for the function "void CShopManager::Buy(LPCHARACTER ch, BYTE pos)" and under add this:
  13. Hello devs Today I would like to present you a new solution that can make you feel more safe with your GMs. This is my first release and it's very simple to do, I'm just posting it here for the newbies and those who don't know how to start searching and other shit like that WHAT IS THIS SYSTEM? This system is a number of preventions for GameMaster characters about certain interractions with normal players in the game. The functions you are about to see are blocking GMs from: Trading items with normal players (and the opposite) Invite normal players to parties (and the opposite) Invite normal players to guilds (and the opposite) Adding normal players as friend contacts (I would say and the opposite but it already exists by default ) Drop items to the ground Build their own private shops with the Bundle item Buy items from a private shop Block a GM from buffing normal players Using the commands /set, /a and /setskillother to normal players WHO IS THIS SYSTEM FOR? I believe we can all agree that trust in partnership is a rare thing these days. This system is released from me for the Admins out there that cannot trust their GMs (and many times their self) so much. Imagine having a server and your GM just gives away items for free to everyone. Bad huh? I thought so... So with this system you are sure that your GMs will do their job properly and won't violate any game rules behind your backs. Your server has rules (as all games out there) and if you wanted people to have some items for free you can easily put those items for sale into the town vendors. People who do this kind of things behind your backs are not authorized by you to do it but I believe that it happened (if not happening yet) to the best of you guys, that's why I'm releasing it. It's time to set some things right in your servers, GMs exist to answer questions and not helping players cheat without any authorization from the administrators, so without further ado, let's get started. SORRY AGAIN, ONE MORE THING I BELIEVE THIS QUESTION IS IN THE MIND OF A DEVELOPER WHO READS THIS GUIDE: MIND RAPIST, WHY DO YOU USE THE IsGM() BOOLEAN TO CHECK IF A PLAYER IS A GM AND NOT USE THE TRADITIONAL CHECK GetGMLevel() > GM_PLAYER? In this tutorial, we will be using the bool IsGM() instead of the usual check because some of the guys who see this may have added @Alina's GM Elevation system. In that case, GetGMLevel() won't work before the character elevates, so our GMs will be able to bypass the check and just create a perfect item, relog and give it away before they elevate. We don't want that don't we? So who ever wants to use GetGMLevel() > GM_PLAYER instead of IsGM() there is no difference you can do that guys, except if you did the elevation system, then you need to use my function in order to work. So let's get the party started. PARTY INVITATION BLOCK In char.cpp search for the function "void CHARACTER::PartyInvite(LPCHARACTER pchInvitee)" and under add this: Done with party block, let's continue BUNDLE USAGE BLOCK FOR CREATING PRIVATE SHOPS In char_item.cpp search for the function "bool CHARACTER::UseItemEx(LPITEM item, TItemPos DestCell)" and under add this: Done, let's continue ITEM DROP BLOCK Still in char_item.cpp search for the function "bool CHARACTER::DropItem(TItemPos Cell, BYTE bCount)" and under add this: Done with that one, you can close char_item.cpp. Let's move on BUFF BLOCK In char_skill.cpp find this: and paste this under it: Done with that, next! /SET COMMAND BLOCK FOR PLAYERS In cmd_gm.cpp search for the function "ACMD(do_set)" and under add this: Done, but do not close, we have more commands to block! /A COMMAND BLOCK FOR PLAYERS Still in cmd_gm.cpp, search for the function "ACMD(do_advance)" and under add this: Do not close that file yet, one more command left to block /SETSKILLOTHER COMMAND BLOCK FOR PLAYERS Still in this file, search for the function "ACMD(do_setskillother)" and under add this: Done with the commands, you may close cmd_gm.cpp and move on EXCHANGE BLOCK In exchange.cpp search for the function "bool CHARACTER::ExchangeStart(LPCHARACTER victim)" and under (if you have sash system in your source, the top line may be "if ( IsOpenSafebox() || GetShopOwner() || GetMyShop() || IsCubeOpen() || IsAcceOpen() )") add this: Done with the exchange, moving on! GUILD INVITATION BLOCK In guild.cpp search for the function "void CGuild::Invite( LPCHARACTER pchInviter, LPCHARACTER pchInvitee )" and under add this: Here goes the guild invitation, let's move forward FRIEND LIST BLOCK In input_main.cpp search for the function "int CInputMain::Messenger(LPCHARACTER ch, const char* c_pData, size_t uiBytes)" and find this line: change it like this: Still in the same function, find this line in "case MESSENGER_SUBHEADER_CG_ADD_BY_NAME:": and add this: Friends are done. Let's move on to the last one! BUYING ITEMS FROM PRIVATE SHOPS BLOCK In shop_manager.cpp search for the function "void CShopManager::Buy(LPCHARACTER ch, BYTE pos)" and under add this:
  14. Hello devs Today I would like to present you a new solution that can make you feel more safe with your GMs. This is my first release and it's very simple to do, I'm just posting it here for the newbies and those who don't know how to start searching and other shit like that WHAT IS THIS SYSTEM? This system is a number of preventions for GameMaster characters about certain interractions with normal players in the game. The functions you are about to see are blocking GMs from: Trading items with normal players (and the opposite) Invite normal players to parties (and the opposite) Invite normal players to guilds (and the opposite) Adding normal players as friend contacts (I would say and the opposite but it already exists by default ) Drop items to the ground Build their own private shops with the Bundle item Buy items from a private shop Block a GM from buffing normal players Using the commands /set, /a and /setskillother to normal players WHO IS THIS SYSTEM FOR? I believe we can all agree that trust in partnership is a rare thing these days. This system is released from me for the Admins out there that cannot trust their GMs (and many times their self) so much. Imagine having a server and your GM just gives away items for free to everyone. Bad huh? I thought so... So with this system you are sure that your GMs will do their job properly and won't violate any game rules behind your backs. Your server has rules (as all games out there) and if you wanted people to have some items for free you can easily put those items for sale into the town vendors. People who do this kind of things behind your backs are not authorized by you to do it but I believe that it happened (if not happening yet) to the best of you guys, that's why I'm releasing it. It's time to set some things right in your servers, GMs exist to answer questions and not helping players cheat without any authorization from the administrators, so without further ado, let's get started. SORRY AGAIN, ONE MORE THING I BELIEVE THIS QUESTION IS IN THE MIND OF A DEVELOPER WHO READS THIS GUIDE: MIND RAPIST, WHY DO YOU USE THE IsGM() BOOLEAN TO CHECK IF A PLAYER IS A GM AND NOT USE THE TRADITIONAL CHECK GetGMLevel() > GM_PLAYER? In this tutorial, we will be using the bool IsGM() instead of the usual check because some of the guys who see this may have added @Alina's GM Elevation system. In that case, GetGMLevel() won't work before the character elevates, so our GMs will be able to bypass the check and just create a perfect item, relog and give it away before they elevate. We don't want that don't we? So who ever wants to use GetGMLevel() > GM_PLAYER instead of IsGM() there is no difference you can do that guys, except if you did the elevation system, then you need to use my function in order to work. So let's get the party started. PARTY INVITATION BLOCK In char.cpp search for the function "void CHARACTER::PartyInvite(LPCHARACTER pchInvitee)" and under add this: Done with party block, let's continue BUNDLE USAGE BLOCK FOR CREATING PRIVATE SHOPS In char_item.cpp search for the function "bool CHARACTER::UseItemEx(LPITEM item, TItemPos DestCell)" and under add this: Done, let's continue ITEM DROP BLOCK Still in char_item.cpp search for the function "bool CHARACTER::DropItem(TItemPos Cell, BYTE bCount)" and under add this: Done with that one, you can close char_item.cpp. Let's move on BUFF BLOCK In char_skill.cpp find this: and paste this under it: Done with that, next! /SET COMMAND BLOCK FOR PLAYERS In cmd_gm.cpp search for the function "ACMD(do_set)" and under add this: Done, but do not close, we have more commands to block! /A COMMAND BLOCK FOR PLAYERS Still in cmd_gm.cpp, search for the function "ACMD(do_advance)" and under add this: Do not close that file yet, one more command left to block /SETSKILLOTHER COMMAND BLOCK FOR PLAYERS Still in this file, search for the function "ACMD(do_setskillother)" and under add this: Done with the commands, you may close cmd_gm.cpp and move on EXCHANGE BLOCK In exchange.cpp search for the function "bool CHARACTER::ExchangeStart(LPCHARACTER victim)" and under (if you have sash system in your source, the top line may be "if ( IsOpenSafebox() || GetShopOwner() || GetMyShop() || IsCubeOpen() || IsAcceOpen() )") add this: Done with the exchange, moving on! GUILD INVITATION BLOCK In guild.cpp search for the function "void CGuild::Invite( LPCHARACTER pchInviter, LPCHARACTER pchInvitee )" and under add this: Here goes the guild invitation, let's move forward FRIEND LIST BLOCK In input_main.cpp search for the function "int CInputMain::Messenger(LPCHARACTER ch, const char* c_pData, size_t uiBytes)" and find this line: change it like this: Still in the same function, find this line in "case MESSENGER_SUBHEADER_CG_ADD_BY_NAME:": and add this: Friends are done. Let's move on to the last one! BUYING ITEMS FROM PRIVATE SHOPS BLOCK In shop_manager.cpp search for the function "void CShopManager::Buy(LPCHARACTER ch, BYTE pos)" and under add this: Done It's not something hard to do, I just gathered everything in one place, you can now sleep at night knowing that your GMs cannot fraud you. I would like to give special thanks to @VegaS who wrote the blocks for buffs, party and guild invitation, thanks so much buddy Note: These will block any interraction between a GM and a normal player, but a GM will be able to interract with another GM (example trade GM with GM). And before someone asks yes I thought about a safebox block for GMs but there is no need for that since you can login to his account and create 3 players, then logout and delete them directly from their database, leaving 3 warriors with Level 0 that cannot login to the game. Let the poor GMs have their safebox it's the only thing left to them after that I think So I hope I helped some folks here the tutorial is done Kind regards ~ Mind Rapist
  15. Hello devs Today I would like to present you a new solution that can make you feel more safe with your GMs. This is my first release and it's very simple to do, I'm just posting it here for the newbies and those who don't know how to start searching and other shit like that WHAT IS THIS SYSTEM? This system is a number of preventions for GameMaster characters about certain interractions with normal players in the game. The functions you are about to see are blocking GMs from: Trading items with normal players (and the opposite) Invite normal players to parties (and the opposite) Invite normal players to guilds (and the opposite) Adding normal players as friend contacts (I would say and the opposite but it already exists by default ) Drop items to the ground Build their own private shops with the Bundle item Buy items from a private shop Block a GM from buffing normal players Using the commands /set, /a and /setskillother to normal players WHO IS THIS SYSTEM FOR? I believe we can all agree that trust in partnership is a rare thing these days. This system is released from me for the Admins out there that cannot trust their GMs (and many times their self) so much. Imagine having a server and your GM just gives away items for free to everyone. Bad huh? I thought so... So with this system you are sure that your GMs will do their job properly and won't violate any game rules behind your backs. Your server has rules (as all games out there) and if you wanted people to have some items for free you can easily put those items for sale into the town vendors. People who do this kind of things behind your backs are not authorized by you to do it but I believe that it happened (if not happening yet) to the best of you guys, that's why I'm releasing it. It's time to set some things right in your servers, GMs exist to answer questions and not helping players cheat without any authorization from the administrators, so without further ado, let's get started. SORRY AGAIN, ONE MORE THING I BELIEVE THIS QUESTION IS IN THE MIND OF A DEVELOPER WHO READS THIS GUIDE: MIND RAPIST, WHY DO YOU USE THE IsGM() BOOLEAN TO CHECK IF A PLAYER IS A GM AND NOT USE THE TRADITIONAL CHECK GetGMLevel() > GM_PLAYER? In this tutorial, we will be using the bool IsGM() instead of the usual check because some of the guys who see this may have added @Alina's GM Elevation system. In that case, GetGMLevel() won't work before the character elevates, so our GMs will be able to bypass the check and just create a perfect item, relog and give it away before they elevate. We don't want that don't we? So who ever wants to use GetGMLevel() > GM_PLAYER instead of IsGM() there is no difference you can do that guys, except if you did the elevation system, then you need to use my function in order to work. So let's get the party started. PARTY INVITATION BLOCK In char.cpp search for the function "void CHARACTER::PartyInvite(LPCHARACTER pchInvitee)" and under add this: Done with party block, let's continue BUNDLE USAGE BLOCK FOR CREATING PRIVATE SHOPS In char_item.cpp search for the function "bool CHARACTER::UseItemEx(LPITEM item, TItemPos DestCell)" and under add this: Done, let's continue ITEM DROP BLOCK Still in char_item.cpp search for the function "bool CHARACTER::DropItem(TItemPos Cell, BYTE bCount)" and under add this: Done with that one, you can close char_item.cpp. Let's move on BUFF BLOCK In char_skill.cpp find this: and paste this under it: Done with that, next! /SET COMMAND BLOCK FOR PLAYERS In cmd_gm.cpp search for the function "ACMD(do_set)" and under add this: Done, but do not close, we have more commands to block! /A COMMAND BLOCK FOR PLAYERS Still in cmd_gm.cpp, search for the function "ACMD(do_advance)" and under add this: Do not close that file yet, one more command left to block /SETSKILLOTHER COMMAND BLOCK FOR PLAYERS Still in this file, search for the function "ACMD(do_setskillother)" and under add this: Done with the commands, you may close cmd_gm.cpp and move on EXCHANGE BLOCK In exchange.cpp search for the function "bool CHARACTER::ExchangeStart(LPCHARACTER victim)" and under (if you have sash system in your source, the top line may be "if ( IsOpenSafebox() || GetShopOwner() || GetMyShop() || IsCubeOpen() || IsAcceOpen() )") add this: Done with the exchange, moving on! GUILD INVITATION BLOCK In guild.cpp search for the function "void CGuild::Invite( LPCHARACTER pchInviter, LPCHARACTER pchInvitee )" and under add this: Here goes the guild invitation, let's move forward FRIEND LIST BLOCK In input_main.cpp search for the function "int CInputMain::Messenger(LPCHARACTER ch, const char* c_pData, size_t uiBytes)" and find this line: change it like this: Still in the same function, find this line in "case MESSENGER_SUBHEADER_CG_ADD_BY_NAME:": and add this: Friends are done. Let's move on to the last one! BUYING ITEMS FROM PRIVATE SHOPS BLOCK In shop_manager.cpp search for the function "void CShopManager::Buy(LPCHARACTER ch, BYTE pos)" and under add this: Done It's not something hard to do, I just gathered everything in one place, you can now sleep at night knowing that your GMs cannot fraud you. I would like to give special thanks to @VegaS who wrote the blocks for buffs, party and guild invitation, thanks so much buddy Note: These will block any interraction between a GM and a normal player, but a GM will be able to interract with another GM (example trade GM with GM). And before someone asks yes I thought about a safebox block for GMs but there is no need for that since you can login to his account and create 3 players, then logout and delete them directly from their database, leaving 3 warriors with Level 0 that cannot login to the game. Let the poor GMs have their safebox it's the only thing left to them after that I think So I hope I helped some folks here the tutorial is done Kind regards ~ Mind Rapist
  16. Hello devs Today I would like to present you a new solution that can make you feel more safe with your GMs. This is my first release and it's very simple to do, I'm just posting it here for the newbies and those who don't know how to start searching and other shit like that WHAT IS THIS SYSTEM? This system is a number of preventions for GameMaster characters about certain interractions with normal players in the game. The functions you are about to see are blocking GMs from: Trading items with normal players (and the opposite) Invite normal players to parties (and the opposite) Invite normal players to guilds (and the opposite) Adding normal players as friend contacts (I would say and the opposite but it already exists by default ) Drop items to the ground Build their own private shops with the Bundle item Buy items from a private shop Block a GM from buffing normal players Using the commands /set, /a and /setskillother to normal players WHO IS THIS SYSTEM FOR? I believe we can all agree that trust in partnership is a rare thing these days. This system is released from me for the Admins out there that cannot trust their GMs (and many times their self) so much. Imagine having a server and your GM just gives away items for free to everyone. Bad huh? I thought so... So with this system you are sure that your GMs will do their job properly and won't violate any game rules behind your backs. Your server has rules (as all games out there) and if you wanted people to have some items for free you can easily put those items for sale into the town vendors. People who do this kind of things behind your backs are not authorized by you to do it but I believe that it happened (if not happening yet) to the best of you guys, that's why I'm releasing it. It's time to set some things right in your servers, GMs exist to answer questions and not helping players cheat without any authorization from the administrators, so without further ado, let's get started. SORRY AGAIN, ONE MORE THING I BELIEVE THIS QUESTION IS IN THE MIND OF A DEVELOPER WHO READS THIS GUIDE: MIND RAPIST, WHY DO YOU USE THE IsGM() BOOLEAN TO CHECK IF A PLAYER IS A GM AND NOT USE THE TRADITIONAL CHECK GetGMLevel() > GM_PLAYER? In this tutorial, we will be using the bool IsGM() instead of the usual check because some of the guys who see this may have added @Alina's GM Elevation system. In that case, GetGMLevel() won't work before the character elevates, so our GMs will be able to bypass the check and just create a perfect item, relog and give it away before they elevate. We don't want that don't we? So who ever wants to use GetGMLevel() > GM_PLAYER instead of IsGM() there is no difference you can do that guys, except if you did the elevation system, then you need to use my function in order to work. So let's get the party started. PARTY INVITATION BLOCK In char.cpp search for the function "void CHARACTER::PartyInvite(LPCHARACTER pchInvitee)" and under add this: Done with party block, let's continue BUNDLE USAGE BLOCK FOR CREATING PRIVATE SHOPS In char_item.cpp search for the function "bool CHARACTER::UseItemEx(LPITEM item, TItemPos DestCell)" and under add this: Done, let's continue ITEM DROP BLOCK Still in char_item.cpp search for the function "bool CHARACTER::DropItem(TItemPos Cell, BYTE bCount)" and under add this: Done with that one, you can close char_item.cpp. Let's move on BUFF BLOCK In char_skill.cpp find this: and paste this under it: Done with that, next! /SET COMMAND BLOCK FOR PLAYERS In cmd_gm.cpp search for the function "ACMD(do_set)" and under add this: Done, but do not close, we have more commands to block! /A COMMAND BLOCK FOR PLAYERS Still in cmd_gm.cpp, search for the function "ACMD(do_advance)" and under add this: Do not close that file yet, one more command left to block /SETSKILLOTHER COMMAND BLOCK FOR PLAYERS Still in this file, search for the function "ACMD(do_setskillother)" and under add this: Done with the commands, you may close cmd_gm.cpp and move on EXCHANGE BLOCK In exchange.cpp search for the function "bool CHARACTER::ExchangeStart(LPCHARACTER victim)" and under (if you have sash system in your source, the top line may be "if ( IsOpenSafebox() || GetShopOwner() || GetMyShop() || IsCubeOpen() || IsAcceOpen() )") add this: Done with the exchange, moving on! GUILD INVITATION BLOCK In guild.cpp search for the function "void CGuild::Invite( LPCHARACTER pchInviter, LPCHARACTER pchInvitee )" and under add this: Here goes the guild invitation, let's move forward FRIEND LIST BLOCK In input_main.cpp search for the function "int CInputMain::Messenger(LPCHARACTER ch, const char* c_pData, size_t uiBytes)" and find this line: change it like this: Still in the same function, find this line in "case MESSENGER_SUBHEADER_CG_ADD_BY_NAME:": and add this: Friends are done. Let's move on to the last one! BUYING ITEMS FROM PRIVATE SHOPS BLOCK In shop_manager.cpp search for the function "void CShopManager::Buy(LPCHARACTER ch, BYTE pos)" and under add this: Done It's not something hard to do, I just gathered everything in one place, you can now sleep at night knowing that your GMs cannot fraud you. I would like to give special thanks to @VegaS who wrote the blocks for buffs, party and guild invitation, thanks so much buddy Note: These will block any interraction between a GM and a normal player, but a GM will be able to interract with another GM (example trade GM with GM). And before someone asks yes I thought about a safebox block for GMs but there is no need for that since you can login to his account and create 3 players, then logout and delete them directly from their database, leaving 3 warriors with Level 0 that cannot login to the game. Let the poor GMs have their safebox it's the only thing left to them after that I think So I hope I helped some folks here the tutorial is done Kind regards ~ Mind Rapist
  17. Robot

    Client console commands

    Hi everyone, In this thread I will explain all console commands in the client: exit - Force close the client mvol - Change the music volume between 0 - 10 svol - Change the sound volume between 0 - 10 snds - Change the volume of the interactive sounds (mobs, hit etc...) between 0 - 200 asnds - Change the volume of the ambience between 0 - 200 mspd - Change the moving speed between 0 - 1100 pwd - Show the current folder path (D:ymir work) ls - Show the folders in D:ymir work shadow - Change the shadow level between 0 - 5 splat - Set the rendering distance between the character and the ambience 0 - ∞ distance - Change the view distance between 0 - 4 bgloading - This function is disabled in the binary! transtree - Enable or disable the transparency of the trees 0 - 1 cd - CD to directory, like in bat files (cd ..) up - Go up in the folder structure (D:ymir work) lsd - List all directories on the D: partition lsf - List all files on the D: partition lse - Show the path of the effects (D:ymir workeffect) collision - highlight the objects, monsters, npcs, players 0 - 1 colli - Equal with the collision function without argument, turn on/off the highlighting disconnect - Unfinished function! autorot - Set the rotation moving speed of the camera while pressing the A/D keys 0 - ∞ pickc - Show char informations, isRegistered, isAlive, isDead infoc - Information of another thing, usage: infoc <VID> regchre - Register new effect on the char, usage: regchre <effectType> and <effectFilename> setchra - Set character effect, usage: setchra <effectType> <Visibility 0 or 1> emoticon - Set emotion effect over the character, usage: emotion <number of the emoticon> perfinfo - Show performance informations (?) reload_locale - Reload the locale re - Reload uiGuild and uiInventory cooltime - Disable or enable the skills cooltime hidecursor - Hide the cursor showcursor - Show the cursor warp - Warp to x-y position web - Pop out a web browser hideui - Hide the user interface showui - Show the user interface setcspd - Change the camera moving speed 0 - ∞ savecmr - Export the current camera settings to the client folder, usage: savecmr <filename> loadcmr - Import camera settings, usage: loadcmr <filename in the client folder> setdefcmr - Set to default the camera settings setsight - Change the sight 0 - 100 setcombotype - Set the level of the combo, the server will kick you after few seconds because of combo hack check trans - Change the empire language converting, you can understand all empires without a ring 0 - 1 Rendering options: setrmadd setrmmod setrmaddrgb setrmmodrgb setspec restorerm If you have any question or suggestion please just reply to this topic.
  18. Robot

    RED LOGIN INTERFACE

    First of all i want to say that this interface is FREE and EXCLUSIVE shared for METIN2DEV A little preview of the tutorial: http://i.imgur.com/tF81pCD.jpg * The tutorial itself is in introLogin.py located in the .RAR archive A preview of the interface itself: https://www.youtube.com/watch?v=uWaBXpjQu_Y Download links: https://mega.nz/#!rg4RkayK!d7GN2CgBoVfFNK9_S3LRRPmEj3fWxGvn89pC5KJQW-A Archive password: EXYGO@METIN2DEV&WILDFANTASY Notes: You will need this to locale_xx/xx/ui/: In login.sub put this: In serverlist.sub put this: - If someone can make the Web/Forum/Forgot Pw. buttons to work please do it and leave a reply, i didn't do that yet - Yes, i have the PSD file If you found something wrong in this relase leave a reply
  19. Robot

    [FIX]AUTO POTION

    Open in uiinventory search this if slotNumber >= player.INVENTORY_PAGE_SIZE: slotNumber -= player.INVENTORY_PAGE_SIZE Replace to if slotNumber >= player.INVENTORY_PAGE_SIZE*self.inventoryPageIndex: slotNumber -= player.INVENTORY_PAGE_SIZE*self.inventoryPageIndex bug: http://floomby.ru/s2/weg6MN http://floomby.ru/s2/9eg6qy
  20. ----EN---- Hello , i decided to posted multilanguage system (maded for metin2dr)The system allow to change the language of your client,this system was created in 20-30 min .You only need a locale for each language.The implementation of this system is very simple, but i have made a videotutorial also . ----ES---- Hola , me decidi postear el sistema multi-idioma echo para metin2dr.Este sistema permite cambiar el idioma de tu cliente rapido,fue echo en 20-30 minutos.Solo se necesita un locale para cada idioma.La implementacion en si,es simple,pero hize un videotutorial por si tenei dudas al respecto. Video Tutorial: https://www.youtube.com/watch?feature=player_embedded&v=PZb1BVxsk8s Download: https://mega.co.nz/#!pA0TlbpS!7Kh7HOT-v4caZpg7LA_24AlqI8NDdR9XrjxPQN2pv8I
  21. Hi guys, I'll show yout how to simply open your safebox by inventory button. 1) First you'll need to replace "def ClickMallButton" in "uiinventory.py" by : def ClickMallButton(self): self.choix = ui.BoardWithTitleBar() self.choix.SetSize(210, 80) self.choix.SetCenterPosition() self.choix.AddFlag('float') self.choix.AddFlag('movable') self.choix.SetTitleName("Ouverture entrepôt") self.choix.Show() self.EntrepotIs = ui.Button() self.EntrepotIs.SetEvent(self.OpenIs) self.EntrepotIs.SetParent(self.choix) self.EntrepotIs.SetPosition(35, 40) self.EntrepotIs.SetUpVisual("d:/ymir work/ui/public/middle_button_01.sub") self.EntrepotIs.SetOverVisual("d:/ymir work/ui/public/middle_button_02.sub") self.EntrepotIs.SetDownVisual("d:/ymir work/ui/public/middle_button_03.sub") self.EntrepotIs.SetText("ItemShop") self.EntrepotIs.SetToolTipText("Ouvrir l'entrepot ItemShop") self.EntrepotIs.Show() self.Magasinier = ui.Button() self.Magasinier.SetEvent(self._normal_mall) self.Magasinier.SetParent(self.choix) self.Magasinier.SetPosition(105, 40) self.Magasinier.SetUpVisual("d:/ymir work/ui/public/middle_button_01.sub") self.Magasinier.SetOverVisual("d:/ymir work/ui/public/middle_button_02.sub") self.Magasinier.SetDownVisual("d:/ymir work/ui/public/middle_button_03.sub") self.Magasinier.SetText("Magasinier") self.Magasinier.SetToolTipText("Ouvrir le magasinier") self.Magasinier.Show() 2) Then add this under : def OpenIs(self): self.EntrepotIs.Hide() self.choix.Hide() self.Magasinier.Hide() net.SendChatPacket("/click_mall") def _normal_mall(self): self.EntrepotIs.Hide() self.Magasinier.Hide() self.choix.Hide() net.SendChatPacket("/click_safebox") 3) Open cmd_general.cpp (game src) and search for : ACMD(do_click_mall) { ch->ChatPacket(CHAT_TYPE_COMMAND, "ShowMeMallPassword"); } then add this below : ACMD(do_click_safebox) { ch->ChatPacket(CHAT_TYPE_COMMAND, "ShowMeSafeboxPassword"); } 4) Open cmd.cpp (still game src) and search for : ACMD(do_click_mall); then add this below : ACMD(do_click_safebox); in same file search for : { "click_mall", do_click_mall, 0, POS_DEAD, GM_PLAYER }, and add this below : { "click_safebox", do_click_safebox, 0, POS_DEAD, GM_PLAYER }, 5) You'll need to remove distance limit to open safebox so open "char.cpp" and search for else if (GetDistanceFromSafeboxOpen() > 1000) { ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<â°í> °Å¸®°¡ ¸Ö¾î¼­ â°í¸¦ ¿­ ¼ö ¾ø½À´Ï´Ù.")); return; } here you juste need to comment this block, like this : /* else if (GetDistanceFromSafeboxOpen() > 1000) { ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<â°í> °Å¸®°¡ ¸Ö¾î¼­ â°í¸¦ ¿­ ¼ö ¾ø½À´Ï´Ù.")); return; } */ 6) You're done, now you'll get this menu (you will be able to choose between mall or safebox)
  22. Hello, I want to show you a new guide to make a communication between quest and client. Nowdays we can use game source..bla bla... but if you don't want/don't know how to compyle it, you can use this version (old and good ). So, let's begin: ### Send informations to client ### Start a quest from client (for buttons sometimes...) ### Get a variable from client (now for 34 & 40k update) ### Send multiple informations to client once Kind regards and i hope you understood me! Sorry for mistakes.
  23. Hi, I was bored, and I started thinking how to do so they could not use the cheat-engine on a client, well, here I come to bring you the code in python. import os import thread import time def procesoss(): try: while 1 == 1: Black_List = ["inyector.exe","cheatengine-x86_64.exe","ollydbg.exe","skype.exe"] # here the programs to block, you can see the full name in cmd and put "tasklist" for p in os.popen("tasklist"): procesos = p.lower() for sema in Black_List: if procesos.find(sema) != -1: p = procesos.split() os.popen("taskkill /im %s /f" % p[0]) time.sleep(3) # wait 3 second to check again except: time.sleep(3) # wait 3 second to check again thread.start_new_thread(procesoss, ()) I try it, and work. Sorry for my bad english Update*: I change os.system to os.popen and now you can't see the console from windows.
  24. Robot

    [Quest] Biolog tradus în Română

    Misiuni level : *30 - Dinţi de orc *40 - Carţi blestemate *50 - Amintiri de demon *60 - Globuri de gheaţă *70 - Crengi Zelkova *80 - Tabliţe *90 - Însemnele regelui Quest lvl 30 : quest biologist_sequence begin ---------------------------------- -- LvL 30 / Dinti de orc ---------------------------------- state start begin when login or levelup with pc.level>29 begin set_state(talk_to_disciple_lv30) end end state talk_to_disciple_lv30 begin when letter begin local v = find_npc_by_vnum(20084) if v != 0 then target.vid("__TARGET__", v, "Cererea biologului") end send_letter("Cererea biologului") end when button or info begin say_title("Cererea biologului") say("") say("Biologul are nevoie de ajutorul tau") say("Dute si vorbeste cu el") say("") say_reward("Discuta cu biologul") say("") end when __TARGET__.target.click or 20084.chat."Orkzähne" begin target.delete("__TARGET__") say("Biolog:") say("") say("Oh,ai venit sa ma ajuti?") say("Ei bine ...") say("Eu sunt de altfel biologul") say("si ma ocup cu studierea numeroaselor plante") say("Daca ma ajuti cu cercetarea,") say("eu te voi rasplati din plin") say("") wait() say("Biolog:") say("Eu va voi rasplati din plin .") say("Vom face cercetarea pe o legenda") say("Dar eu trebuie sa fac mai intai in prezent ,") say("ar fi atat de frumos daca m-ai ajuta") say("") wait() say("Biolog:") say("Am nevoie de 10 dinti de orc pentru cercetarea mea.") say("Cu toate astea sunt foarte fragili ,") say("se poate ca la unii dinti") say("sa nu pot fi analizati") say("Am nevoie de toti cei 10,") say("pentru a finaliza cercetarea") say("") set_state(collect_orcteeth) pc.setqf("duration",0) pc.setqf("collect_count",0) end end state collect_orcteeth begin when letter begin send_letter("Die Forschung des Biologen") end when button or info begin say_title("Dinti de orc") say("") say("Biologul ti-a dat mult de lucru,") say("sa colectezi cei 10 dinti de orc.") say("Colecteaza-i si adui pe toti la biolog.") say("") say_item_vnum(30006) say_reward("Aveti in prezent "..pc.getqf("collect_count").." abgegeben!") say("") end when 20084.chat."Dinti de orc" with pc.count_item(30006)>0 begin if get_time()>pc.getqf("duration") then say("Un moment ...") say("Iti multumesc mult,") say("lasa-ma sa revizuiesc rapid") say("in cazul in care acest dinte este in ordine ...") say("") pc.remove_item("30006", 1) pc.setqf("duration",get_time()+300) wait() local rand = number(0,99) if rand<50 then local count = pc.getqf("collect_count")+1 if count<10 then pc.setqf("collect_count", count) say("Biolog:") say("Excelent,acest dinte este in ordine.") say("Adu-mi altul.) say("Se poate cerceta.") say("") say_reward("Aveti in prezent"..pc.getqf("collect_count").." abgegeben!") say("") else say("Biolog:") say("Mi-ai adus 10 dinti.") say("Acum,te rog s ate duci sa imi aduci piatra Jinunggyis") say("Pentru a aduce piatra Jinunggyis.") say("Trebuie sa te duci sa o procuri de la orcii mandrii...") say("Cred ca esti suficient de puternic pentru ea.") say("") pc.setqf("collect_count",0) pc.setqf("duration",0) set_state(collect_jinunggyis) end else say("Biolog:") say("Imi pare rau dar acest dintele este") say("deja putrezit") say("Te rog sa-mi aduci un alt dinte de orc.") say("") end else say("Biolog:") say("Imi pare rau") say("Studiile nu sunt terminate inca.") say("Te rog sa imi aduci un alt dinte mai tarziu.") say("") end end end state collect_jinunggyis begin when letter begin send_letter("Piatra Jinunggyis") end when button or info begin say_title("Piatra Jinunggyis") say("") say("Felicitari! Aveti toti cei 10 dinti de orc") say("Acum aveti nevoie sa capturati piatra Jinunggyis") say("") say_item_vnum(30220) say("Aceasta piatra de fapt contine un suflet") say("") end when 635.kill or 636.kill or 637.kill begin if pc.count_item(30220)<1 then local rand = number(0,99) if rand<5 then pc.give_item2(30220, 1) end end end when 20084.chat."Piatra Jinunggyis" begin if pc.count_item(30220)>0 then say("Biolog:") say("Datorita muncii dumneavoastra avem acum") say("legenda pietrei Jinunggyis.") say("Ai luptat din greu.") say("Dute si vorbeste cu Baek-Go,") say("pentru a creste puterea ta interioara.") say("") pc.remove_item(30220,1) set_state(jinunggyis_reward) else say("Biolog:") say("Bravo,mi-ai adus 10 bucati") say("Acum eu va rog sa-mi aduceti piatra Jinunggyis") say("Pentru a aduce piatra Jinunggyis") say("Trebuie sa ucideti Orcii cei mandrii") say("Cred ca esti suficient de puternic pentru a aduce piatra.") say("") end end end state jinunggyis_reward begin when letter begin send_letter("Discutati cu Baek-Go") local v = find_npc_by_vnum(20018) if v != 0 then target.vid("__TARGET__", v, "Doktor") end end when button or info begin say("Pentru a primi recomepnsa de la biolog") say("dute si vorbeste cu baek-go.") say("Acesta iti va creste competentele permanent!") say("") end when __TARGET__.target.click or 20018.chat."Recompensa de la biolog" begin target.delete("__TARGET__") say_title("Baek-Go:") say("Eu vad...") say("Biologul v-a trimis la mine.") say("Iata rasplata ta:") say("") say_reward("Veti primi:") say_reward("Viteza de miscare +10% (permanent)") say("") affect.add_collect(apply.MOV_SPEED, 10, 60*60*24*365*60) set_state(collect_quest_lv40) end end Quest lvl 40 : ---------------------------------- -- LvL 40 / Fluchsammlung ---------------------------------- state collect_quest_lv40 begin when login or levelup with pc.level>39 begin set_state(talk_to_disciple_lv40) end end state talk_to_disciple_lv40 begin when letter begin local v = find_npc_by_vnum(20084) if v != 0 then target.vid("__TARGET__", v, "Biologe") end send_letter("Cercetarea biologului nr 2") end when button or info begin say_title("Cercetarea biologului nr 2") say("") say("Biologul are nevoie de ajutor") say("Spune ca doreste sa il ajuti in cautarea ") say("elementelor de constructie") say("Dute si vorbeste cu el,") say("Pentru a obtine mai multe amanunte") say("") say_reward("Vorbeste cu biologul") say("") end when __TARGET__.target.click or 20084.chat."Fluchbücher" begin target.delete("__TARGET__") say("Biologul:") say("Ei bine ai ajuns...") say("Investigatia privind Orcii") say("S-a terminat.") say("Acum am descoperit noi obiecte,") say("As vrea sa investighezi") wait() say("Biologul:") say("As putea sa le colectez eu dar,") say("am prea multe de facut.") say("Ar fi foarte frumos") say("daca a-i face asta pentru mine.") wait() say("Biologul:") say("Vreau sa examinezi cartile blesteme.") say("Am nevoie de 15 carti") say("Cartile sunt destul de vechi,") say("acestea cad uneori in afara templului!") say("") set_state(collect_cursebook) pc.setqf("duration",0) pc.setqf("collect_count",0) end end state collect_cursebook begin when letter begin send_letter("Cercetarea biologului nr 2") end when button or info begin say_title("Colectionarea Blestemelor") say("") say("Biologul ti-a dat un loc de munca,") say("Pentru a obtine 15 carti blesteme.") say("Acest lucru se poate si pe intuneric") say("Colectionarea cartilor blesteme") say("") say_item_vnum(30047) say_reward("Ai in prezent "..pc.getqf("collect_count").." colectionate!") say("") end when 20084.chat."Cercetarea cartilor blesteme" with pc.count_item(30047)>0 begin if get_time()>pc.getqf("duration") then say("Ateapta un minut ...") say("Multumesc,") say("lasa-ma sa ma uit") say("In cazul in care aceasta carte este buna ...") say("") pc.remove_item("30047", 1) pc.setqf("duration",get_time()+300) wait() local rand = number(0,99) if rand<50 then local count = pc.getqf("collect_count")+1 if count<15 then pc.setqf("collect_count", count) say("Biologul:") say("Excelent aceasta carte este in ordine.") say("Mai adu-mi deoarece ") say("Am nevoie de mai multe.") say("") say_reward("In prezent ai "..pc.getqf("collect_count").." colectionate!") say("") else say("Biologul:") say("Ai adus 15 carti .") say("Ei bine mai am o cercetare.") say("Am nevoie de piatra sufletului din templu,") say("Aceasta pica langa templul,") say("Luptator precum Ork Sef te poate invinge") say("Cred ca esti suficient de puternic") say("") pc.setqf("collect_count",0) pc.setqf("duration",0) set_state(collect_templekey) end else say("Biologul:") say("Imi pare rau aceasta carte,") say("S-a deteriorat pe parcusul investigatiei") say("Te rog adu-mi alta.") end else say("Biologul:") say("Imi pare rau ") say("nu am terminat studiile inca ...") say("Te rog sa imi aduci Fluchsammmlung mai tarziu...") end end end state collect_templekey begin when letter begin send_letter("Piatra sufletului din Templu") end when button or info begin say_title("Piatra sufletului din Templu") say("") say("Tu ai adus toate cele 15 carti blestem.") say("Iar acum ai Piatra sufletului din Templu.") say("") say_item_vnum(30221) say("Stiai ca aceasta piatra contine") say("Sufletul urmasilor din templu?") say("") end when 635.kill or 636.kill or 637.kill begin if pc.count_item(30221)<1 then local rand = number(0,99) if rand<5 then pc.give_item2(30221, 1) end end end when 20084.chat."Piatra sufletului din Templu" begin if pc.count_item(30221)>0 then say("Biologul:") say("Pentru a primii recompensa ") say("In urma cautarii de informatii despre.") say("Cartile blesteme si Piatra sufletului din Templu.") say("Dute si cauta-l pe Baek-Go,") say("Acesta se afla in oras.") say("") pc.remove_item(30221,1) set_state(templekey_reward) else say("Biologul:") say("Ai adus 15 carti .") say("Ei bine mai am o cercetare.") say("Am nevoie de piatra sufletului din templu,") say("Aceasta pica langa templul,") say("Luptator precum Ork Sef te poate invinge") say("Cred ca esti suficient de puternic") say("") end end state templekey_reward begin when letter begin send_letter("Dute si vorbeste cu Baek-GO") local v = find_npc_by_vnum(20018) if v != 0 then target.vid("__TARGET__", v, "Doktor") end end when button or info begin say_title("Vorbeste cu Baek-Go") say(Pentru a primi recompensa,") say("In urma colecatrii de informatii") say("despre cartile blestem si piatra sufletului din templu") say("Dute in oras la Baek-Go.") say("") end when __TARGET__.target.click or 20018.chat."Belohnung des Biologen" begin target.delete("__TARGET__") say_title("Baek-Go:") say("Sa vedem, zici ca biologul te-a trimis la mine ...") say("Biologul te-a trimis la mine") say("Uite rasplata ta") say("") say_reward("Primesti:") say_reward("+5% Viteza de atac (Permanent)") say("") affect.add_collect(apply.ATT_SPEED,5,60*60*24*365*60) set_state(collect_quest_lv50) end end Quest lvl 50 : -- LvL 50 / Dämonenandenken ---------------------------------- state collect_quest_lv50 begin when login or levelup with pc.level>49 begin set_state(talk_to_disciple_lv50) end end state talk_to_disciple_lv50 begin when letter begin local v = find_npc_by_vnum(20084) if v != 0 then target.vid("__TARGET__", v, "Biolog") end send_letter("Cercetarea biologului numarul 3") end when button or info begin say_title("Cercetarea biologului numarul 3") say("") say("Biologul are nevoie de ajutorul tau dinou.") say("El a spus ca avea nevoie de ajutor in cautare") say("pentru anumite elemente.") say("Vorbeste cu el,") say("pentru a obtine informatii cat mai clare.") say("") say_reward("Discuta cu biologul") say("") end when __TARGET__.target.click or 20084.chat."Suvenirul Demonului" begin target.delete("__TARGET__") say("Biolog:") say("Bine ca ai venit...") say("Ancheta colectiilor blestem") say("Am finalizat-o cu succes!") say("Acum am gasit obiecte noi,") say("si as dori sa le investighez.") wait() say("Biolog:") say("Le-as procura eu,") say("dar am prea multe de facut...") say("Ar fi foarte frumos daca") say("ai putea face asta pentru mine.") wait() say("Biolog:") say("Vreau sa examinez amintirile de demon.") say("Am nevoie de 15 amintiri!") say("Cu toate astea,sunt foarte fragile,") say("se poate ca unele") say("sa fie deteriorate.") say("") set_state(collect_deamonitem) pc.setqf("duration",0) pc.setqf("collect_count",0) end end state collect_deamonitem begin when letter begin send_letter("Cercetarea biologului numarul 3") end when button or info begin say_title("Suvenirul Demonului") say("") say("Biologul ti-a dat de munca,") say("am nevoie de 15 amintiri.") say("Aceste suvenire va pot pica la monstrii din") say("turnul demonilor.") say("") say_item_vnum(30015) say_reward("In prezent aveti "..pc.getqf("collect_count").." abgegeben!") say("") end when 20084.chat."Suvenirul Demonului" with pc.count_item(30015)>0 begin if get_time()>pc.getqf("duration") then say("Un moment ...") say("Multumesc mult,") say("lasa-ma sa-l analizez") say("in cazul in care acest suvenir este in ordine ...") say("") pc.remove_item("30015", 1) pc.setqf("duration", get_time()+300) wait() local rand = number(0,99) if rand<50 then local count = pc.getqf("collect_count")+1 if count<15 then pc.setqf("collect_count", count) say("Biolog:") say("Excelent,") say("aceasta amintire de demon este in regula.") say("Mai adu-mi te rog") say("Poate intra in cercetare.") say("") say_reward("Aveti in prezent "..pc.getqf("collect_count").." abgegeben!") say("") else say("Biolog:") say("Mi-ai adus 15 amintiri.") say("Ei bine am pentru tine o sarcine ceva mai mare.") say("Am nevoie de piatra Sagyis.") say("Se gaseste la monstrii din turnul demonilor,") say("si se poate captura usor.") say("Cred ca esti suficient de puternic.") say("") pc.setqf("collect_count",0) pc.setqf("duration",0) set_state(collect_sagyis) end else say("Biolog:") say("Imi pare rau") say("Acest suvenir nu este bun") say("Adu-mi te rog altul.") end else say("Biolog:") say("Imi pare rau") say("Acest suvenir nu este bun") say("Adu-mi te rog altul.") end end end state collect_sagyis begin when letter begin send_letter("Piatra Sagyis") end when button or info begin say_title("Piatra Sagyis") say("") say("Ati colectat toate cele 15 amintiri.") say("Acum am nevoie sa capturezi piatra Sagyis") say("") say_item_vnum(30222) say("Aceasta piatra contine sufletele") say("nobililor Sagyis.") say("") end when 1031.kill or 1032.kill or 1033.kill or 1034.kill begin if pc.count_item(30222)<1 then local rand = number(0,99) if rand<5 then pc.give_item2(30222, 1) end end end when 20084.chat."Piatra Sagyis" begin target.delete("__TARGET__") if pc.count_item(30222)>0 then say("Biolog:") say("Am descifrat") say("legenda pietrei Sagyis.") say("Ai luptat din greu!") say("Dute si discuta cu Baek-Go,el te va ajuta") say("pentru a creste puterea ta interioara.") say("") pc.remove_item(30222,1) set_state(sagyis_reward) else say("Biolog:") say("Bravo,mi-ai adus toate cele 15 memorii.") say("Ei bine,am o noua cerere.") say("Am nevoie de piatra Sagyis,") say("ea cade la monstrii din turnul demonilor(DT),") say("se poate captura foarte usor.") say("Cred ca esti suficient de puternic pentru a o captura.") say("") end end end state sagyis_reward begin when letter begin send_letter("Dute si vorbeste cu Baek-Go") local v = find_npc_by_vnum(20018) if v != 0 then target.vid("__TARGET__", v, "Doktor") end end when button or info begin say_title("Discuta cu Baek-Go") say("Pentru a primi recompensa biologului,") say("dute si vorbeste cu Baek-Go") say("El te va ajuta.") say("Baek-Go. Este situat in oras") say("") end when __TARGET__.target.click or 20018.chat."Belohnung des Biologen" begin target.delete("__TARGET__") say_title("Baek-Go:") say("Eu vad ...") say("Biologul te-a trimis la mine.") say("Aici este rasplata ta:") say("") say_reward("Veti primi:") say_reward("Aparare +60 (permanent)") say("") affect.add_collect(apply.DEF_GRADE_BONUS,60,60*60*24*365*60) set_state(collect_quest_lv60) end end Quest lvl 60 : ---------------------------------- -- LvL 60 / Eiskugeln ---------------------------------- state collect_quest_lv60 begin when login or levelup with pc.level>59 begin set_state(talk_to_disciple_lv60) end end state talk_to_disciple_lv60 begin when letter begin local v = find_npc_by_vnum(20084) if v != 0 then target.vid("__TARGET__", v, "Biologe") end send_letter("Cererea Biologului 4") end when button or info begin say_title("Sarcina bilogului 4") say("") say("Biologul are nevoie de ajutorul tau.") say("El a spus ca avea nevoie de ajutor in cercetare") say("pentru anumite elemente.") say("Vorbeste cu el,") say("Pentru a obtine o descriere exacta.") say("") say_reward("Vorbeste cu biologul.") say("") end when __TARGET__.target.click or 20084.chat."Globurile de gheata" begin target.delete("__TARGET__") say("Biologul:") say("Bine ai venit...") say("Am terminat studiul") say("suvenirelor.") say("Acum am gasit obiecte noi,") say("pe care as vrea sa le examinez.") wait() say("Biologul:") say("Le-as strange eu,") say("dar sunt foarte ocupat...") say("Ar fi foarte frumos daca") say("ai putea sa ma ajuti.") wait() say("Biologul:") say("Vreau sa examinez globurile de gheata.") say("Dintre acestea am nevoie de 15.") say("Cu toate acestea,") say("sunt destul de fragile,") say("si unele s-ar putea sa se topeasca.") say("") set_state(collect_scoops) pc.setqf("duration",0) pc.setqf("collect_count",0) end end state collect_scoops begin when letter begin send_letter("Cererea biologului 4") end when button or info begin say_title("Globuri de gheata") say("") say("Biologul are nevoie de") say("15 globuri de gheata.") say("Le poti lua de la") say("Golemi de gheata") say("") say_item_vnum(30050) say_reward("Ai adunat"..pc.getqf("collect_count").." .") say("") end when 20084.chat."Globurile de gheata" with pc.count_item(30050)>0 begin if get_time()>pc.getqf("duration") then say("Doar o clipa...") say("Multumesc,") say("Lasa-ma sa verific") say("daca globul este de calitate...") say("") pc.remove_item("30050", 1) pc.setqf("duration", get_time()+21600) wait() local rand = number(0,99) if rand<50 then local count = pc.getqf("collect_count")+1 if count<15 then pc.setqf("collect_count", count) say("Biologul:") say("Excelent,") say("Globul de gheata este in ordine.") say("Acum voi incepe analiza lui") say("Insa am nevoie de timp!") say("") say_reward("Ai strans "..pc.getqf("collect_count").." !") say("") else say("Biologul:") say("Mi-ai adus toate cele 15 globuri.") say("Ei bine,mai am nevoie de ceva.") say("Piatra sufletului Aurtumryus,") say("O potu procura ") say("din muntele Sohan!") say("Cred ca esti destul de puternic pentru a putea face rost de ea!") say("") pc.setqf("collect_count",0) pc.setqf("duration",0) set_state(collect_aurtumryus) end else say("Biologul:") say("Imi pare rau,dar") say("acest glob de gheata s-a topit deja.") say("Adu-mi te rog altul.") end else say("Biologul:") say("Imi pare rau,dar") say("nu am terminat de analizat ultimul glob.") say("Revino mai tarziu.") end end end state collect_aurtumryus begin when letter begin send_letter("Piatra sufletului Aurtumryus") end when button or info begin say_title("Piatra sufletului Aurtumryus") say("") say("Ai strans toate cele 15 globuri de gheata") say("Mai ai nevoie de Piatra sufletului Aurtumryus") say("") say_item_vnum(30223) say("Aceasta piatra contine") say("sufletul Aurtumryus") say("") end when 1101.kill or 1102.kill or 1103.kill or 1104.kill or 1105.kill or 1106.kill or 1107.kill begin if pc.count_item(30223)<1 then local rand = number(0,99) if rand<5 then pc.give_item2(30223, 1) end end end when 20084.chat."Piatra sufletului Aurtumryus" begin if pc.count_item(30223)>0 then say("Biologul:") say("Iti multumesc pentru ajutor") say("Acum am toate cele necesare pentru experiment.") say("Ai luptat din greu.") say("Discuta cu Baek-Go,el te va ajuta") say("sa-ti cresti puterea interioara!") say("") pc.remove_item(30223,1) set_state(aurtumryus_reward) else say("Biologul:") say("Mi-ai adus toate cele 15 globuri de gheata.") say("Ei bine,am o noua cerere!") say("Am nevoie de Piatra sufletului Aurtumryus,") say("o poti procura dupa") say("muntele Sohan.") say("Cred ca esti suficient de puternic pentru ea!") say("") end end end state aurtumryus_reward begin when letter begin send_letter("Du-te la Baek-Go") local v = find_npc_by_vnum(20018) if v != 0 then target.vid("__TARGET__", v, "Doktor") end end when button or info begin say_title("Du-te la Baek-Go") say("Pentru a primi") say("recompensa de la bilog") say("trebie sa mergi la") say("Baek-Go!") say("") end when __TARGET__.target.click or 20018.chat."Recompensa biolog:" begin target.delete("__TARGET__") say_title("Baek-Go:") say("Vad...") say("Biologul te-a trimis la mine.") say("Aici este recompensa:") say("") say_reward("Ai primit:") say_reward("Valoare atac +50 (Permanent)") say("") affect.add_collect(apply.ATT_GRADE_BONUS,50,60*60*24*365*60) set_state(collect_quest_lv70) end end Quest lvl 70 : ---------------------------------- -- LvL 70 / Zelkovas Holzäste ---------------------------------- state collect_quest_lv70 begin when login or levelup with pc.level>69 begin set_state(talk_to_disciple_lv70) end end state talk_to_disciple_lv70 begin when letter begin local v = find_npc_by_vnum(20084) if v != 0 then target.vid("__TARGET__", v, "Biolog") end send_letter("Cercetarea biologului numarul 5") end when button or info begin say_title("Cercetarea biologului numarul 5") say("") say("Biologul are nevoie de ajutorul tau.") say("El a spus ca are nevoie de ajutor in cautarea") say("anumitor elemente.") say("Vorbeste cu el,") say("pentru a sti exact ce ai de facut.") say("") say_reward("Vorbeste cu biologul") say("") end when __TARGET__.target.click or 20084.chat."Crengile Zelkova" begin target.delete("__TARGET__") say("Biolog:") say("Hey,bine ai venit...") say("Ancheta globurilor de gheata") say("a fost finalizata cu succes") say("Am gasit ceva nou,") say("si vreau sa ma ajuti sa investighez.") wait() say("Biolog:") say("Le-as aduna eu,") say("dar am prea multe de facut.") say("Ar fi foarte frumos") say("daca te-ai duce sa le procuri tu.") wait() say("Biolog:") say("Vreau sa examinez crengile Zelkova.") say("Am nevoie de 25 Crengute") say("Acestea se usuca destul de repede,") say("si se poate") say("sa fie inutile pentru mine.") say("") set_state(collect_branches) pc.setqf("duration",0) pc.setqf("collect_count",0) end end state collect_branches begin when letter begin send_letter("Cercetarea biologului numarul 5") end when button or info begin say_title("Crengile Zelkova") say("") say("Biologul ti-a dat multe sarcini,") say("dute si strange 25 de crengi Zelkova.") say("Aceste crengi") say("le gasesti la toti monstrii din padure.") say("") say_item_vnum(30165) say_reward("In prezent aveti "..pc.getqf("collect_count").." abgegeben!") say("") end when 20084.chat."Crengile Zelkova" with pc.count_item(30165)>0 begin if get_time()>pc.getqf("duration") then say("Un moment ...") say("Multumesc,") say("lasa-ma sa verific") say("daca aceasta creanga este in regula") say("") pc.remove_item("30165", 1) pc.setqf("duration", get_time()+21600) wait() local rand = number(0,99) if rand<50 then local count = pc.getqf("collect_count")+1 if count<25 then pc.setqf("collect_count", count) say("Biolog:") say("Excelent,") say("aceasta creanga este in regula") say("Adu-mi mai multe.") say("Aceasta poate intra in cercetare.") say("") say_reward("Aveti in prezent "..pc.getqf("collect_count").." abgegeben!") say("") else say("Biolog:") say("Mi-ai adus 25 de crengi Zelkova.") say("Ei bine,am o sarcina noua.") say("Am nevoie de piatra Gyimoks,") say("Piatra o poti procura") say("de la monstrii din padure.") say("Cred ca esti suficient de puternic pentru ea.") say("") pc.setqf("collect_count",0) pc.setqf("duration",0) set_state(collect_gyimoks) end else say("Biolog:") say("imi pare rau,") say("aceasta creanga s-a uscat in timpul transportului.") say("Te rog sa-mi aduci una noua.") end else say("Biolog:") say("Imi pare rau.") say("Studiile nu sunt inca terminate ...") say("Revin-o mai tarziu.") end end end state collect_gyimoks begin when letter begin send_letter("Piatra Gyimoks") end when button or info begin say_title("Piatra Gyimoks") say("") say("Ai terminat toate Crengile.") say("Acum aveti nevoie de piatra Gyimoks.") say("") say_item_vnum(30224) say("Aceasta piatra contine") say("sufletul nobililor Gyimoks.") say("") end when 2301.kill or 2302.kill or 2303.kill or 2304.kill or 2305.kill or 2311.kill or 2312.kill or 2313.kill or 2314.kill or 2315.kill or 2306.kill or 2307.kill begin if pc.count_item(30224)<1 then local rand = number(0,99) if rand<5 then pc.give_item2(30224, 1) end end end when 20084.chat."Piatra Gyimoks" begin target.delete("__TARGET__") if pc.count_item(30224)>0 then say("Biolog:") say("Iti multumesc pentru ajutorul acordat,") say("legenda pietrei Gyimoks a fost dezlegata.") say("Ai luptat din greu.") say("Dute si discuta cu Baek-Go,el te va ajuta,") say("sa cresti puterea ta interioara.") say("") pc.remove_item(30224,1) set_state(gyimoks_reward) else say("Biolog:") say("Mi-ai adus toate cele 25 de crengi.") say("ei bine..am o noua cerere.") say("Am nevoie de piatra Gyimoks,") say("pe care o poti captura,") say("de asemenea de la monstrii din padure.") say("Cred ca esti suficient de puternic pentru a o captura.") say("") end end end state gyimoks_reward begin when letter begin send_letter("Dute la Baek-Go") local v = find_npc_by_vnum(20018) if v != 0 then target.vid("__TARGET__", v, "Doktor") end end when button or info begin say_title("Discutati cu Baek-Go") say("Pentru a primi recompensa biologului,") say("cautand informatii despre crengile Zelkova") say("si informatii despre suflete.") say("Baek-Go.El este situat in oras.") say("") end when __TARGET__.target.click or 20018.chat."Recompensa biologului" begin target.delete("__TARGET__") say_title("Baek-Go:") say("Eu vad ...") say("Biologul v-a trimis la mine.") say("Iata rasplata ta:") say("") say_reward("Veti primi:") say_reward("Viteza de miscare +10% (permanent)") say_reward("Reducerea pagubei +10% (permanent)") say("") affect.add_collect(apply.MOV_SPEED,10,60*60*24*365*60) affect.add_collect(apply.DEF_GRADE_BONUS,10,60*60*24*365*60) set_state(collect_quest_lv80) end end Quest lvl 80 : ---------------------------------- -- LvL 80 / Tugyis Tafeln ---------------------------------- state collect_quest_lv80 begin when login or levelup with pc.level>79 begin set_state(talk_to_disciple_lv80) end end state talk_to_disciple_lv80 begin when letter begin local v = find_npc_by_vnum(20084) if v != 0 then target.vid("__TARGET__", v, "Biologul") end send_letter("Cercetarea Biologului Nr.6") end when button or info begin say_title("Cercetarea Biologului Nr. 6") say("") say("Biologu; are nevoie de ajutor din nou.") say("El a spus ca are nevoie de ajutorul tau in cautare") say("de TABLITE.") say("Vorbeste cu el,") say("vorbeste cu el pentru a primii o descriere mai exacta.") say("") say_reward("Discuta cu bilogul") say("") end when __TARGET__.target.click or 20084.chat."TABLITELE" begin target.delete("__TARGET__") say("Biologul:") say("Bine ai venit...") say("Cautarea de Zelkova") say("s-a terminat.") say("Acum am gasit obiecte noi,") say("a-s dorii sa ma ajuti.") wait() say("Biologul:") say("Le-as colecta eu dar,") say("am prea multe treburi in plus.") say("A-s fi foarte multumit,") say("daca le-ai colecta tu pentru mine.") wait() say("Biologul:") say("De data asta vei examina TABLITELE.") say("Dintre acestea,am nevoie de 30 de bucati.") say("Dar acestea sunt foarte fragile,") say("se poate ca unele") say("sa fie rupte.") say("") set_state(collect_plates) pc.setqf("duration",0) pc.setqf("collect_count",0) end end state collect_plates begin when letter begin send_letter("Cercetarea Biologului Nr.6") end when button or info begin say_title("TABLITELE") say("") say("Biologul ti-a dat de munca,") say("ai de adus 30 de TABLITE.") say("Acestea se gasesc") say("In Tara Gigantilor.") say("") say_item_vnum(30166) say_reward("Ai strans"..pc.getqf("collect_count")..".") say("") end when 1401.kill or 1402.kill or 1403.kill or 1601.kill or 1602.kill or 1603.kill begin local rand = number(0,99) if rand<5 then pc.give_item2(30166, 1) end end when 20084.chat."TABLITELE" with pc.count_item(30165)>0 begin if get_time()>pc.getqf("duration") then say("Asteapta un moment...") say("Multumesc,") say("lasa-ma sa o examinez rapid,") say("daca este totul in ordine.") say("") pc.remove_item("30166", 1) pc.setqf("duration", get_time()+86400) wait() local rand = number(0,99) if rand<50 then local count = pc.getqf("collect_count")+1 if count<30 then pc.setqf("collect_count", count) say("Biologul:") say("Excelent,") say("Aceasta TABLITA este in ordine.") say("Adumi ceva mai multe,as vrea sa spun") say("mai multe tablite.") say("") say_reward("Ai strans"..pc.getqf("collect_count")..".") say("") else say("Biologul:") say("Mi-ai adus toate cele 30 de TABLITE.") say("Ei bine,am o cerere noua.") say("Am nevoie de Piatra sufletului Tugyis,") say("pe care o gasesti la monstrii") say("din Tara Gigantilor.") say("Cred ca esti suficient de puternic pentru asta.") say("") pc.setqf("collect_count",0) pc.setqf("duration",0) set_state(collect_tugyis) end else say("Biologul:") say("Imi para rau,TABLITA") say("s-a rupt in timpul examinarii.") say("Te rog adu-mi una noua.") end else say("Biologul:") say("Imi pare rau,am petrecut ultimii ani,") say("cu aceste studii si inca nu am terminat.") say("Te rog adu-mi TABLITA m-ai tarziu.") end end end state collect_tugyis begin when letter begin send_letter("Piatra sufletului Tugyis") end when button or info begin say_title("Piatra sufletului Tugyis") say("") say("Ai adus toate cele 30 de TABLITE") say("Acum trebuie sa gasesti Piatra sufletului Tugyis.") say("") say_item_vnum(30225) say("Poate aceasta piatra,") say("contine sufletele nobilor....") say("") end when 1401.kill or 1402.kill or 1403.kill or 1601.kill or 1602.kill or 1603.kill begin if pc.count_item(30224)<1 then local rand = number(0,99) if rand<5 then pc.give_item2(30225, 1) end end end when 20084.chat."Piatra sufletului Tugyis" begin if pc.count_item(30225)>0 then say("Biologul:") say("Iti multumesc pentru ca m-ai ajutat.Am inteles acum") say("legenda Pietrei sufletului Tugyis.") say("Ai luptat din greu.") say("Mergi si discuta cu Baek-Go,el te v-a ajuta") say("sa-ti maresti puterea interioara.") say("") pc.remove_item(30225,1) set_state(tugyis_reward) else say("Biologul:") say("Mi-ai adus toate cele 30 de TABLITE.") say("Ei bine,am o noua cerere.") say("Am nevoie de Piatra sufletului Tugyis,") say("aceasta o gasesti la monstrii din") say("Tara Gigantiolor.") say("Cred ca esti suficient de puternic.") say("") end end end state tugyis_reward begin when letter begin send_letter("Vorbeste cu Baek-Go") local v = find_npc_by_vnum(20018) if v != 0 then target.vid("__TARGET__", v, "Doctorul") end end when button or info begin say_title("Vorbeste cu Baek-Go") say("Pentru a primii recompensa de la Biolog,") say("cauta informatii de la") say("TABLITE si Piatra sufletului Tugyis.") say("Mergi la Baek-Go.Acesta este situat in oras.") say("") end when __TARGET__.target.click or 20018.chat."Recompensa Biologului" begin target.delete("__TARGET__") say_title("Baek-Go:") say("Vad ca") say("Biologul te-a trimis la mine.") say("Iata rasplata ta:") say("") say_reward("Ai primit:") say_reward("Viteza de atac +5%") say_reward("Valoare atac 10%") say("") affect.add_collect(apply.ATT_SPEED,5,60*60*24*365*60) affect.add_collect_point(apply.POINT_ATT_BONUS,10,60*60*24*365*60) set_state(collect_quest_lv90) end end Quest lvl 90 : ---------------------------------- -- LvL 90 / Notiz der Anführer ---------------------------------- state collect_quest_lv90 begin when login or levelup with pc.level>79 begin set_state(talk_to_disciple_lv90) end end state talk_to_disciple_lv90 begin when letter begin local v = find_npc_by_vnum(20084) if v != 0 then target.vid("__TARGET__", v, "Biologul") end send_letter("Cercetare de Biolog 7") end when button or info begin say_title("Cercetare de biolog 7") say("") say("Biologul are nevoie de tine din nou.") say("El a spus ca este in cautare de") say("noi elemente.") say("Vorbeste cu el") say("si vezi de ce are nevoie.") say("") say_reward("Vorbeste cu Biologul.") say("") end when __TARGET__.target.click or 20084.chat."Notiz der Anführer" begin target.delete("__TARGET__") say("Biologul:") say("Bine ai venit...") say("Cazul TABLITELOR,") say("a fost dus la bun sfarsit.") say("Acum am gasit obiecte noi") say("A-s dorii sa investighezi.") wait() say("Biologul:") say("A-s merge si a-s colecta eu,") say("dar am prea multe de facut.") say("A-s fi foarte incantat daca m-ai ajuta,") say("si ai colecta in locul meu.") wait() say("Biologul:") say("Vreau sa examinez Insemnele Regelui.") say("Dintre aceastea am nevoie de 50 de bucati.") say("Aceasta pot fi foarte vechi,") say("iar unele pot fi gresite.") say("") set_state(collect_notices) pc.setqf("duration",0) pc.setqf("collect_count",0) end end state collect_notices begin when letter begin send_letter("Cercetare de Biolog 7") end when button or info begin say_title("Insemnele Regelui") say("") say("Biologul ti-a dat o noua sarcina.") say("trebuie sa colectezi 50 de Insemne ale Regelui.") say("Acestea le gasesti,") say("la ori care boss din metin Ex:Regele de Foc") say("Mergi si cautale!") say("") say_item_vnum(30168) say_reward("Ai strans"..pc.getqf("collect_count")..".") say("") end when 591.kill or 691.kill or 791.kill or 793.kill or 991.kill or 992.kill or 993.kill or 1091.kill or 1092.kill or 1093.kill or 1304.kill or 1403.kill or 2091.kill or 2191.kill or 2206.kill or 2207.kill or 2306.kill or 2493.kill or 2494.kill or 5001.kill or 5004.kill or 5161.kill or 5162.kill or 5163.kill begin local rand = number(0,99) if rand<5 then pc.give_item2(30168, 1) end end when 20084.chat."Insemnele regelui" with pc.count_item(30168)>0 begin if get_time()>pc.getqf("duration") then say("Asteapta un moment....") say("Multumesc,") say("Lasa-ma sa o examinez.") say("daca aceast Insemn este potrivit.") say("") pc.remove_item("30168", 1) pc.setqf("duration", get_time()+86400) wait() local rand = number(0,99) if rand<50 then local count = pc.getqf("collect_count")+1 if count<50 then pc.setqf("collect_count", count) say("Biologul:") say("Excelent,") say("Aceast Insemn este potrivit.") say("Dar am nevoie de ceva mai multe,") say("pentru a porni cercetarea.") say("") say_reward("Ai strans"..pc.getqf("collect_count")..".") say("") else say("Biologul:") say("Bravo!mi-a adus toate cele 50 de Insemne.") say("Dar mai am nevoie de ceva.") say("Trebuie sa imi aduci Insemnul Piatra sufletului,") say("aceasta o gasesti la ori ce BOSS din metin2,") say("mergi si gasesteo!") say("Eu cred,ca tu esti destul de puternic.") say("") pc.setqf("collect_count",0) pc.setqf("duration",0) set_state(collect_bossKey) end else say("Biologul:") say("Imi pare rau!") say("Aceasta Piatra a sufletului s-a rupt in timpul examinarii.") say("Mergi si gaseste inca una.") end else say("Biologul:") say("Imi pare rau,am petrecut ultimii") say("ani,cu studierea acestor Insemne ale Regelui,dar nici acum nu am terminat.") say("Te rog adu-mi Piatra mai tarziu.") end end end state collect_bossKey begin when letter begin send_letter("Piatra suflet a Regelui") end when button or info begin say_title("Piatra suflet a regelui") say("") say("Bravo!ai strans toate cele 50 de Insemne.") say("Acum am nevoie de Piatra suflet a Regelui,") say("mergi si adumi-o!") say("") say_item_vnum(30227) say("Ob dieser Stein tatsächlich Seelen") say("der Anführer enthält?") say("") end when 591.kill or 691.kill or 791.kill or 793.kill or 991.kill or 992.kill or 993.kill or 1091.kill or 1092.kill or 1093.kill or 1304.kill or 1403.kill or 2091.kill or 2191.kill or 2206.kill or 2207.kill or 2306.kill or 2493.kill or 2494.kill or 5001.kill or 5004.kill or 5161.kill or 5162.kill or 5163.kill begin if pc.count_item(30227)<1 then local rand = number(0,99) if rand<5 then pc.give_item2(30227, 1) end end end when 20084.chat."Piatra suflet a Regelui" begin if pc.count_item(30227)>0 then say("Biologul:") say("Iti multumesc pentru ca m-ai ajutat.Acum am inteles") say("misterul Pietrei suflet a Regelui.") say("Ai luptat din greu pentru a ma ajuta.") say("Mergi si discuta cu Baek-Go,el te v-a ajuta,") say("sa iti cresti puterea interiora.") say("") pc.remove_item(30227,1) set_state(bossKey_reward) else say("Biologul:") say("Bravo!ai strans toate cele 50 de INsemne.") say("Acum am nevoie de Piatra suflet a Regelui,") say("pe care trebuie sa mi-o aduci,") say("o gasesti la toti SEFII din metin2,") say("mergi si gaseste-o.") say("Eu cred ca esti destul de puernic.") say("") end end end state bossKey_reward begin when letter begin send_letter("Sprich mit Baek-Go") local v = find_npc_by_vnum(20018) if v != 0 then target.vid("__TARGET__", v, "Doctorul") end end when button or info begin say_title("Discuta cu Baek-Go") say("Pentru a primii recompensa de la Biolog,") say("mergi si gaseste informatii la,") say("Insemne si Piatra suflet a Regelui.") say("Pe Baek-Go il gasesti in oras.") say("") end when __TARGET__.target.click or 20018.chat."Belohnung des Biologen" begin target.delete("__TARGET__") say_title("Baek-Go:") say("Vad ca...") say("Biologul te-a trimis la mine,") say("uite rasplata ta:") say("") say_reward("Ai primit:") say_reward("Viteza de miscare +5%") say_reward("Viteza de atac +5%") say_reward("Reducerea pagubei -5%") say_reward("Valoarea atacului +50%") say("") affect.add_collect(apply.MOV_SPEED, 5, 60*60*24*365*60) affect.add_collect(apply.ATT_SPEED, 5, 60*60*24*365*60) affect.add_collect(apply.ATT_GRADE_BONUS,25,60*60*24*365*60) affect.add_collect(apply.DEF_GRADE_BONUS,5,60*60*24*365*60) set_state(collect_quest_lv100) end end Tutorial instalare quest: 1. Salvaţi conţinutul quest-ului într-un fişier text numit de exemplu nume_quest.quest . 2. Vă conectaţi la filezilla / winscp şi întrati în /usr/home/game/share/locale/germany/quest (depinde ce server aveţi). 3. Îl puneţi acolo (să fie .quest) şi da-ţi permisiuni 777. 4. Te loghezi în FreeBSD / putty şi scrii în felul următor: cd /usr/home/game/share/locale/germany/quest apoi ./qc nume_quest.quest 5. Intraţi pe server şi scrieţi /reload q. 6. Testaţi quest-ul.
  25. Salutare J4M , Astăzi o sa va prezint cîteva quest'uri pentru serverul dumnevoastră de metin2. Good Lack Camera de cristal 100% ro cu diacritice. Cod: Selectaţi tot quest camera_de_cristal begin state start begin when 30123.chat."Templul Dragonului." with pc.get_map_index() == 73 begin if get_time() > game.get_event_flag("Grotte_time") then game.set_event_flag("Grotte_zugang",0) end if pc.is_gm() or pc.count_item(80041) >= 1 then say_title(""..mob_name(30123).."") say("Bun venit "..pc.get_name().."") say("Nu ai nevoie nici de chei nici de parola") say("esti GM poti intra cand vrei.") wait() pc.warp(843200, 1066900) return end if game.get_event_flag("Grotte_zugang") == 0 and pc.count_item(30179) < 3 then say_title(""..mob_name(30123).."") say_reward("Pentru a intra în templul lui Beran,") say_reward("ai nevoie de "..item_name(30179).."") say_item_vnum(30179) say_reward("Aceastã cheie rãsucitã picã la Cãpitanul Setaou.") say_reward("Ai nevoie de trei Chei Rãsucite pentru a intra.") return end if game.get_event_flag("Grotte_zugang") == 1 then say_title(""..mob_name(30123).."") pc.setqf("grotte_passworto", 078954687921) if pc.getqf("abgabe") == 1 then pc.setqf("abgabe",0) say("Ai cele trei Chei Rãsucite.") say("Te voi teleporta imediat în camera de cristal.") pc.setqf("erlaubt",1) wait() pc.warp(843200, 1066900) return end say("Introdu codul ales de liderul grupului.") local passwort = tonumber(input("")) --pc.setqf("grotte_passworto", passwort) if game.get_event_flag("Grotte_passwort") == passwort then say_title(""..mob_name(30123).."") say("Ai introdus codul corect.") if pc.count_item(30179) < 3 then say("Nu te pot teleporta deoarece nu ai") say(""..item_name(30179).."") say_item_vnum(30179) say("Ai nevoie de cele trei Chei Rãsucite.") return end say("Te voi teleporta imediat.") pc.setqf("erlaubt",1) wait() if pc.can_warp() then pc.remove_item("30179",3) end pc.warp(843200, 1066900) elseif passi != pc.getqf("grotte_passworto") then say_title(""..mob_name(30123).."") say("") return end end if game.get_event_flag("Grotte_zugang") == 0 and pc.count_item(30179) >= 3 then say_title(""..mob_name(30123).."") say("Deþin în mine, ultima suflare a zeului dragon.") say("Aceastã suflare magicã te pot ajuta sã mergi în") say_reward("Camera de cristal.") say("") say("Ai nevoie de cele trei chei rãsucite.") local i = select("Da, Vreau", "Nu, Mulþumesc") if 1 == i then say_title(""..mob_name(30123).."") say("Ai nevoie de un cod pentru tine ºi grupul tãu.") say("Codul pe care îl vei introduce, va trebui sã ") say("conþinã maxim 2 cifre.") local passwort = tonumber(input("")) if passwort and passwort <= 999999999 and pc.count_item(30179)>=1 then game.set_event_flag("Grotte_zugang",1) game.set_event_flag("Grotte_passwort",passwort) local times = get_time() + 300 --Wartezeit game.set_event_flag("Grotte_time", times) say_title(""..mob_name(30123).."") pc.setqf("abgabe",1) say("Parola aleasa este: "..passwort.."") notice_in_map("[Pocal Magic]:Parola camerei alese este "..passwort.." ") pc.remove_item("30179",3) else say_title(""..mob_name(30123).."") say("Nu ai scris codul corect.") end end end end when login with pc.get_map_index() == 189 and not pc.is_gm() begin if pc.count_item("80041") >= 1 then chat("") return end if pc.get_level() < 75 or pc.getqf("erlaubt") == 0 and pc.get_map_index() == 189 then chat("Dir ist es nicht erlaubt diese Map zu betreten. "..pc.get_level().." "..pc.getqf("erlaubt").." "..pc.get_map_index().." ") warp_to_village() end notice_in_map("[Camera de cristal]:Bun venit în camera de cristal ! Începem prima sarcinã a voastrã.") notice_in_map("[Camera de cristal]:Spargeþi toate metinele, si aflaþi care este metinul corespunzãtor.") pc.set_warp_location(73 , 1825, 12207) end when 8031.kill with pc.get_map_index() == 189 begin timer("skipia_boss_goo", 10) notice_in_map("[Camera de cristal]:Aþi spart metinul corespunzãtor.") notice_in_map("[Camera de cristal]:Îl veþi întâlni pe Beran-Setaou. Ce veþi face ?") d.kill_all() end when skipia_boss_goo.timer begin game.set_event_flag("Grotte_zugang",0) d.new_jump_all(189, 8427, 10669) d.setf("grotte_boss", 1) d.spawn_mob(9012, 247, 173) end when 8031.kill or 8032.kill or 8033.kill or 8034.kill with pc.in_dungeon() and d.getf("grotte_boss") == 2 begin local n =d.getf("count") + 1 d.setf("count", n) notice_in_map("[Camera de cristal]:Aþi spart pânã acum "..n.." metine.") if n > 2 then local t = number(1,4) notice_in_map("[Camera de cristal]:Beran-Setaou este foarte furios.") notice_in_map("[Camera de cristal]:Cheama ºi mai multe metine.") if 1 == t then d.regen_file("data/dungeon/skia_boss1.txt") elseif 2 == t then d.regen_file("data/dungeon/skia_boss2.txt") elseif 3 == t then d.regen_file("data/dungeon/skia_boss3.txt") else d.regen_file("data/dungeon/skia_boss4.txt") end end end when 2493.kill with pc.in_dungeon() and d.getf("grotte_boss") == 2 begin d.setf("grotte_boss", 3) notice_all("Cu o ultimã suflare de speranþã liderul "..pc.get_name().."") notice_all("Urmat de rãzboinici lui de încredere, au reuºit sã învingã Dragonul Albastru.") timer("skipia_boss_end", 60) d.spawn_mob(9012, 64, 142) d.kill_all() d.clear_regen() end when login with pc.in_dungeon() and d.getf("grotte_boss") == 2 begin pc.set_warp_location(73 , 1825, 12207) end when login with pc.in_dungeon() and d.getf("grotte_boss") == 1 begin timer("skipia_boss_end", 3600) d.set_regen_file("data/dungeon/skia_boss.txt") local t = number(1,4) if 1 == t then d.regen_file("data/dungeon/skia_boss1.txt") elseif 2 == t then d.regen_file("data/dungeon/skia_boss2.txt") elseif 3 == t then d.regen_file("data/dungeon/skia_boss3.txt") else d.regen_file("data/dungeon/skia_boss4.txt") end local o = number(1,4) if 1 == o then d.regen_file("data/dungeon/skia_boss5.txt") elseif 2 == o then d.regen_file("data/dungeon/skia_boss6.txt") elseif 3 == o then d.regen_file("data/dungeon/skia_boss7.txt") else d.regen_file("data/dungeon/skia_boss8.txt") end d.setf("grotte_boss", 2) d.notice("[Camera de cristal]:Aveþi la dispozitie 60 de minute sã îi capturaþi sufletul lui Beran.") d.setf("count", 0) pc.set_warp_location(73 , 1825, 12207) end when login with pc.in_dungeon() and d.getf("grotte_boss") == 3 begin -- begin --pc.warp(181700, 1220600) end when skipia_boss_end.timer begin d.exit_all() end when skipia_boss_ende.timer begin kill_all_in_map(189) game.set_event_flag("Grotte_zugang",0) d.setf("grotte_boss", 1) d.exit_all() end when login with pc.get_map_index() != 189 or not pc.in_dungeon() begin pc.setqf("erlaubt",0) end end end Eveniment cufere clar de luna cu panou activare/dezactivare la NPC 9004 + panou de setare drop. Cod: Selectaţi tot quest cufere_clar_luna begin state start begin when login begin if game.get_event_flag("mondlicht_event") == 1 then notice("[Eveniment]Cufãr Clar de Lunã: Activ") end end when kill begin local m_ind = pc.get_map_index() if npc.is_pc() then else if m_ind == 1 or m_ind == 3 or m_ind == 21 or m_ind == 23 or m_ind == 41 or m_ind == 43 and pc.get_level() <= 100 then if game.get_event_flag("mondlicht_event") == 1 then local chance = number(1, 100) local chance_max = game.get_event_flag("mond_drop_chance") if chance <= chance_max then pc.give_item2(50011) else end else end elseif m_ind == 63 or m_ind == 64 and pc.get_level() <= 100 then if game.get_event_flag("mondlicht_event") == 1 then local chance = number(1, 100) local chance_max = game.get_event_flag("mond_drop_chance") if chance <= chance_max then pc.give_item2(50011) else end else end elseif m_ind == 65 or m_ind == 61 or m_ind == 104 and pc.get_level() <= 100 then if game.get_event_flag("mondlicht_event") == 1 then local chance = number(1, 100) local chance_max = game.get_event_flag("mond_drop_chance") if chance <= chance_max then pc.give_item2(50011) else end else end elseif m_ind == 62 or m_ind == 71 or m_ind == 67 and pc.get_level() <= 100 then if game.get_event_flag("mondlicht_event") == 1 then local chance = number(1, 100) local chance_max = game.get_event_flag("mond_drop_chance") if chance <= chance_max then pc.give_item2(50011) else end else end elseif m_ind == 68 or m_ind == 72 or m_ind == 73 or m_ind == 66 and pc.get_level() <= 100 then if game.get_event_flag("mondlicht_event") == 1 then local chance = number(1, 100) local chance_max = game.get_event_flag("mond_drop_chance") if chance <= chance_max then pc.give_item2(50011) else end else end elseif m_ind == 103 or m_ind == 70 or m_imd == 69 and pc.get_level() <= 100 then if game.get_event_flag("mondlicht_event") == 1 then local chance = number(1, 100) local chance_max = game.get_event_flag("mond_drop_chance") if chance <= chance_max then pc.give_item2(50011) else end else end end end end when 9004.chat."<GM> Eveniment Cufere" with pc.is_gm() begin if game.get_event_flag("mondlicht_event") == 1 then say_title("Administrare Eveniment:") say("") say("[Eveniment]Cufãr Clar de Lunã: Activ") say("") say_reward("Event Beenden?") local s=select("Da", "Nu") if s==1 then say_title("Administrare Eveniment:") say("") say("Evenimentul a luat sfârsit .") say("~ Pe data viitoare !") game.set_event_flag("mondlicht_event", 0) char_log(0, "Mondlicht_event_end from" ..pc.get_name()) notice_all("[Eveniment]Cufãr Clar de Lunã: Terminat") elseif s==2 then say_title("Administrare Eveniment:") say("") say("~ Pe curând !") end else say_title("Administrare Eveniment:") say("") say("Cufãr Com Clar De Lunã : ~ Închis ") say("") say_reward("Start Eveniment?") local s=select("Da", "Nu") if s==1 then say_title("Administrare Eveniment:") say("") say("[Eveniment]Cufãr Clar de Lunã: A inceput") game.set_event_flag("mondlicht_event", 1) char_log(0, "Mondlicht_event_start from" ..pc.get_name()) notice_all("[Eveniment]Cufãr Clar de Lunã: A inceput!") elseif s==2 then say_title("Administrare Eveniment:") say("") say("~ Pe curând !") end end end when 9004.chat."<GM> Dropul Cuferelor" with pc.is_gm() begin if pc.get_name() == "[SGA]Pinguu" or pc.get_name() == "[SGA]DnZ" or pc.get_name() == "[SGA]Pinguu" then say_title("Administrare Eveniment:") say("") say("Cat de mult sã fie dropul acestora ?") say("") say_reward("Între 1-100") say("") local new_chance = tonumber(input()) if new_chance < 0 or new_chance > 100 then say_title("Administrare Eveniment:") say("") say("Introducere incorectã ~") else char_log(0, "Mondlicht_event_chance from" ..pc.get_name().. " to " ..new_chance.. "%") game.set_event_flag("mond_drop_chance", new_chance) say_title("Administrare Eveniment:") say("") say("Dropul actual " ..new_chance.. " setat.") say("~ Pe curând !") end else say_title("Administrare Eveniment:") say("") say("Nu ai dreptul pentru a executa evenimentul .") end end end end Switch Fix. Permite jucatorului sa ia schimba bonus de la un NPC 20094 introducand un cod PIN. Acesta nu poate lua alte bonusuri daca are deja in inventar. Cod: Selectaţi tot quest switch_fix begin state start begin when 20094.chat."Cumpara Vrajeste obiectul" begin local pcLevel = 10 local minItem = 1 local maxItem = 200 local itemValue = 71084 local singleCost = 5000 say_title("Hong-Hae:") say_reward("Buna, eu sunt Hong-Hae.") say_reward("Cu ajutorul meu, vei cumpara cate Vrajeste Obiectul") say_reward("vrei, pentru a-ti schimba bonusurile de pe iteme.") say_item_vnum(itemValue) say_reward("Introduceti câte Vrajeste Obiectul doriti sa") say_reward("cumparati. Totusi, puteti cumpara numai o suma") say_reward(string.format("exacta, intre %d si %d de bucati.", minItem, maxItem)) local quant = math.floor(tonumber(input())) if quant < minItem or quant> maxItem or quant == nil then say_title("Hong-Hae:") say_reward("Îmi pare rau, nu am asa de multe bonusuri.") say_reward(string.format("Suma trebuie sa fie între %d si %d", minItem, maxItem)) return end say_title("Hong-Hae:") say_reward("Ei bine, a?i facut decizia perfecta.[ENTER]") say_reward(string.format("Numarul solicitat: %d", quant)) say_reward(string.format("Nivel necesar: %d", pcLevel)) say_reward(string.format("Nivelul tau: %d", pc.get_level())) say_reward(string.format("Un singur Vrajeste obiectul costa: %d Yang", singleCost)) say_reward("") local price = quant*singleCost say_reward(string.format("Suma totala: %d Yang.", price)) say_reward("") say_reward("Introduceti codul de mai jos, pentru cumparare.") local psw = number(10000,99999) say_reward("Cod de siguranta: "..psw) local check = tonumber(input()) --controlli-- say_title("Hong-Hae:") if check != psw or check == nil then say_reward("Codul introdus nu se potrive?te.") say_reward("Introduceti-l corect data viitoare.") return end if pc.count_item(itemValue) > 0 then say_reward("Nu poti primi alte Vrajeste Obiectul") say_reward("Prima data terminale pe cele din inventar.") return end if pc.get_gold() < price then say_reward("Nu aveti suficienti yang,") say_reward("revino când ai suma necesara.") return end if pc.get_level() < pcLevel then say_reward("Nu ai nivelul necesar pentru a continua.") say_reward("Reintoarcete înapoi când ai nivelul necesar.") return end -- end control-- say_reward("Multumesc ca ai cumparat, ai primit") say_item_vnum(itemValue) say_reward("Mai vino pe aici, cand ai nevoie!") pc.changegold(-price) pc.give_item2(itemValue, quant) end end end Piatra spirit 100% RO cu diacritice. Cod: Selectaţi tot quest training_gRangmaster_skill begin state start begin when 50513.use begin say_title("Piatra Spiritului") if pc.get_skill_group() == 0 then say("Nu ai nicio aptitudine"..pc.get_skill_group()) return end if get_time() < pc.getqf("next_time") then -- and not is_test_server() then if pc.is_skill_book_no_delay() then say("Aceast lucru vă permite") say("perfecţionarea competenţelor.") say("") wait() say_title("Piatra Spiritului") else say("Trebuie să aşteptaţi.") return end end local result = training_gRangmaster_skill.BuildGRangMasterSkillList(pc.get_job(), pc.get_skill_group()) local vnum_list = result[1] local name_list = result[2] if table.getn(vnum_list) == 0 then say("Nu iti poti perfectiona competentele!") return end say("Alegeti o competenta din urmatoarele.") say("") local menu_list = {} table.foreach(name_list, function(i, name) table.insert(menu_list, name) end) table.insert(menu_list, "Renunta") local s=select_table(menu_list) if table.getn(menu_list) == s then return end local skill_name=name_list[s] local skill_vnum=vnum_list[s] local skill_level = pc.get_skill_level(skill_vnum) local cur_alignment = pc.get_real_alignment() local need_alignment = 1000+500*(skill_level-30) test_chat("Punctre rang:"..cur_alignment) test_chat("Rang negativ prea mare:"..need_alignment) local title=string.format("%s a reuşit", skill_name, skill_level-30+1) say_title(title) say("Atunci când citiţi piatra spiritului") say("pierzi punctaj din grad!") say("") if cur_alignment<-19000+need_alignment then say_reward("Puncte insuficiente.") return end if cur_alignment<0 then say_reward(string.format("Puncte necesare: %d -> %d", need_alignment, need_alignment*2)) say_reward("pentru a mari competenta") need_alignment=need_alignment*2 elseif cur_alignment<need_alignment then say_reward(string.format("Puncte necesare: %d", need_alignment)) say_reward("Rang negativ prea mare") else say_reward(string.format("Puncte necesare: %d", need_alignment)) end say("") local s=select("Mai mult", "Renunta") if s==2 then return end if cur_alignment>=0 and cur_alignment<need_alignment then say_title(string.format("Piatra Spiritului", title)) say("A venit timpul!!") say("Pentru antrenament,") say("Va rugam sa scrieti : Antrenament") say("") say("") say_reward("Antrenament") say("") say("") local s=input() if s!="Antrenament" then return end end if get_time() < pc.getqf("next_time") then -- and not is_test_server() then if pc.is_skill_book_no_delay() then pc.remove_skill_book_no_delay() else say("Sa vedeam ce-ai reusit") return end end pc.setqf("next_time", get_time()+time_hour_to_sec(number(8, 12))) if need_alignment>0 then if pc.learn_gRang_master_skill(skill_vnum) then pc.change_alignment(-need_alignment) say_title(string.format("%s ", title)) if 40 == pc.get_skill_level(skill_vnum) then say(string.format("%s este deja Perfect", skill_name)) else say(string.format("%s Succes", skill_name, skill_level-30+1+1)) end say("") say_reward("Succes!") say_reward(string.format("Puncte luate %d ", need_alignment)) say("") else say_title(string.format("%s ", title)) say("Acest lucru nu este elaborat ,din pacate.") say("") say_reward("Ai esuat!") say("Mai Incearca") pc.change_alignment(-number(need_alignment/3, need_alignment/2)) end end item.remove() end function BuildGRangMasterSkillList(job, group) GRang_MASTER_SKILL_LEVEL = 30 PERFECT_MASTER_SKILL_LEVEL = 40 local skill_list = special.active_skill_list[job+1][group] local ret_vnum_list = {} local ret_name_list = {} -- test_chat(string.format("job=%d, group=%d", job, group)) table.foreach(skill_list, function(i, skill_vnum) local skill_level = pc.get_skill_level(skill_vnum) -- test_chat(string.format("[%d]=%d", skill_vnum, skill_level)) if skill_level >= GRang_MASTER_SKILL_LEVEL and skill_level < PERFECT_MASTER_SKILL_LEVEL then table.insert(ret_vnum_list, skill_vnum) local name=locale.GM_SKILL_NAME_DICT[skill_vnum] if name == nil then name=skill_vnum end table.insert(ret_name_list, name) end end) return {ret_vnum_list, ret_name_list} --return {ret_vnum_list, ret_name_list} end end end Clasament TOP 10 direct in joc la un NPC. Eu il am la fierar. Cod: Selectaţi tot quest rank_list begin state start begin when 20016.chat."Top 10" begin local jucator = mysql_query("SELECT * FROM player.player WHERE player.name NOT LIKE '[%]%' ORDER BY player.level DESC, player.exp DESC","root","rootpw","player","rootip") say_title("Top 10 al jucatorilor:") say("Locul 1: Name: "..jucator.name[1].." Level: "..jucator.level[1].." ") say("Locul 2: Name: "..jucator.name[2].." Level: "..jucator.level[2].." ") say("Locul 3: Name: "..jucator.name[3].." Level: "..jucator.level[3].." ") say("Locul 4: Name: "..jucator.name[4].." Level: "..jucator.level[4].." ") say("Locul 5: Name: "..jucator.name[5].." Level: "..jucator.level[5].." ") say("Locul 6: Name: "..jucator.name[6].." Level: "..jucator.level[6].." ") say("Locul 7: Name: "..jucator.name[7].." Level: "..jucator.level[7].." ") say("Locul 8: Name: "..jucator.name[8].." Level: "..jucator.level[8].." ") say("Locul 9: Name: "..jucator.name[9].." Level: "..jucator.level[9].." ") say("Locul 10: Name: "..jucator.name[10].." Level: "..jucator.level[10].." ") end end end Intrarea in grota la Koe-Pung. Cere 1 piatra insangerata si nivel 75. Cod: Selectaţi tot uest intrare_v3 begin state start begin when login or levelup with pc.level >74 begin set_state(v3transport) end end state v3transport begin when 20092.chat."Intra in Grota Exilului" begin say(""..mob_name(20092).."") say("Locatia grotei este cunoscuta de foarte putini") say("si cei care cunosc locatia o tin secreta.Dragonul") say("Negru conduce lumea de jos si tot ce apartine de") say("aceasta lume.El este inca plin de ura fata de") say("toate lucrurile vii.Si toti care ii trec calea") say("vor simti furia sa.") wait() if pc.get_premium_remain_sec(PREMIUM_EXP) > 0 then say("Esti pregatit sa treci de pragul lumii") say("civilizate?Daca ai peste nivelu 75 si") say("pasajul de trecere te voi teleporta in") say("Grota Exilului!") say("") wait() end if pc.count_item(30191) >0 and pc.level >74 then say(""..mob_name(20092).."") say("Pregatestete!Te voi duce unde doar marii") say("eroi au acces!Ai grija!") pc.remove_item(30191) char_log(0,"GO_SPIDER2","USE_ITEM(30191)") wait() elseif pc.count_item(30191) >0 and pc.level >74 then say(""..mob_name(20092).."") say("Nu ai permisul de trecere, sau") say("nivelu necesar.Intoarcete doar") say("cand indeplinesti cerintele.") char_log(0,"GO_SPIDER2","USE_ITEM(3217321)") wait() return else say(""..mob_name(20092).."") say("Nu ai permisul de trecere, sau") say("nivelu necesar.Intoarcete doar") say("cand indeplinesti cerintele.") wait() return end say("Pregatestete!Te voi duce unde doar marii") say("eroi au acces!Ai grija!") wait() pc.warp(9900,1207900) return end end end Informatii server Cod: Selectaţi tot quest game_info begin state start begin when login begin send_letter("Informaþii Server") end when button or info begin say_title("Informaþii Server") say("") say_title("Echipa Metin2M5:") say("Super Game Admin: [SGA]Pinguu") say("Game Admin: [SGA]DnZ") say("Game Master: [GM] -") say("Trial Game Master:[TGM]Irina") say_title("Ratele serverului:") say("Yang: 350%") say("Exp: 200%") say("Drop: 250%") say_title("Pentru mai multe multe informaþii vizitaþi:") say("www.metin2m5.ro") say_reward("Þine minte .. joacã corect!") say_title("Sã ai un joc plãcut "..pc.get_name()) end end end Pescar-Imbunatatire undita,deschidere shop, etc. Cod: Selectaţi tot uest fisher begin state start begin when 9009.chat."Magazin" begin npc.open_shop() setskin(NOWINDOW) end when 9009.chat."Îmbunătăţire Undiţă" begin say("Pescar:") say("Eu sunt marele pescar din acest sat") say("Şi stiu un mare secret de îmbunătăţire a undiţelor") say("Vino la mine cu undiţa cand ai facut punctele") say("maxime iar eu prin puterea mea o voi face") say("si mai bună pentru a prinde mai mulţi peşti cu ea.") say("") say("") say("") say("") say("") say("") say("") end when 9009.take with item.vnum < 27400 or item.vnum > 27590 begin say("Pot să îmbunătăţesc doar undiţe") say("") end when 9009.take with item.vnum == 27590 begin say("Undiţa nu poate fi îmbunătăţită.") say("") end when 9009.take with item.vnum >= 27400 and item.vnum < 27590 and item.get_socket(0) != item.get_value(2) begin say("Prea puţine puncte pe undiţă") say("De aceea nu pot să o îmbunătăţesc.") say("") end when 9009.take with item.vnum >= 27400 and item.vnum < 27590 and item.get_socket(0) == item.get_value(2) begin say("Vrei să îmbunătăţesti undiţa?") say("Arata-mi undiţa să vad ce pot face ...") say(string.format("Puncte pe undiţă: %d .", item.get_value(0) / 10)) say("Ştii, eu nu sunt chiar aşa de bun în îmbunătăţirea") say("undiţelor!") say(string.format("100 %d Îmbunătăţirea poate totuşi eşua.", 100 - item.get_value(3))) say("Vrei să îmbunătăţesti cu adevărat undiţa?") say("") local s = select("Da", "Nu") if s == 1 then local f = __fish_real_refine_rod(item.get_cell()) if f == 2 then say("Nu pot să o îmbunătăţesc acum") say("Vino data viitoare dacă vrei") say("să o îmbunătăţesti.") say("") elseif f == 1 then say("A fost îmbunătăţită cu succes") say("") else say("îmbunătăţirea nu a reusit.") say("Inapoi") say("") end else say("") say("") end end end end Depozit portabil Cod: Selectaţi tot quest depozit begin state start begin when login begin send_letter("Depozit Portabil:") end when info or button begin say_title("Depozit Portabil:") say("Vrei sa deschizi depozitul?") say("") local a= select("Da","Nu") if 1==a then game.open_safebox() send_letter("Depozit Portabil:") elseif 2==a then send_letter("Depozit Portabil") end end end end Secretul Ierburilor,NPC unde poti face ape/roua din flori. Cod: Selectaţi tot quest cube begin state start begin when 20018.chat."Secretul Ierburilor" with pc.level >= 15 begin say("Bună străine") say("Ştii, eu am darul de a") say("amesteca ierburi împreună") say("şi din ele rezultă anumite poţiuni") say("Pot să îţi ofer şi ţie acest serviciu,") say("Doar adu-mi plantele!") wait() setskin(NOWINDOW) command("cube open") -- say("Succes") end when 20017.chat."Secretul Ierburilor" with pc.level >= 30 begin say("Bună străine") say("Ştii, eu am darul de a") say("amesteca ierburi împreună") say("şi din ele rezultă anumite poţiuni") say("Pot să îţi ofer şi ţie acest serviciu,") say("Doar adu-mi plantele!") wait() setskin(NOWINDOW) command("cube open") end when 20022.chat."Secretul Ierburilor" with pc.level >=45 begin say("Bună străine") say("Ştii, eu am darul de a") say("amesteca ierburi împreună") say("şi din ele rezultă anumite poţiuni") say("Pot să îţi ofer şi ţie acest serviciu,") say("Doar adu-mi plantele!") say("Ştii tu ...din mâna mea ies") say("cele mai bune poţiuni de") say("pe acest tărâm.") say("Ce zici, vrei să încerci şi tu?") wait() setskin(NOWINDOW) command("cube open") end end end Tinctura regatelor 100% ro cu diacritice. Cod: Selectaţi tot quest change_empire_item begin state start begin when login with pc.getqf("special_func") == 0 begin if pc.get_empire() == 1 then affect.add_collect(apply.GOLD_DOUBLE_BONUS,10,60*60*24*365*4) affect.add_collect(apply.ITEM_DROP_BONUS,10,60*60*24*365*4) affect.add_collect(apply.ATT_BONUS_TO_MONSTER,10,60*60*24*365*4) pc.setqf("special_func", 1) elseif pc.get_empire() == 2 then affect.add_collect(apply.ATT_GRADE_BONUS,50,60*60*24*365*4) affect.add_collect(apply.MAX_HP,1000,60*60*24*365*4) affect.add_collect(apply.EXP_DOUBLE_BONUS,10,60*60*24*365*4) pc.setqf("special_func", 2) elseif pc.get_empire() == 3 then affect.add_collect(apply.STR,10,60*60*24*365*4) affect.add_collect(apply.CON,10,60*60*24*365*4) affect.add_collect(apply.INT,10,60*60*24*365*4) affect.add_collect(apply.DEX,10,60*60*24*365*4) affect.add_collect(apply.GOLD_DOUBLE_BONUS,10,60*60*24*365*4) pc.setqf("special_func", 3) end end when 71054.use begin say_title("Tinctura Regatului") say("Cu aceastã tincturã poþi sã") say("îþi schimbi regatul cu unul nou") say("pe care tu îl doreºti.") say("") if get_time() < pc.getqf("next_use_time") then say_reward("Nu puteþi schimba regatul.") if pc.is_gm() then pc.setqf("next_use_time", 0) end return end if change_empire_item.move_pc() == true then if pc.getqf("special_func")==1 then affect.remove_collect(apply.GOLD_DOUBLE_BONUS,10) affect.remove_collect(apply.ITEM_DROP_BONUS,10) affect.remove_collect(apply.ATT_BONUS_TO_MONSTER,10) elseif pc.getqf("special_func")==2 then affect.remove_collect(apply.ATT_GRADE_BONUS) affect.remove_collect(apply.MAX_HP,1000) affect.remove_collect(apply.EXP_DOUBLE_BONUS,10) elseif pc.getqf("special_func")==3 then affect.remove_collect(apply.STR,10) affect.remove_collect(apply.CON,10) affect.remove_collect(apply.INT,10) affect.remove_collect(apply.DEX,10) affect.remove_collect(apply.GOLD_DOUBLE_BONUS,10) end pc.setqf("special_func", 0) pc.setqf("next_use_time", get_time() + time_hour_to_sec(24*7)) end end function move_pc() if pc.is_engaged() then say_reward("Eºti cãsãtorit/ã.") say_reward("Nu poþi schimba regatul.") return false end if pc.is_married() then say_reward("Eºti cãsãtorit/ã.") say_reward("Nu poþi schimba regatul.") return false end if pc.is_polymorphed() then say_reward("Eºti transformat.") say_reward("Nu poþi schimba regatul.") return false end if pc.has_guild() then say_reward("Eºti într-o breaslã.") say_reward("Nu poþi schimba regatul.") return false end if pc.money < 500000 then say_reward("Nu ai suficient Yang.") say_reward("Pentru a schimba regatul ai nevoie de 500.000 Yang.") return false end say_reward("In ce regat vrei sa te muti?") local s = select("Regatul Roºu", "Regatul Galben", "Regatul Albastru", "Nu mai vreau") if 4==s then return false end say_title("Tinctura Regatelor") say("Vrei sã pãrãseºti acest regat?") say("Pentru trãdare nu existã scuze!") local a = select("Schimb Regatul", "Nu mai vreau") if 2== a then return false end local ret = pc.change_empire(s) local oldempire = pc.get_empire() if ret == 999 then say_title("Tinctura Regatelor") say("Ai schimbat regatul cu succes.") say("Dacã vei dori sã schimbi din nou regatul") say("va trebui sã aºtepþi o sãptãmânã.") say("Vã rugãm relogaþi-vã.") pc.change_gold(-500000) pc.remove_item(71054) return true elseif ret == 1 then say("Eºti deja în acest regat.") say("Te rog sã selectezi alt regat.") elseif ret == 2 then say("Încã nu poþi schimba regatul.") say("Nu poþi schimba regatul,") say("deoarece ai fost într-o breslã recent.") elseif ret == 3 then say("Nu poþi schimba regatul.") say("Nu poþi schimba regatul,") say("deoarece ai fost casatorit recent.") end return false end end end ] Atenţie: Aceste questuri au fost postate special pentru comunitatea Just4Metin.ro . Tutorial instalare quest: 1. Salvaţi conţinutul quest-ului într-un fişier text numit de exemplu rasplata.quest . 2. Vă conectaţi la filezilla / winscp şi întrati în /usr/home/game/share/locale/germany/quest (depinde ce server aveţi). 3. Îl puneţi acolo (să fie .quest) şi da-ţi permisiuni 777. 4. Te loghezi în FreeBSD / putty şi scrii în felul următor: cd /usr/home/game/share/locale/germany/quest apoi ./qc rasplata.quest 5. Intraţi pe server şi scrieţi /reload q . 6. Testaţi quest-ul .
×