From a932c309b303057675ef6369ecc1532ae4832492 Mon Sep 17 00:00:00 2001 From: Player Name Date: Mon, 20 Jan 2025 13:52:46 +0000 Subject: [PATCH] Fixed bug where ultimate ironmen could have rewards sent to bank Fixed the allquest command on new accounts on first login --- .../summoning/familiar/FamiliarManager.java | 19 +++++++----- .../minigame/fishingtrawler/TrawlerLoot.kt | 29 ++++++++++++++----- Server/src/main/core/api/ContentAPI.kt | 4 +-- 3 files changed, 34 insertions(+), 18 deletions(-) diff --git a/Server/src/main/content/global/skill/summoning/familiar/FamiliarManager.java b/Server/src/main/content/global/skill/summoning/familiar/FamiliarManager.java index 02bb0a403..888fa8f3e 100644 --- a/Server/src/main/content/global/skill/summoning/familiar/FamiliarManager.java +++ b/Server/src/main/content/global/skill/summoning/familiar/FamiliarManager.java @@ -69,19 +69,19 @@ public final class FamiliarManager { } public void parse(JSONObject familiarData) { - for (Pets pet : Pets.values()) { - for (int id : new int[]{pet.getBabyItemId(), pet.getGrownItemId(), pet.getOvergrownItemId()}) { - if (id != -1) { - petDetails.put(id, new ArrayList()); - } - } - } - int currentPet = -1; if (familiarData.containsKey("currentPet")) { currentPet = Integer.parseInt(familiarData.get("currentPet").toString()); } if (player.version < 2) { //migrate the v1 format + for (Pets pet : Pets.values()) { + for (int id : new int[]{pet.getBabyItemId(), pet.getGrownItemId(), pet.getOvergrownItemId()}) { + if (id != -1) { + petDetails.put(id, new ArrayList()); + } + } + } + JSONArray petDetails = (JSONArray) familiarData.get("petDetails"); for (Object petDetail : petDetails) { JSONObject detail = (JSONObject) petDetail; @@ -267,6 +267,9 @@ public final class FamiliarManager { player.getDialogueInterpreter().sendDialogue("You need a summoning level of " + pets.getSummoningLevel() + " to summon this."); return false; } + if (!this.petDetails.containsKey(itemId)) { + petDetails.put(itemId, new ArrayList()); + } int last = this.petDetails.get(itemId).size() - 1; if (last < 0) { //new pet last = 0; diff --git a/Server/src/main/content/minigame/fishingtrawler/TrawlerLoot.kt b/Server/src/main/content/minigame/fishingtrawler/TrawlerLoot.kt index 8511a1810..87ed06dbe 100644 --- a/Server/src/main/content/minigame/fishingtrawler/TrawlerLoot.kt +++ b/Server/src/main/content/minigame/fishingtrawler/TrawlerLoot.kt @@ -1,8 +1,12 @@ package content.minigame.fishingtrawler import content.global.skill.fishing.Fish +import core.api.Container +import core.api.addItem +import core.api.addItemOrDrop import core.api.splitLines import core.game.node.entity.player.Player +import core.game.node.entity.player.link.IronmanMode import core.game.node.item.GroundItemManager import core.game.node.item.Item import core.game.node.item.WeightedChanceItem @@ -57,25 +61,34 @@ object TrawlerLoot { @JvmStatic fun addLootAndMessage(player: Player, fishLevel: Int, rolls: Int, skipJunk: Boolean) { if (rolls < 1) return - val frequencyList = listOf>(HashMap(), HashMap(), HashMap()) + val frequencyList = listOf>(HashMap(), HashMap(), HashMap()) getLoot(fishLevel, rolls, skipJunk).forEach { - if (!player.bank.add(it)) GroundItemManager.create(it, player) when (it.id) { - in trawlerFishIds -> frequencyList[0].merge(it.name, 1, Int::plus) - in trawlerMisc -> frequencyList[1].merge(it.name, 1, Int::plus) - in junkItems -> frequencyList[2].merge(it.name, 1, Int::plus) + in trawlerFishIds -> frequencyList[0].merge(it.id, 1, Int::plus) + in trawlerMisc -> frequencyList[1].merge(it.id, 1, Int::plus) + in junkItems -> frequencyList[2].merge(it.id, 1, Int::plus) } } - player.sendMessage(colorize("%RYour reward has been sent to your bank:")) - // Extract and join each frequency maps entries as string. Split based on length, then send each line as message. + // Extract and join each frequency map's entries as items frequencyList.forEachIndexed { idx, fMap -> if (fMap.isNotEmpty()) { + // Give reward + fMap.forEach { + if (player.ironmanManager.mode == IronmanMode.ULTIMATE || !addItem(player, it.key, it.value, Container.BANK)) { + val notedIdIfFish = if (idx == 0) it.key + 1 else it.key + addItemOrDrop(player, notedIdIfFish, it.value) + } + } + // Split based on length, then send each line as message splitLines( - fMap.entries.joinToString(prefix = if (idx == 0) "Fish: " else if (idx == 1) "Misc: " else "Junk: ", postfix = ".") { "${it.key}: ${it.value}" }, + fMap.entries.joinToString(prefix = if (idx == 0) "Fish: " else if (idx == 1) "Misc: " else "Junk: ", postfix = ".") { "${Item(it.key).name}: ${it.value}" }, 85 ).forEach { player.sendMessage(it) } } } + if (player.ironmanManager.mode != IronmanMode.ULTIMATE) { + player.sendMessage(colorize("%RYour reward has been sent to your bank:")) + } } private val lootTable = arrayOf( diff --git a/Server/src/main/core/api/ContentAPI.kt b/Server/src/main/core/api/ContentAPI.kt index 6a97979c1..b4e936906 100644 --- a/Server/src/main/core/api/ContentAPI.kt +++ b/Server/src/main/core/api/ContentAPI.kt @@ -448,9 +448,9 @@ fun addItemOrDrop(player: Player, id: Int, amount: Int = 1) { fun addItemOrBank(player: Player, id: Int, amount: Int = 1) { val item = Item(id, amount) if (!player.inventory.add(item)) { - if (player.bankPrimary.add(item)) { + if (player.ironmanManager.mode != IronmanMode.ULTIMATE && player.bankPrimary.add(item)) { sendMessage(player, colorize("%RThe ${item.name} has been sent to your bank.")) - } else if (player.bankSecondary.add(item)) { + } else if (player.ironmanManager.mode != IronmanMode.ULTIMATE && player.bankSecondary.add(item)) { sendMessage(player, colorize("%RThe ${item.name} has been sent to your secondary bank.")) } else { GroundItemManager.create(item, player)