Пример #1
0
        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());
        }
Пример #2
0
        // 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));
        }
Пример #3
0
        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());
        }
Пример #4
0
        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()
            }));
        }
Пример #5
0
        // 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()
            }));
        }
Пример #6
0
        // 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));
        }
Пример #7
0
        // 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()
            }));
        }
Пример #8
0
        // 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));
        }
Пример #9
0
        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()
            }));
        }