forked from MagicBane/Server
Project cleanup pre merge.
This commit is contained in:
@@ -34,488 +34,478 @@ import java.util.HashMap;
|
||||
*/
|
||||
public class ItemProductionMsgHandler extends AbstractClientMsgHandler {
|
||||
|
||||
private static final int ACTION_PRODUCE = 1;
|
||||
private static final int ACTION_JUNK = 2;
|
||||
private static final int ACTION_RECYCLE = 3;
|
||||
private static final int ACTION_COMPLETE = 4;
|
||||
private static final int ACTION_DEPOSIT = 6;
|
||||
private static final int ACTION_SETPRICE = 5;
|
||||
private static final int ACTION_TAKE = 7;
|
||||
private static final int ACTION_CONFIRM_SETPRICE = 9; // Unsure. Sent by client
|
||||
private static final int ACTION_CONFIRM_DEPOSIT = 10; // Unsure. Sent by client
|
||||
private static final int ACTION_CONFIRM_TAKE = 11; // Unsure. Sent by client
|
||||
private static final int ACTION_PRODUCE = 1;
|
||||
private static final int ACTION_JUNK = 2;
|
||||
private static final int ACTION_RECYCLE = 3;
|
||||
private static final int ACTION_COMPLETE = 4;
|
||||
private static final int ACTION_DEPOSIT = 6;
|
||||
private static final int ACTION_SETPRICE = 5;
|
||||
private static final int ACTION_TAKE = 7;
|
||||
private static final int ACTION_CONFIRM_SETPRICE = 9; // Unsure. Sent by client
|
||||
private static final int ACTION_CONFIRM_DEPOSIT = 10; // Unsure. Sent by client
|
||||
private static final int ACTION_CONFIRM_TAKE = 11; // Unsure. Sent by client
|
||||
|
||||
public ItemProductionMsgHandler() {
|
||||
super(ItemProductionMsg.class);
|
||||
}
|
||||
public ItemProductionMsgHandler() {
|
||||
super(ItemProductionMsg.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected boolean _handleNetMsg(ClientNetMsg baseMsg, ClientConnection origin) throws MsgSendException {
|
||||
private static void setItemPrice(int itemType, int itemUUID, int itemPrice, NPC vendor, ClientConnection origin) {
|
||||
|
||||
// Member variable declaration
|
||||
|
||||
PlayerCharacter player;
|
||||
NPC vendorNPC;
|
||||
ItemProductionMsg msg;
|
||||
Dispatch dispatch;
|
||||
Item targetItem;
|
||||
ItemProductionMsg outMsg;
|
||||
Dispatch dispatch;
|
||||
|
||||
// Member variable assignment
|
||||
PlayerCharacter player = origin.getPlayerCharacter();
|
||||
|
||||
msg = (ItemProductionMsg) baseMsg;
|
||||
player = origin.getPlayerCharacter();
|
||||
if (player == null)
|
||||
return;
|
||||
|
||||
if (player == null)
|
||||
return true;
|
||||
|
||||
// Grab reference to vendor we are interacting with
|
||||
|
||||
vendorNPC = (NPC) DbManager.getObject(engine.Enum.GameObjectType.NPC, msg.getNpcUUID());
|
||||
|
||||
// Oops?
|
||||
|
||||
if (vendorNPC == null)
|
||||
return true;
|
||||
|
||||
// Process Request
|
||||
|
||||
switch (msg.getActionType()) {
|
||||
|
||||
case ACTION_PRODUCE:
|
||||
boolean isRandom = false;
|
||||
if (msg.getUnknown03() != 0 && msg.getpToken() == 0 && msg.getsToken() == 0)
|
||||
isRandom = true;
|
||||
//Create Multiple Item Function.. Fill all empty slots
|
||||
if (msg.isMultiple()){
|
||||
int emptySlots = vendorNPC.getRank() - vendorNPC.getRolling().size();
|
||||
if (emptySlots > 0){
|
||||
for (int i = 0;i<emptySlots;i++){
|
||||
vendorNPC.produceItem(player.getObjectUUID(),msg.getTotalProduction(),isRandom,msg.getpToken(),msg.getsToken(),msg.getName(),msg.getItemUUID());
|
||||
}
|
||||
}
|
||||
}else
|
||||
vendorNPC.produceItem(player.getObjectUUID(),msg.getTotalProduction(),isRandom,msg.getpToken(),msg.getsToken(),msg.getName(),msg.getItemUUID());
|
||||
break;
|
||||
case ACTION_JUNK:
|
||||
junkItem(msg.getItemUUID(), vendorNPC, origin);
|
||||
break;
|
||||
case ACTION_RECYCLE:
|
||||
recycleItem(msg.getItemIDtoTypeMap(), vendorNPC, origin);
|
||||
msg.setActionType(7);
|
||||
dispatch = Dispatch.borrow(player, msg);
|
||||
DispatchMessage.dispatchMsgDispatch(dispatch, Enum.DispatchChannel.SECONDARY);
|
||||
break;
|
||||
case ACTION_COMPLETE:
|
||||
|
||||
vendorNPC.completeItem(msg.getItemUUID());
|
||||
|
||||
// ManageNPCMsg outMsg = new ManageNPCMsg(vendorNPC);
|
||||
// outMsg.setMessageType(1);
|
||||
//
|
||||
// dispatch = Dispatch.borrow(player, outMsg);
|
||||
// DispatchMessage.dispatchMsgDispatch(dispatch, Enum.DispatchChannel.SECONDARY);
|
||||
if (itemType == GameObjectType.Item.ordinal())
|
||||
targetItem = Item.getFromCache(itemUUID);
|
||||
else if (itemType == GameObjectType.MobLoot.ordinal())
|
||||
targetItem = MobLoot.getFromCache(itemUUID);
|
||||
else
|
||||
targetItem = null;
|
||||
|
||||
|
||||
if (targetItem == null)
|
||||
return;
|
||||
|
||||
if (targetItem.getObjectType() == GameObjectType.Item) {
|
||||
if (!DbManager.ItemQueries.UPDATE_VALUE(targetItem, itemPrice)) {
|
||||
ChatManager.chatInfoError(origin.getPlayerCharacter(), "Failed to set price! Contact CCR For help.");
|
||||
return;
|
||||
}
|
||||
targetItem.setValue(itemPrice);
|
||||
outMsg = new ItemProductionMsg(vendor.getBuilding(), vendor, targetItem, ACTION_DEPOSIT, true);
|
||||
dispatch = Dispatch.borrow(player, outMsg);
|
||||
DispatchMessage.dispatchMsgDispatch(dispatch, Enum.DispatchChannel.SECONDARY);
|
||||
|
||||
outMsg = new ItemProductionMsg(vendor.getBuilding(), vendor, targetItem, ACTION_SETPRICE, true);
|
||||
dispatch = Dispatch.borrow(player, outMsg);
|
||||
DispatchMessage.dispatchMsgDispatch(dispatch, Enum.DispatchChannel.SECONDARY);
|
||||
} else if (targetItem.getObjectType() == GameObjectType.MobLoot) {
|
||||
MobLoot mobLoot = (MobLoot) targetItem;
|
||||
if (!DbManager.NPCQueries.UPDATE_ITEM_PRICE(mobLoot.getObjectUUID(), vendor.getObjectUUID(), itemPrice)) {
|
||||
ChatManager.chatInfoError(origin.getPlayerCharacter(), "Failed to set price! Contact CCR For help.");
|
||||
return;
|
||||
}
|
||||
targetItem.setValue(itemPrice);
|
||||
outMsg = new ItemProductionMsg(vendor.getBuilding(), vendor, targetItem, ACTION_DEPOSIT, true);
|
||||
dispatch = Dispatch.borrow(player, outMsg);
|
||||
DispatchMessage.dispatchMsgDispatch(dispatch, Enum.DispatchChannel.SECONDARY);
|
||||
|
||||
outMsg = new ItemProductionMsg(vendor.getBuilding(), vendor, targetItem, ACTION_SETPRICE, true);
|
||||
dispatch = Dispatch.borrow(player, outMsg);
|
||||
DispatchMessage.dispatchMsgDispatch(dispatch, Enum.DispatchChannel.SECONDARY);
|
||||
}
|
||||
|
||||
break;
|
||||
case ACTION_DEPOSIT:
|
||||
depositItem(msg.getItemUUID(), vendorNPC, origin);
|
||||
break;
|
||||
case ACTION_SETPRICE:
|
||||
setItemPrice(msg.getItemType(),msg.getItemUUID(), msg.getItemPrice(), vendorNPC, origin);
|
||||
break;
|
||||
case ACTION_TAKE:
|
||||
takeItem(msg.getItemIDtoTypeMap(), vendorNPC, origin);
|
||||
dispatch = Dispatch.borrow(player, msg);
|
||||
DispatchMessage.dispatchMsgDispatch(dispatch, Enum.DispatchChannel.SECONDARY);
|
||||
break;
|
||||
// Set item's price
|
||||
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
// Method sets the price on an item in the vendor inventory
|
||||
}
|
||||
|
||||
private static void setItemPrice(int itemType, int itemUUID, int itemPrice, NPC vendor, ClientConnection origin) {
|
||||
// Method sets the price on an item in the vendor inventory
|
||||
|
||||
Item targetItem;
|
||||
ItemProductionMsg outMsg;
|
||||
Dispatch dispatch;
|
||||
private static void depositItem(int itemUUID, NPC vendor, ClientConnection origin) {
|
||||
|
||||
PlayerCharacter player = origin.getPlayerCharacter();
|
||||
Item targetItem;
|
||||
ItemProductionMsg outMsg;
|
||||
CharacterItemManager itemMan;
|
||||
Dispatch dispatch;
|
||||
|
||||
if (player == null)
|
||||
return;
|
||||
PlayerCharacter player = origin.getPlayerCharacter();
|
||||
|
||||
if (itemType == GameObjectType.Item.ordinal())
|
||||
targetItem = Item.getFromCache(itemUUID);
|
||||
else if (itemType == GameObjectType.MobLoot.ordinal())
|
||||
targetItem = MobLoot.getFromCache(itemUUID);
|
||||
else
|
||||
targetItem = null;
|
||||
if (player == null)
|
||||
return;
|
||||
|
||||
if (origin.sellLock.tryLock()) {
|
||||
try {
|
||||
targetItem = Item.getFromCache(itemUUID);
|
||||
|
||||
if (targetItem == null)
|
||||
return;
|
||||
if (targetItem == null)
|
||||
return;
|
||||
|
||||
if (targetItem.getObjectType() == GameObjectType.Item){
|
||||
if (!DbManager.ItemQueries.UPDATE_VALUE(targetItem, itemPrice)) {
|
||||
ChatManager.chatInfoError(origin.getPlayerCharacter(), "Failed to set price! Contact CCR For help.");
|
||||
return;
|
||||
}
|
||||
targetItem.setValue(itemPrice);
|
||||
outMsg = new ItemProductionMsg(vendor.getBuilding(), vendor, targetItem, ACTION_DEPOSIT, true);
|
||||
dispatch = Dispatch.borrow(player, outMsg);
|
||||
DispatchMessage.dispatchMsgDispatch(dispatch, Enum.DispatchChannel.SECONDARY);
|
||||
if (targetItem.getItemBase().getType() == ItemType.GOLD)
|
||||
return;
|
||||
|
||||
outMsg = new ItemProductionMsg(vendor.getBuilding(), vendor, targetItem, ACTION_SETPRICE, true);
|
||||
dispatch = Dispatch.borrow(player, outMsg);
|
||||
DispatchMessage.dispatchMsgDispatch(dispatch, Enum.DispatchChannel.SECONDARY);
|
||||
}else if (targetItem.getObjectType() == GameObjectType.MobLoot){
|
||||
MobLoot mobLoot = (MobLoot)targetItem;
|
||||
if (!DbManager.NPCQueries.UPDATE_ITEM_PRICE(mobLoot.getObjectUUID(), vendor.getObjectUUID(), itemPrice)) {
|
||||
ChatManager.chatInfoError(origin.getPlayerCharacter(), "Failed to set price! Contact CCR For help.");
|
||||
return;
|
||||
}
|
||||
targetItem.setValue(itemPrice);
|
||||
outMsg = new ItemProductionMsg(vendor.getBuilding(), vendor, targetItem, ACTION_DEPOSIT, true);
|
||||
dispatch = Dispatch.borrow(player, outMsg);
|
||||
DispatchMessage.dispatchMsgDispatch(dispatch, Enum.DispatchChannel.SECONDARY);
|
||||
if (!vendor.getCharItemManager().hasRoomInventory(targetItem.getItemBase().getWeight())) {
|
||||
|
||||
outMsg = new ItemProductionMsg(vendor.getBuilding(), vendor, targetItem, ACTION_SETPRICE, true);
|
||||
dispatch = Dispatch.borrow(player, outMsg);
|
||||
DispatchMessage.dispatchMsgDispatch(dispatch, Enum.DispatchChannel.SECONDARY);
|
||||
}
|
||||
ErrorPopupMsg.sendErrorPopup(player, 21);
|
||||
return;
|
||||
}
|
||||
|
||||
// Set item's price
|
||||
itemMan = origin.getPlayerCharacter().getCharItemManager();
|
||||
|
||||
if (itemMan == null)
|
||||
return;
|
||||
|
||||
}
|
||||
if (vendor.getCharItemManager().getInventoryWeight() > 500) {
|
||||
ErrorPopupMsg.sendErrorPopup(player, 21);
|
||||
return;
|
||||
}
|
||||
|
||||
// Method adds an item from the players inventory to the vendor.
|
||||
if (!targetItem.validForInventory(origin, player, itemMan)) {
|
||||
ErrorPopupMsg.sendErrorPopup(player, 19);
|
||||
return;
|
||||
}
|
||||
|
||||
private static void depositItem(int itemUUID, NPC vendor, ClientConnection origin) {
|
||||
// Transfer item from player to vendor's inventory
|
||||
|
||||
Item targetItem;
|
||||
ItemProductionMsg outMsg;
|
||||
CharacterItemManager itemMan;
|
||||
Dispatch dispatch;
|
||||
if (!itemMan.sellToNPC(targetItem, vendor)) {
|
||||
ErrorPopupMsg.sendErrorPopup(player, 109);
|
||||
return;
|
||||
}
|
||||
|
||||
PlayerCharacter player = origin.getPlayerCharacter();
|
||||
|
||||
if (player == null)
|
||||
return;
|
||||
outMsg = new ItemProductionMsg(vendor.getBuilding(), vendor, targetItem, ACTION_DEPOSIT, true);
|
||||
dispatch = Dispatch.borrow(player, outMsg);
|
||||
DispatchMessage.dispatchMsgDispatch(dispatch, Enum.DispatchChannel.SECONDARY);
|
||||
|
||||
if (origin.sellLock.tryLock()) {
|
||||
try {
|
||||
targetItem = Item.getFromCache(itemUUID);
|
||||
outMsg = new ItemProductionMsg(vendor.getBuilding(), vendor, targetItem, ACTION_CONFIRM_DEPOSIT, true);
|
||||
dispatch = Dispatch.borrow(player, outMsg);
|
||||
DispatchMessage.dispatchMsgDispatch(dispatch, Enum.DispatchChannel.SECONDARY);
|
||||
|
||||
if (targetItem == null)
|
||||
return;
|
||||
origin.getPlayerCharacter().getCharItemManager().updateInventory();
|
||||
} catch (Exception e) {
|
||||
Logger.error(e);
|
||||
} finally {
|
||||
origin.sellLock.unlock();
|
||||
}
|
||||
|
||||
if (targetItem.getItemBase().getType() == ItemType.GOLD)
|
||||
return;
|
||||
}
|
||||
|
||||
if (!vendor.getCharItemManager().hasRoomInventory(targetItem.getItemBase().getWeight())){
|
||||
|
||||
ErrorPopupMsg.sendErrorPopup(player, 21);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
itemMan = origin.getPlayerCharacter().getCharItemManager();
|
||||
// Method adds an item from the players inventory to the vendor.
|
||||
|
||||
if (itemMan == null)
|
||||
return;
|
||||
private static void completeItem(int itemUUID, NPC vendor, ClientConnection origin, ItemProductionMsg msg) {
|
||||
|
||||
if (vendor.getCharItemManager().getInventoryWeight() > 500) {
|
||||
ErrorPopupMsg.sendErrorPopup(player, 21);
|
||||
return;
|
||||
}
|
||||
Item targetItem;
|
||||
ManageNPCMsg outMsg;
|
||||
Dispatch dispatch;
|
||||
|
||||
if (!targetItem.validForInventory(origin, player, itemMan)){
|
||||
ErrorPopupMsg.sendErrorPopup(player, 19);
|
||||
return;
|
||||
}
|
||||
PlayerCharacter player = origin.getPlayerCharacter();
|
||||
|
||||
// Transfer item from player to vendor's inventory
|
||||
if (player == null)
|
||||
return;
|
||||
|
||||
if (!itemMan.sellToNPC(targetItem, vendor)){
|
||||
ErrorPopupMsg.sendErrorPopup(player, 109);
|
||||
return;
|
||||
}
|
||||
if (origin.buyLock.tryLock()) {
|
||||
try {
|
||||
targetItem = Item.getFromCache(itemUUID);
|
||||
|
||||
if (targetItem == null)
|
||||
return;
|
||||
|
||||
outMsg = new ItemProductionMsg(vendor.getBuilding(), vendor, targetItem, ACTION_DEPOSIT, true);
|
||||
dispatch = Dispatch.borrow(player, outMsg);
|
||||
DispatchMessage.dispatchMsgDispatch(dispatch, Enum.DispatchChannel.SECONDARY);
|
||||
|
||||
outMsg = new ItemProductionMsg(vendor.getBuilding(), vendor, targetItem, ACTION_CONFIRM_DEPOSIT, true);
|
||||
dispatch = Dispatch.borrow(player, outMsg);
|
||||
DispatchMessage.dispatchMsgDispatch(dispatch, Enum.DispatchChannel.SECONDARY);
|
||||
if (!vendor.getCharItemManager().forgeContains(targetItem, vendor))
|
||||
return;
|
||||
|
||||
origin.getPlayerCharacter().getCharItemManager().updateInventory();
|
||||
}catch (Exception e){
|
||||
Logger.error(e);
|
||||
}finally {
|
||||
origin.sellLock.unlock();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
boolean worked = DbManager.ItemQueries.UPDATE_FORGE_TO_INVENTORY(targetItem);
|
||||
if (!worked) {
|
||||
Guild guild = vendor.getGuild();
|
||||
if (guild == null)
|
||||
return;
|
||||
//ChatManager.chatGuildInfo(guild, "Failed to complete Item " + targetItem.getName());
|
||||
return;
|
||||
}
|
||||
|
||||
targetItem.containerType = Enum.ItemContainerType.INVENTORY;
|
||||
targetItem.setOwner(vendor);
|
||||
vendor.getCharItemManager().addItemToInventory(targetItem);
|
||||
|
||||
}
|
||||
vendor.removeItemFromForge(targetItem);
|
||||
|
||||
// Method completes an item that has been previously rolled
|
||||
// adding it to the NPC's inventory
|
||||
outMsg = new ManageNPCMsg(vendor);
|
||||
outMsg.setMessageType(ACTION_PRODUCE);
|
||||
dispatch = Dispatch.borrow(player, outMsg);
|
||||
DispatchMessage.dispatchMsgDispatch(dispatch, Enum.DispatchChannel.SECONDARY);
|
||||
} finally {
|
||||
origin.buyLock.unlock();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static void completeItem(int itemUUID, NPC vendor, ClientConnection origin, ItemProductionMsg msg) {
|
||||
// Method completes an item that has been previously rolled
|
||||
// adding it to the NPC's inventory
|
||||
|
||||
Item targetItem;
|
||||
ManageNPCMsg outMsg;
|
||||
Dispatch dispatch;
|
||||
private static void recycleItem(HashMap<Integer, Integer> itemList, NPC vendor, ClientConnection origin) {
|
||||
|
||||
PlayerCharacter player = origin.getPlayerCharacter();
|
||||
Item targetItem;
|
||||
ItemProductionMsg outMsg;
|
||||
int totalValue = 0;
|
||||
int currentStrongbox;
|
||||
Dispatch dispatch;
|
||||
|
||||
if (player == null)
|
||||
return;
|
||||
if (vendor.getBuilding() == null)
|
||||
return;
|
||||
|
||||
if (origin.buyLock.tryLock()) {
|
||||
try {
|
||||
targetItem = Item.getFromCache(itemUUID);
|
||||
PlayerCharacter player = origin.getPlayerCharacter();
|
||||
|
||||
if (targetItem == null)
|
||||
return;
|
||||
if (player == null)
|
||||
return;
|
||||
|
||||
if (itemList == null)
|
||||
return;
|
||||
|
||||
if (!vendor.getCharItemManager().forgeContains(targetItem, vendor))
|
||||
return;
|
||||
if (origin.sellLock.tryLock()) {
|
||||
try {
|
||||
|
||||
boolean worked = DbManager.ItemQueries.UPDATE_FORGE_TO_INVENTORY(targetItem);
|
||||
if (!worked) {
|
||||
Guild guild = vendor.getGuild();
|
||||
if (guild == null)
|
||||
return;
|
||||
//ChatManager.chatGuildInfo(guild, "Failed to complete Item " + targetItem.getName());
|
||||
return;
|
||||
}
|
||||
|
||||
targetItem.containerType = Enum.ItemContainerType.INVENTORY;
|
||||
targetItem.setOwner(vendor);
|
||||
vendor.getCharItemManager().addItemToInventory(targetItem);
|
||||
for (int itemUUID : itemList.keySet()) {
|
||||
int itemValue = 0;
|
||||
|
||||
vendor.removeItemFromForge(targetItem);
|
||||
int type = itemList.get(itemUUID);
|
||||
|
||||
outMsg = new ManageNPCMsg(vendor);
|
||||
outMsg.setMessageType(ACTION_PRODUCE);
|
||||
dispatch = Dispatch.borrow(player, outMsg);
|
||||
DispatchMessage.dispatchMsgDispatch(dispatch, Enum.DispatchChannel.SECONDARY);
|
||||
} finally {
|
||||
origin.buyLock.unlock();
|
||||
}
|
||||
}
|
||||
}
|
||||
if (type == GameObjectType.Item.ordinal())
|
||||
targetItem = Item.getFromCache(itemUUID);
|
||||
else
|
||||
targetItem = MobLoot.getFromCache(itemUUID);
|
||||
|
||||
// Method handles recycling of an item
|
||||
if (targetItem == null)
|
||||
continue;
|
||||
|
||||
private static void recycleItem(HashMap<Integer, Integer> itemList, NPC vendor, ClientConnection origin) {
|
||||
if (targetItem.getItemBase().getType() == ItemType.GOLD)
|
||||
return;
|
||||
|
||||
Item targetItem;
|
||||
ItemProductionMsg outMsg;
|
||||
int totalValue = 0;
|
||||
int currentStrongbox;
|
||||
Dispatch dispatch;
|
||||
if (!vendor.getCharItemManager().doesCharOwnThisItem(targetItem.getObjectUUID()))
|
||||
continue;
|
||||
if (vendor.getCharItemManager().inventoryContains(targetItem) == false)
|
||||
continue;
|
||||
|
||||
if (vendor.getBuilding() == null)
|
||||
return;
|
||||
itemValue = targetItem.getBaseValue();
|
||||
|
||||
PlayerCharacter player = origin.getPlayerCharacter();
|
||||
if (vendor.getBuilding().getStrongboxValue() + itemValue > vendor.getBuilding().getMaxGold()) {
|
||||
ErrorPopupMsg.sendErrorPopup(player, 201);
|
||||
break;
|
||||
}
|
||||
|
||||
if (player == null)
|
||||
return;
|
||||
switch (targetItem.getItemBase().getType()) {
|
||||
case CONTRACT:
|
||||
case GUILDCHARTER:
|
||||
case DEED:
|
||||
case REALMCHARTER:
|
||||
case SCROLL:
|
||||
case TEARS:
|
||||
itemValue = 0;
|
||||
continue;
|
||||
}
|
||||
totalValue += itemValue;
|
||||
long start = System.currentTimeMillis();
|
||||
vendor.getCharItemManager().recycle(targetItem);
|
||||
long end = System.currentTimeMillis();
|
||||
long timetook = end - start;
|
||||
|
||||
if (itemList == null)
|
||||
return;
|
||||
|
||||
if (origin.sellLock.tryLock()) {
|
||||
try {
|
||||
// ChatManager.chatSystemInfo(player, "Took " + timetook + " ms to finish");
|
||||
|
||||
outMsg = new ItemProductionMsg(vendor.getBuilding(), vendor, targetItem, ACTION_TAKE, true);
|
||||
|
||||
dispatch = Dispatch.borrow(origin.getPlayerCharacter(), outMsg);
|
||||
DispatchMessage.dispatchMsgDispatch(dispatch, Enum.DispatchChannel.SECONDARY);
|
||||
}
|
||||
|
||||
for (int itemUUID : itemList.keySet()) {
|
||||
int itemValue = 0;
|
||||
// Refund a portion of the gold
|
||||
|
||||
int type = itemList.get(itemUUID);
|
||||
if (!vendor.getBuilding().transferGold(totalValue, false))
|
||||
return;
|
||||
|
||||
if (type == GameObjectType.Item.ordinal())
|
||||
targetItem = Item.getFromCache(itemUUID);
|
||||
else
|
||||
targetItem = MobLoot.getFromCache(itemUUID);
|
||||
|
||||
if (targetItem == null)
|
||||
continue;
|
||||
} catch (Exception e) {
|
||||
Logger.error(e);
|
||||
} finally {
|
||||
|
||||
if (targetItem.getItemBase().getType() == ItemType.GOLD)
|
||||
return;
|
||||
origin.sellLock.unlock();
|
||||
}
|
||||
|
||||
if (!vendor.getCharItemManager().doesCharOwnThisItem(targetItem.getObjectUUID()))
|
||||
continue;
|
||||
if (vendor.getCharItemManager().inventoryContains(targetItem) == false)
|
||||
continue;
|
||||
}
|
||||
|
||||
itemValue = targetItem.getBaseValue();
|
||||
// Refresh vendor's inventory to client
|
||||
|
||||
if (vendor.getBuilding().getStrongboxValue() + itemValue > vendor.getBuilding().getMaxGold()) {
|
||||
ErrorPopupMsg.sendErrorPopup(player, 201);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
switch (targetItem.getItemBase().getType()) {
|
||||
case CONTRACT:
|
||||
case GUILDCHARTER:
|
||||
case DEED:
|
||||
case REALMCHARTER:
|
||||
case SCROLL:
|
||||
case TEARS:
|
||||
itemValue = 0;
|
||||
continue;
|
||||
}
|
||||
totalValue += itemValue;
|
||||
long start = System.currentTimeMillis();
|
||||
vendor.getCharItemManager().recycle(targetItem);
|
||||
long end = System.currentTimeMillis();
|
||||
long timetook = end - start;
|
||||
// Method handles recycling of an item
|
||||
|
||||
// ChatManager.chatSystemInfo(player, "Took " + timetook + " ms to finish");
|
||||
private static void junkItem(int itemUUID, NPC vendor, ClientConnection origin) {
|
||||
|
||||
outMsg = new ItemProductionMsg(vendor.getBuilding(), vendor, targetItem, ACTION_TAKE, true);
|
||||
MobLoot targetItem;
|
||||
ManageNPCMsg outMsg;
|
||||
Dispatch dispatch;
|
||||
|
||||
dispatch = Dispatch.borrow(origin.getPlayerCharacter(), outMsg);
|
||||
DispatchMessage.dispatchMsgDispatch(dispatch, Enum.DispatchChannel.SECONDARY);
|
||||
}
|
||||
if (origin.sellLock.tryLock()) {
|
||||
try {
|
||||
targetItem = MobLoot.getFromCache(itemUUID);
|
||||
|
||||
// Refund a portion of the gold
|
||||
PlayerCharacter player = origin.getPlayerCharacter();
|
||||
|
||||
if (!vendor.getBuilding().transferGold(totalValue,false))
|
||||
return;
|
||||
|
||||
|
||||
if (player == null)
|
||||
return;
|
||||
|
||||
}catch (Exception e){
|
||||
Logger.error(e);
|
||||
}finally {
|
||||
|
||||
origin.sellLock.unlock();
|
||||
}
|
||||
// Can't junk nothing!
|
||||
|
||||
}
|
||||
if (targetItem == null)
|
||||
return;
|
||||
|
||||
// Refresh vendor's inventory to client
|
||||
|
||||
}
|
||||
if (!vendor.getCharItemManager().forgeContains(targetItem, vendor))
|
||||
return;
|
||||
|
||||
// Method junks an item that has been rolled but not completed
|
||||
// Cannot junk items without a forge!
|
||||
|
||||
private static void junkItem(int itemUUID, NPC vendor, ClientConnection origin) {
|
||||
if (vendor.getBuilding() == null)
|
||||
return;
|
||||
|
||||
MobLoot targetItem;
|
||||
ManageNPCMsg outMsg;
|
||||
Dispatch dispatch;
|
||||
// Delete the item and cancel any pending rolling timer jobs
|
||||
|
||||
if (origin.sellLock.tryLock()) {
|
||||
try {
|
||||
targetItem = MobLoot.getFromCache(itemUUID);
|
||||
targetItem.recycle(vendor);
|
||||
vendor.removeItemFromForge(targetItem);
|
||||
|
||||
PlayerCharacter player = origin.getPlayerCharacter();
|
||||
// Refresh vendor's inventory to client
|
||||
|
||||
if (player == null)
|
||||
return;
|
||||
outMsg = new ManageNPCMsg(vendor);
|
||||
outMsg.setMessageType(1);
|
||||
dispatch = Dispatch.borrow(player, outMsg);
|
||||
DispatchMessage.dispatchMsgDispatch(dispatch, Enum.DispatchChannel.SECONDARY);
|
||||
;
|
||||
} finally {
|
||||
origin.sellLock.unlock();
|
||||
}
|
||||
}
|
||||
|
||||
// Can't junk nothing!
|
||||
}
|
||||
|
||||
if (targetItem == null)
|
||||
return;
|
||||
// Method junks an item that has been rolled but not completed
|
||||
|
||||
private static void takeItem(HashMap<Integer, Integer> itemList, NPC vendor, ClientConnection origin) {
|
||||
|
||||
Item targetItem;
|
||||
|
||||
if (!vendor.getCharItemManager().forgeContains(targetItem, vendor))
|
||||
return;
|
||||
|
||||
// Cannot junk items without a forge!
|
||||
PlayerCharacter player = origin.getPlayerCharacter();
|
||||
|
||||
if (vendor.getBuilding() == null)
|
||||
return;
|
||||
if (player == null)
|
||||
return;
|
||||
|
||||
// Delete the item and cancel any pending rolling timer jobs
|
||||
|
||||
targetItem.recycle(vendor);
|
||||
vendor.removeItemFromForge(targetItem);
|
||||
for (int itemUUID : itemList.keySet()) {
|
||||
|
||||
// Refresh vendor's inventory to client
|
||||
int type = itemList.get(itemUUID);
|
||||
if (type == GameObjectType.Item.ordinal()) {
|
||||
targetItem = Item.getFromCache(itemUUID);
|
||||
|
||||
outMsg = new ManageNPCMsg(vendor);
|
||||
outMsg.setMessageType(1);
|
||||
dispatch = Dispatch.borrow(player, outMsg);
|
||||
DispatchMessage.dispatchMsgDispatch(dispatch, Enum.DispatchChannel.SECONDARY);
|
||||
;
|
||||
} finally {
|
||||
origin.sellLock.unlock();
|
||||
}
|
||||
}
|
||||
} else {
|
||||
targetItem = MobLoot.getFromCache(itemUUID);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
// Method removes item from an NPC's inventory and transferes it to a player
|
||||
if (targetItem == null)
|
||||
return;
|
||||
|
||||
private static void takeItem(HashMap<Integer, Integer> itemList, NPC vendor, ClientConnection origin) {
|
||||
|
||||
Item targetItem;
|
||||
if (targetItem.getItemBase().getType() == ItemType.GOLD)
|
||||
return;
|
||||
if (vendor.getCharItemManager().inventoryContains(targetItem) == false)
|
||||
return;
|
||||
|
||||
if (player.getCharItemManager().hasRoomInventory(targetItem.getItemBase().getWeight()) == false)
|
||||
return;
|
||||
|
||||
PlayerCharacter player = origin.getPlayerCharacter();
|
||||
player.getCharItemManager().buyFromNPC(targetItem, vendor);
|
||||
|
||||
if (player == null)
|
||||
return;
|
||||
}
|
||||
|
||||
player.getCharItemManager().updateInventory();
|
||||
|
||||
// Update NPC inventory to client
|
||||
|
||||
for (int itemUUID : itemList.keySet()) {
|
||||
|
||||
int type = itemList.get(itemUUID);
|
||||
if (type == GameObjectType.Item.ordinal()){
|
||||
targetItem = Item.getFromCache(itemUUID);
|
||||
}
|
||||
|
||||
}
|
||||
else{
|
||||
targetItem = MobLoot.getFromCache(itemUUID);
|
||||
// Method removes item from an NPC's inventory and transferes it to a player
|
||||
|
||||
}
|
||||
@Override
|
||||
protected boolean _handleNetMsg(ClientNetMsg baseMsg, ClientConnection origin) throws MsgSendException {
|
||||
|
||||
if (targetItem == null)
|
||||
return;
|
||||
// Member variable declaration
|
||||
|
||||
PlayerCharacter player;
|
||||
NPC vendorNPC;
|
||||
ItemProductionMsg msg;
|
||||
Dispatch dispatch;
|
||||
|
||||
if (targetItem.getItemBase().getType() == ItemType.GOLD)
|
||||
return;
|
||||
if (vendor.getCharItemManager().inventoryContains(targetItem) == false)
|
||||
return;
|
||||
// Member variable assignment
|
||||
|
||||
if (player.getCharItemManager().hasRoomInventory(targetItem.getItemBase().getWeight()) == false)
|
||||
return;
|
||||
msg = (ItemProductionMsg) baseMsg;
|
||||
player = origin.getPlayerCharacter();
|
||||
|
||||
player.getCharItemManager().buyFromNPC(targetItem, vendor);
|
||||
if (player == null)
|
||||
return true;
|
||||
|
||||
}
|
||||
// Grab reference to vendor we are interacting with
|
||||
|
||||
player.getCharItemManager().updateInventory();
|
||||
vendorNPC = (NPC) DbManager.getObject(engine.Enum.GameObjectType.NPC, msg.getNpcUUID());
|
||||
|
||||
// Update NPC inventory to client
|
||||
// Oops?
|
||||
|
||||
if (vendorNPC == null)
|
||||
return true;
|
||||
|
||||
}
|
||||
// Process Request
|
||||
|
||||
// Method handles rolling item requests from the client
|
||||
switch (msg.getActionType()) {
|
||||
|
||||
case ACTION_PRODUCE:
|
||||
boolean isRandom = false;
|
||||
if (msg.getUnknown03() != 0 && msg.getpToken() == 0 && msg.getsToken() == 0)
|
||||
isRandom = true;
|
||||
//Create Multiple Item Function.. Fill all empty slots
|
||||
if (msg.isMultiple()) {
|
||||
int emptySlots = vendorNPC.getRank() - vendorNPC.getRolling().size();
|
||||
if (emptySlots > 0) {
|
||||
for (int i = 0; i < emptySlots; i++) {
|
||||
vendorNPC.produceItem(player.getObjectUUID(), msg.getTotalProduction(), isRandom, msg.getpToken(), msg.getsToken(), msg.getName(), msg.getItemUUID());
|
||||
}
|
||||
}
|
||||
} else
|
||||
vendorNPC.produceItem(player.getObjectUUID(), msg.getTotalProduction(), isRandom, msg.getpToken(), msg.getsToken(), msg.getName(), msg.getItemUUID());
|
||||
break;
|
||||
case ACTION_JUNK:
|
||||
junkItem(msg.getItemUUID(), vendorNPC, origin);
|
||||
break;
|
||||
case ACTION_RECYCLE:
|
||||
recycleItem(msg.getItemIDtoTypeMap(), vendorNPC, origin);
|
||||
msg.setActionType(7);
|
||||
dispatch = Dispatch.borrow(player, msg);
|
||||
DispatchMessage.dispatchMsgDispatch(dispatch, Enum.DispatchChannel.SECONDARY);
|
||||
break;
|
||||
case ACTION_COMPLETE:
|
||||
|
||||
vendorNPC.completeItem(msg.getItemUUID());
|
||||
|
||||
// ManageNPCMsg outMsg = new ManageNPCMsg(vendorNPC);
|
||||
// outMsg.setMessageType(1);
|
||||
//
|
||||
// dispatch = Dispatch.borrow(player, outMsg);
|
||||
// DispatchMessage.dispatchMsgDispatch(dispatch, Enum.DispatchChannel.SECONDARY);
|
||||
|
||||
|
||||
break;
|
||||
case ACTION_DEPOSIT:
|
||||
depositItem(msg.getItemUUID(), vendorNPC, origin);
|
||||
break;
|
||||
case ACTION_SETPRICE:
|
||||
setItemPrice(msg.getItemType(), msg.getItemUUID(), msg.getItemPrice(), vendorNPC, origin);
|
||||
break;
|
||||
case ACTION_TAKE:
|
||||
takeItem(msg.getItemIDtoTypeMap(), vendorNPC, origin);
|
||||
dispatch = Dispatch.borrow(player, msg);
|
||||
DispatchMessage.dispatchMsgDispatch(dispatch, Enum.DispatchChannel.SECONDARY);
|
||||
break;
|
||||
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
// Method handles rolling item requests from the client
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user