Skip to content

Commit

Permalink
Merge pull request #244 from P0nk/fix/cash-shop-surprise-package #patch
Browse files Browse the repository at this point in the history
Fix able to get package from Cash shop surprise
  • Loading branch information
P0nk authored Jun 16, 2024
2 parents de2a86c + 1791365 commit d916502
Show file tree
Hide file tree
Showing 3 changed files with 39 additions and 29 deletions.
4 changes: 4 additions & 0 deletions src/main/java/constants/id/ItemId.java
Original file line number Diff line number Diff line change
Expand Up @@ -312,6 +312,10 @@ public static boolean isNxCard(int itemId) {
return itemId == NX_CARD_100 || itemId == NX_CARD_250;
}

public static boolean isCashPackage(int itemId) {
return itemId / 10000 == 910;
}

// Face expression
private static final int FACE_EXPRESSION_MIN = 5160000;
private static final int FACE_EXPRESSION_MAX = 5160014;
Expand Down
45 changes: 16 additions & 29 deletions src/main/java/server/CashShop.java
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,7 @@
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.Random;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;

Expand Down Expand Up @@ -231,15 +232,13 @@ public byte getInfo() {

public static class CashItemFactory {
private static volatile Map<Integer, CashItem> items = new HashMap<>();
private static volatile List<Integer> randomitemsns = new ArrayList<>();
private static volatile Map<Integer, List<Integer>> packages = new HashMap<>();
private static volatile List<SpecialCashItem> specialcashitems = new ArrayList<>();

public static void loadAllCashItems() {
DataProvider etc = DataProviderFactory.getDataProvider(WZFiles.ETC);

Map<Integer, CashItem> loadedItems = new HashMap<>();
List<Integer> onSaleItems = new ArrayList<>();
for (Data item : etc.getData("Commodity.img").getChildren()) {
int sn = DataTool.getIntConvert("SN", item);
int itemId = DataTool.getIntConvert("ItemId", item);
Expand All @@ -248,13 +247,8 @@ public static void loadAllCashItems() {
short count = (short) DataTool.getIntConvert("Count", item, 1);
boolean onSale = DataTool.getIntConvert("OnSale", item, 0) == 1;
loadedItems.put(sn, new CashItem(sn, itemId, price, period, count, onSale));

if (onSale) {
onSaleItems.add(sn);
}
}
CashItemFactory.items = loadedItems;
CashItemFactory.randomitemsns = onSaleItems;

Map<Integer, List<Integer>> loadedPackages = new HashMap<>();
for (Data cashPackage : etc.getData("CashPackage.img").getChildren()) {
Expand All @@ -281,13 +275,20 @@ public static void loadAllCashItems() {
CashItemFactory.specialcashitems = loadedSpecialItems;
}

public static CashItem getRandomCashItem() {
if (randomitemsns.isEmpty()) {
return null;
public static Optional<CashItem> getRandomCashItem() {
if (items.isEmpty()) {
return Optional.empty();
}

int rnd = (int) (Math.random() * randomitemsns.size());
return items.get(randomitemsns.get(rnd));
List<CashItem> itemPool = items.values().stream()
.filter(CashItem::isOnSale)
.filter(cashItem -> !ItemId.isCashPackage(cashItem.itemId))
.toList();
return Optional.of(getRandomItem(itemPool));
}

private static CashItem getRandomItem(List<CashItem> items) {
return items.get(new Random().nextInt(items.size()));
}

public static CashItem getItem(int sn) {
Expand All @@ -311,20 +312,6 @@ public static boolean isPackage(int itemId) {
public static List<SpecialCashItem> getSpecialCashItems() {
return specialcashitems;
}

public static void reloadSpecialCashItems() {//Yay?
List<SpecialCashItem> loadedSpecialItems = new ArrayList<>();
try (Connection con = DatabaseConnection.getConnection();
PreparedStatement ps = con.prepareStatement("SELECT * FROM specialcashitems");
ResultSet rs = ps.executeQuery()) {
while (rs.next()) {
loadedSpecialItems.add(new SpecialCashItem(rs.getInt("sn"), rs.getInt("modifier"), rs.getByte("info")));
}
} catch (SQLException ex) {
ex.printStackTrace();
}
CashItemFactory.specialcashitems = loadedSpecialItems;
}
}

public record CashShopSurpriseResult(Item usedCashShopSurprise, Item reward) {
Expand Down Expand Up @@ -545,8 +532,8 @@ public Optional<CashShopSurpriseResult> openCashShopSurprise(long cashId) {
return Optional.empty();
}

CashItem cashItemReward = CashItemFactory.getRandomCashItem();
if (cashItemReward == null) {
Optional<CashItem> cashItemReward = CashItemFactory.getRandomCashItem();
if (cashItemReward.isEmpty()) {
return Optional.empty();
}

Expand All @@ -556,7 +543,7 @@ public Optional<CashShopSurpriseResult> openCashShopSurprise(long cashId) {
removeFromInventory(cashShopSurprise);
}

Item itemReward = cashItemReward.toItem();
Item itemReward = cashItemReward.get().toItem();
addToInventory(itemReward);

return Optional.of(new CashShopSurpriseResult(cashShopSurprise, itemReward));
Expand Down
19 changes: 19 additions & 0 deletions src/test/java/constants/id/ItemIdTest.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
package constants.id;

import org.junit.jupiter.api.Test;

import static org.junit.jupiter.api.Assertions.assertFalse;
import static org.junit.jupiter.api.Assertions.assertTrue;

class ItemIdTest {

@Test
void isCashPackage() {
assertTrue(ItemId.isCashPackage(9102237));
}

@Test
void isNotCashPackage() {
assertFalse(ItemId.isCashPackage(4000000));
}
}

0 comments on commit d916502

Please sign in to comment.