rendered paste bodyusing 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);
}
}
}