From 80744b709a1bd8ead44cad79334ceb1b18249f78 Mon Sep 17 00:00:00 2001 From: Ceikry Date: Fri, 27 Mar 2020 15:35:17 -0500 Subject: [PATCH] closes #211 --- .../global/action/DoorActionHandler.java | 9 ++- .../global/consumable/Consumables.java | 2 +- .../src/plugin/cutscene/JulietDialogue.java | 4 ++ .../src/plugin/cutscene/RJCutscenePlugin.java | 1 + .../dialogue/SmithingApparenticeDialogue.java | 2 +- .../city/lumbridge/CowFieldSign.java | 54 ++++++++++++++++ .../city/lumbridge/CowPenZone.java | 52 +++++++++++++++ .../interaction/city/lumbridge/FredChest.java | 38 +++++++++++ .../city/lumbridge/GnomeCopterSign.java | 52 +++++++++++++++ .../interaction/object/FlourMakingPlugin.java | 16 +++-- .../object/ReadSignPostPlugin.java | 1 - .../npc/city/lumbridge/MilleMiller.java | 64 +++++++++++++++++++ .../npc/quest/romeo__juliet/JulietNPC.java | 2 +- Server/src/plugin/quest/RomeoJuliet.java | 1 + 14 files changed, 288 insertions(+), 10 deletions(-) create mode 100644 Server/src/plugin/interaction/city/lumbridge/CowFieldSign.java create mode 100644 Server/src/plugin/interaction/city/lumbridge/CowPenZone.java create mode 100644 Server/src/plugin/interaction/city/lumbridge/FredChest.java create mode 100644 Server/src/plugin/interaction/city/lumbridge/GnomeCopterSign.java create mode 100644 Server/src/plugin/npc/city/lumbridge/MilleMiller.java diff --git a/Server/src/org/crandor/game/content/global/action/DoorActionHandler.java b/Server/src/org/crandor/game/content/global/action/DoorActionHandler.java index 983a0b2d9..677c8825d 100644 --- a/Server/src/org/crandor/game/content/global/action/DoorActionHandler.java +++ b/Server/src/org/crandor/game/content/global/action/DoorActionHandler.java @@ -296,8 +296,13 @@ public final class DoorActionHandler { secondDir = (secondDir + 2) % 4; } Location secondLoc = firstLoc.transform((int) p.getX(), (int) p.getY(), 0); - ObjectBuilder.replace(object, object.transform(replaceId, firstDir, firstLoc), restoreTicks, clip); - ObjectBuilder.replace(second, second.transform(secondReplaceId, secondDir, secondLoc), restoreTicks, clip); + if(object.getId() == 36917 || object.getId() == 36919){ + ObjectBuilder.replace(object, object.transform(36919, firstDir, firstLoc), restoreTicks, true); + ObjectBuilder.replace(second, second.transform(36917, secondDir, secondLoc), restoreTicks, true); + } else { + ObjectBuilder.replace(object, object.transform(replaceId, firstDir, firstLoc), restoreTicks, clip); + ObjectBuilder.replace(second, second.transform(secondReplaceId, secondDir, secondLoc), restoreTicks, clip); + } } /** diff --git a/Server/src/org/crandor/game/content/global/consumable/Consumables.java b/Server/src/org/crandor/game/content/global/consumable/Consumables.java index 6bd9f5c3a..537b8b7f8 100644 --- a/Server/src/org/crandor/game/content/global/consumable/Consumables.java +++ b/Server/src/org/crandor/game/content/global/consumable/Consumables.java @@ -12,7 +12,7 @@ import java.util.List; */ public enum Consumables { /** meats */ - CHICKEN(new Food(2140, 2138, 2144, new ConsumableProperties(3), new CookingProperties(1, 30, 30))), UGTHANKI(new Food(1861, 1859, 2146, new ConsumableProperties(2), new CookingProperties(1, 40, 40))), RABBIT(new Food(3228, 3226, 7222, new ConsumableProperties(5), new CookingProperties(1, 30, 30))), YAK(new Food(2142, 10816, 2146, new ConsumableProperties(2), new CookingProperties(1, 30, 30))), + CHICKEN(new Food(2140, 2138, 2144, new ConsumableProperties(3), new CookingProperties(1, 30, 30))), UGTHANKI(new Food(1861, 1859, 2146, new ConsumableProperties(2), new CookingProperties(1, 40, 40))), RABBIT(new Food(3228, 3226, 7222, new ConsumableProperties(5), new CookingProperties(1, 30, 30))), DARK_CRAB(new Food(14939, 14937, 14941, new ConsumableProperties(22), new CookingProperties(90, 215, 100))), CRAB(new Food(7521, 7518, 7520, new ConsumableProperties(10), new CookingProperties(21, 100, 100))), /** fish */ diff --git a/Server/src/plugin/cutscene/JulietDialogue.java b/Server/src/plugin/cutscene/JulietDialogue.java index ac698cfbf..7122de987 100644 --- a/Server/src/plugin/cutscene/JulietDialogue.java +++ b/Server/src/plugin/cutscene/JulietDialogue.java @@ -113,6 +113,10 @@ public final class JulietDialogue extends DialoguePlugin { interpreter.sendDialogues(npc, null, "Quickly! Go and tell Romeo the plan!"); stage = 1002; break; + default: + npc(FacialExpression.ANGRY,"Oh, Romeo, that no good scoundrel!"); + stage = 22; + break; } return true; } diff --git a/Server/src/plugin/cutscene/RJCutscenePlugin.java b/Server/src/plugin/cutscene/RJCutscenePlugin.java index a09fc592f..9f756b9b2 100644 --- a/Server/src/plugin/cutscene/RJCutscenePlugin.java +++ b/Server/src/plugin/cutscene/RJCutscenePlugin.java @@ -757,6 +757,7 @@ public final class RJCutscenePlugin extends CutscenePlugin { case 751: end(); cutscene.stop(true); + quest.finish(player); break; } return true; diff --git a/Server/src/plugin/dialogue/SmithingApparenticeDialogue.java b/Server/src/plugin/dialogue/SmithingApparenticeDialogue.java index 34e54a628..2313de8cc 100644 --- a/Server/src/plugin/dialogue/SmithingApparenticeDialogue.java +++ b/Server/src/plugin/dialogue/SmithingApparenticeDialogue.java @@ -51,6 +51,6 @@ public class SmithingApparenticeDialogue extends DialoguePlugin { @Override public int[] getIds() { - return new int[] { 4904 }; + return new int[] { 7959,4904 }; } } diff --git a/Server/src/plugin/interaction/city/lumbridge/CowFieldSign.java b/Server/src/plugin/interaction/city/lumbridge/CowFieldSign.java new file mode 100644 index 000000000..5cea6fe59 --- /dev/null +++ b/Server/src/plugin/interaction/city/lumbridge/CowFieldSign.java @@ -0,0 +1,54 @@ +package plugin.interaction.city.lumbridge; + +import org.crandor.cache.def.impl.ObjectDefinition; +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.plugin.InitializablePlugin; +import org.crandor.plugin.Plugin; + +/** + * Cow field sign manager + * @author ceik + */ + +@InitializablePlugin +public class CowFieldSign extends OptionHandler { + private int DIALOGUE_KEY = 87905733; + @Override + public Plugin newInstance(Object arg) throws Throwable{ + new SignDialogue().init(); + ObjectDefinition.forId(31297).getConfigurations().put("option:read",this); + return this; + } + @Override + public boolean handle(Player player, Node node, String option){ + if(node.getId() == 31297){ + player.getDialogueInterpreter().open(DIALOGUE_KEY); + } + return true; + } + public final class SignDialogue extends DialoguePlugin{ + public SignDialogue(){ + /** + * Empty + */ + } + public SignDialogue(Player player){super(player);} + @Override + public DialoguePlugin newInstance(Player player){return new SignDialogue(player);} + @Override + public boolean open(Object... args){ + interpreter.sendPlainMessage(false,"Wandering adventurers have killed " + CowPenZone.CowDeaths + " cows in this field.", "Local farmers call it an epidemic."); + return true; + } + + @Override + public boolean handle(int componentId, int buttonId){ + end(); + return true; + } + public int[] getIds() {return new int[] {DIALOGUE_KEY};} + } +} diff --git a/Server/src/plugin/interaction/city/lumbridge/CowPenZone.java b/Server/src/plugin/interaction/city/lumbridge/CowPenZone.java new file mode 100644 index 000000000..f6cfd1b04 --- /dev/null +++ b/Server/src/plugin/interaction/city/lumbridge/CowPenZone.java @@ -0,0 +1,52 @@ +package plugin.interaction.city.lumbridge; + +import org.crandor.game.node.entity.Entity; +import org.crandor.game.node.entity.npc.NPC; +import org.crandor.game.node.entity.player.Player; +import org.crandor.game.node.item.GroundItemManager; +import org.crandor.game.node.item.Item; +import org.crandor.game.world.map.zone.MapZone; +import org.crandor.game.world.map.zone.ZoneBorders; +import org.crandor.game.world.map.zone.ZoneBuilder; +import org.crandor.game.world.map.zone.ZoneRestriction; +import org.crandor.plugin.InitializablePlugin; +import org.crandor.plugin.Plugin; +import org.crandor.tools.RandomFunction; + +/** + * Zone for the lumbridge cow pen + * @author ceik + */ + + +@InitializablePlugin +public class CowPenZone extends MapZone implements Plugin { + public static int CowDeaths; + + @Override + public Object fireEvent(String identifier, Object... args) { + return null; + } + public CowPenZone() { + super("lumbridge cows", true); + } + @Override + public void configure() { + super.register(new ZoneBorders(3242, 3255, 3265, 3297)); + } + + @Override + public Plugin newInstance(Object arg) throws Throwable { + ZoneBuilder.configure(this); + return this; + } + + @Override + public boolean death(Entity e, Entity killer) { + if (killer instanceof Player && e instanceof NPC) { + CowDeaths++; + } + return false; + } + +} diff --git a/Server/src/plugin/interaction/city/lumbridge/FredChest.java b/Server/src/plugin/interaction/city/lumbridge/FredChest.java new file mode 100644 index 000000000..c2e2dc541 --- /dev/null +++ b/Server/src/plugin/interaction/city/lumbridge/FredChest.java @@ -0,0 +1,38 @@ +package plugin.interaction.city.lumbridge; + +import org.crandor.cache.def.impl.ObjectDefinition; +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.object.GameObject; +import org.crandor.game.node.object.ObjectBuilder; +import org.crandor.plugin.InitializablePlugin; +import org.crandor.plugin.Plugin; + +/** + * Handles the chest in farmer fred's house + * + * @author ceik + */ + +@InitializablePlugin +public class FredChest extends OptionHandler { + @Override + public Plugin newInstance(Object arg) throws Throwable{ + ObjectDefinition.forId(37009).getConfigurations().put("option:open",this); + ObjectDefinition.forId(37010).getConfigurations().put("option:shut",this); + ObjectDefinition.forId(37010).getConfigurations().put("option:search",this); + return this; + } + @Override + public boolean handle(Player player, Node node, String option){ + if(option.equals("open")){ + ObjectBuilder.replace(node.asObject(),new GameObject(37010,node.asObject().getLocation(),node.asObject().getRotation())); + } else if (option.equals("shut")){ + ObjectBuilder.replace(node.asObject(),new GameObject(37009,node.asObject().getLocation(),node.asObject().getRotation())); + } else if (option.equals("search")){ + player.getPacketDispatch().sendMessage("You search the chest but find nothing."); + } + return true; + } +} diff --git a/Server/src/plugin/interaction/city/lumbridge/GnomeCopterSign.java b/Server/src/plugin/interaction/city/lumbridge/GnomeCopterSign.java new file mode 100644 index 000000000..2a5f052b5 --- /dev/null +++ b/Server/src/plugin/interaction/city/lumbridge/GnomeCopterSign.java @@ -0,0 +1,52 @@ +package plugin.interaction.city.lumbridge; + +import org.crandor.cache.def.impl.ObjectDefinition; +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.plugin.InitializablePlugin; +import org.crandor.plugin.Plugin; + +@InitializablePlugin +public class GnomeCopterSign extends OptionHandler { + public int DIALOGUE_ID = 989769182; + @Override + public Plugin newInstance(Object arg) throws Throwable { + new SignDialogue().init(); + ObjectDefinition.forId(30037).getConfigurations().put("option:read",this); + return this; + } + + @Override + public boolean handle(Player player, Node node, String string) { + if (node.getId() == 30037) { + player.getDialogueInterpreter().open(DIALOGUE_ID); + } + return true; + } + public final class SignDialogue extends DialoguePlugin{ + public SignDialogue(){ + /** + * Empty + */ + } + public SignDialogue(Player player){super(player);} + @Override + public DialoguePlugin newInstance(Player player){ return new SignDialogue(player);} + + @Override + public boolean open(Object... args){ + interpreter.sendPlainMessage(false,"Come check out our gnome copters up north!","Disclaimer: EXTREMELY WIP"); + stage = 0; + return true; + } + @Override + public boolean handle(int componentId, int buttonId){ + end(); + return true; + } + @Override + public int[] getIds(){return new int[] {DIALOGUE_ID};} + } +} diff --git a/Server/src/plugin/interaction/object/FlourMakingPlugin.java b/Server/src/plugin/interaction/object/FlourMakingPlugin.java index 8ff3dfdea..4bfc1e4fa 100644 --- a/Server/src/plugin/interaction/object/FlourMakingPlugin.java +++ b/Server/src/plugin/interaction/object/FlourMakingPlugin.java @@ -72,6 +72,7 @@ public final class FlourMakingPlugin extends OptionHandler { extension.emptyChute(); player.getPacketDispatch().sendMessage("You operate the hopper. The grain slides down the chute."); player.getConfigManager().set(CONFIG, 1); + player.setAttribute("/save:milling:grain",player.getAttribute("milling:grain",0) + 1); } break; case "empty": @@ -98,6 +99,7 @@ public final class FlourMakingPlugin extends OptionHandler { player.getInventory().add(FLOUR); extension.decrement(1); player.getPacketDispatch().sendMessage(!extension.isEmpty() ? "You fill a pot with flour from the bin." : "You fill a pot with the last of the flour in the bin."); + if (extension.getCharges() < 1) { player.getConfigManager().set(CONFIG, 0); } @@ -150,10 +152,13 @@ public final class FlourMakingPlugin extends OptionHandler { * @param increment the increment. */ public final void increment(final int increment, boolean semi) { - if (semi) { - semiCharges += increment; - } else { - charges += increment; + if(player.getAttribute("milling:grain",0) < 30) { + if (semi) { + semiCharges += increment; + } else { + charges += increment; + } + player.setAttribute("/save:milling:grain",player.getAttribute("milling:grain",0) + 1); } } @@ -163,6 +168,9 @@ public final class FlourMakingPlugin extends OptionHandler { */ public final void decrement(final int increment) { charges -= increment; + if(!(player.getAttribute("milling:grain",0) <= 0)){ + player.setAttribute("/save:milling:grain",player.getAttribute("milling:grain",0) + 1); + } } /** diff --git a/Server/src/plugin/interaction/object/ReadSignPostPlugin.java b/Server/src/plugin/interaction/object/ReadSignPostPlugin.java index 4cbed2386..f6ffc5ed1 100644 --- a/Server/src/plugin/interaction/object/ReadSignPostPlugin.java +++ b/Server/src/plugin/interaction/object/ReadSignPostPlugin.java @@ -105,7 +105,6 @@ public class ReadSignPostPlugin extends OptionHandler { ObjectDefinition.forId(30039).getConfigurations().put("option:read", this); ObjectDefinition.forId(30040).getConfigurations().put("option:read", this); ObjectDefinition.forId(31296).getConfigurations().put("option:read", this); - ObjectDefinition.forId(31297).getConfigurations().put("option:read", this); ObjectDefinition.forId(31298).getConfigurations().put("option:read", this); ObjectDefinition.forId(31299).getConfigurations().put("option:read", this); ObjectDefinition.forId(31300).getConfigurations().put("option:read", this); diff --git a/Server/src/plugin/npc/city/lumbridge/MilleMiller.java b/Server/src/plugin/npc/city/lumbridge/MilleMiller.java new file mode 100644 index 000000000..3568c34a3 --- /dev/null +++ b/Server/src/plugin/npc/city/lumbridge/MilleMiller.java @@ -0,0 +1,64 @@ +package plugin.npc.city.lumbridge; + +import org.crandor.game.content.dialogue.DialoguePlugin; +import org.crandor.game.node.entity.player.Player; +import org.crandor.game.node.item.Item; +import org.crandor.plugin.InitializablePlugin; + +/** + * @author ceik + */ +@InitializablePlugin +public class MilleMiller extends DialoguePlugin { + public MilleMiller(){ + /** + * Empty + */ + } + public MilleMiller(Player player){ super(player);} + @Override + public DialoguePlugin newInstance(Player player){return new MilleMiller(player);} + + @Override + public boolean open(Object... args){ + player("Hello, there. Can you teach me how","to make wheat?"); + return true; + } + + @Override + public boolean handle(int componentId, int buttonId){ + switch(stage){ + case 0: + npc("Certainly! You first need to gather wheat from","the field nearby, then you go on up","to the top, put it in the hopper, and","flip those levers!"); + stage++; + break; + case 1: + npc("Afterwords, you need to make sure you have","a pot, and come down and grab your wheat!"); + stage++; + break; + case 2: + if(!player.getInventory().containsItem(new Item(1931))){ + player("Could you give me one of those?"); + stage = 4; + } else { + player("Thanks!"); + stage++; + } + break; + case 3: + end(); + break; + case 4: + npc("Sure thing!"); + stage++; + break; + case 5: + end(); + player.getInventory().add(new Item(1931)); + break; + } + return true; + } + @Override + public int[] getIds() {return new int[] {3806};} +} diff --git a/Server/src/plugin/npc/quest/romeo__juliet/JulietNPC.java b/Server/src/plugin/npc/quest/romeo__juliet/JulietNPC.java index 16e482929..71390787b 100644 --- a/Server/src/plugin/npc/quest/romeo__juliet/JulietNPC.java +++ b/Server/src/plugin/npc/quest/romeo__juliet/JulietNPC.java @@ -41,7 +41,7 @@ public final class JulietNPC extends AbstractNPC { @Override public boolean isHidden(final Player player) { - return player.getQuestRepository().getQuest("Romeo & Juliet").getStage(player) > 60; + return player.getQuestRepository().getQuest("Romeo & Juliet").getStage(player) > 60 && player.getQuestRepository().getQuest("Romeo & Juliet").getStage(player) < 100; } @Override diff --git a/Server/src/plugin/quest/RomeoJuliet.java b/Server/src/plugin/quest/RomeoJuliet.java index 1dfec368b..f0a3e48eb 100644 --- a/Server/src/plugin/quest/RomeoJuliet.java +++ b/Server/src/plugin/quest/RomeoJuliet.java @@ -1,5 +1,6 @@ package plugin.quest; +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.entity.player.link.quest.Quest;