Arcturus-Community/src/main/java/com/eu/habbo/messages/incoming/catalog/CatalogBuyItemEvent.java

230 lines
11 KiB
Java
Raw Normal View History

2018-07-06 15:30:00 +02:00
package com.eu.habbo.messages.incoming.catalog;
import com.eu.habbo.Emulator;
import com.eu.habbo.habbohotel.catalog.CatalogItem;
2018-10-07 00:28:00 +02:00
import com.eu.habbo.habbohotel.catalog.CatalogManager;
2018-07-06 15:30:00 +02:00
import com.eu.habbo.habbohotel.catalog.CatalogPage;
import com.eu.habbo.habbohotel.catalog.ClubOffer;
import com.eu.habbo.habbohotel.catalog.layouts.ClubBuyLayout;
import com.eu.habbo.habbohotel.catalog.layouts.RecentPurchasesLayout;
import com.eu.habbo.habbohotel.catalog.layouts.RoomBundleLayout;
import com.eu.habbo.habbohotel.catalog.layouts.VipBuyLayout;
import com.eu.habbo.habbohotel.items.FurnitureType;
import com.eu.habbo.habbohotel.users.HabboBadge;
import com.eu.habbo.habbohotel.users.HabboInventory;
import com.eu.habbo.messages.incoming.MessageHandler;
2018-09-28 21:25:00 +02:00
import com.eu.habbo.messages.outgoing.catalog.AlertPurchaseFailedComposer;
import com.eu.habbo.messages.outgoing.catalog.AlertPurchaseUnavailableComposer;
import com.eu.habbo.messages.outgoing.catalog.PurchaseOKComposer;
2018-07-06 15:30:00 +02:00
import com.eu.habbo.messages.outgoing.generic.alerts.BubbleAlertComposer;
import com.eu.habbo.messages.outgoing.generic.alerts.BubbleAlertKeys;
import com.eu.habbo.messages.outgoing.generic.alerts.GenericAlertComposer;
import com.eu.habbo.messages.outgoing.generic.alerts.HotelWillCloseInMinutesComposer;
import com.eu.habbo.messages.outgoing.inventory.InventoryRefreshComposer;
import com.eu.habbo.messages.outgoing.users.*;
import com.eu.habbo.threading.runnables.ShutdownEmulator;
import gnu.trove.map.hash.THashMap;
import gnu.trove.procedure.TObjectProcedure;
public class CatalogBuyItemEvent extends MessageHandler
{
@Override
public void handle() throws Exception
{
2018-10-07 00:28:00 +02:00
if (Emulator.getIntUnixTimestamp() - this.client.getHabbo().getHabboStats().lastPurchaseTimestamp >= CatalogManager.PURCHASE_COOLDOWN)
2018-07-06 15:30:00 +02:00
{
2018-10-07 00:28:00 +02:00
this.client.getHabbo().getHabboStats().lastPurchaseTimestamp = Emulator.getIntUnixTimestamp();
if (ShutdownEmulator.timestamp > 0)
2018-07-06 15:30:00 +02:00
{
2018-10-07 00:28:00 +02:00
this.client.sendResponse(new HotelWillCloseInMinutesComposer((ShutdownEmulator.timestamp - Emulator.getIntUnixTimestamp()) / 60));
2018-07-06 15:30:00 +02:00
return;
}
2018-10-07 00:28:00 +02:00
int pageId = this.packet.readInt();
int itemId = this.packet.readInt();
String extraData = this.packet.readString();
int count = this.packet.readInt();
2018-07-06 15:30:00 +02:00
2018-10-07 00:28:00 +02:00
try
2018-07-06 15:30:00 +02:00
{
2018-10-07 00:28:00 +02:00
if (this.client.getHabbo().getInventory().getItemsComponent().itemCount() > HabboInventory.MAXIMUM_ITEMS)
2018-07-06 15:30:00 +02:00
{
2018-10-07 00:28:00 +02:00
this.client.sendResponse(new AlertPurchaseFailedComposer(AlertPurchaseFailedComposer.SERVER_ERROR).compose());
2019-03-18 02:22:00 +01:00
this.client.getHabbo().alert(Emulator.getTexts().getValue("inventory.full"));
2018-10-07 00:28:00 +02:00
return;
2018-07-06 15:30:00 +02:00
}
2018-10-07 00:28:00 +02:00
} catch (Exception e)
{
this.client.sendResponse(new AlertPurchaseFailedComposer(AlertPurchaseFailedComposer.SERVER_ERROR).compose());
2018-07-06 15:30:00 +02:00
}
2018-09-28 21:25:00 +02:00
2018-10-07 00:28:00 +02:00
CatalogPage page = null;
2018-09-28 21:25:00 +02:00
2018-10-07 00:28:00 +02:00
if (pageId == -12345678 || pageId == -1)
2018-07-06 15:30:00 +02:00
{
2018-10-07 00:28:00 +02:00
CatalogItem searchedItem = Emulator.getGameEnvironment().getCatalogManager().getCatalogItem(itemId);
if (searchedItem.getOfferId() > 0)
2018-07-06 15:30:00 +02:00
{
2018-10-07 00:28:00 +02:00
page = Emulator.getGameEnvironment().getCatalogManager().getCatalogPage(searchedItem.getPageId());
if (page.getCatalogItem(itemId).getOfferId() <= 0)
{
page = null;
} else
2018-07-06 15:30:00 +02:00
{
2018-10-07 00:28:00 +02:00
if (page.getRank() > this.client.getHabbo().getHabboInfo().getRank().getId())
{
page = null;
}
2018-07-06 15:30:00 +02:00
}
}
2018-10-07 00:28:00 +02:00
} else
{
page = Emulator.getGameEnvironment().getCatalogManager().catalogPages.get(pageId);
2018-07-06 15:30:00 +02:00
2018-10-07 00:28:00 +02:00
if (page instanceof RoomBundleLayout)
2018-07-06 15:30:00 +02:00
{
2018-10-07 00:28:00 +02:00
final CatalogItem[] item = new CatalogItem[1];
page.getCatalogItems().forEachValue(new TObjectProcedure<CatalogItem>()
{
@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;
}
2018-07-06 15:30:00 +02:00
2018-10-07 00:28:00 +02:00
((RoomBundleLayout) page).buyRoom(this.client.getHabbo());
2018-07-06 15:30:00 +02:00
2018-10-07 00:28:00 +02:00
if (!this.client.getHabbo().hasPermission("acc_infinite_credits"))
{
this.client.getHabbo().getHabboInfo().addCredits(-item[0].getCredits());
}
2018-07-06 15:30:00 +02:00
2018-10-07 00:28:00 +02:00
if (!this.client.getHabbo().hasPermission("acc_inifinte_points"))
2018-07-06 15:30:00 +02:00
{
2018-10-07 00:28:00 +02:00
this.client.getHabbo().getHabboInfo().addCurrencyAmount(item[0].getPointsType(), -item[0].getPoints());
2018-07-06 15:30:00 +02:00
}
2018-10-07 00:28:00 +02:00
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<String, String> 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])
2018-07-06 15:30:00 +02:00
{
2018-10-07 00:28:00 +02:00
this.client.getHabbo().getClient().sendResponse(new AlertPurchaseFailedComposer(AlertPurchaseFailedComposer.ALREADY_HAVE_BADGE));
2018-07-06 15:30:00 +02:00
}
2018-10-07 00:28:00 +02:00
return;
2018-07-06 15:30:00 +02:00
}
}
2018-10-07 00:28:00 +02:00
if (page == null)
2018-07-06 15:30:00 +02:00
{
this.client.sendResponse(new AlertPurchaseFailedComposer(AlertPurchaseFailedComposer.SERVER_ERROR).compose());
return;
}
2018-10-07 00:28:00 +02:00
if (page.getRank() > this.client.getHabbo().getHabboInfo().getRank().getId())
2018-07-06 15:30:00 +02:00
{
2018-10-07 00:28:00 +02:00
this.client.sendResponse(new AlertPurchaseUnavailableComposer(AlertPurchaseUnavailableComposer.ILLEGAL));
return;
2018-07-06 15:30:00 +02:00
}
2018-10-07 00:28:00 +02:00
if (page instanceof ClubBuyLayout || page instanceof VipBuyLayout)
2018-07-06 15:30:00 +02:00
{
2018-10-07 00:28:00 +02:00
ClubOffer item = Emulator.getGameEnvironment().getCatalogManager().clubOffers.get(itemId);
2018-07-06 15:30:00 +02:00
2018-10-07 00:28:00 +02:00
if (item == null)
{
this.client.sendResponse(new AlertPurchaseFailedComposer(AlertPurchaseFailedComposer.SERVER_ERROR).compose());
2018-07-06 15:30:00 +02:00
return;
2018-10-07 00:28:00 +02:00
}
int totalDays = 0;
int totalCredits = 0;
int totalDuckets = 0;
for (int i = 0; i < count; i++)
{
totalDays += item.getDays();
totalCredits += item.getCredits();
totalDuckets += item.getPoints();
}
2018-07-06 15:30:00 +02:00
2018-10-07 00:28:00 +02:00
if (totalDays > 0)
{
if (this.client.getHabbo().getHabboInfo().getCurrencyAmount(item.getPointsType()) < totalDuckets)
return;
2018-07-06 15:30:00 +02:00
2018-10-07 00:28:00 +02:00
if (this.client.getHabbo().getHabboInfo().getCredits() < totalCredits)
return;
2018-07-06 15:30:00 +02:00
2018-10-07 00:28:00 +02:00
if (!this.client.getHabbo().hasPermission("acc_infinite_credits"))
this.client.getHabbo().getHabboInfo().addCredits(-totalCredits);
2018-07-06 15:30:00 +02:00
2018-10-07 00:28:00 +02:00
if (!this.client.getHabbo().hasPermission("acc_infinite_points"))
this.client.getHabbo().getHabboInfo().addCurrencyAmount(item.getPointsType(), -totalDuckets);
2018-07-06 15:30:00 +02:00
2018-10-07 00:28:00 +02:00
if (this.client.getHabbo().getHabboStats().getClubExpireTimestamp() <= Emulator.getIntUnixTimestamp())
this.client.getHabbo().getHabboStats().setClubExpireTimestamp(Emulator.getIntUnixTimestamp());
2018-07-06 15:30:00 +02:00
2018-10-07 00:28:00 +02:00
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()));
2018-07-06 15:30:00 +02:00
2018-10-07 00:28:00 +02:00
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());
2019-03-18 02:22:00 +01:00
this.client.getHabbo().getHabboStats().run();
2018-10-07 00:28:00 +02:00
}
return;
2018-07-06 15:30:00 +02:00
}
2018-10-07 00:28:00 +02:00
CatalogItem item;
2018-07-06 15:30:00 +02:00
2018-10-07 00:28:00 +02:00
if (page instanceof RecentPurchasesLayout)
item = this.client.getHabbo().getHabboStats().getRecentPurchases().get(itemId);
else
item = page.getCatalogItem(itemId);
2018-07-06 15:30:00 +02:00
2018-10-07 00:28:00 +02:00
Emulator.getGameEnvironment().getCatalogManager().purchaseItem(page, item, this.client.getHabbo(), count, extraData, false);
2018-07-06 15:30:00 +02:00
2018-10-07 00:28:00 +02:00
}
else
{
this.client.sendResponse(new AlertPurchaseFailedComposer(AlertPurchaseFailedComposer.SERVER_ERROR).compose());
}
2018-07-06 15:30:00 +02:00
}
}