mirror of
https://gitlab.com/2009scape/2009scape.git
synced 2025-12-09 16:45:44 -07:00
Rewrote Lumbridge swamp hole handling
This commit is contained in:
parent
ca8bfeab64
commit
58d9101ef6
2 changed files with 63 additions and 73 deletions
|
|
@ -0,0 +1,63 @@
|
||||||
|
package content.region.misthalin.lumbridge.handlers
|
||||||
|
|
||||||
|
import core.api.*
|
||||||
|
import org.rs09.consts.Animations
|
||||||
|
import org.rs09.consts.Items
|
||||||
|
import org.rs09.consts.Scenery as Sceneries
|
||||||
|
import core.game.component.Component
|
||||||
|
import core.game.global.action.ClimbActionHandler
|
||||||
|
import core.game.interaction.InteractionListener
|
||||||
|
import core.game.interaction.IntType
|
||||||
|
import core.game.node.Node
|
||||||
|
import core.game.node.entity.player.Player
|
||||||
|
import core.game.node.item.Item
|
||||||
|
import core.game.node.scenery.Scenery
|
||||||
|
import core.game.node.scenery.SceneryBuilder
|
||||||
|
import core.game.world.map.Location
|
||||||
|
import core.game.world.update.flag.context.Animation
|
||||||
|
|
||||||
|
class LumbridgeSwampHoleListener : InteractionListener {
|
||||||
|
|
||||||
|
val CAVE_ENTRANCE = Sceneries.DARK_HOLE_5947
|
||||||
|
val CAVE_EXIT_ROPE = Sceneries.CLIMBING_ROPE_5946
|
||||||
|
val WARNING_SIGN = Sceneries.WARNING_SIGN_15566
|
||||||
|
val TOOL_STORE_FULL = Sceneries.TOOLS_10375
|
||||||
|
val TOOL_STORE_EMPTY = 10373
|
||||||
|
|
||||||
|
override fun defineListeners() {
|
||||||
|
on(CAVE_ENTRANCE, IntType.SCENERY, "climb-down") { player, _ ->
|
||||||
|
if (!player.getSavedData().getGlobalData().hasTiedLumbridgeRope()) {
|
||||||
|
sendDialogue(player, "There is a sheer drop below the hole. You will need a rope.")
|
||||||
|
} else {
|
||||||
|
val insideCave = Location.create(3168, 9572, 0)
|
||||||
|
ClimbActionHandler.climb(player, Animation(Animations.HUMAN_BURYING_BONES_827), insideCave)
|
||||||
|
}
|
||||||
|
|
||||||
|
return@on true
|
||||||
|
}
|
||||||
|
on(CAVE_EXIT_ROPE, IntType.SCENERY, "climb") { player, _ ->
|
||||||
|
val outsideCave = Location.create(3169, 3173, 0)
|
||||||
|
player.getProperties().setTeleportLocation(outsideCave);
|
||||||
|
return@on true
|
||||||
|
}
|
||||||
|
on(WARNING_SIGN, IntType.SCENERY, "read") { player, _ ->
|
||||||
|
player.getPacketDispatch().sendString("<col=8A0808>~-~-~ WARNING ~-~-~", 220, 5);
|
||||||
|
player.getPacketDispatch().sendString("<col=8A0808>Noxious gases vent into this cave.", 220, 7);
|
||||||
|
player.getPacketDispatch().sendString("<col=8A0808>Naked flames may cause an explosion!", 220, 8);
|
||||||
|
player.getPacketDispatch().sendString("<col=8A0808>Beware of vicious head-grabbing beasts!", 220, 10);
|
||||||
|
player.getPacketDispatch().sendString("<col=8A0808>Contact a Slayer master for protective headgear.", 220, 11);
|
||||||
|
player.getInterfaceManager().open(Component(220));
|
||||||
|
return@on true
|
||||||
|
}
|
||||||
|
on(TOOL_STORE_FULL, IntType.SCENERY, "take") { player: Player, node: Node ->
|
||||||
|
if(freeSlots(player) < 2) {
|
||||||
|
sendDialogue(player, "You do not have enough inventory space.")
|
||||||
|
}
|
||||||
|
else if (player.getInventory().add(Item(Items.RAKE_5341), Item(Items.SPADE_952))) {
|
||||||
|
SceneryBuilder.replace((node as Scenery), (node as Scenery).transform(TOOL_STORE_EMPTY), 300);
|
||||||
|
}
|
||||||
|
|
||||||
|
return@on true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -1,73 +0,0 @@
|
||||||
package content.region.misthalin.lumbridge.handlers;
|
|
||||||
|
|
||||||
import core.cache.def.impl.SceneryDefinition;
|
|
||||||
import core.game.component.Component;
|
|
||||||
import core.game.global.action.ClimbActionHandler;
|
|
||||||
import core.game.interaction.OptionHandler;
|
|
||||||
import core.game.node.Node;
|
|
||||||
import core.game.node.entity.player.Player;
|
|
||||||
import core.game.node.item.Item;
|
|
||||||
import core.game.node.scenery.Scenery;
|
|
||||||
import core.game.node.scenery.SceneryBuilder;
|
|
||||||
import core.game.world.map.Location;
|
|
||||||
import core.game.world.update.flag.context.Animation;
|
|
||||||
import core.plugin.Initializable;
|
|
||||||
import core.plugin.Plugin;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Represents the plugin used to handle the swamp hole.
|
|
||||||
* @author 'Vexia
|
|
||||||
* @version 1.0
|
|
||||||
*/
|
|
||||||
@Initializable
|
|
||||||
public final class LumbridgeSwampHolePlugin extends OptionHandler {
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Represents the top location.
|
|
||||||
*/
|
|
||||||
private static final Location TOP = Location.create(3169, 3173, 0);
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Plugin<Object> newInstance(Object arg) throws Throwable {
|
|
||||||
SceneryDefinition.forId(10375).getHandlers().put("option:take", this);
|
|
||||||
SceneryDefinition.forId(5947).getHandlers().put("option:climb-down", this);
|
|
||||||
SceneryDefinition.forId(5946).getHandlers().put("option:climb", this);
|
|
||||||
SceneryDefinition.forId(15566).getHandlers().put("option:read", this);
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean handle(Player player, Node node, String option) {
|
|
||||||
switch (option) {
|
|
||||||
case "climb-down":
|
|
||||||
if (!player.getSavedData().getGlobalData().hasTiedLumbridgeRope()) {
|
|
||||||
player.getDialogueInterpreter().open(70099, "There is a sheer drop below the hole. You will need a rope.");
|
|
||||||
return true;
|
|
||||||
} else {
|
|
||||||
ClimbActionHandler.climb(player, new Animation(827), Location.create(3168, 9572, 0));
|
|
||||||
}
|
|
||||||
case "climb":
|
|
||||||
player.getProperties().setTeleportLocation(TOP);
|
|
||||||
break;
|
|
||||||
case "take":
|
|
||||||
if (player.getInventory().freeSlots() < 2) {
|
|
||||||
player.getPacketDispatch().sendMessage("You do not have enough inventory space.");
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
if (player.getInventory().add(new Item(5341), new Item(952))) {
|
|
||||||
SceneryBuilder.replace(((Scenery) node), ((Scenery) node).transform(10373), 300);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case "read":
|
|
||||||
player.getPacketDispatch().sendString("<col=8A0808>~-~-~ WARNING ~-~-~", 220, 5);
|
|
||||||
player.getPacketDispatch().sendString("<col=8A0808>Noxious gases vent into this cave.", 220, 7);
|
|
||||||
player.getPacketDispatch().sendString("<col=8A0808>Naked flames may cause an explosion!", 220, 8);
|
|
||||||
player.getPacketDispatch().sendString("<col=8A0808>Beware of vicious head-grabbing beasts!", 220, 10);
|
|
||||||
player.getPacketDispatch().sendString("<col=8A0808>Contact a Slayer master for protective headgear.", 220, 11);
|
|
||||||
player.getInterfaceManager().open(new Component(220));
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue