mirror of
https://github.com/ProjectSWGCore/NGECore2.git
synced 2026-07-14 00:02:07 -04:00
Merge branch 'master' of https://github.com/ProjectSWGCore/NGECore2
This commit is contained in:
@@ -8,6 +8,6 @@ PING.PORT=44462
|
||||
DB.NAME=nge
|
||||
DB.USER=postgres
|
||||
DB.URL=localhost
|
||||
DB.PASS=
|
||||
DB.PASS=nge
|
||||
GALAXY_ID=2
|
||||
GALAXY_NAME=Local Connection
|
||||
|
||||
@@ -0,0 +1,9 @@
|
||||
import sys
|
||||
|
||||
def setup():
|
||||
return
|
||||
|
||||
def run(core, actor, target, commandString):
|
||||
playerObject = actor.getSlottedObject('ghost')
|
||||
playerObject.setTitle(str(commandString))
|
||||
return
|
||||
@@ -45,6 +45,7 @@ import services.map.MapService;
|
||||
import services.object.ObjectService;
|
||||
import services.object.UpdateService;
|
||||
import services.sui.SUIService;
|
||||
import services.trade.TradeService;
|
||||
import engine.clientdata.ClientFileManager;
|
||||
import engine.clientdata.visitors.CrcStringTableVisitor;
|
||||
import engine.clientdata.visitors.DatatableVisitor;
|
||||
@@ -99,6 +100,7 @@ public class NGECore {
|
||||
public SUIService suiService;
|
||||
public GuildService guildService;
|
||||
public GCWService gcwService;
|
||||
public TradeService tradeService;
|
||||
|
||||
// Login Server
|
||||
public NetworkDispatch loginDispatch;
|
||||
@@ -178,7 +180,7 @@ public class NGECore {
|
||||
terrainService.addPlanet(1, "tatooine", "terrain/tatooine.trn", true);
|
||||
|
||||
terrainService.loadSnapShotObjects();
|
||||
|
||||
|
||||
// Zone services that need to be loaded after the above
|
||||
simulationService = new SimulationService(this);
|
||||
zoneDispatch.addService(simulationService);
|
||||
@@ -189,6 +191,9 @@ public class NGECore {
|
||||
gcwService = new GCWService(this);
|
||||
zoneDispatch.addService(gcwService);
|
||||
|
||||
tradeService = new TradeService(this);
|
||||
zoneDispatch.addService(tradeService);
|
||||
|
||||
didServerCrash = false;
|
||||
System.out.println("Started Server.");
|
||||
}
|
||||
|
||||
@@ -0,0 +1,25 @@
|
||||
package protocol.swg.clientSecureTradeManager;
|
||||
|
||||
import java.nio.ByteOrder;
|
||||
|
||||
import org.apache.mina.core.buffer.IoBuffer;
|
||||
|
||||
import protocol.swg.SWGMessage;
|
||||
|
||||
public class AbortTradeMessage extends SWGMessage {
|
||||
|
||||
@Override
|
||||
public void deserialize(IoBuffer data) {
|
||||
data.getShort();
|
||||
data.getInt();
|
||||
}
|
||||
|
||||
@Override
|
||||
public IoBuffer serialize() {
|
||||
IoBuffer result = IoBuffer.allocate(20).order(ByteOrder.LITTLE_ENDIAN);
|
||||
result.putShort((short) 1);
|
||||
result.putInt(0x9CA80F98);
|
||||
return result.flip();
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,25 @@
|
||||
package protocol.swg.clientSecureTradeManager;
|
||||
|
||||
import java.nio.ByteOrder;
|
||||
|
||||
import org.apache.mina.core.buffer.IoBuffer;
|
||||
|
||||
import protocol.swg.SWGMessage;
|
||||
|
||||
public class AcceptTransactionMessage extends SWGMessage {
|
||||
|
||||
@Override
|
||||
public void deserialize(IoBuffer data) {
|
||||
data.getShort();
|
||||
data.getInt();
|
||||
}
|
||||
|
||||
@Override
|
||||
public IoBuffer serialize() {
|
||||
IoBuffer result = IoBuffer.allocate(20).order(ByteOrder.LITTLE_ENDIAN);
|
||||
result.putShort((short) 1);
|
||||
result.putInt(0xB131CA17);
|
||||
return result.flip();
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,54 @@
|
||||
package protocol.swg.clientSecureTradeManager;
|
||||
|
||||
import java.nio.ByteOrder;
|
||||
|
||||
import main.NGECore;
|
||||
|
||||
import org.apache.mina.core.buffer.IoBuffer;
|
||||
|
||||
import engine.resources.objects.SWGObject;
|
||||
import protocol.swg.SWGMessage;
|
||||
|
||||
public class AddItemMessage extends SWGMessage {
|
||||
|
||||
private NGECore core;
|
||||
private SWGObject tradeObject;
|
||||
private long tradeObjectID;
|
||||
|
||||
@Override
|
||||
public void deserialize(IoBuffer data) {
|
||||
data.getShort();
|
||||
data.getInt();
|
||||
setTradeObjectID(data.getLong());
|
||||
}
|
||||
|
||||
@Override
|
||||
public IoBuffer serialize() {
|
||||
IoBuffer result = IoBuffer.allocate(200).order(ByteOrder.LITTLE_ENDIAN);
|
||||
result.setAutoExpand(true);
|
||||
|
||||
result.putShort((short) 2);
|
||||
result.putInt(0x1E8D1356);
|
||||
result.putLong(tradeObjectID);
|
||||
return result.flip();
|
||||
}
|
||||
|
||||
public long getTradeObjectID() {
|
||||
return this.tradeObjectID;
|
||||
|
||||
}
|
||||
|
||||
public SWGObject getTradeObject() {
|
||||
return this.tradeObject;
|
||||
}
|
||||
|
||||
public void setTradeObject(SWGObject object) {
|
||||
this.tradeObject = object;
|
||||
this.tradeObjectID = object.getObjectID();
|
||||
}
|
||||
|
||||
public void setTradeObjectID(long objectID) {
|
||||
this.tradeObjectID = objectID;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,33 @@
|
||||
package protocol.swg.clientSecureTradeManager;
|
||||
|
||||
import java.io.UnsupportedEncodingException;
|
||||
import java.nio.ByteBuffer;
|
||||
import java.nio.ByteOrder;
|
||||
|
||||
import org.apache.mina.core.buffer.IoBuffer;
|
||||
|
||||
import protocol.swg.SWGMessage;
|
||||
|
||||
public class BeginTradeMessage extends SWGMessage {
|
||||
|
||||
private long objectId;
|
||||
|
||||
public BeginTradeMessage(long objectId) {
|
||||
this.objectId = objectId;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void deserialize(IoBuffer data) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public IoBuffer serialize() {
|
||||
IoBuffer result = IoBuffer.allocate(20).order(ByteOrder.LITTLE_ENDIAN);
|
||||
result.putShort((short) 2);
|
||||
result.putInt(0x325932D8);
|
||||
result.putLong(objectId);
|
||||
return result.flip();
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,22 @@
|
||||
package protocol.swg.clientSecureTradeManager;
|
||||
|
||||
import org.apache.mina.core.buffer.IoBuffer;
|
||||
|
||||
import protocol.swg.SWGMessage;
|
||||
|
||||
public class BeginVerificationMessage extends SWGMessage {
|
||||
|
||||
@Override
|
||||
public void deserialize(IoBuffer data) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public IoBuffer serialize() {
|
||||
IoBuffer result = IoBuffer.allocate(20);
|
||||
result.putShort((short) 1);
|
||||
result.putInt(0xE7491DF5);
|
||||
return result.flip();
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
package protocol.swg.clientSecureTradeManager;
|
||||
|
||||
import java.nio.ByteOrder;
|
||||
|
||||
import org.apache.mina.core.buffer.IoBuffer;
|
||||
|
||||
import protocol.swg.SWGMessage;
|
||||
|
||||
public class DenyTradeMessage extends SWGMessage {
|
||||
|
||||
@Override
|
||||
public void deserialize(IoBuffer data) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public IoBuffer serialize() {
|
||||
IoBuffer result = IoBuffer.allocate(20).order(ByteOrder.LITTLE_ENDIAN);
|
||||
result.putShort((short) 1);
|
||||
result.putInt(0x6EC28670);
|
||||
return result.flip();
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,39 @@
|
||||
package protocol.swg.clientSecureTradeManager;
|
||||
|
||||
import java.nio.ByteOrder;
|
||||
|
||||
import org.apache.mina.core.buffer.IoBuffer;
|
||||
|
||||
import protocol.swg.SWGMessage;
|
||||
|
||||
public class GiveMoneyMessage extends SWGMessage {
|
||||
|
||||
private int credits;
|
||||
|
||||
@Override
|
||||
public void deserialize(IoBuffer data) {
|
||||
|
||||
data.getShort();
|
||||
data.getInt();
|
||||
|
||||
setTradingCredits(data.getInt());
|
||||
}
|
||||
|
||||
@Override
|
||||
public IoBuffer serialize() {
|
||||
IoBuffer result = IoBuffer.allocate(40).order(ByteOrder.LITTLE_ENDIAN);
|
||||
result.putShort((short) 2);
|
||||
result.putInt(0xD1527EE8);
|
||||
result.putInt(credits);
|
||||
return result.flip();
|
||||
}
|
||||
|
||||
public int getTradingCredits() {
|
||||
return this.credits;
|
||||
}
|
||||
|
||||
public void setTradingCredits(int credits) {
|
||||
this.credits = credits;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,39 @@
|
||||
package protocol.swg.clientSecureTradeManager;
|
||||
|
||||
import java.nio.ByteOrder;
|
||||
|
||||
import org.apache.mina.core.buffer.IoBuffer;
|
||||
|
||||
import engine.resources.objects.SWGObject;
|
||||
import protocol.swg.SWGMessage;
|
||||
|
||||
public class RemoveItemMessage extends SWGMessage {
|
||||
|
||||
private long objectID;
|
||||
|
||||
@Override
|
||||
public void deserialize(IoBuffer data) {
|
||||
data.getShort();
|
||||
data.getInt();
|
||||
|
||||
setObjectID(data.getLong());
|
||||
}
|
||||
|
||||
@Override
|
||||
public IoBuffer serialize() {
|
||||
IoBuffer result = IoBuffer.allocate(20).order(ByteOrder.LITTLE_ENDIAN);
|
||||
result.putShort((short) 1);
|
||||
result.putInt(0x4417AF8B);
|
||||
result.putLong(objectID);
|
||||
return result.flip();
|
||||
}
|
||||
|
||||
public void setObjectID(long objectID) {
|
||||
this.objectID = objectID;
|
||||
}
|
||||
|
||||
public long getObjectID() {
|
||||
return this.objectID;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
package protocol.swg.clientSecureTradeManager;
|
||||
|
||||
import java.nio.ByteOrder;
|
||||
|
||||
import org.apache.mina.core.buffer.IoBuffer;
|
||||
|
||||
import protocol.swg.SWGMessage;
|
||||
|
||||
public class TradeCompleteMessage extends SWGMessage {
|
||||
|
||||
@Override
|
||||
public void deserialize(IoBuffer data) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public IoBuffer serialize() {
|
||||
IoBuffer result = IoBuffer.allocate(20).order(ByteOrder.LITTLE_ENDIAN);
|
||||
result.putShort((short) 1);
|
||||
result.putInt(0xC542038B);
|
||||
return result.flip();
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
package protocol.swg.clientSecureTradeManager;
|
||||
|
||||
public class TradeOpcodes {
|
||||
|
||||
public static int AbortTradeMessage = 0x9CA80F98;
|
||||
public static int TradeCompleteMessage = 0xC542038B;
|
||||
public static int AddItemMessage = 0x1E8D1356;
|
||||
public static int RemoveItemMessage = 0x4417AF8B;
|
||||
public static int GiveMoneyMessage = 0xD1527EE8;
|
||||
public static int AcceptTransactionMessage = 0xB131CA17;
|
||||
public static int UnAcceptTransactionMessage = 0xE81E4382;
|
||||
public static int VerifyTradeMessage = 0x9AE247EE;
|
||||
public static int AddItemFailedMessage = 0x69D3E1D2;
|
||||
public static int BeginVerificationMessage = 0xE7491DF5;
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
package protocol.swg.clientSecureTradeManager;
|
||||
|
||||
import java.nio.ByteOrder;
|
||||
|
||||
import org.apache.mina.core.buffer.IoBuffer;
|
||||
|
||||
import protocol.swg.SWGMessage;
|
||||
|
||||
public class UnAcceptTransactionMessage extends SWGMessage {
|
||||
|
||||
@Override
|
||||
public void deserialize(IoBuffer data) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public IoBuffer serialize() {
|
||||
IoBuffer result = IoBuffer.allocate(20).order(ByteOrder.LITTLE_ENDIAN);
|
||||
result.putShort((short) 1);
|
||||
result.putInt(0xE81E4382);
|
||||
return result.flip();
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
package protocol.swg.clientSecureTradeManager;
|
||||
|
||||
import java.nio.ByteOrder;
|
||||
|
||||
import org.apache.mina.core.buffer.IoBuffer;
|
||||
|
||||
import protocol.swg.SWGMessage;
|
||||
|
||||
public class VerifyTradeMessage extends SWGMessage {
|
||||
|
||||
@Override
|
||||
public void deserialize(IoBuffer data) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public IoBuffer serialize() {
|
||||
IoBuffer result = IoBuffer.allocate(20).order(ByteOrder.LITTLE_ENDIAN);
|
||||
result.putShort((short) 1);
|
||||
result.putInt(0x9AE247EE);
|
||||
return result.flip();
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,61 @@
|
||||
package protocol.swg.objectControllerObjects;
|
||||
|
||||
import java.nio.ByteOrder;
|
||||
|
||||
import org.apache.mina.core.buffer.IoBuffer;
|
||||
|
||||
import engine.resources.objects.SWGObject;
|
||||
import protocol.swg.ObjControllerMessage;
|
||||
import resources.objects.creature.CreatureObject;
|
||||
|
||||
public class SecureTrade extends ObjControllerObject{
|
||||
|
||||
private long senderID;
|
||||
private long recieverID;
|
||||
private short unknown;
|
||||
|
||||
public SecureTrade() {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void deserialize(IoBuffer data) {
|
||||
|
||||
setSenderID(data.getLong());
|
||||
data.getLong(); // skip through 0's
|
||||
data.getLong(); // skip through 0's
|
||||
setRecieverID(data.getLong());
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public IoBuffer serialize() {
|
||||
IoBuffer result = IoBuffer.allocate(100).order(ByteOrder.LITTLE_ENDIAN);
|
||||
result.setAutoExpand(true);
|
||||
|
||||
result.putInt(ObjControllerMessage.SPACIAL_CHAT);
|
||||
result.putInt(1);
|
||||
result.putLong(senderID);
|
||||
result.putLong(0);
|
||||
result.putLong(0);
|
||||
result.putLong(recieverID);
|
||||
|
||||
return result.flip();
|
||||
}
|
||||
|
||||
public long getSenderID() { return this.senderID; }
|
||||
public long getRecieverID() { return this.recieverID; }
|
||||
public short getUnkn() { return this.unknown; }
|
||||
|
||||
public void setUnknown(short unknown) {
|
||||
this.unknown = unknown;
|
||||
}
|
||||
public void setSenderID(long senderID) {
|
||||
this.senderID = senderID;
|
||||
}
|
||||
|
||||
public void setRecieverID(long recieverID) {
|
||||
this.recieverID = recieverID;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -28,5 +28,6 @@ public class ObjControllerOpcodes {
|
||||
public static final int COMMAND_QUEUE_ENQUEUE = 0x16010000;
|
||||
public static final int TARGET_UPDATE = 0x26010000;
|
||||
public static final int OBJECT_MENU_REQUEST = 0x46010000;
|
||||
public static final int SECURE_TRADE = 0x15010000;
|
||||
|
||||
}
|
||||
|
||||
@@ -44,5 +44,6 @@ public class Opcodes {
|
||||
public static int SelectCharacter = 0xB5098D76;
|
||||
public static int SuiEventNotification = 0x092D3564;
|
||||
public static int DeltasMessage = 0x12862153;
|
||||
public static int ChatAddFriend = 0x6FE7BD90;
|
||||
|
||||
}
|
||||
|
||||
@@ -1,26 +0,0 @@
|
||||
/*******************************************************************************
|
||||
* Copyright (c) 2013 <Project SWG>
|
||||
*
|
||||
* 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 <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
* 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 resources.objects.group;
|
||||
|
||||
public class GroupMessageBuilder {
|
||||
|
||||
}
|
||||
@@ -365,6 +365,16 @@ public class PlayerMessageBuilder extends ObjectMessageBuilder {
|
||||
|
||||
}
|
||||
|
||||
public IoBuffer buildTitleDelta(String title) {
|
||||
IoBuffer buffer = bufferPool.allocate(4 + getAsciiString(title).length, false).order(ByteOrder.LITTLE_ENDIAN);
|
||||
buffer.put(getAsciiString(title));
|
||||
int size = buffer.position();
|
||||
buffer.flip();
|
||||
buffer = createDelta("PLAY", (byte) 3, (short) 1, (short) 0x07, buffer, size + 4);
|
||||
return buffer;
|
||||
|
||||
}
|
||||
|
||||
public int getProfData(String profession) {
|
||||
|
||||
switch (profession) {
|
||||
@@ -390,18 +400,6 @@ public class PlayerMessageBuilder extends ObjectMessageBuilder {
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
public IoBuffer buildTitleDelta(String title) {
|
||||
|
||||
IoBuffer buffer = bufferPool.allocate(4, false).order(ByteOrder.LITTLE_ENDIAN);
|
||||
buffer.put(getAsciiString(title));
|
||||
int size = buffer.position();
|
||||
buffer.flip();
|
||||
buffer = createDelta("PLAY", (byte) 3, (short) 1, (short) 1, buffer, size + 4);
|
||||
|
||||
return buffer;
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void sendListDelta(byte viewType, short updateType, IoBuffer buffer) {
|
||||
|
||||
@@ -136,6 +136,12 @@ public class LoginService implements INetworkDispatch{
|
||||
StationIdHasJediSlot jediSlot = new StationIdHasJediSlot(false);
|
||||
ServerNowEpochTime time = new ServerNowEpochTime((int) (System.currentTimeMillis() / 1000));
|
||||
|
||||
if (client.getSession().containsAttribute("tradeSession") == true) {
|
||||
System.out.println("Has attribute: " + session.getAttribute("tradeSession").toString());
|
||||
client.getSession().removeAttribute("tradeSession");
|
||||
System.out.println("Removed tradeSession Attribute @ LoginService.java");
|
||||
}
|
||||
|
||||
session.write(time.serialize());
|
||||
session.write(clientToken.serialize());
|
||||
session.write(servers.serialize());
|
||||
|
||||
@@ -110,6 +110,7 @@ public class SimulationService implements INetworkDispatch {
|
||||
core.commandService.registerCommand("object");
|
||||
core.commandService.registerCommand("getattributesbatch");
|
||||
core.commandService.registerCommand("pvp");
|
||||
core.commandService.registerCommand("setcurrentskilltitle");
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,463 @@
|
||||
package services.trade;
|
||||
|
||||
import java.nio.ByteOrder;
|
||||
import java.util.Hashtable;
|
||||
import java.util.Iterator;
|
||||
import java.util.Map;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
|
||||
import main.NGECore;
|
||||
|
||||
import org.apache.mina.core.buffer.IoBuffer;
|
||||
import org.apache.mina.core.session.IoSession;
|
||||
|
||||
import protocol.swg.ObjControllerMessage;
|
||||
import protocol.swg.clientSecureTradeManager.AbortTradeMessage;
|
||||
import protocol.swg.clientSecureTradeManager.AcceptTransactionMessage;
|
||||
import protocol.swg.clientSecureTradeManager.AddItemMessage;
|
||||
import protocol.swg.clientSecureTradeManager.BeginTradeMessage;
|
||||
import protocol.swg.clientSecureTradeManager.BeginVerificationMessage;
|
||||
import protocol.swg.clientSecureTradeManager.DenyTradeMessage;
|
||||
import protocol.swg.clientSecureTradeManager.GiveMoneyMessage;
|
||||
import protocol.swg.clientSecureTradeManager.RemoveItemMessage;
|
||||
import protocol.swg.clientSecureTradeManager.TradeCompleteMessage;
|
||||
import protocol.swg.clientSecureTradeManager.TradeOpcodes;
|
||||
import protocol.swg.clientSecureTradeManager.UnAcceptTransactionMessage;
|
||||
import protocol.swg.objectControllerObjects.SecureTrade;
|
||||
import resources.common.ObjControllerOpcodes;
|
||||
import resources.objects.creature.CreatureObject;
|
||||
import engine.clients.Client;
|
||||
import engine.resources.objects.SWGObject;
|
||||
import engine.resources.service.INetworkDispatch;
|
||||
import engine.resources.service.INetworkRemoteEvent;
|
||||
|
||||
public class TradeService implements INetworkDispatch{
|
||||
|
||||
private NGECore core;
|
||||
|
||||
private long recieverID;
|
||||
private long senderID;
|
||||
|
||||
|
||||
private Hashtable<SWGObject, Long> tradingObjectsTable = new Hashtable<SWGObject, Long>();
|
||||
// key = objectToGive, value = giver's ID
|
||||
|
||||
// need to be sure that no giver ID exists in table before adding value
|
||||
private Hashtable<Long, Integer> tradingCreditsTable = new Hashtable<Long, Integer>();
|
||||
// key = ID of giver value = amnt recieving
|
||||
|
||||
public TradeService(NGECore core) {
|
||||
this.core = core;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void insertOpcodes(Map<Integer, INetworkRemoteEvent> swgOpcodes, Map<Integer, INetworkRemoteEvent> objControllerOpcodes) {
|
||||
|
||||
objControllerOpcodes.put(ObjControllerOpcodes.SECURE_TRADE, new INetworkRemoteEvent() {
|
||||
|
||||
@Override
|
||||
public void handlePacket(IoSession session, IoBuffer data) throws Exception {
|
||||
data.order(ByteOrder.LITTLE_ENDIAN);
|
||||
|
||||
SecureTrade request = new SecureTrade();
|
||||
request.deserialize(data);
|
||||
|
||||
senderID = request.getSenderID();
|
||||
recieverID = request.getRecieverID();
|
||||
|
||||
CreatureObject recieverObject = (CreatureObject) core.objectService.getObject(recieverID);
|
||||
CreatureObject senderObject = (CreatureObject) core.objectService.getObject(senderID);
|
||||
|
||||
Client senderClient = senderObject.getClient();
|
||||
Client recieverClient = recieverObject.getClient();
|
||||
|
||||
int senderClientId = senderClient.getConnectionId();
|
||||
int recieverClientId = recieverClient.getConnectionId();
|
||||
|
||||
//System.out.println("Sender isConnected: " + senderObject.getClient().getSession().isConnected());
|
||||
//System.out.println("Reciever isConnected: " + recieverObject.getClient().getSession().isConnected());
|
||||
|
||||
if (recieverClient.getSession().containsAttribute("tradeSession") == true) {
|
||||
|
||||
if(senderClient.getSession().containsAttribute("tradeSession") == false) {
|
||||
{
|
||||
senderClient.getSession().setAttribute("tradeSession", recieverID);
|
||||
}
|
||||
|
||||
BeginTradeMessage senderResponse = new BeginTradeMessage(recieverID);
|
||||
senderClient.getSession().write(senderResponse.serialize());
|
||||
|
||||
BeginTradeMessage recieverResponse = new BeginTradeMessage(senderID);
|
||||
recieverClient.getSession().write(recieverResponse.serialize());
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
else {
|
||||
|
||||
// creates a new trade session for the user who sent the request. It's given the objectID
|
||||
// that the player wants to trade with.
|
||||
senderClient.getSession().setAttribute("tradeSession", recieverID);
|
||||
|
||||
recieverObject.sendSystemMessage(senderObject.getCustomName() + " wants to trade with you.", (byte) 0);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
swgOpcodes.put(TradeOpcodes.AbortTradeMessage, new INetworkRemoteEvent() {
|
||||
|
||||
@Override
|
||||
public void handlePacket(IoSession session, IoBuffer data) throws Exception {
|
||||
data.order(ByteOrder.LITTLE_ENDIAN);
|
||||
data.position(0);
|
||||
|
||||
Client client = core.getClient((Integer) session.getAttribute("connectionId"));
|
||||
|
||||
if (client == null)
|
||||
return;
|
||||
|
||||
if (client.getSession().getAttribute("tradeSession") == null)
|
||||
{
|
||||
TradeCompleteMessage completeTrade = new TradeCompleteMessage();
|
||||
AbortTradeMessage nullResponse = new AbortTradeMessage();
|
||||
client.getSession().write(completeTrade.serialize());
|
||||
client.getSession().write(nullResponse.serialize());
|
||||
}
|
||||
|
||||
long tradingWithClient = (long) client.getSession().getAttribute("tradeSession");
|
||||
|
||||
CreatureObject tradee = (CreatureObject) core.objectService.getObject(tradingWithClient);
|
||||
Client tradeeClient = tradee.getClient();
|
||||
|
||||
|
||||
if(client.getSession() == null)
|
||||
return;
|
||||
|
||||
SWGObject object = client.getParent();
|
||||
SWGObject tradeeObject = tradeeClient.getParent();
|
||||
if(object == null)
|
||||
return;
|
||||
|
||||
SWGObject tradeObject = null;
|
||||
|
||||
Iterator<Map.Entry<SWGObject, Long>> itr = tradingObjectsTable.entrySet().iterator();
|
||||
|
||||
while (itr.hasNext()) {
|
||||
Map.Entry<SWGObject, Long> entry = itr.next();
|
||||
|
||||
if(tradingWithClient == entry.getValue()) {
|
||||
tradeObject = entry.getKey();
|
||||
itr.remove();
|
||||
}
|
||||
}
|
||||
|
||||
client.getSession().removeAttribute("tradeSession");
|
||||
tradeeClient.getSession().removeAttribute("tradeSession");
|
||||
|
||||
// make sure that tradeSession got removed.
|
||||
if (tradeeClient.getSession().containsAttribute("tradeSession") && client.getSession().containsAttribute("tradeSession"))
|
||||
return;
|
||||
|
||||
TradeCompleteMessage completeTrade = new TradeCompleteMessage();
|
||||
AbortTradeMessage response = new AbortTradeMessage();
|
||||
|
||||
tradeeClient.getSession().write(response.serialize());
|
||||
client.getSession().write(response.serialize());
|
||||
|
||||
client.getSession().write(completeTrade.serialize());
|
||||
tradeeClient.getSession().write(completeTrade.serialize());
|
||||
|
||||
}
|
||||
|
||||
|
||||
});
|
||||
|
||||
swgOpcodes.put(TradeOpcodes.AddItemMessage, new INetworkRemoteEvent() {
|
||||
|
||||
@Override
|
||||
public void handlePacket(IoSession session, IoBuffer data) throws Exception {
|
||||
data.order(ByteOrder.LITTLE_ENDIAN);
|
||||
data.position(0);
|
||||
|
||||
AddItemMessage addItem = new AddItemMessage();
|
||||
addItem.deserialize(data);
|
||||
|
||||
Client client = core.getClient((Integer) session.getAttribute("connectionId"));
|
||||
|
||||
if (client == null)
|
||||
return;
|
||||
|
||||
long tradeItemID = addItem.getTradeObjectID();
|
||||
long tradingWithClient = (long) client.getSession().getAttribute("tradeSession");
|
||||
|
||||
CreatureObject tradee = (CreatureObject) core.objectService.getObject(tradingWithClient);
|
||||
SWGObject objectToTrade = (SWGObject) core.objectService.getObject(tradeItemID);
|
||||
|
||||
if (objectToTrade == null) {
|
||||
System.out.println("objectToTrade is null: " + tradeItemID);
|
||||
return;
|
||||
}
|
||||
|
||||
else {
|
||||
|
||||
addItemForTrade(objectToTrade, tradingWithClient);
|
||||
System.out.println("Trading item: " + objectToTrade.getCustomName() + " detail: " + objectToTrade.getDetailFilename());
|
||||
|
||||
System.out.println("tradingObjectTable: " + tradingObjectsTable.toString());
|
||||
AddItemMessage tradeeResponse = new AddItemMessage();
|
||||
tradeeResponse.setTradeObjectID(tradeItemID);
|
||||
tradee.getClient().getSession().write(tradeeResponse.serialize());
|
||||
|
||||
//System.out.println("AddItemMessage in TradeService: " + data.getHexDump());
|
||||
}
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
swgOpcodes.put(TradeOpcodes.GiveMoneyMessage, new INetworkRemoteEvent() {
|
||||
|
||||
@Override
|
||||
public void handlePacket(IoSession session, IoBuffer data) throws Exception {
|
||||
|
||||
data.order(ByteOrder.LITTLE_ENDIAN);
|
||||
data.position(0);
|
||||
|
||||
Client client = core.getClient((Integer) session.getAttribute("connectionId"));
|
||||
long tradingWithClient = (long) client.getSession().getAttribute("tradeSession");
|
||||
|
||||
CreatureObject tradingPartner = (CreatureObject) core.objectService.getObject(tradingWithClient);
|
||||
CreatureObject sender = (CreatureObject) client.getParent();
|
||||
|
||||
GiveMoneyMessage fromClient = new GiveMoneyMessage();
|
||||
fromClient.deserialize(data);
|
||||
|
||||
int givingCredits = fromClient.getTradingCredits();
|
||||
|
||||
if (givingCredits <= sender.getCashCredits()) {
|
||||
|
||||
addMoneyForTrade(tradingWithClient, givingCredits);
|
||||
|
||||
GiveMoneyMessage toTradingPartner = new GiveMoneyMessage();
|
||||
toTradingPartner.setTradingCredits(givingCredits);
|
||||
|
||||
tradingPartner.getClient().getSession().write(toTradingPartner.serialize());
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
swgOpcodes.put(TradeOpcodes.RemoveItemMessage, new INetworkRemoteEvent() {
|
||||
|
||||
@Override
|
||||
public void handlePacket(IoSession session, IoBuffer buffer) throws Exception {
|
||||
|
||||
buffer.order(ByteOrder.LITTLE_ENDIAN);
|
||||
buffer.position(0);
|
||||
|
||||
RemoveItemMessage request = new RemoveItemMessage();
|
||||
|
||||
long objectToKeepID = request.getObjectID();
|
||||
|
||||
Client client = core.getClient((Integer) session.getAttribute("connectionId"));
|
||||
long tradingWithClient = (long) client.getSession().getAttribute("tradeSession");
|
||||
|
||||
CreatureObject tradePartner = (CreatureObject) core.objectService.getObject(tradingWithClient);
|
||||
|
||||
RemoveItemMessage response = new RemoveItemMessage();
|
||||
response.setObjectID(objectToKeepID);
|
||||
tradePartner.getClient().getSession().write(response.serialize());
|
||||
|
||||
removeItemForTrade(core.objectService.getObject(objectToKeepID));
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
swgOpcodes.put(TradeOpcodes.AcceptTransactionMessage, new INetworkRemoteEvent() {
|
||||
|
||||
@Override
|
||||
public void handlePacket(IoSession session, IoBuffer buffer) throws Exception {
|
||||
|
||||
// client sends this packet to the server and then the server sends it to client.
|
||||
|
||||
Client client = core.getClient((Integer) session.getAttribute("connectionId"));
|
||||
long tradingWithClient = (long) client.getSession().getAttribute("tradeSession");
|
||||
|
||||
CreatureObject tradePartner = (CreatureObject) core.objectService.getObject(tradingWithClient);
|
||||
|
||||
AcceptTransactionMessage acceptedTrade = new AcceptTransactionMessage();
|
||||
tradePartner.getClient().getSession().write(acceptedTrade.serialize());
|
||||
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
swgOpcodes.put(TradeOpcodes.UnAcceptTransactionMessage, new INetworkRemoteEvent() {
|
||||
|
||||
@Override
|
||||
public void handlePacket(IoSession session, IoBuffer buffer) throws Exception {
|
||||
|
||||
Client client = core.getClient((Integer) session.getAttribute("connectionId"));
|
||||
long tradingWithClient = (long) client.getSession().getAttribute("tradeSession");
|
||||
|
||||
CreatureObject tradePartner = (CreatureObject) core.objectService.getObject(tradingWithClient);
|
||||
|
||||
UnAcceptTransactionMessage undoAccept = new UnAcceptTransactionMessage();
|
||||
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((Integer) session.getAttribute("connectionId"));
|
||||
client.getSession().setAttribute("tradeSessionIsVerified");
|
||||
System.out.println("Verified client");
|
||||
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
swgOpcodes.put(TradeOpcodes.VerifyTradeMessage, new INetworkRemoteEvent() {
|
||||
|
||||
@Override
|
||||
public void handlePacket(IoSession session, IoBuffer buffer) throws Exception {
|
||||
|
||||
// Sent first!
|
||||
|
||||
Client client = core.getClient((Integer) session.getAttribute("connectionId"));
|
||||
long tradingWithClient = (long) getTradeAttribute(client);
|
||||
|
||||
CreatureObject tradePartner = (CreatureObject) core.objectService.getObject(tradingWithClient);
|
||||
CreatureObject actingTrader = (CreatureObject) client.getParent();
|
||||
CreatureObject tradePartnerContainer = (CreatureObject) tradePartner.getContainer();
|
||||
|
||||
SWGObject tradePartnerInventory = tradePartner.getSlottedObject("inventory");
|
||||
SWGObject actingTraderInventory = actingTrader.getSlottedObject("inventory");
|
||||
SWGObject tradeObject = null;
|
||||
|
||||
//if (tradePartner == null || actingTrader == null)
|
||||
//return;
|
||||
|
||||
//BeginVerificationMessage verifyMessage = new BeginVerificationMessage();
|
||||
//client.getSession().write(verifyMessage.serialize());
|
||||
//client.getSession().setAttribute("tradeSessionIsVerified");
|
||||
//tradePartner.getClient().getSession().write(verifyMessage.serialize());
|
||||
//tradePartner.getClient().getSession().setAttribute("tradeSessionIsVerified");
|
||||
|
||||
client.getSession().setAttribute("tradeSessionIsVerified");
|
||||
|
||||
if (tradePartner.getClient().getSession().getAttribute("tradeSessionIsVerified") == null)
|
||||
return;
|
||||
|
||||
else if (tradePartner.getClient().getSession().containsAttribute("tradeSessionIsVerified"))
|
||||
{
|
||||
|
||||
Iterator<Map.Entry<SWGObject, Long>> itr = tradingObjectsTable.entrySet().iterator();
|
||||
|
||||
while (itr.hasNext()) {
|
||||
Map.Entry<SWGObject, Long> entry = itr.next();
|
||||
|
||||
if(tradingWithClient == entry.getValue()) {
|
||||
tradeObject = entry.getKey();
|
||||
if (actingTrader == null || tradePartnerContainer == null || tradePartner == null)
|
||||
{
|
||||
cleanTradeSession(client, tradePartner.getClient());
|
||||
}
|
||||
actingTraderInventory.transferTo(tradePartner, tradePartnerInventory, tradeObject);
|
||||
itr.remove();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
int moneyToGive = 0;
|
||||
|
||||
for(Map.Entry<Long, Integer> entry : tradingCreditsTable.entrySet()) {
|
||||
if(tradingWithClient == entry.getKey()) {
|
||||
moneyToGive = entry.getValue();
|
||||
tradingCreditsTable.remove(tradingWithClient);
|
||||
}
|
||||
}
|
||||
|
||||
int tradePartnerCredits = tradePartner.getCashCredits();
|
||||
|
||||
if (moneyToGive != 0) {
|
||||
actingTrader.setCashCredits(tradePartnerCredits - moneyToGive);
|
||||
tradePartner.setCashCredits(tradePartnerCredits + moneyToGive);
|
||||
}
|
||||
|
||||
|
||||
System.out.println("Finished trading items/credits");
|
||||
|
||||
cleanTradeSession(client, tradePartner.getClient());
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
public long getTradeAttribute(Client client) {
|
||||
long tradeSessionValue;
|
||||
tradeSessionValue = (long) client.getSession().getAttribute("tradeSession");
|
||||
return tradeSessionValue;
|
||||
}
|
||||
|
||||
public Hashtable<SWGObject, Long> getTradingObjectMap() {
|
||||
return tradingObjectsTable;
|
||||
}
|
||||
|
||||
public void addItemForTrade(SWGObject swgObject, long tradePartnerID) {
|
||||
if (tradingObjectsTable.containsKey(swgObject)) {
|
||||
removeItemForTrade(swgObject);
|
||||
}
|
||||
tradingObjectsTable.put(swgObject, tradePartnerID);
|
||||
}
|
||||
|
||||
public void removeItemForTrade(SWGObject swgObject) {
|
||||
tradingObjectsTable.remove(swgObject);
|
||||
}
|
||||
|
||||
public void addMoneyForTrade(long tradePartnerID, int creditsAmount) {
|
||||
if (tradingCreditsTable.containsKey(tradePartnerID))
|
||||
{
|
||||
removeMoneyForTrade(tradePartnerID);
|
||||
}
|
||||
tradingCreditsTable.put(tradePartnerID, creditsAmount);
|
||||
}
|
||||
|
||||
public void removeMoneyForTrade(long tradePartnerID) {
|
||||
tradingCreditsTable.remove(tradePartnerID);
|
||||
}
|
||||
|
||||
public void cleanTradeSession(Client actorClient, Client targetTradeClient) {
|
||||
|
||||
TradeCompleteMessage partnerCompleteTrade = new TradeCompleteMessage();
|
||||
targetTradeClient.getSession().write(partnerCompleteTrade.serialize());
|
||||
|
||||
TradeCompleteMessage clientCompleteTrade = new TradeCompleteMessage();
|
||||
actorClient.getSession().write(clientCompleteTrade.serialize());
|
||||
|
||||
actorClient.getSession().removeAttribute("tradeSession");
|
||||
actorClient.getSession().removeAttribute("tradeSessionIsVerified");
|
||||
targetTradeClient.getSession().removeAttribute("tradeSession");
|
||||
targetTradeClient.getSession().removeAttribute("tradeSessionIsVerified");
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void shutdown() {
|
||||
// XXX Auto-generated method stub
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user