Search the Community
Showing results for tags 'python'.
-
As you well know the affects on the icons for drop yang, exp are in green, and when you attach a skill the skill's affect is red, I never liked this thing and I decided to modify them to be in theme with the other affects. Below is a preview. Let's start. Download: Uiaffectshower.py Search in AFFECT_DATA_DICT chr.AFFECT_GEOMGYEONG chr.AFFECT_CHEONGEUN . . . And replace with: chr.AFFECT_GEOMGYEONG : (localeInfo.SKILL_GEOMGYEONG, "icon/skillaffect/1.png",), chr.AFFECT_JEONGWI : (localeInfo.SKILL_JEONGWI, "icon/skillaffect/2.png",), chr.AFFECT_CHEONGEUN : (localeInfo.SKILL_CHEONGEUN, "icon/skillaffect/3.png",), chr.AFFECT_EUNHYEONG : (localeInfo.SKILL_EUNHYEONG, "icon/skillaffect/4.png",), chr.AFFECT_GYEONGGONG : (localeInfo.SKILL_GYEONGGONG, "icon/skillaffect/5.png",), chr.AFFECT_GWIGEOM : (localeInfo.SKILL_GWIGEOM, "icon/skillaffect/6.png",), chr.AFFECT_GONGPO : (localeInfo.SKILL_GONGPO, "icon/skillaffect/7.png",), chr.AFFECT_JUMAGAP : (localeInfo.SKILL_JUMAGAP, "icon/skillaffect/8.png"), chr.AFFECT_HOSIN : (localeInfo.SKILL_HOSIN, "icon/skillaffect/9.png",), chr.AFFECT_BOHO : (localeInfo.SKILL_BOHO, "icon/skillaffect/10.png",), chr.AFFECT_GICHEON : (localeInfo.SKILL_GICHEON, "icon/skillaffect/11.png",), chr.AFFECT_JEUNGRYEOK : (localeInfo.SKILL_JEUNGRYEOK, "icon/skillaffect/12.png",), chr.AFFECT_KWAESOK : (localeInfo.SKILL_KWAESOK, "icon/skillaffect/13.png",), chr.AFFECT_HEUKSIN : (localeInfo.SKILL_HEUKSIN, "icon/skillaffect/14.png",), chr.AFFECT_MUYEONG : (localeInfo.SKILL_MUYEONG, "icon/skillaffect/15.png",), chr.AFFECT_PABEOP : (localeInfo.SKILL_PABEOP, "icon/skillaffect/16.png",), chr.AFFECT_FALLEN_CHEONGEUN : (localeInfo.SKILL_CHEONGEUN, "icon/skillaffect/3.png",), That's all, good luck !
-
M2 Download Center Download Here ( Internal ) Download Here ( GitHub ) Offline Shop - Premium Private Shop System Hi, due to lack of time, I hadn't shared, but ¡Hey!, I'm here and one more contribution. The Official Servers have an Offline for few months ago, so I took on the task of making a similar one, It's not like Official Servers in a some parts of code I think, it does occupy designs and other things but in some issues it's different, but I used the rules that they use in terms of encoding. I hope you like it, I tried that the Offline didn't occupy so many SQL sequences to minimize the load of SQL injections for the server and uses the same methods of the store and stores, don't create new files so that you can observe it. I take this topic to indicate that I don't sell my things because some persons always end up filtering them and it makes me very lazy to think that, I'm selling and providing kind support to good people so that a bad one arrives and simply ends all that, I don't usually give support because I don't received anything... in Yohara's level system some people sent me a message to indicate that there was an error and it was always an error that they installed it wrong, look correctly at the guide and once for real believe that I omitted something in the guide, you can contact me and tell me to fix it, but if it's an installation error and I must install the system for you, I will charge you, I like to help, but I give you a guide so that it is only corrected what I omitted. If you need me to connect it to your code or to add extra functions, I will still charge you, it's not much, it will simply be at your discretion and it will be a voluntary donation for me and my time, you will value how much you give me, it can be 1 EUR, 2 EUR, 3 EUR, 5 EUR I don't know (So I hope you make an effort, I already gave you the most complicated part, is to copy and paste code already done, including other parts for example like Safebox in Safebox part?), Some people were nice and some were not, so I decided to stop placing the rest of Yohara's patches for a few time. I hope you like this, install, test and contact me if you detect an error, I already looked for and corrected everything I observed. About memory leak - Doesn't have, I think . Use WJ_ENABLE_TRADABLE_ICON (public system). The default code in Python is Safebox to avoid code differences. Among other things. I use TRANSMUTATION like TRANSMUTATION, change it to Changelook, as I indicated in some parts of the guide where to change. # Visual Parts You can download the patches from the Official Servers in: Gyazo: [Hidden Content] [Hidden Content] [Hidden Content] [Hidden Content] GitHub: [Hidden Content]
- 26 replies
-
- 705
-
Download Center Github or M2DL Heyo, this is something i did a while ago, perhaps it will be of use for some. [Hidden Content]
- 13 replies
-
- 164
-
M2 Download Center Download Here ( Internal ) Someone asked me for cache chat messages. Here is the release constInfo.py Add: lastSentenceStack = [] lastSentencePos = 0 game.py In def Open(self): add: if len(constInfo.lastSentenceStack) > 0: constInfo.lastSentencePos = 0 uiChat.py remove: self.lastSentenceStack = [] self.lastSentencePos = 0 All: self.lastSentenceStack Replace with: constInfo.lastSentenceStack All: self.lastSentencePos Replace with: constInfo.lastSentencePos That's all, enjoy
-
M2 Download Center Download Here ( Internal ) Download Here ( GitHub ) [Hidden Content]
- 32 replies
-
- 435
-
M2 Download Center Download Here ( Internal )
- 39 replies
-
- 354
-
M2 Download Center Download Here ( Internal ) [Hidden Content] Client side is from 2018 official root. It checks the status of the channel from db and gets the port and addr. It also checks if that map exists in that channel(config). *Info: This is currently disabled on official servers.
- 38 replies
-
- 434
-
official Official Autohunt system (2016 version)
Tekanse posted a topic in Features & Metin2 Systems
Download Center Download Hello, I made this system 6 years ago, and it's time to share it, i guess. -
M2 Download Center Download Here ( Internal ) Hi, folks! With this guide you will be able to combine textlines with images, like rubinum does. Usage is simple: emojiTextLine.SetText("|Eemoji/key_ctrl|e + |Eemoji/key_x|e + |Eemoji/key_rclick|e - Direct sell") The files are located in the icon pack, so basically the code will load from icon/{GIVEN_PATH}.tga - in the sample the path for the X is: icon/emoji/key_x.tga Here are the images from rubinum client: Howto: Have fun Sorry for arab players , for sure they have also developers, so let's go guys, finish it ? If you have problem, maybe I made a mistake in the guide of missed out something, just leave a comment below. PS.: Sometimes the code tag of the board puts an extra invisible character mostly the end of the lines, if your IDE cries for syntax error, but it seems correct, check that part of the file with notepad++, it will show a ?(question mark) where the problem is.
- 68 replies
-
- 758
-
M2 Download Center Download Here ( Internal ) [Hidden Content] Reversed from 22.2.7.0 Official Binary. Client part is from 2018 Official Root. You can set different colors:
- 65 replies
-
- 732
-
M2 Download Center Download Here ( Internal ) 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([Hidden Content]) and secur.dll([Hidden Content]) 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 = "[Hidden Content]" 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
- 16 replies
-
- 52
-
M2 Download Center Download Here ( Internal ) Download Here ( GitHub ) Informations about system : When you will open a chest with drop , will appear this window. In this window you can preview drop of chest and you can make a setting how many chests you want open. [Hidden Content]
- 51 replies
-
- 453
-
I don't know if developed a tool like this, before by anotherone. I wrote it for myself and I am sharing it to help you too. What is it? Sort the contents of proto files from smallest to largest based on numbers How to use? Simple to use, just put the file to be sorted in the same directory as the tool and run the tool. Easy to use. If undecodable characters are encountered (aka if not in EUC_KR charmap), you will fail. If you agree to ignore this, you can use 'force_sort_proto.exe' or 'force_sort_proto.py' to force sort the file. Effects: Functionally you should not encounter any problems. However, it may lose its meaning in 'human language' .exe? For those who don't have the Python Interpreter, for quick use. [Hidden Content] or [Hidden Content]
-
M2 Download Center Download Here ( Internal ) Download Here ( MEGA ) Download Here ( GitHub ) Hello again M2Dev, It’s been quite I wile since I haven’t released anything for the community so today I decided to release one of my systems I created some days ago, it’s very simple and it consists on gambling to say the least… The point is to bet your money (yang/gold) on a higher amount of gold and the higher you bet the higher the payout is, similar as how a casino slot machine works without being too complex. The rules are simple, you have three (3) possible jackpots in which each one has a payout amount. Hit the same icon three (3) times and you will win the jackpot. If you get any other combination that contain jackpot reel icons, you will win half your bet back with a short bet multiplier. So, the jackpot reels work as so, A, A, A = Jackpot 1 B, B, B = Jackpot 2 C, C, C = Jackpot 3 All other possible combinations to have a winning: A, A, B; A, A, C; B, B, A; B, B, C; C, C, A; C, C, B; A, B, C; C, A, B; B, A, C; C, B, A; A, C, B; If you happen to win a jackpot while having close to maximum gold, you will receive an item in your inventory if you have space for it otherwise you will receive it in your storage room. The item will contain the jackpot value. How to configure? @ game/constants.cpp you can edit all the betting values you want. @ game/contants.cpp you can edit as well the jackpot values. @ root/uiSlotMachineSystem.py you can edit the reel icons and bet values. In-game, you can also use the commands, /e slot_machine_reels < x > where < x > is the number of reels you want to randomize. The more reel icons you have, the harder it is to win a jackpot! /e slot_machine_multiplier < x > where < x > is the value of the multiplied you want. The higher this value, the higher the payout is. Additional information For those who are using older versions of C++ some data type identifiers need to be changed as shown below. uint64_t = unsigned long long uint32_t = UINT int32_t = INT uint16_t = WORD uint8_t = BYTE Sincerly, Owsap
-
Download Alternative download links → Mega Hello Metin2 Dev. I'm here to present a GM Affect system. I was bored a few days ago and i wanted to create a different type of GM Symbol Affect for each grade, so i did it and decided to share it with you. Remember, the Symbol affects you see on this gif aren't mine so i won't share them, they are made from @ Ridack.. Hope you enjoy and like it. How does it work? You simply need to change the localization of the files on localeinfo.py -> Root. Here is a simple gif on how it is.
-
M2 Download Center Download Here ( Internal ) Download Here ( GitHub )
- 42 replies
-
- 457
-
M2 Download Center Download Here ( Internal ) Auto refine option when you upgrade the item with SCROLL or on NPC. I did all checks like example : When you have just one scroll in inventory, refine window will be close. When the item is already maximum upgrade. (+8 to +9 just in case will be succes) and more .. Preview: [Hidden Content] Download : [Hidden Content]
- 43 replies
-
- 490
-
Hi devs ! I was getting bored during my vacation, so i had to keep myself occupied... At the request of @ Gurgarath :3, I created a small Python script that allows you to clean up unused lines from your locale_game.txt and locale_interface.txt. It is coded with Python 3.11, compatibility with earlier versions is not guaranteed. It also uses the chardet module, which is specified in the requirements.txt. For any additional information (such as the How To), please refer to the README.md. This script currently does not support imports like import LocaleInfo as li. It also does not support dynamically constructing variable names. It only detects raw constants like localeInfo.MY_CONSTANT. Downloads : Download Find this tool on my Github or M2DL Exemple of output : Takuma.
-
Here's the correct guide on how2 pickup motion. Firstly go to UserInterface/PythonCharacterModule.cpp and search for: PyModule_AddIntConstant(poModule, "NEW_AFFECT_DRAGON_SOUL_QUALIFIED", CInstanceBase::NEW_AFFECT_DRAGON_SOUL_QUALIFIED); add this function under it: PyModule_AddIntConstant(poModule, "MOTION_PICK_UP", CRaceMotionData::NAME_PICK_UP); Secondly go to UserInterface/PythonPlayerInput.cpp and search for: void CPythonPlayer::PickCloseItem() add this function: pkInstMain->GetGraphicThingInstancePtr()->InterceptOnceMotion(CRaceMotionData::NAME_PICK_UP); Thirdly go to GameLib/ActorInstanceMotion.cpp and search for: case CRaceMotionData::NAME_SLAP_HURT_WITH_SHAMAN: add this function under it: case CRaceMotionData::NAME_PICK_UP: Fourthly go to GameLib/RaceManager.cpp and search for: s_kMap_stType_dwIndex.insert(std::map<std::string, DWORD>::value_type("SKILL5", CRaceMotionData::NAME_SKILL+125)); add this function under it: s_kMap_stType_dwIndex.insert(std::map<std::string, DWORD>::value_type("PICK_UP", CRaceMotionData::NAME_PICK_UP)); Fifthly go to GameLib/RaceMotionData.cpp and search for: case NAME_DIG: add this function under it: case NAME_PICK_UP: Sixthly go to GameLib/RaceMotionData.h and search for: NAME_JOY, add this function under it: NAME_PICK_UP, Compile it and you're good to go. Now to finish this tutorial, go to root/playersettingmodule.py and search for: def SetGeneralMotions(mode, folder): add this function: chrmgr.RegisterCacheMotionData(mode, chr.MOTION_PICK_UP, "pick_up.msa") Tutorial finished, have fun.
- 21 replies
-
- 10
-
cross-channel maintenance can be turned on or off. When you start the maintenance, the maintenance screen is instantly displayed to the players who are in the game. The maintenance screen appears for players who log into the game. When you cancel the maintenance, the maintenance screen is closed for all players. M2 Download Center Download Here ( Internal ) [Hidden Content] I coded the system open to development. You can add the reason for maintenance if you want.
-
Download GitHub Repository Synchronizes the character's position with the server and can be used to free them if they get stuck. If there is no available position within the available distance, the character will be warped to the village. .
-
Hi guys. This is my goodbye, I had 10 years working for Metin2 but in the last days I finished my all contracts with Metin2. New year, new projects. I hope you continue to improve your codes. I give special thanks for my unic friend on Metin2 "Capone" because he was the one who showed me that true friendship exists. I know that Metin2 has nice people "Community Developers" and Big Developers: VegaS and Mali, you don't know about me, but I observed your works and is very cool. I wish you a beautiful new Year and good luck in your future projects. I leave with my last contribution "GIFT" for the community. Basic Dungeons: [C++] Nemere and Flame Dungeon like Official servers: Dungeons with Conqueror of Yohara stats: [C++] White Dragon [C++] Queen Nethis NOTE: If I forgot visuals parts, you can extract from the official client. Maybe I will have connections in the forum but just of curiosity. I love you guys, I hope you are very well with my gifts. Good bye.
- 13 replies
-
- 418
-
SERVER PART: input_main.cpp void CInputMain::PartyUseSkill(LPCHARACTER ch, const char* c_pData) { TPacketCGPartyUseSkill* p = (TPacketCGPartyUseSkill*) c_pData; if (!ch->GetParty()) return; if (ch->GetPlayerID() != ch->GetParty()->GetLeaderPID()) { ch->ChatPacket(CHAT_TYPE_INFO, "<Group> Only the leader can use this function."); return; } switch (p->bySkillIndex) { case PARTY_SKILL_HEAL: ch->GetParty()->HealParty(); break; case PARTY_SKILL_WARP: { if (ch->GetSkillLevel(SKILL_LEADERSHIP) >= 10) { //10 IS THE MIN LEVEL OF LEADERSHIP SKILL TO USE TELEPORT LPCHARACTER pch = CHARACTER_MANAGER::instance().Find(p->vid); if (pch) { ch->GetParty()->SummonToLeader(pch->GetPlayerID()); }else{ ch->ChatPacket(CHAT_TYPE_INFO, "<Teleport> The character is not online."); } }else{ ch->ChatPacket(CHAT_TYPE_INFO, "<Teleport> You need upgrade your leadership skill to use this function."); } } break; } } party.cpp void CParty::SummonToLeader(DWORD pid) { LPCHARACTER l = GetLeaderCharacter(); if (m_memberMap.find(pid) == m_memberMap.end()) { l->ChatPacket(CHAT_TYPE_INFO, "<Teleport> The character is too far."); return; } LPCHARACTER ch = m_memberMap[pid].pCharacter; if (!ch) { l->ChatPacket(CHAT_TYPE_INFO, "<Teleport> The character was not found in your map."); return; } if (ch->IsDead()) { l->ChatPacket(CHAT_TYPE_INFO, "<Teleport> I can't teleport the character if he is dead."); return; } ch->Show(l->GetMapIndex(), l->GetX(), l->GetY()); ch->Stop(); } CLIENT PART: root -> uiparty.py FIND THE __ShowStateButton and: ## Warp if self.stateButtonDict.has_key(self.MEMBER_BUTTON_WARP): button = self.stateButtonDict[self.MEMBER_BUTTON_WARP] button.SetPosition(xPos, y) button.Show() xPos += 23 Thanks to marty sama that sell this for 50€. NOW IT'S COMPLETELY FREE!
-
M2 Download Center Download Here ( Internal ) Download Here ( GitHub ) Hi everyone, in my free time I'm trying to upgrade the mainline to most recently webzen releases. This is the Mythic Class of DS, enjoy. [Hidden Content] In order to use it as Webzen does, you need to have implemented:
- 11 replies
-
- 313