diff --git a/Server/src/main/java/core/game/content/activity/duel/DuelSession.java b/Server/src/main/java/core/game/content/activity/duel/DuelSession.java index 5bb2a813d..1897ad460 100644 --- a/Server/src/main/java/core/game/content/activity/duel/DuelSession.java +++ b/Server/src/main/java/core/game/content/activity/duel/DuelSession.java @@ -1,5 +1,6 @@ package core.game.content.activity.duel; +import api.ContentAPI; import core.game.component.CloseEvent; import core.game.component.Component; import core.game.component.ComponentDefinition; @@ -16,6 +17,7 @@ import core.game.node.item.Item; import core.game.system.monitor.PlayerMonitor; import core.plugin.Plugin; import core.tools.RandomFunction; +import kotlin.Unit; import rs09.game.content.global.action.EquipHandler; import rs09.game.system.config.ItemConfigParser; @@ -567,14 +569,10 @@ public final class DuelSession extends ComponentPlugin { amount = c.getAmount(c.get(slot)); break; case 234: - player.setAttribute("runscript", new RunScript() { - @Override - public boolean handle() { - c.withdraw(slot, (int) getValue()); - return true; - } + ContentAPI.sendInputDialogue(player, true, "Enter the amount:", (value) -> { + c.withdraw(slot, (int) value); + return Unit.INSTANCE; }); - player.getDialogueInterpreter().sendInput(false, "Enter the amount:"); break; } c.withdraw(slot, amount); @@ -688,14 +686,10 @@ public final class DuelSession extends ComponentPlugin { c1.offer(slot, player.getInventory().getAmount(player.getInventory().get(slot).getId())); break; case 234: - player.setAttribute("runscript", new RunScript() { - @Override - public boolean handle() { - c1.offer(slot, (int) getValue()); - return true; - } + ContentAPI.sendInputDialogue(player, true, "Enter the amount:", (value) -> { + c1.offer(slot, (int) value); + return Unit.INSTANCE; }); - player.getDialogueInterpreter().sendInput(false, "Enter the amount:"); break; case 9: player.getPacketDispatch().sendMessage(player.getInventory().get(slot).getDefinition().getExamine()); diff --git a/Server/src/main/java/core/game/content/activity/partyroom/PartyRoomPlugin.java b/Server/src/main/java/core/game/content/activity/partyroom/PartyRoomPlugin.java index 6ce6fc1c0..bae49863e 100644 --- a/Server/src/main/java/core/game/content/activity/partyroom/PartyRoomPlugin.java +++ b/Server/src/main/java/core/game/content/activity/partyroom/PartyRoomPlugin.java @@ -5,6 +5,7 @@ import java.util.HashMap; import java.util.List; import java.util.Map; +import api.ContentAPI; import core.cache.def.impl.ObjectDefinition; import core.game.component.Component; import core.game.component.ComponentDefinition; @@ -21,6 +22,7 @@ import core.game.node.item.Item; import core.game.node.object.Scenery; import core.game.node.object.SceneryBuilder; import core.game.system.task.Pulse; +import kotlin.Unit; import rs09.game.world.GameWorld; import core.game.world.map.Location; import core.game.world.update.flag.context.Animation; @@ -315,15 +317,10 @@ public final class PartyRoomPlugin extends OptionHandler { viewer.getContainer().addItem(slot, ammount); break; case 234: - player.setAttribute("runscript", new RunScript() { - @Override - public boolean handle() { - int ammount = (int) value; - viewer.getContainer().addItem(slot, ammount); - return false; - } + ContentAPI.sendInputDialogue(player, true, "Enter the amount:", (value) -> { + viewer.getContainer().addItem(slot, (int) value); + return Unit.INSTANCE; }); - player.getDialogueInterpreter().sendInput(false, "Enter the amount."); break; } break; @@ -351,15 +348,10 @@ public final class PartyRoomPlugin extends OptionHandler { viewer.getContainer().takeItem(slot, ammount); break; case 234: - player.setAttribute("runscript", new RunScript() { - @Override - public boolean handle() { - int ammount = (int) value; - viewer.getContainer().takeItem(slot, ammount); - return false; - } + ContentAPI.sendInputDialogue(player, true, "Enter the amount:", (value) -> { + viewer.getContainer().takeItem(slot, (int) value); + return Unit.INSTANCE; }); - player.getDialogueInterpreter().sendInput(false, "Enter the amount."); break; } break; diff --git a/Server/src/main/java/core/game/content/dialogue/DialogueInterpreter.java b/Server/src/main/java/core/game/content/dialogue/DialogueInterpreter.java index 93250ec76..efbd1c487 100644 --- a/Server/src/main/java/core/game/content/dialogue/DialogueInterpreter.java +++ b/Server/src/main/java/core/game/content/dialogue/DialogueInterpreter.java @@ -18,6 +18,7 @@ import core.plugin.PluginManifest; import core.plugin.PluginType; import rs09.game.content.dialogue.DialogueFile; import rs09.game.content.dialogue.EmptyPlugin; +import rs09.game.system.SystemLogger; import rs09.game.system.config.ItemConfigParser; import java.util.ArrayList; diff --git a/Server/src/main/java/core/game/content/dialogue/EnchantTiaraDialogue.java b/Server/src/main/java/core/game/content/dialogue/EnchantTiaraDialogue.java index ebfbdaa44..8dc1e06f1 100644 --- a/Server/src/main/java/core/game/content/dialogue/EnchantTiaraDialogue.java +++ b/Server/src/main/java/core/game/content/dialogue/EnchantTiaraDialogue.java @@ -1,5 +1,6 @@ package core.game.content.dialogue; +import api.ContentAPI; import core.plugin.Initializable; import core.game.node.entity.skill.runecrafting.Altar; import core.game.node.entity.skill.runecrafting.EnchantTiaraPulse; @@ -8,6 +9,7 @@ import core.game.interaction.NodeUsageEvent; import core.game.node.entity.player.Player; import core.game.node.entity.player.link.RunScript; import core.game.node.object.Scenery; +import kotlin.Unit; /** * Represents the enchant tiara dialogue. @@ -75,15 +77,10 @@ public final class EnchantTiaraDialogue extends DialoguePlugin { amt = 5; break; case 4: - player.setAttribute("runscript", new RunScript() { - @Override - public boolean handle() { - int ammount = (int) value; - player.getPulseManager().run(new EnchantTiaraPulse(player, event.getUsedItem(), (Talisman.forItem(event.getUsedItem()).getTiara()), ammount)); - return false; - } + ContentAPI.sendInputDialogue(player, true, "Enter the amount:", (value) -> { + player.getPulseManager().run(new EnchantTiaraPulse(player, event.getUsedItem(), Talisman.forItem(event.getUsedItem()).getTiara(), (int) value)); + return Unit.INSTANCE; }); - player.getDialogueInterpreter().sendInput(false, "Enter the amount"); return true; case 3: amt = player.getInventory().getAmount(event.getUsedItem()); diff --git a/Server/src/main/java/core/game/content/dialogue/LeatherCraftDialogue.java b/Server/src/main/java/core/game/content/dialogue/LeatherCraftDialogue.java index bbeb23833..b1974676b 100644 --- a/Server/src/main/java/core/game/content/dialogue/LeatherCraftDialogue.java +++ b/Server/src/main/java/core/game/content/dialogue/LeatherCraftDialogue.java @@ -1,7 +1,9 @@ package core.game.content.dialogue; +import api.ContentAPI; import core.cache.def.impl.ItemDefinition; import core.game.component.Component; +import kotlin.Unit; import rs09.game.system.SystemLogger; import core.game.node.entity.skill.crafting.armour.DragonCraftPulse; import core.game.node.entity.skill.crafting.armour.HardCraftPulse; @@ -109,15 +111,10 @@ public final class LeatherCraftDialogue extends DialoguePlugin { amt = 5; break; case 3: - player.setAttribute("runscript", new RunScript() { - @Override - public boolean handle() { - int ammount = (int) value; - player.getPulseManager().run(new HardCraftPulse(player, null, ammount)); - return false; - } + ContentAPI.sendInputDialogue(player, true, "Enter the amount:", (value) -> { + player.getPulseManager().run(new HardCraftPulse(player, null, (int) value)); + return Unit.INSTANCE; }); - player.getDialogueInterpreter().sendInput(false, "Enter the amount"); return true; case 2: amt = player.getInventory().getAmount(new Item(LeatherCrafting.HARD_LEATHER)); @@ -208,14 +205,10 @@ public final class LeatherCraftDialogue extends DialoguePlugin { if (hidee == null) { return false; } - player.setAttribute("runscript", new RunScript() { - @Override - public boolean handle() { - player.getPulseManager().run(new DragonCraftPulse(player, null, hidee, (int) getValue())); - return true; - } + ContentAPI.sendInputDialogue(player, true, "Enter the amount:", (value) -> { + player.getPulseManager().run(new DragonCraftPulse(player, null, hidee, (int) value)); + return Unit.INSTANCE; }); - player.getDialogueInterpreter().sendInput(false, "Enter amount:"); return true; } if (hide == null) { diff --git a/Server/src/main/java/core/game/content/dialogue/SkillDialoguePlugin.java b/Server/src/main/java/core/game/content/dialogue/SkillDialoguePlugin.java index a271db6b4..4b6d4ff2b 100644 --- a/Server/src/main/java/core/game/content/dialogue/SkillDialoguePlugin.java +++ b/Server/src/main/java/core/game/content/dialogue/SkillDialoguePlugin.java @@ -1,8 +1,10 @@ package core.game.content.dialogue; +import api.ContentAPI; import core.game.node.entity.player.Player; import core.game.node.entity.player.link.RunScript; import core.plugin.Initializable; +import kotlin.Unit; import rs09.game.content.dialogue.SkillDialogueHandler; /** @@ -56,13 +58,9 @@ public class SkillDialoguePlugin extends DialoguePlugin { if (amount != -1) { handler.create(amount, index); } else { - player.getDialogueInterpreter().sendInput(false, "Enter the amount:"); - player.setAttribute("runscript", new RunScript() { - @Override - public boolean handle() { - handler.create((int) getValue(), index); - return true; - } + ContentAPI.sendInputDialogue(player, true, "Enter the amount:", (value) -> { + handler.create((int) value, index); + return Unit.INSTANCE; }); return true; } diff --git a/Server/src/main/java/core/game/interaction/city/WizardTowerPlugin.java b/Server/src/main/java/core/game/interaction/city/WizardTowerPlugin.java index 529cb0a07..b3305e2d6 100644 --- a/Server/src/main/java/core/game/interaction/city/WizardTowerPlugin.java +++ b/Server/src/main/java/core/game/interaction/city/WizardTowerPlugin.java @@ -1,5 +1,6 @@ package core.game.interaction.city; +import api.ContentAPI; import core.cache.def.impl.NPCDefinition; import core.cache.def.impl.ObjectDefinition; import core.game.component.Component; @@ -35,6 +36,7 @@ import core.plugin.Initializable; import core.plugin.Plugin; import core.tools.RandomFunction; import core.tools.StringUtils; +import kotlin.Unit; import rs09.game.content.global.travel.EssenceTeleport; import rs09.game.world.GameWorld; import rs09.plugin.PluginManager; @@ -686,14 +688,9 @@ public final class WizardTowerPlugin extends OptionHandler { } final int amount = getAmt(buttonId); if (amount == -1) {// rscript. - player.getDialogueInterpreter().sendInput(false, "Enter amount:"); - player.setAttribute("runscript", new RunScript() { - @Override - public boolean handle() { - final int amt = (int) getValue(); - make(bark, amt); - return true; - } + ContentAPI.sendInputDialogue(player, true, "Enter the amount:", (value) -> { + make(bark, (int) value); + return Unit.INSTANCE; }); return true; } diff --git a/Server/src/main/java/core/game/interaction/inter/ClanInterfacePlugin.java b/Server/src/main/java/core/game/interaction/inter/ClanInterfacePlugin.java index 4c281ce87..ceb3e8826 100644 --- a/Server/src/main/java/core/game/interaction/inter/ClanInterfacePlugin.java +++ b/Server/src/main/java/core/game/interaction/inter/ClanInterfacePlugin.java @@ -1,5 +1,6 @@ package core.game.interaction.inter; +import api.ContentAPI; import core.game.component.Component; import core.game.component.ComponentDefinition; import core.game.component.ComponentPlugin; @@ -12,6 +13,7 @@ import core.net.amsc.WorldCommunicator; import core.plugin.Initializable; import core.plugin.Plugin; import core.tools.StringUtils; +import kotlin.Unit; /** * Represents the plugin used to handle the clan interfaces. @@ -93,27 +95,23 @@ public final class ClanInterfacePlugin extends ComponentPlugin { clan.clean(true); break; default: - player.setAttribute("runscript", new RunScript() { - @Override - public boolean handle() { - String name = StringUtils.formatDisplayName((String) value); - player.getPacketDispatch().sendString(name, 590, 22);//30 - if (WorldCommunicator.isEnabled()) { - MSPacketRepository.sendClanRename(player, name); - clan.setName(name); - return true; - } - if (clan.getName().equals("Chat disabled")) { - player.getPacketDispatch().sendMessage("Your clan channel has now been enabled!"); - player.getPacketDispatch().sendMessage("Join your channel by clicking 'Join Chat' and typing: " + player.getUsername()); - } + ContentAPI.sendInputDialogue(player, false, "Enter clan prefix:", (value) -> { + String name = StringUtils.formatDisplayName((String) value); + ContentAPI.setInterfaceText(player, name, 590, 22); + if(WorldCommunicator.isEnabled()){ + MSPacketRepository.sendClanRename(player, name); clan.setName(name); - player.getCommunication().setClanName(name); - clan.update(); - return true; + return Unit.INSTANCE; } + if (clan.getName().equals("Chat disabled")) { + player.getPacketDispatch().sendMessage("Your clan channel has now been enabled!"); + player.getPacketDispatch().sendMessage("Join your channel by clicking 'Join Chat' and typing: " + player.getUsername()); + } + clan.setName(name); + player.getCommunication().setClanName(name); + clan.update(); + return Unit.INSTANCE; }); - player.getDialogueInterpreter().sendInput(true, "Enter clan prefix:"); break; } break; diff --git a/Server/src/main/java/core/game/interaction/inter/GlassInterface.java b/Server/src/main/java/core/game/interaction/inter/GlassInterface.java index 1909fee9a..7d5beec10 100644 --- a/Server/src/main/java/core/game/interaction/inter/GlassInterface.java +++ b/Server/src/main/java/core/game/interaction/inter/GlassInterface.java @@ -1,5 +1,6 @@ package core.game.interaction.inter; +import api.ContentAPI; import core.game.component.Component; import core.game.component.ComponentDefinition; import core.game.component.ComponentPlugin; @@ -12,6 +13,7 @@ import core.game.system.task.Pulse; import core.game.world.update.flag.context.Animation; import core.plugin.Initializable; import core.plugin.Plugin; +import kotlin.Unit; /** * Represents the glass making interface plugin. @@ -72,15 +74,10 @@ public final class GlassInterface extends ComponentPlugin { real = p.getInventory().getAmount(MOLTEN_GLASS); break; case 211: - p.setAttribute("runscript", new RunScript() { - @Override - public boolean handle() { - int ammount = (int) value; - make(p, def, ammount); - return true; - } + ContentAPI.sendInputDialogue(p, true, "Enter the amount:", (value) -> { + make(p, def, (int) value); + return Unit.INSTANCE; }); - p.getDialogueInterpreter().sendInput(false, "Enter the amount."); break; } if (opcode == 211) { diff --git a/Server/src/main/java/core/game/interaction/inter/SilverInterface.java b/Server/src/main/java/core/game/interaction/inter/SilverInterface.java deleted file mode 100644 index 7265c8ec9..000000000 --- a/Server/src/main/java/core/game/interaction/inter/SilverInterface.java +++ /dev/null @@ -1,122 +0,0 @@ -package core.game.interaction.inter; - -import core.cache.def.impl.ItemDefinition; -import core.game.component.Component; -import core.game.component.ComponentDefinition; -import core.game.component.ComponentPlugin; -import core.game.node.entity.player.link.diary.DiaryType; -import core.game.world.map.Location; -import core.plugin.Initializable; -import core.game.node.entity.skill.Skills; -import core.game.node.entity.skill.crafting.SilverProduct; -import core.game.node.entity.player.Player; -import core.game.node.entity.player.link.RunScript; -import core.game.node.item.Item; -import core.game.system.task.Pulse; -import rs09.game.world.GameWorld; -import core.game.world.update.flag.context.Animation; -import core.plugin.Plugin; - -/** - * Represents the silver crafting making interface. - * @author 'Vexia - */ -@Initializable -public final class SilverInterface extends ComponentPlugin { - - /** - * Represents the silver bar item. - */ - private static final Item SILVER_BAR = new Item(2355); - - @Override - public Plugin newInstance(Object arg) throws Throwable { - ComponentDefinition.put(438, this); - return this; - } - - @Override - public boolean handle(final Player p, Component component, int opcode, int button, int slot, int itemId) { - final SilverProduct silver = SilverProduct.forId(button); - if (silver == null) { - return true; - } - if (!p.getInventory().contains(silver.getNeeded(), 1)) { - p.getPacketDispatch().sendMessage("You need a " + ItemDefinition.forId(silver.getNeeded()).getName().toLowerCase() + " to make this item."); - return true; - } - if (silver == SilverProduct.SILVTHRIL_ROD) { - p.getPacketDispatch().sendMessage("You can't do that yet."); - return true; - } - if (p.getSkills().getLevel(Skills.CRAFTING) < silver.getLevel()) { - p.getPacketDispatch().sendMessage("You need a crafting level of " + silver.getLevel() + " to make this."); - } - int amt = -1; - switch (opcode) { - case 155: - amt = 1; - break; - case 196: - amt = 5; - break; - case 124: - amt = p.getInventory().getAmount(new Item(2355)); - break; - case 199: - p.setAttribute("runscript", new RunScript() { - @Override - public boolean handle() { - int ammount = (int) value; - make(p, silver, ammount); - return true; - } - }); - p.getDialogueInterpreter().sendInput(false, "Enter the amount."); - return true; - } - make(p, silver, amt); - return true; - } - - private void make(final Player player, final SilverProduct def, final int ammount) { - if (!player.getInventory().containsItem(SILVER_BAR)) { - return; - } - player.getInterfaceManager().close(); - GameWorld.getPulser().submit(new Pulse(1, player) { - int amt = ammount; - - @Override - public boolean pulse() { - if (amt < 1) { - return true; - } - if (!player.getInventory().contains(def.getNeeded(), 1)) { - return true; - } - if (player.getInventory().containsItem(SILVER_BAR) && player.getInventory().contains(def.getNeeded(), 1)) { - player.animate(new Animation(899)); - if (player.getInventory().remove(SILVER_BAR)) { - player.getInventory().add(new Item(def.getProduct(), def == SilverProduct.SILVER_BOLTS ? 10 : 1)); - player.getSkills().addExperience(Skills.CRAFTING, def.getExp(), true); - } - - // Craft a holy symbol in the Lumbridge furnace - if (def == SilverProduct.UNBLESSED && player.getLocation().withinDistance(Location.create(3226, 3254, 0))) { - player.getAchievementDiaryManager().finishTask(player, DiaryType.LUMBRIDGE, 2, 8); - } - } else { - return true; - } - amt--; - return false; - } - - @Override - public void stop() { - player.animate(new Animation(-1)); - } - }); - } -} diff --git a/Server/src/main/java/core/game/interaction/item/withitem/FruitCuttingPlugin.java b/Server/src/main/java/core/game/interaction/item/withitem/FruitCuttingPlugin.java index f8ac19e11..cab2950db 100644 --- a/Server/src/main/java/core/game/interaction/item/withitem/FruitCuttingPlugin.java +++ b/Server/src/main/java/core/game/interaction/item/withitem/FruitCuttingPlugin.java @@ -1,7 +1,9 @@ package core.game.interaction.item.withitem; +import api.ContentAPI; import core.game.component.Component; import core.plugin.Initializable; +import kotlin.Unit; import org.rs09.consts.Items; import core.game.content.dialogue.DialoguePlugin; import core.game.interaction.NodeUsageEvent; @@ -220,15 +222,10 @@ public final class FruitCuttingPlugin extends UseWithHandler { amount = 5; break; case 4: - player.setAttribute("runscript", new RunScript() { - @Override - public boolean handle() { - int ammount = (int) value; - cut(player, ammount, slice); - return false; - } + ContentAPI.sendInputDialogue(player, true, "Enter the amount:", (value) -> { + cut(player, (int) value, slice); + return Unit.INSTANCE; }); - player.getDialogueInterpreter().sendInput(false, "Enter the amount"); return true; case 3: amount = player.getInventory().getAmount(fruit.getBase()); diff --git a/Server/src/main/java/core/game/interaction/npc/ZaffPlugin.java b/Server/src/main/java/core/game/interaction/npc/ZaffPlugin.java index 356f5b1ea..757f2dfac 100644 --- a/Server/src/main/java/core/game/interaction/npc/ZaffPlugin.java +++ b/Server/src/main/java/core/game/interaction/npc/ZaffPlugin.java @@ -325,7 +325,7 @@ public final class ZaffPlugin extends OptionHandler { break; case 1: end(); - player.setAttribute("runscript", new RunScript() { + /*player.setAttribute("runscript", new RunScript() { @Override public boolean handle() { int amt = (int) value; @@ -357,7 +357,8 @@ public final class ZaffPlugin extends OptionHandler { } }); interpreter.sendInput(false, "Zaff has " + ammount + " battlestaves..."); - break; +*/ break; + //TODO: Come back and fix this later when achievement diaries can actually be completed kekkekekeke case 2: interpreter.sendDialogues(player, FacialExpression.HALF_GUILTY, "Oh, okay then. I'll try again another time."); stage = 3; diff --git a/Server/src/main/java/core/game/interaction/object/BankingPlugin.java b/Server/src/main/java/core/game/interaction/object/BankingPlugin.java index 8dcace440..8650574d4 100644 --- a/Server/src/main/java/core/game/interaction/object/BankingPlugin.java +++ b/Server/src/main/java/core/game/interaction/object/BankingPlugin.java @@ -1,5 +1,6 @@ package core.game.interaction.object; +import api.ContentAPI; import core.cache.def.impl.NPCDefinition; import core.cache.def.impl.ObjectDefinition; import core.game.component.CloseEvent; @@ -29,6 +30,7 @@ import core.game.world.map.RegionManager; import core.game.world.update.flag.context.Animation; import core.plugin.Initializable; import core.plugin.Plugin; +import kotlin.Unit; import rs09.game.ge.GrandExchangeOffer; import rs09.game.world.GameWorld; @@ -370,16 +372,11 @@ public final class BankingPlugin extends OptionHandler { amount = p.getBank().getLastAmountX(); break; case 234: - p.setAttribute("runscript", new RunScript() { - @Override - public boolean handle() { - int amount = (int) value; - p.getBank().takeItem(slot, amount); - p.getBank().updateLastAmountX(amount); - return true; - } + ContentAPI.sendInputDialogue(p, true, "Enter the amount:", (value) -> { + p.getBank().takeItem(slot, (int) value); + p.getBank().updateLastAmountX((int) value); + return Unit.INSTANCE; }); - p.getDialogueInterpreter().sendInput(false, "Enter the amount."); break; case 9: p.sendMessage(p.getBank().get(slot).getDefinition().getExamine()); @@ -520,16 +517,11 @@ public final class BankingPlugin extends OptionHandler { }); return true; case 234: - p.setAttribute("runscript", new RunScript() { - @Override - public boolean handle() { - int ammount = (int) value; - p.getBank().addItem(slot, ammount); - InterfaceContainer.generateItems(p, p.getInventory().toArray(), new String[]{"Examine", "Deposit-X", "Deposit-All", "Deposit-10", "Deposit-5", "Deposit-1",}, 11, 15, 5, 7); - return false; - } + ContentAPI.sendInputDialogue(p, true, "Enter the amount:", (value) -> { + p.getBank().addItem(slot, (int) value); + InterfaceContainer.generateItems(p, p.getInventory().toArray(), new String[]{"Examine", "Deposit-X", "Deposit-All", "Deposit-10", "Deposit-5", "Deposit-1",}, 11, 15, 5, 7); + return Unit.INSTANCE; }); - p.getDialogueInterpreter().sendInput(false, "Enter the amount."); break; case 168: p.sendMessage(item.getDefinition().getExamine()); diff --git a/Server/src/main/java/core/game/interaction/object/SilverCastingInterfacePlugin.java b/Server/src/main/java/core/game/interaction/object/SilverCastingInterfacePlugin.java deleted file mode 100644 index 7ee5373eb..000000000 --- a/Server/src/main/java/core/game/interaction/object/SilverCastingInterfacePlugin.java +++ /dev/null @@ -1,64 +0,0 @@ -package core.game.interaction.object; - -import core.game.component.Component; -import core.game.interaction.NodeUsageEvent; -import core.game.interaction.UseWithHandler; -import core.game.node.entity.player.Player; -import core.plugin.Initializable; -import core.plugin.Plugin; - -/** - * @author 'Vexia - */ -@Initializable -public class SilverCastingInterfacePlugin extends UseWithHandler { - - public SilverCastingInterfacePlugin() { - super(2355); - } - - @Override - public boolean handle(NodeUsageEvent event) { - final Player player = event.getPlayer(); - event.getPlayer().getInterfaceManager().open(new Component(438)); - player.getPacketDispatch().sendItemOnInterface(1718, 1, 438, 17); - player.getPacketDispatch().sendItemOnInterface(1724, 1, 438, 24); - player.getPacketDispatch().sendItemOnInterface(2961, 1, 438, 31); - player.getPacketDispatch().sendItemOnInterface(4201, 1, 438, 38); - player.getPacketDispatch().sendItemOnInterface(5525, 1, 438, 45); - player.getPacketDispatch().sendItemOnInterface(7637, 1, 438, 53); - player.getPacketDispatch().sendItemOnInterface(6748, 1, 438, 60); - player.getPacketDispatch().sendItemOnInterface(9382, 10, 438, 67); - player.getPacketDispatch().sendItemOnInterface(13154, 10, 438, 74); - return false; - } - - @Override - public Plugin newInstance(Object arg) throws Throwable { - addHandler(2966, OBJECT_TYPE, this); - addHandler(3044, OBJECT_TYPE, this); - addHandler(3294, OBJECT_TYPE, this); - addHandler(4304, OBJECT_TYPE, this); - addHandler(6189, OBJECT_TYPE, this); - addHandler(11009, OBJECT_TYPE, this); - addHandler(11010, OBJECT_TYPE, this); - addHandler(11666, OBJECT_TYPE, this); - addHandler(12100, OBJECT_TYPE, this); - addHandler(12809, OBJECT_TYPE, this); - addHandler(18497, OBJECT_TYPE, this); - addHandler(18525, OBJECT_TYPE, this); - addHandler(18526, OBJECT_TYPE, this); - addHandler(21879, OBJECT_TYPE, this); - addHandler(22721, OBJECT_TYPE, this); - addHandler(26814, OBJECT_TYPE, this); - addHandler(28433, OBJECT_TYPE, this); - addHandler(28434, OBJECT_TYPE, this); - addHandler(30021, OBJECT_TYPE, this); - addHandler(30510, OBJECT_TYPE, this); - addHandler(36956, OBJECT_TYPE, this); - addHandler(37651, OBJECT_TYPE, this); - - return null; - } - -} diff --git a/Server/src/main/java/core/game/node/entity/skill/construction/PortalOptionPlugin.java b/Server/src/main/java/core/game/node/entity/skill/construction/PortalOptionPlugin.java index c2dc30e80..f2c38f85c 100644 --- a/Server/src/main/java/core/game/node/entity/skill/construction/PortalOptionPlugin.java +++ b/Server/src/main/java/core/game/node/entity/skill/construction/PortalOptionPlugin.java @@ -1,6 +1,7 @@ package core.game.node.entity.skill.construction; +import api.ContentAPI; import core.cache.def.impl.ObjectDefinition; import core.game.content.dialogue.DialogueInterpreter; import core.game.content.dialogue.DialoguePlugin; @@ -13,6 +14,7 @@ import core.plugin.Initializable; import core.plugin.Plugin; import core.plugin.PluginManifest; import core.plugin.PluginType; +import kotlin.Unit; import rs09.game.world.repository.Repository; import rs09.plugin.PluginManager; @@ -118,35 +120,31 @@ public final class PortalOptionPlugin extends OptionHandler { player.getHouseManager().enter(player, buttonId == 2, true); break; case 3: - player.getDialogueInterpreter().sendInput(true, "Enter friend's name:"); - player.setAttribute("runscript", new RunScript() { - @Override - public boolean handle() { - Player p = Repository.getPlayerByName((String) getValue()); - if (p == null || !p.isActive()) { - player.getPacketDispatch().sendMessage("This player is not online."); - return true; - } - if (p.getUsername().equals(player.getUsername())) { - player.getPacketDispatch().sendMessage("You aren't a friend of yourself!"); - return true; - } - if (!p.getHouseManager().isLoaded()) { - player.getPacketDispatch().sendMessage("This player is not at home right now."); - return true; - } - if (p.getHouseManager().isBuildingMode()) { - player.getPacketDispatch().sendMessage("This player is in building mode."); - return true; - } - if (p.getHouseManager().isLocked()) { - player.getPacketDispatch().sendMessage("The other player has locked their house."); - return true; - } - p.setAttribute("poh_owner", getValue()); - p.getHouseManager().enter(player, false, false); - return true; + ContentAPI.sendInputDialogue(player, false, "Enter friend's name:", (value) -> { + Player p = Repository.getPlayerByName((String) value); + if (p == null || !p.isActive()) { + player.getPacketDispatch().sendMessage("This player is not online."); + return Unit.INSTANCE; } + if (p.getUsername().equals(player.getUsername())) { + player.getPacketDispatch().sendMessage("You aren't a friend of yourself!"); + return Unit.INSTANCE; + } + if (!p.getHouseManager().isLoaded()) { + player.getPacketDispatch().sendMessage("This player is not at home right now."); + return Unit.INSTANCE; + } + if (p.getHouseManager().isBuildingMode()) { + player.getPacketDispatch().sendMessage("This player is in building mode."); + return Unit.INSTANCE; + } + if (p.getHouseManager().isLocked()) { + player.getPacketDispatch().sendMessage("The other player has locked their house."); + return Unit.INSTANCE; + } + p.setAttribute("poh_owner", (String) value); + p.getHouseManager().enter(player, false, false); + return Unit.INSTANCE; }); break; } diff --git a/Server/src/main/java/core/game/node/entity/skill/summoning/SummoningCreationPlugin.java b/Server/src/main/java/core/game/node/entity/skill/summoning/SummoningCreationPlugin.java index 0d608a0fa..182fbc9ac 100644 --- a/Server/src/main/java/core/game/node/entity/skill/summoning/SummoningCreationPlugin.java +++ b/Server/src/main/java/core/game/node/entity/skill/summoning/SummoningCreationPlugin.java @@ -1,5 +1,6 @@ package core.game.node.entity.skill.summoning; +import api.ContentAPI; import core.cache.def.impl.ItemDefinition; import core.game.component.Component; import core.game.component.ComponentDefinition; @@ -10,6 +11,7 @@ import core.game.node.entity.player.Player; import core.game.node.entity.player.link.RunScript; import core.plugin.Initializable; import core.plugin.Plugin; +import kotlin.Unit; import rs09.plugin.PluginManager; /** @@ -47,14 +49,10 @@ public final class SummoningCreationPlugin extends ComponentPlugin { SummoningCreator.create(player, getItemAmount(opcode), component.getId() == 669 ? SummoningPouch.forSlot(slot > 50 ? slot -1 : slot) : SummoningScroll.forId(slot > 50 ? slot -1 : slot)); break; case 234: - player.setAttribute("runscript", new RunScript() { - @Override - public boolean handle() { - SummoningCreator.create(player, (int) getValue(), component.getId() == 669 ? SummoningPouch.forSlot(slot > 50 ? slot -1 : slot) : SummoningScroll.forId(slot > 50 ? slot -1 : slot)); - return true; - } + ContentAPI.sendInputDialogue(player, true, "Enter the amount:", (value) -> { + SummoningCreator.create(player, (int) value, component.getId() == 669 ? SummoningPouch.forSlot(slot > 50 ? slot -1 : slot) : SummoningScroll.forId(slot > 50 ? slot -1 : slot)); + return Unit.INSTANCE; }); - player.getDialogueInterpreter().sendInput(false, "Enter the amount:"); return true; case 166: SummoningCreator.list(player, SummoningPouch.forSlot(slot > 50 ? slot -1 : slot)); diff --git a/Server/src/main/java/core/game/node/entity/skill/summoning/familiar/BurdenInterfacePlugin.java b/Server/src/main/java/core/game/node/entity/skill/summoning/familiar/BurdenInterfacePlugin.java index ade8f01dd..1863d441a 100644 --- a/Server/src/main/java/core/game/node/entity/skill/summoning/familiar/BurdenInterfacePlugin.java +++ b/Server/src/main/java/core/game/node/entity/skill/summoning/familiar/BurdenInterfacePlugin.java @@ -1,5 +1,6 @@ package core.game.node.entity.skill.summoning.familiar; +import api.ContentAPI; import core.game.component.Component; import core.game.component.ComponentDefinition; import core.game.component.ComponentPlugin; @@ -9,6 +10,7 @@ import core.game.node.entity.player.link.RunScript; import core.game.node.item.Item; import core.plugin.Initializable; import core.plugin.Plugin; +import kotlin.Unit; /** * Handles the beast of burden interface. @@ -54,14 +56,10 @@ public final class BurdenInterfacePlugin extends ComponentPlugin { beast.transfer(item, container.getAmount(item), withdraw); return true; case 234: - player.setAttribute("runscript", new RunScript() { - @Override - public boolean handle() { - beast.transfer(item, (int) getValue(), withdraw); - return true; - } + ContentAPI.sendInputDialogue(player, true, "Enter the amount:", (value) -> { + beast.transfer(item, (int) value, withdraw); + return Unit.INSTANCE; }); - player.getDialogueInterpreter().sendInput(false, "Enter the amount:"); break; case 168: player.getPacketDispatch().sendMessage(item.getDefinition().getExamine()); diff --git a/Server/src/main/java/core/net/packet/in/RunScriptPacketHandler.java b/Server/src/main/java/core/net/packet/in/RunScriptPacketHandler.java index c5875de04..1ea109ba9 100644 --- a/Server/src/main/java/core/net/packet/in/RunScriptPacketHandler.java +++ b/Server/src/main/java/core/net/packet/in/RunScriptPacketHandler.java @@ -5,6 +5,7 @@ import core.game.node.entity.player.link.RunScript; import core.net.packet.IncomingPacket; import core.net.packet.IoBuffer; import core.tools.StringUtils; +import kotlin.jvm.functions.Function1; /** * Represents the incoming packet to handle a run script. @@ -14,7 +15,7 @@ public class RunScriptPacketHandler implements IncomingPacket { @Override public void decode(Player player, int opcode, IoBuffer buffer) { - final RunScript script = player.getAttribute("runscript", null); + final Function1 script = player.getAttribute("runscript", null); if (script == null || player.getLocks().isInteractionLocked()) { return; } @@ -28,9 +29,7 @@ public class RunScriptPacketHandler implements IncomingPacket { } else { value = buffer.getInt(); } - script.setValue(value); - script.setPlayer(player); + script.invoke(value); player.removeAttribute("runscript"); - script.handle(); } } diff --git a/Server/src/main/kotlin/api/ContentAPI.kt b/Server/src/main/kotlin/api/ContentAPI.kt index ac10e87ea..1ebd8d57d 100644 --- a/Server/src/main/kotlin/api/ContentAPI.kt +++ b/Server/src/main/kotlin/api/ContentAPI.kt @@ -12,6 +12,7 @@ import core.game.node.entity.impl.Animator import core.game.node.entity.impl.Projectile import core.game.node.entity.npc.NPC import core.game.node.entity.player.Player +import core.game.node.entity.player.link.RunScript import core.game.node.entity.player.link.TeleportManager import core.game.node.entity.player.link.audio.Audio import core.game.node.entity.player.link.emote.Emotes @@ -127,12 +128,11 @@ object ContentAPI { else -> throw IllegalStateException("Invalid value passed for item") } - when(container){ + return when(container){ Container.INVENTORY -> player.inventory.remove(it) Container.BANK -> player.bank.remove(it) Container.EQUIPMENT -> player.equipment.remove(it) } - return false } /** @@ -918,4 +918,30 @@ object ContentAPI { fun clearLogoutListener(player: Player, key: String){ player.logoutListeners.remove(key) } + + /** + * Sends an item to a specific child on an interface + * @param player the player to send the packet to + * @param iface the ID of the interface to send the item onto + * @Param child the index of the child on the interface to send the item onto + * @param item the ID of the item to send + * @param amount the amount of the item to send - defaults to 1 + */ + @JvmStatic + fun sendItemOnInterface(player: Player, iface: Int, child: Int, item: Int, amount: Int = 1){ + player.packetDispatch.sendItemOnInterface(item,amount,iface,child) + } + + /** + * Send an input dialogue to retrieve a specified value from the player + * @param player the player to send the input dialogue to + * @param numeric whether or not the input is numeric + * @param prompt what to prompt the player + * @param handler the method that handles the value gained from the input dialogue + */ + @JvmStatic + fun sendInputDialogue(player: Player, numeric: Boolean, prompt: String, handler: (value: Any) -> Unit){ + player.dialogueInterpreter.sendInput(!numeric, prompt) + player.setAttribute("runscript",handler) //Handled in RunScriptPacketHandler + } } \ No newline at end of file diff --git a/Server/src/main/kotlin/rs09/game/interaction/inter/SilverInterface.kt b/Server/src/main/kotlin/rs09/game/interaction/inter/SilverInterface.kt new file mode 100644 index 000000000..f7d94f37e --- /dev/null +++ b/Server/src/main/kotlin/rs09/game/interaction/inter/SilverInterface.kt @@ -0,0 +1,101 @@ +package rs09.game.interaction.inter + +import api.ContentAPI +import core.game.node.entity.player.Player +import core.game.node.entity.player.link.diary.DiaryType +import core.game.node.entity.skill.Skills +import core.game.node.entity.skill.crafting.SilverProduct +import core.game.system.task.Pulse +import org.rs09.consts.Components +import org.rs09.consts.Items +import rs09.game.interaction.InteractionListener +import rs09.game.interaction.InterfaceListener +import rs09.game.system.SystemLogger + +class SilverInterface : InterfaceListener() { + + val IFACE = Components.CRAFTING_SILVER_CASTING_438 + val ANIM = ContentAPI.getAnimation(899) + + override fun defineListeners() { + onOpen(IFACE){player, _ -> + ContentAPI.sendItemOnInterface(player, IFACE, 17, 1718) + ContentAPI.sendItemOnInterface(player, IFACE, 24, 1724) + ContentAPI.sendItemOnInterface(player, IFACE, 31, 2961) + ContentAPI.sendItemOnInterface(player, IFACE, 38, 4201) + ContentAPI.sendItemOnInterface(player, IFACE, 45, 5525) + ContentAPI.sendItemOnInterface(player, IFACE, 53, 7637) + ContentAPI.sendItemOnInterface(player, IFACE, 60, 6748) + ContentAPI.sendItemOnInterface(player, IFACE, 67, 9382) + ContentAPI.sendItemOnInterface(player, IFACE, 74, 13154) + return@onOpen true + } + + on(IFACE){player, _, opcode, buttonID, _, _ -> + val product = SilverProduct.forId(buttonID) ?: return@on true + + if(!ContentAPI.inInventory(player, product.needed)){ + ContentAPI.sendMessage(player, "You need a ${ContentAPI.itemDefinition(product.needed).name.toLowerCase()} to make this item.") + return@on true + } + + if(product == SilverProduct.SILVTHRIL_ROD || product == SilverProduct.SILVTHRIL_CHAIN){ + ContentAPI.sendMessage(player, "You can't do that yet.") + return@on true + } + + if(!ContentAPI.hasLevelDyn(player, Skills.CRAFTING, product.level)){ + ContentAPI.sendMessage(player, "You need a Crafting level of ${product.level} to make this.") + return@on true + } + + val amt = when(opcode){ + 155 -> 1 + 196 -> 5 + 124 -> ContentAPI.amountInInventory(player, Items.SILVER_BAR_2355) + 199 -> -1 //Make X + else -> return@on true + } + + if(amt == -1) ContentAPI.sendInputDialogue(player, true, "Enter the amount:"){value -> + make(player,product,value as Int) + } else make(player, product, amt) + return@on true + } + } + + fun make(player: Player, product: SilverProduct, amount: Int){ + var amt = amount + ContentAPI.closeInterface(player) + ContentAPI.submitWorldPulse(object : Pulse(){ + override fun pulse(): Boolean { + if(amt < 1) return true + if(!ContentAPI.inInventory(player, product.needed) || !ContentAPI.inInventory(player, Items.SILVER_BAR_2355)) return true; + ContentAPI.animate(player, ANIM) + + if(ContentAPI.removeItem(player, Items.SILVER_BAR_2355, api.Container.INVENTORY)){ + ContentAPI.addItem(player, product.product, if(product == SilverProduct.SILVER_BOLTS) 10 else 1) + ContentAPI.rewardXP(player, Skills.CRAFTING, product.exp) + + if(product == SilverProduct.UNBLESSED && player.location.withinDistance(ContentAPI.location(3226,3254,0))){ + player.achievementDiaryManager.finishTask(player, DiaryType.LUMBRIDGE, 2, 8) + } + delay = 3 + } else return true + + amt-- + return false + } + }) + } +} + +class SilverBarUseWith : InteractionListener() { + val FURNACES = intArrayOf(2966, 3044, 3294, 4304, 6189, 11009, 11010, 11666, 12100, 12809, 18497, 18525, 18526, 21879, 22721, 26814, 28433, 28434, 30021, 30510, 36956, 37651) + override fun defineListeners() { + onUseWith(OBJECT, Items.SILVER_BAR_2355, *FURNACES){ player, _, _ -> + ContentAPI.openInterface(player, Components.CRAFTING_SILVER_CASTING_438) + return@onUseWith true + } + } +} \ No newline at end of file diff --git a/Server/src/main/kotlin/rs09/game/interaction/npc/BogrogPouchSwapper.kt b/Server/src/main/kotlin/rs09/game/interaction/npc/BogrogPouchSwapper.kt index 5ffbf7c35..f334593e9 100644 --- a/Server/src/main/kotlin/rs09/game/interaction/npc/BogrogPouchSwapper.kt +++ b/Server/src/main/kotlin/rs09/game/interaction/npc/BogrogPouchSwapper.kt @@ -1,5 +1,6 @@ package rs09.game.interaction.npc +import api.ContentAPI import core.game.component.Component import core.game.node.entity.player.Player import core.game.node.entity.player.link.RunScript @@ -37,13 +38,9 @@ object BogrogPouchSwapper { OP_SWAP_5 -> swap(player, 5, player.inventory.get(slot).id) OP_SWAP_10 -> swap(player,10,player.inventory.get(slot).id) OP_SWAP_X -> true.also{ - player.dialogueInterpreter.sendInput(false, "Enter the amount:") - player.setAttribute("runscript", object : RunScript() { - override fun handle(): Boolean { - swap(player,getValue() as Int, player.inventory.get(slot).id) - return true - } - }) + ContentAPI.sendInputDialogue(player, true, "Enter the amount:"){value -> + swap(player, value as Int, player.inventory.get(slot).id) + } } else -> false } diff --git a/Server/src/main/kotlin/rs09/game/node/entity/skill/cooking/CookingDialogue.kt b/Server/src/main/kotlin/rs09/game/node/entity/skill/cooking/CookingDialogue.kt index 50ff30aba..bab5ab170 100644 --- a/Server/src/main/kotlin/rs09/game/node/entity/skill/cooking/CookingDialogue.kt +++ b/Server/src/main/kotlin/rs09/game/node/entity/skill/cooking/CookingDialogue.kt @@ -1,5 +1,6 @@ package rs09.game.node.entity.skill.cooking +import api.ContentAPI import core.cache.def.impl.ItemDefinition import core.game.node.`object`.Scenery import core.game.node.entity.player.link.RunScript @@ -53,14 +54,9 @@ class CookingDialogue(vararg val args: Any) : DialogueFile(){ val amount = getAmount(buttonID) when (amount) { -1 -> { - player!!.setAttribute("runscript", object : RunScript() { - override fun handle(): Boolean { - val amount = value as Int - cook(player, `object`, initial, product, amount) - return false - } - }) - player!!.dialogueInterpreter.sendInput(false, "Enter an amount:") + ContentAPI.sendInputDialogue(player!!, true, "Enter the amount:"){value -> + cook(player!!, `object`, initial, product, value as Int) + } } else -> { end() diff --git a/Server/src/main/kotlin/rs09/game/node/entity/skill/farming/ToolLeprechaunInterface.kt b/Server/src/main/kotlin/rs09/game/node/entity/skill/farming/ToolLeprechaunInterface.kt index 9bde87193..29639a985 100644 --- a/Server/src/main/kotlin/rs09/game/node/entity/skill/farming/ToolLeprechaunInterface.kt +++ b/Server/src/main/kotlin/rs09/game/node/entity/skill/farming/ToolLeprechaunInterface.kt @@ -1,5 +1,6 @@ package rs09.game.node.entity.skill.farming +import api.ContentAPI import core.game.component.Component import core.game.node.entity.player.Player import core.game.node.entity.player.link.RunScript @@ -135,26 +136,22 @@ class ToolLeprechaunInterface : InterfaceListener() { } if(amount == -2){ - player.setAttribute("runscript", object : RunScript() { - override fun handle(): Boolean { - var amt = getValue().toString().toInt() - if(amt > hasAmount){ - amt = hasAmount - } - if(amt > spaceLeft){ - amt = spaceLeft - } - if(amt == 0){ - player.dialogueInterpreter.sendDialogue("You don't have any of those to store.") - return true - } - player.inventory.remove(Item(item,amt)) - updateQuantityMethod.invoke(player,amt) - player.varpManager.get(varp).send(player) - return true + ContentAPI.sendInputDialogue(player, true, "Enter the amount:"){value -> + var amt = value as Int + if(amt > hasAmount){ + amt = hasAmount } - }) - player.dialogueInterpreter.sendInput(false, "Enter amount:") + if(amt > spaceLeft){ + amt = spaceLeft + } + if(amt == 0){ + player.dialogueInterpreter.sendDialogue("You don't have any of those to store.") + return@sendInputDialogue + } + player.inventory.remove(Item(item,amt)) + updateQuantityMethod.invoke(player,amt) + player.varpManager.get(varp).send(player) + } return } if(amount == -1){ @@ -191,26 +188,22 @@ class ToolLeprechaunInterface : InterfaceListener() { player.dialogueInterpreter.sendDialogue("You don't have any of those stored.") } else { if(amount == -2){ - player.setAttribute("runscript", object : RunScript() { - override fun handle(): Boolean { - var amt = getValue().toString().toInt() - if(amt > hasAmount){ - amt = hasAmount - } - if(amt > player.inventory.freeSlots()){ - amt = player.inventory.freeSlots() - } - if(amt <= 0){ - player.dialogueInterpreter.sendDialogue("You don't have enough inventory space for that.") - } else { - player.inventory.add(Item(item, amt)) - updateQuantityMethod.invoke(player, -amt) - player.varpManager.get(varp).send(player) - } - return true + ContentAPI.sendInputDialogue(player, true, "Enter the amount:"){value -> + var amt = value as Int + if(amt > hasAmount){ + amt = hasAmount } - }) - player.dialogueInterpreter.sendInput(false, "Enter amount:") + if(amt > player.inventory.freeSlots()){ + amt = player.inventory.freeSlots() + } + if(amt <= 0){ + player.dialogueInterpreter.sendDialogue("You don't have enough inventory space for that.") + } else { + player.inventory.add(Item(item, amt)) + updateQuantityMethod.invoke(player, -amt) + player.varpManager.get(varp).send(player) + } + } return } if(amount == -1){ diff --git a/Server/src/main/kotlin/rs09/game/system/command/rottenpotato/RottenPotatoExtraDialogue.kt b/Server/src/main/kotlin/rs09/game/system/command/rottenpotato/RottenPotatoExtraDialogue.kt index d947e969f..6a5cae3bd 100644 --- a/Server/src/main/kotlin/rs09/game/system/command/rottenpotato/RottenPotatoExtraDialogue.kt +++ b/Server/src/main/kotlin/rs09/game/system/command/rottenpotato/RottenPotatoExtraDialogue.kt @@ -1,5 +1,6 @@ package rs09.game.system.command.rottenpotato +import api.ContentAPI import core.game.content.dialogue.DialoguePlugin import core.game.node.entity.npc.NPC import core.game.node.entity.player.Player @@ -37,17 +38,13 @@ class RottenPotatoExtraDialogue(player: Player? = null) : DialoguePlugin(player) //Send Player Notification 1 -> { end() - player.setAttribute("runscript", object : RunScript() { - override fun handle(): Boolean { - val message = getValue().toString() - for (p in Repository.players) { - p ?: continue - p.packetDispatch.sendString(colorize("%Y${message.replace("_", " ").capitalize()}"), 754, 5) - } - return true + ContentAPI.sendInputDialogue(player, false, "Enter the notification message:"){value -> + val message = value as String + for (p in Repository.players) { + p ?: continue + p.packetDispatch.sendString(colorize("%Y${message.replace("_", " ").capitalize()}"), 754, 5) } - }) - player.dialogueInterpreter.sendLongInput("Enter the notification message:") + } } //Targeted AME 2 -> { @@ -64,16 +61,12 @@ class RottenPotatoExtraDialogue(player: Player? = null) : DialoguePlugin(player) //Force Area NPC Chat 4 -> { end() - player.setAttribute("runscript", object : RunScript() { - override fun handle(): Boolean { - val msg = getValue().toString() - RegionManager.getLocalNpcs(player).forEach { - it.sendChat(msg) - } - return true + ContentAPI.sendInputDialogue(player, false,"Enter the chat message:"){value -> + val msg = value as String + RegionManager.getLocalNpcs(player).forEach { + it.sendChat(msg) } - }) - player.dialogueInterpreter.sendLongInput("Enter the chat message:") + } } //Kill all nearby NPCs @@ -88,20 +81,12 @@ class RottenPotatoExtraDialogue(player: Player? = null) : DialoguePlugin(player) //AME Spawning 100 -> { end() - player.setAttribute("runscript", object : RunScript() { - override fun handle(): Boolean { - val other = Repository.getPlayerByName(getValue().toString().toLowerCase().replace(" ", "_")) - if (other == null) { - player.sendMessage(colorize("%RInvalid player name.")) - return true - } - - //other?.antiMacroHandler?.fireEvent(AMEs[buttonId - 1]) - - return true + ContentAPI.sendInputDialogue(player, false, "Enter player name:"){value -> + val other = Repository.getPlayerByName(value.toString().toLowerCase().replace(" ", "_")) + if (other == null) { + player.sendMessage(colorize("%RInvalid player name.")) } - }) - player.dialogueInterpreter.sendInput(true, "Enter player name:") + } } //Spawn boss diff --git a/Server/src/main/kotlin/rs09/game/system/command/rottenpotato/RottenPotatoRSHDDialogue.kt b/Server/src/main/kotlin/rs09/game/system/command/rottenpotato/RottenPotatoRSHDDialogue.kt index 0e5087cd7..b762242df 100644 --- a/Server/src/main/kotlin/rs09/game/system/command/rottenpotato/RottenPotatoRSHDDialogue.kt +++ b/Server/src/main/kotlin/rs09/game/system/command/rottenpotato/RottenPotatoRSHDDialogue.kt @@ -1,5 +1,6 @@ package rs09.game.system.command.rottenpotato +import api.ContentAPI import core.game.content.dialogue.DialoguePlugin import core.game.node.entity.player.Player import core.game.node.entity.player.info.login.PlayerParser @@ -52,37 +53,29 @@ class RottenPotatoRSHDDialogue(player: Player? = null) : DialoguePlugin(player) //View Bank 4 -> { end() - player.setAttribute("runscript", object : RunScript() { - override fun handle(): Boolean { - val other = Repository.getPlayerByName(getValue().toString().toLowerCase().replace(" ","_")) - if(other == null){ - player.sendMessage(colorize("%RInvalid player name.")) - return true - } - - other.bank.open(player) - return true + ContentAPI.sendInputDialogue(player, false, "Enter player name:"){value -> + val other = Repository.getPlayerByName(value.toString().toLowerCase().replace(" ","_")) + if(other == null){ + player.sendMessage(colorize("%RInvalid player name.")) + return@sendInputDialogue } - }) - player.dialogueInterpreter.sendInput(true, "Enter the player name:") + + other.bank.open(player) + } } //View Inventory 5 -> { end() - player.setAttribute("runscript", object : RunScript() { - override fun handle(): Boolean { - val other = Repository.getPlayerByName(getValue().toString().toLowerCase().replace(" ","_")) - if(other == null){ - player.sendMessage(colorize("%RInvalid player name.")) - return true - } - - player.inventory.clear() - player.inventory.addAll(other.inventory) - return true + ContentAPI.sendInputDialogue(player, false, "Enter player name:"){value -> + val other = Repository.getPlayerByName(value.toString().toLowerCase().replace(" ","_")) + if(other == null){ + player.sendMessage(colorize("%RInvalid player name.")) + return@sendInputDialogue } - }) - player.dialogueInterpreter.sendInput(true, "Enter the player name:") + + player.inventory.clear() + player.inventory.addAll(other.inventory) + } } } } diff --git a/Server/src/main/kotlin/rs09/game/system/command/sets/MiscCommandSet.kt b/Server/src/main/kotlin/rs09/game/system/command/sets/MiscCommandSet.kt index 3f1ddc769..8e2607f2e 100644 --- a/Server/src/main/kotlin/rs09/game/system/command/sets/MiscCommandSet.kt +++ b/Server/src/main/kotlin/rs09/game/system/command/sets/MiscCommandSet.kt @@ -1,5 +1,6 @@ package rs09.game.system.command.sets +import api.ContentAPI import core.cache.def.impl.ItemDefinition import core.cache.def.impl.NPCDefinition import core.cache.def.impl.ObjectDefinition @@ -201,14 +202,10 @@ class MiscCommandSet : CommandSet(Command.Privilege.ADMIN){ if (player.attributes.containsKey("replyTo")) { player.setAttribute("keepDialogueAlive", true) val replyTo = player.getAttribute("replyTo", "").replace("_".toRegex(), " ") - player.setAttribute("runscript", object : RunScript() { - override fun handle(): Boolean { - CommunicationInfo.sendMessage(player, replyTo.toLowerCase(), getValue() as String) - player.removeAttribute("keepDialogueAlive") - return true - } - }) - player.dialogueInterpreter.sendMessageInput(StringUtils.formatDisplayName(replyTo)) + ContentAPI.sendInputDialogue(player, false ,StringUtils.formatDisplayName(replyTo)){value -> + CommunicationInfo.sendMessage(player, replyTo.toLowerCase(), value as String) + player.removeAttribute("keepDialogueAlive") + } } else { reject(player, "You have not recieved any recent messages to which you can reply.") }