draft:initial files for rogues den, many things still missing

This commit is contained in:
taylorwhite 2024-12-08 11:13:03 -05:00
parent 7749e8263f
commit 8c0aed00bf
5 changed files with 848 additions and 109 deletions

View file

@ -1,5 +1,6 @@
package content.global.handlers.scenery; package content.global.handlers.scenery;
import content.global.skill.agility.AgilityHandler;
import core.cache.def.impl.SceneryDefinition; import core.cache.def.impl.SceneryDefinition;
import core.game.interaction.OptionHandler; import core.game.interaction.OptionHandler;
import core.game.node.Node; 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.Scenery;
import core.game.node.scenery.SceneryBuilder; import core.game.node.scenery.SceneryBuilder;
import core.game.system.task.Pulse; 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.game.world.update.flag.context.Animation;
import core.plugin.Initializable; import core.plugin.Initializable;
import core.plugin.Plugin; import core.plugin.Plugin;
import core.tools.RandomFunction; import core.tools.RandomFunction;
import core.game.world.GameWorld; import core.game.world.GameWorld;
import java.util.ArrayList; import java.util.*;
import java.util.Collections;
import java.util.List;
/** /**
* Represents the thieving guide plugin. * Represents the thieving guide plugin.
@ -33,6 +34,8 @@ public class ThievingGuidePlugin extends OptionHandler {
/** /**
* The coin looots. * 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) }; 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. * 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. * Represents the cracked safe.
@ -69,58 +72,137 @@ public class ThievingGuidePlugin extends OptionHandler {
public Plugin<Object> newInstance(Object arg) throws Throwable { public Plugin<Object> newInstance(Object arg) throws Throwable {
SceneryDefinition.forId(7236).getHandlers().put("option:crack", this);// wall SceneryDefinition.forId(7236).getHandlers().put("option:crack", this);// wall
// safe. // 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(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; return this;
} }
@Override @Override
public boolean handle(final Player player, final Node node, String option) { 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) { switch (option) {
case "open": case "open":
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."); if(player.getAttribute("rogues-den", true)==true) {
break; if(player.getInventory().freeSlots() == 28) {
case "crack": if(!player.getFamiliarManager().hasFamiliar()) {
if (player.getSkills().getLevel(Skills.THIEVING) < 50) { player.getPacketDispatch().sendMessage("Brian O'Richard gives you a jewel as you enter the maze");
player.getPacketDispatch().sendMessage("You need to be level " + level + " thief to crack this safe."); player.getProperties().setTeleportLocation(Location.create(3056, 4992, 1));
return true; player.getSkills().restore();
} player.getSkills().setPrayerPoints(0);
if (player.getInventory().freeSlots() == 0) { //player.getSkills().drainLevel(Skills.PRAYER);
player.getPacketDispatch().sendMessage("Not enough inventory space."); Item gem = new Item(5561);
return true; player.getInventory().add(gem);
} //player.removeAttribute("rogues-den");
final boolean success = success(player, Skills.THIEVING); player.setAttribute("rogues-den", false);
player.lock(4); break;
player.getPacketDispatch().sendMessage("You start cracking the safe."); }
player.animate(animations[success ? 1 : 0]); else {
GameWorld.getPulser().submit(new Pulse(3, player) { 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.");
@Override break;
public boolean pulse() { }
if (success) {
handleSuccess(player, (Scenery) node);
return true;
} }
final boolean trapped = RandomFunction.random(3) == 1; else {
if (trapped) { player.getDialogueInterpreter().sendDialogues(2266, null, "Tut tut tut, now you know you're not allowed to", "take anything except that jewel in with you.");
player.getPacketDispatch().sendMessage("You slip and trigger a trap!"); break;
player.animate(animations[2]);
player.getImpactHandler().manualHit(player, RandomFunction.random(2, 6), HitsplatType.NORMAL);
GameWorld.getPulser().submit(new Pulse(1) {
@Override
public boolean pulse() {
player.animate(new Animation(-1, Priority.HIGH));
return true;
}
});
} }
}
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.");
return true; return true;
} }
}); if (player.getInventory().freeSlots() == 0) {
break; player.getPacketDispatch().sendMessage("Not enough inventory space.");
case "search": return true;
player.animate(animations[3]); }
player.getPacketDispatch().sendMessage("You temporarily disarm the trap!"); final boolean success = success(player, Skills.THIEVING);
break; player.lock(4);
player.getPacketDispatch().sendMessage("You start cracking the safe.");
player.animate(animations[success ? 1 : 0]);
GameWorld.getPulser().submit(new Pulse(3, player) {
@Override
public boolean pulse() {
if (success) {
handleSuccess(player, (Scenery) node);
return true;
}
final boolean trapped = RandomFunction.random(3) == 1;
if (trapped) {
player.getPacketDispatch().sendMessage("You slip and trigger a trap!");
player.animate(animations[2]);
player.getImpactHandler().manualHit(player, RandomFunction.random(2, 6), HitsplatType.NORMAL);
GameWorld.getPulser().submit(new Pulse(1) {
@Override
public boolean pulse() {
player.animate(new Animation(-1, Priority.HIGH));
return true;
}
});
}
return true;
}
});
break;
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; return true;
} }
@ -167,7 +249,7 @@ public class ThievingGuidePlugin extends OptionHandler {
} }
tries++; tries++;
} }
player.getInventory().add(item); player.getInventory().add(item);
} }
/** /**
@ -186,4 +268,6 @@ public class ThievingGuidePlugin extends OptionHandler {
} }
return false; 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. * Reprepsents the dialogue plugin used to handle the brian orichard npc.
* @author 'Vexia * @authors 'Vexia, taylorwhite18
* @version 1.0 * @version 1.0
*/ */
@Initializable @Initializable
@ -40,7 +40,7 @@ public final class BrianORichardDialogue extends DialoguePlugin {
@Override @Override
public boolean open(Object... args) { public boolean open(Object... args) {
npc = (NPC) args[0]; 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; stage = 1;
return true; return true;
} }
@ -48,75 +48,104 @@ public final class BrianORichardDialogue extends DialoguePlugin {
@Override @Override
public boolean handle(int interfaceId, int buttonId) { public boolean handle(int interfaceId, int buttonId) {
switch (stage) { switch (stage) {
case 1:
interpreter.sendOptions("Select an Option", "Yes, actually, what've you got?", "What is this place?", "No thanks.");
stage = 2;
break;
case 2:
switch (buttonId) {
case 1: case 1:
interpreter.sendDialogues(player, FacialExpression.HALF_GUILTY, "Yes actually, what've you got?"); interpreter.sendOptions("Select an Option", "Yes, actually, what've you got?", "What is this place?", "No thanks.");
stage = 10; stage = 2;
break; break;
case 2: case 2:
interpreter.sendDialogues(player, FacialExpression.HALF_GUILTY, "What is this place?"); switch (buttonId) {
stage = 20; case 1:
interpreter.sendDialogues(player, FacialExpression.ASKING, "Yes actually, what've you got?");
stage = 10;
break;
case 2:
interpreter.sendDialogues(player, FacialExpression.ASKING, "What is this place?");
stage = 20;
break;
case 3:
interpreter.sendDialogues(player, FacialExpression.FRIENDLY, "No thanks.");
stage = 30;
break;
}
break; break;
case 3: case 10:
interpreter.sendDialogues(player, FacialExpression.HALF_GUILTY, "No thanks."); if (player.getSkills().getLevel(Skills.THIEVING) < 50) {
stage = 30; 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 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; break;
} case 11:
break; end();
case 10: break;
if (player.getSkills().getLevel(Skills.THIEVING) < 50) { case 20:
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."); 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 = 11; stage = 21;
} else { break;
case 21:
interpreter.sendDialogues(npc, FacialExpression.ASKING, "So are you interested in a challenge?");
stage = 22;
break;
case 22:
interpreter.sendOptions("Select an Option", "Yes actually, what've you got?", "No thanks.");
stage = 23;
break;
case 23:
switch (buttonId) {
case 1:
interpreter.sendDialogues(player, FacialExpression.ASKING, "Yes actually, what've you got?");
stage = 24;
break;
case 2:
interpreter.sendDialogues(player, FacialExpression.FRIENDLY, "No, thanks.");
stage = 25;
break;
}
break;
case 24:
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 = 25;
} else {
} }
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.");
stage = 21;
break;
case 21:
interpreter.sendDialogues(npc, FacialExpression.HALF_GUILTY, "So are you interested in a challenge?");
stage = 22;
break;
case 22:
interpreter.sendOptions("Select an Option", "Yes actually, what've you got?", "No thanks.");
stage = 23;
break;
case 23:
switch (buttonId) {
case 1:
interpreter.sendDialogues(player, FacialExpression.HALF_GUILTY, "Yes actually, what've you got?");
stage = 24;
break; break;
case 2: case 25:
interpreter.sendDialogues(player, FacialExpression.HALF_GUILTY, "No, thanks."); end();
stage = 25; 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; break;
}
break;
case 24:
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 = 25;
} else {
}
break;
case 25:
end();
break;
case 30:
end();
break;
} }
return true; return true;
} }