diff --git a/Server/src/main/java/core/game/node/entity/skill/construction/HouseManager.java b/Server/src/main/java/core/game/node/entity/skill/construction/HouseManager.java index ed39f3893..0584a6559 100644 --- a/Server/src/main/java/core/game/node/entity/skill/construction/HouseManager.java +++ b/Server/src/main/java/core/game/node/entity/skill/construction/HouseManager.java @@ -267,10 +267,16 @@ public final class HouseManager { int diffX = player.getLocation().getX() - r.getBaseLocation().getX(); int diffY = player.getLocation().getY() - r.getBaseLocation().getY(); int diffZ = player.getLocation().getZ() - r.getBaseLocation().getZ(); + DynamicRegion dr = region; + DynamicRegion dd = dungeon; + RegionManager.getRegionCache().remove(dr); + RegionManager.getRegionCache().remove(dd); region = null; dungeon = null; enter(player, buildingMode, false); player.getProperties().setTeleportLocation((player.getViewport().getRegion() == dungeon ? dungeon : region).getBaseLocation().transform(diffX, diffY, diffZ)); + dr.flagInactive(); + dd.flagInactive(); } /** diff --git a/Server/src/main/java/core/game/world/map/Region.java b/Server/src/main/java/core/game/world/map/Region.java index 44a244124..12313de4f 100644 --- a/Server/src/main/java/core/game/world/map/Region.java +++ b/Server/src/main/java/core/game/world/map/Region.java @@ -299,22 +299,31 @@ public class Region { } } + /** + * Unloads a region - compatibility method for older uses + */ + private static void unload(Region r){ + unload(r, false); + } + /** * Unloads a region. * @param r The region. */ - private static void unload(Region r) { - if (r.isViewed()) { - SystemLogger.logErr("Players viewing region!"); - r.flagActive(); - return; - } - for (RegionPlane p : r.planes) { - if (!p.getPlayers().isEmpty()) { - SystemLogger.logErr("Players still in region!"); + private static void unload(Region r, boolean force) { + if(!force){ + if (r.isViewed()) { + SystemLogger.logErr("Players viewing region!"); r.flagActive(); return; } + for (RegionPlane p : r.planes) { + if (!p.getPlayers().isEmpty()) { + SystemLogger.logErr("Players still in region!"); + r.flagActive(); + return; + } + } } for (RegionPlane p : r.planes) { p.clear();