#include "stdafx.h" #include "GMTool.h" #include "resource.h" #include "ObjectManager.h" #include "Hero.h" #include "GameResourceManager.h" #include "Protocol_Cheat.h" #include "Cheat_Common.h" #include "ChatManager.h" void cGMTool::OnShowJob() { HWND hWnd = mSubDlg[GMTOOL_SUBDLG_JOB]; HWND hJobCombo = GetDlgItem( mSubDlg[GMTOOL_SUBDLG_JOB], IDC_COMBO_JOB_LIST ); SendMessage( hJobCombo, CB_RESETCONTENT, 0, 0 ); /// HERO ÇöÀç Á÷¾÷ À̸§ ¼ÂÆÃ ¹× ÀüÁ÷ ÇÒ ¼ö ÀÖ´Â Á÷¾÷ ¼ÂÆÃ if( HERO && GAMERESOURCEMAN ) { unsigned long heroJob = (unsigned long)HERO->GetJob(); LPCTSTR jobName = GAMERESOURCEMAN->GetJobName( heroJob ); if( jobName ) { SetDlgItemText( hWnd, IDC_EDIT_JOB_NAME, jobName ); } // ÇØ´ç ±âº»Á÷¾÷°ú °ü·ÃÀÖ´Â Á÷¾÷¸¸ µû·Î Ã߸®±â typedef tArray cJobIndexArray; typedef tPointerHashMap cJopTree; cJopTree* jobTree = GAMERESOURCEMAN->GetJobTree(); if( jobTree && jobTree->IsEmpty() == false ) { cJopTree::cConstIterator i = jobTree->Begin(); cJopTree::cConstIterator end = jobTree->End(); for( ; i != end; ++i ) { unsigned long childJob = (unsigned long)(i->mFirst); /// ÀüÁ÷ Á÷¾÷ cJobIndexArray* jobArr = (cJobIndexArray*)(i->mSecond); /// ºÎ¸ð Á÷¾÷ ¹è¿­ // if( jobArr ) if( jobArr && jobArr->GetSize() == 1 ) // 2Â÷ ÀüÁ÷Àº ¸·¾ÆµÒ. [12/16/2009 Jo_Client] { /// ¹Ù·Î Àü ÀüÁ÷ Á÷¾÷¸¸ üũ int jobCounter = jobArr->GetSize(); /// ÀüÁ÷ ȸ¼ö ¼¼±â unsigned long parentJob = (*jobArr)[jobCounter-1]; if( parentJob == heroJob ) { LPCTSTR changeJobName = GAMERESOURCEMAN->GetJobName( childJob ); if( changeJobName ) { int retIndex = SendMessage( hJobCombo, CB_ADDSTRING, 0, (LPARAM)changeJobName ); if( retIndex != CB_ERR && retIndex != CB_ERRSPACE ) { SendMessage( hJobCombo, CB_SETITEMDATA, retIndex, childJob ); } } } } // else // assert(0); } } } int comboCount = SendMessage( hJobCombo, CB_GETCOUNT, 0, 0 ); if( comboCount > 0 ) EnableWindow( GetDlgItem( mSubDlg[GMTOOL_SUBDLG_JOB], IDC_BUTTON_JOB_CHANGE ), TRUE ); else EnableWindow( GetDlgItem( mSubDlg[GMTOOL_SUBDLG_JOB], IDC_BUTTON_JOB_CHANGE ), FALSE ); SendMessage( hJobCombo, CB_SETCURSEL, 0, 0 ); /// À§Ä¡¼¼ÆÃ RECT rc0; ::GetWindowRect( mMainDlg, &rc0 ); int x = rc0.right; int y = rc0.top + GetSystemMetrics(SM_CYCAPTION); ::SetWindowPos( hWnd, 0, x, y, 0, 0, SWP_NOSIZE | SWP_NOZORDER | SWP_NOACTIVATE ); mSubDlgPos[GMTOOL_SUBDLG_JOB].x = 0; mSubDlgPos[GMTOOL_SUBDLG_JOB].y = GetSystemMetrics(SM_CYCAPTION); } /// ¾ÆÀÌÅÛ °ü·Ã ¹öư À̺¥Æ® void cGMTool::OnCommandJob( int id, int msg ) { switch( id ) { case IDC_BUTTON_JOB_CANCEL: ::ShowWindow( mSubDlg[GMTOOL_SUBDLG_JOB], SW_HIDE ); ::SetActiveWindow( mParentWnd ); break; case IDC_BUTTON_JOB_CHANGE: { HWND jobCombo = GetDlgItem( mSubDlg[GMTOOL_SUBDLG_JOB], IDC_COMBO_JOB_LIST ); int listIndex = SendMessage( jobCombo, CB_GETCURSEL, 0, 0 ); int jobIndex = SendMessage( jobCombo, CB_GETITEMDATA, listIndex, 0 ); unsigned long heroJob = 0; if( HERO ) heroJob = (unsigned long)HERO->GetJob(); if( GAMERESOURCEMAN->IsCorrelateJob( jobIndex, heroJob ) == true ) { /// ¸Þ½ÃÁö ³¯¸®±â MSG_REQ_CHEAT_GM_JOB_CHANGE msg; msg.Category = NM_CHEAT; msg.Protocol = NM_CHEAT_GM_JOB_CHANGE_REQ; msg.mChangeJobIndex = jobIndex; if( NETWORK->IsConnected() ) { NETWORK->SendNetworkMsg( (char*)&msg, sizeof( MSG_REQ_CHEAT_GM_JOB_CHANGE ) ); } } else { CHATMANAGER->AddSystemMsg( eSYSTEM_NORMAL, GAMERESOURCEMAN->GetGameText( 8088 ) ); } ::ShowWindow( mSubDlg[GMTOOL_SUBDLG_JOB], SW_HIDE ); ::SetActiveWindow( mParentWnd ); } break; default: return; } }