Server/09HDscape-server/src/plugin/activity/pestcontrol/PCLanderZone.java
2019-06-15 20:41:29 -04:00

104 lines
No EOL
3.1 KiB
Java

package plugin.activity.pestcontrol;
import org.crandor.game.interaction.Option;
import org.crandor.game.node.Node;
import org.crandor.game.node.entity.Entity;
import org.crandor.game.node.entity.player.Player;
import org.crandor.game.node.object.GameObject;
import org.crandor.game.world.map.Location;
import org.crandor.game.world.map.zone.MapZone;
import org.crandor.game.world.map.zone.ZoneBorders;
import org.crandor.game.world.map.zone.ZoneRestriction;
/**
* The pest control lander zone handler.
* @author Emperor
*/
public final class PCLanderZone extends MapZone {
/**
* The activities.
*/
private PestControlActivityPlugin[] activities;
/**
* Constructs a new {@code PCLanderZone} {@code Object}.
* @param activities The activities.
*/
public PCLanderZone(PestControlActivityPlugin[] activities) {
super("pest control lander", true, ZoneRestriction.RANDOM_EVENTS, ZoneRestriction.FIRES, ZoneRestriction.FOLLOWERS, ZoneRestriction.CANNON);
this.activities = activities;
}
@Override
public boolean interact(Entity e, Node target, Option option) {
if (target instanceof GameObject) {
GameObject o = (GameObject) target;
switch (o.getId()) {
case 14314: // Novice exit ladder
if (activities[0].getWaitingPlayers().contains(e)) {
activities[0].getWaitingPlayers().remove(e);
e.getProperties().setTeleportLocation(activities[0].getLeaveLocation());
}
return true;
case 25629: // Intermediate exit ladder
if (activities[1].getWaitingPlayers().contains(e)) {
activities[1].getWaitingPlayers().remove(e);
e.getProperties().setTeleportLocation(activities[1].getLeaveLocation());
}
return true;
case 25630: // Veteran exit ladder
if (activities[2].getWaitingPlayers().contains(e)) {
activities[2].getWaitingPlayers().remove(e);
e.getProperties().setTeleportLocation(activities[2].getLeaveLocation());
}
return true;
}
}
return false;
}
@Override
public boolean teleport(Entity e, int type, Node node) {
if (e instanceof Player && type != -1) {
for (PestControlActivityPlugin a : activities) {
if (a.getWaitingPlayers().contains(e)) {
((Player) e).getPacketDispatch().sendMessage("The knights don't appreciate you teleporting off their craft!");
return false;
}
}
}
return super.teleport(e, type, node);
}
@Override
public boolean leave(Entity e, boolean logout) {
if (e instanceof Player) {
Player p = (Player) e;
if (p.getInterfaceManager().getComponent(407) != null) {
p.getInterfaceManager().closeOverlay();
}
for (PestControlActivityPlugin a : activities) {
if (a.getWaitingPlayers().remove(e)) {
if (logout) {
e.getProperties().setTeleportLocation(a.getLeaveLocation());
}
break;
}
}
}
return super.leave(e, logout);
}
@Override
public void configure() {
ZoneBorders boatA = new ZoneBorders(2659, 2637, 2664, 2664);
ZoneBorders boatB = new ZoneBorders(2637, 2641, 2642, 2648);
ZoneBorders boatC = new ZoneBorders(2631, 2648, 2636, 2655);
register(boatA);
register(boatB);
register(boatC);
}
}