Example #1
0
        public void AddToWorld()
        {
            CreateFullGuid();
            CreateData(Creature);

            Globals.SpawnMgr.AddSpawn(this);

            WorldObject obj         = this;
            UpdateFlag  updateFlags = UpdateFlag.Alive | UpdateFlag.Rotation;

            foreach (var v in Globals.WorldMgr.Sessions)
            {
                Character pChar = v.Value.Character;

                if (pChar.CheckDistance(this))
                {
                    PacketWriter updateObject = new PacketWriter(ServerMessage.ObjectUpdate);

                    updateObject.WriteUInt16((ushort)Map);
                    updateObject.WriteUInt32(1);

                    WorldMgr.WriteCreateObject(ref updateObject, obj, updateFlags, ObjectType.Unit);

                    v.Value.Send(ref updateObject);
                }
            }
        }
Example #2
0
    /// <summary>
    ///
    /// </summary>
    /// <param name="url"></param>
    /// <param name="progressCallback"></param>
    /// <returns></returns>
    public static IEnumerator DoCheckUpdate(string url,
                                            Action <Stage, float, string> progressCallback)
    {
        updateFlag = UpdateFlag.None;

        progressCallback(Stage.FetchVersion, 0.1f, string.Empty);

        float timeOut = 0.0f;

        WWW loader = new WWW(url);

        while (!loader.isDone)
        {
            timeOut = Math.Min(timeOut + Time.deltaTime, TIMEOUT);
            if (timeOut <= 0)
            {
                yield break;
            }
            else
            {
                progressCallback(Stage.FetchVersion, 0.1f + (timeOut / TIMEOUT) * 0.4f, string.Empty);
                yield return(null);
            }
        }

        progressCallback(Stage.FetchVersion, 0.5f, string.Empty);
        yield return(null);

        if (string.IsNullOrEmpty(loader.error))
        {
        }
    }
Example #3
0
 protected ServerUpdatePacket(uint sequence, UpdateType updateType, UpdateFlag updateFlags = UpdateFlag.None)
     : base(ServerRawOpcode.Update)
 {
     this.sequence    = sequence;
     this.updateType  = updateType;
     this.updateFlags = updateFlags;
 }
 public ObjectMovementValues(UpdateFlag updateflags)
 {
     this.IsSelf                 = ((updateflags & UpdateFlag.Self) > (UpdateFlag)0);
     this.IsAlive                = ((updateflags & UpdateFlag.Alive) > (UpdateFlag)0);
     this.HasRotation            = ((updateflags & UpdateFlag.Rotation) > (UpdateFlag)0);
     this.HasStationaryPosition  = ((updateflags & UpdateFlag.StationaryPosition) > (UpdateFlag)0);
     this.HasTarget              = ((updateflags & UpdateFlag.Target) > (UpdateFlag)0);
     this.IsTransport            = ((updateflags & UpdateFlag.Transport) > (UpdateFlag)0);
     this.HasGoTransportPosition = ((updateflags & UpdateFlag.GoTransportPosition) > (UpdateFlag)0);
     this.HasAnimKits            = ((updateflags & UpdateFlag.AnimKits) > (UpdateFlag)0);
     this.IsVehicle              = ((updateflags & UpdateFlag.Vehicle) > (UpdateFlag)0);
 }
 public ObjectMovementValues(UpdateFlag updateflags)
 {
     IsSelf                 = (updateflags & UpdateFlag.Self) != 0;
     IsAlive                = (updateflags & UpdateFlag.Alive) != 0;
     HasRotation            = (updateflags & UpdateFlag.Rotation) != 0;
     HasStationaryPosition  = (updateflags & UpdateFlag.StationaryPosition) != 0;
     HasTarget              = (updateflags & UpdateFlag.Target) != 0;
     IsTransport            = (updateflags & UpdateFlag.Transport) != 0;
     HasGoTransportPosition = (updateflags & UpdateFlag.GoTransportPosition) != 0;
     HasAnimKits            = (updateflags & UpdateFlag.AnimKits) != 0;
     IsVehicle              = (updateflags & UpdateFlag.Vehicle) != 0;
 }
 public ObjectMovementValues(UpdateFlag updateflags)
 {
     IsSelf                 = (updateflags & UpdateFlag.Self)                != 0;
     IsAlive                = (updateflags & UpdateFlag.Alive)               != 0;
     HasRotation            = (updateflags & UpdateFlag.Rotation)            != 0;
     HasStationaryPosition  = (updateflags & UpdateFlag.StationaryPosition)  != 0;
     HasTarget              = (updateflags & UpdateFlag.Target)              != 0;
     IsTransport            = (updateflags & UpdateFlag.Transport)           != 0;
     HasGoTransportPosition = (updateflags & UpdateFlag.GoTransportPosition) != 0;
     HasAnimKits            = (updateflags & UpdateFlag.AnimKits)            != 0;
     IsVehicle              = (updateflags & UpdateFlag.Vehicle)             != 0;
 }
Example #7
0
        private static IWritable BuildUpdate(IWritable update, uint sequence = 0u, UpdateFlag updateFlags = UpdateFlag.None)
        {
            if (!PacketManager.GetUpdateType(update, out UpdateType updateType))
            {
                return(null);
            }

            return(new ServerUpdatePacket
            {
                Sequence = sequence,
                UpdateType = updateType,
                UpdateFlags = updateFlags,
                Update = update
            });
        }
Example #8
0
        public static void HandleUpdateObject(ref PacketReader packet, ref WorldClass session)
        {
            Character    character    = session.Character;
            PacketWriter updateObject = new PacketWriter(LegacyMessage.UpdateObject);

            updateObject.WriteUInt16((ushort)character.Map);
            updateObject.WriteUInt32(1);  // Grml sandbox style...
            updateObject.WriteUInt8(1);
            updateObject.WriteGuid(character.Guid);
            updateObject.WriteUInt8(4);

            UpdateFlag updateFlags = UpdateFlag.Alive | UpdateFlag.Rotation | UpdateFlag.Self | UpdateFlag.Unknown4;

            WorldMgr.WriteUpdateObjectMovement(ref updateObject, ref character, updateFlags);
            character.WriteUpdateFields(ref updateObject);

            session.Send(updateObject);
        }
Example #9
0
        public static void HandleUpdateObjectCreate(ref WorldClass session)
        {
            WorldObject  character    = session.Character;
            PacketWriter updateObject = new PacketWriter(ServerMessage.ObjectUpdate);

            updateObject.WriteUInt16((ushort)character.Map);
            updateObject.WriteUInt32(1);
            updateObject.WriteUInt8((byte)UpdateType.CreateObject);
            updateObject.WriteGuid(character.Guid);
            updateObject.WriteUInt8((byte)ObjectType.Player);

            UpdateFlag updateFlags = UpdateFlag.Alive | UpdateFlag.Rotation | UpdateFlag.Self;

            WorldMgr.WriteUpdateObjectMovement(ref updateObject, ref character, updateFlags);

            character.SetUpdateFields();
            character.WriteUpdateFields(ref updateObject);
            character.WriteDynamicUpdateFields(ref updateObject);

            session.Send(ref updateObject);
        }
Example #10
0
        private static void WriteInRangeObjects(IEnumerable <WorldObject> objects, WorldClass session, ObjectType type)
        {
            Character  character  = session.Character;
            int        arg_10_0   = objects.Count <WorldObject>();
            UpdateFlag updateFlag = UpdateFlag.Alive;

            if (arg_10_0 > 0)
            {
                updateFlag |= ((type == ObjectType.GameObject) ? UpdateFlag.StationaryPosition : UpdateFlag.Alive);
                IEnumerator <WorldObject> enumerator = objects.GetEnumerator();
                try
                {
                    while (true)
                    {
IL_361:
                        uint arg_2F0_0 = (!ObjectHandler.smethod_3(enumerator)) ? 1527969684u : 1848967450u;
                        while (true)
                        {
                            uint num;
                            switch ((num = (arg_2F0_0 ^ 969171285u)) % 21u)
                            {
                            case 0u:
                                arg_2F0_0 = (((type == ObjectType.GameObject) ? 1738499285u : 646977882u) ^ num * 1593683944u);
                                continue;

                            case 1u:
                            {
                                PacketWriter packetWriter;
                                packetWriter.WriteUInt8(1);
                                arg_2F0_0 = (((type == ObjectType.Player) ? 3818654308u : 3591559160u) ^ num * 648131247u);
                                continue;
                            }

                            case 2u:
                            {
                                PacketWriter packetWriter;
                                WorldObject  worldObject;
                                packetWriter.WriteSmartGuid(worldObject.SGuid);
                                arg_2F0_0 = 2122628810u;
                                continue;
                            }

                            case 3u:
                            {
                                WorldObject current;
                                arg_2F0_0 = (((character.Guid != current.Guid) ? 2929494894u : 2211260839u) ^ num * 4047706010u);
                                continue;
                            }

                            case 4u:
                            {
                                PacketWriter packetWriter;
                                packetWriter.WriteUInt8((byte)type);
                                arg_2F0_0 = 2032235371u;
                                continue;
                            }

                            case 5u:
                                ObjectHandler.smethod_2(5);
                                arg_2F0_0 = (num * 2857407048u ^ 4065091795u);
                                continue;

                            case 6u:
                            {
                                PacketWriter packetWriter;
                                uint         data;
                                packetWriter.WriteUInt32Pos(data, 13);
                                arg_2F0_0 = (num * 945023592u ^ 666258815u);
                                continue;
                            }

                            case 7u:
                                arg_2F0_0 = ((type == ObjectType.Unit) ? 1066124101u : 1317094159u);
                                continue;

                            case 8u:
                            {
                                PacketWriter packetWriter;
                                WorldObject  worldObject;
                                worldObject.WriteDynamicUpdateFields(ref packetWriter);
                                arg_2F0_0 = (num * 3168312685u ^ 1016797372u);
                                continue;
                            }

                            case 9u:
                            {
                                WorldObject current;
                                WorldObject worldObject = current;
                                arg_2F0_0 = (((!character.InRangeObjects.ContainsKey(current.Guid)) ? 241293809u : 970459467u) ^ num * 547093509u);
                                continue;
                            }

                            case 11u:
                            {
                                WorldObject worldObject;
                                character.InRangeObjects.Add(worldObject.Guid, worldObject);
                                arg_2F0_0 = (num * 1271401156u ^ 2252314095u);
                                continue;
                            }

                            case 12u:
                            {
                                PacketWriter packetWriter;
                                uint         data = (uint)ObjectHandler.smethod_1(ObjectHandler.smethod_0(packetWriter)) - 17u;
                                arg_2F0_0 = 1218186453u;
                                continue;
                            }

                            case 13u:
                            {
                                PacketWriter packetWriter = new PacketWriter(ServerMessage.ObjectUpdate, true);
                                BitPack      arg_131_0    = new BitPack(packetWriter, 0uL, 0uL, 0uL, 0uL);
                                packetWriter.WriteInt32(1);
                                packetWriter.WriteUInt16((ushort)character.Map);
                                arg_131_0.Write <int>(0);
                                arg_131_0.Flush();
                                arg_2F0_0 = (num * 3222425454u ^ 2984538751u);
                                continue;
                            }

                            case 14u:
                            {
                                PacketWriter packetWriter;
                                WorldObject  worldObject;
                                packetWriter.WriteSmartGuid(worldObject.Guid, global::GuidType.Player);
                                arg_2F0_0 = (num * 1757694464u ^ 3297668298u);
                                continue;
                            }

                            case 15u:
                                goto IL_361;

                            case 16u:
                            {
                                PacketWriter packetWriter;
                                packetWriter.WriteInt32(0);
                                arg_2F0_0 = (num * 4015340619u ^ 2939785537u);
                                continue;
                            }

                            case 17u:
                            {
                                WorldObject current = enumerator.Current;
                                arg_2F0_0 = 1029453396u;
                                continue;
                            }

                            case 18u:
                            {
                                PacketWriter packetWriter;
                                session.Send(ref packetWriter);
                                arg_2F0_0 = (num * 3659980510u ^ 976080836u);
                                continue;
                            }

                            case 19u:
                            {
                                PacketWriter packetWriter;
                                WorldObject  worldObject;
                                Manager.WorldMgr.WriteUpdateObjectMovement(ref packetWriter, ref worldObject, updateFlag, type);
                                worldObject.SetUpdateFields();
                                worldObject.WriteUpdateFields(ref packetWriter);
                                arg_2F0_0 = (num * 3313353577u ^ 2170531980u);
                                continue;
                            }

                            case 20u:
                                arg_2F0_0 = 1848967450u;
                                continue;
                            }
                            goto Block_10;
                        }
                    }
                    Block_10:;
                }
                finally
                {
                    if (enumerator != null)
                    {
                        while (true)
                        {
IL_3A7:
                            uint arg_38E_0 = 1857051829u;
                            while (true)
                            {
                                uint num;
                                switch ((num = (arg_38E_0 ^ 969171285u)) % 3u)
                                {
                                case 0u:
                                    goto IL_3A7;

                                case 2u:
                                    ObjectHandler.smethod_4(enumerator);
                                    arg_38E_0 = (num * 3244275826u ^ 1817846266u);
                                    continue;
                                }
                                goto Block_14;
                            }
                        }
                        Block_14 :;
                    }
                }
            }
        }
Example #11
0
        public void WriteCreateObject(ref PacketWriter updateObject, WorldObject obj, UpdateFlag updateFlags, ObjectType type)
        {
            updateObject.WriteUInt8((byte)UpdateType.CreateObject);
            updateObject.WriteGuid(obj.Guid);
            updateObject.WriteUInt8((byte)type);

            Globals.WorldMgr.WriteUpdateObjectMovement(ref updateObject, ref obj, updateFlags);

            obj.SetUpdateFields();
            obj.WriteUpdateFields(ref updateObject);
            obj.WriteDynamicUpdateFields(ref updateObject);
        }
Example #12
0
        /// <summary>
        /// Copies the values of properties from the source object to the target object through reflection and returns a collection of updated properties.
        /// The source object and the target object need not to be of the same type.
        /// </summary>
        /// <param name="source">The source object containing the properties you wish to copy</param>
        /// <param name="target">The target object(destination) where the values are copied to. The source</param>
        /// <param name="bindingFlags">Indicates how properties are discovered within source object type</param>
        /// <param name="updateFlags">Additional flags that determine how the target object properties are updated</param>
        /// <param name="only">When this paramerter is set, only matching properties are used</param>
        /// <param name="exclude">When set, properties matching any member is ignored</param>
        /// <returns>The updated properties</returns>
        public static string[] CopyPropertiesTo(object source, object target, UpdateFlag updateFlags = UpdateFlag.None, string[] only = null, string[] exclude = null, BindingFlags bindingFlags = BindingFlags.Instance | BindingFlags.Public)
        {
            var targetType = target.GetType();
            var srcType    = source.GetType();

            var properties = targetType.GetProperties(bindingFlags);

            if (only != null)
            {
                properties = properties.Where(x => only.Contains(x.Name)).ToArray();
            }

            if (exclude != null)
            {
                properties = properties.Where(x => !exclude.Contains(x.Name)).ToArray();
            }

            List <string> updatedProperties = new List <string>(properties.Count() + 1);

            if (srcType == targetType)
            {
                foreach (var property in properties)
                {
                    var val = property.GetValue(source);
                    if ((updateFlags.HasFlag(UpdateFlag.DeferUpdateOnNull) && val == null) ||
                        (updateFlags.HasFlag(UpdateFlag.DenoteEmptyStringsAsNull) && property.PropertyType == typeof(string) && string.IsNullOrEmpty(val?.ToString())))
                    {
                        continue;
                    }

                    if (val?.Equals(property.GetValue(target)) == false)
                    {
                        property.SetValue(target, property.GetValue(source));
                        updatedProperties.Add(property.Name);
                    }
                }
            }
            else
            {
                foreach (var property in properties)
                {
                    var equivalent = srcType.GetProperty(property.Name, bindingFlags);
                    if (equivalent != null)
                    {
                        var val = equivalent.GetValue(source);
                        if ((updateFlags.HasFlag(UpdateFlag.DeferUpdateOnNull) && val == null) ||
                            (updateFlags.HasFlag(UpdateFlag.DenoteEmptyStringsAsNull) && property.PropertyType == typeof(string) && string.IsNullOrEmpty(val?.ToString())))
                        {
                            continue;
                        }

                        if (val?.Equals(property.GetValue(target)) == false)
                        {
                            property.SetValue(target, equivalent.GetValue(source));
                            updatedProperties.Add(property.Name);
                        }
                    }
                }
            }

            return(updatedProperties.ToArray());
        }
Example #13
0
        public void WriteUpdateObjectMovement(ref PacketWriter packet, ref WorldObject wObject, UpdateFlag updateFlags)
        {
            ObjectMovementValues values = new ObjectMovementValues(updateFlags);
            BitPack BitPack             = new BitPack(packet, wObject.Guid);

            BitPack.Write(0);                                // Unknown 4
            BitPack.Write(0, 22);                            // BitCounter
            BitPack.Write(values.IsVehicle);
            BitPack.Write(0);                                // Unknown 8
            BitPack.Write(values.HasGoTransportPosition);
            BitPack.Write(0);                                // Bit 3
            BitPack.Write(0);                                // Unknown 6
            BitPack.Write(0);                                // Unknown
            BitPack.Write(0);                                // Unknown 3
            BitPack.Write(0);                                // Unknown 2
            BitPack.Write(wObject is GameObjectSpawn);
            BitPack.Write(values.HasTarget);
            BitPack.Write(0);                                // Bit 2
            BitPack.Write(0);                                // Bit 0
            BitPack.Write(values.IsSelf);
            BitPack.Write(0);                                // Bit 1
            BitPack.Write(values.IsAlive);
            BitPack.Write(0);                                // Unknown 7
            BitPack.Write(0);                                // Unknown 5
            BitPack.Write(values.HasAnimKits);
            BitPack.Write(values.HasStationaryPosition);

            if (values.IsAlive)
            {
                BitPack.WriteGuidMask(0);
                BitPack.Write(1);                   // !Pitch or !SplineElevation
                BitPack.WriteGuidMask(4, 7);
                BitPack.Write(1);                   // !MovementFlags2
                BitPack.WriteGuidMask(5, 2);
                BitPack.Write(0);                   // HasBasicSplineData
                BitPack.Write(1);                   // !MovementFlags
                BitPack.Write(0);                   // !HasTime
                BitPack.Write(0);                   // Unknown_Alive_2
                BitPack.Write(0);                   // Unknown_Alive_1
                BitPack.Write(!values.HasRotation);
                BitPack.Write(values.IsTransport);
                BitPack.Write(1);                   // Pitch or SplineElevation
                BitPack.WriteGuidMask(6);
                BitPack.Write(0, 19);               // BitCounter_Alive_1
                BitPack.WriteGuidMask(1);
                BitPack.Write(1);                   // !Unknown_Alive_3
                BitPack.WriteGuidMask(3);
                BitPack.Write(0, 22);               // BitCounter_Alive_2
                BitPack.Write(0);                   // IsFallingOrJumping
                BitPack.Write(0);                   // Unknown_Alive_4
            }

            BitPack.Flush();

            if (values.IsAlive)
            {
                packet.WriteUInt32(0);
                BitPack.WriteGuidBytes(2, 1);
                packet.WriteFloat((float)MovementSpeed.WalkSpeed);
                packet.WriteFloat((float)MovementSpeed.RunSpeed);
                BitPack.WriteGuidBytes(0, 3);
                packet.WriteFloat((float)MovementSpeed.SwimBackSpeed);
                packet.WriteFloat((float)MovementSpeed.TurnSpeed);
                BitPack.WriteGuidBytes(5);
                packet.WriteFloat(wObject.Position.Z);
                packet.WriteFloat(wObject.Position.O);
                BitPack.WriteGuidBytes(6);
                packet.WriteFloat((float)MovementSpeed.PitchSpeed);
                packet.WriteFloat((float)MovementSpeed.RunBackSpeed);
                packet.WriteFloat(wObject.Position.Y);
                packet.WriteFloat((float)MovementSpeed.SwimSpeed);
                packet.WriteFloat((float)MovementSpeed.FlyBackSpeed);
                BitPack.WriteGuidBytes(7);
                packet.WriteFloat((float)MovementSpeed.FlySpeed);
                packet.WriteFloat(wObject.Position.X);
                BitPack.WriteGuidBytes(4);
            }

            if (wObject is GameObjectSpawn)
            {
                packet.WriteInt64(Quaternion.GetCompressed(wObject.Position.O));
            }

            if (values.HasStationaryPosition)
            {
                packet.WriteFloat(wObject.Position.X);
                packet.WriteFloat(wObject.Position.Z);
                packet.WriteFloat(wObject.Position.O);
                packet.WriteFloat(wObject.Position.Y);
            }
        }
        /// <summary>
        ///
        /// </summary>
        /// <param name="packet"></param>
        /// <param name="updatingSelf"></param>
        private void WriteMovementUpdate(Packet packet, bool updatingSelf)
        {
            // Should be 0x10 | 0x20 | 0x40 for 2.1.3
            UpdateFlag updateFlags = this.PlayerField.UpdateFlags;

            if (updatingSelf == true)
            {
                updateFlags |= UpdateFlag.Self;
            }

            packet.WriterStream.Write((byte)updateFlags);

            MovementFlags moveFlags = MovementFlags.None;

            if (m_IsSpiritHealer == true)
            {
                moveFlags |= MovementFlags.Waterwalking;
            }

            #region Living

            packet.WriterStream.Write((uint)moveFlags);
            // new in 2.3.0
            packet.WriterStream.Write((byte)0);
            packet.WriterStream.Write((uint)Environment.TickCount);

            #endregion

            #region Position

            packet.WriterStream.Write((float)base.X);
            packet.WriterStream.Write((float)base.Y);
            packet.WriterStream.Write((float)base.Z);
            packet.WriterStream.Write((float)base.O);

            #endregion

            packet.WriterStream.Write((int)0);

            #region Speed Block

            packet.WriterStream.Write((float)m_UnitMechanics.WalkSpeed);
            packet.WriterStream.Write((float)m_UnitMechanics.RunSpeed);
            packet.WriterStream.Write((float)m_UnitMechanics.SwimBackSpeed);
            packet.WriterStream.Write((float)m_UnitMechanics.SwimSpeed);
            packet.WriterStream.Write((float)m_UnitMechanics.WalkBackSpeed);
            packet.WriterStream.Write((float)m_UnitMechanics.FlightSpeed);
            packet.WriterStream.Write((float)m_UnitMechanics.FlightBackSpeed);
            packet.WriterStream.Write((float)m_UnitMechanics.TurnSpeed);

            #endregion

            /*#region Spline
             *
             * if ((moveFlags & MovementFlags.SplineTaxi) == MovementFlags.SplineTaxi)
             * {
             *  SplineFlags splineFlags = SplineFlags.None;
             * }
             *
             #endregion*/

            #region UpdateFlag.Flag_0x10

            packet.WriterStream.Write((uint)0);

            #endregion
        }
Example #15
0
        public void WriteUpdateObjectMovement(ref PacketWriter packet, ref WorldObject wObject, UpdateFlag updateFlags)
        {
            ObjectMovementValues values = new ObjectMovementValues(updateFlags);
            BitPack BitPack             = new BitPack(packet, wObject.Guid);

            BitPack.Write(0);
            BitPack.Write(0);
            BitPack.Write(0);
            BitPack.Write(0);
            BitPack.Write(0);
            BitPack.Write(values.IsSelf);
            BitPack.Write(0);
            BitPack.Write(values.HasTarget);
            BitPack.Write(0, 22);
            BitPack.Write(0);
            BitPack.Write(0);
            BitPack.Write(0);
            BitPack.Write(0);
            BitPack.Write(values.HasStationaryPosition);
            BitPack.Write(0);
            BitPack.Write(values.IsAlive);
            BitPack.Write(values.HasAnimKits);
            BitPack.Write(values.IsVehicle);
            BitPack.Write(values.HasGoTransportPosition);
            BitPack.Write(0);
            BitPack.Write(wObject is GameObjectSpawn);

            if (values.IsAlive)
            {
                BitPack.WriteGuidMask(4, 1);
                BitPack.Write(0, 19);
                BitPack.WriteGuidMask(5);
                BitPack.Write(!values.HasRotation);
                BitPack.WriteGuidMask(7);
                BitPack.Write(0, 22);
                BitPack.Write(0);
                BitPack.Write(1);
                BitPack.Write(1);
                BitPack.WriteGuidMask(3);
                BitPack.Write(0);
                BitPack.Write(1);
                BitPack.Write(0);
                BitPack.Write(0);
                BitPack.WriteGuidMask(2);
                BitPack.Write(0);
                BitPack.WriteGuidMask(0);
                BitPack.Write(values.IsTransport);
                BitPack.WriteGuidMask(6);
                BitPack.Write(0);
                BitPack.Write(1);
                BitPack.Write(1);
            }

            BitPack.Flush();

            if (values.IsAlive)
            {
                packet.WriteFloat(wObject.Position.Y);
                packet.WriteFloat(MovementSpeed.FlySpeed);
                packet.WriteFloat(MovementSpeed.RunSpeed);
                BitPack.WriteGuidBytes(4);
                packet.WriteFloat(MovementSpeed.WalkSpeed);
                BitPack.WriteGuidBytes(5);
                packet.WriteUInt32(0);
                BitPack.WriteGuidBytes(1);
                packet.WriteFloat(MovementSpeed.SwimBackSpeed);
                packet.WriteFloat(MovementSpeed.FlyBackSpeed);
                BitPack.WriteGuidBytes(6);
                packet.WriteFloat(MovementSpeed.TurnSpeed);
                packet.WriteFloat(wObject.Position.X);
                packet.WriteFloat(wObject.Position.O);
                packet.WriteFloat(MovementSpeed.PitchSpeed);
                packet.WriteFloat(MovementSpeed.SwimSpeed);
                BitPack.WriteGuidBytes(3);
                packet.WriteFloat(MovementSpeed.RunBackSpeed);
                BitPack.WriteGuidBytes(7, 2);
                packet.WriteFloat(wObject.Position.Z);
                BitPack.WriteGuidBytes(0);
            }

            if (values.HasStationaryPosition)
            {
                packet.WriteFloat(wObject.Position.X);
                packet.WriteFloat(wObject.Position.Z);
                packet.WriteFloat(wObject.Position.Y);
                packet.WriteFloat(wObject.Position.O);
            }

            if (wObject is GameObjectSpawn)
            {
                packet.WriteInt64(Quaternion.GetCompressed(wObject.Position.O));
            }
        }
 public UpdateAttribute(InChat inChat, UpdateFlag updateFlags)
 {
     InChat      = inChat;
     UpdateFlags = updateFlags;
 }
		public void Update( UpdateFlag flag )
		{
			if ( flag == UpdateFlag.None )
				return;
			if ( Components.Count != 12 )
				return;
			if ( m_GateDesign == null )
				return;

			bool updatedesign = ( flag & UpdateFlag.Design ) != 0;
			bool updatehue = ( flag & UpdateFlag.Hue ) != 0;

			if ( updatedesign && m_GateDesign.DesignType == null )
				return;

			int[] offsets = null;
			int hue = 0;
			int start = 0;
			bool reversed = false;

			if ( updatedesign )
			{
				if ( m_GateDesign.DesignType == null )
					return;
				offsets = m_GateDesign.DesignType.DesignOffsets;
				start = (int)(m_GateDesign.StartingPos % 12);
				reversed = m_GateDesign.Reversed;
				start = reversed ? 11 - start : start;
			}
			if ( updatehue )
				hue = m_GateDesign.NormalHue;

			for ( int c = 0; c < 12; c++ )
			{
				int offsetvalue = ( ( c + start ) % 12 ) * 2;
				SymbolComponent symbol = (SymbolComponent)Components[c];
				if ( updatedesign )
					symbol.Offset = new Point3D( offsets[offsetvalue], offsets[offsetvalue+1], 0 );
				if ( updatehue )
					symbol.Hue = hue;
			}
		}
Example #18
0
        public static void HandleUpdateObjectCreate(ref WorldClass session, bool tele = false)
        {
            WorldObject character = session.Character;

            while (true)
            {
IL_238:
                uint arg_1F2_0 = 2275508388u;
                while (true)
                {
                    uint num;
                    switch ((num = (arg_1F2_0 ^ 3154599871u)) % 14u)
                    {
                    case 0u:
                    {
                        PacketWriter packetWriter;
                        packetWriter.WriteSmartGuid(character.Guid, global::GuidType.Player);
                        arg_1F2_0 = (num * 3881833045u ^ 1180485233u);
                        continue;
                    }

                    case 1u:
                        (character as Character).InRangeObjects.Clear();
                        arg_1F2_0 = (num * 2283818524u ^ 355223714u);
                        continue;

                    case 2u:
                    {
                        PacketWriter packetWriter;
                        packetWriter.WriteUInt8(4);
                        UpdateFlag updateFlags = UpdateFlag.Self | UpdateFlag.Alive | UpdateFlag.Rotation;
                        arg_1F2_0 = (num * 103799057u ^ 21624365u);
                        continue;
                    }

                    case 3u:
                    {
                        PacketWriter packetWriter;
                        character.WriteUpdateFields(ref packetWriter);
                        arg_1F2_0 = (num * 49266881u ^ 2307507266u);
                        continue;
                    }

                    case 4u:
                    {
                        PacketWriter packetWriter;
                        session.Send(ref packetWriter);
                        arg_1F2_0 = (num * 1672062260u ^ 2814400482u);
                        continue;
                    }

                    case 6u:
                    {
                        PacketWriter packetWriter;
                        UpdateFlag   updateFlags;
                        Manager.WorldMgr.WriteUpdateObjectMovement(ref packetWriter, ref character, updateFlags, ObjectType.Player);
                        arg_1F2_0 = (num * 86580379u ^ 2193049942u);
                        continue;
                    }

                    case 7u:
                        character.SetUpdateFields();
                        arg_1F2_0 = (num * 2334973880u ^ 3652082974u);
                        continue;

                    case 8u:
                    {
                        PacketWriter packetWriter;
                        packetWriter.WriteUInt8(1);
                        arg_1F2_0 = (num * 2061835051u ^ 1546086745u);
                        continue;
                    }

                    case 9u:
                    {
                        PacketWriter packetWriter = new PacketWriter(ServerMessage.ObjectUpdate, true);
                        arg_1F2_0 = (num * 3719673916u ^ 4267485768u);
                        continue;
                    }

                    case 10u:
                    {
                        PacketWriter packetWriter;
                        character.WriteDynamicUpdateFields(ref packetWriter);
                        uint data = (uint)ObjectHandler.smethod_1(ObjectHandler.smethod_0(packetWriter)) - 17u;
                        packetWriter.WriteUInt32Pos(data, 13);
                        arg_1F2_0 = (num * 91628017u ^ 979890369u);
                        continue;
                    }

                    case 11u:
                    {
                        PacketWriter packetWriter;
                        BitPack      arg_A2_0 = new BitPack(packetWriter, 0uL, 0uL, 0uL, 0uL);
                        if (session.Character.Bag == null)
                        {
                            session.Character.Bag = new Dictionary <byte, Item>();
                        }
                        if (session.Character.Equipment == null)
                        {
                            session.Character.Equipment = new Dictionary <byte, Item>();
                        }
                        packetWriter.WriteInt32(1);
                        packetWriter.WriteUInt16((ushort)character.Map);
                        arg_A2_0.Write <int>(0);
                        arg_A2_0.Flush();
                        packetWriter.WriteInt32(0);
                        arg_1F2_0 = 3587135917u;
                        continue;
                    }

                    case 12u:
                        goto IL_238;

                    case 13u:
                        if (!tele)
                        {
                            arg_1F2_0 = (num * 4070430128u ^ 2204553002u);
                            continue;
                        }
                        return;
                    }
                    goto Block_4;
                }
            }
Block_4:
            using (Dictionary <byte, Item> .Enumerator enumerator = session.Character.Bag.GetEnumerator())
            {
                while (true)
                {
IL_39B:
                    uint arg_35F_0 = enumerator.MoveNext() ? 4174226275u : 4027859808u;
                    while (true)
                    {
                        uint num;
                        switch ((num = (arg_35F_0 ^ 3154599871u)) % 8u)
                        {
                        case 0u:
                            arg_35F_0 = 4174226275u;
                            continue;

                        case 1u:
                            ObjectHandler.HandleUpdateObjectValues(ref session, false);
                            arg_35F_0 = (num * 2901385184u ^ 3008738973u);
                            continue;

                        case 2u:
                            goto IL_39B;

                        case 3u:
                        {
                            SmartGuid smartGuid;
                            session.Character.SetUpdateField <ulong>(1085 + (23 + (session.Character.Bag.Count - 1)) * 4, smartGuid.Guid, 0);
                            arg_35F_0 = (num * 1633749325u ^ 882616989u);
                            continue;
                        }

                        case 4u:
                        {
                            KeyValuePair <byte, Item> current = enumerator.Current;
                            arg_35F_0 = 2355109817u;
                            continue;
                        }

                        case 5u:
                        {
                            SmartGuid smartGuid;
                            session.Character.SetUpdateField <ulong>(1085 + (23 + (session.Character.Bag.Count - 1)) * 4 + 2, smartGuid.HighGuid, 0);
                            arg_35F_0 = (num * 2081811083u ^ 929503609u);
                            continue;
                        }

                        case 6u:
                        {
                            KeyValuePair <byte, Item> current;
                            SmartGuid smartGuid = new SmartGuid(current.Value.Guid, 0, global::GuidType.Item, 0uL);
                            ObjectHandler.HandleUpdateObjectCreateItem(smartGuid, current.Value, ref session);
                            arg_35F_0 = (num * 935936635u ^ 2677446734u);
                            continue;
                        }
                        }
                        goto Block_8;
                    }
                }
                Block_8 :;
            }
            using (Dictionary <byte, Item> .Enumerator enumerator = session.Character.Equipment.GetEnumerator())
            {
                while (true)
                {
                    IL_60C                                                  :
                    uint arg_5CB_0 = (!enumerator.MoveNext()) ? 4153873960u : 2528389413u;
                    while (true)
                    {
                        uint num;
                        switch ((num = (arg_5CB_0 ^ 3154599871u)) % 9u)
                        {
                        case 0u:
                        {
                            KeyValuePair <byte, Item> current2;
                            session.Character.SetUpdateField <ulong>(1085 + (int)(current2.Key * 4) + 2, 0uL, 0);
                            arg_5CB_0 = (num * 2903315187u ^ 1606612479u);
                            continue;
                        }

                        case 1u:
                        {
                            KeyValuePair <byte, Item> current2;
                            session.Character.SetUpdateField <ushort>(1035 + (int)(current2.Key * 2) + 1, (ushort)current2.Value.ModId, 0);
                            arg_5CB_0 = (num * 2254772229u ^ 3249291789u);
                            continue;
                        }

                        case 2u:
                            arg_5CB_0 = 2528389413u;
                            continue;

                        case 3u:
                            goto IL_60C;

                        case 4u:
                        {
                            KeyValuePair <byte, Item> current2 = enumerator.Current;
                            SmartGuid smartGuid2 = new SmartGuid(current2.Value.Guid, 0, global::GuidType.Item, 0uL);
                            ObjectHandler.HandleUpdateObjectCreateItem(smartGuid2, current2.Value, ref session);
                            session.Character.SetUpdateField <ulong>(1085 + (int)(current2.Key * 4), 0uL, 0);
                            arg_5CB_0 = 3525416964u;
                            continue;
                        }

                        case 6u:
                        {
                            KeyValuePair <byte, Item> current2;
                            session.Character.SetUpdateField <int>(1035 + (int)(current2.Key * 2), current2.Value.Id, 0);
                            ObjectHandler.HandleUpdateObjectValues(ref session, false);
                            arg_5CB_0 = (num * 2025118931u ^ 1226385667u);
                            continue;
                        }

                        case 7u:
                        {
                            KeyValuePair <byte, Item> current2;
                            SmartGuid smartGuid2;
                            session.Character.SetUpdateField <ulong>(1085 + (int)(current2.Key * 4), smartGuid2.Guid, 0);
                            session.Character.SetUpdateField <ulong>(1085 + (int)(current2.Key * 4) + 2, smartGuid2.HighGuid, 0);
                            session.Character.SetUpdateField <ushort>(1035 + (int)(current2.Key * 2) + 1, 0, 0);
                            arg_5CB_0 = (num * 1833648401u ^ 1914681319u);
                            continue;
                        }

                        case 8u:
                        {
                            KeyValuePair <byte, Item> current2;
                            session.Character.SetUpdateField <ushort>(1035 + (int)(current2.Key * 2) + 1, 0, 1);
                            session.Character.SetUpdateField <int>(1035 + (int)(current2.Key * 2), 0, 0);
                            arg_5CB_0 = (num * 772582332u ^ 2291984992u);
                            continue;
                        }
                        }
                        goto Block_12;
                    }
                }
                Block_12 :;
            }
        }
		public void UpdateGate( UpdateFlag flag )
		{
			if ( m_Gate != null )
				m_Gate.Update( flag );
			else
				Console.WriteLine( "Warning: orphaned stargate design detected." );
		}
Example #20
0
        public void WriteUpdateObjectMovement(ref PacketWriter packet, ref Character character, UpdateFlag updateFlags)
        {
            ObjectMovementValues values = new ObjectMovementValues(updateFlags);

            BitPack BitPack = new BitPack(packet, character.Guid, character.GuildGuid);

            BitPack.Write(values.HasTarget);
            BitPack.Write(values.IsVehicle);
            BitPack.Write(values.BitCounter, 24);
            BitPack.Write(values.HasUnknown5);
            BitPack.Write(values.HasGoTransportPosition);
            BitPack.Write(values.HasStationaryPosition);
            BitPack.Write(values.BitCounter2, 21);
            BitPack.Write(values.HasUnknown);
            BitPack.Write(values.HasUnknown3);
            BitPack.Write(values.HasUnknown4);
            BitPack.Write(values.IsAlive);
            BitPack.Write(values.Bit1);
            BitPack.Write(values.HasUnknown2);
            BitPack.Write(values.Bit2);
            BitPack.Write(values.HasRotation);
            BitPack.Write(values.HasAnimKits);
            BitPack.Write(values.Bit3);
            BitPack.Write(values.IsSelf);

            if (values.IsAlive)
            {
                BitPack.WriteGuidMask(3);
                BitPack.Write(0);                   // HasSplineData, don't write simple basic splineData
                BitPack.Write(0, 24);               // BitCounter_Alive_1
                BitPack.WriteGuidMask(4);
                BitPack.Write(1);                   // Pitch or splineElevation, not implanted
                BitPack.Write(values.IsTransport);
                BitPack.Write(0);                   // IsInterpolated, not implanted
                BitPack.Write(!values.IsAlive);

                if (values.IsTransport)
                {
                    // Transports not implanted.
                }

                BitPack.Write(1);                   // Unknown_Alive_2, Reversed
                BitPack.WriteGuidMask(7);
                BitPack.Write(true);                // MovementFlags2 are not implanted
                BitPack.WriteGuidMask(0);
                BitPack.Write(0);                   // Unknown_Alive_1
                BitPack.WriteGuidMask(5);

                /* MovementFlags2 are not implanted
                 * if (movementFlag2 != 0)
                 * BitPack.Write(0, 12);*/

                BitPack.WriteGuidMask(2, 6);
                BitPack.Write(true);                // Movementflags are not implanted

                /* IsInterpolated, not implanted
                 * if (IsInterpolated)
                 * {
                 * BitPack.Write(0);               // IsFalling
                 * }*/

                /* Movementflags are not implanted
                 * if (movementFlags != 0)
                 *  BitPack.Write((uint)movementFlags, 30);*/

                BitPack.Write(!values.HasRotation);
                BitPack.Write(0);                   // Unknown_Alive_3
                BitPack.Write(0);                   // Unknown_Alive_4

                // Don't send basic spline data and disable advanced data
                //if (HasSplineData)
                {
                    //BitPack.Write(0);                   // Disable advance splineData
                }


                BitPack.WriteGuidMask(1);
                BitPack.Write(1);                   // Pitch or splineElevation, not implanted
            }

            BitPack.Flush();

            if (values.IsAlive)
            {
                // Don't send basic spline data

                /*if (HasSplineBasicData)
                 * {
                 *  // Advanced spline data not implanted
                 *  if (HasAdvancedSplineData)
                 *  {
                 *
                 *  }
                 *
                 *  packet.WriteFloat(character.X);
                 *  packet.WriteFloat(character.Y);
                 *  packet.WriteUInt32(0);
                 *  packet.WriteFloat(character.Z);
                 * }*/

                packet.WriteFloat((float)MovementSpeed.WalkSpeed);

                if (values.IsTransport)
                {
                    // Not implanted
                }

                BitPack.WriteGuidBytes(2);
                BitPack.WriteGuidBytes(7);
                packet.WriteUInt32(0);
                packet.WriteFloat((float)MovementSpeed.FlyBackSpeed);
                packet.WriteFloat(character.X);
                packet.WriteFloat(character.Y);
                BitPack.WriteGuidBytes(5);
                packet.WriteFloat(character.Z);
                BitPack.WriteGuidBytes(3, 6, 1);
                packet.WriteFloat((float)MovementSpeed.FlySpeed);
                packet.WriteFloat((float)MovementSpeed.PitchSpeed);
                packet.WriteFloat((float)MovementSpeed.RunSpeed);
                packet.WriteFloat(character.O);
                BitPack.WriteGuidBytes(4);
                packet.WriteFloat((float)MovementSpeed.SwimSpeed);
                packet.WriteFloat((float)MovementSpeed.RunBackSpeed);
                packet.WriteFloat((float)MovementSpeed.TurnSpeed);
                packet.WriteFloat((float)MovementSpeed.SwimBackSpeed);
                BitPack.WriteGuidBytes(0);
            }

            if (values.HasRotation)
            {
                // Packed orientation
                packet.WriteUInt64(0);
            }
        }
Example #21
0
        public void WriteUpdateObjectMovement(ref PacketWriter packet, ref WorldObject wObject, UpdateFlag updateFlags)
        {
            ObjectMovementValues values = new ObjectMovementValues(updateFlags);
            BitPack BitPack             = new BitPack(packet, wObject.Guid);

            BitPack.Write(values.HasTarget);
            BitPack.Write(values.Bit1);
            BitPack.Write(values.HasUnknown2);
            BitPack.Write(0);                       // New in 5.1.0, 784, Unknown
            BitPack.Write(values.Bit0);
            BitPack.Write(values.Bit3);
            BitPack.Write(0);                       // New in 5.1.0, 654, Unknown
            BitPack.Write(values.IsSelf);
            BitPack.Write(values.HasGoTransportPosition);
            BitPack.Write(values.HasUnknown);
            BitPack.Write(wObject is GameObjectSpawn);
            BitPack.Write(values.IsAlive);
            BitPack.Write(values.HasUnknown4);
            BitPack.Write(values.HasAnimKits);
            BitPack.Write(values.HasUnknown3);
            BitPack.Write(values.IsVehicle);
            BitPack.Write(values.HasStationaryPosition);
            BitPack.Write(values.Bit2);
            BitPack.Write(values.BitCounter, 22);

            if (values.IsAlive)
            {
                BitPack.WriteGuidMask(7);
                BitPack.Write(0, 19);               // BitCounter_Alive_1
                BitPack.Write(0);                   // IsInterpolated, not implanted
                BitPack.Write(values.IsTransport);
                BitPack.Write(0);                   // Unknown_Alive_1
                BitPack.WriteGuidMask(0);
                BitPack.Write(1);                   // splineElevation, not implanted
                BitPack.Write(true);                // Movementflags are not implanted
                BitPack.Write(0);                   // HasSplineData, don't write simple basic splineData
                BitPack.WriteGuidMask(1);
                BitPack.Write(true);                // MovementFlags2 are not implanted
                BitPack.Write(0, 22);               // BitCounter_Alive_2
                BitPack.WriteGuidMask(3, 5, 6);
                BitPack.Write(0);                   // Unknown_Alive_3
                BitPack.Write(!values.HasRotation);
                BitPack.Write(1);                   // Pitch, not implanted
                BitPack.Write(1);                   // Unknown_Alive_2, Reversed
                BitPack.WriteGuidMask(2);
                BitPack.Write(!values.IsAlive);
                BitPack.Write(0);                   // Unknown_Alive_4
                BitPack.WriteGuidMask(4);
            }

            BitPack.Flush();

            if (values.IsAlive)
            {
                BitPack.WriteGuidBytes(5);
                packet.WriteFloat((float)MovementSpeed.SwimSpeed);
                packet.WriteFloat((float)MovementSpeed.WalkSpeed);
                BitPack.WriteGuidBytes(6);
                packet.WriteFloat((float)MovementSpeed.RunSpeed);
                BitPack.WriteGuidBytes(0);
                packet.WriteFloat(wObject.Position.Z);
                packet.WriteFloat((float)MovementSpeed.FlySpeed);
                packet.WriteFloat(wObject.Position.Y);
                packet.WriteFloat(wObject.Position.X);
                BitPack.WriteGuidBytes(4, 3);
                packet.WriteFloat((float)MovementSpeed.TurnSpeed);
                BitPack.WriteGuidBytes(2);
                packet.WriteUInt32(0);
                packet.WriteFloat(wObject.Position.O);
                packet.WriteFloat((float)MovementSpeed.FlyBackSpeed);
                packet.WriteFloat((float)MovementSpeed.SwimBackSpeed);
                packet.WriteFloat((float)MovementSpeed.RunBackSpeed);
                packet.WriteFloat((float)MovementSpeed.PitchSpeed);
                BitPack.WriteGuidBytes(1, 7);
            }

            if (values.HasStationaryPosition)
            {
                packet.WriteFloat(wObject.Position.Z);
                packet.WriteFloat(wObject.Position.O);
                packet.WriteFloat(wObject.Position.Y);
                packet.WriteFloat(wObject.Position.X);
            }

            if (wObject is GameObjectSpawn)
            {
                packet.WriteInt64(Quaternion.GetCompressed(wObject.Position.O));
            }
        }
Example #22
0
 public ServerUpdateEmpty(uint sequence, UpdateType updateType, UpdateFlag updateFlags = UpdateFlag.None)
     : base(sequence, updateType, updateFlags)
 {
 }
 public EmployeeSearchFrm()
 {
     InitializeComponent();
     this.Visible = false;
     updateFlag   = new UpdateFlag(setFlagValue);
 }
Example #24
0
        public void WriteUpdateObjectMovement(ref PacketWriter packet, ref WorldObject wObject, UpdateFlag updateFlags)
        {
            ObjectMovementValues values = new ObjectMovementValues(updateFlags);
            BitPack BitPack             = new BitPack(packet, wObject.Guid);

            BitPack.Write(0);
            BitPack.Write(values.IsVehicle);
            BitPack.Write(0);
            BitPack.Write(wObject is GameObjectSpawn);
            BitPack.Write(0);
            BitPack.Write(values.IsAlive);
            BitPack.Write(values.IsSceneObject);
            BitPack.Write(0);
            BitPack.Write(values.IsAreaTrigger);
            BitPack.Write(values.IsSelf);
            BitPack.Write(0);
            BitPack.Write(0);
            BitPack.Write(values.HasGoTransportPosition);
            BitPack.Write(values.IsTransport);
            BitPack.Write(values.HasAnimKits);
            BitPack.Write(values.HasStationaryPosition);
            BitPack.Write(values.HasTarget);
            BitPack.Write(0);
            BitPack.Write(0, 22);
            BitPack.Write(0);
            BitPack.Write(0);

            if (values.IsAlive)
            {
                BitPack.Write(values.IsTransport);
                BitPack.Write(1);
                BitPack.Write(0);
                BitPack.Write(0, 19);
                BitPack.WriteGuidMask(1);
                BitPack.Write(!values.HasMovementFlags2);
                BitPack.Write(0);
                BitPack.Write(1);

                if (values.HasMovementFlags2)
                {
                    BitPack.Write(values.MovementFlags2, 13);
                }

                BitPack.Write(!values.HasRotation);
                BitPack.Write(0);
                BitPack.Write(!values.HasMovementFlags);
                BitPack.Write(1);
                BitPack.WriteGuidMask(2, 6);
                BitPack.Write(values.IsFallingOrJumping);
                BitPack.WriteGuidMask(5, 4, 0);

                if (values.HasMovementFlags)
                {
                    BitPack.Write(values.MovementFlags, 30);
                }

                BitPack.Write(0);

                if (values.IsFallingOrJumping)
                {
                    BitPack.Write(values.HasJumpData);
                }

                BitPack.Write(0, 22);
                BitPack.WriteGuidMask(7);
                BitPack.Write(0);
                BitPack.WriteGuidMask(3);
            }

            BitPack.Flush();

            if (values.IsAlive)
            {
                if (values.IsFallingOrJumping)
                {
                    if (values.HasJumpData)
                    {
                        packet.WriteFloat(values.CurrentSpeed);
                        packet.WriteFloat(values.Sin);
                        packet.WriteFloat(values.Cos);
                    }

                    packet.WriteFloat(values.JumpVelocity);
                    packet.WriteUInt32(values.FallTime);
                }

                packet.WriteFloat(wObject.Position.Z);
                packet.WriteFloat(wObject.Position.Y);
                packet.WriteFloat(MovementSpeed.FlySpeed);
                BitPack.WriteGuidBytes(6);
                packet.WriteFloat(MovementSpeed.FlyBackSpeed);
                packet.WriteFloat(wObject.Position.X);
                BitPack.WriteGuidBytes(2);
                packet.WriteFloat(MovementSpeed.SwimBackSpeed);
                BitPack.WriteGuidBytes(1);
                packet.WriteFloat(MovementSpeed.RunBackSpeed);
                packet.WriteFloat(MovementSpeed.SwimSpeed);
                BitPack.WriteGuidBytes(5);
                packet.WriteFloat(MovementSpeed.TurnSpeed);
                BitPack.WriteGuidBytes(3);
                packet.WriteFloat(MovementSpeed.RunSpeed);
                BitPack.WriteGuidBytes(7);
                packet.WriteFloat(MovementSpeed.WalkSpeed);
                packet.WriteFloat(MovementSpeed.PitchSpeed);
                packet.WritePackedTime();
                BitPack.WriteGuidBytes(4, 0);

                if (values.HasRotation)
                {
                    packet.WriteFloat(wObject.Position.O);
                }
            }

            if (values.HasStationaryPosition)
            {
                packet.WriteFloat(wObject.Position.O);
                packet.WriteFloat(wObject.Position.X);
                packet.WriteFloat(wObject.Position.Y);
                packet.WriteFloat(wObject.Position.Z);
            }

            if (wObject is GameObjectSpawn)
            {
                packet.WriteInt64(Quaternion.GetCompressed(wObject.Position.O));
            }
        }
 public UpdateAttribute()
 {
     InChat      = InChat.All;
     UpdateFlags = UpdateFlag.All;
 }
Example #26
0
        public static void HandleUpdateObject(ref WorldClass session)
        {
            Character    character    = session.Character;
            PacketWriter updateObject = new PacketWriter(LegacyMessage.UpdateObject);

            updateObject.WriteUInt16((ushort)character.Map);
            updateObject.WriteUInt32(1);
            updateObject.WriteUInt8(1);
            updateObject.WriteGuid(character.Guid);
            updateObject.WriteUInt8(4);

            UpdateFlag updateFlags = UpdateFlag.Alive | UpdateFlag.Rotation | UpdateFlag.Self;

            WorldMgr.WriteUpdateObjectMovement(ref updateObject, ref character, updateFlags);

            character.WriteUpdateFields(ref updateObject);
            character.WriteDynamicUpdateFields(ref updateObject);

            session.Send(updateObject);

            var tempSession = WorldMgr.Sessions;

            tempSession.Remove(character.Guid);

            foreach (var s in tempSession)
            {
                if (character.Zone != s.Value.Character.Zone)
                {
                    continue;
                }

                updateObject = new PacketWriter(LegacyMessage.UpdateObject);

                updateObject.WriteUInt16((ushort)character.Map);
                updateObject.WriteUInt32(1);
                updateObject.WriteUInt8(1);
                updateObject.WriteGuid(character.Guid);
                updateObject.WriteUInt8(4);

                updateFlags = UpdateFlag.Alive | UpdateFlag.Rotation;
                WorldMgr.WriteUpdateObjectMovement(ref updateObject, ref character, updateFlags);

                character.WriteUpdateFields(ref updateObject);
                character.WriteDynamicUpdateFields(ref updateObject);

                s.Value.Send(updateObject);
            }

            foreach (var s in tempSession)
            {
                character = s.Value.Character;

                if (character.Zone != session.Character.Zone)
                {
                    continue;
                }

                updateObject = new PacketWriter(LegacyMessage.UpdateObject);

                updateObject.WriteUInt16((ushort)character.Map);
                updateObject.WriteUInt32(1);
                updateObject.WriteUInt8(1);
                updateObject.WriteGuid(character.Guid);
                updateObject.WriteUInt8(4);

                updateFlags = UpdateFlag.Alive | UpdateFlag.Rotation;
                WorldMgr.WriteUpdateObjectMovement(ref updateObject, ref character, updateFlags);

                character.WriteUpdateFields(ref updateObject);
                character.WriteDynamicUpdateFields(ref updateObject);

                session.Send(updateObject);
            }
        }