/* ========================================================================== * ÀÛ ¼º ÀÚ : À̼ø±Ô * ÀÛ ¼º ÀÏ : 2008.06.25 * ³» ¿ë : ¿î¿µÅø * ÁÖÀÇ»çÇ× : *===========================================================================*/ #pragma once #include #include "CommonDefines.h" #include "TargaImage.h" struct NO_CHAT_CHARACTER_DUMMY; enum eGMTOOL_SUBDLG_INDEX { GMTOOL_SUBDLG_ITEM = 0, /// ¾ÆÀÌÅÛ GMTOOL_SUBDLG_MONSTER, /// ¸ó½ºÅÍ GMTOOL_SUBDLG_NOTICE, /// °øÁö GMTOOL_SUBDLG_WEBSITE, /// À¥»çÀÌÆ® GMTOOL_SUBDLG_MAP, /// ¸Ê À̵¿/¼Òȯ GMTOOL_SUBDLG_SPEED, /// À̵¿ ¼Óµµ GMTOOL_SUBDLG_STOP, /// ÇൿÁ¦ÇÑ GMTOOL_SUBDLG_KICK, /// °­Á¦ÅðÀå GMTOOL_SUBDLG_EVENT, /// °æÇèÄ¡/µå·ÓÀ² GMTOOL_SUBDLG_GMNAME, /// GM À̸§µî·Ï GMTOOL_SUBDLG_ITEMSETTING, /// GM¾ÆÀÌÅÛ ¼ÂÆÃ GMTOOL_SUBDLG_SKILL, /// ¹öÇÁ Àû¿ë GMTOOL_SUBDLG_JOB, /// ÀüÁ÷ GMTOOL_SUBDLG_FORCE, /// ¼¼·Â GMTOOL_SUBDLG_THEME, /// Å׸¶ MAX_GMTOOL_SUBDLG }; enum eGMTOOL_TIMER_ID { eGMTOOL_TIMER_NOTICE_SEND = 1, eGMTOOL_TIMER_DOWN_COUNT, eGMTOOL_TIMER_HERO_POS_UPDATE, eGMTOOL_TIMER_MAX, }; enum eGMTOOL_NOTICE_TYPE { eGMTOOL_NOTICE_SERVER = 0, eGMTOOL_NOTICE_CHANNEL, eGMTOOL_NOTICE_MAP, eGMTOOL_NOTICE_MAX, }; /// ¿î¿µÀÚ ½ºÅ³ Á¤º¸ enum eGM_SKILL_TYPE { eGM_SKILL_TYPE_BUILD = 26100, eGM_SKILL_TYPE_MAGIC, eGM_SKILL_TYPE_MAX, }; /// ÀÚµ¿ °øÁö ±¸Á¶Ã¼ struct sAutoNotice { int mTimeDelay; WCHAR mNoticeMsg[MAX_CHAT_BUFFER_SIZE]; }; /// ¼ýÀÚ Ä«¿îÅÍ ±¸Á¶Ã¼ struct sNumDownCounter { short mNoticeType; unsigned short mCount; }; /// ½ºÅ³ Çѹø¿¡ ¹è¿ì±â struct sSkillCheatAdd { unsigned long mSkillClassIdx; unsigned char mSkillStep; bool mIsSkillUp; }; /// ¸Ê À̹ÌÁö ±×¸®´Â À§Ä¡ enum MAP_IMAGE { MAP_IMG_POS_X = 260, MAP_IMG_POS_Y = 18, MAP_IMG_WIDTH = 512, MAP_IMG_HEIGHT= 512, }; /// search ÇÑ À¯Àú Á¤º¸ struct sChaseUserInfo { bool mIsShow; int mPosX; int mPosY; unsigned short mMapIndex; unsigned short mRoomIndex; }; /// search À̹ÌÁö ÆÄÀÏ Á¤º¸ struct sImageInfo { POINT mImgWidHeight; POINT mTexturePos; }; /// Å׸¶ Á¤º¸ struct sTheme_Info { unsigned long mCharacterIdx; /// Ç÷¹À̾îÀ妽º unsigned short mThemeIdx; /// Å׸¶Á¾·ù unsigned char mThemeMode; /// Å׸¶¸ðµå }; struct MSG_RES_USED_ROOM_ID; struct MSG_RES_CHEAT_THEME_INFO; struct MSG_RES_CHEAT_GM_EVENT_SEARCH; /// ¿î¿µÅø class cGMTool { static cGMTool* mInstance; public: cGMTool(); virtual ~cGMTool(); bool Init( HINSTANCE hinst, HWND hwnd ); void Clear(); void InitChannelChange(); bool LoadData(); void Exit(); void OnMove(); void OnHideDlg(); public: static cGMTool* GetSingleton(); /// ¸Þ½ÃÁö ó¸® ÇÔ¼ö static INT_PTR CALLBACK DlgProc( HWND wnd, UINT msg, WPARAM wparam, LPARAM lparam ); static INT_PTR CALLBACK DlgItemProc( HWND wnd, UINT msg, WPARAM wparam, LPARAM lparam ); static INT_PTR CALLBACK DlgSkillProc( HWND wnd, UINT msg, WPARAM wparam, LPARAM lparam ); static INT_PTR CALLBACK DlgMonsterProc( HWND wnd, UINT msg, WPARAM wparam, LPARAM lparam ); static INT_PTR CALLBACK DlgNoticeProc( HWND wnd, UINT msg, WPARAM wparam, LPARAM lparam ); static INT_PTR CALLBACK DlgWebSiteProc( HWND wnd, UINT msg, WPARAM wparam, LPARAM lparam ); static INT_PTR CALLBACK DlgMapProc( HWND wnd, UINT msg, WPARAM wparam, LPARAM lparam ); static INT_PTR CALLBACK DlgSpeedProc( HWND wnd, UINT msg, WPARAM wparam, LPARAM lparam ); static INT_PTR CALLBACK DlgStopProc( HWND wnd, UINT msg, WPARAM wparam, LPARAM lparam ); static INT_PTR CALLBACK DlgKickProc( HWND wnd, UINT msg, WPARAM wparam, LPARAM lparam ); static INT_PTR CALLBACK DlgEventProc( HWND wnd, UINT msg, WPARAM wparam, LPARAM lparam ); static INT_PTR CALLBACK DlgGMNameProc( HWND wnd, UINT msg, WPARAM wparam, LPARAM lparam ); static INT_PTR CALLBACK DlgItemSettingProc( HWND wnd, UINT msg, WPARAM wparam, LPARAM lparam ); static INT_PTR CALLBACK DlgJobProc( HWND wnd, UINT msg, WPARAM wparam, LPARAM lparam ); static INT_PTR CALLBACK DlgForceProc( HWND wnd, UINT msg, WPARAM wparam, LPARAM lparam ); static INT_PTR CALLBACK DlgThemeProc( HWND wnd, UINT msg, WPARAM wparam, LPARAM lparam ); void SetGMToolVisible( bool visible ); void SetPvpThemeList( MSG_RES_USED_ROOM_ID* pMsg ); BOOL GetMapTeleportState(); void SetUndeadModeText( bool mode ); void SetHideModeText( bool mode ); /// ¸ó½ºÅÍ ¼Òȯ À©µµ¿ì °ü·Ã void SetMonsterEditProc(); /// ¼­ºêŬ·¡½Ì ¼³Á¤ void OnDestroyMonster(); /// ¼­ºêŬ·¡½Ì ÇØÁ¦ void OnCreateMonsterButtonDown(); /// ¸ó½ºÅÍ »ý¼º void SendMessageToMonsterList( UINT msg, WPARAM wparam, LPARAM lparam ); WNDPROC GetOldEditProc(){ return mOldMonsterNameEditProc; } /// ¾ÆÀÌÅÛ »ý¼º ¼­ºê Ŭ·¡½Ì °ü·Ã void SetItemEditProc(); /// ¼­ºêŬ·¡½Ì ¼³Á¤ void OnDestroyItem(); /// ¼­ºêŬ·¡½Ì ÇØÁ¦ void OnItemNameSelected(); /// °Ë»öµÈ ¾ÆÀÌÅÛ ¼±Åà void SendMessageToItemList( UINT msg, WPARAM wparam, LPARAM lparam ); WNDPROC GetOldItemEditProc(){ return mOldItemNameEditProc; } /// ¾ÆÀÌÅÛ ¼ÂÆÃ ¼­ºê Ŭ·¡½Ì °ü·Ã void SetItemSettingEditProc(); /// ¼­ºêŬ·¡½Ì ¼³Á¤ void OnDestroyItemSetting(); /// ¼­ºêŬ·¡½Ì ÇØÁ¦ void OnSettingFindNameSelected(); /// °Ë»öµÈ ¾ÆÀÌÅÛ ¼±Åà void SendMessageToSettingFindList( UINT msg, WPARAM wparam, LPARAM lparam ); WNDPROC GetOldItemSettingEditProc(){ return mOldSettingFindNameEditProc; } /// ½ºÅ³ ½Àµæ Çϱâ void GetSkill(); /// äÆÃ ±ÝÁö ¸®½ºÆ® ¹Þ±â void SetNoChatUser( int rowCount, NO_CHAT_CHARACTER_DUMMY* table ); void InitStopListBox(); /// ¸ÊÀ̵¿/ÃßÀû/¼Òȯ °ü·Ã. void ShowSearchPlayer( unsigned short mapIndex, float posX, float posY ); void ShowSearchChannelPlayer( short channelNum ); /// ¿î¿µÀÚ Àü¿ë ½ºÅ³ ½è´ÂÁö ¸¶¿ì½º üũ bool ProcessGMSkill( int mouseX, int mouseY ); void HideChasePosImg(){ mChasePosImg.mIsShow = false; } /// Å׸¶ ÃʱâÈ­ void SetThemeResetInfo( MSG_RES_CHEAT_THEME_INFO* pResMsg ); void ClearThemeResetList(); void SetGMEventInfo( MSG_RES_CHEAT_GM_EVENT_SEARCH* pResMsg ); void ClearGMEventList(); protected: void OnCommand( int id ); void OnCommandItem( int id, int msg ); void OnCommandMonster( int id, int msg ); void OnCommandNotice( int id, int msg ); void OnCommandSkill( int id, int msg ); void OnCommandWebSite( int id, int msg ); void OnCommandMap( int id, int msg ); void OnCommandSpeed( int id, int msg ); void OnCommandStop( int id, int msg ); void OnCommandKick( int id, int msg ); void OnCommandEvent( int id, int msg ); void OnCommandGMName( int id, int msg ); void OnCommandItemSetting( int id, int msg ); void OnCommandJob( int id, int msg ); void OnCommandForce( int id, int msg ); void OnCommandTheme( int id, int msg ); void OnTimerNotice( int timerIndex ); void OnTimerMap( int timerIndex ); void OnShowItem(); void OnShowMonster(); void OnShowNotice(); void OnShowSkill(); void OnShowWebSite(); void OnShowMap(); void OnShowSpeed(); void OnShowStop(); void OnShowKick(); void OnShowEvent(); void OnShowGMName(); void OnShowItemSetting(); void OnShowJob(); void OnShowForce(); void OnShowTheme(); void OnHideMap(); void OnHideTheme(); bool LoadItemData(); bool LoadMonsterData(); bool LoadNoticeData(); bool LoadSkillData(); bool LoadMapData(); bool LoadEventData(); void OnChildMove( eGMTOOL_SUBDLG_INDEX index ); /// °øÁö ÆÄÀÏ Àбâ bool ParsingNoticeFile( char* filePath ); /// °øÁö º¸³»±â void SendNoticeMsg( int noticeType, WCHAR* str ); /// ÀÚµ¿ °øÁö ÇØ¾ß ÇÏ´Â ±Ûµé Ç¥½Ã void ShowAutoNoticeMsg(); /// ¾ÆÀÌÅÛ ¼¼ÆÃ °ü·Ã void EventItemHighClass(); void EventItemMiddleClass(); void EventItemLowClass(); void EventCardSlot(); void EventItemSettingHighClass(); void EventItemSettingMiddleClass(); void EventItemSettingLowClass(); void EventItemSettingCardSlot(); /// GM À̺¥Æ® È¿°ú ¼¼ÆÃ °ü·Ã void EventInfluenceClass(); void DeleteAllItemList(); /// ¹è¿ö¾ß ÇÒ ½ºÅ³ ¸®½ºÆ® ÀÛ¼º void GetHeroSkillList(); /// ¸Ê Ãâ·Â void DrawMap( int mapIndex ); void OnLButtonDownMap( int x, int y ); void OnPaintMap( HDC hdc ); void OnMouseMoveMap(HWND wnd, int x, int y ); void OnMouseLeaveMap(); /// ¿î¿µÀÚ ½ºÅ³ »ç¿ë void EventSkillType(); void EventSkillName(); protected: HWND mParentWnd; HWND mMainDlg; HWND mSubDlg[MAX_GMTOOL_SUBDLG]; HMODULE mRichMod; HINSTANCE mInst; /// ÀÚµ¿ °øÁö bool mIsNoticefileOpen; bool mIsItemSettingfileOpen; bool mIsNoticeTimerRun; //ÀÚµ¿ °øÁö ŸÀÌ¸Ó bool mIsCounterTimerRun; //ÀÚµ¿ Ä«¿îÅÍ Å¸ÀÌ¸Ó char mCurrentPath[ MAX_PATH ]; cFileLoader mNoticeFileLoader; int mTimeInterval; sNumDownCounter mNumDownCounter; /// À̵¿¼Óµµ Á¶Á¤ int mSpeed; /// ¾ðµ¥µå ¸ðµå bool mIsInOn; /// °æÇèÄ¡, µå¶ø·ü Á¶Á¤ short mExpPercent; short mSxpPercent; short mDropPercent; /// ¸Ê À̵¿¿¡¼­ ¸Ê À̹ÌÁö, heroÀ§Ä¡, chase À§Ä¡ typedef tPointerHashMap< unsigned long, void* > cMapImageHashMap; cMapImageHashMap mMapImgHashMap; HBITMAP mHeroTargetPosImg; sChaseUserInfo mChasePosImg; sImageInfo mHeroImg; sImageInfo mSearchImg; bool mIsLeaveEventTracking; /// ¾ÆÀÌÅÛ ¼ÂÆÃ cFileLoader mItemSettingFileLoader; POINT mSubDlgPos[MAX_GMTOOL_SUBDLG]; typedef std::set< unsigned int > tItemSubSet; typedef tHashMap< unsigned int, tItemSubSet* > tItemTypeMap; tItemTypeMap mItemTypeHighMiddleMap; tItemTypeMap mItemTypeMiddleLowMap; tItemTypeMap mItemTypeLowItemIndexMap; /// ¾ÆÀÌÅÛ¿¡¼­ ¾ÆÀÌÅÛ °Ë»ö ±â´É.(ÃßÈÄ ±¸Çö) int mItemNameSelected; cStringT mItemNameText; /// ¸ó½ºÅÍ¿¡¼­ ¸ó½ºÅÍ À̸§ °Ë»ö typedef const tPointerHashMap cMonsterHashMap; cMonsterHashMap* mMonsterMap; WNDPROC mOldMonsterNameEditProc; /// ¸ó½ºÅÍ¿¡¼­ ¸ó½ºÅÍ À̸§ °Ë»ö ¿¡µðÆ® ¼­ºê Ŭ·¡½Ì WNDPROC mOldItemNameEditProc; /// ¾ÆÀÌÅÛ »ý¼º¿¡¼­ ¾ÆÀÌÅÛ À̸§ °Ë»ö ¿¡µðÆ® ¼­ºê Ŭ·¡½Ì WNDPROC mOldSettingFindNameEditProc; /// ¾ÆÀÌÅÛ »ý¼º¿¡¼­ ¾ÆÀÌÅÛ À̸§ °Ë»ö ¿¡µðÆ® ¼­ºê Ŭ·¡½Ì /// ÀÚµ¿ °øÁö ±â´É typedef tPointerList< sAutoNotice* > tAutoNoticeList; tAutoNoticeList mAutoNoticeList; /// ½ºÅ³ ÇѲ¨¹ø¿¡ ½ÀµæÇϱâ typedef tList< sSkillCheatAdd > tSkillCheatAddList; tSkillCheatAddList mSkillCheatAddList; /// ¿î¿µÀÚ ½ºÅ³ Á¤º¸ typedef tArray< unsigned int > tSkillSubArr; typedef tHashMap< int, tSkillSubArr* > tSkillTypeMap; tSkillTypeMap mSkillTypeIndexMap; public: static const int MAX_PERCENT = 999; static const int MIN_PERCENT = -100; }; inline void cGMTool::SetGMToolVisible( bool visible ) { ShowWindow( mMainDlg, visible==true ? SW_SHOWNOACTIVATE : SW_HIDE ); if( visible == false ) { for( int idx = 0; idx < MAX_GMTOOL_SUBDLG; ++idx ) ShowWindow( mSubDlg[idx] , SW_HIDE ); } } inline void cGMTool::OnChildMove( eGMTOOL_SUBDLG_INDEX index ) { RECT rc0, rc1; ::GetWindowRect( mParentWnd, &rc0 ); ::GetWindowRect( mSubDlg[index], &rc1 ); mSubDlgPos[index].x = rc1.left - rc0.left; mSubDlgPos[index].y = rc1.top - rc0.top; } inline cGMTool* cGMTool::GetSingleton() { return mInstance; } #define GMTOOL cGMTool::GetSingleton()