using Newtonsoft.Json; using ServerBase; using ServerCommon; using ServerCore; namespace GameServer; internal partial class LocationAction { public async Task 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(); 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; } }