mirror of
https://github.com/ProjectSWGCore/Holocore.git
synced 2026-10-12 02:13:42 -04:00
140 lines
6.4 KiB
Java
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());
|
|
}
|
|
} |