I wanted to find a solution for the character unstuck after using the trapdoor in poh (throne room) that takes the character to the dungeon.
So I found an old code that I updated, and it managed to unstuck myself and unlock the entire dungeon build option. I know that when I do something like this, half of the things stop working. I wanted to ask, what are the negative effects of this change?
This is a test on test-server and below is the code:
► Show Spoiler
Code: Select all
package content.global.skill.support.construction;
import core.game.node.entity.Entity;
import core.game.node.entity.player.Player;
import core.game.system.task.Pulse;
import core.game.world.map.Region;
import core.game.world.map.RegionManager;
import core.game.world.map.zone.MapZone;
import core.game.world.map.zone.ZoneRestriction;
import static core.api.ContentAPIKt.*;
public final class HouseZone extends MapZone {
private final HouseManager house;
private int previousRegion = -1;
private int previousDungeon = -1;
public HouseZone(HouseManager house) {
super("poh-zone" + house, true, ZoneRestriction.RANDOM_EVENTS, ZoneRestriction.FOLLOWERS);
this.house = house;
}
@Override
public void configure() {
unregisterOldRegions();
registerRegion(house.getHouseRegion().getId());
if (house.getDungeonRegion() != null) {
registerRegion(house.getDungeonRegion().getId());
}
}
private void unregisterOldRegions() {
if (previousRegion != -1) {
unregisterRegion(previousRegion);
}
if (previousDungeon != -1) {
unregisterRegion(previousDungeon);
}
}
@Override
public boolean enter(Entity e) {
if (e instanceof Player) {
Player pl = (Player) e;
if (house == pl.getHouseManager()) {
previousRegion = house.getHouseRegion().getId();
if (house.getDungeonRegion() != null)
previousDungeon = house.getDungeonRegion().getId();
}
registerLogoutListener(pl, "houselogout", (p) -> {
p.setLocation(house.getLocation().getExitLocation());
return kotlin.Unit.INSTANCE;
});
}
return super.enter(e);
}
@Override
public boolean death(Entity e, Entity killer) {
if (e instanceof Player) {
Player p = (Player) e;
HouseManager.leave(p);
}
return true;
}
@Override
public boolean leave(Entity e, boolean logout) {
if (e instanceof Player) {
Player p = (Player) e;
if (house == p.getHouseManager()) {
house.expelGuests(p);
int toRemove = previousRegion;
int dungRemove = previousDungeon;
submitWorldPulse(new Pulse(2) {
public boolean pulse() {
Region r = RegionManager.forId(toRemove);
Region dr = dungRemove != -1 ? RegionManager.forId(dungRemove) : null;
RegionManager.removeRegion(toRemove);
unregisterRegion(toRemove);
r.setActive(false);
if (dungRemove != -1) {
RegionManager.removeRegion(dungRemove);
unregisterRegion(dungRemove);
dr.setActive(false);
}
return true;
}
});
}
clearLogoutListener(p, "houselogout");
return true;
}
return true;
}
}
► Show Spoiler
Code: Select all
package content.global.skill.support.construction;
import core.game.node.entity.Entity;
import core.game.node.entity.player.Player;
import core.game.world.map.zone.MapZone;
import core.game.world.map.zone.ZoneRestriction;
import static core.api.ContentAPIKt.clearLogoutListener;
import static core.api.ContentAPIKt.registerLogoutListener;
public final class HouseZone extends MapZone {
private final HouseManager house;
private int previousRegion = -1;
private int previousDungeon = -1;
public HouseZone(HouseManager house) {
super("poh-zone" + house, true, ZoneRestriction.RANDOM_EVENTS, ZoneRestriction.FOLLOWERS);
this.house = house;
}
@Override
public void configure() {
if (previousRegion != -1) {
unregisterRegion(previousRegion);
}
if (previousDungeon != -1) {
unregisterRegion(previousDungeon);
}
registerRegion(house.getHouseRegion().getId());
if (house.getDungeonRegion() != null) {
registerRegion(house.getDungeonRegion().getId());
}
}
@Override
public boolean enter(Entity e) {
if (e instanceof Player) {
Player pl = (Player) e;
registerLogoutListener(pl, "houselogout", (p) -> {
p.setLocation(house.getLocation().getExitLocation());
return kotlin.Unit.INSTANCE;
});
}
return super.enter(e);
}
@Override
public boolean death(Entity e, Entity killer) {
if (e instanceof Player) {
Player p = (Player) e;
HouseManager.leave(p);
}
return true;
}
@Override
public boolean leave(Entity e, boolean logout) {
if (logout) {
if (e instanceof Player) {
Player p = (Player) e;
clearLogoutListener(p, "houselogout");
HouseManager.leave(p);
return true;
}
}
return true;
}
}