From 00d460d2ba623c017cf47c3396922142b3eb7448 Mon Sep 17 00:00:00 2001 From: Byte Date: Sat, 17 Dec 2022 07:16:38 +0000 Subject: [PATCH] Fixed a bunch of minor exceptions --- .../game/content/dialogue/SkillDialoguePlugin.java | 8 +++++++- .../interaction/inter/GrandExchangeInterface.java | 5 ++++- .../game/interaction/inter/SmeltingInterface.java | 6 +++++- .../game/interaction/inter/SpinningInterface.java | 6 +++++- .../main/java/core/game/node/entity/npc/NPC.java | 3 +++ .../content/activity/pyramidplunder/PlunderUtils.kt | 5 +++++ .../rs09/game/content/dialogue/DialogueFile.kt | 13 +++++-------- .../game/interaction/inter/FairyRingInterface.kt | 6 +++++- .../node/entity/skill/cooking/CookingDialogue.kt | 8 +++++++- .../main/kotlin/rs09/net/packet/PacketWriteQueue.kt | 3 +++ 10 files changed, 49 insertions(+), 14 deletions(-) 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 97663cd88..922cf2f0b 100644 --- a/Server/src/main/java/core/game/content/dialogue/SkillDialoguePlugin.java +++ b/Server/src/main/java/core/game/content/dialogue/SkillDialoguePlugin.java @@ -3,6 +3,8 @@ package core.game.content.dialogue; import static api.ContentAPIKt.*; import core.game.node.entity.player.Player; import core.game.node.entity.player.link.RunScript; +import core.game.node.entity.skill.crafting.spinning.SpinningPulse; +import core.game.node.item.Item; import core.plugin.Initializable; import kotlin.Unit; import rs09.game.content.dialogue.SkillDialogueHandler; @@ -59,7 +61,11 @@ public class SkillDialoguePlugin extends DialoguePlugin { handler.create(amount, index); } else { sendInputDialogue(player, true, "Enter the amount:", (value) -> { - handler.create((int) value, index); + if (value instanceof String) { + handler.create(Integer.parseInt((String) value), index); + } else { + handler.create((int) value, index); + } return Unit.INSTANCE; }); return true; diff --git a/Server/src/main/java/core/game/interaction/inter/GrandExchangeInterface.java b/Server/src/main/java/core/game/interaction/inter/GrandExchangeInterface.java index 2c526e361..8f6809de5 100644 --- a/Server/src/main/java/core/game/interaction/inter/GrandExchangeInterface.java +++ b/Server/src/main/java/core/game/interaction/inter/GrandExchangeInterface.java @@ -180,7 +180,10 @@ public class GrandExchangeInterface extends ComponentPlugin { PacketRepository.send(ContainerPacket.class, new ContainerContext(player, -1, -2, player.getAttribute("container-key", 93), player.getInventory(), false)); break; case 155: - player.getPacketDispatch().sendMessage((String) CS2Mapping.forId(1089).getMap().get(set.getItemId())); + CS2Mapping mapping = CS2Mapping.forId(1089); + if (mapping != null && set != null) { + player.getPacketDispatch().sendMessage((String) mapping.getMap().get(set.getItemId())); + } break; } } diff --git a/Server/src/main/java/core/game/interaction/inter/SmeltingInterface.java b/Server/src/main/java/core/game/interaction/inter/SmeltingInterface.java index be454ed7d..31af38dcc 100644 --- a/Server/src/main/java/core/game/interaction/inter/SmeltingInterface.java +++ b/Server/src/main/java/core/game/interaction/inter/SmeltingInterface.java @@ -33,7 +33,11 @@ public class SmeltingInterface extends ComponentPlugin { if (barType.getAmount() == -1) { player.getInterfaceManager().closeChatbox(); sendInputDialogue(player, true, "Enter the amount:", (value) -> { - submitIndividualPulse(player, new SmeltingPulse(player, null, barType.getBar(), (int) value)); + if (value instanceof String) { + submitIndividualPulse(player, new SmeltingPulse(player, null, barType.getBar(), Integer.parseInt((String) value))); + } else { + submitIndividualPulse(player, new SmeltingPulse(player, null, barType.getBar(), (int) value)); + } return Unit.INSTANCE; }); } else { diff --git a/Server/src/main/java/core/game/interaction/inter/SpinningInterface.java b/Server/src/main/java/core/game/interaction/inter/SpinningInterface.java index 4c29853b7..777887f36 100644 --- a/Server/src/main/java/core/game/interaction/inter/SpinningInterface.java +++ b/Server/src/main/java/core/game/interaction/inter/SpinningInterface.java @@ -46,7 +46,11 @@ public class SpinningInterface extends ComponentPlugin { break; case 199: sendInputDialogue(p, true, "Enter the amount:", (value) -> { - submitIndividualPulse(p, new SpinningPulse(p, new Item(spin.getNeed(), 1), (int) value, spin)); + if (value instanceof String) { + submitIndividualPulse(p, new SpinningPulse(p, new Item(spin.getNeed(), 1), Integer.parseInt((String) value), spin)); + } else { + submitIndividualPulse(p, new SpinningPulse(p, new Item(spin.getNeed(), 1), (int) value, spin)); + } return Unit.INSTANCE; }); break; diff --git a/Server/src/main/java/core/game/node/entity/npc/NPC.java b/Server/src/main/java/core/game/node/entity/npc/NPC.java index 9078027a9..0a60ea68e 100644 --- a/Server/src/main/java/core/game/node/entity/npc/NPC.java +++ b/Server/src/main/java/core/game/node/entity/npc/NPC.java @@ -311,6 +311,9 @@ public class NPC extends Entity { } } + if (Shops.getShopsByNpc().get(id) == null) { + return false; + } Shops.getShopsByNpc().get(id).openFor(player); //Fix for issue #11 for shops keeping dialogue open. diff --git a/Server/src/main/kotlin/rs09/game/content/activity/pyramidplunder/PlunderUtils.kt b/Server/src/main/kotlin/rs09/game/content/activity/pyramidplunder/PlunderUtils.kt index dd1d97b8d..f102b0bc7 100644 --- a/Server/src/main/kotlin/rs09/game/content/activity/pyramidplunder/PlunderUtils.kt +++ b/Server/src/main/kotlin/rs09/game/content/activity/pyramidplunder/PlunderUtils.kt @@ -296,6 +296,11 @@ object PlunderUtils { fun rollUrnSuccess(player: Player, charmed: Boolean = false): Boolean { val level = getDynLevel(player, Skills.THIEVING) + + if (getRoom(player) == null) { + return false + } + val room = getRoom(player)!!.room return RandomFunction.random(level) > (room * if(charmed) 2 else 4) } diff --git a/Server/src/main/kotlin/rs09/game/content/dialogue/DialogueFile.kt b/Server/src/main/kotlin/rs09/game/content/dialogue/DialogueFile.kt index a9b1ec250..543e0494c 100644 --- a/Server/src/main/kotlin/rs09/game/content/dialogue/DialogueFile.kt +++ b/Server/src/main/kotlin/rs09/game/content/dialogue/DialogueFile.kt @@ -28,17 +28,14 @@ abstract class DialogueFile { } open fun npc(vararg messages: String?): Component? { - return if (npc == null) { - interpreter!!.sendDialogues( - npc!!.id, + if (npc != null) { + return interpreter!!.sendDialogues( + npc, if (npc!!.id > 8591) FacialExpression.OLD_NORMAL else FacialExpression.FRIENDLY, *messages ) - } else interpreter!!.sendDialogues( - npc, - if (npc!!.id > 8591) FacialExpression.OLD_NORMAL else FacialExpression.FRIENDLY, - *messages - ) + } + return null } open fun npc(id: Int, vararg messages: String?): Component? { diff --git a/Server/src/main/kotlin/rs09/game/interaction/inter/FairyRingInterface.kt b/Server/src/main/kotlin/rs09/game/interaction/inter/FairyRingInterface.kt index e08b48cd6..22df6abba 100644 --- a/Server/src/main/kotlin/rs09/game/interaction/inter/FairyRingInterface.kt +++ b/Server/src/main/kotlin/rs09/game/interaction/inter/FairyRingInterface.kt @@ -141,7 +141,11 @@ class FairyRingInterface : InterfaceListener{ closeInterface(player) ring.let { - player.dispatch(FairyRingDialEvent(it!!)) + if (it == null) { + return@let + } + + player.dispatch(FairyRingDialEvent(it)) teleport(player, tile!!, TeleportManager.TeleportType.FAIRY_RING) } } 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 d551cedb2..7e0318fb4 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 @@ -61,7 +61,13 @@ class CookingDialogue(vararg val args: Any) : DialogueFile(){ end() val amount = getAmount(buttonID) when (amount) { - -1 -> sendInputDialogue(player!!, true, "Enter the amount:") { value -> cook(player!!, `object`, initial, product, value as Int) } + -1 -> sendInputDialogue(player!!, true, "Enter the amount:") { value -> + if (value is String) { + cook(player!!, `object`, initial, product, value.toInt()) + } else { + cook(player!!, `object`, initial, product, value as Int) + } + } else -> { end() diff --git a/Server/src/main/kotlin/rs09/net/packet/PacketWriteQueue.kt b/Server/src/main/kotlin/rs09/net/packet/PacketWriteQueue.kt index 32055f3d1..a48af4dab 100644 --- a/Server/src/main/kotlin/rs09/net/packet/PacketWriteQueue.kt +++ b/Server/src/main/kotlin/rs09/net/packet/PacketWriteQueue.kt @@ -4,6 +4,7 @@ import api.TickListener import core.net.packet.OutgoingPacket import core.net.packet.out.* import rs09.game.system.SystemLogger +import java.lang.IndexOutOfBoundsException import java.util.* import java.util.concurrent.locks.ReentrantLock import kotlin.NoSuchElementException @@ -60,6 +61,8 @@ class PacketWriteQueue : TickListener { for (pkt: QueuedPacket<*>? in packetsToWrite) SystemLogger.logWarn(this::class.java, "${pkt?.out?.javaClass?.simpleName ?: "NULL"} <- ${pkt?.context ?: "NULL"}") } catch (ignored: NullPointerException) { //do nothing, we don't care, this can happen when everything is working as intended. + } catch (ignored: IndexOutOfBoundsException) { + //do nothing, we don't care, this can happen when everything is working as intended. } catch (e: Exception) { e.printStackTrace() } finally {