From 2c531c09596ac1f7418da716ef1f6893678fb363 Mon Sep 17 00:00:00 2001 From: Waverunner Date: Sat, 19 Jul 2014 12:55:04 -0400 Subject: [PATCH] Changed trading so it's more responsive Will need to refactor how most of this stuff is done, it's pretty ugly atm. For now I changed so the trading maps will only store the object ID's, this way we don't have the objects not being traded (since they aren't initialized) --- .../objects/building/BuildingObject.java | 7 ++++- src/services/trade/TradeService.java | 31 ++++++++++--------- 2 files changed, 22 insertions(+), 16 deletions(-) diff --git a/src/resources/objects/building/BuildingObject.java b/src/resources/objects/building/BuildingObject.java index 102dc5ff..fa44577f 100644 --- a/src/resources/objects/building/BuildingObject.java +++ b/src/resources/objects/building/BuildingObject.java @@ -60,7 +60,8 @@ public class BuildingObject extends TangibleObject implements IPersistent, Seria public BuildingObject(long objectID, Planet planet, Point3D position, Quaternion orientation, String Template) { super(objectID, planet, position, orientation, Template); - getBaseline(3).set("volume", 255); + getBaseline(3).set("volume", 255); // 255 seen on player buildings + some server spawned ones and 100 - lucky despot, watto + //getBaseline(3).set("complexity", (float) 1); // seen as 1 (player housing) + some server spawned ones and 0 - lucky despot, watto setOptionsBitmask(Options.INVULNERABLE); setConditionDamage(0); setMaximumCondition(4320); @@ -70,6 +71,7 @@ public class BuildingObject extends TangibleObject implements IPersistent, Seria public BuildingObject() { super(); getBaseline(3).set("volume", 255); + getBaseline(3).set("complexity", (float) 1); setOptionsBitmask(Options.INVULNERABLE); setConditionDamage(0); setMaximumCondition(4320); @@ -81,6 +83,7 @@ public class BuildingObject extends TangibleObject implements IPersistent, Seria super.init(); defendersList = new Vector(); getBaseline(3).set("volume", 255); + getBaseline(3).set("complexity", (float) 1); setOptionsBitmask(Options.INVULNERABLE); setConditionDamage(0); setMaximumCondition(4320); @@ -102,6 +105,8 @@ public class BuildingObject extends TangibleObject implements IPersistent, Seria @Override public Baseline getBaseline3() { Baseline baseline = super.getBaseline3(); + + // No additional variables, uses TANO return baseline; } diff --git a/src/services/trade/TradeService.java b/src/services/trade/TradeService.java index 2b18e7b9..98fdc8a2 100644 --- a/src/services/trade/TradeService.java +++ b/src/services/trade/TradeService.java @@ -1,9 +1,9 @@ package services.trade; import java.nio.ByteOrder; -import java.util.Hashtable; import java.util.Iterator; import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; import main.NGECore; @@ -25,13 +25,10 @@ import resources.objects.creature.CreatureObject; import engine.clients.Client; import engine.resources.container.AllPermissions; import engine.resources.container.CreatureContainerPermissions; -import engine.resources.container.CreaturePermissions; import engine.resources.objects.SWGObject; import engine.resources.service.INetworkDispatch; import engine.resources.service.INetworkRemoteEvent; -@SuppressWarnings("unused") - public class TradeService implements INetworkDispatch{ private NGECore core; @@ -40,11 +37,11 @@ public class TradeService implements INetworkDispatch{ private long senderID; - private Hashtable tradingObjectsTable = new Hashtable(); + private Map tradingObjectsTable = new ConcurrentHashMap(); // key = objectToGive, value = giver's ID // need to be sure that no giver ID exists in table before adding value - private Hashtable tradingCreditsTable = new Hashtable(); + private Map tradingCreditsTable = new ConcurrentHashMap(); // key = ID of giver value = amnt recieving public TradeService(NGECore core) { @@ -147,17 +144,21 @@ public class TradeService implements INetworkDispatch{ SWGObject tradeObject = null; - Iterator> itr = tradingObjectsTable.entrySet().iterator(); + Iterator> itr = tradingObjectsTable.entrySet().iterator(); while (itr.hasNext()) { - Map.Entry entry = itr.next(); + Map.Entry entry = itr.next(); if(tradingWithClient == entry.getValue()) { - tradeObject = entry.getKey(); + tradeObject = core.objectService.getObject(entry.getKey()); itr.remove(); } } + if (tradeObject == null) { + cleanTradeSession(client, tradeeClient); + return; + } client.getSession().removeAttribute("tradeSession"); tradeeClient.getSession().removeAttribute("tradeSession"); @@ -353,13 +354,13 @@ public class TradeService implements INetworkDispatch{ else if (tradePartner.getClient().getSession().containsAttribute("tradeSessionIsVerified")) { - Iterator> itr = tradingObjectsTable.entrySet().iterator(); + Iterator> itr = tradingObjectsTable.entrySet().iterator(); while (itr.hasNext()) { - Map.Entry entry = itr.next(); + Map.Entry entry = itr.next(); if(tradingWithClient == entry.getValue()) { - tradeObject = entry.getKey(); + tradeObject = core.objectService.getObject(entry.getKey()); if (actingTrader == null || tradePartnerContainer == null || tradePartner == null) { cleanTradeSession(client, tradePartner.getClient()); @@ -409,15 +410,15 @@ public class TradeService implements INetworkDispatch{ return tradeSessionValue; } - public Hashtable getTradingObjectMap() { + public Map getTradingObjectMap() { return tradingObjectsTable; } public void addItemForTrade(SWGObject swgObject, long tradePartnerID) { - if (tradingObjectsTable.containsKey(swgObject)) { + if (tradingObjectsTable.containsKey(swgObject.getObjectID())) { removeItemForTrade(swgObject); } - tradingObjectsTable.put(swgObject, tradePartnerID); + tradingObjectsTable.put(swgObject.getObjectID(), tradePartnerID); } public void removeItemForTrade(SWGObject swgObject) {