초기커밋
This commit is contained in:
@@ -0,0 +1,104 @@
|
||||
|
||||
|
||||
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});
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user