#include "stdafx.h" #include "ThemeEnterWindow.h" #include "Label.h" #include "ListBox.h" #include "ComboBox.h" #include "Npc_Common.h" #include "ObjectManager.h" #include "Hero.h" #include "GameResourceManager.h" #include "PartyManager.h" #include "ItemManager.h" cThemeEnterWindow::cThemeEnterWindow() : mpEnter(0) , mpClose(0) , mpThemeName(0) , mpThemeLevel(0) , mpThemePeopleCnt(0) //, mpThemeRefreshTime(0) , mpThemeItem(0) , mpThemeState(0) , mpThemeUniqueIndex(0) , mpThemeMode(0) , mpMemberList(0) , mThemeMapIndex(0) { ::memset( mpThemeEnterInfo, 0, sizeof( mpThemeEnterInfo ) ); } cThemeEnterWindow::~cThemeEnterWindow() { } void cThemeEnterWindow::Open() { } void cThemeEnterWindow::Close() { cUIWindow::Close(); Clear(); } bool cThemeEnterWindow::OnCreate( cUINodeProperty* pProperty ) { if( cUIWindow::OnCreate( pProperty ) == false ) return false; mpEnter = (cButton*)GetChild( eUIID_GAME_THEME_ENTER_OK ); mpClose = (cButton*)GetChild( eUIID_GAME_THEME_ENTER_CLOSE ); mpThemeName = (cLabel*)GetChild( eUIID_GAME_THEME_ENTER_THEMENAME ); mpThemeLevel = (cLabel*)GetChild( eUIID_GAME_THEME_ENTER_LEVEL ); mpThemePeopleCnt = (cLabel*)GetChild( eUIID_GAME_THEME_ENTER_PEOPLE ); // mpThemeRefreshTime = (cLabel*)GetChild( eUIID_GAME_THEME_ENTER_REFRESH ); mpThemeItem = (cLabel*)GetChild( eUIID_GAME_THEME_ENTER_ITEM ); mpThemeState = (cLabel*)GetChild( eUIID_GAME_THEME_ENTER_STATE ); mpThemeUniqueIndex = (cLabel*)GetChild( eUIID_GAME_THEME_ENTER_THEMENUMBER ); mpThemeMode = (cComboBox*)GetChild( eUIID_GAME_THEME_ENTER_MODE ); mpMemberList = (cListBox*)GetChild( eUIID_GAME_THEME_ENTER_MEMBERLIST ); mpThemeUniqueIndex->Hide(); return true; } void cThemeEnterWindow::Clear() { mpThemeName->Clear(); mpThemeState->Clear(); mpThemeUniqueIndex->Clear(); mpThemeUniqueIndex->Hide(); mpMemberList->Clear(); mpThemeMode->Clear(); for( unsigned int cnt = 0; cnt < eTHEME_MODE_MAX; ++cnt ) { if( mpThemeEnterInfo[cnt] ) { cThemeEnterInfo::cIterator pos = mpThemeEnterInfo[cnt]->Begin(); cThemeEnterInfo::cIterator end = mpThemeEnterInfo[cnt]->End(); for( ; pos != end; ++pos ) { sThemePartyInfo* pPartyInfo = (sThemePartyInfo*)(*pos).mSecond; SAFE_DELETE( pPartyInfo ); } } } ::memset( mpThemeEnterInfo, 0, sizeof( mpThemeEnterInfo ) ); mThemeMapIndex = 0; } void cThemeEnterWindow::OnCommand( cUINode *node, unsigned int id ) { switch( id ) { case eUIID_GAME_THEME_ENTER_OK: { /// NPC´ëȭ⠴ݱâ if( HERO->GetNpcFunc() == NPC_FUNC_THEME ) HERO->CloseNpcTalk( true ); /// ÄÞº¸ ¹Ú½º¿¡ ¼±ÅÃµÈ ³­À̵µ·Î µé¾î°¡±â unsigned char mode = (unsigned char)mpThemeMode->GetSelectData(); if( mode > eTHEME_MODE_NONE && mode < eTHEME_MODE_MAX ) { MSG_REQ_THEME_READY msg; msg.Category = NM_THEME; msg.Protocol = NM_THEME_READY_REQ; msg.mThemeMapNum = mThemeMapIndex; msg.mThemeMode = mode; NETWORK->SendNetworkMsg( (char*)&msg, sizeof( MSG_REQ_THEME_READY ) ); UIMAN->CreateMsgBox( eStage_Game, eMSGBOX_MODAL, eMBEVENT_THEME_ENTER_WAIT, eSKIN_NONE, GAMERESOURCEMAN->GetGameText( 9020 ), GAMERESOURCEMAN->GetGameText( 9000 ) ); } else { assert( 0 && "bad mode" ); } Hide(); } break; case eUIID_GAME_THEME_ENTER_CLOSE: /// NPC´ëȭ⠴ݱâ if( HERO->GetNpcFunc() == NPC_FUNC_THEME ) HERO->CloseNpcTalk( true ); Hide(); break; } } void cThemeEnterWindow::OnRender( cUIFontItemKeeper* pKeeper ) { if( mVisible == false ) return; /// À̹ÌÁö ·»´õ¸µ if( mpImage ) mpImage->Draw(); /// ÀÚ½Ä ·»´õ¸µ cChildList::cIterator i = mChildList.Begin(); cChildList::cIterator end = mChildList.End(); cUINode* listNode = 0; for( ; i != end; ++i ) { if( ((cUINode*)(*i))->IsVisible() == true ) { if( ((cUINode*)(*i))->GetID() == eUIID_GAME_THEME_ENTER_MODE ) { listNode = (cUINode*)(*i); continue; } ((cUINode*)(*i))->OnRender(pKeeper); } } pKeeper->DrawAll(); if( listNode ) { listNode->OnRender(pKeeper); pKeeper->DrawAll(); } } void cThemeEnterWindow::HideESC( bool onsound ) { /// NPC´ëȭ⠴ݱâ if( HERO->GetNpcFunc() == NPC_FUNC_THEME ) HERO->CloseNpcTalk( true ); cUIWindow::HideESC( onsound ); } void cThemeEnterWindow::SetThemeEnterInfo( MSG_SYN_THEME_READYQUESTION *pSynMsg ) { Clear(); /// ´øÁ¯ ¸í ¼³Á¤ if( mpThemeName ) mpThemeName->SetText( GAMERESOURCEMAN->GetMapName( pSynMsg->mThemeMapNum ) ); /// »óÅ ¹Ì±Í¼Ó. if( mpThemeState ) mpThemeState->SetText( UIMAN->GetUIText( 26521 ) ); /// ÄÞº¸ ¹Ú½º ¼³Á¤ tArray modeArr; GAMERESOURCEMAN->GetMapMode( pSynMsg->mThemeMapNum, &modeArr ); for( unsigned int cnt = 0; cnt < modeArr.GetSize(); ++cnt ) { unsigned char mode = (unsigned char)modeArr[cnt]; mpThemeMode->AddItem( UIMAN->GetUIText( 26500 + mode ), (void*)mode ); } sThemePartyInfo* pPartyInfo = pSynMsg->mPartyInfo; /// µ¥ÀÌÅÍ ¼öÁý for( unsigned int cnt=0 ; cnt < pSynMsg->mCount; cnt++, pPartyInfo++ ) { int mode = pPartyInfo->mThemeMode; /// ÄÞº¸ ¹Ú½º Ãß°¡. if( mpThemeEnterInfo[mode] ) { sThemePartyInfo* pInfo = new sThemePartyInfo; if( pInfo ) { ::memcpy( pInfo, pPartyInfo, sizeof( sThemePartyInfo ) ); mpThemeEnterInfo[mode]->Insert( pInfo->mPlayerIdx, pInfo ); } else { assert( 0 && "Fail to memmory allocation"); return; } } else { mpThemeEnterInfo[mode] = new cThemeEnterInfo; if( mpThemeEnterInfo[mode] ) { sThemePartyInfo* pInfo = new sThemePartyInfo; if( pInfo ) { ::memcpy( pInfo, pPartyInfo, sizeof( sThemePartyInfo ) ); mpThemeEnterInfo[mode]->Insert( pInfo->mPlayerIdx, pInfo ); } else { assert( 0 && "Fail to memmory allocation"); return; } } else { assert( 0 && "Fail to memmory allocation"); return; } } } mThemeMapIndex = pSynMsg->mThemeMapNum; Show( true ); mpThemeMode->SetSelect( 0, true ); unsigned char mode = (unsigned char)mpThemeMode->GetSelectData(); /// ÃÖ¼Ò ¿ä±¸ ·¹º§ if( mpThemeLevel ) { unsigned char level = GAMERESOURCEMAN->GetMapMinLevel( pSynMsg->mThemeMapNum, mode ); if( level > 0 ) { cStringT str; str.Format( _T("%d"), level ); mpThemeLevel->SetText( (LPCTSTR)str.Cstr() ); } else { mpThemeLevel->Clear(); } } /// ÃÖ´ë Âü°¡ Àοø if( mpThemePeopleCnt ) { unsigned char playerCnt = GAMERESOURCEMAN->GetMapMaxPlayerCount( pSynMsg->mThemeMapNum, mode ); if( playerCnt > 0 ) { cStringT str; str.Format( _T("%d"), playerCnt ); mpThemePeopleCnt->SetText( (LPCTSTR)str.Cstr() ); } else { mpThemePeopleCnt->Clear(); } } /// ÀÔÀå ¿ä±¸ ¾ÆÀÌÅÛ if( mpThemeItem ) { unsigned long itemIdx = GAMERESOURCEMAN->GetMapRequireItem( pSynMsg->mThemeMapNum, mode ); if( itemIdx > 0 ) { LPCTSTR pItemName = ITEMMAN->GetItemName( itemIdx ); if( pItemName ) { mpThemeItem->SetText( pItemName ); } else { assert(0); mpThemeItem->Clear(); } } else { mpThemeItem->Clear(); } } } void cThemeEnterWindow::OnComboSelected( cUINode* caller, unsigned int id ) { ///ÃʱâÈ­ mpThemeState->SetText( UIMAN->GetUIText( 26521 ) ); mpMemberList->Clear(); mpThemeUniqueIndex->Hide(); /// ¸É¹ö¿¡ Ãß°¡. if( mpMemberList == NULL || mpThemeState == NULL ) { assert(0); return; } unsigned char mode = (unsigned char)mpThemeMode->GetSelectData(); /// ÃÖ¼Ò ¿ä±¸ ·¹º§ if( mpThemeLevel ) { unsigned char level = GAMERESOURCEMAN->GetMapMinLevel( mThemeMapIndex, mode ); if( level > 0 ) { cStringT str; str.Format( _T("%d"), level ); mpThemeLevel->SetText( (LPCTSTR)str.Cstr() ); } else { mpThemeLevel->Clear(); } } /// ÃÖ´ë Âü°¡ Àοø if( mpThemePeopleCnt ) { unsigned char playerCnt = GAMERESOURCEMAN->GetMapMaxPlayerCount( mThemeMapIndex, mode ); if( playerCnt > 0 ) { cStringT str; str.Format( _T("%d"), playerCnt ); mpThemePeopleCnt->SetText( (LPCTSTR)str.Cstr() ); } else { mpThemePeopleCnt->Clear(); } } /// ÀÔÀå ¿ä±¸ ¾ÆÀÌÅÛ if( mpThemeItem ) { unsigned long itemIdx = GAMERESOURCEMAN->GetMapRequireItem( mThemeMapIndex, mode ); if( itemIdx > 0 ) { LPCTSTR pItemName = ITEMMAN->GetItemName( itemIdx ); if( pItemName ) { mpThemeItem->SetText( pItemName ); } else { assert(0); mpThemeItem->Clear(); } } else { mpThemeItem->Clear(); } } cThemeEnterInfo* pThemeInfo = mpThemeEnterInfo[ mode ]; if( pThemeInfo ) { /// HERO Å׸¶ ±Í¼Ó »óÅ ui ¼³Á¤. sThemePartyInfo* pPartyInfo = (sThemePartyInfo*)pThemeInfo->GetAt( HERO->GetObjectID() ); if( pPartyInfo ) { /// ±Í¼Ó Á¤º¸°¡ ÀÖÀ» °æ¿ì¿¡¸¸ ¼­¹ö¿¡¼­ µ¥ÀÌÅ͸¦ ÁÜ. /// »óÅÂ:±Í¼Ó mpThemeState->SetText( UIMAN->GetUIText( 26520 ) ); /// °íÀ¯¹øÈ£ cStringT uniqueIndex; uniqueIndex.Format( _T("%d"), pPartyInfo->mThemeUniqueIdx ); mpThemeUniqueIndex->SetText( uniqueIndex.Cstr() ); mpThemeUniqueIndex->Show(); } /// ÆÄƼ¿ø Å׸¶ ±Í¼Ó »óÅ ui ¼³Á¤ unsigned int partyMax = PARTYMAN->GetPartyCount(); for( unsigned int index = 0; index < partyMax; ++index ) { sPartyUserData* pPartyData; pPartyData = PARTYMAN->GetPartyInfo( index ); if( pPartyData ) { sThemePartyInfo* pPartyInfo = (sThemePartyInfo*)pThemeInfo->GetAt( pPartyData->userIndex ); if( pPartyInfo ) { /// ·¹º§ cStringT str; str.Format( _T("%d"), pPartyData->level ); int row = mpMemberList->AddRow( str.Cstr(), COLOR_WHITE, NULL ); if( row > -1 ) { /// À̸§ if( pPartyData->name ) mpMemberList->AddColume( row, pPartyData->name, COLOR_WHITE ); /// Á÷¾÷ LPCTSTR jobName = GAMERESOURCEMAN->GetJobName( pPartyData->job ); if( jobName ) mpMemberList->AddColume( row, jobName, COLOR_WHITE ); /// »óÅ if( pPartyInfo->mIsJoin ) mpMemberList->AddColume( row, UIMAN->GetUIText( 26522 ), COLOR_WHITE ); else mpMemberList->AddColume( row, UIMAN->GetUIText( 26523 ), COLOR_WHITE ); if( pPartyInfo->mThemeUniqueIdx != 0) { /// °íÀ¯¹øÈ£ cStringT uniqueIndex; uniqueIndex.Format( _T("%d"), pPartyInfo->mThemeUniqueIdx ); mpMemberList->AddColume( row, uniqueIndex.Cstr(), COLOR_WHITE ); } else { mpMemberList->AddColume( row, UIMAN->GetUIText( 26521 ), COLOR_WHITE ); } } } else { ///ÆÄƼ¿øÀÇ ±Í¼Ó Á¤º¸°¡ ¾ø´Â °æ¿ì ±âº» ¼ÂÆÃ /// ·¹º§ cStringT str; str.Format( _T("%d"), pPartyData->level ); int row = mpMemberList->AddRow( str.Cstr(), COLOR_WHITE, NULL ); if( row > -1 ) { /// À̸§ if( pPartyData->name ) mpMemberList->AddColume( row, pPartyData->name, COLOR_WHITE ); /// Á÷¾÷ LPCTSTR jobName = GAMERESOURCEMAN->GetJobName( pPartyData->job ); if( jobName ) mpMemberList->AddColume( row, jobName, COLOR_WHITE ); /// ¹ÌÁøÀÔ »óÅ mpMemberList->AddColume( row, UIMAN->GetUIText( 26523 ), COLOR_WHITE ); /// ¹Ì±Í¼Ó »óÅ mpMemberList->AddColume( row, UIMAN->GetUIText( 26521 ), COLOR_WHITE ); } } } else { assert(0); continue; } } } else { /// ÆÄƼ¿øµéÀÌ ¸ðµÎ ±Í¼Ó Á¤º¸°¡ ¾ø´Ù¸é ±âº» ¼ÂÆÃ /// ÆÄƼ¿ø Å׸¶ ±Í¼Ó »óÅ ui ¼³Á¤ unsigned int partyMax = PARTYMAN->GetPartyCount(); for( unsigned int index = 0; index < partyMax; ++index ) { sPartyUserData* pPartyData; pPartyData = PARTYMAN->GetPartyInfo( index ); if( pPartyData ) { ///ÆÄƼ¿øÀÇ ±Í¼Ó Á¤º¸°¡ ¾ø´Â °æ¿ì ±âº» ¼ÂÆÃ /// ·¹º§ cStringT str; str.Format( _T("%d"), pPartyData->level ); int row = mpMemberList->AddRow( str.Cstr(), COLOR_WHITE, NULL ); if( row > -1 ) { /// À̸§ if( pPartyData->name ) mpMemberList->AddColume( row, pPartyData->name, COLOR_WHITE ); /// Á÷¾÷ LPCTSTR jobName = GAMERESOURCEMAN->GetJobName( pPartyData->job ); if( jobName ) mpMemberList->AddColume( row, jobName, COLOR_WHITE ); /// ¹ÌÁøÀÔ »óÅ mpMemberList->AddColume( row, UIMAN->GetUIText( 26523 ), COLOR_WHITE ); /// ¹Ì±Í¼Ó »óÅ mpMemberList->AddColume( row, UIMAN->GetUIText( 26521 ), COLOR_WHITE ); } } else { assert(0); return; } } } }