Rewrote Lumbridge swamp hole handling

This commit is contained in:
Kamja Imo 2024-08-03 07:24:47 +00:00 committed by Ryan
parent ca8bfeab64
commit 58d9101ef6
2 changed files with 63 additions and 73 deletions

View file

@ -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
}
}
}

View file

@ -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;
}
}