Files
caliverse_server/GameServer/Contents/GameMode/Mode-Battle/Manage/BattleInstanceJoinSuccessHandler.cs
2025-05-01 07:20:41 +09:00

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});
}
}