Skip to content
Snippets Groups Projects
Commit 0cb75aeb authored by AnimeGitB's avatar AnimeGitB
Browse files

Add iterable payItems methods

Shame they could never be fully generic, but oh well
parent efa69c00
Branches
Tags
No related merge requests found
...@@ -81,7 +81,7 @@ public class CombineManger extends BaseGameSystem { ...@@ -81,7 +81,7 @@ public class CombineManger extends BaseGameSystem {
List<ItemParamData> material = new ArrayList<>(combineData.getMaterialItems()); List<ItemParamData> material = new ArrayList<>(combineData.getMaterialItems());
material.add(new ItemParamData(202, combineData.getScoinCost())); material.add(new ItemParamData(202, combineData.getScoinCost()));
boolean success = player.getInventory().payItems(material.toArray(new ItemParamData[0]), count, ActionReason.Combine); boolean success = player.getInventory().payItems(material, count, ActionReason.Combine);
// abort if not enough material // abort if not enough material
if (!success) { if (!success) {
......
...@@ -293,6 +293,29 @@ public class Inventory extends BasePlayerManager implements Iterable<GameItem> { ...@@ -293,6 +293,29 @@ public class Inventory extends BasePlayerManager implements Iterable<GameItem> {
} }
} }
private GameItem payVirtualItem(int itemId, int count) {
switch (itemId) {
case 201 -> // Primogem
player.setPrimogems(player.getPrimogems() - count);
case 202 -> // Mora
player.setMora(player.getMora() - count);
case 203 -> // Genesis Crystals
player.setCrystals(player.getCrystals() - count);
case 106 -> // Resin
player.getResinManager().useResin(count);
case 107 -> // LegendaryKey
player.useLegendaryKey(count);
case 204 -> // Home Coin
player.setHomeCoin(player.getHomeCoin() - count);
default -> {
var gameItem = getInventoryTab(ItemType.ITEM_MATERIAL).getItemById(itemId);
removeItem(gameItem, count);
return gameItem;
}
}
return null;
}
private int getVirtualItemCount(int itemId) { private int getVirtualItemCount(int itemId) {
switch (itemId) { switch (itemId) {
case 201: // Primogem case 201: // Primogem
...@@ -313,47 +336,33 @@ public class Inventory extends BasePlayerManager implements Iterable<GameItem> { ...@@ -313,47 +336,33 @@ public class Inventory extends BasePlayerManager implements Iterable<GameItem> {
} }
} }
public boolean payItem(int id, int count) { public synchronized boolean payItem(int id, int count) {
return payItem(new ItemParamData(id, count)); if (this.getVirtualItemCount(id) < count)
return false;
this.payVirtualItem(id, count);
return true;
} }
public boolean payItem(ItemParamData costItem) { public boolean payItem(ItemParamData costItem) {
return payItems(new ItemParamData[] {costItem}, 1, null); return this.payItem(costItem.getId(), costItem.getCount());
} }
public boolean payItems(ItemParamData[] costItems) { public boolean payItems(ItemParamData[] costItems) {
return payItems(costItems, 1, null); return this.payItems(costItems, 1, null);
} }
public boolean payItems(ItemParamData[] costItems, int quantity) { public boolean payItems(ItemParamData[] costItems, int quantity) {
return payItems(costItems, quantity, null); return this.payItems(costItems, quantity, null);
} }
public synchronized boolean payItems(ItemParamData[] costItems, int quantity, ActionReason reason) { public synchronized boolean payItems(ItemParamData[] costItems, int quantity, ActionReason reason) {
// Make sure player has requisite items // Make sure player has requisite items
for (ItemParamData cost : costItems) { for (ItemParamData cost : costItems)
if (getVirtualItemCount(cost.getId()) < (cost.getCount() * quantity)) { if (this.getVirtualItemCount(cost.getId()) < (cost.getCount() * quantity))
return false; return false;
}
}
// All costs are satisfied, now remove them all // All costs are satisfied, now remove them all
for (ItemParamData cost : costItems) { for (ItemParamData cost : costItems) {
switch (cost.getId()) { this.payVirtualItem(cost.getId(), cost.getCount() * quantity);
case 201 -> // Primogem
player.setPrimogems(player.getPrimogems() - (cost.getCount() * quantity));
case 202 -> // Mora
player.setMora(player.getMora() - (cost.getCount() * quantity));
case 203 -> // Genesis Crystals
player.setCrystals(player.getCrystals() - (cost.getCount() * quantity));
case 106 -> // Resin
player.getResinManager().useResin(cost.getCount() * quantity);
case 107 -> // LegendaryKey
player.useLegendaryKey(cost.getCount() * quantity);
case 204 -> // Home Coin
player.setHomeCoin(player.getHomeCoin() - (cost.getCount() * quantity));
default ->
removeItem(getInventoryTab(ItemType.ITEM_MATERIAL).getItemById(cost.getId()), cost.getCount() * quantity);
}
} }
if (reason != null) { // Do we need these? if (reason != null) { // Do we need these?
...@@ -363,6 +372,24 @@ public class Inventory extends BasePlayerManager implements Iterable<GameItem> { ...@@ -363,6 +372,24 @@ public class Inventory extends BasePlayerManager implements Iterable<GameItem> {
return true; return true;
} }
public boolean payItems(Iterable<ItemParamData> costItems) {
return this.payItems(costItems, 1, null);
}
public boolean payItems(Iterable<ItemParamData> costItems, int quantity) {
return this.payItems(costItems, quantity, null);
}
public synchronized boolean payItems(Iterable<ItemParamData> costItems, int quantity, ActionReason reason) {
// Make sure player has requisite items
for (ItemParamData cost : costItems)
if (getVirtualItemCount(cost.getId()) < (cost.getCount() * quantity))
return false;
// All costs are satisfied, now remove them all
costItems.forEach(cost -> this.payVirtualItem(cost.getId(), cost.getCount() * quantity));
return true;
}
public void removeItems(List<GameItem> items) { public void removeItems(List<GameItem> items) {
// TODO Bulk delete // TODO Bulk delete
for (GameItem item : items) { for (GameItem item : items) {
......
...@@ -97,7 +97,7 @@ public class CookingManager extends BasePlayerManager { ...@@ -97,7 +97,7 @@ public class CookingManager extends BasePlayerManager {
int proficiency = this.player.getUnlockedRecipies().getOrDefault(recipeId, 0); int proficiency = this.player.getUnlockedRecipies().getOrDefault(recipeId, 0);
// Try consuming materials. // Try consuming materials.
boolean success = player.getInventory().payItems(recipeData.getInputVec().toArray(new ItemParamData[0]), count, ActionReason.Cook); boolean success = player.getInventory().payItems(recipeData.getInputVec(), count, ActionReason.Cook);
if (!success) { if (!success) {
this.player.sendPacket(new PacketPlayerCookRsp(Retcode.RET_FAIL)); this.player.sendPacket(new PacketPlayerCookRsp(Retcode.RET_FAIL));
} }
......
...@@ -71,7 +71,7 @@ public class FurnitureManager extends BasePlayerManager { ...@@ -71,7 +71,7 @@ public class FurnitureManager extends BasePlayerManager {
} }
// pay items first // pay items first
if (!player.getInventory().payItems(makeData.getMaterialItems().toArray(new ItemParamData[0]))) { if (!player.getInventory().payItems(makeData.getMaterialItems())) {
player.getSession().send(new PacketFurnitureMakeStartRsp(Retcode.RET_HOME_FURNITURE_COUNT_NOT_ENOUGH_VALUE, null)); player.getSession().send(new PacketFurnitureMakeStartRsp(Retcode.RET_HOME_FURNITURE_COUNT_NOT_ENOUGH_VALUE, null));
return; return;
} }
......
...@@ -157,7 +157,7 @@ public class ForgingManager extends BasePlayerManager { ...@@ -157,7 +157,7 @@ public class ForgingManager extends BasePlayerManager {
List<ItemParamData> material = new ArrayList<>(forgeData.getMaterialItems()); List<ItemParamData> material = new ArrayList<>(forgeData.getMaterialItems());
material.add(new ItemParamData(202, forgeData.getScoinCost())); material.add(new ItemParamData(202, forgeData.getScoinCost()));
boolean success = player.getInventory().payItems(material.toArray(new ItemParamData[0]), req.getForgeCount(), ActionReason.ForgeCost); boolean success = player.getInventory().payItems(material, req.getForgeCount(), ActionReason.ForgeCost);
if (!success) { if (!success) {
this.player.sendPacket(new PacketForgeStartRsp(Retcode.RET_FORGE_POINT_NOT_ENOUGH)); //ToDo: Probably the wrong return code. this.player.sendPacket(new PacketForgeStartRsp(Retcode.RET_FORGE_POINT_NOT_ENOUGH)); //ToDo: Probably the wrong return code.
......
...@@ -122,7 +122,7 @@ public class InventorySystem extends BaseGameSystem { ...@@ -122,7 +122,7 @@ public class InventorySystem extends BaseGameSystem {
// Confirm payment of materials and mora (assume food relics are payable afterwards) // Confirm payment of materials and mora (assume food relics are payable afterwards)
payList.add(new ItemParamData(202, moraCost)); payList.add(new ItemParamData(202, moraCost));
if (!player.getInventory().payItems(payList.toArray(new ItemParamData[0]))) { if (!player.getInventory().payItems(payList)) {
return; return;
} }
...@@ -297,7 +297,7 @@ public class InventorySystem extends BaseGameSystem { ...@@ -297,7 +297,7 @@ public class InventorySystem extends BaseGameSystem {
// Confirm payment of materials and mora (assume food weapons are payable afterwards) // Confirm payment of materials and mora (assume food weapons are payable afterwards)
payList.add(new ItemParamData(202, moraCost)); payList.add(new ItemParamData(202, moraCost));
if (!player.getInventory().payItems(payList.toArray(new ItemParamData[0]))) { if (!player.getInventory().payItems(payList)) {
return; return;
} }
player.getInventory().removeItems(foodWeapons); player.getInventory().removeItems(foodWeapons);
...@@ -692,7 +692,7 @@ public class InventorySystem extends BaseGameSystem { ...@@ -692,7 +692,7 @@ public class InventorySystem extends BaseGameSystem {
if (proudSkill.getCoinCost() > 0) { if (proudSkill.getCoinCost() > 0) {
costs.add(new ItemParamData(202, proudSkill.getCoinCost())); costs.add(new ItemParamData(202, proudSkill.getCoinCost()));
} }
if (!player.getInventory().payItems(costs.toArray(new ItemParamData[0]))) { if (!player.getInventory().payItems(costs)) {
return; return;
} }
......
...@@ -61,7 +61,7 @@ public class HandlerBuyGoodsReq extends PacketHandler { ...@@ -61,7 +61,7 @@ public class HandlerBuyGoodsReq extends PacketHandler {
costs.add(new ItemParamData(202, sg.getScoin())); costs.add(new ItemParamData(202, sg.getScoin()));
costs.add(new ItemParamData(201, sg.getHcoin())); costs.add(new ItemParamData(201, sg.getHcoin()));
costs.add(new ItemParamData(203, sg.getMcoin())); costs.add(new ItemParamData(203, sg.getMcoin()));
if (!session.getPlayer().getInventory().payItems(costs.toArray(new ItemParamData[0]), buyGoodsReq.getBuyCount())) { if (!session.getPlayer().getInventory().payItems(costs, buyGoodsReq.getBuyCount())) {
return; return;
} }
......
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment