forked from MagicBane/Server
				
			
				 18 changed files with 931 additions and 969 deletions
			
			
		| @ -1,846 +0,0 @@@@ -1,846 +0,0 @@ | ||||
| package engine.gameManager; | ||||
| 
 | ||||
| import ch.claude_martin.enumbitset.EnumBitSet; | ||||
| import engine.Enum; | ||||
| import engine.net.Dispatch; | ||||
| import engine.net.DispatchMessage; | ||||
| import engine.net.client.ClientConnection; | ||||
| import engine.net.client.msg.*; | ||||
| import engine.objects.*; | ||||
| import engine.server.MBServerStatics; | ||||
| import org.joda.time.DateTime; | ||||
| import org.pmw.tinylog.Logger; | ||||
| import java.util.ArrayList; | ||||
| import java.util.concurrent.ConcurrentHashMap; | ||||
| 
 | ||||
| public class WarehouseManager { | ||||
|     public static ItemBase goldIB = ItemBase.getItemBase(7); | ||||
|     public static ItemBase stoneIB = ItemBase.getItemBase(1580000); | ||||
|     public static ItemBase truesteelIB = ItemBase.getItemBase(1580001); | ||||
|     public static ItemBase ironIB = ItemBase.getItemBase(1580002); | ||||
|     public static ItemBase adamantIB = ItemBase.getItemBase(1580003); | ||||
|     public static ItemBase lumberIB = ItemBase.getItemBase(1580004); | ||||
|     public static ItemBase oakIB = ItemBase.getItemBase(1580005); | ||||
|     public static ItemBase bronzewoodIB = ItemBase.getItemBase(1580006); | ||||
|     public static ItemBase mandrakeIB = ItemBase.getItemBase(1580007); | ||||
|     public static ItemBase coalIB = ItemBase.getItemBase(1580008); | ||||
|     public static ItemBase agateIB = ItemBase.getItemBase(1580009); | ||||
|     public static ItemBase diamondIB = ItemBase.getItemBase(1580010); | ||||
|     public static ItemBase onyxIB = ItemBase.getItemBase(1580011); | ||||
|     public static ItemBase azothIB = ItemBase.getItemBase(1580012); | ||||
|     public static ItemBase orichalkIB = ItemBase.getItemBase(1580013); | ||||
|     public static ItemBase antimonyIB = ItemBase.getItemBase(1580014); | ||||
|     public static ItemBase sulferIB = ItemBase.getItemBase(1580015); | ||||
|     public static ItemBase quicksilverIB = ItemBase.getItemBase(1580016); | ||||
|     public static ItemBase galvorIB = ItemBase.getItemBase(1580017); | ||||
|     public static ItemBase wormwoodIB = ItemBase.getItemBase(1580018); | ||||
|     public static ItemBase obsidianIB = ItemBase.getItemBase(1580019); | ||||
|     public static ItemBase bloodstoneIB = ItemBase.getItemBase(1580020); | ||||
|     public static ItemBase mithrilIB = ItemBase.getItemBase(1580021); | ||||
|     public static ConcurrentHashMap<Integer, Integer> maxResources = new ConcurrentHashMap<>(); | ||||
|     public static ConcurrentHashMap<Integer, Warehouse> warehouseByBuildingUUID = new ConcurrentHashMap<>(); | ||||
| 
 | ||||
|     public static ConcurrentHashMap<Integer, Integer> getMaxResources() { | ||||
|         if (maxResources.size() != 23) { | ||||
|             maxResources.put(7, 100000000); | ||||
|             maxResources.put(1580000, 10000); | ||||
|             maxResources.put(1580001, 2000); | ||||
|             maxResources.put(1580002, 2000); | ||||
|             maxResources.put(1580003, 1000); | ||||
|             maxResources.put(1580004, 10000); | ||||
|             maxResources.put(1580005, 3000); | ||||
|             maxResources.put(1580006, 3000); | ||||
|             maxResources.put(1580007, 1000); | ||||
|             maxResources.put(1580008, 3000); | ||||
|             maxResources.put(1580009, 2000); | ||||
|             maxResources.put(1580010, 2000); | ||||
|             maxResources.put(1580011, 1000); | ||||
|             maxResources.put(1580012, 2000); | ||||
|             maxResources.put(1580013, 3000); | ||||
|             maxResources.put(1580014, 1000); | ||||
|             maxResources.put(1580015, 1000); | ||||
|             maxResources.put(1580016, 1000); | ||||
|             maxResources.put(1580017, 500); | ||||
|             maxResources.put(1580018, 500); | ||||
|             maxResources.put(1580019, 500); | ||||
|             maxResources.put(1580020, 500); | ||||
|             maxResources.put(1580021, 500); | ||||
|         } | ||||
| 
 | ||||
|         return maxResources; | ||||
|     } | ||||
| 
 | ||||
|     public static void warehouseDeposit(MerchantMsg msg, PlayerCharacter player, NPC npc) { | ||||
| 
 | ||||
|         Building warehouseBuilding; | ||||
|         Warehouse warehouse; | ||||
|         int depositAmount; | ||||
|         Dispatch dispatch; | ||||
| 
 | ||||
|         Item resource = Item.getFromCache(msg.getItemID()); | ||||
| 
 | ||||
|         if (resource == null) | ||||
|             return; | ||||
| 
 | ||||
|         depositAmount = msg.getAmount(); | ||||
|         CharacterItemManager itemMan = player.getCharItemManager(); | ||||
| 
 | ||||
|         if (!itemMan.doesCharOwnThisItem(resource.getObjectUUID())) | ||||
|             return; | ||||
| 
 | ||||
|         warehouseBuilding = npc.getBuilding(); | ||||
| 
 | ||||
|         if (warehouseBuilding == null) | ||||
|             return; | ||||
| 
 | ||||
|         warehouse = warehouseByBuildingUUID.get(warehouseBuilding.getObjectUUID()); | ||||
| 
 | ||||
|         if (warehouse == null) | ||||
|             return; | ||||
| 
 | ||||
| 
 | ||||
|         if (!WarehouseManager.deposit(player, resource, depositAmount, true, true,warehouse)) { | ||||
|             return; | ||||
|         } | ||||
| 
 | ||||
|         ViewResourcesMessage vrm = new ViewResourcesMessage(player); | ||||
|         vrm.setGuild(player.getGuild()); | ||||
|         vrm.setWarehouseBuilding(warehouseBuilding); | ||||
|         vrm.configure(); | ||||
|         dispatch = Dispatch.borrow(player, vrm); | ||||
|         DispatchMessage.dispatchMsgDispatch(dispatch, Enum.DispatchChannel.SECONDARY); | ||||
|     } | ||||
| 
 | ||||
|     public static void warehouseWithdraw(MerchantMsg msg, PlayerCharacter player, NPC npc) { | ||||
| 
 | ||||
|         int withdrawAmount; | ||||
|         Building warehouseBuilding; | ||||
|         Warehouse warehouse; | ||||
|         Dispatch dispatch; | ||||
| 
 | ||||
|         withdrawAmount = msg.getAmount(); | ||||
|         warehouseBuilding = npc.getBuilding(); | ||||
| 
 | ||||
|         if (warehouseBuilding == null) | ||||
|             return; | ||||
| 
 | ||||
|         if (player.getGuild() != warehouseBuilding.getGuild() || !GuildStatusController.isInnerCouncil(player.getGuildStatus())) | ||||
|             return; | ||||
| 
 | ||||
|         warehouse = warehouseByBuildingUUID.get(warehouseBuilding.getObjectUUID()); | ||||
| 
 | ||||
|         if (warehouse == null) | ||||
|             return; | ||||
| 
 | ||||
|         int hashID = msg.getHashID(); | ||||
|         int itemBaseID = ItemBase.getItemHashIDMap().get(hashID); | ||||
|         ItemBase ib = ItemBase.getItemBase(itemBaseID); | ||||
| 
 | ||||
|         if (ib == null) { | ||||
|             Logger.debug("Failed to find Resource ItemBaseID with Hash ID = " + hashID); | ||||
|             return; | ||||
|         } | ||||
| 
 | ||||
|         if (isResourceLocked(warehouse, ib)) { | ||||
|             ChatManager.chatSystemInfo(player, "You cannot withdrawl a locked resource."); | ||||
|             return; | ||||
|         } | ||||
|         if (!withdraw(warehouse, player, ib, withdrawAmount, true, true)) { | ||||
|             ChatManager.chatGuildError(player, "Failed to withdrawl " + ib.getName() + '.'); | ||||
|             Logger.debug(player.getName() + " Failed to withdrawl  =" + ib.getName() + " from Warehouse With ID = " + warehouseBuilding.getObjectUUID()); | ||||
|             return; | ||||
|         } | ||||
| 
 | ||||
|         ViewResourcesMessage vrm = new ViewResourcesMessage(player); | ||||
|         vrm.setGuild(player.getGuild()); | ||||
|         vrm.setWarehouseBuilding(warehouseBuilding); | ||||
|         vrm.configure(); | ||||
|         dispatch = Dispatch.borrow(player, vrm); | ||||
|         DispatchMessage.dispatchMsgDispatch(dispatch, Enum.DispatchChannel.SECONDARY); | ||||
|     } | ||||
| 
 | ||||
|     public static void warehouseLock(MerchantMsg msg, PlayerCharacter player, NPC npc) { | ||||
|         Building warehouse; | ||||
|         int hashID; | ||||
|         Dispatch dispatch; | ||||
| 
 | ||||
|         hashID = msg.getHashID(); | ||||
|         warehouse = npc.getBuilding(); | ||||
| 
 | ||||
|         if (warehouse == null) | ||||
|             return; | ||||
| 
 | ||||
|         if (player.getGuild() != warehouse.getGuild() || !GuildStatusController.isInnerCouncil(player.getGuildStatus())) | ||||
|             return; | ||||
| 
 | ||||
|         Warehouse wh = warehouseByBuildingUUID.get(warehouse.getObjectUUID()); | ||||
| 
 | ||||
|         if (wh == null) | ||||
|             return; | ||||
| 
 | ||||
|         int itemBaseID = ItemBase.getItemHashIDMap().get(hashID); | ||||
|         ItemBase ib = ItemBase.getItemBase(itemBaseID); | ||||
| 
 | ||||
|         if (ib == null) | ||||
|             return; | ||||
| 
 | ||||
|         if (isResourceLocked(wh, ib)) { | ||||
|             boolean worked; | ||||
|             EnumBitSet<Enum.ResourceType> bitSet = EnumBitSet.asEnumBitSet(wh.lockedResourceTypes.toLong(), Enum.ResourceType.class); | ||||
| 
 | ||||
|             bitSet.remove(Enum.ResourceType.resourceLookup.get(itemBaseID)); | ||||
| 
 | ||||
|             worked = DbManager.WarehouseQueries.updateLocks(wh, bitSet.toLong()); | ||||
| 
 | ||||
|             if (worked) { | ||||
|                 wh.lockedResourceTypes.remove(Enum.ResourceType.resourceLookup.get(itemBaseID)); | ||||
|                 ViewResourcesMessage vrm = new ViewResourcesMessage(player); | ||||
|                 vrm.setGuild(player.getGuild()); | ||||
|                 vrm.setWarehouseBuilding(warehouse); | ||||
|                 vrm.configure(); | ||||
|                 dispatch = Dispatch.borrow(player, vrm); | ||||
|                 DispatchMessage.dispatchMsgDispatch(dispatch, Enum.DispatchChannel.SECONDARY); | ||||
|             } | ||||
|             return; | ||||
|         } | ||||
| 
 | ||||
|         EnumBitSet<Enum.ResourceType> bitSet = EnumBitSet.asEnumBitSet(wh.lockedResourceTypes.toLong(), Enum.ResourceType.class); | ||||
| 
 | ||||
|         bitSet.add(Enum.ResourceType.resourceLookup.get(itemBaseID)); | ||||
| 
 | ||||
|         if (!DbManager.WarehouseQueries.updateLocks(wh, bitSet.toLong())) | ||||
|             return; | ||||
| 
 | ||||
|         wh.lockedResourceTypes.add(Enum.ResourceType.resourceLookup.get(itemBaseID)); | ||||
|         ViewResourcesMessage vrm = new ViewResourcesMessage(player); | ||||
|         vrm.setGuild(player.getGuild()); | ||||
|         vrm.setWarehouseBuilding(warehouse); | ||||
|         vrm.configure(); | ||||
|         dispatch = Dispatch.borrow(player, vrm); | ||||
|         DispatchMessage.dispatchMsgDispatch(dispatch, Enum.DispatchChannel.SECONDARY); | ||||
| 
 | ||||
|     } | ||||
| 
 | ||||
|     public static synchronized boolean deposit(PlayerCharacter pc, Item resource, int amount, boolean removeFromInventory, boolean transaction, Warehouse warehouse) { | ||||
| 
 | ||||
|         ClientConnection origin = pc.getClientConnection(); | ||||
|         if (origin == null) | ||||
|             return false; | ||||
| 
 | ||||
|         if (amount < 0) { | ||||
|             Logger.info(pc.getFirstName() + " Attempting to Dupe!!!!!!"); | ||||
|             return false; | ||||
|         } | ||||
| 
 | ||||
|         ItemBase ib = resource.getItemBase(); | ||||
| 
 | ||||
|         if (ib == null) | ||||
|             return false; | ||||
| 
 | ||||
|         if (warehouse.resources.get(ib) == null) | ||||
|             return false; | ||||
| 
 | ||||
|         CharacterItemManager itemMan = pc.getCharItemManager(); | ||||
| 
 | ||||
|         if (itemMan == null) | ||||
|             return false; | ||||
| 
 | ||||
| 
 | ||||
|         if (itemMan.getGoldTrading() > 0) { | ||||
|             ErrorPopupMsg.sendErrorPopup(pc, 195); | ||||
|             return false; | ||||
|         } | ||||
| 
 | ||||
| 
 | ||||
|         if (!itemMan.doesCharOwnThisItem(resource.getObjectUUID())) | ||||
|             return false; | ||||
| 
 | ||||
|         if (!resource.validForInventory(origin, pc, itemMan)) | ||||
|             return false; | ||||
| 
 | ||||
|         if (resource.getNumOfItems() < amount) | ||||
|             return false; | ||||
| 
 | ||||
|         int oldAmount = warehouse.resources.get(ib); | ||||
| 
 | ||||
|         int newAmount = oldAmount + amount; | ||||
| 
 | ||||
|         if (newAmount > WarehouseManager.getMaxResources().get(ib.getUUID())) { | ||||
|             //ChatManager.chatSystemInfo(pc, "The Warehouse is at it's maximum for this type of resource.");
 | ||||
|             return false; | ||||
|         } | ||||
| 
 | ||||
| 
 | ||||
|         if (removeFromInventory) { | ||||
|             if (ib.getUUID() == 7) { | ||||
| 
 | ||||
|                 if (itemMan.getGoldInventory().getNumOfItems() - amount < 0) | ||||
|                     return false; | ||||
| 
 | ||||
|                 if (itemMan.getGoldInventory().getNumOfItems() - amount > MBServerStatics.PLAYER_GOLD_LIMIT) | ||||
|                     return false; | ||||
| 
 | ||||
|                 if (!itemMan.modifyInventoryGold(-amount)) { | ||||
|                     //ChatManager.chatSystemError(pc, "You do not have this Gold.");
 | ||||
|                     return false; | ||||
|                 } | ||||
| 
 | ||||
|                 UpdateGoldMsg ugm = new UpdateGoldMsg(pc); | ||||
|                 ugm.configure(); | ||||
|                 Dispatch dispatch = Dispatch.borrow(pc, ugm); | ||||
|                 DispatchMessage.dispatchMsgDispatch(dispatch, engine.Enum.DispatchChannel.SECONDARY); | ||||
| 
 | ||||
|                 itemMan.updateInventory(); | ||||
| 
 | ||||
|             } else { | ||||
|                 itemMan.delete(resource); | ||||
|                 itemMan.updateInventory(); | ||||
|             } | ||||
|         } | ||||
|         itemMan.updateInventory(); | ||||
| 
 | ||||
|         if (!WarehouseManager.DepositApproved(ib,amount,warehouse)) | ||||
|             return false; | ||||
| 
 | ||||
|         warehouse.resources.put(ib, newAmount); | ||||
| 
 | ||||
|         Resource resourceType; | ||||
| 
 | ||||
|         if (resource.getItemBase().getType().equals(engine.Enum.ItemType.GOLD)) | ||||
|             resourceType = Resource.GOLD; | ||||
|         else | ||||
|             resourceType = Resource.valueOf(resource.getItemBase().getName().toUpperCase()); | ||||
| 
 | ||||
|         if (transaction) | ||||
|             AddTransactionToWarehouse(warehouse, pc.getObjectType(), pc.getObjectUUID(), Enum.TransactionType.DEPOSIT, resourceType, amount); | ||||
| 
 | ||||
|         return true; | ||||
|     } | ||||
|     public static synchronized boolean depositFromMine(Mine mine, ItemBase resource, int amount, Warehouse warehouse) { | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
|         int oldAmount = warehouse.resources.get(resource); | ||||
|         int newAmount = oldAmount + amount; | ||||
| 
 | ||||
|         if (newAmount > WarehouseManager.getMaxResources().get(resource.getUUID())) | ||||
|             return false; | ||||
| 
 | ||||
|         if (!WarehouseManager.DepositApproved(resource,amount,warehouse)) | ||||
|             return false; | ||||
| 
 | ||||
|         warehouse.resources.put(resource, newAmount); | ||||
|         Resource resourceType; | ||||
| 
 | ||||
|         if (resource.getUUID() == 7) | ||||
|             resourceType = Resource.GOLD; | ||||
|         else | ||||
|             resourceType = Resource.valueOf(resource.getName().toUpperCase()); | ||||
| 
 | ||||
|         if (mine != null) | ||||
|             AddTransactionToWarehouse(warehouse, Enum.GameObjectType.Building, mine.getBuildingID(), Enum.TransactionType.MINE, resourceType, amount); | ||||
| 
 | ||||
|         return true; | ||||
|     } | ||||
| 
 | ||||
|     public static boolean DepositApproved(ItemBase ib, int amount, Warehouse warehouse){ | ||||
|         if (ib == null) | ||||
|             return false; | ||||
| 
 | ||||
|         if (warehouse.resources.get(ib) == null) | ||||
|             return false; | ||||
| 
 | ||||
|         int oldAmount = warehouse.resources.get(ib); | ||||
|         int newAmount = oldAmount + amount; | ||||
| 
 | ||||
|         if (newAmount > WarehouseManager.getMaxResources().get(ib.getUUID())) | ||||
|             return false; | ||||
| 
 | ||||
|         int itemID = ib.getUUID(); | ||||
|         boolean worked = false; | ||||
| 
 | ||||
|         switch (itemID) { | ||||
|             case 7: | ||||
|                 worked = DbManager.WarehouseQueries.updateGold(warehouse, newAmount); | ||||
|                 break; | ||||
|             case 1580000: | ||||
|                 worked = DbManager.WarehouseQueries.updateStone(warehouse, newAmount); | ||||
|                 break; | ||||
|             case 1580001: | ||||
|                 worked = DbManager.WarehouseQueries.updateTruesteel(warehouse, newAmount); | ||||
|                 break; | ||||
|             case 1580002: | ||||
|                 worked = DbManager.WarehouseQueries.updateIron(warehouse, newAmount); | ||||
|                 break; | ||||
|             case 1580003: | ||||
|                 worked = DbManager.WarehouseQueries.updateAdamant(warehouse, newAmount); | ||||
|                 break; | ||||
|             case 1580004: | ||||
|                 worked = DbManager.WarehouseQueries.updateLumber(warehouse, newAmount); | ||||
|                 break; | ||||
|             case 1580005: | ||||
|                 worked = DbManager.WarehouseQueries.updateOak(warehouse, newAmount); | ||||
|                 break; | ||||
|             case 1580006: | ||||
|                 worked = DbManager.WarehouseQueries.updateBronzewood(warehouse, newAmount); | ||||
|                 break; | ||||
|             case 1580007: | ||||
|                 worked = DbManager.WarehouseQueries.updateMandrake(warehouse, newAmount); | ||||
|                 break; | ||||
|             case 1580008: | ||||
|                 worked = DbManager.WarehouseQueries.updateCoal(warehouse, newAmount); | ||||
|                 break; | ||||
|             case 1580009: | ||||
|                 worked = DbManager.WarehouseQueries.updateAgate(warehouse, newAmount); | ||||
|                 break; | ||||
|             case 1580010: | ||||
|                 worked = DbManager.WarehouseQueries.updateDiamond(warehouse, newAmount); | ||||
|                 break; | ||||
|             case 1580011: | ||||
|                 worked = DbManager.WarehouseQueries.updateOnyx(warehouse, newAmount); | ||||
|                 break; | ||||
|             case 1580012: | ||||
|                 worked = DbManager.WarehouseQueries.updateAzoth(warehouse, newAmount); | ||||
|                 break; | ||||
|             case 1580013: | ||||
|                 worked = DbManager.WarehouseQueries.updateOrichalk(warehouse, newAmount); | ||||
|                 break; | ||||
|             case 1580014: | ||||
|                 worked = DbManager.WarehouseQueries.updateAntimony(warehouse, newAmount); | ||||
|                 break; | ||||
|             case 1580015: | ||||
|                 worked = DbManager.WarehouseQueries.updateSulfur(warehouse, newAmount); | ||||
|                 break; | ||||
|             case 1580016: | ||||
|                 worked = DbManager.WarehouseQueries.updateQuicksilver(warehouse, newAmount); | ||||
|                 break; | ||||
|             case 1580017: | ||||
|                 worked = DbManager.WarehouseQueries.updateGalvor(warehouse, newAmount); | ||||
|                 break; | ||||
|             case 1580018: | ||||
|                 worked = DbManager.WarehouseQueries.updateWormwood(warehouse, newAmount); | ||||
|                 break; | ||||
|             case 1580019: | ||||
|                 worked = DbManager.WarehouseQueries.updateObsidian(warehouse, newAmount); | ||||
|                 break; | ||||
|             case 1580020: | ||||
|                 worked = DbManager.WarehouseQueries.updateBloodstone(warehouse, newAmount); | ||||
|                 break; | ||||
|             case 1580021: | ||||
|                 worked = DbManager.WarehouseQueries.updateMithril(warehouse, newAmount); | ||||
|                 break; | ||||
|         } | ||||
|         return worked; | ||||
|     } | ||||
| 
 | ||||
|     public static synchronized void depositRealmTaxes(PlayerCharacter taxer, ItemBase ib, int amount, Warehouse warehouse) { | ||||
| 
 | ||||
|         if (!DepositApproved(ib,amount,warehouse)) | ||||
|             return; | ||||
| 
 | ||||
|         int oldAmount = warehouse.resources.get(ib); | ||||
|         int newAmount = oldAmount + amount; | ||||
|         warehouse.resources.put(ib, newAmount); | ||||
|         Resource resourceType; | ||||
| 
 | ||||
|         if (ib.getUUID() == 7) | ||||
|             resourceType = Resource.GOLD; | ||||
|         else | ||||
|             resourceType = Resource.valueOf(ib.getName().toUpperCase()); | ||||
| 
 | ||||
|         AddTransactionToWarehouse(warehouse, taxer.getObjectType(), taxer.getObjectUUID(), Enum.TransactionType.TAXRESOURCEDEPOSIT, resourceType, amount); | ||||
| 
 | ||||
|     } | ||||
| 
 | ||||
|     public static synchronized void depositProfitTax(ItemBase ib, int amount, Building building, Warehouse warehouse) { | ||||
| 
 | ||||
|         if (ib == null) | ||||
|             return; | ||||
| 
 | ||||
|         if (warehouse.resources.get(ib) == null) | ||||
|             return; | ||||
| 
 | ||||
|         int oldAmount = warehouse.resources.get(ib); | ||||
|         int newAmount = oldAmount + amount; | ||||
| 
 | ||||
|         if (newAmount > getMaxResources().get(ib.getUUID())) | ||||
|             return; | ||||
| 
 | ||||
|         if (!DepositApproved(ib,amount,warehouse)) | ||||
|             return; | ||||
| 
 | ||||
|         warehouse.resources.put(ib, newAmount); | ||||
|         Resource resourceType; | ||||
| 
 | ||||
|         if (ib.getUUID() == 7) | ||||
|             resourceType = Resource.GOLD; | ||||
|         else | ||||
|             resourceType = Resource.valueOf(ib.getName().toUpperCase()); | ||||
| 
 | ||||
|         if (building != null) | ||||
|             AddTransactionToWarehouse(warehouse, Enum.GameObjectType.Building, building.getObjectUUID(), Enum.TransactionType.DEPOSIT, resourceType, amount); | ||||
| 
 | ||||
|     } | ||||
| 
 | ||||
|     public static boolean WithdrawApproved(ItemBase ib, int amount, Warehouse warehouse){ | ||||
| 
 | ||||
|         if (ib == null) | ||||
|             return false; | ||||
| 
 | ||||
|         if (warehouse.resources.get(ib) == null) | ||||
|             return false; | ||||
| 
 | ||||
|         if (amount <= 0) | ||||
|             return false; | ||||
| 
 | ||||
|         int oldAmount = warehouse.resources.get(ib); | ||||
| 
 | ||||
|         if (oldAmount < amount) | ||||
|             return false; | ||||
| 
 | ||||
|         int hashID = ib.getHashID(); | ||||
|         int newAmount = oldAmount - amount; | ||||
|         boolean worked = false; | ||||
| 
 | ||||
|         switch (hashID) { | ||||
|             case 2308551: | ||||
|                 worked = DbManager.WarehouseQueries.updateGold(warehouse, newAmount); | ||||
|                 break; | ||||
|             case 74856115: | ||||
|                 worked = DbManager.WarehouseQueries.updateStone(warehouse, newAmount); | ||||
|                 break; | ||||
|             case -317484979: | ||||
|                 worked = DbManager.WarehouseQueries.updateTruesteel(warehouse, newAmount); | ||||
|                 break; | ||||
|             case 2504297: | ||||
|                 worked = DbManager.WarehouseQueries.updateIron(warehouse, newAmount); | ||||
|                 break; | ||||
|             case -1741189964: | ||||
|                 worked = DbManager.WarehouseQueries.updateAdamant(warehouse, newAmount); | ||||
|                 break; | ||||
|             case -1603256692: | ||||
|                 worked = DbManager.WarehouseQueries.updateLumber(warehouse, newAmount); | ||||
|                 break; | ||||
|             case 74767: | ||||
|                 worked = DbManager.WarehouseQueries.updateOak(warehouse, newAmount); | ||||
|                 break; | ||||
|             case 1334770447: | ||||
|                 worked = DbManager.WarehouseQueries.updateBronzewood(warehouse, newAmount); | ||||
|                 break; | ||||
|             case 1191391799: | ||||
|                 worked = DbManager.WarehouseQueries.updateMandrake(warehouse, newAmount); | ||||
|                 break; | ||||
|             case 2559427: | ||||
|                 worked = DbManager.WarehouseQueries.updateCoal(warehouse, newAmount); | ||||
|                 break; | ||||
|             case 75173057: | ||||
|                 worked = DbManager.WarehouseQueries.updateAgate(warehouse, newAmount); | ||||
|                 break; | ||||
|             case -1730704107: | ||||
|                 worked = DbManager.WarehouseQueries.updateDiamond(warehouse, newAmount); | ||||
|                 break; | ||||
|             case 2977263: | ||||
|                 worked = DbManager.WarehouseQueries.updateOnyx(warehouse, newAmount); | ||||
|                 break; | ||||
|             case 78329697: | ||||
|                 worked = DbManager.WarehouseQueries.updateAzoth(warehouse, newAmount); | ||||
|                 break; | ||||
|             case -2036290524: | ||||
|                 worked = DbManager.WarehouseQueries.updateOrichalk(warehouse, newAmount); | ||||
|                 break; | ||||
|             case 452320058: | ||||
|                 worked = DbManager.WarehouseQueries.updateAntimony(warehouse, newAmount); | ||||
|                 break; | ||||
|             case -1586349421: | ||||
|                 worked = DbManager.WarehouseQueries.updateSulfur(warehouse, newAmount); | ||||
|                 break; | ||||
|             case -472884509: | ||||
|                 worked = DbManager.WarehouseQueries.updateQuicksilver(warehouse, newAmount); | ||||
|                 break; | ||||
|             case -1596311545: | ||||
|                 worked = DbManager.WarehouseQueries.updateGalvor(warehouse, newAmount); | ||||
|                 break; | ||||
|             case 1532478436: | ||||
|                 worked = DbManager.WarehouseQueries.updateWormwood(warehouse, newAmount); | ||||
|                 break; | ||||
|             case -697973233: | ||||
|                 worked = DbManager.WarehouseQueries.updateObsidian(warehouse, newAmount); | ||||
|                 break; | ||||
|             case -1569826353: | ||||
|                 worked = DbManager.WarehouseQueries.updateBloodstone(warehouse, newAmount); | ||||
|                 break; | ||||
|             case -1761257186: | ||||
|                 worked = DbManager.WarehouseQueries.updateMithril(warehouse, newAmount); | ||||
|                 break; | ||||
|         } | ||||
|         return worked; | ||||
|     } | ||||
| 
 | ||||
|     public static synchronized boolean withdraw(Warehouse warehouse, NPC npc, ItemBase ib, int amount, boolean transaction) { | ||||
| 
 | ||||
|         int oldAmount = warehouse.resources.get(ib); | ||||
| 
 | ||||
|         int newAmount = oldAmount - amount; | ||||
| 
 | ||||
|         if (!WithdrawApproved(ib,amount, warehouse)) | ||||
|             return false; | ||||
| 
 | ||||
|         warehouse.resources.put(ib, newAmount); | ||||
|         Resource resourceType; | ||||
| 
 | ||||
|         if (ib.getUUID() == 7) | ||||
|             resourceType = Resource.GOLD; | ||||
|         else | ||||
|             resourceType = Resource.valueOf(ib.getName().toUpperCase()); | ||||
| 
 | ||||
|         if (transaction) | ||||
|             AddTransactionToWarehouse(warehouse, npc.getObjectType(), npc.getObjectUUID(), Enum.TransactionType.WITHDRAWL, resourceType, amount); | ||||
| 
 | ||||
|         return true; | ||||
|     } | ||||
| 
 | ||||
|     public static synchronized void transferResources(Warehouse warehouse, PlayerCharacter taxer, TaxResourcesMsg msg, ArrayList<Integer> realmResources, float taxPercent) { | ||||
| 
 | ||||
|         for (int ibID : realmResources) { | ||||
| 
 | ||||
|             ItemBase ib = ItemBase.getItemBase(ibID); | ||||
| 
 | ||||
|             if (ib == null) | ||||
|                 return; | ||||
| 
 | ||||
|             if (warehouse.resources.get(ib) == null) | ||||
|                 return; | ||||
| 
 | ||||
|             int amount = (int) (warehouse.resources.get(ib) * taxPercent); | ||||
| 
 | ||||
|             if (amount <= 0) { | ||||
|                 msg.getResources().put(ib.getHashID(), 0); | ||||
|                 continue; | ||||
|             } | ||||
| 
 | ||||
|             int oldAmount = warehouse.resources.get(ib); | ||||
| 
 | ||||
|             if (oldAmount < amount) | ||||
|                 amount = oldAmount; | ||||
| 
 | ||||
|             int newAmount = oldAmount - amount; | ||||
| 
 | ||||
|             if (newAmount < amount) | ||||
|                 continue; | ||||
| 
 | ||||
|             if (!WithdrawApproved(ib,amount,warehouse)) { | ||||
|                 msg.getResources().put(ib.getHashID(), 0); | ||||
|                 continue; | ||||
|             } | ||||
| 
 | ||||
|             msg.getResources().put(ib.getHashID(), amount); | ||||
| 
 | ||||
|             warehouse.resources.put(ib, newAmount); | ||||
|             depositRealmTaxes(taxer, ib, amount, warehouse); | ||||
|             Resource resourceType; | ||||
| 
 | ||||
|             if (ib.getUUID() == 7) | ||||
|                 resourceType = Resource.GOLD; | ||||
|             else | ||||
|                 resourceType = Resource.valueOf(ib.getName().toUpperCase()); | ||||
| 
 | ||||
|             AddTransactionToWarehouse(warehouse, taxer.getObjectType(), taxer.getObjectUUID(), Enum.TransactionType.TAXRESOURCE, resourceType, amount); | ||||
| 
 | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     public static synchronized boolean withdraw(Warehouse warehouse, PlayerCharacter pc, ItemBase ib, int amount, boolean addToInventory, boolean transaction) { | ||||
| 
 | ||||
|         if (pc == null) | ||||
|             return false; | ||||
| 
 | ||||
|         if (ib == null) | ||||
|             return false; | ||||
| 
 | ||||
|         if (warehouse.resources.get(ib) == null) | ||||
|             return false; | ||||
| 
 | ||||
|         if (amount <= 0) | ||||
|             return false; | ||||
| 
 | ||||
|         CharacterItemManager itemMan = pc.getCharItemManager(); | ||||
| 
 | ||||
|         if (itemMan == null) | ||||
|             return false; | ||||
| 
 | ||||
|         if (addToInventory) | ||||
|             if (!itemMan.hasRoomInventory(ib.getWeight())) { | ||||
|                 ChatManager.chatSystemInfo(pc, "You can not carry any more of that item."); | ||||
|                 return false; | ||||
|             } | ||||
| 
 | ||||
|         if (addToInventory && ib.getUUID() == ItemBase.GOLD_BASE_ID) { | ||||
|             if (pc.getCharItemManager().getGoldInventory().getNumOfItems() + amount > MBServerStatics.PLAYER_GOLD_LIMIT) { | ||||
|                 return false; | ||||
|             } | ||||
| 
 | ||||
|             if (pc.getCharItemManager().getGoldInventory().getNumOfItems() + amount < 0) | ||||
|                 return false; | ||||
|         } | ||||
|         int oldAmount = warehouse.resources.get(ib); | ||||
| 
 | ||||
|         if (oldAmount < amount) | ||||
|             return false; | ||||
| 
 | ||||
|         int newAmount = oldAmount - amount; | ||||
| 
 | ||||
| 
 | ||||
|         if (!WithdrawApproved(ib,amount,warehouse)) | ||||
|             return false; | ||||
| 
 | ||||
|         warehouse.resources.put(ib, newAmount); | ||||
| 
 | ||||
|         if (addToInventory) { | ||||
|             if (ib.getUUID() == 7) { | ||||
| 
 | ||||
|                 itemMan.addGoldToInventory(amount, false); | ||||
|                 UpdateGoldMsg ugm = new UpdateGoldMsg(pc); | ||||
|                 ugm.configure(); | ||||
|                 Dispatch dispatch = Dispatch.borrow(pc, ugm); | ||||
|                 DispatchMessage.dispatchMsgDispatch(dispatch, Enum.DispatchChannel.SECONDARY); | ||||
| 
 | ||||
|                 itemMan.updateInventory(); | ||||
|             } else { | ||||
|                 boolean itemWorked = false; | ||||
|                 Item item = new Item(ib, pc.getObjectUUID(), Enum.OwnerType.PlayerCharacter, (byte) 0, (byte) 0, | ||||
|                         (short) 1, (short) 1, true, false, Enum.ItemContainerType.INVENTORY, (byte) 0, | ||||
|                         new ArrayList<>(), ""); | ||||
|                 item.setNumOfItems(amount); | ||||
|                 item.containerType = Enum.ItemContainerType.INVENTORY; | ||||
| 
 | ||||
|                 try { | ||||
|                     item = DbManager.ItemQueries.ADD_ITEM(item); | ||||
|                     itemWorked = true; | ||||
|                 } catch (Exception e) { | ||||
|                     Logger.error(e); | ||||
|                 } | ||||
|                 if (itemWorked) { | ||||
|                     itemMan.addItemToInventory(item); | ||||
|                     itemMan.updateInventory(); | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
|         Resource resourceType; | ||||
| 
 | ||||
|         if (ib.getUUID() == 7) | ||||
|             resourceType = Resource.GOLD; | ||||
|         else | ||||
|             resourceType = Resource.valueOf(ib.getName().toUpperCase()); | ||||
| 
 | ||||
|         if (transaction) | ||||
|             AddTransactionToWarehouse(warehouse, pc.getObjectType(), pc.getObjectUUID(), Enum.TransactionType.WITHDRAWL, resourceType, amount); | ||||
| 
 | ||||
|         return true; | ||||
|     } | ||||
| 
 | ||||
|     public static synchronized boolean loot(Warehouse warehouse, PlayerCharacter pc, ItemBase ib, int amount, boolean addToInventory) { | ||||
| 
 | ||||
|         if (pc == null) | ||||
|             return false; | ||||
| 
 | ||||
|         if (ib == null) | ||||
|             return false; | ||||
| 
 | ||||
|         if (warehouse.resources.get(ib) == null) | ||||
|             return false; | ||||
| 
 | ||||
|         if (amount <= 0) | ||||
|             return false; | ||||
| 
 | ||||
|         CharacterItemManager itemMan = pc.getCharItemManager(); | ||||
| 
 | ||||
|         if (itemMan == null) | ||||
|             return false; | ||||
| 
 | ||||
|         if (!itemMan.hasRoomInventory(ib.getWeight())) { | ||||
|             ChatManager.chatSystemInfo(pc, "You can not carry any more of that item."); | ||||
|             return false; | ||||
|         } | ||||
| 
 | ||||
|         int oldAmount = warehouse.resources.get(ib); | ||||
| 
 | ||||
|         if (oldAmount < amount) | ||||
|             return false; | ||||
| 
 | ||||
|         int newAmount = oldAmount - amount; | ||||
| 
 | ||||
|         warehouse.resources.put(ib, newAmount); | ||||
| 
 | ||||
|         if (addToInventory) { | ||||
|             if (ib.getUUID() == 7) { | ||||
| 
 | ||||
|                 itemMan.addGoldToInventory(amount, false); | ||||
|                 UpdateGoldMsg ugm = new UpdateGoldMsg(pc); | ||||
|                 ugm.configure(); | ||||
|                 Dispatch dispatch = Dispatch.borrow(pc, ugm); | ||||
|                 DispatchMessage.dispatchMsgDispatch(dispatch, Enum.DispatchChannel.SECONDARY); | ||||
| 
 | ||||
|                 itemMan.updateInventory(); | ||||
|             } else { | ||||
|                 boolean itemWorked = false; | ||||
|                 Item item = new Item(ib, pc.getObjectUUID(), Enum.OwnerType.PlayerCharacter, (byte) 0, (byte) 0, | ||||
|                         (short) 1, (short) 1, true, false, Enum.ItemContainerType.INVENTORY, (byte) 0, | ||||
|                         new ArrayList<>(), ""); | ||||
|                 item.setNumOfItems(amount); | ||||
|                 item.containerType = Enum.ItemContainerType.INVENTORY; | ||||
| 
 | ||||
|                 try { | ||||
|                     item = DbManager.ItemQueries.ADD_ITEM(item); | ||||
|                     itemWorked = true; | ||||
|                 } catch (Exception e) { | ||||
|                     Logger.error(e); | ||||
|                 } | ||||
|                 if (itemWorked) { | ||||
|                     itemMan.addItemToInventory(item); | ||||
|                     itemMan.updateInventory(); | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
| 
 | ||||
|         return true; | ||||
|     } | ||||
| 
 | ||||
|     public static boolean isEmpty(Warehouse warehouse) { | ||||
|         int amount = 0; | ||||
|         for (ItemBase ib : ItemBase.getResourceList()) { | ||||
|             if (amount > 0) | ||||
|                 return false; | ||||
|             amount += warehouse.resources.get(ib); | ||||
|         } | ||||
|         return true; | ||||
|     } | ||||
| 
 | ||||
|     public static void loadAllTransactions(Warehouse warehouse) { | ||||
|         warehouse.transactions = DbManager.WarehouseQueries.GET_TRANSACTIONS_FOR_WAREHOUSE(warehouse.buildingUID); | ||||
|     } | ||||
| 
 | ||||
|     public static void AddTransactionToWarehouse(Warehouse warehouse, Enum.GameObjectType targetType, int targetUUID, Enum.TransactionType transactionType, Resource resource, int amount) { | ||||
| 
 | ||||
| 
 | ||||
|         if (!DbManager.WarehouseQueries.CREATE_TRANSACTION(warehouse.buildingUID, targetType, targetUUID, transactionType, resource, amount, DateTime.now())) | ||||
|             return; | ||||
| 
 | ||||
|         Transaction transaction = new Transaction(warehouse.buildingUID, targetType, targetUUID, transactionType, resource, amount, DateTime.now()); | ||||
|         warehouse.transactions.add(transaction); | ||||
|     } | ||||
| 
 | ||||
|     public static boolean isAboveCap(Warehouse warehouse, ItemBase ib, int deposit) { | ||||
|         int newAmount = warehouse.resources.get(ib) + deposit; | ||||
|         return newAmount > getMaxResources().get(ib.getUUID()); | ||||
| 
 | ||||
|     } | ||||
| 
 | ||||
|     public static boolean isResourceLocked(Warehouse warehouse, ItemBase itemBase) { | ||||
| 
 | ||||
|         Enum.ResourceType resourceType; | ||||
| 
 | ||||
|         resourceType = Enum.ResourceType.resourceLookup.get(itemBase.getUUID()); | ||||
| 
 | ||||
|         return resourceType.elementOf(warehouse.lockedResourceTypes); | ||||
|     } | ||||
| } | ||||
					Loading…
					
					
				
		Reference in new issue