mirror of
https://git.krews.org/morningstar/Arcturus-Community.git
synced 2024-11-22 23:10:52 +01:00
New campaign calendar system
This commit is contained in:
parent
1ea080f89a
commit
dfd12bd56a
@ -20,4 +20,56 @@ CREATE TABLE `messenger_categories` (
|
|||||||
);
|
);
|
||||||
|
|
||||||
-- Set an ID (int) from category list items
|
-- Set an ID (int) from category list items
|
||||||
ALTER TABLE messenger_friendships ADD category int NOT NULL DEFAULT '0' AFTER friends_since;
|
ALTER TABLE messenger_friendships ADD category int NOT NULL DEFAULT '0' AFTER friends_since;
|
||||||
|
|
||||||
|
-- ----------------------------
|
||||||
|
-- Table structure for calendar_campaigns
|
||||||
|
-- ----------------------------
|
||||||
|
DROP TABLE IF EXISTS `calendar_campaigns`;
|
||||||
|
CREATE TABLE `calendar_campaigns` (
|
||||||
|
`id` int NOT NULL AUTO_INCREMENT,
|
||||||
|
`name` varchar(255) NOT NULL DEFAULT '',
|
||||||
|
`image` varchar(255) NOT NULL DEFAULT '',
|
||||||
|
`start_timestamp` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
|
||||||
|
`total_days` int NOT NULL DEFAULT '30',
|
||||||
|
`lock_expired` enum('1','0') NOT NULL DEFAULT '1',
|
||||||
|
`enabled` enum('1','0') NOT NULL DEFAULT '1',
|
||||||
|
UNIQUE KEY `id` (`id`)
|
||||||
|
);
|
||||||
|
|
||||||
|
-- ----------------------------
|
||||||
|
-- Records of calendar_campaigns
|
||||||
|
-- ----------------------------
|
||||||
|
INSERT INTO `calendar_campaigns` VALUES ('1', 'test', '', '2022-02-09 16:49:13', '31', '1', '1');
|
||||||
|
|
||||||
|
-- ----------------------------
|
||||||
|
-- Table structure for calendar_rewards
|
||||||
|
-- ----------------------------
|
||||||
|
DROP TABLE IF EXISTS `calendar_rewards`;
|
||||||
|
CREATE TABLE `calendar_rewards` (
|
||||||
|
`id` int NOT NULL AUTO_INCREMENT,
|
||||||
|
`campaign_id` int NOT NULL DEFAULT '0',
|
||||||
|
`product_name` varchar(128) CHARACTER SET latin1 COLLATE latin1_swedish_ci NOT NULL DEFAULT '',
|
||||||
|
`custom_image` varchar(128) CHARACTER SET latin1 COLLATE latin1_swedish_ci NOT NULL DEFAULT '',
|
||||||
|
`credits` int NOT NULL DEFAULT '0',
|
||||||
|
`pixels` int NOT NULL DEFAULT '0',
|
||||||
|
`points` int NOT NULL DEFAULT '0',
|
||||||
|
`points_type` int NOT NULL DEFAULT '0',
|
||||||
|
`badge` varchar(25) CHARACTER SET latin1 COLLATE latin1_swedish_ci NOT NULL DEFAULT '',
|
||||||
|
`item_id` int NOT NULL DEFAULT '0',
|
||||||
|
`subscription_type` enum('HABBO_CLUB') CHARACTER SET latin1 COLLATE latin1_swedish_ci DEFAULT NULL,
|
||||||
|
`subscription_type` varchar(128) CHARACTER SET latin1 COLLATE latin1_swedish_ci DEFAULT '',
|
||||||
|
`subscription_days` int NOT NULL DEFAULT '0',
|
||||||
|
PRIMARY KEY (`id`) USING BTREE
|
||||||
|
);
|
||||||
|
|
||||||
|
INSERT INTO `emulator_settings` (`key`, `value`) VALUES ('hotel.calendar.default', 'test');
|
||||||
|
INSERT INTO `emulator_settings` (`key`, `value`) VALUES ('hotel.calendar.pixels.hc_modifier', '2.0');
|
||||||
|
|
||||||
|
-- Calendar force open
|
||||||
|
ALTER TABLE `permissions` ADD COLUMN `acc_calendar_force` enum('0','1') NULL DEFAULT '0';
|
||||||
|
|
||||||
|
-- UpdateCalendar command.
|
||||||
|
ALTER TABLE `permissions` ADD `cmd_update_calendar` ENUM('0', '1') NOT NULL DEFAULT '0';
|
||||||
|
INSERT INTO `emulator_texts` (`key`, `value`) VALUES ('commands.description.cmd_update_calendar', ':update_calendar'), ('commands.keys.cmd_update_calendar', 'update_calendar');
|
||||||
|
INSERT INTO `emulator_texts` (`key`, `value`) VALUES ('commands.success.cmd_update_calendar', 'Calendar updated successfully!');
|
@ -4,6 +4,7 @@ import com.eu.habbo.Emulator;
|
|||||||
import com.eu.habbo.core.*;
|
import com.eu.habbo.core.*;
|
||||||
import com.eu.habbo.habbohotel.achievements.AchievementManager;
|
import com.eu.habbo.habbohotel.achievements.AchievementManager;
|
||||||
import com.eu.habbo.habbohotel.bots.BotManager;
|
import com.eu.habbo.habbohotel.bots.BotManager;
|
||||||
|
import com.eu.habbo.habbohotel.campaign.calendar.CalendarManager;
|
||||||
import com.eu.habbo.habbohotel.catalog.CatalogManager;
|
import com.eu.habbo.habbohotel.catalog.CatalogManager;
|
||||||
import com.eu.habbo.habbohotel.commands.CommandHandler;
|
import com.eu.habbo.habbohotel.commands.CommandHandler;
|
||||||
import com.eu.habbo.habbohotel.crafting.CraftingManager;
|
import com.eu.habbo.habbohotel.crafting.CraftingManager;
|
||||||
@ -54,6 +55,7 @@ public class GameEnvironment {
|
|||||||
private CraftingManager craftingManager;
|
private CraftingManager craftingManager;
|
||||||
private PollManager pollManager;
|
private PollManager pollManager;
|
||||||
private SubscriptionManager subscriptionManager;
|
private SubscriptionManager subscriptionManager;
|
||||||
|
private CalendarManager calendarManager;
|
||||||
|
|
||||||
public void load() throws Exception {
|
public void load() throws Exception {
|
||||||
LOGGER.info("GameEnvironment -> Loading...");
|
LOGGER.info("GameEnvironment -> Loading...");
|
||||||
@ -78,6 +80,7 @@ public class GameEnvironment {
|
|||||||
this.wordFilter = new WordFilter();
|
this.wordFilter = new WordFilter();
|
||||||
this.craftingManager = new CraftingManager();
|
this.craftingManager = new CraftingManager();
|
||||||
this.pollManager = new PollManager();
|
this.pollManager = new PollManager();
|
||||||
|
this.calendarManager = new CalendarManager();
|
||||||
|
|
||||||
this.roomManager.loadPublicRooms();
|
this.roomManager.loadPublicRooms();
|
||||||
this.navigatorManager.loadNavigator();
|
this.navigatorManager.loadNavigator();
|
||||||
@ -114,6 +117,7 @@ public class GameEnvironment {
|
|||||||
this.itemManager.dispose();
|
this.itemManager.dispose();
|
||||||
this.hotelViewManager.dispose();
|
this.hotelViewManager.dispose();
|
||||||
this.subscriptionManager.dispose();
|
this.subscriptionManager.dispose();
|
||||||
|
this.calendarManager.dispose();
|
||||||
LOGGER.info("GameEnvironment -> Disposed!");
|
LOGGER.info("GameEnvironment -> Disposed!");
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -206,4 +210,6 @@ public class GameEnvironment {
|
|||||||
public SubscriptionManager getSubscriptionManager() {
|
public SubscriptionManager getSubscriptionManager() {
|
||||||
return this.subscriptionManager;
|
return this.subscriptionManager;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public CalendarManager getCalendarManager() { return this.calendarManager; }
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,64 @@
|
|||||||
|
package com.eu.habbo.habbohotel.campaign.calendar;
|
||||||
|
|
||||||
|
import gnu.trove.map.hash.THashMap;
|
||||||
|
|
||||||
|
import java.sql.ResultSet;
|
||||||
|
import java.sql.SQLException;
|
||||||
|
import java.sql.Timestamp;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
public class CalendarCampaign {
|
||||||
|
private int id;
|
||||||
|
private final String name;
|
||||||
|
private final String image;
|
||||||
|
private Map<Integer , CalendarRewardObject> rewards = new THashMap<>();
|
||||||
|
private final Timestamp start_timestamp;
|
||||||
|
private final int total_days;
|
||||||
|
private final boolean lock_expired;
|
||||||
|
|
||||||
|
public CalendarCampaign(ResultSet set) throws SQLException {
|
||||||
|
this.id = set.getInt("id");
|
||||||
|
this.name = set.getString("name");
|
||||||
|
this.image = set.getString("image");
|
||||||
|
this.start_timestamp = set.getTimestamp("start_timestamp");
|
||||||
|
this.total_days = set.getInt("total_days");
|
||||||
|
this.lock_expired = set.getInt("lock_expired") == 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
public CalendarCampaign(int id, String name, String image, Timestamp start_timestamp, int total_days, boolean lock_expired) {
|
||||||
|
this.id = id;
|
||||||
|
this.name = name;
|
||||||
|
this.image = image;
|
||||||
|
this.start_timestamp = start_timestamp;
|
||||||
|
this.total_days = total_days;
|
||||||
|
this.lock_expired = lock_expired;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getId() {
|
||||||
|
return this.id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getName() {
|
||||||
|
return this.name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getImage() {
|
||||||
|
return this.image;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Timestamp getStartTimestamp() {
|
||||||
|
return this.start_timestamp;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getTotalDays() { return this.total_days; }
|
||||||
|
|
||||||
|
public boolean getLockExpired() { return this.lock_expired; }
|
||||||
|
|
||||||
|
public Map<Integer, CalendarRewardObject> getRewards() { return rewards; }
|
||||||
|
|
||||||
|
public void setId(int id) { this.id = id; }
|
||||||
|
|
||||||
|
public void setRewards(Map<Integer, CalendarRewardObject> rewards) { this.rewards = rewards; }
|
||||||
|
|
||||||
|
public void addReward(CalendarRewardObject reward) { this.rewards.put(reward.getId(), reward); }
|
||||||
|
}
|
@ -0,0 +1,154 @@
|
|||||||
|
package com.eu.habbo.habbohotel.campaign.calendar;
|
||||||
|
|
||||||
|
import com.eu.habbo.Emulator;
|
||||||
|
import com.eu.habbo.habbohotel.users.Habbo;
|
||||||
|
import com.eu.habbo.messages.outgoing.events.calendar.AdventCalendarProductComposer;
|
||||||
|
import com.eu.habbo.plugin.events.users.calendar.UserClaimRewardEvent;
|
||||||
|
import gnu.trove.map.hash.THashMap;
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
|
import java.sql.*;
|
||||||
|
import java.util.*;
|
||||||
|
import java.util.Date;
|
||||||
|
|
||||||
|
import static java.time.temporal.ChronoUnit.DAYS;
|
||||||
|
|
||||||
|
|
||||||
|
public class CalendarManager {
|
||||||
|
private static final Logger LOGGER = LoggerFactory.getLogger(CalendarCampaign.class);
|
||||||
|
|
||||||
|
final private static Map<Integer, CalendarCampaign> calendarCampaigns = new THashMap<>();
|
||||||
|
public static double HC_MODIFIER;
|
||||||
|
|
||||||
|
public CalendarManager() {
|
||||||
|
long millis = System.currentTimeMillis();
|
||||||
|
this.reload();
|
||||||
|
LOGGER.info("Calendar Manager -> Loaded! ({} MS)", (System.currentTimeMillis() - millis));
|
||||||
|
}
|
||||||
|
|
||||||
|
public void dispose(){
|
||||||
|
calendarCampaigns.clear();
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean reload() {
|
||||||
|
this.dispose();
|
||||||
|
try (Connection connection = Emulator.getDatabase().getDataSource().getConnection(); PreparedStatement statement = connection.prepareStatement("SELECT * FROM calendar_campaigns WHERE enabled = 1")) {
|
||||||
|
try (ResultSet set = statement.executeQuery()) {
|
||||||
|
while (set.next()) {
|
||||||
|
calendarCampaigns.put(set.getInt("id"), new CalendarCampaign(set));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (SQLException e) {
|
||||||
|
LOGGER.error("Caught SQL exception", e);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
try (Connection connection = Emulator.getDatabase().getDataSource().getConnection(); PreparedStatement statement = connection.prepareStatement("SELECT * FROM calendar_rewards")) {
|
||||||
|
try (ResultSet set = statement.executeQuery()) {
|
||||||
|
while (set.next()) {
|
||||||
|
CalendarCampaign campaign = calendarCampaigns.get(set.getInt("campaign_id"));
|
||||||
|
if(campaign != null){
|
||||||
|
campaign.addReward(new CalendarRewardObject(set));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (SQLException e) {
|
||||||
|
LOGGER.error("Caught SQL exception", e);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
HC_MODIFIER = Emulator.getConfig().getDouble("hotel.calendar.pixels.hc_modifier", 2.0);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void addCampaign(CalendarCampaign campaign) {
|
||||||
|
|
||||||
|
try (Connection connection = Emulator.getDatabase().getDataSource().getConnection(); PreparedStatement statement = connection.prepareStatement("INSERT INTO calendar_campaigns ( name, image, start_timestamp, total_days, lock_expired) VALUES (?, ?, ?, ? , ?)", Statement.RETURN_GENERATED_KEYS)) {
|
||||||
|
statement.setString(1, campaign.getName());
|
||||||
|
statement.setString(2, campaign.getImage());
|
||||||
|
statement.setTimestamp(3, campaign.getStartTimestamp());
|
||||||
|
statement.setInt(4, campaign.getTotalDays());
|
||||||
|
statement.setBoolean(5, campaign.getLockExpired());
|
||||||
|
int affectedRows = statement.executeUpdate();
|
||||||
|
|
||||||
|
if (affectedRows == 0) {
|
||||||
|
throw new SQLException("Creating calendar campaign failed, no rows affected.");
|
||||||
|
}
|
||||||
|
|
||||||
|
try (ResultSet generatedKeys = statement.getGeneratedKeys()) {
|
||||||
|
if (generatedKeys.next()) {
|
||||||
|
campaign.setId(generatedKeys.getInt(1));
|
||||||
|
} else {
|
||||||
|
throw new SQLException("Creating calendar campaign failed, no ID found.");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (SQLException e) {
|
||||||
|
LOGGER.error("Caught SQL exception", e);
|
||||||
|
}
|
||||||
|
|
||||||
|
calendarCampaigns.put(campaign.getId(), campaign);
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean deleteCampaign(CalendarCampaign campaign) {
|
||||||
|
calendarCampaigns.remove(campaign.getId());
|
||||||
|
|
||||||
|
try (Connection connection = Emulator.getDatabase().getDataSource().getConnection(); PreparedStatement statement = connection.prepareStatement("DELETE FROM calendar_campaigns WHERE id = ? LIMIT 1")) {
|
||||||
|
statement.setInt(1, campaign.getId());
|
||||||
|
return statement.execute();
|
||||||
|
} catch (SQLException e) {
|
||||||
|
LOGGER.error("Caught SQL exception", e);
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
public CalendarCampaign getCalendarCampaign(String campaignName) {
|
||||||
|
return calendarCampaigns.values().stream().filter(cc -> Objects.equals(cc.getName(), campaignName)).findFirst().orElse(null);
|
||||||
|
}
|
||||||
|
public Map<Integer, CalendarCampaign> getCalendarCampaigns() {
|
||||||
|
return calendarCampaigns;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void claimCalendarReward(Habbo habbo, String campaignName, int day, boolean force) {
|
||||||
|
CalendarCampaign campaign = calendarCampaigns.values().stream().filter(cc -> Objects.equals(cc.getName(), campaignName)).findFirst().orElse(null);
|
||||||
|
if(campaign == null) return;
|
||||||
|
if (habbo.getHabboStats().calendarRewardsClaimed.stream().noneMatch(claimed -> claimed.getCampaignId() == campaign.getId() && claimed.getDay() == day)) {
|
||||||
|
|
||||||
|
Set<Integer> keys = campaign.getRewards().keySet();
|
||||||
|
Map<Integer, Integer> rewards = new THashMap<>();
|
||||||
|
if(keys.isEmpty()) return;
|
||||||
|
keys.forEach(key -> rewards.put(rewards.size() + 1, key));
|
||||||
|
int rand = Emulator.getRandom().nextInt(rewards.size() - 1 + 1) + 1;
|
||||||
|
int random = rewards.get(rand);
|
||||||
|
CalendarRewardObject object = campaign.getRewards().get(random);
|
||||||
|
if (object == null) return;
|
||||||
|
int daysBetween = (int) DAYS.between(campaign.getStartTimestamp().toInstant(), new Date().toInstant());
|
||||||
|
if(daysBetween >= 0 && daysBetween <= campaign.getTotalDays()) {
|
||||||
|
int diff = (daysBetween - day);
|
||||||
|
if ((((diff <= 2 || !campaign.getLockExpired()) && diff >= 0) || (force && habbo.hasPermission("acc_calendar_force")))) {
|
||||||
|
|
||||||
|
if (Emulator.getPluginManager().fireEvent(new UserClaimRewardEvent(habbo, campaign, day, object, force)).isCancelled()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
habbo.getHabboStats().calendarRewardsClaimed.add(new CalendarRewardClaimed(habbo.getHabboInfo().getId(), campaign.getId(), day, object.getId(), new Timestamp(System.currentTimeMillis())));
|
||||||
|
habbo.getClient().sendResponse(new AdventCalendarProductComposer(true, object, habbo));
|
||||||
|
object.give(habbo);
|
||||||
|
try (Connection connection = Emulator.getDatabase().getDataSource().getConnection(); PreparedStatement statement = connection.prepareStatement("INSERT INTO calendar_rewards_claimed (user_id, campaign_id, day, reward_id, timestamp) VALUES (?, ?, ?, ?, ?)")) {
|
||||||
|
statement.setInt(1, habbo.getHabboInfo().getId());
|
||||||
|
statement.setInt(2, campaign.getId());
|
||||||
|
statement.setInt(3, day);
|
||||||
|
statement.setInt(4, object.getId());
|
||||||
|
statement.setTimestamp(5, new Timestamp(System.currentTimeMillis()));
|
||||||
|
statement.execute();
|
||||||
|
} catch (SQLException e) {
|
||||||
|
LOGGER.error("Caught SQL exception", e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,50 @@
|
|||||||
|
package com.eu.habbo.habbohotel.campaign.calendar;
|
||||||
|
|
||||||
|
import java.sql.ResultSet;
|
||||||
|
import java.sql.SQLException;
|
||||||
|
import java.sql.Timestamp;
|
||||||
|
|
||||||
|
public class CalendarRewardClaimed {
|
||||||
|
private final int user_id;
|
||||||
|
private final int campaign;
|
||||||
|
private final int day;
|
||||||
|
private final int reward_id;
|
||||||
|
private final Timestamp timestamp;
|
||||||
|
|
||||||
|
public CalendarRewardClaimed(ResultSet set) throws SQLException {
|
||||||
|
this.user_id = set.getInt("user_id");
|
||||||
|
this.campaign = set.getInt("campaign_id");
|
||||||
|
this.day = set.getInt("day");
|
||||||
|
this.reward_id = set.getInt("reward_id");
|
||||||
|
this.timestamp = set.getTimestamp("timestamp");
|
||||||
|
}
|
||||||
|
|
||||||
|
public CalendarRewardClaimed(int user_id, int campaign, int day, int reward_id, Timestamp timestamp) {
|
||||||
|
this.user_id = user_id;
|
||||||
|
this.campaign = campaign;
|
||||||
|
this.day = day;
|
||||||
|
this.reward_id = reward_id;
|
||||||
|
this.timestamp = timestamp;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getUserId() {
|
||||||
|
return this.user_id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getCampaignId() {
|
||||||
|
return this.campaign;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getDay() {
|
||||||
|
return this.day;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getRewardId() {
|
||||||
|
return this.reward_id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Timestamp getTimestamp() {
|
||||||
|
return this.timestamp;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -1,32 +1,47 @@
|
|||||||
package com.eu.habbo.habbohotel.catalog;
|
package com.eu.habbo.habbohotel.campaign.calendar;
|
||||||
|
|
||||||
import com.eu.habbo.Emulator;
|
import com.eu.habbo.Emulator;
|
||||||
import com.eu.habbo.habbohotel.items.Item;
|
import com.eu.habbo.habbohotel.items.Item;
|
||||||
|
import com.eu.habbo.habbohotel.rooms.RoomChatMessageBubbles;
|
||||||
import com.eu.habbo.habbohotel.users.Habbo;
|
import com.eu.habbo.habbohotel.users.Habbo;
|
||||||
import com.eu.habbo.habbohotel.users.HabboItem;
|
import com.eu.habbo.habbohotel.users.HabboItem;
|
||||||
|
import com.eu.habbo.habbohotel.users.subscriptions.Subscription;
|
||||||
|
import com.eu.habbo.habbohotel.users.subscriptions.SubscriptionHabboClub;
|
||||||
import com.eu.habbo.messages.outgoing.inventory.AddHabboItemComposer;
|
import com.eu.habbo.messages.outgoing.inventory.AddHabboItemComposer;
|
||||||
import com.eu.habbo.messages.outgoing.inventory.InventoryRefreshComposer;
|
import com.eu.habbo.messages.outgoing.inventory.InventoryRefreshComposer;
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
import java.sql.ResultSet;
|
import java.sql.ResultSet;
|
||||||
import java.sql.SQLException;
|
import java.sql.SQLException;
|
||||||
|
|
||||||
public class CalendarRewardObject {
|
public class CalendarRewardObject {
|
||||||
|
private static final Logger LOGGER = LoggerFactory.getLogger(CalendarRewardObject.class);
|
||||||
|
|
||||||
private final int id;
|
private final int id;
|
||||||
|
private final String productName;
|
||||||
private final String customImage;
|
private final String customImage;
|
||||||
private final int credits;
|
private final int credits;
|
||||||
|
private final int pixels;
|
||||||
private final int points;
|
private final int points;
|
||||||
private final int pointsType;
|
private final int pointsType;
|
||||||
private final String badge;
|
private final String badge;
|
||||||
private final int itemId;
|
private final int itemId;
|
||||||
|
private final String subscription_type;
|
||||||
|
private final int subscription_days;
|
||||||
|
|
||||||
public CalendarRewardObject(ResultSet set) throws SQLException {
|
public CalendarRewardObject(ResultSet set) throws SQLException {
|
||||||
this.id = set.getInt("id");
|
this.id = set.getInt("id");
|
||||||
|
this.productName = set.getString("product_name");
|
||||||
this.customImage = set.getString("custom_image");
|
this.customImage = set.getString("custom_image");
|
||||||
this.credits = set.getInt("credits");
|
this.credits = set.getInt("credits");
|
||||||
|
this.pixels = set.getInt("pixels");
|
||||||
this.points = set.getInt("points");
|
this.points = set.getInt("points");
|
||||||
this.pointsType = set.getInt("points_type");
|
this.pointsType = set.getInt("points_type");
|
||||||
this.badge = set.getString("badge");
|
this.badge = set.getString("badge");
|
||||||
this.itemId = set.getInt("item_id");
|
this.itemId = set.getInt("item_id");
|
||||||
|
this.subscription_type = set.getString("subscription_type");
|
||||||
|
this.subscription_days = set.getInt("subscription_days");
|
||||||
}
|
}
|
||||||
|
|
||||||
public void give(Habbo habbo) {
|
public void give(Habbo habbo) {
|
||||||
@ -34,6 +49,10 @@ public class CalendarRewardObject {
|
|||||||
habbo.giveCredits(this.credits);
|
habbo.giveCredits(this.credits);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (this.pixels > 0) {
|
||||||
|
habbo.givePixels((int)(this.pixels * (habbo.getHabboStats().hasActiveClub() ? CalendarManager.HC_MODIFIER : 1.0)));
|
||||||
|
}
|
||||||
|
|
||||||
if (this.points > 0) {
|
if (this.points > 0) {
|
||||||
habbo.givePoints(this.pointsType, this.points);
|
habbo.givePoints(this.pointsType, this.points);
|
||||||
}
|
}
|
||||||
@ -42,6 +61,14 @@ public class CalendarRewardObject {
|
|||||||
habbo.addBadge(this.badge);
|
habbo.addBadge(this.badge);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(this.subscription_type != null && !this.subscription_type.isEmpty()) {
|
||||||
|
if ("HABBO_CLUB".equals(this.subscription_type)) {
|
||||||
|
habbo.getHabboStats().createSubscription(SubscriptionHabboClub.HABBO_CLUB, this.subscription_days * 86400);
|
||||||
|
} else {
|
||||||
|
habbo.getHabboStats().createSubscription(this.subscription_type, this.subscription_days * 86400);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (this.itemId > 0) {
|
if (this.itemId > 0) {
|
||||||
Item item = getItem();
|
Item item = getItem();
|
||||||
|
|
||||||
@ -71,6 +98,9 @@ public class CalendarRewardObject {
|
|||||||
return this.credits;
|
return this.credits;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public int getPixels() {
|
||||||
|
return this.pixels;
|
||||||
|
}
|
||||||
public int getPoints() {
|
public int getPoints() {
|
||||||
return this.points;
|
return this.points;
|
||||||
}
|
}
|
||||||
@ -79,6 +109,18 @@ public class CalendarRewardObject {
|
|||||||
return this.pointsType;
|
return this.pointsType;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public String getProductName() {
|
||||||
|
return productName;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getSubscriptionType() {
|
||||||
|
return subscription_type;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getSubscriptionDays() {
|
||||||
|
return subscription_days;
|
||||||
|
}
|
||||||
|
|
||||||
public String getBadge() {
|
public String getBadge() {
|
||||||
return this.badge;
|
return this.badge;
|
||||||
}
|
}
|
||||||
@ -86,4 +128,5 @@ public class CalendarRewardObject {
|
|||||||
public Item getItem() {
|
public Item getItem() {
|
||||||
return Emulator.getGameEnvironment().getItemManager().getItem(this.itemId);
|
return Emulator.getGameEnvironment().getItemManager().getItem(this.itemId);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
@ -3,6 +3,7 @@ package com.eu.habbo.habbohotel.catalog;
|
|||||||
import com.eu.habbo.Emulator;
|
import com.eu.habbo.Emulator;
|
||||||
import com.eu.habbo.habbohotel.achievements.AchievementManager;
|
import com.eu.habbo.habbohotel.achievements.AchievementManager;
|
||||||
import com.eu.habbo.habbohotel.bots.Bot;
|
import com.eu.habbo.habbohotel.bots.Bot;
|
||||||
|
import com.eu.habbo.habbohotel.campaign.calendar.CalendarRewardObject;
|
||||||
import com.eu.habbo.habbohotel.catalog.layouts.*;
|
import com.eu.habbo.habbohotel.catalog.layouts.*;
|
||||||
import com.eu.habbo.habbohotel.gameclients.GameClient;
|
import com.eu.habbo.habbohotel.gameclients.GameClient;
|
||||||
import com.eu.habbo.habbohotel.guilds.Guild;
|
import com.eu.habbo.habbohotel.guilds.Guild;
|
||||||
@ -190,7 +191,6 @@ public class CatalogManager {
|
|||||||
public final TIntIntHashMap offerDefs;
|
public final TIntIntHashMap offerDefs;
|
||||||
public final Item ecotronItem;
|
public final Item ecotronItem;
|
||||||
public final THashMap<Integer, CatalogLimitedConfiguration> limitedNumbers;
|
public final THashMap<Integer, CatalogLimitedConfiguration> limitedNumbers;
|
||||||
public final THashMap<Integer, CalendarRewardObject> calendarRewards;
|
|
||||||
private final List<Voucher> vouchers;
|
private final List<Voucher> vouchers;
|
||||||
|
|
||||||
public CatalogManager() {
|
public CatalogManager() {
|
||||||
@ -207,7 +207,6 @@ public class CatalogManager {
|
|||||||
this.offerDefs = new TIntIntHashMap();
|
this.offerDefs = new TIntIntHashMap();
|
||||||
this.vouchers = new ArrayList<>();
|
this.vouchers = new ArrayList<>();
|
||||||
this.limitedNumbers = new THashMap<>();
|
this.limitedNumbers = new THashMap<>();
|
||||||
this.calendarRewards = new THashMap<>();
|
|
||||||
|
|
||||||
this.initialize();
|
this.initialize();
|
||||||
|
|
||||||
@ -230,7 +229,6 @@ public class CatalogManager {
|
|||||||
this.loadClothing();
|
this.loadClothing();
|
||||||
this.loadRecycler();
|
this.loadRecycler();
|
||||||
this.loadGiftWrappers();
|
this.loadGiftWrappers();
|
||||||
this.loadCalendarRewards();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private synchronized void loadLimitedNumbers() {
|
private synchronized void loadLimitedNumbers() {
|
||||||
@ -482,23 +480,6 @@ public class CatalogManager {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void loadCalendarRewards() {
|
|
||||||
synchronized (this.calendarRewards) {
|
|
||||||
this.calendarRewards.clear();
|
|
||||||
|
|
||||||
try (Connection connection = Emulator.getDatabase().getDataSource().getConnection(); PreparedStatement statement = connection.prepareStatement("SELECT * FROM calendar_rewards")) {
|
|
||||||
try (ResultSet set = statement.executeQuery()) {
|
|
||||||
while (set.next()) {
|
|
||||||
this.calendarRewards.put(set.getInt("id"), new CalendarRewardObject(set));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} catch (SQLException e) {
|
|
||||||
LOGGER.error("Caught SQL exception", e);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
private void loadClothing() {
|
private void loadClothing() {
|
||||||
synchronized (this.clothing) {
|
synchronized (this.clothing) {
|
||||||
this.clothing.clear();
|
this.clothing.clear();
|
||||||
@ -1167,28 +1148,6 @@ public class CatalogManager {
|
|||||||
return offers;
|
return offers;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void claimCalendarReward(Habbo habbo, int day, boolean force) {
|
|
||||||
if (!habbo.getHabboStats().calendarRewardsClaimed.contains(day)) {
|
|
||||||
CalendarRewardObject object = this.calendarRewards.get((day+1));
|
|
||||||
int actualDay = (int) Math.floor((Emulator.getIntUnixTimestamp() - Emulator.getConfig().getInt("hotel.calendar.starttimestamp")) / 86400);
|
|
||||||
int diff = (actualDay - day);
|
|
||||||
if (((diff <= 2 && diff >= 0) || force) && object != null) {
|
|
||||||
habbo.getHabboStats().calendarRewardsClaimed.add(day);
|
|
||||||
habbo.getClient().sendResponse(new AdventCalendarProductComposer(true, object));
|
|
||||||
object.give(habbo);
|
|
||||||
|
|
||||||
try (Connection connection = Emulator.getDatabase().getDataSource().getConnection(); PreparedStatement statement = connection.prepareStatement("INSERT INTO calendar_rewards_claimed (user_id, reward_id, timestamp) VALUES (?, ?, ?)")) {
|
|
||||||
statement.setInt(1, habbo.getHabboInfo().getId());
|
|
||||||
statement.setInt(2, day);
|
|
||||||
statement.setInt(3, Emulator.getIntUnixTimestamp());
|
|
||||||
statement.execute();
|
|
||||||
} catch (SQLException e) {
|
|
||||||
LOGGER.error("Caught SQL exception", e);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public TargetOffer getTargetOffer(int offerId) {
|
public TargetOffer getTargetOffer(int offerId) {
|
||||||
return this.targetOffers.get(offerId);
|
return this.targetOffers.get(offerId);
|
||||||
}
|
}
|
||||||
|
@ -1,10 +1,17 @@
|
|||||||
package com.eu.habbo.habbohotel.commands;
|
package com.eu.habbo.habbohotel.commands;
|
||||||
|
|
||||||
import com.eu.habbo.Emulator;
|
import com.eu.habbo.Emulator;
|
||||||
|
import com.eu.habbo.habbohotel.campaign.calendar.CalendarCampaign;
|
||||||
import com.eu.habbo.habbohotel.gameclients.GameClient;
|
import com.eu.habbo.habbohotel.gameclients.GameClient;
|
||||||
import com.eu.habbo.messages.outgoing.events.calendar.AdventCalendarDataComposer;
|
import com.eu.habbo.messages.outgoing.events.calendar.AdventCalendarDataComposer;
|
||||||
import com.eu.habbo.messages.outgoing.habboway.nux.NuxAlertComposer;
|
import com.eu.habbo.messages.outgoing.habboway.nux.NuxAlertComposer;
|
||||||
|
|
||||||
|
import java.sql.Timestamp;
|
||||||
|
import java.time.Duration;
|
||||||
|
import java.util.Date;
|
||||||
|
|
||||||
|
import static java.time.temporal.ChronoUnit.DAYS;
|
||||||
|
|
||||||
public class CalendarCommand extends Command {
|
public class CalendarCommand extends Command {
|
||||||
public CalendarCommand() {
|
public CalendarCommand() {
|
||||||
super("cmd_calendar", Emulator.getTexts().getValue("commands.keys.cmd_calendar").split(";"));
|
super("cmd_calendar", Emulator.getTexts().getValue("commands.keys.cmd_calendar").split(";"));
|
||||||
@ -13,8 +20,17 @@ public class CalendarCommand extends Command {
|
|||||||
@Override
|
@Override
|
||||||
public boolean handle(GameClient gameClient, String[] params) throws Exception {
|
public boolean handle(GameClient gameClient, String[] params) throws Exception {
|
||||||
if (Emulator.getConfig().getBoolean("hotel.calendar.enabled")) {
|
if (Emulator.getConfig().getBoolean("hotel.calendar.enabled")) {
|
||||||
gameClient.sendResponse(new AdventCalendarDataComposer("xmas11", Emulator.getGameEnvironment().getCatalogManager().calendarRewards.size(), (int) Math.floor((Emulator.getIntUnixTimestamp() - Emulator.getConfig().getInt("hotel.calendar.starttimestamp")) / 86400), gameClient.getHabbo().getHabboStats().calendarRewardsClaimed, true));
|
String campaignName = Emulator.getConfig().getValue("hotel.calendar.default");
|
||||||
gameClient.sendResponse(new NuxAlertComposer("openView/calendar"));
|
|
||||||
|
if(params.length > 1 && gameClient.getHabbo().hasPermission("cmd_calendar_staff")) {
|
||||||
|
campaignName = params[1];
|
||||||
|
}
|
||||||
|
CalendarCampaign campaign = Emulator.getGameEnvironment().getCalendarManager().getCalendarCampaign(campaignName);
|
||||||
|
if(campaign == null) return false;
|
||||||
|
int daysBetween = (int) DAYS.between(campaign.getStartTimestamp().toInstant(), new Date().toInstant());
|
||||||
|
if(daysBetween >= 0) {
|
||||||
|
gameClient.sendResponse(new AdventCalendarDataComposer(campaign.getName(), campaign.getImage(), campaign.getTotalDays(), daysBetween, gameClient.getHabbo().getHabboStats().calendarRewardsClaimed, campaign.getLockExpired()));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
@ -275,6 +275,7 @@ public class CommandHandler {
|
|||||||
addCommand(new UnmuteCommand());
|
addCommand(new UnmuteCommand());
|
||||||
addCommand(new UpdateAchievements());
|
addCommand(new UpdateAchievements());
|
||||||
addCommand(new UpdateBotsCommand());
|
addCommand(new UpdateBotsCommand());
|
||||||
|
addCommand(new UpdateCalendarCommand());
|
||||||
addCommand(new UpdateCatalogCommand());
|
addCommand(new UpdateCatalogCommand());
|
||||||
addCommand(new UpdateConfigCommand());
|
addCommand(new UpdateConfigCommand());
|
||||||
addCommand(new UpdateGuildPartsCommand());
|
addCommand(new UpdateGuildPartsCommand());
|
||||||
|
@ -0,0 +1,21 @@
|
|||||||
|
package com.eu.habbo.habbohotel.commands;
|
||||||
|
|
||||||
|
import com.eu.habbo.Emulator;
|
||||||
|
import com.eu.habbo.habbohotel.gameclients.GameClient;
|
||||||
|
import com.eu.habbo.habbohotel.rooms.RoomChatMessageBubbles;
|
||||||
|
import com.eu.habbo.messages.outgoing.catalog.*;
|
||||||
|
import com.eu.habbo.messages.outgoing.catalog.marketplace.MarketplaceConfigComposer;
|
||||||
|
|
||||||
|
public class UpdateCalendarCommand extends Command {
|
||||||
|
|
||||||
|
public UpdateCalendarCommand() {
|
||||||
|
super("cmd_update_calendar", Emulator.getTexts().getValue("commands.keys.cmd_update_calendar").split(";"));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean handle(GameClient gameClient, String[] params) {
|
||||||
|
Emulator.getGameEnvironment().getCalendarManager().reload();
|
||||||
|
gameClient.getHabbo().whisper(Emulator.getTexts().getValue("commands.success.cmd_update_calendar"), RoomChatMessageBubbles.ALERT);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
@ -1,6 +1,7 @@
|
|||||||
package com.eu.habbo.habbohotel.users;
|
package com.eu.habbo.habbohotel.users;
|
||||||
|
|
||||||
import com.eu.habbo.Emulator;
|
import com.eu.habbo.Emulator;
|
||||||
|
import com.eu.habbo.habbohotel.campaign.calendar.CalendarRewardClaimed;
|
||||||
import com.eu.habbo.habbohotel.gameclients.GameClient;
|
import com.eu.habbo.habbohotel.gameclients.GameClient;
|
||||||
import com.eu.habbo.habbohotel.achievements.Achievement;
|
import com.eu.habbo.habbohotel.achievements.Achievement;
|
||||||
import com.eu.habbo.habbohotel.achievements.AchievementManager;
|
import com.eu.habbo.habbohotel.achievements.AchievementManager;
|
||||||
@ -33,7 +34,7 @@ public class HabboStats implements Runnable {
|
|||||||
public final TIntArrayList secretRecipes;
|
public final TIntArrayList secretRecipes;
|
||||||
public final HabboNavigatorWindowSettings navigatorWindowSettings;
|
public final HabboNavigatorWindowSettings navigatorWindowSettings;
|
||||||
public final THashMap<String, Object> cache;
|
public final THashMap<String, Object> cache;
|
||||||
public final TIntArrayList calendarRewardsClaimed;
|
public final ArrayList<CalendarRewardClaimed> calendarRewardsClaimed;
|
||||||
public final TIntObjectMap<HabboOfferPurchase> offerCache = new TIntObjectHashMap<>();
|
public final TIntObjectMap<HabboOfferPurchase> offerCache = new TIntObjectHashMap<>();
|
||||||
private final AtomicInteger lastOnlineTime = new AtomicInteger(Emulator.getIntUnixTimestamp());
|
private final AtomicInteger lastOnlineTime = new AtomicInteger(Emulator.getIntUnixTimestamp());
|
||||||
private final THashMap<Achievement, Integer> achievementProgress;
|
private final THashMap<Achievement, Integer> achievementProgress;
|
||||||
@ -109,7 +110,7 @@ public class HabboStats implements Runnable {
|
|||||||
this.ignoredUsers = new TIntArrayList(0);
|
this.ignoredUsers = new TIntArrayList(0);
|
||||||
this.roomsVists = new TIntArrayList(0);
|
this.roomsVists = new TIntArrayList(0);
|
||||||
this.secretRecipes = new TIntArrayList(0);
|
this.secretRecipes = new TIntArrayList(0);
|
||||||
this.calendarRewardsClaimed = new TIntArrayList(0);
|
this.calendarRewardsClaimed = new ArrayList<>();
|
||||||
|
|
||||||
this.habboInfo = habboInfo;
|
this.habboInfo = habboInfo;
|
||||||
|
|
||||||
@ -206,7 +207,7 @@ public class HabboStats implements Runnable {
|
|||||||
calendarRewardsStatement.setInt(1, this.habboInfo.getId());
|
calendarRewardsStatement.setInt(1, this.habboInfo.getId());
|
||||||
try (ResultSet rewardSet = calendarRewardsStatement.executeQuery()) {
|
try (ResultSet rewardSet = calendarRewardsStatement.executeQuery()) {
|
||||||
while (rewardSet.next()) {
|
while (rewardSet.next()) {
|
||||||
this.calendarRewardsClaimed.add(rewardSet.getInt("reward_id"));
|
this.calendarRewardsClaimed.add(new CalendarRewardClaimed(rewardSet));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -6,9 +6,9 @@ import com.eu.habbo.messages.incoming.MessageHandler;
|
|||||||
public class AdventCalendarForceOpenEvent extends MessageHandler {
|
public class AdventCalendarForceOpenEvent extends MessageHandler {
|
||||||
@Override
|
@Override
|
||||||
public void handle() throws Exception {
|
public void handle() throws Exception {
|
||||||
String campaign = this.packet.readString();
|
String campaignName = this.packet.readString();
|
||||||
int day = this.packet.readInt();
|
int day = this.packet.readInt();
|
||||||
|
|
||||||
Emulator.getGameEnvironment().getCatalogManager().claimCalendarReward(this.client.getHabbo(), day, true);
|
Emulator.getGameEnvironment().getCalendarManager().claimCalendarReward(this.client.getHabbo(), campaignName, day, true);
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -6,9 +6,9 @@ import com.eu.habbo.messages.incoming.MessageHandler;
|
|||||||
public class AdventCalendarOpenDayEvent extends MessageHandler {
|
public class AdventCalendarOpenDayEvent extends MessageHandler {
|
||||||
@Override
|
@Override
|
||||||
public void handle() throws Exception {
|
public void handle() throws Exception {
|
||||||
String campaign = this.packet.readString();
|
String campaignName = this.packet.readString();
|
||||||
int day = this.packet.readInt();
|
int day = this.packet.readInt();
|
||||||
|
|
||||||
Emulator.getGameEnvironment().getCatalogManager().claimCalendarReward(this.client.getHabbo(), day, false);
|
Emulator.getGameEnvironment().getCalendarManager().claimCalendarReward(this.client.getHabbo(), campaignName, day, false);
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -2,6 +2,7 @@ package com.eu.habbo.messages.incoming.handshake;
|
|||||||
|
|
||||||
import com.eu.habbo.Emulator;
|
import com.eu.habbo.Emulator;
|
||||||
import com.eu.habbo.habbohotel.achievements.AchievementManager;
|
import com.eu.habbo.habbohotel.achievements.AchievementManager;
|
||||||
|
import com.eu.habbo.habbohotel.campaign.calendar.CalendarCampaign;
|
||||||
import com.eu.habbo.habbohotel.catalog.TargetOffer;
|
import com.eu.habbo.habbohotel.catalog.TargetOffer;
|
||||||
import com.eu.habbo.messages.incoming.MessageHandler;
|
import com.eu.habbo.messages.incoming.MessageHandler;
|
||||||
import com.eu.habbo.messages.outgoing.catalog.TargetedOfferComposer;
|
import com.eu.habbo.messages.outgoing.catalog.TargetedOfferComposer;
|
||||||
@ -11,9 +12,14 @@ import com.eu.habbo.messages.outgoing.habboway.nux.NuxAlertComposer;
|
|||||||
import java.sql.Connection;
|
import java.sql.Connection;
|
||||||
import java.sql.PreparedStatement;
|
import java.sql.PreparedStatement;
|
||||||
import java.sql.ResultSet;
|
import java.sql.ResultSet;
|
||||||
|
import java.sql.Timestamp;
|
||||||
|
import java.time.Duration;
|
||||||
import java.time.temporal.ChronoUnit;
|
import java.time.temporal.ChronoUnit;
|
||||||
import java.util.Calendar;
|
import java.util.Calendar;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
|
import java.util.concurrent.TimeUnit;
|
||||||
|
|
||||||
|
import static java.time.temporal.ChronoUnit.DAYS;
|
||||||
|
|
||||||
public class UsernameEvent extends MessageHandler {
|
public class UsernameEvent extends MessageHandler {
|
||||||
@Override
|
@Override
|
||||||
@ -24,7 +30,7 @@ public class UsernameEvent extends MessageHandler {
|
|||||||
calendar = true;
|
calendar = true;
|
||||||
} else {
|
} else {
|
||||||
|
|
||||||
long daysBetween = ChronoUnit.DAYS.between(new Date((long) this.client.getHabbo().getHabboInfo().getLastOnline() * 1000L).toInstant(), new Date().toInstant());
|
long daysBetween = DAYS.between(new Date((long) this.client.getHabbo().getHabboInfo().getLastOnline() * 1000L).toInstant(), new Date().toInstant());
|
||||||
|
|
||||||
|
|
||||||
Date lastLogin = new Date(this.client.getHabbo().getHabboInfo().getLastOnline());
|
Date lastLogin = new Date(this.client.getHabbo().getHabboInfo().getLastOnline());
|
||||||
@ -84,8 +90,14 @@ public class UsernameEvent extends MessageHandler {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (Emulator.getConfig().getBoolean("hotel.calendar.enabled")) {
|
if (Emulator.getConfig().getBoolean("hotel.calendar.enabled")) {
|
||||||
this.client.sendResponse(new AdventCalendarDataComposer("xmas15", Emulator.getGameEnvironment().getCatalogManager().calendarRewards.size(), (int) Math.floor((Emulator.getIntUnixTimestamp() - Emulator.getConfig().getInt("hotel.calendar.starttimestamp")) / 86400), this.client.getHabbo().getHabboStats().calendarRewardsClaimed, true));
|
CalendarCampaign campaign = Emulator.getGameEnvironment().getCalendarManager().getCalendarCampaign(Emulator.getConfig().getValue("hotel.calendar.default"));
|
||||||
this.client.sendResponse(new NuxAlertComposer("openView/calendar"));
|
if(campaign != null){
|
||||||
|
long daysBetween = DAYS.between(campaign.getStartTimestamp().toInstant(), new Date().toInstant());
|
||||||
|
if(daysBetween >= 0) {
|
||||||
|
this.client.sendResponse(new AdventCalendarDataComposer(campaign.getName(), campaign.getImage(), campaign.getTotalDays(), (int) daysBetween, this.client.getHabbo().getHabboStats().calendarRewardsClaimed, campaign.getLockExpired()));
|
||||||
|
this.client.sendResponse(new NuxAlertComposer("openView/calendar"));
|
||||||
|
}
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
if (TargetOffer.ACTIVE_TARGET_OFFER_ID > 0) {
|
if (TargetOffer.ACTIVE_TARGET_OFFER_ID > 0) {
|
||||||
|
@ -1,20 +1,24 @@
|
|||||||
package com.eu.habbo.messages.outgoing.events.calendar;
|
package com.eu.habbo.messages.outgoing.events.calendar;
|
||||||
|
|
||||||
|
import com.eu.habbo.habbohotel.campaign.calendar.CalendarRewardClaimed;
|
||||||
import com.eu.habbo.messages.ServerMessage;
|
import com.eu.habbo.messages.ServerMessage;
|
||||||
import com.eu.habbo.messages.outgoing.MessageComposer;
|
import com.eu.habbo.messages.outgoing.MessageComposer;
|
||||||
import com.eu.habbo.messages.outgoing.Outgoing;
|
import com.eu.habbo.messages.outgoing.Outgoing;
|
||||||
import gnu.trove.list.array.TIntArrayList;
|
import gnu.trove.list.array.TIntArrayList;
|
||||||
import gnu.trove.procedure.TIntProcedure;
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
|
||||||
public class AdventCalendarDataComposer extends MessageComposer {
|
public class AdventCalendarDataComposer extends MessageComposer {
|
||||||
private final String eventName;
|
private final String eventName;
|
||||||
|
private final String campaignImage;
|
||||||
private final int totalDays;
|
private final int totalDays;
|
||||||
private final int currentDay;
|
private final int currentDay;
|
||||||
private final TIntArrayList unlocked;
|
private final ArrayList<CalendarRewardClaimed> unlocked;
|
||||||
private final boolean lockExpired;
|
private final boolean lockExpired;
|
||||||
|
|
||||||
public AdventCalendarDataComposer(String eventName, int totalDays, int currentDay, TIntArrayList unlocked, boolean lockExpired) {
|
public AdventCalendarDataComposer(String eventName, String campaignImage, int totalDays, int currentDay, ArrayList<CalendarRewardClaimed> unlocked, boolean lockExpired) {
|
||||||
this.eventName = eventName;
|
this.eventName = eventName;
|
||||||
|
this.campaignImage = campaignImage;
|
||||||
this.totalDays = totalDays;
|
this.totalDays = totalDays;
|
||||||
this.currentDay = currentDay;
|
this.currentDay = currentDay;
|
||||||
this.unlocked = unlocked;
|
this.unlocked = unlocked;
|
||||||
@ -25,23 +29,23 @@ public class AdventCalendarDataComposer extends MessageComposer {
|
|||||||
protected ServerMessage composeInternal() {
|
protected ServerMessage composeInternal() {
|
||||||
this.response.init(Outgoing.AdventCalendarDataComposer);
|
this.response.init(Outgoing.AdventCalendarDataComposer);
|
||||||
this.response.appendString(this.eventName);
|
this.response.appendString(this.eventName);
|
||||||
this.response.appendString("");
|
this.response.appendString(this.campaignImage);
|
||||||
this.response.appendInt(this.currentDay);
|
this.response.appendInt(this.currentDay);
|
||||||
this.response.appendInt(this.totalDays);
|
this.response.appendInt(this.totalDays);
|
||||||
this.response.appendInt(this.unlocked.size());
|
this.response.appendInt(this.unlocked.size());
|
||||||
|
|
||||||
TIntArrayList expired = new TIntArrayList();
|
TIntArrayList expired = new TIntArrayList();
|
||||||
for (int i = 0; i < this.totalDays; i++) {
|
if (this.lockExpired) { for (int i = 0; i < this.totalDays; i++) {
|
||||||
expired.add(i);
|
expired.add(i);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
expired.remove(this.currentDay);
|
expired.remove(this.currentDay);
|
||||||
if(this.currentDay > 1) expired.remove(this.currentDay - 2);
|
if(this.currentDay > 1) expired.remove(this.currentDay - 2);
|
||||||
if(this.currentDay > 0) expired.remove(this.currentDay - 1);
|
if(this.currentDay > 0) expired.remove(this.currentDay - 1);
|
||||||
|
|
||||||
this.unlocked.forEach(value -> {
|
this.unlocked.forEach(claimed -> {
|
||||||
AdventCalendarDataComposer.this.response.appendInt(value);
|
AdventCalendarDataComposer.this.response.appendInt(claimed.getDay());
|
||||||
expired.remove(value);
|
expired.remove(claimed.getDay());
|
||||||
return true;
|
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
|
@ -1,7 +1,9 @@
|
|||||||
package com.eu.habbo.messages.outgoing.events.calendar;
|
package com.eu.habbo.messages.outgoing.events.calendar;
|
||||||
|
|
||||||
import com.eu.habbo.habbohotel.catalog.CalendarRewardObject;
|
import com.eu.habbo.Emulator;
|
||||||
import com.eu.habbo.habbohotel.items.Item;
|
import com.eu.habbo.habbohotel.campaign.calendar.CalendarManager;
|
||||||
|
import com.eu.habbo.habbohotel.campaign.calendar.CalendarRewardObject;
|
||||||
|
import com.eu.habbo.habbohotel.users.Habbo;
|
||||||
import com.eu.habbo.messages.ServerMessage;
|
import com.eu.habbo.messages.ServerMessage;
|
||||||
import com.eu.habbo.messages.outgoing.MessageComposer;
|
import com.eu.habbo.messages.outgoing.MessageComposer;
|
||||||
import com.eu.habbo.messages.outgoing.Outgoing;
|
import com.eu.habbo.messages.outgoing.Outgoing;
|
||||||
@ -9,19 +11,39 @@ import com.eu.habbo.messages.outgoing.Outgoing;
|
|||||||
public class AdventCalendarProductComposer extends MessageComposer {
|
public class AdventCalendarProductComposer extends MessageComposer {
|
||||||
public final boolean visible;
|
public final boolean visible;
|
||||||
public final CalendarRewardObject rewardObject;
|
public final CalendarRewardObject rewardObject;
|
||||||
|
public final Habbo habbo;
|
||||||
|
|
||||||
public AdventCalendarProductComposer(boolean visible, CalendarRewardObject rewardObject) {
|
public AdventCalendarProductComposer(boolean visible, CalendarRewardObject rewardObject, Habbo habbo) {
|
||||||
this.visible = visible;
|
this.visible = visible;
|
||||||
this.rewardObject = rewardObject;
|
this.rewardObject = rewardObject;
|
||||||
|
this.habbo = habbo;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected ServerMessage composeInternal() {
|
protected ServerMessage composeInternal() {
|
||||||
this.response.init(Outgoing.AdventCalendarProductComposer);
|
this.response.init(Outgoing.AdventCalendarProductComposer);
|
||||||
this.response.appendBoolean(this.visible);
|
this.response.appendBoolean(this.visible);
|
||||||
this.response.appendString(this.rewardObject.getItem().getName());
|
|
||||||
|
String className = "";
|
||||||
|
String productName = this.rewardObject.getProductName()
|
||||||
|
.replace("%credits%", String.valueOf(this.rewardObject.getCredits()))
|
||||||
|
.replace("%pixels%", String.valueOf((int) (this.rewardObject.getPixels() * (habbo.getHabboStats().hasActiveClub() ? CalendarManager.HC_MODIFIER : 1.0))))
|
||||||
|
.replace("%points%", String.valueOf(this.rewardObject.getPoints()))
|
||||||
|
.replace("%points_type%", String.valueOf(this.rewardObject.getPointsType()))
|
||||||
|
.replace("%badge%", this.rewardObject.getBadge());
|
||||||
|
if(this.rewardObject.getSubscriptionType() != null){
|
||||||
|
productName = productName.replace("%subscription_type%", this.rewardObject.getSubscriptionType()).replace("%subscription_days%", String.valueOf(this.rewardObject.getSubscriptionDays()));
|
||||||
|
}
|
||||||
|
|
||||||
|
if(this.rewardObject.getItem() != null){
|
||||||
|
productName = productName.replace("%item%", this.rewardObject.getItem().getName());
|
||||||
|
className = this.rewardObject.getItem().getName();
|
||||||
|
}
|
||||||
|
|
||||||
|
this.response.appendString(productName);
|
||||||
this.response.appendString(this.rewardObject.getCustomImage());
|
this.response.appendString(this.rewardObject.getCustomImage());
|
||||||
this.response.appendString(this.rewardObject.getItem().getName());
|
this.response.appendString(className);
|
||||||
|
|
||||||
return this.response;
|
return this.response;
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -0,0 +1,23 @@
|
|||||||
|
package com.eu.habbo.plugin.events.users.calendar;
|
||||||
|
|
||||||
|
import com.eu.habbo.habbohotel.campaign.calendar.CalendarCampaign;
|
||||||
|
import com.eu.habbo.habbohotel.campaign.calendar.CalendarRewardObject;
|
||||||
|
import com.eu.habbo.habbohotel.users.Habbo;
|
||||||
|
import com.eu.habbo.plugin.events.users.UserEvent;
|
||||||
|
|
||||||
|
public class UserClaimRewardEvent extends UserEvent {
|
||||||
|
|
||||||
|
public CalendarCampaign campaign;
|
||||||
|
public int day;
|
||||||
|
public CalendarRewardObject reward;
|
||||||
|
public boolean force;
|
||||||
|
|
||||||
|
public UserClaimRewardEvent(Habbo habbo, CalendarCampaign campaign, int day, CalendarRewardObject reward, boolean force) {
|
||||||
|
super(habbo);
|
||||||
|
|
||||||
|
this.campaign = campaign;
|
||||||
|
this.day = day;
|
||||||
|
this.reward = reward;
|
||||||
|
this.force = force;
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user