Compare commits

...

2 commits

Author SHA1 Message Date
Taylor White
4a04d23b92 Merge branch 'roguesDenTest' into 'master'
draft:initial files for rogues den, many things still missing

See merge request 2009scape/2009scape!2017
2025-11-10 15:49:20 +00:00
taylorwhite
8c0aed00bf draft:initial files for rogues den, many things still missing 2024-12-08 11:13:03 -05:00
5 changed files with 848 additions and 109 deletions

View file

@ -1,5 +1,6 @@
package content.global.handlers.scenery;
import content.global.skill.agility.AgilityHandler;
import core.cache.def.impl.SceneryDefinition;
import core.game.interaction.OptionHandler;
import core.game.node.Node;
@ -12,15 +13,15 @@ import core.game.node.item.Item;
import core.game.node.scenery.Scenery;
import core.game.node.scenery.SceneryBuilder;
import core.game.system.task.Pulse;
import core.game.world.map.Direction;
import core.game.world.map.Location;
import core.game.world.update.flag.context.Animation;
import core.plugin.Initializable;
import core.plugin.Plugin;
import core.tools.RandomFunction;
import core.game.world.GameWorld;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.*;
/**
* Represents the thieving guide plugin.
@ -33,6 +34,8 @@ public class ThievingGuidePlugin extends OptionHandler {
/**
* The coin looots.
*/
//private static final Map<Location, MovementHook> LOCATION_TRAPS = new HashMap<>();
private static final ChanceItem[] COINS = new ChanceItem[] { new ChanceItem(995, 20, 20, 90), new ChanceItem(995, 40, 40, 80) };
/**
@ -58,7 +61,7 @@ public class ThievingGuidePlugin extends OptionHandler {
/**
* Represents the animations to use.
*/
private static final Animation[] animations = new Animation[] { new Animation(2247), new Animation(2248), new Animation(1113), new Animation(2244) };
private static final Animation[] animations = new Animation[] { new Animation(2247), new Animation(2248), new Animation(1113), new Animation(2244), };
/**
* Represents the cracked safe.
@ -69,17 +72,52 @@ public class ThievingGuidePlugin extends OptionHandler {
public Plugin<Object> newInstance(Object arg) throws Throwable {
SceneryDefinition.forId(7236).getHandlers().put("option:crack", this);// wall
// safe.
SceneryDefinition.forId(7227).getHandlers().put("option:disarm", this);// trap
SceneryDefinition.forId(7227).getHandlers().put("option:search", this);// trap
SceneryDefinition.forId(7245).getHandlers().put("option:search", this);// trap
SceneryDefinition.forId(7230).getHandlers().put("option:search", this);// trap
SceneryDefinition.forId(7256).getHandlers().put("option:open", this);
SceneryDefinition.forId(7239).getHandlers().put("option:climb", this);
SceneryDefinition.forId(7240).getHandlers().put("option:climb", this);
SceneryDefinition.forId(7251).getHandlers().put("option:enter", this);
return this;
}
@Override
public boolean handle(final Player player, final Node node, String option) {
final Direction dir = Direction.getLogicalDirection(player.getLocation(), node.getLocation());
final Location start = player.getLocation();
Location end = player.getLocation();
switch (option) {
case "open":
if(player.getAttribute("rogues-den", true)==true) {
if(player.getInventory().freeSlots() == 28) {
if(!player.getFamiliarManager().hasFamiliar()) {
player.getPacketDispatch().sendMessage("Brian O'Richard gives you a jewel as you enter the maze");
player.getProperties().setTeleportLocation(Location.create(3056, 4992, 1));
player.getSkills().restore();
player.getSkills().setPrayerPoints(0);
//player.getSkills().drainLevel(Skills.PRAYER);
Item gem = new Item(5561);
player.getInventory().add(gem);
//player.removeAttribute("rogues-den");
player.setAttribute("rogues-den", false);
break;
}
else {
player.getDialogueInterpreter().sendDialogues(2266, null, "Sorry but I can't allow you to take your follower in there,", "never know what trouble they might cause.");
break;
}
}
else {
player.getDialogueInterpreter().sendDialogues(2266, null, "Tut tut tut, now you know you're not allowed to", "take anything except that jewel in with you.");
break;
}
}
else {
player.getDialogueInterpreter().sendDialogues(2266, null, "And where do you think you're going? A little too eager", "I think. Come and talk to me before you go wandering", "around in there.");
break;
}
case "crack":
if (player.getSkills().getLevel(Skills.THIEVING) < 50) {
player.getPacketDispatch().sendMessage("You need to be level " + level + " thief to crack this safe.");
@ -120,7 +158,51 @@ public class ThievingGuidePlugin extends OptionHandler {
case "search":
player.animate(animations[3]);
player.getPacketDispatch().sendMessage("You temporarily disarm the trap!");
String clearMsg = "/save:clear-trap" + node.getLocation().toString();
//clearMsg.concat(node.getLocation().toString());
System.out.println(clearMsg);
player.setAttribute(clearMsg, true);
player.getSkills().updateLevel(Skills.THIEVING, -1, 0);
break;
case "climb":
if(dir.ordinal()==1) {
end = new Location(player.getLocation().getX(), player.getLocation().getY() + 5, player.getLocation().getZ());
}
else if(dir.ordinal()==4){
end = new Location(player.getLocation().getX() + 5, player.getLocation().getY(), player.getLocation().getZ());
}
else if(dir.ordinal()==3){
end = new Location(player.getLocation().getX() - 5, player.getLocation().getY(), player.getLocation().getZ());
}
else {
end = new Location(player.getLocation().getX(), player.getLocation().getY() - 5, player.getLocation().getZ());
}
AgilityHandler.walk(player, -1, player.getLocation(), end, null, 0.0, null);
break;
case "enter":
if(player.getSkills().getLevel(Skills.AGILITY) < 5) {
player.lock(4);
GameWorld.getPulser().submit(new Pulse(1, player) {
@Override
public boolean pulse() {
player.getSkills().updateLevel(Skills.AGILITY, -5, 0);
AgilityHandler.forceWalk(player, -1, player.getLocation(), player.getLocation().transform(dir.getStepX() << 1, dir.getStepY() << 1, 0), Animation.create(10580), 4, 26, null);
return true;
}
});
}
else {
player.getPacketDispatch().sendMessage("You don't have enough Agility skill left");
}
break;
}
return true;
}
@ -186,4 +268,6 @@ public class ThievingGuidePlugin extends OptionHandler {
}
return false;
}
}

View file

@ -0,0 +1,56 @@
package content.minigame.roguesden
import core.api.*
import core.game.dialogue.DialogueFile
import core.game.dialogue.Topic
import core.game.interaction.IntType
import core.game.interaction.InteractionListener
import core.game.world.map.Location
import core.tools.END_DIALOGUE
import org.rs09.consts.Items
class RogueGemListener : InteractionListener {
override fun defineListeners() {
on(Items.MYSTIC_JEWEL_5561, IntType.ITEM, "activate") { player, _ ->
openDialogue(player, MysticJewelDialogue())
return@on true
}
}
}
class MysticJewelDialogue() : DialogueFile() {
var firstRun = true
override fun handle(interfaceId: Int, buttonId: Int) {
when (stage) {
0 -> npcl(
2266,
core.game.dialogue.FacialExpression.FRIENDLY,
"Want to come out then? Giving up are you? You know there's no time limit here."
).also { stage++ }
1 -> showTopics(
Topic(core.game.dialogue.FacialExpression.HALF_WORRIED, "Yes I'd like to leave!", 100),
Topic(core.game.dialogue.FacialExpression.FRIENDLY, "No I'm fine thanks.", END_DIALOGUE),
)
100 -> {
npcl(
2266,
core.game.dialogue.FacialExpression.FRIENDLY,
"Right you are then, out you come."
).also { stage++ }
stage = 200
}
200 -> {
END_DIALOGUE
player!!.properties.teleportLocation = Location.create(3056, 4981, 1)
}
}
}
}

View file

@ -0,0 +1,46 @@
package content.minigame.roguesden;
import core.game.node.entity.skill.Skills;
import content.global.skill.agility.AgilityHandler;
import core.game.node.entity.Entity;
import core.game.node.entity.player.Player;
import core.game.system.task.MovementHook;
import core.game.system.task.Pulse;
import core.game.world.GameWorld;
import core.game.world.map.Direction;
import core.game.world.map.Location;
import core.game.world.update.flag.context.Animation;
/**
* Handles floor spikes trap.
* @author taylorwhite18
*/
public final class PendulumTrap implements MovementHook {
@Override
public boolean handle(Entity e, final Location l) {
final Direction dir = e.getDirection();
final Player player = (Player) e;
final Location start = l.transform(-dir.getStepX(), -dir.getStepY(), 0);
if (player.getSkills().getLevel(Skills.AGILITY) < 5) {
e.lock(5);
GameWorld.getPulser().submit(new Pulse(1, e) {
@Override
public boolean pulse() {
player.getSkills().updateLevel(Skills.AGILITY, -3, 0);
AgilityHandler.forceWalk(player, -1, l, l.transform(dir.getStepX() << 2, dir.getStepY() << 2, 0), Animation.create(1115), 20, 0, null);
return true;
}
});
}else {
AgilityHandler.failWalk(player, 1, player.getLocation(), start, start, Animation.create(1114), 10, 0, "Your agility level is too low!").setDirection(dir);
}
return false;
}
}

View file

@ -0,0 +1,524 @@
package content.minigame.roguesden;
import static core.api.ContentAPIKt.*;
import core.game.node.entity.Entity;
import core.game.node.entity.combat.ImpactHandler;
import core.game.node.entity.player.Player;
import core.game.system.task.MovementHook;
import core.game.system.task.Pulse;
import core.game.world.GameWorld;
import core.game.world.map.*;
import core.game.world.map.zone.MapZone;
import core.game.world.map.zone.ZoneBorders;
import core.game.world.map.zone.ZoneBuilder;
import core.game.world.update.flag.context.Animation;
import core.plugin.Initializable;
import core.plugin.Plugin;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* locationUpdate hook for Rogues Den area
* @author taylorwhite18
*/
@Initializable
public final class RoguesDen extends MapZone implements Plugin<Object> {
public RoguesDen() { super("Isafdar", true); }
Location LOBBY = new Location(3056,4981,1);
private String STICK_FAIL_MSG = "You set off the trap as you pass.";
private static final Map<Location, MovementHook> LOCATION_TRAPS = new HashMap<>();
List<Location> SPIKE_TRAPS = Arrays.asList(
//region 12110
new Location(3010, 5002, 1),
new Location(3010, 5003, 1),
new Location(3010, 5004, 1),
new Location(3010, 5005, 1),
new Location(3011, 5001, 1),
new Location(3011, 5002, 1),
new Location(3011, 5003, 1),
new Location(3011, 5004, 1),
new Location(3012, 5002, 1),
new Location(3012, 5003, 1),
new Location(3012, 5004, 1),
new Location(3012, 5005, 1),
new Location(3013, 5001, 1),
new Location(3013, 5002, 1),
new Location(3013, 5003, 1),
new Location(3014, 5002, 1),
new Location(3014, 5004, 1),
new Location(3019, 4995, 1),
new Location(3019, 4997, 1),
new Location(3021, 4996, 1),
new Location(3026, 4996, 1),
new Location(3026, 5000, 1),
new Location(3027, 5001, 1),
new Location(3028, 4995, 1),
new Location(3029, 4997, 1),
new Location(3029, 4998, 1),
new Location(3029, 4999, 1),
new Location(3029, 5000, 1),
new Location(3029, 5001, 1),
new Location(3030, 4997, 1),
new Location(3030, 4998, 1),
new Location(3030, 4999, 1),
new Location(3030, 5000, 1),
new Location(3030, 5001, 1),
new Location(3030, 5003, 1),
new Location(3030, 5020, 1),
new Location(3031, 4997, 1),
new Location(3031, 4998, 1),
new Location(3031, 4999, 1),
new Location(3031, 5000, 1),
new Location(3031, 5001, 1),
new Location(3031, 5023, 1),
new Location(3032, 4995, 1),
new Location(3032, 4997, 1),
new Location(3032, 4998, 1),
new Location(3032, 5000, 1),
new Location(3032, 5001, 1),
new Location(3033, 4997, 1),
new Location(3033, 4998, 1),
new Location(3033, 5000, 1),
new Location(3033, 5001, 1),
new Location(3033, 5003, 1),
new Location(3034, 4995, 1),
new Location(3034, 4997, 1),
new Location(3034, 4998, 1),
new Location(3034, 4999, 1),
new Location(3034, 5000, 1),
new Location(3034, 5001, 1),
new Location(3035, 4994, 1),
new Location(3035, 4997, 1),
new Location(3035, 4998, 1),
new Location(3035, 4999, 1),
new Location(3035, 5000, 1),
new Location(3035, 5001, 1),
new Location(3036, 4997, 1),
new Location(3036, 4998, 1),
new Location(3036, 4999, 1),
new Location(3036, 5000, 1),
new Location(3036, 5001, 1),
new Location(3037, 4995, 1),
new Location(3037, 5013, 1),
new Location(3038, 5002, 1),
new Location(3039, 5012, 1),
new Location(3040, 5014, 1),
new Location(3043, 5024, 1),
new Location(3045, 5024, 1),
new Location(3055, 4994, 1),
new Location(3056, 4994, 1),
new Location(3056, 5000, 1),
new Location(3056, 5001, 1),
new Location(3057, 4994, 1),
new Location(3057, 5000, 1),
new Location(3057, 5001, 1),
new Location(3058, 5000, 1),
new Location(3058, 5001, 1),
//region 12111
new Location(3021, 5096, 1),
new Location(3022, 5094, 1),
new Location(3022, 5097, 1),
new Location(3023, 5095, 1),
new Location(3023, 5102, 1),
new Location(3024, 5096, 1),
new Location(3025, 5102, 1),
new Location(3027, 5102, 1),
//region 11854
new Location(2963, 5051, 1),
new Location(2963, 5052, 1),
new Location(2963, 5053, 1),
new Location(2963, 5054, 1),
new Location(2992, 5046, 1),
new Location(2992, 5048, 1),
new Location(2992, 5050, 1),
new Location(2992, 5052, 1),
new Location(2998, 5039, 1),
new Location(3005, 5003, 1),
new Location(3007, 5003, 1),
//region 11855
new Location(2963, 5051, 1),
new Location(2963, 5052, 1),
new Location(2963, 5053, 1),
new Location(2963, 5054, 1),
new Location(2992, 5046, 1),
new Location(2992, 5048, 1),
new Location(2992, 5050, 1),
new Location(2992, 5052, 1),
new Location(2998, 5039, 1),
new Location(3005, 5003, 1),
new Location(3007, 5003, 1),
new Location(2971, 5081, 1),
new Location(2972, 5081, 1),
new Location(2973, 5081, 1),
new Location(2974, 5081, 1),
new Location(2975, 5081, 1),
new Location(2976, 5081, 1),
new Location(2977, 5081, 1),
new Location(2979, 5104, 1),
new Location(2980, 5103, 1),
new Location(2980, 5104, 1),
new Location(2981, 5103, 1),
new Location(2981, 5104, 1),
new Location(2982, 5103, 1),
new Location(2982, 5104, 1),
new Location(2983, 5103, 1),
new Location(2983, 5104, 1),
new Location(2984, 5103, 1),
new Location(2984, 5104, 1),
new Location(2985, 5103, 1),
new Location(2985, 5104, 1),
new Location(2986, 5103, 1),
new Location(2986, 5104, 1),
new Location(2987, 5103, 1),
new Location(2997, 5103, 1),
new Location(2998, 5104, 1),
new Location(2999, 5103, 1),
new Location(3000, 5104, 1),
//pad traps
//region 12110
new Location(3044, 5000, 1),
new Location(3045, 5000, 1),
new Location(3045, 5001, 1),
new Location(3045, 5002, 1),
new Location(3045, 5003, 1),
new Location(3046, 5002, 1),
new Location(3046, 5003, 1),
new Location(3046, 5004, 1),
new Location(3047, 5002, 1),
new Location(3047, 5003, 1),
new Location(3047, 5005, 1),
//region 11854
new Location(2965, 5000, 1),
new Location(2965, 5002, 1),
new Location(2965, 5004, 1),
new Location(2967, 5000, 1),
new Location(2967, 5002, 1),
new Location(2967, 5004, 1),
new Location(3005, 4996, 1),
new Location(3005, 5032, 1),
new Location(3005, 5034, 1),
new Location(3006, 5033, 1),
new Location(3007, 4996, 1),
new Location(3007, 5032, 1),
new Location(3007, 5034, 1),
//region 11855
new Location(2962, 5082, 1),
new Location(2962, 5083, 1),
new Location(2963, 5080, 1),
new Location(2963, 5081, 1),
new Location(2963, 5082, 1),
new Location(2963, 5083, 1),
new Location(2963, 5084, 1),
new Location(2964, 5079, 1),
new Location(2964, 5080, 1),
new Location(2964, 5081, 1),
new Location(2964, 5082, 1),
new Location(2964, 5083, 1),
new Location(2964, 5084, 1),
new Location(2965, 5079, 1),
new Location(2965, 5080, 1),
new Location(2965, 5081, 1),
new Location(2989, 5071, 1),
new Location(2991, 5071, 1),
new Location(2992, 5068, 1),
new Location(2992, 5070, 1),
//explosive traps
//region 12110
new Location(3011, 5033, 1),
new Location(3012, 5032, 1),
new Location(3012, 5033, 1),
new Location(3012, 5034, 1),
new Location(3013, 5033, 1),
new Location(3049, 5034, 1),
new Location(3049, 5035, 1),
new Location(3049, 5036, 1),
new Location(3049, 5037, 1),
new Location(3049, 5038, 1),
new Location(3049, 5039, 1),
new Location(3049, 5040, 1),
new Location(3050, 5033, 1),
new Location(3050, 5034, 1),
new Location(3050, 5035, 1),
new Location(3050, 5036, 1),
new Location(3050, 5037, 1),
new Location(3050, 5038, 1),
new Location(3050, 5039, 1),
new Location(3050, 5040, 1),
new Location(3050, 5041, 1),
new Location(3051, 5033, 1),
new Location(3051, 5034, 1),
new Location(3051, 5040, 1),
new Location(3051, 5041, 1),
new Location(3052, 5033, 1),
new Location(3052, 5034, 1),
new Location(3052, 5036, 1),
new Location(3052, 5037, 1),
new Location(3052, 5038, 1),
new Location(3052, 5040, 1),
new Location(3052, 5041, 1),
new Location(3052, 5042, 1),
new Location(3053, 5033, 1),
new Location(3053, 5034, 1),
new Location(3053, 5036, 1),
new Location(3053, 5038, 1),
new Location(3053, 5040, 1),
new Location(3053, 5041, 1),
new Location(3053, 5042, 1),
new Location(3054, 5033, 1),
new Location(3054, 5034, 1),
new Location(3054, 5036, 1),
new Location(3054, 5037, 1),
new Location(3054, 5038, 1),
new Location(3054, 5040, 1),
new Location(3054, 5041, 1),
new Location(3054, 5042, 1),
new Location(3055, 5033, 1),
new Location(3055, 5034, 1),
new Location(3055, 5040, 1),
new Location(3055, 5041, 1),
new Location(3055, 5042, 1),
new Location(3056, 5026, 1),
new Location(3056, 5027, 1),
new Location(3056, 5033, 1),
new Location(3056, 5034, 1),
new Location(3056, 5035, 1),
new Location(3056, 5036, 1),
new Location(3056, 5037, 1),
new Location(3056, 5038, 1),
new Location(3056, 5039, 1),
new Location(3056, 5040, 1),
new Location(3056, 5041, 1),
new Location(3056, 5042, 1),
new Location(3057, 5025, 1),
new Location(3057, 5026, 1),
new Location(3057, 5034, 1),
new Location(3057, 5035, 1),
new Location(3057, 5036, 1),
new Location(3057, 5037, 1),
new Location(3057, 5038, 1),
new Location(3057, 5039, 1),
new Location(3057, 5040, 1),
new Location(3057, 5041, 1),
new Location(3060, 5022, 1),
new Location(3061, 5022, 1),
new Location(3061, 5023, 1),
new Location(3062, 5022, 1),
new Location(3062, 5023, 1),
//region 11854
new Location(2979, 5023, 1),
new Location(2979, 5025, 1),
new Location(2980, 5024, 1),
new Location(2981, 5023, 1),
new Location(2981, 5025, 1),
new Location(2982, 5024, 1),
new Location(2998, 5050, 1),
new Location(2998, 5052, 1),
new Location(2998, 5054, 1),
new Location(3003, 5016, 1),
new Location(3003, 5021, 1),
new Location(3003, 5026, 1),
new Location(3005, 5016, 1),
new Location(3005, 5021, 1),
new Location(3005, 5026, 1),
new Location(3005, 5033, 1),
new Location(3006, 5032, 1),
new Location(3006, 5034, 1),
new Location(3007, 5016, 1),
new Location(3007, 5021, 1),
new Location(3007, 5026, 1),
new Location(3007, 5033, 1),
//region 11855
new Location(2973, 5066, 1),
new Location(2973, 5067, 1),
new Location(2973, 5068, 1),
new Location(2974, 5067, 1),
new Location(2974, 5068, 1)
);
List<Location> WALL_TRAPSONE = Arrays.asList(
//region 12110
new Location(3022, 5030, 1),
new Location(3022, 5036, 1),
new Location(3029, 5021, 1),
new Location(3030, 5030, 1),
new Location(3032, 5022, 1),
new Location(3037, 5011, 1),
new Location(3062, 5037, 1),
new Location(3062, 5038, 1),
new Location(3062, 5039, 1),
//region 11854
new Location(2961, 5051, 1),
new Location(2961, 5053, 1),
new Location(2961, 5055, 1),
new Location(2965, 5052, 1),
new Location(2965, 5054, 1),
new Location(2989, 4996, 1),
new Location(2989, 4999, 1),
new Location(2990, 4996, 1),
new Location(2990, 4999, 1),
new Location(2990, 5047, 1),
new Location(2990, 5049, 1),
new Location(2990, 5051, 1),
new Location(2990, 5053, 1),
new Location(2991, 4996, 1),
new Location(2991, 4999, 1),
new Location(2992, 4996, 1),
new Location(2992, 4999, 1),
new Location(2993, 4996, 1),
new Location(2993, 4999, 1),
new Location(2994, 5047, 1),
new Location(2994, 5049, 1),
new Location(2994, 5051, 1),
new Location(2994, 5053, 1)
);
List<Location> WALL_TRAPSSPIKE = Arrays.asList(
//region 12110
new Location(3030, 5013, 1),
new Location(3032, 5012, 1),
//region 11854
new Location(3004, 5014, 1),
new Location(3004, 5017, 1),
new Location(3004, 5019, 1),
new Location(3004, 5022, 1),
new Location(3004, 5024, 1),
new Location(3004, 5027, 1),
new Location(3006, 5014, 1),
new Location(3006, 5017, 1),
new Location(3006, 5019, 1),
new Location(3006, 5022, 1),
new Location(3006, 5024, 1),
new Location(3006, 5027, 1)
);
@Override
public void configure() {
register(new ZoneBorders(2945, 4990, 3066, 5117, 1));
PendulumTrap pendulumTrap = new PendulumTrap();
//region 12110
LOCATION_TRAPS.put(Location.create(3027, 5049, 1), pendulumTrap);
LOCATION_TRAPS.put(Location.create(3027, 5053, 1), pendulumTrap);
LOCATION_TRAPS.put(Location.create(3029, 5049, 1), pendulumTrap);
LOCATION_TRAPS.put(Location.create(3029, 5053, 1), pendulumTrap);
LOCATION_TRAPS.put(Location.create(3029, 5049, 1), pendulumTrap);
LOCATION_TRAPS.put(Location.create(3029, 5053, 1), pendulumTrap);
LOCATION_TRAPS.put(Location.create(3031, 5049, 1), pendulumTrap);
LOCATION_TRAPS.put(Location.create(3031, 5053, 1), pendulumTrap);
LOCATION_TRAPS.put(Location.create(3040, 4997, 1), pendulumTrap);
LOCATION_TRAPS.put(Location.create(3040, 4999, 1), pendulumTrap);
LOCATION_TRAPS.put(Location.create(3042, 4997, 1), pendulumTrap);
LOCATION_TRAPS.put(Location.create(3042, 4999, 1), pendulumTrap);
LOCATION_TRAPS.put(Location.create(3052, 5015, 1), pendulumTrap);
LOCATION_TRAPS.put(Location.create(3056, 5015, 1), pendulumTrap);
LOCATION_TRAPS.put(Location.create(3052, 5017, 1), pendulumTrap);
LOCATION_TRAPS.put(Location.create(3056, 5017, 1), pendulumTrap);
//region 12111
LOCATION_TRAPS.put(Location.create(3022, 5108, 1), pendulumTrap);
LOCATION_TRAPS.put(Location.create(3022, 5110, 1), pendulumTrap);
LOCATION_TRAPS.put(Location.create(3024, 5108, 1), pendulumTrap);
LOCATION_TRAPS.put(Location.create(3024, 5110, 1), pendulumTrap);
LOCATION_TRAPS.put(Location.create(3027, 5108, 1), pendulumTrap);
LOCATION_TRAPS.put(Location.create(3027, 5110, 1), pendulumTrap);
LOCATION_TRAPS.put(Location.create(3029, 5108, 1), pendulumTrap);
LOCATION_TRAPS.put(Location.create(3029, 5110, 1), pendulumTrap);
//region 11854
LOCATION_TRAPS.put(Location.create(2953, 5025, 1), pendulumTrap);
LOCATION_TRAPS.put(Location.create(2953, 5027, 1), pendulumTrap);
LOCATION_TRAPS.put(Location.create(2955, 5025, 1), pendulumTrap);
LOCATION_TRAPS.put(Location.create(2955, 5027, 1), pendulumTrap);
LOCATION_TRAPS.put(Location.create(2956, 5025, 1), pendulumTrap);
LOCATION_TRAPS.put(Location.create(2956, 5027, 1), pendulumTrap);
LOCATION_TRAPS.put(Location.create(2958, 5025, 1), pendulumTrap);
LOCATION_TRAPS.put(Location.create(2958, 5027, 1), pendulumTrap);
LOCATION_TRAPS.put(Location.create(2959, 5025, 1), pendulumTrap);
LOCATION_TRAPS.put(Location.create(2959, 5027, 1), pendulumTrap);
LOCATION_TRAPS.put(Location.create(2961, 5025, 1), pendulumTrap);
LOCATION_TRAPS.put(Location.create(2961, 5027, 1), pendulumTrap);
LOCATION_TRAPS.put(Location.create(2962, 5025, 1), pendulumTrap);
LOCATION_TRAPS.put(Location.create(2962, 5027, 1), pendulumTrap);
LOCATION_TRAPS.put(Location.create(2964, 5025, 1), pendulumTrap);
LOCATION_TRAPS.put(Location.create(2964, 5027, 1), pendulumTrap);
LOCATION_TRAPS.put(Location.create(3001, 5032, 1), pendulumTrap);
LOCATION_TRAPS.put(Location.create(3001, 5034, 1), pendulumTrap);
LOCATION_TRAPS.put(Location.create(3003, 5032, 1), pendulumTrap);
LOCATION_TRAPS.put(Location.create(3003, 5034, 1), pendulumTrap);
//region 11855
LOCATION_TRAPS.put(Location.create(2981, 5109, 1), pendulumTrap);
LOCATION_TRAPS.put(Location.create(2981, 5111, 1), pendulumTrap);
LOCATION_TRAPS.put(Location.create(2983, 5109, 1), pendulumTrap);
LOCATION_TRAPS.put(Location.create(2983, 5111, 1), pendulumTrap);
}
@Override
public void locationUpdate(Entity e, Location last) {
if (e instanceof Player) {
Player player = (Player) e;
String clearmsg = "clear-trap" + player.getLocation().toString();
if ((player.getAttribute(clearmsg, true)) && (SPIKE_TRAPS.contains(player.getLocation()) || WALL_TRAPSSPIKE.contains(player.getLocation().getCardinalTiles()))) {
System.out.println("hello");
sendMessage(player, STICK_FAIL_MSG);
player.animate(Animation.create(1114));
player.getPacketDispatch().sendSceneryAnimation(RegionManager.getObject(player.getLocation()), Animation.create(1111));
impact(player, 1, ImpactHandler.HitsplatType.NORMAL);
player.teleport(LOBBY);
} else if ((SPIKE_TRAPS.contains(player.getLocation()))) {
GameWorld.getPulser().submit(new Pulse(20) {
@Override
public boolean pulse() {
player.removeAttribute(clearmsg);
return false;
}
});
}
}
}
@Override
public Plugin<Object> newInstance(Object arg) throws Throwable {
ZoneBuilder.configure(this);
return this;
}
@Override
public Object fireEvent(String identifier, Object... args) {
return null;
}
@Override
public boolean move(Entity e, Location loc, Location dest) {
if (!e.getLocks().isMovementLocked() && e instanceof Player) {
MovementHook hook = LOCATION_TRAPS.get(loc);
if (hook != null) {
e.setDirection(Direction.getLogicalDirection(loc, dest));
return hook.handle(e, loc);
}
}
return super.move(e, loc, dest);
}
}

View file

@ -9,7 +9,7 @@ import core.game.node.entity.player.Player;
/**
* Reprepsents the dialogue plugin used to handle the brian orichard npc.
* @author 'Vexia
* @authors 'Vexia, taylorwhite18
* @version 1.0
*/
@Initializable
@ -40,7 +40,7 @@ public final class BrianORichardDialogue extends DialoguePlugin {
@Override
public boolean open(Object... args) {
npc = (NPC) args[0];
interpreter.sendDialogues(npc, FacialExpression.HALF_GUILTY, "Hi there, looking for a challenge are you?");
interpreter.sendDialogues(npc, FacialExpression.FRIENDLY, "Hi there, looking for a challenge are you?");
stage = 1;
return true;
}
@ -55,15 +55,15 @@ public final class BrianORichardDialogue extends DialoguePlugin {
case 2:
switch (buttonId) {
case 1:
interpreter.sendDialogues(player, FacialExpression.HALF_GUILTY, "Yes actually, what've you got?");
interpreter.sendDialogues(player, FacialExpression.ASKING, "Yes actually, what've you got?");
stage = 10;
break;
case 2:
interpreter.sendDialogues(player, FacialExpression.HALF_GUILTY, "What is this place?");
interpreter.sendDialogues(player, FacialExpression.ASKING, "What is this place?");
stage = 20;
break;
case 3:
interpreter.sendDialogues(player, FacialExpression.HALF_GUILTY, "No thanks.");
interpreter.sendDialogues(player, FacialExpression.FRIENDLY, "No thanks.");
stage = 30;
break;
}
@ -72,19 +72,24 @@ public final class BrianORichardDialogue extends DialoguePlugin {
if (player.getSkills().getLevel(Skills.THIEVING) < 50) {
interpreter.sendDialogues(npc, FacialExpression.HALF_GUILTY, "Shame, I don't think I have anything for you. Train up", "your Thieving skill to at least 50 and I might be able to", "help you out.");
stage = 11;
} else {
} else if((player.getSkills().getLevel(Skills.AGILITY) < 50 && player.getSkills().getLevel(Skills.THIEVING) > 49)) {
interpreter.sendDialogues(npc, FacialExpression.HALF_GUILTY, "Shame, I don't think I have anything for you. Train up your Agility skill to at least 50 and I might be able to help you out.");
stage = 11;
}
else if((player.getSkills().getLevel(Skills.AGILITY) > 49 && player.getSkills().getLevel(Skills.THIEVING) > 49)) {
interpreter.sendDialogues(npc, FacialExpression.HAPPY, "Aha, I have the perfect thing for you! See if you", "can get to the centre of my maze, the further", "you get the greater the rewards. There's even some", "special prizes if you make it right to the end.");
stage = 30;
}
break;
case 11:
end();
break;
case 20:
interpreter.sendDialogues(npc, FacialExpression.HALF_GUILTY, "Ah welcome to my humble home, well actually it belongs", "to mummsie but she's getting on a bit so I look after", "the place for her.");
interpreter.sendDialogues(npc, FacialExpression.NEUTRAL, "Ah welcome to my humble home, well actually it belongs", "to mummsie but she's getting on a bit so I look after", "the place for her.");
stage = 21;
break;
case 21:
interpreter.sendDialogues(npc, FacialExpression.HALF_GUILTY, "So are you interested in a challenge?");
interpreter.sendDialogues(npc, FacialExpression.ASKING, "So are you interested in a challenge?");
stage = 22;
break;
case 22:
@ -94,11 +99,11 @@ public final class BrianORichardDialogue extends DialoguePlugin {
case 23:
switch (buttonId) {
case 1:
interpreter.sendDialogues(player, FacialExpression.HALF_GUILTY, "Yes actually, what've you got?");
interpreter.sendDialogues(player, FacialExpression.ASKING, "Yes actually, what've you got?");
stage = 24;
break;
case 2:
interpreter.sendDialogues(player, FacialExpression.HALF_GUILTY, "No, thanks.");
interpreter.sendDialogues(player, FacialExpression.FRIENDLY, "No, thanks.");
stage = 25;
break;
}
@ -115,6 +120,30 @@ public final class BrianORichardDialogue extends DialoguePlugin {
end();
break;
case 30:
interpreter.sendOptions("Select an Option", "Ok that sounds good!", "No thanks.");
stage = 31;
break;
case 31:
switch (buttonId) {
case 1:
interpreter.sendDialogues(player, FacialExpression.HAPPY, "Ok that sounds good!");
stage = 42;
break;
case 2:
interpreter.sendDialogues(player, FacialExpression.FRIENDLY, "No thanks.");
stage = 44;
break;
}
case 42://dialogue for entering rogues guild, doesn
interpreter.sendDialogues(npc, FacialExpression.HAPPY, "Great! When you enter the maze, I'll give you", "a jewel - it'll allow you to get out of the maze", "at any time. However that's all you're allowed to take", "in with you, no cheating!");
stage = 43;
break;
case 43: interpreter.sendDialogues(npc, FacialExpression.HALF_GUILTY, "Oh one last thing, if you happen to see my harmonica", "I'd really like to have it back.");
player.setAttribute("/save:rogues-den", true);
player.setAttribute("/save:delaytrap", true);
stage = 44;
break;
case 44:
end();
break;
}