Resource Auto Stacking
This commit is contained in:
@@ -446,6 +446,7 @@ public class ClientMessagePump implements NetMsgHandler {
|
|||||||
dispatch = Dispatch.borrow(player, msg);
|
dispatch = Dispatch.borrow(player, msg);
|
||||||
DispatchMessage.dispatchMsgDispatch(dispatch, DispatchChannel.SECONDARY);
|
DispatchMessage.dispatchMsgDispatch(dispatch, DispatchChannel.SECONDARY);
|
||||||
|
|
||||||
|
itemManager.StackResources();
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void transferItemFromVaultToInventory(TransferItemFromVaultToInventoryMsg msg, ClientConnection origin) {
|
private static void transferItemFromVaultToInventory(TransferItemFromVaultToInventoryMsg msg, ClientConnection origin) {
|
||||||
@@ -460,7 +461,7 @@ public class ClientMessagePump implements NetMsgHandler {
|
|||||||
return;
|
return;
|
||||||
player.getAccount().transferItemFromVaultToInventory(msg, origin);
|
player.getAccount().transferItemFromVaultToInventory(msg, origin);
|
||||||
|
|
||||||
|
player.getCharItemManager().StackResources();
|
||||||
}
|
}
|
||||||
|
|
||||||
//call this if the transfer fails server side to kick the item back to inventory from vault
|
//call this if the transfer fails server side to kick the item back to inventory from vault
|
||||||
@@ -489,7 +490,6 @@ public class ClientMessagePump implements NetMsgHandler {
|
|||||||
|
|
||||||
if (player.getAccount() == null)
|
if (player.getAccount() == null)
|
||||||
return;
|
return;
|
||||||
player.getAccount().transferItemFromInventoryToVault(msg, origin);
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -507,6 +507,7 @@ public class ClientMessagePump implements NetMsgHandler {
|
|||||||
DispatchMessage.dispatchMsgDispatch(dispatch, DispatchChannel.SECONDARY);
|
DispatchMessage.dispatchMsgDispatch(dispatch, DispatchChannel.SECONDARY);
|
||||||
|
|
||||||
ChatManager.chatInfoError(player, "Can't transfer to vault: " + reason);
|
ChatManager.chatInfoError(player, "Can't transfer to vault: " + reason);
|
||||||
|
player.getAccount().transferItemFromInventoryToVault(msg, origin);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void transferGoldFromVaultToInventory(TransferGoldFromVaultToInventoryMsg msg, ClientConnection origin) {
|
private static void transferGoldFromVaultToInventory(TransferGoldFromVaultToInventoryMsg msg, ClientConnection origin) {
|
||||||
@@ -992,6 +993,11 @@ public class ClientMessagePump implements NetMsgHandler {
|
|||||||
String text = player.getFirstName() + " has looted " + name + '.';
|
String text = player.getFirstName() + " has looted " + name + '.';
|
||||||
ChatManager.chatGroupInfoCanSee(player, text);
|
ChatManager.chatGroupInfoCanSee(player, text);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(item.getItemBase().getType().equals(ItemType.RESOURCE)){
|
||||||
|
player.getCharItemManager().StackResources();
|
||||||
|
}
|
||||||
|
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
Logger.info(e.getMessage());
|
Logger.info(e.getMessage());
|
||||||
} finally {
|
} finally {
|
||||||
@@ -1608,7 +1614,9 @@ public class ClientMessagePump implements NetMsgHandler {
|
|||||||
DispatchMessage.dispatchMsgDispatch(dispatch, DispatchChannel.SECONDARY);
|
DispatchMessage.dispatchMsgDispatch(dispatch, DispatchChannel.SECONDARY);
|
||||||
itemMan.updateInventory();
|
itemMan.updateInventory();
|
||||||
}
|
}
|
||||||
|
if(buy.getItemBase().getType().equals(ItemType.RESOURCE)){
|
||||||
|
itemMan.StackResources();
|
||||||
|
}
|
||||||
} finally {
|
} finally {
|
||||||
origin.buyLock.unlock();
|
origin.buyLock.unlock();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -12,6 +12,7 @@ package engine.objects;
|
|||||||
import engine.Enum;
|
import engine.Enum;
|
||||||
import engine.Enum.GameObjectType;
|
import engine.Enum.GameObjectType;
|
||||||
import engine.Enum.ItemType;
|
import engine.Enum.ItemType;
|
||||||
|
import engine.devcmd.cmds.MakeItemCmd;
|
||||||
import engine.gameManager.*;
|
import engine.gameManager.*;
|
||||||
import engine.math.Vector3fImmutable;
|
import engine.math.Vector3fImmutable;
|
||||||
import engine.net.Dispatch;
|
import engine.net.Dispatch;
|
||||||
@@ -23,10 +24,7 @@ import engine.powers.poweractions.AbstractPowerAction;
|
|||||||
import engine.server.MBServerStatics;
|
import engine.server.MBServerStatics;
|
||||||
import org.pmw.tinylog.Logger;
|
import org.pmw.tinylog.Logger;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.*;
|
||||||
import java.util.Collection;
|
|
||||||
import java.util.HashSet;
|
|
||||||
import java.util.Iterator;
|
|
||||||
import java.util.concurrent.ConcurrentHashMap;
|
import java.util.concurrent.ConcurrentHashMap;
|
||||||
import java.util.concurrent.ThreadLocalRandom;
|
import java.util.concurrent.ThreadLocalRandom;
|
||||||
|
|
||||||
@@ -778,6 +776,8 @@ public class CharacterItemManager {
|
|||||||
this.commitTrade();
|
this.commitTrade();
|
||||||
this.closeTradeWindow(ctwm1, false);
|
this.closeTradeWindow(ctwm1, false);
|
||||||
other.getCharItemManager().closeTradeWindow(ctwm2, false);
|
other.getCharItemManager().closeTradeWindow(ctwm2, false);
|
||||||
|
other.getCharItemManager().StackResources();
|
||||||
|
this.StackResources();
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@@ -1254,18 +1254,12 @@ public class CharacterItemManager {
|
|||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
} //else if (i.getItemBase().getType().equals(ItemType.RESOURCE)) {
|
}
|
||||||
// if(this.inventoryContainsResource(i)){
|
|
||||||
// Item resource = getResource(i);
|
|
||||||
// if(resource != null){
|
|
||||||
// resource.setNumOfItems(resource.getNumOfItems() + i.getNumOfItems());
|
|
||||||
// return true;
|
|
||||||
// }
|
|
||||||
//}
|
|
||||||
// }
|
|
||||||
|
|
||||||
this.inventory.add(i);
|
this.inventory.add(i);
|
||||||
this.itemIDtoType.put(i.getObjectUUID(), i.getObjectType().ordinal());
|
this.itemIDtoType.put(i.getObjectUUID(), i.getObjectType().ordinal());
|
||||||
|
if(i.getItemBase().getType().equals(ItemType.RESOURCE)){
|
||||||
|
this.StackResources();
|
||||||
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2626,4 +2620,57 @@ public class CharacterItemManager {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void StackResources(){
|
||||||
|
if(this.getOwner().getObjectType().equals(GameObjectType.PlayerCharacter) == false)
|
||||||
|
return;
|
||||||
|
//create hashmap of all resources in inventory sorted by type
|
||||||
|
HashMap<ItemBase,ArrayList<Item>> resources = new HashMap<>();
|
||||||
|
//populate resources hashmap with items currently in inventory
|
||||||
|
for(Item item : this.getInventory()){
|
||||||
|
if(Warehouse.getMaxResources().get(item.getItemBaseID()) != null && Warehouse.getMaxResources().get(item.getItemBaseID()) != 0){
|
||||||
|
if(resources.containsKey(item.getItemBaseID())){
|
||||||
|
resources.get(item.getItemBase()).add(item);
|
||||||
|
} else{
|
||||||
|
resources.put(item.getItemBase(),new ArrayList<>());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//create a purge list to remove form inventory after we compile all the stacks together
|
||||||
|
ArrayList<Item> purgeList = new ArrayList<>();
|
||||||
|
ArrayList<Item> newStacks = new ArrayList<>();
|
||||||
|
//now we have all our resources sorted, lets combine them into one single stack for each type
|
||||||
|
for(ItemBase resourceBase : resources.keySet()){
|
||||||
|
int count = 0;
|
||||||
|
for(Item resource : resources.get(resourceBase)){
|
||||||
|
count += resource.getNumOfItems();
|
||||||
|
purgeList.add(resource);
|
||||||
|
}
|
||||||
|
Item item = new Item(resourceBase, this.getOwner().getObjectUUID(),
|
||||||
|
Enum.OwnerType.PlayerCharacter, (byte) 0, (byte) 0, (short) resourceBase.getDurability(), (short) resourceBase.getDurability(),
|
||||||
|
true, false, Enum.ItemContainerType.INVENTORY, (byte) 0,
|
||||||
|
new ArrayList<>(), "");
|
||||||
|
|
||||||
|
item.setNumOfItems(count);
|
||||||
|
newStacks.add(item);
|
||||||
|
}
|
||||||
|
//create new stacks in database, add to inventory and update window
|
||||||
|
for(Item item : newStacks){
|
||||||
|
try {
|
||||||
|
item = DbManager.ItemQueries.ADD_ITEM(item);
|
||||||
|
if(item != null){
|
||||||
|
this.addItemToInventory(item);
|
||||||
|
this.updateInventory();
|
||||||
|
}
|
||||||
|
} catch (Exception e) {
|
||||||
|
ChatManager.chatSystemError((PlayerCharacter)this.getOwner(), "Resource Stack Error: Unable to create item. " + e.getMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for (Item purged : purgeList){
|
||||||
|
this.delete(purged);
|
||||||
|
}
|
||||||
|
|
||||||
|
this.updateInventory();
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -217,6 +217,8 @@ public class Warehouse extends AbstractWorldObject {
|
|||||||
vrm.configure();
|
vrm.configure();
|
||||||
dispatch = Dispatch.borrow(player, vrm);
|
dispatch = Dispatch.borrow(player, vrm);
|
||||||
DispatchMessage.dispatchMsgDispatch(dispatch, Enum.DispatchChannel.SECONDARY);
|
DispatchMessage.dispatchMsgDispatch(dispatch, Enum.DispatchChannel.SECONDARY);
|
||||||
|
|
||||||
|
player.getCharItemManager().StackResources();
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void warehouseLock(MerchantMsg msg, PlayerCharacter player, NPC npc, ClientConnection origin) {
|
public static void warehouseLock(MerchantMsg msg, PlayerCharacter player, NPC npc, ClientConnection origin) {
|
||||||
|
|||||||
Reference in New Issue
Block a user