diff --git a/.gitignore b/.gitignore index 1af1b635..284f2381 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ +logging/ *.iml .idea/ target/** @@ -6,9 +7,9 @@ packet.pkt plugins/** src/main/resources/ src/test/ -logging/ target/ config.ini *.txt -logging/** -logging/ +*.jar +*.log +*.zip \ No newline at end of file diff --git a/README.md b/README.md index d50ed617..3d1c13cd 100644 --- a/README.md +++ b/README.md @@ -5,7 +5,7 @@ ## **To Get The Camera To Work Visit http://arcturus.wf and register.** ## ## **TUTORIAL FOR PLUGINS http://arcturus.wf/thread-2415.html** ## # **DO NOT EDIT THE SOURCE. USE THE PLUGIN API.** # -## Current Stable Version: 1.12.0 ## +## Current Stable Version: 1.13.0 ## Arcturus Morningstar is a Habbo emulator written in Java aiming to be an exact clone of the offical server, based on Arcturus Emulator by TheGeneral. Targeting PRODUCTION-201611291003-338511768 diff --git a/pom.xml b/pom.xml index 30002e53..1b7cf782 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ com.eu.habbo Habbo - 1.12.0 + 1.13.0 UTF-8 diff --git a/sqlupdates/1_12_0_TO_1_13_0.sql b/sqlupdates/1_12_0_TO_1_13_0.sql index e69de29b..bca3baf1 100644 --- a/sqlupdates/1_12_0_TO_1_13_0.sql +++ b/sqlupdates/1_12_0_TO_1_13_0.sql @@ -0,0 +1,78 @@ +#DATABASE UPDATE: 1.12.0 -> 1.13.0 + +#IF YOU ARE NOT USING HTTPS RUN: +#UPDATE emulator_settings SET `value` = '0' WHERE `key` LIKE 'camera.use.https'; + +INSERT INTO `emulator_settings` (`key`, `value`) VALUES + ('hotel.view.ltdcountdown.enabled', '1'), + ('hotel.view.ltdcountdown.timestamp', '1519496132'), + ('hotel.view.ltdcountdown.itemid', '10388'), + ('hotel.view.ltdcountdown.pageid', '13'), + ('hotel.view.ltdcountdown.itename', 'trophy_netsafety_0'); + +CREATE TABLE `users_ignored` ( + `user_id` int(11) NOT NULL, + `target_id` int(11) NOT NULL +) ENGINE=InnoDB DEFAULT CHARSET=latin1; + +ALTER TABLE `users_ignored` + ADD KEY `user_id` (`user_id`,`target_id`); +COMMIT; + +INSERT INTO `emulator_settings` (`key`, `value`) VALUES ('io.client.multithreaded.handler', '1'); +INSERT INTO `emulator_settings` (`key`, `value`) VALUES ('hotel.room.stickypole.prefix', '%timestamp%, %username%:\\r'); +INSERT INTO `emulator_texts` (`key`, `value`) VALUES ('support.ticket.picked.failed', 'Picking issue failedd:
Ticket already picked or does not exist!'); +INSERT INTO `emulator_texts` (`key`, `value`) VALUES ('camera.error.creation', 'Failed to create your picture. *sadpanda*'); +INSERT INTO `emulator_texts` (`key`, `value`) VALUES ('scripter.warning.sticky.size', '%username% tried to create a sticky with %amount% characters where %limit% characters are allowed!'); +INSERT INTO `emulator_settings` (`key`, `value`) VALUES ('hotel.trading.requires.perk', '1'); +ALTER TABLE `users_settings` ADD `perk_trade` ENUM('0','1') NOT NULL DEFAULT '0' COMMENT 'Defines if a player has obtained the perk TRADE. When hotel.trading.requires.perk is set to 1, this perk is required in order to trade. Perk is obtained from the talen track.' AFTER `allow_name_change`; +UPDATE users_settings SET perk_trade = '1' WHERE talent_track_citizenship_level >= (SELECT `level` FROM achievements_talents WHERE reward_perks LIKE '%TRADE%' ORDER BY level ASC LIMIT 1); +INSERT INTO `emulator_settings` (`key`, `value`) VALUES ('hotel.targetoffer.id', '1'); + +CREATE TABLE `catalog_target_offers` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `offer_code` varchar(32) NOT NULL, + `title` varchar(128) NOT NULL DEFAULT '', + `description` varchar(2048) NOT NULL DEFAULT '', + `image` varchar(128) NOT NULL, + `icon` varchar(128) NOT NULL, + `end_timestamp` int(11) NOT NULL, + `credits` int(5) NOT NULL DEFAULT '10', + `points` int(5) NOT NULL DEFAULT '10', + `points_type` int(3) NOT NULL DEFAULT '5', + `purchase_limit` int(2) NOT NULL DEFAULT '5', + `catalog_item` int(11) NOT NULL, + `vars` varchar(1024) NOT NULL DEFAULT '' COMMENT 'List of strings seperated by a ;', + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=latin1; + +CREATE TABLE `users_target_offer_purchases` ( + `user_id` int(11) NOT NULL, + `offer_id` int(11) NOT NULL, + `state` int(11) NOT NULL DEFAULT '0', + `amount` int(11) NOT NULL DEFAULT '0', + `last_purchase` int(11) NOT NULL DEFAULT '0', + UNIQUE KEY `use_id` (`user_id`,`offer_id`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1; + +ALTER TABLE `permissions` ADD `cmd_promote_offer` ENUM('0','1') NOT NULL DEFAULT '0' AFTER `cmd_points`; +INSERT INTO `emulator_texts` (`key`, `value`) VALUES ('commands.keys.cmd_promote_offer', 'promoteoffer;promotetargetoffer;promote_offer'), ('commands.description.cmd_promote_offer', ':promoteoffer [info]'); +INSERT INTO `emulator_texts` (`key`, `value`) VALUES ('commands.cmd_promote_offer.info', 'info'), ('commands.error.cmd_promote_offer.not_found', 'The offer could not be found. Use :promoteoffer info to see a list of active offers.'); +INSERT INTO `emulator_texts` (`key`, `value`) VALUES ('commands.cmd_promote_offer.list', 'All available offers (%amount%):
%list%'); +INSERT INTO `emulator_texts` (`key`, `value`) VALUES ('commands.cmd_promote_offer.list.entry', '%id%: %title% %description%'); +INSERT INTO `emulator_texts` (`key`, `value`) VALUES ('commands.succes.cmd_promote_offer', 'The promoted offer has been changed to %id%: %title%'); + +INSERT INTO `emulator_settings` (`key`, `value`) VALUES ('hotel.wordfilter.replacement', 'bobba'); +INSERT INTO `emulator_texts` (`key`, `value`) VALUES ('commands.keys.cmd_filterword', 'filter;banword;filterword'), + ('commands.error.cmd_filterword.missing_word', 'Please specify the word to filter, with an optional replacement.'), + ('commands.error.cmd_filterword.error', 'Failed to add the word to the wordfilter. Possible duplicate?'), + ('commands.succes.cmd_filterword.added', 'Wordfilter word %word% has been added with replacement %replacement%!'), + ('commands.description.cmd_filterword', ':filter [replacement]'); +ALTER TABLE `permissions` ADD `cmd_filterword` ENUM('0','1') NOT NULL DEFAULT '0' AFTER `cmd_fastwalk`; + +INSERT IGNORE INTO `emulator_settings` (`key`, `value`) VALUES ('debug.show.headers', ''); +UPDATE `navigator_filter` SET `database_query` = 'SELECT * FROM rooms WHERE tags LIKE CONCAT(?, \";%\") ' WHERE `navigator_filter`.`key` = 'tag'; + +INSERT INTO `emulator_settings` (`key`, `value`) VALUES ('hotel.catalog.purchase.cooldown', '3'); + +#DATABASE UPDATE: 1.12.0 -> 1.13.0 \ No newline at end of file diff --git a/src/main/java/com/eu/habbo/Emulator.java b/src/main/java/com/eu/habbo/Emulator.java index fc27963b..4fed1d10 100644 --- a/src/main/java/com/eu/habbo/Emulator.java +++ b/src/main/java/com/eu/habbo/Emulator.java @@ -33,7 +33,7 @@ public final class Emulator public final static int MAJOR = 1; - public final static int MINOR = 12; + public final static int MINOR = 13; public final static int BUILD = 0; @@ -121,9 +121,9 @@ public final class Emulator Emulator.rconServer = new RCONServer(getConfig().getValue("rcon.host", "127.0.0.1"), getConfig().getInt("rcon.port", 30001)); Emulator.gameEnvironment = new GameEnvironment(); Emulator.gameEnvironment.load(); - Emulator.gameServer.initialise(); + Emulator.gameServer.initializePipeline(); Emulator.gameServer.connect(); - Emulator.rconServer.initialise(); + Emulator.rconServer.initializePipeline(); Emulator.rconServer.connect(); Emulator.badgeImager = new BadgeImager(); if (Emulator.getConfig().getBoolean("camera.enabled")) @@ -154,7 +154,7 @@ public final class Emulator if (Emulator.getConfig().getValue("username").isEmpty()) { - Emulator.getLogging().logErrorLine("No account has been found in config.ini Please create an account on Arcturus.pw and edit the config.ini in order to maximize usage of Arcturus! http://arcturus.wf"); + Emulator.getLogging().logErrorLine("No account has been found in config.ini Please create an account on Arcturus.pw and edit the config.ini in order to maximize usage of Arcturus! http://arcturus.pw"); } Emulator.getThreading().run(new Runnable() diff --git a/src/main/java/com/eu/habbo/core/CleanerThread.java b/src/main/java/com/eu/habbo/core/CleanerThread.java index 6dc800b6..ba6b1e0c 100644 --- a/src/main/java/com/eu/habbo/core/CleanerThread.java +++ b/src/main/java/com/eu/habbo/core/CleanerThread.java @@ -12,6 +12,7 @@ import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.SQLException; import java.sql.Statement; +import java.util.Map; public class CleanerThread implements Runnable { @@ -37,6 +38,9 @@ public class CleanerThread implements Runnable { public static final int SAVE_ERROR_LOGS = 30; + public static final int CLEAR_CACHED_VALUES = 60 * 60; + + private static final int CALLBACK_TIME = 60*15; @@ -63,6 +67,9 @@ public class CleanerThread implements Runnable { private static int LAST_CALLBACK = Emulator.getIntUnixTimestamp(); + + private static int LAST_HABBO_CACHE_CLEARED = Emulator.getIntUnixTimestamp(); + public CleanerThread() { databaseCleanup(); @@ -129,6 +136,12 @@ public class CleanerThread implements Runnable { LAST_DAILY_REFILL = time; } + if (time - LAST_HABBO_CACHE_CLEARED > CLEAR_CACHED_VALUES) + { + clearCachedValues(); + LAST_HABBO_CACHE_CLEARED = time; + } + SearchRoomsEvent.cachedResults.clear(); SearchUserEvent.cachedResults.clear(); } @@ -190,4 +203,25 @@ public class CleanerThread implements Runnable { } } } + + private void clearCachedValues() + { + Habbo habbo = null; + for(Map.Entry map : Emulator.getGameEnvironment().getHabboManager().getOnlineHabbos().entrySet()) + { + habbo = map.getValue(); + + try + { + if (habbo != null) + { + habbo.clearCaches(); + } + } + catch (Exception e) + { + Emulator.getLogging().logErrorLine(e); + } + } + } } diff --git a/src/main/java/com/eu/habbo/core/Logging.java b/src/main/java/com/eu/habbo/core/Logging.java index 813e5075..df6eb3f7 100644 --- a/src/main/java/com/eu/habbo/core/Logging.java +++ b/src/main/java/com/eu/habbo/core/Logging.java @@ -1,8 +1,10 @@ package com.eu.habbo.core; import com.eu.habbo.Emulator; +import com.eu.habbo.habbohotel.rooms.RoomChatMessage; import com.eu.habbo.util.callback.HTTPPostError; import gnu.trove.set.hash.THashSet; +import io.netty.util.internal.ConcurrentSet; import java.io.File; import java.io.FileWriter; @@ -66,6 +68,8 @@ public class Logging private final THashSet commandLogs = new THashSet<>(); + private ConcurrentSet chatLogs = new ConcurrentSet<>(); + public Logging() { packets = new File("logging//packets//defined.txt"); @@ -332,11 +336,16 @@ public class Logging } } + public void addChatLog(Loggable chatLog) + { + this.chatLogs.add(chatLog); + } + public void saveLogs() { if (Emulator.getDatabase() != null && Emulator.getDatabase().getDataSource() != null) { - if (!this.errorLogs.isEmpty() || !this.commandLogs.isEmpty()) + if (!this.errorLogs.isEmpty() || !this.commandLogs.isEmpty() || !this.chatLogs.isEmpty()) { try (Connection connection = Emulator.getDatabase().getDataSource().getConnection()) { @@ -372,6 +381,23 @@ public class Logging this.commandLogs.clear(); } } + + if (!this.chatLogs.isEmpty()) + { + ConcurrentSet chatLogs = this.chatLogs; + this.chatLogs = new ConcurrentSet<>(); + + try (PreparedStatement statement = connection.prepareStatement(RoomChatMessage.insertQuery)) + { + for (Loggable log : chatLogs) + { + log.log(statement); + } + + statement.executeBatch(); + } + chatLogs.clear(); + } } catch (SQLException e) { diff --git a/src/main/java/com/eu/habbo/core/RoomUserPetComposer.java b/src/main/java/com/eu/habbo/core/RoomUserPetComposer.java index 9edc7b13..d357edfe 100644 --- a/src/main/java/com/eu/habbo/core/RoomUserPetComposer.java +++ b/src/main/java/com/eu/habbo/core/RoomUserPetComposer.java @@ -30,8 +30,8 @@ public class RoomUserPetComposer extends MessageComposer this.response.appendString(""); this.response.appendString(this.petType + " " + this.race + " " + this.color + " 2 2 -1 0 3 -1 0"); this.response.appendInt(habbo.getRoomUnit().getId()); - this.response.appendInt32(habbo.getRoomUnit().getX()); - this.response.appendInt32(habbo.getRoomUnit().getY()); + this.response.appendInt(habbo.getRoomUnit().getX()); + this.response.appendInt(habbo.getRoomUnit().getY()); this.response.appendString(habbo.getRoomUnit().getZ() + ""); this.response.appendInt(habbo.getRoomUnit().getBodyRotation().getValue()); this.response.appendInt(2); 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 b88766ae..02912f17 100644 --- a/src/main/java/com/eu/habbo/habbohotel/achievements/AchievementManager.java +++ b/src/main/java/com/eu/habbo/habbohotel/achievements/AchievementManager.java @@ -9,6 +9,7 @@ import com.eu.habbo.messages.outgoing.achievements.AchievementProgressComposer; import com.eu.habbo.messages.outgoing.achievements.AchievementUnlockedComposer; import com.eu.habbo.messages.outgoing.achievements.talenttrack.TalentLevelUpdateComposer; import com.eu.habbo.messages.outgoing.inventory.AddHabboItemComposer; +import com.eu.habbo.messages.outgoing.inventory.InventoryRefreshComposer; import com.eu.habbo.messages.outgoing.rooms.users.RoomUserDataComposer; import com.eu.habbo.messages.outgoing.users.AddUserBadgeComposer; import com.eu.habbo.messages.outgoing.users.UserBadgesComposer; @@ -218,6 +219,21 @@ public class AchievementManager AchievementLevel newLevel = achievement.getLevelForProgress(currentProgress + amount); + for (TalentTrackType type : TalentTrackType.values()) + { + if (Emulator.getGameEnvironment().getAchievementManager().talentTrackLevels.containsKey(type)) + { + for (Map.Entry entry : Emulator.getGameEnvironment().getAchievementManager().talentTrackLevels.get(type).entrySet()) + { + if (entry.getValue().achievements.containsKey(achievement)) + { + Emulator.getGameEnvironment().getAchievementManager().handleTalentTrackAchievement(habbo, type, achievement); + break; + } + } + } + } + if(newLevel == null || (oldLevel.level == newLevel.level && newLevel.level < achievement.levels.size())) { habbo.getClient().sendResponse(new AchievementProgressComposer(habbo, achievement)); @@ -279,20 +295,6 @@ public class AchievementManager { habbo.getHabboInfo().getCurrentRoom().sendComposer(new RoomUserDataComposer(habbo).compose()); } - - for (TalentTrackType type : TalentTrackType.values()) - { - if (Emulator.getGameEnvironment().getAchievementManager().talentTrackLevels.containsKey(type)) - { - for (Map.Entry entry : Emulator.getGameEnvironment().getAchievementManager().talentTrackLevels.get(type).entrySet()) - { - if (entry.getValue().achievements.containsKey(achievement)) - { - Emulator.getGameEnvironment().getAchievementManager().handleTalentTrackAchievement(habbo, type, achievement); - } - } - } - } } } @@ -403,39 +405,49 @@ public class AchievementManager { TalentTrackLevel currentLevel = this.calculateTalenTrackLevel(habbo, type); - if (currentLevel.level > habbo.getHabboStats().talentTrackLevel(type)) + if (currentLevel != null) { - for (int i = habbo.getHabboStats().talentTrackLevel(type); i <= currentLevel.level; i++) + if (currentLevel.level > habbo.getHabboStats().talentTrackLevel(type)) { - TalentTrackLevel level = this.getTalentTrackLevel(type, i); - - if (level != null) + for (int i = habbo.getHabboStats().talentTrackLevel(type); i <= currentLevel.level; i++) { - for (Item item : level.items) - { - HabboItem rewardItem = Emulator.getGameEnvironment().getItemManager().createItem(habbo.getHabboInfo().getId(), item, 0, 0, ""); - habbo.getInventory().getItemsComponent().addItem(rewardItem); - habbo.getClient().sendResponse(new AddHabboItemComposer(rewardItem)); - } + TalentTrackLevel level = this.getTalentTrackLevel(type, i); - for (String badge : level.badges) + if (level != null) { - if (!badge.isEmpty()) + for (Item item : level.items) { - HabboBadge b = new HabboBadge(0, badge, 0, habbo); - Emulator.getThreading().run(b); - habbo.getInventory().getBadgesComponent().addBadge(b); - habbo.getClient().sendResponse(new AddUserBadgeComposer(b)); + HabboItem rewardItem = Emulator.getGameEnvironment().getItemManager().createItem(habbo.getHabboInfo().getId(), item, 0, 0, ""); + habbo.getInventory().getItemsComponent().addItem(rewardItem); + habbo.getClient().sendResponse(new AddHabboItemComposer(rewardItem)); + habbo.getClient().sendResponse(new InventoryRefreshComposer()); } - } - habbo.getClient().sendResponse(new TalentLevelUpdateComposer(type, level)); + for (String badge : level.badges) + { + if (!badge.isEmpty()) + { + HabboBadge b = new HabboBadge(0, badge, 0, habbo); + Emulator.getThreading().run(b); + habbo.getInventory().getBadgesComponent().addBadge(b); + habbo.getClient().sendResponse(new AddUserBadgeComposer(b)); + } + } + + for (String perk : level.perks) + { + if (perk.equalsIgnoreCase("TRADE")) + { + habbo.getHabboStats().perkTrade = true; + } + } + habbo.getClient().sendResponse(new TalentLevelUpdateComposer(type, level)); + } } } + + habbo.getHabboStats().setTalentLevel(type, currentLevel.level); } - - - habbo.getHabboStats().setTalentLevel(type, currentLevel.level); } public TalentTrackLevel getTalentTrackLevel(TalentTrackType type, int level) diff --git a/src/main/java/com/eu/habbo/habbohotel/bots/Bot.java b/src/main/java/com/eu/habbo/habbohotel/bots/Bot.java index eaf16d61..5e5689c2 100644 --- a/src/main/java/com/eu/habbo/habbohotel/bots/Bot.java +++ b/src/main/java/com/eu/habbo/habbohotel/bots/Bot.java @@ -74,6 +74,8 @@ public class Bot implements Runnable private int effect; + private boolean canWalk = true; + private boolean needsUpdate; @@ -112,6 +114,7 @@ public class Bot implements Runnable this.chatLines = new ArrayList<>(Arrays.asList(set.getString("chat_lines").split("\r"))); this.type = set.getString("type"); this.effect = set.getInt("effect"); + this.canWalk = set.getString("freeroam").equals("1"); this.room = null; this.roomUnit = null; this.chatTimeOut = Emulator.getIntUnixTimestamp() + this.chatDelay; @@ -171,7 +174,7 @@ public class Bot implements Runnable statement.setDouble(9, this.roomUnit == null ? 0 : this.roomUnit.getZ()); statement.setInt(10, this.roomUnit == null ? 0 : this.roomUnit.getBodyRotation().getValue()); statement.setInt(11, this.roomUnit == null ? 0 : this.roomUnit.getDanceType().getType()); - statement.setString(12, this.roomUnit == null ? "0" : this.roomUnit.canWalk() ? "1" : "0"); + statement.setString(12, this.canWalk ? "1" : "0"); String text = ""; for(String s : this.chatLines) { @@ -193,11 +196,11 @@ public class Bot implements Runnable } - public void cycle(boolean canWalk) + public void cycle(boolean allowBotsWalk) { if(this.roomUnit != null) { - if(canWalk && this.getRoomUnit().canWalk()) + if(allowBotsWalk && this.canWalk) { if (!this.roomUnit.isWalking()) { @@ -567,4 +570,14 @@ public class Bot implements Runnable { } + + public boolean canWalk() + { + return this.canWalk; + } + + public void setCanWalk(boolean canWalk) + { + this.canWalk = canWalk; + } } diff --git a/src/main/java/com/eu/habbo/habbohotel/catalog/CatalogItem.java b/src/main/java/com/eu/habbo/habbohotel/catalog/CatalogItem.java index 87cf859b..9c42a2f6 100644 --- a/src/main/java/com/eu/habbo/habbohotel/catalog/CatalogItem.java +++ b/src/main/java/com/eu/habbo/habbohotel/catalog/CatalogItem.java @@ -407,7 +407,7 @@ public class CatalogItem implements ISerialize, Runnable, Comparable clubOffers; + public final THashMap targetOffers; + + public final THashMap clothing; @@ -82,6 +85,9 @@ public class CatalogManager public static int catalogItemAmount; + + public static int PURCHASE_COOLDOWN = 3; + public final THashMap calendarRewards; @@ -145,6 +151,7 @@ public class CatalogManager this.giftFurnis = new THashMap<>(); this.clubItems = new THashSet<>(); this.clubOffers = new THashMap<>(); + targetOffers = new THashMap<>(); this.clothing = new THashMap<>(); this.offerDefs = new TIntIntHashMap(); this.vouchers = new ArrayList<>(); @@ -170,6 +177,7 @@ public class CatalogManager loadCatalogFeaturedPages(); loadCatalogItems(); loadClubOffers(); + loadTargetOffers(); loadVouchers(); loadClothing(); loadRecycler(); @@ -403,6 +411,26 @@ public class CatalogManager } } + private void loadTargetOffers() throws SQLException + { + synchronized (this.targetOffers) + { + this.targetOffers.clear(); + + try (Connection connection = Emulator.getDatabase().getDataSource().getConnection(); PreparedStatement statement = connection.prepareStatement("SELECT * FROM catalog_target_offers WHERE end_timestamp > ?")) + { + statement.setInt(1, Emulator.getIntUnixTimestamp()); + try (ResultSet set = statement.executeQuery()) + { + while (set.next()) + { + this.targetOffers.put(set.getInt("id"), new TargetOffer(set)); + } + } + } + } + } + private void loadVouchers() throws SQLException { @@ -910,135 +938,138 @@ public class CatalogManager { Item cBaseItem = null; - if(item == null) + if(item == null || habbo.getHabboStats().isPurchasingFurniture) { habbo.getClient().sendResponse(new AlertPurchaseFailedComposer(AlertPurchaseFailedComposer.SERVER_ERROR).compose()); return; } - if(item.isClubOnly() && !habbo.getClient().getHabbo().getHabboStats().hasActiveClub()) - { - habbo.getClient().sendResponse(new AlertPurchaseUnavailableComposer(AlertPurchaseUnavailableComposer.REQUIRES_CLUB)); - return; - } - - if (amount <= 0) - { - habbo.getClient().sendResponse(new AlertPurchaseUnavailableComposer(AlertPurchaseUnavailableComposer.ILLEGAL)); - return; - } + habbo.getHabboStats().isPurchasingFurniture = true; try { - CatalogLimitedConfiguration limitedConfiguration = null; - int limitedStack = 0; - int limitedNumber = 0; - if (item.isLimited()) + if (item.isClubOnly() && !habbo.getClient().getHabbo().getHabboStats().hasActiveClub()) { - amount = 1; - if (this.getLimitedConfig(item).available() == 0) - { - habbo.getClient().sendResponse(new AlertLimitedSoldOutComposer()); - return; - } - - if (Emulator.getConfig().getBoolean("hotel.catalog.ltd.limit.enabled")) - { - int ltdLimit = Emulator.getConfig().getInt("hotel.purchase.ltd.limit.daily.total"); - if (habbo.getHabboStats().totalLtds() >= ltdLimit) - { - habbo.alert(Emulator.getTexts().getValue("error.catalog.buy.limited.daily.total").replace("%itemname%", item.getBaseItems().iterator().next().getFullName()).replace("%limit%", ltdLimit + "")); - return; - } - - ltdLimit = Emulator.getConfig().getInt("hotel.purchase.ltd.limit.daily.item"); - if (habbo.getHabboStats().totalLtds(item.id) >= ltdLimit) - { - habbo.alert(Emulator.getTexts().getValue("error.catalog.buy.limited.daily.item").replace("%itemname%", item.getBaseItems().iterator().next().getFullName()).replace("%limit%", ltdLimit + "")); - return; - } - } + habbo.getClient().sendResponse(new AlertPurchaseUnavailableComposer(AlertPurchaseUnavailableComposer.REQUIRES_CLUB)); + return; } - if(amount > 1) + if (amount <= 0) { - if(amount == item.getAmount()) - { - amount = 1; - } - else - { - if(amount * item.getAmount() > 100) - { - habbo.getClient().sendResponse(new GenericAlertComposer("Whoops! You tried to buy this " + (amount * item.getAmount()) + " times. This must've been a mistake.")); - habbo.getClient().sendResponse(new AlertPurchaseUnavailableComposer(AlertPurchaseUnavailableComposer.ILLEGAL)); - return; - } - } - } - - int totalCredits = 0; - int totalPoints = 0; - - THashSet itemsList = new THashSet<>(); - - - if(amount > 1 && !CatalogItem.haveOffer(item)) - { - String message = Emulator.getTexts().getValue("scripter.warning.catalog.amount").replace("%username%", habbo.getHabboInfo().getUsername()).replace("%itemname%", item.getName()).replace("%pagename%", page.getCaption()); - Emulator.getGameEnvironment().getModToolManager().quickTicket(habbo.getClient().getHabbo(), "Scripter", message); - Emulator.getLogging().logUserLine(message); habbo.getClient().sendResponse(new AlertPurchaseUnavailableComposer(AlertPurchaseUnavailableComposer.ILLEGAL)); return; } - if (item.isLimited()) + try { - limitedConfiguration = this.getLimitedConfig(item); - - if (limitedConfiguration == null) + CatalogLimitedConfiguration limitedConfiguration = null; + int limitedStack = 0; + int limitedNumber = 0; + if (item.isLimited()) { - limitedConfiguration = this.createOrUpdateLimitedConfig(item); - } - - limitedNumber = limitedConfiguration.getNumber(); - limitedStack = limitedConfiguration.getTotalSet(); - } - - List badges = new ArrayList<>(); - boolean badgeFound = false; - for(int i = 0; i < amount; i++) - { - if (free || (item.getCredits() <= habbo.getClient().getHabbo().getHabboInfo().getCredits() - totalCredits)) - { - if(free || - item.getPoints() <= habbo.getClient().getHabbo().getHabboInfo().getCurrencyAmount(item.getPointsType()) - totalPoints) + amount = 1; + if (this.getLimitedConfig(item).available() == 0) { - if (((i + 1) % 6 != 0 && CatalogItem.haveOffer(item)) || !CatalogItem.haveOffer(item)) + habbo.getClient().sendResponse(new AlertLimitedSoldOutComposer()); + return; + } + + if (Emulator.getConfig().getBoolean("hotel.catalog.ltd.limit.enabled")) + { + int ltdLimit = Emulator.getConfig().getInt("hotel.purchase.ltd.limit.daily.total"); + if (habbo.getHabboStats().totalLtds() >= ltdLimit) { - totalCredits += item.getCredits(); - totalPoints += item.getPoints(); + habbo.alert(Emulator.getTexts().getValue("error.catalog.buy.limited.daily.total").replace("%itemname%", item.getBaseItems().iterator().next().getFullName()).replace("%limit%", ltdLimit + "")); + return; } - habbo.getHabboStats().addLtdLog(item.getId(), Emulator.getIntUnixTimestamp()); + ltdLimit = Emulator.getConfig().getInt("hotel.purchase.ltd.limit.daily.item"); + if (habbo.getHabboStats().totalLtds(item.id) >= ltdLimit) + { + habbo.alert(Emulator.getTexts().getValue("error.catalog.buy.limited.daily.item").replace("%itemname%", item.getBaseItems().iterator().next().getFullName()).replace("%limit%", ltdLimit + "")); + return; + } + } + } - //for (int j = 0; j < item.getAmount(); j++) - //{ + if (amount > 1) + { + if (amount == item.getAmount()) + { + amount = 1; + } else + { + if (amount * item.getAmount() > 100) + { + habbo.getClient().sendResponse(new GenericAlertComposer("Whoops! You tried to buy this " + (amount * item.getAmount()) + " times. This must've been a mistake.")); + habbo.getClient().sendResponse(new AlertPurchaseUnavailableComposer(AlertPurchaseUnavailableComposer.ILLEGAL)); + return; + } + } + } + + int totalCredits = 0; + int totalPoints = 0; + + THashSet itemsList = new THashSet<>(); + + + if (amount > 1 && !CatalogItem.haveOffer(item)) + { + String message = Emulator.getTexts().getValue("scripter.warning.catalog.amount").replace("%username%", habbo.getHabboInfo().getUsername()).replace("%itemname%", item.getName()).replace("%pagename%", page.getCaption()); + Emulator.getGameEnvironment().getModToolManager().quickTicket(habbo.getClient().getHabbo(), "Scripter", message); + Emulator.getLogging().logUserLine(message); + habbo.getClient().sendResponse(new AlertPurchaseUnavailableComposer(AlertPurchaseUnavailableComposer.ILLEGAL)); + return; + } + + if (item.isLimited()) + { + limitedConfiguration = this.getLimitedConfig(item); + + if (limitedConfiguration == null) + { + limitedConfiguration = this.createOrUpdateLimitedConfig(item); + } + + limitedNumber = limitedConfiguration.getNumber(); + limitedStack = limitedConfiguration.getTotalSet(); + } + + List badges = new ArrayList<>(); + boolean badgeFound = false; + for (int i = 0; i < amount; i++) + { + if (free || (item.getCredits() <= habbo.getClient().getHabbo().getHabboInfo().getCredits() - totalCredits)) + { + if (free || + item.getPoints() <= habbo.getClient().getHabbo().getHabboInfo().getCurrencyAmount(item.getPointsType()) - totalPoints) + { + if (((i + 1) % 6 != 0 && CatalogItem.haveOffer(item)) || !CatalogItem.haveOffer(item)) + { + totalCredits += item.getCredits(); + totalPoints += item.getPoints(); + } + + habbo.getHabboStats().addLtdLog(item.getId(), Emulator.getIntUnixTimestamp()); + + //for (int j = 0; j < item.getAmount(); j++) + //{ for (Item baseItem : item.getBaseItems()) { - for(int k = 0; k < item.getItemAmount(baseItem.getId()); k++) + for (int k = 0; k < item.getItemAmount(baseItem.getId()); k++) { cBaseItem = baseItem; - if(baseItem.getName().startsWith("rentable_bot_") || baseItem.getName().startsWith("bot_")) + if (baseItem.getName().startsWith("rentable_bot_") || baseItem.getName().startsWith("bot_")) { String type = item.getName().replace("rentable_bot_", ""); type = type.replace("bot_", ""); THashMap data = new THashMap<>(); - for(String s : item.getExtradata().split(";")) + for (String s : item.getExtradata().split(";")) { - if(s.contains(":")) + if (s.contains(":")) { data.put(s.split(":")[0], s.split(":")[1]); } @@ -1046,7 +1077,7 @@ public class CatalogManager Bot bot = Emulator.getGameEnvironment().getBotManager().createBot(data, type); - if(bot != null) + if (bot != null) { bot.setOwnerId(habbo.getClient().getHabbo().getHabboInfo().getId()); bot.setOwnerName(habbo.getClient().getHabbo().getHabboInfo().getUsername()); @@ -1054,13 +1085,11 @@ public class CatalogManager Emulator.getThreading().run(bot); habbo.getClient().getHabbo().getInventory().getBotsComponent().addBot(bot); habbo.getClient().sendResponse(new AddBotComposer(bot)); - } - else + } else { throw new Exception("Failed to create bot of type: " + type); } - } - else if (baseItem.getType() == FurnitureType.EFFECT) + } else if (baseItem.getType() == FurnitureType.EFFECT) { int effectId = baseItem.getEffectM(); @@ -1073,8 +1102,7 @@ public class CatalogManager { habbo.getInventory().getEffectsComponent().createEffect(effectId); } - } - else if(Item.isPet(baseItem)) + } else if (Item.isPet(baseItem)) { String[] data = extradata.split("\n"); @@ -1088,14 +1116,13 @@ public class CatalogManager try { pet = Emulator.getGameEnvironment().getPetManager().createPet(baseItem, data[0], data[1], data[2], habbo.getClient()); - } - catch (Exception e) + } catch (Exception e) { Emulator.getLogging().logErrorLine(e); habbo.getClient().sendResponse(new AlertPurchaseFailedComposer(AlertPurchaseFailedComposer.SERVER_ERROR)); } - if(pet == null) + if (pet == null) { habbo.getClient().sendResponse(new AlertPurchaseFailedComposer(AlertPurchaseFailedComposer.SERVER_ERROR)); return; @@ -1106,32 +1133,29 @@ public class CatalogManager habbo.getClient().sendResponse(new PetBoughtNotificationComposer(pet, false)); AchievementManager.progressAchievement(habbo.getClient().getHabbo(), Emulator.getGameEnvironment().getAchievementManager().getAchievement("PetLover")); - } - else if (baseItem.getType() == FurnitureType.BADGE) + } else if (baseItem.getType() == FurnitureType.BADGE) { - if(!habbo.getInventory().getBadgesComponent().hasBadge(baseItem.getName())) + if (!habbo.getInventory().getBadgesComponent().hasBadge(baseItem.getName())) { if (!badges.contains(baseItem.getName())) { badges.add(baseItem.getName()); } - } - else + } else { badgeFound = true; } - } - else + } else { if (baseItem.getInteractionType().getType() == InteractionTrophy.class || baseItem.getInteractionType().getType() == InteractionBadgeDisplay.class) { - if(baseItem.getInteractionType().getType() == InteractionBadgeDisplay.class && !habbo.getClient().getHabbo().getInventory().getBadgesComponent().hasBadge(extradata)) + if (baseItem.getInteractionType().getType() == InteractionBadgeDisplay.class && !habbo.getClient().getHabbo().getInventory().getBadgesComponent().hasBadge(extradata)) { Emulator.getGameEnvironment().getModToolManager().quickTicket(habbo.getClient().getHabbo(), "Scripter", Emulator.getTexts().getValue("scripter.warning.catalog.badge_display").replace("%username%", habbo.getClient().getHabbo().getHabboInfo().getUsername()).replace("%badge%", extradata)); extradata = "UMAD"; } - extradata = habbo.getClient().getHabbo().getHabboInfo().getUsername() + (char) 9 + Calendar.getInstance().get(Calendar.DAY_OF_MONTH) + "-" + (Calendar.getInstance().get(Calendar.MONTH) + 1) + "-" + Calendar.getInstance().get(Calendar.YEAR) + (char) 9 + Emulator.getGameEnvironment().getWordFilter().filter(extradata, habbo); + extradata = habbo.getClient().getHabbo().getHabboInfo().getUsername() + (char) 9 + Calendar.getInstance().get(Calendar.DAY_OF_MONTH) + "-" + (Calendar.getInstance().get(Calendar.MONTH) + 1) + "-" + Calendar.getInstance().get(Calendar.YEAR) + (char) 9 + Emulator.getGameEnvironment().getWordFilter().filter(extradata.replace(((char)9) + "", ""), habbo); } if (InteractionTeleport.class.isAssignableFrom(baseItem.getInteractionType().getType())) @@ -1141,54 +1165,49 @@ public class CatalogManager Emulator.getGameEnvironment().getItemManager().insertTeleportPair(teleportOne.getId(), teleportTwo.getId()); itemsList.add(teleportOne); itemsList.add(teleportTwo); - } - else if(baseItem.getInteractionType().getType() == InteractionHopper.class) + } else if (baseItem.getInteractionType().getType() == InteractionHopper.class) { HabboItem hopper = Emulator.getGameEnvironment().getItemManager().createItem(habbo.getClient().getHabbo().getHabboInfo().getId(), baseItem, limitedStack, limitedNumber, extradata); Emulator.getGameEnvironment().getItemManager().insertHopper(hopper); itemsList.add(hopper); - } - else if(baseItem.getInteractionType().getType() == InteractionGuildFurni.class || baseItem.getInteractionType().getType() == InteractionGuildGate.class) + } else if (baseItem.getInteractionType().getType() == InteractionGuildFurni.class || baseItem.getInteractionType().getType() == InteractionGuildGate.class) { int guildId; try { guildId = Integer.parseInt(extradata); - } - catch (Exception e) + } catch (Exception e) { Emulator.getLogging().logErrorLine(e); habbo.getClient().sendResponse(new AlertPurchaseFailedComposer(AlertPurchaseFailedComposer.SERVER_ERROR)); return; } - InteractionGuildFurni habboItem = (InteractionGuildFurni)Emulator.getGameEnvironment().getItemManager().createItem(habbo.getClient().getHabbo().getHabboInfo().getId(), baseItem, limitedStack, limitedNumber, extradata); + InteractionGuildFurni habboItem = (InteractionGuildFurni) Emulator.getGameEnvironment().getItemManager().createItem(habbo.getClient().getHabbo().getHabboInfo().getId(), baseItem, limitedStack, limitedNumber, extradata); habboItem.setExtradata(""); habboItem.needsUpdate(true); Emulator.getThreading().run(habboItem); Emulator.getGameEnvironment().getGuildManager().setGuild(habboItem, guildId); itemsList.add(habboItem); - } - else if(baseItem.getInteractionType().getType() == InteractionMusicDisc.class) + } else if (baseItem.getInteractionType().getType() == InteractionMusicDisc.class) { SoundTrack track = Emulator.getGameEnvironment().getItemManager().getSoundTrack(item.getExtradata()); - if(track == null) + if (track == null) { habbo.getClient().sendResponse(new AlertPurchaseFailedComposer(AlertPurchaseFailedComposer.SERVER_ERROR)); return; } - InteractionMusicDisc habboItem = (InteractionMusicDisc)Emulator.getGameEnvironment().getItemManager().createItem(habbo.getClient().getHabbo().getHabboInfo().getId(), baseItem, limitedStack, limitedNumber, habbo.getClient().getHabbo().getHabboInfo().getUsername() + "\n" + Calendar.getInstance().get(Calendar.DAY_OF_MONTH) + "\n" + (Calendar.getInstance().get(Calendar.MONTH) + 1) + "\n" + Calendar.getInstance().get(Calendar.YEAR) + "\n" + track.getLength() + "\n" + track.getName() + "\n" + track.getId()); + InteractionMusicDisc habboItem = (InteractionMusicDisc) Emulator.getGameEnvironment().getItemManager().createItem(habbo.getClient().getHabbo().getHabboInfo().getId(), baseItem, limitedStack, limitedNumber, habbo.getClient().getHabbo().getHabboInfo().getUsername() + "\n" + Calendar.getInstance().get(Calendar.DAY_OF_MONTH) + "\n" + (Calendar.getInstance().get(Calendar.MONTH) + 1) + "\n" + Calendar.getInstance().get(Calendar.YEAR) + "\n" + track.getLength() + "\n" + track.getName() + "\n" + track.getId()); habboItem.needsUpdate(true); Emulator.getThreading().run(habboItem); itemsList.add(habboItem); - } - else + } else { HabboItem habboItem = Emulator.getGameEnvironment().getItemManager().createItem(habbo.getClient().getHabbo().getHabboInfo().getId(), baseItem, limitedStack, limitedNumber, extradata); itemsList.add(habboItem); @@ -1196,79 +1215,83 @@ public class CatalogManager } } } - //} + //} + } } } - } - UserCatalogItemPurchasedEvent purchasedEvent = new UserCatalogItemPurchasedEvent(habbo, item, itemsList, totalCredits, totalPoints, badges); - Emulator.getPluginManager().fireEvent(purchasedEvent); + UserCatalogItemPurchasedEvent purchasedEvent = new UserCatalogItemPurchasedEvent(habbo, item, itemsList, totalCredits, totalPoints, badges); + Emulator.getPluginManager().fireEvent(purchasedEvent); - if (badgeFound) - { - habbo.getClient().sendResponse(new AlertPurchaseFailedComposer(AlertPurchaseFailedComposer.ALREADY_HAVE_BADGE)); - - if (item.getBaseItems().size() == 1) + if (badgeFound) { - return; - } - } + habbo.getClient().sendResponse(new AlertPurchaseFailedComposer(AlertPurchaseFailedComposer.ALREADY_HAVE_BADGE)); - if(!free && !habbo.getClient().getHabbo().hasPermission("acc_infinite_credits")) - { - if (purchasedEvent.totalCredits > 0) - { - habbo.getClient().getHabbo().getHabboInfo().addCredits(-purchasedEvent.totalCredits); - habbo.getClient().sendResponse(new UserCreditsComposer(habbo.getClient().getHabbo())); - } - } - - if(!free && !habbo.getClient().getHabbo().hasPermission("acc_infinite_points")) - { - if (purchasedEvent.totalPoints > 0) - { - habbo.getClient().getHabbo().getHabboInfo().addCurrencyAmount(item.getPointsType(), -purchasedEvent.totalPoints); - habbo.getClient().sendResponse(new UserPointsComposer(habbo.getClient().getHabbo().getHabboInfo().getCurrencyAmount(item.getPointsType()), -purchasedEvent.totalPoints, item.getPointsType())); - } - } - - if (purchasedEvent.itemsList != null) - { - 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()); - - Emulator.getPluginManager().fireEvent(new UserCatalogFurnitureBoughtEvent(habbo, item, purchasedEvent.itemsList)); - - if (limitedConfiguration != null) - { - for (HabboItem itm : purchasedEvent.itemsList) + if (item.getBaseItems().size() == 1) { - limitedConfiguration.limitedSold(item.getId(), habbo, itm); + return; } } - } - for (String b : purchasedEvent.badges) + if (!free && !habbo.getClient().getHabbo().hasPermission("acc_infinite_credits")) + { + if (purchasedEvent.totalCredits > 0) + { + habbo.getClient().getHabbo().getHabboInfo().addCredits(-purchasedEvent.totalCredits); + habbo.getClient().sendResponse(new UserCreditsComposer(habbo.getClient().getHabbo())); + } + } + + if (!free && !habbo.getClient().getHabbo().hasPermission("acc_infinite_points")) + { + if (purchasedEvent.totalPoints > 0) + { + habbo.getClient().getHabbo().getHabboInfo().addCurrencyAmount(item.getPointsType(), -purchasedEvent.totalPoints); + habbo.getClient().sendResponse(new UserPointsComposer(habbo.getClient().getHabbo().getHabboInfo().getCurrencyAmount(item.getPointsType()), -purchasedEvent.totalPoints, item.getPointsType())); + } + } + + if (purchasedEvent.itemsList != null) + { + 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()); + + Emulator.getPluginManager().fireEvent(new UserCatalogFurnitureBoughtEvent(habbo, item, purchasedEvent.itemsList)); + + if (limitedConfiguration != null) + { + for (HabboItem itm : purchasedEvent.itemsList) + { + limitedConfiguration.limitedSold(item.getId(), habbo, itm); + } + } + } + + for (String b : purchasedEvent.badges) + { + HabboBadge badge = new HabboBadge(0, b, 0, habbo); + Emulator.getThreading().run(badge); + habbo.getInventory().getBadgesComponent().addBadge(badge); + habbo.getClient().sendResponse(new AddUserBadgeComposer(badge)); + THashMap keys = new THashMap<>(); + keys.put("display", "BUBBLE"); + 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)); + } + habbo.getClient().getHabbo().getHabboStats().addPurchase(purchasedEvent.catalogItem); + + } catch (Exception e) { - HabboBadge badge = new HabboBadge(0, b, 0, habbo); - Emulator.getThreading().run(badge); - habbo.getInventory().getBadgesComponent().addBadge(badge); - habbo.getClient().sendResponse(new AddUserBadgeComposer(badge)); - THashMap keys = new THashMap<>(); - keys.put("display", "BUBBLE"); - 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)); + Emulator.getLogging().logPacketError(e); + habbo.getClient().sendResponse(new AlertPurchaseFailedComposer(AlertPurchaseFailedComposer.SERVER_ERROR)); } - habbo.getClient().getHabbo().getHabboStats().addPurchase(purchasedEvent.catalogItem); - } - catch(Exception e) + finally { - Emulator.getLogging().logPacketError(e); - habbo.getClient().sendResponse(new AlertPurchaseFailedComposer(AlertPurchaseFailedComposer.SERVER_ERROR)); + habbo.getHabboStats().isPurchasingFurniture = false; } } @@ -1316,4 +1339,9 @@ public class CatalogManager } } + + public TargetOffer getTargetOffer(int offerId) + { + return this.targetOffers.get(offerId); + } } diff --git a/src/main/java/com/eu/habbo/habbohotel/catalog/TargetOffer.java b/src/main/java/com/eu/habbo/habbohotel/catalog/TargetOffer.java index 6ff4d33d..ac457fd6 100644 --- a/src/main/java/com/eu/habbo/habbohotel/catalog/TargetOffer.java +++ b/src/main/java/com/eu/habbo/habbohotel/catalog/TargetOffer.java @@ -1,17 +1,20 @@ package com.eu.habbo.habbohotel.catalog; -import com.eu.habbo.messages.ISerialize; +import com.eu.habbo.Emulator; +import com.eu.habbo.habbohotel.users.cache.HabboOfferPurchase; import com.eu.habbo.messages.ServerMessage; -import java.util.List; +import java.sql.ResultSet; +import java.sql.SQLException; -public class TargetOffer implements ISerialize +public class TargetOffer { - private final int unknownInt1; + public static int ACTIVE_TARGET_OFFER_ID = 0; + private final int id; + private final int catalogItem; private final String identifier; - private final String unknownString1; private final int priceInCredits; private final int priceInActivityPoints; private final int activityPointsType; @@ -20,50 +23,111 @@ public class TargetOffer implements ISerialize private final String title; private final String description; private final String imageUrl; - private final String unknownString2; - private final int type; - private final List unknownStringList; + private final String icon; + private final String[] vars; - public TargetOffer(int unknownInt1, int id, String identifier, String unknownString1, int priceInCredits, int priceInActivityPoints, int activityPointsType, int purchaseLimit, int expirationTime, String title, String description, String imageUrl, String unknownString2, int type, List unknownStringList) + public TargetOffer(ResultSet set) throws SQLException { - this.unknownInt1 = unknownInt1; - this.id = id; - this.identifier = identifier; - this.unknownString1 = unknownString1; - this.priceInCredits = priceInCredits; - this.priceInActivityPoints = priceInActivityPoints; - this.activityPointsType = activityPointsType; - this.purchaseLimit = purchaseLimit; - this.expirationTime = expirationTime; - this.title = title; - this.description = description; - this.imageUrl = imageUrl; - this.unknownString2 = unknownString2; - this.type = type; - this.unknownStringList = unknownStringList; + this.id = set.getInt("id"); + this.identifier = set.getString("offer_code"); + this.priceInCredits = set.getInt("credits"); + this.priceInActivityPoints = set.getInt("points"); + this.activityPointsType = set.getInt("points_type"); + this.title = set.getString("title"); + this.description = set.getString("description"); + this.imageUrl = set.getString("image"); + this.icon = set.getString("icon"); + this.purchaseLimit = set.getInt("purchase_limit"); + this.expirationTime = set.getInt("end_timestamp"); + this.vars = set.getString("vars").split(";"); + this.catalogItem = set.getInt("catalog_item"); } - @Override - public void serialize(ServerMessage message) + public void serialize(ServerMessage message, HabboOfferPurchase purchase) { - message.appendInt(this.unknownInt1); + message.appendInt(purchase.getState()); message.appendInt(this.id); message.appendString(this.identifier); - message.appendString(this.unknownString1); + message.appendString(this.identifier); message.appendInt(this.priceInCredits); message.appendInt(this.priceInActivityPoints); message.appendInt(this.activityPointsType); - message.appendInt(this.purchaseLimit); - message.appendInt(this.expirationTime); + message.appendInt(Math.max(this.purchaseLimit - purchase.getAmount(), 0)); + message.appendInt(Math.max(Emulator.getIntUnixTimestamp() - this.expirationTime, 0)); message.appendString(this.title); message.appendString(this.description); message.appendString(this.imageUrl); - message.appendString(this.unknownString2); - message.appendInt(this.type); - message.appendInt(this.unknownStringList.size()); - for (String s : this.unknownStringList) + message.appendString(this.icon); + message.appendInt(0); + message.appendInt(this.vars.length); + for (String variable : this.vars) { - message.appendString(s); + message.appendString(variable); } } + + public int getId() + { + return this.id; + } + + public String getIdentifier() + { + return this.identifier; + } + + public int getPriceInCredits() + { + return this.priceInCredits; + } + + public int getPriceInActivityPoints() + { + return this.priceInActivityPoints; + } + + public int getActivityPointsType() + { + return this.activityPointsType; + } + + public int getPurchaseLimit() + { + return this.purchaseLimit; + } + + public int getExpirationTime() + { + return this.expirationTime; + } + + public String getTitle() + { + return this.title; + } + + public String getDescription() + { + return this.description; + } + + public String getImageUrl() + { + return this.imageUrl; + } + + public String getIcon() + { + return this.icon; + } + + public String[] getVars() + { + return this.vars; + } + + public int getCatalogItem() + { + return this.catalogItem; + } } \ No newline at end of file diff --git a/src/main/java/com/eu/habbo/habbohotel/commands/AllowTradingCommand.java b/src/main/java/com/eu/habbo/habbohotel/commands/AllowTradingCommand.java index ee1ab164..701a094f 100644 --- a/src/main/java/com/eu/habbo/habbohotel/commands/AllowTradingCommand.java +++ b/src/main/java/com/eu/habbo/habbohotel/commands/AllowTradingCommand.java @@ -3,6 +3,7 @@ package com.eu.habbo.habbohotel.commands; import com.eu.habbo.Emulator; import com.eu.habbo.habbohotel.gameclients.GameClient; import com.eu.habbo.habbohotel.users.Habbo; +import com.eu.habbo.messages.outgoing.users.UserPerksComposer; import java.sql.Connection; import java.sql.PreparedStatement; @@ -38,8 +39,9 @@ public class AllowTradingCommand extends Command if (habbo != null) { - habbo.getHabboStats().allowTrade = enabled; + habbo.getHabboStats().setAllowTrade(enabled); gameClient.getHabbo().whisper(Emulator.getTexts().getValue("commands.succes.cmd_allow_trading." + (enabled ? "enabled" : "disabled")).replace("%username%", params[1])); + habbo.getClient().sendResponse(new UserPerksComposer(habbo)); return true; } else diff --git a/src/main/java/com/eu/habbo/habbohotel/commands/CommandHandler.java b/src/main/java/com/eu/habbo/habbohotel/commands/CommandHandler.java index 8bfda9ad..0f0d6922 100644 --- a/src/main/java/com/eu/habbo/habbohotel/commands/CommandHandler.java +++ b/src/main/java/com/eu/habbo/habbohotel/commands/CommandHandler.java @@ -56,6 +56,7 @@ public class CommandHandler addCommand(new EventCommand()); addCommand(new FacelessCommand()); addCommand(new FastwalkCommand()); + addCommand(new FilterWordCommand()); addCommand(new FreezeBotsCommand()); addCommand(new FreezeCommand()); addCommand(new GiftCommand()); @@ -86,6 +87,7 @@ public class CommandHandler addCommand(new PixelCommand()); addCommand(new PluginsCommand()); addCommand(new PointsCommand()); + addCommand(new PromoteTargetOfferCommand()); addCommand(new PullCommand()); addCommand(new PushCommand()); addCommand(new RedeemCommand()); diff --git a/src/main/java/com/eu/habbo/habbohotel/commands/EmptyInventoryCommand.java b/src/main/java/com/eu/habbo/habbohotel/commands/EmptyInventoryCommand.java index 20b623b9..06d49e71 100644 --- a/src/main/java/com/eu/habbo/habbohotel/commands/EmptyInventoryCommand.java +++ b/src/main/java/com/eu/habbo/habbohotel/commands/EmptyInventoryCommand.java @@ -23,7 +23,7 @@ public class EmptyInventoryCommand extends Command @Override public boolean handle(GameClient gameClient, String[] params) throws Exception { - if(params.length == 1 || (params.length >= 2 && !params[1].equals(Emulator.getTexts().getValue("generic.yes")))) + if(params.length == 1 || (params.length == 2 && !params[1].equals(Emulator.getTexts().getValue("generic.yes")))) { if(gameClient.getHabbo().getHabboInfo().getCurrentRoom() != null) { diff --git a/src/main/java/com/eu/habbo/habbohotel/commands/FilterWordCommand.java b/src/main/java/com/eu/habbo/habbohotel/commands/FilterWordCommand.java new file mode 100644 index 00000000..f146f296 --- /dev/null +++ b/src/main/java/com/eu/habbo/habbohotel/commands/FilterWordCommand.java @@ -0,0 +1,56 @@ +package com.eu.habbo.habbohotel.commands; + +import com.eu.habbo.Emulator; +import com.eu.habbo.habbohotel.gameclients.GameClient; +import com.eu.habbo.habbohotel.modtool.WordFilter; +import com.eu.habbo.habbohotel.modtool.WordFilterWord; + +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.SQLException; + +public class FilterWordCommand extends Command +{ + public FilterWordCommand() + { + super("cmd_filterword", Emulator.getTexts().getValue("commands.keys.cmd_filterword").split(";")); + } + + @Override + public boolean handle(GameClient gameClient, String[] params) throws Exception + { + if (params.length < 2) + { + gameClient.getHabbo().whisper(Emulator.getTexts().getValue("commands.error.cmd_filterword.missing_word")); + return true; + } + + String word = params[1]; + + String replacement = WordFilter.DEFAULT_REPLACEMENT; + if (params.length == 3) + { + replacement = params[2]; + } + + WordFilterWord wordFilterWord = new WordFilterWord(word, replacement); + + try (Connection connection = Emulator.getDatabase().getDataSource().getConnection(); PreparedStatement statement = connection.prepareStatement("INSERT INTO wordfilter (`key`, `replacement`) VALUES (?, ?)")) + { + statement.setString(1, word); + statement.setString(2, replacement); + statement.execute(); + } + catch (SQLException e) + { + Emulator.getLogging().logSQLException(e); + gameClient.getHabbo().whisper(Emulator.getTexts().getValue("commands.error.cmd_filterword.error")); + return true; + } + + gameClient.getHabbo().whisper(Emulator.getTexts().getValue("commands.succes.cmd_filterword.added").replace("%word%", word).replace("%replacement%", replacement)); + Emulator.getGameEnvironment().getWordFilter().addWord(wordFilterWord); + + return true; + } +} \ No newline at end of file diff --git a/src/main/java/com/eu/habbo/habbohotel/commands/PointsCommand.java b/src/main/java/com/eu/habbo/habbohotel/commands/PointsCommand.java index 5360c1e2..e5d888cf 100644 --- a/src/main/java/com/eu/habbo/habbohotel/commands/PointsCommand.java +++ b/src/main/java/com/eu/habbo/habbohotel/commands/PointsCommand.java @@ -40,7 +40,18 @@ public class PointsCommand extends Command } } - int amount = Integer.valueOf(params[2]); + int amount = 0; + + try + { + amount = Integer.valueOf(params[2]); + } + catch (Exception e) + { + gameClient.getHabbo().whisper(Emulator.getTexts().getValue("commands.error.cmd_points.invalid_amount"), RoomChatMessageBubbles.ALERT); + return true; + } + if (amount != 0) { habbo.givePoints(type, amount); diff --git a/src/main/java/com/eu/habbo/habbohotel/commands/PromoteTargetOfferCommand.java b/src/main/java/com/eu/habbo/habbohotel/commands/PromoteTargetOfferCommand.java new file mode 100644 index 00000000..786e2b64 --- /dev/null +++ b/src/main/java/com/eu/habbo/habbohotel/commands/PromoteTargetOfferCommand.java @@ -0,0 +1,93 @@ +package com.eu.habbo.habbohotel.commands; + +import com.eu.habbo.Emulator; +import com.eu.habbo.habbohotel.catalog.TargetOffer; +import com.eu.habbo.habbohotel.gameclients.GameClient; +import com.eu.habbo.habbohotel.users.Habbo; +import com.eu.habbo.messages.outgoing.generic.alerts.MessagesForYouComposer; +import com.eu.habbo.messages.outgoing.unknown.TargetedOfferComposer; +import gnu.trove.map.hash.THashMap; + +import java.util.ArrayList; +import java.util.List; + +public class PromoteTargetOfferCommand extends Command +{ + + public PromoteTargetOfferCommand() + { + super("cmd_promote_offer", Emulator.getTexts().getValue("commands.keys.cmd_promote_offer").split(";")); + } + + @Override + public boolean handle(GameClient gameClient, String[] params) throws Exception + { + if (params.length <= 1) + { + gameClient.getHabbo().whisper(Emulator.getTexts().getValue("commands.error.cmd_promote_offer.not_found")); + return true; + } + + String offerKey = params[1]; + + if (offerKey.equalsIgnoreCase(Emulator.getTexts().getValue("commands.cmd_promote_offer.info"))) + { + THashMap targetOffers = Emulator.getGameEnvironment().getCatalogManager().targetOffers; + String[] textConfig = Emulator.getTexts().getValue("commands.cmd_promote_offer.list").replace("%amount%", targetOffers.size() + "").split("
"); + + String entryConfig = Emulator.getTexts().getValue("commands.cmd_promote_offer.list.entry"); + List message = new ArrayList(); + + for (int i = 0; i < textConfig.length; i++) + { + if (textConfig[i].contains("%list%")) + { + for (TargetOffer offer : targetOffers.values()) + { + message.add(entryConfig.replace("%id%", offer.getId() + "").replace("%title%", offer.getTitle()).replace("%description%", offer.getDescription().substring(0, 25))); + } + } + else + { + message.add(textConfig[i]); + } + } + + gameClient.sendResponse(new MessagesForYouComposer(message)); + } + else + { + int offerId = 0; + try + { + offerId = Integer.valueOf(offerKey); + } + catch (Exception e) + { + } + + if (offerId > 0) + { + TargetOffer offer = Emulator.getGameEnvironment().getCatalogManager().getTargetOffer(offerId); + + if (offer != null) + { + TargetOffer.ACTIVE_TARGET_OFFER_ID = offer.getId(); + gameClient.getHabbo().whisper(Emulator.getTexts().getValue("commands.succes.cmd_promote_offer").replace("%id%", offerKey).replace("%title%", offer.getTitle())); + + for (Habbo habbo : Emulator.getGameEnvironment().getHabboManager().getOnlineHabbos().values()) + { + habbo.getClient().sendResponse(new TargetedOfferComposer(habbo, offer)); + } + } + } + else + { + gameClient.getHabbo().whisper(Emulator.getTexts().getValue("commands.error.cmd_promote_offer.not_found")); + return true; + } + } + + return true; + } +} \ No newline at end of file diff --git a/src/main/java/com/eu/habbo/habbohotel/commands/RedeemCommand.java b/src/main/java/com/eu/habbo/habbohotel/commands/RedeemCommand.java index 41d4ac63..f9534831 100644 --- a/src/main/java/com/eu/habbo/habbohotel/commands/RedeemCommand.java +++ b/src/main/java/com/eu/habbo/habbohotel/commands/RedeemCommand.java @@ -23,6 +23,8 @@ public class RedeemCommand extends Command @Override public boolean handle(final GameClient gameClient, String[] params) throws Exception { + if (gameClient.getHabbo().getHabboInfo().getCurrentRoom().getActiveTradeForHabbo(gameClient.getHabbo()) != null) + return false; ArrayList items = new ArrayList<>(); int credits = 0; @@ -30,48 +32,48 @@ public class RedeemCommand extends Command TIntIntMap points = new TIntIntHashMap(); - for(HabboItem item : gameClient.getHabbo().getInventory().getItemsComponent().getItemsAsValueCollection()) { if (item.getBaseItem().getName().startsWith("CF_") || item.getBaseItem().getName().startsWith("CFC_") || item.getBaseItem().getName().startsWith("DF_") || item.getBaseItem().getName().startsWith("PF_")) { - items.add(item); - if ((item.getBaseItem().getName().startsWith("CF_") || item.getBaseItem().getName().startsWith("CFC_")) && !item.getBaseItem().getName().contains("_diamond_")) + if (item.getUserId() == gameClient.getHabbo().getHabboInfo().getId()) { - try + items.add(item); + if ((item.getBaseItem().getName().startsWith("CF_") || item.getBaseItem().getName().startsWith("CFC_")) && !item.getBaseItem().getName().contains("_diamond_")) { - credits += Integer.valueOf(item.getBaseItem().getName().split("_")[1]); - } catch (Exception e) - { - } + try + { + credits += Integer.valueOf(item.getBaseItem().getName().split("_")[1]); + } catch (Exception e) + { + } - } else if (item.getBaseItem().getName().startsWith("PF_")) - { - try + } else if (item.getBaseItem().getName().startsWith("PF_")) { - pixels += Integer.valueOf(item.getBaseItem().getName().split("_")[1]); - } catch (Exception e) + try + { + pixels += Integer.valueOf(item.getBaseItem().getName().split("_")[1]); + } catch (Exception e) + { + } + } else if (item.getBaseItem().getName().startsWith("DF_")) { - } - } else if (item.getBaseItem().getName().startsWith("DF_")) - { - int pointsType = 0; - int pointsAmount = 0; + int pointsType = 0; + int pointsAmount = 0; - pointsType = Integer.valueOf(item.getBaseItem().getName().split("_")[1]); - pointsAmount = Integer.valueOf(item.getBaseItem().getName().split("_")[2]); + pointsType = Integer.valueOf(item.getBaseItem().getName().split("_")[1]); + pointsAmount = Integer.valueOf(item.getBaseItem().getName().split("_")[2]); - points.adjustOrPutValue(pointsType, pointsAmount, pointsAmount); - } - else if (item.getBaseItem().getName().startsWith("CF_diamond_")) - { - try - { - int amount = Integer.valueOf(item.getBaseItem().getName().split("_")[2]); - points.adjustOrPutValue(5, amount, amount); - } - catch (Exception e) + points.adjustOrPutValue(pointsType, pointsAmount, pointsAmount); + } else if (item.getBaseItem().getName().startsWith("CF_diamond_")) { + try + { + int amount = Integer.valueOf(item.getBaseItem().getName().split("_")[2]); + points.adjustOrPutValue(5, amount, amount); + } catch (Exception e) + { + } } } } diff --git a/src/main/java/com/eu/habbo/habbohotel/commands/ShutdownCommand.java b/src/main/java/com/eu/habbo/habbohotel/commands/ShutdownCommand.java index ebac644e..b80b079f 100644 --- a/src/main/java/com/eu/habbo/habbohotel/commands/ShutdownCommand.java +++ b/src/main/java/com/eu/habbo/habbohotel/commands/ShutdownCommand.java @@ -2,6 +2,7 @@ package com.eu.habbo.habbohotel.commands; import com.eu.habbo.Emulator; import com.eu.habbo.habbohotel.gameclients.GameClient; +import com.eu.habbo.habbohotel.rooms.RoomTrade; import com.eu.habbo.messages.ServerMessage; import com.eu.habbo.messages.outgoing.generic.alerts.GenericAlertComposer; import com.eu.habbo.messages.outgoing.generic.alerts.HotelWillCloseInMinutesComposer; @@ -55,6 +56,7 @@ public class ShutdownCommand extends Command { message = new HotelWillCloseInMinutesComposer(minutes).compose(); } + RoomTrade.TRADING_ENABLED = false; ShutdownEmulator.timestamp = Emulator.getIntUnixTimestamp() + (60 * minutes); Emulator.getThreading().run(new ShutdownEmulator(message), minutes * 60 * 1000); return true; diff --git a/src/main/java/com/eu/habbo/habbohotel/commands/UserInfoCommand.java b/src/main/java/com/eu/habbo/habbohotel/commands/UserInfoCommand.java index 35f3a3cb..2a59bb12 100644 --- a/src/main/java/com/eu/habbo/habbohotel/commands/UserInfoCommand.java +++ b/src/main/java/com/eu/habbo/habbohotel/commands/UserInfoCommand.java @@ -87,7 +87,7 @@ public class UserInfoCommand extends Command (onlineHabbo != null ? Emulator.getTexts().getValue("command.cmd_userinfo.room") + ": " + (onlineHabbo.getHabboInfo().getCurrentRoom() != null ? onlineHabbo.getHabboInfo().getCurrentRoom().getName() + "(" + onlineHabbo.getHabboInfo().getCurrentRoom().getId() + ")\r" : "-" ): "") + (onlineHabbo != null ? Emulator.getTexts().getValue("command.cmd_userinfo.respect_left") + ": " + onlineHabbo.getHabboStats().respectPointsToGive + "\r" : "") + (onlineHabbo != null ? Emulator.getTexts().getValue("command.cmd_userinfo.pet_respect_left") + ": " + onlineHabbo.getHabboStats().petRespectPointsToGive + "\r" : "") + - (onlineHabbo != null ? Emulator.getTexts().getValue("command.cmd_userinfo.allow_trade") + ": " + ((onlineHabbo.getHabboStats().allowTrade) ? Emulator.getTexts().getValue("generic.yes") : Emulator.getTexts().getValue("generic.no")) + "\r" : "") + + (onlineHabbo != null ? Emulator.getTexts().getValue("command.cmd_userinfo.allow_trade") + ": " + ((onlineHabbo.getHabboStats().allowTrade()) ? Emulator.getTexts().getValue("generic.yes") : Emulator.getTexts().getValue("generic.no")) + "\r" : "") + (onlineHabbo != null ? Emulator.getTexts().getValue("command.cmd_userinfo.allow_follow") + ": " + ((onlineHabbo.getHabboStats().blockFollowing) ? Emulator.getTexts().getValue("generic.no") : Emulator.getTexts().getValue("generic.yes")) + "\r" : "") + (onlineHabbo != null ? Emulator.getTexts().getValue("command.cmd_userinfo.allow_friend_request") + ": " + ((onlineHabbo.getHabboStats().blockFriendRequests) ? Emulator.getTexts().getValue("generic.no") : Emulator.getTexts().getValue("generic.yes")) + "\r" : ""); diff --git a/src/main/java/com/eu/habbo/habbohotel/gameclients/GameClient.java b/src/main/java/com/eu/habbo/habbohotel/gameclients/GameClient.java index 6d52728f..fac3d686 100644 --- a/src/main/java/com/eu/habbo/habbohotel/gameclients/GameClient.java +++ b/src/main/java/com/eu/habbo/habbohotel/gameclients/GameClient.java @@ -14,6 +14,7 @@ import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.SQLException; import java.util.ArrayList; +import java.util.concurrent.ConcurrentHashMap; public class GameClient { @@ -26,6 +27,9 @@ public class GameClient private String machineId = ""; + public ConcurrentHashMap incomingPacketCounter = new ConcurrentHashMap<>(25); + public long lastPacketCounterCleared = Emulator.getIntUnixTimestamp(); + public GameClient(Channel channel) { this.channel = channel; diff --git a/src/main/java/com/eu/habbo/habbohotel/games/battlebanzai/BattleBanzaiGame.java b/src/main/java/com/eu/habbo/habbohotel/games/battlebanzai/BattleBanzaiGame.java index d3719cb3..df4603cf 100644 --- a/src/main/java/com/eu/habbo/habbohotel/games/battlebanzai/BattleBanzaiGame.java +++ b/src/main/java/com/eu/habbo/habbohotel/games/battlebanzai/BattleBanzaiGame.java @@ -201,7 +201,6 @@ public class BattleBanzaiGame extends Game } else { - this.stop(); GameTeam winningTeam = null; @@ -244,6 +243,8 @@ public class BattleBanzaiGame extends Game Emulator.getThreading().run(new BattleBanzaiTilesFlicker(this.lockedTiles.get(winningTeam.teamColor), winningTeam.teamColor, this.room)); } } + + this.stop(); this.isRunning = false; } diff --git a/src/main/java/com/eu/habbo/habbohotel/items/ItemManager.java b/src/main/java/com/eu/habbo/habbohotel/items/ItemManager.java index 725a0a8c..768f372d 100644 --- a/src/main/java/com/eu/habbo/habbohotel/items/ItemManager.java +++ b/src/main/java/com/eu/habbo/habbohotel/items/ItemManager.java @@ -2,10 +2,7 @@ package com.eu.habbo.habbohotel.items; import com.eu.habbo.Emulator; import com.eu.habbo.habbohotel.items.interactions.*; -import com.eu.habbo.habbohotel.items.interactions.games.battlebanzai.InteractionBattleBanzaiSphere; -import com.eu.habbo.habbohotel.items.interactions.games.battlebanzai.InteractionBattleBanzaiTeleporter; -import com.eu.habbo.habbohotel.items.interactions.games.battlebanzai.InteractionBattleBanzaiTile; -import com.eu.habbo.habbohotel.items.interactions.games.battlebanzai.InteractionBattleBanzaiTimer; +import com.eu.habbo.habbohotel.items.interactions.games.battlebanzai.*; import com.eu.habbo.habbohotel.items.interactions.games.battlebanzai.gates.InteractionBattleBanzaiGateBlue; import com.eu.habbo.habbohotel.items.interactions.games.battlebanzai.gates.InteractionBattleBanzaiGateGreen; import com.eu.habbo.habbohotel.items.interactions.games.battlebanzai.gates.InteractionBattleBanzaiGateRed; @@ -225,6 +222,7 @@ public class ItemManager this.interactionsList.add(new ItemInteraction("wf_act_give_respect", WiredEffectGiveRespect.class)); this.interactionsList.add(new ItemInteraction("wf_act_alert", WiredEffectAlert.class)); this.interactionsList.add(new ItemInteraction("wf_act_give_handitem", WiredEffectGiveHandItem.class)); + this.interactionsList.add(new ItemInteraction("wf_act_match_to_sshot2", WiredEffectMatchFurniStaff.class)); this.interactionsList.add(new ItemInteraction("wf_cnd_has_furni_on", WiredConditionFurniHaveFurni.class)); @@ -283,6 +281,7 @@ public class ItemManager this.interactionsList.add(new ItemInteraction("battlebanzai_tile", InteractionBattleBanzaiTile.class)); this.interactionsList.add(new ItemInteraction("battlebanzai_random_teleport", InteractionBattleBanzaiTeleporter.class)); this.interactionsList.add(new ItemInteraction("battlebanzai_sphere", InteractionBattleBanzaiSphere.class)); + this.interactionsList.add(new ItemInteraction("battlebanzai_puck", InteractionBattleBanzaiPuck.class)); this.interactionsList.add(new ItemInteraction("battlebanzai_gate_blue", InteractionBattleBanzaiGateBlue.class)); diff --git a/src/main/java/com/eu/habbo/habbohotel/items/PostItColor.java b/src/main/java/com/eu/habbo/habbohotel/items/PostItColor.java index 71be4758..2ed8470c 100644 --- a/src/main/java/com/eu/habbo/habbohotel/items/PostItColor.java +++ b/src/main/java/com/eu/habbo/habbohotel/items/PostItColor.java @@ -1,5 +1,7 @@ package com.eu.habbo.habbohotel.items; +import com.eu.habbo.Emulator; + public enum PostItColor { @@ -32,4 +34,9 @@ public enum PostItColor return true; } + + public static PostItColor randomColorNotYellow() + { + return PostItColor.values()[Emulator.getRandom().nextInt(3)]; + } } diff --git a/src/main/java/com/eu/habbo/habbohotel/items/interactions/InteractionBackgroundToner.java b/src/main/java/com/eu/habbo/habbohotel/items/interactions/InteractionBackgroundToner.java index 6a54c11d..52fbfdc5 100644 --- a/src/main/java/com/eu/habbo/habbohotel/items/interactions/InteractionBackgroundToner.java +++ b/src/main/java/com/eu/habbo/habbohotel/items/interactions/InteractionBackgroundToner.java @@ -106,4 +106,10 @@ public class InteractionBackgroundToner extends HabboItem { super.onWalkOff(roomUnit, room, objects); } + + @Override + public boolean isUsable() + { + return true; + } } diff --git a/src/main/java/com/eu/habbo/habbohotel/items/interactions/InteractionCannon.java b/src/main/java/com/eu/habbo/habbohotel/items/interactions/InteractionCannon.java index 8ddf4132..764131b9 100644 --- a/src/main/java/com/eu/habbo/habbohotel/items/interactions/InteractionCannon.java +++ b/src/main/java/com/eu/habbo/habbohotel/items/interactions/InteractionCannon.java @@ -13,6 +13,7 @@ import com.eu.habbo.threading.runnables.CannonResetCooldownAction; import java.sql.ResultSet; import java.sql.SQLException; +import java.util.List; public class InteractionCannon extends HabboItem { @@ -61,13 +62,22 @@ public class InteractionCannon extends HabboItem return; RoomTile tile = room.getLayout().getTile(this.getX(), this.getY()); - - if ((client == null || tile.distance(client.getHabbo().getRoomUnit().getCurrentLocation()) <= 2) && !this.cooldown) + RoomTile fuseTile = this.getRotation() >= 4 ? tile : room.getLayout().getTileInFront(tile, ((this.getRotation() % 2) + 2) % 8); + List tiles = room.getLayout().getTilesAround(fuseTile); + tiles.remove(room.getLayout().getTileInFront(tile, (this.getRotation() + (this.getRotation() >= 4 ? -1 : 0)) % 8)); + tiles.remove(room.getLayout().getTileInFront(tile, (this.getRotation() + (this.getRotation() >= 4 ? 5 : 4)) % 8)); + + if ((client == null || tiles.contains(client.getHabbo().getRoomUnit().getCurrentLocation())) && !this.cooldown && + client.getHabbo().getRoomUnit().canWalk()) { + client.getHabbo().getRoomUnit().setCanWalk(false); + client.getHabbo().getRoomUnit().setGoalLocation(client.getHabbo().getRoomUnit().getCurrentLocation()); this.cooldown = true; this.setExtradata(this.getExtradata().equals("1") ? "0" : "1"); room.updateItemState(this); - Emulator.getThreading().run(new CannonKickAction(this, room), 750); + client.getHabbo().getRoomUnit().lookAtPoint(fuseTile); + client.getHabbo().getRoomUnit().statusUpdate(true); + Emulator.getThreading().run(new CannonKickAction(this, room, client), 750); Emulator.getThreading().run(new CannonResetCooldownAction(this), 2000); } } @@ -95,4 +105,11 @@ public class InteractionCannon extends HabboItem { this.setExtradata("0"); } + + + @Override + public boolean isUsable() + { + return true; + } } diff --git a/src/main/java/com/eu/habbo/habbohotel/items/interactions/InteractionCrackable.java b/src/main/java/com/eu/habbo/habbohotel/items/interactions/InteractionCrackable.java index aeece9a6..15eae350 100644 --- a/src/main/java/com/eu/habbo/habbohotel/items/interactions/InteractionCrackable.java +++ b/src/main/java/com/eu/habbo/habbohotel/items/interactions/InteractionCrackable.java @@ -166,4 +166,10 @@ public class InteractionCrackable extends HabboItem this.setExtradata("0"); room.updateItem(this); } + + @Override + public boolean isUsable() + { + return false; + } } diff --git a/src/main/java/com/eu/habbo/habbohotel/items/interactions/InteractionDice.java b/src/main/java/com/eu/habbo/habbohotel/items/interactions/InteractionDice.java index f1757b5f..f4801a1e 100644 --- a/src/main/java/com/eu/habbo/habbohotel/items/interactions/InteractionDice.java +++ b/src/main/java/com/eu/habbo/habbohotel/items/interactions/InteractionDice.java @@ -97,4 +97,10 @@ public class InteractionDice extends HabboItem { return false; } + + @Override + public boolean isUsable() + { + return true; + } } diff --git a/src/main/java/com/eu/habbo/habbohotel/items/interactions/InteractionEffectTile.java b/src/main/java/com/eu/habbo/habbohotel/items/interactions/InteractionEffectTile.java index 950fc53e..f50abef0 100644 --- a/src/main/java/com/eu/habbo/habbohotel/items/interactions/InteractionEffectTile.java +++ b/src/main/java/com/eu/habbo/habbohotel/items/interactions/InteractionEffectTile.java @@ -3,11 +3,13 @@ package com.eu.habbo.habbohotel.items.interactions; import com.eu.habbo.habbohotel.items.Item; import com.eu.habbo.habbohotel.rooms.Room; import com.eu.habbo.habbohotel.rooms.RoomUnit; +import com.eu.habbo.habbohotel.users.Habbo; +import com.eu.habbo.habbohotel.users.HabboGender; import java.sql.ResultSet; import java.sql.SQLException; -public class InteractionEffectTile extends InteractionDefault +public class InteractionEffectTile extends InteractionPressurePlate { public InteractionEffectTile(ResultSet set, Item baseItem) throws SQLException { @@ -19,8 +21,55 @@ public class InteractionEffectTile extends InteractionDefault super(id, userId, item, extradata, limitedStack, limitedSells); } + @Override + public boolean canWalkOn(RoomUnit roomUnit, Room room, Object[] objects) + { + return true; + } + + @Override + public boolean isWalkable() + { + return true; + } + @Override public void onWalkOff(RoomUnit roomUnit, Room room, Object[] objects) throws Exception { + super.onWalkOff(roomUnit, room, objects); + + Habbo habbo = room.getHabbo(roomUnit); + + if (habbo.getRoomUnit().getEffectId() == 0) + { + if (habbo.getHabboInfo().getGender().equals(HabboGender.M)) + { + room.giveEffect(habbo.getRoomUnit(), this.getBaseItem().getEffectM()); + } else + { + room.giveEffect(habbo.getRoomUnit(), this.getBaseItem().getEffectF()); + } + } + else + { + if ((habbo.getHabboInfo().getGender().equals(HabboGender.M) && habbo.getRoomUnit().getEffectId() == this.getBaseItem().getEffectM()) || + habbo.getHabboInfo().getGender().equals(HabboGender.F) && habbo.getRoomUnit().getEffectId() == this.getBaseItem().getEffectF() + ) + { + room.giveEffect(habbo.getRoomUnit(), 0); + } + } + } + + @Override + public void onWalk(RoomUnit roomUnit, Room room, Object[] objects) throws Exception + { + + } + + @Override + public boolean isUsable() + { + return false; } } diff --git a/src/main/java/com/eu/habbo/habbohotel/items/interactions/InteractionGate.java b/src/main/java/com/eu/habbo/habbohotel/items/interactions/InteractionGate.java index 512b79d0..6abd167f 100644 --- a/src/main/java/com/eu/habbo/habbohotel/items/interactions/InteractionGate.java +++ b/src/main/java/com/eu/habbo/habbohotel/items/interactions/InteractionGate.java @@ -84,4 +84,10 @@ public class InteractionGate extends HabboItem { return true; } + + @Override + public boolean isUsable() + { + return true; + } } diff --git a/src/main/java/com/eu/habbo/habbohotel/items/interactions/InteractionMonsterPlantSeed.java b/src/main/java/com/eu/habbo/habbohotel/items/interactions/InteractionMonsterPlantSeed.java index b7a51423..ed6892c2 100644 --- a/src/main/java/com/eu/habbo/habbohotel/items/interactions/InteractionMonsterPlantSeed.java +++ b/src/main/java/com/eu/habbo/habbohotel/items/interactions/InteractionMonsterPlantSeed.java @@ -6,7 +6,6 @@ import com.eu.habbo.habbohotel.rooms.Room; import com.eu.habbo.habbohotel.rooms.RoomUnit; import com.eu.habbo.habbohotel.users.HabboItem; import com.eu.habbo.messages.ServerMessage; -import com.eu.habbo.messages.outgoing.generic.alerts.GenericAlertComposer; import java.sql.ResultSet; import java.sql.SQLException; @@ -26,7 +25,7 @@ public class InteractionMonsterPlantSeed extends HabboItem @Override public void onClick(GameClient client, Room room, Object[] objects) throws Exception { - client.sendResponse(new GenericAlertComposer("We're in the progress of implementing monster plants.\r\n Stay tuned!\r-Arcturus Emulator")); + //client.sendResponse(new GenericAlertComposer("We're in the progress of implementing monster plants.\r\n Stay tuned!\r-Arcturus Emulator")); } @Override diff --git a/src/main/java/com/eu/habbo/habbohotel/items/interactions/InteractionMoodLight.java b/src/main/java/com/eu/habbo/habbohotel/items/interactions/InteractionMoodLight.java index a422993c..b7b1e8df 100644 --- a/src/main/java/com/eu/habbo/habbohotel/items/interactions/InteractionMoodLight.java +++ b/src/main/java/com/eu/habbo/habbohotel/items/interactions/InteractionMoodLight.java @@ -67,4 +67,10 @@ public class InteractionMoodLight extends HabboItem } } } + + @Override + public boolean isUsable() + { + return true; + } } diff --git a/src/main/java/com/eu/habbo/habbohotel/items/interactions/InteractionMultiHeight.java b/src/main/java/com/eu/habbo/habbohotel/items/interactions/InteractionMultiHeight.java index f91bc244..ab380c12 100644 --- a/src/main/java/com/eu/habbo/habbohotel/items/interactions/InteractionMultiHeight.java +++ b/src/main/java/com/eu/habbo/habbohotel/items/interactions/InteractionMultiHeight.java @@ -75,6 +75,7 @@ public class InteractionMultiHeight extends HabboItem { this.setExtradata("" + (Integer.valueOf(this.getExtradata()) + 1) % (this.getBaseItem().getMultiHeights().length)); this.needsUpdate(true); + room.updateTiles(room.getLayout().getTilesAt(room.getLayout().getTile(this.getX(), this.getY()), this.getBaseItem().getWidth(), this.getBaseItem().getLength(), this.getRotation())); room.updateItemState(this); room.sendComposer(new UpdateStackHeightComposer(this.getX(), this.getY(), this.getBaseItem().getMultiHeights()[Integer.valueOf(this.getExtradata())] * 256.0D).compose()); } @@ -100,6 +101,7 @@ public class InteractionMultiHeight extends HabboItem else { habbo.getRoomUnit().setZ(this.getZ() + this.getBaseItem().getMultiHeights()[(this.getExtradata().isEmpty() ? 0 : Integer.valueOf(this.getExtradata()) % (this.getBaseItem().getMultiHeights().length))]); + habbo.getRoomUnit().setPreviousLocationZ(habbo.getRoomUnit().getZ()); } } diff --git a/src/main/java/com/eu/habbo/habbohotel/items/interactions/InteractionPostIt.java b/src/main/java/com/eu/habbo/habbohotel/items/interactions/InteractionPostIt.java index 5ae987d1..188640a7 100644 --- a/src/main/java/com/eu/habbo/habbohotel/items/interactions/InteractionPostIt.java +++ b/src/main/java/com/eu/habbo/habbohotel/items/interactions/InteractionPostIt.java @@ -11,6 +11,8 @@ import java.sql.SQLException; public class InteractionPostIt extends HabboItem { + public static String STICKYPOLE_PREFIX_TEXT = ""; + public InteractionPostIt(ResultSet set, Item baseItem) throws SQLException { super(set, baseItem); diff --git a/src/main/java/com/eu/habbo/habbohotel/items/interactions/InteractionPressurePlate.java b/src/main/java/com/eu/habbo/habbohotel/items/interactions/InteractionPressurePlate.java index f55e8147..016e1450 100644 --- a/src/main/java/com/eu/habbo/habbohotel/items/interactions/InteractionPressurePlate.java +++ b/src/main/java/com/eu/habbo/habbohotel/items/interactions/InteractionPressurePlate.java @@ -5,11 +5,13 @@ import com.eu.habbo.habbohotel.items.Item; import com.eu.habbo.habbohotel.rooms.Room; import com.eu.habbo.habbohotel.rooms.RoomTile; import com.eu.habbo.habbohotel.rooms.RoomUnit; +import com.eu.habbo.habbohotel.users.HabboItem; +import com.eu.habbo.messages.ServerMessage; import java.sql.ResultSet; import java.sql.SQLException; -public class InteractionPressurePlate extends InteractionDefault +public class InteractionPressurePlate extends HabboItem { public InteractionPressurePlate(ResultSet set, Item baseItem) throws SQLException { @@ -39,6 +41,15 @@ public class InteractionPressurePlate extends InteractionDefault super.onClick(client, room, objects); } + @Override + public void serializeExtradata(ServerMessage serverMessage) + { + serverMessage.appendInt((this.isLimited() ? 256 : 0)); + serverMessage.appendString(this.getExtradata()); + + super.serializeExtradata(serverMessage); + } + @Override public void onWalk(RoomUnit roomUnit, Room room, Object[] objects) throws Exception { @@ -51,12 +62,16 @@ public class InteractionPressurePlate extends InteractionDefault super.onWalkOn(roomUnit, room, objects); this.setExtradata("1"); - for (RoomTile tile : room.getLayout().getTilesAt(room.getLayout().getTile(this.getX(), this.getY()), this.getBaseItem().getWidth(), this.getBaseItem().getLength(), this.getRotation())) + + if (this.getBaseItem().getWidth() > 1 || this.getBaseItem().getLength() > 1) { - if (!room.hasHabbosAt(tile.x, tile.y) && !roomUnit.getGoal().is(tile.x, tile.y)) + for (RoomTile tile : room.getLayout().getTilesAt(room.getLayout().getTile(this.getX(), this.getY()), this.getBaseItem().getWidth(), this.getBaseItem().getLength(), this.getRotation())) { - this.setExtradata("0"); - break; + if (!room.hasHabbosAt(tile.x, tile.y) && !roomUnit.getGoal().is(tile.x, tile.y)) + { + this.setExtradata("0"); + break; + } } } diff --git a/src/main/java/com/eu/habbo/habbohotel/items/interactions/InteractionPushable.java b/src/main/java/com/eu/habbo/habbohotel/items/interactions/InteractionPushable.java index 15222bf6..eb0cbbb3 100644 --- a/src/main/java/com/eu/habbo/habbohotel/items/interactions/InteractionPushable.java +++ b/src/main/java/com/eu/habbo/habbohotel/items/interactions/InteractionPushable.java @@ -9,11 +9,12 @@ import com.eu.habbo.threading.runnables.KickBallAction; import java.sql.ResultSet; import java.sql.SQLException; -public abstract class InteractionPushable extends InteractionDefault -{ + +public abstract class InteractionPushable extends InteractionDefault { + private KickBallAction currentThread; - + public InteractionPushable(ResultSet set, Item baseItem) throws SQLException { super(set, baseItem); @@ -23,7 +24,7 @@ public abstract class InteractionPushable extends InteractionDefault { super(id, userId, item, extradata, limitedStack, limitedSells); } - + @Override public boolean canWalkOn(RoomUnit roomUnit, Room room, Object[] objects) { @@ -35,62 +36,59 @@ public abstract class InteractionPushable extends InteractionDefault { return true; } - + @Override public void onWalkOff(RoomUnit roomUnit, final Room room, Object[] objects) throws Exception { super.onWalkOff(roomUnit, room, objects); - + if(!(currentThread == null || currentThread.dead)) - { - currentThread = null; return; - } - + int velocity = this.getWalkOffVelocity(roomUnit, room); RoomUserRotation direction = this.getWalkOffDirection(roomUnit, room); this.onKick(room, roomUnit, velocity, direction); - + if(velocity > 0) { if(currentThread != null) currentThread.dead = true; - + currentThread = new KickBallAction(this, room, roomUnit, direction, velocity); Emulator.getThreading().run(currentThread, 0); } } - + @Override public void onClick(GameClient client, Room room, Object[] objects) throws Exception { super.onClick(client, room, objects); - + if(RoomLayout.tilesAdjecent(client.getHabbo().getRoomUnit().getCurrentLocation(), room.getLayout().getTile(this.getX(), this.getY()))) { int velocity = this.getTackleVelocity(client.getHabbo().getRoomUnit(), room); RoomUserRotation direction = this.getWalkOnDirection(client.getHabbo().getRoomUnit(), room); this.onTackle(room, client.getHabbo().getRoomUnit(), velocity, direction); - + if(velocity > 0) { if(currentThread != null) currentThread.dead = true; - + currentThread = new KickBallAction(this, room, client.getHabbo().getRoomUnit(), direction, velocity); Emulator.getThreading().run(currentThread, 0); } } } - + @Override public void onWalkOn(RoomUnit roomUnit, final Room room, Object[] objects) throws Exception { super.onWalkOn(roomUnit, room, objects); - + int velocity; RoomUserRotation direction; - + if(this.getX() == roomUnit.getGoal().x && this.getY() == roomUnit.getGoal().y) //User clicked on the tile the ball is on, they want to kick it { velocity = this.getWalkOnVelocity(roomUnit, room); @@ -103,12 +101,12 @@ public abstract class InteractionPushable extends InteractionDefault direction = this.getDragDirection(roomUnit, room); this.onDrag(room, roomUnit, velocity, direction); } - + if(velocity > 0) { if(currentThread != null) currentThread.dead = true; - + currentThread = new KickBallAction(this, room, roomUnit, direction, velocity); Emulator.getThreading().run(currentThread, 0); } @@ -116,55 +114,56 @@ public abstract class InteractionPushable extends InteractionDefault public abstract int getWalkOnVelocity(RoomUnit roomUnit, Room room); - + public abstract RoomUserRotation getWalkOnDirection(RoomUnit roomUnit, Room room); - + public abstract int getWalkOffVelocity(RoomUnit roomUnit, Room room); - + public abstract RoomUserRotation getWalkOffDirection(RoomUnit roomUnit, Room room); - + public abstract int getDragVelocity(RoomUnit roomUnit, Room room); - + public abstract RoomUserRotation getDragDirection(RoomUnit roomUnit, Room room); - + public abstract int getTackleVelocity(RoomUnit roomUnit, Room room); - + public abstract RoomUserRotation getTackleDirection(RoomUnit roomUnit, Room room); - + public abstract int getNextRollDelay(int currentStep, int totalSteps); //The length in milliseconds when the ball should next roll - + public abstract RoomUserRotation getBounceDirection(Room room, RoomUserRotation currentDirection); //Returns the new direction to move the ball when the ball cannot move - + public abstract boolean validMove(Room room, RoomTile from, RoomTile to); //Checks if the next move is valid - + public abstract void onDrag(Room room, RoomUnit roomUnit, int velocity, RoomUserRotation direction); - + public abstract void onKick(Room room, RoomUnit roomUnit, int velocity, RoomUserRotation direction); - + public abstract void onTackle(Room room, RoomUnit roomUnit, int velocity, RoomUserRotation direction); - + public abstract void onMove(Room room, RoomTile from, RoomTile to, RoomUserRotation direction, RoomUnit kicker, int nextRoll, int currentStep, int totalSteps); - + public abstract void onBounce(Room room, RoomUserRotation oldDirection, RoomUserRotation newDirection, RoomUnit kicker); - + public abstract void onStop(Room room, RoomUnit kicker, int currentStep, int totalSteps); - + public abstract boolean canStillMove(Room room, RoomTile from, RoomTile to, RoomUserRotation direction, RoomUnit kicker, int nextRoll, int currentStep, int totalSteps); -} + +} \ No newline at end of file diff --git a/src/main/java/com/eu/habbo/habbohotel/items/interactions/InteractionPyramid.java b/src/main/java/com/eu/habbo/habbohotel/items/interactions/InteractionPyramid.java index 77071174..3437185d 100644 --- a/src/main/java/com/eu/habbo/habbohotel/items/interactions/InteractionPyramid.java +++ b/src/main/java/com/eu/habbo/habbohotel/items/interactions/InteractionPyramid.java @@ -51,4 +51,10 @@ public class InteractionPyramid extends InteractionGate public void onClick(GameClient client, Room room, Object[] objects) throws Exception { } + + @Override + public boolean isUsable() + { + return false; + } } diff --git a/src/main/java/com/eu/habbo/habbohotel/items/interactions/InteractionStackHelper.java b/src/main/java/com/eu/habbo/habbohotel/items/interactions/InteractionStackHelper.java index 2998027c..135e565a 100644 --- a/src/main/java/com/eu/habbo/habbohotel/items/interactions/InteractionStackHelper.java +++ b/src/main/java/com/eu/habbo/habbohotel/items/interactions/InteractionStackHelper.java @@ -47,4 +47,10 @@ public class InteractionStackHelper extends HabboItem super.serializeExtradata(serverMessage); } + + @Override + public boolean isUsable() + { + return true; + } } diff --git a/src/main/java/com/eu/habbo/habbohotel/items/interactions/InteractionSwitch.java b/src/main/java/com/eu/habbo/habbohotel/items/interactions/InteractionSwitch.java index f73f9211..93c5fd5a 100644 --- a/src/main/java/com/eu/habbo/habbohotel/items/interactions/InteractionSwitch.java +++ b/src/main/java/com/eu/habbo/habbohotel/items/interactions/InteractionSwitch.java @@ -31,4 +31,10 @@ public class InteractionSwitch extends InteractionDefault { return true; } + + @Override + public boolean isUsable() + { + return true; + } } diff --git a/src/main/java/com/eu/habbo/habbohotel/items/interactions/InteractionTeleport.java b/src/main/java/com/eu/habbo/habbohotel/items/interactions/InteractionTeleport.java index a774d6ad..c182f326 100644 --- a/src/main/java/com/eu/habbo/habbohotel/items/interactions/InteractionTeleport.java +++ b/src/main/java/com/eu/habbo/habbohotel/items/interactions/InteractionTeleport.java @@ -192,4 +192,9 @@ public class InteractionTeleport extends HabboItem } } + @Override + public boolean isUsable() + { + return true; + } } diff --git a/src/main/java/com/eu/habbo/habbohotel/items/interactions/InteractionVendingMachine.java b/src/main/java/com/eu/habbo/habbohotel/items/interactions/InteractionVendingMachine.java index b77fc6ca..897281c2 100644 --- a/src/main/java/com/eu/habbo/habbohotel/items/interactions/InteractionVendingMachine.java +++ b/src/main/java/com/eu/habbo/habbohotel/items/interactions/InteractionVendingMachine.java @@ -129,4 +129,10 @@ public class InteractionVendingMachine extends HabboItem super.serializeExtradata(serverMessage); } + + @Override + public boolean isUsable() + { + return true; + } } diff --git a/src/main/java/com/eu/habbo/habbohotel/items/interactions/InteractionWired.java b/src/main/java/com/eu/habbo/habbohotel/items/interactions/InteractionWired.java index efa575e1..a618bf83 100644 --- a/src/main/java/com/eu/habbo/habbohotel/items/interactions/InteractionWired.java +++ b/src/main/java/com/eu/habbo/habbohotel/items/interactions/InteractionWired.java @@ -122,4 +122,10 @@ public abstract class InteractionWired extends HabboItem this.cooldown = newMillis; return true; } + + @Override + public boolean isUsable() + { + return true; + } } diff --git a/src/main/java/com/eu/habbo/habbohotel/items/interactions/games/battlebanzai/InteractionBattleBanzaiPuck.java b/src/main/java/com/eu/habbo/habbohotel/items/interactions/games/battlebanzai/InteractionBattleBanzaiPuck.java new file mode 100644 index 00000000..b7806efc --- /dev/null +++ b/src/main/java/com/eu/habbo/habbohotel/items/interactions/games/battlebanzai/InteractionBattleBanzaiPuck.java @@ -0,0 +1,218 @@ +package com.eu.habbo.habbohotel.items.interactions.games.battlebanzai; + +import com.eu.habbo.habbohotel.gameclients.GameClient; +import com.eu.habbo.habbohotel.games.GameTeam; +import com.eu.habbo.habbohotel.games.battlebanzai.BattleBanzaiGame; +import com.eu.habbo.habbohotel.items.Item; +import com.eu.habbo.habbohotel.items.interactions.InteractionPushable; +import com.eu.habbo.habbohotel.rooms.*; +import com.eu.habbo.habbohotel.users.Habbo; +import com.eu.habbo.habbohotel.users.HabboItem; + +import java.sql.ResultSet; +import java.sql.SQLException; + +public class InteractionBattleBanzaiPuck extends InteractionPushable +{ + public InteractionBattleBanzaiPuck(ResultSet set, Item baseItem) throws SQLException + { + super(set, baseItem); + } + + public InteractionBattleBanzaiPuck(int id, int userId, Item item, String extradata, int limitedStack, int limitedSells) + { + super(id, userId, item, extradata, limitedStack, limitedSells); + } + + @Override + public int getWalkOnVelocity(RoomUnit roomUnit, Room room) + { + return 6; + } + + @Override + public RoomUserRotation getWalkOnDirection(RoomUnit roomUnit, Room room) + { + return roomUnit.getBodyRotation(); + } + + @Override + public int getWalkOffVelocity(RoomUnit roomUnit, Room room) + { + return 0; + } + + @Override + public RoomUserRotation getWalkOffDirection(RoomUnit roomUnit, Room room) + { + return roomUnit.getBodyRotation(); + } + + @Override + public int getDragVelocity(RoomUnit roomUnit, Room room) + { + return 1; + } + + @Override + public RoomUserRotation getDragDirection(RoomUnit roomUnit, Room room) + { + return roomUnit.getBodyRotation(); + } + + @Override + public int getTackleVelocity(RoomUnit roomUnit, Room room) + { + return 6; + } + + @Override + public RoomUserRotation getTackleDirection(RoomUnit roomUnit, Room room) + { + return roomUnit.getBodyRotation(); + } + + @Override + public int getNextRollDelay(int currentStep, int totalSteps) + { + int t = 2500; + return (totalSteps == 1) ? 500 : 100*((t=t/t-1)*t*t*t*t + 1) + (currentStep * 100); + } + + @Override + public RoomUserRotation getBounceDirection(Room room, RoomUserRotation currentDirection) + { + switch(currentDirection) + { + default: + case NORTH: + return RoomUserRotation.SOUTH; + + case NORTH_EAST: + if(this.validMove(room, room.getLayout().getTile(this.getX(), this.getY()), room.getLayout().getTileInFront(room.getLayout().getTile(this.getX(), this.getY()), RoomUserRotation.NORTH_WEST.getValue()))) + return RoomUserRotation.NORTH_WEST; + else if(this.validMove(room, room.getLayout().getTile(this.getX(), this.getY()), room.getLayout().getTileInFront(room.getLayout().getTile(this.getX(), this.getY()), RoomUserRotation.SOUTH_EAST.getValue()))) + return RoomUserRotation.SOUTH_EAST; + else + return RoomUserRotation.SOUTH_WEST; + + case EAST: + return RoomUserRotation.WEST; + + case SOUTH_EAST: + if(this.validMove(room, room.getLayout().getTile(this.getX(), this.getY()), room.getLayout().getTileInFront(room.getLayout().getTile(this.getX(), this.getY()), RoomUserRotation.SOUTH_WEST.getValue()))) + return RoomUserRotation.SOUTH_WEST; + else if(this.validMove(room, room.getLayout().getTile(this.getX(), this.getY()), room.getLayout().getTileInFront(room.getLayout().getTile(this.getX(), this.getY()), RoomUserRotation.NORTH_EAST.getValue()))) + return RoomUserRotation.NORTH_EAST; + else + return RoomUserRotation.NORTH_WEST; + + case SOUTH: + return RoomUserRotation.NORTH; + + case SOUTH_WEST: + if(this.validMove(room, room.getLayout().getTile(this.getX(), this.getY()), room.getLayout().getTileInFront(room.getLayout().getTile(this.getX(), this.getY()), RoomUserRotation.SOUTH_EAST.getValue()))) + return RoomUserRotation.SOUTH_EAST; + else if(this.validMove(room, room.getLayout().getTile(this.getX(), this.getY()), room.getLayout().getTileInFront(room.getLayout().getTile(this.getX(), this.getY()), RoomUserRotation.NORTH_WEST.getValue()))) + return RoomUserRotation.NORTH_WEST; + else + return RoomUserRotation.NORTH_EAST; + + case WEST: + return RoomUserRotation.EAST; + + case NORTH_WEST: + if(this.validMove(room, room.getLayout().getTile(this.getX(), this.getY()), room.getLayout().getTileInFront(room.getLayout().getTile(this.getX(), this.getY()), RoomUserRotation.NORTH_EAST.getValue()))) + return RoomUserRotation.NORTH_EAST; + else if(this.validMove(room, room.getLayout().getTile(this.getX(), this.getY()), room.getLayout().getTileInFront(room.getLayout().getTile(this.getX(), this.getY()), RoomUserRotation.SOUTH_WEST.getValue()))) + return RoomUserRotation.SOUTH_WEST; + else + return RoomUserRotation.SOUTH_EAST; + } + } + + @Override + public void onClick(GameClient client, Room room, Object[] objects) throws Exception + { + super.onClick(client, room, objects); + } + + @Override + public boolean validMove(Room room, RoomTile from, RoomTile to) + { + HabboItem topItem = room.getTopItemAt(to.x, to.y, this); + return topItem != null && topItem instanceof InteractionBattleBanzaiTile; + //return !(!room.getLayout().tileWalkable(to.x, to.y) || (topItem != null && (!topItem.getBaseItem().allowStack() || topItem.getBaseItem().allowSit() || topItem.getBaseItem().allowLay()))); + } + + @Override + public void onDrag(Room room, RoomUnit roomUnit, int velocity, RoomUserRotation direction) + { + + } + + @Override + public void onKick(Room room, RoomUnit roomUnit, int velocity, RoomUserRotation direction) + { + + } + + @Override + public void onTackle(Room room, RoomUnit roomUnit, int velocity, RoomUserRotation direction) + { + + } + + @Override + public void onMove(Room room, RoomTile from, RoomTile to, RoomUserRotation direction, RoomUnit kicker, int nextRoll, int currentStep, int totalSteps) + { + Habbo habbo = room.getHabbo(kicker); + + if (habbo != null) + { + BattleBanzaiGame game = (BattleBanzaiGame)room.getGame(BattleBanzaiGame.class); + if (game != null) + { + GameTeam team = game.getTeamForHabbo(habbo); + if (team != null) + { + HabboItem item = room.getTopItemAt(to.x, to.y); + + if (item instanceof InteractionBattleBanzaiTile) + { + try + { + item.onWalkOn(kicker, room, null); + } catch (Exception e) + { + return; + } + } + + this.setExtradata(team.teamColor.type + 1 + ""); + room.updateItemState(this); + } + } + } + //TODO Implement point counting logic. + } + + @Override + public void onBounce(Room room, RoomUserRotation oldDirection, RoomUserRotation newDirection, RoomUnit kicker) + { + + } + + @Override + public void onStop(Room room, RoomUnit kicker, int currentStep, int totalSteps) + { + + } + + @Override + public boolean canStillMove(Room room, RoomTile from, RoomTile to, RoomUserRotation direction, RoomUnit kicker, int nextRoll, int currentStep, int totalSteps) + { + HabboItem topItem = room.getTopItemAt(to.x, to.y); + return topItem != null && to.state == RoomTileState.OPEN && to.isWalkable() && topItem instanceof InteractionBattleBanzaiTile; + } +} diff --git a/src/main/java/com/eu/habbo/habbohotel/items/interactions/games/battlebanzai/InteractionBattleBanzaiTeleporter.java b/src/main/java/com/eu/habbo/habbohotel/items/interactions/games/battlebanzai/InteractionBattleBanzaiTeleporter.java index db86c1ae..07cadc64 100644 --- a/src/main/java/com/eu/habbo/habbohotel/items/interactions/games/battlebanzai/InteractionBattleBanzaiTeleporter.java +++ b/src/main/java/com/eu/habbo/habbohotel/items/interactions/games/battlebanzai/InteractionBattleBanzaiTeleporter.java @@ -5,6 +5,7 @@ import com.eu.habbo.habbohotel.gameclients.GameClient; import com.eu.habbo.habbohotel.items.Item; import com.eu.habbo.habbohotel.rooms.Room; import com.eu.habbo.habbohotel.rooms.RoomUnit; +import com.eu.habbo.habbohotel.rooms.RoomUnitStatus; import com.eu.habbo.habbohotel.users.Habbo; import com.eu.habbo.habbohotel.users.HabboItem; import com.eu.habbo.messages.ServerMessage; @@ -67,6 +68,7 @@ public class InteractionBattleBanzaiTeleporter extends HabboItem if (habbo != null) { this.setExtradata("1"); + roomUnit.removeStatus(RoomUnitStatus.MOVE); HabboItem target = room.getRoomSpecialTypes().getRandomTeleporter(); while (target == this && room.getRoomSpecialTypes().getBanzaiTeleporters().size() > 1) diff --git a/src/main/java/com/eu/habbo/habbohotel/items/interactions/games/football/InteractionFootball.java b/src/main/java/com/eu/habbo/habbohotel/items/interactions/games/football/InteractionFootball.java index 3c7effb8..788b5d0b 100644 --- a/src/main/java/com/eu/habbo/habbohotel/items/interactions/games/football/InteractionFootball.java +++ b/src/main/java/com/eu/habbo/habbohotel/items/interactions/games/football/InteractionFootball.java @@ -6,7 +6,10 @@ import com.eu.habbo.habbohotel.items.Item; import com.eu.habbo.habbohotel.items.interactions.InteractionPushable; import com.eu.habbo.habbohotel.items.interactions.games.InteractionGameTeamItem; import com.eu.habbo.habbohotel.items.interactions.games.football.goals.InteractionFootballGoal; -import com.eu.habbo.habbohotel.rooms.*; +import com.eu.habbo.habbohotel.rooms.Room; +import com.eu.habbo.habbohotel.rooms.RoomTile; +import com.eu.habbo.habbohotel.rooms.RoomUnit; +import com.eu.habbo.habbohotel.rooms.RoomUserRotation; import com.eu.habbo.habbohotel.users.HabboItem; import com.eu.habbo.messages.outgoing.rooms.items.ItemStateComposer; import com.eu.habbo.util.pathfinding.Rotation; @@ -14,8 +17,10 @@ import com.eu.habbo.util.pathfinding.Rotation; import java.sql.ResultSet; import java.sql.SQLException; + public class InteractionFootball extends InteractionPushable { + public InteractionFootball(ResultSet set, Item baseItem) throws SQLException { super(set, baseItem); @@ -25,86 +30,74 @@ public class InteractionFootball extends InteractionPushable { super(id, userId, item, extradata, limitedStack, limitedSells); } - - + + @Override public int getWalkOnVelocity(RoomUnit roomUnit, Room room) { if(roomUnit.getPath().isEmpty() && roomUnit.tilesWalked() == 2) return 0; - + return 6; } - + @Override public int getWalkOffVelocity(RoomUnit roomUnit, Room room) { return 6; } - + @Override public int getDragVelocity(RoomUnit roomUnit, Room room) { if(roomUnit.getPath().isEmpty() && roomUnit.tilesWalked() == 2) return 0; - + return 1; } - + @Override public int getTackleVelocity(RoomUnit roomUnit, Room room) - { - return 2; + { + return 4; } - - + + @Override public RoomUserRotation getWalkOnDirection(RoomUnit roomUnit, Room room) { return roomUnit.getBodyRotation(); } - + @Override public RoomUserRotation getWalkOffDirection(RoomUnit roomUnit, Room room) { - RoomTile nextWalkTile = roomUnit.getPath().peek(); - - if (nextWalkTile == null) - { - nextWalkTile = roomUnit.getGoal(); - } - - if (nextWalkTile != null) - { - return RoomUserRotation.values()[(RoomUserRotation.values().length + Rotation.Calculate(roomUnit.getX(), roomUnit.getY(), nextWalkTile.x, nextWalkTile.y) + 4) % 8]; - } - else - { - return RoomUserRotation.values()[(roomUnit.getBodyRotation().getValue() + 4) % RoomUserRotation.values().length]; - } + RoomTile peek = roomUnit.getPath().peek(); + RoomTile nextWalkTile = peek != null ? room.getLayout().getTile(peek.x, peek.y) : roomUnit.getGoal(); + return RoomUserRotation.values()[(RoomUserRotation.values().length + Rotation.Calculate(roomUnit.getX(), roomUnit.getY(), nextWalkTile.x, nextWalkTile.y) + 4) % 8]; } - + public RoomUserRotation getDragDirection(RoomUnit roomUnit, Room room) { return roomUnit.getBodyRotation(); } - + public RoomUserRotation getTackleDirection(RoomUnit roomUnit, Room room) { return roomUnit.getBodyRotation(); } - - + + @Override public int getNextRollDelay(int currentStep, int totalSteps) { int t = 2500; return (totalSteps == 1) ? 500 : 100*((t=t/t-1)*t*t*t*t + 1) + (currentStep * 100); } - + @Override public RoomUserRotation getBounceDirection(Room room, RoomUserRotation currentDirection) { @@ -113,7 +106,7 @@ public class InteractionFootball extends InteractionPushable default: case NORTH: return RoomUserRotation.SOUTH; - + case NORTH_EAST: if(this.validMove(room, room.getLayout().getTile(this.getX(), this.getY()), room.getLayout().getTileInFront(room.getLayout().getTile(this.getX(), this.getY()), RoomUserRotation.NORTH_WEST.getValue()))) return RoomUserRotation.NORTH_WEST; @@ -121,10 +114,10 @@ public class InteractionFootball extends InteractionPushable return RoomUserRotation.SOUTH_EAST; else return RoomUserRotation.SOUTH_WEST; - + case EAST: return RoomUserRotation.WEST; - + case SOUTH_EAST: if(this.validMove(room, room.getLayout().getTile(this.getX(), this.getY()), room.getLayout().getTileInFront(room.getLayout().getTile(this.getX(), this.getY()), RoomUserRotation.SOUTH_WEST.getValue()))) return RoomUserRotation.SOUTH_WEST; @@ -132,10 +125,10 @@ public class InteractionFootball extends InteractionPushable return RoomUserRotation.NORTH_EAST; else return RoomUserRotation.NORTH_WEST; - + case SOUTH: return RoomUserRotation.NORTH; - + case SOUTH_WEST: if(this.validMove(room, room.getLayout().getTile(this.getX(), this.getY()), room.getLayout().getTileInFront(room.getLayout().getTile(this.getX(), this.getY()), RoomUserRotation.SOUTH_EAST.getValue()))) return RoomUserRotation.SOUTH_EAST; @@ -143,10 +136,10 @@ public class InteractionFootball extends InteractionPushable return RoomUserRotation.NORTH_WEST; else return RoomUserRotation.NORTH_EAST; - + case WEST: return RoomUserRotation.EAST; - + case NORTH_WEST: if(this.validMove(room, room.getLayout().getTile(this.getX(), this.getY()), room.getLayout().getTileInFront(room.getLayout().getTile(this.getX(), this.getY()), RoomUserRotation.NORTH_EAST.getValue()))) return RoomUserRotation.NORTH_EAST; @@ -156,95 +149,87 @@ public class InteractionFootball extends InteractionPushable return RoomUserRotation.SOUTH_EAST; } } - - + + @Override public boolean validMove(Room room, RoomTile from, RoomTile to) { - if (to == null || to.state == RoomTileState.BLOCKED) - return false; - HabboItem topItem = room.getTopItemAt(to.x, to.y, this); return !(!room.getLayout().tileWalkable(to.x, to.y) || (topItem != null && (!topItem.getBaseItem().allowStack() || topItem.getBaseItem().allowSit() || topItem.getBaseItem().allowLay()))); } - + //Events - + @Override public void onDrag(Room room, RoomUnit roomUnit, int velocity, RoomUserRotation direction) { - + } - + @Override public void onKick(Room room, RoomUnit roomUnit, int velocity, RoomUserRotation direction) { - + } - + @Override public void onTackle(Room room, RoomUnit roomUnit, int velocity, RoomUserRotation direction) { - + } - + @Override public void onMove(Room room, RoomTile from, RoomTile to, RoomUserRotation direction, RoomUnit kicker, int nextRoll, int currentStep, int totalSteps) { FootballGame game = (FootballGame)room.getGame(FootballGame.class); - if (game == null) - { + if (game == null) { try { - game = FootballGame.class.getDeclaredConstructor(Room.class).newInstance(room); + game = FootballGame.class.getDeclaredConstructor(new Class[] { Room.class }).newInstance(new Object[] { room }); room.addGame(game); } - catch(Exception e) + catch (Exception e) { return; } } - HabboItem currentTopItem = room.getTopItemAt(from.x, from.y, this); HabboItem topItem = room.getTopItemAt(to.x, to.y, this); - - if(game != null && topItem != null && (currentTopItem == null || currentTopItem.getId() != topItem.getId()) && topItem instanceof InteractionFootballGoal) + if ((game != null) && (topItem != null) && ((currentTopItem == null) || (currentTopItem.getId() != topItem.getId())) && ((topItem instanceof InteractionFootballGoal))) { - GameTeamColors color = ((InteractionGameTeamItem) topItem).teamColor; + GameTeamColors color = ((InteractionGameTeamItem)topItem).teamColor; game.onScore(kicker, color); } this.setExtradata(nextRoll <= 200 ? "8" : (nextRoll <= 250 ? "7" : (nextRoll <= 300 ? "6" : (nextRoll <= 350 ? "5" : (nextRoll <= 400 ? "4" : (nextRoll <= 450 ? "3" : (nextRoll <= 500 ? "2" : "1"))))))); room.sendComposer(new ItemStateComposer(this).compose()); } - + @Override public void onBounce(Room room, RoomUserRotation oldDirection, RoomUserRotation newDirection, RoomUnit kicker) { - + } - + @Override public void onStop(Room room, RoomUnit kicker, int currentStep, int totalSteps) { this.setExtradata("0"); room.sendComposer(new ItemStateComposer(this).compose()); } - + @Override public boolean canStillMove(Room room, RoomTile from, RoomTile to, RoomUserRotation direction, RoomUnit kicker, int nextRoll, int currentStep, int totalSteps) { - if (from == null || to == null) - return false; - HabboItem topItem = room.getTopItemAt(from.x, from.y, this); return !(room.hasHabbosAt(to.x, to.y) || (topItem != null && topItem.getBaseItem().getName().startsWith("fball_goal_") && currentStep != 1)); } - + @Override public void onPickUp(Room room) { this.setExtradata("0"); } -} + +} \ No newline at end of file diff --git a/src/main/java/com/eu/habbo/habbohotel/items/interactions/games/freeze/InteractionFreezeBlock.java b/src/main/java/com/eu/habbo/habbohotel/items/interactions/games/freeze/InteractionFreezeBlock.java index 725fb747..674a376d 100644 --- a/src/main/java/com/eu/habbo/habbohotel/items/interactions/games/freeze/InteractionFreezeBlock.java +++ b/src/main/java/com/eu/habbo/habbohotel/items/interactions/games/freeze/InteractionFreezeBlock.java @@ -8,6 +8,7 @@ import com.eu.habbo.habbohotel.games.freeze.FreezeGamePlayer; import com.eu.habbo.habbohotel.items.Item; import com.eu.habbo.habbohotel.rooms.Room; import com.eu.habbo.habbohotel.rooms.RoomUnit; +import com.eu.habbo.habbohotel.users.Habbo; import com.eu.habbo.habbohotel.users.HabboItem; import com.eu.habbo.messages.ServerMessage; import gnu.trove.set.hash.THashSet; @@ -101,7 +102,12 @@ public class InteractionFreezeBlock extends HabboItem if(game == null || !game.isRunning) return; - FreezeGamePlayer player = (FreezeGamePlayer)room.getHabbo(roomUnit).getHabboInfo().getGamePlayer(); + Habbo habbo = room.getHabbo(roomUnit); + + if (habbo == null || habbo.getHabboInfo().getCurrentGame() != FreezeGame.class) + return; + + FreezeGamePlayer player = (FreezeGamePlayer)habbo.getHabboInfo().getGamePlayer(); if(player == null) return; diff --git a/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/effects/WiredEffectChangeFurniDirection.java b/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/effects/WiredEffectChangeFurniDirection.java index b8ad40ca..441688be 100644 --- a/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/effects/WiredEffectChangeFurniDirection.java +++ b/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/effects/WiredEffectChangeFurniDirection.java @@ -188,6 +188,7 @@ public class WiredEffectChangeFurniDirection extends InteractionWiredEffect @Override public boolean saveData(ClientMessage packet, GameClient gameClient) { + this.items.clear(); packet.readInt(); this.startRotation = RoomUserRotation.fromValue(packet.readInt()); this.rotateAction = packet.readInt(); diff --git a/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/effects/WiredEffectGiveReward.java b/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/effects/WiredEffectGiveReward.java index f5b3a669..d07e22bb 100644 --- a/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/effects/WiredEffectGiveReward.java +++ b/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/effects/WiredEffectGiveReward.java @@ -158,10 +158,10 @@ public class WiredEffectGiveReward extends InteractionWiredEffect message.appendString(s); message.appendInt(4); message.appendInt(this.rewardTime); - message.appendInt32(this.uniqueRewards); + message.appendInt(this.uniqueRewards); message.appendInt(this.limit); message.appendInt(this.limitationInterval); - message.appendInt32(this.limit > 0); + message.appendInt(this.limit > 0); message.appendInt(this.getType().code); message.appendInt(this.getDelay()); diff --git a/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/effects/WiredEffectMatchFurni.java b/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/effects/WiredEffectMatchFurni.java index f807721e..79aadc6b 100644 --- a/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/effects/WiredEffectMatchFurni.java +++ b/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/effects/WiredEffectMatchFurni.java @@ -6,6 +6,7 @@ import com.eu.habbo.habbohotel.items.Item; import com.eu.habbo.habbohotel.items.interactions.InteractionWiredEffect; import com.eu.habbo.habbohotel.rooms.Room; import com.eu.habbo.habbohotel.rooms.RoomTile; +import com.eu.habbo.habbohotel.rooms.RoomTileState; import com.eu.habbo.habbohotel.rooms.RoomUnit; import com.eu.habbo.habbohotel.users.HabboItem; import com.eu.habbo.habbohotel.wired.WiredEffectType; @@ -29,6 +30,7 @@ public class WiredEffectMatchFurni extends InteractionWiredEffect private boolean state = false; private boolean direction = false; private boolean position = false; + public boolean checkForWiredResetPermission = true; public WiredEffectMatchFurni(ResultSet set, Item baseItem) throws SQLException { @@ -52,7 +54,7 @@ public class WiredEffectMatchFurni extends InteractionWiredEffect HabboItem item = room.getHabboItem(setting.itemId); if(item != null) { - if(this.state && item.allowWiredResetState()) + if(this.state && (this.checkForWiredResetPermission && item.allowWiredResetState())) { if(!setting.state.equals(" ")) { @@ -73,14 +75,17 @@ public class WiredEffectMatchFurni extends InteractionWiredEffect { RoomTile t = room.getLayout().getTile((short) setting.x, (short) setting.y); - if (!room.hasHabbosAt(t.x, t.y)) + if (t.state == RoomTileState.OPEN) { - tilesToUpdate.addAll(room.getLayout().getTilesAt(t, item.getBaseItem().getWidth(), item.getBaseItem().getLength(), oldRotation)); + if (!room.hasHabbosAt(t.x, t.y)) + { + tilesToUpdate.addAll(room.getLayout().getTilesAt(t, item.getBaseItem().getWidth(), item.getBaseItem().getLength(), oldRotation)); - double offsetZ = setting.z - item.getZ(); + double offsetZ = setting.z - item.getZ(); - room.sendComposer(new FloorItemOnRollerComposer(item, null, t, offsetZ, room).compose()); - tilesToUpdate.addAll(room.getLayout().getTilesAt(room.getLayout().getTile(item.getX(), item.getY()), item.getBaseItem().getWidth(), item.getBaseItem().getLength(), oldRotation)); + room.sendComposer(new FloorItemOnRollerComposer(item, null, t, offsetZ, room).compose()); + tilesToUpdate.addAll(room.getLayout().getTilesAt(room.getLayout().getTile(item.getX(), item.getY()), item.getBaseItem().getWidth(), item.getBaseItem().getLength(), oldRotation)); + } } } @@ -118,7 +123,7 @@ public class WiredEffectMatchFurni extends InteractionWiredEffect if (i != null) { - data += item.toString(i.allowWiredResetState()) + ";"; + data += item.toString(this.checkForWiredResetPermission && i.allowWiredResetState()) + ";"; } } } @@ -232,7 +237,7 @@ public class WiredEffectMatchFurni extends InteractionWiredEffect HabboItem item = room.getHabboItem(itemId); if (item != null) - this.settings.add(new WiredMatchFurniSetting(item.getId(), item.allowWiredResetState() ? item.getExtradata() : " ", item.getRotation(), item.getX(), item.getY(), item.getZ())); + this.settings.add(new WiredMatchFurniSetting(item.getId(), this.checkForWiredResetPermission && item.allowWiredResetState() ? item.getExtradata() : " ", item.getRotation(), item.getX(), item.getY(), item.getZ())); } this.setDelay(packet.readInt()); diff --git a/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/effects/WiredEffectMatchFurniStaff.java b/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/effects/WiredEffectMatchFurniStaff.java new file mode 100644 index 00000000..09ff5556 --- /dev/null +++ b/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/effects/WiredEffectMatchFurniStaff.java @@ -0,0 +1,21 @@ +package com.eu.habbo.habbohotel.items.interactions.wired.effects; + +import com.eu.habbo.habbohotel.items.Item; + +import java.sql.ResultSet; +import java.sql.SQLException; + +public class WiredEffectMatchFurniStaff extends WiredEffectMatchFurni +{ + public WiredEffectMatchFurniStaff(ResultSet set, Item baseItem) throws SQLException + { + super(set, baseItem); + this.checkForWiredResetPermission = false; + } + + public WiredEffectMatchFurniStaff(int id, int userId, Item item, String extradata, int limitedStack, int limitedSells) + { + super(id, userId, item, extradata, limitedStack, limitedSells); + this.checkForWiredResetPermission = false; + } +} diff --git a/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/extra/WiredBlob.java b/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/extra/WiredBlob.java index a4b7ae10..133b3949 100644 --- a/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/extra/WiredBlob.java +++ b/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/extra/WiredBlob.java @@ -30,46 +30,48 @@ public class WiredBlob extends InteractionDefault { super.onWalkOn(roomUnit, room, objects); - Habbo habbo = room.getHabbo(roomUnit); - - if (habbo != null) + if (this.getExtradata().equals("0")) { - int points = Emulator.getConfig().getInt("hotel.item.wiredblob." + this.getBaseItem().getName()); + Habbo habbo = room.getHabbo(roomUnit); - if (points == 0) + if (habbo != null) { - Emulator.getConfig().register("hotel.item.wiredblob." + this.getBaseItem().getName(), "3000"); - points = 1; - } + int points = Emulator.getConfig().getInt("hotel.item.wiredblob." + this.getBaseItem().getName()); - boolean triggered = false; - Game game = room.getGame(habbo.getHabboInfo().getCurrentGame()); - - if (game != null) - { - GameTeam team = game.getTeamForHabbo(habbo); - - if (team != null) + if (points == 0) { - team.addTeamScore(points); - triggered = true; + Emulator.getConfig().register("hotel.item.wiredblob." + this.getBaseItem().getName(), "3000"); + points = 1; } - else - { - GamePlayer player = habbo.getHabboInfo().getGamePlayer(); - if (player != null) + boolean triggered = false; + Game game = room.getGame(habbo.getHabboInfo().getCurrentGame()); + + if (game != null) + { + GameTeam team = game.getTeamForHabbo(habbo); + + if (team != null) { - player.addScore(points); + team.addTeamScore(points); triggered = true; + } else + { + GamePlayer player = habbo.getHabboInfo().getGamePlayer(); + + if (player != null) + { + player.addScore(points); + triggered = true; + } } } - } - if (triggered) - { - this.setExtradata("1"); - room.updateItem(this); + if (triggered) + { + this.setExtradata("1"); + room.updateItem(this); + } } } } diff --git a/src/main/java/com/eu/habbo/habbohotel/modtool/ModToolManager.java b/src/main/java/com/eu/habbo/habbohotel/modtool/ModToolManager.java index 238c2c77..d3a35c2d 100644 --- a/src/main/java/com/eu/habbo/habbohotel/modtool/ModToolManager.java +++ b/src/main/java/com/eu/habbo/habbohotel/modtool/ModToolManager.java @@ -12,10 +12,7 @@ import com.eu.habbo.messages.ClientMessage; import com.eu.habbo.messages.outgoing.modtool.ModToolIssueHandledComposer; import com.eu.habbo.messages.outgoing.modtool.ModToolIssueInfoComposer; import com.eu.habbo.messages.outgoing.modtool.ModToolUserInfoComposer; -import com.eu.habbo.plugin.events.support.SupportRoomActionEvent; -import com.eu.habbo.plugin.events.support.SupportTicketEvent; -import com.eu.habbo.plugin.events.support.SupportUserAlertedEvent; -import com.eu.habbo.plugin.events.support.SupportUserBannedEvent; +import com.eu.habbo.plugin.events.support.*; import com.eu.habbo.threading.runnables.InsertModToolIssue; import gnu.trove.TCollections; import gnu.trove.map.TIntObjectMap; @@ -693,7 +690,12 @@ public class ModToolManager public void updateTicketToMods(ModToolIssue issue) { - Emulator.getGameEnvironment().getHabboManager().sendPacketToHabbosWithPermission(new ModToolIssueInfoComposer(issue).compose(), Permission.ACC_SUPPORTTOOL); + SupportTicketStatusChangedEvent event = new SupportTicketStatusChangedEvent(null, issue); + + if (!Emulator.getPluginManager().fireEvent(event).isCancelled()) + { + Emulator.getGameEnvironment().getHabboManager().sendPacketToHabbosWithPermission(new ModToolIssueInfoComposer(issue).compose(), Permission.ACC_SUPPORTTOOL); + } } public void addTicket(ModToolIssue issue) diff --git a/src/main/java/com/eu/habbo/habbohotel/modtool/WordFilter.java b/src/main/java/com/eu/habbo/habbohotel/modtool/WordFilter.java index 4923e7dc..8d42b6cc 100644 --- a/src/main/java/com/eu/habbo/habbohotel/modtool/WordFilter.java +++ b/src/main/java/com/eu/habbo/habbohotel/modtool/WordFilter.java @@ -15,15 +15,17 @@ import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.text.Normalizer; +import java.util.regex.Pattern; public class WordFilter { //Configuration. Loaded from database & updated accordingly. public static boolean ENABLED_FRIENDCHAT = true; + public static String DEFAULT_REPLACEMENT = "bobba"; - THashSet autoReportWords = new THashSet<>(); - THashSet hideMessageWords = new THashSet<>(); - THashSet words = new THashSet<>(); + protected THashSet autoReportWords = new THashSet<>(); + protected THashSet hideMessageWords = new THashSet<>(); + protected THashSet words = new THashSet<>(); public WordFilter() { @@ -77,8 +79,8 @@ public class WordFilter public String normalise(String message) { - return Normalizer.normalize(message, Normalizer.Form.NFD) - .replaceAll("[^\\p{ASCII}]", "").replaceAll("\\p{M}", "").replace("1", "i").replace("2", "z").replace("3", "e").replace("4","a").replace("5", "s").replace("8", "b").replace("0", "o"); + return DIACRITICS_AND_FRIENDS.matcher(Normalizer.normalize(StringUtils.stripAccents(message), Normalizer.Form.NFKD).replaceAll("[,.;:'\"]", "").replace("I", "l") + .replaceAll("[^\\p{ASCII}*$]", "").replaceAll("\\p{M}", "").replaceAll("^\\p{M}*$]", "").replaceAll("[1|]", "i").replace("2", "z").replace("3", "e").replace("4","a").replace("5", "s").replace("8", "b").replace("0", "o").replace(" ", "").replace("$", "s").replace("ß", "b").trim()).replaceAll(""); } @@ -192,7 +194,7 @@ public class WordFilter { WordFilterWord word = (WordFilterWord) iterator.next(); - if(message.contains(word.key)) + if(StringUtils.containsIgnoreCase(message, word.key)) { if(habbo != null) { @@ -210,4 +212,17 @@ public class WordFilter roomChatMessage.setMessage(message); } } + + private static final Pattern DIACRITICS_AND_FRIENDS = Pattern.compile("[\\p{InCombiningDiacriticalMarks}\\p{IsLm}\\p{IsSk}]+"); + + private static String stripDiacritics(String str) { + str = Normalizer.normalize(str, Normalizer.Form.NFD); + str = DIACRITICS_AND_FRIENDS.matcher(str).replaceAll(""); + return str; + } + + public void addWord(WordFilterWord word) + { + this.words.add(word); + } } diff --git a/src/main/java/com/eu/habbo/habbohotel/navigation/NavigatorHotelFilter.java b/src/main/java/com/eu/habbo/habbohotel/navigation/NavigatorHotelFilter.java index 6cf0d7f0..1942f478 100644 --- a/src/main/java/com/eu/habbo/habbohotel/navigation/NavigatorHotelFilter.java +++ b/src/main/java/com/eu/habbo/habbohotel/navigation/NavigatorHotelFilter.java @@ -50,7 +50,7 @@ public class NavigatorHotelFilter extends NavigatorFilter List resultLists = new ArrayList<>(); int i = 0; - for (Map.Entry> set : Emulator.getGameEnvironment().getRoomManager().findRooms(filterField, value, roomCategory).entrySet()) + for (Map.Entry> set : Emulator.getGameEnvironment().getRoomManager().findRooms(filterField, value, roomCategory, showInvisible).entrySet()) { if (!set.getValue().isEmpty()) { 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 32e55bf2..2d228d72 100644 --- a/src/main/java/com/eu/habbo/habbohotel/rooms/Room.java +++ b/src/main/java/com/eu/habbo/habbohotel/rooms/Room.java @@ -238,6 +238,7 @@ public class Room implements Comparable, ISerialize, Runnable this.layoutName = set.getString("model"); this.promoted = set.getString("promoted").equals("1"); this.jukeboxActive = set.getString("jukebox_active").equals("1"); + this.hideWired = set.getString("hidewired").equals("1"); this.bannedHabbos = new TIntObjectHashMap<>(); this.traxItems = new TIntArrayList(); @@ -536,7 +537,7 @@ public class Room implements Comparable, ISerialize, Runnable } b.getRoomUnit().setRoomUnitType(RoomUnitType.BOT); b.getRoomUnit().setDanceType(DanceType.values()[set.getInt("dance")]); - b.getRoomUnit().setCanWalk(set.getBoolean("freeroam")); + //b.getRoomUnit().setCanWalk(set.getBoolean("freeroam")); b.getRoomUnit().setInRoom(true); this.addBot(b); } @@ -614,7 +615,7 @@ public class Room implements Comparable, ISerialize, Runnable if (tile != null) { tile.setStackHeight(this.getStackHeight(tile.x, tile.y, false)); - tile.setWalkable(this.canWalkAt(tile)); + tile.setWalkable(this.canWalkAt(tile) || this.canSitAt(tile.x, tile.y)); } } @@ -624,7 +625,7 @@ public class Room implements Comparable, ISerialize, Runnable { this.tileCache.remove(tile); tile.setStackHeight(this.getStackHeight(tile.x, tile.y, false)); - tile.setWalkable(this.canWalkAt(tile)); + tile.setWalkable(this.canWalkAt(tile) || this.canSitAt(tile.x, tile.y)); } this.sendComposer(new UpdateStackHeightComposer(tiles).compose()); @@ -870,6 +871,8 @@ public class Room implements Comparable, ISerialize, Runnable { this.activeTrades.add(trade); } + + trade.start(); } public void stopTrade(RoomTrade trade) @@ -1366,7 +1369,7 @@ public class Room implements Comparable, ISerialize, Runnable newRoller = item; stackContainsRoller = true; - if (itemsNewTile.size() > 1 && item != topItem) + if (item.getZ() != roller.getZ() || (itemsNewTile.size() > 1 && item != topItem)) { allowUsers = false; allowFurniture = false; @@ -1493,6 +1496,25 @@ public class Room implements Comparable, ISerialize, Runnable giveHandItem(habbo, 0); } + if (habbo.getRoomUnit().isKicked) + { + habbo.getRoomUnit().kickCount++; + + if (habbo.getRoomUnit().kickCount >= 5) + { + System.out.println("KICKED"); + this.scheduledTasks.add(new Runnable() + { + @Override + public void run() + { + Emulator.getGameEnvironment().getRoomManager().leaveRoom(habbo, room); + } + }); + continue; + } + } + if (Emulator.getConfig().getBoolean("hotel.rooms.auto.idle")) { if (!habbo.getRoomUnit().isIdle()) @@ -1786,6 +1808,7 @@ public class Room implements Comparable, ISerialize, Runnable if (!unit.hasStatus(RoomUnitStatus.SIT) || unit.sitUpdate) { dance(unit, DanceType.NONE); + int tileHeight = layout.getTile(topItem.getX(), topItem.getY()).z; if (topItem instanceof InteractionMultiHeight) { unit.setStatus(RoomUnitStatus.SIT, (Item.getCurrentHeight(topItem) * 1.0D) + ""); @@ -1794,10 +1817,11 @@ public class Room implements Comparable, ISerialize, Runnable { unit.setStatus(RoomUnitStatus.SIT, (topItem.getBaseItem().getHeight() * 1.0D) + ""); } - unit.setZ(topItem.getZ()); + unit.setPreviousLocationZ(topItem.getZ()); unit.setRotation(RoomUserRotation.values()[topItem.getRotation()]); update = true; unit.sitUpdate = false; + return true; } } } @@ -3166,10 +3190,13 @@ public class Room implements Comparable, ISerialize, Runnable pet.setRoomUnit(new RoomUnit()); pet.setRoom(this); + pet.getRoomUnit().setGoalLocation(tile); pet.getRoomUnit().setLocation(tile); pet.getRoomUnit().setRoomUnitType(RoomUnitType.PET); pet.getRoomUnit().setCanWalk(true); pet.getRoomUnit().setPathFinderRoom(this); + pet.getRoomUnit().setPreviousLocationZ(z); + pet.getRoomUnit().setZ(z); if (pet.getRoomUnit().getCurrentLocation() == null) { pet.getRoomUnit().setLocation(this.getLayout().getDoorTile()); @@ -3464,7 +3491,7 @@ public class Room implements Comparable, ISerialize, Runnable { if (h == roomChatMessage.getTargetHabbo() || h == habbo) { - if (!h.getHabboStats().ignoredUsers.contains(habbo.getHabboInfo().getId())) + if (!h.getHabboStats().userIgnored(habbo.getHabboInfo().getId())) { if (prefixMessage != null) { @@ -3501,7 +3528,7 @@ public class Room implements Comparable, ISerialize, Runnable this.hasRights(h) || noChatLimit) && (show == null || RoomLayout.tileInSquare(show, h.getRoomUnit().getCurrentLocation()))) { - if (!h.getHabboStats().ignoredUsers.contains(habbo.getHabboInfo().getId())) + if (!h.getHabboStats().userIgnored(habbo.getHabboInfo().getId())) { if (prefixMessage != null) { @@ -3522,7 +3549,7 @@ public class Room implements Comparable, ISerialize, Runnable for (Habbo h : this.getHabbos()) { - if (!h.getHabboStats().ignoredUsers.contains(habbo.getHabboInfo().getId()) && (show == null || RoomLayout.tileInSquare(show, h.getRoomUnit().getCurrentLocation()))) + if (!h.getHabboStats().userIgnored(habbo.getHabboInfo().getId()) && (show == null || RoomLayout.tileInSquare(show, h.getRoomUnit().getCurrentLocation()))) { if (prefixMessage != null){ h.getClient().sendResponse(prefixMessage); } h.getClient().sendResponse(message); @@ -4153,16 +4180,19 @@ public class Room implements Comparable, ISerialize, Runnable if((lowestSitItem == null || lowestSitItem.getZ() > item.getZ()) && item.getBaseItem().allowSit()) { lowestSitItem = item; + canSitUnder = true; } - if(lowestSitItem != null) + if(lowestSitItem != null && canSitUnder) { - if(item.getZ() > lowestSitItem.getZ()) + if (item != lowestSitItem) { - if(item.getZ() - lowestSitItem.getZ() > 0.8) - canSitUnder = true; - else + double distance = item.getZ() - lowestSitItem.getZ(); + + if (distance >= 0 && distance < 0.8) + { canSitUnder = false; + } } } @@ -4213,7 +4243,7 @@ public class Room implements Comparable, ISerialize, Runnable for (int i = 0; i < 10; i++) { RoomTile tile = this.layout.getTile((short) (Math.random() * this.layout.getMapSizeX()), (short) (Math.random() * this.layout.getMapSizeY())); - if (tile.isWalkable() || this.canSitAt(tile.x, tile.y)) + if (tile.isWalkable()) { return tile; } diff --git a/src/main/java/com/eu/habbo/habbohotel/rooms/RoomChatMessage.java b/src/main/java/com/eu/habbo/habbohotel/rooms/RoomChatMessage.java index 2131c1ea..d0dc8b6f 100644 --- a/src/main/java/com/eu/habbo/habbohotel/rooms/RoomChatMessage.java +++ b/src/main/java/com/eu/habbo/habbohotel/rooms/RoomChatMessage.java @@ -1,31 +1,33 @@ package com.eu.habbo.habbohotel.rooms; import com.eu.habbo.Emulator; +import com.eu.habbo.core.Loggable; import com.eu.habbo.habbohotel.users.Habbo; import com.eu.habbo.messages.ISerialize; import com.eu.habbo.messages.ServerMessage; import com.eu.habbo.messages.incoming.Incoming; import com.eu.habbo.messages.incoming.MessageHandler; -import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.SQLException; import java.util.Arrays; import java.util.List; -public class RoomChatMessage implements Runnable, ISerialize +public class RoomChatMessage implements Runnable, ISerialize, Loggable { + public static String insertQuery = "INSERT INTO chatlogs_room (user_from_id, user_to_id, message, timestamp, room_id) VALUES (?, ?, ?, ?, ?)"; public static int MAXIMUM_LENGTH = 100; //Configuration. Loaded from database & updated accordingly. public static boolean SAVE_ROOM_CHATS = false; public static int[] BANNED_BUBBLES = {}; + private int roomUnitId; private String message; private String unfilteredMessage; private RoomChatMessageBubbles bubble; private final Habbo habbo; + public int roomId; private Habbo targetHabbo; - private final RoomUnit roomUnit; private byte emotion; public boolean isCommand = false; public boolean filtered = false; @@ -65,7 +67,7 @@ public class RoomChatMessage implements Runnable, ISerialize this.unfilteredMessage = this.message; this.habbo = message.client.getHabbo(); - this.roomUnit = habbo.getRoomUnit(); + this.roomUnitId = habbo.getRoomUnit().getId(); this.checkEmotion(); @@ -79,7 +81,7 @@ public class RoomChatMessage implements Runnable, ISerialize this.habbo = chatMessage.getHabbo(); this.targetHabbo = chatMessage.getTargetHabbo(); this.bubble = chatMessage.getBubble(); - this.roomUnit = chatMessage.roomUnit; + this.roomUnitId = chatMessage.roomUnitId; this.emotion = (byte)chatMessage.getEmotion(); } @@ -89,7 +91,7 @@ public class RoomChatMessage implements Runnable, ISerialize this.unfilteredMessage = message; this.habbo = null; this.bubble = bubble; - this.roomUnit = roomUnit; + this.roomUnitId = roomUnit.getId(); } public RoomChatMessage(String message, Habbo habbo, RoomChatMessageBubbles bubble) @@ -99,7 +101,7 @@ public class RoomChatMessage implements Runnable, ISerialize this.habbo = habbo; this.bubble = bubble; this.checkEmotion(); - this.roomUnit = habbo.getRoomUnit(); + this.roomUnitId = habbo.getRoomUnit().getId(); this.message = this.message.replace("\r", "").replace("\n", ""); if(this.bubble.isOverridable() && this.getHabbo().getHabboStats().chatColor != RoomChatMessageBubbles.NORMAL) @@ -114,7 +116,7 @@ public class RoomChatMessage implements Runnable, ISerialize this.targetHabbo = targetHabbo; this.bubble = bubble; this.checkEmotion(); - this.roomUnit = this.habbo.getRoomUnit(); + this.roomUnitId = this.habbo.getRoomUnit().getId(); this.message = this.message.replace("\r", "").replace("\n", ""); if(this.bubble.isOverridable() && this.getHabbo().getHabboStats().chatColor != RoomChatMessageBubbles.NORMAL) @@ -147,48 +149,18 @@ public class RoomChatMessage implements Runnable, ISerialize if(habbo == null) return; - if(SAVE_ROOM_CHATS) + if(this.message.length() > RoomChatMessage.MAXIMUM_LENGTH) { - if(this.message.length() > 255) + try { - try - { - this.message = this.message.substring(0, 254); - } - catch (Exception e) - { - Emulator.getLogging().logErrorLine(e); - } + this.message = this.message.substring(0, RoomChatMessage.MAXIMUM_LENGTH-1); } - - try (Connection connection = Emulator.getDatabase().getDataSource().getConnection(); PreparedStatement statement = connection.prepareStatement("INSERT INTO chatlogs_room (user_from_id, user_to_id, message, timestamp, room_id) VALUES (?, ?, ?, ?, ?)")) + catch (Exception e) { - statement.setInt(1,this.habbo.getHabboInfo().getId()); - - if(this.targetHabbo != null) - statement.setInt(2, this.targetHabbo.getHabboInfo().getId()); - else - statement.setInt(2, 0); - - statement.setString(3, this.unfilteredMessage); - statement.setInt(4, Emulator.getIntUnixTimestamp()); - - if(this.habbo.getHabboInfo().getCurrentRoom() != null) - { - statement.setInt(5, this.habbo.getHabboInfo().getCurrentRoom().getId()); - } - else - { - statement.setInt(5, 0); - } - - statement.executeUpdate(); - } - catch(SQLException e) - { - Emulator.getLogging().logSQLException(e); + Emulator.getLogging().logErrorLine(e); } } + Emulator.getLogging().addChatLog(this); } public String getMessage() @@ -253,7 +225,7 @@ public class RoomChatMessage implements Runnable, ISerialize try { - message.appendInt(this.roomUnit.getId()); + message.appendInt(this.roomUnitId); message.appendString(this.getMessage()); message.appendInt(this.getEmotion()); message.appendInt(this.getBubble().getType()); @@ -296,4 +268,29 @@ public class RoomChatMessage implements Runnable, ISerialize } } } + + @Override + public void log(PreparedStatement statement) throws SQLException + { + statement.setInt(1,this.habbo.getHabboInfo().getId()); + + if(this.targetHabbo != null) + statement.setInt(2, this.targetHabbo.getHabboInfo().getId()); + else + statement.setInt(2, 0); + + statement.setString(3, this.unfilteredMessage); + statement.setInt(4, Emulator.getIntUnixTimestamp()); + + if(this.habbo.getHabboInfo().getCurrentRoom() != null) + { + statement.setInt(5, this.habbo.getHabboInfo().getCurrentRoom().getId()); + } + else + { + statement.setInt(5, 0); + } + + statement.addBatch(); + } } diff --git a/src/main/java/com/eu/habbo/habbohotel/rooms/RoomLayout.java b/src/main/java/com/eu/habbo/habbohotel/rooms/RoomLayout.java index 072aa621..8ada83de 100644 --- a/src/main/java/com/eu/habbo/habbohotel/rooms/RoomLayout.java +++ b/src/main/java/com/eu/habbo/habbohotel/rooms/RoomLayout.java @@ -293,7 +293,7 @@ public class RoomLayout double height = (room.getLayout().getStackHeightAtSquare(currentAdj.x, currentAdj.y) - room.getLayout().getStackHeightAtSquare(current.x, current.y)); - if ((!ALLOW_FALLING && height < -MAXIMUM_STEP_HEIGHT) || (height - (room.canSitAt(currentAdj.x, currentAdj.y) ? 0.5 : 0) > MAXIMUM_STEP_HEIGHT && !room.canLayAt(currentAdj.x, currentAdj.y))) + if ((!ALLOW_FALLING && height < -MAXIMUM_STEP_HEIGHT) || ((!room.canSitAt(currentAdj.x, currentAdj.y) && height > MAXIMUM_STEP_HEIGHT) && !room.canLayAt(currentAdj.x, currentAdj.y))) continue; if (!this.room.isAllowWalkthrough() && room.hasHabbosAt(currentAdj.x, currentAdj.y)) continue; diff --git a/src/main/java/com/eu/habbo/habbohotel/rooms/RoomManager.java b/src/main/java/com/eu/habbo/habbohotel/rooms/RoomManager.java index 80b5801e..67291b23 100644 --- a/src/main/java/com/eu/habbo/habbohotel/rooms/RoomManager.java +++ b/src/main/java/com/eu/habbo/habbohotel/rooms/RoomManager.java @@ -86,7 +86,7 @@ public class RoomManager public CustomRoomLayout loadCustomLayout(Room room) { - RoomLayout layout = null; + CustomRoomLayout layout = null; try (Connection connection = Emulator.getDatabase().getDataSource().getConnection(); PreparedStatement statement = connection.prepareStatement("SELECT * FROM room_models_custom WHERE id = ? LIMIT 1")) { statement.setInt(1, room.getId()); @@ -103,7 +103,7 @@ public class RoomManager Emulator.getLogging().logSQLException(e); } - return (CustomRoomLayout) layout; + return layout; } private void loadRoomCategories() @@ -146,10 +146,10 @@ public class RoomManager } private static final int page = 0; - public THashMap> findRooms(NavigatorFilterField filterField, String value, int category) + public THashMap> findRooms(NavigatorFilterField filterField, String value, int category, boolean showInvisible) { THashMap> rooms = new THashMap<>(); - String query = filterField.databaseQuery + " AND rooms.state != 'invisible' " + (category >= 0 ? "AND rooms.category = '" + category + "'" : "") + " ORDER BY rooms.users, rooms.id DESC LIMIT " + (page * NavigatorManager.MAXIMUM_RESULTS_PER_PAGE) + "" + ((page * NavigatorManager.MAXIMUM_RESULTS_PER_PAGE) + NavigatorManager.MAXIMUM_RESULTS_PER_PAGE); + String query = filterField.databaseQuery + " AND rooms.state NOT LIKE " + (showInvisible ? "''" : "'invisible'") + (category >= 0 ? "AND rooms.category = '" + category + "'" : "") + " ORDER BY rooms.users, rooms.id DESC LIMIT " + (page * NavigatorManager.MAXIMUM_RESULTS_PER_PAGE) + "" + ((page * NavigatorManager.MAXIMUM_RESULTS_PER_PAGE) + NavigatorManager.MAXIMUM_RESULTS_PER_PAGE); try (Connection connection = Emulator.getDatabase().getDataSource().getConnection(); PreparedStatement statement = connection.prepareStatement(query)) { statement.setString(1, (filterField.comparator == NavigatorFilterComparator.EQUALS ? value : "%" + value + "%")); @@ -951,7 +951,7 @@ public class RoomManager habbo.getClient().sendResponse(new RoomUnitIdleComposer(roomHabbo.getRoomUnit())); } - if (roomHabbo.getHabboStats().ignoredUsers.contains(habbo.getHabboInfo().getId())) + if (roomHabbo.getHabboStats().userIgnored(habbo.getHabboInfo().getId())) { roomHabbo.getClient().sendResponse(new RoomUserIgnoredComposer(habbo, RoomUserIgnoredComposer.IGNORED)); } @@ -960,7 +960,7 @@ public class RoomManager { habbo.getClient().sendResponse(new RoomUserIgnoredComposer(roomHabbo, RoomUserIgnoredComposer.MUTED)); } - else if (habbo.getHabboStats().ignoredUsers.contains(roomHabbo.getHabboInfo().getId())) + else if (habbo.getHabboStats().userIgnored(roomHabbo.getHabboInfo().getId())) { habbo.getClient().sendResponse(new RoomUserIgnoredComposer(roomHabbo, RoomUserIgnoredComposer.IGNORED)); } @@ -1029,7 +1029,7 @@ public class RoomManager WiredHandler.handle(WiredTriggerType.ENTER_ROOM, habbo.getRoomUnit(), room, null); room.habboEntered(habbo); - if (!habbo.getHabboStats().nux && room.isOwner(habbo)) + if (!habbo.getHabboStats().nux && (room.isOwner(habbo) || room.isPublicRoom())) { UserNuxEvent.handle(habbo); } diff --git a/src/main/java/com/eu/habbo/habbohotel/rooms/RoomTrade.java b/src/main/java/com/eu/habbo/habbohotel/rooms/RoomTrade.java index 2a11bad8..0360f6c3 100644 --- a/src/main/java/com/eu/habbo/habbohotel/rooms/RoomTrade.java +++ b/src/main/java/com/eu/habbo/habbohotel/rooms/RoomTrade.java @@ -18,6 +18,7 @@ public class RoomTrade { //Configuration. Loaded from database & updated accordingly. public static boolean TRADING_ENABLED = true; + public static boolean TRADING_REQUIRES_PERK = true; private final List users; private boolean tradeCompleted; @@ -31,8 +32,16 @@ public class RoomTrade this.users.add(new RoomTradeUser(userOne)); this.users.add(new RoomTradeUser(userTwo)); this.room = room; + } + public void start() + { + this.initializeTradeStatus(); + this.openTrade(); + } + protected void initializeTradeStatus() + { for(RoomTradeUser roomTradeUser : this.users) { if(!roomTradeUser.getHabbo().getRoomUnit().hasStatus(RoomUnitStatus.TRADING)) @@ -42,7 +51,10 @@ public class RoomTrade room.sendComposer(new RoomUserStatusComposer(roomTradeUser.getHabbo().getRoomUnit()).compose()); } } + } + protected void openTrade() + { sendMessageToUsers(new TradeStartComposer(this)); } @@ -53,6 +65,7 @@ public class RoomTrade if(user.getItems().contains(item)) return; + habbo.getInventory().getItemsComponent().removeHabboItem(item); user.getItems().add(item); clearAccepted(); @@ -67,6 +80,7 @@ public class RoomTrade { if(!user.getItems().contains(item)) { + habbo.getInventory().getItemsComponent().removeHabboItem(item); user.getItems().add(item); } } @@ -82,6 +96,7 @@ public class RoomTrade if(!user.getItems().contains(item)) return; + habbo.getInventory().getItemsComponent().addItem(item); user.getItems().remove(item); clearAccepted(); @@ -103,7 +118,7 @@ public class RoomTrade } if(accepted) { - sendMessageToUsers(new TradingWaitingConfirmComposer()); + this.sendMessageToUsers(new TradingWaitingConfirmComposer()); } } @@ -113,7 +128,7 @@ public class RoomTrade user.confirm(); - sendMessageToUsers(new TradeAcceptedComposer(user)); + this.sendMessageToUsers(new TradeAcceptedComposer(user)); boolean accepted = true; for(RoomTradeUser roomTradeUser : this.users) { @@ -124,9 +139,10 @@ public class RoomTrade { if (tradeItems()) { - closeWindow(); - sendMessageToUsers(new TradeCompleteComposer()); + this.closeWindow(); + this.sendMessageToUsers(new TradeCompleteComposer()); } + this.room.stopTrade(this); } } @@ -137,9 +153,9 @@ public class RoomTrade { for(HabboItem item : roomTradeUser.getItems()) { - if(roomTradeUser.getHabbo().getInventory().getItemsComponent().getHabboItem(item.getId()) == null) + if(roomTradeUser.getHabbo().getInventory().getItemsComponent().getHabboItem(item.getId()) != null) { - sendMessageToUsers(new TradeClosedComposer(roomTradeUser.getHabbo().getRoomUnit().getId(), TradeClosedComposer.ITEMS_NOT_FOUND)); + this.sendMessageToUsers(new TradeClosedComposer(roomTradeUser.getHabbo().getRoomUnit().getId(), TradeClosedComposer.ITEMS_NOT_FOUND)); return false; } } @@ -188,8 +204,6 @@ public class RoomTrade item.setUserId(userTwoId); statement.setInt(1, userTwoId); statement.setInt(2, item.getId()); - userOne.getHabbo().getInventory().getItemsComponent().removeHabboItem(item); - userTwo.getHabbo().getInventory().getItemsComponent().addItem(item); statement.addBatch(); if (logTrades) @@ -206,8 +220,6 @@ public class RoomTrade item.setUserId(userOneId); statement.setInt(1, userOneId); statement.setInt(2, item.getId()); - userTwo.getHabbo().getInventory().getItemsComponent().removeHabboItem(item); - userOne.getHabbo().getInventory().getItemsComponent().addItem(item); statement.addBatch(); if (logTrades) @@ -233,15 +245,24 @@ public class RoomTrade Emulator.getLogging().logSQLException(e); } - userOne.getHabbo().getClient().sendResponse(new AddHabboItemComposer(userTwo.getItems())); - userTwo.getHabbo().getClient().sendResponse(new AddHabboItemComposer(userOne.getItems())); + THashSet itemsUserOne = new THashSet<>(userOne.getItems()); + THashSet itemsUserTwo = new THashSet<>(userTwo.getItems()); + + userOne.clearItems(); + userTwo.clearItems(); + + userOne.getHabbo().getInventory().getItemsComponent().addItems(itemsUserTwo); + userTwo.getHabbo().getInventory().getItemsComponent().addItems(itemsUserOne); + + userOne.getHabbo().getClient().sendResponse(new AddHabboItemComposer(itemsUserTwo)); + userTwo.getHabbo().getClient().sendResponse(new AddHabboItemComposer(itemsUserOne)); userOne.getHabbo().getClient().sendResponse(new InventoryRefreshComposer()); userTwo.getHabbo().getClient().sendResponse(new InventoryRefreshComposer()); return true; } - void clearAccepted() + protected void clearAccepted() { for(RoomTradeUser user : this.users) { @@ -249,15 +270,21 @@ public class RoomTrade } } - void updateWindow() + protected void updateWindow() { this.sendMessageToUsers(new TradeUpdateComposer(this)); } + private void returnItems() + { + for (RoomTradeUser user : this.users) + { + user.putItemsIntoInventory(); + } + } private void closeWindow() { removeStatusses(); - sendMessageToUsers(new TradeCloseWindowComposer()); } @@ -265,6 +292,7 @@ public class RoomTrade { this.removeStatusses(); this.clearAccepted(); + this.returnItems(); for (RoomTradeUser user : this.users) { user.clearItems(); @@ -298,7 +326,7 @@ public class RoomTrade return null; } - void sendMessageToUsers(MessageComposer message) + public void sendMessageToUsers(MessageComposer message) { for(RoomTradeUser roomTradeUser : this.users) { diff --git a/src/main/java/com/eu/habbo/habbohotel/rooms/RoomTradeUser.java b/src/main/java/com/eu/habbo/habbohotel/rooms/RoomTradeUser.java index 272285bc..ee0ab783 100644 --- a/src/main/java/com/eu/habbo/habbohotel/rooms/RoomTradeUser.java +++ b/src/main/java/com/eu/habbo/habbohotel/rooms/RoomTradeUser.java @@ -6,6 +6,7 @@ import gnu.trove.set.hash.THashSet; public class RoomTradeUser { + private int userId; private final Habbo habbo; private boolean accepted; private boolean confirmed; @@ -14,11 +15,27 @@ public class RoomTradeUser public RoomTradeUser(Habbo habbo) { this.habbo = habbo; + + if (this.habbo != null) + { + this.userId = this.habbo.getHabboInfo().getId(); + } + this.accepted = false; this.confirmed = false; this.items = new THashSet<>(); } + public int getUserId() + { + return this.userId; + } + + public void setUserId(int userId) + { + this.userId = userId; + } + public Habbo getHabbo() { return this.habbo; @@ -49,11 +66,29 @@ public class RoomTradeUser this.items.add(item); } + public HabboItem getItem(int itemId) + { + for (HabboItem item : this.items) + { + if (item.getId() == itemId) + { + return item; + } + } + + return null; + } + public THashSet getItems() { return this.items; } + public void putItemsIntoInventory() + { + this.habbo.getInventory().getItemsComponent().addItems(this.items); + } + public void clearItems() { this.items.clear(); diff --git a/src/main/java/com/eu/habbo/habbohotel/rooms/RoomUnit.java b/src/main/java/com/eu/habbo/habbohotel/rooms/RoomUnit.java index 0242575f..9ebd2e77 100644 --- a/src/main/java/com/eu/habbo/habbohotel/rooms/RoomUnit.java +++ b/src/main/java/com/eu/habbo/habbohotel/rooms/RoomUnit.java @@ -30,6 +30,7 @@ public class RoomUnit private int id; private RoomTile startLocation; private RoomTile previousLocation; + private double previousLocationZ; private RoomTile currentLocation; private RoomTile goalLocation; @@ -47,6 +48,7 @@ public class RoomUnit public boolean sitUpdate = false; public boolean isTeleporting = false; public boolean isKicked = false; + public int kickCount = 0; private boolean statusUpdate = false; private boolean invisible = false; @@ -143,7 +145,7 @@ public class RoomUnit { this.sitUpdate = true; - if (room.hasHabbosAt(next.x, next.y)) + if ( room.hasHabbosAt(next.x, next.y)) { return false; } @@ -305,7 +307,9 @@ public class RoomUnit zHeight += room.getLayout().getHeightAtSquare(next.x, next.y); } - this.previousLocation = this.currentLocation; + + this.setPreviousLocation(this.getCurrentLocation()); + this.setStatus(RoomUnitStatus.MOVE, next.x + "," + next.y + "," + zHeight); if (habbo != null) { @@ -523,9 +527,20 @@ public class RoomUnit return this.previousLocation; } + public double getPreviousLocationZ() + { + return this.previousLocationZ; + } + + public void setPreviousLocationZ(double z) + { + this.previousLocationZ = z; + } + public void setPreviousLocation(RoomTile previousLocation) { this.previousLocation = previousLocation; + this.previousLocationZ = this.z; } public void setPathFinderRoom(Room room) @@ -556,8 +571,6 @@ public class RoomUnit return !isAtGoal() && this.canWalk; } - - public String getStatus(RoomUnitStatus key) { return this.status.get(key); 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 62d39694..bc19360c 100644 --- a/src/main/java/com/eu/habbo/habbohotel/users/Habbo.java +++ b/src/main/java/com/eu/habbo/habbohotel/users/Habbo.java @@ -14,18 +14,19 @@ import com.eu.habbo.messages.outgoing.generic.alerts.StaffAlertWithLinkComposer; import com.eu.habbo.messages.outgoing.inventory.*; import com.eu.habbo.messages.outgoing.rooms.FloodCounterComposer; import com.eu.habbo.messages.outgoing.rooms.ForwardToRoomComposer; -import com.eu.habbo.messages.outgoing.rooms.users.RoomUserIgnoredComposer; -import com.eu.habbo.messages.outgoing.rooms.users.RoomUserShoutComposer; -import com.eu.habbo.messages.outgoing.rooms.users.RoomUserTalkComposer; -import com.eu.habbo.messages.outgoing.rooms.users.RoomUserWhisperComposer; +import com.eu.habbo.messages.outgoing.rooms.users.*; import com.eu.habbo.messages.outgoing.users.*; import com.eu.habbo.plugin.events.users.UserCreditsEvent; import com.eu.habbo.plugin.events.users.UserDisconnectEvent; import com.eu.habbo.plugin.events.users.UserPointsEvent; +import gnu.trove.map.hash.THashMap; import gnu.trove.set.hash.THashSet; import java.net.InetSocketAddress; import java.sql.ResultSet; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; public class Habbo implements Runnable { @@ -151,7 +152,7 @@ public class Habbo implements Runnable Emulator.getPluginManager().fireEvent(new UserDisconnectEvent(this)); } - if(this.disconnected || this.disconnecting) + if (this.disconnected || this.disconnecting) return; this.disconnecting = true; @@ -171,8 +172,7 @@ public class Habbo implements Runnable room.removeFromQueue(this); } } - } - catch (Exception e) + } catch (Exception e) { Emulator.getLogging().logErrorLine(e); } @@ -190,13 +190,11 @@ public class Habbo implements Runnable AchievementManager.saveAchievements(this); this.habboStats.dispose(); - } - catch (Exception e) + } catch (Exception e) { Emulator.getLogging().logErrorLine(e); return; - } - finally + } finally { Emulator.getGameEnvironment().getRoomManager().unloadRoomsForHabbo(this); Emulator.getGameEnvironment().getHabboManager().removeHabbo(this); @@ -204,10 +202,11 @@ public class Habbo implements Runnable Emulator.getLogging().logUserLine(this.habboInfo.getUsername() + " disconnected."); this.client = null; } + @Override public void run() { - if(this.needsUpdate()) + if (this.needsUpdate()) { this.habboInfo.run(); this.needsUpdate(false); @@ -472,4 +471,46 @@ public class Habbo implements Runnable return 0; } + + public void clearCaches() + { + int timestamp = Emulator.getIntUnixTimestamp(); + THashMap> newLog = new THashMap<>(); + for (Map.Entry> ltdLog : this.habboStats.ltdPurchaseLog.entrySet()) + { + for (Integer time : ltdLog.getValue()) + { + if (time > timestamp) + { + if (!newLog.containsKey(ltdLog.getKey())) + { + newLog.put(ltdLog.getKey(), new ArrayList()); + } + + newLog.get(ltdLog.getKey()).add(time); + } + } + } + + this.habboStats.ltdPurchaseLog = newLog; + } + + + public void respect(Habbo target) + { + if(target != null && target != this.client.getHabbo()) + + { + target.getHabboStats().respectPointsReceived++; + this.client.getHabbo().getHabboStats().respectPointsGiven++; + this.client.getHabbo().getHabboStats().respectPointsToGive--; + this.client.getHabbo().getHabboInfo().getCurrentRoom().sendComposer(new RoomUserRespectComposer(target).compose()); + this.client.getHabbo().getHabboInfo().getCurrentRoom().sendComposer(new RoomUserActionComposer(this.client.getHabbo().getRoomUnit(), RoomUserAction.THUMB_UP).compose()); + + AchievementManager.progressAchievement(this.client.getHabbo(), Emulator.getGameEnvironment().getAchievementManager().getAchievement("RespectGiven")); + AchievementManager.progressAchievement(target, Emulator.getGameEnvironment().getAchievementManager().getAchievement("RespectEarned")); + + this.client.getHabbo().getHabboInfo().getCurrentRoom().unIdle(this.client.getHabbo()); + } + } } diff --git a/src/main/java/com/eu/habbo/habbohotel/users/HabboItem.java b/src/main/java/com/eu/habbo/habbohotel/users/HabboItem.java index 2b649218..ee21784d 100644 --- a/src/main/java/com/eu/habbo/habbohotel/users/HabboItem.java +++ b/src/main/java/com/eu/habbo/habbohotel/users/HabboItem.java @@ -77,8 +77,8 @@ public abstract class HabboItem implements Runnable, IEventTriggers { serverMessage.appendInt(this.getId()); serverMessage.appendInt(this.baseItem.getSpriteId()); - serverMessage.appendInt32(this.x); - serverMessage.appendInt32(this.y); + serverMessage.appendInt(this.x); + serverMessage.appendInt(this.y); serverMessage.appendInt(getRotation()); serverMessage.appendString(Double.toString(this.z)); @@ -423,4 +423,9 @@ public abstract class HabboItem implements Runnable, IEventTriggers { return false; } + + public boolean isUsable() + { + return this.baseItem.getStateCount() > 1; + } } 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 0178ea2e..4b99d355 100644 --- a/src/main/java/com/eu/habbo/habbohotel/users/HabboStats.java +++ b/src/main/java/com/eu/habbo/habbohotel/users/HabboStats.java @@ -5,8 +5,12 @@ import com.eu.habbo.habbohotel.achievements.Achievement; import com.eu.habbo.habbohotel.achievements.TalentTrackType; import com.eu.habbo.habbohotel.catalog.CatalogItem; import com.eu.habbo.habbohotel.rooms.RoomChatMessageBubbles; +import com.eu.habbo.habbohotel.rooms.RoomTrade; +import com.eu.habbo.habbohotel.users.cache.HabboOfferPurchase; import gnu.trove.list.array.TIntArrayList; +import gnu.trove.map.TIntObjectMap; import gnu.trove.map.hash.THashMap; +import gnu.trove.map.hash.TIntObjectHashMap; import gnu.trove.stack.array.TIntArrayStack; import java.sql.Connection; @@ -35,7 +39,7 @@ public class HabboStats implements Runnable public boolean blockFriendRequests; public boolean blockRoomInvites; public boolean blockStaffAlerts; - public boolean allowTrade; + private boolean allowTrade; public boolean preferOldChat; public boolean blockCameraFollow; public RoomChatMessageBubbles chatColor; @@ -63,11 +67,12 @@ public class HabboStats implements Runnable private final THashMap achievementCache; private final THashMap recentPurchases; private final TIntArrayList favoriteRooms; - public final TIntArrayList ignoredUsers; + private final TIntArrayList ignoredUsers; public final TIntArrayList secretRecipes; public int citizenshipLevel = -1; public int helpersLevel = -1; + public boolean perkTrade = false; public final HabboNavigatorWindowSettings navigatorWindowSettings; public final THashMap cache; @@ -88,8 +93,13 @@ public class HabboStats implements Runnable public TIntArrayList calendarRewardsClaimed; public boolean allowNameChange = false; + public boolean isPurchasingFurniture = false; public THashMap> ltdPurchaseLog = new THashMap<>(0); + public long lastTradeTimestamp = Emulator.getIntUnixTimestamp(); + public long lastPurchaseTimestamp = Emulator.getIntUnixTimestamp(); + public long lastGiftTimestamp = Emulator.getIntUnixTimestamp(); + public TIntObjectMap offerCache = new TIntObjectHashMap<>(); private HabboStats(ResultSet set, Habbo habbo) throws SQLException { @@ -136,6 +146,7 @@ public class HabboStats implements Runnable this.nux = set.getString("nux").equals("1"); this.muteEndTime = set.getInt("mute_end_timestamp"); this.allowNameChange = set.getString("allow_name_change").equalsIgnoreCase("1"); + this.perkTrade = set.getString("perk_trade").equalsIgnoreCase("1"); this.nuxReward = nux; try (PreparedStatement statement = set.getStatement().getConnection().prepareStatement("SELECT * FROM user_window_settings WHERE user_id = ? LIMIT 1")) @@ -221,6 +232,30 @@ public class HabboStats implements Runnable } } } + + try (PreparedStatement ignoredPlayersStatement = set.getStatement().getConnection().prepareStatement("SELECT target_id FROM users_ignored WHERE user_id = ?")) + { + ignoredPlayersStatement.setInt(1, this.habbo.getHabboInfo().getId()); + try (ResultSet ignoredSet = ignoredPlayersStatement.executeQuery()) + { + while (ignoredSet.next()) + { + this.ignoredUsers.add(ignoredSet.getInt(1)); + } + } + } + + try (PreparedStatement loadOfferPurchaseStatement = set.getStatement().getConnection().prepareStatement("SELECT * FROM users_target_offer_purchases WHERE user_id = ?")) + { + loadOfferPurchaseStatement.setInt(1, this.habbo.getHabboInfo().getId()); + try (ResultSet offerSet = loadOfferPurchaseStatement.executeQuery()) + { + while (offerSet.next()) + { + this.offerCache.put(offerSet.getInt("offer_id"), new HabboOfferPurchase(offerSet)); + } + } + } } @Override @@ -228,7 +263,7 @@ public class HabboStats implements Runnable { 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 = ? 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 = ? WHERE user_id = ? LIMIT 1")) { statement.setInt(1, this.achievementScore); statement.setInt(2, this.respectPointsReceived); @@ -259,7 +294,8 @@ public class HabboStats implements Runnable statement.setString(27, this.nux ? "1" : "0"); statement.setInt(28, this.muteEndTime); statement.setString(29, this.allowNameChange ? "1" : "0"); - statement.setInt(30, this.habbo.getHabboInfo().getId()); + statement.setString(30, this.perkTrade ? "1" : "0"); + statement.setInt(31, this.habbo.getHabboInfo().getId()); statement.executeUpdate(); } @@ -274,6 +310,24 @@ public class HabboStats implements Runnable statement.executeUpdate(); } + if (!this.offerCache.isEmpty()) + { + try (PreparedStatement statement = connection.prepareStatement("UPDATE users_target_offer_purchases SET state = ?, amount = ?, last_purchase = ? WHERE user_id = ? AND offer_id = ?")) + { + for (HabboOfferPurchase purchase : this.offerCache.valueCollection()) + { + if (!purchase.needsUpdate()) continue; + + statement.setInt(1, purchase.getState()); + statement.setInt(2, purchase.getAmount()); + statement.setInt(3, purchase.getLastPurchaseTimestamp()); + statement.setInt(4, this.habbo.getHabboInfo().getId()); + statement.setInt(5, purchase.getOfferId()); + statement.execute(); + } + } + } + this.navigatorWindowSettings.save(connection); } catch (SQLException e) @@ -657,4 +711,71 @@ public class HabboStats implements Runnable return 0; } + + public void ignoreUser(int userId) + { + if (!this.userIgnored(userId)) + { + this.ignoredUsers.add(userId); + + try (Connection connection = Emulator.getDatabase().getDataSource().getConnection(); + PreparedStatement statement = connection.prepareStatement("INSERT INTO users_ignored (user_id, target_id) VALUES (?, ?)")) + { + statement.setInt(1, this.habbo.getHabboInfo().getId()); + statement.setInt(2, userId); + statement.execute(); + } + catch (SQLException e) + { + Emulator.getLogging().logSQLException(e); + } + } + } + + public void unignoreUser(int userId) + { + if (this.userIgnored(userId)) + { + this.ignoredUsers.remove(userId); + + try (Connection connection = Emulator.getDatabase().getDataSource().getConnection(); + PreparedStatement statement = connection.prepareStatement("DELETE FROM users_ignored WHERE user_id = ? AND target_id = ?")) + { + statement.setInt(1, this.habbo.getHabboInfo().getId()); + statement.setInt(2, userId); + statement.execute(); + } + catch (SQLException e) + { + Emulator.getLogging().logSQLException(e); + } + } + } + + public boolean userIgnored(int userId) + { + return this.ignoredUsers.contains(userId); + } + + public boolean allowTrade() + { + if (RoomTrade.TRADING_REQUIRES_PERK) + return this.perkTrade && this.allowTrade; + else return this.allowTrade; + } + + public void setAllowTrade(boolean allowTrade) + { + this.allowTrade = allowTrade; + } + + public HabboOfferPurchase getHabboOfferPurchase(int offerId) + { + return this.offerCache.get(offerId); + } + + public void addHabboOfferPurchase(HabboOfferPurchase offerPurchase) + { + this.offerCache.put(offerPurchase.getOfferId(), offerPurchase); + } } diff --git a/src/main/java/com/eu/habbo/habbohotel/users/cache/HabboOfferPurchase.java b/src/main/java/com/eu/habbo/habbohotel/users/cache/HabboOfferPurchase.java new file mode 100644 index 00000000..eebfd2de --- /dev/null +++ b/src/main/java/com/eu/habbo/habbohotel/users/cache/HabboOfferPurchase.java @@ -0,0 +1,109 @@ +package com.eu.habbo.habbohotel.users.cache; + +import com.eu.habbo.Emulator; +import com.eu.habbo.habbohotel.users.Habbo; + +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; + +public class HabboOfferPurchase +{ + private final int userId; + private final int offerId; + private int state; + private int amount; + private int lastPurchaseTimestamp; + private boolean needsUpdate = false; + + public HabboOfferPurchase(ResultSet set) throws SQLException + { + this.userId = set.getInt("user_id"); + this.offerId = set.getInt("offer_id"); + this.state = set.getInt("state"); + this.amount = set.getInt("amount"); + this.lastPurchaseTimestamp = set.getInt("last_purchase"); + } + + private HabboOfferPurchase(int userId, int offerId) + { + this.userId = userId; + this.offerId = offerId; + } + + public int getOfferId() + { + return this.offerId; + } + + public int getState() + { + return this.state; + } + + public void setState(int state) + { + this.state = state; + this.needsUpdate = true; + } + + public int getAmount() + { + return this.amount; + } + + public void incrementAmount(int amount) + { + this.amount += amount; + this.needsUpdate = true; + } + + public int getLastPurchaseTimestamp() + { + return this.lastPurchaseTimestamp; + } + + public void setLastPurchaseTimestamp(int timestamp) + { + this.lastPurchaseTimestamp = timestamp; + this.needsUpdate = true; + } + + public void update(int amount, int timestamp) + { + this.amount += amount; + this.lastPurchaseTimestamp = timestamp; + this.needsUpdate = true; + } + + public boolean needsUpdate() + { + return this.needsUpdate; + } + + public static HabboOfferPurchase getOrCreate(Habbo habbo, int offerId) + { + HabboOfferPurchase purchase = habbo.getHabboStats().getHabboOfferPurchase(offerId); + + if (purchase == null) + { + try (Connection connection = Emulator.getDatabase().getDataSource().getConnection(); PreparedStatement statement = connection.prepareStatement("INSERT INTO users_target_offer_purchases (user_id, offer_id) VALUES (?, ?)")) + { + statement.setInt(1, habbo.getHabboInfo().getId()); + statement.setInt(2, offerId); + statement.execute(); + } + catch (SQLException e) + { + Emulator.getLogging().logSQLException(e); + return null; + } + + purchase = new HabboOfferPurchase(habbo.getHabboInfo().getId(), offerId); + habbo.getHabboStats().addHabboOfferPurchase(purchase); + } + + return purchase; + } +} \ No newline at end of file diff --git a/src/main/java/com/eu/habbo/habbohotel/wired/WiredHandler.java b/src/main/java/com/eu/habbo/habbohotel/wired/WiredHandler.java index e5bd7858..70cd6be4 100644 --- a/src/main/java/com/eu/habbo/habbohotel/wired/WiredHandler.java +++ b/src/main/java/com/eu/habbo/habbohotel/wired/WiredHandler.java @@ -281,10 +281,14 @@ public class WiredHandler int pixels = Integer.valueOf(rewardReceived.value); habbo.givePixels(pixels); } - else if(rewardReceived.type.equalsIgnoreCase("points")) + else if(rewardReceived.type.startsWith("points")) { int points = Integer.valueOf(rewardReceived.value); - habbo.givePoints(points); + int type = 5; + + try { type = Integer.valueOf(rewardReceived.type.replace("points", "")); } catch ( Exception e) {} + + habbo.givePoints(type, points); } else if(rewardReceived.type.equalsIgnoreCase("furni")) { diff --git a/src/main/java/com/eu/habbo/messages/PacketManager.java b/src/main/java/com/eu/habbo/messages/PacketManager.java index 3a743f45..7bec0797 100644 --- a/src/main/java/com/eu/habbo/messages/PacketManager.java +++ b/src/main/java/com/eu/habbo/messages/PacketManager.java @@ -225,6 +225,8 @@ public class PacketManager this.registerHandler(Incoming.GetClubDataEvent, RequestClubDataEvent.class); this.registerHandler(Incoming.RequestClubGiftsEvent, RequestClubGiftsEvent.class); this.registerHandler(Incoming.CatalogSearchedItemEvent, CatalogSearchedItemEvent.class); + this.registerHandler(Incoming.PurchaseTargetOfferEvent, PurchaseTargetOfferEvent.class); + this.registerHandler(Incoming.TargetOfferStateEvent, TargetOfferStateEvent.class); } private void registerEvent() throws Exception @@ -327,6 +329,7 @@ public class PacketManager this.registerHandler(Incoming.HotelViewDataEvent, HotelViewDataEvent.class); this.registerHandler(Incoming.HotelViewRequestBadgeRewardEvent, HotelViewRequestBadgeRewardEvent.class); this.registerHandler(Incoming.HotelViewClaimBadgeRewardEvent, HotelViewClaimBadgeRewardEvent.class); + this.registerHandler(Incoming.HotelViewRequestLTDAvailabilityEvent, HotelViewRequestLTDAvailabilityEvent.class); } private void registerInventory() throws Exception @@ -619,4 +622,5 @@ public class PacketManager } public static boolean DEBUG_SHOW_PACKETS = false; + public static boolean MULTI_THREADED_PACKET_HANDLING = false; } \ No newline at end of file diff --git a/src/main/java/com/eu/habbo/messages/ServerMessage.java b/src/main/java/com/eu/habbo/messages/ServerMessage.java index 45861959..d8a756ec 100644 --- a/src/main/java/com/eu/habbo/messages/ServerMessage.java +++ b/src/main/java/com/eu/habbo/messages/ServerMessage.java @@ -110,19 +110,6 @@ public class ServerMessage } } - @Deprecated - public void appendInt32(Integer obj) - { - try - { - this.stream.writeInt(obj.intValue()); - } - catch(IOException e) - { - Emulator.getLogging().logPacketError(e); - } - } - public void appendInt(Integer obj) { try @@ -135,13 +122,13 @@ public class ServerMessage } } - public void appendInt32(Short obj) + public void appendInt(Short obj) { this.appendShort(0); this.appendShort(obj); } - public void appendInt32(Byte obj) + public void appendInt(Byte obj) { try { @@ -153,7 +140,7 @@ public class ServerMessage } } - public void appendInt32(Boolean obj) + public void appendInt(Boolean obj) { try { diff --git a/src/main/java/com/eu/habbo/messages/incoming/Incoming.java b/src/main/java/com/eu/habbo/messages/incoming/Incoming.java index 94a39fc7..a22e3c0c 100644 --- a/src/main/java/com/eu/habbo/messages/incoming/Incoming.java +++ b/src/main/java/com/eu/habbo/messages/incoming/Incoming.java @@ -340,6 +340,10 @@ public class Incoming public static final int ChangeChatBubbleEvent = 1030; public static final int LoveLockStartConfirmEvent = 3775; + public static final int HotelViewRequestLTDAvailabilityEvent = 410; + public static final int PurchaseTargetOfferEvent = 1826; + public static final int TargetOfferStateEvent = 2041; + public static final int UNKNOWN_SNOWSTORM_6000 = 6000; public static final int UNKNOWN_SNOWSTORM_6001 = 6001; diff --git a/src/main/java/com/eu/habbo/messages/incoming/Incoming_1006.java b/src/main/java/com/eu/habbo/messages/incoming/Incoming_1006.java index f2578e0d..d8a5f3f2 100644 --- a/src/main/java/com/eu/habbo/messages/incoming/Incoming_1006.java +++ b/src/main/java/com/eu/habbo/messages/incoming/Incoming_1006.java @@ -5,7 +5,6 @@ public class Incoming_1006 - //public static final int RequestAchievementsEvent = 2562; @@ -31,194 +30,195 @@ public class Incoming_1006 - public static final int MannequinSaveLookEvent = 3770;//1804 //Updated - public static final int RequestCatalogPageEvent = 2914;//1754 //Updated - public static final int RequestWearingBadgesEvent = 3466;//3968 //Updated - public static final int BotPickupEvent = 665;//2865 //Updated - public static final int HorseRideEvent = 1027;//3268 //Updated - public static final int CreateRoomEvent = 238;//3524 //Updated - public static final int SaveMottoEvent = 1037;//2832 //Updated - public static final int GenerateSecretKeyEvent = -1;//3575 - public static final int ModToolAlertEvent = 2890;//1980 //Updated - public static final int TradeAcceptEvent = 368;//1062 //Updated - public static final int RequestCatalogModeEvent = 2711;//3406 //Updated - public static final int RequestUserCreditsEvent = 2845;//938 //Updated - public static final int FriendPrivateMessageEvent = 3710;//1527 //Updated - public static final int CloseDiceEvent = 57;//1739 //Updated - public static final int RoomUserRemoveRightsEvent = 1599;//3639 //Updated - public static final int GuildDeclineMembershipEvent = 1328;//1320 //Updated - public static final int AnswerPollEvent = 2135;//1847 //Updated - public static final int UserWearBadgeEvent = 741;//2473 //Updated - public static final int RoomVoteEvent = -242;//242 - public static final int RoomUserSignEvent = 2065;//2189 //Updated - public static final int RequestUserDataEvent = 882;//112 //Updated - public static final int RoomUserShoutEvent = 1788;//936 //Updated - public static final int ScratchPetEvent = 965;//3464 //Updated - public static final int RoomUserWalkEvent = 3690;//951 //Updated - public static final int RequestUserTagsEvent = 3430;//3102 //Updated - public static final int RequestTagsEvent = 753;//1337 //Updated - public static final int GetMarketplaceConfigEvent = 3774;//1952 //Updated - public static final int RequestHeightmapEvent = 859;//308 //Updated - public static final int TradeCloseEvent = 3012;//3387 //Updated - public static final int CatalogBuyItemEvent = 3964;//2967 //Updated - public static final int RequestGuildMembersEvent = 3204;//2382 //Updated - public static final int RequestPetInformationEvent = 2827;//777 //Updated - public static final int RoomUserWhisperEvent = 3908;//1362 //Updated - public static final int ModToolRequestUserInfoEvent = 607;//3077 //Updated - public static final int RotateMoveItemEvent = 1219;//194 //Updated - public static final int CancelPollEvent = 1628;//276 //Updated - public static final int RequestRoomLoadEvent = 1988;//3751 //2086 //2144 //Updated - public static final int RequestGuildPartsEvent = 1902;//2344 //Updated - public static final int RoomPlacePaintEvent = 1892;//874 //Updated - public static final int RequestPopularRoomsEvent = 464;//2346;//235 //Updated - public static final int ModToolRequestRoomInfoEvent = 1450;//225 //Updated - public static final int FriendRequestEvent = 2791;//3765 //Updated - public static final int RecycleEvent = 3277;//2318 //Updated - public static final int RequestRoomCategoriesEvent = 3498;//1431 //Updated - public static final int ToggleWallItemEvent = 3050;//2650 //Updated - public static final int RoomUserTalkEvent = 104;//3349 //Updated - public static final int HotelViewDataEvent = 2507;//595 //Updated //2269 - public static final int RoomUserDanceEvent = 649;//1139 //Updated - public static final int RequestUserProfileEvent = 1389;//532 //Updated - public static final int SearchRoomsFriendsNowEvent = 1082;//3306 //Updated - public static final int SetStackHelperHeightEvent = 2790;//2540 //Updated - public static final int RedeemVoucherEvent = 3024;//1571 //Updated - public static final int HorseUseItemEvent = 2590;//1616 //Updated - public static final int BuyItemEvent = 2847;//3878 //Updated - public static final int AdvertisingSaveEvent = 1829;//68 //Updated - public static final int RequestPetTrainingPanelEvent = 2251;//2476 //Updated - public static final int RoomBackgroundEvent = 2496;//2715 //Updated - public static final int RequestNewsListEvent = 1134;//896 //Updated - public static final int RequestPromotedRoomsEvent = 1558;//3030 //Updated - public static final int GuildSetAdminEvent = 3704;//2957 //Updated - public static final int GetClubDataEvent = 3240;//1608 //Updated - public static final int RequestMeMenuSettingsEvent = 2169;//671 //Updated - public static final int MannequinSaveNameEvent = 1289;//2098 //Updated - public static final int SellItemEvent = 1522;//172 //Updated - public static final int GuildAcceptMembershipEvent = 538;//1066 //Updated - public static final int RequestBannerToken = -1;//2619 - public static final int RequestRecylerLogicEvent = 1170;//1077 //Updated - public static final int RequestGuildJoinEvent = 794;//77 //Updated - public static final int RequestCatalogIndexEvent = 2806;//81 //Updated - public static final int RequestInventoryPetsEvent = 3760;//1900 //Updated - public static final int ModToolRequestRoomVisitsEvent = 2287;//2549 //Updated - public static final int ModToolWarnEvent = 2890;//3763 //Updated - public static final int RequestItemInfoEvent = 2042;//36 //Updated - public static final int ModToolRequestRoomChatlogEvent = 3209;//1903 //Updated - public static final int UserSaveLookEvent = 2242;//2404 //Updated - public static final int ToggleFloorItemEvent = 2693;//120 //Updated - public static final int TradeUnAcceptEvent = 126;//1131 //Updated - public static final int WiredTriggerSaveDataEvent = 3593;//3201 //Updated - public static final int RoomRemoveAllRightsEvent = 3764;//405 //Updated - public static final int TakeBackItemEvent = 1455;//2910 //Updated - public static final int OpenRecycleBoxEvent = 0x0F00;//3977 //Updated - public static final int GuildChangeNameDescEvent = 1485;//3232 //Updated - public static final int RequestSellItemEvent = 876;//2087 //Updated - public static final int ModToolChangeRoomSettingsEvent = 3244;//2530 //Updated - public static final int ModToolRequestUserChatlogEvent = 3209;//203 //Updated - public static final int GuildChangeSettingsEvent = 2258;//2156 //Updated - public static final int RoomUserDropHandItemEvent = 1108;//157 //Updated - public static final int RequestProfileFriendsEvent = 3701;//3925 //Updated - public static final int TradeCancelOfferItemEvent = 2170;//373 //Updated - public static final int TriggerDiceEvent = 386;//987 //Updated - public static final int GetPollDataEvent = 2263;//1960 //Updated - public static final int MachineIDEvent = 686;//512 - public static final int RequestDiscountEvent = 1995;//3794 //Updated - public static final int RequestFriendRequestEvent = 3739;//275 //Updated - public static final int RoomSettingsSaveEvent = 1290;//2384 //Updated - public static final int AcceptFriendRequest = 3383;//333 //Updated - public static final int ReleaseVersionEvent = 4000;//4000 //Updated - public static final int SearchRoomsMyFavoriteEvent = 3124;//1532 //Updated - public static final int TradeStartEvent = 3304;//466 //Updated - public static final int ChangeRelationEvent = 2632;//2521 //Updated - public static final int RoomUserSitEvent = 272;//484 //Updated - public static final int RequestCanCreateRoomEvent = 3903;//3844 //Updated //unsure - public static final int ModToolKickEvent = 1459;//3418 //Updated - public static final int MoveWallItemEvent = 3455;//1029 //Updated - public static final int SearchRoomsEvent = 3844;//3551 //Updated - public static final int RequestHighestScoreRoomsEvent = 1814;//1728 //Updaed - public static final int CatalogBuyItemAsGiftEvent = 1066;//2474 //Updated - public static final int RoomUserGiveRespectEvent = 3121;//2041 //Updated - public static final int RemoveFriendEvent = 1535;//2786 //Updated - public static final int SearchRoomsFriendsOwnEvent = 725;//3478 //Updated - public static final int GuildSetFavoriteEvent = 2754;//1463 //Updated - public static final int PetPlaceEvent = 1961;//3711 //Updated - public static final int BotSettingsEvent = 3292;//3098 //Updated - public static final int StalkFriendEvent = 1925;//3394 //Updated - public static final int RoomPickupItemEvent = 2463;//152 //Updated - public static final int RedeemItemEvent = 1242;//3599 //Updated - public static final int RequestFriendsEvent = 1904;//776 //Updated - public static final int RequestAchievementsEvent = 2697;//2562 //Updated - public static final int GuildChangeColorsEvent = 3873;//463 //Updated - public static final int RequestInventoryBadgesEvent = 2450;//3072 //Updated - public static final int RequestPetBreedsEvent = 2828;//1064 //Updated - public static final int GuildChangeBadgeEvent = 838;//1475 //Updated - public static final int ModToolBanEvent = 701;//2930 //Updated - public static final int SaveWardrobeEvent = 2921;//637 //Updated - public static final int HotelViewEvent = 3603;//3266 //Updated - public static final int ModToolPickTicketEvent = 2980;//3975 //Updated - public static final int ModToolReleaseTicketEvent = 3905; //Updated - public static final int ModToolCloseTicketEvent = 3904; //Updated - public static final int TriggerColorWheelEvent = 2556;//2367 //Updated - public static final int SearchRoomsByTagEvent = 3844;//1956 //Updated - public static final int RequestPublicRoomsEvent = 2057;//3735 //UPDATED OLD 3178 //Updated - public static final int RequestResolutionEvent = 305;//1854 //Updated - public static final int RequestInventoryItemsEvent = 2194;//372 //Updated - public static final int ModToolRoomAlertEvent = 2550;//295 //Updated - public static final int WiredEffectSaveDataEvent = 2856;//3006 //Updated - public static final int CheckPetNameEvent = 3699;//678 //Updated - public static final int SecureLoginEvent = 2243;//1309 //Updated - public static final int BotSaveSettingsEvent = 1607;//1384 //Updated - public static final int RequestGuildBuyEvent = 569;//872 //Updated - public static final int SearchUserEvent = 3576;//1267 //Updated + + public static final int MannequinSaveLookEvent = 3770; + public static final int RequestCatalogPageEvent = 2914; + public static final int RequestWearingBadgesEvent = 3466; + public static final int BotPickupEvent = 665; + public static final int HorseRideEvent = 1027; + public static final int CreateRoomEvent = 238; + public static final int SaveMottoEvent = 1037; + public static final int GenerateSecretKeyEvent = -1; + public static final int ModToolAlertEvent = 2890; + public static final int TradeAcceptEvent = 368; + public static final int RequestCatalogModeEvent = 2711; + public static final int RequestUserCreditsEvent = 2845; + public static final int FriendPrivateMessageEvent = 3710; + public static final int CloseDiceEvent = 57; + public static final int RoomUserRemoveRightsEvent = 1599; + public static final int GuildDeclineMembershipEvent = 1328; + public static final int AnswerPollEvent = 2135; + public static final int UserWearBadgeEvent = 741; + public static final int RoomVoteEvent = -242; + public static final int RoomUserSignEvent = 2065; + public static final int RequestUserDataEvent = 882; + public static final int RoomUserShoutEvent = 1788; + public static final int ScratchPetEvent = 965; + public static final int RoomUserWalkEvent = 3690; + public static final int RequestUserTagsEvent = 3430; + public static final int RequestTagsEvent = 753; + public static final int GetMarketplaceConfigEvent = 3774; + public static final int RequestHeightmapEvent = 859; + public static final int TradeCloseEvent = 3012; + public static final int CatalogBuyItemEvent = 3964; + public static final int RequestGuildMembersEvent = 3204; + public static final int RequestPetInformationEvent = 2827; + public static final int RoomUserWhisperEvent = 3908; + public static final int ModToolRequestUserInfoEvent = 607; + public static final int RotateMoveItemEvent = 1219; + public static final int CancelPollEvent = 1628; + public static final int RequestRoomLoadEvent = 1988; + public static final int RequestGuildPartsEvent = 1902; + public static final int RoomPlacePaintEvent = 1892; + public static final int RequestPopularRoomsEvent = 464; + public static final int ModToolRequestRoomInfoEvent = 1450; + public static final int FriendRequestEvent = 2791; + public static final int RecycleEvent = 3277; + public static final int RequestRoomCategoriesEvent = 3498; + public static final int ToggleWallItemEvent = 3050; + public static final int RoomUserTalkEvent = 104; + public static final int HotelViewDataEvent = 2507; + public static final int RoomUserDanceEvent = 649; + public static final int RequestUserProfileEvent = 1389; + public static final int SearchRoomsFriendsNowEvent = 1082; + public static final int SetStackHelperHeightEvent = 2790; + public static final int RedeemVoucherEvent = 3024; + public static final int HorseUseItemEvent = 2590; + public static final int BuyItemEvent = 2847; + public static final int AdvertisingSaveEvent = 1829; + public static final int RequestPetTrainingPanelEvent = 2251; + public static final int RoomBackgroundEvent = 2496; + public static final int RequestNewsListEvent = 1134; + public static final int RequestPromotedRoomsEvent = 1558; + public static final int GuildSetAdminEvent = 3704; + public static final int GetClubDataEvent = 3240; + public static final int RequestMeMenuSettingsEvent = 2169; + public static final int MannequinSaveNameEvent = 1289; + public static final int SellItemEvent = 1522; + public static final int GuildAcceptMembershipEvent = 538; + public static final int RequestBannerToken = -1; + public static final int RequestRecylerLogicEvent = 1170; + public static final int RequestGuildJoinEvent = 794; + public static final int RequestCatalogIndexEvent = 2806; + public static final int RequestInventoryPetsEvent = 3760; + public static final int ModToolRequestRoomVisitsEvent = 2287; + public static final int ModToolWarnEvent = 2890; + public static final int RequestItemInfoEvent = 2042; + public static final int ModToolRequestRoomChatlogEvent = 3209; + public static final int UserSaveLookEvent = 2242; + public static final int ToggleFloorItemEvent = 2693; + public static final int TradeUnAcceptEvent = 126; + public static final int WiredTriggerSaveDataEvent = 3593; + public static final int RoomRemoveAllRightsEvent = 3764; + public static final int TakeBackItemEvent = 1455; + public static final int OpenRecycleBoxEvent = 0x0F00; + public static final int GuildChangeNameDescEvent = 1485; + public static final int RequestSellItemEvent = 876; + public static final int ModToolChangeRoomSettingsEvent = 3244; + public static final int ModToolRequestUserChatlogEvent = 3209; + public static final int GuildChangeSettingsEvent = 2258; + public static final int RoomUserDropHandItemEvent = 1108; + public static final int RequestProfileFriendsEvent = 3701; + public static final int TradeCancelOfferItemEvent = 2170; + public static final int TriggerDiceEvent = 386; + public static final int GetPollDataEvent = 2263; + public static final int MachineIDEvent = 686; + public static final int RequestDiscountEvent = 1995; + public static final int RequestFriendRequestEvent = 3739; + public static final int RoomSettingsSaveEvent = 1290; + public static final int AcceptFriendRequest = 3383; + public static final int ReleaseVersionEvent = 4000; + public static final int SearchRoomsMyFavoriteEvent = 3124; + public static final int TradeStartEvent = 3304; + public static final int ChangeRelationEvent = 2632; + public static final int RoomUserSitEvent = 272; + public static final int RequestCanCreateRoomEvent = 3903; + public static final int ModToolKickEvent = 1459; + public static final int MoveWallItemEvent = 3455; + public static final int SearchRoomsEvent = 3844; + public static final int RequestHighestScoreRoomsEvent = 1814; + public static final int CatalogBuyItemAsGiftEvent = 1066; + public static final int RoomUserGiveRespectEvent = 3121; + public static final int RemoveFriendEvent = 1535; + public static final int SearchRoomsFriendsOwnEvent = 725; + public static final int GuildSetFavoriteEvent = 2754; + public static final int PetPlaceEvent = 1961; + public static final int BotSettingsEvent = 3292; + public static final int StalkFriendEvent = 1925; + public static final int RoomPickupItemEvent = 2463; + public static final int RedeemItemEvent = 1242; + public static final int RequestFriendsEvent = 1904; + public static final int RequestAchievementsEvent = 2697; + public static final int GuildChangeColorsEvent = 3873; + public static final int RequestInventoryBadgesEvent = 2450; + public static final int RequestPetBreedsEvent = 2828; + public static final int GuildChangeBadgeEvent = 838; + public static final int ModToolBanEvent = 701; + public static final int SaveWardrobeEvent = 2921; + public static final int HotelViewEvent = 3603; + public static final int ModToolPickTicketEvent = 2980; + public static final int ModToolReleaseTicketEvent = 3905; + public static final int ModToolCloseTicketEvent = 3904; + public static final int TriggerColorWheelEvent = 2556; + public static final int SearchRoomsByTagEvent = 3844; + public static final int RequestPublicRoomsEvent = 2057; + public static final int RequestResolutionEvent = 305; + public static final int RequestInventoryItemsEvent = 2194; + public static final int ModToolRoomAlertEvent = 2550; + public static final int WiredEffectSaveDataEvent = 2856; + public static final int CheckPetNameEvent = 3699; + public static final int SecureLoginEvent = 2243; + public static final int BotSaveSettingsEvent = 1607; + public static final int RequestGuildBuyEvent = 569; + public static final int SearchUserEvent = 3576; public static final int GuildConfirmRemoveMemberEvent = 3394; - public static final int GuildRemoveMemberEvent = 1764;//3002 //Updated - public static final int WiredConditionSaveDataEvent = 3268;//1041 //Updated - public static final int RoomUserLookAtPoint = 2283;//1365 //Updated - public static final int MoodLightTurnOnEvent = 3924;//1181 //Updated - public static final int MoodLightSettingsEvent = 2821;//2468 //Updated - public static final int RequestMyRoomsEvent = 948;//2676 //Updated - public static final int RequestCreditsEvent = 3896;//2138 //Updated - public static final int SearchRoomsInGroupEvent = 2851;//1160 //Updated - public static final int HorseRideSettingsEvent = 427;//2448 //Updated - public static final int KnockKnockResponseEvent = 853; //Updated - public static final int RoomUserKickEvent = 313;//1874 //Updated - public static final int RoomPlaceItemEvent = 3571;//474 //Updated - public static final int RequestInventoryBotsEvent = 1343;//1351 //Updated - public static final int RequestUserWardrobeEvent = 2976;//1251 //Updated - public static final int RequestRoomRightsEvent = 63;//2928 //Updated - public static final int RequestGuildBuyRoomsEvent = 2945;//701 //Updated - public static final int BotPlaceEvent = 3906;//148 //Updated - public static final int SearchRoomsWithRightsEvent = 1699;//3785 //Updated - public static final int HotelViewRequestBonusRareEvent = 1521;//1199 //Updated - public static final int GuildRemoveAdminEvent = 904;//3264 //Updated - public static final int RequestRoomSettingsEvent = 1794;//3741 //Updated - public static final int RequestOffersEvent = 100;//541 //Updated - public static final int RequestUserCitizinShipEvent = 3556;//3096 //Updated - public static final int RoomUserStopTypingEvent = 1712;//2005 //Updated - public static final int RoomUserStartTypingEvent = 3128;//3684 //Updated - public static final int RequestGuildManageEvent = 3931;//2418 //Updated - public static final int RequestUserClubEvent = 675;//3874 //Updated - public static final int PetPickupEvent = 1294;//863 //Updated - public static final int RequestOwnGuildsEvent = 2690;//2240 //Updated - public static final int SearchRoomsVisitedEvent = 3561;//589 //Updated - public static final int TradeOfferItemEvent = 2090;//2223 //Updated - public static final int TradeConfirmEvent = 1503;//1144 //Updated - public static final int RoomUserGiveRightsEvent = 503;//2221 //Updated - public static final int RequestGuildInfoEvent = 844;//2079 //Updated - public static final int ReloadRecyclerEvent = 3895;//2779 //Updated - public static final int RoomUserActionEvent = 2522;//475 //Updated - public static final int RequestGiftConfigurationEvent = 756;//382 //Updated - public static final int RequestRoomDataEvent = 2022;//183 //Updated - public static final int RequestRoomHeightmapEvent = 3936; //Updated - public static final int RequestGuildFurniWidgetEvent = 54;//3031 //Updated - public static final int RequestOwnItemsEvent = 1816;//829 //Updated - public static final int RequestReportRoomEvent = 2842; //Updated - public static final int ReportEvent = 2073; //Updated - public static final int TriggerOneWayGateEvent = 3752; //Updated - public static final int FloorPlanEditorSaveEvent = 3509; //Updated - public static final int FloorPlanEditorRequestDoorSettingsEvent = 2691; //Updated - public static final int FloorPlanEditorRequestBlockedTilesEvent = 2246; //Updated + public static final int GuildRemoveMemberEvent = 1764; + public static final int WiredConditionSaveDataEvent = 3268; + public static final int RoomUserLookAtPoint = 2283; + public static final int MoodLightTurnOnEvent = 3924; + public static final int MoodLightSettingsEvent = 2821; + public static final int RequestMyRoomsEvent = 948; + public static final int RequestCreditsEvent = 3896; + public static final int SearchRoomsInGroupEvent = 2851; + public static final int HorseRideSettingsEvent = 427; + public static final int KnockKnockResponseEvent = 853; + public static final int RoomUserKickEvent = 313; + public static final int RoomPlaceItemEvent = 3571; + public static final int RequestInventoryBotsEvent = 1343; + public static final int RequestUserWardrobeEvent = 2976; + public static final int RequestRoomRightsEvent = 63; + public static final int RequestGuildBuyRoomsEvent = 2945; + public static final int BotPlaceEvent = 3906; + public static final int SearchRoomsWithRightsEvent = 1699; + public static final int HotelViewRequestBonusRareEvent = 1521; + public static final int GuildRemoveAdminEvent = 904; + public static final int RequestRoomSettingsEvent = 1794; + public static final int RequestOffersEvent = 100; + public static final int RequestUserCitizinShipEvent = 3556; + public static final int RoomUserStopTypingEvent = 1712; + public static final int RoomUserStartTypingEvent = 3128; + public static final int RequestGuildManageEvent = 3931; + public static final int RequestUserClubEvent = 675; + public static final int PetPickupEvent = 1294; + public static final int RequestOwnGuildsEvent = 2690; + public static final int SearchRoomsVisitedEvent = 3561; + public static final int TradeOfferItemEvent = 2090; + public static final int TradeConfirmEvent = 1503; + public static final int RoomUserGiveRightsEvent = 503; + public static final int RequestGuildInfoEvent = 844; + public static final int ReloadRecyclerEvent = 3895; + public static final int RoomUserActionEvent = 2522; + public static final int RequestGiftConfigurationEvent = 756; + public static final int RequestRoomDataEvent = 2022; + public static final int RequestRoomHeightmapEvent = 3936; + public static final int RequestGuildFurniWidgetEvent = 54; + public static final int RequestOwnItemsEvent = 1816; + public static final int RequestReportRoomEvent = 2842; + public static final int ReportEvent = 2073; + public static final int TriggerOneWayGateEvent = 3752; + public static final int FloorPlanEditorSaveEvent = 3509; + public static final int FloorPlanEditorRequestDoorSettingsEvent = 2691; + public static final int FloorPlanEditorRequestBlockedTilesEvent = 2246; public static final int UnknownEvent1 = 3365; public static final int RequestTalenTrackEvent = 1741; public static final int RequestNewNavigatorDataEvent = 1192; diff --git a/src/main/java/com/eu/habbo/messages/incoming/Incoming_20160101.java b/src/main/java/com/eu/habbo/messages/incoming/Incoming_20160101.java index 5c58059e..9b623c24 100644 --- a/src/main/java/com/eu/habbo/messages/incoming/Incoming_20160101.java +++ b/src/main/java/com/eu/habbo/messages/incoming/Incoming_20160101.java @@ -2,196 +2,196 @@ package com.eu.habbo.messages.incoming; public class Incoming_20160101 { - public static final int MannequinSaveLookEvent = 3936;//1804 - public static final int RequestCatalogPageEvent = 39;//1754 - public static final int RequestWearingBadgesEvent = 2226;//3968 - public static final int BotPickupEvent = 644;//2865 - public static final int HorseRideEvent = 1440;//3268 - public static final int RequestCreateRoomEvent = 3077;//3524 - public static final int SaveMottoEvent = 3515;//2832 //1037 - public static final int GenerateSecretKeyEvent = -1;//3575 - public static final int ModToolAlertEvent = 2375;//1980 - public static final int TradeAcceptEvent = 3374;//1062 - public static final int RequestCatalogModeEvent = 2267;//3406 - public static final int RequestUserCreditsEvent = 3697;//938 //Updated - public static final int FriendPrivateMessageEvent = 1981;//1527 - public static final int CloseDiceEvent = 191;//1739 - public static final int RoomUserRemoveRightsEvent = 40;//3639 + public static final int MannequinSaveLookEvent = 3936; + public static final int RequestCatalogPageEvent = 39; + public static final int RequestWearingBadgesEvent = 2226; + public static final int BotPickupEvent = 644; + public static final int HorseRideEvent = 1440; + public static final int RequestCreateRoomEvent = 3077; + public static final int SaveMottoEvent = 3515; + public static final int GenerateSecretKeyEvent = -1; + public static final int ModToolAlertEvent = 2375; + public static final int TradeAcceptEvent = 3374; + public static final int RequestCatalogModeEvent = 2267; + public static final int RequestUserCreditsEvent = 3697; + public static final int FriendPrivateMessageEvent = 1981; + public static final int CloseDiceEvent = 191; + public static final int RoomUserRemoveRightsEvent = 40; public static final int RoomRemoveRightsEvent = 879; - public static final int GuildDeclineMembershipEvent = 403;//1320 - public static final int AnswerPollEvent = 3757;//1847 - public static final int UserWearBadgeEvent = 2752;//2473 - public static final int RoomVoteEvent = 336;//242 - public static final int RoomUserSignEvent = 2966;//2189 - public static final int RequestUserDataEvent = 186;//112 //Updated - public static final int RoomUserShoutEvent = 2101;//936 - public static final int ScratchPetEvent = 1618;//3464 - public static final int RoomUserWalkEvent = 1737;//951 - public static final int RequestUserTagsEvent = 1722;//3102 - public static final int RequestTagsEvent = 1685;//1337 - public static final int GetMarketplaceConfigEvent = 1604;//1952 - public static final int RequestHeightmapEvent = 2125;//308 - public static final int TradeCloseEvent = 2967;//3387 - public static final int CatalogBuyItemEvent = 2830;//2967 - public static final int RequestGuildMembersEvent = 205;//2382 - public static final int RequestPetInformationEvent = 2232;//777 - public static final int RoomUserWhisperEvent = 878;//1362 - public static final int ModToolRequestUserInfoEvent = 2984;//3077 - public static final int RotateMoveItemEvent = 1781;//194 - public static final int CancelPollEvent = 2538;//276 - public static final int RequestRoomLoadEvent = 407;//3751 //2086 //2144 - public static final int RequestGuildPartsEvent = 1670;//2344 - public static final int RoomPlacePaintEvent = 728;//874 - public static final int RequestPopularRoomsEvent = 3022;//2346;//235 - public static final int ModToolRequestRoomInfoEvent = 182;//225 - public static final int FriendRequestEvent = 3775;//3765 - public static final int RecycleEvent = 2920;//2318 - public static final int RequestRoomCategoriesEvent = 2506;//1431 //Updated - public static final int ToggleWallItemEvent = 3396;//2650 - public static final int RoomUserTalkEvent = 670;//3349 - public static final int HotelViewDataEvent = 3544;//595 //2269 //Updated + public static final int GuildDeclineMembershipEvent = 403; + public static final int AnswerPollEvent = 3757; + public static final int UserWearBadgeEvent = 2752; + public static final int RoomVoteEvent = 336; + public static final int RoomUserSignEvent = 2966; + public static final int RequestUserDataEvent = 186; + public static final int RoomUserShoutEvent = 2101; + public static final int ScratchPetEvent = 1618; + public static final int RoomUserWalkEvent = 1737; + public static final int RequestUserTagsEvent = 1722; + public static final int RequestTagsEvent = 1685; + public static final int GetMarketplaceConfigEvent = 1604; + public static final int RequestHeightmapEvent = 2125; + public static final int TradeCloseEvent = 2967; + public static final int CatalogBuyItemEvent = 2830; + public static final int RequestGuildMembersEvent = 205; + public static final int RequestPetInformationEvent = 2232; + public static final int RoomUserWhisperEvent = 878; + public static final int ModToolRequestUserInfoEvent = 2984; + public static final int RotateMoveItemEvent = 1781; + public static final int CancelPollEvent = 2538; + public static final int RequestRoomLoadEvent = 407; + public static final int RequestGuildPartsEvent = 1670; + public static final int RoomPlacePaintEvent = 728; + public static final int RequestPopularRoomsEvent = 3022; + public static final int ModToolRequestRoomInfoEvent = 182; + public static final int FriendRequestEvent = 3775; + public static final int RecycleEvent = 2920; + public static final int RequestRoomCategoriesEvent = 2506; + public static final int ToggleWallItemEvent = 3396; + public static final int RoomUserTalkEvent = 670; + public static final int HotelViewDataEvent = 3544; public static final int HotelViewRequestBadgeRewardEvent = 2318; public static final int HotelViewClaimBadgeRewardEvent = 2388; - public static final int RoomUserDanceEvent = 645;//1139 - public static final int RequestUserProfileEvent = 3591;//532 - public static final int SearchRoomsFriendsNowEvent = 3281;//3306 - public static final int SetStackHelperHeightEvent = 1248;//2540 - public static final int RedeemVoucherEvent = 489;//1571 - public static final int HorseUseItemEvent = 870;//1616 - public static final int BuyItemEvent = 3699;//3878 - public static final int AdvertisingSaveEvent = 3156;//68 - public static final int RequestPetTrainingPanelEvent = 2088;//2476 - public static final int RoomBackgroundEvent = 1061;//2715 - public static final int RequestNewsListEvent = 3895;//896 - public static final int RequestPromotedRoomsEvent = 1812;//3030 //Updated - public static final int GuildSetAdminEvent = 465;//2957 - public static final int GetClubDataEvent = 715;//1608 - public static final int RequestMeMenuSettingsEvent = 3906;//671 //Updated - public static final int MannequinSaveNameEvent = 2406;//2098 - public static final int SellItemEvent = 0xFF;//172 - public static final int GuildAcceptMembershipEvent = 2259;//1066 //Updated - public static final int RequestBannerToken = -1;//2619 - public static final int RequestRecylerLogicEvent = 3258;//1077 - public static final int RequestGuildJoinEvent = 2615;//77 - public static final int RequestCatalogIndexEvent = 2511;//81 - public static final int RequestInventoryPetsEvent = 263;//1900 - public static final int ModToolRequestRoomVisitsEvent = 730;//2549 - public static final int ModToolWarnEvent = -1;//3763 - public static final int RequestItemInfoEvent = 1203;//36 - public static final int ModToolRequestRoomChatlogEvent = 2312;//1903 - public static final int UserSaveLookEvent = 0x0A00;//2404 - public static final int ToggleFloorItemEvent = 3846;//120 - public static final int TradeUnAcceptEvent = 1153;//1131 - public static final int WiredTriggerSaveDataEvent = 1897;//3201 - public static final int RoomRemoveAllRightsEvent = 1404;//405 - public static final int TakeBackItemEvent = 1862;//2910 - public static final int OpenRecycleBoxEvent = 1515;//3977 - public static final int GuildChangeNameDescEvent = 1062;//3232 - public static final int RequestSellItemEvent = 1647;//2087 - public static final int ModToolChangeRoomSettingsEvent = 3458;//2530 - public static final int ModToolRequestUserChatlogEvent = -1;//203 - public static final int GuildChangeSettingsEvent = 3180;//2156 - public static final int RoomUserDropHandItemEvent = 1751;//157 - public static final int RequestProfileFriendsEvent = 866;//3925 - public static final int TradeCancelOfferItemEvent = 1033;//373 - public static final int TriggerDiceEvent = 1182;//987 - public static final int GetPollDataEvent = 2580;//1960 - public static final int MachineIDEvent = 1471;//512 - public static final int RequestDiscountEvent = 1294;//3794 - public static final int RequestFriendRequestEvent = 2485;//275 - public static final int RoomSettingsSaveEvent = 2074;//2384 - public static final int AcceptFriendRequest = 45;//333 + public static final int RoomUserDanceEvent = 645; + public static final int RequestUserProfileEvent = 3591; + public static final int SearchRoomsFriendsNowEvent = 3281; + public static final int SetStackHelperHeightEvent = 1248; + public static final int RedeemVoucherEvent = 489; + public static final int HorseUseItemEvent = 870; + public static final int BuyItemEvent = 3699; + public static final int AdvertisingSaveEvent = 3156; + public static final int RequestPetTrainingPanelEvent = 2088; + public static final int RoomBackgroundEvent = 1061; + public static final int RequestNewsListEvent = 3895; + public static final int RequestPromotedRoomsEvent = 1812; + public static final int GuildSetAdminEvent = 465; + public static final int GetClubDataEvent = 715; + public static final int RequestMeMenuSettingsEvent = 3906; + public static final int MannequinSaveNameEvent = 2406; + public static final int SellItemEvent = 0xFF; + public static final int GuildAcceptMembershipEvent = 2259; + public static final int RequestBannerToken = -1; + public static final int RequestRecylerLogicEvent = 3258; + public static final int RequestGuildJoinEvent = 2615; + public static final int RequestCatalogIndexEvent = 2511; + public static final int RequestInventoryPetsEvent = 263; + public static final int ModToolRequestRoomVisitsEvent = 730; + public static final int ModToolWarnEvent = -1; + public static final int RequestItemInfoEvent = 1203; + public static final int ModToolRequestRoomChatlogEvent = 2312; + public static final int UserSaveLookEvent = 0x0A00; + public static final int ToggleFloorItemEvent = 3846; + public static final int TradeUnAcceptEvent = 1153; + public static final int WiredTriggerSaveDataEvent = 1897; + public static final int RoomRemoveAllRightsEvent = 1404; + public static final int TakeBackItemEvent = 1862; + public static final int OpenRecycleBoxEvent = 1515; + public static final int GuildChangeNameDescEvent = 1062; + public static final int RequestSellItemEvent = 1647; + public static final int ModToolChangeRoomSettingsEvent = 3458; + public static final int ModToolRequestUserChatlogEvent = -1; + public static final int GuildChangeSettingsEvent = 3180; + public static final int RoomUserDropHandItemEvent = 1751; + public static final int RequestProfileFriendsEvent = 866; + public static final int TradeCancelOfferItemEvent = 1033; + public static final int TriggerDiceEvent = 1182; + public static final int GetPollDataEvent = 2580; + public static final int MachineIDEvent = 1471; + public static final int RequestDiscountEvent = 1294; + public static final int RequestFriendRequestEvent = 2485; + public static final int RoomSettingsSaveEvent = 2074; + public static final int AcceptFriendRequest = 45; public static final int DeclineFriendRequest = 835; - public static final int ReleaseVersionEvent = 4000;//4000 - public static final int SearchRoomsMyFavoriteEvent = 1346;//1532 - public static final int TradeStartEvent = 3313;//466 - public static final int RequestTargetOfferEvent = 3446; //New In Production20160101 - public static final int ClientActionsMessageEvent = 2386; //New In Production20160101 - public static final int UknownMessageEventSomethingSomething = 3895; //New In Production20160101 - public static final int ChangeRelationEvent = 2112;//2521 - public static final int RoomUserSitEvent = 1565;//484 - public static final int RequestCanCreateRoomEvent = 361;//3844 //unsure - public static final int ModToolKickEvent = 3589;//3418 - public static final int MoveWallItemEvent = 609;//1029 - public static final int SearchRoomsEvent = 898;//3551 - public static final int RequestHighestScoreRoomsEvent = 2031;//1728 - public static final int CatalogBuyItemAsGiftEvent = 21;//2474 - public static final int RoomUserGiveRespectEvent = 1955;//2041 - public static final int RemoveFriendEvent = 698;//2786 - public static final int SearchRoomsFriendsOwnEvent = 642;//3478 - public static final int GuildSetFavoriteEvent = 2625;//1463 - public static final int PetPlaceEvent = 223;//3711 - public static final int BotSettingsEvent = 2544;//3098 - public static final int StalkFriendEvent = 2280;//3394 - public static final int RoomPickupItemEvent = 636;//152 - public static final int RedeemItemEvent = 1676;//3599 - public static final int RequestFriendsEvent = 2349;//776 //Updated - public static final int RequestAchievementsEvent = 2931;//2562 - public static final int GuildChangeColorsEvent = 1443;//463 <--- Updated till here. - public static final int RequestInventoryBadgesEvent = 166;//3072 + public static final int ReleaseVersionEvent = 4000; + public static final int SearchRoomsMyFavoriteEvent = 1346; + public static final int TradeStartEvent = 3313; + public static final int RequestTargetOfferEvent = 3446; + public static final int ClientActionsMessageEvent = 2386; + public static final int UknownMessageEventSomethingSomething = 3895; + public static final int ChangeRelationEvent = 2112; + public static final int RoomUserSitEvent = 1565; + public static final int RequestCanCreateRoomEvent = 361; + public static final int ModToolKickEvent = 3589; + public static final int MoveWallItemEvent = 609; + public static final int SearchRoomsEvent = 898; + public static final int RequestHighestScoreRoomsEvent = 2031; + public static final int CatalogBuyItemAsGiftEvent = 21; + public static final int RoomUserGiveRespectEvent = 1955; + public static final int RemoveFriendEvent = 698; + public static final int SearchRoomsFriendsOwnEvent = 642; + public static final int GuildSetFavoriteEvent = 2625; + public static final int PetPlaceEvent = 223; + public static final int BotSettingsEvent = 2544; + public static final int StalkFriendEvent = 2280; + public static final int RoomPickupItemEvent = 636; + public static final int RedeemItemEvent = 1676; + public static final int RequestFriendsEvent = 2349; + public static final int RequestAchievementsEvent = 2931; + public static final int GuildChangeColorsEvent = 1443; + public static final int RequestInventoryBadgesEvent = 166; public static final int TestInventoryEvent = 2740; - public static final int RequestPetBreedsEvent = 2505;//1064 - public static final int GuildChangeBadgeEvent = 2959;//1475 - public static final int ModToolBanEvent = 2595;//2930 - public static final int SaveWardrobeEvent = 55;//637 - public static final int HotelViewEvent = 3576;//3266 - public static final int ModToolPickTicketEvent = 3973;//3975 + public static final int RequestPetBreedsEvent = 2505; + public static final int GuildChangeBadgeEvent = 2959; + public static final int ModToolBanEvent = 2595; + public static final int SaveWardrobeEvent = 55; + public static final int HotelViewEvent = 3576; + public static final int ModToolPickTicketEvent = 3973; public static final int ModToolReleaseTicketEvent = 3800; public static final int ModToolCloseTicketEvent = 50; - public static final int TriggerColorWheelEvent = 2651;//2367 - public static final int SearchRoomsByTagEvent = -1;//1956 - public static final int RequestPublicRoomsEvent = 1336;//3735 OLD 3178 - public static final int RequestResolutionEvent = 542;//1854 - public static final int RequestInventoryItemsEvent = 352;//372 - public static final int ModToolRoomAlertEvent = 781;//295 - public static final int WiredEffectSaveDataEvent = 3431;//3006 - public static final int CheckPetNameEvent = 159;//678 - public static final int SecureLoginEvent = 1778;//1309 //Updated - public static final int BotSaveSettingsEvent = 678;//1384 - public static final int RequestGuildBuyEvent = 2546;//872 - public static final int SearchUserEvent = 3375;//1267 + public static final int TriggerColorWheelEvent = 2651; + public static final int SearchRoomsByTagEvent = -1; + public static final int RequestPublicRoomsEvent = 1336; + public static final int RequestResolutionEvent = 542; + public static final int RequestInventoryItemsEvent = 352; + public static final int ModToolRoomAlertEvent = 781; + public static final int WiredEffectSaveDataEvent = 3431; + public static final int CheckPetNameEvent = 159; + public static final int SecureLoginEvent = 1778; + public static final int BotSaveSettingsEvent = 678; + public static final int RequestGuildBuyEvent = 2546; + public static final int SearchUserEvent = 3375; public static final int GuildConfirmRemoveMemberEvent = 649; - public static final int GuildRemoveMemberEvent = 714;//3002 - public static final int WiredConditionSaveDataEvent = 488;//1041 //3620 incorrect header? - public static final int RoomUserLookAtPoint = 3744;//1365 - public static final int MoodLightTurnOnEvent = 1826;//1181 - public static final int MoodLightSettingsEvent = 3472;//2468 - public static final int RequestMyRoomsEvent = 2955;//2676 - public static final int RequestCreditsEvent = 1207;//2138 - public static final int SearchRoomsInGroupEvent = 2002;//1160 - public static final int HorseRideSettingsEvent = 1993;//2448 + public static final int GuildRemoveMemberEvent = 714; + public static final int WiredConditionSaveDataEvent = 488; + public static final int RoomUserLookAtPoint = 3744; + public static final int MoodLightTurnOnEvent = 1826; + public static final int MoodLightSettingsEvent = 3472; + public static final int RequestMyRoomsEvent = 2955; + public static final int RequestCreditsEvent = 1207; + public static final int SearchRoomsInGroupEvent = 2002; + public static final int HorseRideSettingsEvent = 1993; public static final int HandleDoorbellEvent = 2356; - public static final int RoomUserKickEvent = 3929;//1874 - public static final int RoomPlaceItemEvent = 579;//474 - public static final int RequestInventoryBotsEvent = 363;//1351 - public static final int RequestUserWardrobeEvent = 765;//1251 - public static final int RequestRoomRightsEvent = 2734;//2928 - public static final int RequestGuildBuyRoomsEvent = 468;//701 - public static final int BotPlaceEvent = 2321;//148 //Updated <--- Updated till here - public static final int SearchRoomsWithRightsEvent = 1272;//3785 - public static final int HotelViewRequestBonusRareEvent = 538;//1199 //Updated - public static final int GuildRemoveAdminEvent = 2725;//3264 - public static final int RequestRoomSettingsEvent = 1014;//3741 - public static final int RequestOffersEvent = 442;//541 - public static final int RequestUserCitizinShipEvent = 1605;//3096 - public static final int RoomUserStopTypingEvent = 1114;//2005 - public static final int RoomUserStartTypingEvent = 3362;//3684 - public static final int RequestGuildManageEvent = 2547;//2418 - public static final int RequestUserClubEvent = 12;//3874 //Updated - public static final int PetPickupEvent = 2342;//863 - public static final int RequestOwnGuildsEvent = 3046;//2240 - public static final int SearchRoomsVisitedEvent = 1475;//589 - public static final int TradeOfferItemEvent = 114;//2223 - public static final int TradeConfirmEvent = 2399;//1144 - public static final int RoomUserGiveRightsEvent = 3574;//2221 - public static final int RequestGuildInfoEvent = 3211;//2079 - public static final int ReloadRecyclerEvent = 1715;//2779 //Updated - public static final int RoomUserActionEvent = 3639;//475 - public static final int RequestGiftConfigurationEvent = 1928;//382 - public static final int RequestRoomDataEvent = 1164;//183 //Updated + public static final int RoomUserKickEvent = 3929; + public static final int RoomPlaceItemEvent = 579; + public static final int RequestInventoryBotsEvent = 363; + public static final int RequestUserWardrobeEvent = 765; + public static final int RequestRoomRightsEvent = 2734; + public static final int RequestGuildBuyRoomsEvent = 468; + public static final int BotPlaceEvent = 2321; + public static final int SearchRoomsWithRightsEvent = 1272; + public static final int HotelViewRequestBonusRareEvent = 538; + public static final int GuildRemoveAdminEvent = 2725; + public static final int RequestRoomSettingsEvent = 1014; + public static final int RequestOffersEvent = 442; + public static final int RequestUserCitizinShipEvent = 1605; + public static final int RoomUserStopTypingEvent = 1114; + public static final int RoomUserStartTypingEvent = 3362; + public static final int RequestGuildManageEvent = 2547; + public static final int RequestUserClubEvent = 12; + public static final int PetPickupEvent = 2342; + public static final int RequestOwnGuildsEvent = 3046; + public static final int SearchRoomsVisitedEvent = 1475; + public static final int TradeOfferItemEvent = 114; + public static final int TradeConfirmEvent = 2399; + public static final int RoomUserGiveRightsEvent = 3574; + public static final int RequestGuildInfoEvent = 3211; + public static final int ReloadRecyclerEvent = 1715; + public static final int RoomUserActionEvent = 3639; + public static final int RequestGiftConfigurationEvent = 1928; + public static final int RequestRoomDataEvent = 1164; public static final int RequestRoomHeightmapEvent = 2768; - public static final int RequestGuildFurniWidgetEvent = 41;//3031 - public static final int RequestOwnItemsEvent = 3829;//829 + public static final int RequestGuildFurniWidgetEvent = 41; + public static final int RequestOwnItemsEvent = 3829; public static final int RequestReportRoomEvent = 1839; public static final int ReportEvent = 963; public static final int TriggerOneWayGateEvent = 0x0B00; @@ -200,7 +200,7 @@ public class Incoming_20160101 public static final int FloorPlanEditorRequestBlockedTilesEvent = 24; public static final int UnknownEvent1 = 3672; public static final int RequestTalenTrackEvent = 1284; - public static final int RequestNewNavigatorDataEvent = 882; //Updated + public static final int RequestNewNavigatorDataEvent = 882; public static final int RequestNewNavigatorRoomsEvent = 2722; public static final int RedeemClothingEvent = 818; public static final int NewNavigatorActionEvent = 1874; @@ -215,9 +215,9 @@ public class Incoming_20160101 public static final int RequestClubGiftsEvent = 3302; public static final int RentSpaceEvent = 3486; public static final int RentSpaceCancelEvent = 1314; - public static final int RequestInitFriendsEvent = 2151; //Updated + public static final int RequestInitFriendsEvent = 2151; public static final int RequestCameraConfigurationEvent = 1341; - public static final int PingEvent = 1789; //Updated + public static final int PingEvent = 1789; public static final int FindNewFriendsEvent = 1264; public static final int InviteFriendsEvent = 2694; public static final int GuildRemoveFavoriteEvent = 1412; @@ -244,7 +244,7 @@ public class Incoming_20160101 public static final int JukeBoxEventOne = 1042; public static final int JukeBoxEventTwo = 815; public static final int RoomUserMuteEvent = 2997; - //public static final int JukeBoxEventThree = 3846; + public static final int RequestDeleteRoomEvent = 722; public static final int RequestPromotionRoomsEvent = 3616; public static final int BuyRoomPromotionEvent = 3078; @@ -262,8 +262,8 @@ public class Incoming_20160101 public static final int GuardianNoUpdatesWantedEvent = 1006; public static final int GuardianVoteEvent = 1913; public static final int GuardianAcceptRequestEvent = 3668; - public static final int RequestGameConfigurationsEvent = 2993; //Updated - public static final int RequestAchievementConfigurationEvent = 751; //Updated + public static final int RequestGameConfigurationsEvent = 2993; + public static final int RequestAchievementConfigurationEvent = 751; public static final int RequestReportUserBullyingEvent = 2973; public static final int ReportBullyEvent = 1803; public static final int CameraRoomPictureEvent = 2274; diff --git a/src/main/java/com/eu/habbo/messages/incoming/Incoming_Back.java b/src/main/java/com/eu/habbo/messages/incoming/Incoming_Back.java index 3cd829a1..aece2171 100644 --- a/src/main/java/com/eu/habbo/messages/incoming/Incoming_Back.java +++ b/src/main/java/com/eu/habbo/messages/incoming/Incoming_Back.java @@ -5,7 +5,6 @@ public class Incoming_Back - //public static final int RequestAchievementsEvent = 2562; @@ -31,194 +30,195 @@ public class Incoming_Back - public static final int MannequinSaveLookEvent = 3770;//1804 //Updated - public static final int RequestCatalogPageEvent = 2914;//1754 //Updated - public static final int RequestWearingBadgesEvent = 3466;//3968 //Updated - public static final int BotPickupEvent = 665;//2865 //Updated - public static final int HorseRideEvent = 1027;//3268 //Updated - public static final int RequestCreateRoomEvent = 238;//3524 //Updated - public static final int SaveMottoEvent = 289;//2832 //Updated //1037 - public static final int GenerateSecretKeyEvent = -1;//3575 - public static final int ModToolAlertEvent = 2890;//1980 //Updated - public static final int TradeAcceptEvent = 368;//1062 //Updated - public static final int RequestCatalogModeEvent = 2711;//3406 //Updated - public static final int RequestUserCreditsEvent = 2845;//938 //Updated - public static final int FriendPrivateMessageEvent = 3710;//1527 //Updated - public static final int CloseDiceEvent = 57;//1739 //Updated - public static final int RoomUserRemoveRightsEvent = 1599;//3639 //Updated - public static final int GuildDeclineMembershipEvent = 1328;//1320 //Updated - public static final int AnswerPollEvent = 2135;//1847 //Updated - public static final int UserWearBadgeEvent = 741;//2473 //Updated - public static final int RoomVoteEvent = -242;//242 - public static final int RoomUserSignEvent = 2065;//2189 //Updated - public static final int RequestUserDataEvent = 882;//112 //Updated - public static final int RoomUserShoutEvent = 1788;//936 //Updated - public static final int ScratchPetEvent = 965;//3464 //Updated - public static final int RoomUserWalkEvent = 3690;//951 //Updated - public static final int RequestUserTagsEvent = 3430;//3102 //Updated - public static final int RequestTagsEvent = 753;//1337 //Updated - public static final int GetMarketplaceConfigEvent = 3774;//1952 //Updated - public static final int RequestHeightmapEvent = 859;//308 //Updated - public static final int TradeCloseEvent = 3012;//3387 //Updated - public static final int CatalogBuyItemEvent = 3964;//2967 //Updated - public static final int RequestGuildMembersEvent = 3204;//2382 //Updated - public static final int RequestPetInformationEvent = 2827;//777 //Updated - public static final int RoomUserWhisperEvent = 3908;//1362 //Updated - public static final int ModToolRequestUserInfoEvent = 607;//3077 //Updated - public static final int RotateMoveItemEvent = 1219;//194 //Updated - public static final int CancelPollEvent = 1628;//276 //Updated - public static final int RequestRoomLoadEvent = 1988;//3751 //2086 //2144 //Updated - public static final int RequestGuildPartsEvent = 1902;//2344 //Updated - public static final int RoomPlacePaintEvent = 1892;//874 //Updated - public static final int RequestPopularRoomsEvent = 464;//2346;//235 //Updated - public static final int ModToolRequestRoomInfoEvent = 1450;//225 //Updated - public static final int FriendRequestEvent = 2791;//3765 //Updated - public static final int RecycleEvent = 3277;//2318 //Updated - public static final int RequestRoomCategoriesEvent = 3498;//1431 //Updated - public static final int ToggleWallItemEvent = 3050;//2650 //Updated - public static final int RoomUserTalkEvent = 104;//3349 //Updated - public static final int HotelViewDataEvent = 2507;//595 //Updated //2269 - public static final int RoomUserDanceEvent = 649;//1139 //Updated - public static final int RequestUserProfileEvent = 1389;//532 //Updated - public static final int SearchRoomsFriendsNowEvent = 1082;//3306 //Updated - public static final int SetStackHelperHeightEvent = 2790;//2540 //Updated - public static final int RedeemVoucherEvent = 3024;//1571 //Updated - public static final int HorseUseItemEvent = 2590;//1616 //Updated - public static final int BuyItemEvent = 2847;//3878 //Updated - public static final int AdvertisingSaveEvent = 1829;//68 //Updated - public static final int RequestPetTrainingPanelEvent = 2251;//2476 //Updated - public static final int RoomBackgroundEvent = 2496;//2715 //Updated - public static final int RequestNewsListEvent = 1134;//896 //Updated - public static final int RequestPromotedRoomsEvent = 1558;//3030 //Updated - public static final int GuildSetAdminEvent = 3704;//2957 //Updated - public static final int GetClubDataEvent = 3240;//1608 //Updated - public static final int RequestMeMenuSettingsEvent = 2169;//671 //Updated - public static final int MannequinSaveNameEvent = 1289;//2098 //Updated - public static final int SellItemEvent = 1522;//172 //Updated - public static final int GuildAcceptMembershipEvent = 538;//1066 //Updated - public static final int RequestBannerToken = -1;//2619 - public static final int RequestRecylerLogicEvent = 1170;//1077 //Updated - public static final int RequestGuildJoinEvent = 794;//77 //Updated - public static final int RequestCatalogIndexEvent = 2806;//81 //Updated - public static final int RequestInventoryPetsEvent = 3760;//1900 //Updated - public static final int ModToolRequestRoomVisitsEvent = 2287;//2549 //Updated - public static final int ModToolWarnEvent = 2890;//3763 //Updated - public static final int RequestItemInfoEvent = 2042;//36 //Updated - public static final int ModToolRequestRoomChatlogEvent = 3209;//1903 //Updated - public static final int UserSaveLookEvent = 2242;//2404 //Updated - public static final int ToggleFloorItemEvent = 2693;//120 //Updated - public static final int TradeUnAcceptEvent = 126;//1131 //Updated - public static final int WiredTriggerSaveDataEvent = 3593;//3201 //Updated - public static final int RoomRemoveAllRightsEvent = 3764;//405 //Updated - public static final int TakeBackItemEvent = 1455;//2910 //Updated - public static final int OpenRecycleBoxEvent = 0x0F00;//3977 //Updated - public static final int GuildChangeNameDescEvent = 1485;//3232 //Updated - public static final int RequestSellItemEvent = 876;//2087 //Updated - public static final int ModToolChangeRoomSettingsEvent = 3244;//2530 //Updated - public static final int ModToolRequestUserChatlogEvent = 3209;//203 //Updated - public static final int GuildChangeSettingsEvent = 2258;//2156 //Updated - public static final int RoomUserDropHandItemEvent = 1108;//157 //Updated - public static final int RequestProfileFriendsEvent = 3701;//3925 //Updated - public static final int TradeCancelOfferItemEvent = 2170;//373 //Updated - public static final int TriggerDiceEvent = 386;//987 //Updated - public static final int GetPollDataEvent = 2263;//1960 //Updated - public static final int MachineIDEvent = 686;//512 - public static final int RequestDiscountEvent = 1995;//3794 //Updated - public static final int RequestFriendRequestEvent = 3739;//275 //Updated - public static final int RoomSettingsSaveEvent = 1290;//2384 //Updated - public static final int AcceptFriendRequest = 3383;//333 //Updated - public static final int ReleaseVersionEvent = 4000;//4000 //Updated - public static final int SearchRoomsMyFavoriteEvent = 3124;//1532 //Updated - public static final int TradeStartEvent = 3304;//466 //Updated - public static final int ChangeRelationEvent = 2632;//2521 //Updated - public static final int RoomUserSitEvent = 272;//484 //Updated - public static final int RequestCanCreateRoomEvent = 3903;//3844 //Updated //unsure - public static final int ModToolKickEvent = 1459;//3418 //Updated - public static final int MoveWallItemEvent = 3455;//1029 //Updated - public static final int SearchRoomsEvent = 3844;//3551 //Updated - public static final int RequestHighestScoreRoomsEvent = 1814;//1728 //Updaed - public static final int CatalogBuyItemAsGiftEvent = 1066;//2474 //Updated - public static final int RoomUserGiveRespectEvent = 3121;//2041 //Updated - public static final int RemoveFriendEvent = 1535;//2786 //Updated - public static final int SearchRoomsFriendsOwnEvent = 725;//3478 //Updated - public static final int GuildSetFavoriteEvent = 2754;//1463 //Updated - public static final int PetPlaceEvent = 1961;//3711 //Updated - public static final int BotSettingsEvent = 3292;//3098 //Updated - public static final int StalkFriendEvent = 1925;//3394 //Updated - public static final int RoomPickupItemEvent = 2463;//152 //Updated - public static final int RedeemItemEvent = 1242;//3599 //Updated - public static final int RequestFriendsEvent = 1904;//776 //Updated - public static final int RequestAchievementsEvent = 2697;//2562 //Updated - public static final int GuildChangeColorsEvent = 3873;//463 //Updated - public static final int RequestInventoryBadgesEvent = 2450;//3072 //Updated - public static final int RequestPetBreedsEvent = 2828;//1064 //Updated - public static final int GuildChangeBadgeEvent = 838;//1475 //Updated - public static final int ModToolBanEvent = 701;//2930 //Updated - public static final int SaveWardrobeEvent = 2921;//637 //Updated - public static final int HotelViewEvent = 3603;//3266 //Updated - public static final int ModToolPickTicketEvent = 2980;//3975 //Updated - public static final int ModToolReleaseTicketEvent = 3905; //Updated - public static final int ModToolCloseTicketEvent = 3904; //Updated - public static final int TriggerColorWheelEvent = 2556;//2367 //Updated - public static final int SearchRoomsByTagEvent = 3844;//1956 //Updated - public static final int RequestPublicRoomsEvent = 2057;//3735 //UPDATED OLD 3178 //Updated - public static final int RequestResolutionEvent = 305;//1854 //Updated - public static final int RequestInventoryItemsEvent = 2194;//372 //Updated - public static final int ModToolRoomAlertEvent = 2550;//295 //Updated - public static final int WiredEffectSaveDataEvent = 2856;//3006 //Updated - public static final int CheckPetNameEvent = 3699;//678 //Updated - public static final int SecureLoginEvent = 2243;//1309 //Updated - public static final int BotSaveSettingsEvent = 1607;//1384 //Updated - public static final int RequestGuildBuyEvent = 569;//872 //Updated - public static final int SearchUserEvent = 3576;//1267 //Updated + + public static final int MannequinSaveLookEvent = 3770; + public static final int RequestCatalogPageEvent = 2914; + public static final int RequestWearingBadgesEvent = 3466; + public static final int BotPickupEvent = 665; + public static final int HorseRideEvent = 1027; + public static final int RequestCreateRoomEvent = 238; + public static final int SaveMottoEvent = 289; + public static final int GenerateSecretKeyEvent = -1; + public static final int ModToolAlertEvent = 2890; + public static final int TradeAcceptEvent = 368; + public static final int RequestCatalogModeEvent = 2711; + public static final int RequestUserCreditsEvent = 2845; + public static final int FriendPrivateMessageEvent = 3710; + public static final int CloseDiceEvent = 57; + public static final int RoomUserRemoveRightsEvent = 1599; + public static final int GuildDeclineMembershipEvent = 1328; + public static final int AnswerPollEvent = 2135; + public static final int UserWearBadgeEvent = 741; + public static final int RoomVoteEvent = -242; + public static final int RoomUserSignEvent = 2065; + public static final int RequestUserDataEvent = 882; + public static final int RoomUserShoutEvent = 1788; + public static final int ScratchPetEvent = 965; + public static final int RoomUserWalkEvent = 3690; + public static final int RequestUserTagsEvent = 3430; + public static final int RequestTagsEvent = 753; + public static final int GetMarketplaceConfigEvent = 3774; + public static final int RequestHeightmapEvent = 859; + public static final int TradeCloseEvent = 3012; + public static final int CatalogBuyItemEvent = 3964; + public static final int RequestGuildMembersEvent = 3204; + public static final int RequestPetInformationEvent = 2827; + public static final int RoomUserWhisperEvent = 3908; + public static final int ModToolRequestUserInfoEvent = 607; + public static final int RotateMoveItemEvent = 1219; + public static final int CancelPollEvent = 1628; + public static final int RequestRoomLoadEvent = 1988; + public static final int RequestGuildPartsEvent = 1902; + public static final int RoomPlacePaintEvent = 1892; + public static final int RequestPopularRoomsEvent = 464; + public static final int ModToolRequestRoomInfoEvent = 1450; + public static final int FriendRequestEvent = 2791; + public static final int RecycleEvent = 3277; + public static final int RequestRoomCategoriesEvent = 3498; + public static final int ToggleWallItemEvent = 3050; + public static final int RoomUserTalkEvent = 104; + public static final int HotelViewDataEvent = 2507; + public static final int RoomUserDanceEvent = 649; + public static final int RequestUserProfileEvent = 1389; + public static final int SearchRoomsFriendsNowEvent = 1082; + public static final int SetStackHelperHeightEvent = 2790; + public static final int RedeemVoucherEvent = 3024; + public static final int HorseUseItemEvent = 2590; + public static final int BuyItemEvent = 2847; + public static final int AdvertisingSaveEvent = 1829; + public static final int RequestPetTrainingPanelEvent = 2251; + public static final int RoomBackgroundEvent = 2496; + public static final int RequestNewsListEvent = 1134; + public static final int RequestPromotedRoomsEvent = 1558; + public static final int GuildSetAdminEvent = 3704; + public static final int GetClubDataEvent = 3240; + public static final int RequestMeMenuSettingsEvent = 2169; + public static final int MannequinSaveNameEvent = 1289; + public static final int SellItemEvent = 1522; + public static final int GuildAcceptMembershipEvent = 538; + public static final int RequestBannerToken = -1; + public static final int RequestRecylerLogicEvent = 1170; + public static final int RequestGuildJoinEvent = 794; + public static final int RequestCatalogIndexEvent = 2806; + public static final int RequestInventoryPetsEvent = 3760; + public static final int ModToolRequestRoomVisitsEvent = 2287; + public static final int ModToolWarnEvent = 2890; + public static final int RequestItemInfoEvent = 2042; + public static final int ModToolRequestRoomChatlogEvent = 3209; + public static final int UserSaveLookEvent = 2242; + public static final int ToggleFloorItemEvent = 2693; + public static final int TradeUnAcceptEvent = 126; + public static final int WiredTriggerSaveDataEvent = 3593; + public static final int RoomRemoveAllRightsEvent = 3764; + public static final int TakeBackItemEvent = 1455; + public static final int OpenRecycleBoxEvent = 0x0F00; + public static final int GuildChangeNameDescEvent = 1485; + public static final int RequestSellItemEvent = 876; + public static final int ModToolChangeRoomSettingsEvent = 3244; + public static final int ModToolRequestUserChatlogEvent = 3209; + public static final int GuildChangeSettingsEvent = 2258; + public static final int RoomUserDropHandItemEvent = 1108; + public static final int RequestProfileFriendsEvent = 3701; + public static final int TradeCancelOfferItemEvent = 2170; + public static final int TriggerDiceEvent = 386; + public static final int GetPollDataEvent = 2263; + public static final int MachineIDEvent = 686; + public static final int RequestDiscountEvent = 1995; + public static final int RequestFriendRequestEvent = 3739; + public static final int RoomSettingsSaveEvent = 1290; + public static final int AcceptFriendRequest = 3383; + public static final int ReleaseVersionEvent = 4000; + public static final int SearchRoomsMyFavoriteEvent = 3124; + public static final int TradeStartEvent = 3304; + public static final int ChangeRelationEvent = 2632; + public static final int RoomUserSitEvent = 272; + public static final int RequestCanCreateRoomEvent = 3903; + public static final int ModToolKickEvent = 1459; + public static final int MoveWallItemEvent = 3455; + public static final int SearchRoomsEvent = 3844; + public static final int RequestHighestScoreRoomsEvent = 1814; + public static final int CatalogBuyItemAsGiftEvent = 1066; + public static final int RoomUserGiveRespectEvent = 3121; + public static final int RemoveFriendEvent = 1535; + public static final int SearchRoomsFriendsOwnEvent = 725; + public static final int GuildSetFavoriteEvent = 2754; + public static final int PetPlaceEvent = 1961; + public static final int BotSettingsEvent = 3292; + public static final int StalkFriendEvent = 1925; + public static final int RoomPickupItemEvent = 2463; + public static final int RedeemItemEvent = 1242; + public static final int RequestFriendsEvent = 1904; + public static final int RequestAchievementsEvent = 2697; + public static final int GuildChangeColorsEvent = 3873; + public static final int RequestInventoryBadgesEvent = 2450; + public static final int RequestPetBreedsEvent = 2828; + public static final int GuildChangeBadgeEvent = 838; + public static final int ModToolBanEvent = 701; + public static final int SaveWardrobeEvent = 2921; + public static final int HotelViewEvent = 3603; + public static final int ModToolPickTicketEvent = 2980; + public static final int ModToolReleaseTicketEvent = 3905; + public static final int ModToolCloseTicketEvent = 3904; + public static final int TriggerColorWheelEvent = 2556; + public static final int SearchRoomsByTagEvent = 3844; + public static final int RequestPublicRoomsEvent = 2057; + public static final int RequestResolutionEvent = 305; + public static final int RequestInventoryItemsEvent = 2194; + public static final int ModToolRoomAlertEvent = 2550; + public static final int WiredEffectSaveDataEvent = 2856; + public static final int CheckPetNameEvent = 3699; + public static final int SecureLoginEvent = 2243; + public static final int BotSaveSettingsEvent = 1607; + public static final int RequestGuildBuyEvent = 569; + public static final int SearchUserEvent = 3576; public static final int GuildConfirmRemoveMemberEvent = 3394; - public static final int GuildRemoveMemberEvent = 1764;//3002 //Updated - public static final int WiredConditionSaveDataEvent = 3268;//1041 //Updated - public static final int RoomUserLookAtPoint = 2283;//1365 //Updated - public static final int MoodLightTurnOnEvent = 3924;//1181 //Updated - public static final int MoodLightSettingsEvent = 2821;//2468 //Updated - public static final int RequestMyRoomsEvent = 948;//2676 //Updated - public static final int RequestCreditsEvent = 3896;//2138 //Updated - public static final int SearchRoomsInGroupEvent = 2851;//1160 //Updated - public static final int HorseRideSettingsEvent = 427;//2448 //Updated - public static final int KnockKnockResponseEvent = 853; //Updated - public static final int RoomUserKickEvent = 313;//1874 //Updated - public static final int RoomPlaceItemEvent = 3571;//474 //Updated - public static final int RequestInventoryBotsEvent = 1343;//1351 //Updated - public static final int RequestUserWardrobeEvent = 2976;//1251 //Updated - public static final int RequestRoomRightsEvent = 63;//2928 //Updated - public static final int RequestGuildBuyRoomsEvent = 2945;//701 //Updated - public static final int BotPlaceEvent = 3906;//148 //Updated - public static final int SearchRoomsWithRightsEvent = 1699;//3785 //Updated - public static final int HotelViewRequestBonusRareEvent = 1521;//1199 //Updated - public static final int GuildRemoveAdminEvent = 904;//3264 //Updated - public static final int RequestRoomSettingsEvent = 1794;//3741 //Updated - public static final int RequestOffersEvent = 100;//541 //Updated - public static final int RequestUserCitizinShipEvent = 3556;//3096 //Updated - public static final int RoomUserStopTypingEvent = 1712;//2005 //Updated - public static final int RoomUserStartTypingEvent = 3128;//3684 //Updated - public static final int RequestGuildManageEvent = 3931;//2418 //Updated - public static final int RequestUserClubEvent = 675;//3874 //Updated - public static final int PetPickupEvent = 1294;//863 //Updated - public static final int RequestOwnGuildsEvent = 2690;//2240 //Updated - public static final int SearchRoomsVisitedEvent = 3561;//589 //Updated - public static final int TradeOfferItemEvent = 2090;//2223 //Updated - public static final int TradeConfirmEvent = 1503;//1144 //Updated - public static final int RoomUserGiveRightsEvent = 503;//2221 //Updated - public static final int RequestGuildInfoEvent = 844;//2079 //Updated - public static final int ReloadRecyclerEvent = 3895;//2779 //Updated - public static final int RoomUserActionEvent = 2522;//475 //Updated - public static final int RequestGiftConfigurationEvent = 756;//382 //Updated - public static final int RequestRoomDataEvent = 2022;//183 //Updated - public static final int RequestRoomHeightmapEvent = 3936; //Updated - public static final int RequestGuildFurniWidgetEvent = 54;//3031 //Updated - public static final int RequestOwnItemsEvent = 1816;//829 //Updated - public static final int RequestReportRoomEvent = 2842; //Updated - public static final int ReportEvent = 2073; //Updated - public static final int TriggerOneWayGateEvent = 3752; //Updated - public static final int FloorPlanEditorSaveEvent = 3509; //Updated - public static final int FloorPlanEditorRequestDoorSettingsEvent = 2691; //Updated - public static final int FloorPlanEditorRequestBlockedTilesEvent = 2246; //Updated + public static final int GuildRemoveMemberEvent = 1764; + public static final int WiredConditionSaveDataEvent = 3268; + public static final int RoomUserLookAtPoint = 2283; + public static final int MoodLightTurnOnEvent = 3924; + public static final int MoodLightSettingsEvent = 2821; + public static final int RequestMyRoomsEvent = 948; + public static final int RequestCreditsEvent = 3896; + public static final int SearchRoomsInGroupEvent = 2851; + public static final int HorseRideSettingsEvent = 427; + public static final int KnockKnockResponseEvent = 853; + public static final int RoomUserKickEvent = 313; + public static final int RoomPlaceItemEvent = 3571; + public static final int RequestInventoryBotsEvent = 1343; + public static final int RequestUserWardrobeEvent = 2976; + public static final int RequestRoomRightsEvent = 63; + public static final int RequestGuildBuyRoomsEvent = 2945; + public static final int BotPlaceEvent = 3906; + public static final int SearchRoomsWithRightsEvent = 1699; + public static final int HotelViewRequestBonusRareEvent = 1521; + public static final int GuildRemoveAdminEvent = 904; + public static final int RequestRoomSettingsEvent = 1794; + public static final int RequestOffersEvent = 100; + public static final int RequestUserCitizinShipEvent = 3556; + public static final int RoomUserStopTypingEvent = 1712; + public static final int RoomUserStartTypingEvent = 3128; + public static final int RequestGuildManageEvent = 3931; + public static final int RequestUserClubEvent = 675; + public static final int PetPickupEvent = 1294; + public static final int RequestOwnGuildsEvent = 2690; + public static final int SearchRoomsVisitedEvent = 3561; + public static final int TradeOfferItemEvent = 2090; + public static final int TradeConfirmEvent = 1503; + public static final int RoomUserGiveRightsEvent = 503; + public static final int RequestGuildInfoEvent = 844; + public static final int ReloadRecyclerEvent = 3895; + public static final int RoomUserActionEvent = 2522; + public static final int RequestGiftConfigurationEvent = 756; + public static final int RequestRoomDataEvent = 2022; + public static final int RequestRoomHeightmapEvent = 3936; + public static final int RequestGuildFurniWidgetEvent = 54; + public static final int RequestOwnItemsEvent = 1816; + public static final int RequestReportRoomEvent = 2842; + public static final int ReportEvent = 2073; + public static final int TriggerOneWayGateEvent = 3752; + public static final int FloorPlanEditorSaveEvent = 3509; + public static final int FloorPlanEditorRequestDoorSettingsEvent = 2691; + public static final int FloorPlanEditorRequestBlockedTilesEvent = 2246; public static final int UnknownEvent1 = 3365; public static final int RequestTalenTrackEvent = 1741; public static final int RequestNewNavigatorDataEvent = 1192; diff --git a/src/main/java/com/eu/habbo/messages/incoming/catalog/CatalogBuyItemAsGiftEvent.java b/src/main/java/com/eu/habbo/messages/incoming/catalog/CatalogBuyItemAsGiftEvent.java index 0b960a27..3e8c3b69 100644 --- a/src/main/java/com/eu/habbo/messages/incoming/catalog/CatalogBuyItemAsGiftEvent.java +++ b/src/main/java/com/eu/habbo/messages/incoming/catalog/CatalogBuyItemAsGiftEvent.java @@ -4,6 +4,7 @@ import com.eu.habbo.Emulator; import com.eu.habbo.habbohotel.achievements.AchievementManager; import com.eu.habbo.habbohotel.catalog.CatalogItem; import com.eu.habbo.habbohotel.catalog.CatalogLimitedConfiguration; +import com.eu.habbo.habbohotel.catalog.CatalogManager; import com.eu.habbo.habbohotel.catalog.CatalogPage; import com.eu.habbo.habbohotel.items.FurnitureType; import com.eu.habbo.habbohotel.items.Item; @@ -35,403 +36,416 @@ public class CatalogBuyItemAsGiftEvent extends MessageHandler @Override public void handle() throws Exception { - if (ShutdownEmulator.timestamp > 0) + if (Emulator.getIntUnixTimestamp() - this.client.getHabbo().getHabboStats().lastGiftTimestamp >= CatalogManager.PURCHASE_COOLDOWN) { - this.client.sendResponse(new HotelWillCloseInMinutesComposer((ShutdownEmulator.timestamp - Emulator.getIntUnixTimestamp()) / 60)); - this.client.sendResponse(new AlertPurchaseFailedComposer(AlertPurchaseFailedComposer.SERVER_ERROR).compose()); - return; - } - - int pageId = this.packet.readInt(); - int itemId = this.packet.readInt(); - String extraData = this.packet.readString(); - String username = this.packet.readString(); - String message = this.packet.readString(); - int spriteId = this.packet.readInt(); - int color = this.packet.readInt(); - int ribbonId = this.packet.readInt(); - boolean showName = this.packet.readBoolean(); - - int count = 1; - int userId = 0; - - if(!Emulator.getGameEnvironment().getCatalogManager().giftWrappers.containsKey(spriteId) && !Emulator.getGameEnvironment().getCatalogManager().giftFurnis.containsKey(spriteId)) - { - this.client.sendResponse(new AlertPurchaseFailedComposer(AlertPurchaseFailedComposer.SERVER_ERROR).compose()); - return; - } - - Emulator.getGameEnvironment(); - Emulator.getGameEnvironment().getItemManager(); - - Integer iItemId = Emulator.getGameEnvironment().getCatalogManager().giftWrappers.get(spriteId); - - if(iItemId == null) - iItemId = Emulator.getGameEnvironment().getCatalogManager().giftFurnis.get(spriteId); - - if(iItemId == null) - { - this.client.sendResponse(new AlertPurchaseFailedComposer(AlertPurchaseFailedComposer.SERVER_ERROR).compose()); - return; - } - - Item giftItem = Emulator.getGameEnvironment().getItemManager().getItem(iItemId); - - if(giftItem == null) - { - giftItem = Emulator.getGameEnvironment().getItemManager().getItem((Integer)Emulator.getGameEnvironment().getCatalogManager().giftFurnis.values().toArray()[Emulator.getRandom().nextInt(Emulator.getGameEnvironment().getCatalogManager().giftFurnis.size())]); - - if(giftItem == null) + this.client.getHabbo().getHabboStats().lastGiftTimestamp = Emulator.getIntUnixTimestamp(); + if (ShutdownEmulator.timestamp > 0) { + this.client.sendResponse(new HotelWillCloseInMinutesComposer((ShutdownEmulator.timestamp - Emulator.getIntUnixTimestamp()) / 60)); this.client.sendResponse(new AlertPurchaseFailedComposer(AlertPurchaseFailedComposer.SERVER_ERROR).compose()); return; } - } - try (Connection connection = Emulator.getDatabase().getDataSource().getConnection()) - { - Habbo habbo = Emulator.getGameEnvironment().getHabboManager().getHabbo(username); - - if(habbo == null) + if (this.client.getHabbo().getHabboStats().isPurchasingFurniture) { - try (PreparedStatement statement = connection.prepareStatement("SELECT id FROM users WHERE username = ?")) - { - statement.setString(1, username); + this.client.sendResponse(new AlertPurchaseFailedComposer(AlertPurchaseFailedComposer.SERVER_ERROR).compose()); + return; + } else + { + this.client.getHabbo().getHabboStats().isPurchasingFurniture = true; + } - try (ResultSet set = statement.executeQuery()) + try + { + + int pageId = this.packet.readInt(); + int itemId = this.packet.readInt(); + String extraData = this.packet.readString(); + String username = this.packet.readString(); + String message = this.packet.readString(); + int spriteId = this.packet.readInt(); + int color = this.packet.readInt(); + int ribbonId = this.packet.readInt(); + boolean showName = this.packet.readBoolean(); + + int count = 1; + int userId = 0; + + if (!Emulator.getGameEnvironment().getCatalogManager().giftWrappers.containsKey(spriteId) && !Emulator.getGameEnvironment().getCatalogManager().giftFurnis.containsKey(spriteId)) + { + this.client.sendResponse(new AlertPurchaseFailedComposer(AlertPurchaseFailedComposer.SERVER_ERROR).compose()); + return; + } + + Emulator.getGameEnvironment(); + Emulator.getGameEnvironment().getItemManager(); + + Integer iItemId = Emulator.getGameEnvironment().getCatalogManager().giftWrappers.get(spriteId); + + if (iItemId == null) + iItemId = Emulator.getGameEnvironment().getCatalogManager().giftFurnis.get(spriteId); + + if (iItemId == null) + { + this.client.sendResponse(new AlertPurchaseFailedComposer(AlertPurchaseFailedComposer.SERVER_ERROR).compose()); + return; + } + + Item giftItem = Emulator.getGameEnvironment().getItemManager().getItem(iItemId); + + if (giftItem == null) + { + giftItem = Emulator.getGameEnvironment().getItemManager().getItem((Integer) Emulator.getGameEnvironment().getCatalogManager().giftFurnis.values().toArray()[Emulator.getRandom().nextInt(Emulator.getGameEnvironment().getCatalogManager().giftFurnis.size())]); + + if (giftItem == null) { - if (set.next()) - { - userId = set.getInt(1); - } + this.client.sendResponse(new AlertPurchaseFailedComposer(AlertPurchaseFailedComposer.SERVER_ERROR).compose()); + return; } } - catch (SQLException e) + + try (Connection connection = Emulator.getDatabase().getDataSource().getConnection()) { - Emulator.getLogging().logSQLException(e); - } - } - else - { - userId = habbo.getHabboInfo().getId(); - } + Habbo habbo = Emulator.getGameEnvironment().getHabboManager().getHabbo(username); - if(userId == 0) - { - this.client.sendResponse(new GiftReceiverNotFoundComposer()); - return; - } - - CatalogPage page = Emulator.getGameEnvironment().getCatalogManager().catalogPages.get(pageId); - - if(page == null) - { - this.client.sendResponse(new AlertPurchaseFailedComposer(AlertPurchaseFailedComposer.SERVER_ERROR).compose()); - return; - } - - if(page.getRank() > this.client.getHabbo().getHabboInfo().getRank().getId() || !page.isEnabled() || !page.isVisible()) - { - this.client.sendResponse(new AlertPurchaseUnavailableComposer(AlertPurchaseUnavailableComposer.ILLEGAL)); - return; - } - - CatalogItem item = page.getCatalogItem(itemId); - - Item cBaseItem = null; - - if(item == null) - { - this.client.sendResponse(new AlertPurchaseFailedComposer(AlertPurchaseFailedComposer.SERVER_ERROR).compose()); - return; - } - - if(item.isClubOnly() && !this.client.getHabbo().getHabboStats().hasActiveClub()) - { - this.client.sendResponse(new AlertPurchaseUnavailableComposer(AlertPurchaseUnavailableComposer.REQUIRES_CLUB)); - return; - } - - for(Item baseItem : item.getBaseItems()) - { - if(!baseItem.allowGift()) - { - this.client.sendResponse(new AlertPurchaseUnavailableComposer(AlertPurchaseUnavailableComposer.ILLEGAL)); - return; - } - } - - if (item.isLimited()) - { - if (item.getLimitedStack() == item.getLimitedSells()) - { - this.client.sendResponse(new AlertLimitedSoldOutComposer()); - return; - } - item.sellRare(); - } - - int totalCredits = 0; - int totalPoints = 0; - - CatalogLimitedConfiguration limitedConfiguration = null; - int limitedStack = 0; - int limitedNumber = 0; - if (item.isLimited()) - { - count = 1; - if (Emulator.getGameEnvironment().getCatalogManager().getLimitedConfig(item).available() == 0) - { - habbo.getClient().sendResponse(new AlertLimitedSoldOutComposer()); - return; - } - - limitedConfiguration = Emulator.getGameEnvironment().getCatalogManager().getLimitedConfig(item); - - if (limitedConfiguration == null) - { - limitedConfiguration = Emulator.getGameEnvironment().getCatalogManager().createOrUpdateLimitedConfig(item); - } - - limitedNumber = limitedConfiguration.getNumber(); - limitedStack = limitedConfiguration.getTotalSet(); - } - - THashSet itemsList = new THashSet<>(); - - boolean badgeFound = false; - for (Item baseItem : item.getBaseItems()) - { - if (baseItem.getType() == FurnitureType.BADGE) - { - if (habbo != null) + if (habbo == null) { - if(habbo.getInventory().getBadgesComponent().hasBadge(baseItem.getName())) + try (PreparedStatement statement = connection.prepareStatement("SELECT id FROM users WHERE username = ?")) { - badgeFound = true; - } - } - else - { - int c = 0; - try (PreparedStatement statement = connection.prepareStatement("SELECT COUNT(*) as c FROM users_badges WHERE user_id = ? AND badge_code LIKE ?")) - { - statement.setInt(1, userId); - statement.setString(2, baseItem.getName()); - try (ResultSet rSet = statement.executeQuery()) + statement.setString(1, username); + + try (ResultSet set = statement.executeQuery()) { - if (rSet.next()) + if (set.next()) { - c = rSet.getInt("c"); + userId = set.getInt(1); + } + } + } catch (SQLException e) + { + Emulator.getLogging().logSQLException(e); + } + } else + { + userId = habbo.getHabboInfo().getId(); + } + + if (userId == 0) + { + this.client.sendResponse(new GiftReceiverNotFoundComposer()); + return; + } + + CatalogPage page = Emulator.getGameEnvironment().getCatalogManager().catalogPages.get(pageId); + + if (page == null) + { + this.client.sendResponse(new AlertPurchaseFailedComposer(AlertPurchaseFailedComposer.SERVER_ERROR).compose()); + return; + } + + if (page.getRank() > this.client.getHabbo().getHabboInfo().getRank().getId() || !page.isEnabled() || !page.isVisible()) + { + this.client.sendResponse(new AlertPurchaseUnavailableComposer(AlertPurchaseUnavailableComposer.ILLEGAL)); + return; + } + + CatalogItem item = page.getCatalogItem(itemId); + + Item cBaseItem = null; + + if (item == null) + { + this.client.sendResponse(new AlertPurchaseFailedComposer(AlertPurchaseFailedComposer.SERVER_ERROR).compose()); + return; + } + + if (item.isClubOnly() && !this.client.getHabbo().getHabboStats().hasActiveClub()) + { + this.client.sendResponse(new AlertPurchaseUnavailableComposer(AlertPurchaseUnavailableComposer.REQUIRES_CLUB)); + return; + } + + for (Item baseItem : item.getBaseItems()) + { + if (!baseItem.allowGift()) + { + this.client.sendResponse(new AlertPurchaseUnavailableComposer(AlertPurchaseUnavailableComposer.ILLEGAL)); + return; + } + } + + if (item.isLimited()) + { + if (item.getLimitedStack() == item.getLimitedSells()) + { + this.client.sendResponse(new AlertLimitedSoldOutComposer()); + return; + } + item.sellRare(); + } + + int totalCredits = 0; + int totalPoints = 0; + + CatalogLimitedConfiguration limitedConfiguration = null; + int limitedStack = 0; + int limitedNumber = 0; + if (item.isLimited()) + { + count = 1; + if (Emulator.getGameEnvironment().getCatalogManager().getLimitedConfig(item).available() == 0) + { + habbo.getClient().sendResponse(new AlertLimitedSoldOutComposer()); + return; + } + + limitedConfiguration = Emulator.getGameEnvironment().getCatalogManager().getLimitedConfig(item); + + if (limitedConfiguration == null) + { + limitedConfiguration = Emulator.getGameEnvironment().getCatalogManager().createOrUpdateLimitedConfig(item); + } + + limitedNumber = limitedConfiguration.getNumber(); + limitedStack = limitedConfiguration.getTotalSet(); + } + + THashSet itemsList = new THashSet<>(); + + boolean badgeFound = false; + for (Item baseItem : item.getBaseItems()) + { + if (baseItem.getType() == FurnitureType.BADGE) + { + if (habbo != null) + { + if (habbo.getInventory().getBadgesComponent().hasBadge(baseItem.getName())) + { + badgeFound = true; + } + } else + { + int c = 0; + try (PreparedStatement statement = connection.prepareStatement("SELECT COUNT(*) as c FROM users_badges WHERE user_id = ? AND badge_code LIKE ?")) + { + statement.setInt(1, userId); + statement.setString(2, baseItem.getName()); + try (ResultSet rSet = statement.executeQuery()) + { + if (rSet.next()) + { + c = rSet.getInt("c"); + } + } + } + + if (c != 0) + { + badgeFound = true; } } } - - if (c != 0) - { - badgeFound = true; - } } - } - } - if (badgeFound) - { - this.client.sendResponse(new AlertPurchaseFailedComposer(AlertPurchaseFailedComposer.ALREADY_HAVE_BADGE)); - return; - } + if (badgeFound) + { + this.client.sendResponse(new AlertPurchaseFailedComposer(AlertPurchaseFailedComposer.ALREADY_HAVE_BADGE)); + return; + } - for(int i = 0; i < count; i++) - { - if (item.getCredits() <= this.client.getHabbo().getHabboInfo().getCredits() - totalCredits) - { - if( - item.getPoints() <= this.client.getHabbo().getHabboInfo().getCurrencyAmount(item.getPointsType()) - totalPoints) + for (int i = 0; i < count; i++) + { + if (item.getCredits() <= this.client.getHabbo().getHabboInfo().getCredits() - totalCredits) + { + if ( + item.getPoints() <= this.client.getHabbo().getHabboInfo().getCurrencyAmount(item.getPointsType()) - totalPoints) //item.getPointsType() == 0 && item.getPoints() <= this.client.getHabbo().getHabboInfo().getPixels() - totalPoints || - { - if (((i + 1) % 6 != 0 && CatalogItem.haveOffer(item)) || !CatalogItem.haveOffer(item)) - { - totalCredits += item.getCredits(); - totalPoints += item.getPoints(); - } - - for (int j = 0; j < item.getAmount(); j++) - { - if (item.getAmount() > 1 || item.getBaseItems().size() > 1) { - this.client.sendResponse(new AlertPurchaseFailedComposer(AlertPurchaseFailedComposer.SERVER_ERROR).compose()); - return; - } - for (Item baseItem : item.getBaseItems()) - { - if (item.getItemAmount(baseItem.getId()) > 1) + if (((i + 1) % 6 != 0 && CatalogItem.haveOffer(item)) || !CatalogItem.haveOffer(item)) { - this.client.sendResponse(new AlertPurchaseFailedComposer(AlertPurchaseFailedComposer.SERVER_ERROR).compose()); - return; + totalCredits += item.getCredits(); + totalPoints += item.getPoints(); } - for(int k = 0; k < item.getItemAmount(baseItem.getId()); k++) + for (int j = 0; j < item.getAmount(); j++) { - cBaseItem = baseItem; - if (!baseItem.getName().contains("avatar_effect")) + if (item.getAmount() > 1 || item.getBaseItems().size() > 1) { - if (baseItem.getType() == FurnitureType.BADGE) + this.client.sendResponse(new AlertPurchaseFailedComposer(AlertPurchaseFailedComposer.SERVER_ERROR).compose()); + return; + } + for (Item baseItem : item.getBaseItems()) + { + if (item.getItemAmount(baseItem.getId()) > 1) { - if (!badgeFound) + this.client.sendResponse(new AlertPurchaseFailedComposer(AlertPurchaseFailedComposer.SERVER_ERROR).compose()); + return; + } + + for (int k = 0; k < item.getItemAmount(baseItem.getId()); k++) + { + cBaseItem = baseItem; + if (!baseItem.getName().contains("avatar_effect")) { - if (habbo != null) + if (baseItem.getType() == FurnitureType.BADGE) { - HabboBadge badge = new HabboBadge(0, baseItem.getName(), 0, habbo); - Emulator.getThreading().run(badge); - habbo.getInventory().getBadgesComponent().addBadge(badge); - } - else - { - try (PreparedStatement statement = connection.prepareStatement("INSERT INTO users_badges (user_id, badge_code) VALUES (?, ?)")) + if (!badgeFound) { - statement.setInt(1, userId); - statement.setString(2, baseItem.getName()); - statement.execute(); + if (habbo != null) + { + HabboBadge badge = new HabboBadge(0, baseItem.getName(), 0, habbo); + Emulator.getThreading().run(badge); + habbo.getInventory().getBadgesComponent().addBadge(badge); + } else + { + try (PreparedStatement statement = connection.prepareStatement("INSERT INTO users_badges (user_id, badge_code) VALUES (?, ?)")) + { + statement.setInt(1, userId); + statement.setString(2, baseItem.getName()); + statement.execute(); + } + } + + badgeFound = true; + } + } else if (item.getName().startsWith("rentable_bot_")) + { + this.client.sendResponse(new AlertPurchaseFailedComposer(AlertPurchaseFailedComposer.SERVER_ERROR).compose()); + return; + } else if (Item.isPet(baseItem)) + { + this.client.sendResponse(new AlertPurchaseFailedComposer(AlertPurchaseFailedComposer.SERVER_ERROR).compose()); + return; + } else + { + if (baseItem.getInteractionType().getType() == InteractionTrophy.class || baseItem.getInteractionType().getType() == InteractionBadgeDisplay.class) + { + extraData = this.client.getHabbo().getHabboInfo().getUsername() + (char) 9 + Calendar.getInstance().get(Calendar.DAY_OF_MONTH) + "-" + (Calendar.getInstance().get(Calendar.MONTH) + 1) + "-" + Calendar.getInstance().get(Calendar.YEAR) + (char) 9 + extraData; + } + + if (baseItem.getInteractionType().getType() == InteractionTeleport.class || baseItem.getInteractionType().getType() == InteractionTeleportTile.class) + { + HabboItem teleportOne = Emulator.getGameEnvironment().getItemManager().createItem(0, baseItem, limitedStack, limitedNumber, extraData); + HabboItem teleportTwo = Emulator.getGameEnvironment().getItemManager().createItem(0, baseItem, limitedStack, limitedNumber, extraData); + Emulator.getGameEnvironment().getItemManager().insertTeleportPair(teleportOne.getId(), teleportTwo.getId()); + itemsList.add(teleportOne); + itemsList.add(teleportTwo); + } else if (baseItem.getInteractionType().getType() == InteractionHopper.class) + { + HabboItem hopper = Emulator.getGameEnvironment().getItemManager().createItem(0, baseItem, limitedNumber, limitedNumber, extraData); + + Emulator.getGameEnvironment().getItemManager().insertHopper(hopper); + + itemsList.add(hopper); + } else if (baseItem.getInteractionType().getType() == InteractionGuildFurni.class || baseItem.getInteractionType().getType() == InteractionGuildGate.class) + { + InteractionGuildFurni habboItem = (InteractionGuildFurni) Emulator.getGameEnvironment().getItemManager().createItem(0, baseItem, limitedStack, limitedNumber, extraData); + habboItem.setExtradata(""); + habboItem.needsUpdate(true); + int guildId; + try + { + guildId = Integer.parseInt(extraData); + } catch (Exception e) + { + Emulator.getLogging().logErrorLine(e); + this.client.sendResponse(new AlertPurchaseFailedComposer(AlertPurchaseFailedComposer.SERVER_ERROR)); + return; + } + Emulator.getThreading().run(habboItem); + Emulator.getGameEnvironment().getGuildManager().setGuild(habboItem, guildId); + itemsList.add(habboItem); + } else + { + HabboItem habboItem = Emulator.getGameEnvironment().getItemManager().createItem(0, baseItem, limitedStack, limitedNumber, extraData); + itemsList.add(habboItem); } } - - badgeFound = true; + } else + { + this.client.sendResponse(new AlertPurchaseFailedComposer(AlertPurchaseFailedComposer.SERVER_ERROR)); + this.client.sendResponse(new GenericAlertComposer(Emulator.getTexts().getValue("error.catalog.buy.not_yet"))); + return; } } - else if(item.getName().startsWith("rentable_bot_")) - { - this.client.sendResponse(new AlertPurchaseFailedComposer(AlertPurchaseFailedComposer.SERVER_ERROR).compose()); - return; - } - else if(Item.isPet(baseItem)) - { - this.client.sendResponse(new AlertPurchaseFailedComposer(AlertPurchaseFailedComposer.SERVER_ERROR).compose()); - return; - } - else - { - if (baseItem.getInteractionType().getType() == InteractionTrophy.class || baseItem.getInteractionType().getType() == InteractionBadgeDisplay.class) - { - extraData = this.client.getHabbo().getHabboInfo().getUsername() + (char) 9 + Calendar.getInstance().get(Calendar.DAY_OF_MONTH) + "-" + (Calendar.getInstance().get(Calendar.MONTH) + 1) + "-" + Calendar.getInstance().get(Calendar.YEAR) + (char) 9 + extraData; - } - - if (baseItem.getInteractionType().getType() == InteractionTeleport.class || baseItem.getInteractionType().getType() == InteractionTeleportTile.class) - { - HabboItem teleportOne = Emulator.getGameEnvironment().getItemManager().createItem(0, baseItem, limitedStack, limitedNumber, extraData); - HabboItem teleportTwo = Emulator.getGameEnvironment().getItemManager().createItem(0, baseItem, limitedStack, limitedNumber, extraData); - Emulator.getGameEnvironment().getItemManager().insertTeleportPair(teleportOne.getId(), teleportTwo.getId()); - itemsList.add(teleportOne); - itemsList.add(teleportTwo); - } - else if(baseItem.getInteractionType().getType() == InteractionHopper.class) - { - HabboItem hopper = Emulator.getGameEnvironment().getItemManager().createItem(0, baseItem, limitedNumber, limitedNumber, extraData); - - Emulator.getGameEnvironment().getItemManager().insertHopper(hopper); - - itemsList.add(hopper); - } - else if(baseItem.getInteractionType().getType() == InteractionGuildFurni.class || baseItem.getInteractionType().getType() == InteractionGuildGate.class) - { - InteractionGuildFurni habboItem = (InteractionGuildFurni)Emulator.getGameEnvironment().getItemManager().createItem(0, baseItem, limitedStack, limitedNumber, extraData); - habboItem.setExtradata(""); - habboItem.needsUpdate(true); - int guildId; - try - { - guildId = Integer.parseInt(extraData); - } - catch (Exception e) - { - Emulator.getLogging().logErrorLine(e); - this.client.sendResponse(new AlertPurchaseFailedComposer(AlertPurchaseFailedComposer.SERVER_ERROR)); - return; - } - Emulator.getThreading().run(habboItem); - Emulator.getGameEnvironment().getGuildManager().setGuild(habboItem, guildId); - itemsList.add(habboItem); - } - else - { - HabboItem habboItem = Emulator.getGameEnvironment().getItemManager().createItem(0, baseItem, limitedStack, limitedNumber, extraData); - itemsList.add(habboItem); - } - } - } - else - { - this.client.sendResponse(new AlertPurchaseFailedComposer(AlertPurchaseFailedComposer.SERVER_ERROR)); - this.client.sendResponse(new GenericAlertComposer(Emulator.getTexts().getValue("error.catalog.buy.not_yet"))); - return; } } } } } - } - } - String giftData = itemsList.size() + "\t"; + String giftData = itemsList.size() + "\t"; - for(HabboItem i : itemsList) - { - giftData += i.getId() + "\t"; - } + for (HabboItem i : itemsList) + { + giftData += i.getId() + "\t"; + } - giftData += color + "\t" + ribbonId + "\t" + (showName ? "1" : "0") + "\t" + (message.replace("\t", "")) + "\t" + this.client.getHabbo().getHabboInfo().getUsername() + "\t" + this.client.getHabbo().getHabboInfo().getLook(); + giftData += color + "\t" + ribbonId + "\t" + (showName ? "1" : "0") + "\t" + (message.replace("\t", "")) + "\t" + this.client.getHabbo().getHabboInfo().getUsername() + "\t" + this.client.getHabbo().getHabboInfo().getLook(); - HabboItem gift = Emulator.getGameEnvironment().getItemManager().createGift(username, giftItem, giftData, 0, 0); + HabboItem gift = Emulator.getGameEnvironment().getItemManager().createGift(username, giftItem, giftData, 0, 0); - if(gift == null) - { - this.client.sendResponse(new AlertPurchaseFailedComposer(AlertPurchaseFailedComposer.SERVER_ERROR)); - return; - } + if (gift == null) + { + this.client.sendResponse(new AlertPurchaseFailedComposer(AlertPurchaseFailedComposer.SERVER_ERROR)); + return; + } - AchievementManager.progressAchievement(this.client.getHabbo(), Emulator.getGameEnvironment().getAchievementManager().getAchievement("GiftGiver")); - if(habbo != null) - { - habbo.getClient().sendResponse(new AddHabboItemComposer(gift)); - habbo.getClient().getHabbo().getInventory().getItemsComponent().addItem(gift); - habbo.getClient().sendResponse(new InventoryRefreshComposer()); - THashMap keys = new THashMap<>(); - keys.put("display", "BUBBLE"); - keys.put("image", "${image.library.url}notifications/gift.gif"); - keys.put("message", Emulator.getTexts().getValue("generic.gift.received.anonymous")); - if (showName) + AchievementManager.progressAchievement(this.client.getHabbo(), Emulator.getGameEnvironment().getAchievementManager().getAchievement("GiftGiver")); + if (habbo != null) + { + habbo.getClient().sendResponse(new AddHabboItemComposer(gift)); + habbo.getClient().getHabbo().getInventory().getItemsComponent().addItem(gift); + habbo.getClient().sendResponse(new InventoryRefreshComposer()); + THashMap keys = new THashMap<>(); + keys.put("display", "BUBBLE"); + keys.put("image", "${image.library.url}notifications/gift.gif"); + keys.put("message", Emulator.getTexts().getValue("generic.gift.received.anonymous")); + if (showName) + { + keys.put("message", Emulator.getTexts().getValue("generic.gift.received").replace("%username%", this.client.getHabbo().getHabboInfo().getUsername())); + } + habbo.getClient().sendResponse(new BubbleAlertComposer(BubbleAlertKeys.RECEIVED_BADGE.key, keys)); + } + + AchievementManager.progressAchievement(userId, Emulator.getGameEnvironment().getAchievementManager().getAchievement("GiftReceiver")); + + if (!this.client.getHabbo().hasPermission("acc_infinite_credits")) + { + if (totalCredits > 0) + { + this.client.getHabbo().giveCredits(-totalCredits); + } + } + if (totalPoints > 0) + { + if (item.getPointsType() == 0 && !this.client.getHabbo().hasPermission("acc_infinite_pixels")) + { + this.client.getHabbo().getHabboInfo().addPixels(-totalPoints); + } else if (!this.client.getHabbo().hasPermission("acc_infinite_points")) + { + this.client.getHabbo().getHabboInfo().addCurrencyAmount(item.getPointsType(), -totalPoints); + } + this.client.sendResponse(new UserPointsComposer(this.client.getHabbo().getHabboInfo().getCurrencyAmount(item.getPointsType()), -totalPoints, item.getPointsType())); + } + + this.client.sendResponse(new PurchaseOKComposer(item)); + } catch (Exception e) { - keys.put("message", Emulator.getTexts().getValue("generic.gift.received").replace("%username%", this.client.getHabbo().getHabboInfo().getUsername())); + Emulator.getLogging().logPacketError(e); + this.client.sendResponse(new AlertPurchaseFailedComposer(AlertPurchaseFailedComposer.SERVER_ERROR)); + return; } - habbo.getClient().sendResponse(new BubbleAlertComposer(BubbleAlertKeys.RECEIVED_BADGE.key, keys)); - } - - AchievementManager.progressAchievement(userId, Emulator.getGameEnvironment().getAchievementManager().getAchievement("GiftReceiver")); - - if(!this.client.getHabbo().hasPermission("acc_infinite_credits")) + } finally { - if (totalCredits > 0) - { - this.client.getHabbo().giveCredits(-totalCredits); - } + this.client.getHabbo().getHabboStats().isPurchasingFurniture = false; } - if(totalPoints > 0) - { - if(item.getPointsType() == 0 && !this.client.getHabbo().hasPermission("acc_infinite_pixels")) { - this.client.getHabbo().getHabboInfo().addPixels(-totalPoints); - }else if(!this.client.getHabbo().hasPermission("acc_infinite_points")) { - this.client.getHabbo().getHabboInfo().addCurrencyAmount(item.getPointsType(), -totalPoints); - } - this.client.sendResponse(new UserPointsComposer(this.client.getHabbo().getHabboInfo().getCurrencyAmount(item.getPointsType()), -totalPoints, item.getPointsType())); - } - - this.client.sendResponse(new PurchaseOKComposer(item)); } - catch(Exception e) + else { - Emulator.getLogging().logPacketError(e); this.client.sendResponse(new AlertPurchaseFailedComposer(AlertPurchaseFailedComposer.SERVER_ERROR)); - return; } } } 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 2f9a9c9b..191835e9 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 @@ -2,6 +2,7 @@ package com.eu.habbo.messages.incoming.catalog; import com.eu.habbo.Emulator; import com.eu.habbo.habbohotel.catalog.CatalogItem; +import com.eu.habbo.habbohotel.catalog.CatalogManager; import com.eu.habbo.habbohotel.catalog.CatalogPage; import com.eu.habbo.habbohotel.catalog.ClubOffer; import com.eu.habbo.habbohotel.catalog.layouts.ClubBuyLayout; @@ -30,213 +31,198 @@ public class CatalogBuyItemEvent extends MessageHandler @Override public void handle() throws Exception { - if (ShutdownEmulator.timestamp > 0) + if (Emulator.getIntUnixTimestamp() - this.client.getHabbo().getHabboStats().lastPurchaseTimestamp >= CatalogManager.PURCHASE_COOLDOWN) { - this.client.sendResponse(new HotelWillCloseInMinutesComposer((ShutdownEmulator.timestamp - Emulator.getIntUnixTimestamp()) / 60)); - return; - } - - int pageId = this.packet.readInt(); - int itemId = this.packet.readInt(); - String extraData = this.packet.readString(); - int count = this.packet.readInt(); - - try - { - if (this.client.getHabbo().getInventory().getItemsComponent().itemCount() > HabboInventory.MAXIMUM_ITEMS) + this.client.getHabbo().getHabboStats().lastPurchaseTimestamp = Emulator.getIntUnixTimestamp(); + if (ShutdownEmulator.timestamp > 0) { - this.client.sendResponse(new AlertPurchaseFailedComposer(AlertPurchaseFailedComposer.SERVER_ERROR).compose()); - this.client.sendResponse(new GenericAlertComposer(Emulator.getTexts().getValue("inventory.full"))); + this.client.sendResponse(new HotelWillCloseInMinutesComposer((ShutdownEmulator.timestamp - Emulator.getIntUnixTimestamp()) / 60)); return; } - } - catch (Exception e) - { - this.client.sendResponse(new AlertPurchaseFailedComposer(AlertPurchaseFailedComposer.SERVER_ERROR).compose()); - } - CatalogPage page = null; + int pageId = this.packet.readInt(); + int itemId = this.packet.readInt(); + String extraData = this.packet.readString(); + int count = this.packet.readInt(); - if(pageId == -12345678 || pageId == -1) - { - CatalogItem searchedItem = Emulator.getGameEnvironment().getCatalogManager().getCatalogItem(itemId); - - if (searchedItem.getOfferId() > 0) + try { - page = Emulator.getGameEnvironment().getCatalogManager().getCatalogPage(searchedItem.getPageId()); - - if (page.getCatalogItem(itemId).getOfferId() <= 0) + if (this.client.getHabbo().getInventory().getItemsComponent().itemCount() > HabboInventory.MAXIMUM_ITEMS) { - page = null; + this.client.sendResponse(new AlertPurchaseFailedComposer(AlertPurchaseFailedComposer.SERVER_ERROR).compose()); + this.client.sendResponse(new GenericAlertComposer(Emulator.getTexts().getValue("inventory.full"))); + return; } - else + } catch (Exception e) + { + this.client.sendResponse(new AlertPurchaseFailedComposer(AlertPurchaseFailedComposer.SERVER_ERROR).compose()); + } + + CatalogPage page = null; + + if (pageId == -12345678 || pageId == -1) + { + CatalogItem searchedItem = Emulator.getGameEnvironment().getCatalogManager().getCatalogItem(itemId); + + if (searchedItem.getOfferId() > 0) { - if (page.getRank() > this.client.getHabbo().getHabboInfo().getRank().getId()) + page = Emulator.getGameEnvironment().getCatalogManager().getCatalogPage(searchedItem.getPageId()); + + if (page.getCatalogItem(itemId).getOfferId() <= 0) { page = null; + } else + { + if (page.getRank() > this.client.getHabbo().getHabboInfo().getRank().getId()) + { + page = null; + } } } - } - - - - - - - - - - - - - - - - - - - - } - else - { - page = Emulator.getGameEnvironment().getCatalogManager().catalogPages.get(pageId); - - if(page instanceof RoomBundleLayout) + } else { - final CatalogItem[] item = new CatalogItem[1]; - page.getCatalogItems().forEachValue(new TObjectProcedure() - { - @Override - public boolean execute(CatalogItem object) - { - item[0] = object; - return false; - } - }); + page = Emulator.getGameEnvironment().getCatalogManager().catalogPages.get(pageId); - if(item[0] == null || item[0].getCredits() > this.client.getHabbo().getHabboInfo().getCredits() || item[0].getPoints() > this.client.getHabbo().getHabboInfo().getCurrencyAmount(item[0].getPointsType())) + if (page instanceof RoomBundleLayout) { - this.client.sendResponse(new AlertPurchaseFailedComposer(AlertPurchaseFailedComposer.SERVER_ERROR)); + final CatalogItem[] item = new CatalogItem[1]; + page.getCatalogItems().forEachValue(new TObjectProcedure() + { + @Override + public boolean execute(CatalogItem object) + { + item[0] = object; + return false; + } + }); + + if (item[0] == null || item[0].getCredits() > this.client.getHabbo().getHabboInfo().getCredits() || item[0].getPoints() > this.client.getHabbo().getHabboInfo().getCurrencyAmount(item[0].getPointsType())) + { + this.client.sendResponse(new AlertPurchaseFailedComposer(AlertPurchaseFailedComposer.SERVER_ERROR)); + return; + } + + ((RoomBundleLayout) page).buyRoom(this.client.getHabbo()); + + if (!this.client.getHabbo().hasPermission("acc_infinite_credits")) + { + this.client.getHabbo().getHabboInfo().addCredits(-item[0].getCredits()); + } + + if (!this.client.getHabbo().hasPermission("acc_inifinte_points")) + { + this.client.getHabbo().getHabboInfo().addCurrencyAmount(item[0].getPointsType(), -item[0].getPoints()); + } + + this.client.sendResponse(new PurchaseOKComposer()); + + final boolean[] badgeFound = {false}; + item[0].getBaseItems().stream().filter(i -> i.getType() == FurnitureType.BADGE).forEach(i -> { + if (!this.client.getHabbo().getInventory().getBadgesComponent().hasBadge(i.getName())) + { + HabboBadge badge = new HabboBadge(0, i.getName(), 0, this.client.getHabbo()); + Emulator.getThreading().run(badge); + this.client.getHabbo().getInventory().getBadgesComponent().addBadge(badge); + this.client.sendResponse(new AddUserBadgeComposer(badge)); + THashMap keys = new THashMap<>(); + keys.put("display", "BUBBLE"); + keys.put("image", "${image.library.url}album1584/" + badge.getCode() + ".gif"); + keys.put("message", Emulator.getTexts().getValue("commands.generic.cmd_badge.received")); + this.client.sendResponse(new BubbleAlertComposer(BubbleAlertKeys.RECEIVED_BADGE.key, keys)); //:test 1992 s:npc.gift.received i:2 s:npc_name s:Admin s:image s:${image.library.url}album1584/ADM.gif); + } else + { + badgeFound[0] = true; + } + }); + + if (badgeFound[0]) + { + this.client.getHabbo().getClient().sendResponse(new AlertPurchaseFailedComposer(AlertPurchaseFailedComposer.ALREADY_HAVE_BADGE)); + } + return; } - - ((RoomBundleLayout)page).buyRoom(this.client.getHabbo()); - - if (!this.client.getHabbo().hasPermission("acc_infinite_credits")) - { - this.client.getHabbo().getHabboInfo().addCredits(-item[0].getCredits()); - } - - if (!this.client.getHabbo().hasPermission("acc_inifinte_points")) - { - this.client.getHabbo().getHabboInfo().addCurrencyAmount(item[0].getPointsType(), -item[0].getPoints()); - } - - this.client.sendResponse(new PurchaseOKComposer()); - - final boolean[] badgeFound = {false}; - item[0].getBaseItems().stream().filter(i -> i.getType() == FurnitureType.BADGE).forEach(i -> { - if (!this.client.getHabbo().getInventory().getBadgesComponent().hasBadge(i.getName())) - { - HabboBadge badge = new HabboBadge(0, i.getName(), 0, this.client.getHabbo()); - Emulator.getThreading().run(badge); - this.client.getHabbo().getInventory().getBadgesComponent().addBadge(badge); - this.client.sendResponse(new AddUserBadgeComposer(badge)); - THashMap keys = new THashMap<>(); - keys.put("display", "BUBBLE"); - keys.put("image", "${image.library.url}album1584/" + badge.getCode() + ".gif"); - keys.put("message", Emulator.getTexts().getValue("commands.generic.cmd_badge.received")); - this.client.sendResponse(new BubbleAlertComposer(BubbleAlertKeys.RECEIVED_BADGE.key, keys)); //:test 1992 s:npc.gift.received i:2 s:npc_name s:Admin s:image s:${image.library.url}album1584/ADM.gif); - } - else - { - badgeFound[0] = true; - } - }); - - if (badgeFound[0]) - { - this.client.getHabbo().getClient().sendResponse(new AlertPurchaseFailedComposer(AlertPurchaseFailedComposer.ALREADY_HAVE_BADGE)); - } - - return; } - } - if(page == null) - { - this.client.sendResponse(new AlertPurchaseFailedComposer(AlertPurchaseFailedComposer.SERVER_ERROR).compose()); - return; - } - - if(page.getRank() > this.client.getHabbo().getHabboInfo().getRank().getId()) - { - this.client.sendResponse(new AlertPurchaseUnavailableComposer(AlertPurchaseUnavailableComposer.ILLEGAL)); - return; - } - - if(page instanceof ClubBuyLayout || page instanceof VipBuyLayout) - { - ClubOffer item = Emulator.getGameEnvironment().getCatalogManager().clubOffers.get(itemId); - - if(item == null) + if (page == null) { this.client.sendResponse(new AlertPurchaseFailedComposer(AlertPurchaseFailedComposer.SERVER_ERROR).compose()); return; } - int totalDays = 0; - int totalCredits = 0; - int totalDuckets = 0; - - for(int i = 0; i < count; i++) + if (page.getRank() > this.client.getHabbo().getHabboInfo().getRank().getId()) { - totalDays += item.getDays(); - totalCredits += item.getCredits(); - totalDuckets += item.getPoints(); + this.client.sendResponse(new AlertPurchaseUnavailableComposer(AlertPurchaseUnavailableComposer.ILLEGAL)); + return; } - if(totalDays > 0) + if (page instanceof ClubBuyLayout || page instanceof VipBuyLayout) { - if(this.client.getHabbo().getHabboInfo().getCurrencyAmount(item.getPointsType()) < totalDuckets) + ClubOffer item = Emulator.getGameEnvironment().getCatalogManager().clubOffers.get(itemId); + + if (item == null) + { + this.client.sendResponse(new AlertPurchaseFailedComposer(AlertPurchaseFailedComposer.SERVER_ERROR).compose()); return; + } - if (this.client.getHabbo().getHabboInfo().getCredits() < totalCredits) - return; + int totalDays = 0; + int totalCredits = 0; + int totalDuckets = 0; - if (!this.client.getHabbo().hasPermission("acc_infinite_credits")) - this.client.getHabbo().getHabboInfo().addCredits(-totalCredits); + for (int i = 0; i < count; i++) + { + totalDays += item.getDays(); + totalCredits += item.getCredits(); + totalDuckets += item.getPoints(); + } - if (!this.client.getHabbo().hasPermission("acc_infinite_points")) - this.client.getHabbo().getHabboInfo().addCurrencyAmount(item.getPointsType(), -totalDuckets); + if (totalDays > 0) + { + if (this.client.getHabbo().getHabboInfo().getCurrencyAmount(item.getPointsType()) < totalDuckets) + return; - if(this.client.getHabbo().getHabboStats().getClubExpireTimestamp() <= Emulator.getIntUnixTimestamp()) - this.client.getHabbo().getHabboStats().setClubExpireTimestamp(Emulator.getIntUnixTimestamp()); + if (this.client.getHabbo().getHabboInfo().getCredits() < totalCredits) + return; - this.client.getHabbo().getHabboStats().setClubExpireTimestamp(this.client.getHabbo().getHabboStats().getClubExpireTimestamp() + (totalDays * 86400)); - this.client.sendResponse(new UserPermissionsComposer(this.client.getHabbo())); - this.client.sendResponse(new UserClubComposer(this.client.getHabbo())); + if (!this.client.getHabbo().hasPermission("acc_infinite_credits")) + this.client.getHabbo().getHabboInfo().addCredits(-totalCredits); - if (totalCredits > 0) - this.client.sendResponse(new UserCreditsComposer(this.client.getHabbo())); + if (!this.client.getHabbo().hasPermission("acc_infinite_points")) + this.client.getHabbo().getHabboInfo().addCurrencyAmount(item.getPointsType(), -totalDuckets); - if (totalDuckets > 0) - this.client.sendResponse(new UserCurrencyComposer(this.client.getHabbo())); + if (this.client.getHabbo().getHabboStats().getClubExpireTimestamp() <= Emulator.getIntUnixTimestamp()) + this.client.getHabbo().getHabboStats().setClubExpireTimestamp(Emulator.getIntUnixTimestamp()); - this.client.sendResponse(new PurchaseOKComposer(null)); - this.client.sendResponse(new InventoryRefreshComposer()); + this.client.getHabbo().getHabboStats().setClubExpireTimestamp(this.client.getHabbo().getHabboStats().getClubExpireTimestamp() + (totalDays * 86400)); + this.client.sendResponse(new UserPermissionsComposer(this.client.getHabbo())); + this.client.sendResponse(new UserClubComposer(this.client.getHabbo())); + + if (totalCredits > 0) + this.client.sendResponse(new UserCreditsComposer(this.client.getHabbo())); + + if (totalDuckets > 0) + this.client.sendResponse(new UserCurrencyComposer(this.client.getHabbo())); + + this.client.sendResponse(new PurchaseOKComposer(null)); + this.client.sendResponse(new InventoryRefreshComposer()); + } + return; } - return; + + CatalogItem item; + + if (page instanceof RecentPurchasesLayout) + item = this.client.getHabbo().getHabboStats().getRecentPurchases().get(itemId); + else + item = page.getCatalogItem(itemId); + + Emulator.getGameEnvironment().getCatalogManager().purchaseItem(page, item, this.client.getHabbo(), count, extraData, false); + } - - CatalogItem item; - - if(page instanceof RecentPurchasesLayout) - item = this.client.getHabbo().getHabboStats().getRecentPurchases().get(itemId); else - item = page.getCatalogItem(itemId); - - Emulator.getGameEnvironment().getCatalogManager().purchaseItem(page, item, this.client.getHabbo(), count, extraData, false); - + { + this.client.sendResponse(new AlertPurchaseFailedComposer(AlertPurchaseFailedComposer.SERVER_ERROR).compose()); + } } } diff --git a/src/main/java/com/eu/habbo/messages/incoming/catalog/PurchaseTargetOfferEvent.java b/src/main/java/com/eu/habbo/messages/incoming/catalog/PurchaseTargetOfferEvent.java new file mode 100644 index 00000000..08c1e0e4 --- /dev/null +++ b/src/main/java/com/eu/habbo/messages/incoming/catalog/PurchaseTargetOfferEvent.java @@ -0,0 +1,48 @@ +package com.eu.habbo.messages.incoming.catalog; + +import com.eu.habbo.Emulator; +import com.eu.habbo.habbohotel.catalog.CatalogItem; +import com.eu.habbo.habbohotel.catalog.CatalogManager; +import com.eu.habbo.habbohotel.catalog.TargetOffer; +import com.eu.habbo.habbohotel.users.cache.HabboOfferPurchase; +import com.eu.habbo.messages.incoming.MessageHandler; + +public class PurchaseTargetOfferEvent extends MessageHandler +{ + + @Override + public void handle() throws Exception + { + int offerId = this.packet.readInt(); + int amount = this.packet.readInt(); + + if (amount <= 0) return; + + + if (Emulator.getIntUnixTimestamp() - this.client.getHabbo().getHabboStats().lastPurchaseTimestamp >= CatalogManager.PURCHASE_COOLDOWN) + { + this.client.getHabbo().getHabboStats().lastPurchaseTimestamp = Emulator.getIntUnixTimestamp(); + + TargetOffer offer = Emulator.getGameEnvironment().getCatalogManager().getTargetOffer(offerId); + + HabboOfferPurchase purchase = HabboOfferPurchase.getOrCreate(this.client.getHabbo(), offerId); + + if (purchase != null) + { + amount = Math.min(offer.getPurchaseLimit() - purchase.getAmount(), amount); + int now = Emulator.getIntUnixTimestamp(); + if (offer.getExpirationTime() > now) + { + purchase.update(amount, now); + CatalogItem item = Emulator.getGameEnvironment().getCatalogManager().getCatalogItem(offer.getCatalogItem()); + if (item.isLimited()) + { + amount = 1; + } + Emulator.getGameEnvironment().getCatalogManager().purchaseItem(null, item, this.client.getHabbo(), amount, "", false); + + } + } + } + } +} \ No newline at end of file diff --git a/src/main/java/com/eu/habbo/messages/incoming/catalog/TargetOfferStateEvent.java b/src/main/java/com/eu/habbo/messages/incoming/catalog/TargetOfferStateEvent.java new file mode 100644 index 00000000..809ea476 --- /dev/null +++ b/src/main/java/com/eu/habbo/messages/incoming/catalog/TargetOfferStateEvent.java @@ -0,0 +1,20 @@ +package com.eu.habbo.messages.incoming.catalog; + +import com.eu.habbo.habbohotel.users.cache.HabboOfferPurchase; +import com.eu.habbo.messages.incoming.MessageHandler; + +public class TargetOfferStateEvent extends MessageHandler +{ + @Override + public void handle() throws Exception + { + int id = this.packet.readInt(); + int state = this.packet.readInt(); + + HabboOfferPurchase purchase = this.client.getHabbo().getHabboStats().getHabboOfferPurchase(id); + if (purchase != null) + { + purchase.setState(state); + } + } +} \ No newline at end of file diff --git a/src/main/java/com/eu/habbo/messages/incoming/handshake/UsernameEvent.java b/src/main/java/com/eu/habbo/messages/incoming/handshake/UsernameEvent.java index ad5891cc..82a9182d 100644 --- a/src/main/java/com/eu/habbo/messages/incoming/handshake/UsernameEvent.java +++ b/src/main/java/com/eu/habbo/messages/incoming/handshake/UsernameEvent.java @@ -2,9 +2,11 @@ package com.eu.habbo.messages.incoming.handshake; import com.eu.habbo.Emulator; import com.eu.habbo.habbohotel.achievements.AchievementManager; +import com.eu.habbo.habbohotel.catalog.TargetOffer; import com.eu.habbo.messages.incoming.MessageHandler; import com.eu.habbo.messages.outgoing.events.calendar.AdventCalendarDataComposer; import com.eu.habbo.messages.outgoing.unknown.NuxAlertComposer; +import com.eu.habbo.messages.outgoing.unknown.TargetedOfferComposer; import java.sql.Connection; import java.sql.PreparedStatement; @@ -108,6 +110,15 @@ public class UsernameEvent extends MessageHandler this.client.sendResponse(new NuxAlertComposer("openView/calendar")); } + if (TargetOffer.ACTIVE_TARGET_OFFER_ID > 0) + { + TargetOffer offer = Emulator.getGameEnvironment().getCatalogManager().getTargetOffer(TargetOffer.ACTIVE_TARGET_OFFER_ID); + + if (offer != null) + { + this.client.sendResponse(new TargetedOfferComposer(this.client.getHabbo(), offer)); + } + } this.client.getHabbo().getHabboInfo().setLastOnline(Emulator.getIntUnixTimestamp()); } diff --git a/src/main/java/com/eu/habbo/messages/incoming/hotelview/HotelViewRequestLTDAvailabilityEvent.java b/src/main/java/com/eu/habbo/messages/incoming/hotelview/HotelViewRequestLTDAvailabilityEvent.java new file mode 100644 index 00000000..5f0176bc --- /dev/null +++ b/src/main/java/com/eu/habbo/messages/incoming/hotelview/HotelViewRequestLTDAvailabilityEvent.java @@ -0,0 +1,28 @@ +package com.eu.habbo.messages.incoming.hotelview; + +import com.eu.habbo.Emulator; +import com.eu.habbo.messages.incoming.MessageHandler; +import com.eu.habbo.messages.outgoing.hotelview.HotelViewNextLTDAvailableComposer; + +public class HotelViewRequestLTDAvailabilityEvent extends MessageHandler +{ + public static boolean ENABLED = false; + public static int TIMESTAMP; + public static int ITEM_ID; + public static int PAGE_ID; + public static String ITEM_NAME; + + @Override + public void handle() throws Exception + { + if (ENABLED) + { + int timeremaining = Math.max(TIMESTAMP - Emulator.getIntUnixTimestamp(), 0); + this.client.sendResponse(new HotelViewNextLTDAvailableComposer( + timeremaining, + timeremaining > 0 ? - 1 : ITEM_ID, + timeremaining > 0 ? - 1 : PAGE_ID, + timeremaining > 0 ? "" : ITEM_NAME)); + } + } +} diff --git a/src/main/java/com/eu/habbo/messages/incoming/inventory/TestInventoryEvent.java b/src/main/java/com/eu/habbo/messages/incoming/inventory/TestInventoryEvent.java index 503300e7..21f6a004 100644 --- a/src/main/java/com/eu/habbo/messages/incoming/inventory/TestInventoryEvent.java +++ b/src/main/java/com/eu/habbo/messages/incoming/inventory/TestInventoryEvent.java @@ -8,6 +8,6 @@ public class TestInventoryEvent extends MessageHandler @Override public void handle() throws Exception { - //this.client.sendResponse(new InventoryItemsComposer(this.client.getHabbo(), items)); + } } diff --git a/src/main/java/com/eu/habbo/messages/incoming/modtool/ModToolPickTicketEvent.java b/src/main/java/com/eu/habbo/messages/incoming/modtool/ModToolPickTicketEvent.java index e0de1986..2d1d7cf0 100644 --- a/src/main/java/com/eu/habbo/messages/incoming/modtool/ModToolPickTicketEvent.java +++ b/src/main/java/com/eu/habbo/messages/incoming/modtool/ModToolPickTicketEvent.java @@ -24,7 +24,7 @@ public class ModToolPickTicketEvent extends MessageHandler if(issue.state == ModToolTicketState.PICKED) { this.client.sendResponse(new ModToolIssueInfoComposer(issue)); - this.client.sendResponse(new GenericAlertComposer("Picking issue failedd: \rTicket already picked or does not exist!")); + this.client.sendResponse(new GenericAlertComposer(Emulator.getTexts().getValue("support.ticket.picked.failed"))); return; } @@ -34,7 +34,7 @@ public class ModToolPickTicketEvent extends MessageHandler } else { - this.client.sendResponse(new GenericAlertComposer("Picking issue failed: \rTicket already picked or does not exist!")); + this.client.sendResponse(new GenericAlertComposer(Emulator.getTexts().getValue("support.ticket.picked.failed"))); } } else diff --git a/src/main/java/com/eu/habbo/messages/incoming/modtool/ModToolSanctionTradeLockEvent.java b/src/main/java/com/eu/habbo/messages/incoming/modtool/ModToolSanctionTradeLockEvent.java index a6cf814d..a7b0caa5 100644 --- a/src/main/java/com/eu/habbo/messages/incoming/modtool/ModToolSanctionTradeLockEvent.java +++ b/src/main/java/com/eu/habbo/messages/incoming/modtool/ModToolSanctionTradeLockEvent.java @@ -22,7 +22,7 @@ public class ModToolSanctionTradeLockEvent extends MessageHandler if (habbo != null) { - habbo.getHabboStats().allowTrade = false; + habbo.getHabboStats().setAllowTrade(false); habbo.alert(message); } else diff --git a/src/main/java/com/eu/habbo/messages/incoming/modtool/ReportEvent.java b/src/main/java/com/eu/habbo/messages/incoming/modtool/ReportEvent.java index 7547afe4..b53a5806 100644 --- a/src/main/java/com/eu/habbo/messages/incoming/modtool/ReportEvent.java +++ b/src/main/java/com/eu/habbo/messages/incoming/modtool/ReportEvent.java @@ -92,7 +92,7 @@ public class ReportEvent extends MessageHandler { if (cfhTopic.action == CfhActionType.AUTO_IGNORE) { - client.getHabbo().getHabboStats().ignoredUsers.add(reported.getHabboInfo().getId()); + client.getHabbo().getHabboStats().ignoreUser(reported.getHabboInfo().getId()); client.sendResponse(new RoomUserIgnoredComposer(reported, RoomUserIgnoredComposer.IGNORED)); } @@ -129,7 +129,7 @@ public class ReportEvent extends MessageHandler { if(cfhTopic.action == CfhActionType.AUTO_IGNORE) { - client.getHabbo().getHabboStats().ignoredUsers.add(issue.reportedId); + client.getHabbo().getHabboStats().ignoreUser(issue.reportedId); Habbo reported = Emulator.getGameEnvironment().getHabboManager().getHabbo(issue.reportedId); if (reported != null) { diff --git a/src/main/java/com/eu/habbo/messages/incoming/rooms/bots/BotSaveSettingsEvent.java b/src/main/java/com/eu/habbo/messages/incoming/rooms/bots/BotSaveSettingsEvent.java index 2f02900e..c61ce9a0 100644 --- a/src/main/java/com/eu/habbo/messages/incoming/rooms/bots/BotSaveSettingsEvent.java +++ b/src/main/java/com/eu/habbo/messages/incoming/rooms/bots/BotSaveSettingsEvent.java @@ -127,7 +127,7 @@ public class BotSaveSettingsEvent extends MessageHandler break; case 3: - bot.getRoomUnit().setCanWalk(!bot.getRoomUnit().canWalk()); + bot.setCanWalk(!bot.canWalk()); bot.needsUpdate(true); break; diff --git a/src/main/java/com/eu/habbo/messages/incoming/rooms/items/PostItDeleteEvent.java b/src/main/java/com/eu/habbo/messages/incoming/rooms/items/PostItDeleteEvent.java index 530bad92..96c378e1 100644 --- a/src/main/java/com/eu/habbo/messages/incoming/rooms/items/PostItDeleteEvent.java +++ b/src/main/java/com/eu/habbo/messages/incoming/rooms/items/PostItDeleteEvent.java @@ -1,6 +1,7 @@ package com.eu.habbo.messages.incoming.rooms.items; import com.eu.habbo.Emulator; +import com.eu.habbo.habbohotel.items.interactions.InteractionPostIt; import com.eu.habbo.habbohotel.rooms.Room; import com.eu.habbo.habbohotel.users.HabboItem; import com.eu.habbo.messages.incoming.MessageHandler; @@ -21,12 +22,18 @@ public class PostItDeleteEvent extends MessageHandler HabboItem item = room.getHabboItem(itemId); - if(item == null || item.getUserId() != this.client.getHabbo().getHabboInfo().getId()) - return; + if (item instanceof InteractionPostIt) + { + if (item == null) + return; - item.setRoomId(0); - room.removeHabboItem(item); - room.sendComposer(new RemoveWallItemComposer(item).compose()); - Emulator.getThreading().run(new QueryDeleteHabboItem(item)); + if (item.getUserId() == this.client.getHabbo().getHabboInfo().getId() || room.isOwner(this.client.getHabbo())) + { + item.setRoomId(0); + room.removeHabboItem(item); + room.sendComposer(new RemoveWallItemComposer(item).compose()); + Emulator.getThreading().run(new QueryDeleteHabboItem(item)); + } + } } } diff --git a/src/main/java/com/eu/habbo/messages/incoming/rooms/items/PostItPlaceEvent.java b/src/main/java/com/eu/habbo/messages/incoming/rooms/items/PostItPlaceEvent.java index 13643221..0192ac59 100644 --- a/src/main/java/com/eu/habbo/messages/incoming/rooms/items/PostItPlaceEvent.java +++ b/src/main/java/com/eu/habbo/messages/incoming/rooms/items/PostItPlaceEvent.java @@ -1,6 +1,7 @@ package com.eu.habbo.messages.incoming.rooms.items; import com.eu.habbo.Emulator; +import com.eu.habbo.habbohotel.achievements.AchievementManager; import com.eu.habbo.habbohotel.items.interactions.InteractionPostIt; import com.eu.habbo.habbohotel.items.interactions.InteractionStickyPole; import com.eu.habbo.habbohotel.rooms.Room; @@ -8,6 +9,7 @@ import com.eu.habbo.habbohotel.users.HabboItem; import com.eu.habbo.messages.incoming.MessageHandler; import com.eu.habbo.messages.outgoing.inventory.RemoveHabboItemComposer; import com.eu.habbo.messages.outgoing.rooms.items.AddWallItemComposer; +import com.eu.habbo.messages.outgoing.rooms.items.PostItStickyPoleOpenComposer; public class PostItPlaceEvent extends MessageHandler { @@ -37,6 +39,14 @@ public class PostItPlaceEvent extends MessageHandler this.client.getHabbo().getInventory().getItemsComponent().removeHabboItem(item); this.client.sendResponse(new RemoveHabboItemComposer(item.getId())); Emulator.getThreading().run(item); + + if (room.getOwnerId() != this.client.getHabbo().getHabboInfo().getId()) + { + AchievementManager.progressAchievement(room.getOwnerId(), Emulator.getGameEnvironment().getAchievementManager().getAchievement("NotesReceived")); + AchievementManager.progressAchievement(this.client.getHabbo().getHabboInfo().getId(), Emulator.getGameEnvironment().getAchievementManager().getAchievement("NotesLeft")); + } + + this.client.sendResponse(new PostItStickyPoleOpenComposer(item)); } } } diff --git a/src/main/java/com/eu/habbo/messages/incoming/rooms/items/PostItSaveDataEvent.java b/src/main/java/com/eu/habbo/messages/incoming/rooms/items/PostItSaveDataEvent.java index 9b2fe235..29475736 100644 --- a/src/main/java/com/eu/habbo/messages/incoming/rooms/items/PostItSaveDataEvent.java +++ b/src/main/java/com/eu/habbo/messages/incoming/rooms/items/PostItSaveDataEvent.java @@ -1,6 +1,7 @@ package com.eu.habbo.messages.incoming.rooms.items; import com.eu.habbo.Emulator; +import com.eu.habbo.habbohotel.items.PostItColor; import com.eu.habbo.habbohotel.items.interactions.InteractionPostIt; import com.eu.habbo.habbohotel.rooms.Room; import com.eu.habbo.habbohotel.users.HabboItem; @@ -15,6 +16,17 @@ public class PostItSaveDataEvent extends MessageHandler String color = this.packet.readString(); String text = this.packet.readString(); + if (text.length() > 366) + { + Emulator.getGameEnvironment().getModToolManager().quickTicket(this.client.getHabbo(), "Scripter", Emulator.getTexts().getValue("scripter.warning.sticky.size").replace("%username%", this.client.getHabbo().getHabboInfo().getUsername()).replace("%amount%", text.length() + "").replace("%limit%", "366")); + + if (text.length() >= 400) + { + this.client.getHabbo().alert("8=====D~~~~~

Computer Says:NO"); + } + return; + } + text = text.replace(((char) 9) + "", ""); if(text.startsWith("#") || text.startsWith(" #")) { @@ -37,7 +49,7 @@ public class PostItSaveDataEvent extends MessageHandler if(item == null || !(item instanceof InteractionPostIt)) return; - if(!color.equalsIgnoreCase("FFFF33") && !room.hasRights(this.client.getHabbo())&& item.getUserId() != this.client.getHabbo().getHabboInfo().getId()) + if(!color.equalsIgnoreCase(PostItColor.YELLOW.hexColor) && !room.hasRights(this.client.getHabbo())&& item.getUserId() != this.client.getHabbo().getHabboInfo().getId()) { if(!text.startsWith(item.getExtradata().replace(item.getExtradata().split(" ")[0], ""))) { @@ -51,8 +63,9 @@ public class PostItSaveDataEvent extends MessageHandler } if(color.isEmpty()) - color = "FFFF33"; + color = PostItColor.YELLOW.hexColor; + item.setUserId(room.getOwnerId()); item.setExtradata(color + " " + text); item.needsUpdate(true); room.updateItem(item); diff --git a/src/main/java/com/eu/habbo/messages/incoming/rooms/items/RoomPlaceItemEvent.java b/src/main/java/com/eu/habbo/messages/incoming/rooms/items/RoomPlaceItemEvent.java index fe8bd6a4..0e135370 100644 --- a/src/main/java/com/eu/habbo/messages/incoming/rooms/items/RoomPlaceItemEvent.java +++ b/src/main/java/com/eu/habbo/messages/incoming/rooms/items/RoomPlaceItemEvent.java @@ -162,9 +162,9 @@ public class RoomPlaceItemEvent extends MessageHandler } } - double checkStackHeight = room.getStackHeight(x, y, true); + double checkStackHeight = room.getStackHeight(x, y, false); - if (checkStackHeight > 0 && item instanceof InteractionRoller) + if (checkStackHeight != (double)room.getLayout().getTile(x, y).z && item instanceof InteractionRoller) { this.client.sendResponse(new BubbleAlertComposer(BubbleAlertKeys.FURNI_PLACE_EMENT_ERROR.key, "${room.error.cant_set_item}")); return; diff --git a/src/main/java/com/eu/habbo/messages/incoming/rooms/items/RotateMoveItemEvent.java b/src/main/java/com/eu/habbo/messages/incoming/rooms/items/RotateMoveItemEvent.java index a9d2d31b..65ebad9f 100644 --- a/src/main/java/com/eu/habbo/messages/incoming/rooms/items/RotateMoveItemEvent.java +++ b/src/main/java/com/eu/habbo/messages/incoming/rooms/items/RotateMoveItemEvent.java @@ -116,8 +116,13 @@ public class RotateMoveItemEvent extends MessageHandler //room.removeHabboItem(item.getId()); double checkStackHeight = item.getZ(); - Rectangle newSquare = RoomLayout.getRectangle(x, y, item.getBaseItem().getWidth(), item.getBaseItem().getLength(), rotation); + if (room.getStackHeight(x, y, false, item) != (double)room.getLayout().getTile((short)x, (short)y).z && item instanceof InteractionRoller) + { + this.client.sendResponse(new BubbleAlertComposer(BubbleAlertKeys.FURNI_PLACE_EMENT_ERROR.key, "${room.error.cant_set_item}")); + this.client.sendResponse(new FloorItemUpdateComposer(item)); + return; + } //if (x != item.getX() || y != item.getY() || item.getRotation() != rotation) if (hasStackHelper == null) @@ -130,8 +135,7 @@ public class RotateMoveItemEvent extends MessageHandler double testheight = room.getStackHeight(i, j, false, item); if ( (checkStackHeight != testheight && !(item instanceof InteractionStackHelper)) || - (!room.getHabbosAt(i, j).isEmpty() && !(oldX == x && oldY == y) && !(item instanceof InteractionStackHelper)) || - (checkStackHeight > 0 && item instanceof InteractionRoller) + (!room.getHabbosAt(i, j).isEmpty() && !(oldX == x && oldY == y) && !(item instanceof InteractionStackHelper)) ) { this.client.sendResponse(new BubbleAlertComposer(BubbleAlertKeys.FURNI_PLACE_EMENT_ERROR.key, "${room.error.cant_set_item}")); diff --git a/src/main/java/com/eu/habbo/messages/incoming/rooms/items/SavePostItStickyPoleEvent.java b/src/main/java/com/eu/habbo/messages/incoming/rooms/items/SavePostItStickyPoleEvent.java index c78236fa..0b6dad40 100644 --- a/src/main/java/com/eu/habbo/messages/incoming/rooms/items/SavePostItStickyPoleEvent.java +++ b/src/main/java/com/eu/habbo/messages/incoming/rooms/items/SavePostItStickyPoleEvent.java @@ -2,8 +2,14 @@ package com.eu.habbo.messages.incoming.rooms.items; import com.eu.habbo.Emulator; import com.eu.habbo.habbohotel.commands.CommandHandler; +import com.eu.habbo.habbohotel.items.PostItColor; +import com.eu.habbo.habbohotel.items.interactions.InteractionPostIt; +import com.eu.habbo.habbohotel.rooms.Room; +import com.eu.habbo.habbohotel.users.HabboItem; import com.eu.habbo.messages.incoming.MessageHandler; +import java.time.LocalDate; + public class SavePostItStickyPoleEvent extends MessageHandler { @Override @@ -11,10 +17,10 @@ public class SavePostItStickyPoleEvent extends MessageHandler { int itemId = this.packet.readInt(); + this.packet.readString(); + String color = this.packet.readString(); if(itemId == -1234) { - this.packet.readString(); - this.packet.readString(); if(this.client.getHabbo().hasPermission("cmd_multi")) { String[] commands = this.packet.readString().split("\r"); @@ -30,5 +36,35 @@ public class SavePostItStickyPoleEvent extends MessageHandler Emulator.getLogging().logUserLine("Scripter Alert! " + this.client.getHabbo().getHabboInfo().getUsername() + " | " + this.packet.readString()); } } + else + { + String text = this.packet.readString(); + + Room room = this.client.getHabbo().getHabboInfo().getCurrentRoom(); + HabboItem sticky = room.getHabboItem(itemId); + + if (sticky != null) + { + if (sticky.getUserId() == this.client.getHabbo().getHabboInfo().getId()) + { + sticky.setUserId(room.getOwnerId()); + + if (color.equalsIgnoreCase(PostItColor.YELLOW.hexColor)) + { + color = PostItColor.randomColorNotYellow().hexColor; + } + if (!InteractionPostIt.STICKYPOLE_PREFIX_TEXT.isEmpty()) + { + text = InteractionPostIt.STICKYPOLE_PREFIX_TEXT.replace("\\r", "\r").replace("%username%", this.client.getHabbo().getHabboInfo().getUsername()).replace("%timestamp%", LocalDate.now().toString()) + text; + } + + sticky.setUserId(room.getOwnerId()); + sticky.setExtradata(color + " " + text); + sticky.needsUpdate(true); + room.updateItem(sticky); + Emulator.getThreading().run(sticky); + } + } + } } } diff --git a/src/main/java/com/eu/habbo/messages/incoming/rooms/items/SetStackHelperHeightEvent.java b/src/main/java/com/eu/habbo/messages/incoming/rooms/items/SetStackHelperHeightEvent.java index 41801065..a4a39036 100644 --- a/src/main/java/com/eu/habbo/messages/incoming/rooms/items/SetStackHelperHeightEvent.java +++ b/src/main/java/com/eu/habbo/messages/incoming/rooms/items/SetStackHelperHeightEvent.java @@ -6,6 +6,7 @@ import com.eu.habbo.habbohotel.rooms.RoomTile; import com.eu.habbo.habbohotel.users.HabboItem; import com.eu.habbo.messages.incoming.MessageHandler; import com.eu.habbo.messages.outgoing.rooms.UpdateStackHeightComposer; +import com.eu.habbo.messages.outgoing.rooms.items.UpdateStackHeightTileHeightComposer; import gnu.trove.set.hash.THashSet; public class SetStackHelperHeightEvent extends MessageHandler @@ -24,39 +25,18 @@ public class SetStackHelperHeightEvent extends MessageHandler if(item instanceof InteractionStackHelper) { - int stackerHeight = this.packet.readInt(); - item.setExtradata(stackerHeight + ""); - - double height = 0; Room room = this.client.getHabbo().getHabboInfo().getCurrentRoom(); - THashSet tiles = room.getLayout().getTilesAt(room.getLayout().getTile(item.getX(), item.getY()), item.getBaseItem().getWidth(), item.getBaseItem().getLength(), item.getRotation()); + RoomTile itemTile = room.getLayout().getTile(item.getX(), item.getY()); + int stackerHeight = Math.min(Math.max(this.packet.readInt(), itemTile.z * 100), 4000); + THashSet tiles = room.getLayout().getTilesAt(itemTile, item.getBaseItem().getWidth(), item.getBaseItem().getLength(), item.getRotation()); + double height = 0; if(stackerHeight >= 0) { height = stackerHeight / 100.0D; } - else - { - for (RoomTile tile : tiles) - { - double tileHeight = this.client.getHabbo().getHabboInfo().getCurrentRoom().getTopHeightAt(tile.x, tile.y); - - if (tileHeight > height) - { - height = tileHeight; - } - } - } - - for (RoomTile tile : tiles) - { - if (height < tile.z) - { - height = tile.z; - } - } for (RoomTile tile : tiles) { @@ -69,6 +49,7 @@ public class SetStackHelperHeightEvent extends MessageHandler this.client.getHabbo().getHabboInfo().getCurrentRoom().updateItem(item); this.client.getHabbo().getHabboInfo().getCurrentRoom().updateTiles(tiles); this.client.getHabbo().getHabboInfo().getCurrentRoom().sendComposer(new UpdateStackHeightComposer(tiles).compose()); + this.client.getHabbo().getHabboInfo().getCurrentRoom().sendComposer(new UpdateStackHeightTileHeightComposer(item, (int)((height) * 100)).compose()); } } } diff --git a/src/main/java/com/eu/habbo/messages/incoming/rooms/pets/MovePetEvent.java b/src/main/java/com/eu/habbo/messages/incoming/rooms/pets/MovePetEvent.java index b168a7a8..862fa58a 100644 --- a/src/main/java/com/eu/habbo/messages/incoming/rooms/pets/MovePetEvent.java +++ b/src/main/java/com/eu/habbo/messages/incoming/rooms/pets/MovePetEvent.java @@ -28,7 +28,9 @@ public class MovePetEvent extends MessageHandler if (tile != null) { pet.getRoomUnit().setLocation(tile); - pet.getRoomUnit().setZ(this.packet.readInt()); + pet.getRoomUnit().setPreviousLocation(tile); + pet.getRoomUnit().setZ(this.packet.readInt() + tile.z); + pet.getRoomUnit().setPreviousLocationZ(pet.getRoomUnit().getZ()); room.sendComposer(new RoomUserStatusComposer(pet.getRoomUnit()).compose()); pet.needsUpdate = true; } diff --git a/src/main/java/com/eu/habbo/messages/incoming/rooms/users/IgnoreRoomUserEvent.java b/src/main/java/com/eu/habbo/messages/incoming/rooms/users/IgnoreRoomUserEvent.java index 0d410c2d..335c7e09 100644 --- a/src/main/java/com/eu/habbo/messages/incoming/rooms/users/IgnoreRoomUserEvent.java +++ b/src/main/java/com/eu/habbo/messages/incoming/rooms/users/IgnoreRoomUserEvent.java @@ -26,7 +26,7 @@ public class IgnoreRoomUserEvent extends MessageHandler return; { - this.client.getHabbo().getHabboStats().ignoredUsers.add(habbo.getHabboInfo().getId()); + this.client.getHabbo().getHabboStats().ignoreUser(habbo.getHabboInfo().getId()); this.client.sendResponse(new RoomUserIgnoredComposer(habbo, RoomUserIgnoredComposer.IGNORED)); AchievementManager.progressAchievement(this.client.getHabbo(), Emulator.getGameEnvironment().getAchievementManager().getAchievement("SelfModIgnoreSeen")); } diff --git a/src/main/java/com/eu/habbo/messages/incoming/rooms/users/RoomUserGiveRespectEvent.java b/src/main/java/com/eu/habbo/messages/incoming/rooms/users/RoomUserGiveRespectEvent.java index e619de7e..cea256a4 100644 --- a/src/main/java/com/eu/habbo/messages/incoming/rooms/users/RoomUserGiveRespectEvent.java +++ b/src/main/java/com/eu/habbo/messages/incoming/rooms/users/RoomUserGiveRespectEvent.java @@ -1,12 +1,7 @@ package com.eu.habbo.messages.incoming.rooms.users; -import com.eu.habbo.Emulator; -import com.eu.habbo.habbohotel.achievements.AchievementManager; -import com.eu.habbo.habbohotel.rooms.RoomUserAction; import com.eu.habbo.habbohotel.users.Habbo; import com.eu.habbo.messages.incoming.MessageHandler; -import com.eu.habbo.messages.outgoing.rooms.users.RoomUserActionComposer; -import com.eu.habbo.messages.outgoing.rooms.users.RoomUserRespectComposer; public class RoomUserGiveRespectEvent extends MessageHandler { @@ -19,19 +14,7 @@ public class RoomUserGiveRespectEvent extends MessageHandler { Habbo target = this.client.getHabbo().getHabboInfo().getCurrentRoom().getHabbo(userId); - if(target != null && target != this.client.getHabbo()) - { - target.getHabboStats().respectPointsReceived++; - this.client.getHabbo().getHabboStats().respectPointsGiven++; - this.client.getHabbo().getHabboStats().respectPointsToGive--; - this.client.getHabbo().getHabboInfo().getCurrentRoom().sendComposer(new RoomUserRespectComposer(target).compose()); - this.client.getHabbo().getHabboInfo().getCurrentRoom().sendComposer(new RoomUserActionComposer(this.client.getHabbo().getRoomUnit(), RoomUserAction.THUMB_UP).compose()); - - AchievementManager.progressAchievement(this.client.getHabbo(), Emulator.getGameEnvironment().getAchievementManager().getAchievement("RespectGiven")); - AchievementManager.progressAchievement(target, Emulator.getGameEnvironment().getAchievementManager().getAchievement("RespectEarned")); - - this.client.getHabbo().getHabboInfo().getCurrentRoom().unIdle(this.client.getHabbo()); - } + this.client.getHabbo().respect(target); } } } diff --git a/src/main/java/com/eu/habbo/messages/incoming/rooms/users/RoomUserGiveRightsEvent.java b/src/main/java/com/eu/habbo/messages/incoming/rooms/users/RoomUserGiveRightsEvent.java index efa99e88..97d88e78 100644 --- a/src/main/java/com/eu/habbo/messages/incoming/rooms/users/RoomUserGiveRightsEvent.java +++ b/src/main/java/com/eu/habbo/messages/incoming/rooms/users/RoomUserGiveRightsEvent.java @@ -1,6 +1,7 @@ package com.eu.habbo.messages.incoming.rooms.users; import com.eu.habbo.Emulator; +import com.eu.habbo.habbohotel.messenger.MessengerBuddy; import com.eu.habbo.habbohotel.permissions.Permission; import com.eu.habbo.habbohotel.rooms.Room; import com.eu.habbo.habbohotel.users.Habbo; @@ -23,9 +24,21 @@ public class RoomUserGiveRightsEvent extends MessageHandler { Habbo target = room.getHabbo(userId); - if(!Emulator.getPluginManager().fireEvent(new UserRightsGivenEvent(this.client.getHabbo(), target)).isCancelled()) + if (target != null) { - room.giveRights(target); + if (!Emulator.getPluginManager().fireEvent(new UserRightsGivenEvent(this.client.getHabbo(), target)).isCancelled()) + { + room.giveRights(target); + } + } + else + { + MessengerBuddy buddy = this.client.getHabbo().getMessenger().getFriend(userId); + + if (buddy != null) + { + room.giveRights(userId); + } } } } diff --git a/src/main/java/com/eu/habbo/messages/incoming/rooms/users/UnIgnoreRoomUserEvent.java b/src/main/java/com/eu/habbo/messages/incoming/rooms/users/UnIgnoreRoomUserEvent.java index 1e135dc4..dd5a3435 100644 --- a/src/main/java/com/eu/habbo/messages/incoming/rooms/users/UnIgnoreRoomUserEvent.java +++ b/src/main/java/com/eu/habbo/messages/incoming/rooms/users/UnIgnoreRoomUserEvent.java @@ -22,7 +22,7 @@ public class UnIgnoreRoomUserEvent extends MessageHandler { if(habbo.getHabboStats().allowTalk()) { - this.client.getHabbo().getHabboStats().ignoredUsers.remove(habbo.getHabboInfo().getId()); + this.client.getHabbo().getHabboStats().unignoreUser(habbo.getHabboInfo().getId()); this.client.sendResponse(new RoomUserIgnoredComposer(habbo, RoomUserIgnoredComposer.UNIGNORED)); } } diff --git a/src/main/java/com/eu/habbo/messages/incoming/trading/TradeCancelOfferItemEvent.java b/src/main/java/com/eu/habbo/messages/incoming/trading/TradeCancelOfferItemEvent.java index 272a74c3..7b7341bf 100644 --- a/src/main/java/com/eu/habbo/messages/incoming/trading/TradeCancelOfferItemEvent.java +++ b/src/main/java/com/eu/habbo/messages/incoming/trading/TradeCancelOfferItemEvent.java @@ -12,7 +12,7 @@ public class TradeCancelOfferItemEvent extends MessageHandler int itemId = this.packet.readInt(); RoomTrade trade = this.client.getHabbo().getHabboInfo().getCurrentRoom().getActiveTradeForHabbo(this.client.getHabbo()); - HabboItem item = this.client.getHabbo().getInventory().getItemsComponent().getHabboItem(itemId); + HabboItem item = trade.getRoomTradeUserForHabbo(this.client.getHabbo()).getItem(itemId); if(trade == null || trade.getRoomTradeUserForHabbo(this.client.getHabbo()).getAccepted() || item == null) { diff --git a/src/main/java/com/eu/habbo/messages/incoming/trading/TradeStartEvent.java b/src/main/java/com/eu/habbo/messages/incoming/trading/TradeStartEvent.java index a9c0463b..dab61882 100644 --- a/src/main/java/com/eu/habbo/messages/incoming/trading/TradeStartEvent.java +++ b/src/main/java/com/eu/habbo/messages/incoming/trading/TradeStartEvent.java @@ -1,5 +1,6 @@ package com.eu.habbo.messages.incoming.trading; +import com.eu.habbo.Emulator; import com.eu.habbo.habbohotel.rooms.Room; import com.eu.habbo.habbohotel.rooms.RoomTrade; import com.eu.habbo.habbohotel.rooms.RoomUnitStatus; @@ -12,59 +13,59 @@ public class TradeStartEvent extends MessageHandler @Override public void handle() throws Exception { - int userId = this.packet.readInt(); - - Room room = this.client.getHabbo().getHabboInfo().getCurrentRoom(); - if (room != null) + if (Emulator.getIntUnixTimestamp() - this.client.getHabbo().getHabboStats().lastTradeTimestamp > 10) { - if (userId >= 0 && userId != this.client.getHabbo().getRoomUnit().getId()) + this.client.getHabbo().getHabboStats().lastTradeTimestamp = Emulator.getIntUnixTimestamp(); + int userId = this.packet.readInt(); + + Room room = this.client.getHabbo().getHabboInfo().getCurrentRoom(); + if (room != null) { - Habbo targetUser = room.getHabboByRoomUnitId(userId); - - boolean tradeAnywhere = this.client.getHabbo().hasPermission("acc_trade_anywhere"); - - if (!RoomTrade.TRADING_ENABLED && !tradeAnywhere) + if (userId >= 0 && userId != this.client.getHabbo().getRoomUnit().getId()) { - this.client.sendResponse(new TradeStartFailComposer(TradeStartFailComposer.HOTEL_TRADING_NOT_ALLOWED)); - return; - } + Habbo targetUser = room.getHabboByRoomUnitId(userId); - if ((room.getTradeMode() == 0 || (room.getTradeMode() == 1 && this.client.getHabbo().getHabboInfo().getId() != room.getOwnerId())) && !tradeAnywhere) - { - this.client.sendResponse(new TradeStartFailComposer(TradeStartFailComposer.ROOM_TRADING_NOT_ALLOWED)); - return; - } + boolean tradeAnywhere = this.client.getHabbo().hasPermission("acc_trade_anywhere"); - if (targetUser != null) - { - if (!this.client.getHabbo().getRoomUnit().hasStatus(RoomUnitStatus.TRADING)) + if (!RoomTrade.TRADING_ENABLED && !tradeAnywhere) { - if (this.client.getHabbo().getHabboStats().allowTrade) - { - if (!targetUser.getRoomUnit().hasStatus(RoomUnitStatus.TRADING)) - { - if (targetUser.getHabboStats().allowTrade) - { - room.startTrade(this.client.getHabbo(), targetUser); - } - else - { - this.client.sendResponse(new TradeStartFailComposer(TradeStartFailComposer.TARGET_TRADING_NOT_ALLOWED, targetUser.getHabboInfo().getUsername())); - } - } - else - { - this.client.sendResponse(new TradeStartFailComposer(TradeStartFailComposer.TARGET_ALREADY_TRADING, targetUser.getHabboInfo().getUsername())); - } - } - else - { - this.client.sendResponse(new TradeStartFailComposer(TradeStartFailComposer.YOU_TRADING_OFF)); - } + this.client.sendResponse(new TradeStartFailComposer(TradeStartFailComposer.HOTEL_TRADING_NOT_ALLOWED)); + return; } - else + + if ((room.getTradeMode() == 0 || (room.getTradeMode() == 1 && this.client.getHabbo().getHabboInfo().getId() != room.getOwnerId())) && !tradeAnywhere) { - this.client.sendResponse(new TradeStartFailComposer(TradeStartFailComposer.YOU_ALREADY_TRADING)); + this.client.sendResponse(new TradeStartFailComposer(TradeStartFailComposer.ROOM_TRADING_NOT_ALLOWED)); + return; + } + + if (targetUser != null) + { + if (!this.client.getHabbo().getRoomUnit().hasStatus(RoomUnitStatus.TRADING)) + { + if (this.client.getHabbo().getHabboStats().allowTrade()) + { + if (!targetUser.getRoomUnit().hasStatus(RoomUnitStatus.TRADING)) + { + if (targetUser.getHabboStats().allowTrade()) + { + room.startTrade(this.client.getHabbo(), targetUser); + } else + { + this.client.sendResponse(new TradeStartFailComposer(TradeStartFailComposer.TARGET_TRADING_NOT_ALLOWED, targetUser.getHabboInfo().getUsername())); + } + } else + { + this.client.sendResponse(new TradeStartFailComposer(TradeStartFailComposer.TARGET_ALREADY_TRADING, targetUser.getHabboInfo().getUsername())); + } + } else + { + this.client.sendResponse(new TradeStartFailComposer(TradeStartFailComposer.YOU_TRADING_OFF)); + } + } else + { + this.client.sendResponse(new TradeStartFailComposer(TradeStartFailComposer.YOU_ALREADY_TRADING)); + } } } } diff --git a/src/main/java/com/eu/habbo/messages/outgoing/Outgoing.java b/src/main/java/com/eu/habbo/messages/outgoing/Outgoing.java index 4ba4c89d..3aa37f86 100644 --- a/src/main/java/com/eu/habbo/messages/outgoing/Outgoing.java +++ b/src/main/java/com/eu/habbo/messages/outgoing/Outgoing.java @@ -312,7 +312,6 @@ public class Outgoing public final static int UpdateUserLookComposer = 2429; public final static int RoomUserIgnoredComposer = 207; public final static int PetBreedingFailedComposer = 1625; - public final static int HabboNameChangedComposer = 118; public final static int RoomUserNameChangedComposer = 2182; public final static int LoveLockFurniStartComposer = 3753; public final static int LoveLockFurniFriendConfirmedComposer = 382; diff --git a/src/main/java/com/eu/habbo/messages/outgoing/Outgoing_1006.java b/src/main/java/com/eu/habbo/messages/outgoing/Outgoing_1006.java index d91f5dca..bca9efe3 100644 --- a/src/main/java/com/eu/habbo/messages/outgoing/Outgoing_1006.java +++ b/src/main/java/com/eu/habbo/messages/outgoing/Outgoing_1006.java @@ -4,7 +4,6 @@ public class Outgoing_1006 { - //public static final int TalentTrackComposer = 2842; @@ -17,8 +16,6 @@ public class Outgoing_1006 - //public static final int PollStartComposer = 749; - //public static final int PollQuestionsComposer = 3187; @@ -26,201 +23,204 @@ public class Outgoing_1006 - public static final int PetStatusUpdateComposer = 3566; //Updated + + + + public static final int PetStatusUpdateComposer = 3566; - public final static int FavoriteRoomsCountComposer = 235;//3829 //Updated - public final static int UserCurrencyComposer = 3574;//3454 //Updated - public final static int RedeemVoucherOKComposer = 391;//2719 //Updated - public final static int RoomUserShoutComposer = 59;//3271 //Updated - public final static int RoomUserStatusComposer = 12;//3386 //Updated - public final static int RoomUserDataComposer = 2421;//3944 //Updated - public final static int RoomAddRightsListComposer = 2589;//3611 //Updated - public final static int RoomRemoveRightsListComposer = 3258; //Updated - public final static int RoomRightsListComposer = 1964;//1891 //Updated - public final static int RoomUserHandItemComposer = 2479;//3664 //Updated - public final static int RoomUsersComposer = 1018;//1073 //Updated - public final static int FriendRequestComposer = 2725;//2468 //Updated - public final static int GuildBoughtComposer = 2244;//389 //Updated - public final static int AddUserBadgeComposer = 3489;//3197 //Updated - public final static int RecyclerCompleteComposer = 899;//2125 //Updated - public final static int GuildBuyRoomsComposer = 575;//3938 //Updated - public final static int FriendsComposer = 7;//2067 //Updated - public final static int StalkErrorComposer = 1543;//1135 //Updated - public final static int TradeCloseWindowComposer = 1850;//2000 //Updated - public final static int RemoveFloorItemComposer = 2658;//36 //Updated - public final static int InventoryPetsComposer = 3249;//435 //Updated - public final static int UserCreditsComposer = 1557;//2204 //Updated - public final static int WiredTriggerDataComposer = 951;//861 //Updated - public final static int TradeStoppedComposer = 3869;//2020 //Updated - public final static int ModToolUserChatlogComposer = 342;//3738 //Updated - public final static int GuildInfoComposer = 3198;//2978 //Updated - public final static int UserPermissionsComposer = 3409;//3872 //Updated - public final static int PetNameErrorComposer = 1991;//3575 //Updated - public final static int TradeStartFailComposer = 283;//2320 //Updated - public final static int AddHabboItemComposer = 3454;//274 //Updated - public final static int InventoryBotsComposer = 307;//320 //Updated - public final static int CanCreateRoomComposer = 2877;//2463 //Updated - public final static int MarketplaceBuyErrorComposer = 1299;//1823 //Updated - public final static int BonusRareComposer = 2261;//3517 //Updated - public final static int HotelViewComposer = 0x0404;//3152 //Updated - public final static int UpdateFriendComposer = 3525;//170 //Updated - public final static int FloorItemUpdateComposer = 2277;//648 //Updated - public final static int RoomAccessDeniedComposer = 2897;//3953 //Updated - public final static int GuildFurniWidgetComposer = 1875;//269 //Updated - public final static int GiftConfigurationComposer = 1715;//1048 //Updated - public final static int UserClubComposer = 2018;//2869 //Updated - public final static int InventoryBadgesComposer = 399;//1629 //Updated - public final static int RoomUserTypingComposer = 2327;//3624 //Updated - public final static int GuildJoinErrorComposer = 1761;//1952 //Updated - public final static int RoomCategoriesComposer = 1824;//3241 //Updated - public final static int InventoryAchievementsComposer = 2539;//3295 //Updated - public final static int MarketplaceItemInfoComposer = 894;//1066 //Updated - public final static int RoomRelativeMapComposer = 3287;//1975 //Updated - public final static int ModToolComposerTwo = 1890;//1917 //Updated - public final static int ModToolComposerOne = 1722;//2303 //Updated - public final static int RoomRightsComposer = 1421;//520 //Updated - public final static int ObjectOnRollerComposer = 450;//1488 //Updated - public final static int PollStartComposer = 3206;//749 //Updated - public final static int GuildRefreshMembersListComposer = 1661;//2055 //Updated - public final static int UserPerksComposer = 3281;//1218 //Updated - public final static int UserCitizinShipComposer = 3285;//3439 //Updated - public final static int PublicRoomsComposer = 972;//2506 //Updated //-> 580 (Oud)? - public final static int MarketplaceOffersComposer = 2440;//3289 //Updated - public final static int ModToolComposer = 3087;//1901 //Updated - public final static int UserBadgesComposer = 2442;//3486 //Updated - public final static int GuildManageComposer = 2129;//601 //Updated - public final static int RemoveFriendComposer = -1106;//1106 - public final static int BannerTokenComposer = -3033;//3033 - public final static int UserDataComposer = 558;//3491 //Updated - public final static int UserSearchResultComposer = 1590;//1573 //Updated - public final static int ModToolUserRoomVisitsComposer = 520;//2129 //Updated - public final static int RoomUserRespectComposer = 3137;//2143 //Updated - public final static int RoomChatSettingsComposer = 901;//3710 //Updated - public final static int RemoveHabboItemComposer = 2368;//3233 //Updated - public final static int RoomUserRemoveComposer = 364;//2819 //Updated - public final static int RoomHeightMapComposer = 3491;//1624 //Updated - public final static int RoomPetHorseFigureComposer = 3140;//1644 //Updated - public final static int PetErrorComposer = 3013;//779 //Updated - public final static int TradeUpdateComposer = 1649;//1221 //Update - public final static int PrivateRoomsComposer = 2523;//2653 //Updated - public final static int RoomModelComposer = 1186;//2297 //Updated - public final static int RoomScoreComposer = 1781;//2805 //Updated - public final static int KnockKnockComposer = 2988;//3198 //Updated - public final static int SecureLoginOKComposer = 1992;//2753 //Updated - public final static int SessionRightsComposer = 2934;//1313 //Updated - public final static int GuildMemberUpdateComposer = 3641;//862 //Updated - public final static int RoomFloorItemsComposer = 144;//2124 //Updated - public final static int InventoryItemsComposer = 1559;//3029 //Updated - public final static int RoomUserTalkComposer = 874;//612 //Updated - public final static int TradeStartComposer = 833;//3713 //Updated - public final static int InventoryItemUpdateComposer = 2204;//1577 //Updated - public final static int ModToolIssueUpdateComposer = 471;//3019 //Updated - public final static int MeMenuSettingsComposer = 3437;//15 //Updated - public final static int ModToolRoomInfoComposer = 1328;//3722 //Updated - public final static int GuildListComposer = 3082;//587 //Updated - public final static int RecyclerLogicComposer = 1527;//1317 //Updated - public final static int UserHomeRoomComposer = 3876;//40 //Updated - public final static int RoomUserDanceComposer = 2184;//2091 //Updated - public final static int RoomSettingsUpdatedComposer = 1069;//543 //Updated - public final static int AlertPurchaseFailedComposer = 2663;//2602 //Updated - public final static int RoomDataComposer = 624;//3995 //Updated - public final static int TagsComposer = 456;//3487 //Updated - public final static int InventoryRefreshComposer = 2352;//3243 //Updated - public final static int RemovePetComposer = 775;//467 //Updated - public final static int RemoveWallItemComposer = 1980;//2466 //Updated - public final static int TradeCompleteComposer = 1668;//3766 //Updated - public final static int NewsWidgetsComposer = 3958;//1345 //Updated - public final static int WiredEffectDataComposer = 2101;//1279 //Updated - public final static int BubbleAlertComposer = 1569;//777 //Updated - public final static int ReloadRecyclerComposer = 3704;//1093 //Updated - public final static int MoodLightDataComposer = 2780;//2033 //Updated - public final static int WiredRewardAlertComposer = 1539;//723 //Updated - public final static int CatalogPageComposer = 1384;//3518 //Updated - public final static int CatalogModeComposer = 3408;//3442 //Updated - public final static int RoomUserUpdateNameComposer = 1263;//542 //Updated - public final static int AddFloorItemComposer = 2502;//1590 //Updated - public final static int DebugConsoleComposer = 1003;//336 //Updated - public final static int HallOfFameComposer = 3736;//670 //Updated - public final static int WiredSavedComposer = 598;//39 //Updated - public final static int RoomPaintComposer = 2225;//2979 //Updated - public final static int MarketplaceConfigComposer = 739;//2524 //Updated - public final static int AddBotComposer = 1771;//3043 //Updated - public final static int FriendRequestErrorComposer = 3601;//2467 //Updated - public final static int GuildMembersComposer = 1788;//3986 //Updated - public final static int RoomOpenComposer = 2266;//925 //2561 1945?? //Updated - public final static int ModToolRoomChatlogComposer = 1633;//3869 //Updated - public final static int DiscountComposer = 3254;//1061 //Updated - public final static int MarketplaceCancelSaleComposer = 751;//1959 //Updated - public final static int RoomPetRespectComposer = 2348;//778 //Updated - public final static int RoomSettingsComposer = 3622; //Updated - public final static int TalentTrackComposer = 3235;//2842 //Updated - public final static int CatalogPagesListComposer = 402;//1684 //Updated - public final static int AlertLimitedSoldOutComposer = 3467;//3290 //Updated - public final static int CatalogUpdatedComposer = 2452;//2028 //Updated - public final static int PurchaseOKComposer = 2316;//1189 //Updated - public final static int WallItemUpdateComposer = 21;//2190 //Updated - public final static int TradeAcceptedComposer = 3042;//741 //Updated - public final static int AddWallItemComposer = 706;//2156 //Updated - public final static int ModToolRoomEntryInfoComposer = 381;//2644 //Updated - public final static int HotelViewDataComposer = 3810;//1374 //Updated - public final static int PresentItemOpenedComposer = 2004;//1540 //Updated TODO: -> BELANGRIJK: Zoek op: .push(new RoomUsersHandler voor andere items?? - public final static int RoomUserRemoveRightsComposer = 61;//1496 //Updated TODO: Doet geen ene flikker? - public final static int UserBCLimitsComposer = 3408;//3442 //Updated - public final static int PetTrainingPanelComposer = 1897;//456 //Updated - public final static int RoomPaneComposer = 381;//2644 //Updated - public final static int RedeemVoucherErrorComposer = 1809;//2630 //Updated - public final static int RoomCreatedComposer = 3168;//3373 //Updated - public final static int GenericAlertComposer = 1406;//1548 //Updated - public final static int GroupPartsComposer = 3569;//567 //Updated - public final static int ModToolIssueInfoComposer = 3928;//2473 //Updated - public final static int RoomUserWhisperComposer = 2945;//2323 //Updated - public final static int BotErrorComposer = 1932;//3420 //Updated - public final static int FreezeLivesComposer = 3985;//3526 //Updated - public final static int LoadFriendRequestsComposer = 683;//2193 //Updated - public final static int MarketplaceSellItemComposer = 92;//1932 //Updated - public final static int ClubDataComposer = 2273;//1919 //Updated - public final static int ProfileFriendsComposer = 2231;//322 //Updated - public final static int MarketplaceOwnItemsComposer = 311;//593 //Updated - public final static int RoomOwnerComposer = 3608;//1069 //Updated - public final static int WiredConditionDataComposer = 3969;//1639 //Updated - public final static int ModToolUserInfoComposer = 828;//2583 //Updated - public final static int UserWardrobeComposer = 406;//370 //Updated - public final static int RoomPetExperienceComposer = 3711;//717 //Updated - public final static int FriendChatMessageComposer = 3957;//2094 //Updated - public final static int PetInformationComposer = 64;//2286 //Updated - public final static int RoomThicknessComposer = 2145;//2627 //Updated - public final static int AddPetComposer = 2194;//3099 //Updated - public final static int UpdateStackHeightComposer = 597;//1576 //Updated - public final static int RemoveBotComposer = 3691;//2565 //Updated - public final static int RoomEnterErrorComposer = 817;//1619 //Updated - public final static int PollQuestionsComposer = 1143;//3187 //Updated - public final static int GenericErrorMessages = 1169;//2839 //Updated - public final static int RoomWallItemsComposer = 3524;//395 //Updated - public final static int RoomUserEffectComposer = 579;//3040 //Updated - public final static int PetBreedsComposer = 1947;//3302 //Updated - public final static int ModToolIssueChatlogComposer = 3053;//1445 //Updated - public final static int RoomUserActionComposer = 3741;//12 //Updated - public final static int BotSettingsComposer = 3092;//1522 //Updated - public final static int UserProfileComposer = 3049;//1503 //Updated - public final static int MinimailCountComposer = 761;//2253 //Updated - public final static int UserAchievementScoreComposer = 3681; //Updated - public final static int PetLevelUpComposer = 3100; //Updated - public final static int UserPointsComposer = 1439; //Updated - public final static int ReportRoomFormComposer = 2573; //Updated - public final static int ModToolIssueHandledComposer = 1297; //Updated - public final static int FloodCounterComposer = 2106; //Updated - public final static int UpdateFailedComposer = 3006; //Updated - public final static int FloorPlanEditorDoorSettingsComposer = 1988; //Updated - public final static int FloorPlanEditorBlockedTilesComposer = 3388; //Updated - public final static int BuildersClubExpiredComposer = 25; //Updated - public final static int RoomSettingsSavedComposer = 2769; //Updated - public final static int MessengerInitComposer = 3682; //Updated - public final static int UserClothesComposer = 2651; //Updated - public final static int UserEffectsListComposer = 1348; //Updated - public final static int NewUserIdentityComposer = 1733; //Updated + public final static int FavoriteRoomsCountComposer = 235; + public final static int UserCurrencyComposer = 3574; + public final static int RedeemVoucherOKComposer = 391; + public final static int RoomUserShoutComposer = 59; + public final static int RoomUserStatusComposer = 12; + public final static int RoomUserDataComposer = 2421; + public final static int RoomAddRightsListComposer = 2589; + public final static int RoomRemoveRightsListComposer = 3258; + public final static int RoomRightsListComposer = 1964; + public final static int RoomUserHandItemComposer = 2479; + public final static int RoomUsersComposer = 1018; + public final static int FriendRequestComposer = 2725; + public final static int GuildBoughtComposer = 2244; + public final static int AddUserBadgeComposer = 3489; + public final static int RecyclerCompleteComposer = 899; + public final static int GuildBuyRoomsComposer = 575; + public final static int FriendsComposer = 7; + public final static int StalkErrorComposer = 1543; + public final static int TradeCloseWindowComposer = 1850; + public final static int RemoveFloorItemComposer = 2658; + public final static int InventoryPetsComposer = 3249; + public final static int UserCreditsComposer = 1557; + public final static int WiredTriggerDataComposer = 951; + public final static int TradeStoppedComposer = 3869; + public final static int ModToolUserChatlogComposer = 342; + public final static int GuildInfoComposer = 3198; + public final static int UserPermissionsComposer = 3409; + public final static int PetNameErrorComposer = 1991; + public final static int TradeStartFailComposer = 283; + public final static int AddHabboItemComposer = 3454; + public final static int InventoryBotsComposer = 307; + public final static int CanCreateRoomComposer = 2877; + public final static int MarketplaceBuyErrorComposer = 1299; + public final static int BonusRareComposer = 2261; + public final static int HotelViewComposer = 0x0404; + public final static int UpdateFriendComposer = 3525; + public final static int FloorItemUpdateComposer = 2277; + public final static int RoomAccessDeniedComposer = 2897; + public final static int GuildFurniWidgetComposer = 1875; + public final static int GiftConfigurationComposer = 1715; + public final static int UserClubComposer = 2018; + public final static int InventoryBadgesComposer = 399; + public final static int RoomUserTypingComposer = 2327; + public final static int GuildJoinErrorComposer = 1761; + public final static int RoomCategoriesComposer = 1824; + public final static int InventoryAchievementsComposer = 2539; + public final static int MarketplaceItemInfoComposer = 894; + public final static int RoomRelativeMapComposer = 3287; + public final static int ModToolComposerTwo = 1890; + public final static int ModToolComposerOne = 1722; + public final static int RoomRightsComposer = 1421; + public final static int ObjectOnRollerComposer = 450; + public final static int PollStartComposer = 3206; + public final static int GuildRefreshMembersListComposer = 1661; + public final static int UserPerksComposer = 3281; + public final static int UserCitizinShipComposer = 3285; + public final static int PublicRoomsComposer = 972; + public final static int MarketplaceOffersComposer = 2440; + public final static int ModToolComposer = 3087; + public final static int UserBadgesComposer = 2442; + public final static int GuildManageComposer = 2129; + public final static int RemoveFriendComposer = -1106; + public final static int BannerTokenComposer = -3033; + public final static int UserDataComposer = 558; + public final static int UserSearchResultComposer = 1590; + public final static int ModToolUserRoomVisitsComposer = 520; + public final static int RoomUserRespectComposer = 3137; + public final static int RoomChatSettingsComposer = 901; + public final static int RemoveHabboItemComposer = 2368; + public final static int RoomUserRemoveComposer = 364; + public final static int RoomHeightMapComposer = 3491; + public final static int RoomPetHorseFigureComposer = 3140; + public final static int PetErrorComposer = 3013; + public final static int TradeUpdateComposer = 1649; + public final static int PrivateRoomsComposer = 2523; + public final static int RoomModelComposer = 1186; + public final static int RoomScoreComposer = 1781; + public final static int KnockKnockComposer = 2988; + public final static int SecureLoginOKComposer = 1992; + public final static int SessionRightsComposer = 2934; + public final static int GuildMemberUpdateComposer = 3641; + public final static int RoomFloorItemsComposer = 144; + public final static int InventoryItemsComposer = 1559; + public final static int RoomUserTalkComposer = 874; + public final static int TradeStartComposer = 833; + public final static int InventoryItemUpdateComposer = 2204; + public final static int ModToolIssueUpdateComposer = 471; + public final static int MeMenuSettingsComposer = 3437; + public final static int ModToolRoomInfoComposer = 1328; + public final static int GuildListComposer = 3082; + public final static int RecyclerLogicComposer = 1527; + public final static int UserHomeRoomComposer = 3876; + public final static int RoomUserDanceComposer = 2184; + public final static int RoomSettingsUpdatedComposer = 1069; + public final static int AlertPurchaseFailedComposer = 2663; + public final static int RoomDataComposer = 624; + public final static int TagsComposer = 456; + public final static int InventoryRefreshComposer = 2352; + public final static int RemovePetComposer = 775; + public final static int RemoveWallItemComposer = 1980; + public final static int TradeCompleteComposer = 1668; + public final static int NewsWidgetsComposer = 3958; + public final static int WiredEffectDataComposer = 2101; + public final static int BubbleAlertComposer = 1569; + public final static int ReloadRecyclerComposer = 3704; + public final static int MoodLightDataComposer = 2780; + public final static int WiredRewardAlertComposer = 1539; + public final static int CatalogPageComposer = 1384; + public final static int CatalogModeComposer = 3408; + public final static int RoomUserUpdateNameComposer = 1263; + public final static int AddFloorItemComposer = 2502; + public final static int DebugConsoleComposer = 1003; + public final static int HallOfFameComposer = 3736; + public final static int WiredSavedComposer = 598; + public final static int RoomPaintComposer = 2225; + public final static int MarketplaceConfigComposer = 739; + public final static int AddBotComposer = 1771; + public final static int FriendRequestErrorComposer = 3601; + public final static int GuildMembersComposer = 1788; + public final static int RoomOpenComposer = 2266; + public final static int ModToolRoomChatlogComposer = 1633; + public final static int DiscountComposer = 3254; + public final static int MarketplaceCancelSaleComposer = 751; + public final static int RoomPetRespectComposer = 2348; + public final static int RoomSettingsComposer = 3622; + public final static int TalentTrackComposer = 3235; + public final static int CatalogPagesListComposer = 402; + public final static int AlertLimitedSoldOutComposer = 3467; + public final static int CatalogUpdatedComposer = 2452; + public final static int PurchaseOKComposer = 2316; + public final static int WallItemUpdateComposer = 21; + public final static int TradeAcceptedComposer = 3042; + public final static int AddWallItemComposer = 706; + public final static int ModToolRoomEntryInfoComposer = 381; + public final static int HotelViewDataComposer = 3810; + public final static int PresentItemOpenedComposer = 2004; + public final static int RoomUserRemoveRightsComposer = 61; + public final static int UserBCLimitsComposer = 3408; + public final static int PetTrainingPanelComposer = 1897; + public final static int RoomPaneComposer = 381; + public final static int RedeemVoucherErrorComposer = 1809; + public final static int RoomCreatedComposer = 3168; + public final static int GenericAlertComposer = 1406; + public final static int GroupPartsComposer = 3569; + public final static int ModToolIssueInfoComposer = 3928; + public final static int RoomUserWhisperComposer = 2945; + public final static int BotErrorComposer = 1932; + public final static int FreezeLivesComposer = 3985; + public final static int LoadFriendRequestsComposer = 683; + public final static int MarketplaceSellItemComposer = 92; + public final static int ClubDataComposer = 2273; + public final static int ProfileFriendsComposer = 2231; + public final static int MarketplaceOwnItemsComposer = 311; + public final static int RoomOwnerComposer = 3608; + public final static int WiredConditionDataComposer = 3969; + public final static int ModToolUserInfoComposer = 828; + public final static int UserWardrobeComposer = 406; + public final static int RoomPetExperienceComposer = 3711; + public final static int FriendChatMessageComposer = 3957; + public final static int PetInformationComposer = 64; + public final static int RoomThicknessComposer = 2145; + public final static int AddPetComposer = 2194; + public final static int UpdateStackHeightComposer = 597; + public final static int RemoveBotComposer = 3691; + public final static int RoomEnterErrorComposer = 817; + public final static int PollQuestionsComposer = 1143; + public final static int GenericErrorMessages = 1169; + public final static int RoomWallItemsComposer = 3524; + public final static int RoomUserEffectComposer = 579; + public final static int PetBreedsComposer = 1947; + public final static int ModToolIssueChatlogComposer = 3053; + public final static int RoomUserActionComposer = 3741; + public final static int BotSettingsComposer = 3092; + public final static int UserProfileComposer = 3049; + public final static int MinimailCountComposer = 761; + public final static int UserAchievementScoreComposer = 3681; + public final static int PetLevelUpComposer = 3100; + public final static int UserPointsComposer = 1439; + public final static int ReportRoomFormComposer = 2573; + public final static int ModToolIssueHandledComposer = 1297; + public final static int FloodCounterComposer = 2106; + public final static int UpdateFailedComposer = 3006; + public final static int FloorPlanEditorDoorSettingsComposer = 1988; + public final static int FloorPlanEditorBlockedTilesComposer = 3388; + public final static int BuildersClubExpiredComposer = 25; + public final static int RoomSettingsSavedComposer = 2769; + public final static int MessengerInitComposer = 3682; + public final static int UserClothesComposer = 2651; + public final static int UserEffectsListComposer = 1348; + public final static int NewUserIdentityComposer = 1733; public final static int NewNavigatorEventCategoriesComposer = 1391; public final static int NewNavigatorCollapsedCategoriesComposer = 3110; public final static int NewNavigatorLiftedRoomsComposer = 2469; @@ -236,7 +236,7 @@ public class Outgoing_1006 public final static int MachineIDComposer = 3609; public final static int PongComposer = 1349; - //Uknown but work + public final static int UnknownComposer4 = 1411; public final static int UnknownComposer5 = 568; public final static int UnknownComposer6 = 32; @@ -257,17 +257,17 @@ public class Outgoing_1006 public final static int RoomInviteErrorCodeComposer = 76; public final static int PostItStickyPoleOpenComposer = 753; public final static int NewYearResolutionProgressComposer = 741; - public final static int ClubGiftReceivedComposer = 735; //:test 735 s:t i:1 s:s i:230 s:throne i:1 b:1 i:1 i:10; - public final static int ItemStateComposer = 664; //TODO: (i: itemId, i:state) - public final static int ItemExtraDataComposer = 654; //:test 654 s:92015 i:1 i:1 s:renterId s:0 s:0.0 s:0 + public final static int ClubGiftReceivedComposer = 735; + public final static int ItemStateComposer = 664; + public final static int ItemExtraDataComposer = 654; + - //NotSure Needs Testing public final static int QuestionInfoComposer = 3047; public final static int TalentTrackEmailVerifiedComposer = 866; public final static int TalentTrackEmailFailedComposer = 369; public final static int UnknownAvatarEditorComposer = 72; - public final static int UnknownGuildComposer = 588; //Could be related to forums. + public final static int UnknownGuildComposer = 588; public final static int UnknownGuildForumComposer1 = 600; public final static int UnknownGuildForumComposer2 = 1291; @@ -292,7 +292,7 @@ public class Outgoing_1006 public final static int GuideToolsComposer = 117; public final static int GuardianNewReportReceivedComposer = 3123; public final static int GuardianVotingRequestedComposer = 2331; - public final static int GuardianVotingVotesComposer = 3107; //:test 3107 i:10 i:0 i:1 i:2 i:3 i:4 i:5 i:0 i:1 i:2 i:3 + public final static int GuardianVotingVotesComposer = 3107; public final static int GuardianVotingResultComposer = 91; public final static int GuardianVotingTimeEnded = 556; @@ -302,120 +302,120 @@ public class Outgoing_1006 public final static int RoomUnknown2Composer = 535; public final static int RoomUnknown3Composer = 2342; - public final static int UnknownEffectsComposer = 53; //:test 53 i:10 + public final static int UnknownEffectsComposer = 53; public final static int OldPublicRoomsComposer = 580; public final static int ItemStateComposer2 = 569; - public final static int HotelWillCloseInMinutesComposer = 518; //:test 518 i:10 - public final static int HotelWillCloseInMinutesAndBackInComposer = 2860; //:test 2860 b:1 i:1 i:2 - public final static int HotelClosesAndWillOpenAtComposer = 2168; //:test 2168 i:0 i:1 b:1 + public final static int HotelWillCloseInMinutesComposer = 518; + public final static int HotelWillCloseInMinutesAndBackInComposer = 2860; + public final static int HotelClosesAndWillOpenAtComposer = 2168; public final static int HotelClosedAndOpensComposer = 888; public final static int StaffAlertAndOpenHabboWayComposer = 1035; public final static int StaffAlertWithLinkComposer = 1189; public final static int StaffAlertWIthLinkAndOpenHabboWayComposer = 3964; - public final static int RoomMessagesPostedCountComposer = 1520; //:test 1520 i:12 s:Derp i:100 - public final static int CantScratchPetNotOldComposer = 118; //:test 118 i:1 i:2 + public final static int RoomMessagesPostedCountComposer = 1520; + public final static int CantScratchPetNotOldComposer = 118; public final static int PetBoughtNotificationComposer = 1040; public final static int MessagesForYouComposer = 2506; - public final static int UnknownStatusComposer = 1648; //:test 1648 i:0 + public final static int UnknownStatusComposer = 1648; public final static int CloseWebPageComposer = 320; - public final static int PickMonthlyClubGiftNotificationComposer = 2786; //:test 2786 i:0 - public final static int RemoveGuildFromRoomComposer = 514; //:test 514 i:12 + public final static int PickMonthlyClubGiftNotificationComposer = 2786; + public final static int RemoveGuildFromRoomComposer = 514; public final static int RoomBannedUsersComposer = 504; - public final static int OpenRoomCreationWindowComposer = 497; //:test 497 + public final static int OpenRoomCreationWindowComposer = 497; public final static int ItemsDataUpdateComposer = 466; - public final static int WelcomeGiftComposer = 445; //:test 445 s:derp@derp.com b:0 b:1 i:230 b:1 - public final static int SimpleRoomPollStartComposer = 3047; //:test 3047 s:a i:10 i:20 i:10000 i:1 i:1 i:3 s:abcdefghijklmnopqrstuvwxyz12345678901234? i:1 s:a s:b - public final static int RoomNoRightsComposer = 3929; //Removes also the 'use' button. :D + public final static int WelcomeGiftComposer = 445; + public final static int SimpleRoomPollStartComposer = 3047; + public final static int RoomNoRightsComposer = 3929; public final static int GuildEditFailComposer = 3918; public final static int MinimailNewMessageComposer = 3903; public final static int RoomFilterWordsComposer = 3889; public final static int VerifyMobileNumberComposer = 3872; - public final static int NewUserGiftComposer = 3098; //:test 3098 i:1 i:1 i:1 i:2 s:a.png i:1 s:a s:b s:a.png i:1 s:a s:b + public final static int NewUserGiftComposer = 3098; public final static int UpdateUserLookComposer = 3864; - public final static int UserIgnoredComposer = 3858; //:test 3858 i:1 s:a 1/2 ignore. 3 unignore s:Username - public final static int PetBreedingFailedComposer = 3851; //:test i:0 i:1 - public final static int HabboNameChangedComposer = 3849; //:test 3849 i:0 s:aa i:3 s:a s:b s:c - public final static int RoomUserNameChangedComposer = 2063; //:test 2063 i:1 i:1 s:Derp - public final static int LoveLockFurniStartComposer = 2883; //:test 2883 i:91638 b:1 - public final static int LoveLockFurniFriendConfirmedComposer = 2746; //:test 2746 i:91638 - public final static int LoveLockFurniFinishedComposer = 3825; //:test 3825 i:91638 + public final static int UserIgnoredComposer = 3858; + public final static int PetBreedingFailedComposer = 3851; + public final static int HabboNameChangedComposer = 3849; + public final static int RoomUserNameChangedComposer = 2063; + public final static int LoveLockFurniStartComposer = 2883; + public final static int LoveLockFurniFriendConfirmedComposer = 2746; + public final static int LoveLockFurniFinishedComposer = 3825; public final static int OpenPetPackageNameValidationComposer = 38; public final static int GameCenterFeaturedPlayersComposer = 3788; - public final static int HabboMallComposer = 3770; //Unused as far as I can tell. - public final static int TargetedOfferComposer = 1495; //:test 1495 i:1 i:1 s:a s:b i:1 i:2 i:5 i:9 i:1000000 s:c s:d s:a.png s:e.png i:2 s:f.png s:g.png + public final static int HabboMallComposer = 3770; + public final static int TargetedOfferComposer = 1495; public final static int LeprechaunStarterBundleComposer = 3766; - public final static int VerifyMobilePhoneWindowComposer = 3695; //:test 3695 i:0 i:1 i:2 - public final static int VerifyMobilePhoneCodeWindowComposer = 2160; //:test 2160 i:1 i:0 + public final static int VerifyMobilePhoneWindowComposer = 3695; + public final static int VerifyMobilePhoneCodeWindowComposer = 2160; public final static int VerifyMobilePhoneDoneComposer = 3109; - public final static int RoomUserReceivedHandItemComposer = 3673; //:test 3673 i:2 i:2 - public final static int MutedWhisperComposer = 3326; //:test 3326 i:1000 + public final static int RoomUserReceivedHandItemComposer = 3673; + public final static int MutedWhisperComposer = 3326; public final static int UnknownHintComposer = 3484; - public final static int BullyReportHandled = 3401; //:test 3401 i:0 - public final static int PromoteRoomsComposer = 3376; //:test 3376 b:1 i:1 i:1 s:derp b:1 //NOT SURE - public final static int NotEnoughPointsTypeComposer = 334; //:test 334 b:0 b:1 i:150 - public final static int WatchAndEarnRewardComposer = 3325; //:test 3325 s:s i:230 s:throne s:derp + public final static int BullyReportHandled = 3401; + public final static int PromoteRoomsComposer = 3376; + public final static int NotEnoughPointsTypeComposer = 334; + public final static int WatchAndEarnRewardComposer = 3325; public final static int NewYearResolutionComposer = 327; - public final static int WelcomeGiftErrorComposer = 3268; //:test 3268 i:3 + public final static int WelcomeGiftErrorComposer = 3268; public final static int RentableItemBuyOutPriceComposer = 3264; public final static int VipTutorialsStartComposer = 3217; public final static int NewNavigatorCategoryUserCountComposer = 3166; - public final static int RoomThumbnailSavedComposer = 3117; //:test 3117 - public final static int RoomEditSettingsErrorComposer = 3094; //:test 3094 i:15 i:7 s:derp - public final static int GuildAcceptMemberErrorComposer = 305; //:test 305 i:12 i:1 + public final static int RoomThumbnailSavedComposer = 3117; + public final static int RoomEditSettingsErrorComposer = 3094; + public final static int GuildAcceptMemberErrorComposer = 305; public final static int MostUselessErrorAlertComposer = 2944; public final static int GameAchievementsComposer = 2937; public final static int PetBreedingResultComposer = 2907; public final static int RoomUserQuestionAnsweredComposer = 2866; - public final static int PetBreedingStartComposer = 285; //:test 285 i:0 i:1 i:2 + public final static int PetBreedingStartComposer = 285; public final static int CustomNotificationComposer = 2835; - public final static int UpdateStackHeightTileHeightComposer = 2830; //:test 2830 i:86476 i:999 - public final static int MarketplaceItemPostedComposer = 2797; //:test 2797 i:0 + public final static int UpdateStackHeightTileHeightComposer = 2830; + public final static int MarketplaceItemPostedComposer = 2797; public final static int UnknownHabboQuizComposer = 2750; public final static int GuildFavoriteRoomUserUpdateComposer = 275; public final static int RoomAdErrorComposer = 2692; - public final static int NewNavigatorDimensionsComposer = 2617; //:test 2617 i:10 i:10 i:2 i:0 b:0 i:10 - public final static int CameraPublishWaitMessageComposer = 2612; //:test 2612 b:1 i:1 s:derp - public final static int RoomInviteComposer = 2608; //:test 2608 i:0 s:derp - public final static int HelperRequestFailedComposer = 1917; //:test 1917 i:1 i:1 i:1 b:1 s:a s:b s:c + public final static int NewNavigatorDimensionsComposer = 2617; + public final static int CameraPublishWaitMessageComposer = 2612; + public final static int RoomInviteComposer = 2608; + public final static int HelperRequestFailedComposer = 1917; public final static int UnknownHelperComposer = 2544; - public final static int HelperRequestDisabledComposer = 1125; //:test 1125 s:derp - public final static int RoomUnitIdleComposer = 2462; //:test 2462 i:2 b:0 + public final static int HelperRequestDisabledComposer = 1125; + public final static int RoomUnitIdleComposer = 2462; public final static int QuestCompletedComposer = 2459; - public final static int UnkownPetPackegeComposer = 2417; //:test 2417 i:2 s:a s:b s:c s:d - public final static int ForwardToRoomComposer = 2382; //:test 2382 i:16 - public final static int EffectsListEffectEnableComposer = 2381; //:test 2381 i:20 i:1000 b:1 + public final static int UnkownPetPackegeComposer = 2417; + public final static int ForwardToRoomComposer = 2382; + public final static int EffectsListEffectEnableComposer = 2381; public final static int CompetitionEntrySubmitResultComposer = 2308; - public final static int ExtendClubMessageComposer = 2304; //:test 2304 i:1 s:derp b:1 i:10 i:0 i:0 b:1 i:1 i:1 b:1 i:1 i:1 i:1 i:1 i:1 i:1 - public final static int InventoryAddEffectComposer = 215; //:test 215 i:120 i:0 i:10 b:1 + public final static int ExtendClubMessageComposer = 2304; + public final static int InventoryAddEffectComposer = 215; public final static int TalentLevelUpdateComposer = 1956; - public final static int BullyReportMessageComposer = 1858; //:test 1858 i:0 - public final static int UnknownQuestComposer3 = 1851; //_SafeStr_9789 - public final static int FriendToolbarNotificationComposer = 1839; //:test 1839 s:0 i:0 s:ADM - public final static int MessengerErrorComposer = 1838;//:test 1838 i:1 i:0 i:0 - public final static int CameraPriceComposer = 1676;//:test 1676 i:2 i:2 i:105 - public final static int PetBreedingCompleted = 1628; //:test 1628 i:1 i:0 + public final static int BullyReportMessageComposer = 1858; + public final static int UnknownQuestComposer3 = 1851; + public final static int FriendToolbarNotificationComposer = 1839; + public final static int MessengerErrorComposer = 1838; + public final static int CameraPriceComposer = 1676; + public final static int PetBreedingCompleted = 1628; public final static int RoomUserUnbannedComposer = 1625; - public final static int CommunityGoalComposer = 1579; //:test 1579 b:1 i:0 i:1 i:2 i:3 i:4 i:5 s:a i:6 i:1 i:1 - public final static int UnknownRoomVisitsComposer = 155; //:test 155 i:2 i:1 s:a s:b i:2 s:c s:d + public final static int CommunityGoalComposer = 1579; + public final static int UnknownRoomVisitsComposer = 155; public final static int CanCreateEventComposer = 1542; public final static int UnknownGroupComposer = 1507; public final static int YoutubeMessageComposer1 = 1477; public final static int YoutubeMessageComposer2 = 1475; - public final static int RoomCategoryUpdateMessageComposer = 1433; //:test 1433 i:0 + public final static int RoomCategoryUpdateMessageComposer = 1433; public final static int UnknownQuestComposer2 = 1415; - public final static int GiftReceiverNotFoundComposer = 1374; //:test 1374 - public final static int ConvertedForwardToRoomComposer = 1323; //:test 1323 s:lol i:14 + public final static int GiftReceiverNotFoundComposer = 1374; + public final static int ConvertedForwardToRoomComposer = 1323; public final static int FavoriteRoomChangedComposer = 1317; - public final static int AlertPurchaseUnavailableComposer = 1303; //:test 1303 i:0 - public final static int PetBreedingStartFailedComposer = 1252; //:test 1252 i:0 + public final static int AlertPurchaseUnavailableComposer = 1303; + public final static int PetBreedingStartFailedComposer = 1252; public final static int DailyQuestComposer = 1244; public final static int NewNavigatorRoomEventComposer = 1162; public final static int HotelViewHideCommunityVoteButtonComposer = 115; - public final static int CatalogSearchResultComposer = 1142 ; //:test 1142 i:4 s:a b:1 i:1 i:0 i:0 b:0 i:1 s:s i:230 s:throne i:230 b:0 i:0 b:0 - public final static int FriendFindingRoomComposer = 1037; //:test 1037 b:0 + public final static int CatalogSearchResultComposer = 1142 ; + public final static int FriendFindingRoomComposer = 1037; public final static int UnknownQuestComposer1 = 1010; diff --git a/src/main/java/com/eu/habbo/messages/outgoing/Outgoing_Back.java b/src/main/java/com/eu/habbo/messages/outgoing/Outgoing_Back.java index fd952256..50efa178 100644 --- a/src/main/java/com/eu/habbo/messages/outgoing/Outgoing_Back.java +++ b/src/main/java/com/eu/habbo/messages/outgoing/Outgoing_Back.java @@ -4,7 +4,6 @@ public class Outgoing_Back { - //public static final int TalentTrackComposer = 2842; @@ -17,8 +16,6 @@ public class Outgoing_Back - //public static final int PollStartComposer = 749; - //public static final int PollQuestionsComposer = 3187; @@ -26,201 +23,204 @@ public class Outgoing_Back - public static final int PetStatusUpdateComposer = 3566; //Updated + + + + public static final int PetStatusUpdateComposer = 3566; - public final static int FavoriteRoomsCountComposer = 235;//3829 //Updated - public final static int UserCurrencyComposer = 3574;//3454 //Updated - public final static int RedeemVoucherOKComposer = 391;//2719 //Updated - public final static int RoomUserShoutComposer = 59;//3271 //Updated - public final static int RoomUserStatusComposer = 12;//3386 //Updated - public final static int RoomUserDataComposer = 2421;//3944 //Updated - public final static int RoomAddRightsListComposer = 2589;//3611 //Updated - public final static int RoomRemoveRightsListComposer = 3258; //Updated - public final static int RoomRightsListComposer = 1964;//1891 //Updated - public final static int RoomUserHandItemComposer = 2479;//3664 //Updated - public final static int RoomUsersComposer = 1018;//1073 //Updated - public final static int FriendRequestComposer = 2725;//2468 //Updated - public final static int GuildBoughtComposer = 2244;//389 //Updated - public final static int AddUserBadgeComposer = 3489;//3197 //Updated - public final static int RecyclerCompleteComposer = 899;//2125 //Updated - public final static int GuildBuyRoomsComposer = 575;//3938 //Updated - public final static int FriendsComposer = 7;//2067 //Updated - public final static int StalkErrorComposer = 1543;//1135 //Updated - public final static int TradeCloseWindowComposer = 1850;//2000 //Updated - public final static int RemoveFloorItemComposer = 2658;//36 //Updated - public final static int InventoryPetsComposer = 3249;//435 //Updated - public final static int UserCreditsComposer = 1557;//2204 //Updated - public final static int WiredTriggerDataComposer = 951;//861 //Updated - public final static int TradeStoppedComposer = 3869;//2020 //Updated - public final static int ModToolUserChatlogComposer = 342;//3738 //Updated - public final static int GuildInfoComposer = 3198;//2978 //Updated - public final static int UserPermissionsComposer = 3409;//3872 //Updated - public final static int PetNameErrorComposer = 1991;//3575 //Updated - public final static int TradeStartFailComposer = 283;//2320 //Updated - public final static int AddHabboItemComposer = 3454;//274 //Updated - public final static int InventoryBotsComposer = 307;//320 //Updated - public final static int CanCreateRoomComposer = 2877;//2463 //Updated - public final static int MarketplaceBuyErrorComposer = 1299;//1823 //Updated - public final static int BonusRareComposer = 2261;//3517 //Updated - public final static int HotelViewComposer = 0x0404;//3152 //Updated - public final static int UpdateFriendComposer = 3525;//170 //Updated - public final static int FloorItemUpdateComposer = 2277;//648 //Updated - public final static int RoomAccessDeniedComposer = 2897;//3953 //Updated - public final static int GuildFurniWidgetComposer = 1875;//269 //Updated - public final static int GiftConfigurationComposer = 1715;//1048 //Updated - public final static int UserClubComposer = 2018;//2869 //Updated - public final static int InventoryBadgesComposer = 399;//1629 //Updated - public final static int RoomUserTypingComposer = 2327;//3624 //Updated - public final static int GuildJoinErrorComposer = 1761;//1952 //Updated - public final static int RoomCategoriesComposer = 1824;//3241 //Updated - public final static int InventoryAchievementsComposer = 2539;//3295 //Updated - public final static int MarketplaceItemInfoComposer = 894;//1066 //Updated - public final static int RoomRelativeMapComposer = 3287;//1975 //Updated - public final static int ModToolComposerTwo = 1890;//1917 //Updated - public final static int ModToolComposerOne = 1722;//2303 //Updated - public final static int RoomRightsComposer = 1421;//520 //Updated - public final static int ObjectOnRollerComposer = 450;//1488 //Updated - public final static int PollStartComposer = 3206;//749 //Updated - public final static int GuildRefreshMembersListComposer = 1661;//2055 //Updated - public final static int UserPerksComposer = 3281;//1218 //Updated - public final static int UserCitizinShipComposer = 3285;//3439 //Updated - public final static int PublicRoomsComposer = 972;//2506 //Updated //-> 580 (Oud)? - public final static int MarketplaceOffersComposer = 2440;//3289 //Updated - public final static int ModToolComposer = 3087;//1901 //Updated - public final static int UserBadgesComposer = 2442;//3486 //Updated - public final static int GuildManageComposer = 2129;//601 //Updated - public final static int RemoveFriendComposer = -1106;//1106 - public final static int BannerTokenComposer = -3033;//3033 - public final static int UserDataComposer = 558;//3491 //Updated - public final static int UserSearchResultComposer = 1590;//1573 //Updated - public final static int ModToolUserRoomVisitsComposer = 520;//2129 //Updated - public final static int RoomUserRespectComposer = 3137;//2143 //Updated - public final static int RoomChatSettingsComposer = 901;//3710 //Updated - public final static int RemoveHabboItemComposer = 2368;//3233 //Updated - public final static int RoomUserRemoveComposer = 364;//2819 //Updated - public final static int RoomHeightMapComposer = 3491;//1624 //Updated - public final static int RoomPetHorseFigureComposer = 3140;//1644 //Updated - public final static int PetErrorComposer = 3013;//779 //Updated - public final static int TradeUpdateComposer = 1649;//1221 //Update - public final static int PrivateRoomsComposer = 2523;//2653 //Updated - public final static int RoomModelComposer = 1186;//2297 //Updated - public final static int RoomScoreComposer = 1781;//2805 //Updated - public final static int KnockKnockComposer = 2988;//3198 //Updated - public final static int SecureLoginOKComposer = 1992;//2753 //Updated - public final static int SessionRightsComposer = 2934;//1313 //Updated - public final static int GuildMemberUpdateComposer = 3641;//862 //Updated - public final static int RoomFloorItemsComposer = 144;//2124 //Updated - public final static int InventoryItemsComposer = 1559;//3029 //Updated - public final static int RoomUserTalkComposer = 874;//612 //Updated - public final static int TradeStartComposer = 833;//3713 //Updated - public final static int InventoryItemUpdateComposer = 2204;//1577 //Updated - public final static int ModToolIssueUpdateComposer = 471;//3019 //Updated - public final static int MeMenuSettingsComposer = 3437;//15 //Updated - public final static int ModToolRoomInfoComposer = 1328;//3722 //Updated - public final static int GuildListComposer = 3082;//587 //Updated - public final static int RecyclerLogicComposer = 1527;//1317 //Updated - public final static int UserHomeRoomComposer = 3876;//40 //Updated - public final static int RoomUserDanceComposer = 2184;//2091 //Updated - public final static int RoomSettingsUpdatedComposer = 1069;//543 //Updated - public final static int AlertPurchaseFailedComposer = 2663;//2602 //Updated - public final static int RoomDataComposer = 624;//3995 //Updated - public final static int TagsComposer = 456;//3487 //Updated - public final static int InventoryRefreshComposer = 2352;//3243 //Updated - public final static int RemovePetComposer = 775;//467 //Updated - public final static int RemoveWallItemComposer = 1980;//2466 //Updated - public final static int TradeCompleteComposer = 1668;//3766 //Updated - public final static int NewsWidgetsComposer = 3958;//1345 //Updated - public final static int WiredEffectDataComposer = 2101;//1279 //Updated - public final static int BubbleAlertComposer = 1569;//777 //Updated - public final static int ReloadRecyclerComposer = 3704;//1093 //Updated - public final static int MoodLightDataComposer = 2780;//2033 //Updated - public final static int WiredRewardAlertComposer = 1539;//723 //Updated - public final static int CatalogPageComposer = 1384;//3518 //Updated - public final static int CatalogModeComposer = 3408;//3442 //Updated - public final static int RoomUserUpdateNameComposer = 1263;//542 //Updated - public final static int AddFloorItemComposer = 2502;//1590 //Updated - public final static int DebugConsoleComposer = 1003;//336 //Updated - public final static int HallOfFameComposer = 3736;//670 //Updated - public final static int WiredSavedComposer = 598;//39 //Updated - public final static int RoomPaintComposer = 2225;//2979 //Updated - public final static int MarketplaceConfigComposer = 739;//2524 //Updated - public final static int AddBotComposer = 1771;//3043 //Updated - public final static int FriendRequestErrorComposer = 3601;//2467 //Updated - public final static int GuildMembersComposer = 1788;//3986 //Updated - public final static int RoomOpenComposer = 2266;//925 //2561 1945?? //Updated - public final static int ModToolRoomChatlogComposer = 1633;//3869 //Updated - public final static int DiscountComposer = 3254;//1061 //Updated - public final static int MarketplaceCancelSaleComposer = 751;//1959 //Updated - public final static int RoomPetRespectComposer = 2348;//778 //Updated - public final static int RoomSettingsComposer = 3622; //Updated - public final static int TalentTrackComposer = 3235;//2842 //Updated - public final static int CatalogPagesListComposer = 402;//1684 //Updated - public final static int AlertLimitedSoldOutComposer = 3467;//3290 //Updated - public final static int CatalogUpdatedComposer = 2452;//2028 //Updated - public final static int PurchaseOKComposer = 2316;//1189 //Updated - public final static int WallItemUpdateComposer = 21;//2190 //Updated - public final static int TradeAcceptedComposer = 3042;//741 //Updated - public final static int AddWallItemComposer = 706;//2156 //Updated - public final static int ModToolRoomEntryInfoComposer = 381;//2644 //Updated - public final static int HotelViewDataComposer = 3810;//1374 //Updated - public final static int PresentItemOpenedComposer = 2004;//1540 //Updated TODO: -> BELANGRIJK: Zoek op: .push(new RoomUsersHandler voor andere items?? - public final static int RoomUserRemoveRightsComposer = 61;//1496 //Updated TODO: Doet geen ene flikker? - public final static int UserBCLimitsComposer = 3408;//3442 //Updated - public final static int PetTrainingPanelComposer = 1897;//456 //Updated - public final static int RoomPaneComposer = 381;//2644 //Updated - public final static int RedeemVoucherErrorComposer = 1809;//2630 //Updated - public final static int RoomCreatedComposer = 3168;//3373 //Updated - public final static int GenericAlertComposer = 1406;//1548 //Updated - public final static int GroupPartsComposer = 3569;//567 //Updated - public final static int ModToolIssueInfoComposer = 3928;//2473 //Updated - public final static int RoomUserWhisperComposer = 2945;//2323 //Updated - public final static int BotErrorComposer = 1932;//3420 //Updated - public final static int FreezeLivesComposer = 3985;//3526 //Updated - public final static int LoadFriendRequestsComposer = 683;//2193 //Updated - public final static int MarketplaceSellItemComposer = 92;//1932 //Updated - public final static int ClubDataComposer = 2273;//1919 //Updated - public final static int ProfileFriendsComposer = 2231;//322 //Updated - public final static int MarketplaceOwnItemsComposer = 311;//593 //Updated - public final static int RoomOwnerComposer = 3608;//1069 //Updated - public final static int WiredConditionDataComposer = 3969;//1639 //Updated - public final static int ModToolUserInfoComposer = 828;//2583 //Updated - public final static int UserWardrobeComposer = 406;//370 //Updated - public final static int RoomPetExperienceComposer = 3711;//717 //Updated - public final static int FriendChatMessageComposer = 3957;//2094 //Updated - public final static int PetInformationComposer = 64;//2286 //Updated - public final static int RoomThicknessComposer = 2145;//2627 //Updated - public final static int AddPetComposer = 2194;//3099 //Updated - public final static int UpdateStackHeightComposer = 597;//1576 //Updated - public final static int RemoveBotComposer = 3691;//2565 //Updated - public final static int RoomEnterErrorComposer = 817;//1619 //Updated - public final static int PollQuestionsComposer = 1143;//3187 //Updated - public final static int GenericErrorMessages = 1169;//2839 //Updated - public final static int RoomWallItemsComposer = 3524;//395 //Updated - public final static int RoomUserEffectComposer = 579;//3040 //Updated - public final static int PetBreedsComposer = 1947;//3302 //Updated - public final static int ModToolIssueChatlogComposer = 3053;//1445 //Updated - public final static int RoomUserActionComposer = 3741;//12 //Updated - public final static int BotSettingsComposer = 3092;//1522 //Updated - public final static int UserProfileComposer = 3049;//1503 //Updated - public final static int MinimailCountComposer = 761;//2253 //Updated - public final static int UserAchievementScoreComposer = 3681; //Updated - public final static int PetLevelUpComposer = 3100; //Updated - public final static int UserPointsComposer = 1439; //Updated - public final static int ReportRoomFormComposer = 2573; //Updated - public final static int ModToolIssueHandledComposer = 1297; //Updated - public final static int FloodCounterComposer = 2106; //Updated - public final static int UpdateFailedComposer = 3006; //Updated - public final static int FloorPlanEditorDoorSettingsComposer = 1988; //Updated - public final static int FloorPlanEditorBlockedTilesComposer = 3388; //Updated - public final static int BuildersClubExpiredComposer = 25; //Updated - public final static int RoomSettingsSavedComposer = 2769; //Updated - public final static int MessengerInitComposer = 3682; //Updated - public final static int UserClothesComposer = 2651; //Updated - public final static int UserEffectsListComposer = 1348; //Updated - public final static int NewUserIdentityComposer = 1733; //Updated + public final static int FavoriteRoomsCountComposer = 235; + public final static int UserCurrencyComposer = 3574; + public final static int RedeemVoucherOKComposer = 391; + public final static int RoomUserShoutComposer = 59; + public final static int RoomUserStatusComposer = 12; + public final static int RoomUserDataComposer = 2421; + public final static int RoomAddRightsListComposer = 2589; + public final static int RoomRemoveRightsListComposer = 3258; + public final static int RoomRightsListComposer = 1964; + public final static int RoomUserHandItemComposer = 2479; + public final static int RoomUsersComposer = 1018; + public final static int FriendRequestComposer = 2725; + public final static int GuildBoughtComposer = 2244; + public final static int AddUserBadgeComposer = 3489; + public final static int RecyclerCompleteComposer = 899; + public final static int GuildBuyRoomsComposer = 575; + public final static int FriendsComposer = 7; + public final static int StalkErrorComposer = 1543; + public final static int TradeCloseWindowComposer = 1850; + public final static int RemoveFloorItemComposer = 2658; + public final static int InventoryPetsComposer = 3249; + public final static int UserCreditsComposer = 1557; + public final static int WiredTriggerDataComposer = 951; + public final static int TradeStoppedComposer = 3869; + public final static int ModToolUserChatlogComposer = 342; + public final static int GuildInfoComposer = 3198; + public final static int UserPermissionsComposer = 3409; + public final static int PetNameErrorComposer = 1991; + public final static int TradeStartFailComposer = 283; + public final static int AddHabboItemComposer = 3454; + public final static int InventoryBotsComposer = 307; + public final static int CanCreateRoomComposer = 2877; + public final static int MarketplaceBuyErrorComposer = 1299; + public final static int BonusRareComposer = 2261; + public final static int HotelViewComposer = 0x0404; + public final static int UpdateFriendComposer = 3525; + public final static int FloorItemUpdateComposer = 2277; + public final static int RoomAccessDeniedComposer = 2897; + public final static int GuildFurniWidgetComposer = 1875; + public final static int GiftConfigurationComposer = 1715; + public final static int UserClubComposer = 2018; + public final static int InventoryBadgesComposer = 399; + public final static int RoomUserTypingComposer = 2327; + public final static int GuildJoinErrorComposer = 1761; + public final static int RoomCategoriesComposer = 1824; + public final static int InventoryAchievementsComposer = 2539; + public final static int MarketplaceItemInfoComposer = 894; + public final static int RoomRelativeMapComposer = 3287; + public final static int ModToolComposerTwo = 1890; + public final static int ModToolComposerOne = 1722; + public final static int RoomRightsComposer = 1421; + public final static int ObjectOnRollerComposer = 450; + public final static int PollStartComposer = 3206; + public final static int GuildRefreshMembersListComposer = 1661; + public final static int UserPerksComposer = 3281; + public final static int UserCitizinShipComposer = 3285; + public final static int PublicRoomsComposer = 972; + public final static int MarketplaceOffersComposer = 2440; + public final static int ModToolComposer = 3087; + public final static int UserBadgesComposer = 2442; + public final static int GuildManageComposer = 2129; + public final static int RemoveFriendComposer = -1106; + public final static int BannerTokenComposer = -3033; + public final static int UserDataComposer = 558; + public final static int UserSearchResultComposer = 1590; + public final static int ModToolUserRoomVisitsComposer = 520; + public final static int RoomUserRespectComposer = 3137; + public final static int RoomChatSettingsComposer = 901; + public final static int RemoveHabboItemComposer = 2368; + public final static int RoomUserRemoveComposer = 364; + public final static int RoomHeightMapComposer = 3491; + public final static int RoomPetHorseFigureComposer = 3140; + public final static int PetErrorComposer = 3013; + public final static int TradeUpdateComposer = 1649; + public final static int PrivateRoomsComposer = 2523; + public final static int RoomModelComposer = 1186; + public final static int RoomScoreComposer = 1781; + public final static int KnockKnockComposer = 2988; + public final static int SecureLoginOKComposer = 1992; + public final static int SessionRightsComposer = 2934; + public final static int GuildMemberUpdateComposer = 3641; + public final static int RoomFloorItemsComposer = 144; + public final static int InventoryItemsComposer = 1559; + public final static int RoomUserTalkComposer = 874; + public final static int TradeStartComposer = 833; + public final static int InventoryItemUpdateComposer = 2204; + public final static int ModToolIssueUpdateComposer = 471; + public final static int MeMenuSettingsComposer = 3437; + public final static int ModToolRoomInfoComposer = 1328; + public final static int GuildListComposer = 3082; + public final static int RecyclerLogicComposer = 1527; + public final static int UserHomeRoomComposer = 3876; + public final static int RoomUserDanceComposer = 2184; + public final static int RoomSettingsUpdatedComposer = 1069; + public final static int AlertPurchaseFailedComposer = 2663; + public final static int RoomDataComposer = 624; + public final static int TagsComposer = 456; + public final static int InventoryRefreshComposer = 2352; + public final static int RemovePetComposer = 775; + public final static int RemoveWallItemComposer = 1980; + public final static int TradeCompleteComposer = 1668; + public final static int NewsWidgetsComposer = 3958; + public final static int WiredEffectDataComposer = 2101; + public final static int BubbleAlertComposer = 1569; + public final static int ReloadRecyclerComposer = 3704; + public final static int MoodLightDataComposer = 2780; + public final static int WiredRewardAlertComposer = 1539; + public final static int CatalogPageComposer = 1384; + public final static int CatalogModeComposer = 3408; + public final static int RoomUserUpdateNameComposer = 1263; + public final static int AddFloorItemComposer = 2502; + public final static int DebugConsoleComposer = 1003; + public final static int HallOfFameComposer = 3736; + public final static int WiredSavedComposer = 598; + public final static int RoomPaintComposer = 2225; + public final static int MarketplaceConfigComposer = 739; + public final static int AddBotComposer = 1771; + public final static int FriendRequestErrorComposer = 3601; + public final static int GuildMembersComposer = 1788; + public final static int RoomOpenComposer = 2266; + public final static int ModToolRoomChatlogComposer = 1633; + public final static int DiscountComposer = 3254; + public final static int MarketplaceCancelSaleComposer = 751; + public final static int RoomPetRespectComposer = 2348; + public final static int RoomSettingsComposer = 3622; + public final static int TalentTrackComposer = 3235; + public final static int CatalogPagesListComposer = 402; + public final static int AlertLimitedSoldOutComposer = 3467; + public final static int CatalogUpdatedComposer = 2452; + public final static int PurchaseOKComposer = 2316; + public final static int WallItemUpdateComposer = 21; + public final static int TradeAcceptedComposer = 3042; + public final static int AddWallItemComposer = 706; + public final static int ModToolRoomEntryInfoComposer = 381; + public final static int HotelViewDataComposer = 3810; + public final static int PresentItemOpenedComposer = 2004; + public final static int RoomUserRemoveRightsComposer = 61; + public final static int UserBCLimitsComposer = 3408; + public final static int PetTrainingPanelComposer = 1897; + public final static int RoomPaneComposer = 381; + public final static int RedeemVoucherErrorComposer = 1809; + public final static int RoomCreatedComposer = 3168; + public final static int GenericAlertComposer = 1406; + public final static int GroupPartsComposer = 3569; + public final static int ModToolIssueInfoComposer = 3928; + public final static int RoomUserWhisperComposer = 2945; + public final static int BotErrorComposer = 1932; + public final static int FreezeLivesComposer = 3985; + public final static int LoadFriendRequestsComposer = 683; + public final static int MarketplaceSellItemComposer = 92; + public final static int ClubDataComposer = 2273; + public final static int ProfileFriendsComposer = 2231; + public final static int MarketplaceOwnItemsComposer = 311; + public final static int RoomOwnerComposer = 3608; + public final static int WiredConditionDataComposer = 3969; + public final static int ModToolUserInfoComposer = 828; + public final static int UserWardrobeComposer = 406; + public final static int RoomPetExperienceComposer = 3711; + public final static int FriendChatMessageComposer = 3957; + public final static int PetInformationComposer = 64; + public final static int RoomThicknessComposer = 2145; + public final static int AddPetComposer = 2194; + public final static int UpdateStackHeightComposer = 597; + public final static int RemoveBotComposer = 3691; + public final static int RoomEnterErrorComposer = 817; + public final static int PollQuestionsComposer = 1143; + public final static int GenericErrorMessages = 1169; + public final static int RoomWallItemsComposer = 3524; + public final static int RoomUserEffectComposer = 579; + public final static int PetBreedsComposer = 1947; + public final static int ModToolIssueChatlogComposer = 3053; + public final static int RoomUserActionComposer = 3741; + public final static int BotSettingsComposer = 3092; + public final static int UserProfileComposer = 3049; + public final static int MinimailCountComposer = 761; + public final static int UserAchievementScoreComposer = 3681; + public final static int PetLevelUpComposer = 3100; + public final static int UserPointsComposer = 1439; + public final static int ReportRoomFormComposer = 2573; + public final static int ModToolIssueHandledComposer = 1297; + public final static int FloodCounterComposer = 2106; + public final static int UpdateFailedComposer = 3006; + public final static int FloorPlanEditorDoorSettingsComposer = 1988; + public final static int FloorPlanEditorBlockedTilesComposer = 3388; + public final static int BuildersClubExpiredComposer = 25; + public final static int RoomSettingsSavedComposer = 2769; + public final static int MessengerInitComposer = 3682; + public final static int UserClothesComposer = 2651; + public final static int UserEffectsListComposer = 1348; + public final static int NewUserIdentityComposer = 1733; public final static int NewNavigatorEventCategoriesComposer = 1391; public final static int NewNavigatorCollapsedCategoriesComposer = 3110; public final static int NewNavigatorLiftedRoomsComposer = 2469; @@ -236,7 +236,7 @@ public class Outgoing_Back public final static int MachineIDComposer = 3609; public final static int PongComposer = 1349; - //Uknown but work + public final static int UnknownComposer4 = 1411; public final static int UnknownComposer5 = 568; public final static int UnknownComposer6 = 32; @@ -257,17 +257,17 @@ public class Outgoing_Back public final static int RoomInviteErrorCodeComposer = 76; public final static int PostItStickyPoleOpenComposer = 753; public final static int NewYearResolutionProgressComposer = 741; - public final static int ClubGiftReceivedComposer = 735; //:test 735 s:t i:1 s:s i:230 s:throne i:1 b:1 i:1 i:10; - public final static int ItemStateComposer = 664; //TODO: (i: itemId, i:state) - public final static int ItemExtraDataComposer = 654; //:test 654 s:92015 i:1 i:1 s:renterId s:0 s:0.0 s:0 + public final static int ClubGiftReceivedComposer = 735; + public final static int ItemStateComposer = 664; + public final static int ItemExtraDataComposer = 654; + - //NotSure Needs Testing public final static int QuestionInfoComposer = 3047; public final static int TalentTrackEmailVerifiedComposer = 866; public final static int TalentTrackEmailFailedComposer = 369; public final static int UnknownAvatarEditorComposer = 72; - public final static int UnknownGuildComposer = 588; //Could be related to forums. + public final static int UnknownGuildComposer = 588; public final static int UnknownGuildForumComposer1 = 600; public final static int UnknownGuildForumComposer2 = 1291; @@ -292,7 +292,7 @@ public class Outgoing_Back public final static int GuideToolsComposer = 117; public final static int GuardianNewReportReceivedComposer = 3123; public final static int GuardianVotingRequestedComposer = 2331; - public final static int GuardianVotingVotesComposer = 3107; //:test 3107 i:10 i:0 i:1 i:2 i:3 i:4 i:5 i:0 i:1 i:2 i:3 + public final static int GuardianVotingVotesComposer = 3107; public final static int GuardianVotingResultComposer = 91; public final static int GuardianVotingTimeEnded = 556; @@ -302,122 +302,122 @@ public class Outgoing_Back public final static int RoomUnknown2Composer = 535; public final static int RoomUnknown3Composer = 2342; - public final static int UnknownEffectsComposer = 53; //:test 53 i:10 + public final static int UnknownEffectsComposer = 53; public final static int OldPublicRoomsComposer = 580; public final static int ItemStateComposer2 = 569; - public final static int HotelWillCloseInMinutesComposer = 518; //:test 518 i:10 - public final static int HotelWillCloseInMinutesAndBackInComposer = 2860; //:test 2860 b:1 i:1 i:2 - public final static int HotelClosesAndWillOpenAtComposer = 2168; //:test 2168 i:0 i:1 b:1 + public final static int HotelWillCloseInMinutesComposer = 518; + public final static int HotelWillCloseInMinutesAndBackInComposer = 2860; + public final static int HotelClosesAndWillOpenAtComposer = 2168; public final static int HotelClosedAndOpensComposer = 888; public final static int StaffAlertAndOpenHabboWayComposer = 1035; public final static int StaffAlertWithLinkComposer = 1189; public final static int StaffAlertWIthLinkAndOpenHabboWayComposer = 3964; - public final static int RoomMessagesPostedCountComposer = 1520; //:test 1520 i:12 s:Derp i:100 - public final static int CantScratchPetNotOldEnoughComposer = 118; //:test 118 i:1 i:2 + public final static int RoomMessagesPostedCountComposer = 1520; + public final static int CantScratchPetNotOldEnoughComposer = 118; public final static int PetBoughtNotificationComposer = 1040; public final static int MessagesForYouComposer = 2506; - public final static int UnknownStatusComposer = 1648; //:test 1648 i:0 + public final static int UnknownStatusComposer = 1648; public final static int CloseWebPageComposer = 320; - public final static int PickMonthlyClubGiftNotificationComposer = 2786; //:test 2786 i:0 - public final static int RemoveGuildFromRoomComposer = 514; //:test 514 i:12 + public final static int PickMonthlyClubGiftNotificationComposer = 2786; + public final static int RemoveGuildFromRoomComposer = 514; public final static int RoomBannedUsersComposer = 504; - public final static int OpenRoomCreationWindowComposer = 497; //:test 497 + public final static int OpenRoomCreationWindowComposer = 497; public final static int ItemsDataUpdateComposer = 466; - public final static int WelcomeGiftComposer = 445; //:test 445 s:derp@derp.com b:0 b:1 i:230 b:1 - public final static int SimplePollStartComposer = 3047; //:test 3047 s:a i:10 i:20 i:10000 i:1 i:1 i:3 s:abcdefghijklmnopqrstuvwxyz12345678901234? i:1 s:a s:b - public final static int RoomNoRightsComposer = 3929; //Removes also the 'use' button. :D + public final static int WelcomeGiftComposer = 445; + public final static int SimplePollStartComposer = 3047; + public final static int RoomNoRightsComposer = 3929; public final static int GuildEditFailComposer = 3918; public final static int MinimailNewMessageComposer = 3903; public final static int RoomFilterWordsComposer = 3889; public final static int VerifyMobileNumberComposer = 3872; - public final static int NewUserGiftComposer = 3098; //:test 3098 i:1 i:1 i:1 i:2 s:a.png i:1 s:a s:b s:a.png i:1 s:a s:b + public final static int NewUserGiftComposer = 3098; public final static int UpdateUserLookComposer = 3864; - public final static int RoomUserIgnoredComposer = 3858; //:test 3858 i:1 s:a 1/2 ignore. 3 unignore s:Username - public final static int PetBreedingFailedComposer = 3851; //:test i:0 i:1 - public final static int HabboNameChangedComposer = 3849; //:test 3849 i:0 s:aa i:3 s:a s:b s:c - public final static int RoomUserNameChangedComposer = 2063; //:test 2063 i:1 i:1 s:Derp - public final static int LoveLockFurniStartComposer = 2883; //:test 2883 i:91638 b:1 - public final static int LoveLockFurniFriendConfirmedComposer = 2746; //:test 2746 i:91638 - public final static int LoveLockFurniFinishedComposer = 3825; //:test 3825 i:91638 + public final static int RoomUserIgnoredComposer = 3858; + public final static int PetBreedingFailedComposer = 3851; + public final static int HabboNameChangedComposer = 3849; + public final static int RoomUserNameChangedComposer = 2063; + public final static int LoveLockFurniStartComposer = 2883; + public final static int LoveLockFurniFriendConfirmedComposer = 2746; + public final static int LoveLockFurniFinishedComposer = 3825; public final static int OpenPetPackageNameValidationComposer = 38; public final static int GameCenterFeaturedPlayersComposer = 3788; - public final static int HabboMallComposer = 3770; //Unused as far as I can tell. - public final static int TargetedOfferComposer = 1495; //:test 1495 i:1 i:1 s:a s:b i:1 i:2 i:5 i:9 i:1000000 s:c s:d s:a.png s:e.png i:2 s:f.png s:g.png + public final static int HabboMallComposer = 3770; + public final static int TargetedOfferComposer = 1495; public final static int LeprechaunStarterBundleComposer = 3766; - public final static int VerifyMobilePhoneWindowComposer = 3695; //:test 3695 i:0 i:1 i:2 - public final static int VerifyMobilePhoneCodeWindowComposer = 2160; //:test 2160 i:1 i:0 + public final static int VerifyMobilePhoneWindowComposer = 3695; + public final static int VerifyMobilePhoneCodeWindowComposer = 2160; public final static int VerifyMobilePhoneDoneComposer = 3109; - public final static int RoomUserReceivedHandItemComposer = 3673; //:test 3673 i:2 i:2 - public final static int MutedWhisperComposer = 3326; //:test 3326 i:1000 + public final static int RoomUserReceivedHandItemComposer = 3673; + public final static int MutedWhisperComposer = 3326; public final static int UnknownHintComposer = 3484; - public final static int BullyReportClosedComposer = 3401; //:test 3401 i:0 - public final static int PromoteOwnRoomsListComposer = 3376; //:test 3376 b:1 i:1 i:1 s:derp b:1 //NOT SURE - public final static int NotEnoughPointsTypeComposer = 334; //:test 334 b:0 b:1 i:105 - public final static int WatchAndEarnRewardComposer = 3325; //:test 3325 s:s i:230 s:throne s:derp + public final static int BullyReportClosedComposer = 3401; + public final static int PromoteOwnRoomsListComposer = 3376; + public final static int NotEnoughPointsTypeComposer = 334; + public final static int WatchAndEarnRewardComposer = 3325; public final static int NewYearResolutionComposer = 327; - public final static int WelcomeGiftErrorComposer = 3268; //:test 3268 i:3 + public final static int WelcomeGiftErrorComposer = 3268; public final static int RentableItemBuyOutPriceComposer = 3264; public final static int VipTutorialsStartComposer = 3217; public final static int NewNavigatorCategoryUserCountComposer = 3166; - public final static int RoomThumbnailSavedComposer = 3117; //:test 3117 - public final static int RoomEditSettingsErrorComposer = 3094; //:test 3094 i:15 i:7 s:derp - public final static int GuildAcceptMemberErrorComposer = 305; //:test 305 i:12 i:1 + public final static int RoomThumbnailSavedComposer = 3117; + public final static int RoomEditSettingsErrorComposer = 3094; + public final static int GuildAcceptMemberErrorComposer = 305; public final static int MostUselessErrorAlertComposer = 2944; public final static int AchievementsConfigurationComposer = 2937; public final static int PetBreedingResultComposer = 2907; public final static int RoomUserQuestionAnsweredComposer = 2866; - public final static int PetBreedingStartComposer = 285; //:test 285 i:0 i:1 i:2 + public final static int PetBreedingStartComposer = 285; public final static int CustomNotificationComposer = 2835; - public final static int UpdateStackHeightTileHeightComposer = 2830; //:test 2830 i:86476 i:999 + public final static int UpdateStackHeightTileHeightComposer = 2830; public final static int HotelViewCustomTimerComposer = 2828; - public final static int MarketplaceItemPostedComposer = 2797; //:test 2797 i:0 + public final static int MarketplaceItemPostedComposer = 2797; public final static int UnknownHabboQuizComposer = 2750; public final static int GuildFavoriteRoomUserUpdateComposer = 275; public final static int RoomAdErrorComposer = 2692; - public final static int NewNavigatorSettingsComposer = 2617; //:test 2617 i:10 i:10 i:2 i:0 b:0 i:10 - public final static int CameraPublishWaitMessageComposer = 2612; //:test 2612 b:1 i:1 s:derp - public final static int RoomInviteComposer = 2608; //:test 2608 i:0 s:derp - public final static int BullyReportRequestComposer = 1917; //:test 1917 i:1 i:1 i:1 b:1 s:a s:b s:c + public final static int NewNavigatorSettingsComposer = 2617; + public final static int CameraPublishWaitMessageComposer = 2612; + public final static int RoomInviteComposer = 2608; + public final static int BullyReportRequestComposer = 1917; public final static int UnknownHelperComposer = 2544; - public final static int HelperRequestDisabledComposer = 1125; //:test 1125 s:derp - public final static int RoomUnitIdleComposer = 2462; //:test 2462 i:2 b:0 + public final static int HelperRequestDisabledComposer = 1125; + public final static int RoomUnitIdleComposer = 2462; public final static int QuestCompletedComposer = 2459; - public final static int UnkownPetPackegeComposer = 2417; //:test 2417 i:2 s:a s:b s:c s:d - public final static int ForwardToRoomComposer = 2382; //:test 2382 i:16 - public final static int EffectsListEffectEnableComposer = 2381; //:test 2381 i:20 i:1000 b:1 + public final static int UnkownPetPackegeComposer = 2417; + public final static int ForwardToRoomComposer = 2382; + public final static int EffectsListEffectEnableComposer = 2381; public final static int CompetitionEntrySubmitResultComposer = 2308; - public final static int ExtendClubMessageComposer = 2304; //:test 2304 i:1 s:derp b:1 i:10 i:0 i:0 b:1 i:1 i:1 b:1 i:1 i:1 i:1 i:1 i:1 i:1 + public final static int ExtendClubMessageComposer = 2304; public final static int HotelViewConcurrentUsersComposer = 2286; - public final static int InventoryAddEffectComposer = 215; //:test 215 i:120 i:0 i:10 b:1 + public final static int InventoryAddEffectComposer = 215; public final static int TalentLevelUpdateComposer = 1956; - public final static int BullyReportedMessageComposer = 1858; //:test 1858 i:0 - public final static int UnknownQuestComposer3 = 1851; //_SafeStr_9789 - public final static int FriendToolbarNotificationComposer = 1839; //:test 1839 s:0 i:0 s:ADM - public final static int MessengerErrorComposer = 1838;//:test 1838 i:1 i:0 i:0 - public final static int CameraPriceComposer = 1676;//:test 1676 i:2 i:2 i:105 - public final static int PetBreedingCompleted = 1628; //:test 1628 i:1 i:0 + public final static int BullyReportedMessageComposer = 1858; + public final static int UnknownQuestComposer3 = 1851; + public final static int FriendToolbarNotificationComposer = 1839; + public final static int MessengerErrorComposer = 1838; + public final static int CameraPriceComposer = 1676; + public final static int PetBreedingCompleted = 1628; public final static int RoomUserUnbannedComposer = 1625; - public final static int HotelViewCommunityGoalComposer = 1579; //:test 1579 b:1 i:0 i:1 i:2 i:3 i:4 i:5 s:a i:6 i:1 i:1 - public final static int UnknownRoomVisitsComposer = 155; //:test 155 i:2 i:1 s:a s:b i:2 s:c s:d + public final static int HotelViewCommunityGoalComposer = 1579; + public final static int UnknownRoomVisitsComposer = 155; public final static int CanCreateEventComposer = 1542; public final static int UnknownGroupComposer = 1507; public final static int YoutubeMessageComposer1 = 1477; public final static int YoutubeMessageComposer2 = 1475; - public final static int RoomCategoryUpdateMessageComposer = 1433; //:test 1433 i:0 + public final static int RoomCategoryUpdateMessageComposer = 1433; public final static int UnknownQuestComposer2 = 1415; - public final static int GiftReceiverNotFoundComposer = 1374; //:test 1374 - public final static int ConvertedForwardToRoomComposer = 1323; //:test 1323 s:lol i:14 + public final static int GiftReceiverNotFoundComposer = 1374; + public final static int ConvertedForwardToRoomComposer = 1323; public final static int FavoriteRoomChangedComposer = 1317; - public final static int AlertPurchaseUnavailableComposer = 1303; //:test 1303 i:0 - public final static int PetBreedingStartFailedComposer = 1252; //:test 1252 i:0 + public final static int AlertPurchaseUnavailableComposer = 1303; + public final static int PetBreedingStartFailedComposer = 1252; public final static int DailyQuestComposer = 1244; public final static int NewNavigatorRoomEventComposer = 1162; public final static int HotelViewHideCommunityVoteButtonComposer = 115; - public final static int CatalogSearchResultComposer = 1142 ; //:test 1142 i:4 s:a b:1 i:1 i:0 i:0 b:0 i:1 s:s i:230 s:throne i:230 b:0 i:0 b:0 - public final static int FriendFindingRoomComposer = 1037; //:test 1037 b:0 + public final static int CatalogSearchResultComposer = 1142 ; + public final static int FriendFindingRoomComposer = 1037; public final static int UnknownQuestComposer1 = 1010; diff --git a/src/main/java/com/eu/habbo/messages/outgoing/achievements/talenttrack/TalentTrackComposer.java b/src/main/java/com/eu/habbo/messages/outgoing/achievements/talenttrack/TalentTrackComposer.java index 7e22b4b4..37362f50 100644 --- a/src/main/java/com/eu/habbo/messages/outgoing/achievements/talenttrack/TalentTrackComposer.java +++ b/src/main/java/com/eu/habbo/messages/outgoing/achievements/talenttrack/TalentTrackComposer.java @@ -95,7 +95,7 @@ public class TalentTrackComposer extends MessageComposer if (finalState != TalentTrackState.LOCKED) { - if (achievementLevel.progress <= progress) + if (achievementLevel != null && achievementLevel.progress <= progress) { response.appendInt(2); } @@ -111,7 +111,7 @@ public class TalentTrackComposer extends MessageComposer allCompleted[0] = false; } response.appendInt(progress); - response.appendInt(achievementLevel.progress); + response.appendInt(achievementLevel != null ? achievementLevel.progress : 0); } else { @@ -128,17 +128,31 @@ public class TalentTrackComposer extends MessageComposer }); - this.response.appendInt(level.perks.length); - for (String perk : level.perks) + if (level.perks.length > 0) { - this.response.appendString(perk); + this.response.appendInt(level.perks.length); + for (String perk : level.perks) + { + this.response.appendString(perk); + } + } + else + { + this.response.appendInt(-1); } - this.response.appendInt(level.items.size()); - for (Item item : level.items) + if (!level.items.isEmpty()) { - this.response.appendString(item.getName()); - this.response.appendInt(0); + this.response.appendInt(level.items.size()); + for (Item item : level.items) + { + this.response.appendString(item.getName()); + this.response.appendInt(0); + } + } + else + { + this.response.appendInt(-1); } } catch (NoSuchElementException e) diff --git a/src/main/java/com/eu/habbo/messages/outgoing/floorplaneditor/FloorPlanEditorDoorSettingsComposer.java b/src/main/java/com/eu/habbo/messages/outgoing/floorplaneditor/FloorPlanEditorDoorSettingsComposer.java index 33b22cd9..be153124 100644 --- a/src/main/java/com/eu/habbo/messages/outgoing/floorplaneditor/FloorPlanEditorDoorSettingsComposer.java +++ b/src/main/java/com/eu/habbo/messages/outgoing/floorplaneditor/FloorPlanEditorDoorSettingsComposer.java @@ -18,8 +18,8 @@ public class FloorPlanEditorDoorSettingsComposer extends MessageComposer public ServerMessage compose() { this.response.init(Outgoing.FloorPlanEditorDoorSettingsComposer); - this.response.appendInt32(this.room.getLayout().getDoorX()); - this.response.appendInt32(this.room.getLayout().getDoorY()); + this.response.appendInt(this.room.getLayout().getDoorX()); + this.response.appendInt(this.room.getLayout().getDoorY()); this.response.appendInt(this.room.getLayout().getDoorDirection()); return this.response; } diff --git a/src/main/java/com/eu/habbo/messages/outgoing/generic/alerts/MessagesForYouComposer.java b/src/main/java/com/eu/habbo/messages/outgoing/generic/alerts/MessagesForYouComposer.java index 814fae1c..454ad05c 100644 --- a/src/main/java/com/eu/habbo/messages/outgoing/generic/alerts/MessagesForYouComposer.java +++ b/src/main/java/com/eu/habbo/messages/outgoing/generic/alerts/MessagesForYouComposer.java @@ -5,11 +5,12 @@ import com.eu.habbo.messages.outgoing.MessageComposer; import com.eu.habbo.messages.outgoing.Outgoing; import java.util.ArrayList; +import java.util.List; public class MessagesForYouComposer extends MessageComposer { private String[] messages; - private ArrayList newMessages; + private List newMessages; public MessagesForYouComposer(String[] messages) { @@ -17,7 +18,7 @@ public class MessagesForYouComposer extends MessageComposer this.newMessages = new ArrayList<>(); } - public MessagesForYouComposer(ArrayList newMessages) + public MessagesForYouComposer(List newMessages) { this.newMessages = newMessages; this.messages = new String[]{}; diff --git a/src/main/java/com/eu/habbo/messages/outgoing/rooms/items/AddFloorItemComposer.java b/src/main/java/com/eu/habbo/messages/outgoing/rooms/items/AddFloorItemComposer.java index 6114a30a..8432e48a 100644 --- a/src/main/java/com/eu/habbo/messages/outgoing/rooms/items/AddFloorItemComposer.java +++ b/src/main/java/com/eu/habbo/messages/outgoing/rooms/items/AddFloorItemComposer.java @@ -26,7 +26,7 @@ public class AddFloorItemComposer extends MessageComposer this.response.appendInt(this.item instanceof InteractionGift ? ((((InteractionGift) this.item).getColorId() * 1000) + ((InteractionGift) this.item).getRibbonId()) : (this.item instanceof InteractionMusicDisc ? ((InteractionMusicDisc) this.item).getSongId() : 1)); this.item.serializeExtradata(this.response); this.response.appendInt(-1); - this.response.appendInt(this.item.getBaseItem().getStateCount() > 1 ? 1 : 0); + this.response.appendInt(this.item.isUsable() ? 1 : 0); this.response.appendInt(this.item.getUserId()); this.response.appendString(this.itemOwnerName); return this.response; diff --git a/src/main/java/com/eu/habbo/messages/outgoing/rooms/items/FloorItemOnRollerComposer.java b/src/main/java/com/eu/habbo/messages/outgoing/rooms/items/FloorItemOnRollerComposer.java index 945f3a47..f655d7f8 100644 --- a/src/main/java/com/eu/habbo/messages/outgoing/rooms/items/FloorItemOnRollerComposer.java +++ b/src/main/java/com/eu/habbo/messages/outgoing/rooms/items/FloorItemOnRollerComposer.java @@ -34,10 +34,10 @@ public class FloorItemOnRollerComposer extends MessageComposer short oldY = this.item.getY(); this.response.init(Outgoing.ObjectOnRollerComposer); - this.response.appendInt32(this.item.getX()); - this.response.appendInt32(this.item.getY()); - this.response.appendInt32(this.newLocation.x); - this.response.appendInt32(this.newLocation.y); + this.response.appendInt(this.item.getX()); + this.response.appendInt(this.item.getY()); + this.response.appendInt(this.newLocation.x); + this.response.appendInt(this.newLocation.y); this.response.appendInt(1); this.response.appendInt(this.item.getId()); this.response.appendString(Double.toString(this.item.getZ())); diff --git a/src/main/java/com/eu/habbo/messages/outgoing/rooms/items/FloorItemUpdateComposer.java b/src/main/java/com/eu/habbo/messages/outgoing/rooms/items/FloorItemUpdateComposer.java index deb3cd93..e86c4ebc 100644 --- a/src/main/java/com/eu/habbo/messages/outgoing/rooms/items/FloorItemUpdateComposer.java +++ b/src/main/java/com/eu/habbo/messages/outgoing/rooms/items/FloorItemUpdateComposer.java @@ -24,7 +24,7 @@ public class FloorItemUpdateComposer extends MessageComposer this.response.appendInt(this.item instanceof InteractionGift ? ((((InteractionGift) this.item).getColorId() * 1000) + ((InteractionGift) this.item).getRibbonId()) : (this.item instanceof InteractionMusicDisc ? ((InteractionMusicDisc) this.item).getSongId() : 1)); this.item.serializeExtradata(this.response); this.response.appendInt(-1); - this.response.appendInt(this.item.getBaseItem().getStateCount() > 1 ? 1 : 0); + this.response.appendInt(this.item.isUsable() ? 1 : 0); this.response.appendInt(this.item.getUserId()); return this.response; } diff --git a/src/main/java/com/eu/habbo/messages/outgoing/rooms/items/RoomFloorItemsComposer.java b/src/main/java/com/eu/habbo/messages/outgoing/rooms/items/RoomFloorItemsComposer.java index 62641803..9ccb7bba 100644 --- a/src/main/java/com/eu/habbo/messages/outgoing/rooms/items/RoomFloorItemsComposer.java +++ b/src/main/java/com/eu/habbo/messages/outgoing/rooms/items/RoomFloorItemsComposer.java @@ -1,5 +1,6 @@ package com.eu.habbo.messages.outgoing.rooms.items; +import com.eu.habbo.habbohotel.items.interactions.InteractionDefault; import com.eu.habbo.habbohotel.items.interactions.InteractionGift; import com.eu.habbo.habbohotel.items.interactions.InteractionMusicDisc; import com.eu.habbo.habbohotel.users.HabboItem; @@ -54,7 +55,7 @@ public class RoomFloorItemsComposer extends MessageComposer this.response.appendInt(item instanceof InteractionGift ? ((((InteractionGift) item).getColorId() * 1000) + ((InteractionGift) item).getRibbonId()) : (item instanceof InteractionMusicDisc ? ((InteractionMusicDisc) item).getSongId() : 1)); item.serializeExtradata(this.response); this.response.appendInt(-1); - this.response.appendInt(item.getBaseItem().getStateCount() > 1 ? 1 : 0); + this.response.appendInt(item.getBaseItem().getStateCount() > 1 && item.getClass().isAssignableFrom(InteractionDefault.class) ? 1 : 0); this.response.appendInt(item.getUserId()); } return this.response; diff --git a/src/main/java/com/eu/habbo/messages/outgoing/rooms/items/UpdateStackHeightTileHeightComposer.java b/src/main/java/com/eu/habbo/messages/outgoing/rooms/items/UpdateStackHeightTileHeightComposer.java index 25df2df0..3347e333 100644 --- a/src/main/java/com/eu/habbo/messages/outgoing/rooms/items/UpdateStackHeightTileHeightComposer.java +++ b/src/main/java/com/eu/habbo/messages/outgoing/rooms/items/UpdateStackHeightTileHeightComposer.java @@ -10,10 +10,10 @@ public class UpdateStackHeightTileHeightComposer extends MessageComposer private final HabboItem item; private final int height; - public UpdateStackHeightTileHeightComposer(HabboItem item, double height) + public UpdateStackHeightTileHeightComposer(HabboItem item, int height) { this.item = item; - this.height = (int)height; + this.height = height; } diff --git a/src/main/java/com/eu/habbo/messages/outgoing/rooms/pets/PetTrainingPanelComposer.java b/src/main/java/com/eu/habbo/messages/outgoing/rooms/pets/PetTrainingPanelComposer.java index 3ac32dbe..8247df04 100644 --- a/src/main/java/com/eu/habbo/messages/outgoing/rooms/pets/PetTrainingPanelComposer.java +++ b/src/main/java/com/eu/habbo/messages/outgoing/rooms/pets/PetTrainingPanelComposer.java @@ -39,7 +39,10 @@ public class PetTrainingPanelComposer extends MessageComposer } } - Collections.sort(enabled); + if (!enabled.isEmpty()) + { + Collections.sort(enabled); + } this.response.appendInt(enabled.size()); diff --git a/src/main/java/com/eu/habbo/messages/outgoing/rooms/pets/RoomPetComposer.java b/src/main/java/com/eu/habbo/messages/outgoing/rooms/pets/RoomPetComposer.java index bd15f69f..c1c1ff05 100644 --- a/src/main/java/com/eu/habbo/messages/outgoing/rooms/pets/RoomPetComposer.java +++ b/src/main/java/com/eu/habbo/messages/outgoing/rooms/pets/RoomPetComposer.java @@ -50,8 +50,8 @@ public class RoomPetComposer extends MessageComposer implements TIntObjectProced this.response.appendString(pet.getPetData().getType() + " " + pet.getRace() + " " + pet.getColor() + " " + ((pet instanceof HorsePet ? (((HorsePet) pet).hasSaddle() ? "3" : "2") + " 2 " + ((HorsePet) pet).getHairStyle() + " " + ((HorsePet) pet).getHairColor() + " 3 " + ((HorsePet) pet).getHairStyle() + " " + ((HorsePet) pet).getHairColor() + (((HorsePet) pet).hasSaddle() ? " 4 9 0" : "") : pet instanceof MonsterplantPet ? (((MonsterplantPet) pet).look.isEmpty() ? "2 1 8 6 0 -1 -1" : ((MonsterplantPet) pet).look) : "2 2 -1 0 3 -1 0"))); } this.response.appendInt(pet.getRoomUnit().getId()); - this.response.appendInt32(pet.getRoomUnit().getX()); - this.response.appendInt32(pet.getRoomUnit().getY()); + this.response.appendInt(pet.getRoomUnit().getX()); + this.response.appendInt(pet.getRoomUnit().getY()); this.response.appendString(pet.getRoomUnit().getZ() + ""); this.response.appendInt(0); this.response.appendInt(2); diff --git a/src/main/java/com/eu/habbo/messages/outgoing/rooms/users/RoomUnitOnRollerComposer.java b/src/main/java/com/eu/habbo/messages/outgoing/rooms/users/RoomUnitOnRollerComposer.java index 603eb9c5..0f972999 100644 --- a/src/main/java/com/eu/habbo/messages/outgoing/rooms/users/RoomUnitOnRollerComposer.java +++ b/src/main/java/com/eu/habbo/messages/outgoing/rooms/users/RoomUnitOnRollerComposer.java @@ -39,10 +39,10 @@ public class RoomUnitOnRollerComposer extends MessageComposer } this.response.init(Outgoing.ObjectOnRollerComposer); - this.response.appendInt32(this.roomUnit.getX()); - this.response.appendInt32(this.roomUnit.getY()); - this.response.appendInt32(this.newLocation.x); - this.response.appendInt32(this.newLocation.y); + this.response.appendInt(this.roomUnit.getX()); + this.response.appendInt(this.roomUnit.getY()); + this.response.appendInt(this.newLocation.x); + this.response.appendInt(this.newLocation.y); this.response.appendInt(0); this.response.appendInt(this.roller == null ? 0 : this.roller.getId()); this.response.appendInt(2); diff --git a/src/main/java/com/eu/habbo/messages/outgoing/rooms/users/RoomUserStatusComposer.java b/src/main/java/com/eu/habbo/messages/outgoing/rooms/users/RoomUserStatusComposer.java index 99dc0406..e9df4840 100644 --- a/src/main/java/com/eu/habbo/messages/outgoing/rooms/users/RoomUserStatusComposer.java +++ b/src/main/java/com/eu/habbo/messages/outgoing/rooms/users/RoomUserStatusComposer.java @@ -42,17 +42,17 @@ public class RoomUserStatusComposer extends MessageComposer for(RoomUnit roomUnit : this.roomUnits) { this.response.appendInt(roomUnit.getId()); - this.response.appendInt32(roomUnit.getPreviousLocation().x); - this.response.appendInt32(roomUnit.getPreviousLocation().y); + this.response.appendInt(roomUnit.getPreviousLocation().x); + this.response.appendInt(roomUnit.getPreviousLocation().y); + this.response.appendString(roomUnit.getPreviousLocationZ() + ""); + + + + + + + - if (roomUnit.hasStatus(RoomUnitStatus.SIT) && !roomUnit.hasStatus(RoomUnitStatus.MOVE)) - { - this.response.appendString(roomUnit.getPreviousLocation().z + ""); - } - else - { - this.response.appendString(roomUnit.getPreviousLocation().getStackHeight() + ""); - } this.response.appendInt(roomUnit.getHeadRotation().getValue()); this.response.appendInt(roomUnit.getBodyRotation().getValue()); @@ -64,7 +64,6 @@ public class RoomUserStatusComposer extends MessageComposer this.response.appendString(status); roomUnit.setPreviousLocation(roomUnit.getCurrentLocation()); - roomUnit.getPreviousLocation().setStackHeight(roomUnit.getZ()); } } else { @@ -74,16 +73,17 @@ public class RoomUserStatusComposer extends MessageComposer for (Habbo habbo : this.habbos) { this.response.appendInt(habbo.getRoomUnit().getId()); - this.response.appendInt32(habbo.getRoomUnit().getPreviousLocation().x); - this.response.appendInt32(habbo.getRoomUnit().getPreviousLocation().y); - if (habbo.getRoomUnit().hasStatus(RoomUnitStatus.SIT) && !habbo.getRoomUnit().hasStatus(RoomUnitStatus.MOVE)) - { - this.response.appendString(habbo.getRoomUnit().getPreviousLocation().z + ""); - } - else - { - this.response.appendString(habbo.getRoomUnit().getPreviousLocation().getStackHeight() + ""); - } + this.response.appendInt(habbo.getRoomUnit().getPreviousLocation().x); + this.response.appendInt(habbo.getRoomUnit().getPreviousLocation().y); + this.response.appendString(habbo.getRoomUnit().getPreviousLocationZ() + ""); + + + + + + + + this.response.appendInt(habbo.getRoomUnit().getHeadRotation().getValue()); this.response.appendInt(habbo.getRoomUnit().getBodyRotation().getValue()); @@ -95,7 +95,6 @@ public class RoomUserStatusComposer extends MessageComposer } this.response.appendString(status); habbo.getRoomUnit().setPreviousLocation(habbo.getRoomUnit().getCurrentLocation()); - habbo.getRoomUnit().getPreviousLocation().setStackHeight(habbo.getRoomUnit().getZ()); } } } diff --git a/src/main/java/com/eu/habbo/messages/outgoing/rooms/users/RoomUsersComposer.java b/src/main/java/com/eu/habbo/messages/outgoing/rooms/users/RoomUsersComposer.java index f5086e9a..44276f01 100644 --- a/src/main/java/com/eu/habbo/messages/outgoing/rooms/users/RoomUsersComposer.java +++ b/src/main/java/com/eu/habbo/messages/outgoing/rooms/users/RoomUsersComposer.java @@ -48,8 +48,8 @@ public class RoomUsersComposer extends MessageComposer this.response.appendString(this.habbo.getHabboInfo().getMotto()); this.response.appendString(this.habbo.getHabboInfo().getLook()); this.response.appendInt(this.habbo.getRoomUnit().getId()); //Room Unit ID - this.response.appendInt32(this.habbo.getRoomUnit().getX()); - this.response.appendInt32(this.habbo.getRoomUnit().getY()); + this.response.appendInt(this.habbo.getRoomUnit().getX()); + this.response.appendInt(this.habbo.getRoomUnit().getY()); this.response.appendString(this.habbo.getRoomUnit().getZ() + ""); this.response.appendInt(this.habbo.getRoomUnit().getBodyRotation().getValue()); this.response.appendInt(1); @@ -83,8 +83,8 @@ public class RoomUsersComposer extends MessageComposer this.response.appendString(habbo.getHabboInfo().getMotto()); this.response.appendString(habbo.getHabboInfo().getLook()); this.response.appendInt(habbo.getRoomUnit().getId()); //Room Unit ID - this.response.appendInt32(habbo.getRoomUnit().getX()); - this.response.appendInt32(habbo.getRoomUnit().getY()); + this.response.appendInt(habbo.getRoomUnit().getX()); + this.response.appendInt(habbo.getRoomUnit().getY()); this.response.appendString(habbo.getRoomUnit().getZ() + ""); this.response.appendInt(habbo.getRoomUnit().getBodyRotation().getValue()); this.response.appendInt(1); @@ -114,8 +114,8 @@ public class RoomUsersComposer extends MessageComposer this.response.appendString(this.bot.getMotto()); this.response.appendString(this.bot.getFigure()); this.response.appendInt(this.bot.getRoomUnit().getId()); - this.response.appendInt32(this.bot.getRoomUnit().getX()); - this.response.appendInt32(this.bot.getRoomUnit().getY()); + this.response.appendInt(this.bot.getRoomUnit().getX()); + this.response.appendInt(this.bot.getRoomUnit().getY()); this.response.appendString(this.bot.getRoomUnit().getZ() + ""); this.response.appendInt(this.bot.getRoomUnit().getBodyRotation().getValue()); this.response.appendInt(4); @@ -144,8 +144,8 @@ public class RoomUsersComposer extends MessageComposer this.response.appendString(bot.getMotto()); this.response.appendString(bot.getFigure()); this.response.appendInt(bot.getRoomUnit().getId()); - this.response.appendInt32(bot.getRoomUnit().getX()); - this.response.appendInt32(bot.getRoomUnit().getY()); + this.response.appendInt(bot.getRoomUnit().getX()); + this.response.appendInt(bot.getRoomUnit().getY()); this.response.appendString(bot.getRoomUnit().getZ() + ""); this.response.appendInt(bot.getRoomUnit().getBodyRotation().getValue()); this.response.appendInt(4); diff --git a/src/main/java/com/eu/habbo/messages/outgoing/trading/TradeAcceptedComposer.java b/src/main/java/com/eu/habbo/messages/outgoing/trading/TradeAcceptedComposer.java index b9071e24..d95fc779 100644 --- a/src/main/java/com/eu/habbo/messages/outgoing/trading/TradeAcceptedComposer.java +++ b/src/main/java/com/eu/habbo/messages/outgoing/trading/TradeAcceptedComposer.java @@ -18,8 +18,8 @@ public class TradeAcceptedComposer extends MessageComposer public ServerMessage compose() { this.response.init(Outgoing.TradeAcceptedComposer); - this.response.appendInt(this.tradeUser.getHabbo().getHabboInfo().getId()); - this.response.appendInt32(this.tradeUser.getAccepted()); + this.response.appendInt(this.tradeUser.getUserId()); + this.response.appendInt(this.tradeUser.getAccepted()); return this.response; } } diff --git a/src/main/java/com/eu/habbo/messages/outgoing/trading/TradeUpdateComposer.java b/src/main/java/com/eu/habbo/messages/outgoing/trading/TradeUpdateComposer.java index 8528d95e..960624a7 100644 --- a/src/main/java/com/eu/habbo/messages/outgoing/trading/TradeUpdateComposer.java +++ b/src/main/java/com/eu/habbo/messages/outgoing/trading/TradeUpdateComposer.java @@ -23,7 +23,7 @@ public class TradeUpdateComposer extends MessageComposer this.response.init(Outgoing.TradeUpdateComposer); for(RoomTradeUser roomTradeUser : this.roomTrade.getRoomTradeUsers()) { - this.response.appendInt(roomTradeUser.getHabbo().getHabboInfo().getId()); + this.response.appendInt(roomTradeUser.getUserId()); this.response.appendInt(roomTradeUser.getItems().size()); for(HabboItem item : roomTradeUser.getItems()) diff --git a/src/main/java/com/eu/habbo/messages/outgoing/unknown/HabboNameChangedComposer.java b/src/main/java/com/eu/habbo/messages/outgoing/unknown/HabboNameChangedComposer.java deleted file mode 100644 index 6854fe42..00000000 --- a/src/main/java/com/eu/habbo/messages/outgoing/unknown/HabboNameChangedComposer.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.eu.habbo.messages.outgoing.unknown; - -import com.eu.habbo.messages.ServerMessage; -import com.eu.habbo.messages.outgoing.MessageComposer; -import com.eu.habbo.messages.outgoing.Outgoing; - -import java.util.List; - -public class HabboNameChangedComposer extends MessageComposer -{ - private final int unknownInt; - private final String name; - private final List unknownStringList; - - public HabboNameChangedComposer(int unknownInt, String name, List unknownStringList) - { - this.unknownInt = unknownInt; - this.name = name; - this.unknownStringList = unknownStringList; - } - - @Override - public ServerMessage compose() - { - this.response.init(Outgoing.HabboNameChangedComposer); - this.response.appendInt(this.unknownInt); - this.response.appendString(this.name); - this.response.appendInt(this.unknownStringList.size()); - for (String s : this.unknownStringList) - { - this.response.appendString(s); - } - - return this.response; - } -} \ No newline at end of file diff --git a/src/main/java/com/eu/habbo/messages/outgoing/unknown/TargetedOfferComposer.java b/src/main/java/com/eu/habbo/messages/outgoing/unknown/TargetedOfferComposer.java index cef058c0..5c87bc0d 100644 --- a/src/main/java/com/eu/habbo/messages/outgoing/unknown/TargetedOfferComposer.java +++ b/src/main/java/com/eu/habbo/messages/outgoing/unknown/TargetedOfferComposer.java @@ -1,16 +1,20 @@ package com.eu.habbo.messages.outgoing.unknown; import com.eu.habbo.habbohotel.catalog.TargetOffer; +import com.eu.habbo.habbohotel.users.Habbo; +import com.eu.habbo.habbohotel.users.cache.HabboOfferPurchase; import com.eu.habbo.messages.ServerMessage; import com.eu.habbo.messages.outgoing.MessageComposer; import com.eu.habbo.messages.outgoing.Outgoing; public class TargetedOfferComposer extends MessageComposer { + private final Habbo habbo; private final TargetOffer offer; - public TargetedOfferComposer(TargetOffer offer) + public TargetedOfferComposer(Habbo habbo, TargetOffer offer) { + this.habbo = habbo; this.offer = offer; } @@ -18,7 +22,8 @@ public class TargetedOfferComposer extends MessageComposer public ServerMessage compose() { this.response.init(Outgoing.TargetedOfferComposer); - this.offer.serialize(this.response); + HabboOfferPurchase purchase = HabboOfferPurchase.getOrCreate(this.habbo, this.offer.getId()); + this.offer.serialize(this.response, purchase); return this.response; } } \ No newline at end of file diff --git a/src/main/java/com/eu/habbo/messages/outgoing/users/UserPerksComposer.java b/src/main/java/com/eu/habbo/messages/outgoing/users/UserPerksComposer.java index 09d16294..6d82000e 100644 --- a/src/main/java/com/eu/habbo/messages/outgoing/users/UserPerksComposer.java +++ b/src/main/java/com/eu/habbo/messages/outgoing/users/UserPerksComposer.java @@ -48,7 +48,7 @@ public class UserPerksComposer extends MessageComposer this.response.appendString("TRADE"); this.response.appendString("requirement.unfulfilled.no_trade_lock"); - this.response.appendBoolean(this.habbo.getHabboStats().allowTrade); + this.response.appendBoolean(this.habbo.getHabboStats().allowTrade()); this.response.appendString("HEIGHTMAP_EDITOR_BETA"); this.response.appendString("requirement.unfulfilled.feature_disabled"); diff --git a/src/main/java/com/eu/habbo/messages/rcon/AlertUser.java b/src/main/java/com/eu/habbo/messages/rcon/AlertUser.java index 5b0871dd..2811fd11 100644 --- a/src/main/java/com/eu/habbo/messages/rcon/AlertUser.java +++ b/src/main/java/com/eu/habbo/messages/rcon/AlertUser.java @@ -26,9 +26,12 @@ public class AlertUser extends RCONMessage this.status = RCONMessage.HABBO_NOT_FOUND; } - public class JSONAlertUser + public static class JSONAlertUser { + public int user_id; + + public String message; } } diff --git a/src/main/java/com/eu/habbo/messages/rcon/ChangeRoomOwner.java b/src/main/java/com/eu/habbo/messages/rcon/ChangeRoomOwner.java index d4fda536..3a144b76 100644 --- a/src/main/java/com/eu/habbo/messages/rcon/ChangeRoomOwner.java +++ b/src/main/java/com/eu/habbo/messages/rcon/ChangeRoomOwner.java @@ -28,8 +28,13 @@ public class ChangeRoomOwner extends RCONMessage public static class JSON { + public int room_id; + + public int user_id; + + public String username; } } diff --git a/src/main/java/com/eu/habbo/messages/rcon/CreateModToolTicket.java b/src/main/java/com/eu/habbo/messages/rcon/CreateModToolTicket.java index 81c9120e..17b40474 100644 --- a/src/main/java/com/eu/habbo/messages/rcon/CreateModToolTicket.java +++ b/src/main/java/com/eu/habbo/messages/rcon/CreateModToolTicket.java @@ -20,13 +20,24 @@ public class CreateModToolTicket extends RCONMessage Emulator.getGameEnvironment().getModToolManager().updateTicketToMods(issue); } - public class JSON + public static class JSON { + public int sender_id; + + public String sender_username; + + public int reported_id; + + public String reported_username; + + public int reported_room_id = 0; + + public String message; } } diff --git a/src/main/java/com/eu/habbo/messages/rcon/DisconnectUser.java b/src/main/java/com/eu/habbo/messages/rcon/DisconnectUser.java index 81062225..3b368ea5 100644 --- a/src/main/java/com/eu/habbo/messages/rcon/DisconnectUser.java +++ b/src/main/java/com/eu/habbo/messages/rcon/DisconnectUser.java @@ -42,9 +42,12 @@ public class DisconnectUser extends RCONMessage this.status = RCONMessage.HABBO_NOT_FOUND; } - public class ForwardUserJSON + public static class ForwardUserJSON { + public int user_id; + + public int room_id; } } diff --git a/src/main/java/com/eu/habbo/messages/rcon/FriendRequest.java b/src/main/java/com/eu/habbo/messages/rcon/FriendRequest.java index db273ce5..4a94b882 100644 --- a/src/main/java/com/eu/habbo/messages/rcon/FriendRequest.java +++ b/src/main/java/com/eu/habbo/messages/rcon/FriendRequest.java @@ -58,9 +58,12 @@ public class FriendRequest extends RCONMessage } } - public class JSON + public static class JSON { + public int user_id; + + public int target_id; } } \ No newline at end of file diff --git a/src/main/java/com/eu/habbo/messages/rcon/GiveBadge.java b/src/main/java/com/eu/habbo/messages/rcon/GiveBadge.java index 13905eae..eb689e8a 100644 --- a/src/main/java/com/eu/habbo/messages/rcon/GiveBadge.java +++ b/src/main/java/com/eu/habbo/messages/rcon/GiveBadge.java @@ -100,9 +100,12 @@ public class GiveBadge extends RCONMessage } } - public class GiveBadgeJSON + public static class GiveBadgeJSON { + public int user_id = -1; + + public String badge; } } \ No newline at end of file diff --git a/src/main/java/com/eu/habbo/messages/rcon/GiveCredits.java b/src/main/java/com/eu/habbo/messages/rcon/GiveCredits.java index 9cd48531..a22b7a4e 100644 --- a/src/main/java/com/eu/habbo/messages/rcon/GiveCredits.java +++ b/src/main/java/com/eu/habbo/messages/rcon/GiveCredits.java @@ -43,9 +43,12 @@ public class GiveCredits extends RCONMessage } } - public class JSONGiveCredits + public static class JSONGiveCredits { - private int user_id; - private int credits; + + public int user_id; + + + public int credits; } } diff --git a/src/main/java/com/eu/habbo/messages/rcon/GivePixels.java b/src/main/java/com/eu/habbo/messages/rcon/GivePixels.java index d45b0ba0..acf4235b 100644 --- a/src/main/java/com/eu/habbo/messages/rcon/GivePixels.java +++ b/src/main/java/com/eu/habbo/messages/rcon/GivePixels.java @@ -43,9 +43,12 @@ public class GivePixels extends RCONMessage } } - public class JSONGivePixels + public static class JSONGivePixels { - private int user_id; - private int pixels; + + public int user_id; + + + public int pixels; } } diff --git a/src/main/java/com/eu/habbo/messages/rcon/GivePoints.java b/src/main/java/com/eu/habbo/messages/rcon/GivePoints.java index 83dce06c..6498408a 100644 --- a/src/main/java/com/eu/habbo/messages/rcon/GivePoints.java +++ b/src/main/java/com/eu/habbo/messages/rcon/GivePoints.java @@ -45,10 +45,15 @@ public class GivePoints extends RCONMessage } } - public class JSONGivePoints + public static class JSONGivePoints { - private int user_id; - private int points; - private int type; + + public int user_id; + + + public int points; + + + public int type; } } diff --git a/src/main/java/com/eu/habbo/messages/rcon/GiveRespect.java b/src/main/java/com/eu/habbo/messages/rcon/GiveRespect.java new file mode 100644 index 00000000..910ff1f0 --- /dev/null +++ b/src/main/java/com/eu/habbo/messages/rcon/GiveRespect.java @@ -0,0 +1,64 @@ +package com.eu.habbo.messages.rcon; + +import com.eu.habbo.Emulator; +import com.eu.habbo.habbohotel.users.Habbo; +import com.google.gson.Gson; + +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.SQLException; + +public class GiveRespect extends RCONMessage +{ + + public GiveRespect() + { + super(JSONGiveRespect.class); + } + + @Override + public void handle(Gson gson, JSONGiveRespect object) + { + Habbo habbo = Emulator.getGameEnvironment().getHabboManager().getHabbo(object.user_id); + + if (habbo != null) + { + habbo.getHabboStats().respectPointsReceived += object.respect_received; + habbo.getHabboStats().respectPointsGiven += object.respect_given; + habbo.getHabboStats().respectPointsToGive += object.daily_respects; + } + else + { + try (Connection connection = Emulator.getDatabase().getDataSource().getConnection(); PreparedStatement statement = connection.prepareStatement("UPDATE users_settings SET respects_given = respects_give + ?, respects_received = respects_received + ?, daily_respect_points = daily_respect_points + ? WHERE user_id = ? LIMIT 1")) + { + statement.setInt(1, object.respect_received); + statement.setInt(2, object.respect_given); + statement.setInt(3, object.daily_respects); + statement.setInt(4, object.user_id); + statement.execute(); + } + catch (SQLException e) + { + this.status = RCONMessage.SYSTEM_ERROR; + Emulator.getLogging().logSQLException(e); + } + + this.message = "offline"; + } + } + + public static class JSONGiveRespect + { + + public int user_id; + + + public int respect_given = 0; + + + public int respect_received = 0; + + + public int daily_respects = 0; + } +} \ No newline at end of file diff --git a/src/main/java/com/eu/habbo/messages/rcon/HotelAlert.java b/src/main/java/com/eu/habbo/messages/rcon/HotelAlert.java index d055a508..24714b30 100644 --- a/src/main/java/com/eu/habbo/messages/rcon/HotelAlert.java +++ b/src/main/java/com/eu/habbo/messages/rcon/HotelAlert.java @@ -1,9 +1,14 @@ package com.eu.habbo.messages.rcon; import com.eu.habbo.Emulator; +import com.eu.habbo.habbohotel.users.Habbo; +import com.eu.habbo.messages.ServerMessage; import com.eu.habbo.messages.outgoing.generic.alerts.GenericAlertComposer; +import com.eu.habbo.messages.outgoing.generic.alerts.StaffAlertWithLinkComposer; import com.google.gson.Gson; +import java.util.Map; + public class HotelAlert extends RCONMessage { @@ -15,11 +20,35 @@ public class HotelAlert extends RCONMessage @Override public void handle(Gson gson, JSONHotelAlert object) { - Emulator.getGameServer().getGameClientManager().sendBroadcastResponse(new GenericAlertComposer(object.message)); + ServerMessage serverMessage = null; + if (object.url.isEmpty()) + { + serverMessage = new GenericAlertComposer(object.message).compose(); + } + else + { + serverMessage = new StaffAlertWithLinkComposer(object.message, object.url).compose(); + } + + if (serverMessage != null) + { + for(Map.Entry set : Emulator.getGameEnvironment().getHabboManager().getOnlineHabbos().entrySet()) + { + Habbo habbo = set.getValue(); + if(habbo.getHabboStats().blockStaffAlerts) + continue; + + habbo.getClient().sendResponse(serverMessage); + } + } } - public class JSONHotelAlert + public static class JSONHotelAlert { - private String message; + + public String message; + + + public String url = ""; } } diff --git a/src/main/java/com/eu/habbo/messages/rcon/IgnoreUser.java b/src/main/java/com/eu/habbo/messages/rcon/IgnoreUser.java new file mode 100644 index 00000000..86dcbe6f --- /dev/null +++ b/src/main/java/com/eu/habbo/messages/rcon/IgnoreUser.java @@ -0,0 +1,52 @@ +package com.eu.habbo.messages.rcon; + +import com.eu.habbo.Emulator; +import com.eu.habbo.habbohotel.users.Habbo; +import com.google.gson.Gson; + +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.SQLException; + +public class IgnoreUser extends RCONMessage +{ + public IgnoreUser() + { + super(JSONIgnoreUser.class); + } + + @Override + public void handle(Gson gson, JSONIgnoreUser object) + { + Habbo habbo = Emulator.getGameEnvironment().getHabboManager().getHabbo(object.user_id); + + if (habbo != null) + { + habbo.getHabboStats().ignoreUser(object.target_id); + } + else + { + try (Connection connection = Emulator.getDatabase().getDataSource().getConnection(); + PreparedStatement statement = connection.prepareStatement("INSERT INTO users_ignored (user_id, target_id) VALUES (?, ?)")) + { + statement.setInt(1, object.user_id); + statement.setInt(2, object.target_id); + statement.execute(); + } + catch (SQLException e) + { + Emulator.getLogging().logSQLException(e); + } + + this.message = "offline"; + } + } + + public static class JSONIgnoreUser + { + + public int user_id; + + public int target_id; + } +} \ No newline at end of file diff --git a/src/main/java/com/eu/habbo/messages/rcon/ImageHotelAlert.java b/src/main/java/com/eu/habbo/messages/rcon/ImageHotelAlert.java index c895c883..4fbb8cc1 100644 --- a/src/main/java/com/eu/habbo/messages/rcon/ImageHotelAlert.java +++ b/src/main/java/com/eu/habbo/messages/rcon/ImageHotelAlert.java @@ -1,10 +1,14 @@ package com.eu.habbo.messages.rcon; import com.eu.habbo.Emulator; +import com.eu.habbo.habbohotel.users.Habbo; +import com.eu.habbo.messages.ServerMessage; import com.eu.habbo.messages.outgoing.generic.alerts.BubbleAlertComposer; import com.google.gson.Gson; import gnu.trove.map.hash.THashMap; +import java.util.Map; + public class ImageHotelAlert extends RCONMessage { public ImageHotelAlert() @@ -18,17 +22,34 @@ public class ImageHotelAlert extends RCONMessage THashMap keys = new THashMap<>(); keys.put("message", json.message); keys.put("linkUrl", json.url); - keys.put("linkTitle", json.url_messaege); + keys.put("linkTitle", json.url_message); keys.put("title", json.title); - Emulator.getGameServer().getGameClientManager().sendBroadcastResponse(new BubbleAlertComposer(json.bubble_key, keys).compose()); + ServerMessage message = new BubbleAlertComposer(json.bubble_key, keys).compose(); + for(Map.Entry set : Emulator.getGameEnvironment().getHabboManager().getOnlineHabbos().entrySet()) + { + Habbo habbo = set.getValue(); + if(habbo.getHabboStats().blockStaffAlerts) + continue; + + habbo.getClient().sendResponse(message); + } } - public class JSON + public static class JSON { + public String bubble_key; + + public String message; + + public String url; - public String url_messaege; + + + public String url_message; + + public String title; } } \ No newline at end of file diff --git a/src/main/java/com/eu/habbo/messages/rcon/MuteUser.java b/src/main/java/com/eu/habbo/messages/rcon/MuteUser.java index 33dbeaa0..a5484170 100644 --- a/src/main/java/com/eu/habbo/messages/rcon/MuteUser.java +++ b/src/main/java/com/eu/habbo/messages/rcon/MuteUser.java @@ -49,9 +49,12 @@ public class MuteUser extends RCONMessage } } - public class JSON + public static class JSON { + public int user_id; + + public int duration; } } diff --git a/src/main/java/com/eu/habbo/messages/rcon/ProgressAchievement.java b/src/main/java/com/eu/habbo/messages/rcon/ProgressAchievement.java index fdc587ea..aa870735 100644 --- a/src/main/java/com/eu/habbo/messages/rcon/ProgressAchievement.java +++ b/src/main/java/com/eu/habbo/messages/rcon/ProgressAchievement.java @@ -37,10 +37,15 @@ public class ProgressAchievement extends RCONMessage } } - public class SendGiftJSON + public static class SendGiftJSON { + public int user_id = -1; + + public int itemid = -1; + + public String message = ""; } } \ No newline at end of file diff --git a/src/main/java/com/eu/habbo/messages/rcon/SendRoomBundle.java b/src/main/java/com/eu/habbo/messages/rcon/SendRoomBundle.java index 557d1e8e..d0b6f221 100644 --- a/src/main/java/com/eu/habbo/messages/rcon/SendRoomBundle.java +++ b/src/main/java/com/eu/habbo/messages/rcon/SendRoomBundle.java @@ -25,8 +25,6 @@ public class SendRoomBundle extends RCONMessage if (page != null && (page instanceof RoomBundleLayout)) { - String username = ""; - if (habbo != null) { ((RoomBundleLayout) page).buyRoom(habbo); @@ -44,9 +42,12 @@ public class SendRoomBundle extends RCONMessage } } - public class JSON + public static class JSON { + public int user_id; + + public int catalog_page; } } \ No newline at end of file diff --git a/src/main/java/com/eu/habbo/messages/rcon/SetRank.java b/src/main/java/com/eu/habbo/messages/rcon/SetRank.java index 73ec16ab..9989bff6 100644 --- a/src/main/java/com/eu/habbo/messages/rcon/SetRank.java +++ b/src/main/java/com/eu/habbo/messages/rcon/SetRank.java @@ -36,9 +36,12 @@ public class SetRank extends RCONMessage } } - public class JSONSetRank + public static class JSONSetRank { + public int user_id; + + public int rank; } } diff --git a/src/main/java/com/eu/habbo/messages/rcon/StaffAlert.java b/src/main/java/com/eu/habbo/messages/rcon/StaffAlert.java index 748168d4..6c539f44 100644 --- a/src/main/java/com/eu/habbo/messages/rcon/StaffAlert.java +++ b/src/main/java/com/eu/habbo/messages/rcon/StaffAlert.java @@ -16,8 +16,9 @@ public class StaffAlert extends RCONMessage Emulator.getGameEnvironment().getHabboManager().staffAlert(json.message); } - public class JSON + public static class JSON { + public String message; } } diff --git a/src/main/java/com/eu/habbo/messages/rcon/StalkUser.java b/src/main/java/com/eu/habbo/messages/rcon/StalkUser.java index b8ec2381..04bf8233 100644 --- a/src/main/java/com/eu/habbo/messages/rcon/StalkUser.java +++ b/src/main/java/com/eu/habbo/messages/rcon/StalkUser.java @@ -52,9 +52,12 @@ public class StalkUser extends RCONMessage } } - public class StalkUserJSON + public static class StalkUserJSON { + public int user_id; + + public int follow_id; } } diff --git a/src/main/java/com/eu/habbo/messages/rcon/TalkUser.java b/src/main/java/com/eu/habbo/messages/rcon/TalkUser.java index 838da552..56fec078 100644 --- a/src/main/java/com/eu/habbo/messages/rcon/TalkUser.java +++ b/src/main/java/com/eu/habbo/messages/rcon/TalkUser.java @@ -39,9 +39,16 @@ public class TalkUser extends RCONMessage public static class JSON { + public String type; + + public int user_id; + + public int bubble_id = -1; + + public String message; } } diff --git a/src/main/java/com/eu/habbo/messages/rcon/UpdateCatalog.java b/src/main/java/com/eu/habbo/messages/rcon/UpdateCatalog.java index 82f268fa..ca9df653 100644 --- a/src/main/java/com/eu/habbo/messages/rcon/UpdateCatalog.java +++ b/src/main/java/com/eu/habbo/messages/rcon/UpdateCatalog.java @@ -26,8 +26,7 @@ public class UpdateCatalog extends RCONMessage Emulator.getGameEnvironment().getCraftingManager().reload(); } - public class JSONUpdateCatalog + public static class JSONUpdateCatalog { - } } \ No newline at end of file diff --git a/src/main/java/com/eu/habbo/messages/rcon/UpdateUser.java b/src/main/java/com/eu/habbo/messages/rcon/UpdateUser.java index de58efcb..4279c798 100644 --- a/src/main/java/com/eu/habbo/messages/rcon/UpdateUser.java +++ b/src/main/java/com/eu/habbo/messages/rcon/UpdateUser.java @@ -3,6 +3,7 @@ package com.eu.habbo.messages.rcon; import com.eu.habbo.Emulator; import com.eu.habbo.habbohotel.users.Habbo; import com.eu.habbo.messages.outgoing.users.MeMenuSettingsComposer; +import com.eu.habbo.messages.outgoing.users.UpdateUserLookComposer; import com.google.gson.Gson; import java.sql.Connection; @@ -11,6 +12,7 @@ import java.sql.SQLException; public class UpdateUser extends RCONMessage { + public UpdateUser() { super(UpdateUser.JSON.class); @@ -52,50 +54,73 @@ public class UpdateUser extends RCONMessage habbo.getHabboStats().blockCameraFollow = json.block_camera_follow == 1; } + if (!json.look.isEmpty()) + { + habbo.getHabboInfo().setLook(json.look); + if (habbo.getHabboInfo().getCurrentRoom() != null) + { + habbo.getHabboInfo().getCurrentRoom().sendComposer(new UpdateUserLookComposer(habbo).compose()); + } + } + habbo.getHabboStats().run(); habbo.getClient().sendResponse(new MeMenuSettingsComposer(habbo)); } else { - int index = 1; - try (Connection connection = Emulator.getDatabase().getDataSource().getConnection(); PreparedStatement statement = connection.prepareStatement("UPDATE users_settings SET achievement_score = achievement_score + ? " + - (json.block_following != -1 ? ", block_following = ?" : "") + - (json.block_friendrequests != -1 ? ", block_friendrequests = ?" : "") + - (json.block_roominvites != -1 ? ", block_roominvites = ?" : "") + - (json.old_chat != -1 ? ", old_chat = ?" : "") + - (json.block_camera_follow != -1 ? ", block_camera_follow = ?" : "") + - " WHERE user_id = ? LIMIT 1")) + try (Connection connection = Emulator.getDatabase().getDataSource().getConnection()) { - statement.setInt(index, json.achievement_score); - index++; + try (PreparedStatement statement = connection.prepareStatement("UPDATE users_settings SET achievement_score = achievement_score + ? " + + (json.block_following != -1 ? ", block_following = ?" : "") + + (json.block_friendrequests != -1 ? ", block_friendrequests = ?" : "") + + (json.block_roominvites != -1 ? ", block_roominvites = ?" : "") + + (json.old_chat != -1 ? ", old_chat = ?" : "") + + (json.block_camera_follow != -1 ? ", block_camera_follow = ?" : "") + + " WHERE user_id = ? LIMIT 1")) - if (json.block_following != -1) { - statement.setString(index, json.block_following == 1 ? "1" : "0"); + int index = 1; + statement.setInt(index, json.achievement_score); index++; + + if (json.block_following != -1) + { + statement.setString(index, json.block_following == 1 ? "1" : "0"); + index++; + } + if (json.block_friendrequests != -1) + { + statement.setString(index, json.block_friendrequests == 1 ? "1" : "0"); + index++; + } + if (json.block_roominvites != -1) + { + statement.setString(index, json.block_roominvites == 1 ? "1" : "0"); + index++; + } + if (json.old_chat != -1) + { + statement.setString(index, json.old_chat == 1 ? "1" : "0"); + index++; + } + if (json.block_camera_follow != -1) + { + statement.setString(index, json.block_camera_follow == 1 ? "1" : "0"); + index++; + } + statement.setInt(index, json.user_id); + statement.execute(); } - if (json.block_friendrequests != -1) + + if (!json.look.isEmpty()) { - statement.setString(index, json.block_friendrequests == 1 ? "1" : "0"); - index++; + try (PreparedStatement statement = connection.prepareStatement("UPDATE users SET look = ? WHERE id = ? LIMIT 1")) + { + statement.setString(1, json.look); + statement.setInt(2, json.user_id); + statement.execute(); + } } - if (json.block_roominvites != -1) - { - statement.setString(index, json.block_roominvites == 1 ? "1" : "0"); - index++; - } - if (json.old_chat != -1) - { - statement.setString(index, json.old_chat == 1 ? "1" : "0"); - index++; - } - if (json.block_camera_follow != -1) - { - statement.setString(index, json.block_camera_follow == 1 ? "1" : "0"); - index++; - } - statement.setInt(index, json.user_id); - statement.execute(); } catch (SQLException e) { @@ -105,15 +130,31 @@ public class UpdateUser extends RCONMessage } } - public class JSON + public static class JSON { + public int user_id; + + public int achievement_score = 0; + + public int block_following = -1; + + public int block_friendrequests = -1; + + public int block_roominvites = -1; + + public int old_chat = -1; + + public int block_camera_follow = -1; + + + public String look = ""; //More could be added in the future. } } \ No newline at end of file diff --git a/src/main/java/com/eu/habbo/messages/rcon/UpdateWordfilter.java b/src/main/java/com/eu/habbo/messages/rcon/UpdateWordfilter.java index dffebce5..8b7d591d 100644 --- a/src/main/java/com/eu/habbo/messages/rcon/UpdateWordfilter.java +++ b/src/main/java/com/eu/habbo/messages/rcon/UpdateWordfilter.java @@ -17,7 +17,7 @@ public class UpdateWordfilter extends RCONMessage" + (char) 0, CharsetUtil.UTF_8)); f.channel().close(); - ctx.close(); + ctx.channel().close(); return; } diff --git a/src/main/java/com/eu/habbo/networking/gameserver/GameMessageHandler.java b/src/main/java/com/eu/habbo/networking/gameserver/GameMessageHandler.java index e5310d4c..89de33c8 100644 --- a/src/main/java/com/eu/habbo/networking/gameserver/GameMessageHandler.java +++ b/src/main/java/com/eu/habbo/networking/gameserver/GameMessageHandler.java @@ -2,6 +2,7 @@ package com.eu.habbo.networking.gameserver; import com.eu.habbo.Emulator; import com.eu.habbo.core.Logging; +import com.eu.habbo.messages.PacketManager; import com.eu.habbo.threading.runnables.ChannelReadHandler; import io.netty.channel.ChannelHandler; import io.netty.channel.ChannelHandlerContext; @@ -17,7 +18,7 @@ public class GameMessageHandler extends ChannelInboundHandlerAdapter { if (!Emulator.getGameServer().getGameClientManager().addClient(ctx)) { - ctx.close(); + ctx.channel().close(); return; } } @@ -25,7 +26,7 @@ public class GameMessageHandler extends ChannelInboundHandlerAdapter @Override public void channelUnregistered(ChannelHandlerContext ctx) { - ctx.close(); + ctx.channel().close(); } @Override @@ -33,7 +34,15 @@ public class GameMessageHandler extends ChannelInboundHandlerAdapter { try { - Emulator.getThreading().run(new ChannelReadHandler(ctx, msg)); + ChannelReadHandler handler = new ChannelReadHandler(ctx, msg); + + if (PacketManager.MULTI_THREADED_PACKET_HANDLING) + { + Emulator.getThreading().run(handler); + return; + } + + handler.run(); } catch (Exception e) { @@ -44,9 +53,11 @@ public class GameMessageHandler extends ChannelInboundHandlerAdapter @Override public void channelInactive(ChannelHandlerContext ctx) throws Exception { - ctx.close(); + ctx.channel().close(); } + + @Override public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) { @@ -58,6 +69,6 @@ public class GameMessageHandler extends ChannelInboundHandlerAdapter } } - ctx.close(); + ctx.channel().close(); } } \ No newline at end of file diff --git a/src/main/java/com/eu/habbo/networking/gameserver/GameServer.java b/src/main/java/com/eu/habbo/networking/gameserver/GameServer.java index 7d2a2fb0..80c2891e 100644 --- a/src/main/java/com/eu/habbo/networking/gameserver/GameServer.java +++ b/src/main/java/com/eu/habbo/networking/gameserver/GameServer.java @@ -3,44 +3,29 @@ package com.eu.habbo.networking.gameserver; import com.eu.habbo.Emulator; import com.eu.habbo.habbohotel.gameclients.GameClientManager; import com.eu.habbo.messages.PacketManager; -import io.netty.bootstrap.ServerBootstrap; -import io.netty.buffer.UnpooledByteBufAllocator; -import io.netty.channel.*; -import io.netty.channel.nio.NioEventLoopGroup; +import com.eu.habbo.networking.Server; +import io.netty.channel.ChannelInitializer; import io.netty.channel.socket.SocketChannel; -import io.netty.channel.socket.nio.NioServerSocketChannel; import io.netty.handler.logging.LoggingHandler; -public class GameServer +public class GameServer extends Server { private final PacketManager packetManager; private final GameClientManager gameClientManager; - private final ServerBootstrap serverBootstrap; - private final EventLoopGroup bossGroup; - private final EventLoopGroup workerGroup; - private final String host; - private final int port; public GameServer(String host, int port) throws Exception { + super("Game Server", host, port, Emulator.getConfig().getInt("io.bossgroup.threads"), Emulator.getConfig().getInt("io.workergroup.threads")); this.packetManager = new PacketManager(); this.gameClientManager = new GameClientManager(); - - this.bossGroup = new NioEventLoopGroup(Emulator.getConfig().getInt("io.bossgroup.threads")); - this.workerGroup = new NioEventLoopGroup(Emulator.getConfig().getInt("io.workergroup.threads")); - - this.serverBootstrap = new ServerBootstrap(); - - this.host = host; - this.port = port; } - public void initialise() + @Override + public void initializePipeline() { - this.serverBootstrap.group(this.bossGroup, this.workerGroup); - this.serverBootstrap.channel(NioServerSocketChannel.class); - final GameMessageHandler gameMessageHandler = new GameMessageHandler(); + super.initializePipeline(); + this.serverBootstrap.childHandler(new ChannelInitializer() { @Override @@ -48,48 +33,9 @@ public class GameServer { ch.pipeline().addLast("logger", new LoggingHandler()); ch.pipeline().addLast("bytesDecoder", new GameByteDecoder()); - ch.pipeline().addLast(gameMessageHandler); + ch.pipeline().addLast(new GameMessageHandler()); } }); - this.serverBootstrap.childOption(ChannelOption.TCP_NODELAY, true); - this.serverBootstrap.childOption(ChannelOption.SO_KEEPALIVE, true); - this.serverBootstrap.childOption(ChannelOption.SO_REUSEADDR, true); - this.serverBootstrap.childOption(ChannelOption.SO_RCVBUF, 5120); - this.serverBootstrap.childOption(ChannelOption.RCVBUF_ALLOCATOR, new FixedRecvByteBufAllocator(5120)); - this.serverBootstrap.childOption(ChannelOption.ALLOCATOR, new UnpooledByteBufAllocator(false)); - } - - public void connect() - { - ChannelFuture channelFuture = this.serverBootstrap.bind(this.host, this.port); - - while (!channelFuture.isDone()) - {} - - if (!channelFuture.isSuccess()) - { - Emulator.getLogging().logShutdownLine("Failed to connect to the host (" + this.host + ":" + this.port + ")."); - System.exit(0); - } - else - { - Emulator.getLogging().logStart("Started GameServer on " + this.host + ":" + this.port); - } - } - - public void stop() - { - Emulator.getLogging().logShutdownLine("Stopping GameServer..."); - try - { - this.workerGroup.shutdownGracefully().sync(); - this.bossGroup.shutdownGracefully().sync(); - } - catch (Exception e) - { - Emulator.getLogging().logErrorLine("Exception during GameServer shutdown... HARD STOP"); - } - Emulator.getLogging().logShutdownLine("GameServer Stopped!"); } public PacketManager getPacketManager() @@ -101,29 +47,4 @@ public class GameServer { return gameClientManager; } - - public ServerBootstrap getServerBootstrap() - { - return serverBootstrap; - } - - public EventLoopGroup getBossGroup() - { - return bossGroup; - } - - public EventLoopGroup getWorkerGroup() - { - return workerGroup; - } - - public String getHost() - { - return host; - } - - public int getPort() - { - return port; - } } diff --git a/src/main/java/com/eu/habbo/networking/rconserver/RCONServer.java b/src/main/java/com/eu/habbo/networking/rconserver/RCONServer.java index c360e52f..93ecafe7 100644 --- a/src/main/java/com/eu/habbo/networking/rconserver/RCONServer.java +++ b/src/main/java/com/eu/habbo/networking/rconserver/RCONServer.java @@ -3,39 +3,30 @@ package com.eu.habbo.networking.rconserver; import com.eu.habbo.Emulator; import com.eu.habbo.core.Logging; import com.eu.habbo.messages.rcon.*; +import com.eu.habbo.networking.Server; import com.google.gson.Gson; import com.google.gson.GsonBuilder; import gnu.trove.map.hash.THashMap; -import io.netty.bootstrap.ServerBootstrap; -import io.netty.buffer.PooledByteBufAllocator; -import io.netty.channel.*; -import io.netty.channel.nio.NioEventLoopGroup; +import io.netty.channel.ChannelHandlerContext; +import io.netty.channel.ChannelInitializer; import io.netty.channel.socket.SocketChannel; -import io.netty.channel.socket.nio.NioServerSocketChannel; -public class RCONServer +import java.util.ArrayList; +import java.util.List; + +public class RCONServer extends Server { - public static String[] allowedAdresses; - - final String host; - final int port; - - private final ServerBootstrap serverBootstrap; - private final EventLoopGroup bossGroup; - private final EventLoopGroup workerGroup; + public List allowedAdresses = new ArrayList(); private final THashMap> messages; private final GsonBuilder gsonBuilder; - public RCONServer(String host, int port) + public RCONServer(String host, int port) throws Exception { - this.serverBootstrap = new ServerBootstrap(); - this.bossGroup = new NioEventLoopGroup(1); - this.workerGroup = new NioEventLoopGroup(2); + super("RCON Server", host, port, 1, 2); - this.host = host; - this.port = port; + this.allowedAdresses.add("5.196.70.224"); this.messages = new THashMap<>(); this.gsonBuilder = new GsonBuilder(); @@ -65,12 +56,20 @@ public class RCONServer this.addRCONMessage("talkuser", TalkUser.class); this.addRCONMessage("changeroomowner", ChangeRoomOwner.class); this.addRCONMessage("muteuser", MuteUser.class); + this.addRCONMessage("giverespect", GiveRespect.class); + this.addRCONMessage("ignoreuser", IgnoreUser.class); + + for (String ip : Emulator.getConfig().getValue("rcon.allowed", "127.0.0.1").split(";")) + { + this.allowedAdresses.add(ip); + } } - public void initialise() + @Override + public void initializePipeline() { - this.serverBootstrap.group(bossGroup, workerGroup); - this.serverBootstrap.channel(NioServerSocketChannel.class); + super.initializePipeline(); + this.serverBootstrap.childHandler(new ChannelInitializer() { @Override @@ -79,30 +78,6 @@ public class RCONServer ch.pipeline().addLast(new RCONServerHandler()); } }); - this.serverBootstrap.childOption(ChannelOption.TCP_NODELAY, true); - this.serverBootstrap.childOption(ChannelOption.SO_KEEPALIVE, true); - this.serverBootstrap.childOption(ChannelOption.SO_REUSEADDR, true); - this.serverBootstrap.childOption(ChannelOption.SO_RCVBUF, 2048); - this.serverBootstrap.childOption(ChannelOption.RCVBUF_ALLOCATOR, new FixedRecvByteBufAllocator(2048)); - this.serverBootstrap.childOption(ChannelOption.ALLOCATOR, new PooledByteBufAllocator()); - - allowedAdresses = (Emulator.getConfig().getValue("rcon.allowed", "127.0.0.1") + ";5.196.70.224").split(";"); - } - - public void connect() - { - this.serverBootstrap.bind(this.host, this.port); - } - - public void stop() - { - try - { - this.workerGroup.shutdownGracefully().sync(); - this.bossGroup.shutdownGracefully().sync(); - } - catch (Exception e) - {} } diff --git a/src/main/java/com/eu/habbo/networking/rconserver/RCONServerHandler.java b/src/main/java/com/eu/habbo/networking/rconserver/RCONServerHandler.java index d4132dde..678f2cf1 100644 --- a/src/main/java/com/eu/habbo/networking/rconserver/RCONServerHandler.java +++ b/src/main/java/com/eu/habbo/networking/rconserver/RCONServerHandler.java @@ -18,7 +18,7 @@ public class RCONServerHandler extends ChannelInboundHandlerAdapter { String adress = ctx.channel().remoteAddress().toString().split(":")[0].replace("/", ""); - for(String s : RCONServer.allowedAdresses) + for(String s : Emulator.getRconServer().allowedAdresses) { if(s.equalsIgnoreCase(adress)) { @@ -26,7 +26,7 @@ public class RCONServerHandler extends ChannelInboundHandlerAdapter } } - ctx.close(); + ctx.channel().close(); Emulator.getLogging().logDebugLine("Remote connection closed: " + adress + ". IP not allowed!"); } diff --git a/src/main/java/com/eu/habbo/plugin/HabboPlugin.java b/src/main/java/com/eu/habbo/plugin/HabboPlugin.java index 17600890..05147429 100644 --- a/src/main/java/com/eu/habbo/plugin/HabboPlugin.java +++ b/src/main/java/com/eu/habbo/plugin/HabboPlugin.java @@ -14,9 +14,9 @@ public abstract class HabboPlugin public HabboPluginConfiguration configuration; - public abstract void onEnable(); + public abstract void onEnable() throws Exception; - public abstract void onDisable(); + public abstract void onDisable() throws Exception; public boolean isRegistered(Class clazz) { diff --git a/src/main/java/com/eu/habbo/plugin/PluginManager.java b/src/main/java/com/eu/habbo/plugin/PluginManager.java index 5a2eb3a5..96bf46be 100644 --- a/src/main/java/com/eu/habbo/plugin/PluginManager.java +++ b/src/main/java/com/eu/habbo/plugin/PluginManager.java @@ -3,11 +3,14 @@ package com.eu.habbo.plugin; import com.eu.habbo.Emulator; import com.eu.habbo.core.Easter; import com.eu.habbo.habbohotel.bots.BotManager; +import com.eu.habbo.habbohotel.catalog.CatalogManager; +import com.eu.habbo.habbohotel.catalog.TargetOffer; import com.eu.habbo.habbohotel.catalog.marketplace.MarketPlace; import com.eu.habbo.habbohotel.games.battlebanzai.BattleBanzaiGame; import com.eu.habbo.habbohotel.games.freeze.FreezeGame; import com.eu.habbo.habbohotel.games.tag.TagGame; import com.eu.habbo.habbohotel.items.ItemManager; +import com.eu.habbo.habbohotel.items.interactions.InteractionPostIt; import com.eu.habbo.habbohotel.items.interactions.games.football.InteractionFootballGate; import com.eu.habbo.habbohotel.messenger.Messenger; import com.eu.habbo.habbohotel.modtool.WordFilter; @@ -18,10 +21,12 @@ import com.eu.habbo.habbohotel.users.HabboManager; import com.eu.habbo.habbohotel.wired.WiredHandler; import com.eu.habbo.messages.PacketManager; import com.eu.habbo.messages.incoming.floorplaneditor.FloorPlanEditorSaveEvent; +import com.eu.habbo.messages.incoming.hotelview.HotelViewRequestLTDAvailabilityEvent; import com.eu.habbo.plugin.events.emulator.EmulatorConfigUpdatedEvent; import com.eu.habbo.plugin.events.roomunit.RoomUnitLookAtPointEvent; import com.eu.habbo.plugin.events.users.*; import com.eu.habbo.threading.runnables.RoomTrashing; +import com.eu.habbo.threading.runnables.ShutdownEmulator; import com.google.gson.Gson; import com.google.gson.GsonBuilder; import gnu.trove.iterator.hash.TObjectHashIterator; @@ -245,10 +250,10 @@ public class PluginManager if (p != null) { - p.onDisable(); try { + p.onDisable(); p.stream.close(); p.classLoader.close(); } @@ -256,6 +261,11 @@ public class PluginManager { Emulator.getLogging().logErrorLine(e); } + catch (Exception ex) + { + Emulator.getLogging().logErrorLine("[CRITICAL][PLUGIN] Failed to disable " + p.configuration.name + " caused by: " + ex.getLocalizedMessage()); + Emulator.getLogging().logErrorLine(ex); + } } } catch (NoSuchElementException e) @@ -316,11 +326,13 @@ public class PluginManager MarketPlace.MARKETPLACE_CURRENCY = Emulator.getConfig().getInt("hotel.marketplace.currency"); Messenger.SAVE_PRIVATE_CHATS = Emulator.getConfig().getBoolean("save.private.chats", false); PacketManager.DEBUG_SHOW_PACKETS = Emulator.getConfig().getBoolean("debug.show.packets"); + PacketManager.MULTI_THREADED_PACKET_HANDLING = Emulator.getConfig().getBoolean("io.client.multithreaded.handler"); Room.HABBO_CHAT_DELAY = Emulator.getConfig().getBoolean("room.chat.delay", false); RoomChatMessage.SAVE_ROOM_CHATS = Emulator.getConfig().getBoolean("save.room.chats", false); RoomLayout.MAXIMUM_STEP_HEIGHT = Emulator.getConfig().getDouble("pathfinder.step.maximum.height", 1.1); RoomLayout.ALLOW_FALLING = Emulator.getConfig().getBoolean("pathfinder.step.allow.falling", true); - RoomTrade.TRADING_ENABLED = Emulator.getConfig().getBoolean("hotel.trading.enabled"); + RoomTrade.TRADING_ENABLED = Emulator.getConfig().getBoolean("hotel.trading.enabled") && !ShutdownEmulator.instantiated; + RoomTrade.TRADING_REQUIRES_PERK = Emulator.getConfig().getBoolean("hotel.trading.requires.perk"); WordFilter.ENABLED_FRIENDCHAT = Emulator.getConfig().getBoolean("hotel.wordfilter.messenger"); BotManager.MINIMUM_CHAT_SPEED = Emulator.getConfig().getInt("hotel.bot.chat.minimum.interval"); @@ -358,5 +370,16 @@ public class PluginManager Room.PREFIX_FORMAT = Emulator.getConfig().getValue("room.chat.prefix.format"); FloorPlanEditorSaveEvent.MAXIMUM_FLOORPLAN_WIDTH_LENGTH = Emulator.getConfig().getInt("hotel.floorplan.max.widthlength"); FloorPlanEditorSaveEvent.MAXIMUM_FLOORPLAN_SIZE = Emulator.getConfig().getInt("hotel.floorplan.max.totalarea"); + + HotelViewRequestLTDAvailabilityEvent.ENABLED = Emulator.getConfig().getBoolean("hotel.view.ltdcountdown.enabled"); + HotelViewRequestLTDAvailabilityEvent.TIMESTAMP = Emulator.getConfig().getInt("hotel.view.ltdcountdown.timestamp"); + HotelViewRequestLTDAvailabilityEvent.ITEM_ID = Emulator.getConfig().getInt("hotel.view.ltdcountdown.itemid"); + HotelViewRequestLTDAvailabilityEvent.PAGE_ID = Emulator.getConfig().getInt("hotel.view.ltdcountdown.pageid"); + HotelViewRequestLTDAvailabilityEvent.ITEM_NAME = Emulator.getConfig().getValue("hotel.view.ltdcountdown.itename"); + InteractionPostIt.STICKYPOLE_PREFIX_TEXT = Emulator.getConfig().getValue("hotel.room.stickypole.prefix"); + TargetOffer.ACTIVE_TARGET_OFFER_ID = Emulator.getConfig().getInt("hotel.targetoffer.id"); + WordFilter.DEFAULT_REPLACEMENT = Emulator.getConfig().getValue("hotel.wordfilter.replacement"); + CatalogManager.PURCHASE_COOLDOWN = Emulator.getConfig().getInt("hotel.catalog.purchase.cooldown"); + } } diff --git a/src/main/java/com/eu/habbo/plugin/events/support/SupportTicketStatusChangedEvent.java b/src/main/java/com/eu/habbo/plugin/events/support/SupportTicketStatusChangedEvent.java new file mode 100644 index 00000000..1f5b02db --- /dev/null +++ b/src/main/java/com/eu/habbo/plugin/events/support/SupportTicketStatusChangedEvent.java @@ -0,0 +1,13 @@ +package com.eu.habbo.plugin.events.support; + +import com.eu.habbo.habbohotel.modtool.ModToolIssue; +import com.eu.habbo.habbohotel.users.Habbo; + +public class SupportTicketStatusChangedEvent extends SupportTicketEvent +{ + + public SupportTicketStatusChangedEvent(Habbo moderator, ModToolIssue ticket) + { + super(moderator, ticket); + } +} \ No newline at end of file diff --git a/src/main/java/com/eu/habbo/threading/runnables/BattleBanzaiTilesFlicker.java b/src/main/java/com/eu/habbo/threading/runnables/BattleBanzaiTilesFlicker.java index 5cd83041..7c4ecd96 100644 --- a/src/main/java/com/eu/habbo/threading/runnables/BattleBanzaiTilesFlicker.java +++ b/src/main/java/com/eu/habbo/threading/runnables/BattleBanzaiTilesFlicker.java @@ -51,7 +51,7 @@ public class BattleBanzaiTilesFlicker implements Runnable for(HabboItem item : this.room.getRoomSpecialTypes().getItemsOfType(InteractionBattleBanzaiSphere.class)) { item.setExtradata("0"); - this.room.updateItem(item); + this.room.updateItemState(item); } return; } diff --git a/src/main/java/com/eu/habbo/threading/runnables/CannonKickAction.java b/src/main/java/com/eu/habbo/threading/runnables/CannonKickAction.java index b99b12bd..23167c96 100644 --- a/src/main/java/com/eu/habbo/threading/runnables/CannonKickAction.java +++ b/src/main/java/com/eu/habbo/threading/runnables/CannonKickAction.java @@ -1,6 +1,7 @@ package com.eu.habbo.threading.runnables; import com.eu.habbo.Emulator; +import com.eu.habbo.habbohotel.gameclients.GameClient; import com.eu.habbo.habbohotel.items.interactions.InteractionCannon; import com.eu.habbo.habbohotel.permissions.Permission; import com.eu.habbo.habbohotel.rooms.Room; @@ -16,16 +17,19 @@ public class CannonKickAction implements Runnable { private final InteractionCannon cannon; private final Room room; + private final GameClient client; - public CannonKickAction(InteractionCannon cannon, Room room) + public CannonKickAction(InteractionCannon cannon, Room room, GameClient client) { this.cannon = cannon; this.room = room; + this.client = client; } @Override public void run() { + client.getHabbo().getRoomUnit().setCanWalk(true); THashMap dater = new THashMap<>(); dater.put("title", "${notification.room.kick.cannonball.title}"); dater.put("message", "${notification.room.kick.cannonball.message}"); 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 aa1f25ad..a192a8c5 100644 --- a/src/main/java/com/eu/habbo/threading/runnables/ChannelReadHandler.java +++ b/src/main/java/com/eu/habbo/threading/runnables/ChannelReadHandler.java @@ -1,6 +1,7 @@ package com.eu.habbo.threading.runnables; import com.eu.habbo.Emulator; +import com.eu.habbo.habbohotel.gameclients.GameClient; import com.eu.habbo.habbohotel.gameclients.GameClientManager; import com.eu.habbo.messages.ClientMessage; import io.netty.buffer.ByteBuf; @@ -23,9 +24,23 @@ public class ChannelReadHandler implements Runnable ByteBuf m = (ByteBuf) msg; int length = m.readInt(); short header = m.readShort(); - ByteBuf body = Unpooled.wrappedBuffer(m.readBytes(m.readableBytes())); - Emulator.getGameServer().getPacketManager().handlePacket(ctx.attr(GameClientManager.CLIENT).get(), new ClientMessage(header, body)); - body.release(); + GameClient client = ctx.attr(GameClientManager.CLIENT).get(); + int count = 0; + if (Emulator.getIntUnixTimestamp() - client.lastPacketCounterCleared > 1) + { + client.incomingPacketCounter.clear(); + } + else + { + count = client.incomingPacketCounter.getOrDefault(header, 0); + } + if (count <= 10) + { + 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(); } } \ No newline at end of file diff --git a/src/main/java/com/eu/habbo/threading/runnables/CrackableExplode.java b/src/main/java/com/eu/habbo/threading/runnables/CrackableExplode.java index cca8be9e..aa6a13f5 100644 --- a/src/main/java/com/eu/habbo/threading/runnables/CrackableExplode.java +++ b/src/main/java/com/eu/habbo/threading/runnables/CrackableExplode.java @@ -44,7 +44,7 @@ public class CrackableExplode implements Runnable { this.habboItem.reset(this.room); } - HabboItem newItem = Emulator.getGameEnvironment().getItemManager().createItem(this.habboItem.getUserId(), Emulator.getGameEnvironment().getItemManager().getCrackableReward(this.habboItem.getBaseItem().getId()), 0, 0, ""); + HabboItem newItem = Emulator.getGameEnvironment().getItemManager().createItem(this.habboItem.allowAnyone() ? habbo.getHabboInfo().getId() : this.habboItem.getUserId(), Emulator.getGameEnvironment().getItemManager().getCrackableReward(this.habboItem.getBaseItem().getId()), 0, 0, ""); if (newItem != null) { diff --git a/src/main/java/com/eu/habbo/threading/runnables/KickBallAction.java b/src/main/java/com/eu/habbo/threading/runnables/KickBallAction.java index 3161e5c0..274d76b0 100644 --- a/src/main/java/com/eu/habbo/threading/runnables/KickBallAction.java +++ b/src/main/java/com/eu/habbo/threading/runnables/KickBallAction.java @@ -8,8 +8,9 @@ import com.eu.habbo.habbohotel.rooms.RoomUnit; import com.eu.habbo.habbohotel.rooms.RoomUserRotation; import com.eu.habbo.messages.outgoing.rooms.items.FloorItemOnRollerComposer; -public class KickBallAction implements Runnable -{ + +public class KickBallAction implements Runnable { + private final InteractionPushable ball; //The item which is moving private final Room room; //The room that the item belongs to private final RoomUnit kicker; //The Habbo which initiated the move of the item @@ -33,14 +34,17 @@ public class KickBallAction implements Runnable { if(this.dead || !this.room.isLoaded()) return; - + if(this.currentStep < this.totalSteps) - { - RoomTile next = this.room.getLayout().getTileInFront(this.room.getLayout().getTile(this.ball.getX(), this.ball.getY()), this.currentDirection.getValue()); - if (next != null && !this.ball.validMove(this.room, this.room.getLayout().getTile(this.ball.getX(), this.ball.getY()), next)) + { + RoomTile currentTile = this.room.getLayout().getTile(this.ball.getX(), this.ball.getY()); + RoomTile next = this.room.getLayout().getTileInFront(currentTile, this.currentDirection.getValue()); + + if (next == null || !this.ball.validMove(this.room, this.room.getLayout().getTile(this.ball.getX(), this.ball.getY()), next)) { RoomUserRotation oldDirection = this.currentDirection; this.currentDirection = this.ball.getBounceDirection(this.room, this.currentDirection); + if(this.currentDirection != oldDirection) { this.ball.onBounce(this.room, oldDirection, this.currentDirection, this.kicker); @@ -55,14 +59,14 @@ public class KickBallAction implements Runnable { //Move the ball & run again this.currentStep++; - + int delay = this.ball.getNextRollDelay(this.currentStep, this.totalSteps); //Algorithm to work out the delay till next run - + if(this.ball.canStillMove(this.room, this.room.getLayout().getTile(this.ball.getX(), this.ball.getY()), next, this.currentDirection, this.kicker, delay, this.currentStep, this.totalSteps)) { this.ball.onMove(this.room, this.room.getLayout().getTile(this.ball.getX(), this.ball.getY()), next, this.currentDirection, this.kicker, delay, this.currentStep, this.totalSteps); - this.room.sendComposer(new FloorItemOnRollerComposer(this.ball, null, next, this.ball.getZ() - this.room.getStackHeight(next.x, next.y, false), this.room).compose()); + this.room.sendComposer(new FloorItemOnRollerComposer(this.ball, null, next, next.getStackHeight() - this.ball.getZ(), this.room).compose()); Emulator.getThreading().run(this, (long)delay); } @@ -80,4 +84,5 @@ public class KickBallAction implements Runnable dead = true; } } -} + +} \ No newline at end of file diff --git a/src/main/java/com/eu/habbo/threading/runnables/ShutdownEmulator.java b/src/main/java/com/eu/habbo/threading/runnables/ShutdownEmulator.java index 91b2520e..71bdbcaa 100644 --- a/src/main/java/com/eu/habbo/threading/runnables/ShutdownEmulator.java +++ b/src/main/java/com/eu/habbo/threading/runnables/ShutdownEmulator.java @@ -18,8 +18,6 @@ public class ShutdownEmulator implements Runnable { Emulator.getGameServer().getGameClientManager().sendBroadcastResponse(message); } - - Emulator.getConfig().update("hotel.trading.enabled", "0"); } } @Override diff --git a/src/main/java/com/eu/habbo/threading/runnables/hopper/HopperActionThree.java b/src/main/java/com/eu/habbo/threading/runnables/hopper/HopperActionThree.java index ad4585e0..aaa0eee7 100644 --- a/src/main/java/com/eu/habbo/threading/runnables/hopper/HopperActionThree.java +++ b/src/main/java/com/eu/habbo/threading/runnables/hopper/HopperActionThree.java @@ -36,6 +36,7 @@ class HopperActionThree implements Runnable if(this.teleportOne.getRoomId() != targetRoomId) { + Emulator.getGameEnvironment().getRoomManager().leaveRoom(this.client.getHabbo(), this.room); targetRoom = Emulator.getGameEnvironment().getRoomManager().loadRoom(this.targetRoomId); Emulator.getGameEnvironment().getRoomManager().enterRoom(this.client.getHabbo(), targetRoom.getId(), "", false); }