From bd21fd9096a717eedc30716bf7437be126f5c632 Mon Sep 17 00:00:00 2001 From: Thijmen Stavenuiter Date: Sat, 25 Apr 2020 11:04:48 +0200 Subject: [PATCH 1/7] Builder config for Project Dobby --- .gitlab-ci.yml | 36 +++++++++++++++++++++++++++++++++++- 1 file changed, 35 insertions(+), 1 deletion(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index a0cacc72..f443c3ff 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -1,10 +1,15 @@ image: maven:latest +stages: + - build + - deploy + cache: paths: - target/ build: + stage: build script: - mvn package only: @@ -12,4 +17,33 @@ build: - master artifacts: paths: - - target/Habbo-*.jar \ No newline at end of file + - target/Habbo-*.jar + + +.notify_builder: ¬ify_builder + stage: deploy + trigger: + project: project-dobby/builder + strategy: depend + + +notify_deploy_release: + <<: *notify_builder + variables: + UPSTREAM_DECISION: "tag" + UPSTREAM_COMMIT_SHA: $CI_COMMIT_SHA + UPSTREAM_PROJECT: $CI_PROJECT_PATH + UPSTREAM_BRANCH: $CI_COMMIT_TAG + only: + - tags + +notify_deploy_dev: + <<: *notify_builder + variables: + UPSTREAM_DECISION: "dev" + UPSTREAM_COMMIT_SHA: $CI_COMMIT_SHA + UPSTREAM_PROJECT: $CI_PROJECT_PATH + UPSTREAM_BRANCH: "dev" + only: + - dev + \ No newline at end of file From 6120285d9b692e867d067ec5b47822d26853e0d8 Mon Sep 17 00:00:00 2001 From: David Silva Date: Mon, 27 Apr 2020 01:53:59 +0200 Subject: [PATCH 2/7] fix(Room): allow magictile to be moved under user/pets/bots --- src/main/java/com/eu/habbo/habbohotel/rooms/Room.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/eu/habbo/habbohotel/rooms/Room.java b/src/main/java/com/eu/habbo/habbohotel/rooms/Room.java index 3d3e4893..dd6597d4 100644 --- a/src/main/java/com/eu/habbo/habbohotel/rooms/Room.java +++ b/src/main/java/com/eu/habbo/habbohotel/rooms/Room.java @@ -4497,9 +4497,9 @@ public class Room implements Comparable, ISerialize, Runnable { HabboItem tileTopItem = this.getTopItemAt(t.x, t.y); if (!magicTile && ((tileTopItem != null && tileTopItem != item ? (t.state.equals(RoomTileState.INVALID) || !t.getAllowStack() || !tileTopItem.getBaseItem().allowStack()) : this.calculateTileState(t, item).equals(RoomTileState.INVALID)))) return FurnitureMovementError.CANT_STACK; - if (this.hasHabbosAt(t.x, t.y)) return FurnitureMovementError.TILE_HAS_HABBOS; - if (this.hasBotsAt(t.x, t.y)) return FurnitureMovementError.TILE_HAS_BOTS; - if (this.hasPetsAt(t.x, t.y)) return FurnitureMovementError.TILE_HAS_PETS; + if (!magicTile && this.hasHabbosAt(t.x, t.y)) return FurnitureMovementError.TILE_HAS_HABBOS; + if (!magicTile && this.hasBotsAt(t.x, t.y)) return FurnitureMovementError.TILE_HAS_BOTS; + if (!magicTile && this.hasPetsAt(t.x, t.y)) return FurnitureMovementError.TILE_HAS_PETS; } } From fed9d2a61486ab449cbae9cbded875e894780156 Mon Sep 17 00:00:00 2001 From: David Silva Date: Mon, 27 Apr 2020 03:34:57 +0200 Subject: [PATCH 3/7] fix(MonsterplantPet): rare seed should be rare --- .../pets/InteractionMonsterPlantSeed.java | 12 ++++++++++++ .../habbo/habbohotel/pets/MonsterplantPet.java | 16 ++++++++-------- .../com/eu/habbo/habbohotel/pets/PetManager.java | 15 +++++++++------ .../rooms/items/ToggleFloorItemEvent.java | 9 +++++++-- 4 files changed, 36 insertions(+), 16 deletions(-) diff --git a/src/main/java/com/eu/habbo/habbohotel/items/interactions/pets/InteractionMonsterPlantSeed.java b/src/main/java/com/eu/habbo/habbohotel/items/interactions/pets/InteractionMonsterPlantSeed.java index 8bbe249c..cbd2ea22 100644 --- a/src/main/java/com/eu/habbo/habbohotel/items/interactions/pets/InteractionMonsterPlantSeed.java +++ b/src/main/java/com/eu/habbo/habbohotel/items/interactions/pets/InteractionMonsterPlantSeed.java @@ -30,6 +30,18 @@ public class InteractionMonsterPlantSeed extends HabboItem { } } + public static int randomGoldenRarityLevel() { + int number = Emulator.getRandom().nextInt(66); + int count = 0; + for (int i = 8; i < 11; i++) { + count += 11 - i; + if (number <= count) { + return i; + } + } + return 10; + } + public static int randomRarityLevel() { int number = Emulator.getRandom().nextInt(66); int count = 0; diff --git a/src/main/java/com/eu/habbo/habbohotel/pets/MonsterplantPet.java b/src/main/java/com/eu/habbo/habbohotel/pets/MonsterplantPet.java index 19bb4181..88b98991 100644 --- a/src/main/java/com/eu/habbo/habbohotel/pets/MonsterplantPet.java +++ b/src/main/java/com/eu/habbo/habbohotel/pets/MonsterplantPet.java @@ -26,32 +26,32 @@ public class MonsterplantPet extends Pet implements IPetLook { public static final Map> bodyRarity = new LinkedHashMap>() { { this.put(1, new Pair<>("Blungon", 0)); - this.put(5, new Pair<>("Squarg", 0)); this.put(2, new Pair<>("Wailzor", 1)); this.put(3, new Pair<>("Stumpy", 1)); this.put(4, new Pair<>("Sunspike", 2)); - this.put(9, new Pair<>("Weggylum", 2)); + this.put(5, new Pair<>("Squarg", 0)); this.put(6, new Pair<>("Shroomer", 3)); this.put(7, new Pair<>("Zuchinu", 3)); + this.put(8, new Pair<>("Abysswirl", 5)); + this.put(9, new Pair<>("Weggylum", 2)); this.put(10, new Pair<>("Wystique", 4)); this.put(11, new Pair<>("Hairbullis", 4)); - this.put(8, new Pair<>("Abysswirl", 5)); this.put(12, new Pair<>("Snozzle", 5)); //Rarity??? } }; public static final Map> colorRarity = new LinkedHashMap>() { { this.put(0, new Pair<>("Aenueus", 0)); - this.put(9, new Pair<>("Fulvus", 0)); this.put(1, new Pair<>("Griseus", 1)); - this.put(3, new Pair<>("Viridulus", 1)); this.put(2, new Pair<>("Phoenicus", 2)); + this.put(3, new Pair<>("Viridulus", 1)); + this.put(4, new Pair<>("Cyaneus", 5)); this.put(5, new Pair<>("Incarnatus", 2)); - this.put(8, new Pair<>("Amethyst", 3)); - this.put(10, new Pair<>("Cinereus", 3)); this.put(6, new Pair<>("Azureus", 4)); this.put(7, new Pair<>("Atamasc", 4)); - this.put(4, new Pair<>("Cyaneus", 5)); + this.put(8, new Pair<>("Amethyst", 3)); + this.put(9, new Pair<>("Fulvus", 0)); + this.put(10, new Pair<>("Cinereus", 3)); } }; public static final ArrayList> indexedBody = new ArrayList<>(MonsterplantPet.bodyRarity.values()); diff --git a/src/main/java/com/eu/habbo/habbohotel/pets/PetManager.java b/src/main/java/com/eu/habbo/habbohotel/pets/PetManager.java index 7335963d..981dfffd 100644 --- a/src/main/java/com/eu/habbo/habbohotel/pets/PetManager.java +++ b/src/main/java/com/eu/habbo/habbohotel/pets/PetManager.java @@ -19,6 +19,7 @@ import gnu.trove.map.hash.TIntObjectHashMap; import gnu.trove.procedure.TIntObjectProcedure; import gnu.trove.set.hash.THashSet; import org.apache.commons.math3.distribution.NormalDistribution; +import org.apache.commons.math3.util.Pair; import java.sql.*; import java.util.ArrayList; @@ -101,13 +102,15 @@ public class PetManager { return 100 * level; } - public static int randomBody(int minimumRarity) { - int randomRarity = random(Math.max(minimumRarity - 1, 0), MonsterplantPet.bodyRarity.size(), 2.0); + public static int randomBody(int minimumRarity, boolean isRare) { + int randomRarity = isRare ? random(Math.max(minimumRarity - 1, 0), (MonsterplantPet.bodyRarity.size() - minimumRarity) + (minimumRarity - 1), 2.0) : random(Math.max(minimumRarity - 1, 0), MonsterplantPet.bodyRarity.size(), 2.0); + return MonsterplantPet.bodyRarity.get(MonsterplantPet.bodyRarity.keySet().toArray()[randomRarity]).getValue(); } - public static int randomColor(int minimumRarity) { - int randomRarity = random(Math.max(minimumRarity - 1, 0), MonsterplantPet.colorRarity.size(), 2.0); + public static int randomColor(int minimumRarity, boolean isRare) { + int randomRarity = isRare ? random(Math.max(minimumRarity - 1, 0), (MonsterplantPet.colorRarity.size() - minimumRarity) + (minimumRarity - 1), 2.0) : random(Math.max(minimumRarity - 1, 0), MonsterplantPet.colorRarity.size(), 2.0); + return MonsterplantPet.colorRarity.get(MonsterplantPet.colorRarity.keySet().toArray()[randomRarity]).getValue(); } @@ -426,8 +429,8 @@ public class PetManager { public MonsterplantPet createMonsterplant(Room room, Habbo habbo, boolean rare, RoomTile t, int minimumRarity) { MonsterplantPet pet = new MonsterplantPet( habbo.getHabboInfo().getId(), //Owner ID - randomBody(rare ? 4 : minimumRarity), - randomColor(rare ? 4 : minimumRarity), + randomBody(minimumRarity, rare), + randomColor(minimumRarity, rare), Emulator.getRandom().nextInt(12) + 1, Emulator.getRandom().nextInt(11), Emulator.getRandom().nextInt(12) + 1, diff --git a/src/main/java/com/eu/habbo/messages/incoming/rooms/items/ToggleFloorItemEvent.java b/src/main/java/com/eu/habbo/messages/incoming/rooms/items/ToggleFloorItemEvent.java index e9e04c73..0ad6804a 100644 --- a/src/main/java/com/eu/habbo/messages/incoming/rooms/items/ToggleFloorItemEvent.java +++ b/src/main/java/com/eu/habbo/messages/incoming/rooms/items/ToggleFloorItemEvent.java @@ -81,14 +81,19 @@ public class ToggleFloorItemEvent extends MessageHandler { if (item instanceof InteractionMonsterPlantSeed) { Emulator.getThreading().run(new QueryDeleteHabboItem(item.getId())); int rarity = 0; - if (item.getExtradata().isEmpty()) rarity = InteractionMonsterPlantSeed.randomRarityLevel(); + + boolean isRare = item.getBaseItem().getName().contains("rare"); + + if ((!item.getExtradata().isEmpty() && Integer.valueOf(item.getExtradata()) - 1 < 0) || item.getExtradata().isEmpty()) { + rarity = isRare ? InteractionMonsterPlantSeed.randomGoldenRarityLevel() : InteractionMonsterPlantSeed.randomRarityLevel(); + } else { try { rarity = Integer.valueOf(item.getExtradata()) - 1; } catch (Exception e) { } } - MonsterplantPet pet = Emulator.getGameEnvironment().getPetManager().createMonsterplant(room, this.client.getHabbo(), item.getBaseItem().getName().contains("rare"), room.getLayout().getTile(item.getX(), item.getY()), rarity); + MonsterplantPet pet = Emulator.getGameEnvironment().getPetManager().createMonsterplant(room, this.client.getHabbo(), isRare, room.getLayout().getTile(item.getX(), item.getY()), rarity); room.sendComposer(new RemoveFloorItemComposer(item, true).compose()); room.removeHabboItem(item); room.updateTile(room.getLayout().getTile(item.getX(), item.getY())); From 0f16d9aa42d99e2b0870baf1b95ed641433f562a Mon Sep 17 00:00:00 2001 From: David Silva Date: Tue, 28 Apr 2020 00:35:13 +0200 Subject: [PATCH 4/7] fix(RequestUserDataEvent): patch auto redirect when nux is done --- .../habbo/messages/incoming/users/RequestUserDataEvent.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/eu/habbo/messages/incoming/users/RequestUserDataEvent.java b/src/main/java/com/eu/habbo/messages/incoming/users/RequestUserDataEvent.java index 56f75a1b..174f5ef1 100644 --- a/src/main/java/com/eu/habbo/messages/incoming/users/RequestUserDataEvent.java +++ b/src/main/java/com/eu/habbo/messages/incoming/users/RequestUserDataEvent.java @@ -39,9 +39,9 @@ public class RequestUserDataEvent extends MessageHandler { messages.add(new UserDataComposer(this.client.getHabbo()).compose()); messages.add(new UserPerksComposer(this.client.getHabbo()).compose()); - if (this.client.getHabbo().getHabboInfo().getHomeRoom() != 0) + if (!this.client.getHabbo().getHabboStats().nux && this.client.getHabbo().getHabboInfo().getHomeRoom() != 0) messages.add(new ForwardToRoomComposer(this.client.getHabbo().getHabboInfo().getHomeRoom()).compose()); - else if (RoomManager.HOME_ROOM_ID > 0) + else if (!this.client.getHabbo().getHabboStats().nux && RoomManager.HOME_ROOM_ID > 0) messages.add(new ForwardToRoomComposer(RoomManager.HOME_ROOM_ID).compose()); messages.add(new MeMenuSettingsComposer(this.client.getHabbo()).compose()); From f7539f0aae02250407c26b8f33d31f424b1381af Mon Sep 17 00:00:00 2001 From: David Silva Date: Tue, 28 Apr 2020 01:16:56 +0200 Subject: [PATCH 5/7] feat(HabboStats): update last catalogue purchase --- sqlupdates/2_3_1_TO_2_4_0-RC-1.sql | 2 ++ .../eu/habbo/habbohotel/catalog/CatalogManager.java | 2 ++ .../java/com/eu/habbo/habbohotel/users/HabboStats.java | 10 +++++++--- .../messages/incoming/catalog/CatalogBuyItemEvent.java | 2 ++ 4 files changed, 13 insertions(+), 3 deletions(-) diff --git a/sqlupdates/2_3_1_TO_2_4_0-RC-1.sql b/sqlupdates/2_3_1_TO_2_4_0-RC-1.sql index bee4dbe3..8727e26a 100644 --- a/sqlupdates/2_3_1_TO_2_4_0-RC-1.sql +++ b/sqlupdates/2_3_1_TO_2_4_0-RC-1.sql @@ -1 +1,3 @@ INSERT INTO `emulator_settings`(`key`, `value`) VALUES ('hotel.room.stickies.max', '200'); + +ALTER TABLE `users_settings` ADD COLUMN `last_purchase_timestamp` int(11) NOT NULL DEFAULT UNIX_TIMESTAMP(); \ No newline at end of file diff --git a/src/main/java/com/eu/habbo/habbohotel/catalog/CatalogManager.java b/src/main/java/com/eu/habbo/habbohotel/catalog/CatalogManager.java index 009b0828..bcb5a67c 100644 --- a/src/main/java/com/eu/habbo/habbohotel/catalog/CatalogManager.java +++ b/src/main/java/com/eu/habbo/habbohotel/catalog/CatalogManager.java @@ -1124,6 +1124,8 @@ public class CatalogManager { habbo.getClient().sendResponse(new AlertPurchaseFailedComposer(AlertPurchaseFailedComposer.SERVER_ERROR)); } } finally { + habbo.getHabboStats().lastPurchaseTimestamp = Emulator.getIntUnixTimestamp(); + habbo.getHabboStats().run(); habbo.getHabboStats().isPurchasingFurniture = false; } } diff --git a/src/main/java/com/eu/habbo/habbohotel/users/HabboStats.java b/src/main/java/com/eu/habbo/habbohotel/users/HabboStats.java index 7373b749..5e84e5cb 100644 --- a/src/main/java/com/eu/habbo/habbohotel/users/HabboStats.java +++ b/src/main/java/com/eu/habbo/habbohotel/users/HabboStats.java @@ -78,7 +78,7 @@ public class HabboStats implements Runnable { public int forumPostsCount; public THashMap> ltdPurchaseLog = new THashMap<>(0); public long lastTradeTimestamp = Emulator.getIntUnixTimestamp(); - public long lastPurchaseTimestamp = Emulator.getIntUnixTimestamp(); + public int lastPurchaseTimestamp; public long lastGiftTimestamp = Emulator.getIntUnixTimestamp(); public int uiFlags; public boolean hasGottenDefaultSavedSearches; @@ -135,6 +135,8 @@ public class HabboStats implements Runnable { this.forumPostsCount = set.getInt("forums_post_count"); this.uiFlags = set.getInt("ui_flags"); this.hasGottenDefaultSavedSearches = set.getInt("has_gotten_default_saved_searches") == 1; + this.lastPurchaseTimestamp = set.getInt("last_purchase_timestamp"); + this.nuxReward = this.nux; try (PreparedStatement statement = set.getStatement().getConnection().prepareStatement("SELECT * FROM user_window_settings WHERE user_id = ? LIMIT 1")) { @@ -294,7 +296,7 @@ public class HabboStats implements Runnable { @Override public void run() { try (Connection connection = Emulator.getDatabase().getDataSource().getConnection()) { - try (PreparedStatement statement = connection.prepareStatement("UPDATE users_settings SET achievement_score = ?, respects_received = ?, respects_given = ?, daily_respect_points = ?, block_following = ?, block_friendrequests = ?, online_time = online_time + ?, guild_id = ?, daily_pet_respect_points = ?, club_expire_timestamp = ?, login_streak = ?, rent_space_id = ?, rent_space_endtime = ?, volume_system = ?, volume_furni = ?, volume_trax = ?, block_roominvites = ?, old_chat = ?, block_camera_follow = ?, chat_color = ?, hof_points = ?, block_alerts = ?, talent_track_citizenship_level = ?, talent_track_helpers_level = ?, ignore_bots = ?, ignore_pets = ?, nux = ?, mute_end_timestamp = ?, allow_name_change = ?, perk_trade = ?, can_trade = ?, `forums_post_count` = ?, ui_flags = ?, has_gotten_default_saved_searches = ? WHERE user_id = ? LIMIT 1")) { + try (PreparedStatement statement = connection.prepareStatement("UPDATE users_settings SET achievement_score = ?, respects_received = ?, respects_given = ?, daily_respect_points = ?, block_following = ?, block_friendrequests = ?, online_time = online_time + ?, guild_id = ?, daily_pet_respect_points = ?, club_expire_timestamp = ?, login_streak = ?, rent_space_id = ?, rent_space_endtime = ?, volume_system = ?, volume_furni = ?, volume_trax = ?, block_roominvites = ?, old_chat = ?, block_camera_follow = ?, chat_color = ?, hof_points = ?, block_alerts = ?, talent_track_citizenship_level = ?, talent_track_helpers_level = ?, ignore_bots = ?, ignore_pets = ?, nux = ?, mute_end_timestamp = ?, allow_name_change = ?, perk_trade = ?, can_trade = ?, `forums_post_count` = ?, ui_flags = ?, has_gotten_default_saved_searches = ?, last_purchase_timestamp = ? WHERE user_id = ? LIMIT 1")) { statement.setInt(1, this.achievementScore); statement.setInt(2, this.respectPointsReceived); statement.setInt(3, this.respectPointsGiven); @@ -329,8 +331,10 @@ public class HabboStats implements Runnable { statement.setInt(32, this.forumPostsCount); statement.setInt(33, this.uiFlags); statement.setInt(34, this.hasGottenDefaultSavedSearches ? 1 : 0); + statement.setInt(35, this.lastPurchaseTimestamp); - statement.setInt(35, this.habboInfo.getId()); + statement.setInt(36, this.habboInfo.getId()); + statement.executeUpdate(); } diff --git a/src/main/java/com/eu/habbo/messages/incoming/catalog/CatalogBuyItemEvent.java b/src/main/java/com/eu/habbo/messages/incoming/catalog/CatalogBuyItemEvent.java index 67a89975..f7cc5ad7 100644 --- a/src/main/java/com/eu/habbo/messages/incoming/catalog/CatalogBuyItemEvent.java +++ b/src/main/java/com/eu/habbo/messages/incoming/catalog/CatalogBuyItemEvent.java @@ -177,6 +177,8 @@ public class CatalogBuyItemEvent extends MessageHandler { this.client.sendResponse(new PurchaseOKComposer(null)); this.client.sendResponse(new InventoryRefreshComposer()); + + this.client.getHabbo().getHabboStats().lastPurchaseTimestamp = Emulator.getIntUnixTimestamp(); this.client.getHabbo().getHabboStats().run(); } return; From 97f163be4506959f26dddd904020a2da7824cd56 Mon Sep 17 00:00:00 2001 From: David Silva Date: Tue, 28 Apr 2020 02:56:28 +0200 Subject: [PATCH 6/7] chore(.gitignore): ignore stupid file on mac --- .gitignore | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 04b8b762..54f0682d 100644 --- a/.gitignore +++ b/.gitignore @@ -13,4 +13,6 @@ config.ini *.txt *.jar *.log -*.zip \ No newline at end of file +*.zip +.DS_Store + From 8f5b55c9d76617e43edf9ebea7fea680f63ac77e Mon Sep 17 00:00:00 2001 From: David Silva Date: Wed, 29 Apr 2020 05:18:11 -0400 Subject: [PATCH 7/7] fix(ChannelReadHandler): patch vuln --- .../runnables/ChannelReadHandler.java | 64 +++++++++++++------ 1 file changed, 44 insertions(+), 20 deletions(-) diff --git a/src/main/java/com/eu/habbo/threading/runnables/ChannelReadHandler.java b/src/main/java/com/eu/habbo/threading/runnables/ChannelReadHandler.java index f21cbea6..59ccd39a 100644 --- a/src/main/java/com/eu/habbo/threading/runnables/ChannelReadHandler.java +++ b/src/main/java/com/eu/habbo/threading/runnables/ChannelReadHandler.java @@ -11,6 +11,7 @@ import io.netty.channel.ChannelHandlerContext; public class ChannelReadHandler implements Runnable { private final ChannelHandlerContext ctx; private final Object msg; + //private int _header; public ChannelReadHandler(ChannelHandlerContext ctx, Object msg) { this.ctx = ctx; @@ -18,29 +19,52 @@ public class ChannelReadHandler implements Runnable { } public void run() { - ByteBuf m = (ByteBuf) this.msg; - int length = m.readInt(); - short header = m.readShort(); - GameClient client = this.ctx.channel().attr(GameClientManager.CLIENT).get(); + try { + ByteBuf m = (ByteBuf) this.msg; + int length = m.readInt(); + short header = m.readShort(); + //_header = header; + GameClient client = this.ctx.channel().attr(GameClientManager.CLIENT).get(); - if (client != null) { - int count = 0; - int timestamp = Emulator.getIntUnixTimestamp(); - if (timestamp - client.lastPacketCounterCleared > 1) { - client.incomingPacketCounter.clear(); - client.lastPacketCounterCleared = timestamp; - } else { - count = client.incomingPacketCounter.getOrDefault(header, 0); + if (m.readableBytes() + 2 < length) { + return; } - if (count <= 10) { - count++; - client.incomingPacketCounter.put((int) header, count); - ByteBuf body = Unpooled.wrappedBuffer(m.readBytes(m.readableBytes())); - Emulator.getGameServer().getPacketManager().handlePacket(client, new ClientMessage(header, body)); - body.release(); + if (client != null) { + int count = 0; + int timestamp = Emulator.getIntUnixTimestamp(); + if (timestamp - client.lastPacketCounterCleared > 1) { + client.incomingPacketCounter.clear(); + client.lastPacketCounterCleared = timestamp; + } else { + if (m.readableBytes() + 2 < length) { + m.resetReaderIndex(); + client.incomingPacketCounter.put((int) header, 0); + count = 0; + return; + } else { + count = client.incomingPacketCounter.getOrDefault(header, 0); + } + } + + if (count <= 10) { + count++; + if (m.readableBytes() + 2 < length) { + m.resetReaderIndex(); + client.incomingPacketCounter.put((int) header, 0); + count = 0; + return; + } + client.incomingPacketCounter.put((int) header, count); + ByteBuf body = Unpooled.wrappedBuffer(m.readBytes(m.readableBytes())); + Emulator.getGameServer().getPacketManager().handlePacket(client, new ClientMessage(header, body)); + body.release(); + } } + + m.release(); + } catch (Exception e) { + //System.out.println("Potential packet overflow occurring, careful! header: " + _header + e.getMessage()); } - m.release(); } -} \ No newline at end of file +}