diff --git a/Server/src/main/java/core/game/content/dialogue/MithGrappleDialogue.java b/Server/src/main/java/core/game/content/dialogue/MithGrappleDialogue.java deleted file mode 100644 index bbf4dd5bf..000000000 --- a/Server/src/main/java/core/game/content/dialogue/MithGrappleDialogue.java +++ /dev/null @@ -1,102 +0,0 @@ -package core.game.content.dialogue; - -import core.plugin.Initializable; -import core.game.node.entity.skill.fletching.items.grapple.GrapplePulse; -import core.game.node.entity.player.Player; -import core.game.node.entity.player.link.RunScript; -import core.game.node.item.Item; -import core.net.packet.PacketRepository; -import core.net.packet.context.ChildPositionContext; -import core.net.packet.out.RepositionChild; - -/** - * Represents the dialogue used to create a mith grapple. - * @author 'Vexia - * @version 1.0 - */ -@Initializable -public final class MithGrappleDialogue extends DialoguePlugin { - - /** - * Represents the mith grapple tip. - */ - private static final Item MITH_GRAPPLE = new Item(9418); - - /** - * Represents the first item used. - */ - private Item first; - - /** - * Represents the second item used. - */ - private Item second; - - /** - * Constructs a new {@code MithGrappleDialogue} {@code Object}. - */ - public MithGrappleDialogue() { - /** - * empty. - */ - } - - /** - * Constructs a new {@code MithGrappleDialogue} {@code Object}. - * @param player the player. - */ - public MithGrappleDialogue(Player player) { - super(player); - } - - @Override - public DialoguePlugin newInstance(Player player) { - return new MithGrappleDialogue(player); - } - - @Override - public boolean open(Object... args) { - first = (Item) args[0]; - second = (Item) args[1]; - player.getInterfaceManager().openChatbox(309); - player.getPacketDispatch().sendString("



Mith Grapple", 309, 6); - PacketRepository.send(RepositionChild.class, new ChildPositionContext(player, 309, 2, 215, 26)); - player.getPacketDispatch().sendItemZoomOnInterface(MITH_GRAPPLE.getId(), 175, 309, 2); - return true; - } - - @Override - public boolean handle(int interfaceId, int buttonId) { - player.getInterfaceManager().closeChatbox(); - int amount = 0; - switch (buttonId) { - case 6: - amount = 1; - break; - case 5: - amount = 5; - break; - case 4: - player.setAttribute("runscript", new RunScript() { - @Override - public boolean handle() { - int ammount = (int) value; - player.getPulseManager().run(new GrapplePulse(player, first, ammount)); - return false; - } - }); - player.getDialogueInterpreter().sendInput(false, "Enter the amount"); - return true; - case 3: - amount = player.getInventory().getAmount(second); - break; - } - player.getPulseManager().run(new GrapplePulse(player, first, amount)); - return true; - } - - @Override - public int[] getIds() { - return new int[] { 903213 }; - } -} diff --git a/Server/src/main/java/core/game/node/entity/skill/fishing/FishingOptionPlugin.java b/Server/src/main/java/core/game/node/entity/skill/fishing/FishingOptionPlugin.java deleted file mode 100644 index d2d66762a..000000000 --- a/Server/src/main/java/core/game/node/entity/skill/fishing/FishingOptionPlugin.java +++ /dev/null @@ -1,50 +0,0 @@ -package core.game.node.entity.skill.fishing; - -import core.cache.def.impl.NPCDefinition; -import core.game.interaction.OptionHandler; -import core.game.node.Node; -import core.game.node.entity.npc.NPC; -import core.game.node.entity.player.Player; -import core.game.world.map.Location; -import core.plugin.Initializable; -import core.plugin.Plugin; - -/** - * Represents the plugin used to start fishing. - * @author Ceikry - * @version 1.2 - */ -@Initializable -public final class FishingOptionPlugin extends OptionHandler { - - @Override - public Plugin newInstance(Object arg) throws Throwable { - NPCDefinition.setOptionHandler("net", this); - NPCDefinition.setOptionHandler("bait", this); - NPCDefinition.setOptionHandler("lure", this); - NPCDefinition.setOptionHandler("cage", this); - NPCDefinition.setOptionHandler("harpoon", this); - return this; - } - - @Override - public boolean handle(Player player, Node node, String option) { - NPC npc = (NPC) node; - FishingSpot spot = FishingSpot.forId(npc.getId()); - if (spot == null) { - return false; - } - FishingOption opt = spot.getOptionByName(option); - - if (opt == null) { - return false; - } - player.getPulseManager().run(new FishingPulse(player, npc, opt)); - return true; - } - - @Override - public Location getDestination(Node node, Node n) { - return null; - } -} diff --git a/Server/src/main/java/core/game/node/entity/skill/fletching/ArrowCreatePlugin.java b/Server/src/main/java/core/game/node/entity/skill/fletching/ArrowCreatePlugin.java deleted file mode 100644 index 2ff49ff19..000000000 --- a/Server/src/main/java/core/game/node/entity/skill/fletching/ArrowCreatePlugin.java +++ /dev/null @@ -1,114 +0,0 @@ -package core.game.node.entity.skill.fletching; - -import core.plugin.Initializable; -import rs09.game.content.dialogue.SkillDialogueHandler; -import rs09.game.content.dialogue.SkillDialogueHandler.SkillDialogue; -import core.game.node.entity.skill.fletching.items.arrow.ArrowHeadPulse; -import core.game.node.entity.skill.fletching.items.arrow.HeadlessArrowPulse; -import core.game.interaction.NodeUsageEvent; -import core.game.interaction.UseWithHandler; -import core.game.node.entity.player.Player; -import core.game.node.item.Item; -import core.net.packet.PacketRepository; -import core.net.packet.context.ChildPositionContext; -import core.net.packet.out.RepositionChild; -import core.plugin.Plugin; - -/** - * Represents the plugin used to create arrows. - * @author Angle - */ -@Initializable -public class ArrowCreatePlugin extends UseWithHandler { - - /** - * Represents the headless arrow item. - */ - private static final Item HEADLESS_ARROW = new Item(53); - - /** - * Constructs a new {@code ArrowCreatePlugin} {@code Object}. - */ - public ArrowCreatePlugin() { - super(314, 53, 52); - } - - @Override - public Plugin newInstance(Object arg) throws Throwable { - // Feathers plus colored feathers - addHandler(314, ITEM_TYPE, this); - addHandler(10087, ITEM_TYPE, this); - addHandler(10088, ITEM_TYPE, this); - addHandler(10089, ITEM_TYPE, this); - addHandler(10090, ITEM_TYPE, this); - addHandler(10091, ITEM_TYPE, this); - - // Headless Arrows - addHandler(53, ITEM_TYPE, this); - // Arrow heads - for (Fletching.ArrowHeads head : Fletching.ArrowHeads.values()) { - addHandler(head.unfinished, ITEM_TYPE, this); - } - return this; - } - - @Override - public boolean handle(final NodeUsageEvent event) { - event.getPlayer().debug("Trying to handle: " + event.getUsedItem() + " with " + event.getUsedWith()); - final Player player = event.getPlayer(); - - // If the player uses a feather on headless arrows, do headless arrow crafting - final int itemId = event.getUsedItem().getId(); - final int otherId = event.getUsedWith().getId(); - - final boolean hasFeather = (itemId == 314 || (itemId >= 10087 && itemId <= 10091)) || (otherId == 314 || (otherId >= 10087 && otherId <= 10091)); - final boolean hasShaft = (itemId == 52 || otherId == 52); - - // If the item used was feathers and the target was arrow shafts - if (hasFeather && hasShaft) { - // Creating headless arrows - final int featherId = itemId == 52 ? otherId : itemId; - - SkillDialogueHandler handler = new SkillDialogueHandler(player, SkillDialogue.ONE_OPTION, HEADLESS_ARROW) { - @Override - public void create(final int amount, int index) { - player.getPulseManager().run(new HeadlessArrowPulse(player, event.getUsedItem(), new Item(featherId), amount)); - } - @Override - public int getAll(int index) { - return player.getInventory().getAmount(HEADLESS_ARROW); - } - }; - handler.open(); - PacketRepository.send(RepositionChild.class, new ChildPositionContext(player, 309, 2, 210, 10)); - return true; - } - - // Otherwise, fletch normally - boolean firstIsHead = Fletching.isArrowHead(itemId); - if (!firstIsHead && !Fletching.isArrowHead(otherId)) { - return false; - } else if (hasFeather || hasShaft) { - // Disallow crafting feathers with arrowheads or shafts with arrowheads. - // It will fail anyway but this makes sure - // that the gui doesn't pop up on the client. - return true; - } - final Fletching.ArrowHeads head = Fletching.arrowHeadMap.get(firstIsHead ? itemId : otherId); - SkillDialogueHandler handler = new SkillDialogueHandler(player, SkillDialogue.ONE_OPTION, head.getFinished()) { - @Override - public void create(final int amount, int index) { - player.getPulseManager().run(new ArrowHeadPulse(player, event.getUsedItem(), head, amount)); - } - @Override - public int getAll(int index) { - return player.getInventory().getAmount(head.getUnfinished()); - } - }; - handler.open(); - PacketRepository.send(RepositionChild.class, new ChildPositionContext(player, 309, 2, 210, 10)); - - return true; - } - -} diff --git a/Server/src/main/java/core/game/node/entity/skill/fletching/MakeCrossbowPlugin.java b/Server/src/main/java/core/game/node/entity/skill/fletching/MakeCrossbowPlugin.java deleted file mode 100644 index b42858950..000000000 --- a/Server/src/main/java/core/game/node/entity/skill/fletching/MakeCrossbowPlugin.java +++ /dev/null @@ -1,62 +0,0 @@ -package core.game.node.entity.skill.fletching; - -import rs09.game.content.dialogue.SkillDialogueHandler; -import core.game.node.entity.skill.fletching.items.crossbow.LimbPulse; -import core.game.interaction.NodeUsageEvent; -import core.game.interaction.UseWithHandler; -import core.game.node.entity.player.Player; -import core.game.node.item.Item; -import core.net.packet.PacketRepository; -import core.net.packet.context.ChildPositionContext; -import core.net.packet.out.RepositionChild; -import core.plugin.Initializable; -import core.plugin.Plugin; - -/** - * Represents the plugin used to make a crossbow. - * @author Ceikry - */ -@Initializable -public class MakeCrossbowPlugin extends UseWithHandler { - Fletching.Limb limb; - Item whichItem; - - /** - * Constructs a new {@code StringcrossbowPlugin} {@code Object}. - */ - public MakeCrossbowPlugin() { - super(9420, 9423, 9422, 9425, 9427, 9429, 9431); - } - - @Override - public Plugin newInstance(Object arg) throws Throwable { - for (Fletching.Limb l : Fletching.Limb.values()) { - addHandler(new Item(l.stock).getId(), ITEM_TYPE, this); - } - return this; - } - - @Override - public boolean handle(NodeUsageEvent event) { - final Player player = event.getPlayer(); - limb = Fletching.limbMap.get(event.getBaseItem().getId()); - whichItem = (Item)event.getUsedWith(); - if(limb == null){ - limb = Fletching.limbMap.get(event.getUsed().getId()); - whichItem = (Item)event.getUsed(); - } - SkillDialogueHandler handler = new SkillDialogueHandler(player, SkillDialogueHandler.SkillDialogue.ONE_OPTION, new Item(limb.product)) { - @Override - public void create(final int amount, int index) { - player.getPulseManager().run(new LimbPulse(player, whichItem, limb, amount)); - } - @Override - public int getAll(int index) { - return player.getInventory().getAmount(whichItem); - } - }; - handler.open(); - PacketRepository.send(RepositionChild.class, new ChildPositionContext(player, 309, 2, 210, 10)); - return true; - } -} diff --git a/Server/src/main/java/core/game/node/entity/skill/fletching/MithGrapplePlugin.java b/Server/src/main/java/core/game/node/entity/skill/fletching/MithGrapplePlugin.java deleted file mode 100644 index 8c69ee0af..000000000 --- a/Server/src/main/java/core/game/node/entity/skill/fletching/MithGrapplePlugin.java +++ /dev/null @@ -1,69 +0,0 @@ -package core.game.node.entity.skill.fletching; - -import core.game.node.entity.skill.Skills; -import core.game.interaction.NodeUsageEvent; -import core.game.interaction.UseWithHandler; -import core.game.node.entity.player.Player; -import core.game.node.item.Item; -import core.plugin.Initializable; -import core.plugin.Plugin; - -/** - * Represents the plugin used to make a mithril grapple. - * @author 'Vexia - * @version 1.0 - */ -@Initializable -public final class MithGrapplePlugin extends UseWithHandler { - - /** - * Represents the rope grapple. - */ - private static final Item ROPE_GRAPPLE = new Item(9419); - - /** - * Represents the mith grapple. - */ - private static final Item MITH_GRAPPLE = new Item(9418); - - /** - * Represents the rope item. - */ - private static final Item ROPE = new Item(954); - - /** - * Constructs a new {@code MithGrapplePlugin} {@code Object}. - */ - public MithGrapplePlugin() { - super(9416, 954); - } - - @Override - public Plugin newInstance(Object arg) throws Throwable { - addHandler(9142, ITEM_TYPE, this); - addHandler(9418, ITEM_TYPE, this); - return this; - } - - @Override - public boolean handle(NodeUsageEvent event) { - final Player player = event.getPlayer(); - final Item first = event.getUsedItem(); - final Item second = event.getBaseItem(); - if (first.getId() == 9418 && second.getId() != 954) { - return false; - } else if (first.getId() == 9418 && second.getId() == 954) { - if (player.getInventory().remove(ROPE) && player.getInventory().remove(MITH_GRAPPLE)) { - player.getInventory().add(ROPE_GRAPPLE); - } - return true; - } - if (player.getSkills().getLevel(Skills.FLETCHING) < 59) { - player.getDialogueInterpreter().sendDialogue("You need a fletching level of 59 in order to do that."); - return true; - } - player.getDialogueInterpreter().open(903213, first, second); - return true; - } - -} diff --git a/Server/src/main/java/core/game/node/entity/skill/fletching/StringbowPlugin.java b/Server/src/main/java/core/game/node/entity/skill/fletching/StringbowPlugin.java deleted file mode 100644 index 157fef1f4..000000000 --- a/Server/src/main/java/core/game/node/entity/skill/fletching/StringbowPlugin.java +++ /dev/null @@ -1,65 +0,0 @@ -package core.game.node.entity.skill.fletching; - -import core.plugin.Initializable; -import rs09.game.content.dialogue.SkillDialogueHandler; -import core.game.node.entity.skill.fletching.items.bow.StringPulse; -import core.game.interaction.NodeUsageEvent; -import core.game.interaction.UseWithHandler; -import core.game.node.entity.player.Player; -import core.game.node.item.Item; -import core.net.packet.PacketRepository; -import core.net.packet.context.ChildPositionContext; -import core.net.packet.out.RepositionChild; -import core.plugin.Plugin; - -/** - * Represents the plugin used to string a bow. - * @author Ceikry - * @version 2.0 - */ -@Initializable -public final class StringbowPlugin extends UseWithHandler { - Fletching.String string; - - /** - * Constructs a new {@code StringbowPlugin} {@code Object}. - */ - public StringbowPlugin() { - super(1777, 9438); - } - - @Override - public Plugin newInstance(Object arg) throws Throwable { - for (Fletching.String bw : Fletching.String.values()) { - addHandler(bw.unfinished, ITEM_TYPE, this); - } - return this; - } - - @Override - public boolean handle(NodeUsageEvent event) { - final Player player = event.getPlayer(); - Fletching.String string = Fletching.stringMap.get(event.getUsedItem().getId()); - if(string == null){ - string = Fletching.stringMap.get(event.getUsedWith().getId()); - } - final Fletching.String bow = string; - if(!(player.getInventory().containsItem(new Item(bow.string)))){ - player.getDialogueInterpreter().sendDialogue("That's not the correct type of string."); - return true; - } - SkillDialogueHandler handler = new SkillDialogueHandler(player, SkillDialogueHandler.SkillDialogue.ONE_OPTION, new Item(bow.product)) { - @Override - public void create(final int amount, int index) { - player.getPulseManager().run(new StringPulse(player, event.getUsedItem(), bow, amount)); - } - @Override - public int getAll(int index) { - return player.getInventory().getAmount(event.getUsedItem()); - } - }; - handler.open(); - PacketRepository.send(RepositionChild.class, new ChildPositionContext(player, 309, 2, 215, 10)); - return true; - } -} diff --git a/Server/src/main/java/core/game/node/entity/skill/fletching/items/arrow/HeadlessArrowPulse.java b/Server/src/main/java/core/game/node/entity/skill/fletching/items/arrow/HeadlessArrowPulse.java index f89647c4a..32a060a8a 100644 --- a/Server/src/main/java/core/game/node/entity/skill/fletching/items/arrow/HeadlessArrowPulse.java +++ b/Server/src/main/java/core/game/node/entity/skill/fletching/items/arrow/HeadlessArrowPulse.java @@ -94,7 +94,7 @@ public final class HeadlessArrowPulse extends SkillPulse { ARROW_SHAFT.setAmount(15); player.getPacketDispatch().sendMessage("You attach feathers to 15 arrow shafts."); } else { - int amount = featherAmount > shaftAmount ? shaftAmount : featherAmount; + int amount = Math.min(featherAmount, shaftAmount); feather.setAmount(amount); ARROW_SHAFT.setAmount(amount); player.getPacketDispatch().sendMessage(amount == 1 diff --git a/Server/src/main/java/core/game/node/entity/skill/fletching/items/bow/StringPulse.java b/Server/src/main/java/core/game/node/entity/skill/fletching/items/bow/StringPulse.java index 1381e09ff..bc1b858e0 100644 --- a/Server/src/main/java/core/game/node/entity/skill/fletching/items/bow/StringPulse.java +++ b/Server/src/main/java/core/game/node/entity/skill/fletching/items/bow/StringPulse.java @@ -33,7 +33,6 @@ public class StringPulse extends SkillPulse { */ public StringPulse(Player player, Item node, final Fletching.String bow, int amount) { super(player, node); - setDelay(bow.string == 1777 ? 9 : 7); this.bow = bow; this.amount = amount; } diff --git a/Server/src/main/java/core/game/node/entity/skill/fletching/items/crossbow/LimbPulse.kt b/Server/src/main/java/core/game/node/entity/skill/fletching/items/crossbow/LimbPulse.kt index 7444b265c..e6c67d09d 100644 --- a/Server/src/main/java/core/game/node/entity/skill/fletching/items/crossbow/LimbPulse.kt +++ b/Server/src/main/java/core/game/node/entity/skill/fletching/items/crossbow/LimbPulse.kt @@ -1,79 +1,52 @@ -package core.game.node.entity.skill.fletching.items.crossbow; +package core.game.node.entity.skill.fletching.items.crossbow -import core.game.node.entity.skill.SkillPulse; -import core.game.node.entity.skill.Skills; -import core.game.node.entity.skill.fletching.Fletching; -import core.game.node.entity.player.Player; -import core.game.node.item.Item; +import core.game.node.entity.player.Player +import core.game.node.entity.skill.SkillPulse +import core.game.node.entity.skill.Skills +import core.game.node.entity.skill.fletching.Fletching +import core.game.node.item.Item /** * Represents the skill pulse of attaching limbs. * @author Ceikry */ -public class LimbPulse extends SkillPulse { +class LimbPulse(player: Player?, node: Item, private val limb: Fletching.Limb ,private var amount: Int) : SkillPulse(player, node) { + override fun checkRequirements(): Boolean { + if (player.skills.getLevel(Skills.FLETCHING) < limb.level) { + player.dialogueInterpreter.sendDialogue("You need a fletching level of " + limb.level + " to attach these limbs.") + return false + } + if (!player.inventory.containsItem(Item(limb.limb))) { + player.dialogueInterpreter.sendDialogue("That's not the correct limb to attach.") + return false + } + if(!player.inventory.containsItem(Item(limb.stock))){ + player.dialogueInterpreter.sendDialogue("That's not the correct stock for that limb.") + return false + } + return player.inventory.containsItem(Item(limb.stock)) + } - /** - * Represents the limbs. - */ - private final Fletching.Limb limb; + override fun animate() { + player.animate(limb.animation) + } - /** - * Represents the amount. - */ - private int amount; + override fun reward(): Boolean { + if (delay == 1) { + super.setDelay(6) + return false + } + if (player.inventory.remove(Item(limb.stock), Item(limb.limb))) { + player.inventory.add(Item(limb.product)) + player.skills.addExperience(Skills.FLETCHING, limb.experience, true) + player.packetDispatch.sendMessage("You attach the metal limbs to the stock.") + } + if (!player.inventory.containsItem(Item(limb.limb))) { + return true + } + amount-- + return amount == 0 + } - /** - * Constructs a new {@code StringcrossbowPlugin.java} {@code Object}. - * @param player the player. - * @param node the node. - */ - public LimbPulse(Player player, Item node, final Fletching.Limb limb, int amount) { - super(player, node); - this.limb = limb; - this.amount = amount; - } - - @Override - public boolean checkRequirements() { - if (player.getSkills().getLevel(Skills.FLETCHING) < limb.level) { - player.getDialogueInterpreter().sendDialogue("You need a fletching level of " + limb.level + " to attach these limbs."); - return false; - } - if (!player.getInventory().containsItem(new Item(limb.limb))) { - player.getDialogueInterpreter().sendDialogue("That's not the correct limb to attach."); - return false; - } - if (!player.getInventory().containsItem(new Item(limb.stock))) { - return false; - } - return true; - } - - @Override - public void animate() { - player.animate(limb.animation); - } - - @Override - public boolean reward() { - if (getDelay() == 1) { - super.setDelay(6); - return false; - } - if (player.getInventory().remove(new Item(limb.stock), new Item(limb.limb))) { - player.getInventory().add(new Item(limb.product)); - player.getSkills().addExperience(Skills.FLETCHING, limb.experience, true); - player.getPacketDispatch().sendMessage("You attach the metal limbs to the stock."); - } - if (!player.getInventory().containsItem(new Item(limb.limb))) { - return true; - } - amount--; - return amount == 0; - } - - @Override - public void message(int type) { - } - -} + override fun message(type: Int) {} +} \ No newline at end of file diff --git a/Server/src/main/kotlin/rs09/game/node/entity/skill/fletching/FletchingListeners.kt b/Server/src/main/kotlin/rs09/game/node/entity/skill/fletching/FletchingListeners.kt new file mode 100644 index 000000000..a2d18fa63 --- /dev/null +++ b/Server/src/main/kotlin/rs09/game/node/entity/skill/fletching/FletchingListeners.kt @@ -0,0 +1,133 @@ +package rs09.game.node.entity.skill.fletching + +import core.game.node.entity.skill.Skills +import core.game.node.entity.skill.fletching.Fletching +import core.game.node.entity.skill.fletching.items.arrow.ArrowHeadPulse +import core.game.node.entity.skill.fletching.items.arrow.HeadlessArrowPulse +import core.game.node.entity.skill.fletching.items.bow.StringPulse +import core.game.node.entity.skill.fletching.items.crossbow.LimbPulse +import core.game.node.item.Item +import core.net.packet.PacketRepository +import core.net.packet.context.ChildPositionContext +import core.net.packet.out.RepositionChild +import org.rs09.consts.Items +import rs09.game.content.dialogue.SkillDialogueHandler +import rs09.game.interaction.InteractionListener + +class FletchingListeners : InteractionListener() { + + val LIMBIDs = Fletching.Limb.values().map(Fletching.Limb::limb).toIntArray() + val STOCKIDs = Fletching.Limb.values().map(Fletching.Limb::stock).toIntArray() + val MITHRIL_BOLT = Items.MITHRIL_BOLTS_9142 + val MITH_GRAPPLE_TIP = Items.MITH_GRAPPLE_TIP_9416 + val ROPE = Items.ROPE_954 + val MITH_GRAPPLE = Items.MITH_GRAPPLE_9418 + val ROPE_GRAPPLE = Items.MITH_GRAPPLE_9419 + val ARROW_SHAFT = Items.ARROW_SHAFT_52 + val FLETCHED_SHAFT = Items.HEADLESS_ARROW_53 + val UNFINISHED_ARROWS = Fletching.ArrowHeads.values().map(Fletching.ArrowHeads::unfinished).toIntArray() + val FEATHERS = intArrayOf(314,10087,10088,10089,10090,10091) + val UNSTRUNG_BOWS = Fletching.String.values().map(Fletching.String::unfinished).toIntArray() + val STRINGS = intArrayOf(Items.BOW_STRING_1777,Items.SINEW_9436) + + override fun defineListeners() { + + onUseWith(ITEM,STRINGS,*UNSTRUNG_BOWS){player,string,bow -> + val enum = Fletching.stringMap[bow.id] ?: return@onUseWith false + if(enum.string != string.id){ + player.sendMessage("That's not the right kind of string for this.") + return@onUseWith true + } + val handler: SkillDialogueHandler = + object : SkillDialogueHandler(player, SkillDialogue.ONE_OPTION, Item(enum.product)) { + override fun create(amount: Int, index: Int) { + player.pulseManager.run(StringPulse(player, string.asItem(), enum, amount)) + } + + override fun getAll(index: Int): Int { + return player.inventory.getAmount(string.asItem()) + } + } + handler.open() + PacketRepository.send(RepositionChild::class.java, ChildPositionContext(player, 309, 2, 215, 10)) + return@onUseWith true + } + + onUseWith(ITEM,ARROW_SHAFT,*FEATHERS){player,shaft,feather -> + val handler: SkillDialogueHandler = + object : SkillDialogueHandler(player, SkillDialogue.ONE_OPTION, Item(FLETCHED_SHAFT)) { + override fun create(amount: Int, index: Int) { + player.pulseManager.run(HeadlessArrowPulse(player, shaft.asItem(), Item(feather.id), amount)) + } + + override fun getAll(index: Int): Int { + return player.inventory.getAmount(FLETCHED_SHAFT) + } + } + handler.open() + PacketRepository.send(RepositionChild::class.java, ChildPositionContext(player, 309, 2, 210, 10)) + return@onUseWith true + } + + onUseWith(ITEM,FLETCHED_SHAFT,*UNFINISHED_ARROWS){player,shaft,unfinished -> + val head = Fletching.arrowHeadMap[unfinished.id] ?: return@onUseWith false + val handler: SkillDialogueHandler = + object : SkillDialogueHandler(player, SkillDialogue.ONE_OPTION, head.getFinished()) { + override fun create(amount: Int, index: Int) { + player.pulseManager.run(ArrowHeadPulse(player, shaft.asItem(), head, amount)) + } + + override fun getAll(index: Int): Int { + return player.inventory.getAmount(head.getUnfinished()) + } + } + handler.open() + PacketRepository.send(RepositionChild::class.java, ChildPositionContext(player, 309, 2, 210, 10)) + return@onUseWith true + } + + onUseWith(ITEM,MITHRIL_BOLT,MITH_GRAPPLE_TIP){player,bolt,tip -> + if(player.skills.getLevel(Skills.FLETCHING) < 59){ + player.sendMessage("You need a fletching level of 59 to make this.") + return@onUseWith true + } + if(player.inventory.remove(bolt.asItem(),tip.asItem())){ + player.inventory.add(Item(MITH_GRAPPLE)) + } + return@onUseWith true + } + + onUseWith(ITEM,ROPE,MITH_GRAPPLE){player,rope,grapple -> + if(player.skills.getLevel(Skills.FLETCHING) < 59){ + player.sendMessage("You need a fletching level of 59 to make this.") + return@onUseWith true + } + if(player.inventory.remove(rope.asItem(),grapple.asItem())){ + player.inventory.add(Item(ROPE_GRAPPLE)) + } + return@onUseWith true + } + + onUseWith(ITEM,LIMBIDs,*STOCKIDs){player, limb, stock -> + val limbEnum = Fletching.limbMap[stock.id] ?: return@onUseWith false + if(limbEnum.limb != limb.id){ + player.sendMessage("That's not the right limb to attach to that stock.") + return@onUseWith true + } + val handler: SkillDialogueHandler = object : SkillDialogueHandler(player, SkillDialogue.ONE_OPTION, Item(limbEnum.product)){ + override fun create(amount: Int, index: Int) { + player.pulseManager.run(LimbPulse(player, stock.asItem(), limbEnum, amount)) + } + + override fun getAll(index: Int): Int { + return player.inventory.getAmount(stock.asItem()) + } + } + handler.open() + PacketRepository.send(RepositionChild::class.java, ChildPositionContext(player, 309, 2, 210, 10)) + return@onUseWith true + } + + } + +} \ No newline at end of file diff --git a/Server/src/main/kotlin/rs09/game/node/entity/skill/gather/GatheringSkillOptionPlugin.kt b/Server/src/main/kotlin/rs09/game/node/entity/skill/gather/GatheringSkillOptionListeners.kt similarity index 51% rename from Server/src/main/kotlin/rs09/game/node/entity/skill/gather/GatheringSkillOptionPlugin.kt rename to Server/src/main/kotlin/rs09/game/node/entity/skill/gather/GatheringSkillOptionListeners.kt index 338fa05b0..acb63daba 100644 --- a/Server/src/main/kotlin/rs09/game/node/entity/skill/gather/GatheringSkillOptionPlugin.kt +++ b/Server/src/main/kotlin/rs09/game/node/entity/skill/gather/GatheringSkillOptionListeners.kt @@ -1,13 +1,17 @@ package rs09.game.node.entity.skill.gather +import core.game.node.Node import core.game.node.entity.npc.NPC +import core.game.node.entity.player.Player +import rs09.game.node.entity.skill.gather.fishing.FishingPulse +import core.game.node.entity.skill.fishing.FishingSpot import core.game.node.entity.skill.gather.woodcutting.WoodcuttingSkillPulse import org.rs09.consts.NPCs import rs09.game.content.dialogue.KjallakOnChopDialogue import rs09.game.interaction.InteractionListener import rs09.game.node.entity.skill.gather.mining.MiningSkillPulse -class GatheringSkillOptionPlugin : InteractionListener() { +class GatheringSkillOptionListeners : InteractionListener() { val ETCETERIA_REGION = 10300 @@ -25,5 +29,19 @@ class GatheringSkillOptionPlugin : InteractionListener() { player.pulseManager.run(MiningSkillPulse(player, node.asObject())) return@on true } + + on(NPC,"net"){player,node -> return@on fish(player,node,"net")} + on(NPC,"lure"){player,node -> return@on fish(player,node,"lure")} + on(NPC,"bait"){player,node -> return@on fish(player,node,"bait")} + on(NPC,"harpoon"){player,node -> return@on fish(player,node,"harpoon")} + on(NPC,"cage"){player,node -> return@on fish(player,node,"cage")} + } + + fun fish(player: Player, node: Node, opt: String): Boolean{ + val npc = node as NPC + val spot = FishingSpot.forId(npc.id) ?: return false + val op = spot.getOptionByName(opt) ?: return false + player.pulseManager.run(FishingPulse(player, npc, op)) + return true } } \ No newline at end of file diff --git a/Server/src/main/kotlin/rs09/game/node/entity/skill/gather/fishing/FishingPulse.kt b/Server/src/main/kotlin/rs09/game/node/entity/skill/gather/fishing/FishingPulse.kt index a259329a8..22b58a46f 100644 --- a/Server/src/main/kotlin/rs09/game/node/entity/skill/gather/fishing/FishingPulse.kt +++ b/Server/src/main/kotlin/rs09/game/node/entity/skill/gather/fishing/FishingPulse.kt @@ -1,367 +1,450 @@ -package core.game.node.entity.skill.fishing; +package rs09.game.node.entity.skill.gather.fishing -import core.game.content.global.SkillingPets; -import core.game.content.quest.tutorials.tutorialisland.TutorialSession; -import core.game.content.quest.tutorials.tutorialisland.TutorialStage; -import core.game.node.entity.npc.NPC; -import core.game.node.entity.player.Player; -import core.game.node.entity.player.link.diary.DiaryType; -import core.game.node.entity.player.link.skillertasks.SkillTasks; -import core.game.node.entity.skill.SkillPulse; -import core.game.node.entity.skill.Skills; -import core.game.node.entity.skill.summoning.familiar.Forager; -import core.game.node.item.Item; -import core.game.system.task.Pulse; -import core.game.world.map.Location; -import core.game.world.map.path.Pathfinder; -import core.game.world.update.flag.context.Animation; -import core.tools.RandomFunction; -import rs09.game.node.entity.skill.skillcapeperks.SkillcapePerks; -import rs09.game.world.GameWorld; - -import static rs09.game.node.entity.player.info.stats.StatAttributeKeysKt.STATS_BASE; -import static rs09.game.node.entity.player.info.stats.StatAttributeKeysKt.STATS_FISH; -import static rs09.tools.stringtools.StringToolsKt.colorize; +import core.game.content.global.SkillingPets +import core.game.content.quest.tutorials.tutorialisland.TutorialSession +import core.game.content.quest.tutorials.tutorialisland.TutorialStage +import core.game.node.entity.npc.NPC +import core.game.node.entity.player.Player +import core.game.node.entity.player.link.diary.DiaryType +import core.game.node.entity.player.link.skillertasks.SkillTasks +import core.game.node.entity.skill.SkillPulse +import core.game.node.entity.skill.Skills +import core.game.node.entity.skill.fishing.Fish +import core.game.node.entity.skill.fishing.FishingOption +import core.game.node.entity.skill.summoning.familiar.Forager +import core.game.node.item.Item +import core.game.system.task.Pulse +import core.game.world.map.Location +import core.game.world.map.path.Pathfinder +import core.game.world.update.flag.context.Animation +import core.tools.RandomFunction +import rs09.game.node.entity.player.info.stats.STATS_BASE +import rs09.game.node.entity.player.info.stats.STATS_FISH +import rs09.game.node.entity.skill.skillcapeperks.SkillcapePerks +import rs09.game.node.entity.skill.skillcapeperks.SkillcapePerks.Companion.isActive +import rs09.game.world.GameWorld.Pulser +import rs09.tools.stringtools.colorize /** * Handles a fishing pulse. * * @author Ceikry */ -public final class FishingPulse extends SkillPulse { - - /** - * Represents the fishing option. - */ - private final FishingOption option; - +class FishingPulse(player: Player?, npc: NPC, private val option: FishingOption?) : SkillPulse(player, npc) { /** * Represents the fish type. */ - private Fish fish; + private var fish: Fish? = null /** * Represents the base location the npc was at. */ - private final Location location; + private val location: Location = npc.location - /** - * Constructs a new {@code FishingPulse} {@code Object}. - * - * @param player the player. - * @param npc the fishing spot NPC. - * @param option The fishing option. - */ - public FishingPulse(final Player player, final NPC npc, final FishingOption option) { - super(player, npc); - this.option = option; - this.location = npc.getLocation(); - if (option != null) { - this.fish = option.getRandomFish(player); + override fun start() { + if (TutorialSession.getExtension(player).stage == 12) { + TutorialStage.load(player, 13, false) } + if (player.familiarManager.hasFamiliar() && player.familiarManager.familiar is Forager) { + val forager = player.familiarManager.familiar as Forager + val dest = player.location.transform(player.direction) + Pathfinder.find(forager.location, dest).walk(forager) + } + super.start() } - @Override - public void start() { - if (TutorialSession.getExtension(player).getStage() == 12) { - TutorialStage.load(player, 13, false); - } - if (player.getFamiliarManager().hasFamiliar() && player.getFamiliarManager().getFamiliar() instanceof Forager) { - final Forager forager = (Forager) player.getFamiliarManager().getFamiliar(); - Location dest = player.getLocation().transform(player.getDirection()); - Pathfinder.find(forager.getLocation(), dest).walk(forager); - } - super.start(); - } - - @Override - public boolean checkRequirements() { + override fun checkRequirements(): Boolean { if (option == null) { - return false; + return false } - player.debug(String.valueOf(player.getInventory().containsItem(option.getTool()))); - if (!player.getInventory().containsItem(option.getTool()) && !hasBarbTail()) { + player.debug(player.inventory.containsItem(option.tool).toString()) + if (!player.inventory.containsItem(option.tool) && !hasBarbTail()) { //System.out.println(isBareHanded(player)); - player.getDialogueInterpreter().sendDialogue("You need a " + option.getTool().getName().toLowerCase() + " to catch these fish."); - stop(); - return false; + player.dialogueInterpreter.sendDialogue("You need a " + option.tool.name.toLowerCase() + " to catch these fish.") + stop() + return false } - if (option.getBait() != null && !player.getInventory().containsItem(option.getBait())) { - player.getDialogueInterpreter().sendDialogue("You don't have any " + option.getBait().getName().toLowerCase() + "s left."); - stop(); - return false; + if (option.bait != null && !player.inventory.containsItem(option.bait)) { + player.dialogueInterpreter.sendDialogue("You don't have any " + option.bait.name.toLowerCase() + "s left.") + stop() + return false } - if (player.getSkills().getLevel(Skills.FISHING) < fish.getLevel()) { - player.getDialogueInterpreter().sendDialogue("You need a fishing level of " + fish.getLevel() + " to catch " + (fish == Fish.SHRIMP || fish == Fish.ANCHOVIE ? "" : "a") + " " + fish.getItem().getName().toLowerCase() + ".".trim()); - stop(); - return false; + if (player.skills.getLevel(Skills.FISHING) < fish!!.level) { + player.dialogueInterpreter.sendDialogue("You need a fishing level of " + fish!!.level + " to catch " + (if (fish == Fish.SHRIMP || fish == Fish.ANCHOVIE) "" else "a") + " " + fish!!.item.name.toLowerCase() + ".".trim { it <= ' ' }) + stop() + return false } - if (player.getInventory().freeSlots() == 0) { - player.getDialogueInterpreter().sendDialogue("You don't have enough space in your inventory."); - stop(); - return false; + if (player.inventory.freeSlots() == 0) { + player.dialogueInterpreter.sendDialogue("You don't have enough space in your inventory.") + stop() + return false } - if (location != node.getLocation() || !node.isActive() || node.isInvisible()) { - stop(); - return false; + if (location !== node!!.location || !node!!.isActive || node!!.isInvisible) { + stop() + return false } - return true; + return true } - @Override - public void animate() { + override fun animate() { if (isBareHanded(player)) { - player.animate(new Animation(6709)); - GameWorld.getPulser().submit(new Pulse(1) { - int counter = 0; - - @Override - public boolean pulse() { - switch (counter++) { - case 5: - getCatchAnimationAndLoot(player); - break; + player.animate(Animation(6709)) + Pulser.submit(object : Pulse(1) { + var counter = 0 + override fun pulse(): Boolean { + when (counter++) { + 5 -> getCatchAnimationAndLoot(player) } - return false; + return false } - }); + }) } else { - player.animate(option.getAnimation()); + player.animate(option!!.animation) } } - @Override - public boolean reward() { - if (getDelay() == 1) { - super.setDelay(5); - return false; + override fun reward(): Boolean { + if (delay == 1) { + super.setDelay(5) + return false } - if (player.getFamiliarManager().hasFamiliar() && player.getFamiliarManager().getFamiliar() instanceof Forager) { - final Forager forager = (Forager) player.getFamiliarManager().getFamiliar(); - forager.handlePassiveAction(); + if (player.familiarManager.hasFamiliar() && player.familiarManager.familiar is Forager) { + val forager = player.familiarManager.familiar as Forager + forager.handlePassiveAction() } if (success()) { - if ((player.getInventory().hasSpaceFor(fish.getItem()) && option.getBait() != null) ? player.getInventory().remove(option.getBait()) : true) { - - if (player.getSkillTasks().hasTask()) { - updateSkillTask(); + if (if (player.inventory.hasSpaceFor(fish!!.item) && option!!.bait != null) player.inventory.remove( + option.bait + ) else true + ) { + if (player.skillTasks.hasTask()) { + updateSkillTask() } - updateDiary(); - - SkillingPets.checkPetDrop(player, SkillingPets.HERON); - final Item item = fish.getItem(); - if(SkillcapePerks.isActive(SkillcapePerks.GREAT_AIM,player) && RandomFunction.random(100) <= 5){ - player.getInventory().add(item); - player.sendMessage(colorize("%RYour expert aim catches you a second fish.")); + updateDiary() + SkillingPets.checkPetDrop(player, SkillingPets.HERON) + val item = fish!!.item + if (isActive(SkillcapePerks.GREAT_AIM, player) && RandomFunction.random(100) <= 5) { + player.inventory.add(item) + player.sendMessage(colorize("%RYour expert aim catches you a second fish.")) } - player.getInventory().add(item); - int fishCaught = player.getAttribute(STATS_BASE + ":" + STATS_FISH,0); - player.setAttribute("/save:" + STATS_BASE + ":" + STATS_FISH,++fishCaught); - player.getSkills().addExperience(Skills.FISHING, fish.getExperience(), true); - message(2); - if (TutorialSession.getExtension(player).getStage() == 13) { - TutorialStage.load(player, 14, false); - stop(); - return true; + player.inventory.add(item) + var fishCaught = player.getAttribute(STATS_BASE + ":" + STATS_FISH, 0) + player.setAttribute("/save:$STATS_BASE:$STATS_FISH", ++fishCaught) + player.skills.addExperience(Skills.FISHING, fish!!.experience, true) + message(2) + if (TutorialSession.getExtension(player).stage == 13) { + TutorialStage.load(player, 14, false) + stop() + return true } - fish = option.getRandomFish(player); + fish = option!!.getRandomFish(player) } } - return player.getInventory().freeSlots() == 0; + return player.inventory.freeSlots() == 0 } - public void updateDiary() { - switch (fish) { - case MACKEREL: - if (player.getViewport().getRegion().getId() == 11317) { - player.getAchievementDiaryManager().finishTask(player, DiaryType.SEERS_VILLAGE, 0, 11); + fun updateDiary() { + when (fish) { + Fish.MACKEREL -> { + if (player.viewport.region.id == 11317) { + player.achievementDiaryManager.finishTask(player, DiaryType.SEERS_VILLAGE, 0, 11) } - case BASS: - if (player.getViewport().getRegion().getId() == 11317 - && !player.getAchievementDiaryManager().hasCompletedTask(DiaryType.SEERS_VILLAGE, 1, 11)) { - player.setAttribute("/save:diary:seers:bass-caught", true); + if (player.viewport.region.id == 11317 + && !player.achievementDiaryManager.hasCompletedTask(DiaryType.SEERS_VILLAGE, 1, 11) + ) { + player.setAttribute("/save:diary:seers:bass-caught", true) } - case SHARK: - if (player.getViewport().getRegion().getId() == 11317 - && !player.getAchievementDiaryManager().hasCompletedTask(DiaryType.SEERS_VILLAGE, 2, 7)) { - player.setAttribute("/save:diary:seers:caught-shark", 1 + player.getAttribute("diary:seers:caught-shark", 0)); + if (player.viewport.region.id == 11317 + && !player.achievementDiaryManager.hasCompletedTask(DiaryType.SEERS_VILLAGE, 2, 7) + ) { + player.setAttribute( + "/save:diary:seers:caught-shark", + 1 + player.getAttribute("diary:seers:caught-shark", 0) + ) if (player.getAttribute("diary:seers:caught-shark", 0) >= 5) { - player.getAchievementDiaryManager().finishTask(player, DiaryType.SEERS_VILLAGE, 2, 7); + player.achievementDiaryManager.finishTask(player, DiaryType.SEERS_VILLAGE, 2, 7) } } - case SHRIMP: - // Catch some shrimp in the Fishing spot to the east of

Lumbridge Swamp - if (player.getLocation().withinDistance(Location.create(3241, 3149, 0))) { - player.getAchievementDiaryManager().finishTask(player, DiaryType.LUMBRIDGE, 0, 13); + // Catch some shrimp in the Fishing spot to the east of

Lumbridge Swamp + if (player.location.withinDistance(Location.create(3241, 3149, 0))) { + player.achievementDiaryManager.finishTask(player, DiaryType.LUMBRIDGE, 0, 13) + } + // Catch a pike in the river to the east of Lumbridge Castle + if (player.location.withinDistance(Location.create(3240, 3247, 0))) { + player.achievementDiaryManager.finishTask(player, DiaryType.LUMBRIDGE, 1, 4) + } + // Catch a salmon in the river to the east of Lumbridge Castle + if (player.location.withinDistance(Location.create(3240, 3247, 0))) { + player.achievementDiaryManager.finishTask(player, DiaryType.LUMBRIDGE, 2, 9) } - case PIKE: - // Catch a pike in the river to the east of Lumbridge Castle - if (player.getLocation().withinDistance(Location.create(3240, 3247, 0))) { - player.getAchievementDiaryManager().finishTask(player, DiaryType.LUMBRIDGE, 1, 4); - } - case SALMON: - // Catch a salmon in the river to the east of Lumbridge Castle - if (player.getLocation().withinDistance(Location.create(3240, 3247, 0))) { - player.getAchievementDiaryManager().finishTask(player, DiaryType.LUMBRIDGE, 2, 9); - } - case TROUT: // Catch a trout in the river to the east of Barbarian Village - if (player.getLocation().withinDistance(Location.create(3105, 3431, 0))) { - player.getAchievementDiaryManager().finishTask(player, DiaryType.VARROCK, 0, 16); + if (player.location.withinDistance(Location.create(3105, 3431, 0))) { + player.achievementDiaryManager.finishTask(player, DiaryType.VARROCK, 0, 16) } + } + Fish.BASS -> { + if (player.viewport.region.id == 11317 + && !player.achievementDiaryManager.hasCompletedTask(DiaryType.SEERS_VILLAGE, 1, 11) + ) { + player.setAttribute("/save:diary:seers:bass-caught", true) + } + if (player.viewport.region.id == 11317 + && !player.achievementDiaryManager.hasCompletedTask(DiaryType.SEERS_VILLAGE, 2, 7) + ) { + player.setAttribute( + "/save:diary:seers:caught-shark", + 1 + player.getAttribute("diary:seers:caught-shark", 0) + ) + if (player.getAttribute("diary:seers:caught-shark", 0) >= 5) { + player.achievementDiaryManager.finishTask(player, DiaryType.SEERS_VILLAGE, 2, 7) + } + } + if (player.location.withinDistance(Location.create(3241, 3149, 0))) { + player.achievementDiaryManager.finishTask(player, DiaryType.LUMBRIDGE, 0, 13) + } + if (player.location.withinDistance(Location.create(3240, 3247, 0))) { + player.achievementDiaryManager.finishTask(player, DiaryType.LUMBRIDGE, 1, 4) + } + if (player.location.withinDistance(Location.create(3240, 3247, 0))) { + player.achievementDiaryManager.finishTask(player, DiaryType.LUMBRIDGE, 2, 9) + } + if (player.location.withinDistance(Location.create(3105, 3431, 0))) { + player.achievementDiaryManager.finishTask(player, DiaryType.VARROCK, 0, 16) + } + } + Fish.SHARK -> { + if (player.viewport.region.id == 11317 + && !player.achievementDiaryManager.hasCompletedTask(DiaryType.SEERS_VILLAGE, 2, 7) + ) { + player.setAttribute( + "/save:diary:seers:caught-shark", + 1 + player.getAttribute("diary:seers:caught-shark", 0) + ) + if (player.getAttribute("diary:seers:caught-shark", 0) >= 5) { + player.achievementDiaryManager.finishTask(player, DiaryType.SEERS_VILLAGE, 2, 7) + } + } + if (player.location.withinDistance(Location.create(3241, 3149, 0))) { + player.achievementDiaryManager.finishTask(player, DiaryType.LUMBRIDGE, 0, 13) + } + if (player.location.withinDistance(Location.create(3240, 3247, 0))) { + player.achievementDiaryManager.finishTask(player, DiaryType.LUMBRIDGE, 1, 4) + } + if (player.location.withinDistance(Location.create(3240, 3247, 0))) { + player.achievementDiaryManager.finishTask(player, DiaryType.LUMBRIDGE, 2, 9) + } + if (player.location.withinDistance(Location.create(3105, 3431, 0))) { + player.achievementDiaryManager.finishTask(player, DiaryType.VARROCK, 0, 16) + } + } + Fish.SHRIMP -> { + if (player.location.withinDistance(Location.create(3241, 3149, 0))) { + player.achievementDiaryManager.finishTask(player, DiaryType.LUMBRIDGE, 0, 13) + } + if (player.location.withinDistance(Location.create(3240, 3247, 0))) { + player.achievementDiaryManager.finishTask(player, DiaryType.LUMBRIDGE, 1, 4) + } + if (player.location.withinDistance(Location.create(3240, 3247, 0))) { + player.achievementDiaryManager.finishTask(player, DiaryType.LUMBRIDGE, 2, 9) + } + if (player.location.withinDistance(Location.create(3105, 3431, 0))) { + player.achievementDiaryManager.finishTask(player, DiaryType.VARROCK, 0, 16) + } + } + Fish.PIKE -> { + if (player.location.withinDistance(Location.create(3240, 3247, 0))) { + player.achievementDiaryManager.finishTask(player, DiaryType.LUMBRIDGE, 1, 4) + } + if (player.location.withinDistance(Location.create(3240, 3247, 0))) { + player.achievementDiaryManager.finishTask(player, DiaryType.LUMBRIDGE, 2, 9) + } + if (player.location.withinDistance(Location.create(3105, 3431, 0))) { + player.achievementDiaryManager.finishTask(player, DiaryType.VARROCK, 0, 16) + } + } + Fish.SALMON -> { + if (player.location.withinDistance(Location.create(3240, 3247, 0))) { + player.achievementDiaryManager.finishTask(player, DiaryType.LUMBRIDGE, 2, 9) + } + if (player.location.withinDistance(Location.create(3105, 3431, 0))) { + player.achievementDiaryManager.finishTask(player, DiaryType.VARROCK, 0, 16) + } + } + Fish.TROUT -> if (player.location.withinDistance(Location.create(3105, 3431, 0))) { + player.achievementDiaryManager.finishTask(player, DiaryType.VARROCK, 0, 16) + } } // Use the Fishing spots north of the banana plantation - if (node.getId() == 333 && player.getZoneMonitor().isInZone("karamja") - && player.getLocation().withinDistance(new Location(2924, 3178, 0), 10)) { - player.getAchievementDiaryManager().finishTask(player, DiaryType.KARAMJA, 0, 6); + if (node!!.id == 333 && player.zoneMonitor.isInZone("karamja") + && player.location.withinDistance(Location(2924, 3178, 0), 10) + ) { + player.achievementDiaryManager.finishTask(player, DiaryType.KARAMJA, 0, 6) } } - public void updateSkillTask() { - switch (fish) { - case ANCHOVIE: - player.getSkillTasks().decreaseTask(player, SkillTasks.FANCHOVIES1); - player.getSkillTasks().decreaseTask(player, SkillTasks.FANCHOVIES2); - break; - case HERRING: - player.getSkillTasks().decreaseTask(player, SkillTasks.FHERRING1); - player.getSkillTasks().decreaseTask(player, SkillTasks.FHERRING2); - break; - case LOBSTER: - player.getSkillTasks().decreaseTask(player, SkillTasks.FLOBSTER1); - player.getSkillTasks().decreaseTask(player, SkillTasks.FLOBSTER2); - break; - case SALMON: - player.getSkillTasks().decreaseTask(player, SkillTasks.FSALMON1); - player.getSkillTasks().decreaseTask(player, SkillTasks.FSALMON2); - break; - case SHARK: - player.getSkillTasks().decreaseTask(player, SkillTasks.FSHARK1); - player.getSkillTasks().decreaseTask(player, SkillTasks.FSHARK2); - player.getSkillTasks().decreaseTask(player, SkillTasks.FSHARK3); - break; - case SHRIMP: - player.getSkillTasks().decreaseTask(player, SkillTasks.FSHRIMP1); - player.getSkillTasks().decreaseTask(player, SkillTasks.FSHRIMP2); - break; - case SWORDFISH: - player.getSkillTasks().decreaseTask(player, SkillTasks.FSWORD1); - player.getSkillTasks().decreaseTask(player, SkillTasks.FSWORD2); - break; - case TROUT: - player.getSkillTasks().decreaseTask(player, SkillTasks.FTROUT1); - player.getSkillTasks().decreaseTask(player, SkillTasks.FTROUT2); - break; - case TUNA: - player.getSkillTasks().decreaseTask(player, SkillTasks.FTUNA1); - player.getSkillTasks().decreaseTask(player, SkillTasks.FTUNA2); - break; + fun updateSkillTask() { + when (fish) { + Fish.ANCHOVIE -> { + player.skillTasks.decreaseTask(player, SkillTasks.FANCHOVIES1) + player.skillTasks.decreaseTask(player, SkillTasks.FANCHOVIES2) + } + Fish.HERRING -> { + player.skillTasks.decreaseTask(player, SkillTasks.FHERRING1) + player.skillTasks.decreaseTask(player, SkillTasks.FHERRING2) + } + Fish.LOBSTER -> { + player.skillTasks.decreaseTask(player, SkillTasks.FLOBSTER1) + player.skillTasks.decreaseTask(player, SkillTasks.FLOBSTER2) + } + Fish.SALMON -> { + player.skillTasks.decreaseTask(player, SkillTasks.FSALMON1) + player.skillTasks.decreaseTask(player, SkillTasks.FSALMON2) + } + Fish.SHARK -> { + player.skillTasks.decreaseTask(player, SkillTasks.FSHARK1) + player.skillTasks.decreaseTask(player, SkillTasks.FSHARK2) + player.skillTasks.decreaseTask(player, SkillTasks.FSHARK3) + } + Fish.SHRIMP -> { + player.skillTasks.decreaseTask(player, SkillTasks.FSHRIMP1) + player.skillTasks.decreaseTask(player, SkillTasks.FSHRIMP2) + } + Fish.SWORDFISH -> { + player.skillTasks.decreaseTask(player, SkillTasks.FSWORD1) + player.skillTasks.decreaseTask(player, SkillTasks.FSWORD2) + } + Fish.TROUT -> { + player.skillTasks.decreaseTask(player, SkillTasks.FTROUT1) + player.skillTasks.decreaseTask(player, SkillTasks.FTROUT2) + } + Fish.TUNA -> { + player.skillTasks.decreaseTask(player, SkillTasks.FTUNA1) + player.skillTasks.decreaseTask(player, SkillTasks.FTUNA2) + } } } - private boolean isBareHanded(Player p) { + private fun isBareHanded(p: Player): Boolean { if (option == FishingOption.HARPOON) { - if (checkFish(p) > 0 && !(player.getInventory().containsItem(option.getTool()) || player.getEquipment().containsItem(option.getTool()))) { - return true; + if (checkFish(p) > 0 && !(player.inventory.containsItem( + option.tool + ) || player.equipment.containsItem(option.tool)) + ) { + return true } - if (checkFish(p) > 2 && !(player.getInventory().containsItem(option.getTool()) || player.getEquipment().containsItem(option.getTool()))) { - return true; + if (checkFish(p) > 2 && !(player.inventory.containsItem( + option.tool + ) || player.equipment.containsItem(option.tool)) + ) { + return true } } - return false; + return false } - private int getCatchAnimationAndLoot(Player p) { - int fishingFor = checkFish(p); - switch (node.getId()) { - case 324: - switch (fishingFor) { - case 1: - p.animate(new Animation(6710)); - p.getSkills().addExperience(Skills.FISHING, 80); - p.getSkills().addExperience(Skills.STRENGTH, 8); - p.getInventory().add(new Item(359)); - break; - case 2: - case 3: - if (RandomFunction.random(1) == 1) { - p.animate(new Animation(6710)); - p.getSkills().addExperience(Skills.FISHING, 80); - p.getSkills().addExperience(Skills.STRENGTH, 8); - p.getInventory().add(new Item(359)); - } else { - p.animate(new Animation(6707)); - p.getSkills().addExperience(Skills.FISHING, 100); - p.getSkills().addExperience(Skills.STRENGTH, 10); - p.getInventory().add(new Item(371)); - } + private fun getCatchAnimationAndLoot(p: Player): Int { + val fishingFor = checkFish(p) + when (node!!.id) { + 324 -> when (fishingFor) { + 1 -> { + p.animate(Animation(6710)) + p.skills.addExperience(Skills.FISHING, 80.0) + p.skills.addExperience(Skills.STRENGTH, 8.0) + p.inventory.add(Item(359)) } - break; - case 313: - p.animate(new Animation(6705)); - p.getSkills().addExperience(Skills.FISHING, 110); - p.getSkills().addExperience(Skills.STRENGTH, 11); - p.getInventory().add(new Item(383)); - break; - } - return 0; - } - - public static int checkFish(Player p) { - if (p.getSkills().getLevel(Skills.FISHING) >= 55 && p.getSkills().getLevel(Skills.STRENGTH) >= 35) { - if (p.getSkills().getLevel(Skills.FISHING) >= 70 && p.getSkills().getLevel(Skills.STRENGTH) >= 50) { - if (p.getSkills().getLevel(Skills.FISHING) >= 96 && p.getSkills().getLevel(Skills.STRENGTH) >= 76) { - return 3; + 2, 3 -> if (RandomFunction.random(1) == 1) { + p.animate(Animation(6710)) + p.skills.addExperience(Skills.FISHING, 80.0) + p.skills.addExperience(Skills.STRENGTH, 8.0) + p.inventory.add(Item(359)) + } else { + p.animate(Animation(6707)) + p.skills.addExperience(Skills.FISHING, 100.0) + p.skills.addExperience(Skills.STRENGTH, 10.0) + p.inventory.add(Item(371)) } - return 2; } - return 1; + 313 -> { + p.animate(Animation(6705)) + p.skills.addExperience(Skills.FISHING, 110.0) + p.skills.addExperience(Skills.STRENGTH, 11.0) + p.inventory.add(Item(383)) + } } - return 0; + return 0 } /** * Checks if they have the barb tail harpoon. * - * @return {@code True} if so. + * @return `True` if so. */ - private boolean hasBarbTail() { + private fun hasBarbTail(): Boolean { if (option == FishingOption.HARPOON) { - if (player.getInventory().containsItem(FishingOption.BARB_HARPOON.getTool()) || player.getEquipment().containsItem(FishingOption.BARB_HARPOON.getTool())) { - return true; + if (player.inventory.containsItem(FishingOption.BARB_HARPOON.tool) || player.equipment.containsItem( + FishingOption.BARB_HARPOON.tool + ) + ) { + return true } } - return false; + return false } - @Override - public void message(int type) { - switch (type) { - case 0: - player.getPacketDispatch().sendMessage(option.getStartMessage()); - break; - case 2: - player.getPacketDispatch().sendMessage(fish == Fish.ANCHOVIE || fish == Fish.SHRIMP ? "You catch some " + fish.getItem().getName().toLowerCase().replace("raw", "").trim() + "." : "You catch a " + fish.getItem().getName().toLowerCase().replace("raw", "").trim() + "."); - if (player.getInventory().freeSlots() == 0) { - player.getDialogueInterpreter().sendDialogue("You don't have enough space in your inventory."); - stop(); + override fun message(type: Int) { + when (type) { + 0 -> player.packetDispatch.sendMessage(option!!.startMessage) + 2 -> { + player.packetDispatch.sendMessage( + if (fish == Fish.ANCHOVIE || fish == Fish.SHRIMP) "You catch some " + fish!!.item.name.toLowerCase() + .replace("raw", "") + .trim { it <= ' ' } + "." else "You catch a " + fish!!.item.name.toLowerCase() + .replace("raw", "").trim { it <= ' ' } + ".") + if (player.inventory.freeSlots() == 0) { + player.dialogueInterpreter.sendDialogue("You don't have enough space in your inventory.") + stop() } - break; + } } } /** * Method used to check if the catch was a success. * - * @return True if so. + * @return `True` if so. */ - private boolean success() { - if (getDelay() == 1) { - return false; + private fun success(): Boolean { + if (delay == 1) { + return false + } + val level = 1 + player.skills.getLevel(Skills.FISHING) + player.familiarManager.getBoost(Skills.FISHING) + val hostRatio = Math.random() * fish!!.level + val clientRatio = Math.random() * (level * 1.25 - fish!!.level) + return hostRatio < clientRatio + } + + companion object { + fun checkFish(p: Player): Int { + return if (p.skills.getLevel(Skills.FISHING) >= 55 && p.skills.getLevel(Skills.STRENGTH) >= 35) { + if (p.skills.getLevel(Skills.FISHING) >= 70 && p.skills.getLevel(Skills.STRENGTH) >= 50) { + if (p.skills.getLevel(Skills.FISHING) >= 96 && p.skills.getLevel(Skills.STRENGTH) >= 76) { + 3 + } else 2 + } else 1 + } else 0 + } + } + + /** + * Constructs a new `FishingPulse` `Object`. + * + * @param player the player. + * @param npc the fishing spot NPC. + * @param option The fishing option. + */ + init { + if (option != null) { + fish = option.getRandomFish(player) } - int level = 1 + player.getSkills().getLevel(Skills.FISHING) + player.getFamiliarManager().getBoost(Skills.FISHING); - double hostRatio = Math.random() * fish.getLevel(); - double clientRatio = Math.random() * ((level * 1.25 - fish.getLevel())); - return hostRatio < clientRatio; } } \ No newline at end of file diff --git a/Server/src/main/kotlin/rs09/game/node/entity/skill/fishing/barbfishing/BarbFishInteractionListeners.kt b/Server/src/main/kotlin/rs09/game/node/entity/skill/gather/fishing/barbfishing/BarbFishInteractionListeners.kt similarity index 94% rename from Server/src/main/kotlin/rs09/game/node/entity/skill/fishing/barbfishing/BarbFishInteractionListeners.kt rename to Server/src/main/kotlin/rs09/game/node/entity/skill/gather/fishing/barbfishing/BarbFishInteractionListeners.kt index bbe09200e..23709d494 100644 --- a/Server/src/main/kotlin/rs09/game/node/entity/skill/fishing/barbfishing/BarbFishInteractionListeners.kt +++ b/Server/src/main/kotlin/rs09/game/node/entity/skill/gather/fishing/barbfishing/BarbFishInteractionListeners.kt @@ -1,4 +1,4 @@ -package rs09.game.node.entity.skill.fishing.barbfishing +package rs09.game.node.entity.skill.gather.fishing.barbfishing import core.game.node.item.Item import rs09.game.interaction.InteractionListener diff --git a/Server/src/main/kotlin/rs09/game/node/entity/skill/fishing/barbfishing/BarbFishingPulse.kt b/Server/src/main/kotlin/rs09/game/node/entity/skill/gather/fishing/barbfishing/BarbFishingPulse.kt similarity index 98% rename from Server/src/main/kotlin/rs09/game/node/entity/skill/fishing/barbfishing/BarbFishingPulse.kt rename to Server/src/main/kotlin/rs09/game/node/entity/skill/gather/fishing/barbfishing/BarbFishingPulse.kt index 2c0ab0a0f..9b5206b31 100644 --- a/Server/src/main/kotlin/rs09/game/node/entity/skill/fishing/barbfishing/BarbFishingPulse.kt +++ b/Server/src/main/kotlin/rs09/game/node/entity/skill/gather/fishing/barbfishing/BarbFishingPulse.kt @@ -1,4 +1,4 @@ -package rs09.game.node.entity.skill.fishing.barbfishing +package rs09.game.node.entity.skill.gather.fishing.barbfishing import core.game.node.entity.npc.NPC import core.game.node.entity.player.Player diff --git a/Server/src/main/kotlin/rs09/game/node/entity/skill/fishing/barbfishing/FishCuttingPulse.kt b/Server/src/main/kotlin/rs09/game/node/entity/skill/gather/fishing/barbfishing/FishCuttingPulse.kt similarity index 95% rename from Server/src/main/kotlin/rs09/game/node/entity/skill/fishing/barbfishing/FishCuttingPulse.kt rename to Server/src/main/kotlin/rs09/game/node/entity/skill/gather/fishing/barbfishing/FishCuttingPulse.kt index e47656a75..64563b8bd 100644 --- a/Server/src/main/kotlin/rs09/game/node/entity/skill/fishing/barbfishing/FishCuttingPulse.kt +++ b/Server/src/main/kotlin/rs09/game/node/entity/skill/gather/fishing/barbfishing/FishCuttingPulse.kt @@ -1,4 +1,4 @@ -package rs09.game.node.entity.skill.fishing.barbfishing +package rs09.game.node.entity.skill.gather.fishing.barbfishing import core.game.node.entity.player.Player import core.game.node.entity.skill.Skills diff --git a/Server/src/main/kotlin/rs09/game/node/entity/skill/fishing/barbfishing/KnifeWithFish.kt b/Server/src/main/kotlin/rs09/game/node/entity/skill/gather/fishing/barbfishing/KnifeWithFish.kt similarity index 91% rename from Server/src/main/kotlin/rs09/game/node/entity/skill/fishing/barbfishing/KnifeWithFish.kt rename to Server/src/main/kotlin/rs09/game/node/entity/skill/gather/fishing/barbfishing/KnifeWithFish.kt index 2d554bf72..9f089a9dd 100644 --- a/Server/src/main/kotlin/rs09/game/node/entity/skill/fishing/barbfishing/KnifeWithFish.kt +++ b/Server/src/main/kotlin/rs09/game/node/entity/skill/gather/fishing/barbfishing/KnifeWithFish.kt @@ -1,4 +1,4 @@ -package rs09.game.node.entity.skill.fishing.barbfishing +package rs09.game.node.entity.skill.gather.fishing.barbfishing import core.game.interaction.NodeUsageEvent import core.game.interaction.UseWithHandler diff --git a/Server/src/main/kotlin/rs09/game/node/entity/skill/fishing/barbfishing/SpotManager.kt b/Server/src/main/kotlin/rs09/game/node/entity/skill/gather/fishing/barbfishing/SpotManager.kt similarity index 89% rename from Server/src/main/kotlin/rs09/game/node/entity/skill/fishing/barbfishing/SpotManager.kt rename to Server/src/main/kotlin/rs09/game/node/entity/skill/gather/fishing/barbfishing/SpotManager.kt index 0039d76f2..b81234d45 100644 --- a/Server/src/main/kotlin/rs09/game/node/entity/skill/fishing/barbfishing/SpotManager.kt +++ b/Server/src/main/kotlin/rs09/game/node/entity/skill/gather/fishing/barbfishing/SpotManager.kt @@ -1,4 +1,4 @@ -package rs09.game.node.entity.skill.fishing.barbfishing +package rs09.game.node.entity.skill.gather.fishing.barbfishing import core.game.node.entity.npc.NPC import core.game.world.map.Location @@ -7,8 +7,8 @@ import core.plugin.CorePluginTypes.Managers import core.plugin.Initializable import core.plugin.Plugin import core.tools.RandomFunction -import rs09.game.node.entity.skill.fishing.barbfishing.SpotManager.Companion.locations -import rs09.game.node.entity.skill.fishing.barbfishing.SpotManager.Companion.usedLocations +import rs09.game.node.entity.skill.gather.fishing.barbfishing.SpotManager.Companion.locations +import rs09.game.node.entity.skill.gather.fishing.barbfishing.SpotManager.Companion.usedLocations @Initializable /** diff --git a/Server/src/main/kotlin/rs09/game/system/config/ShopParser.kt b/Server/src/main/kotlin/rs09/game/system/config/ShopParser.kt index c11d4da9c..3a0768eeb 100644 --- a/Server/src/main/kotlin/rs09/game/system/config/ShopParser.kt +++ b/Server/src/main/kotlin/rs09/game/system/config/ShopParser.kt @@ -1,13 +1,13 @@ package rs09.game.system.config -import rs09.ServerConstants import core.game.content.global.shop.Shop import core.game.node.entity.player.Player import core.game.node.item.Item -import rs09.game.system.SystemLogger import org.json.simple.JSONArray import org.json.simple.JSONObject import org.json.simple.parser.JSONParser +import rs09.ServerConstants +import rs09.game.system.SystemLogger import java.io.FileReader class ShopParser{ @@ -29,7 +29,7 @@ class ShopParser{ reader = FileReader(ServerConstants.CONFIG_PATH + "shops.json") val configlist = parser.parse(reader) as JSONArray for(config in configlist){ - var shop: Shop? = null + var shop: Shop? val e = config as JSONObject val id = e["id"].toString().toInt() val title = e["title"].toString()