Files
CypherCore/Game/Network/Packets/ChatPackets.cs
T
2017-06-19 17:30:18 -04:00

472 lines
14 KiB
C#

/*
* Copyright (C) 2012-2017 CypherCore <http://github.com/CypherCore>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
using Framework.Constants;
using Game.Entities;
using Game.Groups;
namespace Game.Network.Packets
{
public class ChatMessage : ClientPacket
{
public ChatMessage(WorldPacket packet) : base(packet) { }
public override void Read()
{
Language = (Language)_worldPacket.ReadInt32();
uint len = _worldPacket.ReadBits<uint>(9);
Text = _worldPacket.ReadString(len);
}
public string Text;
public Language Language = Language.Universal;
}
public class ChatMessageWhisper : ClientPacket
{
public ChatMessageWhisper(WorldPacket packet) : base(packet) { }
public override void Read()
{
Language = (Language)_worldPacket.ReadInt32();
uint targetLen = _worldPacket.ReadBits<uint>(9);
uint textLen = _worldPacket.ReadBits<uint>(9);
Target = _worldPacket.ReadString(targetLen);
Text = _worldPacket.ReadString(textLen);
}
public Language Language = Language.Universal;
public string Text;
public string Target;
}
public class ChatMessageChannel : ClientPacket
{
public ChatMessageChannel(WorldPacket packet) : base(packet) { }
public override void Read()
{
Language = (Language)_worldPacket.ReadInt32();
uint targetLen = _worldPacket.ReadBits<uint>(9);
uint textLen = _worldPacket.ReadBits<uint>(9);
Target = _worldPacket.ReadString(targetLen);
Text = _worldPacket.ReadString(textLen);
}
public Language Language = Language.Universal;
public string Text;
public string Target;
}
public class ChatAddonMessage : ClientPacket
{
public ChatAddonMessage(WorldPacket packet) : base(packet) { }
public override void Read()
{
uint prefixLen = _worldPacket.ReadBits<uint>(5);
uint textLen = _worldPacket.ReadBits<uint>(9);
Prefix = _worldPacket.ReadString(prefixLen);
Text = _worldPacket.ReadString(textLen);
}
public string Prefix;
public string Text;
}
public class ChatAddonMessageWhisper : ClientPacket
{
public ChatAddonMessageWhisper(WorldPacket packet) : base(packet) { }
public override void Read()
{
uint targetLen = _worldPacket.ReadBits<uint>(9);
uint prefixLen = _worldPacket.ReadBits<uint>(5);
uint textLen = _worldPacket.ReadBits<uint>(9);
Target = _worldPacket.ReadString(targetLen);
Prefix = _worldPacket.ReadString(prefixLen);
Text = _worldPacket.ReadString(textLen);
}
public string Prefix;
public string Target;
public string Text;
}
class ChatAddonMessageChannel : ClientPacket
{
public ChatAddonMessageChannel(WorldPacket packet) : base(packet) { }
public override void Read()
{
uint targetLen = _worldPacket.ReadBits<uint>(9);
uint prefixLen = _worldPacket.ReadBits<uint>(5);
uint textLen = _worldPacket.ReadBits<uint>(9);
Target = _worldPacket.ReadString(targetLen);
Prefix = _worldPacket.ReadString(prefixLen);
Text = _worldPacket.ReadString(textLen);
}
public string Text;
public string Target;
public string Prefix;
}
public class ChatMessageDND : ClientPacket
{
public ChatMessageDND(WorldPacket packet) : base(packet) { }
public override void Read()
{
uint len = _worldPacket.ReadBits<uint>(9);
Text = _worldPacket.ReadString(len);
}
public string Text;
}
public class ChatMessageAFK : ClientPacket
{
public ChatMessageAFK(WorldPacket packet) : base(packet) { }
public override void Read()
{
uint len = _worldPacket.ReadBits<uint>(9);
Text = _worldPacket.ReadString(len);
}
public string Text;
}
public class ChatMessageEmote : ClientPacket
{
public ChatMessageEmote(WorldPacket packet) : base(packet) { }
public override void Read()
{
uint len = _worldPacket.ReadBits<uint>(9);
Text = _worldPacket.ReadString(len);
}
public string Text;
}
public class ChatPkt : ServerPacket
{
public ChatPkt() : base(ServerOpcodes.Chat) { }
public void Initialize(ChatMsg chatType, Language language, WorldObject sender, WorldObject receiver, string message, uint achievementId = 0, string channelName = "", LocaleConstant locale = LocaleConstant.enUS, string addonPrefix = "")
{
// Clear everything because same packet can be used multiple times
Clear();
SenderGUID.Clear();
SenderAccountGUID.Clear();
SenderGuildGUID.Clear();
PartyGUID.Clear();
TargetGUID.Clear();
SenderName = "";
TargetName = "";
_ChatFlags = ChatFlags.None;
SlashCmd = chatType;
_Language = language;
if (sender)
SetSender(sender, locale);
if (receiver)
SetReceiver(receiver, locale);
SenderVirtualAddress = Global.WorldMgr.GetVirtualRealmAddress();
TargetVirtualAddress = Global.WorldMgr.GetVirtualRealmAddress();
AchievementID = achievementId;
Channel = channelName;
Prefix = addonPrefix;
ChatText = message;
}
void SetSender(WorldObject sender, LocaleConstant locale)
{
SenderGUID = sender.GetGUID();
Creature creatureSender = sender.ToCreature();
if (creatureSender)
SenderName = creatureSender.GetName(locale);
Player playerSender = sender.ToPlayer();
if (playerSender)
{
SenderAccountGUID = playerSender.GetSession().GetAccountGUID();
_ChatFlags = playerSender.GetChatFlags();
SenderGuildGUID = ObjectGuid.Create(HighGuid.Guild, playerSender.GetGuildId());
Group group = playerSender.GetGroup();
if (group)
PartyGUID = group.GetGUID();
}
}
public void SetReceiver(WorldObject receiver, LocaleConstant locale)
{
TargetGUID = receiver.GetGUID();
Creature creatureReceiver = receiver.ToCreature();
if (creatureReceiver)
TargetName = creatureReceiver.GetName(locale);
}
public override void Write()
{
_worldPacket.WriteUInt8(SlashCmd);
_worldPacket.WriteUInt8(_Language);
_worldPacket.WritePackedGuid(SenderGUID);
_worldPacket.WritePackedGuid(SenderGuildGUID);
_worldPacket.WritePackedGuid(SenderAccountGUID);
_worldPacket.WritePackedGuid(TargetGUID);
_worldPacket.WriteUInt32(TargetVirtualAddress);
_worldPacket.WriteUInt32(SenderVirtualAddress);
_worldPacket.WritePackedGuid(PartyGUID);
_worldPacket.WriteUInt32(AchievementID);
_worldPacket.WriteFloat(DisplayTime);
_worldPacket.WriteBits(SenderName.Length, 11);
_worldPacket.WriteBits(TargetName.Length, 11);
_worldPacket.WriteBits(Prefix.Length, 5);
_worldPacket.WriteBits(Channel.Length, 7);
_worldPacket.WriteBits(ChatText.Length, 12);
_worldPacket.WriteBits((uint)_ChatFlags, 11);
_worldPacket.WriteBit(HideChatLog);
_worldPacket.WriteBit(FakeSenderName);
_worldPacket.WriteString(SenderName);
_worldPacket.WriteString(TargetName);
_worldPacket.WriteString(Prefix);
_worldPacket.WriteString(Channel);
_worldPacket.WriteString(ChatText);
}
public ChatMsg SlashCmd = 0;
public Language _Language = Language.Universal;
public ObjectGuid SenderGUID;
public ObjectGuid SenderGuildGUID;
public ObjectGuid SenderAccountGUID;
public ObjectGuid TargetGUID;
public ObjectGuid PartyGUID;
public uint SenderVirtualAddress;
public uint TargetVirtualAddress;
public string SenderName = "";
public string TargetName = "";
public string Prefix = "";
public string Channel = "";
public string ChatText = "";
public uint AchievementID = 0;
public ChatFlags _ChatFlags = 0;
public float DisplayTime = 0.0f;
public bool HideChatLog = false;
public bool FakeSenderName = false;
}
public class EmoteMessage : ServerPacket
{
public EmoteMessage() : base(ServerOpcodes.Emote, ConnectionType.Instance) { }
public override void Write()
{
_worldPacket.WritePackedGuid(Guid);
_worldPacket.WriteUInt32(EmoteID);
}
public ObjectGuid Guid;
public int EmoteID;
}
public class CTextEmote : ClientPacket
{
public CTextEmote(WorldPacket packet) : base(packet) { }
public override void Read()
{
Target = _worldPacket.ReadPackedGuid();
EmoteID = _worldPacket.ReadInt32();
SoundIndex = _worldPacket.ReadInt32();
}
public ObjectGuid Target;
public int EmoteID;
public int SoundIndex;
}
public class STextEmote : ServerPacket
{
public STextEmote() : base(ServerOpcodes.TextEmote, ConnectionType.Instance) { }
public override void Write()
{
_worldPacket.WritePackedGuid(SourceGUID);
_worldPacket.WritePackedGuid(SourceAccountGUID);
_worldPacket.WriteUInt32(EmoteID);
_worldPacket.WriteInt32(SoundIndex);
_worldPacket.WritePackedGuid(TargetGUID);
}
public ObjectGuid SourceGUID;
public ObjectGuid SourceAccountGUID;
public ObjectGuid TargetGUID;
public int SoundIndex = -1;
public int EmoteID;
}
public class PrintNotification : ServerPacket
{
public PrintNotification(string notifyText) : base(ServerOpcodes.PrintNotification)
{
NotifyText = notifyText;
}
public override void Write()
{
_worldPacket.WriteBits(NotifyText.Length, 12);
_worldPacket.WriteString(NotifyText);
}
public string NotifyText;
}
public class EmoteClient : ClientPacket
{
public EmoteClient(WorldPacket packet) : base(packet) { }
public override void Read() { }
}
class ChatPlayerNotfound : ServerPacket
{
public ChatPlayerNotfound(string name) : base(ServerOpcodes.ChatPlayerNotfound)
{
Name = name;
}
public override void Write()
{
_worldPacket.WriteBits(Name.Length, 9);
_worldPacket.WriteString(Name);
}
string Name;
}
class ChatPlayerAmbiguous : ServerPacket
{
public ChatPlayerAmbiguous(string name) : base(ServerOpcodes.ChatPlayerAmbiguous)
{
Name = name;
}
public override void Write()
{
_worldPacket.WriteBits(Name.Length, 9);
_worldPacket.WriteString(Name);
}
string Name;
}
class ChatRestricted : ServerPacket
{
public ChatRestricted(ChatRestrictionType reason) : base(ServerOpcodes.ChatRestricted)
{
Reason = reason;
}
public override void Write()
{
_worldPacket.WriteUInt8(Reason);
}
ChatRestrictionType Reason;
}
class ChatServerMessage : ServerPacket
{
public ChatServerMessage() : base(ServerOpcodes.ChatServerMessage) { }
public override void Write()
{
_worldPacket.WriteUInt32(MessageID);
_worldPacket.WriteBits(StringParam.Length, 11);
_worldPacket.WriteString(StringParam);
}
public int MessageID;
public string StringParam = "";
}
class ChatRegisterAddonPrefixes : ClientPacket
{
public ChatRegisterAddonPrefixes(WorldPacket packet) : base(packet) { }
public override void Read()
{
int count = _worldPacket.ReadInt32();
for (int i = 0; i < count && i < 64; ++i)
Prefixes[i] = _worldPacket.ReadString(_worldPacket.ReadBits<uint>(5));
}
public string[] Prefixes = new string[64];
}
class ChatUnregisterAllAddonPrefixes : ClientPacket
{
public ChatUnregisterAllAddonPrefixes(WorldPacket packet) : base(packet) { }
public override void Read() { }
}
class DefenseMessage : ServerPacket
{
public DefenseMessage() : base(ServerOpcodes.DefenseMessage) { }
public override void Write()
{
_worldPacket .WriteUInt32(ZoneID);
_worldPacket.WriteBits(MessageText.Length, 12);
_worldPacket.FlushBits();
_worldPacket.WriteString(MessageText);
}
public uint ZoneID;
public string MessageText = "";
}
class ChatReportIgnored : ClientPacket
{
public ChatReportIgnored(WorldPacket packet) : base(packet) { }
public override void Read()
{
IgnoredGUID = _worldPacket.ReadPackedGuid();
Reason = _worldPacket.ReadUInt8();
}
public ObjectGuid IgnoredGUID;
public byte Reason;
}
}