Files
2022-10-26 12:25:11 +08:00

534 lines
20 KiB
C++

#include "StdAfx.h"
#include ".\handler_client.h"
#include ".\Player.h"
#include ".\PlayerManager.h"
#include <PacketStruct_CG.h>
#include <PacketStruct_GP.h>
#include ".\GameRankingManager.h"
#include ".\GameServerEx.h"
#include ".\ItemManager.h"
#include <SCItemSlotContainer.h>
#include <ArchiveOfStream.h>
// _NA_0_20091118_GAMEROOM_BATTLE_RESULT
#include "GameZone.h"
#include "GameBattleResult.h"
//_NA_005026_20120527_CHAOS_ZONE_BATTLE_GROUND
#include <World/ChaosZoneSystem/GameChaosZoneManaager.h>
#include <ExtraNPCManager.h>
#ifdef _NA_008012_20150204_SUN_RANKING_SYSTEM
#include "SunRanking/SunRankingManager.h"
#include "SunRankingParser.h"
#endif // _NA_008012_20150204_SUN_RANKING_SYSTEM
//--------------------------------------------------------------------------------------------------
// changes, f100819.1L
const nsPacket::PacketHandlerInfo Handler_Client::GetPacketHandlerNodes()
{
#define HANDLER_NODE_INFO(c, p, phase) { MAKEWORD(c, p), phase, Handler_Client::On##p }
#define HANDLER_NODE_INFO_EOR() { 0, static_cast<ePHASE_SHIFT>(0), NULL }
static const nsPacket::PacketHandlerNode handlers_static_[] =
{
#ifdef _NA_008012_20150130_RANKING_SYSTEM
HANDLER_NODE_INFO(CG_MISSION, CG_MISSION_RANKING_INFO_SYN, PHASE_SERVICE),
HANDLER_NODE_INFO(CG_MISSION, CG_MISSION_RANKING_MEMBER_INFO_SYN, PHASE_SERVICE),
HANDLER_NODE_INFO(CG_MISSION, CG_MISSION_RANKING_REWARD_SYN, PHASE_SERVICE),
#endif // _NA_008012_20150130_RANKING_SYSTEM
// _NA_0_20091118_GAMEROOM_BATTLE_RESULT
HANDLER_NODE_INFO(CG_ZONE, CG_ZONE_PLAYER_BATTLE_RESULT_SYN, PHASE_SERVICE),
#if !defined _NA_0_20110613_GAME_SHOP_RENEWAL
HANDLER_NODE_INFO(CG_SHOP, CG_SHOP_CASH_REQ_SYN, PHASE_SERVICE),
HANDLER_NODE_INFO(CG_SHOP, CG_SHOP_ITEM_LIST_REQ_SYN, PHASE_SERVICE),
HANDLER_NODE_INFO(CG_SHOP, CG_SHOP_ITEM_REQ_SYN, PHASE_SERVICE),
HANDLER_NODE_INFO(CG_SHOP, CG_SHOP_ITEM_BUY_SYN, PHASE_SERVICE),
HANDLER_NODE_INFO(CG_SHOP, CG_SHOP_BUY_HISTORY_SYN, PHASE_SERVICE),
//HANDLER_NODE_INFO(CG_SHOP, CG_SHOP_PACKAGE_BUY_SYN, PHASE_SERVICE),
//HANDLER_NODE_INFO(CG_SHOP, CG_SHOP_CHECK_CHAR_NAME_SYN, PHASE_SERVICE),
#ifdef __NA000000_SHOP_USERID_50_PASSING_PROC__
HANDLER_NODE_INFO(CG_SHOP, CG_SHOP_SEND_GIFT_RELAY_SYN, PHASE_SERVICE),
#else
HANDLER_NODE_INFO(CG_SHOP, CG_SHOP_SEND_GIFT_SYN, PHASE_SERVICE),
#endif
HANDLER_NODE_INFO(CG_SHOP, CG_SHOP_ACTION_RECV_GIFT_SYN, PHASE_SERVICE),
HANDLER_NODE_INFO(CG_SHOP, CG_SHOP_IS_RECV_GIFT_SYN, PHASE_SERVICE),
HANDLER_NODE_INFO(CG_SHOP, CG_SHOP_RECV_GIFT_LIST_SYN, PHASE_SERVICE),
#endif //!defined _NA_0_20110613_GAME_SHOP_RENEWAL
#ifdef _NA_003027_20111013_HONOR_SYSTEM
HANDLER_NODE_INFO(CG_CHARINFO, CG_HONORSYSTEM_PACKET, PHASE_SERVICE),
#endif //_NA_003027_20111013_HONOR_SYSTEM
#ifdef _NA004034_20120102_POINT_WALLET_SYSTEM
HANDLER_NODE_INFO(CG_CHARINFO, CG_POINTWALLET_PACKET, PHASE_SERVICE),
#endif //_NA004034_20120102_POINT_WALLET_SYSTEM
//_NA_005026_20120527_CHAOS_ZONE_BATTLE_GROUND
HANDLER_NODE_INFO(CG_PARTY, CG_CHAOS_ZONE_PACKET, PHASE_SERVICE),
#ifdef _NA_008012_20150130_RANKING_SYSTEM
#ifdef _NA_006801_20130705_RENEWAL_RANKINGSYSTEM
HANDLER_NODE_INFO(CG_MISSION, CG_MISSION_RANKING_SETTLEDDATE_INFO_SYN, PHASE_SERVICE),
#endif //_NA_006801_20130705_RENEWAL_RANKINGSYSTEM
#endif // _NA_008012_20150130_RANKING_SYSTEM
#ifdef _NA_000000_20140120_SMART_NPC_SYSTEM
HANDLER_NODE_INFO(CG_CHARINFO, CG_CHARINFO_SMARTNPC_PACKET, PHASE_SERVICE),
#endif //_NA_000000_20140120_SMART_NPC_SYSTEM
#ifdef _NA_008012_20150204_SUN_RANKING_SYSTEM
HANDLER_NODE_INFO(CG_ETC, CG_ETC_SUN_RANKING_SYN, PHASE_SERVICE),
HANDLER_NODE_INFO(CG_ETC, CG_ETC_SUN_RANKING_SETTLE_INFO_SYN, PHASE_SERVICE),
#endif // _NA_008012_20150204_SUN_RANKING_SYSTEM
HANDLER_NODE_INFO_EOR() // end of records
};
//
BOOST_STATIC_ASSERT(_countof(handlers_static_) >= 1);
nsPacket::PacketHandlerInfo return_value = { handlers_static_, _countof(handlers_static_) - 1 };
//
return return_value;
};
//--------------------------------------------------------------------------------------------------
#ifdef _NA_008012_20150130_RANKING_SYSTEM
Handler_Client_IMPL( CG_MISSION_RANKING_INFO_SYN )
{
__TOUCHED((pServerSession, pRecvMsg, wSize));
MSG_CG_MISSION_RANKING_INFO_SYN * pMsg = (MSG_CG_MISSION_RANKING_INFO_SYN *)pRecvMsg;
Player * pPlayer = PlayerManager::Instance()->FindPlayerByUserKey( pMsg->m_dwKey );
ASSERT( pPlayer );
if( !pPlayer ) return ;
if( !pPlayer->GetField() ) return;
#ifdef _NA_006801_20130705_RENEWAL_RANKINGSYSTEM
RankingManager::LEVEL_AREA* level_base = g_GameRankingMgr.FindLVArea_ID(pMsg->m_RankingID);
if ( level_base == NULL || g_GameRankingMgr.GetStatus() != eRANKING_STATUS_NORMAL )
{
MSG_CG_MISSION_RANKING_INFO_NAK nmsg;
nmsg.m_dwErrorCode = RC::RC_RANKING_NETWORK_ERROR_FOR_PORTAL;
pPlayer->SendPacket( &nmsg, sizeof(nmsg) );
return;
}
#else
if( g_GameRankingMgr.GetStatus() != eRANKING_STATUS_NORMAL)
{
MSG_CG_MISSION_RANKING_INFO_NAK nmsg;
nmsg.m_dwErrorCode = RC::RC_RANKING_NETWORK_ERROR_FOR_PORTAL;
pPlayer->SendPacket( &nmsg, sizeof(nmsg) );
return;
}
#endif //_NA_006801_20130705_RENEWAL_RANKINGSYSTEM
//ACK Message
MSG_CG_MISSION_RANKING_INFO_ACK msg;
#ifdef _NA_006801_20130705_RENEWAL_RANKINGSYSTEM
msg.myranking = 0;
#else
//결산일 패킷을 분리했으므로 주석처리한다.
msg.m_SettledDate = g_GameRankingMgr.GetSettledDate();
#endif //_NA_006801_20130705_RENEWAL_RANKINGSYSTEM
msg.m_Size = sizeof(msg.m_pBUFFER);
#ifdef _NA_006801_20130705_RENEWAL_RANKINGSYSTEM
// 랭킹 정보를 가져옴.
switch(level_base->m_RankingType)
{
case eRANKING_TYPE_TIME_ATTACK:
//미션 랭킹
if (pMsg->m_Type == eRANKING_MYRANKING)
{
g_GameRankingMgr.SerializeForClient_MyRanking(pPlayer->GetCharName(), pMsg->m_RankingID,
msg.m_pBUFFER, msg.m_Size, msg.myranking);
}
else
{
g_GameRankingMgr.SerializeForClient( (eRANKING_TYPE)pMsg->m_Type, level_base->m_MissionNo,
pMsg->m_Page, msg.m_pBUFFER, msg.m_Size, RANKING_SERIALIZE_CLIENT_LOAD );
}
break;
case eRANKING_TYPE_POINT:
//포인트 랭킹
if (pMsg->m_Type == eRANKING_MYRANKING)
{
g_GameRankingMgr.Serialize_MyRanking(pPlayer->GetCharName(), pMsg->m_RankingID, msg.m_pBUFFER,
msg.m_Size, msg.myranking);
}
else
{
g_GameRankingMgr.Serialize( (eRANKING_TYPE)pMsg->m_Type, level_base->m_MissionNo, pMsg->m_Page,
msg.m_pBUFFER, msg.m_Size, RANKING_SERIALIZE_LOAD );
}
break;
#ifdef _NA_006801_20130814_RENEWAL_RANKINGSYSTEM_MINOR
case eRANKING_TYPE_BATTLEGROUND_WIN:
case eRANKING_TYPE_BATTLEGROUND_KILL:
case eRANKING_TYPE_BATTLEGROUND_ASSIST:
//전장 승리
//포인트 랭킹
if (pMsg->m_Type == eRANKING_MYRANKING)
{
g_GameRankingMgr.Serialize_MyRanking(pPlayer->GetCharName(), pMsg->m_RankingID, msg.m_pBUFFER,
msg.m_Size, msg.myranking);
}
else
{
RANKINGTYPE ranking_type = static_cast<RANKINGTYPE>(level_base->m_RankingType);
g_GameRankingMgr.Serialize( (eRANKING_TYPE)pMsg->m_Type, level_base->m_MissionNo, pMsg->m_Page,
msg.m_pBUFFER, msg.m_Size, RANKING_SERIALIZE_LOAD, ranking_type);
}
break;
#endif //_NA_006801_20130814_RENEWAL_RANKINGSYSTEM_MINOR
default:
ASSERT(FALSE);
return;
}
#else
//타임 어택
if( g_GameRankingMgr.GetRankingType( pMsg->m_MissionNo ) == eRANKING_TYPE_TIME_ATTACK )
{
g_GameRankingMgr.SerializeForClient( (eRANKING_TYPE)pMsg->m_Type, pMsg->m_MissionNo, pMsg->m_Page,
msg.m_pBUFFER, msg.m_Size, RANKING_SERIALIZE_CLIENT_LOAD );
}
//포인트
else if( g_GameRankingMgr.GetRankingType( pMsg->m_MissionNo ) == eRANKING_TYPE_POINT )
{
g_GameRankingMgr.Serialize( (eRANKING_TYPE)pMsg->m_Type, pMsg->m_MissionNo, pMsg->m_Page,
msg.m_pBUFFER, msg.m_Size, RANKING_SERIALIZE_LOAD );
}
else
{
ASSERT(FALSE);
return;
}
#endif //_NA_006801_20130705_RENEWAL_RANKINGSYSTEM
pPlayer->SendPacket( &msg, msg.GetSize() );
}
Handler_Client_IMPL( CG_MISSION_RANKING_MEMBER_INFO_SYN )
{
__TOUCHED((pServerSession, pRecvMsg, wSize));
MSG_CG_MISSION_RANKING_MEMBER_INFO_SYN * pMsg = (MSG_CG_MISSION_RANKING_MEMBER_INFO_SYN *)pRecvMsg;
Player * pPlayer = PlayerManager::Instance()->FindPlayerByUserKey( pMsg->m_dwKey );
ASSERT( pPlayer );
if( !pPlayer ) return ;
if( !pPlayer->GetField() ) return;
if( g_GameRankingMgr.GetStatus() != eRANKING_STATUS_NORMAL )
{
MSG_CG_MISSION_RANKING_MEMBER_INFO_NAK nmsg;
nmsg.m_dwErrorCode = RC::RC_RANKING_NETWORK_ERROR_FOR_PORTAL;
pPlayer->SendPacket( &nmsg, sizeof(nmsg) );
return;
}
#ifdef _NA_006801_20130705_RENEWAL_RANKINGSYSTEM
//'내 순위'에 대한 멤버요청일 경우의 분기문을 적용
MissionRankingRecord* pRecord = NULL;
if (pMsg->m_Type == eRANKING_MYRANKING)
{
RankingManager::LEVEL_AREA* level_base = g_GameRankingMgr.FindLVArea(pMsg->m_MissionNo);
if (level_base == NULL)
{
MSG_CG_MISSION_RANKING_MEMBER_INFO_NAK nak_msg;
nak_msg.m_dwErrorCode = RC::RC_RANKING_INVALID_STATE;
pPlayer->SendPacket( &nak_msg, sizeof(nak_msg) );
return;
}
pRecord = g_GameRankingMgr.FindMyBestRanking(pPlayer->GetCharName(), eRANKING_TODAYWEEK,
pMsg->m_MissionNo,(eRANKING_SYSTEM_TYPE)level_base->m_RankingType);
if (pRecord == NULL)
{
MSG_CG_MISSION_RANKING_MEMBER_INFO_NAK nak_msg;
nak_msg.m_dwErrorCode = RC::RC_RANKING_INVALID_STATE;
pPlayer->SendPacket( &nak_msg, sizeof(nak_msg) );
return;
}
}
else
{
pRecord = g_GameRankingMgr.FindMissionRecord( (eRANKING_TYPE)pMsg->m_Type, pMsg->m_MissionNo, pMsg->m_Key );
if ( pRecord == NULL )
{
MSG_CG_MISSION_RANKING_MEMBER_INFO_NAK nak_msg;
nak_msg.m_dwErrorCode = RC::RC_RANKING_INVALID_STATE;
pPlayer->SendPacket( &nak_msg, sizeof(nak_msg) );
return;
}
}
#else
MissionRankingRecord * pRecord = g_GameRankingMgr.FindMissionRecord( (eRANKING_TYPE)pMsg->m_Type, pMsg->m_MissionNo, pMsg->m_Key );
if( !pRecord )
{
MSG_CG_MISSION_RANKING_MEMBER_INFO_NAK nmsg;
nmsg.m_dwErrorCode = RC::RC_RANKING_INVALID_STATE;
pPlayer->SendPacket( &nmsg, sizeof(nmsg) );
return;
}
#endif //_NA_006801_20130705_RENEWAL_RANKINGSYSTEM
MSG_CG_MISSION_RANKING_MEMBER_INFO_ACK msg;
ArchiveOfStream lArchive(msg.m_pBUFFER, sizeof(msg.m_pBUFFER));
pRecord->SerializeMember( lArchive, RANKING_SERIALIZE_CLIENT_LOAD );
msg.m_Size = lArchive.GetSize();
pPlayer->SendPacket( &msg, msg.GetSize() );
}
Handler_Client_IMPL( CG_MISSION_RANKING_REWARD_SYN )
{
__TOUCHED((pServerSession, pRecvMsg, wSize));
MSG_CG_MISSION_RANKING_REWARD_SYN * pMsg = (MSG_CG_MISSION_RANKING_REWARD_SYN *)pRecvMsg;
Player * pPlayer = PlayerManager::Instance()->FindPlayerByUserKey( pMsg->m_dwKey );
ASSERT( pPlayer );
if( !pPlayer ) return ;
if( !pPlayer->GetField() ) return;
//피로도 때문에 현재 보상을 받지 못하는 거라면...
if( pPlayer->GetFatigueManager()->GetItemReward() == FALSE )
{
MSG_CG_MISSION_RANKING_REWARD_NAK msg;
msg.m_dwErrorCode = RC::RC_RANKING_REWARD_FAIL_FATIGUE;
pPlayer->SendPacket( &msg, sizeof(msg) );
return;
}
//============================================================================================
// 트랜젝션 체크?-> OK
// portal 서버 연결 여부 체크
// 보상을 받을 수 있는 상태 체크
// 보상을 받을 수 있는 공간 체크
// 보상 성공시 -> 아이템 보상 + 로그
// 보상 실패시 -> 로그
// 보상 실패시 -> db에는 보상을받았다고 나왔지만, 실제 보상을 받지 못한경우가 생길 수 있다.
RC::eRANKING_RESULT rt = RC::RC_RANKING_NETWORK_ERROR_FOR_PORTAL;
if( g_pGameServer->IsConnected( RANKING_SERVER ) )
{
#ifdef _NA_006801_20130705_RENEWAL_RANKINGSYSTEM
RankingManager::LEVEL_AREA* level_area = g_GameRankingMgr.FindLVArea_ID(pMsg->ranking_id);
if (level_area != NULL)
{
rt = g_GameRankingMgr.DoReward( level_area->m_MissionNo, pMsg->m_Key, pPlayer->GetCharName(),
level_area->m_RankingType );
}
else // if (level_area == NULL)
{
rt = RC::RC_RANKING_FAILED;
SUNLOG(eCRITICAL_LOG, "["__FUNCTION__"] Error! RankingID[%d] Level_Area Not Exist!", pMsg->ranking_id);
}
#else
rt = g_GameRankingMgr.DoReward( pMsg->m_MissionNo, pMsg->m_Key, pPlayer->GetCharName() );
#endif //_NA_006801_20130705_RENEWAL_RANKINGSYSTEM
if( rt == RC::RC_RANKING_SUCCESS )
{
if( pPlayer->GetItemManager()->GetItemSlotContainer(SI_INVENTORY)->GetEmptySlotNum() > 1 )
{
MSG_GP_RANKING_MISSION_REWARD_SYN msg;
msg.m_dwKey = pMsg->m_dwKey;
msg.m_Key = pMsg->m_Key;
#ifdef _NA_006801_20130814_RENEWAL_RANKINGSYSTEM_MINOR
msg.ranking_type = level_area->m_RankingType;
#endif //_NA_006801_20130814_RENEWAL_RANKINGSYSTEM_MINOR
#ifdef _NA_006801_20130705_RENEWAL_RANKINGSYSTEM
msg.m_MissionNo = level_area->m_MissionNo;
#else
msg.m_MissionNo = pMsg->m_MissionNo;
#endif //_NA_006801_20130705_RENEWAL_RANKINGSYSTEM
_tcsncpy( msg.m_tszCharName, pPlayer->GetCharName(), MAX_CHARNAME_LENGTH );
msg.m_tszCharName[MAX_CHARNAME_LENGTH] = '\0';
g_pGameServer->SendToServer( RANKING_SERVER, &msg, msg.GetSize() );
return ;
//------------------------------------------------------------------------------------------------------------
//------------------------------------------------------------------------------------------------------------
}
else
{
rt = RC::RC_RANKING_NOT_SPACE_FOR_REWARD;
// TRANSACTION 취소
#ifdef _NA_006801_20130705_RENEWAL_RANKINGSYSTEM
g_GameRankingMgr.OnReward( FALSE, level_area->m_MissionNo, pMsg->m_Key, pPlayer->GetCharName(),
level_area->m_RankingType );
#else
g_GameRankingMgr.OnReward( FALSE, pMsg->m_MissionNo, pMsg->m_Key, pPlayer->GetCharName() );
#endif //_NA_006801_20130705_RENEWAL_RANKINGSYSTEM
}
}
}
MSG_CG_MISSION_RANKING_REWARD_NAK msg;
msg.m_dwErrorCode = rt;
pPlayer->SendPacket( &msg, sizeof(msg) );
}
#ifdef _NA_006801_20130705_RENEWAL_RANKINGSYSTEM
Handler_Client_IMPL( CG_MISSION_RANKING_SETTLEDDATE_INFO_SYN )
{
__TOUCHED((pServerSession, pRecvMsg, wSize));
MSG_CG_MISSION_RANKING_SETTLEDDATE_INFO_SYN * pMsg =
static_cast<MSG_CG_MISSION_RANKING_SETTLEDDATE_INFO_SYN*>(pRecvMsg);
Player* player = PlayerManager::Instance()->FindPlayerByUserKey( pMsg->m_dwKey );
ASSERT( player );
if( player == NULL) return ;
if( player->GetField() == NULL ) return;
if ( g_GameRankingMgr.GetStatus() != eRANKING_STATUS_NORMAL )
{
MSG_CG_MISSION_RANKING_SETTLEDDATE_INFO_NAK nak_msg;
nak_msg.error_code = RC::RC_RANKING_NETWORK_ERROR_FOR_PORTAL;
player->SendPacket( &nak_msg, sizeof(nak_msg) );
return;
}
MSG_CG_MISSION_RANKING_SETTLEDDATE_INFO_ACK ack_msg;
// 결산일
ack_msg.settled_date = g_GameRankingMgr.GetSettledDate();
//보상받을수있는 미션리스트
g_GameRankingMgr.GetRewardableMissionList(player->GetCharName(), ack_msg.reward_mission_list);
player->SendPacket( &ack_msg, sizeof(ack_msg) );
}
#endif //_NA_006801_20130705_RENEWAL_RANKINGSYSTEM
#endif // _NA_008012_20150130_RANKING_SYSTEM
// _NA_0_20091118_GAMEROOM_BATTLE_RESULT
Handler_Client_IMPL( CG_ZONE_PLAYER_BATTLE_RESULT_SYN )
{
__TOUCHED((pServerSession, pRecvMsg, wSize));
MSG_CG_ZONE_PLAYER_BATTLE_RESULT_SYN * pMsg = (MSG_CG_ZONE_PLAYER_BATTLE_RESULT_SYN *)pRecvMsg;
Player * pPlayer = PlayerManager::Instance()->FindPlayerByUserKey( pMsg->m_dwKey );
ASSERT( pPlayer );
if( !pPlayer )
return;
if( !pPlayer->GetField() )
{
MSG_CG_ZONE_PLAYER_BATTLE_RESULT_NAK message_nak;
pPlayer->SendPacket(&message_nak, sizeof(message_nak));
return;
}
GameZone* pZone = pPlayer->GetGameZonePtr();
if( !pZone )
{
MSG_CG_ZONE_PLAYER_BATTLE_RESULT_NAK message_nak;
pPlayer->SendPacket(&message_nak, sizeof(message_nak));
return;
}
GameBattleResult* pBattleResult = pZone->GetGameBattleResult();
if( !pBattleResult )
{
MSG_CG_ZONE_PLAYER_BATTLE_RESULT_NAK message_nak;
pPlayer->SendPacket(&message_nak, sizeof(message_nak));
return;
}
if( !pBattleResult->SendBattleResult(pPlayer, pMsg->m_OwnerGuild) )
{
MSG_CG_ZONE_PLAYER_BATTLE_RESULT_NAK message_nak;
pPlayer->SendPacket(&message_nak, sizeof(message_nak));
}
}
#ifdef _NA_003027_20111013_HONOR_SYSTEM
#include "HonorSystem/HonorSystem.h"
Handler_Client_IMPL(CG_HONORSYSTEM_PACKET)
{
__TOUCHED((pServerSession, pRecvMsg, wSize));
HonorSystem::Instance()->ParseCGPacket(pRecvMsg);
}
#endif //_NA_003027_20111013_HONOR_SYSTEM
#ifdef _NA004034_20120102_POINT_WALLET_SYSTEM
Handler_Client_IMPL(CG_POINTWALLET_PACKET)
{
__TOUCHED((pServerSession, pRecvMsg, wSize));
MSG_CG_POINTWALLET_PACKET* packet = static_cast<MSG_CG_POINTWALLET_PACKET*>(pRecvMsg);
Player* player = PlayerManager::Instance()->FindPlayerByUserKey( packet->m_dwKey );
if( !player ) return;
PointWalletManager* const pointwallet_manager = player->GetPointWalletManager();
pointwallet_manager->ParseCGPacket(packet);
}
#endif //_NA004034_20120102_POINT_WALLET_SYSTEM
//_NA_005026_20120527_CHAOS_ZONE_BATTLE_GROUND
Handler_Client_IMPL(CG_CHAOS_ZONE_PACKET)
{
__TOUCHED((pServerSession, pRecvMsg, wSize));
GameChaosZoneManager::Instance()->ParseCGPacket(pServerSession, pRecvMsg, wSize);
}
#ifdef _NA_000000_20140120_SMART_NPC_SYSTEM
Handler_Client_IMPL(CG_CHARINFO_SMARTNPC_PACKET)
{
__TOUCHED((pServerSession, pRecvMsg, wSize));
g_ExtraNPCManager.ParseCGPacket(pRecvMsg);
}
#endif //_NA_000000_20140120_SMART_NPC_SYSTEM
#ifdef _NA_008012_20150204_SUN_RANKING_SYSTEM
Handler_Client_IMPL(CG_ETC_SUN_RANKING_SYN)
{
__TOUCHED((pServerSession, pRecvMsg, wSize));
MSG_CG_ETC_SUN_RANKING_SYN* packet = static_cast<MSG_CG_ETC_SUN_RANKING_SYN*>(pRecvMsg);
Player* player = PlayerManager::Instance()->FindPlayerByUserKey( packet->m_dwKey );
if( !player ) return;
MSG_CG_ETC_SUN_RANKING_ACK msg;
RC::eSUN_RANKING_RESULT result = SunRankingManager::Instance()->GetSunRankingInfos(
msg,
packet->ranking_type,
player->GetCharGuid(),
MSG_CG_ETC_SUN_RANKING_ACK::MAX_INFO_COUNT,
packet->is_guild_ranking,
player->GetGuildGuid());
if (result != RC::RC_SUN_RANKING_SUCCESS)
{
MSG_CG_ETC_SUN_RANKING_NAK nak_msg;
nak_msg.error_code = result;
player->SendPacket(&nak_msg, sizeof(nak_msg));
return;
}
player->SendPacket(&msg, sizeof(msg));
}
Handler_Client_IMPL(CG_ETC_SUN_RANKING_SETTLE_INFO_SYN)
{
__TOUCHED((pServerSession, pRecvMsg, wSize));
MSG_CG_ETC_SUN_RANKING_SETTLE_INFO_SYN* packet =
static_cast<MSG_CG_ETC_SUN_RANKING_SETTLE_INFO_SYN*>(pRecvMsg);
Player* player = PlayerManager::Instance()->FindPlayerByUserKey( packet->m_dwKey );
if( !player ) return;
MSG_CG_ETC_SUN_RANKING_SETTLE_INFO_ACK msg;
msg.type = SunRankingParser::Instance()->GetSettleDateType();
msg.day = SunRankingParser::Instance()->GetSettleDateDay();
msg.time = SunRankingParser::Instance()->GetSettleDateTime();
player->SendPacket(&msg, sizeof(msg));
}
#endif // _NA_008012_20150204_SUN_RANKING_SYSTEM