|
|
|
@ -9,7 +9,10 @@
@@ -9,7 +9,10 @@
|
|
|
|
|
|
|
|
|
|
package engine.objects; |
|
|
|
|
|
|
|
|
|
import engine.gameManager.*; |
|
|
|
|
import engine.gameManager.BuildingManager; |
|
|
|
|
import engine.gameManager.ConfigManager; |
|
|
|
|
import engine.gameManager.DbManager; |
|
|
|
|
import engine.gameManager.ItemManager; |
|
|
|
|
import engine.math.Vector3fImmutable; |
|
|
|
|
import engine.mbEnums; |
|
|
|
|
import engine.mbEnums.GameObjectType; |
|
|
|
@ -152,9 +155,7 @@ public class CharacterItemManager {
@@ -152,9 +155,7 @@ public class CharacterItemManager {
|
|
|
|
|
i.junk(); |
|
|
|
|
break; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
this.goldVault = this.account.vaultGold; |
|
|
|
|
|
|
|
|
|
//check all gold is created
|
|
|
|
@ -305,11 +306,9 @@ public class CharacterItemManager {
@@ -305,11 +306,9 @@ public class CharacterItemManager {
|
|
|
|
|
ErrorPopupMsg.sendErrorPopup((PlayerCharacter) this.absCharacter, 203); |
|
|
|
|
return false; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
break; |
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
return true; |
|
|
|
|
} |
|
|
|
@ -370,44 +369,6 @@ public class CharacterItemManager {
@@ -370,44 +369,6 @@ public class CharacterItemManager {
|
|
|
|
|
return success; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
public synchronized boolean tradeRequest(TradeRequestMsg msg) { |
|
|
|
|
|
|
|
|
|
PlayerCharacter source = (PlayerCharacter) this.getOwner(); |
|
|
|
|
PlayerCharacter target = PlayerCharacter.getFromCache(msg.getPlayerID()); |
|
|
|
|
Dispatch dispatch; |
|
|
|
|
|
|
|
|
|
if (!canTrade(source, target)) { |
|
|
|
|
ChatManager.chatSystemError(source, "Can't currently trade with target player"); |
|
|
|
|
return false; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// TODO uncomment this block after we determine when we
|
|
|
|
|
// setBankOpen(false) and setVaultOpen(false)
|
|
|
|
|
CharacterItemManager cim1 = source.charItemManager; |
|
|
|
|
CharacterItemManager cim2 = target.charItemManager; |
|
|
|
|
|
|
|
|
|
if (cim1 == null) |
|
|
|
|
return false; |
|
|
|
|
|
|
|
|
|
if (cim2 == null) |
|
|
|
|
return false; |
|
|
|
|
|
|
|
|
|
dispatch = Dispatch.borrow(target, msg); |
|
|
|
|
DispatchMessage.dispatchMsgDispatch(dispatch, mbEnums.DispatchChannel.SECONDARY); |
|
|
|
|
return true; |
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
public synchronized boolean invalidTradeRequest(InvalidTradeRequestMsg msg) { |
|
|
|
|
PlayerCharacter requester = PlayerCharacter.getFromCache(msg.getRequesterID()); |
|
|
|
|
Dispatch dispatch; |
|
|
|
|
|
|
|
|
|
dispatch = Dispatch.borrow(requester, msg); |
|
|
|
|
DispatchMessage.dispatchMsgDispatch(dispatch, mbEnums.DispatchChannel.SECONDARY); |
|
|
|
|
return true; |
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
public static synchronized boolean canTrade(PlayerCharacter playerA, PlayerCharacter playerB) { |
|
|
|
|
|
|
|
|
|
if (playerA == null || playerB == null) |
|
|
|
@ -449,6 +410,7 @@ public class CharacterItemManager {
@@ -449,6 +410,7 @@ public class CharacterItemManager {
|
|
|
|
|
|
|
|
|
|
if (this.getTradingWith().getPlayerCharacter() == null) |
|
|
|
|
return false; |
|
|
|
|
|
|
|
|
|
CharacterItemManager man2 = this.getTradingWith().getPlayerCharacter().charItemManager; |
|
|
|
|
Dispatch dispatch; |
|
|
|
|
|
|
|
|
@ -469,11 +431,10 @@ public class CharacterItemManager {
@@ -469,11 +431,10 @@ public class CharacterItemManager {
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
public synchronized boolean closeTradeWindow(CloseTradeWindowMsg msg, boolean sourceTrade) { |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Dispatch dispatch; |
|
|
|
|
|
|
|
|
|
PlayerCharacter source = (PlayerCharacter) this.getOwner(); |
|
|
|
|
|
|
|
|
|
if (source == null) |
|
|
|
|
return false; |
|
|
|
|
|
|
|
|
@ -501,11 +462,8 @@ public class CharacterItemManager {
@@ -501,11 +462,8 @@ public class CharacterItemManager {
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
sourceItemMan.endTrade(); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
cc2.getPlayerCharacter().charItemManager.closeTradeWindow(msg, false); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return true; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
@ -697,17 +655,19 @@ public class CharacterItemManager {
@@ -697,17 +655,19 @@ public class CharacterItemManager {
|
|
|
|
|
// add to Bank
|
|
|
|
|
this.bank.add(i); |
|
|
|
|
i.addToCache(); |
|
|
|
|
|
|
|
|
|
calculateWeights(); |
|
|
|
|
|
|
|
|
|
return true; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
public synchronized boolean moveGoldToBank(Item from, int amt) { |
|
|
|
|
|
|
|
|
|
if (from == null) |
|
|
|
|
return false; |
|
|
|
|
|
|
|
|
|
if (from.getNumOfItems() - amt < 0) |
|
|
|
|
return false; |
|
|
|
|
|
|
|
|
|
if (this.goldBank.getNumOfItems() + amt > MBServerStatics.BANK_GOLD_LIMIT) { |
|
|
|
|
if (this.absCharacter.getObjectType() == GameObjectType.PlayerCharacter) { |
|
|
|
|
PlayerCharacter pc = (PlayerCharacter) this.absCharacter; |
|
|
|
@ -719,26 +679,33 @@ public class CharacterItemManager {
@@ -719,26 +679,33 @@ public class CharacterItemManager {
|
|
|
|
|
|
|
|
|
|
if (!DbManager.ItemQueries.MOVE_GOLD(from, this.getGoldBank(), amt)) |
|
|
|
|
return false; |
|
|
|
|
|
|
|
|
|
from.setNumOfItems(from.getNumOfItems() - amt); |
|
|
|
|
this.goldBank.setNumOfItems(this.goldBank.getNumOfItems() + amt); |
|
|
|
|
return true; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
public synchronized boolean moveGoldToVault(Item from, int amt) { |
|
|
|
|
|
|
|
|
|
if (from == null) |
|
|
|
|
return false; |
|
|
|
|
|
|
|
|
|
if (from.getNumOfItems() - amt < 0) |
|
|
|
|
return false; |
|
|
|
|
|
|
|
|
|
if (!DbManager.ItemQueries.MOVE_GOLD(from, this.account.vaultGold, amt)) |
|
|
|
|
return false; |
|
|
|
|
|
|
|
|
|
from.setNumOfItems(from.getNumOfItems() - amt); |
|
|
|
|
this.account.vaultGold.setNumOfItems(this.goldVault.getNumOfItems() + amt); |
|
|
|
|
return true; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
public synchronized boolean moveGoldToInventory(Item from, int amt) { |
|
|
|
|
|
|
|
|
|
if (from == null) |
|
|
|
|
return false; |
|
|
|
|
|
|
|
|
|
if (from.getNumOfItems() - amt < 0 || amt < 1) |
|
|
|
|
return false; |
|
|
|
|
|
|
|
|
@ -841,7 +808,6 @@ public class CharacterItemManager {
@@ -841,7 +808,6 @@ public class CharacterItemManager {
|
|
|
|
|
|
|
|
|
|
// add to Vault
|
|
|
|
|
i.addToCache(); |
|
|
|
|
|
|
|
|
|
calculateWeights(); |
|
|
|
|
|
|
|
|
|
return true; |
|
|
|
@ -893,20 +859,12 @@ public class CharacterItemManager {
@@ -893,20 +859,12 @@ public class CharacterItemManager {
|
|
|
|
|
this.inventory.add(i); |
|
|
|
|
this.itemIDtoType.put(i.getObjectUUID(), i.getObjectType().ordinal()); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (i.template != null) |
|
|
|
|
this.inventoryWeight += i.template.item_wt; |
|
|
|
|
|
|
|
|
|
return true; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
//called for adding gold of a specified amount
|
|
|
|
|
public synchronized boolean addItemToInventory(Item i, int amount) { |
|
|
|
|
if (i.template.item_type.equals(ItemType.GOLD)) |
|
|
|
|
return DbManager.ItemQueries.UPDATE_GOLD(this.getGoldInventory(), this.goldInventory.getNumOfItems() + amount); |
|
|
|
|
return false; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
public boolean equipItem(Item i, mbEnums.EquipSlotType slot) { |
|
|
|
|
|
|
|
|
|
synchronized (this) { |
|
|
|
@ -955,6 +913,7 @@ public class CharacterItemManager {
@@ -955,6 +913,7 @@ public class CharacterItemManager {
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
//Apply Bonuses and update player
|
|
|
|
|
|
|
|
|
|
if (this.absCharacter != null) { |
|
|
|
|
this.absCharacter.applyBonuses(); |
|
|
|
|
if (this.absCharacter.getObjectType().equals(GameObjectType.PlayerCharacter)) |
|
|
|
@ -971,7 +930,6 @@ public class CharacterItemManager {
@@ -971,7 +930,6 @@ public class CharacterItemManager {
|
|
|
|
|
if (cost <= 0 || (gold.getNumOfItems() - cost) < 0) |
|
|
|
|
return false; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (this.getOwner() != null && this.getOwner().getObjectType().equals(GameObjectType.PlayerCharacter)) { |
|
|
|
|
if (this.goldTradingAmount > 0) { |
|
|
|
|
ErrorPopupMsg.sendErrorPopup((PlayerCharacter) this.getOwner(), 195); |
|
|
|
@ -982,25 +940,20 @@ public class CharacterItemManager {
@@ -982,25 +940,20 @@ public class CharacterItemManager {
|
|
|
|
|
// Create gold from screatch instead of building strongbox
|
|
|
|
|
// if the NPC is not slotted.
|
|
|
|
|
|
|
|
|
|
if (vendorBuilding == null) { |
|
|
|
|
|
|
|
|
|
if (vendorBuilding == null) |
|
|
|
|
return this.modifyInventoryGold(-cost); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (vendorBuilding.getStrongboxValue() + cost > vendorBuilding.getMaxGold()) { |
|
|
|
|
|
|
|
|
|
if (this.absCharacter.getObjectType() == GameObjectType.PlayerCharacter) { |
|
|
|
|
PlayerCharacter pc = (PlayerCharacter) this.absCharacter; |
|
|
|
|
if (pc.getClientConnection() != null) |
|
|
|
|
ErrorPopupMsg.sendErrorPopup(pc, 206); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
return false; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Update strongbox and inventory gold
|
|
|
|
|
|
|
|
|
|
if (!this.modifyInventoryGold(-cost)) |
|
|
|
|
return false; |
|
|
|
|
|
|
|
|
@ -1026,7 +979,7 @@ public class CharacterItemManager {
@@ -1026,7 +979,7 @@ public class CharacterItemManager {
|
|
|
|
|
//Used for selling items to NPC
|
|
|
|
|
public synchronized boolean sellToNPC(Building building, int cost, Item item) { |
|
|
|
|
|
|
|
|
|
// Create gold from screatch instead of building strongbox
|
|
|
|
|
// Create gold from scratch instead of building strongbox
|
|
|
|
|
// if the NPC is not slotted.
|
|
|
|
|
|
|
|
|
|
if (this.getGoldInventory().getNumOfItems() + cost < 0) |
|
|
|
@ -1063,11 +1016,6 @@ public class CharacterItemManager {
@@ -1063,11 +1016,6 @@ public class CharacterItemManager {
|
|
|
|
|
return this.modifyInventoryGold(cost); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* This sells an item to an npc |
|
|
|
|
* |
|
|
|
|
* @return True on success |
|
|
|
|
*/ |
|
|
|
|
public synchronized boolean sellToNPC(Item itemToSell, NPC npc) { |
|
|
|
|
|
|
|
|
|
CharacterItemManager itemMan; |
|
|
|
@ -1127,12 +1075,6 @@ public class CharacterItemManager {
@@ -1127,12 +1075,6 @@ public class CharacterItemManager {
|
|
|
|
|
return true; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* This buys an item from an npc |
|
|
|
|
* Handles transfer of item. |
|
|
|
|
* |
|
|
|
|
* @return True on success |
|
|
|
|
*/ |
|
|
|
|
public synchronized boolean buyFromNPC(Item purchasedItem, NPC npc) { |
|
|
|
|
|
|
|
|
|
CharacterItemManager itemMan; |
|
|
|
@ -1162,45 +1104,27 @@ public class CharacterItemManager {
@@ -1162,45 +1104,27 @@ public class CharacterItemManager {
|
|
|
|
|
|
|
|
|
|
// attempt to transfer item in db
|
|
|
|
|
|
|
|
|
|
if (purchasedItem.getObjectType() == GameObjectType.MobLoot) { |
|
|
|
|
|
|
|
|
|
Item newItem = ((MobLoot) purchasedItem).promoteToItem((PlayerCharacter) this.absCharacter); |
|
|
|
|
if (newItem == null) |
|
|
|
|
return false; |
|
|
|
|
|
|
|
|
|
if (!itemMan.removeItemFromInventory(purchasedItem)) |
|
|
|
|
return false; |
|
|
|
|
|
|
|
|
|
if (!addItemToInventory(newItem)) |
|
|
|
|
return false; |
|
|
|
|
//Item was created and still a mobloot item, remove from npc production list in db.
|
|
|
|
|
|
|
|
|
|
DbManager.NPCQueries.REMOVE_FROM_PRODUCTION_LIST(purchasedItem.getObjectUUID(), npc.getObjectUUID()); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
} else { |
|
|
|
|
if (!purchasedItem.moveItemToInventory((PlayerCharacter) this.absCharacter)) |
|
|
|
|
return false; |
|
|
|
|
|
|
|
|
|
// Reset value
|
|
|
|
|
if (!purchasedItem.moveItemToInventory((PlayerCharacter) this.absCharacter)) |
|
|
|
|
return false; |
|
|
|
|
|
|
|
|
|
purchasedItem.value = (int) (purchasedItem.template.item_value * (purchasedItem.combat_health_current / purchasedItem.template.combat_health_full)); |
|
|
|
|
// Reset value
|
|
|
|
|
|
|
|
|
|
// db transfer successfully, remove from this character
|
|
|
|
|
// skip this check if this is a mobLoot item (which is not in any inventory)
|
|
|
|
|
if (!itemMan.removeItemFromInventory(purchasedItem)) |
|
|
|
|
return false; |
|
|
|
|
purchasedItem.value = (int) (purchasedItem.template.item_value * (purchasedItem.combat_health_current / purchasedItem.template.combat_health_full)); |
|
|
|
|
|
|
|
|
|
// add item to looter.
|
|
|
|
|
// db transfer successfully, remove from this character
|
|
|
|
|
// skip this check if this is a mobLoot item (which is not in any inventory)
|
|
|
|
|
if (!itemMan.removeItemFromInventory(purchasedItem)) |
|
|
|
|
return false; |
|
|
|
|
|
|
|
|
|
if (!addItemToInventory(purchasedItem)) |
|
|
|
|
return false; |
|
|
|
|
} |
|
|
|
|
// add item to looter.
|
|
|
|
|
|
|
|
|
|
if (!addItemToInventory(purchasedItem)) |
|
|
|
|
return false; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// calculate new weights
|
|
|
|
|
|
|
|
|
|
calculateInventoryWeight(); |
|
|
|
|
itemMan.calculateInventoryWeight(); |
|
|
|
|
return true; |
|
|
|
|