forked from MagicBane/Server
Resource Auto Stacking
This commit is contained in:
@@ -446,6 +446,7 @@ public class ClientMessagePump implements NetMsgHandler {
|
||||
dispatch = Dispatch.borrow(player, msg);
|
||||
DispatchMessage.dispatchMsgDispatch(dispatch, DispatchChannel.SECONDARY);
|
||||
|
||||
itemManager.StackResources();
|
||||
}
|
||||
|
||||
private static void transferItemFromVaultToInventory(TransferItemFromVaultToInventoryMsg msg, ClientConnection origin) {
|
||||
@@ -460,7 +461,7 @@ public class ClientMessagePump implements NetMsgHandler {
|
||||
return;
|
||||
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
|
||||
@@ -489,7 +490,6 @@ public class ClientMessagePump implements NetMsgHandler {
|
||||
|
||||
if (player.getAccount() == null)
|
||||
return;
|
||||
player.getAccount().transferItemFromInventoryToVault(msg, origin);
|
||||
|
||||
}
|
||||
|
||||
@@ -507,6 +507,7 @@ public class ClientMessagePump implements NetMsgHandler {
|
||||
DispatchMessage.dispatchMsgDispatch(dispatch, DispatchChannel.SECONDARY);
|
||||
|
||||
ChatManager.chatInfoError(player, "Can't transfer to vault: " + reason);
|
||||
player.getAccount().transferItemFromInventoryToVault(msg, 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 + '.';
|
||||
ChatManager.chatGroupInfoCanSee(player, text);
|
||||
}
|
||||
|
||||
if(item.getItemBase().getType().equals(ItemType.RESOURCE)){
|
||||
player.getCharItemManager().StackResources();
|
||||
}
|
||||
|
||||
} catch (Exception e) {
|
||||
Logger.info(e.getMessage());
|
||||
} finally {
|
||||
@@ -1608,7 +1614,9 @@ public class ClientMessagePump implements NetMsgHandler {
|
||||
DispatchMessage.dispatchMsgDispatch(dispatch, DispatchChannel.SECONDARY);
|
||||
itemMan.updateInventory();
|
||||
}
|
||||
|
||||
if(buy.getItemBase().getType().equals(ItemType.RESOURCE)){
|
||||
itemMan.StackResources();
|
||||
}
|
||||
} finally {
|
||||
origin.buyLock.unlock();
|
||||
}
|
||||
|
||||
@@ -12,6 +12,7 @@ package engine.objects;
|
||||
import engine.Enum;
|
||||
import engine.Enum.GameObjectType;
|
||||
import engine.Enum.ItemType;
|
||||
import engine.devcmd.cmds.MakeItemCmd;
|
||||
import engine.gameManager.*;
|
||||
import engine.math.Vector3fImmutable;
|
||||
import engine.net.Dispatch;
|
||||
@@ -23,10 +24,7 @@ import engine.powers.poweractions.AbstractPowerAction;
|
||||
import engine.server.MBServerStatics;
|
||||
import org.pmw.tinylog.Logger;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.HashSet;
|
||||
import java.util.Iterator;
|
||||
import java.util.*;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
import java.util.concurrent.ThreadLocalRandom;
|
||||
|
||||
@@ -778,6 +776,8 @@ public class CharacterItemManager {
|
||||
this.commitTrade();
|
||||
this.closeTradeWindow(ctwm1, false);
|
||||
other.getCharItemManager().closeTradeWindow(ctwm2, false);
|
||||
other.getCharItemManager().StackResources();
|
||||
this.StackResources();
|
||||
}
|
||||
return true;
|
||||
}
|
||||
@@ -1254,18 +1254,12 @@ public class CharacterItemManager {
|
||||
}
|
||||
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.itemIDtoType.put(i.getObjectUUID(), i.getObjectType().ordinal());
|
||||
if(i.getItemBase().getType().equals(ItemType.RESOURCE)){
|
||||
this.StackResources();
|
||||
}
|
||||
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();
|
||||
dispatch = Dispatch.borrow(player, vrm);
|
||||
DispatchMessage.dispatchMsgDispatch(dispatch, Enum.DispatchChannel.SECONDARY);
|
||||
|
||||
player.getCharItemManager().StackResources();
|
||||
}
|
||||
|
||||
public static void warehouseLock(MerchantMsg msg, PlayerCharacter player, NPC npc, ClientConnection origin) {
|
||||
|
||||
Reference in New Issue
Block a user