Jump to content

Leaderboard

Popular Content

Showing content with the highest reputation on 12/11/15 in all areas

  1. M2 Download Center Download Here ( Internal ) Hi there Devs, I successfully extended the maximum number of items in a stack, so I'd like to share it. Originally the type of the "count" variables are "BYTE", so the maximum number only 255. I changed this to "WORD" (unsigned short), so now its about 60k. client packet.h Search for this: typedef struct command_item_drop2 then replace this in the struct: BYTE count; to this: WORD count; Then search for this: typedef struct command_item_move then replace this in the struct: BYTE num; To this: WORD num; Search for this: typedef struct SShopItemTable then replace this in the struct: BYTE count; to this: WORD count; Search for this: typedef struct packet_set_item2 then replace this in the struct: BYTE count; to this: WORD count; Then search for this: typedef struct packet_update_item then replace this in the struct: BYTE count; to this: WORD count; Then search for this: typedef struct SEquipmentItemSet replace this: BYTE count; to this: WORD count; PythonNetworkPhaseGame.cpp->RecvExchangePacket function Replace this: CPythonExchange::Instance().SetItemToSelf(iSlotIndex, exchange_packet.arg1, (BYTE) exchange_packet.arg3); To this: CPythonExchange::Instance().SetItemToSelf(iSlotIndex, exchange_packet.arg1, (WORD) exchange_packet.arg3); and this: CPythonExchange::Instance().SetItemToTarget(iSlotIndex, exchange_packet.arg1, (BYTE) exchange_packet.arg3); to this: CPythonExchange::Instance().SetItemToTarget(iSlotIndex, exchange_packet.arg1, (WORD) exchange_packet.arg3); pythonexchange.cpp: Replace this: BYTE CPythonExchange::GetItemCountFromTarget(BYTE pos) With this: WORD CPythonExchange::GetItemCountFromTarget(BYTE pos) Then this: BYTE CPythonExchange::GetItemCountFromSelf(BYTE pos) With this: WORD CPythonExchange::GetItemCountFromSelf(BYTE pos) And this: void CPythonExchange::SetItemToTarget(DWORD pos, DWORD vnum, BYTE count) With this: void CPythonExchange::SetItemToTarget(DWORD pos, DWORD vnum, WORD count) And then this: void CPythonExchange::SetItemToSelf(DWORD pos, DWORD vnum, BYTE count) With this: void CPythonExchange::SetItemToSelf(DWORD pos, DWORD vnum, WORD count) pythonexchange.h Replace this ones: BYTE GetItemCountFromTarget(BYTE pos); BYTE GetItemCountFromSelf(BYTE pos); void SetItemToTarget(DWORD pos, DWORD vnum, BYTE count); void SetItemToSelf(DWORD pos, DWORD vnum, BYTE count); BYTE item_count[EXCHANGE_ITEM_MAX_NUM]; To this: WORD GetItemCountFromTarget(BYTE pos); WORD GetItemCountFromSelf(BYTE pos); void SetItemToTarget(DWORD pos, DWORD vnum, WORD count); void SetItemToSelf(DWORD pos, DWORD vnum, WORD count); WORD item_count[EXCHANGE_ITEM_MAX_NUM]; PythonNetworkStreamPhaseGameItem.cpp Replace the whole function: bool CPythonNetworkStream::SendShopSellPacketNew With this: typedef struct fckOFF { BYTE bySlot; WORD byCount; } TfckOFF; bool CPythonNetworkStream::SendShopSellPacketNew(BYTE bySlot, WORD byCount) { if (!__CanActMainInstance()) return true; TPacketCGShop PacketShop; PacketShop.header = HEADER_CG_SHOP; PacketShop.subheader = SHOP_SUBHEADER_CG_SELL2; TfckOFF second; second.byCount = byCount; second.bySlot = bySlot; if (!Send(sizeof(TPacketCGShop), &PacketShop)) { Tracef("SendShopSellPacket Error\n"); return false; } if (!Send(sizeof(TfckOFF), &second)) { Tracef("SendShopAddSellPacket Error\n"); return false; } /*if (!Send(sizeof(WORD), &byCount)) { Tracef("SendShopAddSellPacket Error\n"); return false; }*/ Tracef(" SendShopSellPacketNew(bySlot=%d, byCount=%u)\n", bySlot, byCount); return SendSequence(); } Then replace this: bool CPythonNetworkStream::SendItemMovePacket(TItemPos pos, TItemPos change_pos, BYTE num) bool CPythonNetworkStream::SendSafeBoxItemMovePacket(BYTE bySourcePos, BYTE byTargetPos, BYTE byCount) To this: bool CPythonNetworkStream::SendItemMovePacket(TItemPos pos, TItemPos change_pos, WORD num) bool CPythonNetworkStream::SendSafeBoxItemMovePacket(BYTE bySourcePos, BYTE byTargetPos, WORD byCount) pythonplayermodule.cpp Replace the whole function: PyObject * playerSetItemCount(PyObject* poSelf, PyObject* poArgs) With this: PyObject * playerSetItemCount(PyObject* poSelf, PyObject* poArgs) { switch (PyTuple_Size(poArgs)) { case 2: { int iSlotIndex; if (!PyTuple_GetInteger(poArgs, 0, &iSlotIndex)) return Py_BuildException(); WORD wCount; if (!PyTuple_GetInteger(poArgs, 1, &wCount)) return Py_BuildException(); if (0 == wCount) return Py_BuildException(); CPythonPlayer::Instance().SetItemCount(TItemPos (INVENTORY, iSlotIndex), wCount); return Py_BuildNone(); } case 3: { TItemPos Cell; if (!PyTuple_GetByte(poArgs, 0, &Cell.window_type)) return Py_BuildException(); if (!PyTuple_GetInteger(poArgs, 1, &Cell.cell)) return Py_BuildException(); WORD wCount; if (!PyTuple_GetInteger(poArgs, 2, &wCount)) return Py_BuildException(); CPythonPlayer::Instance().SetItemCount(Cell, wCount); return Py_BuildNone(); } default: return Py_BuildException(); } } PythonNetworkStreamModule.cpp Replace the following function: PyObject* netSendItemMovePacket(PyObject* poSelf, PyObject* poArgs) With this: PyObject* netSendItemMovePacket(PyObject* poSelf, PyObject* poArgs) { TItemPos Cell; TItemPos ChangeCell; int num; switch (PyTuple_Size(poArgs)) { case 3: if (!PyTuple_GetInteger(poArgs, 0, &Cell.cell)) return Py_BuildException(); if (!PyTuple_GetInteger(poArgs, 1, &ChangeCell.cell)) return Py_BuildException(); if (!PyTuple_GetInteger(poArgs, 2, &num)) return Py_BuildException(); break; case 5: { if (!PyTuple_GetByte(poArgs, 0, &Cell.window_type)) return Py_BuildException(); if (!PyTuple_GetInteger(poArgs, 1, &Cell.cell)) return Py_BuildException(); if (!PyTuple_GetByte(poArgs, 2, &ChangeCell.window_type)) return Py_BuildException(); if (!PyTuple_GetInteger(poArgs, 3, &ChangeCell.cell)) return Py_BuildException(); if (!PyTuple_GetInteger(poArgs, 4, &num)) return Py_BuildException(); } break; default: return Py_BuildException(); } CPythonNetworkStream& rkNetStream=CPythonNetworkStream::Instance(); rkNetStream.SendItemMovePacket(Cell, ChangeCell, (WORD) num);//ez a sor az return Py_BuildNone(); } GameType.h Search for this: typedef struct packet_item Then replace this: BYTE count; With this: WORD count; Search for this: typedef struct packet_shop_item And edit this: BYTE count; to this: WORD count; AbstractPlayer.h Replace this: virtual void SetItemCount(TItemPos itemPos, BYTE byCount) = 0; With this: virtual void SetItemCount(TItemPos itemPos, WORD byCount) = 0; PythonPlayer.cpp Replace this: void CPythonPlayer::SetItemCount(TItemPos Cell, BYTE byCount) With this: void CPythonPlayer::SetItemCount(TItemPos Cell, WORD byCount) PythonPlayer.h Replace this: void SetItemCount(TItemPos Cell, BYTE byCount); With this: void SetItemCount(TItemPos Cell, WORD byCount); PythonNetworkStream.h And this: bool SendSafeBoxItemMovePacket(BYTE bySourcePos, BYTE byTargetPos, BYTE byCount); bool SendShopSellPacketNew(BYTE bySlot, BYTE byCount); bool SendItemMovePacket(TItemPos pos, TItemPos change_pos, BYTE num); With this: bool SendSafeBoxItemMovePacket(BYTE bySourcePos, BYTE byTargetPos, WORD byCount); bool SendShopSellPacketNew(BYTE bySlot, WORD byCount); bool SendItemMovePacket(TItemPos pos, TItemPos change_pos, WORD num); Now we are done with the client, you can build it now. server common/tables.h Search this: typedef struct SShopItemTable Then replace this: BYTE count; To this: WORD count; packet.h Search for this: typedef struct command_item_drop2 Then edit this: BYTE count; To this: WORD count; Then search this:: typedef struct command_item_move Replace this: BYTE count; With this: WORD count; Then search this: typedef struct packet_item_set Replace this: BYTE count; To this: WORD count; Search this: typedef struct packet_item_update Replace this: BYTE count; To this: WORD count; Search this: struct packet_shop_item Replace this: BYTE count; To this: WORD count; Search this: typedef struct pakcet_view_equip Then replace this: BYTE count; To this: WORD count; input_main.cpp Replace this whole function: int CInputMain::Shop(LPCHARACTER ch, const char * data, size_t uiBytes) With this: typedef struct fckOFF { BYTE bySlot; WORD byCount; } TfckOFF; int CInputMain::Shop(LPCHARACTER ch, const char * data, size_t uiBytes) { TPacketCGShop * p = (TPacketCGShop *) data; if (uiBytes < sizeof(TPacketCGShop)) return -1; if (test_server) sys_log(0, "CInputMain::Shop() ==> SubHeader %d", p->subheader); const char * c_pData = data + sizeof(TPacketCGShop); uiBytes -= sizeof(TPacketCGShop); switch (p->subheader) { case SHOP_SUBHEADER_CG_END: sys_log(1, "INPUT: %s SHOP: END", ch->GetName()); CShopManager::instance().StopShopping(ch); return 0; case SHOP_SUBHEADER_CG_BUY: { if (uiBytes < sizeof(BYTE) + sizeof(BYTE)) return -1; BYTE bPos = *(c_pData + 1); sys_log(1, "INPUT: %s SHOP: BUY %d", ch->GetName(), bPos); CShopManager::instance().Buy(ch, bPos); return (sizeof(BYTE) + sizeof(BYTE)); } case SHOP_SUBHEADER_CG_SELL: { if (uiBytes < sizeof(BYTE)) return -1; BYTE pos = *c_pData; sys_log(0, "INPUT: %s SHOP: SELL", ch->GetName()); CShopManager::instance().Sell(ch, pos); return sizeof(BYTE); } case SHOP_SUBHEADER_CG_SELL2: { if (uiBytes < sizeof(TfckOFF)) return -1; TfckOFF*p2 = (TfckOFF*)c_pData; /*BYTE pos = *(c_pData++); WORD count = *(c_pData);*/ sys_log(0, "INPUT: %s SHOP: SELL2", ch->GetName()); CShopManager::instance().Sell(ch, p2->bySlot, p2->byCount); return sizeof(TfckOFF); } default: sys_err("CInputMain::Shop : Unknown subheader %d : %s", p->subheader, ch->GetName()); break; } return 0; } shop_manager.cpp Replace this: void CShopManager::Sell(LPCHARACTER ch, BYTE bCell, BYTE bCount) To this: void CShopManager::Sell(LPCHARACTER ch, BYTE bCell, WORD bCount) shop.h Search this: typedef struct shop_item Replace this: BYTE count; To this: WORD count; shop_manager.h Replace this: void Sell(LPCHARACTER ch, BYTE bCell, BYTE bCount=0); To this: void Sell(LPCHARACTER ch, BYTE bCell, WORD bCount=0); char_item.cpp Replace this: bool CHARACTER::DropItem(TItemPos Cell, BYTE bCount) To this: bool CHARACTER::DropItem(TItemPos Cell, WORD bCount) Then replace this: bool CHARACTER::MoveItem(TItemPos Cell, TItemPos DestCell, BYTE count) To this: bool CHARACTER::MoveItem(TItemPos Cell, TItemPos DestCell, WORD count) And replace this in this function: count = MIN(200 - item2->GetCount(), count); To this: count = MIN(ITEM_MAX_COUNT - item2->GetCount(), count); Then replace this: LPITEM CHARACTER::AutoGiveItem(DWORD dwItemVnum, BYTE bCount, int iRarePct, bool bMsg) To this: LPITEM CHARACTER::AutoGiveItem(DWORD dwItemVnum, WORD bCount, int iRarePct, bool bMsg) And replace this in this function: BYTE bCount2 = MIN(200 - item->GetCount(), bCount); To this: WORD bCount2 = MIN(ITEM_MAX_COUNT - item->GetCount(), bCount); And replace this inside the PickupItem function: BYTE bCount = item->GetCount(); To this: WORD bCount = item->GetCount(); And this (still inside this function): BYTE bCount2 = MIN(200 - item2->GetCount(), bCount); To this: WORD bCount2 = MIN(ITEM_MAX_COUNT - item2->GetCount(), bCount); item.cpp->DWORD CItem::GetCount() Replace this: return MIN(m_dwCount, 200); To this: return MIN(m_dwCount, ITEM_MAX_COUNT); safebox.cpp Replace this: bool CSafebox::MoveItem(BYTE bCell, BYTE bDestCell, BYTE count) To this: bool CSafebox::MoveItem(BYTE bCell, BYTE bDestCell, WORD count) Then replace this inside this function: count = MIN(200 - item2->GetCount(), count); To this: count = MIN(ITEM_MAX_COUNT - item2->GetCount(), count); common/item_lenght.h Here you can set the maximum number in a stack. Change this as big as you want (between 0 and ~60k) ITEM_MAX_COUNT = 200, (I changed this to 300, just for the test) char.h Replace this: bool DropItem(TItemPos Cell, BYTE bCount=0); bool MoveItem(TItemPos pos, TItemPos change_pos, BYTE num); LPITEM AutoGiveItem(DWORD dwItemVnum, BYTE bCount=1, int iRarePct = -1, bool bMsg = true); To this: bool DropItem(TItemPos Cell, WORD bCount=0); bool MoveItem(TItemPos pos, TItemPos change_pos, WORD num); LPITEM AutoGiveItem(DWORD dwItemVnum, WORD bCount=1, int iRarePct = -1, bool bMsg = true); safebox.h Replace this: bool MoveItem(BYTE bCell, BYTE bDestCell, BYTE count); To this: bool MoveItem(BYTE bCell, BYTE bDestCell, WORD count); oxevent.cpp Replace this: bool COXEventManager::GiveItemToAttender(DWORD dwItemVnum, BYTE count) To this: bool COXEventManager::GiveItemToAttender(DWORD dwItemVnum, WORD count) oxevent.h Replace this: bool GiveItemToAttender(DWORD dwItemVnum, BYTE count); With this: bool GiveItemToAttender(DWORD dwItemVnum, WORD count); Now we are done with the server, don't foget to build the db and the gamefile too! database We have to do 2 more things: Go to the player database, right click on the item table -> desing table, then edit the count column's type from tinyint to smallint and the lenght from 3 to 4. shop_item table->desing table: edit the count column's type from tinyint to smallint And we are done I also captured the "progress" like in my "Expand maximum level" topic, its about 40 minutes long again, its not necessary at all to watch it, but if you are interested about the progress, or you just bored and have 40-50 minute freetime, watch it, if you want Special thanks to TheSLZ for testing the edits. If you have any problem/remark/question, or you've just found a bug, feel free to tell/ask it here or in PM. Have a nice day, ~masodikbela
    1 point
  2. 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
    1 point
  3. verify if you have extern libs added like this: # Miscellaneous external libraries INCDIR += -I../../../Extern/include LIBDIR += -L../../../Extern/lib LIBS += -lcryptopp -lgtest
    1 point
  4. replace with: if (fp) { fprintf(fp, "game perforce revision: 40250\n"); Or whatever string you wanna put there
    1 point
  5. <command-line>: warning: missing terminating " characterversion.cpp:10: error: missing terminating " characterversion.cpp: In function 'void WriteVersion()':version.cpp:10: error: expected primary-expression before ')' token Its obvious to resolve, just read the error
    1 point
  6. npc.txt g 520 361 1 1 0 0 1m 100 1 12007 group.txt Group L70_¸»(Boss)-Á¶¶û¸»(Boss) { Leader . 20025 Vnum 12007 1 Pony 20029 2 Pony 20029 3 Pferd 20030 4 Pferd 20030 }
    1 point
  7. M2 Download Center Download Here ( Internal ) Hi guys. Sorry for long absence. I know that I promise to make more releases, but my job takes over my little spare time that I have.This is something that I've done for a customer long time ago. The archive includes full .mdatr file that allows your character to read collision and height parameters. Download VirusTotal Password to extract files : metin2dev.org Don't forget to give a like if you find this release useful. Kind regards, Bogdan
    1 point
×
×
  • Create New...

Important Information

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