diff --git a/src/network/packets/swg/zone/object_controller/SecureTrade.java b/src/network/packets/swg/zone/object_controller/SecureTrade.java index 7a0e0f484..03e2ea267 100644 --- a/src/network/packets/swg/zone/object_controller/SecureTrade.java +++ b/src/network/packets/swg/zone/object_controller/SecureTrade.java @@ -48,7 +48,7 @@ public class SecureTrade extends ObjectController { public void setType(TradeMessageType type) { this.type = type; } - + public long getStarterId() { return starterId; } diff --git a/src/network/packets/swg/zone/trade/AddItemMessage.java b/src/network/packets/swg/zone/trade/AddItemMessage.java index 1896f7dc9..abc6bbb94 100644 --- a/src/network/packets/swg/zone/trade/AddItemMessage.java +++ b/src/network/packets/swg/zone/trade/AddItemMessage.java @@ -38,11 +38,12 @@ public class AddItemMessage extends SWGPacket{ private long objectId; public AddItemMessage(long objectId) { + super(); this.objectId = objectId; } public AddItemMessage() { - this.objectId = 0; + super(); } @Override diff --git a/src/network/packets/swg/zone/trade/GiveMoneyMessage.java b/src/network/packets/swg/zone/trade/GiveMoneyMessage.java index a8ef9702b..feddf2a53 100644 --- a/src/network/packets/swg/zone/trade/GiveMoneyMessage.java +++ b/src/network/packets/swg/zone/trade/GiveMoneyMessage.java @@ -41,6 +41,10 @@ public class GiveMoneyMessage extends SWGPacket{ super(); this.moneyAmount = moneyAmount; } + + public GiveMoneyMessage() { + super(); + } @Override public void decode(NetBuffer data) { diff --git a/src/services/trade/TradeService.java b/src/services/trade/TradeService.java index 262f6c577..ad997f49c 100644 --- a/src/services/trade/TradeService.java +++ b/src/services/trade/TradeService.java @@ -12,6 +12,7 @@ import network.packets.swg.zone.trade.AcceptTransactionMessage; import network.packets.swg.zone.trade.AddItemMessage; import network.packets.swg.zone.trade.BeginTradeMessage; import network.packets.swg.zone.trade.DenyTradeMessage; +import network.packets.swg.zone.trade.GiveMoneyMessage; import network.packets.swg.zone.trade.UnAcceptTransactionMessage; import resources.objects.creature.CreatureObject; import resources.player.Player; @@ -29,8 +30,20 @@ public class TradeService extends Service { private void handlePlayerEventIntent(PlayerEventIntent pei) { switch (pei.getEvent()) { case PE_LOGGED_OUT: + if(pei.getPlayer().getCreatureObject().getTradeSession() != null){ + pei.getPlayer().getCreatureObject().getTradeSession().getAccepter().sendSelf(new AbortTradeMessage()); + pei.getPlayer().getCreatureObject().getTradeSession().getInitiator().sendSelf(new AbortTradeMessage()); + pei.getPlayer().getCreatureObject().getTradeSession().getAccepter().setTradeSession(null); + pei.getPlayer().getCreatureObject().getTradeSession().getInitiator().setTradeSession(null); + } break; case PE_FIRST_ZONE: + if(pei.getPlayer().getCreatureObject().getTradeSession() != null){ + pei.getPlayer().getCreatureObject().getTradeSession().getAccepter().sendSelf(new AbortTradeMessage()); + pei.getPlayer().getCreatureObject().getTradeSession().getInitiator().sendSelf(new AbortTradeMessage()); + pei.getPlayer().getCreatureObject().getTradeSession().getAccepter().setTradeSession(null); + pei.getPlayer().getCreatureObject().getTradeSession().getInitiator().setTradeSession(null); + } default: break; } @@ -53,6 +66,8 @@ public class TradeService extends Service { handleUnAcceptTransactionMessage(gpi.getPlayer()); } else if (packet instanceof AddItemMessage){ handleAddItemMessage((AddItemMessage) packet, gpi.getPlayer()); + } else if (packet instanceof GiveMoneyMessage){ + handleGiveMoneyMessage((GiveMoneyMessage) packet, gpi.getPlayer()); } } @@ -66,33 +81,41 @@ public class TradeService extends Service { } private void handleAbortTradeMessage(Player player) { - player.getCreatureObject().getTradeSession().getAccepter().sendSelf(new AbortTradeMessage()); - player.getCreatureObject().getTradeSession().getAccepter().sendSelf(new DenyTradeMessage()); - player.getCreatureObject().getTradeSession().getInitiator().sendSelf(new AbortTradeMessage()); - player.getCreatureObject().getTradeSession().getInitiator().sendSelf(new DenyTradeMessage()); + TradeSession session = player.getCreatureObject().getTradeSession(); + + if(session == null) + return; + + session.getAccepter().sendSelf(new AbortTradeMessage()); + session.getAccepter().sendSelf(new DenyTradeMessage()); + session.getInitiator().sendSelf(new AbortTradeMessage()); + session.getInitiator().sendSelf(new DenyTradeMessage()); } private void handleDenyTradeMessage(Player player) { - if(player.getCreatureObject().getObjectId() != player.getCreatureObject().getTradeSession().getAccepter().getObjectId()){ - player.getCreatureObject().getTradeSession().getAccepter().sendSelf(new DenyTradeMessage()); + TradeSession session = player.getCreatureObject().getTradeSession(); + if(player.getCreatureObject().getObjectId() != session.getAccepter().getObjectId()){ + session.getAccepter().sendSelf(new DenyTradeMessage()); } else{ - player.getCreatureObject().getTradeSession().getInitiator().sendSelf(new DenyTradeMessage()); + session.getInitiator().sendSelf(new DenyTradeMessage()); } } private void handleAcceptTransactionMessage(Player player) { - if(player.getCreatureObject().getObjectId() != player.getCreatureObject().getTradeSession().getAccepter().getObjectId()){ - player.getCreatureObject().getTradeSession().getAccepter().sendSelf(new AcceptTransactionMessage()); + TradeSession session = player.getCreatureObject().getTradeSession(); + if(player.getCreatureObject().getObjectId() != session.getAccepter().getObjectId()){ + session.getAccepter().sendSelf(new AcceptTransactionMessage()); } else{ - player.getCreatureObject().getTradeSession().getInitiator().sendSelf(new AcceptTransactionMessage()); + session.getInitiator().sendSelf(new AcceptTransactionMessage()); } } private void handleUnAcceptTransactionMessage(Player player) { - if(player.getCreatureObject().getObjectId() != player.getCreatureObject().getTradeSession().getAccepter().getObjectId()){ - player.getCreatureObject().getTradeSession().getAccepter().sendSelf(new UnAcceptTransactionMessage()); + TradeSession session = player.getCreatureObject().getTradeSession(); + if(player.getCreatureObject().getObjectId() != session.getAccepter().getObjectId()){ + session.getAccepter().sendSelf(new UnAcceptTransactionMessage()); } else{ - player.getCreatureObject().getTradeSession().getInitiator().sendSelf(new UnAcceptTransactionMessage()); + session.getInitiator().sendSelf(new UnAcceptTransactionMessage()); } } @@ -115,12 +138,22 @@ public class TradeService extends Service { } } + private void handleGiveMoneyMessage(GiveMoneyMessage packet, Player player) { + TradeSession session = player.getCreatureObject().getTradeSession(); + + if(player.getCreatureObject().getObjectId() != session.getAccepter().getObjectId()){ + session.getAccepter().sendSelf(new GiveMoneyMessage(packet.getMoneyAmount())); + } else { + session.getInitiator().sendSelf(new GiveMoneyMessage(packet.getMoneyAmount())); + } + } + private void handleTradeSessionRequest(SecureTrade packet, Player packetSender , CreatureObject initiator, CreatureObject accepter) { 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().getInitiator() != null){ - accepter.setTradeSession(initiator.getTradeSession()); + if(initiator.getTradeSession() != null && initiator.getTradeSession().getInitiator() != null){ + accepter.setTradeSession(initiator.getTradeSession()); 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()); @@ -133,7 +166,7 @@ public class TradeService extends Service { } 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 29e6a873e..526408cd3 100644 --- a/src/services/trade/TradeSession.java +++ b/src/services/trade/TradeSession.java @@ -23,7 +23,7 @@ public class TradeSession { } public void removeFromItemList(CreatureObject requester, long objectId) { - if (requester.equals(this.initiator)) { + if (requester.equals(this.accepter)) { this.initiatorTradeItems.remove(objectId); } else { this.accepterTradeItems.remove(objectId); @@ -31,34 +31,39 @@ public class TradeSession { } public CreatureObject getTradePartner(CreatureObject self) { - if (self.equals(initiator)) { - return accepter; + if (self.equals(this.accepter)) { + return this.accepter; + } else if(self.equals(this.initiator)) { + return this.initiator; } else { - return initiator; - } + Log.w("Invalid trade item owner for session: %s (initiator=%s, accepter=%s)", self, initiator, accepter); + return self; + } } public List getFromItemList(CreatureObject creature) { - if(this.initiator == creature){ - return Collections.unmodifiableList(initiatorTradeItems); + if(creature.equals(this.accepter)){ + return Collections.unmodifiableList(this.initiatorTradeItems); } else { - return Collections.unmodifiableList(accepterTradeItems); + return Collections.unmodifiableList(this.accepterTradeItems); } } public CreatureObject getInitiator() { - return initiator; + return this.initiator; } public CreatureObject getAccepter() { - return accepter; + return this.accepter; } public void addItem(CreatureObject self, long itemId) { - if (this.initiator == self) { - initiatorTradeItems.add(itemId); - } else if (this.accepter == self) { - accepterTradeItems.add(itemId); + if (self.equals(this.initiator)) { + this.initiatorTradeItems.add(itemId); + System.out.println("Item added to Initiatorlist"); + } else if (self.equals(this.accepter)) { + this.accepterTradeItems.add(itemId); + System.out.println("Item added to Accepterlist"); } else { Log.w("Invalid trade item owner for session: %s (initiator=%s, accepter=%s)", self, initiator, accepter); }