mirror of
https://github.com/ProjectSWGCore/Holocore.git
synced 2026-10-11 01:13:02 -04:00
Merged in M4SS/holocore (pull request #82)
Fixed the broken WeaponObject for Equipment implementation
This commit is contained in:
@@ -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);
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user