Welcome!

Join our community of MMO enthusiasts and game developers! By registering, you'll gain access to discussions on the latest developments in MMO server files and collaborate with like-minded individuals. Join us today and unlock the potential of MMO server development!

Join Today!

[Help] How is managed HUD modifications?

Junior Spellweaver
Joined
Feb 18, 2011
Messages
108
Reaction score
41
Hi,

I have some ideas to my project that will need some HUD modifications (eg. creating a custom item tooltip but to appears when the players hovers the mouse above a specific button of the interface; or creating an interface to manage crafting in the game, etc).

From some other games I worked with ppl usually do directx hook but at some cases ppl hook the native hud system of the game and just adds new stuff.

As this forum lacks some organization regarding specific topics it's somewhat hard to find all valid information regarding this.

Can anyone who knows what I'm talking about give me some information regarding it?

Thanks in advance.
 
(づ。◕‿‿◕。)
Loyal Member
Joined
Jun 23, 2014
Messages
1,853
Reaction score
423
Re: How is managed HUD modifications?

check zteam source (main 1.04D)

interface.cpp

Code:
#include "stdafx.h"#include "User.h"#include "Interface.h"#include "TMemory.h"#include "TDebugLog.h"#include "CheatGuard.h"#include "Protocol.h"#include "Monster.h"#include "Camera.h"#include "ResetSystem.h"#include "CraftSystem.h"#include "NewsBoard.h"#include "ConnectEx.h"// ----------------------------------------------------------------------------------------------Interface	gInterface;DWORD		CharacterInfoExtern_Buff;char		CharacterInfoExtern_LevelBuff[40];DWORD		StaffNameColor_Buff;lpViewObj	StaffNameColor_lpView;DWORD		AddSomeShine_Buff;DWORD		AddSomeShine_Pointer;// ----------------------------------------------------------------------------------------------Interface::Interface(){	ZeroMemory(this->Data, sizeof(this->Data));}// ----------------------------------------------------------------------------------------------Naked(CharacterInfoExtern){	sprintf(CharacterInfoExtern_LevelBuff, "Level: %d | Reset: %d (%d)", 		gObjUser.lpPlayer->Level, gObjUser.m_Reset, gObjUser.m_GrandReset);	// ----	_asm	{		lea eax, CharacterInfoExtern_LevelBuff			push eax			// ----			mov CharacterInfoExtern_Buff, 0x0077FB85			jmp CharacterInfoExtern_Buff	}}// ----------------------------------------------------------------------------------------------Naked(StaffNameColor){	_asm	{		mov ecx, dword ptr ss:[ebp+0x10]		mov StaffNameColor_Buff, ecx	}	// ----	StaffNameColor_lpView = &*(ObjectPreview*)(*(DWORD*)(StaffNameColor_Buff + 668));	// ----	if( !strncmp(StaffNameColor_lpView->Name, "NaM4", 4) )	{		pSetTextColor(pTextThis(), 255, 60, 160, 255);	}	else if( !strncmp(StaffNameColor_lpView->Name, "Admin", 5) )	{		pSetTextColor(pTextThis(), 255, 175, 0, 255);	}	else if( !strncmp(StaffNameColor_lpView->Name, "RFZIN", 5) )	{		pSetTextColor(pTextThis(), 0, 175, 0, 255);	}	else	{		pSetTextColor(pTextThis(), 100, 250, 250, 255);	}	// ----	_asm	{		mov StaffNameColor_Buff, 0x00598C9A			jmp StaffNameColor_Buff	}}// ----------------------------------------------------------------------------------------------Naked(AddSomeShine){	_asm	{		mov eax, dword ptr ds:[ecx + 0x30]		mov AddSomeShine_Buff, eax	}	// ----	if( AddSomeShine_Buff == 349 || AddSomeShine_Buff == 406		|| AddSomeShine_Buff == 407 || AddSomeShine_Buff == 408 )	{		_asm		{			mov AddSomeShine_Buff, 0x005E4979				jmp AddSomeShine_Buff		}	}	else	{		_asm		{			mov AddSomeShine_Buff, 0x005E4A3C				jmp AddSomeShine_Buff		}	}}// ----------------------------------------------------------------------------------------------void Interface::Load(){	this->BindObject(eSAMPLEBUTTON, 0x7AA4, 16, 15, 175, 1);	// ----	this->BindObject(eRANK_MAIN, 0x7A5A, 222, 303, -1, -1);	this->BindObject(eRANK_TITLE, 0x7A63, 230, 67, -1, -1);	this->BindObject(eRANK_FRAME, 0x7A58, 230, 15, -1, -1);	this->BindObject(eRANK_FOOTER, 0x7A59, 230, 50, -1, -1);	this->BindObject(eRANK_BUTTON, 0x7A5E, 128, 29, -1, -1);	this->BindObject(eRANK_DIV, 0x7A62, 223, 21, -1, -1);	this->BindObject(eRANK_TAB1, 0x7AAD, 48, 22, -1, -1);	this->BindObject(eRANK_TAB2, 0x7AAD, 48, 22, -1, -1);	this->BindObject(eRANK_TAB3, 0x7AAD, 48, 22, -1, -1);	this->BindObject(eRANK_TAB4, 0x7AAE, 72, 22, -1, -1);	this->BindObject(eCAMERA_MAIN, 0x787A, 54, 18, 174, 0);	this->BindObject(eCAMERA_BUTTON1, 0x787B, 16, 12, 175.5, 1);	this->BindObject(eCAMERA_BUTTON2, 0x787C, 16, 12, 192.5, 1);	this->BindObject(eCRAFT_MAIN, 0x7A5A, 222, 303, -1, -1);	this->BindObject(eCRAFT_TITLE, 0x7A63, 230, 67, -1, -1);	this->BindObject(eCRAFT_FRAME, 0x7A58, 230, 15, -1, -1);	this->BindObject(eCRAFT_FOOTER, 0x7A59, 230, 50, -1, -1);	this->BindObject(eCRAFT_DIV, 0x7A62, 223, 21, -1, -1);	this->BindObject(eCRAFT_TAB1, 0x7AAD, 48, 22, -1, -1);	this->BindObject(eCRAFT_TAB2, 0x7AAD, 48, 22, -1, -1);	this->BindObject(eCRAFT_TAB3, 0x7AAD, 48, 22, -1, -1);	this->BindObject(eCRAFT_TAB4, 0x7AAE, 72, 22, -1, -1);	this->BindObject(eCRAFT_CLOSE, 0x7EC5, 36, 29, -1, -1);	this->BindObject(eCRAFT_INFOBG, 0x7AA3, 170, 21, -1, -1);	this->BindObject(eCRAFT_MONEYBG, 0x7A89, 170, 26, -1, -1);	this->BindObject(eCRAFT_FINISH, 0x7A5E, 128, 29, -1, -1);	this->BindObject(eRESET_MAIN, 0x7A5A, 222, 303, -1, -1);	this->BindObject(eRESET_TITLE, 0x7A63, 230, 67, -1, -1);	this->BindObject(eRESET_FRAME, 0x7A58, 230, 15, -1, -1);	this->BindObject(eRESET_FOOTER, 0x7A59, 230, 50, -1, -1);	this->BindObject(eRESET_DIV, 0x7A62, 223, 21, -1, -1);	this->BindObject(eRESET_CLOSE, 0x7EC5, 36, 29, -1, -1);	this->BindObject(eRESET_INFOBG, 0x7AA3, 170, 21, -1, -1);	this->BindObject(eRESET_MONEYBG, 0x7A89, 170, 26, -1, -1);	this->BindObject(eRESET_FINISH, 0x7A5E, 128, 29, -1, -1);	this->BindObject(eNEWS_MAIN, 0x7A5A, 222, 303, -1, -1);	this->BindObject(eNEWS_TITLE, 0x7A63, 230, 67, -1, -1);	this->BindObject(eNEWS_FRAME, 0x7A58, 230, 15, -1, -1);	this->BindObject(eNEWS_FOOTER, 0x7A59, 230, 50, -1, -1);	this->BindObject(eNEWS_DIV, 0x7A62, 223, 21, -1, -1);	this->BindObject(eNEWS_INFOBG, 0x787D, 170, 21, -1, -1);	this->BindObject(eNEWS_CLOSE, 0x7EC5, 36, 29, -1, -1);	this->BindObject(eNEWS_BACK, 0x7A5E, 128, 29, -1, -1);#ifdef __MAKELO__	this->BindObject(eOFFEXP_SWITCH, 32513, 57, 23, MAX_WIN_WIDTH-57, 0);#endif	//#ifdef __BEREZNUK__	this->BindObject(eTIME, 0x787E, 131, 70, -10, 359);	this->Data[eTIME].OnShow = true;	//#endif#ifdef __ROOT__	this->BindObject(eQUEST_MAIN, 0x7A5A, 222, 303, -1, -1);	this->BindObject(eQUEST_TITLE, 0x7A63, 230, 67, -1, -1);	this->BindObject(eQUEST_FRAME, 0x7A58, 230, 15, -1, -1);	this->BindObject(eQUEST_FOOTER, 0x7A59, 230, 50, -1, -1);	this->BindObject(eQUEST_DIV, 0x7A62, 223, 21, -1, -1);	this->BindObject(eQUEST_CLOSE, 0x7EC5, 36, 29, -1, -1);#endif	// ----	SetOp((LPVOID)oAllowGUI_Call1, this->AllowGUI, ASM::CALL);	SetOp((LPVOID)oAllowGUI_Call2, this->AllowGUI, ASM::CALL);	SetOp((LPVOID)oDrawInterface_Call, this->Work, ASM::CALL);	SetOp((LPVOID)oLoadSomeForm_Call, this->LoadImages, ASM::CALL);	SetOp((LPVOID)0x00633FFB, this->LoadModels, ASM::CALL);	SetRange((LPVOID)0x0077FB7E, 7, ASM::NOP);	SetOp((LPVOID)0x0077FB7E, (LPVOID)CharacterInfoExtern, ASM::JMP);	//#ifdef __NOVUS__	SetRange((LPVOID)0x00598C7D, 29, ASM::NOP);	SetOp((LPVOID)0x00598C7D, (LPVOID)StaffNameColor, ASM::JMP);	SetRange((LPVOID)0x005E496C, 13, ASM::NOP);	SetOp((LPVOID)0x005E496C, (LPVOID)AddSomeShine, ASM::JMP);	//#endif	    this->BindObject(eMINI_MAP_BG, 0x7882, 138, 265, -1, -1);    this->BindObject(ePLAYER_POINT, 0x7883, 3, 3, -1, -1);    // ----    this->BindObject(eNULL_MAP, 0x7884, 128, 128, -1, -1);    // ----    this->BindObject(eLORENCIA_MAP, 0x7885, 128, 128, -1, -1);    // ----    this->BindObject(eDUNGEON_MAP, 0x7886, 128, 128, -1, -1);    // ----    this->BindObject(eDEVIAS_MAP, 0x7887, 128, 128, -1, -1);    // ----    this->BindObject(eNORIA_MAP, 0x7888, 128, 128, -1, -1);    // ----    this->BindObject(eLOSTTOWER_MAP, 0x7889, 128, 128, -1, -1);    // ----    // Reserved 0x788A for EXILE    // ----    this->BindObject(eSTADIUM_MAP, 0x788B, 128, 128, -1, -1);    // ----    this->BindObject(eATLANS_MAP, 0x788C, 128, 128, -1, -1);}// ----------------------------------------------------------------------------------------------void Interface::Work(){	gObjUser.Refresh();	gCamera.Rotate();	gCamera.Position();	// ----	//#if defined __BEREZNUK__ || __MIX__ || __REEDLAN__ || __MUANGEL__ || __WHITE__ || __MEGAMU__ || __VIRNET__	gConnectEx.Run();	//#endif#ifdef __NOVUS__	gInterface.DrawCraftWindow();#endif#ifdef __MAKELO__	gInterface.DrawOffExpSwitch();#endif	//#ifdef __BEREZNUK__	gInterface.DrawTime();	//#endif	// ----	gInterface.DrawLifeBar();	gInterface.DrawCameraUI();	gInterface.DrawResetWindow();	gInterface.DrawNewsWindow();#ifdef __RMOS__	gInterface.DrawQuestDialog();#endif	// ----	pDrawInterface();}// ----------------------------------------------------------------------------------------------void Interface::LoadImages(){	pLoadImage("Custom\\Interface\\CameraUI_BG.tga", 0x787A, 0x2601, 0x2900, 1, 0);	pLoadImage("Custom\\Interface\\CameraUI_Switch.tga", 0x787B, 0x2601, 0x2900, 1, 0);	pLoadImage("Custom\\Interface\\CameraUI_Reset.tga", 0x787C, 0x2601, 0x2900, 1, 0);	pLoadImage("Custom\\Interface\\NewsBoard_Title.tga", 0x787D, 0x2601, 0x2900, 1, 0);	pLoadImage("Custom\\Interface\\MiniMapUI.tga", 0x7882, 0x2601, 0x2900, 1, 0);    // ----    pLoadImage("Custom\\Maps\\PlayerPoint.jpg", 0x7883, 0x2600, 0x2900, 1, 0);    // ----    pLoadImage("Custom\\Maps\\MiniMapNull.tga", 0x7884, 0x2601, 0x2900, 1, 0);    // --    pLoadImage("Custom\\Maps\\MiniMap0.tga", 0x7885, 0x2601, 0x2900, 1, 0);    // --    pLoadImage("Custom\\Maps\\MiniMap1.tga", 0x7886, 0x2601, 0x2900, 1, 0);    // --    pLoadImage("Custom\\Maps\\MiniMap2.tga", 0x7887, 0x2601, 0x2900, 1, 0);    // ----    pLoadImage("Custom\\Maps\\MiniMap3.tga", 0x7888, 0x2601, 0x2900, 1, 0);    // ----    pLoadImage("Custom\\Maps\\MiniMap4.tga", 0x7889, 0x2601, 0x2900, 1, 0);    // ----    // Exile Map 0x788A    // ----    pLoadImage("Custom\\Maps\\MiniMap6.tga", 0x788B, 0x2601, 0x2900, 1, 0);    // ----    pLoadImage("Custom\\Maps\\MiniMap7.tga", 0x788C, 0x2601, 0x2900, 1, 0);	//#ifdef __BEREZNUK__	//pLoadImage("Custom\\Interface\\TimeBar.tga", 0x787E, 0x2601, 0x2900, 1, 0);	//#endif#ifdef __MAKELO__	pLoadImage("Interface\\newui_pcroom.tga", 32513, 0x2601, 0x2900, 1, 0);#endif	// ----	pLoadSomeForm();}// ----------------------------------------------------------------------------------------------bool Interface::MiniMapCheck(){    if(this->CheckWindow(Inventory) ||        this->CheckWindow(CashShop) ||        this->CheckWindow(ChaosBox) ||        this->CheckWindow(Character) ||        this->CheckWindow(CommandWindow) ||        this->CheckWindow(ExpandInventory) ||        this->CheckWindow(ExpandWarehouse) ||        this->CheckWindow(FullMap) ||        this->CheckWindow(GensInfo) ||        this->CheckWindow(Guild) ||        this->CheckWindow(NPC_Dialog) ||        this->CheckWindow(NPC_Julia) ||        this->CheckWindow(NPC_Titus) ||        this->CheckWindow(OtherStore) ||        this->CheckWindow(Party) ||        this->CheckWindow(PetInfo) ||        this->CheckWindow(Shop) ||        this->CheckWindow(SkillTree) ||        this->CheckWindow(Store) ||        this->CheckWindow(Trade) ||        this->CheckWindow(Warehouse)         this->CheckWindow(FriendList) ||        this->CheckWindow(FastMenu) ||        this->CheckWindow(MuHelper) ||        this->CheckWindow(Quest) )        return true;    return false;}bool Interface::CombinedChecks(){    if( (this->CheckWindow(Inventory)         && this->CheckWindow(ExpandInventory)         && this->CheckWindow(Store)) ||         (this->CheckWindow(Inventory)         && this->CheckWindow(Warehouse)         && this->CheckWindow(ExpandWarehouse)) ||         (this->CheckWindow(Inventory)         && this->CheckWindow(Character)         && this->CheckWindow(Store)) )        return true;    return false;}void Interface::DrawMiniMapWindow(){    float MainWidth            = 138.0;    float MainHeight        = 265.0;    float StartY            = 264.0;    float StartX            = 512.0;    // ----    if( this->MiniMapCheck() || this->CombinedChecks() )    {        return;    }    // ----    switch(gObjUser.m_MapNumber)    {        case 0:    //Lorencia        {            this->DrawGUI(eLORENCIA_MAP, StartX, StartY + 30);        }        break;        // --        case 1:    //Dungeon        {            this->DrawGUI(eDUNGEON_MAP, StartX, StartY + 30);        }        break;        // --        case 2:    //Devias        {            this->DrawGUI(eDEVIAS_MAP, StartX, StartY + 30);        }        break;        // --        case 3:    //Noria        {            this->DrawGUI(eNORIA_MAP, StartX, StartY + 30);        }        break;        // --        case 4:    //LostTower        {            this->DrawGUI(eLOSTTOWER_MAP, StartX, StartY + 30);        }        break;        // --        case 5:    //Exile (disabled)        {            return;        }        break;        // --        case 6:    //Stadium        {            this->DrawGUI(eSTADIUM_MAP, StartX, StartY + 30);        }        break;        // --        case 7:    //Atlans        {            this->DrawGUI(eATLANS_MAP, StartX, StartY + 30);        }        break;        // --        default: //Default        {            this->DrawGUI(eNULL_MAP, StartX, StartY + 30);        }        break;    }    // ----    this->DrawGUI(eMINI_MAP_BG, StartX, StartY);    this->DrawGUI(ePLAYER_POINT, (float)(StartX - 1 + gObjUser.lpViewPlayer->MapPosX / 2), (float)(294 - 1 + ( 255 - gObjUser.lpViewPlayer->MapPosY ) / 2) );}// ----------------------------------------------------------------------------------------------void Interface::LoadModels(){#ifdef __NOVUS__	pLoadModel(406, "Data\\Custom\\Skill\\", "sign_gm", -1);	pLoadTexture(406, "Custom\\Skill\\", 0x2901, 0x2600, 1);	pLoadModel(407, "Data\\Custom\\Skill\\", "sign_em", -1);	pLoadTexture(407, "Custom\\Skill\\", 0x2901, 0x2600, 1);	pLoadModel(408, "Data\\Custom\\Skill\\", "sign_admin", -1);	pLoadTexture(408, "Data\\Custom\\Skill\\", 0x2901, 0x2600, 1);#endif	// ----	pInitModelData2();}// ----------------------------------------------------------------------------------------------void Interface::BindObject(short MonsterID, DWORD ModelID, float Width, float Height, float X, float Y){	this->Data[MonsterID].EventTick	= 0;	this->Data[MonsterID].OnClick	= false;	this->Data[MonsterID].OnShow	= false;	this->Data[MonsterID].ModelID	= ModelID;	this->Data[MonsterID].Width		= Width;	this->Data[MonsterID].Height	= Height;	this->Data[MonsterID].X			= X;	this->Data[MonsterID].Y			= Y;	this->Data[MonsterID].MaxX		= X + Width;	this->Data[MonsterID].MaxY		= Y + Height;	this->Data[MonsterID].Attribute	= 0;}// ----------------------------------------------------------------------------------------------void Interface::DrawLifeBar(){	DWORD CurrentTick	= GetTickCount();	DWORD Delay			= (CurrentTick - gObjUser.m_TargetUpdateTick);	// ----#ifdef __NOVUS__	if( gObjUser.m_TargetType != 2 )	{		return;	}#else	if( gObjUser.m_TargetType != 2 )	{		return;	}	// ----	if( gObjUser.lpViewTarget->m_Model.ObjectType != emMonster )	{		return;	}#endif	// ----	PMSG_TARGETDATA_REQ pRequest;	pRequest.h.set((LPBYTE)&pRequest, 0xFB, 7, sizeof(pRequest));	pRequest.aIndex = gObjUser.lpViewTarget->aIndex;	// ----	if( Delay >= 10 )	{		gProtocol.DataSend((LPBYTE)&pRequest, pRequest.h.size);	}	// ----	if( gObjUser.m_TargetLifePercent <= 0.0f )	{		return;	}	// ----	float BarWidth	= (148.5f / 100.0f) * gObjUser.m_TargetLifePercent;	// ----	pDrawGUI(0x7B3F, (MAX_WIN_WIDTH / 2) - 75.5, 0, 151, 8);	pDrawGUI(0x7B3F, (MAX_WIN_WIDTH / 2) - 75.5, 6.5, 151, 8);	pDrawGUI(0x7B40, (MAX_WIN_WIDTH / 2) - 74, 8.3, BarWidth, 4);	//pDrawColorButton(0x7B40, (MAX_WIN_WIDTH / 2) - 74, 8.3, BarWidth, 4, 0, 0, Color4f(255, 255, 0, 100 - ((BYTE)gObjUser.m_TargetLifePercent)));	// ----	this->DrawFormat(eOrange, (MAX_WIN_WIDTH / 2) - 74, 0.5, 148, 3, gObjUser.lpViewTarget->Name);	this->DrawFormat(eGold, (MAX_WIN_WIDTH / 2) - 74, 6, 148, 3, "%d%% / 100%%", (int)gObjUser.m_TargetLifePercent);#ifdef __NOVUS__	this->DrawFormat(eGold, gObjUser.m_CursorX + 25, gObjUser.m_CursorY - 10, 100, 1, "%d / %d", (int)gObjUser.m_TargetLife, (int)gObjUser.m_TargetMaxLife);#endif}// ----------------------------------------------------------------------------------------------void Interface::DrawSampleButton(){	float PosX = this->GetResizeX(eSAMPLEBUTTON);	// ----	if( this->CheckWindow(ObjWindow::CashShop) 		|| this->CheckWindow(ObjWindow::FullMap) 		|| this->CheckWindow(ObjWindow::SkillTree) 		|| this->CheckWindow(MoveList) )	{		return;	}	// ----	this->DrawGUI(eSAMPLEBUTTON, PosX, 1);	// ----	if( !IsWorkZone(eSAMPLEBUTTON) )	{		return;	}	// ----	this->DrawToolTip(PosX - 5, 31, "Button tooltip");	// ----	if( this->Data[eSAMPLEBUTTON].OnClick )	{		this->DrawColoredGUI(eSAMPLEBUTTON, PosX, 1, pMakeColor(40, 20, 3, 130));		return;	}	// ----	this->DrawColoredGUI(eSAMPLEBUTTON, PosX, 1, pMakeColor(255, 204, 20, 130));}// ----------------------------------------------------------------------------------------------void Interface::EventSampleButton(DWORD Event){	DWORD CurrentTick	= GetTickCount();	DWORD Delay			= (CurrentTick - this->Data[eSAMPLEBUTTON].EventTick);	// ----	if( this->CheckWindow(CashShop) || this->CheckWindow(FullMap) 		|| this->CheckWindow(SkillTree) || this->CheckWindow(MoveList) 		|| !IsWorkZone(eSAMPLEBUTTON) )	{		return;	}	// ----	if( Event == WM_LBUTTONDOWN )	{		this->Data[eSAMPLEBUTTON].OnClick = true;		return;	}	// ----	this->Data[eSAMPLEBUTTON].OnClick = false;	// ----	if( Delay < 500 )	{		return;	}	// ----	this->Data[eSAMPLEBUTTON].EventTick = GetTickCount();	// ----	if( !this->Data[eRANK_MAIN].OnShow )	{		this->Data[eRANK_MAIN].OnShow = true;	}	else	{		this->Data[eRANK_MAIN].OnShow = false;	}}// ----------------------------------------------------------------------------------------------void Interface::DrawCameraUI(){	float PosX = this->GetResizeX(eCAMERA_MAIN);	// ----	if( this->CheckWindow(CashShop)		||	this->CheckWindow(SkillTree)		||	this->CheckWindow(FullMap) 		||	this->CheckWindow(MoveList) 		||  (this->CheckWindow(Inventory) 		&& this->CheckWindow(ExpandInventory) 		&& this->CheckWindow(Store)) 		||  (this->CheckWindow(Inventory) 		&& this->CheckWindow(Warehouse) 		&& this->CheckWindow(ExpandWarehouse)) )	{		return;	}	// ----	this->DrawGUI(eCAMERA_MAIN, PosX, 0);	this->DrawGUI(eCAMERA_BUTTON1, PosX + 0.5, 1);	this->DrawGUI(eCAMERA_BUTTON2, PosX + 18.5, 1);	// ----	if( gCamera.IsActive )	{		this->DrawColoredGUI(eCAMERA_BUTTON1, PosX + 0.5, 1, eShinyGreen);	}	// ----	if( IsWorkZone(eCAMERA_BUTTON1) )	{		if( gCamera.IsActive )		{			this->DrawToolTip(PosX + 0.5 - 5, 25, "Zoom: %02.f%%", gCamera.ZoomPercent);		}		else		{			this->DrawToolTip(PosX + 0.5 - 5, 25, "3D Camera [On|Off]");		}		// ----		if( this->Data[eCAMERA_BUTTON1].OnClick )		{			this->DrawColoredGUI(eCAMERA_BUTTON1, PosX + 0.5, 1, pMakeColor(40, 20, 3, 130));			return;		}		// ----		this->DrawColoredGUI(eCAMERA_BUTTON1, PosX + 0.5, 1, pMakeColor(255, 204, 20, 200));	}	else if( IsWorkZone(eCAMERA_BUTTON2) )	{		this->DrawToolTip(PosX + 18.5 - 5, 25, "3D Camera [Reset]");		// ----		if( this->Data[eCAMERA_BUTTON2].OnClick )		{			this->DrawColoredGUI(eCAMERA_BUTTON2, PosX + 18.5, 1, pMakeColor(40, 20, 3, 130));			return;		}		// ----		this->DrawColoredGUI(eCAMERA_BUTTON2, PosX + 18.5, 1, pMakeColor(255, 204, 20, 200));	}	 if( gCamera.RestStop == true )	{        this->DrawColoredGUI(eCAMERA_BUTTON2, PosX + 18.5, 1, pMakeColor(255, 0, 0, 200));        this->DrawFormat(eOrange, PosX + 35.0, 25, 210, 3, "Restoring.. Camera");        this->DrawPictureAlpha("Custom\\Interface\\TimerClock.tga", PosX + 55.0, 15, 64, 64, 0, 0, 1.0f, 1.0f, 1);	}}// ----------------------------------------------------------------------------------------------void Interface::EventCameraUI(DWORD Event){	DWORD CurrentTick	= GetTickCount();	// ----	if( this->CheckWindow(CashShop)		||	this->CheckWindow(SkillTree)		||	this->CheckWindow(FullMap) 		||	this->CheckWindow(MoveList) 		||  (this->CheckWindow(Inventory) 		&& this->CheckWindow(ExpandInventory) 		&& this->CheckWindow(Store)) 		||  (this->CheckWindow(Inventory) 		&& this->CheckWindow(Warehouse) 		&& this->CheckWindow(ExpandWarehouse)) )	{		return;	}	// ----	if( IsWorkZone(eCAMERA_BUTTON1) )	{		DWORD Delay	= (CurrentTick - this->Data[eCAMERA_BUTTON1].EventTick);		// ----		if( Event == WM_LBUTTONDOWN )		{			this->Data[eCAMERA_BUTTON1].OnClick = true;			return;		}		// ----		this->Data[eCAMERA_BUTTON1].OnClick = false;		// ----		if( Delay < 500 )		{			return;		}		// ----		this->Data[eCAMERA_BUTTON1].EventTick = GetTickCount();		// ----		gCamera.Switch();	}	else if( IsWorkZone(eCAMERA_BUTTON2) )	{		DWORD Delay	= (CurrentTick - this->Data[eCAMERA_BUTTON2].EventTick);		// ----		if( Event == WM_LBUTTONDOWN )		{			this->Data[eCAMERA_BUTTON2].OnClick = true;			return;		}		// ----		this->Data[eCAMERA_BUTTON2].OnClick = false;		// ----		if( Delay < 500 )		{			return;		}		// ----		this->Data[eCAMERA_BUTTON2].EventTick = GetTickCount();		// ----		gCamera.Init();	}}// ----------------------------------------------------------------------------------------------void Interface::DrawOffExpSwitch(){	if(	this->CheckWindow(CashShop)		||	this->CheckWindow(SkillTree)		||	this->CheckWindow(FullMap)  		||  this->CheckWindow(Inventory) 		||  this->CheckWindow(Character)		||  this->CheckWindow(CommandWindow)		||  this->CheckWindow(Party)		||  this->CheckWindow(Guild) 		||  this->CheckWindow(GensInfo) 		|| gObjUser.lpViewPlayer->InSafeZone )	{		return;	}	// ----	this->DrawGUI(eOFFEXP_SWITCH, MAX_WIN_WIDTH-57, 0);	// ----	if( IsWorkZone(eOFFEXP_SWITCH) )	{		this->DrawToolTip(MAX_WIN_WIDTH-55, 25, "Offline Mode");		// ----		if( this->Data[eOFFEXP_SWITCH].OnClick )		{			this->DrawColoredGUI(eOFFEXP_SWITCH, MAX_WIN_WIDTH-57, 0, pMakeColor(40, 20, 3, 130));			return;		}		// ----		this->DrawColoredGUI(eOFFEXP_SWITCH, MAX_WIN_WIDTH-57, 0, pMakeColor(255, 204, 20, 200));	}	// ----	this->DrawFormat(eBrown, MAX_WIN_WIDTH-52, 8, 55, 1, "OffExp");}// ----------------------------------------------------------------------------------------------void Interface::EventOffExpSwitch(DWORD Event){	DWORD CurrentTick	= GetTickCount();	DWORD Delay			= (CurrentTick - this->Data[eOFFEXP_SWITCH].EventTick);	// ----	if(	!IsWorkZone(eOFFEXP_SWITCH)		||	this->CheckWindow(CashShop)		||	this->CheckWindow(SkillTree)		||	this->CheckWindow(FullMap)  		||  this->CheckWindow(Inventory) 		||  this->CheckWindow(Character)		||  this->CheckWindow(CommandWindow)		||  this->CheckWindow(Party)		||  this->CheckWindow(Guild)		||  this->CheckWindow(GensInfo) 		|| gObjUser.lpViewPlayer->InSafeZone )	{		return;	}	// ----	if( Event == WM_LBUTTONDOWN )	{		this->Data[eOFFEXP_SWITCH].OnClick = true;		return;	}	// ----	this->Data[eOFFEXP_SWITCH].OnClick = false;	// ----	if( Delay < 500 )	{		return;	}	// ----	this->Data[eOFFEXP_SWITCH].EventTick = GetTickCount();	// ----	OFFLINEATTACK_REQ pRequest;	pRequest.h.set((LPBYTE)&pRequest, 0xFB, 11, sizeof(pRequest));	pRequest.MagicNumber = gObjUser.GetActiveSkill();	gProtocol.DataSend((LPBYTE)&pRequest, pRequest.h.size);}// ----------------------------------------------------------------------------------------------void Interface::DrawCraftWindow(){	if( !this->Data[eCRAFT_MAIN].OnShow )	{		return;	}	// ----	float MainWidth			= 230.0;	float MainHeight		= 313.0;	float StartY			= 100.0;	float StartX			= (MAX_WIN_WIDTH / 2) - (MainWidth / 2);	float MainCenter		= StartX + (MainWidth / 3);	float ButtonX			= MainCenter - (29.0 / 2);	DWORD TabTextColor[5]	= { eWhite180, eWhite180, eWhite180, eWhite180, eWhite180 };	// ----	this->DrawGUI(eCRAFT_MAIN, StartX, StartY + 2);	this->DrawGUI(eCRAFT_TITLE, StartX, StartY);	StartY = this->DrawRepeatGUI(eCRAFT_FRAME, StartX, StartY + 67.0, 13);	this->DrawGUI(eCRAFT_FOOTER, StartX, StartY);	this->DrawGUI(eCRAFT_TAB1, StartX + 5, 153);	this->DrawGUI(eCRAFT_TAB2, StartX + 5 + this->Data[eCRAFT_TAB1].Width, 153);	this->DrawGUI(eCRAFT_TAB3, StartX + 5 + this->Data[eCRAFT_TAB1].Width * 2, 153);	this->DrawGUI(eCRAFT_TAB4, StartX + 5 + this->Data[eCRAFT_TAB1].Width * 3, 153);	this->DrawGUI(eCRAFT_CLOSE, StartX + MainWidth - this->Data[eCRAFT_CLOSE].Width, this->Data[eCRAFT_TITLE].Height + this->Data[eCRAFT_CLOSE].Height + 2);	// ----	if( this->IsWorkZone(eCRAFT_CLOSE) )	{		this->DrawToolTip(this->Data[eCRAFT_CLOSE].X + 5, this->Data[eCRAFT_CLOSE].Y + 25, "Close");	}	// ----	for( int i = eCRAFT_TAB1; i < eCRAFT_CLOSE + 1; i++ )	{		if( this->IsWorkZone(i) )		{			DWORD Color = eGray100;			// ----			if( this->Data[i].OnClick )			{				Color = eGray150;			}			// ----			TabTextColor[i - eCRAFT_TAB1] = eWhite;			this->DrawColoredGUI(i, this->Data[i].X, this->Data[i].Y, Color);			break;		}	}	// ----	this->DrawFormat(eGold, StartX + 10, 110, 210, 3, "Craft Master");	this->DrawFormat(eOrange, StartX + 10, 135, 210, 3, "Select category:");	this->DrawFormat(TabTextColor[0], Data[eCRAFT_TAB1].X, Data[eCRAFT_TAB1].Y + 7, Data[eCRAFT_TAB1].Width, 3, "Main");	this->DrawFormat(TabTextColor[1], Data[eCRAFT_TAB2].X, Data[eCRAFT_TAB2].Y + 7, Data[eCRAFT_TAB2].Width, 3, "Quest");	this->DrawFormat(TabTextColor[2], Data[eCRAFT_TAB3].X, Data[eCRAFT_TAB3].Y + 7, Data[eCRAFT_TAB3].Width, 3, "Weekly");	this->DrawFormat(TabTextColor[3], Data[eCRAFT_TAB4].X, Data[eCRAFT_TAB4].Y + 7, Data[eCRAFT_TAB4].Width, 3, "Reset");	// ----	if( this->Data[eCRAFT_MAIN].Attribute )	{		short Object = this->Data[eCRAFT_MAIN].Attribute + eCRAFT_TAB1 - 1;		this->DrawColoredGUI(Object, this->Data[Object].X, this->Data[Object].Y, eGray150);		// ----		switch(this->Data[eCRAFT_MAIN].Attribute)		{		case 1:			this->FillCraftTab1();			break;			// --		case 2:			this->FillCraftTab2();			break;			// --		case 3:			this->FillCraftTab3();			break;			// --		case 4:			this->FillCraftTab4();			break;		}	}	else	{		this->DrawFormat(eGold, StartX + 10, 195, 210, 3, "Hello dear %s!", gObjUser.lpPlayer->Name);		this->DrawFormat(eWhite, StartX + 10, 205, 210, 3, "My name is Craft Master, i'm legendary teacher of craft.\nIf you make my first simple quest maybe i will take you to the my students.", gObjUser.lpPlayer->Name);	}	// ----	this->DrawGUI(eCRAFT_DIV, StartX, 166);}// ----------------------------------------------------------------------------------------------void Interface::FillCraftTab1(){	float MainWidth		= 230.0;	float StartX		= (MAX_WIN_WIDTH / 2) - (MainWidth / 2);	// ----	this->DrawGUI(eCRAFT_INFOBG, StartX + 30, 190);	this->DrawFormat(eGold, StartX + 35, 195, 70, 3, "Level");	this->DrawFormat(eWhite, StartX + 135, 195, 70, 1, "%d", gObjUser.m_CraftLevel);	// ----	this->DrawGUI(eCRAFT_INFOBG, StartX + 30, 210);	this->DrawFormat(eGold, StartX + 35, 215, 70, 3, "Craft Rate");	this->DrawFormat(eWhite, StartX + 135, 215, 70, 1, "+%d%%", gObjUser.m_CraftLevel);	// ----	this->DrawGUI(eCRAFT_INFOBG, StartX + 30, 230);	this->DrawFormat(eGold, StartX + 35, 235, 70, 3, "Stage");	this->DrawFormat(eWhite, StartX + 135, 235, 70, 1, "%d / %d", gObjUser.m_CraftStage, MAX_CRAFT_LEVEL);	// ----	this->DrawGUI(eCRAFT_INFOBG, StartX + 30, 250);	this->DrawFormat(eGold, StartX + 35, 255, 70, 3, "Quest");	this->DrawFormat(eWhite, StartX + 135, 255, 70, 1, "%d / %d", gObjUser.m_CraftQuest, gCraftSystem.m_StageData[gObjUser.m_CraftStage].QuestCount);	// ----	if( gCraftSystem.IsNotCrafter() )	{		this->DrawFormat(eOrange, StartX + 10, 280, 210, 3, "You do not come into the craft world!");		this->DrawFormat(eWhite, StartX + 10, 290, 210, 3, "You can get first quest and start your career,\nevery craft level will give you bonus percent of success\ncreate item rate in chaos machine!");	}}// ----------------------------------------------------------------------------------------------void Interface::FillCraftTab2(){	float StartX		= (MAX_WIN_WIDTH / 2) - (230.0 / 2);	DWORD ItemNameColor	= eWhite;	float MainCenter	= StartX + (230.0 / 3);	float ButtonX		= MainCenter - (34.0 / 2);	// ----	if( gCraftSystem.m_StageData[gObjUser.m_CraftStage].QuestCount <= 0 )	{		this->DrawFormat(eOrange, StartX, 185, 210, 3, "Sorry, but now i don't have weekly quest for you.");		this->DrawFormat(eOrange, StartX, 195, 210, 3, "Try return a little later.");		return;	}	// ----	this->DrawFormat(eBlue, StartX, 183, 210, 3, "'%s'", gCraftSystem.m_StageData[gObjUser.m_CraftStage].StageName);	this->DrawFormat(eYellow, StartX, 190, 210, 3, "Quest %d: '%s'", gObjUser.m_CraftQuest + 1, gCraftSystem.m_StageData[gObjUser.m_CraftStage].QuestData[gObjUser.m_CraftQuest].QuestName);	this->DrawGUI(eCRAFT_DIV, StartX, 195);	this->DrawFormat(eGold, StartX + 30, 215, 210, 1, "Required Level:");	// ----	if( gObjUser.lpPlayer->Level < gCraftSystem.m_StageData[gObjUser.m_CraftStage].ReqLevel )	{		this->DrawFormat(eRed, StartX + 30, 225, 210, 1, "- %d (Your: %d)",			gCraftSystem.m_StageData[gObjUser.m_CraftStage].ReqLevel, gObjUser.lpPlayer->Level);	}	else	{		this->DrawFormat(eWhite, StartX + 30, 225, 210, 1, "- %d",			gCraftSystem.m_StageData[gObjUser.m_CraftStage].ReqLevel);	}	// ----	this->DrawFormat(eGold, StartX + 30, 240, 210, 1, "Required Reset:");	// ----	if( gObjUser.m_Reset < gCraftSystem.m_StageData[gObjUser.m_CraftStage].ReqReset )	{		this->DrawFormat(eRed, StartX + 30, 250, 210, 1, "- %d (Your: %d)",			gCraftSystem.m_StageData[gObjUser.m_CraftStage].ReqReset, gObjUser.m_Reset);	}	else	{		this->DrawFormat(eWhite, StartX + 30, 250, 210, 1, "- %d",			gCraftSystem.m_StageData[gObjUser.m_CraftStage].ReqReset);	}	// ----	this->DrawFormat(eGold, StartX + 30, 265, 210, 1, "Required Items:");	// ----	for( int i = 0; i < gCraftSystem.m_StageData[gObjUser.m_CraftStage].QuestData[gObjUser.m_CraftQuest].ItemCount; i++ )	{		char ItemNameBuff[150], LevelBuff[25], OptionBuff[25];		// ----		ZeroMemory(ItemNameBuff, sizeof(ItemNameBuff));		// ----		if( gCraftSystem.m_StageData[gObjUser.m_CraftStage].QuestData[gObjUser.m_CraftQuest].ItemData[i].IsCrafted )		{			strcat(ItemNameBuff, "Crafted ");			ItemNameColor = eOrange;		}		// ----		if( gCraftSystem.m_StageData[gObjUser.m_CraftStage].QuestData[gObjUser.m_CraftQuest].ItemData[i].IsExcellent )		{			strcat(ItemNameBuff, "Excellent ");			ItemNameColor = eExcellent;		}		// ----		if( gCraftSystem.m_StageData[gObjUser.m_CraftStage].QuestData[gObjUser.m_CraftQuest].ItemData[i].IsAncient )		{			strcat(ItemNameBuff, "Ancient ");			ItemNameColor = eAncient;		}		// ----		if( gCraftSystem.m_StageData[gObjUser.m_CraftStage].QuestData[gObjUser.m_CraftQuest].ItemData[i].IsSocket )		{			strcat(ItemNameBuff, "Socket ");			ItemNameColor = eSocket;		}		// ----		strcat(ItemNameBuff, (char*)(*(DWORD*)0x8128AC0 + 84 * 			gCraftSystem.m_StageData[gObjUser.m_CraftStage].QuestData[gObjUser.m_CraftQuest].ItemData[i].ID));		// ----		if( gCraftSystem.m_StageData[gObjUser.m_CraftStage].QuestData[gObjUser.m_CraftQuest].ItemData[i].MinLevel 			== gCraftSystem.m_StageData[gObjUser.m_CraftStage].QuestData[gObjUser.m_CraftQuest].ItemData[i].MaxLevel )		{			ZeroMemory(LevelBuff, sizeof(LevelBuff));			sprintf(LevelBuff, " [+%d, ", gCraftSystem.m_StageData[gObjUser.m_CraftStage].QuestData[gObjUser.m_CraftQuest].ItemData[i].MinLevel);			strcat(ItemNameBuff, LevelBuff);		}		else		{			ZeroMemory(LevelBuff, sizeof(LevelBuff));			sprintf(LevelBuff, " [+%d~%d, ", 				gCraftSystem.m_StageData[gObjUser.m_CraftStage].QuestData[gObjUser.m_CraftQuest].ItemData[i].MinLevel,				gCraftSystem.m_StageData[gObjUser.m_CraftStage].QuestData[gObjUser.m_CraftQuest].ItemData[i].MaxLevel);			strcat(ItemNameBuff, LevelBuff);		}		// ----		if( gCraftSystem.m_StageData[gObjUser.m_CraftStage].QuestData[gObjUser.m_CraftQuest].ItemData[i].MinOption 			== gCraftSystem.m_StageData[gObjUser.m_CraftStage].QuestData[gObjUser.m_CraftQuest].ItemData[i].MaxOption )		{			ZeroMemory(OptionBuff, sizeof(OptionBuff));			sprintf(OptionBuff, "+%d] ", gCraftSystem.m_StageData[gObjUser.m_CraftStage].QuestData[gObjUser.m_CraftQuest].ItemData[i].MinOption * 4);			strcat(ItemNameBuff, OptionBuff);		}		else		{			ZeroMemory(OptionBuff, sizeof(OptionBuff));			sprintf(OptionBuff, "+%d~%d] ", 				gCraftSystem.m_StageData[gObjUser.m_CraftStage].QuestData[gObjUser.m_CraftQuest].ItemData[i].MinOption * 4,				gCraftSystem.m_StageData[gObjUser.m_CraftStage].QuestData[gObjUser.m_CraftQuest].ItemData[i].MaxOption * 4);			strcat(ItemNameBuff, OptionBuff);		}		// ----		if( gCraftSystem.m_StageData[gObjUser.m_CraftStage].QuestData[gObjUser.m_CraftQuest].ItemData[i].IsLuck == 0 )		{			strcat(ItemNameBuff, "+ Without Luck ");		}		else if( gCraftSystem.m_StageData[gObjUser.m_CraftStage].QuestData[gObjUser.m_CraftQuest].ItemData[i].IsLuck == 1 )		{			strcat(ItemNameBuff, "+ Luck ");		}		// ----		if( gCraftSystem.m_StageData[gObjUser.m_CraftStage].QuestData[gObjUser.m_CraftQuest].ItemData[i].IsSkill == 0 )		{			strcat(ItemNameBuff, "+ Without Skill");		}		else if( gCraftSystem.m_StageData[gObjUser.m_CraftStage].QuestData[gObjUser.m_CraftQuest].ItemData[i].IsSkill == 1 )		{			strcat(ItemNameBuff, "+ Skill");		}		// ----		if( !gObjUser.m_CraftItemCheck[i] )		{			pDrawGUI(0x7BC4, StartX + 22.0, 276 + (i * 8), 7.0, 7.0);			//this->DrawFormat(eRed, StartX + 15, 275 + (i * 8), 210, 1, "[NO]");		}		else		{			pDrawGUI(0x7BC1, StartX + 22.0, 276 + (i * 8), 7.0, 7.0);			//this->DrawFormat(eExcellent, StartX + 15, 275 + (i * 8), 210, 1, "[OK]");		}		// ----		this->DrawFormat(ItemNameColor, StartX + 30, 275 + (i * 8), 210, 1, ItemNameBuff);	}	// ----	this->DrawFormat(eGold, StartX + 30, 320, 210, 1, "Required Zen:");	this->DrawGUI(eCRAFT_MONEYBG, StartX + 30, 330);	// ----	char MoneyBuff[50], MoneyBuff2[50];	ZeroMemory(MoneyBuff, sizeof(MoneyBuff));	ZeroMemory(MoneyBuff2, sizeof(MoneyBuff2));	// ----	if( !gCraftSystem.CheckQuestReq() )	{		pGetMoneyFormat((double)gCraftSystem.m_StageData[gObjUser.m_CraftStage].QuestData[gObjUser.m_CraftQuest].ReqMoney, 			MoneyBuff, 0);		pGetMoneyFormat((double)gCraftSystem.m_StageData[gObjUser.m_CraftStage].QuestData[gObjUser.m_CraftQuest].ReqMoney - gObjUser.lpPlayer->MoneyInventory, 			MoneyBuff2, 0);		this->DrawFormat(eRed, StartX + 70, 334, 170, 1, "%s\n(Need still %s)", 			MoneyBuff, MoneyBuff2);	}	else	{		pGetMoneyFormat((double)gCraftSystem.m_StageData[gObjUser.m_CraftStage].QuestData[gObjUser.m_CraftQuest].ReqMoney, 			MoneyBuff, 0);		this->DrawFormat(eGold, StartX + 70, 337, 70, 1, "%s", 			MoneyBuff);	}	// ----	this->DrawGUI(eCRAFT_FINISH, ButtonX, this->Data[eCRAFT_FOOTER].Y + 10);	this->DrawFormat(eWhite, StartX + 8, this->Data[eCRAFT_FOOTER].Y + 20, 210, 3, "Finish Quest");	// ----	this->DrawGUI(eCRAFT_DIV, StartX, this->Data[eCRAFT_FOOTER].Y - 10);	// ----	if( !gCraftSystem.CheckAllReq() )	{		this->Data[eCRAFT_FINISH].Attribute = false;		this->DrawColoredGUI(eCRAFT_FINISH, this->Data[eCRAFT_FINISH].X, this->Data[eCRAFT_FINISH].Y, eGray150);		return;	}	// ----	this->Data[eCRAFT_FINISH].Attribute = true;	// ----	if( IsWorkZone(eCRAFT_FINISH) )	{		DWORD Color = eGray100;		// ----		if( this->Data[eCRAFT_FINISH].OnClick )		{			Color = eGray150;		}		// ----		this->DrawColoredGUI(eCRAFT_FINISH, this->Data[eCRAFT_FINISH].X, this->Data[eCRAFT_FINISH].Y, Color);	}}// ----------------------------------------------------------------------------------------------void Interface::FillCraftTab3(){	float StartX = (MAX_WIN_WIDTH / 2) - (230.0 / 2);	// ----	this->DrawFormat(eOrange, StartX, 185, 210, 3, "Sorry, but now i don't have weekly quest for you.");	this->DrawFormat(eOrange, StartX, 195, 210, 3, "Try return a little later.");}// ----------------------------------------------------------------------------------------------void Interface::FillCraftTab4(){	float StartX = (MAX_WIN_WIDTH / 2) - (230.0 / 2);	// ----	this->DrawFormat(eOrange, StartX, 185, 210, 3, "Sorry, but now i can't reset your career.");	this->DrawFormat(eOrange, StartX, 195, 210, 3, "Try return a little later.");}// ----------------------------------------------------------------------------------------------bool Interface::EventCraftWindow_Main(DWORD Event){	this->EventCraftWindow_TabControl(Event);	this->EventCraftWindow_Close(Event);	this->EventCraftWindow_Finish(Event);	return true;}// ----------------------------------------------------------------------------------------------bool Interface::EventCraftWindow_TabControl(DWORD Event){	DWORD CurrentTick	= GetTickCount();	DWORD Delay			= (CurrentTick - this->Data[eCRAFT_MAIN].EventTick);	BYTE TabType		= 0;	short Object		= 0;	// ----	for( int i = eCRAFT_TAB1; i < eCRAFT_TAB4 + 1; i++ )	{		if( IsWorkZone(i) )		{			TabType = i - eCRAFT_TAB1 + 1;			Object	= i;			break;		}	}	// ----	if( !this->Data[eCRAFT_MAIN].OnShow || !TabType )	{		return false;	}	// ----	if( Event == WM_LBUTTONDOWN )	{		this->Data[Object].OnClick = true;		return true;	}	// ----	this->Data[Object].OnClick = false;	// ----	if( Delay < 100 )	{		return false;	}	// ----	this->Data[eCRAFT_MAIN].EventTick = GetTickCount();	this->Data[eCRAFT_MAIN].Attribute = TabType;	// ----	return false;}// ----------------------------------------------------------------------------------------------bool Interface::EventCraftWindow_Close(DWORD Event){	DWORD CurrentTick	= GetTickCount();	DWORD Delay			= (CurrentTick - this->Data[eCRAFT_CLOSE].EventTick);	// ----	if( !this->Data[eCRAFT_MAIN].OnShow || !IsWorkZone(eCRAFT_CLOSE) )	{		return false;	}	// ----	if( Event == WM_LBUTTONDOWN )	{		this->Data[eCRAFT_CLOSE].OnClick = true;		return true;	}	// ----	this->Data[eCRAFT_CLOSE].OnClick = false;	// ----	if( Delay < 500 )	{		return false;	}	// ----	this->Data[eCRAFT_CLOSE].EventTick = GetTickCount();	this->CloseCraftWindow();	// ----	return false;}// ----------------------------------------------------------------------------------------------bool Interface::EventCraftWindow_Finish(DWORD Event){	DWORD CurrentTick	= GetTickCount();	DWORD Delay			= (CurrentTick - this->Data[eCRAFT_FINISH].EventTick);	// ----	if( !this->Data[eCRAFT_MAIN].OnShow || !IsWorkZone(eCRAFT_FINISH) 		|| !this->Data[eCRAFT_FINISH].Attribute )	{		return false;	}	// ----	if( Event == WM_LBUTTONDOWN )	{		this->Data[eCRAFT_FINISH].OnClick = true;		return true;	}	// ----	this->Data[eCRAFT_FINISH].OnClick = false;	// ----	if( Delay < 500 )	{		return false;	}	// ----	this->Data[eCRAFT_FINISH].EventTick = GetTickCount();	gCraftSystem.ReqQuestFinish();	// ----	return false;}// ----------------------------------------------------------------------------------------------void Interface::DrawResetWindow(){	if( !this->Data[eRESET_MAIN].OnShow )	{		return;	}	// ----	DWORD ItemNameColor		= eWhite;	float MainWidth			= 230.0;	float MainHeight		= 313.0;	float StartY			= 100.0;	float StartX			= (MAX_WIN_WIDTH / 2) - (MainWidth / 2);	float MainCenter		= StartX + (MainWidth / 3);	float ButtonX			= MainCenter - (29.0 / 2);	// ----	this->DrawGUI(eRESET_MAIN, StartX, StartY + 2);	this->DrawGUI(eRESET_TITLE, StartX, StartY);	StartY = this->DrawRepeatGUI(eRESET_FRAME, StartX, StartY + 67.0, 13);	this->DrawGUI(eRESET_FOOTER, StartX, StartY);	this->DrawGUI(eRESET_CLOSE, StartX + MainWidth - this->Data[eRESET_CLOSE].Width, this->Data[eRESET_TITLE].Height + this->Data[eRESET_CLOSE].Height + 2);	// ----	if( this->IsWorkZone(eRESET_CLOSE) )	{		DWORD Color = eGray100;		// ----		if( this->Data[eRESET_CLOSE].OnClick )		{			Color = eGray150;		}		// ----		this->DrawColoredGUI(eRESET_CLOSE, this->Data[eRESET_CLOSE].X, this->Data[eRESET_CLOSE].Y, Color);		this->DrawToolTip(this->Data[eRESET_CLOSE].X + 5, this->Data[eRESET_CLOSE].Y + 25, "Close");	}	// ----	this->DrawFormat(eGold, StartX + 10, 110, 210, 3, "Reset Master");	// ----	this->DrawGUI(eRESET_INFOBG, StartX + 30, 140);	this->DrawFormat(eGold, StartX + 35, 145, 70, 3, "Next Reset:");	this->DrawFormat(eWhite, StartX + 135, 145, 70, 1, "%d", gObjUser.m_Reset + 1);	this->DrawGUI(eRESET_INFOBG, StartX + 30, 160);	this->DrawFormat(eGold, StartX + 35, 165, 70, 3, "Reward Points:");	this->DrawFormat(eWhite, StartX + 135, 165, 70, 1, "%d", gResetSystem.m_GroupData[gResetSystem.GetResetGroup()].RewardData[gObjUser.lpPlayer->Class&7].LevelPoint * (gObjUser.m_Reset + 1));	// ----	this->DrawGUI(eRESET_DIV, StartX, 185);	// ----	this->DrawFormat(eGold, StartX + 30, 215, 210, 1, "Required Level:");	// ----	if( gObjUser.lpPlayer->Level < gResetSystem.m_GroupData[gResetSystem.GetResetGroup()].ReqLevel )	{		this->DrawFormat(eRed, StartX + 30, 225, 210, 1, "- %d (Your: %d)",			gResetSystem.m_GroupData[gResetSystem.GetResetGroup()].ReqLevel, gObjUser.lpPlayer->Level);	}	else	{		this->DrawFormat(eWhite, StartX + 30, 225, 210, 1, "- %d",			gResetSystem.m_GroupData[gResetSystem.GetResetGroup()].ReqLevel);	}	// ----	this->DrawFormat(eGold, StartX + 30, 240, 210, 1, "Required Items:");	// ----	for( int i = 0; i < gResetSystem.m_GroupData[gResetSystem.GetResetGroup()].ItemCount; i++ )	{		char ItemNameBuff[150], LevelBuff[25], OptionBuff[25];		// ----		ZeroMemory(ItemNameBuff, sizeof(ItemNameBuff));		// ----		if( gResetSystem.m_GroupData[gResetSystem.GetResetGroup()].ItemData[i].IsExcellent )		{			strcat(ItemNameBuff, "Excellent ");			ItemNameColor = eExcellent;		}		// ----		if( gResetSystem.m_GroupData[gResetSystem.GetResetGroup()].ItemData[i].IsAncient )		{			strcat(ItemNameBuff, "Ancient ");			ItemNameColor = eAncient;		}		// ----		if( gResetSystem.m_GroupData[gResetSystem.GetResetGroup()].ItemData[i].IsSocket )		{			strcat(ItemNameBuff, "Socket ");			ItemNameColor = eSocket;		}		// ----		strcat(ItemNameBuff, (char*)(*(DWORD*)0x8128AC0 + 84 * 			gResetSystem.m_GroupData[gResetSystem.GetResetGroup()].ItemData[i].ID));		// ----		if( gResetSystem.m_GroupData[gResetSystem.GetResetGroup()].ItemData[i].MinLevel 			== gResetSystem.m_GroupData[gResetSystem.GetResetGroup()].ItemData[i].MaxLevel )		{			ZeroMemory(LevelBuff, sizeof(LevelBuff));			sprintf(LevelBuff, " [+%d, ", gResetSystem.m_GroupData[gResetSystem.GetResetGroup()].ItemData[i].MinLevel);			strcat(ItemNameBuff, LevelBuff);		}		else		{			ZeroMemory(LevelBuff, sizeof(LevelBuff));			sprintf(LevelBuff, " [+%d~%d, ", 				gResetSystem.m_GroupData[gResetSystem.GetResetGroup()].ItemData[i].MinLevel,				gResetSystem.m_GroupData[gResetSystem.GetResetGroup()].ItemData[i].MaxLevel);			strcat(ItemNameBuff, LevelBuff);		}		// ----		if( gResetSystem.m_GroupData[gResetSystem.GetResetGroup()].ItemData[i].MinOption 			== gResetSystem.m_GroupData[gResetSystem.GetResetGroup()].ItemData[i].MaxOption )		{			ZeroMemory(OptionBuff, sizeof(OptionBuff));			sprintf(OptionBuff, "+%d] ", gResetSystem.m_GroupData[gResetSystem.GetResetGroup()].ItemData[i].MinOption * 4);			strcat(ItemNameBuff, OptionBuff);		}		else		{			ZeroMemory(OptionBuff, sizeof(OptionBuff));			sprintf(OptionBuff, "+%d~%d] ", 				gResetSystem.m_GroupData[gResetSystem.GetResetGroup()].ItemData[i].MinOption * 4,				gResetSystem.m_GroupData[gResetSystem.GetResetGroup()].ItemData[i].MaxOption * 4);			strcat(ItemNameBuff, OptionBuff);		}		// ----		if( gResetSystem.m_GroupData[gResetSystem.GetResetGroup()].ItemData[i].IsLuck == 0 )		{			strcat(ItemNameBuff, "+ Without Luck ");		}		else if( gResetSystem.m_GroupData[gResetSystem.GetResetGroup()].ItemData[i].IsLuck == 1 )		{			strcat(ItemNameBuff, "+ Luck ");		}		// ----		if( gResetSystem.m_GroupData[gResetSystem.GetResetGroup()].ItemData[i].IsSkill == 0 )		{			strcat(ItemNameBuff, "+ Without Skill");		}		else if( gResetSystem.m_GroupData[gResetSystem.GetResetGroup()].ItemData[i].IsSkill == 1 )		{			strcat(ItemNameBuff, "+ Skill");		}		// ----		if( !gObjUser.m_ResetItemCheck[i] )		{			pDrawGUI(0x7BC4, StartX + 22.0, 251 + (i * 8), 7.0, 7.0);		}		else		{			pDrawGUI(0x7BC1, StartX + 22.0, 251 + (i * 8), 7.0, 7.0);		}		// ----		this->DrawFormat(ItemNameColor, StartX + 30, 250 + (i * 8), 210, 1, ItemNameBuff);	}	// ----	if( gResetSystem.m_GroupData[gResetSystem.GetResetGroup()].ItemCount <= 0 )	{		this->DrawFormat(eWhite, StartX + 30, 250, 210, 1, "- None");	}	// ----	this->DrawFormat(eGold, StartX + 30, 295, 210, 1, "Required Zen:");	this->DrawGUI(eCRAFT_MONEYBG, StartX + 30, 305);	// ----	char MoneyBuff[50], MoneyBuff2[50];	ZeroMemory(MoneyBuff, sizeof(MoneyBuff));	ZeroMemory(MoneyBuff2, sizeof(MoneyBuff2));	// ----	if( gObjUser.lpPlayer->MoneyInventory 		< gResetSystem.m_GroupData[gResetSystem.GetResetGroup()].ReqMoney )	{		pGetMoneyFormat((double)gResetSystem.GetResetMoney(), 			MoneyBuff, 0);		pGetMoneyFormat((double)gResetSystem.GetResetMoney() - gObjUser.lpPlayer->MoneyInventory, 			MoneyBuff2, 0);		this->DrawFormat(eRed, StartX + 70, 309, 170, 1, "%s\n(Need still %s)", 			MoneyBuff, MoneyBuff2);	}	else	{		pGetMoneyFormat((double)gResetSystem.GetResetMoney(), 			MoneyBuff, 0);		this->DrawFormat(eGold, StartX + 70, 312, 70, 1, "%s", 			MoneyBuff);	}	// ----	this->DrawFormat(eRed, StartX + 10, 340, 210, 3, "Warning!", MoneyBuff, MoneyBuff2);	this->DrawFormat(eBlue, StartX + 10, 348, 210, 3, "Before make reset you need remove all items from inventory", MoneyBuff, MoneyBuff2);	// ----	this->DrawGUI(eRESET_FINISH, ButtonX, this->Data[eRESET_FOOTER].Y + 10);	this->DrawFormat(eWhite, StartX + 8, this->Data[eRESET_FOOTER].Y + 20, 210, 3, "Make Reset");	this->DrawGUI(eRESET_DIV, StartX, this->Data[eRESET_FOOTER].Y - 10);	// ----	if( !gResetSystem.CheckAllReq() )	{		this->Data[eRESET_FINISH].Attribute = false;		this->DrawColoredGUI(eRESET_FINISH, this->Data[eRESET_FINISH].X, this->Data[eRESET_FINISH].Y, eGray150);		return;	}	// ----	this->Data[eRESET_FINISH].Attribute = true;	// ----	if( IsWorkZone(eRESET_FINISH) )	{		DWORD Color = eGray100;		// ----		if( this->Data[eRESET_FINISH].OnClick )		{			Color = eGray150;		}		// ----		this->DrawColoredGUI(eRESET_FINISH, this->Data[eRESET_FINISH].X, this->Data[eRESET_FINISH].Y, Color);	}}// ----------------------------------------------------------------------------------------------bool Interface::EventResetWindow_Main(DWORD Event){	this->EventResetWindow_Close(Event);	this->EventResetWindow_Finish(Event);	return true;}// ----------------------------------------------------------------------------------------------bool Interface::EventResetWindow_Close(DWORD Event){	DWORD CurrentTick	= GetTickCount();	DWORD Delay			= (CurrentTick - this->Data[eRESET_CLOSE].EventTick);	// ----	if( !this->Data[eRESET_MAIN].OnShow || !IsWorkZone(eRESET_CLOSE) )	{		return false;	}	// ----	if( Event == WM_LBUTTONDOWN )	{		this->Data[eRESET_CLOSE].OnClick = true;		return true;	}	// ----	this->Data[eRESET_CLOSE].OnClick = false;	// ----	if( Delay < 500 )	{		return false;	}	// ----	this->Data[eRESET_CLOSE].EventTick = GetTickCount();	this->CloseResetWindow();	// ----	return false;}// ----------------------------------------------------------------------------------------------bool Interface::EventResetWindow_Finish(DWORD Event){	DWORD CurrentTick	= GetTickCount();	DWORD Delay			= (CurrentTick - this->Data[eRESET_FINISH].EventTick);	// ----	if( !this->Data[eRESET_MAIN].OnShow || !IsWorkZone(eRESET_FINISH) 		|| !this->Data[eRESET_FINISH].Attribute )	{		return false;	}	// ----	if( Event == WM_LBUTTONDOWN )	{		this->Data[eRESET_FINISH].OnClick = true;		return true;	}	// ----	this->Data[eRESET_FINISH].OnClick = false;;	// ----	if( Delay < 500 )	{		return false;	}	// ----	this->Data[eRESET_FINISH].EventTick = GetTickCount();	gResetSystem.ReqResetFinish();	// ----	return false;}// ----------------------------------------------------------------------------------------------void Interface::DrawNewsWindow(){	if( !this->Data[eNEWS_MAIN].OnShow )	{		return;	}	// ----	float MainWidth			= 230.0;	float MainHeight		= 313.0;	float StartY			= 100.0;	float StartX			= (MAX_WIN_WIDTH / 2) - (MainWidth / 2);	float MainCenter		= StartX + (MainWidth / 3);	float ButtonX			= MainCenter - (29.0 / 2);	// ----	this->DrawGUI(eNEWS_MAIN, StartX, StartY + 2);	this->DrawGUI(eNEWS_TITLE, StartX, StartY);	StartY = this->DrawRepeatGUI(eNEWS_FRAME, StartX, StartY + 67.0, 13);	this->DrawGUI(eNEWS_FOOTER, StartX, StartY);	this->DrawGUI(eNEWS_CLOSE, StartX + MainWidth - this->Data[eNEWS_CLOSE].Width, this->Data[eNEWS_TITLE].Height + this->Data[eNEWS_CLOSE].Height + 2);	// ----	if( this->IsWorkZone(eNEWS_CLOSE) )	{		DWORD Color = eGray100;		// ----		if( this->Data[eNEWS_CLOSE].OnClick )		{			Color = eGray150;		}		// ----		this->DrawColoredGUI(eNEWS_CLOSE, this->Data[eNEWS_CLOSE].X, this->Data[eNEWS_CLOSE].Y, Color);		this->DrawToolTip(this->Data[eNEWS_CLOSE].X + 5, this->Data[eNEWS_CLOSE].Y + 25, "Close");	}	// ----	this->DrawFormat(eGold, StartX + 10, 110, 210, 3, "News Board");	// ----	if( this->Data[eNEWS_MAIN].Attribute == 0 )	{		for( int i = 0; i < gNewsBoard.m_LoadedCount; i++ )		{			this->DrawGUI(eNEWS_INFOBG, StartX + 30, 140 + (i * 21));			// ----			if( IsWorkZone(StartX + 30, 140 + (i * 21), StartX + 200, 160 + (i * 21)) )			{				this->DrawColoredGUI(eNEWS_INFOBG, StartX + 30,  140 + (i * 21), pMakeColor(255, 204, 20, 200));			}			// ----			this->DrawFormat(eGold, StartX + 18, 142 + (i * 21), 65, 3, gNewsBoard.m_Data[i].Title.Date);			this->DrawFormat(eOrange, StartX + 18, 148 + (i * 21), 65, 3, gNewsBoard.m_Data[i].Title.Time);			this->DrawFormat(eWhite, StartX + 80, 145 + (i * 21), 190, 1, gNewsBoard.m_Data[i].Title.Text);		}		// ----		this->DrawFormat(eBlue, StartX + 8, 130, 210, 3, "Last refresh: %d min. ago", gNewsBoard.m_LastRefreshMin);	}	else	{		BYTE ID = this->Data[eNEWS_MAIN].Attribute - 10;		// ----		this->DrawGUI(eNEWS_INFOBG, StartX + 30, 140);		this->DrawFormat(eGold, StartX + 18, 142, 65, 3, gNewsBoard.m_Data[ID].Title.Date);		this->DrawFormat(eOrange, StartX + 18, 148, 65, 3, gNewsBoard.m_Data[ID].Title.Time);		this->DrawFormat(eWhite, StartX + 80, 145, 190, 1, gNewsBoard.m_Data[ID].Title.Text);		this->DrawFormat(eWhite, StartX + 15, 170, 200, 1, gNewsBoard.m_Data[ID].Text);		// ----		this->DrawGUI(eNEWS_BACK, ButtonX, this->Data[eNEWS_FOOTER].Y + 10);		this->DrawFormat(eWhite, StartX + 8, this->Data[eNEWS_FOOTER].Y + 20, 210, 3, "Back");		this->DrawGUI(eRESET_DIV, StartX, this->Data[eNEWS_FOOTER].Y - 10);		// ----		if( IsWorkZone(eNEWS_BACK) )		{			DWORD Color = eGray100;			// ----			if( this->Data[eNEWS_BACK].OnClick )			{				Color = eGray150;			}			// ----			this->DrawColoredGUI(eNEWS_BACK, this->Data[eNEWS_BACK].X, this->Data[eNEWS_BACK].Y, Color);		}		// ----		this->DrawFormat(eBlue, StartX + 8, 130, 210, 3, "Last page refresh: %d min. ago", gNewsBoard.m_Data[ID].LastRefreshMin);	}}// ----------------------------------------------------------------------------------------------bool Interface::EventNewsWindow_Main(DWORD Event){	float MainWidth			= 230.0;	float MainHeight		= 313.0;	float StartY			= 100.0;	float StartX			= (MAX_WIN_WIDTH / 2) - (MainWidth / 2);	// ----	for( int i = 0; i < gNewsBoard.m_LoadedCount; i++ )	{		if( this->IsWorkZone(StartX + 30, 140 + (i * 21), StartX + 200, 161 + (i * 21)) )		{			if( Event == WM_LBUTTONDOWN && this->Data[eNEWS_MAIN].Attribute == 0 )			{				this->Data[eNEWS_MAIN].Attribute = i + 10;				gNewsBoard.ReqOpenItem(i);			}		}	}	// ----	this->EventNewsWindow_Close(Event);	this->EventNewsWindow_Back(Event);	// ----	return true;}// ----------------------------------------------------------------------------------------------bool Interface::EventNewsWindow_Close(DWORD Event){	DWORD CurrentTick	= GetTickCount();	DWORD Delay			= (CurrentTick - this->Data[eNEWS_CLOSE].EventTick);	// ----	if( !this->Data[eNEWS_MAIN].OnShow || !IsWorkZone(eNEWS_CLOSE) )	{		return false;	}	// ----	if( Event == WM_LBUTTONDOWN )	{		this->Data[eNEWS_CLOSE].OnClick = true;		return true;	}	// ----	this->Data[eNEWS_CLOSE].OnClick = false;	// ----	if( Delay < 500 )	{		return false;	}	// ----	this->Data[eNEWS_CLOSE].EventTick	= GetTickCount();	this->Data[eNEWS_MAIN].Attribute	= 0;	this->CloseNewsWindow();	// ----	return false;}// ----------------------------------------------------------------------------------------------bool Interface::EventNewsWindow_Back(DWORD Event){	DWORD CurrentTick	= GetTickCount();	DWORD Delay			= (CurrentTick - this->Data[eNEWS_BACK].EventTick);	// ----	if( !this->Data[eNEWS_MAIN].OnShow || !IsWorkZone(eNEWS_BACK) )	{		return false;	}	// ----	if( Event == WM_LBUTTONDOWN )	{		this->Data[eNEWS_BACK].OnClick = true;		return true;	}	// ----	this->Data[eNEWS_BACK].OnClick = false;;	// ----	if( Delay < 500 )	{		return false;	}	// ----	this->Data[eNEWS_BACK].EventTick = GetTickCount();	this->Data[eNEWS_MAIN].Attribute = 0;	// ----	return false;}// ----------------------------------------------------------------------------------------------void Interface::DrawQuestDialog(){	if( !this->Data[eQUEST_MAIN].OnShow )	{		return;	}	// ----	float MainWidth			= 230.0;	float MainHeight		= 313.0;	float StartY			= 100.0;	float StartX			= (MAX_WIN_WIDTH / 2) - (MainWidth / 2);	float MainCenter		= StartX + (MainWidth / 3);	float ButtonX			= MainCenter - (29.0 / 2);	// ----	this->DrawGUI(eQUEST_MAIN, StartX, StartY + 2);	this->DrawGUI(eQUEST_TITLE, StartX, StartY);	StartY = this->DrawRepeatGUI(eQUEST_FRAME, StartX, StartY + 67.0, 13);	this->DrawGUI(eQUEST_FOOTER, StartX, StartY);	this->DrawGUI(eQUEST_CLOSE, StartX + MainWidth - this->Data[eQUEST_CLOSE].Width, this->Data[eQUEST_TITLE].Height + this->Data[eQUEST_CLOSE].Height + 2);	// ----	if( this->IsWorkZone(eQUEST_CLOSE) )	{		DWORD Color = eGray100;		// ----		if( this->Data[eQUEST_CLOSE].OnClick )		{			Color = eGray150;		}		// ----		this->DrawColoredGUI(eQUEST_CLOSE, this->Data[eQUEST_CLOSE].X, this->Data[eQUEST_CLOSE].Y, Color);		this->DrawToolTip(this->Data[eQUEST_CLOSE].X + 5, this->Data[eQUEST_CLOSE].Y + 25, "Close");	}	// ----	this->DrawFormat(eGold, StartX + 10, 110, 210, 3, "%s", "Help save new year!");	int LineY = this->DrawFormat(eWhite, StartX + 30, 145, 210, 1, "Hello valiant hero %s!", gObjUser.lpPlayer->Name);	LineY = this->DrawFormat(eWhite, StartX + 30, LineY, 210, 1, "I have a unique quest for you!");	LineY = this->DrawFormat(eWhite, StartX + 30, LineY, 210, 1, "For start new mission please select episode from list,");	LineY = this->DrawFormat(eWhite, StartX + 30, LineY, 210, 1, "each episode will be rewarded with nice prizes.");	// ----	this->DrawGUI(eQUEST_DIV, StartX, 195);	this->DrawFormat(eGold, StartX + 30, 215, 210, 1, "N");	this->DrawFormat(eGold, StartX + 50, 215, 210, 1, "Level");	this->DrawFormat(eGold, StartX + 90, 215, 210, 1, "Reset");	this->DrawFormat(eGold, StartX + 140, 215, 210, 1, "Episode");	// ----	for( int i = 0; i < 10; i++ )	{		this->DrawFormat(eWhite, StartX + 30, 230 + (12 * i), 210, 1, "(%d)", i + 1);		pDrawGUI(0x7B5E, StartX + 30, 230 + (12 * i) + 9, 82.0, 2.0);		pDrawGUI(0x7B5E, StartX + 30 + 82, 230 + (12 * i) + 9, 82.0, 2.0);		this->DrawFormat(eWhite, StartX + 50, 230 + (12 * i), 210, 1, "[%d~%d]", 1, 80);		this->DrawFormat(eWhite, StartX + 90, 230 + (12 * i), 210, 1, "[%d~%d]", 0, 1000);		this->DrawFormat(eWhite, StartX + 140, 230 + (12 * i), 210, 1, "%s", "Holiday treats");	}	// ----	this->DrawGUI(eQUEST_DIV, StartX, this->Data[eQUEST_FOOTER].Y - 15);	// ----	this->DrawFormat(eGold, StartX + 30, this->Data[eQUEST_FOOTER].Y + 7, 160, 3, "Page: %d / %d", 0, 1);	pDrawGUI(0x7BAA, StartX + 30, this->Data[eQUEST_FOOTER].Y + 5, 17, 18);	pDrawGUI(0x7BAB, StartX + 178, this->Data[eQUEST_FOOTER].Y + 5, 17, 18);}// ----------------------------------------------------------------------------------------------void Interface::FillQuestDialog1(){}// ----------------------------------------------------------------------------------------------void Interface::DrawTime(){	if( !this->Data[eTIME].OnShow )	{		return;	}	// ----	/*if( this->CheckWindow(ObjWindow::ChatWindow) || this->CheckWindow(ObjWindow::CashShop)	|| this->CheckWindow(ObjWindow::FullMap) || this->CheckWindow(ObjWindow::SkillTree)	|| this->CheckWindow(ObjWindow::MoveList) || gObjUser.m_MapNumber == 34 || gObjUser.m_MapNumber == 30 )*/	if(this->CheckWindow(ObjWindow::CashShop) || this->CheckWindow(ObjWindow::SkillTree)		|| this->CheckWindow(ObjWindow::MoveList))	{		return;	}	// ----	//this->DrawGUI(eTIME, 0, -3);	// -----	time_t TimeServer, TimeLocal;	struct tm * ServerT, * LocalT;	time(&TimeServer);	time(&TimeLocal);	// ----	ServerT = gmtime(&TimeServer);	// ----	char ServerTimeName[25] = "Server:";	char ServerTime[30];	sprintf(ServerTime, "%2d:%02d:%02d", (ServerT->tm_hour)%24, ServerT->tm_min, ServerT->tm_sec);	// -----	LocalT = localtime(&TimeLocal); 	// -----	char LocalTimeName[25] = "Local:";	char LocalTime[30];	sprintf(LocalTime, "%2d:%02d:%02d", LocalT->tm_hour, LocalT->tm_min, LocalT->tm_sec);	// -----	this->DrawFormat(eGold, 20, 17, 50, 1, ServerTimeName);	this->DrawFormat(eWhite, 42, 17, 100, 1, ServerTime);	// ----	this->DrawFormat(eGold, 70, 17, 50, 1, LocalTimeName);	this->DrawFormat(eWhite, 90, 17, 100, 1, LocalTime);}// ----------------------------------------------------------------------------------------------bool Interface::CheckWindow(int WindowID){	return pCheckWindow(pWindowThis(), WindowID);}// ----------------------------------------------------------------------------------------------int Interface::CloseWindow(int WindowID){	return pCloseWindow(pWindowThis(), WindowID);}// ----------------------------------------------------------------------------------------------int Interface::OpenWindow(int WindowID){	return pOpenWindow(pWindowThis(), WindowID);}// ----------------------------------------------------------------------------------------------bool Interface::AllowGUI(){	if( gInterface.CheckCraftWindow() 		|| gInterface.CheckResetWindow()		|| gInterface.CheckNewsWindow() )	{		return false;	}	// ----	return pAllowGUI();}// ----------------------------------------------------------------------------------------------void Interface::SetTextColor(BYTE Red, BYTE Greed, BYTE Blue, BYTE Opacity){	pSetTextColor(pTextThis(), Red, Green, Blue, Opacity);}// ----------------------------------------------------------------------------------------------void Interface::DrawText(int X, int Y, LPCTSTR Text){	pDrawText(pTextThis(), X, Y, Text, 0, 0, (LPINT)1, 0);}// ----------------------------------------------------------------------------------------------int Interface::DrawFormat(DWORD Color, int PosX, int PosY, int Width, int Align, LPCSTR Text, ...){	char Buff[2048];	int BuffLen	= sizeof(Buff)-1;	ZeroMemory(Buff, BuffLen);	// ----	va_list args;	va_start(args, Text);	int Len	= vsprintf_s(Buff, BuffLen, Text, args);	va_end(args);	// ----	int LineCount = 0;	// ----	char * Line = strtok(Buff, "\n");	// ----	while( Line != NULL )	{		pDrawColorText(Line, PosX, PosY, Width, 0, Color, 0, Align);		PosY += 10;		Line = strtok(NULL, "\n");	}	// ----	return PosY;}// ----------------------------------------------------------------------------------------------void Interface::DrawFormatEx(DWORD Color, int PosX, int PosY, int Width, int Align, LPCSTR Text, ...){	char Buff[2048];	int BuffLen	= sizeof(Buff)-1;	ZeroMemory(Buff, BuffLen);	// ----	va_list args;	va_start(args, Text);	int Len	= vsprintf_s(Buff, BuffLen, Text, args);	va_end(args);	// ----	pDrawColorText(Buff, PosX, PosY, Width, 0, Color, 0, Align);}// ----------------------------------------------------------------------------------------------float Interface::DrawRepeatGUI(short MonsterID, float X, float Y, int Count){	float StartY = Y;	// ----	for( int i = 0; i < Count; i++ )	{		pDrawGUI(this->Data[MonsterID].ModelID, X, StartY,			this->Data[MonsterID].Width, this->Data[MonsterID].Height);		// ----		StartY += this->Data[MonsterID].Height;	}	// ----	return StartY;}// ----------------------------------------------------------------------------------------------void Interface::DrawGUI(short ObjectID, float PosX, float PosY){	if( this->Data[ObjectID].X == -1 || this->Data[ObjectID].Y == -1 )	{		this->Data[ObjectID].X		= PosX;		this->Data[ObjectID].Y		= PosY;		this->Data[ObjectID].MaxX	= PosX + this->Data[ObjectID].Width;		this->Data[ObjectID].MaxY	= PosY + this->Data[ObjectID].Height;	}	// ----	pDrawGUI(this->Data[ObjectID].ModelID, PosX, PosY, 		this->Data[ObjectID].Width, this->Data[ObjectID].Height);}// ----------------------------------------------------------------------------------------------void Interface::DrawColoredGUI(short ObjectID, float X, float Y, DWORD Color){	if( this->Data[ObjectID].X == -1 || this->Data[ObjectID].Y == -1 )	{		this->Data[ObjectID].X		= X;		this->Data[ObjectID].Y		= Y;		this->Data[ObjectID].MaxX	= X + this->Data[ObjectID].Width;		this->Data[ObjectID].MaxY	= Y + this->Data[ObjectID].Height;	}	// ----	pDrawColorButton(this->Data[ObjectID].ModelID, X, Y, 		this->Data[ObjectID].Width, this->Data[ObjectID].Height, 0, 0, Color);}// ----------------------------------------------------------------------------------------------int Interface::DrawToolTip(int X, int Y, LPCSTR Text, ...){	char Buff[2048];	int BuffLen	= sizeof(Buff);	ZeroMemory(Buff, BuffLen);	// ----	va_list args;	va_start(args, Text);	int Len	= vsprintf_s(Buff, BuffLen, Text, args);	va_end(args);	// ----	return pDrawToolTip(X, Y, Buff);}// ----------------------------------------------------------------------------------------------int Interface::DrawToolTipEx(int X, int Y, LPCSTR Text, ...){	char Buff[2048];	int BuffLen	= sizeof(Buff);	ZeroMemory(Buff, BuffLen);	// ----	va_list args;	va_start(args, Text);	int Len	= vsprintf_s(Buff, BuffLen, Text, args);	va_end(args);	// ----	int LineCount = 0;	// ----	char * Line = strtok(Buff, "\n");	// ----	while( Line != NULL )	{		pDrawToolTip(X, Y, Line);		Y += 10;		Line = strtok(NULL, "\n");	}	// ----	return Y;}// ----------------------------------------------------------------------------------------------int Interface::DrawMessage(int Mode, LPCSTR Text, ...){	char Buff[2048];	int BuffLen	= sizeof(Buff);	ZeroMemory(Buff, BuffLen);	// ----	va_list args;	va_start(args, Text);	int Len	= vsprintf_s(Buff, BuffLen, Text, args);	va_end(args);	// ----	return pDrawMessage(Buff, Mode);}// ----------------------------------------------------------------------------------------------bool Interface::IsWorkZone(short ObjectID){	float PosX = this->Data[ObjectID].X;	float MaxX = PosX + this->Data[ObjectID].Width;	// ----	if( ObjectID == eSAMPLEBUTTON 		|| ObjectID == eCAMERA_MAIN 		|| ObjectID == eCAMERA_BUTTON1		|| ObjectID == eCAMERA_BUTTON2 )	{		PosX = this->GetResizeX(ObjectID);		MaxX = PosX + this->Data[ObjectID].Width;	}	// ----	if( (gObjUser.m_CursorX < PosX || gObjUser.m_CursorX > MaxX) 		|| (gObjUser.m_CursorY < this->Data[ObjectID].Y || gObjUser.m_CursorY > this->Data[ObjectID].MaxY) )	{		return false;	}	// ----	return true;}// ----------------------------------------------------------------------------------------------bool Interface::IsWorkZone(float X, float Y, float MaxX, float MaxY){	if( (gObjUser.m_CursorX < X || gObjUser.m_CursorX > MaxX) 		|| (gObjUser.m_CursorY < Y || gObjUser.m_CursorY > MaxY) )	{		return false;	}	// ----	return true;}// ----------------------------------------------------------------------------------------------float Interface::GetResizeX(short ObjectID){	if( pWinWidth == 800 )	{		return this->Data[ObjectID].X + 16.0;	}	else if( pWinWidth != 1024 )	{		return this->Data[ObjectID].X - 16.0;	}	// ----	return this->Data[ObjectID].X;}// ----------------------------------------------------------------------------------------------void Interface::DrawPictureAlpha(char Path[64], float X, float Y, float Width, float Height, int U1, int U2, float ScaleX, float ScaleY, int HL){    pLoadImage(Path, 0x1B, 0x2601, 0x2900, 1, 0);    pDrawImage(0x1B, X, Y, Width, Height, U1, U2, ScaleX, ScaleY, HL, 1, 0);}// ----------------------------------------------------------------------------------------------bool Interface::MiniMapCheck(){    if(this->CheckWindow(Inventory) ||        this->CheckWindow(CashShop) ||        this->CheckWindow(ChaosBox) ||        this->CheckWindow(Character) ||        this->CheckWindow(CommandWindow) ||        this->CheckWindow(ExpandInventory) ||        this->CheckWindow(ExpandWarehouse) ||        this->CheckWindow(FullMap) ||        this->CheckWindow(GensInfo) ||        this->CheckWindow(Guild) ||        this->CheckWindow(NPC_Dialog) ||        this->CheckWindow(NPC_Julia) ||        this->CheckWindow(NPC_Titus) ||        this->CheckWindow(OtherStore) ||        this->CheckWindow(Party) ||        this->CheckWindow(PetInfo) ||        this->CheckWindow(Shop) ||        this->CheckWindow(SkillTree) ||        this->CheckWindow(Store) ||        this->CheckWindow(Trade) ||        this->CheckWindow(Warehouse) ||        this->CheckWindow(FriendList) ||        this->CheckWindow(FastMenu) ||        this->CheckWindow(MuHelper) ||        this->CheckWindow(Quest) )        return true;    return false;}// ----------------------------------------------------------------------------------------------bool Interface::WinKeyChecks(){    if( this->CheckWindow(MuHelper) || this->CheckWindow(FriendList) || this->CheckWindow(ChatWindow) )        return true;    return false;}

interface.h
Code:
#pragma once// ----------------------------------------------------------------------------------------------#include "Import.h"// ----------------------------------------------------------------------------------------------#define INTERFACE_DEBUG		1// ----------------------------------------------------------------------------------------------#define MAX_OBJECT			100#define MAX_WIN_WIDTH		640#define MAX_WIN_HEIGHT		480// ----------------------------------------------------------------------------------------------enum ObjectID{	eSAMPLEBUTTON = 1,	eRANK_MAIN,	eRANK_TITLE,	eRANK_FRAME,	eRANK_FOOTER,	eRANK_DIV,	eRANK_BUTTON,	eRANK_TAB1,	eRANK_TAB2,	eRANK_TAB3,	eRANK_TAB4,	eCAMERA_MAIN,	eCAMERA_BUTTON1,	eCAMERA_BUTTON2,	eCRAFT_MAIN,	eCRAFT_TITLE,	eCRAFT_FRAME,	eCRAFT_FOOTER,	eCRAFT_DIV,	eCRAFT_TAB1,	eCRAFT_TAB2,	eCRAFT_TAB3,	eCRAFT_TAB4,	eCRAFT_CLOSE,	eCRAFT_INFOBG,	eCRAFT_MONEYBG,	eCRAFT_FINISH,	eRESET_MAIN,	eRESET_TITLE,	eRESET_FRAME,	eRESET_FOOTER,	eRESET_DIV,	eRESET_INFOBG,	eRESET_MONEYBG,	eRESET_CLOSE,	eRESET_FINISH,	eOFFEXP_SWITCH,	eNEWS_MAIN,	eNEWS_TITLE,	eNEWS_FRAME,	eNEWS_FOOTER,	eNEWS_DIV,	eNEWS_INFOBG,	eNEWS_CLOSE,	eNEWS_BACK,	eTIME,	eQUEST_MAIN,	eQUEST_TITLE,	eQUEST_FRAME,	eQUEST_FOOTER,	eQUEST_DIV,	eQUEST_CLOSE,};// ----------------------------------------------------------------------------------------------enum ColorMacro{	eShinyGreen		= Color4f(172, 255, 56, 255),	eGold			= Color4f(255, 189, 25, 255),	eWhite			= Color4f(255, 255, 255, 255),	eWhite180		= Color4f(255, 255, 255, 180),	eOrange			= Color4f(255, 105, 25, 255),	eGray100		= Color4f(50, 50, 50, 100),	eGray150		= Color4f(50, 50, 50, 150),	eBlowPink		= Color4f(220, 20, 60, 255),	eRed			= Color4f(225, 0, 0, 255),	eExcellent		= Color4f(0, 225, 139, 255),	eAncient		= Color4f(1, 223, 119, 255),	eSocket			= Color4f(153, 102, 204, 255),	eBlue			= Color4f(36, 242, 252, 255),	eYellow			= Color4f(255, 255, 0, 255),	eBrown			= Color4f(69, 39, 18, 255),};// ----------------------------------------------------------------------------------------------struct InterfaceObject{	DWORD	ModelID;	float	Width;	float	Height;	float	X;	float	Y;	float	MaxX;	float	MaxY;	DWORD	EventTick;	bool	OnClick;	bool	OnShow;	BYTE	Attribute;};// ----------------------------------------------------------------------------------------------class Interface{public:				Interface();	// ----	void		Load();	static void	Work();	static void	LoadImages();	static void LoadModels();	void		BindObject(short ObjectID, DWORD ModelID, float Width, float Height, float X, float Y);	// ----	void		DrawLifeBar();	void		DrawSampleButton();	void		EventSampleButton(DWORD Event);	void		DrawCameraUI();	void		EventCameraUI(DWORD Event);	void		DrawOffExpSwitch();	void		EventOffExpSwitch(DWORD Event);	// ----	void		OpenCraftWindow() { this->Data[eCRAFT_MAIN].OnShow = true; pSetCursorFocus = true; };	void		CloseCraftWindow() { this->Data[eCRAFT_MAIN].OnShow = false; pSetCursorFocus = false; };	bool		CheckCraftWindow() { return this->Data[eCRAFT_MAIN].OnShow; };	void		DrawCraftWindow();	void		FillCraftTab1();	void		FillCraftTab2();	void		FillCraftTab3();	void		FillCraftTab4();	bool		EventCraftWindow_Main(DWORD Event);	bool		EventCraftWindow_TabControl(DWORD Event);	bool		EventCraftWindow_Close(DWORD Event);	bool		EventCraftWindow_Finish(DWORD Event);	// ----	void		OpenResetWindow() { this->Data[eRESET_MAIN].OnShow = true; pSetCursorFocus = true; };	void		CloseResetWindow() { this->Data[eRESET_MAIN].OnShow = false; pSetCursorFocus = false; };	bool		CheckResetWindow() { return this->Data[eRESET_MAIN].OnShow; };	void		DrawResetWindow();	bool		EventResetWindow_Main(DWORD Event);	bool		EventResetWindow_Close(DWORD Event);	bool		EventResetWindow_Finish(DWORD Event);	// ----	void		OpenNewsWindow() { this->Data[eNEWS_MAIN].OnShow = true; pSetCursorFocus = true; };	void		CloseNewsWindow() { this->Data[eNEWS_MAIN].OnShow = false; pSetCursorFocus = false; };	bool		CheckNewsWindow() { return this->Data[eNEWS_MAIN].OnShow; };	void		DrawNewsWindow();	bool		EventNewsWindow_Main(DWORD Event);	bool		EventNewsWindow_Close(DWORD Event);	bool		EventNewsWindow_Back(DWORD Event);	// ----	void		OpenQuestDialog() { this->Data[eQUEST_MAIN].OnShow = true; pSetCursorFocus = true; };	void		CloseQuestDialog() { this->Data[eQUEST_MAIN].OnShow = false; pSetCursorFocus = false; };	bool		CheckQuestDialog() { return this->Data[eQUEST_MAIN].OnShow; };	void		DrawQuestDialog();	void		FillQuestDialog1();	// ----	void		SwitchTime() { this->Data[eTIME].OnShow = !this->Data[eTIME].OnShow; };	void		DrawTime();	// ----	bool		CheckWindow(int WindowID);	int			CloseWindow(int WindowID);	int			OpenWindow(int WindowID);	static bool	AllowGUI();	// ----	void		SetTextColor(BYTE Red, BYTE Greed, BYTE Blue, BYTE Opacity);	void		DrawText(int X, int Y, LPCTSTR Text);	int			DrawFormat(DWORD Color, int PosX, int PosY, int Width, int Align, LPCSTR Text, ...);	void		DrawFormatEx(DWORD Color, int PosX, int PosY, int Width, int Align, LPCSTR Text, ...);	void		DrawGUI(short ObjectID, float X, float Y);	float		DrawRepeatGUI(short ObjectID, float X, float Y, int Count);	void		DrawColoredGUI(short ObjectID, float X, float Y, DWORD Color);	int			DrawToolTip(int X, int Y, LPCSTR Text, ...);	int			DrawToolTipEx(int X, int Y, LPCSTR Text, ...);	int			DrawMessage(int Mode, LPCSTR Text, ...);	// ----	bool		IsWorkZone(short ObjectID);	bool		IsWorkZone(float X, float Y, float MaxX, float MaxY);	float		GetResizeX(short ObjectID);	// ----	void        DrawPictureAlpha(char Path[64], float X, float Y, float Width, float Height, int U1, int U2, float ScaleX, float ScaleY, int HL);	bool WinKeyChecks();private:	InterfaceObject Data[MAX_OBJECT];	// ----}; extern Interface gInterface;// ----------------------------------------------------------------------------------------------

import.h (offsets and other stuff)


Code:
#pragma once// Info Helper --------------------------------------------------------------------------------// Comparacao do level do char com 50// 0095CD6D  |.  83F9 50       CMP ECX,50// Offset Level Caixa// 0095CD93  |.  6A 50         PUSH 50// Offset text.bmd// 0095CD95  |.  68 F50D0000   PUSH 0DF5                                ; /Arg1 = 00000DF5// --------------------------------------------------------------------------------------------#include "stdafx.h"// ----------------------------------------------------------------------------------------------#include <gl\GL.h>#pragma comment(lib, "Opengl32.lib")#pragma comment(lib, "Ws2_32.lib")// ----------------------------------------------------------------------------------------------//-> Interface#define pDrawImage                ((void(__cdecl*)(int ImageID, float PosX, float PosY, float Width, float Height, int Arg6, int Arg7, float ScaleX, float ScaleY, int Arg11, int Arg12, int Arg13)) 0x637C60)#define pDrawInterface			((void(__cdecl*)()) 0x0080F790)#define oDrawInterface_Call		0x0080F6AE#define pDrawGUI				((void(__cdecl*)(DWORD, float, float, float, float)) 0x00790A00)#define pDrawToolTip			((int(__cdecl*)(int X, int Y, LPCSTR Text)) 0x00597220)#define pDrawButton				((void(__cdecl*)(DWORD, float, float, float, float, float, float)) 0x00790CF0)#define pDrawColorButton		((void(__cdecl*)(DWORD, float, float, float, float, float, float, DWORD)) 0x00790DD0)#define pDrawExtraColor			((void(__cdecl*)(DWORD, float, float, float, float, float, float, float, float, DWORD)) 0x637A60)#define pDrawMapObject			((void(__cdecl*)(DWORD, float, float, float, float, float, float, float, float, float, float, float, float, DWORD)) 0x638400)#define pDrawInfoBox			((char(__cdecl*)(char Text, int Arg2)) 0x007380B0)#define pDrawMessage			((int(__cdecl*)(LPCSTR Text, int Mode)) 0x00597630)#define pMakeColor				((DWORD(__cdecl*)(BYTE, BYTE, BYTE, BYTE)) 0x00412D20)#define pTextThis				((LPVOID(*)()) 0x0041FE10)#define pTextFormat				((int(__cdecl*)(char * Buffer, int Arg2, int LineSize, LPCTSTR Text, int LineWidth, bool Arg6, BYTE Arg7)) 0x540880)#define pDrawColorText			((int(__cdecl*)(LPCTSTR Text, int PosX, int PosY, int Width, int Arg5, int Color, int Arg7, int Align)) 0x7D0380)#define pDrawText				((int(__thiscall*)(LPVOID This, int PosX, int PosY, LPCTSTR Text, int nCount, int nTabPositions, LPINT lpnTabStopPositions, int nTabOrigin)) 0x00420150)#define pSetTextColor			((void(__thiscall*)(LPVOID This, BYTE r, BYTE g, BYTE b, BYTE h)) 0x00420040)#define pSetBlend				((void(__cdecl*)(BYTE Mode)) 0x635FD0)#define pLoadImage				((int(__cdecl*)(char * Folder, int Code, int Arg3, int Arg4, int Arg5, int Arg6)) 0x007721E0)#define pLoadModel				((void(__cdecl*)(int ResourceID, char * Path, char * File, int Arg4)) 0x614D10)#define pLoadTexture			((void(__cdecl*)(int TextureID, char * Folder, int GLREPEAT, int GLNEAREST, int GLTRUE)) 0x614710)#define pInitModelData			((void(__cdecl*)()) 0x00617D30)#define pInitModelData2			((void(__cdecl*)()) 0x00626190)#define pInitTextureData		((void(__cdecl*)()) 0x0061AED0)#define pLoadSomeForm			((void(__cdecl*)()) 0x00777440)#define oLoadSomeForm_Call		0x00776D5E#define pWindowThis				((LPVOID(*)()) 0x860FC0)#define pCheckWindow			((bool(__thiscall*)(LPVOID This, int Code)) 0x0085EAD0)#define pCloseWindow			((int(__thiscall*)(LPVOID This, int Code)) 0x0085F850)#define pOpenWindow				((int(__thiscall*)(LPVOID This, int Code)) 0x0085EB00)#define pOpenInfoBox			((bool(__cdecl*)(LPVOID This, int Arg2, float Arg3)) 0x7908C0)#define	pCursorX				*(int*)0x879340C#define	pCursorY				*(int*)0x8793410#define pWinWidth				*(GLsizei*)0x0E61E58#define pWinHeight				*(GLsizei*)0x0E61E5C#define pWinWidthReal			*(float*)0xE7C3D4#define pWinHeightReal			*(float*)0xE7C3D8#define pWinFontHeight			*(int*)0x81C0380#define pTextLineThis			((LPVOID(*)()) 0x8128ADC)#define pGetTextLine			((LPCSTR(__thiscall*)(LPVOID This, int LineNumber)) 0x402320)#define pDrawItemModel			((int(__cdecl*)(float PosX, float PosY, float Width, float Height, int ItemID, int a6, int a7, float a8, char a9)) 0x5CF310)#define pSetCursorFocus			*(DWORD*)0xE8CB3C#define pAllowGUI				((bool(__cdecl*)()) 0x7D4100)#define oAllowGUI_Call1			0x007D363E#define oAllowGUI_Call2			0x00811AF2#define pDrawBarForm			((void(__cdecl*)(float PosX, float PosY, float Width, float Height, float Arg5, int Arg6)) 0x6378A0)#define pGLSwitchBlend			((void(__cdecl*)()) 0x636070)#define pGLSwitch				((void(__cdecl*)()) 0x635F50)// ----------------------------------------------------------------------------------------------//-> User#define pGetPosFromAngle		((void(__cdecl*)(VAngle * Angle, int * PosX, int * PosY)) 0x635B00)#define pPartyListStruct		*(PartyList*)0x81CB4E8#define pGetPartyStruct(Slot)	((Slot * sizeof(PartyList)) + (*(char**)pPartyListStruct))#define pPartyMemberCount		*(DWORD*)0x81F6B6C#define pMapNumber				*(int*)0x0E61E18#define pLastSkillIndex			*(DWORD*)0x81C039C#define	pViewUnknownTargetID	*(int*)0xE61728		//item target#define	pViewNPCTargetID		*(int*)0xE6172C#define	pViewAttackTargetID		*(int*)0xE61730#define pPreviewThis			((LPVOID(*)()) 0x402BC0)#define pClearPreviewThis		((LPVOID(*)()) 0x82C5C80)#define pClearPreview			((void(__thiscall*)(LPVOID This)) 0x4CC780)#define pGetPreviewStruct		((DWORD(__thiscall*)(LPVOID This, int ViewportID)) 0x96A340)#define pPreviewCharSet			((void(__cdecl*)(int ObjectIndex, BYTE * CharSet, lpViewObj Object, int Mode)) 0x57FD90)#define oUserPreviewStruct		*(int*)0x7BC4F04#define oUserObjectStruct		*(int*)0x8128AC8#define oUserObjectStruct_		*(int*)0x8128AC4#define pMasterLevel			*(short*)0x87935D8#define pMasterPoint			*(short*)0x87935F2#define pMasterExp				*(__int64*)0x87935E0#define pMasterNextExp			*(__int64*)0x87935E8#define pFrameValue1			*(BYTE*)(0x004D9F02 + 2)#define pFrameValue2			*(DWORD*)(0x004DA3B2 + 1)#define pFrameValue3			*(DWORD*)(0x004DA3DD + 3)#define pFrameValue4			*(BYTE*)(0x004DA3AC + 3)#define pPlayerState			*(int*)0x0E609E8#define pFrameLimit				0//need check value inside struct#define oBattleMapStart			0x0083150E#define oBattleZoneStart		0x005D3043#define pMaxBattleZoneCount		*(BYTE*)(0x005D3078 + 3)#define oIsBattleServer_Call1	0x005D303A#define oIsBattleServer_Call2	0x00831501#define pIsMaster				((bool(__cdecl*)(BYTE Class)) 0x5878E0)#define pIsMaster2				((bool(__cdecl*)(BYTE Class)) 0x5875A0)#define pGetCharClass			((BYTE(__cdecl*)(BYTE Class)) 0x405230)#define pInitEventStatus		((void(__cdecl*)(int PreviewStruct)) 0x4EFF70)#define pEventEffectThis		((LPVOID(__cdecl*)(int Arg1)) 0x9CFF45)#define pAddEventEffect			((LPVOID(__thiscall*)(LPVOID This, int ModelID, int a3, bool bFixRotation, float a5, float a6, float a7, float a8, float a9, float a10)) 0x4EFFF0)#define pAddEventEffect2		((LPVOID(__thiscall*)(LPVOID This, int ModelID, int a3, int a4, float a5, float a6, float a7)) 0x4F0730)#define pPShopThis1				((LPVOID(__cdecl*)()) 0x860FC0)#define pPShopThis2				((LPVOID(__thiscall*)(LPVOID This)) 0x8612B0)#define pPShopSet				((void(__thiscall*)(LPVOID This, BYTE Mode)) 0x840E20)#define pPShopRefresh			((void(__cdecl*)(int Preview)) 0x00668460)#define pMUHelperThis			((LPVOID(__cdecl*)()) 0x4DB240)#define pMUHelperClass			*(int*)0xE8CB7C#define pMUHelperClose			((void(__thiscall*)(LPVOID This)) 0x95D2D0)#define pMUHelperStart			((void(__thiscall*)(LPVOID This)) 0x95D010)#define pMUHelperDataSet		((bool(__thiscall*)(LPVOID This, LPBYTE Data)) 0x960A90)#define pMUIsLoaded				*(DWORD*)0xE60974//#define pWarehouseClass			((int(__cdecl*)()) 0x860FC0)#define pWarehouseExThis		((int(__thiscall*)(LPVOID This)) 0x861930)#define pWarehouseExSet			((void(__thiscall*)(int Pointer, BYTE Status)) 0x856A80)#define pGameShopThis			((LPVOID(*)()) 0x93F220)#define pGameShopGetGP			((double(__thiscall*)(LPVOID This)) 0x940430)#define pUserStat				((LPVOID(*)()) 0x588D70)#define pUpdateUserStat			((void(__thiscall*)(LPVOID This, int * Value, int Code)) 0x4EA460)// ----------------------------------------------------------------------------------------------//-> Other#define oCam_Zoom				0x0D27BFC	//1037DB0//#define oCam_PosZ				0x00D255A0//0x0D255AC	//1031A64#define oCam_RotZ				0x87933D8	//8B4ACC8#define oCam_RotZDef			0x0D27B78	//1033AB0#define oCam_RotY				0x0D27B88	//1033AC0#define oCam_ClipX				0x0D2C848	//1038D28#define oCam_ClipY				0x0D2C894	//1033A78#define oCam_ClipZ				0x0D2C8B8	//1038D78#define oCam_ClipXCS			0x0D2C898	//1038D58#define oCam_ClipYCS			0x0D2C8A8	//1038D68#define oCam_ClipX2				0x0D2C878	//1038D38#define oCam_ClipY2				0x0D2C880	//1038D40#define oCam_ClipZ2				0x0D2B94C	//1037DA4#define oCam_ClipGL				0x0D2570C	//1031BCC#define oCam_PosZDef			0x0D255AC	// Restore PosZ#define oCam_PosZ			  0x0D255A0	// PosZ#define oCharColor_Loot			(0x0064B6AB + 1)#define oCharColor_Exp			(0x0064C9A0 + 1)#define pGetMoneyFormat			((int(__cdecl*)(double Value, char * Buff, int Arg3)) 0x5C1170)#define pPlayEffectAnimation	((int(__cdecl*)(int EffectIndex, int PreviewStruct)) 0x666FE0)#define oVulcanusMove			(0x00831A5C + 2)#define oShowChatMessage_Call	0x0078AF6C#define pShowChatMessage		((bool(__thiscall*)(LPVOID This)) 0x00788930)#define pSetChatMessageType		((int(__thiscall*)(LPVOID This, int Type)) 0x0078B720)#define pChatThis				((LPVOID(__thiscall*)(LPVOID This)) 0x8610D0)#define pChatIsClosed			((bool(__thiscall*)(LPVOID This)) 0x785FC0)#define pChatCheckLevel			((bool(__cdecl*)(int MinLevel, char * Name)) 0x597E10)#define pChatWhisperThis		((LPVOID(__thiscall*)(LPVOID This)) 0x8614D0)#define pChatWhisperActive		((bool(__thiscall*)(LPVOID This)) 0x849CB0)#define pChatReserveLine		((DWORD(__cdecl*)(DWORD Arg1, DWORD Arg2, DWORD Arg3)) 0x6D6AD0)#define pChatBoxThis			((DWORD(__thiscall*)(LPVOID This)) 0x861030)#define pChatOutput				((void(__thiscall*)(DWORD This, char * Name, char * Message, DWORD Type, DWORD Arg4)) 0x789390)#define pGetCommandLine			((LPSTR(WINAPI*)()) 0x00D221C8)#define pFrameSpeed1			*(double*)0x0D27C88#define	pFrameSpeed2			*(double*)0x0D281C0#define pIsDisconnect			*(int*)0xE82C24#define pCreateConnect			((int(__cdecl*)(char * IP, WORD Port)) 0x0063C960)#define pOnLine					*(DWORD*)0x8793704#define pMenuExitEvent			((DWORD(__cdecl*)(int Arg1)) 0x7A8880)#define pGameWindow				*(HWND*)0x0E8C578#define pGetMapName				((char*(__cdecl*)(int MapNumber)) 0x5D2C10)#define pMUCommandLine			(char*)0x0E8C274#define pGameLoad				((int(__cdecl*)()) 0x004D0FC0)#define pGameResolutionMode		*(int*)0x0E8C240#define pMoveListInit			((void(__thiscall*)(LPVOID This, int Arg1, int Arg2)) 0x830AC0)// ----------------------------------------------------------------------------------------------//-> Item#define pGetItemColor			((void(__cdecl*)(int ModelID, float Arg2, float Arg3, VAngle * Color, bool BalrogMode)) 0x5F8C50)#define pGetItemColor2			((void(__cdecl*)(int ModelID, float Arg2, float Arg3, VAngle * Color, bool BalrogMode)) 0x5FA4A0)#define pSetItemPrice           ((__int64(__cdecl*)(ObjectItem * lpItem, int Mode)) 0x58E3B0)#define pIsExpensiveItem		((bool(__cdecl*)(ObjectItem * lpItem)) 0x5C81F0)#define pIsUpgradeItem			((bool(__thiscall*)(LPVOID This, ObjectItem * lpSource, ObjectItem * lpTarget)) 0x7DD970)#define pAllowRepairWings		((bool(__cdecl*)(ObjectItem * lpItem)) 0x5C9DA0)#define pSetItemOption			((void(__cdecl*)(ObjectItem * lpItem, BYTE Option, BYTE Special, BYTE Value)) 0x58B910)#define pSetItemOptionText		((void(__cdecl*)(int ItemID, int Line, WORD OptionID, bool Arg4, int Arg5)) 0x5C2F70)#define pSetItemTextLine		((void(__cdecl*)(int Line, LPSTR Text, ...)) 0x9CF52A)#define pIsWings				((int(__thiscall*)(LPVOID This, DWORD ItemID)) 0x7E7720)#define pSetItemEffect			((void(__cdecl*)(int Arg1, int ModelID, VAngle Angle, int Arg4, int ItemLevel, char Arg6, int Arg7, int Arg8, int Arg9)) 0x609E70)#define pSetItemEffect2			((void(__cdecl*)(float a4, float a5, float a6, lpViewObj Object, float a8, DWORD ModelID, int a10, char a11, char a12, char a13, signed int a14, char a15)) 0x5655C0)#define pGetMaxDurability		((short(__cdecl*)(ObjectItem * lpItem, int ScriptStruct, int Level)) 0x5C2170)#define pIsFlyingMauntToMove	((bool(__thiscall*)(LPVOID This, WORD ItemID1, WORD ItemID2)) 0x8319B9)#define pAllowStaticEffect		((void(__thiscall*)(LPVOID This, DWORD * Arg1, DWORD Arg2, int Arg3, int Arg4)) 0x544E60)#define pPlayStaticEffect		((int(__cdecl*)(DWORD ModelID, DWORD * Arg1, float Scale, float * Color, int Model, float a6, int a7)) 0x7711C0)#define pPlayDynamicEffect		((int(__cdecl*)(DWORD ModelID, DWORD * Arg1, int Arg2, float * Color, int Arg4, float Arg5, int Arg6)) 0x74CBE0)// ----------------------------------------------------------------------------------------------//-> Protocol#define oXORFilterStart			0x00404C99#define pActiveSocket			*(SOCKET*)(*(DWORD*)0x0E61F84 + 0x0c)#define oDataRecv_Call			0x0065FD79				#define pDataRecv				((void(*)(DWORD Type, LPBYTE Data, int Len, int aIndex)) 0x006639D0)#define oWhisperChat_Call		0x00663F9E// ----------------------------------------------------------------------------------------------//-> Monster#define oNpcName				0x8119F68#define pSendChatSay			((int(__cdecl*)(char * Name, char * Text, lpViewObj lpObject, int a4, int a5)) 0x5996A0)#define pShowMonster			((double(__cdecl*)(int MonsterID, int a2, int a3, int a4)) 0x580FC0)// ----------------------------------------------------------------------------------------------
 
Upvote 0
Back
Top