|
|
|
@ -141,13 +141,12 @@ public enum ForgeManager implements Runnable {
@@ -141,13 +141,12 @@ public enum ForgeManager implements Runnable {
|
|
|
|
|
workOrder.production_cost_total.putAll(workOrder.production_cost); |
|
|
|
|
workOrder.production_cost_total.forEach((key, value) -> workOrder.production_cost_total.put(key, value * workOrder.total_to_produce)); |
|
|
|
|
|
|
|
|
|
// Debit gold and resource cost from forge
|
|
|
|
|
// and / or warehouse
|
|
|
|
|
// Debit gold and resource costs
|
|
|
|
|
|
|
|
|
|
if (!debitWorkOrderCost(workOrder)) |
|
|
|
|
return 58; //58: The formula is beyond the means of this facility
|
|
|
|
|
|
|
|
|
|
// Create in-memory items and add to collections
|
|
|
|
|
// Create new batch of virtual items
|
|
|
|
|
|
|
|
|
|
forgeWorkOrderBatch(workOrder); |
|
|
|
|
|
|
|
|
@ -193,7 +192,7 @@ public enum ForgeManager implements Runnable {
@@ -193,7 +192,7 @@ public enum ForgeManager implements Runnable {
|
|
|
|
|
|
|
|
|
|
int availableSlots = workOrder.vendor.getRank(); |
|
|
|
|
|
|
|
|
|
// Subtract slots currently being used by npc workOrders
|
|
|
|
|
// Subtract slots currently assigned to npc workOrders
|
|
|
|
|
|
|
|
|
|
for (WorkOrder npcWorkOrder : ForgeManager.vendorWorkOrderLookup.get(workOrder.vendor)) |
|
|
|
|
availableSlots = availableSlots - npcWorkOrder.cooking.size(); |
|
|
|
@ -208,7 +207,7 @@ public enum ForgeManager implements Runnable {
@@ -208,7 +207,7 @@ public enum ForgeManager implements Runnable {
|
|
|
|
|
|
|
|
|
|
public static HashMap<mbEnums.ResourceType, Integer> calcProductionCost(WorkOrder workOrder) { |
|
|
|
|
|
|
|
|
|
// Calculate the production cost for a single run of this workOrder
|
|
|
|
|
// Calculate production cost for a single run of this workOrder
|
|
|
|
|
|
|
|
|
|
HashMap<mbEnums.ResourceType, Integer> production_cost = new HashMap<>(); |
|
|
|
|
ItemTemplate template = ItemTemplate.templates.get(workOrder.templateID); |
|
|
|
@ -235,7 +234,7 @@ public enum ForgeManager implements Runnable {
@@ -235,7 +234,7 @@ public enum ForgeManager implements Runnable {
|
|
|
|
|
|
|
|
|
|
public static Item forgeItem(WorkOrder workOrder) { |
|
|
|
|
|
|
|
|
|
// Create new item from specified template
|
|
|
|
|
// Create new virtual item from specified template
|
|
|
|
|
|
|
|
|
|
ItemTemplate template = ItemTemplate.templates.get(workOrder.templateID); |
|
|
|
|
Item forgedItem = new Item(workOrder.templateID); |
|
|
|
@ -246,12 +245,12 @@ public enum ForgeManager implements Runnable {
@@ -246,12 +245,12 @@ public enum ForgeManager implements Runnable {
|
|
|
|
|
forgedItem.containerType = mbEnums.ItemContainerType.FORGE; |
|
|
|
|
forgedItem.ownerID = workOrder.vendor.getObjectUUID(); |
|
|
|
|
|
|
|
|
|
// The UpgradeDate for the item is serialized for the
|
|
|
|
|
// vendor forge window
|
|
|
|
|
// item.upgradeDate is serialized (ItemProductionMsg)
|
|
|
|
|
// for vendor forge window completion time.
|
|
|
|
|
|
|
|
|
|
forgedItem.setDateToUpgrade(workOrder.completionTime); |
|
|
|
|
|
|
|
|
|
// Give prefix and suffix to this item if random rolled
|
|
|
|
|
// Assign a prefix and suffix to this item if random rolled
|
|
|
|
|
|
|
|
|
|
if (workOrder.prefixToken == 0) |
|
|
|
|
forgedItem.prefixToken = calcRandomMod(workOrder.vendor, mbEnums.ItemModType.PREFIX, template.modTable); |
|
|
|
@ -263,7 +262,7 @@ public enum ForgeManager implements Runnable {
@@ -263,7 +262,7 @@ public enum ForgeManager implements Runnable {
|
|
|
|
|
else |
|
|
|
|
forgedItem.suffixToken = workOrder.suffixToken; |
|
|
|
|
|
|
|
|
|
// Forged random rolled items are unidentified until completed
|
|
|
|
|
// Random rolled items are unidentified until completed
|
|
|
|
|
|
|
|
|
|
if (workOrder.prefixToken == 0 && workOrder.suffixToken == 0) |
|
|
|
|
forgedItem.flags.remove(mbEnums.ItemFlags.Identified); |
|
|
|
@ -315,15 +314,17 @@ public enum ForgeManager implements Runnable {
@@ -315,15 +314,17 @@ public enum ForgeManager implements Runnable {
|
|
|
|
|
toRemove.add(virutalItem); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// Remove the virtual item from all collections
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
for (Item virtualItem : toRemove) { |
|
|
|
|
|
|
|
|
|
// Remove the virtual items from the forge window
|
|
|
|
|
// Remove virtual items from the forge window
|
|
|
|
|
|
|
|
|
|
ItemProductionMsg outMsg = new ItemProductionMsg(workOrder.vendor.building, workOrder.vendor, virtualItem, mbEnums.ProductionActionType.CONFIRM_SETPRICE, true); |
|
|
|
|
DispatchMessage.dispatchMsgToInterestArea(workOrder.vendor, outMsg, mbEnums.DispatchChannel.SECONDARY, 700, false, false); |
|
|
|
|
|
|
|
|
|
// Remove virtual item from all collections
|
|
|
|
|
|
|
|
|
|
workOrder.cooking.remove(virtualItem); |
|
|
|
|
itemWorkOrderLookup.remove(virtualItem); |
|
|
|
|
DbManager.removeFromCache(virtualItem); |
|
|
|
@ -332,7 +333,7 @@ public enum ForgeManager implements Runnable {
@@ -332,7 +333,7 @@ public enum ForgeManager implements Runnable {
|
|
|
|
|
|
|
|
|
|
public static void forgeWorkOrderBatch(WorkOrder workOrder) { |
|
|
|
|
|
|
|
|
|
// New completion time for this batch
|
|
|
|
|
// Completion time for this batch is in the future
|
|
|
|
|
|
|
|
|
|
workOrder.completionTime = System.currentTimeMillis() + workOrder.rollingDuration; |
|
|
|
|
|
|
|
|
@ -347,7 +348,7 @@ public enum ForgeManager implements Runnable {
@@ -347,7 +348,7 @@ public enum ForgeManager implements Runnable {
|
|
|
|
|
workOrder.total_produced = workOrder.total_produced + 1; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// Save updated status to disk
|
|
|
|
|
// Save updated state to disk
|
|
|
|
|
|
|
|
|
|
DbManager.WarehouseQueries.UPDATE_WORKORDER(workOrder); |
|
|
|
|
|
|
|
|
@ -355,6 +356,8 @@ public enum ForgeManager implements Runnable {
@@ -355,6 +356,8 @@ public enum ForgeManager implements Runnable {
|
|
|
|
|
|
|
|
|
|
public static int calcRandomMod(NPC vendor, mbEnums.ItemModType itemModType, int modTable) { |
|
|
|
|
|
|
|
|
|
// Random prefix or suffix token based on item.template.modtable
|
|
|
|
|
|
|
|
|
|
int modifier = 0; |
|
|
|
|
ModTypeTableEntry modTypeTableEntry = null; |
|
|
|
|
ModTableEntry modTableEntry = null; |
|
|
|
|