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

138 lines
5.1 KiB
C++

#include "stdafx.h"
#include ".\handler_cg_charinfo.h"
#include "Player.h"
#ifdef _NA_008404_20150712_MINIGAME_SYSTEM
#include "MiniGame.h"
#endif // _NA_008404_20150712_MINIGAME_SYSTEM
Handler_CG_CHARINFO::Handler_CG_CHARINFO()
{
}
Handler_CG_CHARINFO::~Handler_CG_CHARINFO()
{
}
//--------------------------------------------------------------------------------------------------
// changes, f100819.1L
const nsPacket::PacketHandlerInfo Handler_CG_CHARINFO::GetPacketHandlerNodes()
{
#define HANDLER_NODE_INFO(c, p, phase) { MAKEWORD(c, p), phase, Handler_CG_CHARINFO::On##p }
#define HANDLER_NODE_INFO_EOR() { 0, static_cast<ePHASE_SHIFT>(0), NULL }
static const nsPacket::PacketHandlerNode handlers_static_[] =
{
HANDLER_NODE_INFO(CG_CHARINFO, CG_CHARINFO_SELECT_INFO_SYN, PHASE_SERVICE),
#ifdef _NA_007932_20150112_ATTENDANCE_CHECK_SYSTEM
HANDLER_NODE_INFO(CG_CHARINFO, CG_CHARINFO_GET_ATTENDANCE_REWARD_PACKET, PHASE_SERVICE),
#endif // _NA_007932_20150112_ATTENDANCE_CHECK_SYSTEM
#ifdef _NA_008404_20150712_MINIGAME_SYSTEM
HANDLER_NODE_INFO(CG_CHARINFO, CG_CHARINFO_GET_MINIGAME_BINGO_REWARD_PACKET, PHASE_SERVICE),
#endif // _NA_008404_20150712_MINIGAME_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;
};
//--------------------------------------------------------------------------------------------------
Handler_CG_CHARINFO_IMPL(CG_CHARINFO_SELECT_INFO_SYN)
{
__TOUCHED((pServerSession, pMsg, wSize));
MSG_CG_CHARINFO_SELECT_INFO_SYN* pRecvMsg = (MSG_CG_CHARINFO_SELECT_INFO_SYN*)pMsg;
BOOL bIsValidSize = (BOOL)(sizeof(MSG_CG_CHARINFO_SELECT_INFO_SYN) == wSize);
if (!bIsValidSize)
{
SUNLOG( eDEV_LOG, _T("[RNDPROTOCOL_REPORT][SIZE] MSG_CG_CHARINFO_SELECT_INFO_SYN") );
return;
}
// 플레이어의 접속이 끊어졌으면 리턴
Player* pPlayer = PlayerManager::Instance()->FindPlayerByUserKey(pRecvMsg->m_dwKey);
GameField* pField = pPlayer ? pPlayer->GetField() : NULL;
if (pPlayer == NULL || pField == NULL) {
return;
};
const DWORD dwObjKey = pRecvMsg->m_dwObjectKey;
Character* const pSelectChar = pField->FindCharacter(dwObjKey);
if (!pSelectChar)
return;
MSG_CG_CHARINFO_SELECT_INFO_ACK AckMsg;
AckMsg.m_dwObjectKey = dwObjKey;
AckMsg.m_LV = pSelectChar->GetLevel();
AckMsg.m_HP = (PLAYERHP)pSelectChar->GetHP();
AckMsg.m_MaxHP = (PLAYERHP)pSelectChar->GetMaxHP();
#ifdef _NA_006638_20120415_ADD_SHIELD_INFO_IN_TARGET_INFO
AckMsg.shield = static_cast<PLAYERSD>(pSelectChar->GetSD());
AckMsg.max_shield = static_cast<PLAYERSD>(pSelectChar->GetMaxSD());
#endif // _NA_006638_20120415_ADD_SHIELD_INFO_IN_TARGET_INFO
pPlayer->SendPacket(&AckMsg, sizeof(AckMsg));
}
#ifdef _NA_007932_20150112_ATTENDANCE_CHECK_SYSTEM
Handler_CG_CHARINFO_IMPL(CG_CHARINFO_GET_ATTENDANCE_REWARD_PACKET)
{
__TOUCHED((pServerSession, pMsg, wSize));
MSG_CG_CHARINFO_GET_ATTENDANCE_REWARD_PACKET* pRecvMsg = (MSG_CG_CHARINFO_GET_ATTENDANCE_REWARD_PACKET*)pMsg;
Player* pPlayer = PlayerManager::Instance()->FindPlayerByUserKey(pRecvMsg->m_dwKey);
GameField* pField = pPlayer ? pPlayer->GetField() : NULL;
if (pPlayer == NULL || pField == NULL) {
return;
};
AttendanceManager& attendance_manager = pPlayer->GetExtraInfoManager().GetAttendanceManager();
attendance_manager.ProcessReward(pPlayer);
MSG_CG_CHARINFO_ATTENDANCE_INFO_PACKET info_packet;
memcpy(&info_packet.attendance_infos, &attendance_manager.GetAttendanceInfos(),
sizeof(info_packet.attendance_infos));
pPlayer->SendPacket(&info_packet, sizeof(info_packet));
}
#endif // _NA_007932_20150112_ATTENDANCE_CHECK_SYSTEM
#ifdef _NA_008404_20150712_MINIGAME_SYSTEM
Handler_CG_CHARINFO_IMPL(CG_CHARINFO_GET_MINIGAME_BINGO_REWARD_PACKET)
{
__TOUCHED((pServerSession, pMsg, wSize));
MSG_CG_CHARINFO_GET_MINIGAME_BINGO_REWARD_PACKET* pRecvMsg =
(MSG_CG_CHARINFO_GET_MINIGAME_BINGO_REWARD_PACKET*)pMsg;
Player* pPlayer = PlayerManager::Instance()->FindPlayerByUserKey(pRecvMsg->m_dwKey);
GameField* pField = pPlayer ? pPlayer->GetField() : NULL;
if (pPlayer == NULL || pField == NULL) {
return;
};
MiniGameBingoRewardParam bingo_param(eMINIGAME_TYPE_BINGO, pPlayer);
RC::eMINIGAME_RESULT minigame_result =
pPlayer->GetExtraInfoManager().GetMiniGameManager().GetReward(bingo_param);
if (minigame_result != RC::RC_MINIGAME_REWARD_SUCCESS)
{
MSG_CG_CHARINFO_MINIGAME_NAK nak_packet;
nak_packet.result_code = minigame_result;
pPlayer->SendPacket(&nak_packet, sizeof(nak_packet));
return;
}
MSG_CG_CHARINFO_MINIGAME_BINGO_INFO_PACKET info_packet;
memcpy(&info_packet.minigame_bingo_infos,
&(pPlayer->GetExtraInfoManager().GetMiniGameManager().GetMiniGameBingoInfos()),
sizeof(info_packet.minigame_bingo_infos));
pPlayer->SendPacket(&info_packet, sizeof(info_packet));
}
#endif // _NA_008404_20150712_MINIGAME_SYSTEM