diff --git a/Maple2.Database/Storage/Game/GameStorage.Map.cs b/Maple2.Database/Storage/Game/GameStorage.Map.cs index c208943c8..4d26b7574 100644 --- a/Maple2.Database/Storage/Game/GameStorage.Map.cs +++ b/Maple2.Database/Storage/Game/GameStorage.Map.cs @@ -21,7 +21,7 @@ public IList LoadPlotsForMap(int mapId, long ownerId = -1) { .Where(map => map.MapId == mapId && map.OwnerId == ownerId); } else { query = Context.UgcMap.Include(map => map.Cubes) - .Where(map => map.MapId == mapId); + .Where(map => map.MapId == mapId && map.MapId != Constant.DefaultHomeMapId); } return query.AsEnumerable() diff --git a/Maple2.Server.Game/Manager/Field/FieldManager/FieldManager.cs b/Maple2.Server.Game/Manager/Field/FieldManager/FieldManager.cs index 845c22f00..1cb38c06e 100644 --- a/Maple2.Server.Game/Manager/Field/FieldManager/FieldManager.cs +++ b/Maple2.Server.Game/Manager/Field/FieldManager/FieldManager.cs @@ -137,12 +137,14 @@ public virtual void Init() { } // Create default to place liftable cubes - Plots[0] = new Plot(new UgcMapGroup(0, - 0, - 0, - new UgcMapGroup.Cost(0, 0, 0), - new UgcMapGroup.Cost(0, 0, 0), - new UgcMapGroup.Limits(0, 0, 0, 0, 0, 0))); + if (MapId is not Constant.DefaultHomeMapId) { + Plots[0] = new Plot(new UgcMapGroup(0, + 0, + 0, + new UgcMapGroup.Cost(0, 0, 0), + new UgcMapGroup.Cost(0, 0, 0), + new UgcMapGroup.Limits(0, 0, 0, 0, 0, 0))); + } foreach (TriggerModel trigger in Entities.TriggerModels.Values) { AddTrigger(trigger); @@ -461,14 +463,14 @@ public bool UsePortal(GameSession session, int portalId, string password) { Portal srcPortal = fieldPortal; switch (srcPortal.Type) { case PortalType.InHome: - PlotCube? cubePortal = Plots.First().Value.Cubes.Values.FirstOrDefault(x => x.Interact?.PortalSettings is not null && x.Interact.PortalSettings.PortalObjectId == fieldPortal.ObjectId); + PlotCube? cubePortal = session.Housing.GetFieldPlot()?.Cubes.Values.FirstOrDefault(x => x.Interact?.PortalSettings is not null && x.Interact.PortalSettings.PortalObjectId == fieldPortal.ObjectId); if (cubePortal is null) { return false; } switch (cubePortal.Interact!.PortalSettings!.Destination) { case CubePortalDestination.PortalInHome: - PlotCube? destinationCube = Plots.First().Value.Cubes.Values.FirstOrDefault(x => x.Interact?.PortalSettings is not null && x.Interact.PortalSettings.PortalName == cubePortal.Interact.PortalSettings.DestinationTarget); + PlotCube? destinationCube = session.Housing.GetFieldPlot()?.Cubes.Values.FirstOrDefault(x => x.Interact?.PortalSettings is not null && x.Interact.PortalSettings.PortalName == cubePortal.Interact.PortalSettings.DestinationTarget); if (destinationCube is null) { return false; } diff --git a/Maple2.Server.Game/PacketHandlers/LoadUgcMapHandler.cs b/Maple2.Server.Game/PacketHandlers/LoadUgcMapHandler.cs index 1ffce167c..c71a6b4bf 100644 --- a/Maple2.Server.Game/PacketHandlers/LoadUgcMapHandler.cs +++ b/Maple2.Server.Game/PacketHandlers/LoadUgcMapHandler.cs @@ -50,7 +50,10 @@ public override void Handle(GameSession session, IByteReader packet) { } // Check if current plot is planner - Plot indoor = session.Field.Plots.First().Value; + Plot? indoor = session.Housing.GetFieldPlot(); + if (indoor is null) { + return; + } if (indoor.IsPlanner) { home.EnterPlanner(indoor.PlotMode); } diff --git a/Maple2.Server.Game/Session/GameSession.cs b/Maple2.Server.Game/Session/GameSession.cs index be3f592ae..4a48e7a9d 100644 --- a/Maple2.Server.Game/Session/GameSession.cs +++ b/Maple2.Server.Game/Session/GameSession.cs @@ -202,7 +202,7 @@ public bool EnterServer(long accountId, Guid machineId, MigrateInResponse migrat case MigrationType.DecorPlanner: case MigrationType.BlueprintDesigner: player.Home.EnterPlanner((PlotMode) migrationType); - fieldManager.Plots.First().Value.SetPlannerMode((PlotMode) migrationType); + Housing.GetFieldPlot()?.SetPlannerMode((PlotMode) migrationType); break; case MigrationType.Dungeon: if (fieldManager is not DungeonFieldManager dungeonField) { @@ -486,7 +486,7 @@ public bool EnterField() { public void ReturnField() { Player player = Player.Value; - if (player.Home.IsHomeSetup && !Player.Field.Plots.IsEmpty && Player.Field.Plots.First().Value.IsPlanner) { + if (player.Home.IsHomeSetup && !Player.Field.Plots.IsEmpty && (Player.Session.Housing.GetFieldPlot()?.IsPlanner ?? false)) { MigrateToPlanner(PlotMode.Normal); return; }