optimized

This commit is contained in:
2024-05-20 00:03:04 -05:00
parent bb28d38735
commit 40078df067
4 changed files with 486 additions and 788 deletions
+86 -160
View File
@@ -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) {