forked from MagicBane/Server
optimized
This commit is contained in:
@@ -128,38 +128,33 @@ public class Warehouse extends AbstractWorldObject {
|
||||
}
|
||||
|
||||
public static void warehouseDeposit(MerchantMsg msg, PlayerCharacter player, NPC npc, ClientConnection origin) {
|
||||
|
||||
Building warehouseBuilding;
|
||||
Warehouse warehouse;
|
||||
int depositAmount;
|
||||
Dispatch dispatch;
|
||||
|
||||
Item resource = Item.getFromCache(msg.getItemID());
|
||||
|
||||
if (resource == null)
|
||||
if (resource == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
depositAmount = msg.getAmount();
|
||||
int depositAmount = msg.getAmount();
|
||||
CharacterItemManager itemMan = player.getCharItemManager();
|
||||
|
||||
if (itemMan.doesCharOwnThisItem(resource.getObjectUUID()) == false)
|
||||
if (!itemMan.doesCharOwnThisItem(resource.getObjectUUID())) {
|
||||
return;
|
||||
}
|
||||
|
||||
warehouseBuilding = npc.getBuilding();
|
||||
|
||||
if (warehouseBuilding == null)
|
||||
Building warehouseBuilding = npc.getBuilding();
|
||||
if (warehouseBuilding == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
warehouse = warehouseByBuildingUUID.get(warehouseBuilding.getObjectUUID());
|
||||
|
||||
if (warehouse == null)
|
||||
Warehouse warehouse = warehouseByBuildingUUID.get(warehouseBuilding.getObjectUUID());
|
||||
if (warehouse == null) {
|
||||
return;
|
||||
|
||||
ItemBase ib = resource.getItemBase();
|
||||
}
|
||||
|
||||
if (!warehouse.deposit(player, resource, depositAmount, true, true)) {
|
||||
// ChatManager.chatGuildError(player, "Failed to deposit " + ib.getName() +".");
|
||||
// Logger.debug("OpenWindow", player.getName() + " Failed to deposit Item with ID " + resource.getObjectUUID() + " from Warehouse With ID = " + warehouseBuilding.getObjectUUID());
|
||||
// Optional: Uncomment these lines for debugging/logging purposes.
|
||||
// ChatManager.chatGuildError(player, "Failed to deposit " + resource.getItemBase().getName() + ".");
|
||||
// Logger.debug("OpenWindow", player.getName() + " Failed to deposit Item with ID " + resource.getObjectUUID() + " from Warehouse With ID = " + warehouseBuilding.getObjectUUID());
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -167,7 +162,7 @@ public class Warehouse extends AbstractWorldObject {
|
||||
vrm.setGuild(player.getGuild());
|
||||
vrm.setWarehouseBuilding(warehouseBuilding);
|
||||
vrm.configure();
|
||||
dispatch = Dispatch.borrow(player, vrm);
|
||||
Dispatch dispatch = Dispatch.borrow(player, vrm);
|
||||
DispatchMessage.dispatchMsgDispatch(dispatch, Enum.DispatchChannel.SECONDARY);
|
||||
}
|
||||
|
||||
@@ -294,174 +289,105 @@ public class Warehouse extends AbstractWorldObject {
|
||||
}
|
||||
|
||||
public synchronized boolean deposit(PlayerCharacter pc, Item resource, int amount, boolean removeFromInventory, boolean transaction) {
|
||||
|
||||
ClientConnection origin = pc.getClientConnection();
|
||||
if (origin == null)
|
||||
return false;
|
||||
|
||||
if (amount < 0) {
|
||||
Logger.info(pc.getFirstName() + " Attempting to Dupe!!!!!!");
|
||||
if (origin == null || amount < 0 || resource == null) {
|
||||
if (amount < 0) Logger.info(pc.getFirstName() + " Attempting to Dupe!!!!!!");
|
||||
return false;
|
||||
}
|
||||
|
||||
ItemBase ib = resource.getItemBase();
|
||||
if (ib == null) return false;
|
||||
|
||||
if (ib == null)
|
||||
return false;
|
||||
|
||||
if (this.resources.get(ib) == null)
|
||||
return false;
|
||||
Integer currentResourceAmount = this.resources.get(ib);
|
||||
if (currentResourceAmount == null) return false;
|
||||
|
||||
CharacterItemManager itemMan = pc.getCharItemManager();
|
||||
|
||||
if (itemMan == null)
|
||||
return false;
|
||||
|
||||
if (itemMan == null || !itemMan.doesCharOwnThisItem(resource.getObjectUUID())) return false;
|
||||
|
||||
if (itemMan.getGoldTrading() > 0) {
|
||||
ErrorPopupMsg.sendErrorPopup(pc, 195);
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!resource.validForInventory(origin, pc, itemMan) || resource.getNumOfItems() < amount) 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 = resources.get(ib);
|
||||
|
||||
int newAmount = oldAmount + amount;
|
||||
|
||||
if (newAmount > Warehouse.getMaxResources().get(ib.getUUID())) {
|
||||
//ChatManager.chatSystemInfo(pc, "The Warehouse is at it's maximum for this type of resource.");
|
||||
int newAmount = currentResourceAmount + amount;
|
||||
Integer maxResourceAmount = Warehouse.getMaxResources().get(ib.getUUID());
|
||||
if (newAmount > (maxResourceAmount != null ? maxResourceAmount : Integer.MAX_VALUE)) {
|
||||
// ChatManager.chatSystemInfo(pc, "The Warehouse is at its 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();
|
||||
}
|
||||
if (!removeFromInventory(itemMan, ib, amount, pc)) return false;
|
||||
}
|
||||
|
||||
itemMan.updateInventory();
|
||||
int itemID = ib.getUUID();
|
||||
boolean worked = false;
|
||||
switch (itemID) {
|
||||
case 7:
|
||||
worked = DbManager.WarehouseQueries.updateGold(this, newAmount);
|
||||
break;
|
||||
case 1580000:
|
||||
worked = DbManager.WarehouseQueries.updateStone(this, newAmount);
|
||||
break;
|
||||
case 1580001:
|
||||
worked = DbManager.WarehouseQueries.updateTruesteel(this, newAmount);
|
||||
break;
|
||||
case 1580002:
|
||||
worked = DbManager.WarehouseQueries.updateIron(this, newAmount);
|
||||
break;
|
||||
case 1580003:
|
||||
worked = DbManager.WarehouseQueries.updateAdamant(this, newAmount);
|
||||
break;
|
||||
case 1580004:
|
||||
worked = DbManager.WarehouseQueries.updateLumber(this, newAmount);
|
||||
break;
|
||||
case 1580005:
|
||||
worked = DbManager.WarehouseQueries.updateOak(this, newAmount);
|
||||
break;
|
||||
case 1580006:
|
||||
worked = DbManager.WarehouseQueries.updateBronzewood(this, newAmount);
|
||||
break;
|
||||
case 1580007:
|
||||
worked = DbManager.WarehouseQueries.updateMandrake(this, newAmount);
|
||||
break;
|
||||
case 1580008:
|
||||
worked = DbManager.WarehouseQueries.updateCoal(this, newAmount);
|
||||
break;
|
||||
case 1580009:
|
||||
worked = DbManager.WarehouseQueries.updateAgate(this, newAmount);
|
||||
break;
|
||||
case 1580010:
|
||||
worked = DbManager.WarehouseQueries.updateDiamond(this, newAmount);
|
||||
break;
|
||||
case 1580011:
|
||||
worked = DbManager.WarehouseQueries.updateOnyx(this, newAmount);
|
||||
break;
|
||||
case 1580012:
|
||||
worked = DbManager.WarehouseQueries.updateAzoth(this, newAmount);
|
||||
break;
|
||||
case 1580013:
|
||||
worked = DbManager.WarehouseQueries.updateOrichalk(this, newAmount);
|
||||
break;
|
||||
case 1580014:
|
||||
worked = DbManager.WarehouseQueries.updateAntimony(this, newAmount);
|
||||
break;
|
||||
case 1580015:
|
||||
worked = DbManager.WarehouseQueries.updateSulfur(this, newAmount);
|
||||
break;
|
||||
case 1580016:
|
||||
worked = DbManager.WarehouseQueries.updateQuicksilver(this, newAmount);
|
||||
break;
|
||||
case 1580017:
|
||||
worked = DbManager.WarehouseQueries.updateGalvor(this, newAmount);
|
||||
break;
|
||||
case 1580018:
|
||||
worked = DbManager.WarehouseQueries.updateWormwood(this, newAmount);
|
||||
break;
|
||||
case 1580019:
|
||||
worked = DbManager.WarehouseQueries.updateObsidian(this, newAmount);
|
||||
break;
|
||||
case 1580020:
|
||||
worked = DbManager.WarehouseQueries.updateBloodstone(this, newAmount);
|
||||
break;
|
||||
case 1580021:
|
||||
worked = DbManager.WarehouseQueries.updateMithril(this, newAmount);
|
||||
break;
|
||||
}
|
||||
if (!updateDatabase(ib.getUUID(), newAmount)) return false;
|
||||
|
||||
if (!worked)
|
||||
return false;
|
||||
this.resources.put(ib, newAmount);
|
||||
|
||||
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)
|
||||
if (transaction) {
|
||||
Resource resourceType = getResourceType(resource);
|
||||
this.AddTransactionToWarehouse(pc.getObjectType(), pc.getObjectUUID(), TransactionType.DEPOSIT, resourceType, amount);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
private boolean removeFromInventory(CharacterItemManager itemMan, ItemBase ib, int amount, PlayerCharacter pc) {
|
||||
if (ib.getUUID() == 7) {
|
||||
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);
|
||||
} else {
|
||||
Item resource = itemMan.getItemByUUID(ib.getUUID());
|
||||
if (resource == null) return false;
|
||||
itemMan.delete(resource);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
private boolean updateDatabase(int itemID, int newAmount) {
|
||||
switch (itemID) {
|
||||
case 7: return DbManager.WarehouseQueries.updateGold(this, newAmount);
|
||||
case 1580000: return DbManager.WarehouseQueries.updateStone(this, newAmount);
|
||||
case 1580001: return DbManager.WarehouseQueries.updateTruesteel(this, newAmount);
|
||||
case 1580002: return DbManager.WarehouseQueries.updateIron(this, newAmount);
|
||||
case 1580003: return DbManager.WarehouseQueries.updateAdamant(this, newAmount);
|
||||
case 1580004: return DbManager.WarehouseQueries.updateLumber(this, newAmount);
|
||||
case 1580005: return DbManager.WarehouseQueries.updateOak(this, newAmount);
|
||||
case 1580006: return DbManager.WarehouseQueries.updateBronzewood(this, newAmount);
|
||||
case 1580007: return DbManager.WarehouseQueries.updateMandrake(this, newAmount);
|
||||
case 1580008: return DbManager.WarehouseQueries.updateCoal(this, newAmount);
|
||||
case 1580009: return DbManager.WarehouseQueries.updateAgate(this, newAmount);
|
||||
case 1580010: return DbManager.WarehouseQueries.updateDiamond(this, newAmount);
|
||||
case 1580011: return DbManager.WarehouseQueries.updateOnyx(this, newAmount);
|
||||
case 1580012: return DbManager.WarehouseQueries.updateAzoth(this, newAmount);
|
||||
case 1580013: return DbManager.WarehouseQueries.updateOrichalk(this, newAmount);
|
||||
case 1580014: return DbManager.WarehouseQueries.updateAntimony(this, newAmount);
|
||||
case 1580015: return DbManager.WarehouseQueries.updateSulfur(this, newAmount);
|
||||
case 1580016: return DbManager.WarehouseQueries.updateQuicksilver(this, newAmount);
|
||||
case 1580017: return DbManager.WarehouseQueries.updateGalvor(this, newAmount);
|
||||
case 1580018: return DbManager.WarehouseQueries.updateWormwood(this, newAmount);
|
||||
case 1580019: return DbManager.WarehouseQueries.updateObsidian(this, newAmount);
|
||||
case 1580020: return DbManager.WarehouseQueries.updateBloodstone(this, newAmount);
|
||||
case 1580021: return DbManager.WarehouseQueries.updateMithril(this, newAmount);
|
||||
default: return false;
|
||||
}
|
||||
}
|
||||
|
||||
private Resource getResourceType(Item resource) {
|
||||
return resource.getItemBase().getType().equals(engine.Enum.ItemType.GOLD)
|
||||
? Resource.GOLD
|
||||
: Resource.valueOf(resource.getItemBase().getName().toUpperCase());
|
||||
}
|
||||
|
||||
//for mine deposit
|
||||
public synchronized boolean depositFromMine(Mine mine, ItemBase resource, int amount) {
|
||||
|
||||
|
||||
Reference in New Issue
Block a user