diff --git a/src/resources/objects/creature/CreatureObject.java b/src/resources/objects/creature/CreatureObject.java index c93e4c008..960bef37d 100644 --- a/src/resources/objects/creature/CreatureObject.java +++ b/src/resources/objects/creature/CreatureObject.java @@ -7,8 +7,10 @@ import network.packets.swg.zone.baselines.Baseline.BaselineType; import network.packets.swg.zone.baselines.CREO6; import resources.Posture; import resources.Race; +import resources.common.CRC; import resources.network.BaselineBuilder; import resources.objects.tangible.TangibleObject; +import resources.objects.weapon.WeaponObject; import resources.player.Player; public class CreatureObject extends TangibleObject { @@ -43,6 +45,9 @@ public class CreatureObject extends TangibleObject { private int totalLevelXp = 0; private CreatureDifficulty difficulty = CreatureDifficulty.NORMAL; private boolean beast = false; + private long weaponId = 0; + + private WeaponObject weapon; // TODO: Remove once equipment list is up and running public CreatureObject(long objectId) { super(objectId); @@ -273,6 +278,11 @@ public class CreatureObject extends TangibleObject { this.beast = beast; } + public void setWeapon(WeaponObject weapon) { // TODO: Remove method & variable when equipment list is up and running + this.weapon = weapon; + weaponId = weapon.getObjectId(); + } + public void createObject(Player target) { sendSceneCreateObject(target); @@ -280,22 +290,22 @@ public class CreatureObject extends TangibleObject { CREO6 c6 = new CREO6(getObjectId()); c6.setId(getObjectId()); c6.setType(BaselineType.CREO); c6.setNum(6); -// bb = new BaselineBuilder(this, BaselineType.CREO, 1); // ZONED IN! ( crash when pressing escape ) -// createBaseline1(target, bb); -// bb.sendTo(target); + bb = new BaselineBuilder(this, BaselineType.CREO, 1); // ZONED IN! ( crash when pressing escape ) + createBaseline1(target, bb); + bb.sendTo(target); bb = new BaselineBuilder(this, BaselineType.CREO, 3); createBaseline3(target, bb); bb.sendTo(target); -// bb = new BaselineBuilder(this, BaselineType.CREO, 4); // ZONED IN! ( crash when pressing escape ) -// createBaseline4(target, bb); -// bb.sendTo(target); + bb = new BaselineBuilder(this, BaselineType.CREO, 4); // ZONED IN! ( crash when pressing escape ) + createBaseline4(target, bb); + bb.sendTo(target); bb = new BaselineBuilder(this, BaselineType.CREO, 6); createBaseline6(target, bb); -// bb.sendTo(target); - target.sendPacket(new Baseline(getObjectId(), c6)); + bb.sendTo(target); +// target.sendPacket(new Baseline(getObjectId(), c6)); bb = new BaselineBuilder(this, BaselineType.CREO, 8); createBaseline8(target, bb); @@ -380,7 +390,7 @@ public class CreatureObject extends TangibleObject { bb.addInt(0); // Granted Health bb.addAscii(""); // Current Animation bb.addAscii("neutral"); // Animation Mood - bb.addLong(0); // Weapon ID + bb.addLong(weaponId); // Weapon ID bb.addLong(0); // Group ID bb.addLong(0); // Group Inviter ID bb.addAscii(""); // Group Inviter Name @@ -407,8 +417,16 @@ public class CreatureObject extends TangibleObject { bb.addInt(0); bb.addInt(100);//bb.addInt(0x2C010000); bb.addInt(0); - bb.addInt(0); // Equipment List (List, Equipment structure) - bb.addInt(0); + bb.addInt(1); // Equipment List (List, Equipment structure) + bb.addInt(1); + // TODO: Remove this when equipment list is up and running + bb.addShort(0); // customization string + bb.addInt(4); // arrangementId + bb.addLong(weaponId); + System.out.println("Template: " + weapon.getTemplate() + " int: " + CRC.getCrc(weapon.getTemplate())); + bb.addInt(CRC.getCrc(weapon.getTemplate())); + bb.addBoolean(true); // isWeaponobject + bb.addArray(weapon.encode()); bb.addAscii(""); // Appearance (costume) bb.addBoolean(true); // Visible bb.addInt(0); // Buff list (Map, k = Integer v = Buff structure) diff --git a/src/resources/objects/weapon/WeaponObject.java b/src/resources/objects/weapon/WeaponObject.java index 2a9a9f680..deb555436 100644 --- a/src/resources/objects/weapon/WeaponObject.java +++ b/src/resources/objects/weapon/WeaponObject.java @@ -2,10 +2,12 @@ package resources.objects.weapon; import network.packets.swg.zone.baselines.Baseline.BaselineType; import resources.network.BaselineBuilder; +import resources.network.BaselineBuilder.Encodable; import resources.objects.tangible.TangibleObject; import resources.player.Player; +import utilities.ByteUtilities; -public class WeaponObject extends TangibleObject { +public class WeaponObject extends TangibleObject implements Encodable{ private static final long serialVersionUID = 1L; @@ -92,4 +94,24 @@ public class WeaponObject extends TangibleObject { super.createBaseline9(target, bb); } + + + @Override + public byte[] encode() { + 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); + 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); + + + System.out.println("WEAP: " + ByteUtilities.getHexString(ret)); + return ret; + } } diff --git a/src/resources/objects/weapon/WeaponType.java b/src/resources/objects/weapon/WeaponType.java index 946bb36c5..637b03b95 100644 --- a/src/resources/objects/weapon/WeaponType.java +++ b/src/resources/objects/weapon/WeaponType.java @@ -1,6 +1,7 @@ package resources.objects.weapon; public final class WeaponType { + // combat_timing.iff datatable public static final int RIFLE = 0; public static final int CARBINE = 1; public static final int PISTOL = 2; @@ -14,5 +15,5 @@ public final class WeaponType { public static final int TWOHANDEDSABER = 10; public static final int POLEARMSABER = 11; public static final int HEAVYWEAPON = 12; - public static final int FLAMETHROWER = 13; + public static final int DIRECTIONALTARGETWEAPON = 13; } diff --git a/src/services/player/ZoneService.java b/src/services/player/ZoneService.java index 9d379a995..5e00a5d09 100644 --- a/src/services/player/ZoneService.java +++ b/src/services/player/ZoneService.java @@ -38,6 +38,7 @@ import resources.control.Service; import resources.objects.creature.CreatureObject; import resources.objects.player.PlayerObject; import resources.objects.tangible.TangibleObject; +import resources.objects.weapon.WeaponObject; import resources.player.Player; import resources.player.PlayerEvent; import resources.services.Config; @@ -142,6 +143,8 @@ public class ZoneService extends Service { creatureObj.setVolume(0x000F4240); PlayerObject playerObj = (PlayerObject) objManager.createObject("object/player/shared_player.iff"); TangibleObject hairObj = (TangibleObject) objManager.createObject(create.getHair()); + WeaponObject defaultWeap = (WeaponObject) objManager.createObject("object/weapon/creature/shared_creature_default_weapon.iff"); + creatureObj.setWeapon(defaultWeap); setCreatureObjectValues(creatureObj, create); playerObj.setProfession(create.getProfession()); hairObj.setAppearanceData(create.getHairCustomization());