diff --git a/src/engine/gameManager/ForgeManager.java b/src/engine/gameManager/ForgeManager.java index 66599457..99342648 100644 --- a/src/engine/gameManager/ForgeManager.java +++ b/src/engine/gameManager/ForgeManager.java @@ -131,16 +131,14 @@ public enum ForgeManager implements Runnable { public static long calcRollingDuration(WorkOrder workOrder) { long rollingDuration; - float rank = workOrder.vendor.getBuilding().getRank() - 1; - float rate = (float) (2.5 * rank); + float rate = (float) (2.5 * (workOrder.vendor.getBuilding().getRank() - 1)); float baseTime = (20 - rate) * 60000; + ItemTemplate template = ItemTemplate.templates.get(workOrder.templateID); // Bane circles - if (workOrder.templateID > 910010 && workOrder.templateID < 910019) { - rank = workOrder.templateID - 910010; - baseTime = rank * 60 * 60 * 3 * 1000; - } + if (template.item_bane_rank > 0) + baseTime = template.item_bane_rank * 60 * 60 * 3 * 1000; rollingDuration = (long) (baseTime * Float.parseFloat(ConfigManager.MB_PRODUCTION_RATE.getValue())); return rollingDuration; @@ -148,16 +146,27 @@ public enum ForgeManager implements Runnable { public static int calcAvailableSlots(WorkOrder workOrder) { + // Slots available in a forge are based on the npc rank + int availableSlots = workOrder.vendor.getRank(); + // Slots currently used up by the npc workOrders + for (WorkOrder npcWorkOrder : workOrder.vendor.workOrders) availableSlots = availableSlots - npcWorkOrder.slotCount; + // Slot count override for single item production + + if (workOrder.total_to_produce == 0 && availableSlots > 1) + availableSlots = 1; + return availableSlots; } public static HashMap calcProductionCost(WorkOrder workOrder) { + // Calculate the production cost for a single run of this workOrder + HashMap production_cost = new HashMap<>(); ItemTemplate template = ItemTemplate.templates.get(workOrder.templateID); diff --git a/src/engine/objects/ItemTemplate.java b/src/engine/objects/ItemTemplate.java index b186450e..a2d9f140 100644 --- a/src/engine/objects/ItemTemplate.java +++ b/src/engine/objects/ItemTemplate.java @@ -133,6 +133,7 @@ public class ItemTemplate { public final EnumSet rune_not_enemy_monster_types = EnumSet.noneOf(mbEnums.MonsterType.class); public final ArrayList rune_groupee_monster_types = new ArrayList<>(); public final ArrayList rune_helper_monster_types = new ArrayList<>(); + public int item_bane_rank; public ItemTemplate(JSONObject jsonObject) { @@ -178,6 +179,12 @@ public class ItemTemplate { obj_sparse_data.put(sparseType, sparseValue.toString()); } + // Banes are defined by their sparse data field + + if (obj_sparse_data.entrySet().contains("ACTIONRESPONSE")) + if (obj_sparse_data.get("ACTIONRESPONSE").equals("4250517122")) + item_bane_rank = ((Long) jsonObject.get("item_bane_rank")).intValue(); + // Reading float values combat_health_current = ((Double) jsonObject.get("combat_health_current")).floatValue();