Fixed numerous interfaces, including Puro puro, Destroy item, Equipment, kept on death, Cooking (single prompts i.e. raw fish -> range), Fletching (make set i.e. fletching arrows, bow)

Rewrote herb cleaning to listener
Fixed studded leather crafting level requirement and xp
Fixed bow stringing stealing strings
::quest <player> can now be used to look up a player's completed quests
This commit is contained in:
Woahscam
2023-11-11 03:16:35 +00:00
committed by Ryan
parent 098d947d87
commit 8ef5d8bce4
23 changed files with 792 additions and 575 deletions
@@ -1551,7 +1551,6 @@ public class ItemDefinition extends Definition<Item> {
if (!player.getAttribute("equip_stats_open", false)) {
return;
}
PacketRepository.send(WeightUpdate.class, player.getPacketDispatch().getContext());
int index = 0;
int[] bonuses = player.getProperties().getBonuses();
for (int i = 36; i < 50; i++) {
@@ -1563,8 +1562,6 @@ public class ItemDefinition extends Definition<Item> {
player.getPacketDispatch().sendString(BONUS_NAMES[index++] + bonusValue, 667, i);
}
player.getPacketDispatch().sendString("Attack bonus", 667, 34);
DecimalFormat dec = new DecimalFormat("#.#");
player.getPacketDispatch().sendString(dec.format(player.getSettings().getWeight())+" kg", 667, 32);
}
/**
@@ -53,7 +53,7 @@ public enum InterfaceType {
/**
* Wilderness overlay
*/
WILDERNESS_OVERLAY(Components.TOPLEVEL_548, Components.TOPLEVEL_FULLSCREEN_746, 11, 3);
OVERLAY_B(Components.TOPLEVEL_548, Components.TOPLEVEL_FULLSCREEN_746, 11, 3);
/**
* The fixed window pane id.
@@ -363,7 +363,6 @@ public final class EquipmentContainer extends Container {
if (!player.getInterfaceManager().hasMainComponent(667)) {
return;
}
PacketRepository.send(WeightUpdate.class, player.getPacketDispatch().getContext());
int index = 0;
int[] bonuses = player.getProperties().getBonuses();
for (int i = 36; i < 50; i++) {
@@ -11,8 +11,10 @@ import core.game.node.entity.npc.NPC;
import core.game.node.entity.player.Player;
import core.game.node.item.Item;
import core.net.packet.PacketRepository;
import core.net.packet.context.ChildPositionContext;
import core.net.packet.context.ContainerContext;
import core.net.packet.out.ContainerPacket;
import core.net.packet.out.RepositionChild;
import core.plugin.PluginManifest;
import core.plugin.PluginType;
import core.game.system.config.ItemConfigParser;
@@ -263,8 +265,6 @@ public final class DialogueInterpreter {
* @return The component.
*/
public Component sendDestroyItem(int id, String message) {
player.getInterfaceManager().openChatbox(94);
PacketRepository.send(ContainerPacket.class, new ContainerContext(player, 94, 93, 93, new Item[] { new Item(id) }, 1, false));
String text = ItemDefinition.forId(id).getConfiguration(ItemConfigParser.DESTROY_MESSAGE, "Are you sure you want to destroy this object?");
if (text.length() > 200) {
String[] words = text.split(" ");
@@ -279,11 +279,11 @@ public final class DialogueInterpreter {
}
text = sb.toString();
}
player.getPacketDispatch().sendString("Are you sure you want to destroy this object?", 94, 2);
player.getPacketDispatch().sendString("Yes.", 94, 3);
player.getPacketDispatch().sendString("No.", 94, 4);
player.getPacketDispatch().sendString(text, 94, 7);
player.getPacketDispatch().sendString(ItemDefinition.forId(id).getName(), 94, 8);
player.getPacketDispatch().sendItemOnInterface(id, 1, 94, 9);
player.getInterfaceManager().openChatbox(94);
return player.getInterfaceManager().getChatbox();
}
@@ -123,6 +123,37 @@ open class SkillDialogueHandler(
}
}
},
MAKE_SET_ONE_OPTION(582, 4, 1) {
override fun display(player: Player, handler: SkillDialogueHandler) {
val item = handler.data[0] as Item
// Send item + item name to interface
player.packetDispatch.sendItemZoomOnInterface(item.id, 160, 582, 2)
player.packetDispatch.sendString("<br><br><br><br>" + item.name, 582, 5)
// Re-format this interface because it is not formatted properly for the chat-box
// Swords
PacketRepository.send(RepositionChild::class.java, ChildPositionContext(player, 582, 0, 12, 15))
PacketRepository.send(RepositionChild::class.java, ChildPositionContext(player, 582, 1, 431, 15))
// "How many would you like to make?"
PacketRepository.send(RepositionChild::class.java, ChildPositionContext(player, 582, 6, 0, 12))
// Item displayed
PacketRepository.send(RepositionChild::class.java, ChildPositionContext(player, 582, 2, 207, 23))
// Right click context menu boxes
PacketRepository.send(RepositionChild::class.java, ChildPositionContext(player, 582, 3, 58, 27))
PacketRepository.send(RepositionChild::class.java, ChildPositionContext(player, 582, 4, 58, 27))
PacketRepository.send(RepositionChild::class.java, ChildPositionContext(player, 582, 5, 58, 27))
}
override fun getAmount(handler: SkillDialogueHandler, buttonId: Int): Int {
return when(buttonId){
4 -> 1
3 -> 5
2 -> 10
else -> handler.getAll(getIndex(handler, buttonId))
}
}
},
TWO_OPTION(303, 7, 2) {
override fun display(player: Player, handler: SkillDialogueHandler) {
var item: Item
@@ -15,7 +15,6 @@ import core.net.packet.out.WindowsPane;
import core.tools.Log;
import org.rs09.consts.Components;
import content.region.misc.tutisland.handlers.TutorialStage;
import core.tools.SystemLogger;
import static core.api.ContentAPIKt.log;
import static core.api.ContentAPIKt.*;
@@ -612,7 +611,7 @@ public final class InterfaceManager {
return;
}
overlay = component;
if (overlay.getDefinition().getType() != InterfaceType.OVERLAY) {
if (overlay.getDefinition().getType() != InterfaceType.OVERLAY && overlay.getDefinition().getType() != InterfaceType.OVERLAY_B) {
log(this.getClass(), Log.WARN, "Set interface type to OVERLAY for component " + component.getId() + ", definition requires updating!");
overlay.getDefinition().setType(InterfaceType.OVERLAY);
overlay.getDefinition().setWalkable(true);
@@ -620,23 +619,6 @@ public final class InterfaceManager {
overlay.open(player);
}
/**
* Opens the wilderness overlay.
* @param component The component.
*/
public void openWildernessOverlay(Component component) {
if (wildyOverlay != null && !wildyOverlay.close(player)) {
return;
}
wildyOverlay = component;
if (wildyOverlay.getDefinition().getType() != InterfaceType.WILDERNESS_OVERLAY) {
log(this.getClass(), Log.WARN, "Set interface type to WILDERNESS_OVERLAY for component " + component.getId() + ", definition requires updating!");
wildyOverlay.getDefinition().setType(InterfaceType.WILDERNESS_OVERLAY);
wildyOverlay.getDefinition().setWalkable(true);
}
wildyOverlay.open(player);
}
/**
* Closes the current overlay.
*/
@@ -428,6 +428,7 @@ public final class Settings {
}
weight += item.getDefinition().getConfiguration(ItemConfigParser.WEIGHT, 0.0);
}
player.getPacketDispatch().sendString((int) weight + " kg", 667, 32);
}
/**
@@ -3,9 +3,9 @@ package core.game.system.command.sets
import core.game.component.Component
import core.game.node.entity.player.Player
import core.game.node.entity.player.link.quest.QuestRepository
import core.game.system.command.Command
import core.plugin.Initializable
import core.game.system.command.Privilege
import core.game.world.repository.Repository
@Initializable
class QuestCommandSet : CommandSet(Privilege.ADMIN){
@@ -22,8 +22,20 @@ class QuestCommandSet : CommandSet(Privilege.ADMIN){
/**
* Displays the currently implemented quests with debug information
*/
define("quest"){player,_ ->
sendQuestsDebug(player)
define("quest"){player,args ->
if (args.size < 3) {
val lookupP = if (args.size == 1) {
player
} else if (Repository.getPlayerByName(args[1]) != null) {
Repository.getPlayerByName(args[1]) ?: return@define
} else {
reject(player, "ERROR: Username not found. Usage: ::quest <username>")
return@define
}
sendQuestsDebug(player, lookupP)
} else {
reject(player, "Usage: ::quest || ::quest <username>")
}
}
/**
@@ -71,20 +83,26 @@ class QuestCommandSet : CommandSet(Privilege.ADMIN){
/**
* Sends the list of quests with debug information
* @param player the player.
* @param admin the player.
*/
private fun sendQuestsDebug(player: Player?) {
player!!.interfaceManager.open(Component(275))
private fun sendQuestsDebug(admin: Player?, lookupUser: Player?) {
admin!!.interfaceManager.open(Component(275))
for (i in 0..310) {
player.packetDispatch.sendString("", 275, i)
admin.packetDispatch.sendString("", 275, i)
}
var lineId = 11
player.packetDispatch.sendString("<col=ecf0f1>" + "Quests Debug" + "</col>", 275, 2)
admin.packetDispatch.sendString("<col=ecf0f1>${lookupUser!!.username}'s Quest Debug</col>", 275, 2)
for (q in QuestRepository.getQuests().values) {
// Add a space to beginning and end of string for the strikethrough
player.packetDispatch.sendString("<col=ecf0f1>${q.name}</col>", 275, lineId++)
player.packetDispatch.sendString("<col=ecf0f1>Index: </col><col=ff1f1f>${q.index}</col> | <col=ecf0f1>Stage:</col> <col=ff1f1f>${player.questRepository.getStage(q)}</col>", 275, lineId++)
player.packetDispatch.sendString("<str> ", 275, lineId++)
val stage = lookupUser.questRepository.getStage(q)
val statusColor = when {
stage >= 100 -> "80ff00"
stage in 1..99 -> "ff8400"
else -> "ff0000"
}
admin.packetDispatch.sendString("<col=ecf0f1>${q.name}</col>", 275, lineId++)
admin.packetDispatch.sendString("<col=ecf0f1>Index: </col><col=ff1f1f><shad=2>${q.index}</shad></col> | <col=ecf0f1>Stage:</col> <col=$statusColor><shad=2>${lookupUser.questRepository.getStage(q)}</shad></col>", 275, lineId++)
admin.packetDispatch.sendString("<str> ", 275, lineId++)
}
}
}
@@ -232,7 +232,7 @@ public final class WildernessZone extends MapZone {
if (p.getSkullManager().isWildernessDisabled()) {
return;
}
p.getInterfaceManager().openWildernessOverlay(new Component(381));
p.getInterfaceManager().openOverlay(new Component(381));
p.getSkullManager().setLevel(getWilderness(p));
p.getPacketDispatch().sendString("Level: " + p.getSkullManager().getLevel(), 381, 1);
if(GameWorld.getSettings().getWild_pvp_enabled()) {
@@ -70,7 +70,7 @@ public final class PacketRepository {
OUTGOING_PACKETS.put(CommunicationMessage.class, new CommunicationMessage()); //
OUTGOING_PACKETS.put(UpdateClanChat.class, new UpdateClanChat()); //
OUTGOING_PACKETS.put(UpdateGroundItemAmount.class, new UpdateGroundItemAmount()); //
OUTGOING_PACKETS.put(WeightUpdate.class, new WeightUpdate()); //
//OUTGOING_PACKETS.put(WeightUpdate.class, new WeightUpdate()); //
OUTGOING_PACKETS.put(UpdateRandomFile.class, new UpdateRandomFile()); //
OUTGOING_PACKETS.put(InstancedLocationUpdate.class, new InstancedLocationUpdate()); //
OUTGOING_PACKETS.put(CSConfigPacket.class, new CSConfigPacket()); //