Check materials and mora

This commit is contained in:
ImmuState 2022-06-04 14:07:45 -07:00 committed by Melledy
parent 5db5c90a8b
commit a668bd6ec1
3 changed files with 33 additions and 31 deletions

View File

@ -1,22 +0,0 @@
package emu.grasscutter.data.common;
import java.util.List;
public class MaterialItemsData {
private int id;
private int count;
public int getId() {
return this.id;
}
public void setId(int value) {
this.id = value;
}
public int getCount() {
return this.count;
}
public void setCount(int value) {
this.count = value;
}
}

View File

@ -5,7 +5,7 @@ import java.util.List;
import emu.grasscutter.data.GameResource; import emu.grasscutter.data.GameResource;
import emu.grasscutter.data.ResourceType; import emu.grasscutter.data.ResourceType;
import emu.grasscutter.data.ResourceType.LoadPriority; import emu.grasscutter.data.ResourceType.LoadPriority;
import emu.grasscutter.data.common.MaterialItemsData; import emu.grasscutter.data.common.ItemParamData;
import emu.grasscutter.data.common.OpenCondData; import emu.grasscutter.data.common.OpenCondData;
@ResourceType(name = {"ForgeExcelConfigData.json"}, loadPriority = LoadPriority.HIGHEST) @ResourceType(name = {"ForgeExcelConfigData.json"}, loadPriority = LoadPriority.HIGHEST)
@ -18,7 +18,7 @@ public class ForgeData extends GameResource {
private int queueNum; private int queueNum;
private int scoinCost; private int scoinCost;
private int priority; private int priority;
private List<MaterialItemsData> materialItems; private List<ItemParamData> materialItems;
@Override @Override
public int getId() { public int getId() {
@ -53,7 +53,7 @@ public class ForgeData extends GameResource {
return priority; return priority;
} }
public List<MaterialItemsData> getMaterialItems() { public List<ItemParamData> getMaterialItems() {
return materialItems; return materialItems;
} }

View File

@ -5,8 +5,10 @@ import java.util.Map;
import emu.grasscutter.Grasscutter; import emu.grasscutter.Grasscutter;
import emu.grasscutter.data.GameData; import emu.grasscutter.data.GameData;
import emu.grasscutter.data.common.ItemParamData;
import emu.grasscutter.data.excels.ForgeData; import emu.grasscutter.data.excels.ForgeData;
import emu.grasscutter.game.inventory.GameItem; import emu.grasscutter.game.inventory.GameItem;
import emu.grasscutter.game.inventory.ItemType;
import emu.grasscutter.game.player.Player; import emu.grasscutter.game.player.Player;
import emu.grasscutter.net.proto.ForgeStartReqOuterClass; import emu.grasscutter.net.proto.ForgeStartReqOuterClass;
import emu.grasscutter.net.proto.ForgeQueueDataOuterClass.ForgeQueueData; import emu.grasscutter.net.proto.ForgeQueueDataOuterClass.ForgeQueueData;
@ -16,8 +18,6 @@ import emu.grasscutter.server.packet.send.PacketForgeFormulaDataNotify;
import emu.grasscutter.server.packet.send.PacketForgeGetQueueDataRsp; import emu.grasscutter.server.packet.send.PacketForgeGetQueueDataRsp;
import emu.grasscutter.server.packet.send.PacketForgeStartRsp; import emu.grasscutter.server.packet.send.PacketForgeStartRsp;
import emu.grasscutter.utils.Utils; import emu.grasscutter.utils.Utils;
import emu.grasscutter.utils.ConfigContainer.Game;
import net.bytebuddy.dynamic.TypeResolutionStrategy.Active;
public class ForgingManager { public class ForgingManager {
private final Player player; private final Player player;
@ -114,17 +114,41 @@ public class ForgingManager {
// Get the required forging information for the target item. // Get the required forging information for the target item.
if (!GameData.getForgeDataMap().containsKey(req.getForgeId())) { if (!GameData.getForgeDataMap().containsKey(req.getForgeId())) {
this.player.sendPacket(new PacketForgeStartRsp(Retcode.RET_FAIL)); //ToDo: Probably the wrong return code. this.player.sendPacket(new PacketForgeStartRsp(Retcode.RET_FAIL)); //ToDo: Probably the wrong return code.
Grasscutter.getLogger().error("Missing forgeId");
return; return;
} }
ForgeData forgeData = GameData.getForgeDataMap().get(req.getForgeId()); ForgeData forgeData = GameData.getForgeDataMap().get(req.getForgeId());
// Check if we have enough of each material. // Check if we have enough of each material.
// ToDo. for (var material : forgeData.getMaterialItems()) {
if (material.getItemId() == 0) {
continue;
}
// Consume material. int currentCount = this.player.getInventory().getInventoryTab(ItemType.ITEM_MATERIAL).getItemById(material.getItemId()).getCount();
// ToDo.
if (currentCount < material.getCount() * req.getForgeCount()) {
this.player.sendPacket(new PacketForgeStartRsp(Retcode.RET_FORGE_POINT_NOT_ENOUGH)); //ToDo: Probably the wrong return code.
return;
}
}
// Check if we have enough Mora.
if (this.player.getMora() < forgeData.getScoinCost() * req.getForgeCount()) {
this.player.sendPacket(new PacketForgeStartRsp(Retcode.RET_FORGE_POINT_NOT_ENOUGH)); //ToDo: Probably the wrong return code.
return;
}
// Consume material and Mora.
for (var material : forgeData.getMaterialItems()) {
if (material.getItemId() == 0) {
continue;
}
this.player.getInventory().removeItem(material.getItemId(), material.getCount() * req.getForgeCount());
}
this.player.setMora(this.player.getMora() - forgeData.getScoinCost() * req.getForgeCount());
// Create and add active forge. // Create and add active forge.
ActiveForgeData activeForge = new ActiveForgeData(); ActiveForgeData activeForge = new ActiveForgeData();