using System;using MoDY.Network.GamePackets;using System.Collections.Concurrent;namespace MoDY.Game{ public unsafe class Statue : Network.Writer { public static ConcurrentDictionary<uint, Statue> Statues = new ConcurrentDictionary<uint, Statue>(); public byte[] SpawnPacket = null; public uint UID; public Statue(byte[] array) { UID = 105175; SpawnPacket = new byte[array.Length]; for (ushort x = 0; x < array.Length; x++) SpawnPacket[x] = array[x]; WriteByte(0, MsgPlayer.Facing, SpawnPacket); WriteUInt32(0, MsgPlayer.Action, SpawnPacket); WriteUInt16(1000, MsgPlayer.GuildRank, SpawnPacket); WriteUInt32(105175, MsgPlayer.UID, SpawnPacket); WriteUInt64(0, MsgPlayer.StatusFlag, SpawnPacket); WriteUInt64(0, MsgPlayer.StatusFlag2, SpawnPacket); WriteUInt64(0, MsgPlayer.StatusFlag3, SpawnPacket); WriteUInt32(0, MsgPlayer.Hitpoints, SpawnPacket); WriteUInt32(0, MsgPlayer.GuildID, SpawnPacket); X = 328; Y = 304; if (array.Length > 200) { if (!Statues.ContainsKey(105175)) Statues.TryAdd(105175, this); else { Statues[105175] = this; } } foreach (var client in Kernel.GamePool.Values) { if (Kernel.GetDistance(X, Y, client.Player.X, client.Player.Y) < 16 && client.Player.MapID == 1002) { client.Send(this.SpawnPacket); } } } ushort _x, _y; public ushort X { get { return _x; } set { _x = value; WriteUInt16(value, MsgPlayer.X, SpawnPacket); } } public ushort Y { get { return _y; } set { _y = value; WriteUInt16(value, MsgPlayer.Y, SpawnPacket); } } public static bool operator >(Statue statue, Client.GameState client) { if (!client.Screen.Statue.ContainsKey(statue.UID)) { if (Kernel.GetDistance(statue.X, statue.Y, client.Player.X, client.Player.Y) < 16 && client.Player.MapID == 1002) { if (statue.SpawnPacket.Length > 200) { client.Send(statue.SpawnPacket); return true; } } } return false; } public static bool operator <(Statue statue, Client.GameState client) { if (Kernel.GetDistance(statue.X, statue.Y, client.Player.X, client.Player.Y) >= 16 && client.Player.MapID == 1002) { return true; } return false; } }}