157 lines
5.7 KiB
C#
Executable File
157 lines
5.7 KiB
C#
Executable File
using LiteDB;
|
|
|
|
namespace ChatTwo.Code;
|
|
|
|
internal class ChatCode
|
|
{
|
|
private const ushort Clear7 = ~(~0 << 7);
|
|
|
|
internal ushort Raw { get; }
|
|
|
|
internal ChatType Type { get; }
|
|
internal ChatSource Source { get; }
|
|
internal ChatSource Target { get; }
|
|
private ChatSource SourceFrom(ushort shift) => (ChatSource) (1 << ((Raw >> shift) & 0xF));
|
|
|
|
internal ChatCode(ushort raw)
|
|
{
|
|
Raw = raw;
|
|
Type = (ChatType) (Raw & Clear7);
|
|
Source = SourceFrom(11);
|
|
Target = SourceFrom(7);
|
|
}
|
|
|
|
[BsonCtor] // Used by LegacyMessageImporter
|
|
public ChatCode(ushort raw, ChatType type, ChatSource source, ChatSource target)
|
|
{
|
|
Raw = raw;
|
|
Type = type;
|
|
Source = source;
|
|
Target = target;
|
|
}
|
|
|
|
internal ChatType Parent() => Type switch
|
|
{
|
|
ChatType.Say => ChatType.Say,
|
|
ChatType.GmSay => ChatType.Say,
|
|
ChatType.Shout => ChatType.Shout,
|
|
ChatType.GmShout => ChatType.Shout,
|
|
ChatType.TellOutgoing => ChatType.TellOutgoing,
|
|
ChatType.TellIncoming => ChatType.TellOutgoing,
|
|
ChatType.GmTell => ChatType.TellOutgoing,
|
|
ChatType.Party => ChatType.Party,
|
|
ChatType.CrossParty => ChatType.Party,
|
|
ChatType.GmParty => ChatType.Party,
|
|
ChatType.Linkshell1 => ChatType.Linkshell1,
|
|
ChatType.GmLinkshell1 => ChatType.Linkshell1,
|
|
ChatType.Linkshell2 => ChatType.Linkshell2,
|
|
ChatType.GmLinkshell2 => ChatType.Linkshell2,
|
|
ChatType.Linkshell3 => ChatType.Linkshell3,
|
|
ChatType.GmLinkshell3 => ChatType.Linkshell3,
|
|
ChatType.Linkshell4 => ChatType.Linkshell4,
|
|
ChatType.GmLinkshell4 => ChatType.Linkshell4,
|
|
ChatType.Linkshell5 => ChatType.Linkshell5,
|
|
ChatType.GmLinkshell5 => ChatType.Linkshell5,
|
|
ChatType.Linkshell6 => ChatType.Linkshell6,
|
|
ChatType.GmLinkshell6 => ChatType.Linkshell6,
|
|
ChatType.Linkshell7 => ChatType.Linkshell7,
|
|
ChatType.GmLinkshell7 => ChatType.Linkshell7,
|
|
ChatType.Linkshell8 => ChatType.Linkshell8,
|
|
ChatType.GmLinkshell8 => ChatType.Linkshell8,
|
|
ChatType.FreeCompany => ChatType.FreeCompany,
|
|
ChatType.GmFreeCompany => ChatType.FreeCompany,
|
|
ChatType.NoviceNetwork => ChatType.NoviceNetwork,
|
|
ChatType.GmNoviceNetwork => ChatType.NoviceNetwork,
|
|
ChatType.CustomEmote => ChatType.CustomEmote,
|
|
ChatType.StandardEmote => ChatType.StandardEmote,
|
|
ChatType.Yell => ChatType.Yell,
|
|
ChatType.GmYell => ChatType.Yell,
|
|
ChatType.GainBuff => ChatType.GainBuff,
|
|
ChatType.LoseBuff => ChatType.GainBuff,
|
|
ChatType.GainDebuff => ChatType.GainDebuff,
|
|
ChatType.LoseDebuff => ChatType.GainDebuff,
|
|
ChatType.System => ChatType.System,
|
|
ChatType.Alarm => ChatType.System,
|
|
ChatType.RetainerSale => ChatType.System,
|
|
ChatType.PeriodicRecruitmentNotification => ChatType.System,
|
|
ChatType.Sign => ChatType.System,
|
|
ChatType.Orchestrion => ChatType.System,
|
|
ChatType.MessageBook => ChatType.System,
|
|
ChatType.NpcDialogue => ChatType.NpcDialogue,
|
|
ChatType.NpcAnnouncement => ChatType.NpcDialogue,
|
|
ChatType.LootRoll => ChatType.LootRoll,
|
|
ChatType.RandomNumber => ChatType.LootRoll,
|
|
ChatType.FreeCompanyAnnouncement => ChatType.FreeCompanyAnnouncement,
|
|
ChatType.FreeCompanyLoginLogout => ChatType.FreeCompanyAnnouncement,
|
|
ChatType.PvpTeamAnnouncement => ChatType.PvpTeamAnnouncement,
|
|
ChatType.PvpTeamLoginLogout => ChatType.PvpTeamAnnouncement,
|
|
_ => Type,
|
|
};
|
|
|
|
internal bool IsBattle()
|
|
{
|
|
switch (Type)
|
|
{
|
|
// Error isn't a battle message, but it can be just as spammy if you
|
|
// use macros with unavailable actions.
|
|
case ChatType.Error:
|
|
case ChatType.Damage:
|
|
case ChatType.Miss:
|
|
case ChatType.Action:
|
|
case ChatType.Item:
|
|
case ChatType.Healing:
|
|
case ChatType.GainBuff:
|
|
case ChatType.LoseBuff:
|
|
case ChatType.GainDebuff:
|
|
case ChatType.LoseDebuff:
|
|
case ChatType.BattleSystem:
|
|
return true;
|
|
default:
|
|
return false;
|
|
}
|
|
}
|
|
|
|
internal bool IsPlayerMessage()
|
|
{
|
|
switch (Type)
|
|
{
|
|
case ChatType.Say:
|
|
case ChatType.Shout:
|
|
case ChatType.TellOutgoing:
|
|
case ChatType.TellIncoming:
|
|
case ChatType.Party:
|
|
case ChatType.CrossParty:
|
|
case ChatType.Linkshell1:
|
|
case ChatType.Linkshell2:
|
|
case ChatType.Linkshell3:
|
|
case ChatType.Linkshell4:
|
|
case ChatType.Linkshell5:
|
|
case ChatType.Linkshell6:
|
|
case ChatType.Linkshell7:
|
|
case ChatType.Linkshell8:
|
|
case ChatType.CrossLinkshell1:
|
|
case ChatType.CrossLinkshell2:
|
|
case ChatType.CrossLinkshell3:
|
|
case ChatType.CrossLinkshell4:
|
|
case ChatType.CrossLinkshell5:
|
|
case ChatType.CrossLinkshell6:
|
|
case ChatType.CrossLinkshell7:
|
|
case ChatType.CrossLinkshell8:
|
|
case ChatType.FreeCompany:
|
|
case ChatType.NoviceNetwork:
|
|
case ChatType.Yell:
|
|
case ChatType.ExtraChatLinkshell1:
|
|
case ChatType.ExtraChatLinkshell2:
|
|
case ChatType.ExtraChatLinkshell3:
|
|
case ChatType.ExtraChatLinkshell4:
|
|
case ChatType.ExtraChatLinkshell5:
|
|
case ChatType.ExtraChatLinkshell6:
|
|
case ChatType.ExtraChatLinkshell7:
|
|
case ChatType.ExtraChatLinkshell8:
|
|
return true;
|
|
default:
|
|
return false;
|
|
}
|
|
}
|
|
}
|