Koray

VIP
  • Content count

    445
  • Joined

  • Last visited

Everything posted by Koray

  1. Hello, Have a bug in much published channel switcher due from DirectConnect function here is unbugged switcher https://www.youtube.com/watch?v=cJ45_H32lCY *Move: uichangechannel and ui_wrapper in root pack *networkmodule.py Search: self.isAutoLogin=0 Add it under: self.channel = 0 *locale/xx/ui/systemdialog.py Search: { "name" : "game_option_button", "type" : "button", "x" : 10, "y" : 117, "text" : uiScriptLocale.GAMEOPTION_TITLE, "default_image" : ROOT + "XLarge_Button_01.sub", "over_image" : ROOT + "XLarge_Button_02.sub", "down_image" : ROOT + "XLarge_Button_03.sub", }, Add it under: { "name" : "change_ch_button", "type" : "button", "x" : 10, "y" : 147, "text" : "CH Switcher", "default_image" : ROOT + "XLarge_Button_01.sub", "over_image" : ROOT + "XLarge_Button_02.sub", "down_image" : ROOT + "XLarge_Button_03.sub", "disable_image" : ROOT + "XLarge_Button_03.sub", }, *game.py Search: self.interface.ShowDefaultWindows() Add it under: self.stream.isAutoSelect = 0 Search: self.interface = interfaceModule.Interface() Add it under: self.interface.SetStream(self.stream) *intrologin.py Search: if constInfo.SEQUENCE_PACKET_ENABLE: net.SetPacketSequenceMode() Add it upper: net.ACC_ID = id net.ACC_PWD = pwd *interfacemodule.py Search: def __del__(self): systemSetting.DestroyInterfaceHandler() event.SetInterfaceWindow(None) Add it under: def SetStream(self, stream): self.stream = stream Search: self.dlgSystem = uiSystem.SystemDialog() Change: self.dlgSystem = uiSystem.SystemDialog(self.stream) *uisystem.py Add in imports import uiChangeChannel Search: def __init__(self): Change: def __init__(self, stream): Search: def __init__(self, stream): Find: self.__Initialize() Add it under: self.stream = stream Search: self.GetChild("system_option_button").SAFE_SetEvent(self.__ClickSystemOptionButton) Add it upper: self.GetChild("change_ch_button").SAFE_SetEvent(self.__ClickChangeChannelButton) Search: def __OnClosePopupDialog(self): Add it upper: def __ClickChangeChannelButton(self): self.Close() if not self.changeChDlg: self.changeChDlg = uiChangeChannel.uiChangeChannel(self.stream) self.changeChDlg.Show() Search: self.gameOptionDlg = None Add it under: self.changeChDlg = None Search: if self.systemOptionDlg: self.systemOptionDlg.Destroy() Add it under: if self.changeChDlg: self.changeChDlg.Destroy() http://puu.sh/kJddR/bbb92686dd.rar
  2. It's probably used meaning of developer's name/nickname, just like "GAIDEN" in leaked sources.
  3. Installation files http://www9.zippyshare.com/v/qr8C83pd/file.html Source https://github.com/mq1n/BetaShield
  4. Initialization; #include "LauncherCheck.h" #pragma comment(lib, "LauncherCheck.lib") using namespace LauncherCheck; Encryption example (You should use from your launcher process); if (false == CLauncherCheck::ProcessEncryption("YOUR_SUPER_SECRET_KEY")) { printf("Encryption fail! Error code: %d", CLauncherCheck::GetErrorCode()); return; /* Error, exit or what do you want. */ } Decryption example (You should use from game client process); if (false == CLauncherCheck::ProcessDecryption("YOUR_SUPER_SECRET_KEY")) { printf("Decryption fail! Error code: %d", CLauncherCheck::GetErrorCode()); return; /* Error, exit or what do you want. */ } The lib file is compatible with Visual studio 2015. https://mega.nz/#!wdgmnbQR!Aql-9VEObUuylXmLPArFNPb0tXuN2-ziPiPImXsFtVE
  5. it has to be like this for algorithm security.
  6. Working only Python 2.5 and 2.5+(New in version 2.5) Necessary Libs; urllib, urllib2, _socket, hashlib Usage: /cleverbot: Show bot status. active or passive /cleverbot_open: Activate cleverbot /cleverbot_close: Disable cleverbot or your can change in game options The fallowing 2 files throw into in root http://puu.sh/hl0tM/00f1d70392.rar constinfo.py open CleverBot = 0add it game.py open under imports import CleverBotadd it Find this function def OnRecvWhisper(self, mode, name, line):add this code(like this) new_nl = line.split(" : ") if constInfo.CleverBot == 1: whisper_module = CleverBot.Run(self, mode, new_nl[0], new_nl[1])uichat.py openFind this function def __SendChatPacket(self, text, type):add this code(like this)http://paste2.org/F1wz0fhc uigameoption.py open Find this function def __Initialize(self):add this code(like this) self.cleverTextButtonList = []Find this function def __Load_BindObject(self):add this code(like this) self.cleverTextButtonList.append(GetObject("clevertext_on_button")) self.cleverTextButtonList.append(GetObject("clevertext_off_button"))Find this function def __Load(self):add this code(like this) self.cleverTextButtonList[0].SAFE_SetEvent(self.__OnClickCleverTextOnButton) self.cleverTextButtonList[1].SAFE_SetEvent(self.__OnClickCleverTextOffButton)Find this function def __CheckPvPProtectedLevelPlayer(self):add this code(like this)http://paste2.org/YvymtO0e uiscript/gameoptiondialog.py open Find this "height" : 25*11+8,Will have 2x result, Your change both them with this code, if the numbers are different enough to add +2 "height" : 27*11+8,First part; http://puu.sh/hl1EG/487a4f4a6c.pngOther part; http://puu.sh/hl1Gx/b48606e3fc.png Go down to the bottom and find this code "name" : "salestext_off_button", "type" : "radio_button", "x" : LINE_DATA_X+MIDDLE_BUTTON_WIDTH, "y" : 240, "text" : uiScriptLocale.OPTION_SALESTEXT_VIEW_OFF, "default_image" : ROOT_PATH + "middle_button_01.sub", "over_image" : ROOT_PATH + "middle_button_02.sub", "down_image" : ROOT_PATH + "middle_button_03.sub", }, Add fallowing code add it under http://paste2.org/Bg41WHja Readily example http://paste2.org/1Y38w0Kb When you activated bot, bot will show you as "[bOT]: message" like this
  7. Hi devs, I maked new user check system(like IP) with Hardware Needed Files; Server Part: Common -> tables.h, lenght.h Game -> input_auth.cpp, packet.h Client Part: Pack -> intrologin.py, networkmodule.py, constinfo.py Client -> AccountConnector.cpp, AccountConnector.h, Packet.h, PythonNetworkStream.cpp, PythonNetworkStream.h, PythonNetworkStreamModule.cpp, PythonNetworkStreamPhaseLogin.cpp A BACKUP BEFORE YOU START KNOWN BUGS; All Auth Events logging(not only succesfuly) Let's start 1) First Server Part: 1-1) Common 1-1-1) Tables.h Search typedef struct SAccountTable And replace with this typedef struct SAccountTable { DWORD id; char login[LOGIN_MAX_LEN + 1]; char Hwid[HWID_MAX_LEN + 1]; char Snn[SNN_MAX_LEN + 1]; char passwd[PASSWD_MAX_LEN + 1]; char social_id[SOCIAL_ID_MAX_LEN + 1]; char status[ACCOUNT_STATUS_MAX_LEN + 1]; BYTE bEmpire; TSimplePlayer players[PLAYER_PER_ACCOUNT]; } TAccountTable; Search typedef struct SLoginPacket And replace with this typedef struct SLoginPacket { char login[LOGIN_MAX_LEN + 1]; char passwd[PASSWD_MAX_LEN + 1]; char Hwid[HWID_MAX_LEN + 1]; char Snn[SNN_MAX_LEN + 1]; } TLoginPacket; Search typedef struct SPacketGDAuthLogin And replace with this typedef struct SPacketGDAuthLogin { DWORD dwID; DWORD dwLoginKey; char szLogin[LOGIN_MAX_LEN + 1]; char szHwid[HWID_MAX_LEN + 1]; char szSnn[SNN_MAX_LEN + 1]; char szSocialID[SOCIAL_ID_MAX_LEN + 1]; DWORD adwClientKey[4]; BYTE bBillType; DWORD dwBillID; int iPremiumTimes[PREMIUM_MAX_NUM]; } TPacketGDAuthLogin; 1-1-2) Lenght.h Search PASSWD_MAX_LEN = 16, Add it below HWID_MAX_LEN = 50, SNN_MAX_LEN = 50, 1-2) Game 1-2-1) input_auth.cpp Search this function void CInputAuth::Login(LPDESC d, const char * c_pData) Find this char passwd[PASSWD_MAX_LEN + 1]; strlcpy(passwd, pinfo->passwd, sizeof(passwd)); and add it below char Hwid[HWID_MAX_LEN + 1]; strlcpy(Hwid, pinfo->Hwid, sizeof(Hwid)); char Snn[SNN_MAX_LEN + 1]; strlcpy(Snn, pinfo->Snn, sizeof(Snn)); std::auto_ptr<SQLMsg> msg(DBManager::instance().DirectQuery("UPDATE account.account SET hwid = '%s', Snn = '%s' WHERE login = '%s'", pinfo->Hwid, pinfo->Snn, login)); 1-2-2) packet.h Search typedef struct command_login2 and replace with this typedef struct command_login2 { BYTE header; char login[LOGIN_MAX_LEN + 1]; DWORD dwLoginKey; DWORD adwClientKey[4]; char Hwid[HWID_MAX_LEN + 1]; char Snn[SNN_MAX_LEN + 1]; } TPacketCGLogin2; Search typedef struct command_login3 and replace with this typedef struct command_login3 { BYTE header; char login[LOGIN_MAX_LEN + 1]; char passwd[PASSWD_MAX_LEN + 1]; char Hwid[HWID_MAX_LEN + 1]; char Snn[SNN_MAX_LEN + 1]; DWORD adwClientKey[4]; } TPacketCGLogin3; 2) Second Client Part 2-1)Pack 2-1-1)Constinfo.py Add anywhere import os try: Hwid = os.popen("wmic csproduct get uuid").read().split("n")[1] except: Hwid = os.popen("%WINDIR%/system32/wbem/wmic csproduct get uuid").read().split("n")[1] try: Snn = os.popen('wmic path win32_physicalmedia get SerialNumber').read().split("n")[1] except: Snn = os.popen("%WINDIR%/system32/wbem/wmic path win32_physicalmedia get SerialNumber").read().split("n")[1] 2-1-2)Networkmodule.py add this import import constInfo and add it below Hwid=constInfo.Hwid Snn=constInfo.Snn Search self.pwd="" and add it below self.Hwid=constInfo.Hwid self.Snn=constInfo.Snn Search def SetLoginInfo(self, id, pwd) self.id = id self.pwd = pwd net.SetLoginInfo(id, pwd) and replace with this def SetLoginInfo(self, id, pwd, Hwid, Snn): self.id = id self.pwd = pwd self.Hwid = constInfo.Hwid self.Snn = constInfo.Snn net.SetLoginInfo(id, pwd, Hwid, Snn) 2-2-3)introLogin.py Search RUNUP_MATRIX_AUTH = FALSE Add top Hwid = constInfo.Hwid Snn = constInfo.Snn Search this function def Connect(self, id): and replace with this def Connect(self, id, pwd, Hwid, Snn): global Hwid, Snn if constInfo.SEQUENCE_PACKET_ENABLE: net.SetPacketSequenceMode() if IsLoginDelay(): loginDelay = GetLoginDelay() self.connectingDialog = ConnectingDialog() self.connectingDialog.Open(loginDelay) self.connectingDialog.SAFE_SetTimeOverEvent(self.OnEndCountDown) self.connectingDialog.SAFE_SetExitEvent(self.OnPressExitKey) self.isNowCountDown = TRUE else: self.stream.popupWindow.Close() self.stream.popupWindow.Open(localeInfo.LOGIN_CONNETING, self.SetPasswordEditLineFocus, localeInfo.UI_CANCEL) self.stream.SetLoginInfo(id, pwd, Hwid, Snn) self.stream.Connect() Search def __LoadLoginInfo(self, loginInfoFileName): Add it below global Hwid, Snn Search self.pwd = None Add it below self.Hwid = Hwid self.Snn = Snn Search self.Connect(id, pwd) Replace with this self.Connect(id, pwd, Hwid, Snn) Search self.Connect(id, pwd) Replace With This self.Connect(id, pwd, Hwid, Snn) Search def __OnClickLoginButton(self): Add it below global Hwid, Snn 2-2)Client 2-2-1)Packet.h Search PASS_MAX_NUM = 16, and add it below HWID_MAX_NUM = 50, SNN_MAX_NUM = 50, Search typedef struct command_login And replace with this typedef struct command_login { BYTE header; char name[ID_MAX_NUM + 1]; char pwd[PASS_MAX_NUM + 1]; char Hwid[HWID_MAX_NUM + 1]; char Snn[SNN_MAX_NUM + 1]; } TPacketCGLogin; Search typedef struct command_login3 And replace with this typedef struct command_login3 { BYTE header; char name[ID_MAX_NUM + 1]; char pwd[PASS_MAX_NUM + 1]; char Hwid[HWID_MAX_NUM + 1]; char Snn[SNN_MAX_NUM + 1]; DWORD adwClientKey[4]; } TPacketCGLogin3; Search typedef struct command_direct_enter And replace with this typedef struct command_direct_enter { BYTE bHeader; char login[ID_MAX_NUM + 1]; char passwd[PASS_MAX_NUM + 1]; char Hwid[HWID_MAX_NUM + 1]; char Snn[SNN_MAX_NUM + 1]; BYTE index; } TPacketCGDirectEnter; 2-2-2)AccountConnector.h Search void SetLoginInfo(const char * c_szName, const char * c_szPwd Replace with this void SetLoginInfo(const char * c_szName, const char * c_szPwd, const char * c_szHwid, const char * c_szSnn); Search std::string m_strPassword; Add it below std::string m_strHwid; std::string m_strSnn; 2-2-3)AccountConnector.cpp Search this function void CAccountConnector::SetLoginInfo(const char * c_szName, const char * c_szPwd) Replace with this void CAccountConnector::SetLoginInfo(const char * c_szName, const char * c_szPwd, const char * c_szHwid, const char * c_szSnn) { m_strID = c_szName; m_strPassword = c_szPwd; m_strHwid = c_szHwid; m_strSnn = c_szSnn; } Search strncpy(LoginPacket.pwd, m_strPassword.c_str(), PASS_MAX_NUM); add it below strncpy(LoginPacket.Hwid, m_strHwid.c_str(), HWID_MAX_NUM); strncpy(LoginPacket.Snn, m_strSnn.c_str(), SNN_MAX_NUM); Search LoginPacket.pwd[PASS_MAX_NUM] = '0'; Add it below LoginPacket.Hwid[HWID_MAX_NUM] = '0'; LoginPacket.Snn[SNN_MAX_NUM] = '0'; Search SetLoginInfo("", ""); Replace with this SetLoginInfo("", "", "", ""); 2-2-4)PythonNetworkStreamPhaseLogin.cpp Search(2x) if (0 != m_dwLoginKey) and replace with this if (0 != m_dwLoginKey) SendLoginPacketNew(m_stID.c_str(), m_stPassword.c_str(), m_stHwid.c_str(), m_stSnn.c_str()); else SendLoginPacket(m_stID.c_str(), m_stPassword.c_str(), m_stHwid.c_str(), m_stSnn.c_str()); Search this function bool CPythonNetworkStream::SendDirectEnterPacket(const char* c_szID, const char* c_szPassword) replace with this bool CPythonNetworkStream::SendDirectEnterPacket(const char* c_szID, const char* c_szPassword, const char* c_szHwid, const char* c_szSnn, UINT uChrSlot) { TPacketCGDirectEnter kPacketDirectEnter; kPacketDirectEnter.bHeader=HEADER_CG_DIRECT_ENTER; kPacketDirectEnter.index=uChrSlot; strncpy(kPacketDirectEnter.login, c_szID, ID_MAX_NUM); strncpy(kPacketDirectEnter.passwd, c_szPassword, PASS_MAX_NUM); strncpy(kPacketDirectEnter.Hwid, c_szHwid, HWID_MAX_NUM); strncpy(kPacketDirectEnter.Snn, c_szSnn, SNN_MAX_NUM); if (!Send(sizeof(kPacketDirectEnter), &kPacketDirectEnter)) { Tracen("SendDirectEnter"); return false; } return SendSequence(); } Search this function bool CPythonNetworkStream::SendLoginPacket(const char* c_szName, const char* c_szPassword) and replace with this bool CPythonNetworkStream::SendLoginPacket(const char* c_szName, const char* c_szPassword, const char* c_szHwid, const char* c_szSnn) { TPacketCGLogin LoginPacket; LoginPacket.header = HEADER_CG_LOGIN; strncpy(LoginPacket.name, c_szName, sizeof(LoginPacket.name)-1); strncpy(LoginPacket.pwd, c_szPassword, sizeof(LoginPacket.pwd)-1); strncpy(LoginPacket.Hwid, c_szHwid, sizeof(LoginPacket.Hwid)-1); strncpy(LoginPacket.Snn, c_szSnn, sizeof(LoginPacket.Snn)-1); LoginPacket.name[ID_MAX_NUM]='0'; LoginPacket.pwd[PASS_MAX_NUM]='0'; LoginPacket.Hwid[HWID_MAX_NUM]='0'; LoginPacket.Snn[SNN_MAX_NUM]='0'; if (!Send(sizeof(LoginPacket), &LoginPacket)) { Tracen("SendLogin Error"); return false; } return SendSequence(); } Search bool CPythonNetworkStream::SendLoginPacketNew(const char * c_szName, const char * c_szPassword) and replace with this bool CPythonNetworkStream::SendLoginPacketNew(const char * c_szName, const char * c_szPassword, const char * c_szHwid, const char * c_szSnn) 2-2-4)PythonNetworkStreamModule.cpp Search this function PyObject* netSetLoginInfo(PyObject* poSelf, PyObject* poArgs) and replace with this PyObject* netSetLoginInfo(PyObject* poSelf, PyObject* poArgs) { char* szName; if (!PyTuple_GetString(poArgs, 0, &szName)) return Py_BuildException(); char* szPwd; if (!PyTuple_GetString(poArgs, 1, &szPwd)) return Py_BuildException(); char* szHwid; if (!PyTuple_GetString(poArgs, 2, &szHwid)) return Py_BuildException(); char* szSnn; if (!PyTuple_GetString(poArgs, 3, &szSnn)) return Py_BuildException(); CPythonNetworkStream& rkNetStream=CPythonNetworkStream::Instance(); CAccountConnector & rkAccountConnector = CAccountConnector::Instance(); rkNetStream.SetLoginInfo(szName, szPwd, szHwid, szSnn); rkAccountConnector.SetLoginInfo(szName, szPwd, szHwid, szSnn); return Py_BuildNone(); } Search this function PyObject* netSendLoginPacket(PyObject* poSelf, PyObject* poArgs) and replace with this PyObject* netSendLoginPacket(PyObject* poSelf, PyObject* poArgs) { char* szName; if (!PyTuple_GetString(poArgs, 0, &szName)) return Py_BuildException(); char* szPwd; if (!PyTuple_GetString(poArgs, 1, &szPwd)) return Py_BuildException(); char* szHwid; if (!PyTuple_GetString(poArgs, 2, &szHwid)) return Py_BuildException(); char* szSnn; if (!PyTuple_GetString(poArgs, 3, &szSnn)) return Py_BuildException(); CPythonNetworkStream& rkNetStream=CPythonNetworkStream::Instance(); rkNetStream.SendLoginPacket(szName, szPwd, szHwid, szSnn); return Py_BuildNone(); } 2-2-5)PythonNetworkStream.h Search void SetLoginInfo(const char* c_szID, const char* c_szPassword); Replace with this void SetLoginInfo(const char* c_szID, const char* c_szPassword, const char* c_szHwid, const char* c_szSnn); Search bool SendLoginPacket(const char * c_szName, const char * c_szPassword); bool SendLoginPacketNew(const char * c_szName, const char * c_szPassword); Replace with this bool SendLoginPacket(const char * c_szName, const char * c_szPassword, const char * c_szHwid, const char * c_szSnn); bool SendLoginPacketNew(const char * c_szName, const char * c_szPassword, const char * c_szHwid, const char * c_szSnn); Search bool SendDirectEnterPacket(const char * c_szName, const char * c_szPassword, UINT uChrSlot); And replace with this bool SendDirectEnterPacket(const char * c_szName, const char * c_szPassword, const char * c_szHwid, const char * c_szSnn, UINT uChrSlot); Search std::string m_stPassword; Add it below std::string m_stHwid; std::string m_stSnn; 2-2-6)PythonNetworkStream.cpp Search this function void CPythonNetworkStream::SetLoginInfo(const char* c_szID, const char* c_szPassword) And replace with this void CPythonNetworkStream::SetLoginInfo(const char* c_szID, const char* c_szPassword, const char* c_szHwid, const char* c_szSnn) { m_stID=c_szID; m_stPassword=c_szPassword; m_stHwid=c_szHwid; m_stSnn=c_szSnn; } Now run this query commands; ALTER TABLE account.account ADD Hwid VARCHAR(50); ALTER TABLE account.account ADD Snn VARCHAR(50); Create tables DROP TABLE IF EXISTS `snnban`; CREATE TABLE `snnban` ( `Snn` varchar(255) NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET=latin1; DROP TABLE IF EXISTS `hwidban`; CREATE TABLE `hwidban` ( `Hwid` varchar(255) NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET=latin1; Basic php ban script <?php error_reporting(0); if($_GET) { $baglanti = mysqli_connect('localhost', 'root', 'PASSWORD', 'account'); $hwid = mysqli_real_escape_string($baglanti, $_GET['hwid']); $snn = mysqli_real_escape_string($baglanti, $_GET['snn']); if(strlen($snn) == 0) { $hwid_bul = mysqli_query($baglanti, "SELECT null FROM hwidban WHERE hwid='$hwid'"); if(mysqli_num_rows($hwid_bul) > 0) echo 'BLOCK'; mysqli_free_result($hwid_bul); }else{ $snn_bul = mysqli_query($baglanti, "SELECT null FROM snnban WHERE snn='$snn'"); if(mysqli_num_rows($snn_bul) > 0) echo 'BLOCK'; mysqli_free_result($snn_bul); } mysqli_close($baglanti); } ?> Bonus; if you want alternative ways (mac, cpu etc.) check tutorials below #CPU INFO: import platform platform.processor() #MAC INFO: mac = '' for line in os.popen('getmac /nh /fo CSV').readlines(): m = line.split(',')[0] dev = line.split(',')[1] if dev.find('Device') and mac == '': mac = m mac = mac.replace('"', '') #HWID INFO: *DEFAULT hwid = os.popen('wmic csproduct get uuid').read().split("n")[1] #HDD INFO: hddinfo = win32api.GetVolumeInformation("C:") #COMPUTER NAME: pcadi = os.environ['COMPUTERNAME'] #CPU NAME: cpu = os.popen('wmic cpu get name').read().split("n")[1] #MOTHERBOARD INFO: anakart = os.popen('wmic baseboard get serialnumber').read().split("n")[1] #RAM SERIAL: ram = os.popen('wmic memorychip get serialnumber').read().split("n")[2] #BIOS VERSION: biosv = os.popen('wmic bios get smbiosbiosversion').read().split("n")[1] #COMPUTER MODEL: model = os.popen('wmic csproduct get name').read().split("n")[1] #SYSTEM TYPE: systype = os.popen('wmic computersystem get systemtype').read().split("n")[1] #COMPUTER OWNER: owner = os.popen('wmic computersystem get manufacturer').read().split("n")[1] #OS NAME: osname = os.popen('wmic os get Caption,CSDVersion /value').read().split("n")[2].split("Caption=")[-1] #WINDOWS USERNAME: winusnm = os.popen('echo %username%').read().split("n")[0] #VOLUME NAME: volname = os.popen('wmic logicaldisk get volumename').read().split("n")[1] #SMART SNN: *DEFAULT smartsnn = os.popen('wmic path win32_physicalmedia get SerialNumber').read().split("n")[1] #USER SID: usersid = os.popen('wmic useraccount get name,sid').read().split("n")[2].replace(" ", " - ") #TOTAL MEMORY: ramboyut = os.popen('wmic computersystem get TotalPhysicalMemory').read().split("n")[1] Example files: https://www.mediafire.com/?jjjkr0u9jzfezw9 Virustotal: https://www.virustotal.com/en/file/be38451c9ff793199e9431aecabd01226f143eed4bc509e481543c06e9272248/analysis/1417175162/ Result: Sorry my bad english Regards
  8. Anti Wait Hack: Anti Safezone: Anti Ghostmode: Anti Wallhack: Anti Long name generator: #Update 1: -Clientside- -Serverside- Anti Mining Bot: Fishing without water fix Anti Colorful Shop Anti Drophack #Update 2: -Serverside- Anti Fish Bot Anti Guild Maker(low level) Activate Anti Teleport Hack -Clientside- Activate py inject protection Anti Anti Stun & Anti Visual GM Effect Anti Attackspeed & Anti Movespeed This thread subjects enough for general cheats For better bot and script cheat security change module or function names For this here basic tutorial for change net module name
  9. https://mega.nz/#!VdpXlJxD!BmOqKWSm8mgLZi3GmHw_Iwbpea6lmTZZVVVijjk73X0 old but works fine.
  10. https://github.com/christian-roggia/metin2-eternexus
  11. - Searching Glass, Allows the arrow mark appearing on the private shop where the item you select in the search results and guides for players to call the selling items easier access. You must be the same on the map with the seller. Default time limit; 1 Week - Trading Glass, Without going to the private shop on the same map that allows you can buy directly. Default time limit; 1 Week - Trading Glass+, Without going to the private shop you can buy directly works on any map. Default time limit; 2 Week - Common features, You can be viewed right from cheap to expensive price of items in the private shops, you can see the features of items When you move your mouse over the item you are looking for. Level, item name and bonuses you can search on the basis of price. HowTo tutorial exists in archive, Warning: It doesn't works with published shoulder sash system. You need upgrade attr type, value amounts. Download: http://puu.sh/oeibM/66130c335e.rar It doesn't looks like %100 official but it's works, My last shared and my last working in metin2.
  12. You should find character instance vector and filter by vnum range/type and live status.
  13. You don't need create new define macro (#define ARRAY_SIZE(a) (sizeof(a) / sizeof(a[0]))) Because there is already have a another one (_countof). LoadLibrary API don't return as HANDLE so you should convert to HMODULE or similar memory pointer. LoadLibrary API don't give INVALID_HANDLE_VALUE aka. -1 value if is failed you will get null pointer. You should free ntdll module not export's pointer.
  14. FreeLibrary(lpNtFunc); wat?
  15. http://lmgtfy.com/?q=Marquee+style+for+notice(%2Fn+text)
  16. Hey, I have started a new project that is called offline shop and I want publish some previews, And the main features; It's works as cache based, have not so much runtime MySQL communication like other offline shops. It's uses new private shop designs, Players can be customize their shops. Added a few game options for low level computers, Players can hide all ofline shops or other shops outside of itself. Here isn't so retard features like price change, add new item, blabla... after than create shop. And it's based on standart shop system. Players can move his offline shop to another position after than create shop. And players can not create shops to very close ranges with other offline shops. When you click to offline shop here is appear a whisper button and players can send private message to offline shop owner. The offline shop owner get informations, if anyone look at to his own shop, if anyone stopped look to his own shop and if anyone buy item get notice with item hyperlink and cost informations. New designs: Move feature: Whisper target bar: Notice feature. Hide feature: * 06.11.16 Update: Dynamic shop size: Dynamic shop size added. Players can select shop's slot count as dynamically, Standart slot count: 40, Upgradeable counts 50, 60, 70, 80, 90 slot. --- * 09.11.16 Update: Sold Items: Players can look to sold items from looked shop. -- Offline Shop Panel: Player can manage offline shops from safebox window. Player can warp to offline shop(Have a distance and same map limit), Can go to offline shop(Have same map limit), Can close shop. Players can get unsold items. --- *12.11.16 Update: Multi Price Support: Players can sell items with yang(standard), coin, goldbar and won price types. The price options is can manage from serverside as so easy. And If you have any unique or user friendly ideas please do not hesitate to tell me I will create soon more detailed sale thread.
  17. *12.11.16 Update: Multi Price Support: Players can sell items with yang(standard), coin, goldbar and won price types. The price options is can manage from serverside as so easy.
  18. Offline Shop Panel: Player can manage offline shops from safebox window. Player can warp to offline shop(Have a distance and same map limit), Can go to offline shop(Have same map limit), Can close shop. Players can get unsold items.
  19. * 09.11.16 Update: Sold Items: Players can look to sold items from looked shop.
  20. * 06.11.16 Update: Dynamic shop size: Dynamic shop size added. Players can select shop's slot count as dynamically, Standart slot count: 40, Upgradeable counts 50, 60, 70, 80, 90 slot.
  21. I will try add new currencies. Thanks man.
  22. It's for sale because have been made with much effort. I don't think too high a price, it will probably be same with other offline shops.
  23. It is in my todo list but I haven't reviewed yet the possibility. if I can do, I will try change grid counts as dynamically, like 40 item slot is standart count and we can increase to 60-80-100-120-140. But about the page system I'm not sure, as far as I saw in my country the most players is not liked page system in private shop. :/ Do you mean antiflags? If yes, I added protect for that. If he is in same map with offline shop, I can create function for this. Thanks for suggestions.
  24. Yes apparently I will do add limitation for new styles. I didn't looked to won system but I don't think adapt so hard(If published/leaked or whatever all won systems is same)
  25. I already maked your 1st suggestion(https://www.youtube.com/watch?v=GD3hlba5PvE), so I can adapt to offline shop. About level limit, I think we can manage from server with a few changes and looks good idea. Thanks for suggestions.