Merge remote-tracking branch 'upstream/master'

This commit is contained in:
skelsoft
2021-06-26 06:16:41 +10:00
26 changed files with 326 additions and 474 deletions
@@ -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());
@@ -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;
@@ -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;
@@ -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());
@@ -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) {
@@ -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;
}
@@ -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;
}
@@ -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;
@@ -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) {
@@ -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<Object> 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));
}
});
}
}
@@ -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());
@@ -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;
@@ -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());
@@ -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<Object> 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;
}
}
@@ -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;
}
@@ -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));
@@ -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());
@@ -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();
}
}
+28 -2
View File
@@ -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
}
}
@@ -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
}
}
}
@@ -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
}
@@ -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()
@@ -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){
@@ -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
@@ -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)
}
}
}
}
@@ -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, "<col=3498db>You have not recieved any recent messages to which you can reply.")
}