Merged in M4SS/holocore (pull request #82)

Fixed the broken WeaponObject for Equipment implementation
This commit is contained in:
Obique PSWG
2015-10-08 19:28:38 -05:00
3 changed files with 34 additions and 40 deletions
+32 -12
View File
@@ -28,10 +28,13 @@
package resources.encodables.player;
import network.packets.Packet;
import network.packets.swg.zone.baselines.Baseline.BaselineType;
import resources.common.CRC;
import resources.encodables.Encodable;
import resources.network.BaselineBuilder;
import resources.objects.SWGObject;
import resources.objects.weapon.WeaponObject;
import resources.player.Player;
import java.io.Serializable;
import java.nio.ByteBuffer;
@@ -40,35 +43,36 @@ import java.nio.ByteOrder;
public class Equipment implements Encodable, Serializable {
private static final long serialVersionUID = 1L;
// private WeaponObject weapon;
private WeaponObject weapon;
private byte[] customizationString;
private int arrangementId = 4;
private long objectId;
private String template;
private Player weaponOwner;
public Equipment(long objectId, String template) {
this.objectId = objectId;
this.template = template;
}
public Equipment(WeaponObject weapon) {
public Equipment(WeaponObject weapon, Player weaponOwner) {
this(weapon.getObjectId(), weapon.getTemplate());
// this.weapon = weapon;
this.weapon = weapon;
this.weaponOwner = weaponOwner;
}
@Override
public byte[] encode() {
// TODO: This is not working for weapons (crashes w/ a weapon), needs to be refactored
ByteBuffer buffer;
//byte[] weaponData = null;
byte[] weaponData = null;
/* if (weapon != null) {
weaponData = weapon.encode();
if (weapon != null) {
weaponData = getWeaponData();
buffer = ByteBuffer.allocate(19 + weaponData.length).order(ByteOrder.LITTLE_ENDIAN);
} else {*/
} else {
buffer = ByteBuffer.allocate(19).order(ByteOrder.LITTLE_ENDIAN);
/* }*/
}
if (customizationString == null) buffer.putShort((short) 0); // TODO: Create encodable class for customization string
else buffer.put(customizationString);
@@ -77,12 +81,12 @@ public class Equipment implements Encodable, Serializable {
buffer.putLong(objectId);
buffer.putInt(CRC.getCrc(template));
/* if (weapon != null) {
if (weapon != null) {
buffer.put((byte) 0x01);
buffer.put(weaponData);
} else {*/
} else {
buffer.put((byte) 0x00);
/* }*/
}
return buffer.array();
}
@@ -110,6 +114,22 @@ public class Equipment implements Encodable, Serializable {
public String getTemplate() { return template; }
public void setTemplate(String template) { this.template = template; }
private byte[] getWeaponData() {
BaselineBuilder bb = new BaselineBuilder(weapon, BaselineType.WEAO, 3);
weapon.createBaseline3(weaponOwner, bb);
byte[] data3 = bb.buildAsBaselinePacket();
bb = new BaselineBuilder(weapon, BaselineType.WEAO, 6);
weapon.createBaseline6(weaponOwner, bb);
byte[] data6 = bb.buildAsBaselinePacket();
byte[] ret = new byte[data3.length + data6.length];
System.arraycopy(data3, 0, ret, 0, data3.length);
System.arraycopy(data6, 0, ret, data3.length, data6.length);
return ret;
}
@Override
public String toString() {
return "Equipment: " + template;
@@ -133,7 +133,7 @@ public class CreatureObject extends TangibleObject {
public void addEquipment(SWGObject obj) {
synchronized(equipmentList) {
if (obj instanceof WeaponObject)
equipmentList.add(new Equipment((WeaponObject) obj));
equipmentList.add(new Equipment((WeaponObject) obj, getOwner()));
else
equipmentList.add(new Equipment(obj.getObjectId(), obj.getTemplate()));
equipmentList.sendDeltaMessage(this);
+1 -27
View File
@@ -28,14 +28,11 @@
package resources.objects.weapon;
import network.packets.swg.zone.baselines.Baseline.BaselineType;
import resources.encodables.Encodable;
import resources.network.BaselineBuilder;
import resources.objects.tangible.TangibleObject;
import resources.player.Player;
import java.nio.ByteBuffer;
public class WeaponObject extends TangibleObject implements Encodable {
public class WeaponObject extends TangibleObject {
private static final long serialVersionUID = 1L;
@@ -128,27 +125,4 @@ public class WeaponObject extends TangibleObject implements Encodable {
super.createBaseline9(target, bb);
}
@Override
public byte[] encode() {
// TODO: Refactor, causes crashes
BaselineBuilder bb = new BaselineBuilder(this, BaselineType.WEAO, 3);
createBaseline3(null, bb);
byte[] data3 = bb.buildAsBaselinePacket();
bb = new BaselineBuilder(this, BaselineType.WEAO, 6);
createBaseline6(null, bb); // TODO: This needs to have a target otherwise null pointer will be thrown, new encode function in encodable?
byte[] data6 = bb.buildAsBaselinePacket();
byte[] ret = new byte[data3.length + data6.length];
System.arraycopy(data3, 0, ret, 0, data3.length);
System.arraycopy(data6, 0, ret, data3.length, data6.length);
return ret;
}
@Override
public void decode(ByteBuffer data) {
// TODO: Implement decode method in WeaponObject
}
}