From cae91b7317f28f488e65f60061e52182127e1898 Mon Sep 17 00:00:00 2001 From: Waverunner Date: Wed, 5 Mar 2014 14:43:21 -0500 Subject: [PATCH] Added CreateClientPathMessage for noob paths, caught GetSpecificMapLocationsMessage --- scripts/commands/setgodmode.py | 8 +-- src/protocol/swg/CreateClientPathMessage.java | 65 +++++++++++++++++++ src/resources/common/Opcodes.java | 1 + src/services/PlayerService.java | 30 ++++++++- src/services/trade/TradeService.java | 24 +------ 5 files changed, 99 insertions(+), 29 deletions(-) create mode 100644 src/protocol/swg/CreateClientPathMessage.java diff --git a/scripts/commands/setgodmode.py b/scripts/commands/setgodmode.py index 3ecf3ea2..a692a2b0 100644 --- a/scripts/commands/setgodmode.py +++ b/scripts/commands/setgodmode.py @@ -1,6 +1,6 @@ import sys from engine.resources.scene import Point3D -from protocol.swg import CommPlayerMessage + def setup(): return @@ -51,9 +51,5 @@ def run(core, actor, target, commandString): elif command == 'changeBio' and arg1: actor.getSlottedObject('ghost').setBiography(arg1) - - elif command == 'testComm': - comm = CommPlayerMessage() - actor.getClient().getSession().write(comm.serialize()) - print ('sent comm message') + return diff --git a/src/protocol/swg/CreateClientPathMessage.java b/src/protocol/swg/CreateClientPathMessage.java new file mode 100644 index 00000000..37a6d571 --- /dev/null +++ b/src/protocol/swg/CreateClientPathMessage.java @@ -0,0 +1,65 @@ +/******************************************************************************* + * Copyright (c) 2013 + * + * This File is part of NGECore2. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. + * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. + ******************************************************************************/ +package protocol.swg; + +import java.nio.ByteOrder; +import java.util.List; + +import org.apache.mina.core.buffer.IoBuffer; + +import resources.common.StringUtilities; +import engine.resources.common.CRC; +import engine.resources.scene.Point3D; + +public class CreateClientPathMessage extends SWGMessage { + + private List coordinates; + + public CreateClientPathMessage(List coordinates) { + this.coordinates = coordinates; + } + + @Override + public void deserialize(IoBuffer data) { + + } + + @Override + public IoBuffer serialize() { + IoBuffer buffer = IoBuffer.allocate((coordinates.size() * 12) + 10).order(ByteOrder.LITTLE_ENDIAN); + + buffer.putShort((short) 2); + buffer.putInt(CRC.StringtoCRC("CreateClientPathMessage")); + + buffer.putInt(coordinates.size()); + for(Point3D point : coordinates) { + buffer.putFloat(point.x); + buffer.putFloat(point.z); + buffer.putFloat(point.y); + } + + buffer.flip(); + StringUtilities.printBytes(buffer.array()); + return buffer; + } + +} diff --git a/src/resources/common/Opcodes.java b/src/resources/common/Opcodes.java index de158fe4..4075d7e2 100644 --- a/src/resources/common/Opcodes.java +++ b/src/resources/common/Opcodes.java @@ -65,4 +65,5 @@ public class Opcodes { public static int GuildRequestMessage = CRC.StringtoCRC("GuildRequestMessage"); public static int PlayerMoneyRequest = CRC.StringtoCRC("PlayerMoneyRequest"); public static int LagReport = CRC.StringtoCRC("LagReport"); + public static int GetSpecificMapLocationsMessage = CRC.StringtoCRC("GetSpecificMapLocationsMessage"); } diff --git a/src/services/PlayerService.java b/src/services/PlayerService.java index dad77caf..1b05cd37 100644 --- a/src/services/PlayerService.java +++ b/src/services/PlayerService.java @@ -39,6 +39,7 @@ import org.apache.mina.core.session.IoSession; import protocol.swg.ClientIdMsg; import protocol.swg.ClientMfdStatusUpdateMessage; +import protocol.swg.CreateClientPathMessage; import protocol.swg.ExpertiseRequestMessage; import protocol.swg.GuildRequestMessage; import protocol.swg.GuildResponseMessage; @@ -300,7 +301,14 @@ public class PlayerService implements INetworkDispatch { } }); - + swgOpcodes.put(Opcodes.GetSpecificMapLocationsMessage, new INetworkRemoteEvent() { + + @Override + public void handlePacket(IoSession session, IoBuffer data) throws Exception { + + } + + }); swgOpcodes.put(Opcodes.CmdSceneReady, new INetworkRemoteEvent() { @Override @@ -653,6 +661,26 @@ public class PlayerService implements INetworkDispatch { player.getTitleList().remove(title); } + /** + * Creates a blue path to the destination point. + * @param actor Player that will be seeing the blue path. + * @param destination Where the blue path will lead to. + */ + public void createClientPath(SWGObject actor, Point3D destination) { + + if (actor == null || actor.getClient() == null || actor.getClient().getSession() == null) + return; + + List coordinates = new ArrayList(); + coordinates.add(actor.getPosition()); + + // TODO: Generate a path to destination based off of objects in the world. + + coordinates.add(destination); // Destination MUST be last coordinate in array + + CreateClientPathMessage path = new CreateClientPathMessage(coordinates); + actor.getClient().getSession().write(path.serialize()); + } @Override public void shutdown() { diff --git a/src/services/trade/TradeService.java b/src/services/trade/TradeService.java index e425d282..50e2011d 100644 --- a/src/services/trade/TradeService.java +++ b/src/services/trade/TradeService.java @@ -207,9 +207,8 @@ public class TradeService implements INetworkDispatch{ } addItemForTrade(objectToTrade, tradingWithClient); - System.out.println("Trading item: " + objectToTrade.getCustomName() + " detail: " + objectToTrade.getDetailFilename()); - - System.out.println("tradingObjectTable: " + tradingObjectsTable.toString()); + //System.out.println("Trading item: " + objectToTrade.getCustomName() + " detail: " + objectToTrade.getDetailFilename()); + tradee.makeAware(objectToTrade); AddItemMessage tradeeResponse = new AddItemMessage(); tradeeResponse.setTradeObjectID(tradeItemID); @@ -313,20 +312,6 @@ public class TradeService implements INetworkDispatch{ tradePartner.getClient().getSession().write(undoAccept.serialize()); } - }); - // not used, but just in case.... VerifyTradeMessage is sent instead when a user - // hits the Accept button. Can use this as an additional check if need to. - swgOpcodes.put(TradeOpcodes.BeginVerificationMessage, new INetworkRemoteEvent() { - - @Override - public void handlePacket(IoSession session, IoBuffer buffer) throws Exception { - System.out.println("Got BeginVerificationMessage"); - Client client = core.getClient(session); - client.getSession().setAttribute("tradeSessionIsVerified"); - System.out.println("Verified client"); - - } - }); swgOpcodes.put(TradeOpcodes.VerifyTradeMessage, new INetworkRemoteEvent() { @@ -405,12 +390,7 @@ public class TradeService implements INetworkDispatch{ actingTrader.setCashCredits(tradePartnerCredits - moneyToGive); tradePartner.setCashCredits(tradePartnerCredits + moneyToGive); } - - - System.out.println("Finished trading items/credits"); - cleanTradeSession(client, tradePartner.getClient()); - } }