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

100 lines
3.5 KiB
C++

#include <stdafx.h>
#ifdef _NA_007065_20140217_CHAOSZONE_GOLDRUSH
#include "ChaosZoneSystem/Handler_CG_GOLDRUSH.h"
#include <ChaosZoneSystem/PacketStruct_ChaosZoneSystem.h>
#include <PacketStruct_AG_ChaosZoneSystem.h>
#include <ChaosZoneSystem/BattleGroundManager.h>
void Handler_CG_GOLDRUSH::OnCG_ProcessPacket( User* user, MSG_BASE* packet, WORD size )
{
MSG_CG_GOLDRUSH_PACKET* recv_packet = static_cast<MSG_CG_GOLDRUSH_PACKET*>(packet);
switch(recv_packet->packet_type)
{
case CG_GOLDRUSH_RESERVATION_SYN: //전장 예약
{
OnCG_GOLDRUSH_RESERVATION_SYN(user, packet, size);
}break;
case CG_GOLDRUSH_RESERVATION_CANCEL_SYN: //예약취소
{
OnCG_GOLDRUSH_RESERVATION_CANCEL_SYN(user,packet,size);
}break;
default:
{
user->SendToLinkedServer(static_cast<MSG_BASE_FORWARD*>(packet),size);
}break;
}
}
void Handler_CG_GOLDRUSH::OnCG_GOLDRUSH_RESERVATION_SYN( User* user, MSG_BASE* packet, WORD size )
{
MSG_CG_GOLDRUSH_RESERVATION_SYN* recv_packet = \
static_cast<MSG_CG_GOLDRUSH_RESERVATION_SYN*>(packet);
const MAPCODE map_code = recv_packet->map_code;
MSG_CG_GOLDRUSH_RESERVATION_ACK ack_packet;
BattleGroundManager* const battleground_manager = BattleGroundManager::Instance();
if (battleground_manager == NULL)
{
ack_packet.result_code = RC::RC_BATTLE_GROUND_RESERVATION_FAIL;
user->SendPacket(&ack_packet, sizeof(ack_packet));
return;
}
// 입장 제한 확인
RC::eBATTLE_GROUND_RESULT result_code = battleground_manager->CanReservation(user, map_code);
if (result_code != RC::RC_BATTLE_GROUND_RESERVATION_SUCCESS )
{
ack_packet.result_code = result_code;
user->SendPacket(&ack_packet, sizeof(ack_packet));
return;
}
//Agent->GameServer에서 검증
MSG_AG_GOLDRUSH_CAN_RESERVATION_SYN msg;
msg.map_code = map_code;
msg.is_healer = recv_packet->is_healer;
user->SendToLinkedServer(&msg, sizeof(msg));
}
void Handler_CG_GOLDRUSH::OnCG_GOLDRUSH_RESERVATION_CANCEL_SYN( User* user, MSG_BASE* packet, WORD size )
{
MSG_CG_GOLDRUSH_RESERVATION_CANCEL_SYN* recv_packet = \
static_cast<MSG_CG_GOLDRUSH_RESERVATION_CANCEL_SYN*>(packet);
USERGUID guid = user->GetUserKey();
BattleGroundManager* const battleground_manager = BattleGroundManager::Instance();
MSG_CG_GOLDRUSH_RESERVATION_CANCEL_ACK ack_packet;
ack_packet.result_code = RC::RC_BATTLE_GROUND_RESERVATION_CANCEL_FAIL;
BattleGroundMemberInfo* member = battleground_manager->FindBattleGroundMember(guid);
if (member)
{
if (member->group_key == 0) // 1차매칭 하지 않은 유저
{
battleground_manager->RemoveReservationMember(guid);
ack_packet.result_code = RC::RC_BATTLE_GROUND_RESERVATION_CANCEL_SUCCESS;
}
else {
ack_packet.result_code = RC::RC_BATTLE_GROUND_STATE_INCLUDE_MATCHING_GROUPS;
}
}
user->SendPacket(&ack_packet, sizeof(ack_packet));
// 상태변경
;{
MSG_AG_GOLDRUSH_STATUS_CHANGE_STATE_CMD cmd_packet;
cmd_packet.behave_sate = PLAYER_BEHAVE_IDLE_STATE;
user->SendToLinkedServer(&cmd_packet, sizeof(cmd_packet));
};
}
void Handler_CG_GOLDRUSH::OnCG_GOLDRUSH_ABNORMAL_EXIT_USER_REMOVE_SYN( User* user, MSG_BASE* packet, WORD size )
{
MSG_CG_GOLDRUSH_ABNORMAL_EXIT_USER_REMOVE_SYN* recv_msg =
static_cast<MSG_CG_GOLDRUSH_ABNORMAL_EXIT_USER_REMOVE_SYN*>(packet);
}
#endif //_NA_007065_20140217_CHAOSZONE_GOLDRUSH