Fix count not being updated after last Cash shop surprise
This commit is contained in:
@@ -24,26 +24,33 @@ import client.inventory.Item;
|
|||||||
import net.AbstractPacketHandler;
|
import net.AbstractPacketHandler;
|
||||||
import net.packet.InPacket;
|
import net.packet.InPacket;
|
||||||
import server.CashShop;
|
import server.CashShop;
|
||||||
|
import server.CashShop.CashShopSurpriseResult;
|
||||||
import tools.PacketCreator;
|
import tools.PacketCreator;
|
||||||
import tools.Pair;
|
|
||||||
|
import java.util.Optional;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author RonanLana
|
* @author RonanLana
|
||||||
|
* @author Ponk
|
||||||
*/
|
*/
|
||||||
public class CashShopSurpriseHandler extends AbstractPacketHandler {
|
public class CashShopSurpriseHandler extends AbstractPacketHandler {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public final void handlePacket(InPacket p, Client c) {
|
public final void handlePacket(InPacket p, Client c) {
|
||||||
CashShop cs = c.getPlayer().getCashShop();
|
CashShop cs = c.getPlayer().getCashShop();
|
||||||
|
if (!cs.isOpened()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (cs.isOpened()) {
|
Optional<CashShopSurpriseResult> result = cs.openCashShopSurprise();
|
||||||
Pair<Item, Item> cssResult = cs.openCashShopSurprise();
|
if (result.isEmpty()) {
|
||||||
|
|
||||||
if (cssResult != null) {
|
|
||||||
Item cssItem = cssResult.getLeft(), cssBox = cssResult.getRight();
|
|
||||||
c.sendPacket(PacketCreator.onCashGachaponOpenSuccess(c.getAccID(), cssBox.getCashId(), cssBox.getQuantity(), cssItem, cssItem.getItemId(), cssItem.getQuantity(), true));
|
|
||||||
} else {
|
|
||||||
c.sendPacket(PacketCreator.onCashItemGachaponOpenFailed());
|
c.sendPacket(PacketCreator.onCashItemGachaponOpenFailed());
|
||||||
}
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Item usedCashShopSurprise = result.get().usedCashShopSurprise();
|
||||||
|
Item reward = result.get().reward();
|
||||||
|
c.sendPacket(PacketCreator.onCashGachaponOpenSuccess(c.getAccID(), usedCashShopSurprise.getCashId(),
|
||||||
|
usedCashShopSurprise.getQuantity(), reward, reward.getItemId(), reward.getQuantity(), true));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -47,6 +47,7 @@ import java.util.Collections;
|
|||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
import java.util.Optional;
|
||||||
import java.util.concurrent.locks.Lock;
|
import java.util.concurrent.locks.Lock;
|
||||||
import java.util.concurrent.locks.ReentrantLock;
|
import java.util.concurrent.locks.ReentrantLock;
|
||||||
|
|
||||||
@@ -55,6 +56,7 @@ import static java.util.concurrent.TimeUnit.HOURS;
|
|||||||
|
|
||||||
/*
|
/*
|
||||||
* @author Flav
|
* @author Flav
|
||||||
|
* @author Ponk
|
||||||
*/
|
*/
|
||||||
public class CashShop {
|
public class CashShop {
|
||||||
public static final int NX_CREDIT = 1;
|
public static final int NX_CREDIT = 1;
|
||||||
@@ -177,7 +179,8 @@ public class CashShop {
|
|||||||
if (ItemConstants.EXPIRING_ITEMS) {
|
if (ItemConstants.EXPIRING_ITEMS) {
|
||||||
if (period == 1) {
|
if (period == 1) {
|
||||||
switch (itemId) {
|
switch (itemId) {
|
||||||
case ItemId.DROP_COUPON_2X_4H, ItemId.EXP_COUPON_2X_4H: // 4 Hour 2X coupons, the period is 1, but we don't want them to last a day.
|
case ItemId.DROP_COUPON_2X_4H,
|
||||||
|
ItemId.EXP_COUPON_2X_4H: // 4 Hour 2X coupons, the period is 1, but we don't want them to last a day.
|
||||||
item.setExpiration(Server.getInstance().getCurrentTime() + HOURS.toMillis(4));
|
item.setExpiration(Server.getInstance().getCurrentTime() + HOURS.toMillis(4));
|
||||||
/*
|
/*
|
||||||
} else if(itemId == 5211047 || itemId == 5360014) { // 3 Hour 2X coupons, unused as of now
|
} else if(itemId == 5211047 || itemId == 5360014) { // 3 Hour 2X coupons, unused as of now
|
||||||
@@ -323,6 +326,9 @@ public class CashShop {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public record CashShopSurpriseResult(Item usedCashShopSurprise, Item reward) {
|
||||||
|
}
|
||||||
|
|
||||||
public int getCash(int type) {
|
public int getCash(int type) {
|
||||||
return switch (type) {
|
return switch (type) {
|
||||||
case NX_CREDIT -> nxCredit;
|
case NX_CREDIT -> nxCredit;
|
||||||
@@ -546,33 +552,31 @@ public class CashShop {
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
public synchronized Pair<Item, Item> openCashShopSurprise() {
|
public synchronized Optional<CashShopSurpriseResult> openCashShopSurprise() {
|
||||||
Item css = getCashShopItemByItemid(ItemId.CASH_SHOP_SURPRISE);
|
Item cashShopSurprise = getCashShopItemByItemid(ItemId.CASH_SHOP_SURPRISE);
|
||||||
|
if (cashShopSurprise == null || cashShopSurprise.getQuantity() <= 0) {
|
||||||
|
return Optional.empty();
|
||||||
|
}
|
||||||
|
|
||||||
if (css != null) {
|
|
||||||
if (getItemsSize() >= 100) {
|
if (getItemsSize() >= 100) {
|
||||||
return null;
|
return Optional.empty();
|
||||||
}
|
}
|
||||||
|
|
||||||
CashItem cItem = CashItemFactory.getRandomCashItem();
|
CashItem cashItemReward = CashItemFactory.getRandomCashItem();
|
||||||
|
if (cashItemReward == null) {
|
||||||
if (cItem != null) {
|
return Optional.empty();
|
||||||
if (css.getQuantity() > 1) {
|
|
||||||
css.setQuantity((short) (css.getQuantity() - 1));
|
|
||||||
} else {
|
|
||||||
removeFromInventory(css);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Item item = cItem.toItem();
|
short newQuantity = (short) (cashShopSurprise.getQuantity() - 1);
|
||||||
addToInventory(item);
|
cashShopSurprise.setQuantity(newQuantity);
|
||||||
|
if (newQuantity <= 0) {
|
||||||
|
removeFromInventory(cashShopSurprise);
|
||||||
|
}
|
||||||
|
|
||||||
return new Pair<>(item, css);
|
Item itemReward = cashItemReward.toItem();
|
||||||
} else {
|
addToInventory(itemReward);
|
||||||
return null;
|
|
||||||
}
|
return Optional.of(new CashShopSurpriseResult(cashShopSurprise, itemReward));
|
||||||
} else {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Item generateCouponItem(int itemId, short quantity) {
|
public static Item generateCouponItem(int itemId, short quantity) {
|
||||||
|
|||||||
Reference in New Issue
Block a user