All pastes #944959 Raw Edit

Mine

public text v1 · immutable
·published 2008-03-16 16:21 UTC
rendered paste body
using System;
using System.Collections;
using System.Net;
using System.Net.Sockets;
using System.Xml;
using System.Timers;
using System.IO;
using System.Threading;

using Foole.Crypt;
using Foole.Utils;
using Foole.WoW;

namespace BoogieBot.Common
{
    public enum ChatMsg
    {
        CHAT_MSG_ADDON = -1,
        CHAT_MSG_SAY = 0x00,
        CHAT_MSG_PARTY = 0x01,
        CHAT_MSG_RAID = 0x02,
        CHAT_MSG_GUILD = 0x03,
        CHAT_MSG_OFFICER = 0x04,
        CHAT_MSG_YELL = 0x05,
        CHAT_MSG_WHISPER = 0x06,
        CHAT_MSG_WHISPER_INFORM = 0x07,
        CHAT_MSG_EMOTE = 0x08,
        CHAT_MSG_TEXT_EMOTE = 0x09,
        CHAT_MSG_SYSTEM = 0x0A,
        CHAT_MSG_MONSTER_SAY = 0x0B,
        CHAT_MSG_MONSTER_YELL = 0x0C,
        CHAT_MSG_MONSTER_EMOTE = 0x0D,
        CHAT_MSG_CHANNEL = 0x0E,
        CHAT_MSG_CHANNEL_JOIN = 0x0F,
        CHAT_MSG_CHANNEL_LEAVE = 0x10,
        CHAT_MSG_CHANNEL_LIST = 0x11,
        CHAT_MSG_CHANNEL_NOTICE = 0x12,
        CHAT_MSG_CHANNEL_NOTICE_USER = 0x13,
        CHAT_MSG_AFK = 0x14,
        CHAT_MSG_DND = 0x15,
        CHAT_MSG_IGNORED = 0x16,
        CHAT_MSG_SKILL = 0x17,
        CHAT_MSG_LOOT = 0x18,
        CHAT_MSG_COMBAT_MISC_INFO = 0x19,
        CHAT_MSG_MONSTER_WHISPER = 0x1A,
        CHAT_MSG_COMBAT_SELF_HITS = 0x1B,
        CHAT_MSG_COMBAT_SELF_MISSES = 0x1C,
        CHAT_MSG_COMBAT_PET_HITS = 0x1D,
        CHAT_MSG_COMBAT_PET_MISSES = 0x1E,
        CHAT_MSG_COMBAT_PARTY_HITS = 0x1F,
        CHAT_MSG_COMBAT_PARTY_MISSES = 0x20,
        CHAT_MSG_COMBAT_FRIENDLYPLAYER_HITS = 0x21,
        CHAT_MSG_COMBAT_FRIENDLYPLAYER_MISSES = 0x22,
        CHAT_MSG_COMBAT_HOSTILEPLAYER_HITS = 0x23,
        CHAT_MSG_COMBAT_HOSTILEPLAYER_MISSES = 0x24,
        CHAT_MSG_COMBAT_CREATURE_VS_SELF_HITS = 0x25,
        CHAT_MSG_COMBAT_CREATURE_VS_SELF_MISSES = 0x26,
        CHAT_MSG_COMBAT_CREATURE_VS_PARTY_HITS = 0x27,
        CHAT_MSG_COMBAT_CREATURE_VS_PARTY_MISSES = 0x28,
        CHAT_MSG_COMBAT_CREATURE_VS_CREATURE_HITS = 0x29,
        CHAT_MSG_COMBAT_CREATURE_VS_CREATURE_MISSES = 0x2A,
        CHAT_MSG_COMBAT_FRIENDLY_DEATH = 0x2B,
        CHAT_MSG_COMBAT_HOSTILE_DEATH = 0x2C,
        CHAT_MSG_COMBAT_XP_GAIN = 0x2D,
        CHAT_MSG_SPELL_SELF_DAMAGE = 0x2E,
        CHAT_MSG_SPELL_SELF_BUFF = 0x2F,
        CHAT_MSG_SPELL_PET_DAMAGE = 0x30,
        CHAT_MSG_SPELL_PET_BUFF = 0x31,
        CHAT_MSG_SPELL_PARTY_DAMAGE = 0x32,
        CHAT_MSG_SPELL_PARTY_BUFF = 0x33,
        CHAT_MSG_SPELL_FRIENDLYPLAYER_DAMAGE = 0x34,
        CHAT_MSG_SPELL_FRIENDLYPLAYER_BUFF = 0x35,
        CHAT_MSG_SPELL_HOSTILEPLAYER_DAMAGE = 0x36,
        CHAT_MSG_SPELL_HOSTILEPLAYER_BUFF = 0x37,
        CHAT_MSG_SPELL_CREATURE_VS_SELF_DAMAGE = 0x38,
        CHAT_MSG_SPELL_CREATURE_VS_SELF_BUFF = 0x39,
        CHAT_MSG_SPELL_CREATURE_VS_PARTY_DAMAGE = 0x3A,
        CHAT_MSG_SPELL_CREATURE_VS_PARTY_BUFF = 0x3B,
        CHAT_MSG_SPELL_CREATURE_VS_CREATURE_DAMAGE = 0x3C,
        CHAT_MSG_SPELL_CREATURE_VS_CREATURE_BUFF = 0x3D,
        CHAT_MSG_SPELL_TRADESKILLS = 0x3E,
        CHAT_MSG_SPELL_DAMAGESHIELDS_ON_SELF = 0x3F,
        CHAT_MSG_SPELL_DAMAGESHIELDS_ON_OTHERS = 0x40,
        CHAT_MSG_SPELL_AURA_GONE_SELF = 0x41,
        CHAT_MSG_SPELL_AURA_GONE_PARTY = 0x42,
        CHAT_MSG_SPELL_AURA_GONE_OTHER = 0x43,
        CHAT_MSG_SPELL_ITEM_ENCHANTMENTS = 0x44,
        CHAT_MSG_SPELL_BREAK_AURA = 0x45,
        CHAT_MSG_SPELL_PERIODIC_SELF_DAMAGE = 0x46,
        CHAT_MSG_SPELL_PERIODIC_SELF_BUFFS = 0x47,
        CHAT_MSG_SPELL_PERIODIC_PARTY_DAMAGE = 0x48,
        CHAT_MSG_SPELL_PERIODIC_PARTY_BUFFS = 0x49,
        CHAT_MSG_SPELL_PERIODIC_FRIENDLYPLAYER_DAMAGE = 0x4A,
        CHAT_MSG_SPELL_PERIODIC_FRIENDLYPLAYER_BUFFS = 0x4B,
        CHAT_MSG_SPELL_PERIODIC_HOSTILEPLAYER_DAMAGE = 0x4C,
        CHAT_MSG_SPELL_PERIODIC_HOSTILEPLAYER_BUFFS = 0x4D,
        CHAT_MSG_SPELL_PERIODIC_CREATURE_DAMAGE = 0x4E,
        CHAT_MSG_SPELL_PERIODIC_CREATURE_BUFFS = 0x4F,
        CHAT_MSG_SPELL_FAILED_LOCALPLAYER = 0x50,
        CHAT_MSG_COMBAT_HONOR_GAIN = 0x51,
        CHAT_MSG_BG_EVENT_NEUTRAL = 0x52,
        CHAT_MSG_BG_EVENT_ALLIANCE = 0x53,
        CHAT_MSG_BG_EVENT_HORDE = 0x54,
        CHAT_MSG_COMBAT_FACTION_CHANGE = 0x55,
        CHAT_MSG_MONEY = 0x56,
        CHAT_MSG_RAID_LEADER = 0x57,
        CHAT_MSG_RAID_WARNING = 0x58,
        CHAT_MSG_FOREIGN_TELL = 0x59,
        CHAT_MSG_RAID_BOSS_EMOTE = 0x5A,
        CHAT_MSG_FILTERED = 0x5B,
        CHAT_MSG_BATTLEGROUND = 0x5C,
        CHAT_MSG_BATTLEGROUND_LEADER = 0x5D,
        CHAT_MSG_MONSTER_PARTY = 0x5E,
        CHAT_MSG_RESTRICTED = 0x5F,
    };

    public delegate void ChatCB(ChatQueue que, string Username);

    public struct ChatQueue
    {
        public WoWGuid GUID;
        public byte Type;
        public UInt32 Language;
        public string Channel;
        public UInt32 Length;
        public string Message;
        public byte AFK;

    };

    // Where is Undead Gutterspeak ? 4 or 5? Also PLEASE make sure NUM_LANGUAGES is correctly updated as it is used.
    public enum Languages
    {
        LANG_UNIVERSAL = 0x00,
        LANG_ORCISH = 0x01,
        LANG_DARNASSIAN = 0x02,
        LANG_TAURAHE = 0x03,
        LANG_DWARVISH = 0x06,
        LANG_COMMON = 0x07,
        LANG_DEMONIC = 0x08,
        LANG_TITAN = 0x09,
        LANG_THELASSIAN = 0x0A,
        LANG_DRACONIC = 0x0B,
        LANG_KALIMAG = 0x0C,
        LANG_GNOMISH = 0x0D,
        LANG_TROLL = 0x0E,
        LANG_GUTTERSPEAK = 0x21,
        LANG_DRAENEI = 0x23,
        NUM_LANGUAGES = 0x24
    };

    partial class WorldServerClient
    {
        private ArrayList ChatQueued = new ArrayList();
        public ArrayList ChannelList = new ArrayList();

        private void Handle_MessageChat(WoWReader wr)
        {
            byte Type = wr.ReadByte();
            UInt32 Language = wr.ReadUInt32();

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


            if ((ChatMsg)Type == ChatMsg.CHAT_MSG_CHANNEL)
            {
                channel = wr.ReadString();
                pvp_rank = wr.ReadUInt32();
            }

            guid = wr.ReadUInt64();
            fguid = new WoWGuid(guid);

            wr.ReadInt32();

            fguid2 = new WoWGuid(wr.ReadUInt64());

            UInt32 Length = wr.ReadUInt32();
            string Message = wr.ReadString();
            byte afk = wr.ReadByte();


            string username = null;


            ChatQueue que = new ChatQueue() ;
            que.GUID = fguid;
            que.Type = Type;
            que.Language = Language;
            if ((ChatMsg)Type == ChatMsg.CHAT_MSG_CHANNEL)
                que.Channel = channel;
            que.Length = Length;
            que.Message = Message;
            que.AFK = afk;

            if (fguid.GetOldGuid() == 0)
            {
                username = "System";
            }
            else
            {
                username = BoogieCore.world.getObjectName(fguid);
            }

            if (username == null)
            {
                ChatQueued.Add(que);
                QueryName(guid);
                return;
            }

            Event e = new Event(EventType.EVENT_CHAT, Time.GetTime(), que, username);
            BoogieCore.Event(e);
        }
        
        public void SendChatMsg(ChatMsg Type, Languages Language, string Message)
        {
            if (Type != ChatMsg.CHAT_MSG_WHISPER || Type != ChatMsg.CHAT_MSG_CHANNEL)
                SendChatMsg(Type, Language, Message, "");
            else
                BoogieCore.Log(LogType.Error, "Got whisper message to send without destination");
        }

        public void SendChatMsg(ChatMsg Type, Languages Language, string Message, string To)
        {
            WoWWriter wr = new WoWWriter(OpCode.CMSG_MESSAGECHAT);
            wr.Write((UInt32)Type);
            wr.Write((UInt32)Language);
            if ((Type == ChatMsg.CHAT_MSG_WHISPER || Type == ChatMsg.CHAT_MSG_CHANNEL) && To != "")
                wr.Write(To);
            wr.Write(Message);

            Send(wr.ToArray());
        }

        public void SendEmoteMsg(ChatMsg Type, Languages Language, string Message, string To)
        {
            WoWWriter wr = new WoWWriter(OpCode.CMSG_TEXT_EMOTE);
            wr.Write((UInt32)Type);
            wr.Write((UInt32)Language);
            wr.Write(Message);

            Send(wr.ToArray());
        }

        public void JoinChannel(string channel, string password)
        {
            WoWWriter wr = new WoWWriter(OpCode.CMSG_JOIN_CHANNEL);
            wr.Write(channel);
            wr.Write((byte)0);
            Send(wr.ToArray());

            ChannelList.Add(channel);

            Event e = new Event(EventType.EVENT_CHANNEL_JOINED, Time.GetTime(), channel);
            BoogieCore.Event(e);
        }

        public void PartChannel(string channel)
        {
            WoWWriter wr = new WoWWriter(OpCode.CMSG_LEAVE_CHANNEL);
            wr.Write(channel);
            Send(wr.ToArray());

            ChannelList.Remove(channel);

            Event e = new Event(EventType.EVENT_CHANNEL_LEFT, Time.GetTime(), channel);
            BoogieCore.Event(e);
        }
    }
}