90 lines
3.8 KiB
C#
90 lines
3.8 KiB
C#
using Newtonsoft.Json;
|
|
using ServerCommon;
|
|
using ServerCore; using ServerBase;
|
|
|
|
namespace GameServer;
|
|
|
|
internal partial class LocationAction
|
|
{
|
|
public async Task<Result> tryMoveToBattleIndun(InstanceRoomInfo instanceRoomInfo, Pos? enterPos = null, bool isReturn = false)
|
|
{
|
|
var result = new Result();
|
|
var err_msg = string.Empty;
|
|
|
|
var player = getOwner() as Player;
|
|
NullReferenceCheckHelper.throwIfNull(player, () => $"player is null !!!");
|
|
|
|
var server_logic = GameServerApp.getServerLogic();
|
|
|
|
var location_attribute = player.getEntityAttribute<LocationAttribute>();
|
|
NullReferenceCheckHelper.throwIfNull(location_attribute, () => $"location_attribute is null !!! - {player.toBasicString()}");
|
|
|
|
NullReferenceCheckHelper.throwIfNull(m_current_loaction, () => $"m_current_loaction is null !!! - {player.toBasicString()}");
|
|
NullReferenceCheckHelper.throwIfNull(m_location_cache_request_nullable, () => "Current Location Cache is null !!");
|
|
|
|
if (!MetaData.Instance._IndunTable.TryGetValue(instanceRoomInfo.InstanceId, out var indun_data))
|
|
{
|
|
err_msg = $"Failed to MetaData.TryGetValue() !!! : instanceMetaId:{instanceRoomInfo.InstanceId} - {player.toBasicString()}";
|
|
result.setFail(ServerErrorCode.InstanceMetaDataNotFound, err_msg);
|
|
Log.getLogger().error(result.toBasicString());
|
|
|
|
return result;
|
|
}
|
|
|
|
if (server_logic.getServerType().toServerType() == ServerType.Channel)
|
|
{
|
|
location_attribute.LastestChannelServerLocation.ServerName = server_logic.getServerName();
|
|
location_attribute.LastestChannelServerLocation.WorldMetaId = (int)server_logic.getWorldId();
|
|
location_attribute.LastestChannelServerLocation.SpawnPos = m_current_loaction.SpawnPos;
|
|
location_attribute.LastestChannelServerLocation.ForwardAngle = m_current_loaction.ForwardAngle;
|
|
|
|
server_logic.getReturnManager().addReturnUser(player.getUserGuid());
|
|
}
|
|
else if (isReturn == false)
|
|
{
|
|
IndunLocation indun_location = new();
|
|
|
|
indun_location.InstanceRoomId = location_attribute.CurrentIndunLocation.InstanceRoomId;
|
|
indun_location.InstanceMetaId = location_attribute.CurrentIndunLocation.InstanceMetaId;
|
|
indun_location.SpawnPos = m_current_loaction.SpawnPos;
|
|
indun_location.ForwardAngle = m_current_loaction.ForwardAngle;
|
|
|
|
location_attribute.ReturnIndunLocations.Add(indun_location);
|
|
|
|
server_logic.getReturnManager().addReturnUser(player.getUserGuid());
|
|
}
|
|
|
|
if (enterPos != null)
|
|
{
|
|
enterPos.Z += 100;
|
|
}
|
|
|
|
location_attribute.EnterIndunLocation.InstanceRoomId = instanceRoomInfo.roomId;
|
|
location_attribute.EnterIndunLocation.InstanceMetaId = instanceRoomInfo.InstanceId;
|
|
location_attribute.EnterIndunLocation.fromPos(enterPos == null ? MapManager.Instance.GetStartPos(indun_data.RoomFile) : enterPos);
|
|
location_attribute.modifiedEntityAttribute();
|
|
|
|
var location_cache = m_location_cache_request_nullable.getLocationCache();
|
|
NullReferenceCheckHelper.throwIfNull(location_cache, () => $"location_cache is null !!! - {player.toBasicString()}");
|
|
|
|
location_cache.copyCacheFromEntityAttribute(location_attribute);
|
|
|
|
result = await m_location_cache_request_nullable.upsertLocation();
|
|
if (result.isFail())
|
|
{
|
|
err_msg = $"Failed to upsertLocation() !!! : {result.toBasicString()}";
|
|
Log.getLogger().error(err_msg);
|
|
|
|
return result;
|
|
}
|
|
|
|
return result;
|
|
}
|
|
|
|
|
|
public LocationCacheRequest? getBattleLocationCacheRequestNullable()
|
|
{
|
|
return m_location_cache_request_nullable;
|
|
}
|
|
|
|
} |