diff --git a/src/services/trade/TradeService.java b/src/services/trade/TradeService.java index 27428b6a8..eda432730 100644 --- a/src/services/trade/TradeService.java +++ b/src/services/trade/TradeService.java @@ -19,7 +19,6 @@ import network.packets.swg.zone.trade.BeginTradeMessage; import network.packets.swg.zone.trade.BeginVerificationMessage; import network.packets.swg.zone.trade.DenyTradeMessage; import network.packets.swg.zone.trade.GiveMoneyMessage; -import network.packets.swg.zone.trade.RemoveItemMessage; import network.packets.swg.zone.trade.TradeCompleteMessage; import network.packets.swg.zone.trade.UnAcceptTransactionMessage; import network.packets.swg.zone.trade.VerifyTradeMessage; @@ -73,6 +72,8 @@ public class TradeService extends Service { if (packet instanceof SecureTrade) { handleSecureTrade((SecureTrade) packet,gpi.getPlayer(), gpi.getObjectManager()); + } else if(packet instanceof BeginTradeMessage){ + System.out.println("beginTradetest"); } else if (packet instanceof AbortTradeMessage){ handleAbortTradeMessage(gpi.getPlayer()); } else if (packet instanceof DenyTradeMessage){ @@ -238,18 +239,23 @@ public class TradeService extends Service { } private void handleTradeSessionRequest(SecureTrade packet, Player packetSender , CreatureObject initiator, CreatureObject accepter) { + TradeSession tradeSession = packetSender.getCreatureObject().getTradeSession(); 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)-> { if(initiator.getTradeSession() == null) return; - accepter.setTradeSession(initiator.getTradeSession()); - accepter.sendSelf(new SecureTrade(TradeMessageType.REQUEST_TRADE, initiator.getObjectId(), accepter.getObjectId())); - initiator.sendSelf(new SecureTrade(TradeMessageType.REQUEST_TRADE, initiator.getObjectId(), accepter.getObjectId())); - 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()); + if(!tradeSession.isInitiatorBeginSend()){ + initiator.sendSelf(new BeginTradeMessage(accepter.getObjectId())); + tradeSession.setInititatorBeginSend(true); + } + + if(!tradeSession.isAccepterBeginSend()){ + accepter.setTradeSession(initiator.getTradeSession()); + accepter.sendSelf(new BeginTradeMessage(initiator.getObjectId())); + tradeSession.setAccepterBeginSend(true); + } + Log.d("Trade Started between Player A: %s and Player B: %s ", initiator.getOwner().getCharacterName(), accepter.getOwner().getCharacterName()); }); requestBox.addCancelButtonCallback("handleTradeRequestDeny", (player, actor, event, paramenters)-> { if(packetSender.getCreatureObject().equals(initiator)){ @@ -260,6 +266,7 @@ public class TradeService extends Service { accepter.sendSelf(new AbortTradeMessage()); } }); + requestBox.display(accepter.getOwner()); 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 e0cdf5108..da300dde2 100644 --- a/src/services/trade/TradeSession.java +++ b/src/services/trade/TradeSession.java @@ -26,6 +26,8 @@ public class TradeSession { private final AtomicInteger accepterMoneyAmount; private final AtomicBoolean initiatorVerified; private final AtomicBoolean accepterVerified; + private final AtomicBoolean initiatorBeginSend; + private final AtomicBoolean accepterBeginSend; public TradeSession(CreatureObject initiator, CreatureObject accepter) { this.initiatorTradeItems = new ArrayList<>(); @@ -36,6 +38,8 @@ public class TradeSession { this.accepterMoneyAmount = new AtomicInteger(); this.initiatorVerified = new AtomicBoolean(); this.accepterVerified = new AtomicBoolean(); + this.initiatorBeginSend = new AtomicBoolean(); + this.accepterBeginSend = new AtomicBoolean(); } public void removeFromItemList(CreatureObject requester, long objectId) { @@ -140,6 +144,22 @@ public class TradeSession { this.accepterVerified.set(accepterVerified); } + public boolean isInitiatorBeginSend() { + return initiatorBeginSend.get(); + } + + public boolean isAccepterBeginSend() { + return accepterBeginSend.get(); + } + + public void setInititatorBeginSend(boolean inititatorBeginSend){ + this.initiatorBeginSend.set(inititatorBeginSend); + } + + public void setAccepterBeginSend(boolean accepterBeginSend){ + this.accepterBeginSend.set(accepterBeginSend); + } + public void sendAbortTrade() { Player accepter = this.accepter.getOwner(); Player initiator = this.initiator.getOwner();