Compare commits
2 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
d916502f58 | ||
|
|
1791365e0f |
@@ -312,6 +312,10 @@ public class ItemId {
|
|||||||
return itemId == NX_CARD_100 || itemId == NX_CARD_250;
|
return itemId == NX_CARD_100 || itemId == NX_CARD_250;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static boolean isCashPackage(int itemId) {
|
||||||
|
return itemId / 10000 == 910;
|
||||||
|
}
|
||||||
|
|
||||||
// Face expression
|
// Face expression
|
||||||
private static final int FACE_EXPRESSION_MIN = 5160000;
|
private static final int FACE_EXPRESSION_MIN = 5160000;
|
||||||
private static final int FACE_EXPRESSION_MAX = 5160014;
|
private static final int FACE_EXPRESSION_MAX = 5160014;
|
||||||
|
|||||||
@@ -49,6 +49,7 @@ 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.Optional;
|
||||||
|
import java.util.Random;
|
||||||
import java.util.concurrent.locks.Lock;
|
import java.util.concurrent.locks.Lock;
|
||||||
import java.util.concurrent.locks.ReentrantLock;
|
import java.util.concurrent.locks.ReentrantLock;
|
||||||
|
|
||||||
@@ -231,7 +232,6 @@ public class CashShop {
|
|||||||
|
|
||||||
public static class CashItemFactory {
|
public static class CashItemFactory {
|
||||||
private static volatile Map<Integer, CashItem> items = new HashMap<>();
|
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 Map<Integer, List<Integer>> packages = new HashMap<>();
|
||||||
private static volatile List<SpecialCashItem> specialcashitems = new ArrayList<>();
|
private static volatile List<SpecialCashItem> specialcashitems = new ArrayList<>();
|
||||||
|
|
||||||
@@ -239,7 +239,6 @@ public class CashShop {
|
|||||||
DataProvider etc = DataProviderFactory.getDataProvider(WZFiles.ETC);
|
DataProvider etc = DataProviderFactory.getDataProvider(WZFiles.ETC);
|
||||||
|
|
||||||
Map<Integer, CashItem> loadedItems = new HashMap<>();
|
Map<Integer, CashItem> loadedItems = new HashMap<>();
|
||||||
List<Integer> onSaleItems = new ArrayList<>();
|
|
||||||
for (Data item : etc.getData("Commodity.img").getChildren()) {
|
for (Data item : etc.getData("Commodity.img").getChildren()) {
|
||||||
int sn = DataTool.getIntConvert("SN", item);
|
int sn = DataTool.getIntConvert("SN", item);
|
||||||
int itemId = DataTool.getIntConvert("ItemId", item);
|
int itemId = DataTool.getIntConvert("ItemId", item);
|
||||||
@@ -248,13 +247,8 @@ public class CashShop {
|
|||||||
short count = (short) DataTool.getIntConvert("Count", item, 1);
|
short count = (short) DataTool.getIntConvert("Count", item, 1);
|
||||||
boolean onSale = DataTool.getIntConvert("OnSale", item, 0) == 1;
|
boolean onSale = DataTool.getIntConvert("OnSale", item, 0) == 1;
|
||||||
loadedItems.put(sn, new CashItem(sn, itemId, price, period, count, onSale));
|
loadedItems.put(sn, new CashItem(sn, itemId, price, period, count, onSale));
|
||||||
|
|
||||||
if (onSale) {
|
|
||||||
onSaleItems.add(sn);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
CashItemFactory.items = loadedItems;
|
CashItemFactory.items = loadedItems;
|
||||||
CashItemFactory.randomitemsns = onSaleItems;
|
|
||||||
|
|
||||||
Map<Integer, List<Integer>> loadedPackages = new HashMap<>();
|
Map<Integer, List<Integer>> loadedPackages = new HashMap<>();
|
||||||
for (Data cashPackage : etc.getData("CashPackage.img").getChildren()) {
|
for (Data cashPackage : etc.getData("CashPackage.img").getChildren()) {
|
||||||
@@ -281,13 +275,20 @@ public class CashShop {
|
|||||||
CashItemFactory.specialcashitems = loadedSpecialItems;
|
CashItemFactory.specialcashitems = loadedSpecialItems;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static CashItem getRandomCashItem() {
|
public static Optional<CashItem> getRandomCashItem() {
|
||||||
if (randomitemsns.isEmpty()) {
|
if (items.isEmpty()) {
|
||||||
return null;
|
return Optional.empty();
|
||||||
}
|
}
|
||||||
|
|
||||||
int rnd = (int) (Math.random() * randomitemsns.size());
|
List<CashItem> itemPool = items.values().stream()
|
||||||
return items.get(randomitemsns.get(rnd));
|
.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) {
|
public static CashItem getItem(int sn) {
|
||||||
@@ -311,20 +312,6 @@ public class CashShop {
|
|||||||
public static List<SpecialCashItem> getSpecialCashItems() {
|
public static List<SpecialCashItem> getSpecialCashItems() {
|
||||||
return specialcashitems;
|
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) {
|
public record CashShopSurpriseResult(Item usedCashShopSurprise, Item reward) {
|
||||||
@@ -545,8 +532,8 @@ public class CashShop {
|
|||||||
return Optional.empty();
|
return Optional.empty();
|
||||||
}
|
}
|
||||||
|
|
||||||
CashItem cashItemReward = CashItemFactory.getRandomCashItem();
|
Optional<CashItem> cashItemReward = CashItemFactory.getRandomCashItem();
|
||||||
if (cashItemReward == null) {
|
if (cashItemReward.isEmpty()) {
|
||||||
return Optional.empty();
|
return Optional.empty();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -556,7 +543,7 @@ public class CashShop {
|
|||||||
removeFromInventory(cashShopSurprise);
|
removeFromInventory(cashShopSurprise);
|
||||||
}
|
}
|
||||||
|
|
||||||
Item itemReward = cashItemReward.toItem();
|
Item itemReward = cashItemReward.get().toItem();
|
||||||
addToInventory(itemReward);
|
addToInventory(itemReward);
|
||||||
|
|
||||||
return Optional.of(new CashShopSurpriseResult(cashShopSurprise, itemReward));
|
return Optional.of(new CashShopSurpriseResult(cashShopSurprise, itemReward));
|
||||||
|
|||||||
19
src/test/java/constants/id/ItemIdTest.java
Normal file
19
src/test/java/constants/id/ItemIdTest.java
Normal file
@@ -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));
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user