diff --git a/src/protocol/swg/CharacterSheetResponseMessage.java b/src/protocol/swg/CharacterSheetResponseMessage.java new file mode 100644 index 00000000..3e3dbc81 --- /dev/null +++ b/src/protocol/swg/CharacterSheetResponseMessage.java @@ -0,0 +1,76 @@ +/******************************************************************************* + * 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 org.apache.mina.core.buffer.IoBuffer; + +import resources.objects.player.PlayerObject; +import engine.resources.common.CRC; + +public class CharacterSheetResponseMessage extends SWGMessage { + + private PlayerObject player; + public CharacterSheetResponseMessage(PlayerObject player) { + this.player = player; + } + + @Override + public void deserialize(IoBuffer data) { + + } + + @Override + public IoBuffer serialize() { + IoBuffer buffer = IoBuffer.allocate(100).order(ByteOrder.LITTLE_ENDIAN); + buffer.putShort((short) 12); + buffer.putInt(CRC.StringtoCRC("CharacterSheetResponseMessage")); + buffer.putShort((short) 0); //unk + buffer.putInt(1); // unk + + + buffer.putFloat(0); // bind x + buffer.putFloat(0); // bind z + buffer.putFloat(0); // bind y + buffer.putInt(0); // planet + + buffer.putFloat(0); // bank x + buffer.putFloat(0); // bank z + buffer.putFloat(0); // bank y + buffer.put(getAsciiString("tatooine")); // planet + + buffer.putFloat(0); // home x + buffer.putFloat(0); // home z + buffer.putFloat(0); // home y + buffer.putInt(0); // home planet + + if (player.getSpouseName() == null) + buffer.putInt(0); + else + buffer.put(getUnicodeString(player.getSpouseName())); // spouse name <<<<< CORRECT + + buffer.putInt(10); // lots remaining <<<<<<< CORRECT + return buffer.flip(); + } + +} diff --git a/src/resources/objects/player/PlayerObject.java b/src/resources/objects/player/PlayerObject.java index 90d9d507..5a5732dc 100644 --- a/src/resources/objects/player/PlayerObject.java +++ b/src/resources/objects/player/PlayerObject.java @@ -28,6 +28,7 @@ import java.util.List; import java.util.Map; import java.util.TreeMap; +import resources.common.Console; import resources.objects.intangible.IntangibleObject; import resources.objects.waypoint.WaypointObject; @@ -41,7 +42,7 @@ import engine.resources.scene.Planet; import engine.resources.scene.Point3D; import engine.resources.scene.Quaternion; -@Persistent(version=4) +@Persistent(version=5) public class PlayerObject extends IntangibleObject { // PLAY 3 @@ -117,6 +118,7 @@ public class PlayerObject extends IntangibleObject { private int jediState = 0; // unused in NGE private String biography = ""; + private String spouse; @NotPersistent private PlayerMessageBuilder messageBuilder; @@ -229,6 +231,8 @@ public class PlayerObject extends IntangibleObject { synchronized(objectMutex) { xpExists = xpList.containsKey(type); xpList.put(type, amount); + Console.println("Put " + type + " exp of " + amount + " in the map."); + Console.println("Map is now: " + xpList.get(type).intValue()); } if (getContainer() != null && getContainer().getClient() != null && getContainer().getClient().getSession() != null) { @@ -679,6 +683,16 @@ public class PlayerObject extends IntangibleObject { } } + public String getSpouseName() { + return spouse; + } + + public void setSpouseName(String spouse) { + synchronized(objectMutex) { + this.spouse = spouse; + } + } + public int getFlagBitmask() { synchronized(objectMutex) { return flagBitmask; diff --git a/src/services/PlayerService.java b/src/services/PlayerService.java index 20dffc73..c5d4a4b6 100644 --- a/src/services/PlayerService.java +++ b/src/services/PlayerService.java @@ -37,6 +37,7 @@ import java.util.concurrent.TimeUnit; import org.apache.mina.core.buffer.IoBuffer; import org.apache.mina.core.session.IoSession; +import protocol.swg.CharacterSheetResponseMessage; import protocol.swg.ClientIdMsg; import protocol.swg.ClientMfdStatusUpdateMessage; import protocol.swg.CreateClientPathMessage; @@ -300,6 +301,13 @@ public class PlayerService implements INetworkDispatch { PlayerMoneyResponse response = new PlayerMoneyResponse(creature.getCashCredits(), creature.getBankCredits()); session.write(response.serialize()); + + PlayerObject ghost = (PlayerObject) player.getSlottedObject("ghost"); + if (ghost == null) + return; + + CharacterSheetResponseMessage msg = new CharacterSheetResponseMessage(ghost); + session.write(msg.serialize()); } });