protected override byte[] BuildCreatePacket() { foreach (var creationUpdateFieldEntry in entity.Info.CreationUpdateFieldEntries) { UpdateQueue.Enqueue(creationUpdateFieldEntry); } SetInfoFields(entity.Info); var writer = new BinaryWriter(new MemoryStream()); writer.Write((byte)ObjectUpdateType.UPDATETYPE_CREATE_OBJECT); writer.WritePackedUInt64(this.entity.ObjectGUID.RawGUID); writer.Write((byte)TypeID.TYPEID_GAMEOBJECT); ObjectUpdateFlag updateFlags = ObjectUpdateFlag.UPDATEFLAG_TRANSPORT | ObjectUpdateFlag.UPDATEFLAG_ALL | ObjectUpdateFlag.UPDATEFLAG_HAS_POSITION; writer.Write((byte)updateFlags); // Position writer.Write(entity.Location.X); writer.Write(entity.Location.Y); writer.Write(entity.Location.Z); writer.Write(entity.Location.Orientation); // R writer.Write((uint)0x1); // Unkown... time? writer.Write((uint)0); // Unkown... time? WriteUpdateFields(writer); return((writer.BaseStream as MemoryStream).ToArray()); }
// Create Game Object on World internal static UpdateObject CreateGameObject(zoneObjeto gameObject) { BinaryWriter writer = new BinaryWriter(new MemoryStream()); writer.Write((byte)ObjectUpdateType.UPDATETYPE_CREATE_OBJECT); GameObjectEntity entity = new GameObjectEntity(gameObject); writer.WritePackedUInt64(entity.ObjectGuid.RawGuid); writer.Write((byte)TypeId.TypeidGameobject); ObjectUpdateFlag updateFlags = ObjectUpdateFlag.UpdateflagTransport | ObjectUpdateFlag.UpdateflagAll | ObjectUpdateFlag.UpdateflagHasPosition; writer.Write((byte)updateFlags); writer.Write(gameObject.map.mapX); writer.Write(gameObject.map.mapY); writer.Write(gameObject.map.mapZ); writer.Write((float)0); writer.Write((uint)0x1); writer.Write((uint)0); entity.WriteUpdateFields(writer); return(new UpdateObject(new List <byte[]> { (writer.BaseStream as MemoryStream)?.ToArray() }, 1)); }
protected override byte[] BuildCreatePacket() { //Add all info field entries to the queue foreach (var creationUpdateFieldEntry in entity.Info.CreationUpdateFieldEntries) { UpdateQueue.Enqueue(creationUpdateFieldEntry); } SetInfoFields(entity.Info); var writer = new BinaryWriter(new MemoryStream()); //TODO Work out why "adder" unit crashes client. Maybe a pet or dynamic object? writer.Write((byte)ObjectUpdateType.UPDATETYPE_CREATE_OBJECT); writer.WritePackedUInt64(entity.ObjectGUID.RawGUID); writer.Write((byte)TypeID.TYPEID_UNIT); ObjectUpdateFlag updateFlags = ObjectUpdateFlag.UPDATEFLAG_ALL | ObjectUpdateFlag.UPDATEFLAG_LIVING | ObjectUpdateFlag.UPDATEFLAG_HAS_POSITION; writer.Write((byte)updateFlags); writer.Write((uint)MovementFlags.MOVEFLAG_NONE); // MovementFlags writer.Write((uint)Environment.TickCount); // Time // 3 bytes ahead? // Position writer.Write(entity.Location.X); writer.Write(entity.Location.Y); writer.Write(entity.Location.Z); writer.Write(entity.Location.Orientation); // R // Movement speeds writer.Write((float)0); // ???? writer.Write(entity.Info.WalkSpeed); // MOVE_WALK writer.Write((float)7); // MOVE_RUN writer.Write(4.5f); // MOVE_RUN_BACK writer.Write(4.72f); // MOVE_SWIM writer.Write(2.5f); // MOVE_SWIM_BACK writer.Write(3.14f); // MOVE_TURN_RATE writer.Write(0x1); // Unkown... // entity.GUID = 1141440694; this.WriteUpdateFields(writer); return((writer.BaseStream as MemoryStream).ToArray()); }
public PSUpdateObject BuildOwnCharacterPacket() { foreach (var creationUpdateFieldEntry in entity.Info.CreationUpdateFieldEntries) { UpdateQueue.Enqueue(creationUpdateFieldEntry); } SetInfoFields(entity.Info); BinaryWriter writer = new BinaryWriter(new MemoryStream()); writer.Write((byte)ObjectUpdateType.UPDATETYPE_CREATE_OBJECT2); writer.WritePackedUInt64(this.entity.ObjectGUID.RawGUID); writer.Write((byte)TypeID.TYPEID_PLAYER); ObjectUpdateFlag updateFlags = ObjectUpdateFlag.UPDATEFLAG_ALL | ObjectUpdateFlag.UPDATEFLAG_SELF | ObjectUpdateFlag.UPDATEFLAG_HAS_POSITION | ObjectUpdateFlag.UPDATEFLAG_LIVING; writer.Write((byte)updateFlags); writer.Write((UInt32)MovementFlags.MOVEFLAG_NONE); writer.Write((UInt32)Environment.TickCount); // Time? // Position writer.Write((float)entity.Location.X); writer.Write((float)entity.Location.Y); writer.Write((float)entity.Location.Z); writer.Write((float)entity.Location.Orientation); // R // Movement speeds writer.Write((float)0); // ???? writer.Write((float)entity.Info.WalkSpeed); // MOVE_WALK writer.Write((float)20f); // MOVE_RUN writer.Write((float)4.5f); // MOVE_RUN_BACK writer.Write((float)4.72f); // MOVE_SWIM writer.Write((float)2.5f); // MOVE_SWIM_BACK writer.Write((float)3.14f); // MOVE_TURN_RATE writer.Write(0x1); // Unkown... this.WriteUpdateFields(writer); return(new PSUpdateObject(new List <byte[]>() { (writer.BaseStream as MemoryStream).ToArray() })); }
// Update Values for Character internal static PacketServer CreateCharacterUpdate(Characters character) { BinaryWriter writer = new BinaryWriter(new MemoryStream()); writer.Write((byte)ObjectUpdateType.UPDATETYPE_CREATE_OBJECT_SELF); byte[] guidBytes = GenerateGuidBytes((ulong)character.Id); WriteBytes(writer, guidBytes, guidBytes.Length); writer.Write((byte)TypeId.TypeidPlayer); ObjectUpdateFlag updateFlags = ObjectUpdateFlag.UpdateflagAll | ObjectUpdateFlag.UpdateflagHasPosition | ObjectUpdateFlag.UpdateflagLiving; writer.Write((byte)updateFlags); writer.Write((uint)MovementFlags.MoveflagNone); writer.Write((uint)Environment.TickCount); // Time? // Position writer.Write(character.MapX); writer.Write(character.MapY); writer.Write(character.MapZ); writer.Write(character.MapO); // R // Movement speeds writer.Write((float)0); // ???? writer.Write(2.5f); // MOVE_WALK writer.Write(7f); // MOVE_RUN writer.Write(4.5f); // MOVE_RUN_BACK writer.Write(4.72f * 20); // MOVE_SWIM writer.Write(2.5f); // MOVE_SWIM_BACK writer.Write(3.14f); // MOVE_TURN_RATE writer.Write(0x1); // Unkown... PlayerEntity playerEntity = new PlayerEntity(character) { Guid = (uint)character.Id }; playerEntity.WriteUpdateFields(writer); return(new UpdateObject(new List <byte[]> { (writer.BaseStream as MemoryStream)?.ToArray() })); }
// USO INTERNO Criando Spawn NPC internal static UpdateObject CreateUnit(float x, float y, float z, float o) { BinaryWriter writer = new BinaryWriter(new MemoryStream()); writer.Write((byte)ObjectUpdateType.UPDATETYPE_CREATE_OBJECT); var abacate = XmlReader.ObjectsAzeroth.objeto.First(a => a.id == 31000001); UnitEntity entity = new UnitEntity(abacate); writer.WritePackedUInt64(entity.ObjectGuid.RawGuid); writer.Write((byte)TypeId.TypeidUnit); ObjectUpdateFlag updateFlags = ObjectUpdateFlag.UpdateflagAll | ObjectUpdateFlag.UpdateflagLiving | ObjectUpdateFlag.UpdateflagHasPosition; writer.Write((byte)updateFlags); writer.Write((UInt32)0x00000000); //MovementFlags writer.Write((UInt32)Environment.TickCount); // Time // Position writer.Write(x); writer.Write(y); writer.Write(z); // Check if spawn have a Orientation if not random writer.Write(GetRandomNumber(0, 12)); // R // Movement speeds writer.Write((float)0); // ???? writer.Write(2.5f); // MOVE_WALK writer.Write(7f); // MOVE_RUN writer.Write(4.5f); // MOVE_RUN_BACK writer.Write(4.72f); // MOVE_SWIM writer.Write(2.5f); // MOVE_SWIM_BACK writer.Write(3.14f); // MOVE_TURN_RATE writer.Write(abab); // Unkown... entity.WriteUpdateFields(writer); Console.WriteLine($@"Vem aqui cao => {abab}"); abab++; return(new UpdateObject(new List <byte[]> { (writer.BaseStream as MemoryStream)?.ToArray() }, 1)); }
// Create Character on World internal static UpdateObject CreateOwnCharacterUpdate(Characters character, out PlayerEntity entity) { BinaryWriter writer = new BinaryWriter(new MemoryStream()); writer.Write((byte)ObjectUpdateType.UPDATETYPE_CREATE_OBJECT_SELF); writer.WritePackedUInt64((ulong)character.Id); writer.Write((byte)TypeId.TypeidPlayer); const ObjectUpdateFlag updateFlags = ObjectUpdateFlag.UpdateflagAll | ObjectUpdateFlag.UpdateflagHasPosition | ObjectUpdateFlag.UpdateflagLiving | ObjectUpdateFlag.UpdateflagSelf; writer.Write((byte)updateFlags); writer.Write((uint)MovementFlags.MoveflagNone); writer.Write((uint)Environment.TickCount); writer.Write(character.MapX); writer.Write(character.MapY); writer.Write(character.MapZ); writer.Write(character.MapO); writer.Write((float)0); writer.Write(2.5f); writer.Write(7f * 10); writer.Write(4.5f); writer.Write(4.72f); writer.Write(2.5f); writer.Write(3.14f); writer.Write(0x1); entity = new PlayerEntity(character) { ObjectGuid = new ObjectGuid((ulong)character.Id), Guid = (ulong)character.Id }; entity.WriteUpdateFields(writer); return(new UpdateObject(new List <byte[]> { ((MemoryStream)writer.BaseStream).ToArray() })); }
// USO INTERNO Criando OBJETO internal static UpdateObject CreateGameObject(float x, float y, float z) { BinaryWriter writer = new BinaryWriter(new MemoryStream()); writer.Write((byte)ObjectUpdateType.UPDATETYPE_CREATE_OBJECT); var abacate = XmlReader.ObjectsAzeroth.objeto.First(a => a.id == 31000001); Console.WriteLine(abacate.name); GameObjectEntity entity = new GameObjectEntity(abacate); writer.WritePackedUInt64(entity.ObjectGuid.RawGuid); writer.Write((byte)TypeId.TypeidGameobject); ObjectUpdateFlag updateFlags = ObjectUpdateFlag.UpdateflagTransport | ObjectUpdateFlag.UpdateflagAll | ObjectUpdateFlag.UpdateflagHasPosition; writer.Write((byte)updateFlags); // Position writer.Write(x); writer.Write(y); writer.Write(z); writer.Write((float)0); // R writer.Write((uint)0x1); // Unkown... time? writer.Write((uint)0); // Unkown... time? entity.WriteUpdateFields(writer); return(new UpdateObject(new List <byte[]> { (writer.BaseStream as MemoryStream)?.ToArray() }, 1)); }
internal static UpdateObject CreateItem(CharactersInventorys inventory, Characters sessionCharacter) { BinaryWriter writer = new BinaryWriter(new MemoryStream()); writer.Write((byte)ObjectUpdateType.UPDATETYPE_CREATE_OBJECT); ItemEntity entity = new ItemEntity(inventory, sessionCharacter) { ObjectGuid = new ObjectGuid(inventory.item), Guid = inventory.item }; writer.WritePackedUInt64(entity.ObjectGuid.RawGuid); writer.Write((byte)TypeId.TypeidItem); ObjectUpdateFlag updateFlags = ObjectUpdateFlag.UpdateflagTransport | ObjectUpdateFlag.UpdateflagAll | ObjectUpdateFlag.UpdateflagHasPosition; writer.Write((byte)updateFlags); writer.Write(0f); writer.Write(0f); writer.Write(0f); writer.Write((float)0); writer.Write((uint)0x1); writer.Write((uint)0); entity.WriteUpdateFields(writer); return(new UpdateObject(new List <byte[]> { (writer.BaseStream as MemoryStream)?.ToArray() })); }