#include "stdafx.h" #include #include "GMTool.h" #include "resource.h" #include "CheatManager.h" #include "Cheat_Common.h" #include "Protocol_Cheat.h" #include "GameResourceManager.h" #include "ObjectManager.h" #include "GameUIManager.h" #include "SkillManager.h" #include "SkillScript.h" #include "Hero.h" #include "SkillWindow.h" cGMTool* cGMTool::mInstance = 0; cGMTool::cGMTool() : mParentWnd( 0 ) , mMainDlg( 0 ) , mRichMod( 0 ) , mInst ( 0 ) , mIsNoticefileOpen( false ) , mIsNoticeTimerRun( false ) , mIsCounterTimerRun( false ) , mTimeInterval( 1 ) , mSpeed( 0 ) , mExpPercent( 0 ) , mSxpPercent( 0 ) , mDropPercent( 0 ) , mItemNameSelected( -1 ) { assert( mInstance == 0 && "bad singleton" ); mInstance = this; ::memset( mSubDlg, 0, sizeof(HWND)*MAX_GMTOOL_SUBDLG ); ::memset( mCurrentPath, 0, sizeof( mCurrentPath ) ); ::memset( mSubDlgPos, 0, sizeof( mSubDlgPos ) ); mNumDownCounter.mCount = 0; mNumDownCounter.mNoticeType = 0; GetCurrentDirectoryA( MAX_PATH, mCurrentPath); mChasePosImg.mIsShow = false; mChasePosImg.mPosX = 0; mChasePosImg.mPosY = 0; mChasePosImg.mMapIndex = 0; mChasePosImg.mRoomIndex = 0; } cGMTool::~cGMTool() { FreeLibrary( mRichMod ); assert( mInstance ); mInstance = 0; tItemTypeMap::cIterator i = mItemTypeLowItemIndexMap.Begin(); tItemTypeMap::cIterator end = mItemTypeLowItemIndexMap.End(); for( ; i != end; ++i ) { tItemSubSet* pLowSet = i->mSecond; SAFE_DELETE( pLowSet ); } mItemTypeLowItemIndexMap.Clear(); i = mItemTypeMiddleLowMap.Begin(); end = mItemTypeMiddleLowMap.End(); for( ; i != end; ++i ) { tItemSubSet* pLowSet = i->mSecond; SAFE_DELETE( pLowSet ); } mItemTypeMiddleLowMap.Clear(); i = mItemTypeHighMiddleMap.Begin(); end = mItemTypeHighMiddleMap.End(); for( ; i != end; ++i ) { tItemSubSet* pSubSet = i->mSecond; SAFE_DELETE( pSubSet ); } mItemTypeHighMiddleMap.Clear(); tAutoNoticeList::cConstIterator iBegin = mAutoNoticeList.Begin(); tAutoNoticeList::cConstIterator iEnd = mAutoNoticeList.End(); for( ; iBegin != iEnd; ++iBegin ) { sAutoNotice* pAutoNotice = NULL; pAutoNotice = *iBegin; SAFE_DELETE( pAutoNotice ); } mAutoNoticeList.Clear(); DeleteObject( mHeroTargetPosImg ); cMapImageHashMap::cConstIterator pos2 = mMapImgHashMap.Begin(); cMapImageHashMap::cConstIterator end2 = mMapImgHashMap.End(); for( ; pos2 != end2; ++pos2 ) { HBITMAP bitmap = (HBITMAP)(*pos2).mSecond; DeleteObject( bitmap ); } tSkillTypeMap::cConstIterator pos3 = mSkillTypeIndexMap.Begin(); tSkillTypeMap::cConstIterator end3 = mSkillTypeIndexMap.End(); for( ; pos3 != end3; ++pos3 ) { tSkillSubArr* skillArr = (*pos3).mSecond; skillArr->Clear(); SAFE_DELETE( skillArr ); } mSkillTypeIndexMap.Clear(); DeleteAllItemList(); ClearThemeResetList(); if( mIsNoticefileOpen == true ) { mNoticeFileLoader.Close(); mIsNoticefileOpen = false; } if( mIsItemSettingfileOpen == true ) { mItemSettingFileLoader.Close(); mIsItemSettingfileOpen = false; } if( mIsNoticeTimerRun == true ) { KillTimer( mSubDlg[GMTOOL_SUBDLG_NOTICE], eGMTOOL_TIMER_NOTICE_SEND ); mIsNoticeTimerRun = false; } if( mIsCounterTimerRun == true ) { KillTimer( mSubDlg[GMTOOL_SUBDLG_NOTICE], eGMTOOL_TIMER_DOWN_COUNT ); mIsCounterTimerRun = false; } } void cGMTool::Clear( ) { ClearThemeResetList(); if( mIsNoticefileOpen == true ) { mNoticeFileLoader.Close(); mIsNoticefileOpen = false; } if( mIsItemSettingfileOpen == true ) { mItemSettingFileLoader.Close(); mIsItemSettingfileOpen = false; } if( mIsNoticeTimerRun == true ) { KillTimer( mSubDlg[GMTOOL_SUBDLG_NOTICE], eGMTOOL_TIMER_NOTICE_SEND ); mIsNoticeTimerRun = false; } if( mIsCounterTimerRun == true ) { KillTimer( mSubDlg[GMTOOL_SUBDLG_NOTICE], eGMTOOL_TIMER_DOWN_COUNT ); mIsCounterTimerRun = false; } mSpeed = 0 ; GMTOOL->SetHideModeText( false ); GMTOOL->SetUndeadModeText( false ); /// ÃÊ±â Æ®·¢¹Ù ¼³Á¤ SendDlgItemMessage( mSubDlg[GMTOOL_SUBDLG_SPEED], IDC_SLIDER_SPEED_MOVESPEED, TBM_SETPOS, WPARAM( TRUE ), LPARAM( mSpeed ) ); #ifdef _GMTOOL CHEATMAN->SetHideMode( false ); CHEATMAN->SetUndeadMode( false ); #endif } void cGMTool::InitChannelChange() { if( mIsNoticefileOpen == true ) { mNoticeFileLoader.Close(); mIsNoticefileOpen = false; } if( mIsItemSettingfileOpen == true ) { mItemSettingFileLoader.Close(); mIsItemSettingfileOpen = false; } mSpeed = 0 ; GMTOOL->SetHideModeText( false ); GMTOOL->SetUndeadModeText( false ); /// ÃÊ±â Æ®·¢¹Ù ¼³Á¤ SendDlgItemMessage( mSubDlg[GMTOOL_SUBDLG_SPEED], IDC_SLIDER_SPEED_MOVESPEED, TBM_SETPOS, WPARAM( TRUE ), LPARAM( mSpeed ) ); #ifdef _GMTOOL CHEATMAN->SetHideMode( false ); CHEATMAN->SetUndeadMode( false ); #endif } bool cGMTool::Init( HINSTANCE hinst, HWND hwnd ) { mInst = hinst; mParentWnd = hwnd; mRichMod = LoadLibrary( _T("Riched20.dll") ); /// dialog »ý¼º mMainDlg = CreateDialog( hinst, MAKEINTRESOURCE(IDD_DIALOG_GMTOOL), mParentWnd, DlgProc ); mSubDlg[GMTOOL_SUBDLG_ITEM] = CreateDialog( hinst, MAKEINTRESOURCE(IDD_DIALOG_GMTOOL_ITEM), mMainDlg, DlgItemProc ); mSubDlg[GMTOOL_SUBDLG_SKILL] = CreateDialog( hinst, MAKEINTRESOURCE(IDD_DIALOG_GMTOOL_SKILL), mMainDlg, DlgSkillProc ); mSubDlg[GMTOOL_SUBDLG_MONSTER] = CreateDialog( hinst, MAKEINTRESOURCE(IDD_DIALOG_GMTOOL_MONSTER), mMainDlg, DlgMonsterProc ); mSubDlg[GMTOOL_SUBDLG_NOTICE] = CreateDialog( hinst, MAKEINTRESOURCE(IDD_DIALOG_GMTOOL_NOTICE), mMainDlg, DlgNoticeProc ); mSubDlg[GMTOOL_SUBDLG_WEBSITE] = CreateDialog( hinst, MAKEINTRESOURCE(IDD_DIALOG_GMTOOL_WEBSITE), mMainDlg, DlgWebSiteProc ); mSubDlg[GMTOOL_SUBDLG_MAP] = CreateDialog( hinst, MAKEINTRESOURCE(IDD_DIALOG_GMTOOL_MAP), mMainDlg, DlgMapProc ); mSubDlg[GMTOOL_SUBDLG_SPEED] = CreateDialog( hinst, MAKEINTRESOURCE(IDD_DIALOG_GMTOOL_SPEED), mMainDlg, DlgSpeedProc ); mSubDlg[GMTOOL_SUBDLG_STOP] = CreateDialog( hinst, MAKEINTRESOURCE(IDD_DIALOG_GMTOOL_STOP), mMainDlg, DlgStopProc ); mSubDlg[GMTOOL_SUBDLG_KICK] = CreateDialog( hinst, MAKEINTRESOURCE(IDD_DIALOG_GMTOOL_KICK), mMainDlg, DlgKickProc ); mSubDlg[GMTOOL_SUBDLG_EVENT] = CreateDialog( hinst, MAKEINTRESOURCE(IDD_DIALOG_GMTOOL_EVENT), mMainDlg, DlgEventProc ); mSubDlg[GMTOOL_SUBDLG_GMNAME] = CreateDialog( hinst, MAKEINTRESOURCE(IDD_DIALOG_GMTOOL_GMNAME ), mMainDlg, DlgGMNameProc ); mSubDlg[GMTOOL_SUBDLG_ITEMSETTING]= CreateDialog( hinst, MAKEINTRESOURCE(IDD_DIALOG_GMTOOL_ITEMSETTING), mMainDlg, DlgItemSettingProc ); mSubDlg[GMTOOL_SUBDLG_JOB] = CreateDialog( hinst, MAKEINTRESOURCE(IDD_DIALOG_GMTOOL_JOB), mMainDlg, DlgJobProc ); mSubDlg[GMTOOL_SUBDLG_FORCE] = CreateDialog( hinst, MAKEINTRESOURCE(IDD_DIALOG_GMTOOL_FORCE), mMainDlg, DlgForceProc ); mSubDlg[GMTOOL_SUBDLG_THEME] = CreateDialog( hinst, MAKEINTRESOURCE(IDD_DIALOG_GMTOOL_THEME), mMainDlg, DlgThemeProc ); /// enable °É±â //EnableWindow( GetDlgItem( mMainDlg, IDC_BUTTON_GMT_EVENT ), false ); /// ¾ÆÀÌÅÛ ¼ÂÆÃ ¶õÀÇ List View Control column ¼³Á¤ LVCOLUMNW col; col.mask = LVCF_FMT | LVCF_WIDTH | LVCF_TEXT | LVCF_SUBITEM ; col.fmt = LVCFMT_LEFT; col.cx = 212; col.pszText = (LPWSTR)GAMERESOURCEMAN->GetGameText( 8043 ); col.iSubItem = 0; SendDlgItemMessage( mSubDlg[GMTOOL_SUBDLG_ITEMSETTING], IDC_LISTCONTROL_ITEMLIST, LVM_INSERTCOLUMN, (WPARAM)(int)0, (LPARAM)(const LV_COLUMN *)(&col)); col.pszText = (LPWSTR)GAMERESOURCEMAN->GetGameText( 8044 ); col.cx = 42; col.iSubItem = 1; SendDlgItemMessage( mSubDlg[GMTOOL_SUBDLG_ITEMSETTING], IDC_LISTCONTROL_ITEMLIST, LVM_INSERTCOLUMN, (WPARAM)(int)1, (LPARAM)(const LV_COLUMN *)(&col)); SendDlgItemMessage( mSubDlg[GMTOOL_SUBDLG_ITEMSETTING], IDC_LISTCONTROL_ITEMLIST, LVM_SETEXTENDEDLISTVIEWSTYLE, 0, (LPARAM)(LVS_EX_GRIDLINES | LVS_EX_FULLROWSELECT) ); /// »ç¿ë Á¦ÇÑ ¶õÀÇ List View Control column ¼³Á¤ col.pszText = (LPWSTR)GAMERESOURCEMAN->GetGameText( 8070 ); col.cx = 25; col.iSubItem = 0; SendDlgItemMessage( mSubDlg[GMTOOL_SUBDLG_STOP], IDC_LISTCONTROL_STOP, LVM_INSERTCOLUMN, (WPARAM)(int)0, (LPARAM)(const LV_COLUMN *)(&col)); col.pszText = (LPWSTR)GAMERESOURCEMAN->GetGameText( 8071 ); col.cx = 110; col.iSubItem = 1; SendDlgItemMessage( mSubDlg[GMTOOL_SUBDLG_STOP], IDC_LISTCONTROL_STOP, LVM_INSERTCOLUMN, (WPARAM)(int)1, (LPARAM)(const LV_COLUMN *)(&col)); col.pszText = (LPWSTR)GAMERESOURCEMAN->GetGameText( 8072 ); col.cx = 110; col.iSubItem = 2; SendDlgItemMessage( mSubDlg[GMTOOL_SUBDLG_STOP], IDC_LISTCONTROL_STOP, LVM_INSERTCOLUMN, (WPARAM)(int)2, (LPARAM)(const LV_COLUMN *)(&col)); col.pszText = (LPWSTR)GAMERESOURCEMAN->GetGameText( 8073 ); col.cx = 125; col.iSubItem = 3; SendDlgItemMessage( mSubDlg[GMTOOL_SUBDLG_STOP], IDC_LISTCONTROL_STOP, LVM_INSERTCOLUMN, (WPARAM)(int)3, (LPARAM)(const LV_COLUMN *)(&col)); col.pszText = (LPWSTR)GAMERESOURCEMAN->GetGameText( 8074 ); col.cx = 125; col.iSubItem = 4; SendDlgItemMessage( mSubDlg[GMTOOL_SUBDLG_STOP], IDC_LISTCONTROL_STOP, LVM_INSERTCOLUMN, (WPARAM)(int)4, (LPARAM)(const LV_COLUMN *)(&col)); SendDlgItemMessage( mSubDlg[GMTOOL_SUBDLG_STOP], IDC_LISTCONTROL_STOP, LVM_SETEXTENDEDLISTVIEWSTYLE, 0, (LPARAM)(LVS_EX_GRIDLINES | LVS_EX_FULLROWSELECT) ); /// Map À̵¿ ¶õÀÇ List View Control column ¼³Á¤ col.pszText = (LPWSTR)GAMERESOURCEMAN->GetGameText( 8070 ); col.cx = 25; col.iSubItem = 0; SendDlgItemMessage( mSubDlg[GMTOOL_SUBDLG_MAP], IDC_LISTCONTROL_MAP_ROOM_LIST, LVM_INSERTCOLUMN, (WPARAM)(int)0, (LPARAM)(const LV_COLUMN *)(&col)); col.pszText = (LPWSTR)GAMERESOURCEMAN->GetGameText( 8083 ); col.cx = 110; col.iSubItem = 1; SendDlgItemMessage( mSubDlg[GMTOOL_SUBDLG_MAP], IDC_LISTCONTROL_MAP_ROOM_LIST, LVM_INSERTCOLUMN, (WPARAM)(int)1, (LPARAM)(const LV_COLUMN *)(&col)); col.pszText = (LPWSTR)GAMERESOURCEMAN->GetGameText( 8084 ); col.cx = 87; col.iSubItem = 2; SendDlgItemMessage( mSubDlg[GMTOOL_SUBDLG_MAP], IDC_LISTCONTROL_MAP_ROOM_LIST, LVM_INSERTCOLUMN, (WPARAM)(int)2, (LPARAM)(const LV_COLUMN *)(&col)); SendDlgItemMessage( mSubDlg[GMTOOL_SUBDLG_MAP], IDC_LISTCONTROL_MAP_ROOM_LIST, LVM_SETEXTENDEDLISTVIEWSTYLE, 0, (LPARAM)(LVS_EX_GRIDLINES | LVS_EX_FULLROWSELECT) ); /// Å׸¶ ÃʱâÈ­ ¶õÀÇ List View Control column ¼³Á¤ col.pszText = (LPWSTR)GAMERESOURCEMAN->GetGameText( 8070 ); //"-" col.cx = 25; col.iSubItem = 0; SendDlgItemMessage( mSubDlg[GMTOOL_SUBDLG_THEME], IDC_LISTCONTROL_THEME, LVM_INSERTCOLUMN, (WPARAM)(int)0, (LPARAM)(const LV_COLUMN *)(&col)); col.pszText = (LPWSTR)GAMERESOURCEMAN->GetGameText( 8083 ); // "¸Ê À̸§" col.cx = 110; col.iSubItem = 1; SendDlgItemMessage( mSubDlg[GMTOOL_SUBDLG_THEME], IDC_LISTCONTROL_THEME, LVM_INSERTCOLUMN, (WPARAM)(int)1, (LPARAM)(const LV_COLUMN *)(&col)); col.pszText = (LPWSTR)GAMERESOURCEMAN->GetGameText( 8101 ); // "±Í¼Ó¹øÈ£" col.cx = 70; col.iSubItem = 2; SendDlgItemMessage( mSubDlg[GMTOOL_SUBDLG_THEME], IDC_LISTCONTROL_THEME, LVM_INSERTCOLUMN, (WPARAM)(int)2, (LPARAM)(const LV_COLUMN *)(&col)); col.pszText = (LPWSTR)GAMERESOURCEMAN->GetGameText( 8102 ); // "³­À̵µ" col.cx = 70; col.iSubItem = 3; SendDlgItemMessage( mSubDlg[GMTOOL_SUBDLG_THEME], IDC_LISTCONTROL_THEME, LVM_INSERTCOLUMN, (WPARAM)(int)3, (LPARAM)(const LV_COLUMN *)(&col)); col.pszText = (LPWSTR)GAMERESOURCEMAN->GetGameText( 8103 ); // "¸¶Áö¸· ¾÷µ¥ÀÌÆ®ÀÏ" col.cx = 120; col.iSubItem = 4; SendDlgItemMessage( mSubDlg[GMTOOL_SUBDLG_THEME], IDC_LISTCONTROL_THEME, LVM_INSERTCOLUMN, (WPARAM)(int)4, (LPARAM)(const LV_COLUMN *)(&col)); col.pszText = (LPWSTR)GAMERESOURCEMAN->GetGameText( 8104 ); // "À¯È¿¸¸±âÀÏ" col.cx = 120; col.iSubItem = 5; SendDlgItemMessage( mSubDlg[GMTOOL_SUBDLG_THEME], IDC_LISTCONTROL_THEME, LVM_INSERTCOLUMN, (WPARAM)(int)5, (LPARAM)(const LV_COLUMN *)(&col)); SendDlgItemMessage( mSubDlg[GMTOOL_SUBDLG_THEME], IDC_LISTCONTROL_THEME, LVM_SETEXTENDEDLISTVIEWSTYLE, 0, (LPARAM)(LVS_EX_GRIDLINES | LVS_EX_FULLROWSELECT) ); /// GM À̺¥Æ® List View Control column ¼³Á¤ col.pszText = (LPWSTR)GAMERESOURCEMAN->GetGameText( 8070 ); //"-" col.cx = 25; col.iSubItem = 0; SendDlgItemMessage( mSubDlg[GMTOOL_SUBDLG_EVENT], IDC_LISTCONTROL_EVENT, LVM_INSERTCOLUMN, (WPARAM)(int)0, (LPARAM)(const LV_COLUMN *)(&col)); col.pszText = (LPWSTR)GAMERESOURCEMAN->GetGameText( 8116 ); // "È¿°ú À̸§" col.cx = 150; col.iSubItem = 1; SendDlgItemMessage( mSubDlg[GMTOOL_SUBDLG_EVENT], IDC_LISTCONTROL_EVENT, LVM_INSERTCOLUMN, (WPARAM)(int)1, (LPARAM)(const LV_COLUMN *)(&col)); col.pszText = (LPWSTR)GAMERESOURCEMAN->GetGameText( 8117 ); // "½ÃÀÛ ½Ã°£" col.cx = 120; col.iSubItem = 2; SendDlgItemMessage( mSubDlg[GMTOOL_SUBDLG_EVENT], IDC_LISTCONTROL_EVENT, LVM_INSERTCOLUMN, (WPARAM)(int)2, (LPARAM)(const LV_COLUMN *)(&col)); col.pszText = (LPWSTR)GAMERESOURCEMAN->GetGameText( 8104 ); // "À¯È¿¸¸±âÀÏ" col.cx = 120; col.iSubItem = 3; SendDlgItemMessage( mSubDlg[GMTOOL_SUBDLG_EVENT], IDC_LISTCONTROL_EVENT, LVM_INSERTCOLUMN, (WPARAM)(int)3, (LPARAM)(const LV_COLUMN *)(&col)); SendDlgItemMessage( mSubDlg[GMTOOL_SUBDLG_EVENT], IDC_LISTCONTROL_EVENT, LVM_SETEXTENDEDLISTVIEWSTYLE, 0, (LPARAM)(LVS_EX_GRIDLINES | LVS_EX_FULLROWSELECT) ); ///¼­ºê Ŭ·¡½Ì ¼³Á¤ SetMonsterEditProc(); ///¸ó½ºÅÍ °Ë»ö SetItemEditProc(); ///¾ÆÀÌÅÛ À̸§ °Ë»ö SetItemSettingEditProc(); ///¾ÆÀÌÅÛ ¼ÂÆÃ¿¡¼­ À̸§ °Ë»ö return true; } void cGMTool::Exit() { DeleteAllItemList(); ClearThemeResetList(); DestroyWindow( mSubDlg[GMTOOL_SUBDLG_NOTICE] ); DestroyWindow( mSubDlg[GMTOOL_SUBDLG_MONSTER] ); DestroyWindow( mSubDlg[GMTOOL_SUBDLG_SKILL] ); DestroyWindow( mSubDlg[GMTOOL_SUBDLG_ITEM] ); DestroyWindow( mSubDlg[GMTOOL_SUBDLG_WEBSITE] ); DestroyWindow( mSubDlg[GMTOOL_SUBDLG_MAP] ); DestroyWindow( mSubDlg[GMTOOL_SUBDLG_SPEED] ); DestroyWindow( mSubDlg[GMTOOL_SUBDLG_STOP] ); DestroyWindow( mSubDlg[GMTOOL_SUBDLG_KICK] ); DestroyWindow( mSubDlg[GMTOOL_SUBDLG_EVENT] ); DestroyWindow( mSubDlg[GMTOOL_SUBDLG_GMNAME] ); DestroyWindow( mSubDlg[GMTOOL_SUBDLG_ITEMSETTING] ); DestroyWindow( mSubDlg[GMTOOL_SUBDLG_JOB] ); DestroyWindow( mSubDlg[GMTOOL_SUBDLG_FORCE] ); DestroyWindow( mSubDlg[GMTOOL_SUBDLG_THEME] ); DestroyWindow( mMainDlg ); } bool cGMTool::LoadData() { /// ¾ÆÀÌÅÛ µ¥ÀÌÅÍ ·Îµù if( LoadItemData() == false ) { assert(0); return false; } /// ¸ó½ºÅÍ µ¥ÀÌÅÍ ·Îµù if( LoadMonsterData() == false ) { assert(0); return false; } /// °øÁö µ¥ÀÌÅÍ ·Îµù if( LoadNoticeData() == false ) { assert(0); return false; } /// ½ºÅ³ µ¥ÀÌÅÍ ·Îµù if( LoadSkillData() == false ) { assert(0); return false; } /// ½ºÅ³ µ¥ÀÌÅÍ ·Îµù if( LoadMapData() == false ) { assert(0); return false; } /// À̺¥Æ® µ¥ÀÌÅÍ ·Îµù if( LoadEventData() == false ) { assert(0); return false; } //::ShowWindow( mMainDlg, SW_SHOW ); // ::SetActiveWindow( mParentWnd ); return true; } void cGMTool::OnMove() { RECT rc0, rc1; ::GetWindowRect( mParentWnd, &rc0 ); ::GetWindowRect( mMainDlg, &rc1 ); int width = rc1.right - rc1.left; int x = rc0.left - width; if( x < 0 ) x = 0; int y = rc0.top; ::SetWindowPos( mMainDlg, 0, x, y, 0, 0, SWP_NOSIZE | SWP_NOZORDER | SWP_NOACTIVATE ); for( int cnt = 0; cnt < MAX_GMTOOL_SUBDLG; ++cnt ) { if ( ::IsWindowVisible( mSubDlg[cnt] ) == TRUE ) { //int screenWid = GetSystemMetrics( SM_CXSCREEN );; //int ScreenHeight= GetSystemMetrics( SM_CYSCREEN );; RECT childWndPos; ::GetWindowRect( mSubDlg[cnt], &childWndPos ); int posX = rc0.left + mSubDlgPos[cnt].x; int posY = rc0.top + mSubDlgPos[cnt].y;; //int wndWidth = childWndPos.right - childWndPos.left; //int wndHeight = childWndPos.bottom- childWndPos.top; ::SetWindowPos( mSubDlg[cnt], 0, posX, posY, 0, 0, SWP_NOSIZE | SWP_NOZORDER | SWP_NOACTIVATE ); } } } void cGMTool::OnCommand( int id ) { HWND hwnd = NULL; switch( id ) { case IDC_BUTTON_GMT_ITEM: hwnd = mSubDlg[GMTOOL_SUBDLG_ITEM]; break; case IDC_BUTTON_GMT_SKILL: hwnd = mSubDlg[GMTOOL_SUBDLG_SKILL]; break; case IDC_BUTTON_GMT_MONSTER:hwnd = mSubDlg[GMTOOL_SUBDLG_MONSTER]; break; case IDC_BUTTON_GMT_NOTICE: hwnd = mSubDlg[GMTOOL_SUBDLG_NOTICE]; break; case IDC_BUTTON_GMT_WEBSITE:hwnd = mSubDlg[GMTOOL_SUBDLG_WEBSITE]; break; case IDC_BUTTON_GMT_MAP :hwnd = mSubDlg[GMTOOL_SUBDLG_MAP]; break; case IDC_BUTTON_GMT_SPEED :hwnd = mSubDlg[GMTOOL_SUBDLG_SPEED]; break; case IDC_BUTTON_GMT_STOP :hwnd = mSubDlg[GMTOOL_SUBDLG_STOP]; break; case IDC_BUTTON_GMT_KICK :hwnd = mSubDlg[GMTOOL_SUBDLG_KICK]; break; case IDC_BUTTON_GMT_EVENT :hwnd = mSubDlg[GMTOOL_SUBDLG_EVENT]; break; case IDC_BUTTON_GMT_GMNAME: hwnd = mSubDlg[GMTOOL_SUBDLG_GMNAME]; break; case IDC_BUTTON_GMT_ITEMSETTING:hwnd = mSubDlg[GMTOOL_SUBDLG_ITEMSETTING]; break; case IDC_BUTTON_GMT_JOB: hwnd = mSubDlg[GMTOOL_SUBDLG_JOB]; break; case IDC_BUTTON_GMT_FORCE: hwnd = mSubDlg[GMTOOL_SUBDLG_FORCE]; break; case IDC_BUTTON_GMT_THEME: hwnd = mSubDlg[GMTOOL_SUBDLG_THEME]; break; #ifdef _GMTOOL case IDC_BUTTON_GMT_UNDEAD : /// ¸Þ½ÃÁö Àü¼Û if( NETWORK->IsConnected() ) { MSG_REQ_CHEAT_UNDEAD msg; ::memset( &msg, 0, sizeof(msg) ); msg.Category = NM_CHEAT; msg.Protocol = NM_CHEAT_UNDEAD_REQ; msg.mMode = !(CHEATMAN->GetUndeadMode()); NETWORK->SendNetworkMsg( (char*)&msg, sizeof(msg) ); } ::SetActiveWindow( mParentWnd ); return; case IDC_BUTTON_GMT_HIDE : /// ¸Þ½ÃÁö Àü¼Û if( NETWORK->IsConnected() ) { MSG_REQ_CHEAT_HIDE msg; ::memset( &msg, 0, sizeof(msg) ); msg.Category = NM_CHEAT; msg.Protocol = NM_CHEAT_HIDE_REQ; msg.mMode = !(CHEATMAN->GetHideMode()); NETWORK->SendNetworkMsg( (char*)&msg, sizeof(msg) ); } ::SetActiveWindow( mParentWnd ); return; case IDC_BUTTON_GMT_TODAY_WORD: { GAMEUI->ShowTodayWordWindow(); } ::SetActiveWindow( mParentWnd ); break; case IDC_BUTTON_GMT_SKILL_GET: { /// À¯Àú°¡ ¹è¿ö¾ß ÇÒ ½ºÅ³ ¸®½ºÆ® ¾ò±â GetHeroSkillList(); cSkillWindow* win = GAMEUI->GetSkillWindow(); if( win ) win->NetUnLock(); UIMAN->CreateMsgBox( eStage_Game, eMSGBOX_MODAL, /// GM_Tool ½ºÅ³ ½Àµæ Áß eMBEVENT_GM_TOOL_GET_SKILL, eSKIN_NONE, GAMERESOURCEMAN->GetGameText( 8069 ), GAMERESOURCEMAN->GetGameText( 301 ) ); GetSkill(); } ::SetActiveWindow( mParentWnd ); break; #endif default: assert( 0 && "error gmtool button" ); return; } ::ShowWindow( hwnd, IsWindowVisible( hwnd ) ? SW_HIDE : SW_SHOW ); } BOOL cGMTool::GetMapTeleportState() { if( mMainDlg ) return IsWindowEnabled( GetDlgItem( mMainDlg, IDC_BUTTON_GMT_MAP ) ); return false; } void cGMTool::SetUndeadModeText( bool mode ) { charT str[32] = {0,}; long setStringTableIdx = IDS_GMTOOL_UNDEAD_ON; if( mode == false ) setStringTableIdx = IDS_GMTOOL_UNDEAD; if( LoadString( mInst, setStringTableIdx, str, MAX_LOADSTRING ) == 0 ) return; SetDlgItemText( mMainDlg, IDC_BUTTON_GMT_UNDEAD, str ); } void cGMTool::SetHideModeText( bool mode ) { charT str[32] = {0,}; long setStringTableIdx = IDS_GMTOOL_HIDE_ON; if( mode == false ) setStringTableIdx = IDS_GMTOOL_HIDE; if( LoadString( mInst, setStringTableIdx, str, MAX_LOADSTRING ) == 0 ) return; SetDlgItemText( mMainDlg, IDC_BUTTON_GMT_HIDE, str ); } void cGMTool::GetHeroSkillList() { mSkillCheatAddList.Clear(); /// ½ºÅ©¸³Æ® ·Îµù unsigned long parentJobMax = 0; tArray* pArray = GAMERESOURCEMAN->GetParentJob( HERO->GetJob() ); if( pArray ) { if( pArray->IsEmpty() == false ) parentJobMax = pArray->GetSize(); } unsigned long jobIndex = HERO->GetJob(); unsigned long parentJobCount = 0; do { cSkillTree* pTree = SKILLSCRIPT->GetSkillTree( jobIndex ); assert(pTree); if( pTree ) { for( unsigned int i=0; imIconCount; ++i ) { sPlayerSkillBaseInfo* pInfo = SKILLSCRIPT->GetPlayerSkillInfo( pTree->mIconList[i].skillIdx ); if( pInfo ) { /// ±âº» Á¦°ø ½ºÅ³À̸鼭 ´Ü°è°¡ 1ÀÎ ½ºÅ³Àº ¹öư »ý¼ºÀ» Á¦¿ÜÇÑ´Ù. if( pInfo->mStepCount == 1 && pInfo->mpSetpInfoArray[0].mPlayerLevel == 0 ) continue; bool isSkillUp = false; sKeepSkill* pKeepSkill = SKILLMAN->GetKeepInfo( pTree->mIconList[i].skillIdx ); if( pKeepSkill ) { /// ¸¶½ºÅÍ °Ë»ç if( pKeepSkill->mStep + 1 == pInfo->mStepCount ) continue; else if( pKeepSkill->mStep < pInfo->mStepCount ) isSkillUp = true; } /// ÇöÀç Àڱ⠷¹º§¿¡ ¸Â´Â ÃÖ´ë ½ºÅ³ ·¡¹ë °Ë»ç unsigned char stepCount = 0; for( stepCount = 0; stepCount < pInfo->mStepCount; ++stepCount ) { if( pInfo->mpSetpInfoArray[stepCount].mPlayerLevel > HERO->GetLevel() ) break; } /// ½ºÅ³1 ´Ü°è Á¶Â÷ ¹è¿ï ¼ö ¾ø´Ù¸é ´ÙÀ½ ½ºÅ³. if( stepCount == 0 ) continue; /// ¸®½ºÆ®¿¡ Ãß°¡ sSkillCheatAdd temp; temp.mSkillClassIdx = pTree->mIconList[i].skillIdx; temp.mSkillStep = stepCount-1; temp.mIsSkillUp = isSkillUp; mSkillCheatAddList.PushBack( temp ); } } } else break; if( parentJobCount < parentJobMax ) { jobIndex = (*pArray)[parentJobCount]; parentJobCount++; } else break; } while( 1 ); } void cGMTool::GetSkill() { /// ¸®½ºÆ®°¡ ºô ¶§±îÁö ¼­¹ö¿¡ ½ºÅ³ ¹è¿ì±â ġƮ Àü¼Û if( mSkillCheatAddList.IsEmpty() == false ) { sSkillCheatAdd temp = mSkillCheatAddList.Front(); MSG_REQ_CHEAT_SKILL_ADD msg; msg.Category = NM_CHEAT; msg.Protocol = NM_CHEAT_SKILL_GET_REQ; msg.mSkillClassIdx = temp.mSkillClassIdx; msg.mSkillStep = temp.mSkillStep; msg.mIsSkillUp = temp.mIsSkillUp; if( NETWORK->IsConnected() ) { NETWORK->SendNetworkMsg( (char*)&msg, sizeof(msg) ); } mSkillCheatAddList.PopFront(); } else { /// GM_Tool ½ºÅ³ ½Àµæ ¸Þ½ÃÁö ⠴ݱâ UIMAN->DestroyMsgBox( eMBEVENT_GM_TOOL_GET_SKILL ); cSkillWindow* win = GAMEUI->GetSkillWindow(); if( win ) { win->NetUnLock(); win->ShowSkillUpButton(); } } } void cGMTool::OnHideDlg() { ::SetActiveWindow( mParentWnd ); } INT_PTR CALLBACK cGMTool::DlgProc( HWND wnd, UINT msg, WPARAM wparam, LPARAM lparam ) { switch( msg ) { case WM_MOVE: { GMTOOL->OnMove(); } break; case WM_COMMAND: { GMTOOL->OnCommand( LOWORD( wparam ) ); } break; case WM_SYSCOMMAND: { if( wparam == SC_CLOSE ) { PostMessage( ::GetParent( wnd ), msg, wparam, lparam ); } } break; case WM_SHOWWINDOW: { if( (BOOL)wparam == FALSE ) GMTOOL->OnHideDlg(); } } return FALSE; } /// ¾ÆÀÌÅÛ INT_PTR CALLBACK cGMTool::DlgItemProc( HWND wnd, UINT msg, WPARAM wparam, LPARAM lparam ) { switch( msg ) { case WM_MOVE: { GMTOOL->OnChildMove( GMTOOL_SUBDLG_ITEM ); } break; case WM_SHOWWINDOW: { if( (BOOL)wparam ) GMTOOL->OnShowItem(); } break; case WM_COMMAND: { GMTOOL->OnCommandItem( LOWORD( wparam ), HIWORD( wparam ) ); } break; case WM_DESTROY: { GMTOOL->OnDestroyItem(); } } return FALSE; } /// ½ºÅ³ INT_PTR CALLBACK cGMTool::DlgSkillProc( HWND wnd, UINT msg, WPARAM wparam, LPARAM lparam ) { switch( msg ) { case WM_MOVE: { GMTOOL->OnChildMove( GMTOOL_SUBDLG_SKILL ); } break; case WM_SHOWWINDOW: { if( (BOOL)wparam ) GMTOOL->OnShowSkill(); } break; case WM_COMMAND: { GMTOOL->OnCommandSkill( LOWORD( wparam ), HIWORD( wparam ) ); } break; } return FALSE; } /// ¸ó½ºÅÍ INT_PTR CALLBACK cGMTool::DlgMonsterProc( HWND wnd, UINT msg, WPARAM wparam, LPARAM lparam ) { switch( msg ) { case WM_MOVE: { GMTOOL->OnChildMove( GMTOOL_SUBDLG_MONSTER ); } break; case WM_SHOWWINDOW: { if( (BOOL)wparam ) GMTOOL->OnShowMonster(); } break; case WM_COMMAND: { GMTOOL->OnCommandMonster( LOWORD( wparam ), HIWORD( wparam ) ); } break; case WM_DESTROY: { GMTOOL->OnDestroyMonster(); } } return FALSE; } /// °øÁö INT_PTR CALLBACK cGMTool::DlgNoticeProc( HWND wnd, UINT msg, WPARAM wparam, LPARAM lparam ) { switch( msg ) { case WM_MOVE: { GMTOOL->OnChildMove( GMTOOL_SUBDLG_NOTICE ); } break; case WM_INITDIALOG: break; case WM_SHOWWINDOW: { if( (BOOL)wparam ) GMTOOL->OnShowNotice(); } break; case WM_COMMAND: { GMTOOL->OnCommandNotice( LOWORD( wparam ), HIWORD( wparam ) ); } break; case WM_TIMER: { GMTOOL->OnTimerNotice( (int)wparam ); } break; } return FALSE; } /// À¥ »çÀÌÆ® INT_PTR CALLBACK cGMTool::DlgWebSiteProc( HWND wnd, UINT msg, WPARAM wparam, LPARAM lparam ) { switch( msg ) { case WM_MOVE: { GMTOOL->OnChildMove( GMTOOL_SUBDLG_WEBSITE ); } break; case WM_SHOWWINDOW: { if( (BOOL)wparam ) GMTOOL->OnShowWebSite(); } break; case WM_COMMAND: { GMTOOL->OnCommandWebSite( LOWORD( wparam ), HIWORD( wparam ) ); } break; } return FALSE; } /// ¸Ê À̵¿ INT_PTR CALLBACK cGMTool::DlgMapProc( HWND wnd, UINT msg, WPARAM wparam, LPARAM lparam ) { switch( msg ) { case WM_MOVE: { GMTOOL->OnChildMove( GMTOOL_SUBDLG_MAP ); } break; case WM_SHOWWINDOW: { if( (BOOL)wparam ) GMTOOL->OnShowMap(); else GMTOOL->OnHideMap(); } break; case WM_COMMAND: { GMTOOL->OnCommandMap( LOWORD( wparam ), HIWORD( wparam ) ); } break; case WM_LBUTTONDOWN: { GMTOOL->OnLButtonDownMap( LOWORD(lparam), HIWORD(lparam) ); } break; case WM_PAINT: { HDC hdc; PAINTSTRUCT ps; hdc = BeginPaint( wnd, &ps ); GMTOOL->OnPaintMap( hdc ); EndPaint( wnd, &ps ); ReleaseDC( wnd, hdc ); } break; case WM_MOUSEMOVE: { GMTOOL->OnMouseMoveMap( wnd, LOWORD(lparam), HIWORD(lparam) ); } break; case WM_MOUSELEAVE: { GMTOOL->OnMouseLeaveMap(); } break; case WM_TIMER: { GMTOOL->OnTimerMap( (int)wparam ); } break; } return FALSE; } /// À̵¿ ¼Óµµ INT_PTR CALLBACK cGMTool::DlgSpeedProc( HWND wnd, UINT msg, WPARAM wparam, LPARAM lparam ) { switch( msg ) { case WM_MOVE: { GMTOOL->OnChildMove( GMTOOL_SUBDLG_SPEED ); } break; case WM_SHOWWINDOW: { if( (BOOL)wparam ) GMTOOL->OnShowSpeed(); } break; case WM_HSCROLL: { GMTOOL->OnCommandSpeed( IDC_SLIDER_SPEED_MOVESPEED, LOWORD( wparam )); } break; case WM_COMMAND: { GMTOOL->OnCommandSpeed( LOWORD( wparam ), HIWORD( wparam ) ); } break; } return FALSE; } /// À¯Àú À̵¿, ½ºÅ³ »ç¿ë, °ø°Ý, °Å·¡, ¾ÆÀÌÅÛ ½Àµæ, â°í ÀÌ¿ë ±ÝÁö INT_PTR CALLBACK cGMTool::DlgStopProc( HWND wnd, UINT msg, WPARAM wparam, LPARAM lparam ) { switch( msg ) { case WM_MOVE: { GMTOOL->OnChildMove( GMTOOL_SUBDLG_STOP ); } break; case WM_SHOWWINDOW: { if( (BOOL)wparam ) GMTOOL->OnShowStop(); } break; case WM_COMMAND: { GMTOOL->OnCommandStop( LOWORD( wparam ), HIWORD( wparam ) ); } break; } return FALSE; } /// À¯Àú °­Á¦ ÅðÀå INT_PTR CALLBACK cGMTool::DlgKickProc( HWND wnd, UINT msg, WPARAM wparam, LPARAM lparam ) { switch( msg ) { case WM_MOVE: { GMTOOL->OnChildMove( GMTOOL_SUBDLG_KICK ); } break; case WM_SHOWWINDOW: { if( (BOOL)wparam ) GMTOOL->OnShowKick(); } break; case WM_COMMAND: { GMTOOL->OnCommandKick( LOWORD( wparam ), HIWORD( wparam ) ); } break; } return FALSE; } /// µå·ÓÀ² / °æÇèÄ¡ Áõ°¡À² Á¶Á¤ INT_PTR CALLBACK cGMTool::DlgEventProc( HWND wnd, UINT msg, WPARAM wparam, LPARAM lparam ) { switch( msg ) { case WM_MOVE: { GMTOOL->OnChildMove( GMTOOL_SUBDLG_EVENT ); } break; case WM_SHOWWINDOW: { if( (BOOL)wparam ) GMTOOL->OnShowEvent(); } break; case WM_COMMAND: { GMTOOL->OnCommandEvent( LOWORD( wparam ), HIWORD( wparam ) ); } break; } return FALSE; } /// GM À̸§ µî·Ï INT_PTR CALLBACK cGMTool::DlgGMNameProc( HWND wnd, UINT msg, WPARAM wparam, LPARAM lparam ) { switch( msg ) { case WM_MOVE: { GMTOOL->OnChildMove( GMTOOL_SUBDLG_GMNAME ); } break; case WM_SHOWWINDOW: { if( (BOOL)wparam ) GMTOOL->OnShowGMName(); } break; case WM_COMMAND: { GMTOOL->OnCommandGMName( LOWORD( wparam ), HIWORD( wparam ) ); } break; } return FALSE; } /// ¾ÆÀÌÅÛ ¼ÂÆÃ INT_PTR CALLBACK cGMTool::DlgItemSettingProc( HWND wnd, UINT msg, WPARAM wparam, LPARAM lparam ) { switch( msg ) { case WM_MOVE: { GMTOOL->OnChildMove( GMTOOL_SUBDLG_ITEMSETTING ); } break; case WM_SHOWWINDOW: { if( (BOOL)wparam ) GMTOOL->OnShowItemSetting(); } break; case WM_COMMAND: { GMTOOL->OnCommandItemSetting( LOWORD( wparam ), HIWORD( wparam ) ); } break; case WM_DESTROY: { GMTOOL->OnDestroyItemSetting(); } } return FALSE; } /// Á÷¾÷ ¼ÂÆÃ INT_PTR CALLBACK cGMTool::DlgJobProc( HWND wnd, UINT msg, WPARAM wparam, LPARAM lparam ) { switch( msg ) { case WM_MOVE: { GMTOOL->OnChildMove( GMTOOL_SUBDLG_JOB ); } break; case WM_SHOWWINDOW: { if( (BOOL)wparam ) GMTOOL->OnShowJob(); } break; case WM_COMMAND: { GMTOOL->OnCommandJob( LOWORD( wparam ), HIWORD( wparam ) ); } break; } return FALSE; } /// ¼¼·Â ¼ÂÆÃ INT_PTR CALLBACK cGMTool::DlgForceProc( HWND wnd, UINT msg, WPARAM wparam, LPARAM lparam ) { switch( msg ) { case WM_MOVE: { GMTOOL->OnChildMove( GMTOOL_SUBDLG_FORCE ); } break; case WM_SHOWWINDOW: { if( (BOOL)wparam ) GMTOOL->OnShowForce(); } break; case WM_COMMAND: { GMTOOL->OnCommandForce( LOWORD( wparam ), HIWORD( wparam ) ); } break; } return FALSE; } /// Å׸¶ ÃʱâÈ­ ¼ÂÆÃ INT_PTR CALLBACK cGMTool::DlgThemeProc( HWND wnd, UINT msg, WPARAM wparam, LPARAM lparam ) { switch( msg ) { case WM_MOVE: { GMTOOL->OnChildMove( GMTOOL_SUBDLG_THEME ); } break; case WM_SHOWWINDOW: { if( (BOOL)wparam ) GMTOOL->OnShowTheme(); else GMTOOL->OnHideTheme(); } break; case WM_COMMAND: { GMTOOL->OnCommandTheme( LOWORD( wparam ), HIWORD( wparam ) ); } break; } return FALSE; }