Files
Holocore/src/services/trade/TradeService.java
T

140 lines
6.4 KiB
Java

package services.trade;
import com.projectswg.common.control.Service;
import com.projectswg.common.debug.Log;
import intents.PlayerEventIntent;
import intents.network.GalacticPacketIntent;
import network.packets.Packet;
import network.packets.swg.zone.object_controller.SecureTrade;
import network.packets.swg.zone.trade.AbortTradeMessage;
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.UnAcceptTransactionMessage;
import resources.objects.creature.CreatureObject;
import resources.player.Player;
import resources.sui.SuiButtons;
import resources.sui.SuiMessageBox;
import services.objects.ObjectManager;
public class TradeService extends Service {
public TradeService() {
registerForIntent(GalacticPacketIntent.class, gpi -> handleGalacticPacketIntent(gpi));
registerForIntent(PlayerEventIntent.class, pei -> handlePlayerEventIntent(pei));
}
private void handlePlayerEventIntent(PlayerEventIntent pei) {
switch (pei.getEvent()) {
case PE_LOGGED_OUT:
break;
case PE_FIRST_ZONE:
default:
break;
}
}
private void handleGalacticPacketIntent(GalacticPacketIntent gpi) {
Packet packet = gpi.getPacket();
/*if (gpi.getPacket() instanceof SWGPacket)
Log.d("RX Packet: %s", ((SWGPacket) gpi.getPacket()).getPacketType());*/
if (packet instanceof SecureTrade) {
handleSecureTrade((SecureTrade) packet,gpi.getPlayer(), gpi.getObjectManager());
} else if (packet instanceof AbortTradeMessage){
handleAbortTradeMessage(gpi.getPlayer());
} else if (packet instanceof DenyTradeMessage){
handleDenyTradeMessage(gpi.getPlayer());
} else if (packet instanceof AcceptTransactionMessage){
handleAcceptTransactionMessage(gpi.getPlayer());
} else if (packet instanceof UnAcceptTransactionMessage){
handleUnAcceptTransactionMessage(gpi.getPlayer());
} else if (packet instanceof AddItemMessage){
handleAddItemMessage((AddItemMessage) packet, gpi.getPlayer());
}
}
private void handleSecureTrade(SecureTrade packet, Player player, ObjectManager objectManager) {
CreatureObject initiator = player.getCreatureObject();
CreatureObject accepter = (CreatureObject) objectManager.getObjectById(packet.getAccepterId());
TradeSession tradeSession = new TradeSession(initiator, accepter);
initiator.setTradeSession(tradeSession);
handleTradeSessionRequest(packet, player, initiator, accepter);
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) {
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());
}
private void handleDenyTradeMessage(Player player) {
if(player.getCreatureObject().getObjectId() != player.getCreatureObject().getTradeSession().getAccepter().getObjectId()){
player.getCreatureObject().getTradeSession().getAccepter().sendSelf(new DenyTradeMessage());
} else{
player.getCreatureObject().getTradeSession().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());
} else{
player.getCreatureObject().getTradeSession().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());
} else{
player.getCreatureObject().getTradeSession().getInitiator().sendSelf(new UnAcceptTransactionMessage());
}
}
private void handleAddItemMessage(AddItemMessage packet, Player player) {
CreatureObject creature = player.getCreatureObject();
if (creature.getTradeSession() == null) {
Log.w("Invalid Tradesession");
return;
}
CreatureObject partner = creature.getTradeSession().getTradePartner(creature);
if (partner == null) {
Log.w("Invalid trading session ....");
return;
}
creature.getTradeSession().addItem(creature, packet.getObjectId());
for (long objectId : creature.getTradeSession().getFromItemList(creature)) {
partner.getOwner().sendPacket(new AddItemMessage(objectId));
}
}
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());
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)-> {
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());
}
}