#include "SunClientPrecompiledHeader.h" #include "CompetitionScene.h" #include "Map.h" #include "BGMSoundInfoParser.h" #include "MapInfoParser.h" #include "NPCInfoParser.h" #include "NPCPortalDialog.h" #include "LoadScene.h" #include "Hero.h" #include "HeroActionInput.h" #include "ItemManager.h" #include "ObjectManager.h" #include "uiBattleZoneWinDialog/uiBattleZoneWinDialog.h" #include "uiBattleZoneCHuntingScoreBoard/uiBattleZoneCHuntingScoreBoard.h" #include "uiBattleZoneDoing/uiBattleZoneDoing.h" #include "uiHelpMan/uiHelpMan.h" #include "interfacemanager.h" #include "globalfunc.h" #include "uiSystemMan/uiSystemMan.h" #include "uiBattleScoreMan\uiBattleScoreMan.h" //---------------------------------------------------------------------------- /** */ void CompetitionScene::ParsePacket( MSG_BASE * pMsg ) { switch ( pMsg->m_byCategory ) { case CG_CHUNTING: { switch (pMsg->m_byProtocol) { case CG_CHUNTING_ENTER_NEW_PARTY_BRD: { MSG_CG_CHUNTING_ENTER_NEW_PARTY_BRD* recv = (MSG_CG_CHUNTING_ENTER_NEW_PARTY_BRD *)pMsg; TCHAR szMessage[INTERFACE_STRING_LENGTH] = {0,}; TCHAR szTemp[INTERFACE_STRING_LENGTH] = {0,}; TCHAR szTemp2[INTERFACE_STRING_LENGTH] = {0,}; uiBattleScoreMan* battle_score_manager_ptr = static_cast(g_InterfaceManager.GetUserInterfaceManager(UIMAN_BATTLE_SCORE)); if (battle_score_manager_ptr && (battle_score_manager_ptr->GetMode() == uiBattleScoreMan::eBTS_HUNTING)) { if (battle_score_manager_ptr->IsBattleScoreWinOpen() == true) // âÀÌ ¿­¸° °æ¿ì¸¸ ´Ù½Ã ¿äûÇÏÀÚ { battle_score_manager_ptr->set_toggle_ui_open(true); battle_score_manager_ptr->SendPacketBattleResultSYN(); } battle_score_manager_ptr->ResetHuntingData(); battle_score_manager_ptr->RefreshInfo(0, 0); } BattleRoomEntry* entry = BattleScene::GetPendingBattleRoomEntry(); if (entry) { const ADDITIONAL_CHUNTINGINFO* info = entry->GetAdditionalCHuntingInfo(NULL); if (info) { switch (info->m_Mode) { case eCOMPETITION_MODE_SURVIVAL: { g_InterfaceManager.GetInterfaceString(9091,szTemp,INTERFACE_STRING_LENGTH); g_InterfaceManager.GetInterfaceString(9096,szTemp2,INTERFACE_STRING_LENGTH); Snprintf(szMessage, INTERFACE_STRING_LENGTH-1, _T("%s\n%s"), szTemp, szTemp2); GlobalFunc::OutputMsg_Notice(eOUTPUT_MSG_TOP_SHOW, szMessage); g_InterfaceManager.GetInterfaceString(9097,szTemp,INTERFACE_STRING_LENGTH); Snprintf(szMessage, INTERFACE_STRING_LENGTH-1, szTemp); GlobalFunc::OutputMsg_Notice(eOUTPUT_MSG_CENTER_SHOW, szMessage); } break; default: case eCOMPETITION_MODE_TIME_ATTACK: { g_InterfaceManager.GetInterfaceString(9091,szTemp,INTERFACE_STRING_LENGTH); g_InterfaceManager.GetInterfaceString(9092,szTemp2,INTERFACE_STRING_LENGTH); Snprintf(szMessage, INTERFACE_STRING_LENGTH-1, _T("%s\n%s"), szTemp, szTemp2); GlobalFunc::OutputMsg_Notice(eOUTPUT_MSG_TOP_SHOW, szMessage); g_InterfaceManager.GetInterfaceString(9093,szTemp,INTERFACE_STRING_LENGTH); Snprintf(szMessage, INTERFACE_STRING_LENGTH-1, szTemp); GlobalFunc::OutputMsg_Notice(eOUTPUT_MSG_CENTER_SHOW, szMessage); } break; case eCOMPETITION_MODE_DEATH_MATCH: { g_InterfaceManager.GetInterfaceString(9091,szTemp,INTERFACE_STRING_LENGTH); g_InterfaceManager.GetInterfaceString(9101,szTemp2,INTERFACE_STRING_LENGTH); Snprintf(szMessage, INTERFACE_STRING_LENGTH-1, _T("%s\n%s"), szTemp, szTemp2); GlobalFunc::OutputMsg_Notice(eOUTPUT_MSG_TOP_SHOW, szMessage); g_InterfaceManager.GetInterfaceString(9102,szTemp,INTERFACE_STRING_LENGTH); Snprintf(szMessage, INTERFACE_STRING_LENGTH-1, szTemp); GlobalFunc::OutputMsg_Notice(eOUTPUT_MSG_CENTER_SHOW, szMessage); } break; } } } m_statusInfo.clear(); m_statusInfo.m_status = eCOMPETITION_SCENE_START_READY; m_statusInfo.m_dwTickStart = clock_function::GetTickCount(); if ( !m_winInfo.m_wWinPoint) m_statusInfo.m_renderstatus = eCOMPETITION_RENDER_NONE; m_winInfo.m_wKillPoint = 0; m_winInfo.m_wOtherKillPoint = 0; uiBattleZoneDoing *pDialog = GET_CAST_DIALOG( uiBattleZoneDoing, IM_BATTLEZONE_MANAGER::BATTLEZONE_CHUNTING_DOING ); if( pDialog ) { pDialog->SetKillPoint(m_winInfo.m_wKillPoint, m_winInfo.m_wOtherKillPoint); } // disable PK g_HeroInput.SetCannotAttack(TRUE); } break; case CG_CHUNTING_START_COMPETITION_BRD: { m_statusInfo.m_status = eCOMPETITION_SCENE_START; // enable PK g_HeroInput.SetCannotAttack(FALSE); g_HeroInput.SetAutoAttack(FALSE); m_statusInfo.m_dwTickCompStart = clock_function::GetTickCount(); } break; case CG_CHUNTING_TIE_COMPETITION_BRD: // ¹«½ÂºÎ { m_statusInfo.m_status = eCOMPETITION_SCENE_NONE; m_statusInfo.m_renderstatus = eCOMPETITION_RENDER_TIE; m_winInfo.m_wKillPoint = 0; m_winInfo.m_wOtherKillPoint = 0; uiBattleZoneDoing * pDialog = GET_CAST_DIALOG( uiBattleZoneDoing, IM_BATTLEZONE_MANAGER::BATTLEZONE_CHUNTING_DOING ); if( pDialog ) { pDialog->SetKillPoint(m_winInfo.m_wKillPoint, m_winInfo.m_wOtherKillPoint); } TCHAR szMessage[INTERFACE_STRING_LENGTH] = {0,}; //9090 ¾ç ÆÀÀÌ ¹«½ÂºÎ·Î 󸮵Ǿú½À´Ï´Ù. g_InterfaceManager.GetInterfaceString(9090,szMessage,INTERFACE_STRING_LENGTH); GlobalFunc::OutputMsg_Notice(eOUTPUT_MSG_CENTER_SHOW, szMessage); uiBattleScoreMan* battle_score_manager_ptr = static_cast(g_InterfaceManager.GetUserInterfaceManager(UIMAN_BATTLE_SCORE)); if(battle_score_manager_ptr && (battle_score_manager_ptr->GetMode() == uiBattleScoreMan::eBTS_HUNTING)) { battle_score_manager_ptr->set_toggle_ui_open(true); battle_score_manager_ptr->SendPacketBattleResultSYN(); } } break; case CG_CHUNTING_WIN_COMPETITION_BRD: { MSG_CG_CHUNTING_WIN_COMPETITION_BRD* recv = (MSG_CG_CHUNTING_WIN_COMPETITION_BRD *)pMsg; if(!g_pHero) return; m_winInfo.m_wWinPoint = recv->m_wWinPoint; m_winInfo.m_PlusPVPPoint = recv->m_PlusPVPPoint; MONEY iMoney = g_pHero->GetMoney(); m_winInfo.m_CurMoney = recv->m_CurMoney - g_pHero->GetMoney(); g_pHero->SetMoney(recv->m_CurMoney); CODETYPE dwCode = ItemManager::Instance()->InsertInventoryTotalInfo(REWARD, recv->m_ItemInfo); EXPTYPE i64Exp = g_pHero->GetExp(); m_winInfo.m_i64Exp = recv->m_i64Exp - g_pHero->GetExp(); g_pHero->SetExp(recv->m_i64Exp); #if !defined(_NA_006774_20130617_ARRANGE_UNNECESSARY_RESOURCES) uiBattleZoneWinDialog * winDialog = GET_CAST_DIALOG( uiBattleZoneWinDialog, IM_BATTLEZONE_MANAGER::BATTLEZONE_CHUNTING_WIN ); if( winDialog ) { winDialog->ShowResultWin((int)m_winInfo.m_wWinPoint, (int)m_winInfo.m_i64Exp, (int)m_winInfo.m_CurMoney, dwCode, recv->m_ItemInfo.m_InvenCount); } #endif//#if !defined(_NA_006774_20130617_ARRANGE_UNNECESSARY_RESOURCES) #ifdef _DEBUG TCHAR szDebug[INTERFACE_STRING_LENGTH] = {0,}; Snprintf (szDebug,INTERFACE_STRING_LENGTH-1, _T("%d Win, Exp[%d], Money[%d], item[%d]"), m_winInfo.m_wWinPoint, m_winInfo.m_i64Exp, m_winInfo.m_CurMoney, recv->m_ItemInfo.m_InvenCount); GlobalFunc::OutputMsg_Notice(eOUTPUT_MSG_CHAT, szDebug); #endif // _DEBUG m_statusInfo.m_renderstatus = eCOMPETITION_RENDER_WIN; m_statusInfo.m_status = eCOMPETITION_SCENE_NONE; uiBattleScoreMan* battle_score_manager_ptr = static_cast(g_InterfaceManager.GetUserInterfaceManager(UIMAN_BATTLE_SCORE)); if(battle_score_manager_ptr && (battle_score_manager_ptr->GetMode() == uiBattleScoreMan::eBTS_HUNTING)) { battle_score_manager_ptr->set_toggle_ui_open(true); battle_score_manager_ptr->SendPacketBattleResultSYN(); } } break; case CG_CHUNTING_LOSE_COMPETITION_BRD: { m_ProcessDeathMessage = true; MSG_CG_CHUNTING_LOSE_COMPETITION_BRD* recv = (MSG_CG_CHUNTING_LOSE_COMPETITION_BRD *)pMsg; m_statusInfo.m_renderstatus = eCOMPETITION_RENDER_LOSE; m_winInfo.clear(); TCHAR szMessage[INTERFACE_STRING_LENGTH] = {0,}; g_InterfaceManager.GetInterfaceString(eST_CHUNTING_LOSE_COMPETITION,szMessage,INTERFACE_STRING_LENGTH); // ´ç½ÅÀÇ ÆÀÀº ÆÐ¹èÇÏ¿´½À´Ï´Ù!\n\nÀá½Ã ÈÄ ¸¶À»·Î À̵¿µË´Ï´Ù. uiSystemMan * pSystemMan = (uiSystemMan *)g_InterfaceManager.GetUserInterfaceManager(UIMAN_SYSTEM); if(pSystemMan) pSystemMan->Sys_Verify(szMessage); uiBattleScoreMan* battle_score_manager_ptr = static_cast(g_InterfaceManager.GetUserInterfaceManager(UIMAN_BATTLE_SCORE)); if(battle_score_manager_ptr && battle_score_manager_ptr->GetMode() == uiBattleScoreMan::eBTS_HUNTING) { battle_score_manager_ptr->set_toggle_ui_open(true); battle_score_manager_ptr->SendPacketBattleResultSYN(); } } break; case CG_CHUNTING_UPDATE_KILLPOINT_BRD: { MSG_CG_CHUNTING_UPDATE_KILLPOINT_BRD* recv = (MSG_CG_CHUNTING_UPDATE_KILLPOINT_BRD *)pMsg; if(recv->m_wTeamKey == m_wMyTeamKey) { m_winInfo.m_wKillPoint = recv->m_wKillPoint; } else { m_winInfo.m_wOtherKillPoint = recv->m_wKillPoint; } uiBattleZoneDoing *pDialog = GET_CAST_DIALOG( uiBattleZoneDoing, IM_BATTLEZONE_MANAGER::BATTLEZONE_CHUNTING_DOING ); if( pDialog ) { pDialog->SetKillPoint(m_winInfo.m_wKillPoint, m_winInfo.m_wOtherKillPoint); } } break; case CG_CHUNTING_TEAM_INFO_CMD: { MSG_CG_CHUNTING_TEAM_INFO_CMD* recv = (MSG_CG_CHUNTING_TEAM_INFO_CMD *)pMsg; m_wMyTeamKey = recv->m_wTeamKey; m_winInfo.m_wKillPoint = 0; m_winInfo.m_wOtherKillPoint = 0; uiBattleZoneDoing *pDialog = GET_CAST_DIALOG( uiBattleZoneDoing, IM_BATTLEZONE_MANAGER::BATTLEZONE_CHUNTING_DOING ); if( pDialog ) { pDialog->SetKillPoint(m_winInfo.m_wKillPoint, m_winInfo.m_wOtherKillPoint); } } break; case CG_CHUNTING_UPDATE_POTIONCOUNT_BRD: { MSG_CG_CHUNTING_UPDATE_POTIONCOUNT_BRD* recv = (MSG_CG_CHUNTING_UPDATE_POTIONCOUNT_BRD*)pMsg; } break; case CG_CHUNTING_POINT_INFO_ACK: { MSG_CG_CHUNTING_POINT_INFO_ACK* recv = (MSG_CG_CHUNTING_POINT_INFO_ACK*)pMsg; } break; default: BattleScene::ParsePacket( pMsg ); break; } } break; case CG_STATUS: { switch( pMsg->m_byProtocol ) { case CG_STATUS_RESURRECTION_BRD: { BattleScene::OnRecvCG_STATUS( pMsg ); MSG_CG_STATUS_RESURRECTION_BRD *pRecvPacket = (MSG_CG_STATUS_RESURRECTION_BRD *)pMsg; if ( g_pHero && (g_pHero->GetObjectKey() == pRecvPacket->m_dwObjectKey)) { m_bDeadFlag = FALSE; } this->ResetProcessDeathMessage(); } break; case CG_STATUS_RESURRECTION_TO_SAFEZONE_NAK: { MSG_CG_STATUS_RESURRECTION_TO_SAFEZONE_NAK *pRecvPacket = (MSG_CG_STATUS_RESURRECTION_TO_SAFEZONE_NAK *)pMsg; //pRecvPacket->m_byErrorCode // 5364 ºÎȰÀ» ÇÒ ¼ö ¾ø½À´Ï´Ù. TCHAR szMessage[INTERFACE_STRING_LENGTH] = {0,}; g_InterfaceManager.GetInterfaceString(5364,szMessage,INTERFACE_STRING_LENGTH); GlobalFunc::OutputMsg_Notice(eOUTPUT_MSG_CHAT, szMessage); } break; default: BattleScene::OnRecvCG_STATUS( pMsg ); break; } } break; default: BattleScene::ParsePacket( pMsg ); break; } }