diff --git a/src/network/packets/swg/zone/object_controller/MessageQueueSecureTrade.java b/src/network/packets/swg/zone/object_controller/MessageQueueSecureTrade.java deleted file mode 100644 index 393bedac4..000000000 --- a/src/network/packets/swg/zone/object_controller/MessageQueueSecureTrade.java +++ /dev/null @@ -1,42 +0,0 @@ -package network.packets.swg.zone.object_controller; - -import com.projectswg.common.network.NetBuffer; - -public class MessageQueueSecureTrade extends ObjectController { - - public static final int CRC = 0x0115; - - private int tradeId; - private long trader; - private long reciever; - - public MessageQueueSecureTrade(int tradeId, long trader, long reciever) { - super(CRC); - this.tradeId = tradeId; - this.trader = trader; - this.reciever = reciever; - } - - public MessageQueueSecureTrade(NetBuffer data) { - super(CRC); - decode(data); - } - - @Override - public void decode(NetBuffer data) { - decodeHeader(data); - tradeId = data.getInt(); - trader = data.getLong(); - reciever = data.getLong(); - } - - @Override - public NetBuffer encode() { - NetBuffer data = NetBuffer.allocate(HEADER_LENGTH + 20); - encodeHeader(data); - data.addInt(tradeId); - data.addLong(trader); - data.addLong(reciever); - return data; - } -} \ No newline at end of file diff --git a/src/network/packets/swg/zone/object_controller/ObjectController.java b/src/network/packets/swg/zone/object_controller/ObjectController.java index 7dcd17181..ff07527ba 100644 --- a/src/network/packets/swg/zone/object_controller/ObjectController.java +++ b/src/network/packets/swg/zone/object_controller/ObjectController.java @@ -114,7 +114,7 @@ public abstract class ObjectController extends SWGPacket { case 0x04C5: return new IntendedTarget(data); case 0x00F5: return new MissionListRequest(data); case 0x041C: return new JTLTerminalSharedMessage(data); - case 0x0115: return new MessageQueueSecureTrade(data); + case 0x0115: return new SecureTrade(data); } Log.w("Unknown object controller: %08X", crc); return new GenericObjectController(crc, data); diff --git a/src/resources/objects/creature/CreatureObject.java b/src/resources/objects/creature/CreatureObject.java index 8c6278e41..9d19ad18d 100644 --- a/src/resources/objects/creature/CreatureObject.java +++ b/src/resources/objects/creature/CreatureObject.java @@ -82,6 +82,7 @@ public class CreatureObject extends TangibleObject { private long statesBitmask = 0; private long lastTransform = 0; private TradeSession tradeSession = null; + private CreatureObject tradePartner = null; private SWGSet skills = new SWGSet(1, 3, StringType.ASCII); @@ -269,6 +270,14 @@ public class CreatureObject extends TangibleObject { public void setTradeSession(TradeSession tradeSession) { this.tradeSession = tradeSession; } + + public CreatureObject getTradePartner() { + return tradePartner; + } + + public void setTradePartner(CreatureObject tradePartner) { + this.tradePartner = tradePartner; + } public void setPosture(Posture posture) { this.posture = posture; diff --git a/src/services/trade/TradeService.java b/src/services/trade/TradeService.java index b8a052382..e394d48dc 100644 --- a/src/services/trade/TradeService.java +++ b/src/services/trade/TradeService.java @@ -52,9 +52,9 @@ public class TradeService extends Service { handleAcceptTransactionMessage(gpi.getPlayer()); } else if (packet instanceof UnAcceptTransactionMessage){ handleUnAcceptTransactionMessage(gpi.getPlayer()); - } else if (packet instanceof AddItemMessage){ + } /*else if (packet instanceof AddItemMessage){ handleAddItemMessage((AddItemMessage) packet, gpi.getPlayer()); - } + }*/ } private void handleSecureTrade(SecureTrade packet, Player player, ObjectManager objectManager) { @@ -62,39 +62,40 @@ public class TradeService extends Service { CreatureObject accepter = (CreatureObject) objectManager.getObjectById(packet.getAccepterId()); TradeSession tradeSession = new TradeSession(initiator, accepter); initiator.setTradeSession(tradeSession); - initiator.getTradeSession().getTradePartner(accepter); - handleTradeSessionRequest(initiator, accepter, tradeSession); + initiator.setTradePartner(accepter); + handleTradeSessionRequest(packet, player, initiator, accepter, tradeSession); + Log.d("Trade Session Request. Type=%s Initiator=%d Receipient=%d PacketSenderID: %d", packet.getType(), packet.getStarterId(), packet.getAccepterId(), player.getCreatureObject().getObjectId()); } private void handleAbortTradeMessage(Player player) { - if(player.getCreatureObject().getObjectId() != player.getCreatureObject().getTradeSession().getTradePartner(player.getCreatureObject()).getObjectId()){ - player.getCreatureObject().getTradeSession().getTradePartner(player.getCreatureObject()).sendSelf(new AbortTradeMessage()); - player.getCreatureObject().getTradeSession().getTradePartner(player.getCreatureObject()).sendSelf(new DenyTradeMessage()); - } else{ + if(player.getCreatureObject().getObjectId() != player.getCreatureObject().getTradePartner().getObjectId()){ + player.getCreatureObject().getTradePartner().sendSelf(new AbortTradeMessage()); + player.getCreatureObject().getTradePartner().sendSelf(new DenyTradeMessage()); + } else { player.getCreatureObject().sendSelf(new AbortTradeMessage()); player.getCreatureObject().sendSelf(new DenyTradeMessage()); } } private void handleDenyTradeMessage(Player player) { - if(player.getCreatureObject().getObjectId() != player.getCreatureObject().getTradeSession().getTradePartner(player.getCreatureObject()).getObjectId()){ - player.getCreatureObject().getTradeSession().getTradePartner(player.getCreatureObject()).sendSelf(new DenyTradeMessage()); + if(player.getCreatureObject().getObjectId() != player.getCreatureObject().getTradePartner().getObjectId()){ + player.getCreatureObject().getTradePartner().sendSelf(new DenyTradeMessage()); } else{ player.getCreatureObject().sendSelf(new DenyTradeMessage()); } } private void handleAcceptTransactionMessage(Player player) { - if(player.getCreatureObject().getObjectId() != player.getCreatureObject().getTradeSession().getTradePartner(player.getCreatureObject()).getObjectId()){ - player.getCreatureObject().getTradeSession().getTradePartner(player.getCreatureObject()).sendSelf(new AcceptTransactionMessage()); + if(player.getCreatureObject().getObjectId() != player.getCreatureObject().getTradePartner().getObjectId()){ + player.getCreatureObject().getTradePartner().sendSelf(new AcceptTransactionMessage()); } else{ player.getCreatureObject().sendSelf(new AcceptTransactionMessage()); } } private void handleUnAcceptTransactionMessage(Player player) { - if(player.getCreatureObject().getObjectId() != player.getCreatureObject().getTradeSession().getTradePartner(player.getCreatureObject()).getObjectId()){ - player.getCreatureObject().getTradeSession().getTradePartner(player.getCreatureObject()).sendSelf(new UnAcceptTransactionMessage()); + if(player.getCreatureObject().getObjectId() != player.getCreatureObject().getObjectId()){ + player.getCreatureObject().getTradePartner().sendSelf(new UnAcceptTransactionMessage()); } else{ player.getCreatureObject().sendSelf(new UnAcceptTransactionMessage()); } @@ -102,35 +103,39 @@ public class TradeService extends Service { private void handleAddItemMessage(AddItemMessage packet, Player player) { - if(player.getCreatureObject().getObjectId() != player.getCreatureObject().getTradeSession().getTradePartner(player.getCreatureObject()).getObjectId()){ - player.getCreatureObject().getTradeSession().addToItemList(player.getCreatureObject().getTradeSession().getTradePartner(player.getCreatureObject()), packet.getObjectId()); - for (long objectId : player.getCreatureObject().getTradeSession().getTradePartner(player.getCreatureObject()).getTradeSession().getFromAccepterList()) { + if(player.getCreatureObject().getObjectId() != player.getCreatureObject().getTradePartner().getObjectId()){ + player.getCreatureObject().getTradeSession().addToItemList(player.getCreatureObject().getTradePartner(), packet.getObjectId()); + for (long objectId : player.getCreatureObject().getTradePartner().getTradeSession().getFromAccepterList()) { player.getCreatureObject().sendSelf(new AddItemMessage(objectId)); } } else{ - player.getCreatureObject().getTradeSession().getTradePartner(player.getCreatureObject()).getTradeSession().addToItemList(player.getCreatureObject(), packet.getObjectId()); - for (long objectId : player.getCreatureObject().getTradeSession().getTradePartner(player.getCreatureObject()).getTradeSession().getFromInitiatorList()) { - player.getCreatureObject().getTradeSession().getTradePartner(player.getCreatureObject()).sendSelf(new AddItemMessage(objectId)); + player.getCreatureObject().getTradePartner().getTradeSession().addToItemList(player.getCreatureObject(), packet.getObjectId()); + for (long objectId : player.getCreatureObject().getTradePartner().getTradeSession().getFromInitiatorList()) { + player.getCreatureObject().getTradePartner().sendSelf(new AddItemMessage(objectId)); } } } - private void handleTradeSessionRequest(CreatureObject initiator, CreatureObject accepter, TradeSession tradeSession) { + private void handleTradeSessionRequest(SecureTrade packet, Player packetSender , CreatureObject initiator, CreatureObject accepter, TradeSession tradeSession) { SuiMessageBox requestBox = new SuiMessageBox(SuiButtons.OK_CANCEL, "Trade Request", accepter.getOwner().getCharacterName() + " wants to trade with you.\nDo you want to accept the request?"); requestBox.display(accepter.getOwner()); requestBox.addOkButtonCallback("handleTradeRequest", (player, actor, event, paramenters)-> { - accepter.getTradeSession().getTradePartner(initiator); - accepter.setTradeSession(tradeSession); - if(initiator.getTradeSession().getTradePartner(accepter) != null && initiator.getTradeSession().getTradePartner(accepter).equals(accepter) && accepter.getTradeSession().getTradePartner(initiator) != null && accepter.getTradeSession().getTradePartner(initiator).equals(initiator)){ + if(initiator.getTradePartner() != null && initiator.getTradePartner().equals(accepter) && accepter.getTradePartner() != null && accepter.getTradePartner().equals(initiator)){ + accepter.setTradeSession(tradeSession); + accepter.setTradePartner(initiator); initiator.sendSelf(new BeginTradeMessage(accepter.getObjectId())); accepter.sendSelf(new BeginTradeMessage(initiator.getObjectId())); + Log.d("Trade Session Request. Type=%s Initiator=%d Receipient=%d PacketSenderID: %d", packet.getType(), packet.getStarterId(), packet.getAccepterId(), player.getCreatureObject().getObjectId()); } }); requestBox.addCancelButtonCallback("handleTradeRequestDeny", (player, actor, event, paramenters)-> { - initiator.sendSelf(new DenyTradeMessage()); - accepter.sendSelf(new DenyTradeMessage()); - initiator.sendSelf(new AbortTradeMessage()); - accepter.sendSelf(new AbortTradeMessage()); + if(packetSender.getCreatureObject().getObjectId() != accepter.getObjectId()){ + initiator.sendSelf(new DenyTradeMessage()); + initiator.sendSelf(new AbortTradeMessage()); + } else { + accepter.sendSelf(new DenyTradeMessage()); + accepter.sendSelf(new AbortTradeMessage()); + } }); Log.i("Player: %s sent TradeRequest to Player %s", initiator.getOwner().getCharacterName(), accepter.getOwner().getCharacterName()); } diff --git a/src/services/trade/TradeSession.java b/src/services/trade/TradeSession.java index 7059dc03f..14831f491 100644 --- a/src/services/trade/TradeSession.java +++ b/src/services/trade/TradeSession.java @@ -52,12 +52,4 @@ public class TradeSession { public CreatureObject getAccepter() { return accepter; } - - public CreatureObject getTradePartner(CreatureObject self) { - if (self.equals(initiator)) { - return accepter; - } else { - return initiator; - } - } } \ No newline at end of file