示例#1
0
 public void CreatureQuery(WoWGuid guid, UInt32 entry)
 {
     PacketOut packet = new PacketOut(WorldServerOpCode.CMSG_CREATURE_QUERY);
     packet.Write(entry);
     packet.Write(guid.GetNewGuid());
     Send(packet);
 }
示例#2
0
 public void delObject(WoWGuid guid)
 {
     int index = getObjectIndex(guid);
     if (index != -1)
     {
         mObjects.RemoveAt(index);
     }
 }
        public void HandleMonsterMove(PacketIn packet)
        {
            byte mask = packet.ReadByte();

            WoWGuid guid = new WoWGuid(mask, packet.ReadBytes(WoWGuid.BitCount8(mask)));

            Object obj = objectMgr.getObject(guid);
            if (obj != null)
            {
                    obj.Position = new Coordinate(packet.ReadFloat(), packet.ReadFloat(), packet.ReadFloat());
            }
        }
 public void SetPlayer(Character character)
 {
     Name = character.Name;
     Guid = new WoWGuid(character.GUID);
 }
 public Object(WoWGuid guid)
 {
     this.Guid = guid;
 }
示例#6
0
 public void QueryName(WoWGuid guid)
 {
     PacketOut packet = new PacketOut(WorldServerOpCode.CMSG_NAME_QUERY);
     packet.Write(guid.GetNewGuid());
     Send(packet);
 }
示例#7
0
 public void ObjectQuery(WoWGuid guid, UInt32 entry)
 {
     PacketOut packet = new PacketOut(WorldServerOpCode.CMSG_Object_QUERY);
     packet.Write(entry);
     packet.Write(guid.GetNewGuid());
     Send(packet);
 }
示例#8
0
        public void Handle_NameQuery(PacketIn packet)
        {
            WoWGuid guid = new WoWGuid(packet.ReadUInt64());
                string name = packet.ReadString();
                packet.ReadByte();
                Race Race = (Race)packet.ReadUInt32();
                Gender Gender = (Gender)packet.ReadUInt32();
                Classname Class = (Classname)packet.ReadUInt32();

                if (objectMgr.objectExists(guid))    // Update existing Object
                {
                    Object obj = objectMgr.getObject(guid);
                    obj.Name = name;
                    objectMgr.updateObject(obj);
                }
                else                // Create new Object        -- FIXME: Add to new 'names only' list?
                {
                    Object obj = new Object(guid);
                    obj.Name = name;
                    objectMgr.addObject(obj);

                    /* Process chat message if we looked them up now */
                    for (int i = 0; i < ChatQueued.Count; i++)
                    {
                        ChatQueue message = (ChatQueue)ChatQueued[i];
                        if (message.GUID.GetOldGuid() == guid.GetOldGuid())
                        {
                            Log.WriteLine(LogType.Chat, "[{1}] {0}", message.Message, name);
                            ChatQueued.Remove(message);
                        }
                    }

                }
        }
示例#9
0
 private int getObjectIndex(WoWGuid guid)
 {
     int index = mObjects.FindIndex(s => s.Guid.GetOldGuid() == guid.GetOldGuid());
     return index;
 }
示例#10
0
 public bool objectExists(WoWGuid guid)
 {
     int index = getObjectIndex(guid);
     if (index == -1)
     {
         return false;
     }
     else
         return true;
 }
示例#11
0
 public ObjectType getObjectType(WoWGuid guid)
 {
     int index = getObjectIndex(guid);
     if (index != -1)
     {
         return mObjects[index].Type;
     }
     else
         return new ObjectType();
 }
示例#12
0
 public Object getObject(WoWGuid guid)
 {
     int index = getObjectIndex(guid);
     if (index == -1)
     {
         return null;
     }
     else
         return mObjects[index];
 }
示例#13
0
        public void HandleChat(PacketIn packet)
        {
            try
            {

                string channel = null;
                UInt64 guid = 0;
                WoWGuid fguid = null, fguid2 = null;
                string username = null;

                byte Type = packet.ReadByte();
                UInt32 Language = packet.ReadUInt32();

                guid = packet.ReadUInt64();
                fguid = new WoWGuid(guid);
                packet.ReadInt32();

                if ((ChatMsg)Type == ChatMsg.Channel)
                {
                    channel = packet.ReadString();
                }

                if (Type == 47)
                    return;
                fguid2 = new WoWGuid(packet.ReadUInt64());

                UInt32 Length = packet.ReadUInt32();
                string Message = Encoding.Default.GetString(packet.ReadBytes((int)Length));

                //Message = Regex.Replace(Message, @"\|H[a-zA-z0-9:].|h", ""); // Why do i should need spells and quest linked? ;>
                Message = Regex.Replace(Message, @"\|[rc]{1}[a-zA-z0-9]{0,8}", ""); // Colorfull chat message also isn't the most important thing.

                byte afk = 0;

                if (fguid.GetOldGuid() == 0)
                {
                    username = "******";
                }
                else
                {
                    if (objectMgr.objectExists(fguid))
                        username = objectMgr.getObject(fguid).Name;
                }

                if (username == null)
                {

                    ChatQueue que = new ChatQueue();
                    que.GUID = fguid;
                    que.Type = Type;
                    que.Language = Language;
                    if ((ChatMsg)Type == ChatMsg.Channel)
                        que.Channel = channel;
                    que.Length = Length;
                    que.Message = Message;
                    que.AFK = afk;
                    ChatQueued.Add(que);
                    QueryName(guid);
                    return;
                }

                object[] param = new object[] { (ChatMsg)Type, channel, username, Message };
                mCore.Event(new Event(EventType.EVENT_CHAT_MSG, "0", param));
                //Log.WriteLine(LogType.Chat, "[{1}] {0}", Message, username);
            }
            catch (Exception ex)
            {
                Log.WriteLine(LogType.Error, "Exception Occured");
                Log.WriteLine(LogType.Error, "Message: {0}", ex.Message);
                Log.WriteLine(LogType.Error, "Stacktrace: {0}", ex.StackTrace);
            }
        }