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); } } }
/// <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)) { } }
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; }
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 }); }
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); }
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); }
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 :; } } } }
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); }
/// <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()); }
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 }
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; } }
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." ); }
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); } }
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)); } }
public ServerUpdateEmpty(uint sequence, UpdateType updateType, UpdateFlag updateFlags = UpdateFlag.None) : base(sequence, updateType, updateFlags) { }
public EmployeeSearchFrm() { InitializeComponent(); this.Visible = false; updateFlag = new UpdateFlag(setFlagValue); }
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; }
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); } }