#include "stdafx.h" #include "PVPManager.h" #include "Protocol.h" #include "ChatManager.h" #include "StageManager.h" #include "ObjectManager.h" #include "hero.h" #include "GameUIManager.h" #include "DMScoreWindow.h" #include "Npc_Common.h" #include "SceneManager.h" #include "SmallMiniMapWindow.h" #include "MiniMapWindow.h" #include "PartyUnionManager.h" #include "GameResourceManager.h" #include "PvPScript.h" #include "DMMsgWindow.h" #include "InputSystem.h" #include "ShortcutManager.h" cPVPManager* cPVPManager::mpSingleton = 0; cPVPManager::cPVPManager() { assert( mpSingleton == 0 && "bad singleton!" ); mpSingleton = this; mPVPType = MAP_NONE; mPVPState = ePVPState_None; mLeaderIdx = 0; mMinLevel = 0; mMaxLevel = 0; mWaitLeftTime = 0; mFightLeftTime = 0; mReadyPrintTime = ULONG_MAX; mTeamAScore = 0; mTeamBScore = 0; mGoalPoint = 0; mUpdateRankInfo = false; mRequestLock = false; } cPVPManager::~cPVPManager() { if( mTeamInfoMap.GetSize() != 0 ) { cMyTeamInfoMap::cIterator i = mTeamInfoMap.Begin(); cMyTeamInfoMap::cIterator end = mTeamInfoMap.End(); for( ; i != end; ++i ) { sMyTeamInfo* info = (sMyTeamInfo*)(*i).mSecond; SAFE_DELETE( info ); } mTeamInfoMap.Clear(); } } int PvPRankSort( const void *arg1, const void *arg2 ) { sMyTeamInfo* score1 = (sMyTeamInfo*)arg1; sMyTeamInfo* score2 = (sMyTeamInfo*)arg2; assert(score1); assert(score2); if( score2->mKillCnt > score1->mKillCnt ) { return 1; } else if( score2->mKillCnt < score1->mKillCnt ) { return -1; } else { /// return score1->mDeathCnt - score2->mDeathCnt; } } int PvPResultSort( const void *arg1, const void *arg2 ) { sMyTeamInfo* score1 = (sMyTeamInfo*)arg1; sMyTeamInfo* score2 = (sMyTeamInfo*)arg2; assert(score1); assert(score2); return score2->mScoreResult - score1->mScoreResult; } void cPVPManager::Open() { if( IsEnableBattle() == false ) return; /// Á¡¼öÆÇ º¸¿©ÁÖ±â cDMScoreWindow* win = GAMEUI->GetDMScoreWindow(); if( win ) { win->Clear(); if( mPVPType != MAP_NONE ) { sDMInfo* dmInfo = PVPSCRIPT->GetDmInfo( mPVPType ); if( dmInfo ) { sDMBlockInfo* dmBlockInfo = dmInfo->GetBlockInfo( HERO->GetLevel() ); if( dmBlockInfo ) { mGoalPoint = dmBlockInfo->mGoalPoint; } } } /// ³²ÂÊ/ºÏÂÊÀÎÁö üũ & µ¥½º¸ÅÄ¡ÀÎÁö Ã¼Å©ÇØ¼­ ¼®»ó À̹ÌÁö ¼ÂÆÃÇϱâ if( HERO && mPVPType == MAP_DEATHMATCH ) win->SetStoneImage( HERO->GetPVPTeam() ); win->Show(); } cDMRankingListWindow* rankWin = GAMEUI->GetDMRankingListWindow(); if( rankWin ) rankWin->Clear(); mUpdateRankInfo = true; CHATMANAGER->AddSystemMsg( eSYSTEM_NORMAL, GAMERESOURCEMAN->GetGameText( 821 ) ); } void cPVPManager::Close() { ChangeState( ePVPState_None ); if( mTeamInfoMap.GetSize() != 0 ) { cMyTeamInfoMap::cIterator i = mTeamInfoMap.Begin(); cMyTeamInfoMap::cIterator end = mTeamInfoMap.End(); for( ; i != end; ++i ) { sMyTeamInfo* info = (sMyTeamInfo*)(*i).mSecond; SAFE_DELETE( info ); } mTeamInfoMap.Clear(); } mRequestLock = false; } void cPVPManager::Process( unsigned long deltaTime, unsigned long accumTime ) { if( mPVPState == ePVPState_None ) return; if( mPVPState >= ePVPState_Enable && mPVPState < ePVPState_Result ) { cKeyboardAgent* keyAgent = INPUTSYS->GetKeyboard(); if( keyAgent->GetKeyPressed( KEY_SCORE_BOARD ) == true ) { OpenRank( mUpdateRankInfo ); mUpdateRankInfo = false; } else { cDMRankingListWindow* win = GAMEUI->GetDMRankingListWindow(); if( win ) win->Hide( false ); } } switch( mPVPState ) { case ePVPState_Notice: { // ³²Àº½Ã°£ °»½Å if( mWaitLeftTime > deltaTime ) { mWaitLeftTime -= deltaTime; } else { mWaitLeftTime = 0; ChangeState( ePVPState_None ); } } break; case ePVPState_Count: { // ³²Àº½Ã°£ °»½Å if( mWaitLeftTime > deltaTime ) { mWaitLeftTime -= deltaTime; } else { mWaitLeftTime = 0; ChangeState( ePVPState_Wait ); } } break; case ePVPState_Ready: { if( mFightLeftTime == 0 ) return; if( mFightLeftTime < deltaTime ) { mFightLeftTime = 0; return; } else mFightLeftTime -= deltaTime; if( mFightLeftTime <= mReadyPrintTime ) { /// chat message cStringT Message; Message.Format( GAMERESOURCEMAN->GetGameText( 835 ), mReadyPrintTime/1000 ); CHATMANAGER->AddSystemMsg( eSYSTEM_NORMAL, Message.Cstr() ); if( mReadyPrintTime == 30000 ) mReadyPrintTime = 10000; else if( mReadyPrintTime <= 10000 ) mReadyPrintTime -= 1000; } } break; } } void cPVPManager::ChangeState( ePVPState state ) { mPVPState = state; switch( mPVPState ) { case ePVPState_None: { // ÃʱâÈ­ mPVPType = MAP_NONE; mLeaderIdx = 0; mMinLevel = 0; mMaxLevel = 0; mFightLeftTime = 0; mWaitLeftTime = 0; mReadyPrintTime = ULONG_MAX; mUpdateRankInfo = false; mTeamAScore = 0; mTeamBScore = 0; mGoalPoint = 0; cDMMsgWindow* win = GAMEUI->GetDMMsgWindow(); if( win ) { win->Hide(); win->Clear(); } } break; case ePVPState_Notice: // ÀÔÀå¾Ë¸² { // ÀüÀå ÀÔÀå ¾Ë¸² cDMMsgWindow* win = GAMEUI->GetDMMsgWindow(); if( win ) win->Show(); } break; case ePVPState_Count: // ÀÔÀå ´ë±â { // À©µµ¿ì °»½Å cDMMsgWindow* win = GAMEUI->GetDMMsgWindow(); if( win ) win->Show(); } break; case ePVPState_Wait: { cDMMsgWindow* win = GAMEUI->GetDMMsgWindow(); if( win ) { win->Hide(); win->Clear(); } // ¸ÊÀ̵¿ ´ë±â ¶ç¿ì±â UIMAN->CreateMsgBox( eStage_Game, eMSGBOX_MODAL, eMBEVENT_PVP_READY_MAPCHANGE, eSKIN_NONE, GAMERESOURCEMAN->GetGameText( 843 ), GAMERESOURCEMAN->GetGameText( 2 ) // ¾Ë¸² ); } break; case ePVPState_MapChangeWait: // ¸Ê üÀÎÁö ´ë±â { cDMMsgWindow* win = GAMEUI->GetDMMsgWindow(); if( win ) { win->Hide(); win->Clear(); } // ÀÔÀå ´ë±â ¸¶°¨ HERO->CancelByMapchange(); /// ¸ÊÀ̵¿ ´ë±â if( HERO->GetState() == eOBJECT_STATE_ATTACK || HERO->GetState() == eOBJECT_STATE_MOVE ) { HERO->SetState( eOBJECT_STATE_IDLE ); /// µû¶ó°¡±â Á¾·á if( HERO->IsFollowing() ) HERO->ReleaseFollowPlayer(); } // ¸ÊÀ̵¿ ´ë±â ¶ç¿ì±â UIMAN->CreateMsgBox( eStage_Game, eMSGBOX_MODAL, eMBEVENT_PVP_READY_MAPCHANGE, eSKIN_NONE, GAMERESOURCEMAN->GetGameText( 843 ), GAMERESOURCEMAN->GetGameText( 2 ) // ¾Ë¸² ); } break; case ePVPState_Enable: // ÀüÅõ °¡´É(¸ÊÀ̵¿ÈÄ) { } break; case ePVPState_Ready: // ÀüÅõ ´ë±â { mFightLeftTime = PVP_DM_READY_PRINT1_TIME; mReadyPrintTime = PVP_DM_READY_PRINT2_TIME; /// chat message cStringT Message; Message.Format( GAMERESOURCEMAN->GetGameText( 835 ), mFightLeftTime/1000 ); CHATMANAGER->AddSystemMsg( eSYSTEM_NORMAL, Message.Cstr() ); } break; case ePVPState_Fight: // ÀüÅõ { /// ÀüÅõ ¾Ë¸² ½ÃÀÛ cDMScoreWindow* win = GAMEUI->GetDMScoreWindow(); if( win ) { win->SetTime( mReadyPrintTime ); win->ActiveTime(); } /// npc »èÁ¦ OBJECTMAN->FadeOutNpcAll(); SCENEMAN->RemoveAllDoorNode(); cSmallMiniMapWindow* mini = GAMEUI->GetSmallMinimapWindow(); if( mini ) mini->ClearNpc(); cMiniMapWindow* wide = GAMEUI->GetMinimapWindow(); if( wide ) wide->ClearNpc(); unsigned int textIdx = 0; switch( mPVPType ) { case MAP_DEATHMATCH: textIdx = 859; break; case MAP_FLAG: textIdx = 860; break; default: assert(0); return; } cStringT Message; Message.Format( GAMERESOURCEMAN->GetGameText( 822 ), GAMERESOURCEMAN->GetGameText( textIdx ) ); CHATMANAGER->AddSystemMsg( eSYSTEM_NORMAL, (LPCTSTR)Message.Cstr() ); } break; case ePVPState_Result: // °á°ú { /// ½Ã°£ Á¤Áö cDMScoreWindow* win = GAMEUI->GetDMScoreWindow(); if( win ) win->DeActiveTime(); cSmallMiniMapWindow* mini = GAMEUI->GetSmallMinimapWindow(); cMiniMapWindow* wide = GAMEUI->GetMinimapWindow(); if( mini && wide ) { mini->ClearFlag(); mini->ClearFlagPoint(); mini->ClearStone(); wide->ClearFlag(); wide->ClearFlagPoint(); wide->ClearStone(); } } break; } } void cPVPManager::NetworkMsgParser( char* msg ) { MSGROOT* tempMsg = (MSGROOT*)msg; switch( tempMsg->Protocol ) { case NM_PVP_DM_NOTICE_SYN: { MSG_SYN_PVP_DM_NOTICE* pmsg = (MSG_SYN_PVP_DM_NOTICE*)tempMsg; unsigned int textIdx = 0; switch( pmsg->mPvPType ) { case MAP_DEATHMATCH: textIdx = 859; break; case MAP_FLAG: textIdx = 860; break; default: assert(0); return; } cStringT Message; Message.Format( GAMERESOURCEMAN->GetGameText( 838 ), GAMERESOURCEMAN->GetGameText( textIdx ), pmsg->mLeftTime ); CHATMANAGER->AddSystemMsg( eSYSTEM_PVP, Message.Cstr() ); } break; case NM_PVP_READYQUESTION_SYN: { MSG_SYN_PVP_READYQUESTION* pmsg = (MSG_SYN_PVP_READYQUESTION*)tempMsg; mPVPType = pmsg->mPvPType; mMinLevel = pmsg->mMinLevel; mMaxLevel = pmsg->mMaxLevel; mWaitLeftTime = pmsg->mLeftTime; // ÀÔÀå ¾Ë¸² ¸Þ¼¼Áö ChangeState( ePVPState_Notice ); } break; case NM_PVP_READY_RES: { MSG_ERROR* pmsg = (MSG_ERROR*)tempMsg; if( pmsg->ErrorCode == 0 ) { // ÀÔÀå Ä«¿îÆ® ´ë±â ChangeState( ePVPState_Count ); } else { // ÀÔÀå´ë±â ½ÇÆÐ ChangeState( ePVPState_None ); CHATMANAGER->AddSystemMsg( eSYSTEM_PVP, GAMERESOURCEMAN->GetGameText( 845 ) ); } } break; case NM_PVP_READYCANCEL_RES: { // ÀÔÀå ´ë±â Ãë¼Ò MSG_ERROR* pmsg = (MSG_ERROR*)tempMsg; if( pmsg->ErrorCode == 0 ) { ChangeState( ePVPState_None ); // Ãë¼Ò CHATMANAGER->AddSystemMsg( eSYSTEM_PVP, GAMERESOURCEMAN->GetGameText( 847 ) ); } else { // Ãë¼Ò ºÒ°¡ CHATMANAGER->AddSystemMsg( eSYSTEM_PVP, GAMERESOURCEMAN->GetGameText( 848 ) ); } } break; case NM_PVP_READYCLOSE_SYN: { // ¸ÊüÀÎÁö ´ë±â ChangeState( ePVPState_MapChangeWait ); } break; case NM_PVP_JOIN_SYN: { MSG_PLAYERINFO* pmsg = (MSG_PLAYERINFO*)tempMsg; UIMAN->DestroyMsgBox( eMBEVENT_PVP_READY_MAPCHANGE ); if( pmsg->ErrorCode == 0 ) { // ¸ÊÀ̵¿ STAGEMAN->SetMapIdx( pmsg->MapNum ); STAGEMAN->SetMapMode( pmsg->MapMode ); STAGEMAN->ChangeStage( eStage_MapChange ); // ÀüÀå ŸÀÔ ÀúÀå mPVPType = pmsg->MapNum; // ½ºÅ×ÀÌÁö º¯°æÈÄ PVP ÀüÀå ¼¼ÆÃ ChangeState( ePVPState_Enable ); /// ½ºÅ×ÀÌÁö º¯°æÈÄ HERO°´Ã¼ »ý¼º OBJECTMANAGER->AddHeroFromServerMsg( pmsg ); } else { ChangeState( ePVPState_None ); UIMAN->CreateMsgBox( eStage_Game, eMSGBOX_MODALLESS, eMBEVENT_NONE, eSKIN_OK, GAMERESOURCEMAN->GetGameText( 839 ), GAMERESOURCEMAN->GetGameText( 2 ) ); } } break; case NM_PVP_DM_MEMBERIN_RES: { /// µ¿¸Í¼¼·Â ºÐ·ù MSG_RES_PVP_DM_MEMBERIN* pmsg = (MSG_RES_PVP_DM_MEMBERIN*)tempMsg; cDMScoreWindow* scoreWin = (cDMScoreWindow*)GAMEUI->GetDMScoreWindow(); if( scoreWin ) { scoreWin->SetTeamImage( pmsg->mFireForce, pmsg->mWaterForce, pmsg->mWindForce, pmsg->mEarthForce ); } /// set member info for( unsigned int i=0; imMemberCnt; i++ ) { AddTeamPlayerInfo( &(pmsg->mMemberInfo[i]) ); } } break; case NM_PVP_DM_MEMBERIN_SYN: { MSG_SYN_PVP_DM_MEMBERIN* pmsg = (MSG_SYN_PVP_DM_MEMBERIN*)tempMsg; AddTeamPlayerInfo( &(pmsg->mMemberInfo) ); } break; case NM_PVP_DM_MEMBEROUT_SYN: { MSG_SYN_PVP_DM_MEMBEROUT* pmsg = (MSG_SYN_PVP_DM_MEMBEROUT*)tempMsg; DelTeamPlayerInfo( pmsg->mCharacterIdx ); } break; case NM_PVP_DM_READY_SYN: { /// 1ºÐ Ä«¿îÆ® ½ÃÀÛ ChangeState( ePVPState_Ready ); } break; case NM_PVP_DM_NOTREADY_SYN: { ChangeState( ePVPState_Enable ); /// °ÔÀÓ ÁøÇà ºÒ°¡ UIMAN->CreateMsgBox( eStage_Game, eMSGBOX_MODAL, eMBEVENT_PVP_DM_NOTREADY, eSKIN_OK, GAMERESOURCEMAN->GetGameText( 839 ), // pvp out GAMERESOURCEMAN->GetGameText( 301 ), // ¾Ë¸² 0, 0, PVP_DM_READY_OUT_TIME, false, true ); } break; case NM_PVP_DM_FIGHT_SYN: { MSG_SYN_PVP_FIGHT* pmsg = (MSG_SYN_PVP_FIGHT*)msg; mReadyPrintTime = pmsg->mFightTime; // ChangeState( ePVPState_Fight ); } break; case NM_PVP_DM_JOINTIME_SYN: { MSG_SYN_PVP_JOINTIME* pmsg = (MSG_SYN_PVP_JOINTIME*)msg; cStringT Message; Message.Format( GAMERESOURCEMAN->GetGameText( 835 ), pmsg->mFightLeftTime / SECOND ); CHATMANAGER->AddSystemMsg( eSYSTEM_NORMAL, Message.Cstr() ); } break; case NM_PVP_DM_SCORE_SYN: { /// Á¡¼ö º¯µ¿ MSG_SYN_PVP_DM_SCORE* pmsg = (MSG_SYN_PVP_DM_SCORE*)msg; if( pmsg->mTeamType == ePVPDM_TEAMTYPE_A ) { mTeamAScore = pmsg->mTotalScore; } else { mTeamBScore = pmsg->mTotalScore; } cDMScoreWindow* win = GAMEUI->GetDMScoreWindow(); if( win ) win->UpdatePoint( mTeamAScore, mTeamBScore ); /// if( HERO->GetPVPTeam() == pmsg->mTeamType ) UpdateTeamPlayerInfo( pmsg->mPlayerIdx, pmsg->mPlayerScore, true ); else UpdateTeamPlayerInfo( pmsg->mPlayerIdx, pmsg->mPlayerScore, false ); } break; case NM_PVP_DM2_SCORE_SYN: { /// Á¡¼ö¸¦ »°±äÂÊ¿¡ ¿À´Â ¸Þ½ÃÁö /// Á¡¼ö º¯µ¿ MSG_SYN_PVP_DM2_SCORE* pmsg = (MSG_SYN_PVP_DM2_SCORE*)msg; if( pmsg->mTeamType == ePVPDM_TEAMTYPE_A ) { mTeamAScore = pmsg->mTotalScore; } else { mTeamBScore = pmsg->mTotalScore; } cDMScoreWindow* win = GAMEUI->GetDMScoreWindow(); if( win ) win->UpdatePoint( mTeamAScore, mTeamBScore ); // »õ ±ê¹ß ¸®Á¨ ½Ã°£ ¾Ë¸² CHATMANAGER->AddPvPNoticeMsg( GAMERESOURCEMAN->GetGameText( 1101 ), COLOR_YELLOW ); // ±ê¹ß ¾Èº¸À̱â cSmallMiniMapWindow* mini = GAMEUI->GetSmallMinimapWindow(); cMiniMapWindow* wide = GAMEUI->GetMinimapWindow(); if( mini && wide ) { mini->DeleteFlag( pmsg->mDelFlagIdx ); wide->DeleteFlag( pmsg->mDelFlagIdx ); mini->DeleteFlagPoint( pmsg->mDelHoistIdx ); wide->DeleteFlagPoint( pmsg->mDelHoistIdx ); } PARTYUNIONMAN->ClearFlagPlayer(); } break; case NM_PVP_DM2_FLAGCOMPLETE_SYN: { /// ±ê¹ßÀ» ²ÈÀº ÂÊ¿¡ ¿À´Â ¸Þ½ÃÁö /// Á¡¼ö º¯µ¿ MSG_SYN_PVP_FLAGCOMPLETE_SCORE* pmsg = (MSG_SYN_PVP_FLAGCOMPLETE_SCORE*)msg; // ¾Æ±º °Ô¾ç ¾Ë¸² if( HERO->GetPVPTeam() == pmsg->mTeamType ) { LPCTSTR characterName = NULL; characterName = PARTYUNIONMAN->GetPlayerName( pmsg->mPlayerIdx ); cStringT msg; msg.Format( GAMERESOURCEMAN->GetGameText( 1104 ), characterName ); if( characterName ) CHATMANAGER->AddPvPNoticeMsg( msg.Cstr(), COLOR_YELLOW ); else CHATMANAGER->AddPvPNoticeMsg( GAMERESOURCEMAN->GetGameText( 1106 ), COLOR_YELLOW ); } if( pmsg->mTeamType == ePVPDM_TEAMTYPE_A ) { mTeamAScore = pmsg->mTotalScore; } else { mTeamBScore = pmsg->mTotalScore; } cDMScoreWindow* win = GAMEUI->GetDMScoreWindow(); if( win ) win->UpdatePoint( mTeamAScore, mTeamBScore ); // ±ê¹ß ¾Èº¸À̱â cSmallMiniMapWindow* mini = GAMEUI->GetSmallMinimapWindow(); cMiniMapWindow* wide = GAMEUI->GetMinimapWindow(); if( mini && wide ) { mini->DeleteFlag( pmsg->mDelFlagIdx ); wide->DeleteFlag( pmsg->mDelFlagIdx ); mini->DeleteFlagPoint( pmsg->mDelHoistIdx ); wide->DeleteFlagPoint( pmsg->mDelHoistIdx ); } PARTYUNIONMAN->ClearFlagPlayer(); } break; case NM_PVP_DM2_FLAGDROP_SYN: { MSG_SYN_PVP_DM2_FLAGDROP* pmsg = (MSG_SYN_PVP_DM2_FLAGDROP*)msg; /// ¾Æ±º ±ê¹ß µå·Ó ¸Þ½ÃÁö Ãâ·Â LPCTSTR characterName = NULL; characterName = PARTYUNIONMAN->GetPlayerName( pmsg->mPlayerIdx ); cStringT msg; msg.Format( GAMERESOURCEMAN->GetGameText( 1103 ), characterName ); if( characterName ) CHATMANAGER->AddPvPNoticeMsg( msg.Cstr(), COLOR_YELLOW ); else CHATMANAGER->AddPvPNoticeMsg( GAMERESOURCEMAN->GetGameText( 1105 ), COLOR_YELLOW ); } break; case NM_PVP_DM2_PLAYER_SCORE_SYN: { /// Á¡¼ö º¯µ¿ MSG_SYN_PVP_DM2_PLAYER_SCORE* pmsg = (MSG_SYN_PVP_DM2_PLAYER_SCORE*)msg; /// if( HERO->GetPVPTeam() == pmsg->mTeamType ) UpdateTeamPlayerInfo( pmsg->mPlayerIdx, pmsg->mPlayerScore, true ); else UpdateTeamPlayerInfo( pmsg->mPlayerIdx, pmsg->mPlayerScore, false ); } break; case NM_PVP_DM2_INFO_SYN: { MSG_SYN_PVP_DM2_INFO* pmsg = (MSG_SYN_PVP_DM2_INFO*)msg; // ½Å±Ô Á¨¿¡ ´ëÇÑ ¸ÞÁ¦½Ã Ãâ·Â¿©ºÎ if( pmsg->mPrintNewGenMsg == true ) { CHATMANAGER->AddPvPNoticeMsg( GAMERESOURCEMAN->GetGameText( 1100 ), COLOR_YELLOW ); } cSmallMiniMapWindow* mini = GAMEUI->GetSmallMinimapWindow(); cMiniMapWindow* wide = GAMEUI->GetMinimapWindow(); if( mini && wide ) { float xpos = 0; float ypos = 0; cPlayer* player = OBJECTMAN->GetPlayer( pmsg->mFlagOwnerIdx ); if( player ) { xpos = player->GetXPos(); ypos = player->GetYPos(); } // ±ê¹ß ¼¼ÆÃ ( add or update ) mini->AddFlag( pmsg->mGatherIdx, pmsg->mFlagOwnerIdx, xpos, ypos ); wide->AddFlag( pmsg->mGatherIdx, pmsg->mFlagOwnerIdx, xpos, ypos ); // °Ô¾çÆ÷ÀÎÆ® ¼¼ÆÃ //mini->AddFlagPoint( pmsg->mFlagPointPos.x, pmsg->mFlagPointPos.y ); //wide->AddFlagPoint( pmsg->mFlagPointPos.x, pmsg->mFlagPointPos.y ); /// ¾Æ±º ±ê¹ß ½Àµæ ¸Þ½ÃÁö Ãâ·Â LPCTSTR characterName = NULL; characterName = PARTYUNIONMAN->GetPlayerName( pmsg->mFlagOwnerIdx ); cStringT msg; msg.Format( GAMERESOURCEMAN->GetGameText( 1102 ), characterName ); if( characterName ) CHATMANAGER->AddPvPNoticeMsg( msg.Cstr(), COLOR_YELLOW ); } /// Ç÷¡±× ¸ÅÄ¡¿¡¼­ ±ê¹ß °¡Áø À¯Àú ¼³Á¤ if( pmsg->mFlagOwnerIdx != 0 ) { /// Ç÷¡±× ¸ÅÄ¡¿¡¼­ ±ê¹ß °¡Á³À» °æ¿ì ÆÄƼâ, ÆÄƼ¿¬ÇÕâ ui Ç¥½Ã PARTYUNIONMAN->SetFlagPlayer( pmsg->mFlagOwnerIdx ); } else { /// Ç÷¡±× ¸ÅÄ¡¿¡¼­ ±ê¹ß µç À¯Àú üũ PARTYUNIONMAN->ClearFlagPlayer(); } } break; case NM_PVP_DM2_FLAGPOS_SYN: { MSG_SYN_PVP_DM2_FLAGPOS* pmsg = (MSG_SYN_PVP_DM2_FLAGPOS*)msg; // »ó´ëÆíÀÏ °æ¿ì¿¡¸¸ ¿Â´Ù cSmallMiniMapWindow* mini = GAMEUI->GetSmallMinimapWindow(); cMiniMapWindow* wide = GAMEUI->GetMinimapWindow(); if( mini && wide ) { // ±ê¹ß ¼¼ÆÃ ( add or update ) mini->AddFlag( pmsg->mGatherIdx, 0, pmsg->mFlagPos.x, pmsg->mFlagPos.y ); wide->AddFlag( pmsg->mGatherIdx, 0, pmsg->mFlagPos.x, pmsg->mFlagPos.y ); } } break; case NM_PVP_DM2_HOIST_SYN: { // ±ê¹ß °Ô¾çÆ÷ÀÎÆ® »ý¼º MSG_SYN_PVP_DM2_HOIST* pmsg = (MSG_SYN_PVP_DM2_HOIST*)msg; cSmallMiniMapWindow* mini = GAMEUI->GetSmallMinimapWindow(); cMiniMapWindow* wide = GAMEUI->GetMinimapWindow(); if( mini && wide ) { mini->AddFlagPoint( pmsg->mGatherIdx, pmsg->mPos.x, pmsg->mPos.y ); wide->AddFlagPoint( pmsg->mGatherIdx, pmsg->mPos.x, pmsg->mPos.y ); } } break; case NM_PVP_DM_LEADERSELECT_SYN: { MSG_SYN_PVP_DM_MEMBEROUT* pmsg = (MSG_SYN_PVP_DM_MEMBEROUT*)msg; mLeaderIdx = pmsg->mCharacterIdx; /// map ui setting cSmallMiniMapWindow* minimap = GAMEUI->GetSmallMinimapWindow(); cMiniMapWindow* pWide = GAMEUI->GetMinimapWindow(); if( minimap ) minimap->SetPvpLeader( mLeaderIdx ); if( pWide ) pWide->SetPvpLeader( mLeaderIdx ); PARTYUNIONMAN->SetPvpLeader( mLeaderIdx ); } break; case NM_PVP_DM_LEADERDIE_SYN: { MSG_SYN_DM_LEADERDIE* pmsg = (MSG_SYN_DM_LEADERDIE*)msg; LPCTSTR characterName = NULL; characterName = PARTYUNIONMAN->GetPlayerName( pmsg->mPlayerIdx ); if( characterName ) { cStringT msg; msg.Format( GAMERESOURCEMAN->GetGameText( 836 ), characterName ); CHATMANAGER->AddPvPNoticeMsg( msg.Cstr(), COLOR_YELLOW ); } else CHATMANAGER->AddPvPNoticeMsg( GAMERESOURCEMAN->GetGameText( 877 ), COLOR_YELLOW ); mLeaderIdx = 0; } break; case NM_PVP_DM_ENEMYLEADERDIE_SYN: { MSG_SYN_DM_ENEMYLEADERDIE* pmsg = (MSG_SYN_DM_ENEMYLEADERDIE*)msg; LPCTSTR characterName = NULL; characterName = PARTYUNIONMAN->GetPlayerName( pmsg->mPlayerIdx ); if( characterName ) { cStringT msg; msg.Format( GAMERESOURCEMAN->GetGameText( 837 ), characterName ); CHATMANAGER->AddPvPNoticeMsg( msg.Cstr(), COLOR_YELLOW ); } else CHATMANAGER->AddPvPNoticeMsg( GAMERESOURCEMAN->GetGameText( 878 ), COLOR_YELLOW ); } break; case NM_PVP_DM_STONE_DIE_SYN: { // ¼®»ó ÆÄ±« MSG_SYN_PVP_DM_STONE_DIE* pmsg = (MSG_SYN_PVP_DM_STONE_DIE*)msg; // Á¡¼ö ¼¼ÆÃ if( pmsg->mTeamType == ePVPDM_TEAMTYPE_A ) mTeamAScore = pmsg->mTotalScore; else mTeamBScore = pmsg->mTotalScore; cDMScoreWindow* dmScoreWin = GAMEUI->GetDMScoreWindow(); if( dmScoreWin ) dmScoreWin->UpdatePoint( mTeamAScore, mTeamBScore ); // ¼®»ó »èÁ¦ unsigned char loseTeam = (unsigned char)(( pmsg->mTeamType == ePVPDM_TEAMTYPE_A ) ? ePVPDM_TEAMTYPE_B : ePVPDM_TEAMTYPE_A); cSmallMiniMapWindow* miniMap = GAMEUI->GetSmallMinimapWindow(); cMiniMapWindow* wideMap = GAMEUI->GetMinimapWindow(); if( miniMap && wideMap ) { miniMap->DeleteStone( loseTeam ); wideMap->DeleteStone( loseTeam ); } cStringT msg; unsigned long nextGenTime = PVP_DM_STONE_REGEN_TIME / MINUTE; // ¾Ë¸² ¸Þ¼¼Áö if( HERO->GetPVPTeam() == loseTeam ) { // ·çÁîÆÀ msg.Format( GAMERESOURCEMAN->GetGameText( 872 ), nextGenTime ); CHATMANAGER->AddPvPNoticeMsg( msg.Cstr(), COLOR_YELLOW ); if( dmScoreWin ) dmScoreWin->SetStoneHP(0); } else { // ų·¯ÆÀ LPCTSTR characterName = PARTYUNIONMAN->GetPlayerName( pmsg->mKillerIndex ); if( characterName != 0 ) msg.Format( GAMERESOURCEMAN->GetGameText( 873 ), characterName, nextGenTime ); else msg.Format( GAMERESOURCEMAN->GetGameText( 876 ), characterName, nextGenTime ); CHATMANAGER->AddPvPNoticeMsg( msg.Cstr(), COLOR_YELLOW ); } } break; case NM_PVP_DM_STONE_CREATE_SYN: { MSG_SYN_PVP_DM_STONE_CREATE* pmsg = (MSG_SYN_PVP_DM_STONE_CREATE*)msg; /// ÇØ´ç À©µµ¿ì ÃÖ´ë °ÔÀÌÁö ¼ÂÆÃ & °ÔÀÌÁö ÃÖ´ëÄ¡·Î ¼ÂÆÃ cDMScoreWindow* scoreWin = GAMEUI->GetDMScoreWindow(); if( scoreWin ) { if( HERO->GetPVPTeam() == pmsg->mTeamType ) { scoreWin->SetStoneMaxHP( pmsg->mMaxHP ); scoreWin->SetStoneHP( pmsg->mMaxHP ); } /// ¸Ê¿¡ ¼®»ó Ç¥½Ã cSmallMiniMapWindow* mini = GAMEUI->GetSmallMinimapWindow(); cMiniMapWindow* wide = GAMEUI->GetMinimapWindow(); /// ¾î´ÀÆÀÀÇ ¼®»óÀÌ »ý¼ºµÆ´ÂÁö üũ unsigned long msgIndex = 875; if( HERO->GetPVPTeam() == pmsg->mTeamType ) msgIndex = 874; /// »ý¼º À§Ä¡ ¹Þ±â if( mini && wide ) { mini->AddStone( pmsg->mPos.x, pmsg->mPos.y, pmsg->mTeamType ); wide->AddStone( pmsg->mPos.x, pmsg->mPos.y, pmsg->mTeamType ); } CHATMANAGER->AddPvPNoticeMsg( GAMERESOURCEMAN->GetGameText( msgIndex ), COLOR_YELLOW ); } else { assert(0); return; } } break; case NM_PVP_DM_STONE_HP_SYN: { MSG_SYN_PVP_DM_STONE_HP* pmsg = (MSG_SYN_PVP_DM_STONE_HP*)msg; /// ÇØ´ç À©µµ¿ì °ÔÀÌÁö ¼ÂÆÃ cDMScoreWindow* scoreWin = GAMEUI->GetDMScoreWindow(); if( scoreWin ) { scoreWin->SetStoneHP( pmsg->mHP ); } else { assert(0); return; } } break; case NM_PVP_DM_WIN_SYN: case NM_PVP_DM_LOSE_SYN: { MSG_SYN_PVP_DM_FIGHTEND* pmsg = (MSG_SYN_PVP_DM_FIGHTEND*)msg; ChangeState( ePVPState_Result ); HERO->SetFirePoint( pmsg->mFirePointTotal ); HERO->SetFireFriendly( pmsg->mFireFriendlyTotal ); HERO->SetWaterPoint( pmsg->mWaterPointTotal ); HERO->SetWaterFriendly( pmsg->mWaterFriendlyTotal ); HERO->SetWindPoint( pmsg->mWindPointTotal ); HERO->SetWindFriendly( pmsg->mWindFriendlyTotal ); HERO->SetEarthPoint( pmsg->mEarthPointTotal ); HERO->SetEarthFriendly( pmsg->mEarthFriendlyTotal ); /// Result window show OpenResult( pmsg, (tempMsg->Protocol == NM_PVP_DM_WIN_SYN) ); /// °á°ú Ãâ·Â if( tempMsg->Protocol == NM_PVP_DM_WIN_SYN ) { /// °áÅõÁ¾·á - ½Â¸® switch( pmsg->mEndType ) { case ePVPDM_ENDTYPE_POINT: /// Æ÷ÀÎÆ® ´Þ¼º CHATMANAGER->AddSystemMsg( eSYSTEM_NORMAL, GAMERESOURCEMAN->GetGameText( 823 ) ); break; case ePVPDM_ENDTYPE_TIME: /// ½Ã°£ Ãʰú(Æ÷ÀÎÆ®·®) CHATMANAGER->AddSystemMsg( eSYSTEM_NORMAL, GAMERESOURCEMAN->GetGameText( 825 ) ); break; case ePVPDM_ENDTYPE_MEMBER: /// Àοø¼ö CHATMANAGER->AddSystemMsg( eSYSTEM_NORMAL, GAMERESOURCEMAN->GetGameText( 827 ) ); break; case ePVPDM_ENDTYPE_LEADERDIE: /// ¼öÀå »ç¸Á Ƚ¼ö CHATMANAGER->AddSystemMsg( eSYSTEM_NORMAL, GAMERESOURCEMAN->GetGameText( 829 ) ); break; case ePVPDM_ENDTYPE_FIRSTKILL: /// ÃÖÃÊ Å³·¯ º¸À¯ CHATMANAGER->AddSystemMsg( eSYSTEM_NORMAL, GAMERESOURCEMAN->GetGameText( 831 ) ); break; case ePVPDM_ENDTYPE_KILLTOTAL: /// Kill ÃÑÇÕ CHATMANAGER->AddSystemMsg( eSYSTEM_NORMAL, GAMERESOURCEMAN->GetGameText( 850 ) ); break; case ePVPDM_ENDTYPE_RANDOM: /// random CHATMANAGER->AddSystemMsg( eSYSTEM_NORMAL, GAMERESOURCEMAN->GetGameText( 852 ) ); break; case ePVPDM_ENDTYPE_FIRSTFLAG: /// ÃÖÃÊ °Ô¾çÆÀ CHATMANAGER->AddSystemMsg( eSYSTEM_NORMAL, GAMERESOURCEMAN->GetGameText( 854 ) ); break; case ePVPDM_ENDTYPE_LASTFLAG: /// ¸¶Áö¸· ±ê¹ß º¸À¯ÆÀ CHATMANAGER->AddSystemMsg( eSYSTEM_NORMAL, GAMERESOURCEMAN->GetGameText( 856 ) ); break; } } else { /// °áÅõÁ¾·á - ÆÐ¹è switch( pmsg->mEndType ) { case ePVPDM_ENDTYPE_POINT: /// Æ÷ÀÎÆ® ´Þ¼º CHATMANAGER->AddSystemMsg( eSYSTEM_NORMAL, GAMERESOURCEMAN->GetGameText( 824 ) ); break; case ePVPDM_ENDTYPE_TIME: /// ½Ã°£ Ãʰú(Æ÷ÀÎÆ®·®) CHATMANAGER->AddSystemMsg( eSYSTEM_NORMAL, GAMERESOURCEMAN->GetGameText( 826 ) ); break; case ePVPDM_ENDTYPE_MEMBER: /// Àοø¼ö CHATMANAGER->AddSystemMsg( eSYSTEM_NORMAL, GAMERESOURCEMAN->GetGameText( 828 ) ); break; case ePVPDM_ENDTYPE_LEADERDIE: /// ¼öÀå »ç¸Á Ƚ¼ö CHATMANAGER->AddSystemMsg( eSYSTEM_NORMAL, GAMERESOURCEMAN->GetGameText( 830 ) ); break; case ePVPDM_ENDTYPE_FIRSTKILL: /// ÃÖÃÊ Å³·¯ º¸À¯ CHATMANAGER->AddSystemMsg( eSYSTEM_NORMAL, GAMERESOURCEMAN->GetGameText( 832 ) ); break; case ePVPDM_ENDTYPE_KILLTOTAL: /// Kill ÃÑÇÕ CHATMANAGER->AddSystemMsg( eSYSTEM_NORMAL, GAMERESOURCEMAN->GetGameText( 851 ) ); break; case ePVPDM_ENDTYPE_RANDOM: /// random CHATMANAGER->AddSystemMsg( eSYSTEM_NORMAL, GAMERESOURCEMAN->GetGameText( 853 ) ); break; case ePVPDM_ENDTYPE_FIRSTFLAG: /// ÃÖÃÊ °Ô¾çÆÀ CHATMANAGER->AddSystemMsg( eSYSTEM_NORMAL, GAMERESOURCEMAN->GetGameText( 855 ) ); break; case ePVPDM_ENDTYPE_LASTFLAG: /// ¸¶Áö¸· ±ê¹ß º¸À¯ÆÀ CHATMANAGER->AddSystemMsg( eSYSTEM_NORMAL, GAMERESOURCEMAN->GetGameText( 857 ) ); break; } } } break; case NM_PVP_DM_END_SYN: { MSGROOT msg; msg.Category = NM_PVP; msg.Protocol = NM_PVP_DM_ENDACCEPT_REQ; NETWORK->SendNetworkMsg( (char*)&msg, sizeof(msg) ); cSmallMiniMapWindow* mini = GAMEUI->GetSmallMinimapWindow(); cMiniMapWindow* wide = GAMEUI->GetMinimapWindow(); if( mini && wide ) { mini->ClearFlag(); mini->ClearFlagPoint(); mini->ClearStone(); wide->ClearFlag(); wide->ClearFlagPoint(); wide->ClearStone(); } } break; case NM_PVP_REPORT_RES: { // ÀüÀå ÀÚ¸®ºñ¿ò ½Å°í °á°ú MSG_RES_PVP_REPORT* pmsg = (MSG_RES_PVP_REPORT*)msg; switch( pmsg->ErrorCode ) { case ERROR_PVP_REPORT_SUCCESS: CHATMANAGER->AddSystemMsg( eSYSTEM_NORMAL, GAMERESOURCEMAN->GetGameText( 863 ) ); break; case ERROR_PVP_REPORT_FAIL: CHATMANAGER->AddSystemMsg( eSYSTEM_NORMAL, GAMERESOURCEMAN->GetGameText( 864 ) ); break; case ERROR_PVP_REPORT_OTHERTEAM: // ´Ù¸¥ Áø¿µ CHATMANAGER->AddSystemMsg( eSYSTEM_NORMAL, GAMERESOURCEMAN->GetGameText( 865 ) ); break; case ERROR_PVP_REPORT_EXIST: // Áߺ¹½Å°í CHATMANAGER->AddSystemMsg( eSYSTEM_NORMAL, GAMERESOURCEMAN->GetGameText( 866 ) ); break; } mRequestLock = false; } break; case NM_PVP_REPORT_SYN: { // ½Å°í ´çÇÔ ¾Ë¸² MSG_SYN_PVP_REPORT* pmsg = (MSG_SYN_PVP_REPORT*)msg; cStringT str; str.Format( GAMERESOURCEMAN->GetGameText( 867 ), pmsg->mName ); CHATMANAGER->AddSystemMsg( eSYSTEM_NORMAL, (LPCTSTR)str.Cstr() ); } break; case NM_PVP_REPORT_OUT_SYN: { // ´Ù¸¥ À¯Àú °­Á¦ Ãß¹æ ¾Ë¸² MSG_SYN_PVP_REPORT_OUT* pmsg = (MSG_SYN_PVP_REPORT_OUT*)msg; cStringT str; str.Format( GAMERESOURCEMAN->GetGameText( 869 ), pmsg->mName ); CHATMANAGER->AddSystemMsg( eSYSTEM_NORMAL, (LPCTSTR)str.Cstr() ); } break; case NM_PVP_FORCEOUT_SYN: { // Ãß¹æ ´çÇÔ MSG_SYN_PVP_FORCEOUT* pmsg = (MSG_SYN_PVP_FORCEOUT*)msg; pmsg; // Ãß¹æ ó¸® // ¸Þ¼¼Áö Ãâ·Â cStringT str; str.Format( GAMERESOURCEMAN->GetGameText( 868 ), PVP_REPORT_TOTAL ); CHATMANAGER->AddSystemMsg( eSYSTEM_NORMAL, (LPCTSTR)str.Cstr() ); } break; default: assert(0); break; } } bool cPVPManager::IsMyTeam( cPlayer* player ) { if( mPVPState == ePVPState_None ) return true; if( player == 0 ) { assert(0); return false; } if( HERO->GetPVPTeam() == player->GetPVPTeam() ) return true; return false; } bool cPVPManager::IsEnableAttack( cPlayer* player ) { if( mPVPState != ePVPState_Fight ) return false; if( player == 0 ) { assert(0); return false; } /// 2009/11/09 GMÅø ÀÔÀå½Ã °ø°ÝºÒ°¡ if( HERO->GetPVPTeam() == ePVPDM_TEAMTYPE_MAX ) return false; if( player->GetPVPTeam() == ePVPDM_TEAMTYPE_MAX ) return false; if( HERO->GetPVPTeam() != player->GetPVPTeam() ) return true; return false; } void cPVPManager::LinkPvpForceEffect( cPlayer* player, unsigned char forceType ) { if( player == 0 ) return; if( IsEnableBattle() == true ) { switch( forceType ) { case eFORCETYPE_FIRE : player->SetLinkdEffect( eLINK_FOOT, "./Data/Effect/Eff_PC_PVP_1.nif", 0, true, true ); break; case eFORCETYPE_WATER : player->SetLinkdEffect( eLINK_FOOT, "./Data/Effect/Eff_PC_PVP_2.nif", 0, true, true ); break; case eFORCETYPE_WIND : player->SetLinkdEffect( eLINK_FOOT, "./Data/Effect/Eff_PC_PVP_4.nif", 0, true, true ); break; case eFORCETYPE_EARTH : player->SetLinkdEffect( eLINK_FOOT, "./Data/Effect/Eff_PC_PVP_3.nif", 0, true, true ); break; default: break; } } } void cPVPManager::AddTeamPlayerInfo( sMsgMemberInfo* memberInfo ) { if( memberInfo == 0 ) { assert(0); return; } sMyTeamInfo* info = new sMyTeamInfo; info->mPlayerIdx = memberInfo->mCharacterIdx; ::Sstrncpy( info->mName, MAX_NAME_BUFFER_SIZE, memberInfo->mName, MAX_NAME_SIZE ); info->mForceType = memberInfo->mForceType; info->mKillCnt = 0; info->mDeathCnt = 0; info->mScoreResult = 0; if( mTeamInfoMap.Insert( memberInfo->mCharacterIdx, info ) == false ) { assert(0); delete info; return; } mUpdateRankInfo = true; } void cPVPManager::DelTeamPlayerInfo( unsigned long playerIdx ) { sMyTeamInfo* info = (sMyTeamInfo*)mTeamInfoMap.GetAt( playerIdx ); if( info == 0 ) { assert(0); return; } delete info; mTeamInfoMap.Erase( playerIdx ); mUpdateRankInfo = true; } void cPVPManager::UpdateTeamPlayerInfo( unsigned long playerIdx, unsigned long value, bool kill ) { sMyTeamInfo* info = (sMyTeamInfo*)mTeamInfoMap.GetAt(playerIdx); if( info == 0 ) { assert(0); return; } if( kill ) info->mKillCnt = value; else info->mDeathCnt = value; mUpdateRankInfo = true; } void cPVPManager::OpenRank( bool update ) { cDMRankingListWindow* win = GAMEUI->GetDMRankingListWindow(); if( win == 0 ) return; if( update == true ) { sMyTeamInfo teamResult[PVP_DM_TEAM_CNT]; unsigned int resultCnt = 0; cMyTeamInfoMap::cIterator itr = mTeamInfoMap.Begin(); cMyTeamInfoMap::cIterator itrEnd = mTeamInfoMap.End(); for( ; itr != itrEnd; ++itr ) { sMyTeamInfo* info = (sMyTeamInfo*)(*itr).mSecond; if( info ) { teamResult[resultCnt].mPlayerIdx = info->mPlayerIdx; ::Sstrncpy( teamResult[resultCnt].mName, MAX_NAME_BUFFER_SIZE, info->mName, MAX_NAME_SIZE ); teamResult[resultCnt].mForceType = info->mForceType; teamResult[resultCnt].mKillCnt = info->mKillCnt; teamResult[resultCnt].mDeathCnt = info->mDeathCnt; resultCnt++; if( resultCnt > PVP_DM_TEAM_CNT ) { assert(0); break; } } } if( resultCnt > PVP_DM_TEAM_CNT ) { assert(0); resultCnt = PVP_DM_TEAM_CNT; } if( resultCnt > 1 ) ::qsort( (void*)teamResult, resultCnt, sizeof(sMyTeamInfo), PvPRankSort ); win->Clear(); for( unsigned long i = 0; i < resultCnt; ++i ) { win->AddPlayerRankInfo( &(teamResult[i]), (teamResult[i].mPlayerIdx == mLeaderIdx) ); } } if( win->IsVisible() == false ) win->Show(); } void cPVPManager::OpenResult( MSG_SYN_PVP_DM_FIGHTEND* pmsg, bool win ) { cDMResultWindow* resultWindow = GAMEUI->GetDMResultWindow(); if( resultWindow == 0 ) return; if( pmsg->mTeamCnt > PVP_DM_TEAM_CNT ) { assert(0); pmsg->mTeamCnt = PVP_DM_TEAM_CNT; } /// sMyTeamInfo teamResult[PVP_DM_TEAM_CNT]; unsigned int resultCnt = 0; for( unsigned long i=0; imTeamCnt; ++i ) { sPvPDMTeamScore& data = pmsg->mTeam[i]; sMyTeamInfo* info = (sMyTeamInfo*)mTeamInfoMap.GetAt( data.mCharacterIdx ); if( info ) { teamResult[resultCnt].mPlayerIdx = info->mPlayerIdx; ::Sstrncpy( teamResult[resultCnt].mName, MAX_NAME_BUFFER_SIZE, info->mName, MAX_NAME_SIZE ); teamResult[resultCnt].mForceType = info->mForceType; teamResult[resultCnt].mKillCnt = info->mKillCnt; teamResult[resultCnt].mDeathCnt = info->mDeathCnt; teamResult[resultCnt].mScoreResult = data.mScore; resultCnt++; } } if( resultCnt > PVP_DM_TEAM_CNT ) { assert(0); resultCnt = PVP_DM_TEAM_CNT; } if( resultCnt > 1 ) ::qsort( (void*)teamResult, resultCnt, sizeof(sMyTeamInfo), PvPResultSort ); /// 1. ¼øÀ§ Ãâ·Â resultWindow->Clear(); for( unsigned long i = 0; i < resultCnt; ++i ) { resultWindow->InsertRank( &teamResult[i], i ); } /// 2. °á°ú Ãâ·Â resultWindow->SetResult( win ); /// 3. º¸»ó ¼¼ÆÃ resultWindow->SetRewardForce( pmsg->mFireFriendly, pmsg->mFirePoint ); resultWindow->SetRewardForce( pmsg->mWaterFriendly, pmsg->mWaterPoint ); resultWindow->SetRewardForce( pmsg->mWindFriendly, pmsg->mWindPoint ); resultWindow->SetRewardForce( pmsg->mEarthFriendly, pmsg->mEarthPoint ); resultWindow->SetReward( pmsg->mMoney, pmsg->mExp, pmsg->mSxp ); resultWindow->Show(); } // ÀÚ¸®ºñ¿ò ½Å°í void cPVPManager::RequestReport( cStringT name ) { if( mRequestLock == true ) return; if( IsEnableBattle() == false ) return; if( ::_tcscmp( (LPCTSTR)name.Cstr(), HERO->GetName() ) == 0 ) { CHATMANAGER->AddSystemMsg( eSYSTEM_NORMAL, GAMERESOURCEMAN->GetGameText( 7000 ) ); return; } if( name.IsEmpty() ) { CHATMANAGER->AddSystemMsg( eSYSTEM_NORMAL, GAMERESOURCEMAN->GetGameText( 871 ) ); return; } MSG_REQ_PVP_REPORT msg; ::memset( &msg, 0, sizeof(msg) ); msg.Category = NM_PVP; msg.Protocol = NM_PVP_REPORT_REQ; ::Sstrncpy( msg.mName, MAX_NAME_BUFFER_SIZE, (LPCTSTR)name.Cstr(), MAX_NAME_SIZE ); NETWORK->SendNetworkMsg( (char*)&msg, sizeof(msg) ); mRequestLock = true; }