From 5c5e034db681d3616a7e0161084b4b0ea461a015 Mon Sep 17 00:00:00 2001 From: Ceikry Date: Mon, 5 Sep 2022 13:10:52 +0000 Subject: [PATCH] Finished migration to player UIDs --- .../content/global/shop/CulinomancerShop.kt | 2 +- .../holiday/christmas/ChristmasEvent.java | 4 ++-- .../node/entity/player/info/PlayerDetails.java | 4 ++-- .../java/core/game/node/item/GroundItem.java | 2 +- .../game/world/map/build/LandscapeParser.java | 1 + .../java/core/gui/tab/GrandExchangeTab.java | 2 +- .../java/core/net/event/GameReadEvent.java | 1 + .../rs09/game/content/global/shops/Shop.kt | 18 +++++++++--------- .../rs09/game/content/global/shops/Shops.kt | 4 ++-- .../main/kotlin/rs09/game/ge/GrandExchange.kt | 11 +++++------ .../rs09/game/ge/GrandExchangeRecords.kt | 4 ++-- .../rs09/game/world/repository/Repository.kt | 4 ++-- 12 files changed, 29 insertions(+), 28 deletions(-) diff --git a/Server/src/main/java/core/game/content/global/shop/CulinomancerShop.kt b/Server/src/main/java/core/game/content/global/shop/CulinomancerShop.kt index 253bde171..3156b2654 100644 --- a/Server/src/main/java/core/game/content/global/shop/CulinomancerShop.kt +++ b/Server/src/main/java/core/game/content/global/shop/CulinomancerShop.kt @@ -49,7 +49,7 @@ class CulinomancerShop : LoginListener { //Retrieve a player's shop - should generate the shop if it does not exist. fun getShop(player: Player, food: Boolean): Shop { - val uid = player.details.usernameHashcode + val uid = player.details.uid val points = player.questRepository.points val tier = (points / 18) if (tier != getAttribute(player, "culino-tier", 0)) //If player tier has changed diff --git a/Server/src/main/java/core/game/content/holiday/christmas/ChristmasEvent.java b/Server/src/main/java/core/game/content/holiday/christmas/ChristmasEvent.java index 318f7547b..a9bd573de 100644 --- a/Server/src/main/java/core/game/content/holiday/christmas/ChristmasEvent.java +++ b/Server/src/main/java/core/game/content/holiday/christmas/ChristmasEvent.java @@ -439,7 +439,7 @@ public class ChristmasEvent extends HolidayEvent { snowman.faceTemporary(player, 2); snowman.setRespawn(false); snowman.setWalks(true); - snowman.setAttribute("owner", player.getDetails().getUsernameHashcode()); + snowman.setAttribute("owner", player.getDetails().getUid()); if (!player.getEmoteManager().isUnlocked(Emotes.SNOWMAN_DANCE)) { player.getEmoteManager().unlock(Emotes.SNOWMAN_DANCE); player.sendMessage("You've unlocked the snowman dance emote!"); @@ -492,7 +492,7 @@ public class ChristmasEvent extends HolidayEvent { @Override public boolean open(Object... args) { npc = (NPC) args[0]; - if (npc.getAttribute("owner", 0) != player.getDetails().getUsernameHashcode()) { + if (npc.getAttribute("owner", 0) != player.getDetails().getUid()) { player.sendMessage("The snowman doesn't seem interested in talking to you."); return true; } diff --git a/Server/src/main/java/core/game/node/entity/player/info/PlayerDetails.java b/Server/src/main/java/core/game/node/entity/player/info/PlayerDetails.java index 2221223d4..113cc1151 100644 --- a/Server/src/main/java/core/game/node/entity/player/info/PlayerDetails.java +++ b/Server/src/main/java/core/game/node/entity/player/info/PlayerDetails.java @@ -127,8 +127,8 @@ public class PlayerDetails { * Gets the uid. * @return the uid. */ - public int getUsernameHashcode() { //was getUid, but that was such an amazing and descriptive name for what this method actually does that I just had to change it! - return this.getUsername().hashCode(); //this SHOULD return accountInfo.uid BUT Arios is an amazing codebase, and they used username hashcodes when players already had a UID assigned by the DB. Genius! + public int getUid() { + return accountInfo.getUid(); } /** diff --git a/Server/src/main/java/core/game/node/item/GroundItem.java b/Server/src/main/java/core/game/node/item/GroundItem.java index 251129197..c67501267 100644 --- a/Server/src/main/java/core/game/node/item/GroundItem.java +++ b/Server/src/main/java/core/game/node/item/GroundItem.java @@ -104,7 +104,7 @@ public class GroundItem extends Item { * @return {@code True} if so. */ public boolean droppedBy(Player p) { - if (dropper != null && p.getDetails().getUsernameHashcode() == dropper.getDetails().getUsernameHashcode()) { + if (dropper != null && p.getDetails().getUid() == dropper.getDetails().getUid()) { dropper = p; return true; } diff --git a/Server/src/main/java/core/game/world/map/build/LandscapeParser.java b/Server/src/main/java/core/game/world/map/build/LandscapeParser.java index 703e3907b..6f20e0fc4 100644 --- a/Server/src/main/java/core/game/world/map/build/LandscapeParser.java +++ b/Server/src/main/java/core/game/world/map/build/LandscapeParser.java @@ -7,6 +7,7 @@ import core.game.world.map.Location; import core.game.world.map.Region; import core.game.world.map.RegionManager; import core.game.world.map.RegionPlane; +import rs09.game.system.config.ObjectConfigParser; import java.nio.ByteBuffer; diff --git a/Server/src/main/java/core/gui/tab/GrandExchangeTab.java b/Server/src/main/java/core/gui/tab/GrandExchangeTab.java index c5239801e..b0eeb6290 100644 --- a/Server/src/main/java/core/gui/tab/GrandExchangeTab.java +++ b/Server/src/main/java/core/gui/tab/GrandExchangeTab.java @@ -63,7 +63,7 @@ public class GrandExchangeTab extends ConsoleTab { if (p == null) { continue; } - if (p.getDetails().getUsernameHashcode() == offer.getUid()) { + if (p.getDetails().getUid() == offer.getUid()) { player = p; break; } diff --git a/Server/src/main/java/core/net/event/GameReadEvent.java b/Server/src/main/java/core/net/event/GameReadEvent.java index 27544148e..577b140dc 100644 --- a/Server/src/main/java/core/net/event/GameReadEvent.java +++ b/Server/src/main/java/core/net/event/GameReadEvent.java @@ -97,6 +97,7 @@ public final class GameReadEvent extends IoReadEvent { IncomingPacket packet = PacketRepository.getIncoming(opcode); session.setLastPing(System.currentTimeMillis()); if (packet == null) { + SystemLogger.logErr("Unhandled packet [opcode=" + opcode + ", previous=" + last + ", size=" + size + ", header=" + header + "]"); if (GameWorld.getSettings().isDevMode()) { SystemLogger.logErr("Unhandled packet [opcode=" + opcode + ", previous=" + last + ", size=" + size + ", header=" + header + "]"); } diff --git a/Server/src/main/kotlin/rs09/game/content/global/shops/Shop.kt b/Server/src/main/kotlin/rs09/game/content/global/shops/Shop.kt index 786f6e233..c4b71153d 100644 --- a/Server/src/main/kotlin/rs09/game/content/global/shops/Shop.kt +++ b/Server/src/main/kotlin/rs09/game/content/global/shops/Shop.kt @@ -67,13 +67,13 @@ class Shop(val title: String, val stock: Array, val general: Boolean = if(!main) { - cont.listeners.remove(listenerInstances[player.username.hashCode()]) - playerStock.listeners.add(listenerInstances[player.username.hashCode()]) + cont.listeners.remove(listenerInstances[player.details.uid]) + playerStock.listeners.add(listenerInstances[player.details.uid]) } else { - playerStock.listeners.remove(listenerInstances[player.username.hashCode()]) - cont.listeners.add(listenerInstances[player.username.hashCode()]) + playerStock.listeners.remove(listenerInstances[player.details.uid]) + cont.listeners.add(listenerInstances[player.details.uid]) } val settings = IfaceSettingsBuilder() @@ -98,11 +98,11 @@ class Shop(val title: String, val stock: Array, val general: Boolean = public fun getContainer(player: Player) : Container { val container = if(getServerConfig().getBoolean(Shops.personalizedShops, false)) - stockInstances[player.username.hashCode()] ?: generateStockContainer().also { stockInstances[player.username.hashCode()] = it } + stockInstances[player.details.uid] ?: generateStockContainer().also { stockInstances[player.details.uid] = it } else stockInstances[ServerConstants.SERVER_NAME.hashCode()]!! - val listener = listenerInstances[player.username.hashCode()] + val listener = listenerInstances[player.details.uid] if(listener != null && listener.player != player) { @@ -111,7 +111,7 @@ class Shop(val title: String, val stock: Array, val general: Boolean = if(listener == null || listener.player != player) { - listenerInstances[player.username.hashCode()] = ShopListener(player) + listenerInstances[player.details.uid] = ShopListener(player) } return container @@ -310,7 +310,7 @@ class Shop(val title: String, val stock: Array, val general: Boolean = addItem(player, item.id, item.amount) if(getServerConfig().getBoolean(Shops.personalizedShops, false)){ - needsUpdate[player.username.hashCode()] = true + needsUpdate[player.details.uid] = true } else { needsUpdate[ServerConstants.SERVER_NAME.hashCode()] = true } @@ -385,7 +385,7 @@ class Shop(val title: String, val stock: Array, val general: Boolean = container?.add(item) container?.refresh() if(getServerConfig().getBoolean(Shops.personalizedShops, false)){ - needsUpdate[player.username.hashCode()] = true + needsUpdate[player.details.uid] = true } else { needsUpdate[ServerConstants.SERVER_NAME.hashCode()] = true } diff --git a/Server/src/main/kotlin/rs09/game/content/global/shops/Shops.kt b/Server/src/main/kotlin/rs09/game/content/global/shops/Shops.kt index 48429e103..41f1e6a44 100644 --- a/Server/src/main/kotlin/rs09/game/content/global/shops/Shops.kt +++ b/Server/src/main/kotlin/rs09/game/content/global/shops/Shops.kt @@ -196,10 +196,10 @@ class Shops : StartupListener, TickListener, InteractionListener, InterfaceListe onClose(Components.SHOP_TEMPLATE_620) { player, _ -> val shop = getAttribute(player, "shop", null) ?: return@onClose true - val listener = Shop.listenerInstances[player.username.hashCode()] ?: return@onClose true + val listener = Shop.listenerInstances[player.details.uid] ?: return@onClose true if(getServerConfig().getBoolean(personalizedShops, false)) - shop.stockInstances[player.username.hashCode()]?.listeners?.remove(listener) + shop.stockInstances[player.details.uid]?.listeners?.remove(listener) else shop.stockInstances[ServerConstants.SERVER_NAME.hashCode()]!!.listeners.remove(listener) diff --git a/Server/src/main/kotlin/rs09/game/ge/GrandExchange.kt b/Server/src/main/kotlin/rs09/game/ge/GrandExchange.kt index d3d85c4b3..ecb13e080 100644 --- a/Server/src/main/kotlin/rs09/game/ge/GrandExchange.kt +++ b/Server/src/main/kotlin/rs09/game/ge/GrandExchange.kt @@ -14,7 +14,6 @@ import rs09.game.world.GameWorld import rs09.game.world.repository.Repository import rs09.tools.stringtools.colorize import java.lang.Integer.max -import java.sql.ResultSet import java.util.concurrent.LinkedBlockingDeque /** @@ -231,9 +230,9 @@ class GrandExchange : StartupListener, Commands { } if ( player.isArtificial ) - offer.playerUID = 0.also { offer.isBot = true } + offer.playerUID = PlayerDetails.getDetails("2009scape").uid.also { offer.isBot = true } else - offer.playerUID = player.details.accountInfo.uid + offer.playerUID = player.details.uid offer.offerState = OfferState.REGISTERED //GrandExchangeRecords.getInstance(player).update(offer) @@ -315,10 +314,10 @@ class GrandExchange : StartupListener, Commands { */ seller.update() - val sellerPlayer = Repository.players.firstOrNull { it.details.accountInfo.uid == seller.playerUID } + val sellerPlayer = Repository.uid_map[seller.playerUID] sellerPlayer?.let { GrandExchangeRecords.getInstance(sellerPlayer).visualizeRecords() } buyer.update() - val buyerPlayer = Repository.players.firstOrNull { it.details.accountInfo.uid == buyer.playerUID } + val buyerPlayer = Repository.uid_map[buyer.playerUID] buyerPlayer?.let { GrandExchangeRecords.getInstance(buyerPlayer).visualizeRecords() } } @@ -369,4 +368,4 @@ class GrandExchange : StartupListener, Commands { GEDB.init() boot() } -} +} \ No newline at end of file diff --git a/Server/src/main/kotlin/rs09/game/ge/GrandExchangeRecords.kt b/Server/src/main/kotlin/rs09/game/ge/GrandExchangeRecords.kt index 9046586e8..b6134d604 100644 --- a/Server/src/main/kotlin/rs09/game/ge/GrandExchangeRecords.kt +++ b/Server/src/main/kotlin/rs09/game/ge/GrandExchangeRecords.kt @@ -55,7 +55,7 @@ class GrandExchangeRecords(private val player: Player? = null) : PersistPlayer, GEDB.run { conn -> val stmt = conn.createStatement() - val offer_records = stmt.executeQuery("SELECT * from player_offers where player_uid = ${player.details.accountInfo.uid} AND offer_state < 6") + val offer_records = stmt.executeQuery("SELECT * from player_offers where player_uid = ${player.details.uid} AND offer_state < 6") while (offer_records.next()) { val offer = GrandExchangeOffer.fromQuery(offer_records) @@ -252,4 +252,4 @@ class GrandExchangeRecords(private val player: Player? = null) : PersistPlayer, return player?.getAttribute("ge-records", GrandExchangeRecords()) ?: GrandExchangeRecords() } } -} +} \ No newline at end of file diff --git a/Server/src/main/kotlin/rs09/game/world/repository/Repository.kt b/Server/src/main/kotlin/rs09/game/world/repository/Repository.kt index 4e9cc7d6d..642be267b 100644 --- a/Server/src/main/kotlin/rs09/game/world/repository/Repository.kt +++ b/Server/src/main/kotlin/rs09/game/world/repository/Repository.kt @@ -138,14 +138,14 @@ object Repository { @JvmStatic fun addPlayer(player: Player){ players.add(player) - uid_map[player.details.usernameHashcode] = player + uid_map[player.details.uid] = player playerNames[player.name] = player } @JvmStatic fun removePlayer(player: Player){ players.remove(player) - uid_map.remove(player.details.usernameHashcode) + uid_map.remove(player.details.uid) playerNames.remove(player.name) UpdateSequence.renderablePlayers.remove(player) }