104 lines
4.2 KiB
C#
104 lines
4.2 KiB
C#
|
|
|
|
using ServerCore;
|
|
using ServerBase;
|
|
using ServerCommon;
|
|
|
|
|
|
namespace GameServer;
|
|
|
|
public class BattleInstanceJoinSuccessHandler : GameModeJoinSuccessHandlerBase
|
|
{
|
|
private readonly BattleInstanceRoom m_battle_instance_room;
|
|
public BattleInstanceJoinSuccessHandler(Player player, InstanceRoom instanceRoom)
|
|
: base(player, EPlaceType.BattleRoom)
|
|
{
|
|
var room_id = instanceRoom.getMap().m_room_id;
|
|
var battle_instance_room = BattleInstanceManager.It.getBattleInstanceRoom(room_id);
|
|
NullReferenceCheckHelper.throwIfNull(battle_instance_room, () => $"m_battle_instance_room is null !!!");
|
|
|
|
m_battle_instance_room = battle_instance_room;
|
|
}
|
|
|
|
public override Result joinSuccessValidate()
|
|
{
|
|
var result = BattleRoomHelper.checkBattleActive(m_place_type);
|
|
if (result.isFail()) return result;
|
|
return result;
|
|
}
|
|
|
|
public override async Task<Result> joinSuccessConfirmation()
|
|
{
|
|
var result = new Result();
|
|
string err_msg = string.Empty;
|
|
|
|
var room_id = m_battle_instance_room.m_instance_room.getMap().m_room_id;
|
|
var battle_instance_attribute = m_battle_instance_room.getEntityAttribute<BattleInstanceSnapshotAttribute>();
|
|
NullReferenceCheckHelper.throwIfNull(battle_instance_attribute, () => $"battle_instance_attribute is null !!!");
|
|
|
|
(result, var pos_meta_guid) = BattleRoomHelper.getRandomRespawnPos(battle_instance_attribute, m_battle_instance_room);
|
|
if (result.isFail())
|
|
{
|
|
return result;
|
|
}
|
|
|
|
if (false == m_battle_instance_room.m_respawn_pos_anchors_meta.Contains(pos_meta_guid))
|
|
{
|
|
err_msg = $"respawn pos meta not exist idx : {pos_meta_guid}";
|
|
result.setFail(ServerErrorCode.BattleInstanceUsableSpawnPointNotExist, err_msg);
|
|
return result;
|
|
}
|
|
|
|
using (var releaser = await m_battle_instance_room.getAsyncLock())
|
|
{
|
|
var now = DateTimeHelper.Current;
|
|
var next_respawn_time = now.AddSeconds(m_battle_instance_room.m_ffa_config_meta.PlayerRespawnTime);
|
|
|
|
battle_instance_attribute.m_combat_pod_mode.m_respawns.AddOrUpdate(pos_meta_guid, next_respawn_time, (key, old) => next_respawn_time);
|
|
|
|
var location_action = m_player.getEntityAction<LocationAction>();
|
|
NullReferenceCheckHelper.throwIfNull(location_action, () => $"location_action is null !!! - {m_player.toBasicString()}");
|
|
|
|
|
|
var currenct_pos = location_action.getCurrentPos();
|
|
if (false == m_battle_instance_room.m_instance_room.getMap().getAnchors().TryGetValue(pos_meta_guid, out var anchorInfo))
|
|
{
|
|
err_msg = $"anchorInfo not exist idx : {pos_meta_guid}";
|
|
result.setFail(ServerErrorCode.BattleInstanceNotExistAnchors, err_msg);
|
|
return result;
|
|
}
|
|
|
|
currenct_pos = anchorInfo.AnchorPos.Clone();
|
|
currenct_pos.Z += 100;
|
|
location_action.tryUpdateCurrentPos(currenct_pos);
|
|
}
|
|
|
|
return result;
|
|
}
|
|
|
|
public override async Task<Result> joinSuccessNotify()
|
|
{
|
|
var result = new Result();
|
|
m_player.send_S2C_NTF_SET_LOCATION();
|
|
result = await BattleInstanceManager.It.sendNtfAboutBattleInstance(m_battle_instance_room, m_player);
|
|
if (result.isFail()) return result;
|
|
return result;
|
|
}
|
|
|
|
|
|
public override void joinSuccessWriteLog()
|
|
{
|
|
var room_id = m_battle_instance_room.m_instance_room.getMap().m_room_id;
|
|
var user_guid = m_player.getUserGuid();
|
|
var user_nickname = m_player.getUserNickname();
|
|
|
|
var battle_instance_attribute = m_battle_instance_room.getEntityAttribute<BattleInstanceSnapshotAttribute>();
|
|
NullReferenceCheckHelper.throwIfNull(battle_instance_attribute, () => $"battle_instance_attribute is null !!!");
|
|
|
|
var currenct_round = battle_instance_attribute.m_combat_pod_mode.m_current_round;
|
|
|
|
var log_action = new LogActionEx(LogActionType.BattleInstanceJoin);
|
|
var invoker = new BattleRoomJoinBusinessLog(user_guid, user_nickname, room_id, currenct_round);
|
|
BusinessLogger.collectLogs(log_action, m_player, new List<ILogInvoker>(){invoker});
|
|
}
|
|
} |