Files
Sun1602/Server/AgentServer/ChaosZoneSystem/Handler_AG_BATTLE_GROUND.cpp
T
2022-10-26 12:25:11 +08:00

116 lines
4.4 KiB
C++

#include "StdAfx.h"
// _NA_005026_20120527_CHAOS_ZONE_BATTLE_GROUND
#include <ChaosZoneSystem/Handler_AG_BATTLE_GROUND.h>
#include <PacketStruct_AG_ChaosZoneSystem.h>
#include <ChaosZoneSystem/BattleGroundManager.h>
#include <ChaosZoneSystem/BattleGroundMatchingSystem.h>
#include <AgentParty/AgentPartyManager.h>
#include <AgentParty/PartyRoomFinder.h>
#ifdef _NA_006620_20130402_GM_BATTLE_GROUND_EVENT_GAME
#include <ChaosZoneSystem/TeamBattleGroundManager.h>
#endif // _NA_006620_20130402_GM_BATTLE_GROUND_EVENT_GAME
void Handler_AG_BATTLE_GROUND::OnAG_ProcessPacket(GameServerSession* server_session, MSG_BASE* packet, WORD size)
{
MSG_CG_BATTLE_GROUND_PACKET* recv_packet = static_cast<MSG_CG_BATTLE_GROUND_PACKET*>(packet);
switch(recv_packet->packet_type)
{
case AG_BATTLE_GROUND_LEAVE_CMD:
{
OnAG_BATTLE_GROUND_LEAVE_CMD(server_session, packet, size);
}
break;
case AG_BATTLE_GROUND_CAN_RESERVATION_ACK:
{
OnAG_BATTLE_GROUND_CAN_RESERVATION_ACK(server_session, packet, size);
}
break;
}
}
void Handler_AG_BATTLE_GROUND::OnAG_BATTLE_GROUND_LEAVE_CMD(GameServerSession* server_session,
MSG_BASE* packet, WORD size)
{
MSG_AG_BATTLE_GROUND_LEAVE_CMD* recv_packet = static_cast<MSG_AG_BATTLE_GROUND_LEAVE_CMD*>(packet);
User* const user = UserManager::Instance()->GetUser(packet->m_dwKey);
#ifdef _NA_006620_20130402_GM_BATTLE_GROUND_EVENT_GAME
if (BattleGroundManager::Instance()->LeaveRoom(user,recv_packet->zone_key) == false)
{
TeamBattleGroundManager::Instance()->LeaveRoom(user,recv_packet->zone_key);
}
#else
BattleGroundManager::Instance()->LeaveRoom(user,recv_packet->zone_key);
#endif // _NA_006620_20130402_GM_BATTLE_GROUND_EVENT_GAME
}
void Handler_AG_BATTLE_GROUND::OnAG_BATTLE_GROUND_CAN_RESERVATION_ACK(GameServerSession* server_session,
MSG_BASE* packet, WORD size)
{
MSG_AG_BATTLE_GROUND_CAN_RESERVATION_ACK* recv_packet = \
static_cast<MSG_AG_BATTLE_GROUND_CAN_RESERVATION_ACK*>(packet);
BattleGroundManager* battle_ground_manager = BattleGroundManager::Instance();
User* const user = UserManager::Instance()->GetUser(packet->m_dwKey);
if (user == NULL) {
return;
}
MSG_CG_BATTLE_GROUND_RESERVATION_ACK ack_msg;
ack_msg.result_code = RC::RC_BATTLE_GROUND_RESERVATION_SUCCESS;
// GameServer 단위에서 조건 검사 결과
if (recv_packet->result_code != RC::RC_BATTLE_GROUND_RESERVATION_SUCCESS)
{
ack_msg.result_code = recv_packet->result_code;
user->SendPacket(&ack_msg, sizeof(ack_msg));
return;
}
const MAPCODE map_code = recv_packet->map_code;
int equip_item_score = recv_packet->equip_item_score;
eCHAR_TYPE class_code = recv_packet->class_code;
bool is_healer = recv_packet->is_healer;
//예약자 리스트에 등록
BattleGroundMemberInfo* member = NULL;
bool reserve_result = \
battle_ground_manager->InsertReservationMember(user->GetUserKey(), map_code,
equip_item_score, class_code, is_healer, member);
if (reserve_result == false || member == NULL)
{
ack_msg.result_code = RC::RC_BATTLE_GROUND_RESERVATION_FAIL;
user->SendPacket(&ack_msg, sizeof(ack_msg));
return;
}
// 해당 플레이어의 배틀존 예약 모두 취소
AgentPartyManager* const party_manager = AgentPartyManager::Instance();
PartyRoomFinder* room_finder = party_manager->GetPartyRoomFinder();
if (room_finder != NULL)
{
room_finder->DeleteAllCharGuidFromMissionList(user->GetSelectedCharGuid());
}
ack_msg.battle_ground_reservation_key = member->reservation_key;
user->SendPacket(&ack_msg, sizeof(ack_msg));
// 유저가 예약을 할때마다 체크..
//_NA_007065_20140217_BATTLEGROUND_REFACTORYING
#ifdef _NA_008679_20160202_REWORK_BATTLEGROUND
#else
battle_ground_manager->CheckMatching(map_code);
#endif //_NA_008679_20160202_REWORK_BATTLEGROUND
//
battle_ground_manager->SendReservationMemberCountToClient(user->GetUserGUID(), map_code);
// 상태변경..
;{
MSG_AG_BATTLE_GROUND_STATUS_CHANGE_STATE_CMD cmd_msg;
cmd_msg.behave_sate = PLAYER_BEHAVE_RESERVATION_BATTLE_GROUND_ZONE;
user->SendToLinkedServer(&cmd_msg, sizeof(cmd_msg));
};
}