Sari la conținut
Te plictisesti? te asteptam pe platforma noastra de jocuri online!

Robot

Members

0

Followers

69

Număr conținut

Country

Genre

Zodiac



Vizitatori Recenți Profil

Blocul vizitatori recenți este dezactivat și nu este arătat altor utilizatori.

Activează
  1. enjoy illumina v0.1 [Hidden Content] illumina v0.2 [Hidden Content]
  2. 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
  3. 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
  4. 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: [Hidden Content] Dowloand Link PSD: [Hidden Content]
  5. 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
  6. 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!
  7. 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:
  8. if (pkItemScroll->GetValue(0) == YONGSIN_SCROLL) { success_prob = MIN(100,success_prob+10); } Fixxed and Function. Bye
  9. 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
  10. 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 [Hidden Content]
  11. 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:
  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: 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
  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


Blocul vizitatori recenți este dezactivat și nu este arătat altor utilizatori.

Activează

ADS

×