From b9e12316e1762bc62243b872461bcbff38d7c8cb Mon Sep 17 00:00:00 2001 From: The Celery Man <61421472+Ceikry@users.noreply.github.com> Date: Mon, 9 Mar 2020 17:21:17 -0500 Subject: [PATCH] Fully implement Pyramid Plunder, Simon Templeton, Pharoah's Sceptre (#150) * Added Pyramid Plunder! * Added Simon Templeton! * Implemented Pharoah's Sceptre --- .../pyramidplunder/PyramidPlunderOptions.java | 212 ++++++++++++++++ .../src/plugin/dialogue/SimonTempleton.java | 239 ++++++++++++++++++ .../interaction/item/PharoahSceptre.java | 139 ++++++++++ .../interaction/npc/RechargeSceptre.java | 220 ++++++++++++++++ .../npc/SimonScepterInteraction.java | 34 +++ 5 files changed, 844 insertions(+) create mode 100644 Server/src/plugin/activity/pyramidplunder/PyramidPlunderOptions.java create mode 100644 Server/src/plugin/dialogue/SimonTempleton.java create mode 100644 Server/src/plugin/interaction/item/PharoahSceptre.java create mode 100644 Server/src/plugin/interaction/npc/RechargeSceptre.java create mode 100644 Server/src/plugin/interaction/npc/SimonScepterInteraction.java diff --git a/Server/src/plugin/activity/pyramidplunder/PyramidPlunderOptions.java b/Server/src/plugin/activity/pyramidplunder/PyramidPlunderOptions.java new file mode 100644 index 000000000..ad6986ba3 --- /dev/null +++ b/Server/src/plugin/activity/pyramidplunder/PyramidPlunderOptions.java @@ -0,0 +1,212 @@ +package plugin.activity.pyramidplunder; + +import org.crandor.cache.def.impl.ObjectDefinition; +import org.crandor.game.content.global.action.ClimbActionHandler; +import org.crandor.game.content.skill.Skills; +import org.crandor.game.interaction.OptionHandler; +import org.crandor.game.node.Node; +import org.crandor.game.node.entity.Entity; +import org.crandor.game.node.entity.combat.ImpactHandler; +import org.crandor.game.node.entity.npc.NPC; +import org.crandor.game.node.entity.player.Player; +import org.crandor.game.node.item.Item; +import org.crandor.game.node.object.GameObject; +import org.crandor.game.world.map.Direction; +import org.crandor.game.world.map.Location; +import org.crandor.game.world.update.flag.context.Animation; +import org.crandor.plugin.InitializablePlugin; +import org.crandor.plugin.Plugin; +import org.crandor.plugin.PluginManager; +import org.crandor.tools.RandomFunction; + +import java.util.Random; + +/** + * Handle pyramid plunder object interactions + * @author ceik + */ + +@InitializablePlugin +public final class PyramidPlunderOptions extends OptionHandler { + Item[][] ARTIFACTS = { {new Item(9032),new Item(9036), new Item(9026)}, {new Item(9042), new Item(9030), new Item(9038)}, {new Item(9040), new Item(9028), new Item(9034)} }; + private static final Animation[] animations = new Animation[] { new Animation(2247), new Animation(2248), new Animation(1113), new Animation(2244) }; + int reqLevel; + @Override + public Plugin newInstance(Object arg) throws Throwable { + ObjectDefinition.forId(16517).getConfigurations().put("option:pass",this); + ObjectDefinition.forId(16503).getConfigurations().put("option:search",this); + ObjectDefinition.forId(16502).getConfigurations().put("option:search",this); + ObjectDefinition.forId(16501).getConfigurations().put("option:search",this); + ObjectDefinition.forId(16473).getConfigurations().put("option:search",this); + ObjectDefinition.forId(16495).getConfigurations().put("option:open",this); + ObjectDefinition.forId(16475).getConfigurations().put("option:pick-lock",this); + return this; + } + public void rollSceptre(Player player){ + if(RandomFunction.random(1000) == 4){ + player.getInventory().add(new Item(9050)); + } + } + public final boolean success(final Player player, final int skill) { + double level = player.getSkills().getLevel(skill); + double successChance = Math.ceil((level * 50 - reqLevel) / reqLevel / 3 * 4); + int roll = RandomFunction.random(99); + if (successChance >= roll) { + return true; + } + player.getImpactHandler().manualHit(player,RandomFunction.random(4), ImpactHandler.HitsplatType.NORMAL); + return false; + } + @Override + public boolean handle(Player player, Node node, String option) { + Location room_entrance[] = {new Location(1927,4477), new Location(1927,4453), new Location(1943,4421), new Location(1954,4477), new Location(1974,4420), new Location(1977,4471), new Location(1927, 4424)}; + int currentX = player.getLocation().getX(); + int currentY = player.getLocation().getY(); + int level = player.getSkills().getLevel(Skills.THIEVING); + int room = 0; + int spearX = 0; + int spearY = 0; + double droom = 0.0; + if(currentX >= 1923 && currentX <= 1932 && currentY <= 4477 && currentY >= 4464 ){ + room = 1; + reqLevel = 21; + spearX = 0; + spearY = -2; + + } else if(currentX >= 1925 && currentX <= 1941 && currentY <= 4458 && currentY >= 4449 ){ + room = 2; + reqLevel = 31; + spearX = 2; + spearY = 0; + } else if(currentX >= 1941 && currentX <= 1954 && currentY >=4421 && currentY <= 4432 ){ + room = 3; + reqLevel = 41; + spearX = 0; + spearY = 2; + } else if(currentX >= 1949 && currentX <= 1959 && currentY <= 4477 && currentY >= 4464){ + room = 4; + reqLevel = 51; + spearX = 0; + spearY = -2; + } else if(currentX >= 1968 && currentX <= 1978 && currentY <= 4436 && currentY >= 4420){ + room = 5; + reqLevel = 61; + spearX = 0; + spearY = 2; + } else if(currentX >= 1970 && currentX <= 1979 && currentY <= 4471 && currentY >= 4424){ + room = 6; + reqLevel = 71; + spearX = 0; + spearY = -2; + } else if(currentX >= 1923 && currentX <= 1931 && currentY <= 4439 && currentY >= 4424){ + room = 8; + reqLevel = 81; + spearX = 0; + spearY = 2; + } + GameObject object = node.asObject(); + droom = (double) room; + switch (object.getId()) { + case 16517: + if (option.equals("Pass") || option.equals("pass")) { + if (reqLevel > level){ + player.getPacketDispatch().sendMessage("You need to be at least level " + reqLevel + " thieving."); + break; + } + boolean success = success(player, Skills.THIEVING); + player.animate(animations[success ? 1 : 0]); + if (success) { + player.getPacketDispatch().sendMessage("You successfully pass the spears."); + player.getSkills().addExperience(Skills.THIEVING, 30 + (room * 20), true); + int moveX = player.getLocation().getX(); + int moveY = player.getLocation().getY(); + Location moveto = new Location(moveX + spearX, moveY + spearY); + player.getProperties().setTeleportLocation(moveto); + //player.moveStep(); + } else { + player.getPacketDispatch().sendMessage("You fail to pass the spears."); + } + } + break; + case 16503: + case 16502: + case 16501: + if (option.equals("search") || option.equals("Search")) { + if (reqLevel > level){ + player.getPacketDispatch().sendMessage("You need to be at least level " + reqLevel + " thieving."); + break; + } + boolean success = success(player, Skills.THIEVING); + player.animate(animations[success ? 1 : 0]); + player.lock(2); + if (success) { + player.getPacketDispatch().sendMessage("You successfully search the urn..."); + player.getSkills().addExperience(Skills.THIEVING, 25 + (room * 20), true); + player.getInventory().add(ARTIFACTS[((int)Math.floor(droom / 3))][RandomFunction.random(3)]); + rollSceptre(player); + } else { + player.getPacketDispatch().sendMessage("You failed and got bit by a snake."); + } + } + break; + case 16473: + if(option.equals("search") || option.equals("Search")) { + if (reqLevel > level){ + player.getPacketDispatch().sendMessage("You need to be at least level " + reqLevel + " thieving."); + break; + } + player.getPacketDispatch().sendMessage("You search the chest..."); + player.animate(animations[1]); + player.lock(2); + player.getInventory().add(ARTIFACTS[RandomFunction.random(1,3)][RandomFunction.random(3)]); + rollSceptre(player); + player.getPacketDispatch().sendMessage("And you find an artifact!"); + player.getSkills().addExperience(Skills.THIEVING,40 + (room * 20)); + } + break; + case 16495: + if(option.equals("open") || option.equals("Open")) { + if (reqLevel > level){ + player.getPacketDispatch().sendMessage("You need to be at least level " + reqLevel + " thieving."); + break; + } + boolean willSpawnMummy = (RandomFunction.random(1,5) == 3); + player.animate(animations[1]); + player.getPacketDispatch().sendMessage("You open the sarcophagus and...."); + if(willSpawnMummy) { + player.getPacketDispatch().sendMessage("A mummy crawls out!"); + NPC mummy = NPC.create(1958, player.getLocation()); + mummy.setRespawn(false); + mummy.setAggressive(true); + mummy.init(); + } else { + player.getPacketDispatch().sendMessage("You find some loot inside."); + player.getInventory().add(ARTIFACTS[RandomFunction.random(0,3)][RandomFunction.random(3)]); + rollSceptre(player); + player.getSkills().addExperience(Skills.STRENGTH,50 + (room * 20)); + } + } + break; + case 16475: + if(option.equals("pick-lock") && room < 8) { + if (reqLevel > level){ + player.getPacketDispatch().sendMessage("You need to be at least level " + reqLevel + " thieving."); + break; + } + player.animate(animations[1]); + player.lock(2); + boolean doesOpen = success(player, Skills.THIEVING); + if (doesOpen) { + player.getPacketDispatch().sendMessage("The door opens!"); + player.getProperties().setTeleportLocation(room_entrance[room]); + } else { + player.getPacketDispatch().sendMessage("You fail to unlock the door."); + } + } else if(room == 8) { + ClimbActionHandler.climb(player, ClimbActionHandler.CLIMB_UP, Location.create(3288, 2801, 0)); + } + break; + } + return true; + } +} \ No newline at end of file diff --git a/Server/src/plugin/dialogue/SimonTempleton.java b/Server/src/plugin/dialogue/SimonTempleton.java new file mode 100644 index 000000000..833775c0b --- /dev/null +++ b/Server/src/plugin/dialogue/SimonTempleton.java @@ -0,0 +1,239 @@ +package plugin.dialogue; + +import org.crandor.game.content.dialogue.DialoguePlugin; +import org.crandor.game.node.entity.npc.NPC; +import org.crandor.game.node.entity.player.Player; +import org.crandor.plugin.InitializablePlugin; +import org.crandor.game.node.item.Item; + +/** + * Handles the dialog for Simon Templeton + * @author ceik + */ +@InitializablePlugin +public final class SimonTempleton extends DialoguePlugin{ + public final Item[][] ARTIFACTS = { {new Item(9032),new Item(9036), new Item(9026)}, {new Item(9042), new Item(9030), new Item(9038)}, {new Item(9040), new Item(9028), new Item(9034)} }; + public SimonTempleton(){ + /** + * Empty on purpose + */ + } + + public SimonTempleton(Player player) { + super(player); + } + + @Override + public DialoguePlugin newInstance(Player player) { + return new SimonTempleton(player); + } + + @Override + public boolean open(Object... args) { + npc = (NPC) args[0]; + //Handles what happens when using a pharoah scepter on him (required for accuracy) + if(args.length == 4){ + if(((int) args[3] == 9044 || (int) args[3] == 9046 || (int) args[3] == 9048 || (int) args[3] == 9050)) { + npc("You sellin' me this gold colored", "stick thing. Looks fake to me.", "I'll give you 100 gold for it."); + stage = 30; + return true; + } + } + player.getPacketDispatch().sendMessage("" + args.length); + npc("G'day, mate!. Got any new", "pyramid artefacts for me?"); + return true; + } + + @Override + public boolean handle(int interfaceId, int buttonId){ + boolean hasArtefacts = false; + switch(stage){ + case 0: + for(int i = 0; i < ARTIFACTS.length; i++){ + for(int j = 0; j < 3; j++){ + if(player.getInventory().containsItem(ARTIFACTS[i][j])){ + hasArtefacts = true; + break; + } + } + } + if(hasArtefacts){ + player("Why, yes I do!"); + stage = 1; + break; + } + player("No, I haven't."); + stage = 3; + break; + case 1: + npc("Excellent! I would like to buy them."); + stage = 2; + break; + case 2: + interpreter.sendOptions("Sell artefacts?","Yes, I need money!!","No, I'll hang onto them."); + stage = 10; + break; + case 3: + npc("Well, keep my offer in mind", "if you do find one."); + stage = 4; + break; + case 4: + player("I will. Goodbye, Simon."); + stage = 5; + break; + case 5: + npc("Bye, mate."); + stage = 999; + break; + case 10: + switch(buttonId){ + case 1: + interpreter.sendOptions("Which ones do you want to sell?", "Clay and Ivory", "Stone","Gold","Sell them all!"); + stage = 20; + break; + case 2: + npc("Aww, alright. Well, keep my", "offer in mind, will ya?"); + player("Sure thing, Simon."); + npc("Thanks, mate."); + stage = 999; + break; + } + break; + case 20: + switch(buttonId){ + case 1: + for(int j = 0; j < 28; j++){ + switch(player.getInventory().getId(j)){ + case 9032: + player.getInventory().remove(new Item(9032,j)); + player.getInventory().add(new Item(995, 75)); + break; + case 9036: + player.getInventory().remove(new Item(9036,j)); + player.getInventory().add(new Item(995, 100)); + break; + case 9026: + player.getInventory().remove(new Item(9026,j)); + player.getInventory().add(new Item(995, 50)); + break; + } + } + stage = 999; + break; + case 2: + for(int j = 0; j < 28; j++){ + switch(player.getInventory().getId(j)){ + case 9042: + player.getInventory().remove(new Item(9042,j)); + player.getInventory().add(new Item(995, 150)); + break; + case 9030: + player.getInventory().remove(new Item(9030,j)); + player.getInventory().add(new Item(995, 175)); + break; + case 9038: + player.getInventory().remove(new Item(9038,j)); + player.getInventory().add(new Item(995, 200)); + break; + } + } + stage = 999; + break; + case 3: + for(int j = 0; j < 28; j++){ + switch(player.getInventory().getId(j)){ + case 9040: + player.getInventory().remove(new Item(9040,j)); + player.getInventory().add(new Item(995, 750)); + break; + case 9028: + player.getInventory().remove(new Item(9028,j)); + player.getInventory().add(new Item(995, 1000)); + break; + case 9034: + player.getInventory().remove(new Item(9034,j)); + player.getInventory().add(new Item(995, 1250)); + break; + } + } + stage = 999; + break; + case 4: + for(int j = 0; j < 28; j++){ + switch(player.getInventory().getId(j)){ + case 9040: + player.getInventory().remove(new Item(9040,j)); + player.getInventory().add(new Item(995, 750)); + break; + case 9028: + player.getInventory().remove(new Item(9028,j)); + player.getInventory().add(new Item(995, 1000)); + break; + case 9034: + player.getInventory().remove(new Item(9034,j)); + player.getInventory().add(new Item(995, 1250)); + break; + case 9042: + player.getInventory().remove(new Item(9042,j)); + player.getInventory().add(new Item(995, 150)); + break; + case 9030: + player.getInventory().remove(new Item(9030,j)); + player.getInventory().add(new Item(995, 175)); + break; + case 9038: + player.getInventory().remove(new Item(9038,j)); + player.getInventory().add(new Item(995, 200)); + break; + case 9032: + player.getInventory().remove(new Item(9032,j)); + player.getInventory().add(new Item(995, 75)); + break; + case 9036: + player.getInventory().remove(new Item(9036,j)); + player.getInventory().add(new Item(995, 100)); + break; + case 9026: + player.getInventory().remove(new Item(9026,j)); + player.getInventory().add(new Item(995, 50)); + break; + } + } + stage = 999; + break; + } + case 30: + player("What! This is a genuine pharaoh's scepter - made out of"," solid gold and finely jewelled with precious gems"," by the finest craftsmen in the area."); + stage = 31; + break; + case 31: + npc("Strewth! I can tell a pile of croc when I hear it!","You've got the patter mate, but I'm no mug.", "That's a fake."); + stage = 32; + break; + case 32: + player("It has magical powers!"); + stage = 33; + break; + case 33: + npc("Oh, magical powers... yeah yeah yeah. Heard it all before"," mate. I'll give you 100 gold, or some 'magic beans'.", "Take it or leave it."); + stage = 34; + break; + case 34: + player("I don't think so! I'll find someone who'll give me", "what it's worth."); + stage = 35; + break; + case 35: + npc("Suit yerself..."); + stage = 999; + break; + case 999: + end(); + break; + } + return true; + } + @Override + public int[] getIds() { + return new int[] { 3123 }; + } +} diff --git a/Server/src/plugin/interaction/item/PharoahSceptre.java b/Server/src/plugin/interaction/item/PharoahSceptre.java new file mode 100644 index 000000000..befe4afe2 --- /dev/null +++ b/Server/src/plugin/interaction/item/PharoahSceptre.java @@ -0,0 +1,139 @@ +package plugin.interaction.item; + +import org.crandor.cache.def.impl.ItemDefinition; +import org.crandor.game.content.dialogue.DialoguePlugin; +import org.crandor.game.interaction.OptionHandler; +import org.crandor.game.node.Node; +import org.crandor.game.node.entity.player.Player; +import org.crandor.game.node.entity.player.info.portal.Perks; +import org.crandor.game.node.item.Item; +import org.crandor.game.system.task.Pulse; +import org.crandor.game.world.GameWorld; +import org.crandor.game.world.map.Location; +import org.crandor.game.world.update.flag.context.Animation; +import org.crandor.game.world.update.flag.context.Graphics; +import org.crandor.plugin.InitializablePlugin; +import org.crandor.plugin.Plugin; + + +/** + * Adds functionality to the pharoah's scepter + * @author ceik + */ +@InitializablePlugin +public final class PharoahSceptre extends OptionHandler { + private static final Graphics GRAPHICS = new Graphics(308, 100, 50); + private static final Animation ANIMATION = new Animation(714); + + @Override + public Plugin newInstance(Object arg) throws Throwable { + new SceptreDialog().init(); + ItemDefinition.forId(9044).getConfigurations().put("option:teleport",this); + ItemDefinition.forId(9046).getConfigurations().put("option:teleport",this); + ItemDefinition.forId(9048).getConfigurations().put("option:teleport",this); + ItemDefinition.forId(9050).getConfigurations().put("option:teleport",this); + return this; + } + @Override + public boolean handle(Player player, Node node, String string){ + Item item = node.asItem(); + if(string.equals("teleport")){ + switch(item.getId()) { + case 9044: + case 9046: + case 9048: + player.getDialogueInterpreter().open(325128389); + return true; + case 9050: + player.getPacketDispatch().sendMessage("You have used up all the charges on this sceptre."); + return true; + } + } + return true; + } + + public final class SceptreDialog extends DialoguePlugin { + public SceptreDialog() { + /** + * empty + */ + } + public SceptreDialog(Player player){super(player);} + + @Override + public DialoguePlugin newInstance(Player player){ return new SceptreDialog(player);} + + @Override + public boolean open(Object... args){ + //Item item = (Item) args[0]; + player.getPacketDispatch().sendMessage("" + args[0]); + interpreter.sendOptions("Teleport to:","Jalsavrah","Jaleustrophos","Jaldraocht","Nowhere"); + return true; + } + public void teleport(Location location, Player player){ + player.lock(); + player.visualize(ANIMATION, GRAPHICS); + player.getImpactHandler().setDisabledTicks(4); + GameWorld.submit(new Pulse(4, player) { + @Override + public boolean pulse() { + player.unlock(); + player.getProperties().setTeleportLocation(location); + player.getAnimator().reset(); + return true; + } + }); + } + @Override + public boolean handle(int interfaceId, int buttonId){ + if (player.isTeleBlocked()) { + player.sendMessage("A magical force has stopped you from teleporting."); + return false; + } + switch(buttonId){ + case 1: + teleport(Location.create(3289,2786,0), player); + stage = 10; + break; + case 2: + teleport(Location.create(3342,2827,0),player); + stage = 10; + break; + case 3: + teleport(Location.create(3233,2902,0),player); + stage = 10; + break; + case 4: + stage = 20; + break; + } + switch(stage){ + case 10: + if(player.getInventory().containsItem(new Item(9044))){ + player.getInventory().remove(new Item(9044)); + player.getInventory().add(new Item(9046)); + player.getPacketDispatch().sendMessage("Your Pharoah's Sceptre has 2 charges remaining."); + end(); + } else if (player.getInventory().containsItem(new Item(9046))){ + player.getInventory().remove(new Item(9046)); + player.getInventory().add(new Item(9048)); + player.getPacketDispatch().sendMessage("Your Pharoah's Sceptre has 1 charge remaining."); + end(); + } else if (player.getInventory().containsItem(new Item(9048))){ + player.getInventory().remove(new Item(9048)); + player.getInventory().add(new Item(9050)); + player.sendMessage("Your Pharoah's Sceptre has used its last charge."); + end(); + } + stage = 20; + break; + case 20: + end(); + break; + } + return true; + } + public int[] getIds() { return new int[] {325128389};} + } + +} diff --git a/Server/src/plugin/interaction/npc/RechargeSceptre.java b/Server/src/plugin/interaction/npc/RechargeSceptre.java new file mode 100644 index 000000000..cbcadfc84 --- /dev/null +++ b/Server/src/plugin/interaction/npc/RechargeSceptre.java @@ -0,0 +1,220 @@ +package plugin.interaction.npc; + +import org.crandor.game.content.dialogue.DialoguePlugin; +import org.crandor.game.interaction.NodeUsageEvent; +import org.crandor.game.interaction.UseWithHandler; +import org.crandor.game.node.entity.npc.NPC; +import org.crandor.game.node.entity.player.Player; +import org.crandor.game.node.item.Item; +import org.crandor.plugin.InitializablePlugin; +import org.crandor.plugin.Plugin; + +/** + * Allows the sceptre to be recharged by using it on the Guardian Mummy + * @author ceik + */ +@InitializablePlugin +public class RechargeSceptre extends UseWithHandler { + Item usedSceptre = new Item(4950); + int clayRecharge[] = new int[24]; + int stoneRecharge[] = new int[12]; + int goldRecharge[] = new int[6]; + public RechargeSceptre() { + super(9046, 9048, 9050); + } + @Override + public Plugin newInstance(Object arg) throws Throwable { + new RechargeDialogue().init(); + addHandler(4476, NPC_TYPE, this); + return this; + } + @Override + public boolean handle(NodeUsageEvent event){ + final Player player = event.getPlayer(); + player.getDialogueInterpreter().open(999876,event.getUsedItem()); + return true; + } + public class RechargeDialogue extends DialoguePlugin { + public RechargeDialogue() { + /** + * empty + */ + } + public RechargeDialogue(Player player){super(player);} + + @Override + public DialoguePlugin newInstance(Player player){ return new RechargeDialogue(player);} + + @Override + public boolean open(Object... args){ + usedSceptre = (Item) args[0]; + player.getPacketDispatch().sendMessage("" + args[0]); + interpreter.sendDialogue("Mrrrh, how do you have this? You shouldn't.", "Nevertheless, I can recharge this for you."); + return true; + } + @Override + public boolean handle(int dialogId, int buttonId){ + switch(stage){ + case 0: + interpreter.sendOptions("Recharge sceptre?", "Yes, please.", "No, thanks."); + stage = 1; + break; + case 1: + switch(buttonId){ + case 1: + interpreter.sendOptions("Recharge with?","Clay/Ivory Artefacts(24)","Stone Artefacts(12)","Gold Artefacts(6)"); + stage = 20; + break; + case 2: + stage = 100; + break; + } + break; + case 20: + switch(buttonId){ + case 1: { + int totalCounter = 0; + for (int i = 0; i < 28; i++) { + if (totalCounter == 24) { + break; + } + int thisSlot = player.getInventory().getId(i); + if (thisSlot == 9026) { + clayRecharge[totalCounter] = i; + totalCounter += 1; + } + } + for (int i = 0; i < 28; i++) { + if (totalCounter == 24) { + break; + } + int thisSlot = player.getInventory().getId(i); + if (thisSlot == 9032) { + clayRecharge[totalCounter] = i; + totalCounter += 1; + } + } + for (int i = 0; i < 28; i++) { + if (totalCounter == 24) { + break; + } + int thisSlot = player.getInventory().getId(i); + if (thisSlot == 9036) { + clayRecharge[totalCounter] = i; + totalCounter += 1; + } + } + if (clayRecharge[23] == 0) { + player.getPacketDispatch().sendMessage("You do not have enough clay/ivory artifacts."); + end(); + break; + } + for (int i = 0; i < 24; i++) { + player.getInventory().remove(new Item(player.getInventory().getId(clayRecharge[i])), clayRecharge[i], true); + } + player.getInventory().remove(usedSceptre); + player.getInventory().add(new Item(9044)); + player.getPacketDispatch().sendMessage("Your Pharoah's Sceptre has been fully recharged!"); + clayRecharge[23] = 0; + end(); + break; + } + case 2: { + int totalCounter = 0; + for (int i = 0; i < 28; i++) { + if (totalCounter == 12) { + break; + } + int thisSlot = player.getInventory().getId(i); + if (thisSlot == 9042) { + stoneRecharge[totalCounter] = i; + totalCounter += 1; + } + } + for (int i = 0; i < 28; i++) { + if (totalCounter == 12) { + break; + } + int thisSlot = player.getInventory().getId(i); + if (thisSlot == 9030) { + stoneRecharge[totalCounter] = i; + totalCounter += 1; + } + } + for (int i = 0; i < 28; i++) { + if (totalCounter == 12) { + break; + } + int thisSlot = player.getInventory().getId(i); + if (thisSlot == 9038) { + stoneRecharge[totalCounter] = i; + totalCounter += 1; + } + } + if (stoneRecharge[11] == 0) { + player.getPacketDispatch().sendMessage("You do not have enough stone artifacts."); + end(); + break; + } + for (int i = 0; i < 12; i++) { + player.getInventory().remove(new Item(player.getInventory().getId(stoneRecharge[i])), stoneRecharge[i], true); + } + player.getInventory().remove(usedSceptre); + player.getInventory().add(new Item(9044)); + player.getPacketDispatch().sendMessage("Your Pharoah's Sceptre has been fully recharged!"); + stoneRecharge[11] = 0; + end(); + break; + } + case 3: { + int totalCounter = 0; + for(int i = 0; i < 28; i++){ + if(totalCounter == 6) {break;} + int thisSlot = player.getInventory().getId(i); + if(thisSlot == 9040){ + goldRecharge[totalCounter] = i; + totalCounter += 1; + } + } + for(int i = 0; i < 28; i++){ + if(totalCounter == 6) {break;} + int thisSlot = player.getInventory().getId(i); + if(thisSlot == 9028){ + goldRecharge[totalCounter] = i; + totalCounter += 1; + } + } + for(int i = 0; i < 28; i++){ + if(totalCounter == 6) {break;} + int thisSlot = player.getInventory().getId(i); + if(thisSlot == 9034){ + goldRecharge[totalCounter] = i; + totalCounter += 1; + } + } + if(goldRecharge[5] == 0){player.getPacketDispatch().sendMessage("You do not have enough gold artifacts."); end(); break;} + for(int i = 0; i < 6; i++){ + player.getInventory().remove( new Item (player.getInventory().getId(goldRecharge[i])), goldRecharge[i], true); + } + player.getInventory().remove(usedSceptre); + player.getInventory().add(new Item(9044)); + player.getPacketDispatch().sendMessage("Your Pharoah's Sceptre has been fully recharged!"); + goldRecharge[5] = 0; + end(); + break; + } + } + break; + case 100: + end(); + break; + } + return true; + } + @Override + public int[] getIds() { + return new int[] { 999876 }; + } + } +} + diff --git a/Server/src/plugin/interaction/npc/SimonScepterInteraction.java b/Server/src/plugin/interaction/npc/SimonScepterInteraction.java new file mode 100644 index 000000000..9c1bc3035 --- /dev/null +++ b/Server/src/plugin/interaction/npc/SimonScepterInteraction.java @@ -0,0 +1,34 @@ +package plugin.interaction.npc; + +import org.crandor.game.interaction.NodeUsageEvent; +import org.crandor.game.interaction.UseWithHandler; +import org.crandor.game.node.entity.npc.NPC; +import org.crandor.game.node.entity.player.Player; +import org.crandor.plugin.InitializablePlugin; +import org.crandor.plugin.Plugin; +import org.crandor.plugin.PluginManager; +import plugin.dialogue.SimonTempleton; + +/** + * Handles when a player uses a pharaoh scepter on Simon (necessary to be accurate) + * @author ceik + */ +@InitializablePlugin +public final class SimonScepterInteraction extends UseWithHandler { + + public SimonScepterInteraction() { + super(9044, 9046, 9048, 9050); + } + @Override + public Plugin newInstance(Object arg) throws Throwable { + addHandler(3123, NPC_TYPE, this); + //PluginManager.definePlugin(new SimonScepterInteraction()); + return this; + } + @Override + public boolean handle(NodeUsageEvent event){ + final Player player = event.getPlayer(); + player.getDialogueInterpreter().open(3123, ((NPC)event.getUsedWith()), true, false, event.getUsedItem().getId()); + return true; + } +}