116 lines
4.4 KiB
C++
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));
|
|
};
|
|
|
|
}
|