From 487ad76ee2d76593318673e88557ffb78d7e612a Mon Sep 17 00:00:00 2001 From: Alejandro <25-alejandro@users.noreply.git.krews.org> Date: Fri, 17 May 2019 23:07:22 +0300 Subject: [PATCH] Fix unseen item count not appearing. Closes #18 --- .../achievements/AchievementManager.java | 2 + .../habbohotel/catalog/CatalogManager.java | 31 +++++++- .../com/eu/habbo/habbohotel/users/Habbo.java | 1 + .../inventory/AddHabboItemComposer.java | 73 ++++++++++++++++--- .../outgoing/users/AddUserBadgeComposer.java | 2 +- 5 files changed, 95 insertions(+), 14 deletions(-) diff --git a/src/main/java/com/eu/habbo/habbohotel/achievements/AchievementManager.java b/src/main/java/com/eu/habbo/habbohotel/achievements/AchievementManager.java index 0a65a8ac..4b9e8868 100644 --- a/src/main/java/com/eu/habbo/habbohotel/achievements/AchievementManager.java +++ b/src/main/java/com/eu/habbo/habbohotel/achievements/AchievementManager.java @@ -295,6 +295,8 @@ public class AchievementManager } } + habbo.getClient().sendResponse(new AddHabboItemComposer(badge.getId(), AddHabboItemComposer.AddHabboItemCategory.BADGE)); + habbo.getHabboStats().addAchievementScore(newLevel.points); if (newLevel.rewardAmount > 0) 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 e7a1b066..4c9c0f3d 100644 --- a/src/main/java/com/eu/habbo/habbohotel/catalog/CatalogManager.java +++ b/src/main/java/com/eu/habbo/habbohotel/catalog/CatalogManager.java @@ -41,6 +41,7 @@ import gnu.trove.set.hash.THashSet; import java.sql.*; import java.util.*; +import java.util.stream.Collectors; public class CatalogManager { @@ -1077,7 +1078,9 @@ public class CatalogManager if (totalPoints > 0 && habbo.getHabboInfo().getCurrencyAmount(item.getPointsType()) - totalPoints < 0) return; List badges = new ArrayList<>(); + Map> unseenItems = new HashMap<>(); boolean badgeFound = false; + for (int i = 0; i < amount; i++) { habbo.getHabboStats().addLtdLog(item.getId(), Emulator.getIntUnixTimestamp()); @@ -1105,6 +1108,12 @@ public class CatalogManager Emulator.getThreading().run(bot); habbo.getClient().getHabbo().getInventory().getBotsComponent().addBot(bot); habbo.getClient().sendResponse(new AddBotComposer(bot)); + + if (!unseenItems.containsKey(AddHabboItemComposer.AddHabboItemCategory.BOT)) { + unseenItems.put(AddHabboItemComposer.AddHabboItemCategory.BOT, new ArrayList<>()); + } + + unseenItems.get(AddHabboItemComposer.AddHabboItemCategory.BOT).add(bot.getId()); } else { throw new Exception("Failed to create bot of type: " + type); } @@ -1144,6 +1153,12 @@ public class CatalogManager habbo.getClient().sendResponse(new PetBoughtNotificationComposer(pet, false)); AchievementManager.progressAchievement(habbo.getClient().getHabbo(), Emulator.getGameEnvironment().getAchievementManager().getAchievement("PetLover")); + + if (!unseenItems.containsKey(AddHabboItemComposer.AddHabboItemCategory.PET)) { + unseenItems.put(AddHabboItemComposer.AddHabboItemCategory.PET, new ArrayList<>()); + } + + unseenItems.get(AddHabboItemComposer.AddHabboItemCategory.PET).add(pet.getId()); } else if (baseItem.getType() == FurnitureType.BADGE) { if (!habbo.getInventory().getBadgesComponent().hasBadge(baseItem.getName())) { if (!badges.contains(baseItem.getName())) { @@ -1256,12 +1271,10 @@ public class CatalogManager } } - if (purchasedEvent.itemsList != null) + if (purchasedEvent.itemsList != null && !purchasedEvent.itemsList.isEmpty()) { - habbo.getClient().sendResponse(new AddHabboItemComposer(purchasedEvent.itemsList)); habbo.getClient().getHabbo().getInventory().getItemsComponent().addItems(purchasedEvent.itemsList); - habbo.getClient().sendResponse(new PurchaseOKComposer(purchasedEvent.catalogItem)); - habbo.getClient().sendResponse(new InventoryRefreshComposer()); + unseenItems.put(AddHabboItemComposer.AddHabboItemCategory.OWNED_FURNI, purchasedEvent.itemsList.stream().map(HabboItem::getId).collect(Collectors.toList())); Emulator.getPluginManager().fireEvent(new UserCatalogFurnitureBoughtEvent(habbo, item, purchasedEvent.itemsList)); @@ -1274,6 +1287,10 @@ public class CatalogManager } } + if (!purchasedEvent.badges.isEmpty() && !unseenItems.containsKey(AddHabboItemComposer.AddHabboItemCategory.BOT)) { + unseenItems.put(AddHabboItemComposer.AddHabboItemCategory.BADGE, new ArrayList<>()); + } + for (String b : purchasedEvent.badges) { HabboBadge badge = new HabboBadge(0, b, 0, habbo); @@ -1285,9 +1302,15 @@ public class CatalogManager keys.put("image", "${image.library.url}album1584/" + badge.getCode() + ".gif"); keys.put("message", Emulator.getTexts().getValue("commands.generic.cmd_badge.received")); habbo.getClient().sendResponse(new BubbleAlertComposer(BubbleAlertKeys.RECEIVED_BADGE.key, keys)); + unseenItems.get(AddHabboItemComposer.AddHabboItemCategory.BADGE).add(badge.getId()); } habbo.getClient().getHabbo().getHabboStats().addPurchase(purchasedEvent.catalogItem); + habbo.getClient().sendResponse(new AddHabboItemComposer(unseenItems)); + + habbo.getClient().sendResponse(new PurchaseOKComposer(purchasedEvent.catalogItem)); + habbo.getClient().sendResponse(new InventoryRefreshComposer()); + } catch (Exception e) { Emulator.getLogging().logPacketError(e); diff --git a/src/main/java/com/eu/habbo/habbohotel/users/Habbo.java b/src/main/java/com/eu/habbo/habbohotel/users/Habbo.java index bd7799b4..f5c3a2fb 100644 --- a/src/main/java/com/eu/habbo/habbohotel/users/Habbo.java +++ b/src/main/java/com/eu/habbo/habbohotel/users/Habbo.java @@ -414,6 +414,7 @@ public class Habbo implements Runnable HabboBadge badge = BadgesComponent.createBadge(code, this); this.habboInventory.getBadgesComponent().addBadge(badge); this.client.sendResponse(new AddUserBadgeComposer(badge)); + this.client.sendResponse(new AddHabboItemComposer(badge.getId(), AddHabboItemComposer.AddHabboItemCategory.BADGE)); THashMap keys = new THashMap<>(); keys.put("display", "BUBBLE"); diff --git a/src/main/java/com/eu/habbo/messages/outgoing/inventory/AddHabboItemComposer.java b/src/main/java/com/eu/habbo/messages/outgoing/inventory/AddHabboItemComposer.java index 2af53017..a470601c 100644 --- a/src/main/java/com/eu/habbo/messages/outgoing/inventory/AddHabboItemComposer.java +++ b/src/main/java/com/eu/habbo/messages/outgoing/inventory/AddHabboItemComposer.java @@ -6,19 +6,57 @@ import com.eu.habbo.messages.outgoing.MessageComposer; import com.eu.habbo.messages.outgoing.Outgoing; import gnu.trove.set.hash.THashSet; +import java.util.List; +import java.util.Map; + public class AddHabboItemComposer extends MessageComposer { + public enum AddHabboItemCategory { + OWNED_FURNI(1), + RENTED_FURNI(2), + PET(3), + BADGE(4), + BOT(5), + GAME(6); + + public final int number; + + AddHabboItemCategory(int number) + { + this.number = number; + } + } + private THashSet itemsList; private HabboItem item; - public AddHabboItemComposer(THashSet itemsList) - { + private int[] ids; + private AddHabboItemCategory category; + + private Map> entries; + + public AddHabboItemComposer(THashSet itemsList) { this.itemsList = itemsList; + this.category = AddHabboItemCategory.OWNED_FURNI; } - public AddHabboItemComposer(HabboItem item) - { + public AddHabboItemComposer(HabboItem item) { this.item = item; + this.category = AddHabboItemCategory.OWNED_FURNI; + } + + public AddHabboItemComposer(int[] ids, AddHabboItemCategory category) { + this.ids = ids; + this.category = category; + } + + public AddHabboItemComposer(int id, AddHabboItemCategory category) { + this.ids = new int[]{id}; + this.category = category; + } + + public AddHabboItemComposer(Map> entries) { + this.entries = entries; } @Override @@ -26,22 +64,39 @@ public class AddHabboItemComposer extends MessageComposer { this.response.init(Outgoing.AddHabboItemComposer); - if(this.item == null) - { + if (this.ids != null) { + this.response.appendInt(1); + + this.response.appendInt(this.category.number); + this.response.appendInt(this.ids.length); + for (int id : this.ids) { + this.response.appendInt(id); + } + } else if (this.entries != null) { + this.response.appendInt(this.entries.size()); + + for (Map.Entry> item : this.entries.entrySet()) { + this.response.appendInt(item.getKey().number); + + this.response.appendInt(item.getValue().size()); + for (int id : item.getValue()) { + this.response.appendInt(id); + } + } + } else if (this.item == null) { this.response.appendInt(1); this.response.appendInt(1); this.response.appendInt(this.itemsList.size()); for (HabboItem habboItem : this.itemsList) { this.response.appendInt(habboItem.getId()); } - } - else - { + } else { this.response.appendInt(1); this.response.appendInt(1); this.response.appendInt(1); this.response.appendInt(this.item.getId()); } + return this.response; } } diff --git a/src/main/java/com/eu/habbo/messages/outgoing/users/AddUserBadgeComposer.java b/src/main/java/com/eu/habbo/messages/outgoing/users/AddUserBadgeComposer.java index cf5cc917..effa1033 100644 --- a/src/main/java/com/eu/habbo/messages/outgoing/users/AddUserBadgeComposer.java +++ b/src/main/java/com/eu/habbo/messages/outgoing/users/AddUserBadgeComposer.java @@ -18,7 +18,7 @@ public class AddUserBadgeComposer extends MessageComposer public ServerMessage compose() { this.response.init(Outgoing.AddUserBadgeComposer); - this.response.appendInt(this.badge.getSlot()); + this.response.appendInt(this.badge.getId()); this.response.appendString(this.badge.getCode()); return this.response; }