forked from MagicBane/Server
FatBoy-DOTC
11 months ago
18 changed files with 931 additions and 969 deletions
@ -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