From 33db72b1ad1abe4685ecc646f11f6183c8f919c3 Mon Sep 17 00:00:00 2001 From: tfarley Date: Thu, 19 Jan 2017 20:38:02 -0800 Subject: [PATCH] Initial Commit --- .gitignore | 23 + aclogview.sln | 22 + aclogview/App.config | 6 + aclogview/CM_Admin.cs | 27 + aclogview/CM_Allegiance.cs | 27 + aclogview/CM_Character.cs | 741 +++ aclogview/CM_Combat.cs | 162 + aclogview/CM_Communication.cs | 71 + aclogview/CM_Examine.cs | 229 + aclogview/CM_Fellowship.cs | 27 + aclogview/CM_Game.cs | 27 + aclogview/CM_House.cs | 27 + aclogview/CM_Inventory.cs | 420 ++ aclogview/CM_Item.cs | 118 + aclogview/CM_Login.cs | 126 + aclogview/CM_Magic.cs | 325 + aclogview/CM_Misc.cs | 27 + aclogview/CM_Movement.cs | 918 +++ aclogview/CM_Physics.cs | 727 +++ aclogview/CM_Qualities.cs | 359 ++ aclogview/CM_Social.cs | 309 + aclogview/CM_Trade.cs | 27 + aclogview/CM_Train.cs | 27 + aclogview/CM_Vendor.cs | 27 + aclogview/CM_Writing.cs | 173 + aclogview/Enums/Account.cs | 13 + aclogview/Enums/Allegiance.cs | 59 + aclogview/Enums/Animation.cs | 45 + aclogview/Enums/Appraisal.cs | 231 + aclogview/Enums/Character.cs | 160 + aclogview/Enums/CharacterTitles.cs | 813 +++ aclogview/Enums/Chat.cs | 48 + aclogview/Enums/Chess.cs | 15 + aclogview/Enums/Combat.cs | 113 + aclogview/Enums/Emote.cs | 130 + aclogview/Enums/Enums.cs | 349 ++ aclogview/Enums/House.cs | 24 + aclogview/Enums/Inventory.cs | 113 + aclogview/Enums/Item.cs | 245 + aclogview/Enums/LandDefs.cs | 82 + aclogview/Enums/MaterialType.cs | 88 + aclogview/Enums/Movement.cs | 433 ++ aclogview/Enums/Net.cs | 113 + aclogview/Enums/Physics.cs | 129 + aclogview/Enums/Portals.cs | 27 + aclogview/Enums/Script.cs | 183 + aclogview/Enums/Shop.cs | 17 + aclogview/Enums/Skills.cs | 21 + aclogview/Enums/Sound.cs | 214 + aclogview/Enums/Spells.cs | 6337 ++++++++++++++++++++ aclogview/Enums/StatTypes.cs | 1017 ++++ aclogview/Enums/Trade.cs | 24 + aclogview/Enums/UI.cs | 81 + aclogview/Enums/WeenieError.cs | 523 ++ aclogview/Form1.Designer.cs | 316 + aclogview/Form1.cs | 479 ++ aclogview/Form1.resx | 132 + aclogview/PacketHeaders.cs | 365 ++ aclogview/PacketOpcode.cs | 590 ++ aclogview/Packets.cs | 438 ++ aclogview/Program.cs | 19 + aclogview/Properties/AssemblyInfo.cs | 36 + aclogview/Properties/Resources.Designer.cs | 62 + aclogview/Properties/Resources.resx | 117 + aclogview/Properties/Settings.Designer.cs | 26 + aclogview/Properties/Settings.settings | 7 + aclogview/Proto_UI.cs | 112 + aclogview/aclogview.csproj | 146 + aclogview/pcap.cs | 112 + 69 files changed, 19576 insertions(+) create mode 100644 .gitignore create mode 100644 aclogview.sln create mode 100644 aclogview/App.config create mode 100644 aclogview/CM_Admin.cs create mode 100644 aclogview/CM_Allegiance.cs create mode 100644 aclogview/CM_Character.cs create mode 100644 aclogview/CM_Combat.cs create mode 100644 aclogview/CM_Communication.cs create mode 100644 aclogview/CM_Examine.cs create mode 100644 aclogview/CM_Fellowship.cs create mode 100644 aclogview/CM_Game.cs create mode 100644 aclogview/CM_House.cs create mode 100644 aclogview/CM_Inventory.cs create mode 100644 aclogview/CM_Item.cs create mode 100644 aclogview/CM_Login.cs create mode 100644 aclogview/CM_Magic.cs create mode 100644 aclogview/CM_Misc.cs create mode 100644 aclogview/CM_Movement.cs create mode 100644 aclogview/CM_Physics.cs create mode 100644 aclogview/CM_Qualities.cs create mode 100644 aclogview/CM_Social.cs create mode 100644 aclogview/CM_Trade.cs create mode 100644 aclogview/CM_Train.cs create mode 100644 aclogview/CM_Vendor.cs create mode 100644 aclogview/CM_Writing.cs create mode 100644 aclogview/Enums/Account.cs create mode 100644 aclogview/Enums/Allegiance.cs create mode 100644 aclogview/Enums/Animation.cs create mode 100644 aclogview/Enums/Appraisal.cs create mode 100644 aclogview/Enums/Character.cs create mode 100644 aclogview/Enums/CharacterTitles.cs create mode 100644 aclogview/Enums/Chat.cs create mode 100644 aclogview/Enums/Chess.cs create mode 100644 aclogview/Enums/Combat.cs create mode 100644 aclogview/Enums/Emote.cs create mode 100644 aclogview/Enums/Enums.cs create mode 100644 aclogview/Enums/House.cs create mode 100644 aclogview/Enums/Inventory.cs create mode 100644 aclogview/Enums/Item.cs create mode 100644 aclogview/Enums/LandDefs.cs create mode 100644 aclogview/Enums/MaterialType.cs create mode 100644 aclogview/Enums/Movement.cs create mode 100644 aclogview/Enums/Net.cs create mode 100644 aclogview/Enums/Physics.cs create mode 100644 aclogview/Enums/Portals.cs create mode 100644 aclogview/Enums/Script.cs create mode 100644 aclogview/Enums/Shop.cs create mode 100644 aclogview/Enums/Skills.cs create mode 100644 aclogview/Enums/Sound.cs create mode 100644 aclogview/Enums/Spells.cs create mode 100644 aclogview/Enums/StatTypes.cs create mode 100644 aclogview/Enums/Trade.cs create mode 100644 aclogview/Enums/UI.cs create mode 100644 aclogview/Enums/WeenieError.cs create mode 100644 aclogview/Form1.Designer.cs create mode 100644 aclogview/Form1.cs create mode 100644 aclogview/Form1.resx create mode 100644 aclogview/PacketHeaders.cs create mode 100644 aclogview/PacketOpcode.cs create mode 100644 aclogview/Packets.cs create mode 100644 aclogview/Program.cs create mode 100644 aclogview/Properties/AssemblyInfo.cs create mode 100644 aclogview/Properties/Resources.Designer.cs create mode 100644 aclogview/Properties/Resources.resx create mode 100644 aclogview/Properties/Settings.Designer.cs create mode 100644 aclogview/Properties/Settings.settings create mode 100644 aclogview/Proto_UI.cs create mode 100644 aclogview/aclogview.csproj create mode 100644 aclogview/pcap.cs diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..45d3be1 --- /dev/null +++ b/.gitignore @@ -0,0 +1,23 @@ +# Build directory +[Bb]in/ +[Oo]bj/ + +# *nix +*~ + +# OSX +.DS_Store +.AppleDouble +.LSOverride +.Spotlight-V100 +.Trashes + +# Windows +Thumbs.db +*.aps + +# Visual Studio +.vs/ +*.VC.db +*.VC.opendb +*.suo diff --git a/aclogview.sln b/aclogview.sln new file mode 100644 index 0000000..07990e9 --- /dev/null +++ b/aclogview.sln @@ -0,0 +1,22 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 14 +VisualStudioVersion = 14.0.25420.1 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "aclogview", "aclogview\aclogview.csproj", "{E0F3D649-BD24-4A37-8BD5-4F421263E0F2}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {E0F3D649-BD24-4A37-8BD5-4F421263E0F2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {E0F3D649-BD24-4A37-8BD5-4F421263E0F2}.Debug|Any CPU.Build.0 = Debug|Any CPU + {E0F3D649-BD24-4A37-8BD5-4F421263E0F2}.Release|Any CPU.ActiveCfg = Release|Any CPU + {E0F3D649-BD24-4A37-8BD5-4F421263E0F2}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/aclogview/App.config b/aclogview/App.config new file mode 100644 index 0000000..88fa402 --- /dev/null +++ b/aclogview/App.config @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/aclogview/CM_Admin.cs b/aclogview/CM_Admin.cs new file mode 100644 index 0000000..0d65eda --- /dev/null +++ b/aclogview/CM_Admin.cs @@ -0,0 +1,27 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +public class CM_Admin : MessageProcessor { + + public override bool acceptMessageData(BinaryReader messageDataReader, TreeView outputTreeView) { + bool handled = true; + + PacketOpcode opcode = Util.readOpcode(messageDataReader); + switch (opcode) { + + default: { + handled = false; + break; + } + } + + return handled; + } + + +} diff --git a/aclogview/CM_Allegiance.cs b/aclogview/CM_Allegiance.cs new file mode 100644 index 0000000..e33af42 --- /dev/null +++ b/aclogview/CM_Allegiance.cs @@ -0,0 +1,27 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +public class CM_Allegiance : MessageProcessor { + + public override bool acceptMessageData(BinaryReader messageDataReader, TreeView outputTreeView) { + bool handled = true; + + PacketOpcode opcode = Util.readOpcode(messageDataReader); + switch (opcode) { + + default: { + handled = false; + break; + } + } + + return handled; + } + + +} diff --git a/aclogview/CM_Character.cs b/aclogview/CM_Character.cs new file mode 100644 index 0000000..21db337 --- /dev/null +++ b/aclogview/CM_Character.cs @@ -0,0 +1,741 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +public class CM_Character : MessageProcessor { + + public override bool acceptMessageData(BinaryReader messageDataReader, TreeView outputTreeView) { + bool handled = true; + + PacketOpcode opcode = Util.readOpcode(messageDataReader); + switch (opcode) { + case PacketOpcode.Evt_Character__TeleToPKLArena_ID: + case PacketOpcode.Evt_Character__TeleToPKArena_ID: + case PacketOpcode.Evt_Character__TeleToLifestone_ID: + case PacketOpcode.Evt_Character__LoginCompleteNotification_ID: + case PacketOpcode.Evt_Character__RequestPing_ID: + case PacketOpcode.Evt_Character__ReturnPing_ID: + case PacketOpcode.Evt_Character__ClearPlayerConsentList_ID: + case PacketOpcode.Evt_Character__DisplayPlayerConsentList_ID: + case PacketOpcode.Evt_Character__Suicide_ID: + case PacketOpcode.Evt_Character__TeleToMarketplace_ID: + case PacketOpcode.Evt_Character__EnterPKLite_ID: + case PacketOpcode.Evt_Character__EnterGame_ServerReady_ID: { + EmptyMessage message = new EmptyMessage(opcode); + message.contributeToTreeView(outputTreeView); + break; + } + case PacketOpcode.Evt_Character__PlayerOptionChangedEvent_ID: { + PlayerOptionChangedEvent message = PlayerOptionChangedEvent.read(messageDataReader); + message.contributeToTreeView(outputTreeView); + break; + } + case PacketOpcode.Evt_Character__StartBarber_ID: { + StartBarber message = StartBarber.read(messageDataReader); + message.contributeToTreeView(outputTreeView); + break; + } + case PacketOpcode.Evt_Character__AbuseLogRequest_ID: { + AbuseLogRequest message = AbuseLogRequest.read(messageDataReader); + message.contributeToTreeView(outputTreeView); + break; + } + case PacketOpcode.Evt_Character__AddShortCut_ID: { + AddShortCut message = AddShortCut.read(messageDataReader); + message.contributeToTreeView(outputTreeView); + break; + } + case PacketOpcode.Evt_Character__RemoveShortCut_ID: { + RemoveShortCut message = RemoveShortCut.read(messageDataReader); + message.contributeToTreeView(outputTreeView); + break; + } + case PacketOpcode.Evt_Character__CharacterOptionsEvent_ID: { + CharacterOptionsEvent message = CharacterOptionsEvent.read(messageDataReader); + message.contributeToTreeView(outputTreeView); + break; + } + case PacketOpcode.Evt_Character__QueryAge_ID: { + QueryAge message = QueryAge.read(messageDataReader); + message.contributeToTreeView(outputTreeView); + break; + } + case PacketOpcode.Evt_Character__QueryAgeResponse_ID: { + QueryAgeResponse message = QueryAgeResponse.read(messageDataReader); + message.contributeToTreeView(outputTreeView); + break; + } + case PacketOpcode.Evt_Character__QueryBirth_ID: { + QueryBirth message = QueryBirth.read(messageDataReader); + message.contributeToTreeView(outputTreeView); + break; + } + case PacketOpcode.Evt_Character__AddSpellFavorite_ID: { + AddSpellFavorite message = AddSpellFavorite.read(messageDataReader); + message.contributeToTreeView(outputTreeView); + break; + } + case PacketOpcode.Evt_Character__RemoveSpellFavorite_ID: { + RemoveSpellFavorite message = RemoveSpellFavorite.read(messageDataReader); + message.contributeToTreeView(outputTreeView); + break; + } + case PacketOpcode.Evt_Character__RemoveFromPlayerConsentList_ID: { + RemoveFromPlayerConsentList message = RemoveFromPlayerConsentList.read(messageDataReader); + message.contributeToTreeView(outputTreeView); + break; + } + case PacketOpcode.Evt_Character__AddPlayerPermission_ID: { + AddPlayerPermission message = AddPlayerPermission.read(messageDataReader); + message.contributeToTreeView(outputTreeView); + break; + } + case PacketOpcode.Evt_Character__RemovePlayerPermission_ID: { + RemovePlayerPermission message = RemovePlayerPermission.read(messageDataReader); + message.contributeToTreeView(outputTreeView); + break; + } + case PacketOpcode.Evt_Character__SetDesiredComponentLevel_ID: { + SetDesiredComponentLevel message = SetDesiredComponentLevel.read(messageDataReader); + message.contributeToTreeView(outputTreeView); + break; + } + case PacketOpcode.Evt_Character__ConfirmationRequest_ID: { + ConfirmationRequest message = ConfirmationRequest.read(messageDataReader); + message.contributeToTreeView(outputTreeView); + break; + } + case PacketOpcode.Evt_Character__ConfirmationResponse_ID: { + ConfirmationResponse message = ConfirmationResponse.read(messageDataReader); + message.contributeToTreeView(outputTreeView); + break; + } + case PacketOpcode.Evt_Character__ConfirmationDone_ID: { + ConfirmationDone message = ConfirmationDone.read(messageDataReader); + message.contributeToTreeView(outputTreeView); + break; + } + case PacketOpcode.Evt_Character__SpellbookFilterEvent_ID: { + SpellbookFilterEvent message = SpellbookFilterEvent.read(messageDataReader); + message.contributeToTreeView(outputTreeView); + break; + } + // TODO: Missing Evt_Character__Rename_ID + case PacketOpcode.Evt_Character__FinishBarber_ID: { + FinishBarber message = FinishBarber.read(messageDataReader); + message.contributeToTreeView(outputTreeView); + break; + } + default: { + handled = false; + break; + } + } + + return handled; + } + + public class PlayerOptionChangedEvent : Message { + PlayerOption i_po; + int i_value; + + public static PlayerOptionChangedEvent read(BinaryReader binaryReader) { + PlayerOptionChangedEvent newObj = new PlayerOptionChangedEvent(); + newObj.i_po = (PlayerOption)binaryReader.ReadUInt32(); + // TODO: These is some more logic right here - need to handle it correctly + newObj.i_value = binaryReader.ReadInt32(); + Util.readToAlign(binaryReader); + return newObj; + } + + public override void contributeToTreeView(TreeView treeView) { + TreeNode rootNode = new TreeNode(this.GetType().Name); + rootNode.Expand(); + rootNode.Nodes.Add("i_po = " + i_po); + rootNode.Nodes.Add("i_value = " + i_value); + treeView.Nodes.Add(rootNode); + } + } + + public class ShortCutData { + public int index_; + public uint objectID_; + public SpellID spellID_; + + public static ShortCutData read(BinaryReader binaryReader) { + ShortCutData newObj = new ShortCutData(); + newObj.index_ = binaryReader.ReadInt32(); + newObj.objectID_ = binaryReader.ReadUInt32(); + newObj.spellID_ = (SpellID)binaryReader.ReadUInt32(); + return newObj; + } + + public void contributeToTreeNode(TreeNode node) { + node.Nodes.Add("index_ = " + index_); + node.Nodes.Add("objectID_ = " + objectID_); + node.Nodes.Add("spellID_ = " + spellID_); + } + } + + public class ShortCutManager { + public List shortCuts_ = new List(); + + public static ShortCutManager read(BinaryReader binaryReader) { + uint numShortcuts = binaryReader.ReadUInt32(); + ShortCutManager newObj = new ShortCutManager(); + for (int i = 0; i < numShortcuts; ++i) { + newObj.shortCuts_.Add(ShortCutData.read(binaryReader)); + } + return newObj; + } + + public void contributeToTreeNode(TreeNode node) { + TreeNode shortcutsNode = node.Nodes.Add("shortCuts_ = "); + foreach (ShortCutData shortcut in shortCuts_) { + shortcut.contributeToTreeNode(shortcutsNode); + } + } + } + + public class PlayerModule { + public enum PlayerModulePackHeader { + PM_Packed_None = 0, + PM_Packed_ShortCutManager = (1 << 0), + PM_Packed_SquelchList = (1 << 1), + PM_Packed_MultiSpellLists = (1 << 2), + PM_Packed_DesiredComps = (1 << 3), + PM_Packed_ExtendedMultiSpellLists = (1 << 4), + PM_Packed_SpellbookFilters = (1 << 5), + PM_Packed_2ndCharacterOptions = (1 << 6), + PM_Packed_TimeStampFormat = (1 << 7), + PM_Packed_GenericQualitiesData = (1 << 8), + PM_Packed_GameplayOptions = (1 << 9), + PM_Packed_8_SpellLists = (1 << 10) + } + + public uint header; + public uint options_; + public ShortCutManager shortcuts_; + public PList[] favorite_spells_ = new PList[8]; + public PackableHashTable desired_comps_ = new PackableHashTable(); + public uint spell_filters_; + public uint options2; + public PStringChar m_TimeStampFormat; + + public static PlayerModule read(BinaryReader binaryReader) { + PlayerModule newObj = new PlayerModule(); + newObj.header = binaryReader.ReadUInt32(); + newObj.options_ = binaryReader.ReadUInt32(); + if ((newObj.header & (uint)PlayerModulePackHeader.PM_Packed_ShortCutManager) != 0) { + newObj.shortcuts_ = ShortCutManager.read(binaryReader); + } + // TODO: This message often gets fragmented. Need to combine fragments to prevent the reader from creating an exception from trying to read beyond buffer. + newObj.favorite_spells_[0] = PList.read(binaryReader); + if ((newObj.header & (uint)PlayerModulePackHeader.PM_Packed_MultiSpellLists) != 0) { + for (int i = 1; i < 5; ++i) { + newObj.favorite_spells_[i] = PList.read(binaryReader); + } + } else if ((newObj.header & (uint)PlayerModulePackHeader.PM_Packed_ExtendedMultiSpellLists) != 0) { + for (int i = 1; i < 7; ++i) { + newObj.favorite_spells_[i] = PList.read(binaryReader); + } + } else if ((newObj.header & (uint)PlayerModulePackHeader.PM_Packed_8_SpellLists) != 0) { + for (int i = 1; i < 8; ++i) { + newObj.favorite_spells_[i] = PList.read(binaryReader); + } + } + if ((newObj.header & (uint)PlayerModulePackHeader.PM_Packed_DesiredComps) != 0) { + newObj.desired_comps_ = PackableHashTable.read(binaryReader); + } + if ((newObj.header & (uint)PlayerModulePackHeader.PM_Packed_SpellbookFilters) != 0) { + newObj.spell_filters_ = binaryReader.ReadUInt32(); + } else { + newObj.spell_filters_ = 0x3FFF; + } + if ((newObj.header & (uint)PlayerModulePackHeader.PM_Packed_2ndCharacterOptions) != 0) { + newObj.options2 = binaryReader.ReadUInt32(); + } else { + newObj.options2 = 0x948700; + } + if ((newObj.header & (uint)PlayerModulePackHeader.PM_Packed_TimeStampFormat) != 0) { + newObj.m_TimeStampFormat = PStringChar.read(binaryReader); + } + // TODO: Lots more to read here! + return newObj; + } + + public void contributeToTreeNode(TreeNode node) { + node.Nodes.Add("header = " + header); + node.Nodes.Add("options_ = " + options_); + TreeNode shortcutsNode = node.Nodes.Add("shortcuts_ = "); + if (shortcuts_ != null) { + shortcuts_.contributeToTreeNode(shortcutsNode); + } + TreeNode favoritesNode = node.Nodes.Add("favorite_spells_ = "); + foreach (PList favoritesList in favorite_spells_) { + if (favoritesList != null) { + TreeNode favoritesSubNode = favoritesNode.Nodes.Add("list = "); + favoritesList.contributeToTreeNode(favoritesSubNode); + } + } + // TODO: Lots more to read here! + } + } + + public class CharacterOptionsEvent : Message { + PlayerModule i_pMod; + + public static CharacterOptionsEvent read(BinaryReader binaryReader) { + CharacterOptionsEvent newObj = new CharacterOptionsEvent(); + newObj.i_pMod = PlayerModule.read(binaryReader); + return newObj; + } + + public override void contributeToTreeView(TreeView treeView) { + TreeNode rootNode = new TreeNode(this.GetType().Name); + rootNode.Expand(); + TreeNode playerModuleNode = rootNode.Nodes.Add("i_pMod = "); + i_pMod.contributeToTreeNode(playerModuleNode); + treeView.Nodes.Add(rootNode); + } + } + + public class AddShortCut : Message { + public ShortCutData shortcut; + + public static AddShortCut read(BinaryReader binaryReader) { + AddShortCut newObj = new AddShortCut(); + newObj.shortcut = ShortCutData.read(binaryReader); + return newObj; + } + + public override void contributeToTreeView(TreeView treeView) { + TreeNode rootNode = new TreeNode(this.GetType().Name); + rootNode.Expand(); + TreeNode shortcutNode = rootNode.Nodes.Add("shortcut = "); + shortcut.contributeToTreeNode(shortcutNode); + treeView.Nodes.Add(rootNode); + } + } + + public class AddSpellFavorite : Message { + public SpellID i_spid; + public uint i_index; + public uint i_list; + + public static AddSpellFavorite read(BinaryReader binaryReader) { + AddSpellFavorite newObj = new AddSpellFavorite(); + newObj.i_spid = (SpellID)binaryReader.ReadUInt32(); + newObj.i_index = binaryReader.ReadUInt32(); + newObj.i_list = binaryReader.ReadUInt32(); + return newObj; + } + + public override void contributeToTreeView(TreeView treeView) { + TreeNode rootNode = new TreeNode(this.GetType().Name); + rootNode.Expand(); + rootNode.Nodes.Add("i_spid = " + i_spid); + rootNode.Nodes.Add("i_index = " + i_index); + rootNode.Nodes.Add("i_list = " + i_list); + treeView.Nodes.Add(rootNode); + } + } + + public class ConfirmationResponse : Message { + public uint i_confirmType; + public uint i_context; + public uint i_bAccepted; + + public static ConfirmationResponse read(BinaryReader binaryReader) { + ConfirmationResponse newObj = new ConfirmationResponse(); + newObj.i_confirmType = binaryReader.ReadUInt32(); + newObj.i_context = binaryReader.ReadUInt32(); + newObj.i_bAccepted = binaryReader.ReadUInt32(); + return newObj; + } + + public override void contributeToTreeView(TreeView treeView) { + TreeNode rootNode = new TreeNode(this.GetType().Name); + rootNode.Expand(); + rootNode.Nodes.Add("i_confirmType = " + i_confirmType); + rootNode.Nodes.Add("i_context = " + i_context); + rootNode.Nodes.Add("i_bAccepted = " + i_bAccepted); + treeView.Nodes.Add(rootNode); + } + } + + public class QueryAge : Message { + public uint i_target; + + public static QueryAge read(BinaryReader binaryReader) { + QueryAge newObj = new QueryAge(); + newObj.i_target = binaryReader.ReadUInt32(); + return newObj; + } + + public override void contributeToTreeView(TreeView treeView) { + TreeNode rootNode = new TreeNode(this.GetType().Name); + rootNode.Expand(); + rootNode.Nodes.Add("i_target = " + i_target); + treeView.Nodes.Add(rootNode); + } + } + + public class QueryBirth : Message { + public uint i_target; + + public static QueryBirth read(BinaryReader binaryReader) { + QueryBirth newObj = new QueryBirth(); + newObj.i_target = binaryReader.ReadUInt32(); + return newObj; + } + + public override void contributeToTreeView(TreeView treeView) { + TreeNode rootNode = new TreeNode(this.GetType().Name); + rootNode.Expand(); + rootNode.Nodes.Add("i_target = " + i_target); + treeView.Nodes.Add(rootNode); + } + } + + public class RemoveShortCut : Message { + public uint i_index; + + public static RemoveShortCut read(BinaryReader binaryReader) { + RemoveShortCut newObj = new RemoveShortCut(); + newObj.i_index = binaryReader.ReadUInt32(); + return newObj; + } + + public override void contributeToTreeView(TreeView treeView) { + TreeNode rootNode = new TreeNode(this.GetType().Name); + rootNode.Expand(); + rootNode.Nodes.Add("i_index = " + i_index); + treeView.Nodes.Add(rootNode); + } + } + + public class RemoveSpellFavorite : Message { + public SpellID i_spid; + public uint i_list; + + public static RemoveSpellFavorite read(BinaryReader binaryReader) { + RemoveSpellFavorite newObj = new RemoveSpellFavorite(); + newObj.i_spid = (SpellID)binaryReader.ReadUInt32(); + newObj.i_list = binaryReader.ReadUInt32(); + return newObj; + } + + public override void contributeToTreeView(TreeView treeView) { + TreeNode rootNode = new TreeNode(this.GetType().Name); + rootNode.Expand(); + rootNode.Nodes.Add("i_spid = " + i_spid); + rootNode.Nodes.Add("i_list = " + i_list); + treeView.Nodes.Add(rootNode); + } + } + + public class SpellbookFilterEvent : Message { + public uint i_options; + + public static SpellbookFilterEvent read(BinaryReader binaryReader) { + SpellbookFilterEvent newObj = new SpellbookFilterEvent(); + newObj.i_options = binaryReader.ReadUInt32(); + return newObj; + } + + public override void contributeToTreeView(TreeView treeView) { + TreeNode rootNode = new TreeNode(this.GetType().Name); + rootNode.Expand(); + rootNode.Nodes.Add("i_options = " + i_options); + treeView.Nodes.Add(rootNode); + } + } + + public class FinishBarber : Message { + public uint i_base_palette; + public uint i_head_object; + public uint i_head_texture; + public uint i_default_head_texture; + public uint i_eyes_texture; + public uint i_default_eyes_texture; + public uint i_nose_texture; + public uint i_default_nose_texture; + public uint i_mouth_texture; + public uint i_default_mouth_texture; + public uint i_skin_palette; + public uint i_hair_palette; + public uint i_eyes_palette; + public uint i_setup_id; + public uint i_option1; + public uint i_option2; + + public static FinishBarber read(BinaryReader binaryReader) { + FinishBarber newObj = new FinishBarber(); + newObj.i_base_palette = binaryReader.ReadUInt32(); + newObj.i_head_object = binaryReader.ReadUInt32(); + newObj.i_head_texture = binaryReader.ReadUInt32(); + newObj.i_default_head_texture = binaryReader.ReadUInt32(); + newObj.i_eyes_texture = binaryReader.ReadUInt32(); + newObj.i_default_eyes_texture = binaryReader.ReadUInt32(); + newObj.i_nose_texture = binaryReader.ReadUInt32(); + newObj.i_default_nose_texture = binaryReader.ReadUInt32(); + newObj.i_mouth_texture = binaryReader.ReadUInt32(); + newObj.i_default_mouth_texture = binaryReader.ReadUInt32(); + newObj.i_skin_palette = binaryReader.ReadUInt32(); + newObj.i_hair_palette = binaryReader.ReadUInt32(); + newObj.i_eyes_palette = binaryReader.ReadUInt32(); + newObj.i_setup_id = binaryReader.ReadUInt32(); + newObj.i_option1 = binaryReader.ReadUInt32(); + newObj.i_option2 = binaryReader.ReadUInt32(); + return newObj; + } + + public override void contributeToTreeView(TreeView treeView) { + TreeNode rootNode = new TreeNode(this.GetType().Name); + rootNode.Expand(); + rootNode.Nodes.Add("i_base_palette = " + i_base_palette); + rootNode.Nodes.Add("i_head_object = " + i_head_object); + rootNode.Nodes.Add("i_head_texture = " + i_head_texture); + rootNode.Nodes.Add("i_default_head_texture = " + i_default_head_texture); + rootNode.Nodes.Add("i_eyes_texture = " + i_eyes_texture); + rootNode.Nodes.Add("i_default_eyes_texture = " + i_default_eyes_texture); + rootNode.Nodes.Add("i_nose_texture = " + i_nose_texture); + rootNode.Nodes.Add("i_default_nose_texture = " + i_default_nose_texture); + rootNode.Nodes.Add("i_mouth_texture = " + i_mouth_texture); + rootNode.Nodes.Add("i_default_mouth_texture = " + i_default_mouth_texture); + rootNode.Nodes.Add("i_skin_palette = " + i_skin_palette); + rootNode.Nodes.Add("i_hair_palette = " + i_hair_palette); + rootNode.Nodes.Add("i_eyes_palette = " + i_eyes_palette); + rootNode.Nodes.Add("i_setup_id = " + i_setup_id); + rootNode.Nodes.Add("i_option1 = " + i_option1); + rootNode.Nodes.Add("i_option2 = " + i_option2); + treeView.Nodes.Add(rootNode); + } + } + + public class SetDesiredComponentLevel : Message { + public uint i_wcid; + public uint i_amount; + + public static SetDesiredComponentLevel read(BinaryReader binaryReader) { + SetDesiredComponentLevel newObj = new SetDesiredComponentLevel(); + newObj.i_wcid = binaryReader.ReadUInt32(); + newObj.i_amount = binaryReader.ReadUInt32(); + return newObj; + } + + public override void contributeToTreeView(TreeView treeView) { + TreeNode rootNode = new TreeNode(this.GetType().Name); + rootNode.Expand(); + rootNode.Nodes.Add("i_wcid = " + i_wcid); + rootNode.Nodes.Add("i_amount = " + i_amount); + treeView.Nodes.Add(rootNode); + } + } + + public class AbuseLogRequest : Message { + public PStringChar i_target; + public int i_status; + public PStringChar i_complaint; + + public static AbuseLogRequest read(BinaryReader binaryReader) { + AbuseLogRequest newObj = new AbuseLogRequest(); + newObj.i_target = PStringChar.read(binaryReader); + newObj.i_status = binaryReader.ReadInt32(); + newObj.i_complaint = PStringChar.read(binaryReader); + return newObj; + } + + public override void contributeToTreeView(TreeView treeView) { + TreeNode rootNode = new TreeNode(this.GetType().Name); + rootNode.Expand(); + rootNode.Nodes.Add("i_target = " + i_target); + rootNode.Nodes.Add("i_status = " + i_status); + rootNode.Nodes.Add("i_complaint = " + i_complaint); + treeView.Nodes.Add(rootNode); + } + } + + public class AddPlayerPermission : Message { + public PStringChar i_targetName; + + public static AddPlayerPermission read(BinaryReader binaryReader) { + AddPlayerPermission newObj = new AddPlayerPermission(); + newObj.i_targetName = PStringChar.read(binaryReader); + return newObj; + } + + public override void contributeToTreeView(TreeView treeView) { + TreeNode rootNode = new TreeNode(this.GetType().Name); + rootNode.Expand(); + rootNode.Nodes.Add("i_targetName = " + i_targetName); + treeView.Nodes.Add(rootNode); + } + } + + public class RemoveFromPlayerConsentList : Message { + public PStringChar i_targetName; + + public static RemoveFromPlayerConsentList read(BinaryReader binaryReader) { + RemoveFromPlayerConsentList newObj = new RemoveFromPlayerConsentList(); + newObj.i_targetName = PStringChar.read(binaryReader); + return newObj; + } + + public override void contributeToTreeView(TreeView treeView) { + TreeNode rootNode = new TreeNode(this.GetType().Name); + rootNode.Expand(); + rootNode.Nodes.Add("i_targetName = " + i_targetName); + treeView.Nodes.Add(rootNode); + } + } + + public class RemovePlayerPermission : Message { + public PStringChar i_targetName; + + public static RemovePlayerPermission read(BinaryReader binaryReader) { + RemovePlayerPermission newObj = new RemovePlayerPermission(); + newObj.i_targetName = PStringChar.read(binaryReader); + return newObj; + } + + public override void contributeToTreeView(TreeView treeView) { + TreeNode rootNode = new TreeNode(this.GetType().Name); + rootNode.Expand(); + rootNode.Nodes.Add("i_targetName = " + i_targetName); + treeView.Nodes.Add(rootNode); + } + } + + + + public class QueryAgeResponse : Message { + public PStringChar targetName; + public PStringChar age; + + public static QueryAgeResponse read(BinaryReader binaryReader) { + QueryAgeResponse newObj = new QueryAgeResponse(); + newObj.targetName = PStringChar.read(binaryReader); + newObj.age = PStringChar.read(binaryReader); + return newObj; + } + + public override void contributeToTreeView(TreeView treeView) { + TreeNode rootNode = new TreeNode(this.GetType().Name); + rootNode.Expand(); + rootNode.Nodes.Add("targetName = " + targetName); + rootNode.Nodes.Add("age = " + age); + treeView.Nodes.Add(rootNode); + } + } + + public class ConfirmationDone : Message { + public ConfirmationType confirm; + public uint context; + + public static ConfirmationDone read(BinaryReader binaryReader) { + ConfirmationDone newObj = new ConfirmationDone(); + newObj.confirm = (ConfirmationType)binaryReader.ReadUInt32(); + newObj.context = binaryReader.ReadUInt32(); + return newObj; + } + + public override void contributeToTreeView(TreeView treeView) { + TreeNode rootNode = new TreeNode(this.GetType().Name); + rootNode.Expand(); + rootNode.Nodes.Add("confirm = " + confirm); + rootNode.Nodes.Add("context = " + context); + treeView.Nodes.Add(rootNode); + } + } + + public class StartBarber : Message { + public uint _base_palette; + public uint _head_object; + public uint _head_texture; + public uint _default_head_texture; + public uint _eyes_texture; + public uint _default_eyes_texture; + public uint _nose_texture; + public uint _default_nose_texture; + public uint _mouth_texture; + public uint _default_mouth_texture; + public uint _skin_palette; + public uint _hair_palette; + public uint _eyes_palette; + public uint _setup_id; + public uint option1; + public uint option2; + + public static StartBarber read(BinaryReader binaryReader) { + StartBarber newObj = new StartBarber(); + newObj._base_palette = binaryReader.ReadUInt32(); + newObj._head_object = binaryReader.ReadUInt32(); + newObj._head_texture = binaryReader.ReadUInt32(); + newObj._default_head_texture = binaryReader.ReadUInt32(); + newObj._eyes_texture = binaryReader.ReadUInt32(); + newObj._default_eyes_texture = binaryReader.ReadUInt32(); + newObj._nose_texture = binaryReader.ReadUInt32(); + newObj._default_nose_texture = binaryReader.ReadUInt32(); + newObj._mouth_texture = binaryReader.ReadUInt32(); + newObj._default_mouth_texture = binaryReader.ReadUInt32(); + newObj._skin_palette = binaryReader.ReadUInt32(); + newObj._hair_palette = binaryReader.ReadUInt32(); + newObj._eyes_palette = binaryReader.ReadUInt32(); + newObj._setup_id = binaryReader.ReadUInt32(); + newObj.option1 = binaryReader.ReadUInt32(); + newObj.option2 = binaryReader.ReadUInt32(); + return newObj; + } + + public override void contributeToTreeView(TreeView treeView) { + TreeNode rootNode = new TreeNode(this.GetType().Name); + rootNode.Expand(); + rootNode.Nodes.Add("_base_palette = " + _base_palette); + rootNode.Nodes.Add("_head_object = " + _head_object); + rootNode.Nodes.Add("_head_texture = " + _head_texture); + rootNode.Nodes.Add("_default_head_texture = " + _default_head_texture); + rootNode.Nodes.Add("_eyes_texture = " + _eyes_texture); + rootNode.Nodes.Add("_default_eyes_texture = " + _default_eyes_texture); + rootNode.Nodes.Add("_nose_texture = " + _nose_texture); + rootNode.Nodes.Add("_default_nose_texture = " + _default_nose_texture); + rootNode.Nodes.Add("_mouth_texture = " + _mouth_texture); + rootNode.Nodes.Add("_default_mouth_texture = " + _default_mouth_texture); + rootNode.Nodes.Add("_skin_palette = " + _skin_palette); + rootNode.Nodes.Add("_hair_palette = " + _hair_palette); + rootNode.Nodes.Add("_eyes_palette = " + _eyes_palette); + rootNode.Nodes.Add("_setup_id = " + _setup_id); + rootNode.Nodes.Add("option1 = " + option1); + rootNode.Nodes.Add("option2 = " + option2); + treeView.Nodes.Add(rootNode); + } + } + + public class ConfirmationRequest : Message { + public ConfirmationType confirm; + public uint context; + public PStringChar userData; + + public static ConfirmationRequest read(BinaryReader binaryReader) { + ConfirmationRequest newObj = new ConfirmationRequest(); + newObj.confirm = (ConfirmationType)binaryReader.ReadUInt32(); + newObj.context = binaryReader.ReadUInt32(); + newObj.userData = PStringChar.read(binaryReader); + return newObj; + } + + public override void contributeToTreeView(TreeView treeView) { + TreeNode rootNode = new TreeNode(this.GetType().Name); + rootNode.Expand(); + rootNode.Nodes.Add("confirm = " + confirm); + rootNode.Nodes.Add("context = " + context); + rootNode.Nodes.Add("userData = " + userData); + treeView.Nodes.Add(rootNode); + } + } +} diff --git a/aclogview/CM_Combat.cs b/aclogview/CM_Combat.cs new file mode 100644 index 0000000..8dcd38e --- /dev/null +++ b/aclogview/CM_Combat.cs @@ -0,0 +1,162 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +public class CM_Combat : MessageProcessor { + + public override bool acceptMessageData(BinaryReader messageDataReader, TreeView outputTreeView) { + bool handled = true; + + PacketOpcode opcode = Util.readOpcode(messageDataReader); + switch (opcode) { + case PacketOpcode.Evt_Combat__CancelAttack_ID: + case PacketOpcode.Evt_Combat__CommenceAttack_ID: { + EmptyMessage message = new EmptyMessage(opcode); + message.contributeToTreeView(outputTreeView); + break; + } + // TODO: Evt_Combat__UntargetedMeleeAttack_ID + case PacketOpcode.Evt_Combat__TargetedMeleeAttack_ID: { + TargetedMeleeAttack message = TargetedMeleeAttack.read(messageDataReader); + message.contributeToTreeView(outputTreeView); + break; + } + case PacketOpcode.Evt_Combat__TargetedMissileAttack_ID: { + TargetedMissileAttack message = TargetedMissileAttack.read(messageDataReader); + message.contributeToTreeView(outputTreeView); + break; + } + // TODO: Evt_Combat__UntargetedMissileAttack_ID + case PacketOpcode.Evt_Combat__ChangeCombatMode_ID: { + ChangeCombatMode message = ChangeCombatMode.read(messageDataReader); + message.contributeToTreeView(outputTreeView); + break; + } + case PacketOpcode.Evt_Combat__QueryHealth_ID: { + QueryHealth message = QueryHealth.read(messageDataReader); + message.contributeToTreeView(outputTreeView); + break; + } + case PacketOpcode.Evt_Combat__QueryHealthResponse_ID: { + QueryHealthResponse message = QueryHealthResponse.read(messageDataReader); + message.contributeToTreeView(outputTreeView); + break; + } + default: { + handled = false; + break; + } + } + + return handled; + } + + public class TargetedMeleeAttack : Message { + public uint i_targetID; + public ATTACK_HEIGHT i_ah; + public float i_power_level; + + public static TargetedMeleeAttack read(BinaryReader binaryReader) { + TargetedMeleeAttack newObj = new TargetedMeleeAttack(); + newObj.i_targetID = binaryReader.ReadUInt32(); + newObj.i_ah = (ATTACK_HEIGHT)binaryReader.ReadUInt32(); + newObj.i_power_level = binaryReader.ReadSingle(); + Util.readToAlign(binaryReader); + return newObj; + } + + public override void contributeToTreeView(TreeView treeView) { + TreeNode rootNode = new TreeNode(this.GetType().Name); + rootNode.Expand(); + rootNode.Nodes.Add("i_targetID = " + i_targetID); + rootNode.Nodes.Add("i_ah = " + i_ah); + rootNode.Nodes.Add("i_power_level = " + i_power_level); + treeView.Nodes.Add(rootNode); + } + } + + public class TargetedMissileAttack : Message { + public uint i_targetID; + public ATTACK_HEIGHT i_ah; + public float i_accuracy_level; + + public static TargetedMissileAttack read(BinaryReader binaryReader) { + TargetedMissileAttack newObj = new TargetedMissileAttack(); + newObj.i_targetID = binaryReader.ReadUInt32(); + newObj.i_ah = (ATTACK_HEIGHT)binaryReader.ReadUInt32(); + newObj.i_accuracy_level = binaryReader.ReadSingle(); + Util.readToAlign(binaryReader); + return newObj; + } + + public override void contributeToTreeView(TreeView treeView) { + TreeNode rootNode = new TreeNode(this.GetType().Name); + rootNode.Expand(); + rootNode.Nodes.Add("i_targetID = " + i_targetID); + rootNode.Nodes.Add("i_ah = " + i_ah); + rootNode.Nodes.Add("i_accuracy_level = " + i_accuracy_level); + treeView.Nodes.Add(rootNode); + } + } + + public class ChangeCombatMode : Message { + public COMBAT_MODE i_mode; + + public static ChangeCombatMode read(BinaryReader binaryReader) { + ChangeCombatMode newObj = new ChangeCombatMode(); + newObj.i_mode = (COMBAT_MODE)binaryReader.ReadUInt32(); + Util.readToAlign(binaryReader); + return newObj; + } + + public override void contributeToTreeView(TreeView treeView) { + TreeNode rootNode = new TreeNode(this.GetType().Name); + rootNode.Expand(); + rootNode.Nodes.Add("i_mode = " + i_mode); + treeView.Nodes.Add(rootNode); + } + } + + public class QueryHealth : Message { + public uint i_target; + + public static QueryHealth read(BinaryReader binaryReader) { + QueryHealth newObj = new QueryHealth(); + newObj.i_target = binaryReader.ReadUInt32(); + Util.readToAlign(binaryReader); + return newObj; + } + + public override void contributeToTreeView(TreeView treeView) { + TreeNode rootNode = new TreeNode(this.GetType().Name); + rootNode.Expand(); + rootNode.Nodes.Add("i_target = " + i_target); + treeView.Nodes.Add(rootNode); + } + } + + public class QueryHealthResponse : Message { + public uint target; + public float health; + + public static QueryHealthResponse read(BinaryReader binaryReader) { + QueryHealthResponse newObj = new QueryHealthResponse(); + newObj.target = binaryReader.ReadUInt32(); + newObj.health = binaryReader.ReadSingle(); + Util.readToAlign(binaryReader); + return newObj; + } + + public override void contributeToTreeView(TreeView treeView) { + TreeNode rootNode = new TreeNode(this.GetType().Name); + rootNode.Expand(); + rootNode.Nodes.Add("target = " + target); + rootNode.Nodes.Add("health = " + health); + treeView.Nodes.Add(rootNode); + } + } +} diff --git a/aclogview/CM_Communication.cs b/aclogview/CM_Communication.cs new file mode 100644 index 0000000..bcaf1be --- /dev/null +++ b/aclogview/CM_Communication.cs @@ -0,0 +1,71 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +public class CM_Communication : MessageProcessor { + + public override bool acceptMessageData(BinaryReader messageDataReader, TreeView outputTreeView) { + bool handled = true; + + PacketOpcode opcode = Util.readOpcode(messageDataReader); + switch (opcode) { + case PacketOpcode.Evt_Communication__WeenieError_ID: { + WeenieError message = WeenieError.read(messageDataReader); + message.contributeToTreeView(outputTreeView); + break; + } + case PacketOpcode.Evt_Communication__WeenieErrorWithString_ID: { + WeenieErrorWithString message = WeenieErrorWithString.read(messageDataReader); + message.contributeToTreeView(outputTreeView); + break; + } + default: { + handled = false; + break; + } + } + + return handled; + } + + public class WeenieError : Message { + public WERROR etype; + + public static WeenieError read(BinaryReader binaryReader) { + WeenieError newObj = new WeenieError(); + newObj.etype = (WERROR)binaryReader.ReadUInt32(); + return newObj; + } + + public override void contributeToTreeView(TreeView treeView) { + TreeNode rootNode = new TreeNode(this.GetType().Name); + rootNode.Expand(); + rootNode.Nodes.Add("etype = " + etype); + treeView.Nodes.Add(rootNode); + } + } + + public class WeenieErrorWithString : Message { + public WERROR etype; + public PStringChar user_data; + + public static WeenieErrorWithString read(BinaryReader binaryReader) { + WeenieErrorWithString newObj = new WeenieErrorWithString(); + newObj.etype = (WERROR)binaryReader.ReadUInt32(); + newObj.user_data = PStringChar.read(binaryReader); + return newObj; + } + + public override void contributeToTreeView(TreeView treeView) { + TreeNode rootNode = new TreeNode(this.GetType().Name); + rootNode.Expand(); + rootNode.Nodes.Add("etype = " + etype); + rootNode.Nodes.Add("user_data = " + user_data); + treeView.Nodes.Add(rootNode); + } + } +} diff --git a/aclogview/CM_Examine.cs b/aclogview/CM_Examine.cs new file mode 100644 index 0000000..03a8d5b --- /dev/null +++ b/aclogview/CM_Examine.cs @@ -0,0 +1,229 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +public class CM_Examine : MessageProcessor { + + public override bool acceptMessageData(BinaryReader messageDataReader, TreeView outputTreeView) { + bool handled = true; + + PacketOpcode opcode = Util.readOpcode(messageDataReader); + switch (opcode) { + case PacketOpcode.APPRAISAL_INFO_EVENT: { + SetAppraiseInfo message = SetAppraiseInfo.read(messageDataReader); + message.contributeToTreeView(outputTreeView); + break; + } + default: { + handled = false; + break; + } + } + + return handled; + } + + public class CreatureAppraisalProfile { + public enum CreatureAppraisalProfilePackHeader { + Packed_None = 0, + Packed_Enchantments = (1 << 0), + // NOTE: Skip 2 + Packed_Attributes = (1 << 3) + } + + public enum Enchantment_BFIndex { + BF_STRENGTH = (1 << 0), + BF_ENDURANCE = (1 << 1), + BF_QUICKNESS = (1 << 2), + BF_COORDINATION = (1 << 3), + BF_FOCUS = (1 << 4), + BF_SELF = (1 << 5), + BF_MAX_HEALTH = (1 << 6), + BF_MAX_STAMINA = (1 << 7), + BF_MAX_MANA = (1 << 8), + // NOTE: Skip 7 + BF_STRENGTH_HI = (1 << 16), + BF_ENDURANCE_HI = (1 << 17), + BF_QUICKNESS_HI = (1 << 18), + BF_COORDINATION_HI = (1 << 19), + BF_FOCUS_HI = (1 << 20), + BF_SELF_HI = (1 << 21), + BF_MAX_HEALTH_HI = (1 << 22), + BF_MAX_STAMINA_HI = (1 << 23), + BF_MAX_MANA_HI = (1 << 24) + } + + + } + + public class AppraisalProfile { + public enum AppraisalProfilePackHeader { + Packed_None = 0, + Packed_IntStats = (1 << 0), + Packed_BoolStats = (1 << 1), + Packed_FloatStats = (1 << 2), + Packed_StringStats = (1 << 3), + Packed_SpellList = (1 << 4), + Packed_WeaponProfile = (1 << 5), + Packed_HookProfile = (1 << 6), + Packed_ArmorProfile = (1 << 7), + Packed_CreatureProfile = (1 << 8), + Packed_ArmorEnchant = (1 << 9), + Packed_ResistEnchant = (1 << 10), + Packed_WeaponEnchant = (1 << 11), + Packed_DataIDStats = (1 << 12), + Packed_Int64Stats = (1 << 13), + Packed_ArmorLevels = (1 << 14) + } + + public enum ResistanceEnchantment_BFIndex { + BF_RESIST_SLASH = (1 << 0), + BF_RESIST_PIERCE = (1 << 1), + BF_RESIST_BLUDGEON = (1 << 2), + BF_RESIST_FIRE = (1 << 3), + BF_RESIST_COLD = (1 << 4), + BF_RESIST_ACID = (1 << 5), + BF_RESIST_ELECTRIC = (1 << 6), + BF_RESIST_HEALTH_BOOST = (1 << 7), + BF_RESIST_STAMINA_DRAIN = (1 << 8), + BF_RESIST_STAMINA_BOOST = (1 << 9), + BF_RESIST_MANA_DRAIN = (1 << 10), + BF_RESIST_MANA_BOOST = (1 << 11), + BF_MANA_CON_MOD = (1 << 12), + BF_ELE_DAMAGE_MOD = (1 << 13), + BF_RESIST_NETHER = (1 << 14), + // NOTE: Skip 1 + BF_RESIST_SLASH_HI = (1 << 16), + BF_RESIST_PIERCE_HI = (1 << 17), + BF_RESIST_BLUDGEON_HI = (1 << 18), + BF_RESIST_FIRE_HI = (1 << 19), + BF_RESIST_COLD_HI = (1 << 20), + BF_RESIST_ACID_HI = (1 << 21), + BF_RESIST_ELECTRIC_HI = (1 << 22), + BF_RESIST_HEALTH_BOOST_HI = (1 << 23), + BF_RESIST_STAMINA_DRAIN_HI = (1 << 24), + BF_RESIST_STAMINA_BOOST_HI = (1 << 25), + BF_RESIST_MANA_DRAIN_HI = (1 << 26), + BF_RESIST_MANA_BOOST_HI = (1 << 27), + BF_MANA_CON_MOD_HI = (1 << 28), + BF_ELE_DAMAGE_MOD_HI = (1 << 29), + BF_RESIST_NETHER_HI = (1 << 30) + } + + public enum WeaponEnchantment_BFIndex { + BF_WEAPON_OFFENSE = (1 << 0), + BF_WEAPON_DEFENSE = (1 << 1), + BF_WEAPON_TIME = (1 << 2), + BF_DAMAGE = (1 << 3), + BF_DAMAGE_VARIANCE = (1 << 4), + BF_DAMAGE_MOD = (1 << 5), + // NOTE: Skip 10 + BF_WEAPON_OFFENSE_HI = (1 << 16), + BF_WEAPON_DEFENSE_HI = (1 << 17), + BF_WEAPON_TIME_HI = (1 << 18), + BF_DAMAGE_HI = (1 << 19), + BF_DAMAGE_VARIANCE_HI = (1 << 20), + BF_DAMAGE_MOD_HI = (1 << 21) + } + + public enum ArmorEnchantment_BFIndex { + BF_ARMOR_LEVEL = (1 << 0), + BF_ARMOR_MOD_VS_SLASH = (1 << 1), + BF_ARMOR_MOD_VS_PIERCE = (1 << 2), + BF_ARMOR_MOD_VS_BLUDGEON = (1 << 3), + BF_ARMOR_MOD_VS_COLD = (1 << 4), + BF_ARMOR_MOD_VS_FIRE = (1 << 5), + BF_ARMOR_MOD_VS_ACID = (1 << 6), + BF_ARMOR_MOD_VS_ELECTRIC = (1 << 7), + BF_ARMOR_MOD_VS_NETHER = (1 << 8), + // NOTE: Skip 7 + BF_ARMOR_LEVEL_HI = (1 << 16), + BF_ARMOR_MOD_VS_SLASH_HI = (1 << 17), + BF_ARMOR_MOD_VS_PIERCE_HI = (1 << 18), + BF_ARMOR_MOD_VS_BLUDGEON_HI = (1 << 19), + BF_ARMOR_MOD_VS_COLD_HI = (1 << 20), + BF_ARMOR_MOD_VS_FIRE_HI = (1 << 21), + BF_ARMOR_MOD_VS_ACID_HI = (1 << 22), + BF_ARMOR_MOD_VS_ELECTRIC_HI = (1 << 23), + BF_ARMOR_MOD_VS_NETHER_HI = (1 << 24) + } + + public uint header; + public uint success_flag; + public PackableHashTable _intStatsTable = new PackableHashTable(); + public PackableHashTable _int64StatsTable = new PackableHashTable(); + public PackableHashTable _boolStatsTable = new PackableHashTable(); + public PackableHashTable _floatStatsTable = new PackableHashTable(); + public PackableHashTable _strStatsTable = new PackableHashTable(); + public PackableHashTable _didStatsTable = new PackableHashTable(); + + public static AppraisalProfile read(BinaryReader binaryReader) { + AppraisalProfile newObj = new AppraisalProfile(); + newObj.header = binaryReader.ReadUInt32(); + newObj.success_flag = binaryReader.ReadUInt32(); + if ((newObj.header & (uint)AppraisalProfilePackHeader.Packed_IntStats) != 0) { + newObj._intStatsTable = PackableHashTable.read(binaryReader); + } + if ((newObj.header & (uint)AppraisalProfilePackHeader.Packed_Int64Stats) != 0) { + newObj._int64StatsTable = PackableHashTable.read(binaryReader); + } + if ((newObj.header & (uint)AppraisalProfilePackHeader.Packed_BoolStats) != 0) { + newObj._boolStatsTable = PackableHashTable.read(binaryReader); + } + if ((newObj.header & (uint)AppraisalProfilePackHeader.Packed_FloatStats) != 0) { + newObj._floatStatsTable = PackableHashTable.read(binaryReader); + } + if ((newObj.header & (uint)AppraisalProfilePackHeader.Packed_StringStats) != 0) { + newObj._strStatsTable = PackableHashTable.read(binaryReader); + } + if ((newObj.header & (uint)AppraisalProfilePackHeader.Packed_DataIDStats) != 0) { + newObj._didStatsTable = PackableHashTable.read(binaryReader); + } + // TODO: Lots more to read here + return newObj; + } + + public void contributeToTreeNode(TreeNode node) { + node.Nodes.Add("header = " + header); + node.Nodes.Add("success_flag = " + success_flag); + TreeNode intStatsNode = node.Nodes.Add("_intStatsTable = "); + _intStatsTable.contributeToTreeNode(intStatsNode); + TreeNode int64StatsNode = node.Nodes.Add("_int64StatsTable = "); + _int64StatsTable.contributeToTreeNode(int64StatsNode); + TreeNode boolStatsNode = node.Nodes.Add("_boolStatsTable = "); + _boolStatsTable.contributeToTreeNode(boolStatsNode); + TreeNode floatStatsNode = node.Nodes.Add("_floatStatsTable = "); + _floatStatsTable.contributeToTreeNode(floatStatsNode); + TreeNode strStatsNode = node.Nodes.Add("_strStatsTable = "); + _strStatsTable.contributeToTreeNode(strStatsNode); + TreeNode didStatsNode = node.Nodes.Add("_didStatsTable = "); + _didStatsTable.contributeToTreeNode(didStatsNode); + // TODO: Lots more to read here + } + } + + public class SetAppraiseInfo : Message { + public uint i_objid; + public AppraisalProfile i_prof; + + public static SetAppraiseInfo read(BinaryReader binaryReader) { + SetAppraiseInfo newObj = new SetAppraiseInfo(); + newObj.i_objid = binaryReader.ReadUInt32(); + newObj.i_prof = AppraisalProfile.read(binaryReader); + return newObj; + } + + public override void contributeToTreeView(TreeView treeView) { + TreeNode rootNode = new TreeNode(this.GetType().Name); + rootNode.Expand(); + rootNode.Nodes.Add("i_objid = " + i_objid); + TreeNode profileNode = rootNode.Nodes.Add("i_prof = "); + i_prof.contributeToTreeNode(profileNode); + treeView.Nodes.Add(rootNode); + } + } +} diff --git a/aclogview/CM_Fellowship.cs b/aclogview/CM_Fellowship.cs new file mode 100644 index 0000000..4f533d3 --- /dev/null +++ b/aclogview/CM_Fellowship.cs @@ -0,0 +1,27 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +public class CM_Fellowship : MessageProcessor { + + public override bool acceptMessageData(BinaryReader messageDataReader, TreeView outputTreeView) { + bool handled = true; + + PacketOpcode opcode = Util.readOpcode(messageDataReader); + switch (opcode) { + + default: { + handled = false; + break; + } + } + + return handled; + } + + +} diff --git a/aclogview/CM_Game.cs b/aclogview/CM_Game.cs new file mode 100644 index 0000000..e0dea95 --- /dev/null +++ b/aclogview/CM_Game.cs @@ -0,0 +1,27 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +public class CM_Game : MessageProcessor { + + public override bool acceptMessageData(BinaryReader messageDataReader, TreeView outputTreeView) { + bool handled = true; + + PacketOpcode opcode = Util.readOpcode(messageDataReader); + switch (opcode) { + + default: { + handled = false; + break; + } + } + + return handled; + } + + +} diff --git a/aclogview/CM_House.cs b/aclogview/CM_House.cs new file mode 100644 index 0000000..a297b53 --- /dev/null +++ b/aclogview/CM_House.cs @@ -0,0 +1,27 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +public class CM_House : MessageProcessor { + + public override bool acceptMessageData(BinaryReader messageDataReader, TreeView outputTreeView) { + bool handled = true; + + PacketOpcode opcode = Util.readOpcode(messageDataReader); + switch (opcode) { + + default: { + handled = false; + break; + } + } + + return handled; + } + + +} diff --git a/aclogview/CM_Inventory.cs b/aclogview/CM_Inventory.cs new file mode 100644 index 0000000..ca3b278 --- /dev/null +++ b/aclogview/CM_Inventory.cs @@ -0,0 +1,420 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +public class CM_Inventory : MessageProcessor { + + public override bool acceptMessageData(BinaryReader messageDataReader, TreeView outputTreeView) { + bool handled = true; + + PacketOpcode opcode = Util.readOpcode(messageDataReader); + switch (opcode) { + case PacketOpcode.Evt_Inventory__PutItemInContainer_ID: { + PutItemInContainer message = PutItemInContainer.read(messageDataReader); + message.contributeToTreeView(outputTreeView); + break; + } + case PacketOpcode.Evt_Inventory__GetAndWieldItem_ID: { + GetAndWieldItem message = GetAndWieldItem.read(messageDataReader); + message.contributeToTreeView(outputTreeView); + break; + } + case PacketOpcode.Evt_Inventory__DropItem_ID: { + DropItem message = DropItem.read(messageDataReader); + message.contributeToTreeView(outputTreeView); + break; + } + case PacketOpcode.Evt_Inventory__UseWithTargetEvent_ID: { + UseWithTargetEvent message = UseWithTargetEvent.read(messageDataReader); + message.contributeToTreeView(outputTreeView); + break; + } + case PacketOpcode.Evt_Inventory__UseEvent_ID: { + UseEvent message = UseEvent.read(messageDataReader); + message.contributeToTreeView(outputTreeView); + break; + } + // TODO: Evt_Inventory__CommenceViewingContents_ID + case PacketOpcode.Evt_Inventory__StackableMerge_ID: { + StackableMerge message = StackableMerge.read(messageDataReader); + message.contributeToTreeView(outputTreeView); + break; + } + case PacketOpcode.Evt_Inventory__StackableSplitToContainer_ID: { + StackableSplitToContainer message = StackableSplitToContainer.read(messageDataReader); + message.contributeToTreeView(outputTreeView); + break; + } + case PacketOpcode.Evt_Inventory__StackableSplitTo3D_ID: { + StackableSplitTo3D message = StackableSplitTo3D.read(messageDataReader); + message.contributeToTreeView(outputTreeView); + break; + } + case PacketOpcode.Evt_Inventory__GiveObjectRequest_ID: { + GiveObjectRequest message = GiveObjectRequest.read(messageDataReader); + message.contributeToTreeView(outputTreeView); + break; + } + case PacketOpcode.Evt_Inventory__NoLongerViewingContents_ID: { + NoLongerViewingContents message = NoLongerViewingContents.read(messageDataReader); + message.contributeToTreeView(outputTreeView); + break; + } + case PacketOpcode.Evt_Inventory__StackableSplitToWield_ID: { + StackableSplitToWield message = StackableSplitToWield.read(messageDataReader); + message.contributeToTreeView(outputTreeView); + break; + } + case PacketOpcode.Evt_Inventory__CreateTinkeringTool_ID: { + CreateTinkeringTool message = CreateTinkeringTool.read(messageDataReader); + message.contributeToTreeView(outputTreeView); + break; + } + case PacketOpcode.Evt_Inventory__Recv_SalvageOperationsResultData_ID: { + SalvageOperationsResultData message = SalvageOperationsResultData.read(messageDataReader); + message.contributeToTreeView(outputTreeView); + break; + } + case PacketOpcode.STACKABLE_SET_STACKSIZE_EVENT: { + UpdateStackSize message = UpdateStackSize.read(messageDataReader); + message.contributeToTreeView(outputTreeView); + break; + } + default: { + handled = false; + break; + } + } + + return handled; + } + + public class PutItemInContainer : Message { + public uint i_item; + public uint i_container; + public uint i_loc; + + public static PutItemInContainer read(BinaryReader binaryReader) { + PutItemInContainer newObj = new PutItemInContainer(); + newObj.i_item = binaryReader.ReadUInt32(); + newObj.i_container = binaryReader.ReadUInt32(); + newObj.i_loc = binaryReader.ReadUInt32(); + return newObj; + } + + public override void contributeToTreeView(TreeView treeView) { + TreeNode rootNode = new TreeNode(this.GetType().Name); + rootNode.Expand(); + rootNode.Nodes.Add("i_item = " + i_item); + rootNode.Nodes.Add("i_container = " + i_container); + rootNode.Nodes.Add("i_loc = " + i_loc); + treeView.Nodes.Add(rootNode); + } + } + + public class GetAndWieldItem : Message { + public uint i_item; + public uint i_loc; + + public static GetAndWieldItem read(BinaryReader binaryReader) { + GetAndWieldItem newObj = new GetAndWieldItem(); + newObj.i_item = binaryReader.ReadUInt32(); + newObj.i_loc = binaryReader.ReadUInt32(); + return newObj; + } + + public override void contributeToTreeView(TreeView treeView) { + TreeNode rootNode = new TreeNode(this.GetType().Name); + rootNode.Expand(); + rootNode.Nodes.Add("i_item = " + i_item); + rootNode.Nodes.Add("i_loc = " + i_loc); + treeView.Nodes.Add(rootNode); + } + } + + public class DropItem : Message { + public uint i_item; + + public static DropItem read(BinaryReader binaryReader) { + DropItem newObj = new DropItem(); + newObj.i_item = binaryReader.ReadUInt32(); + return newObj; + } + + public override void contributeToTreeView(TreeView treeView) { + TreeNode rootNode = new TreeNode(this.GetType().Name); + rootNode.Expand(); + rootNode.Nodes.Add("i_item = " + i_item); + treeView.Nodes.Add(rootNode); + } + } + + public class UseWithTargetEvent : Message { + public uint i_object; + public uint i_target; + + public static UseWithTargetEvent read(BinaryReader binaryReader) { + UseWithTargetEvent newObj = new UseWithTargetEvent(); + newObj.i_object = binaryReader.ReadUInt32(); + newObj.i_target = binaryReader.ReadUInt32(); + return newObj; + } + + public override void contributeToTreeView(TreeView treeView) { + TreeNode rootNode = new TreeNode(this.GetType().Name); + rootNode.Expand(); + rootNode.Nodes.Add("i_object = " + i_object); + rootNode.Nodes.Add("i_target = " + i_target); + treeView.Nodes.Add(rootNode); + } + } + + public class UseEvent : Message { + public uint i_object; + + public static UseEvent read(BinaryReader binaryReader) { + UseEvent newObj = new UseEvent(); + newObj.i_object = binaryReader.ReadUInt32(); + return newObj; + } + + public override void contributeToTreeView(TreeView treeView) { + TreeNode rootNode = new TreeNode(this.GetType().Name); + rootNode.Expand(); + rootNode.Nodes.Add("i_object = " + i_object); + treeView.Nodes.Add(rootNode); + } + } + + public class StackableMerge : Message { + public uint i_mergeFromID; + public uint i_mergeToID; + public int i_amount; + + public static StackableMerge read(BinaryReader binaryReader) { + StackableMerge newObj = new StackableMerge(); + newObj.i_mergeFromID = binaryReader.ReadUInt32(); + newObj.i_mergeToID = binaryReader.ReadUInt32(); + newObj.i_amount = binaryReader.ReadInt32(); + return newObj; + } + + public override void contributeToTreeView(TreeView treeView) { + TreeNode rootNode = new TreeNode(this.GetType().Name); + rootNode.Expand(); + rootNode.Nodes.Add("i_mergeFromID = " + i_mergeFromID); + rootNode.Nodes.Add("i_mergeToID = " + i_mergeToID); + rootNode.Nodes.Add("i_amount = " + i_amount); + treeView.Nodes.Add(rootNode); + } + } + + public class StackableSplitToContainer : Message { + public uint i_stackID; + public uint i_containerID; + public int i_place; + public int i_amount; + + public static StackableSplitToContainer read(BinaryReader binaryReader) { + StackableSplitToContainer newObj = new StackableSplitToContainer(); + newObj.i_stackID = binaryReader.ReadUInt32(); + newObj.i_containerID = binaryReader.ReadUInt32(); + newObj.i_place = binaryReader.ReadInt32(); + newObj.i_amount = binaryReader.ReadInt32(); + return newObj; + } + + public override void contributeToTreeView(TreeView treeView) { + TreeNode rootNode = new TreeNode(this.GetType().Name); + rootNode.Expand(); + rootNode.Nodes.Add("i_stackID = " + i_stackID); + rootNode.Nodes.Add("i_containerID = " + i_containerID); + rootNode.Nodes.Add("i_place = " + i_place); + rootNode.Nodes.Add("i_amount = " + i_amount); + treeView.Nodes.Add(rootNode); + } + } + + public class StackableSplitTo3D : Message { + public uint i_stackID; + public int i_amount; + + public static StackableSplitTo3D read(BinaryReader binaryReader) { + StackableSplitTo3D newObj = new StackableSplitTo3D(); + newObj.i_stackID = binaryReader.ReadUInt32(); + newObj.i_amount = binaryReader.ReadInt32(); + return newObj; + } + + public override void contributeToTreeView(TreeView treeView) { + TreeNode rootNode = new TreeNode(this.GetType().Name); + rootNode.Expand(); + rootNode.Nodes.Add("i_stackID = " + i_stackID); + rootNode.Nodes.Add("i_amount = " + i_amount); + treeView.Nodes.Add(rootNode); + } + } + + public class GiveObjectRequest : Message { + public uint i_targetID; + public uint i_objectID; + public uint i_amount; + + public static GiveObjectRequest read(BinaryReader binaryReader) { + GiveObjectRequest newObj = new GiveObjectRequest(); + newObj.i_targetID = binaryReader.ReadUInt32(); + newObj.i_objectID = binaryReader.ReadUInt32(); + newObj.i_amount = binaryReader.ReadUInt32(); + return newObj; + } + + public override void contributeToTreeView(TreeView treeView) { + TreeNode rootNode = new TreeNode(this.GetType().Name); + rootNode.Expand(); + rootNode.Nodes.Add("i_targetID = " + i_targetID); + rootNode.Nodes.Add("i_objectID = " + i_objectID); + rootNode.Nodes.Add("i_amount = " + i_amount); + treeView.Nodes.Add(rootNode); + } + } + + public class NoLongerViewingContents : Message { + public uint i_container; + + public static NoLongerViewingContents read(BinaryReader binaryReader) { + NoLongerViewingContents newObj = new NoLongerViewingContents(); + newObj.i_container = binaryReader.ReadUInt32(); + return newObj; + } + + public override void contributeToTreeView(TreeView treeView) { + TreeNode rootNode = new TreeNode(this.GetType().Name); + rootNode.Expand(); + rootNode.Nodes.Add("i_container = " + i_container); + treeView.Nodes.Add(rootNode); + } + } + + public class StackableSplitToWield : Message { + public uint i_stackID; + public uint i_loc; + public int i_amount; + + public static StackableSplitToWield read(BinaryReader binaryReader) { + StackableSplitToWield newObj = new StackableSplitToWield(); + newObj.i_stackID = binaryReader.ReadUInt32(); + newObj.i_loc = binaryReader.ReadUInt32(); + newObj.i_amount = binaryReader.ReadInt32(); + return newObj; + } + + public override void contributeToTreeView(TreeView treeView) { + TreeNode rootNode = new TreeNode(this.GetType().Name); + rootNode.Expand(); + rootNode.Nodes.Add("i_stackID = " + i_stackID); + rootNode.Nodes.Add("i_loc = " + i_loc); + rootNode.Nodes.Add("i_amount = " + i_amount); + treeView.Nodes.Add(rootNode); + } + } + + public class CreateTinkeringTool : Message { + public uint i_toolID; + public PList i_gems; + + public static CreateTinkeringTool read(BinaryReader binaryReader) { + CreateTinkeringTool newObj = new CreateTinkeringTool(); + newObj.i_toolID = binaryReader.ReadUInt32(); + newObj.i_gems = PList.read(binaryReader); + return newObj; + } + + public override void contributeToTreeView(TreeView treeView) { + TreeNode rootNode = new TreeNode(this.GetType().Name); + rootNode.Expand(); + rootNode.Nodes.Add("i_toolID = " + i_toolID); + TreeNode gemsNode = rootNode.Nodes.Add("i_gems = "); + i_gems.contributeToTreeNode(gemsNode); + treeView.Nodes.Add(rootNode); + } + } + + public class SalvageResult { + public MaterialType m_material; + public double m_workmanship; + public int m_units; + + public static SalvageResult read(BinaryReader binaryReader) { + SalvageResult newObj = new SalvageResult(); + newObj.m_material = (MaterialType)binaryReader.ReadUInt32(); + newObj.m_workmanship = binaryReader.ReadDouble(); + newObj.m_units = binaryReader.ReadInt32(); + return newObj; + } + + public void contributeToTreeNode(TreeNode node) { + node.Nodes.Add("m_material = " + m_material); + node.Nodes.Add("m_workmanship = " + m_workmanship); + node.Nodes.Add("m_units = " + m_units); + } + } + + // TODO: Double-check that this is really supposed to just be a SalvageOperationsResultData + public class SalvageOperationsResultData : Message { + public uint m_skillUsed; + public PList m_notSalvagable; + public PList m_salvageResults; + public int m_augBonus; + + public static SalvageOperationsResultData read(BinaryReader binaryReader) { + SalvageOperationsResultData newObj = new SalvageOperationsResultData(); + newObj.m_skillUsed = binaryReader.ReadUInt32(); + newObj.m_notSalvagable = PList.read(binaryReader); + newObj.m_salvageResults = PList.read(binaryReader); + newObj.m_augBonus = binaryReader.ReadInt32(); + return newObj; + } + + public override void contributeToTreeView(TreeView treeView) { + TreeNode rootNode = new TreeNode(this.GetType().Name); + rootNode.Expand(); + rootNode.Nodes.Add("m_skillUsed = " + m_skillUsed); + TreeNode notSalvageableNode = rootNode.Nodes.Add("m_notSalvagable = "); + m_notSalvagable.contributeToTreeNode(notSalvageableNode); + TreeNode salvageResultsNode = rootNode.Nodes.Add("m_salvageResults = "); + m_salvageResults.contributeToTreeNode(salvageResultsNode); + rootNode.Nodes.Add("m_augBonus = " + m_augBonus); + treeView.Nodes.Add(rootNode); + } + } + + public class UpdateStackSize : Message { + public byte maxNumPages; + public uint item; + public uint amount; + public uint newValue; + + public static UpdateStackSize read(BinaryReader binaryReader) { + UpdateStackSize newObj = new UpdateStackSize(); + newObj.maxNumPages = binaryReader.ReadByte(); + newObj.item = binaryReader.ReadUInt32(); + newObj.amount = binaryReader.ReadUInt32(); + newObj.newValue = binaryReader.ReadUInt32(); + return newObj; + } + + public override void contributeToTreeView(TreeView treeView) { + TreeNode rootNode = new TreeNode(this.GetType().Name); + rootNode.Expand(); + rootNode.Nodes.Add("maxNumPages = " + maxNumPages); + rootNode.Nodes.Add("item = " + item); + rootNode.Nodes.Add("amount = " + amount); + rootNode.Nodes.Add("newValue = " + newValue); + treeView.Nodes.Add(rootNode); + } + } +} diff --git a/aclogview/CM_Item.cs b/aclogview/CM_Item.cs new file mode 100644 index 0000000..bd760e2 --- /dev/null +++ b/aclogview/CM_Item.cs @@ -0,0 +1,118 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +public class CM_Item : MessageProcessor { + + public override bool acceptMessageData(BinaryReader messageDataReader, TreeView outputTreeView) { + bool handled = true; + + PacketOpcode opcode = Util.readOpcode(messageDataReader); + switch (opcode) { + case PacketOpcode.Evt_Item__Appraise_ID: { + Appraise message = Appraise.read(messageDataReader); + message.contributeToTreeView(outputTreeView); + break; + } + case PacketOpcode.Evt_Item__UseDone_ID: { + UseDone message = UseDone.read(messageDataReader); + message.contributeToTreeView(outputTreeView); + break; + } + case PacketOpcode.Evt_Item__QueryItemMana_ID: { + QueryItemMana message = QueryItemMana.read(messageDataReader); + message.contributeToTreeView(outputTreeView); + break; + } + case PacketOpcode.Evt_Item__QueryItemManaResponse_ID: { + QueryItemManaResponse message = QueryItemManaResponse.read(messageDataReader); + message.contributeToTreeView(outputTreeView); + break; + } + default: { + handled = false; + break; + } + } + + return handled; + } + + public class QueryItemMana : Message { + public uint target; + + public static QueryItemMana read(BinaryReader binaryReader) { + QueryItemMana newObj = new QueryItemMana(); + newObj.target = binaryReader.ReadUInt32(); + return newObj; + } + + public override void contributeToTreeView(TreeView treeView) { + TreeNode rootNode = new TreeNode(this.GetType().Name); + rootNode.Expand(); + rootNode.Nodes.Add("target = " + target); + treeView.Nodes.Add(rootNode); + } + } + + public class Appraise : Message { + public uint i_objectID; + + public static Appraise read(BinaryReader binaryReader) { + Appraise newObj = new Appraise(); + newObj.i_objectID = binaryReader.ReadUInt32(); + return newObj; + } + + public override void contributeToTreeView(TreeView treeView) { + TreeNode rootNode = new TreeNode(this.GetType().Name); + rootNode.Expand(); + rootNode.Nodes.Add("i_objectID = " + i_objectID); + treeView.Nodes.Add(rootNode); + } + } + + public class UseDone : Message { + public uint etype; + + public static UseDone read(BinaryReader binaryReader) { + UseDone newObj = new UseDone(); + newObj.etype = binaryReader.ReadUInt32(); + return newObj; + } + + public override void contributeToTreeView(TreeView treeView) { + TreeNode rootNode = new TreeNode(this.GetType().Name); + rootNode.Expand(); + rootNode.Nodes.Add("etype = " + etype); + treeView.Nodes.Add(rootNode); + } + } + + public class QueryItemManaResponse : Message { + public uint target; + public float mana; + public int fSuccess; + + public static QueryItemManaResponse read(BinaryReader binaryReader) { + QueryItemManaResponse newObj = new QueryItemManaResponse(); + newObj.target = binaryReader.ReadUInt32(); + newObj.mana = binaryReader.ReadSingle(); + newObj.fSuccess = binaryReader.ReadInt32(); + return newObj; + } + + public override void contributeToTreeView(TreeView treeView) { + TreeNode rootNode = new TreeNode(this.GetType().Name); + rootNode.Expand(); + rootNode.Nodes.Add("target = " + target); + rootNode.Nodes.Add("mana = " + mana); + rootNode.Nodes.Add("fSuccess = " + fSuccess); + treeView.Nodes.Add(rootNode); + } + } +} diff --git a/aclogview/CM_Login.cs b/aclogview/CM_Login.cs new file mode 100644 index 0000000..915c7ec --- /dev/null +++ b/aclogview/CM_Login.cs @@ -0,0 +1,126 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +public class CM_Login : MessageProcessor { + + public override bool acceptMessageData(BinaryReader messageDataReader, TreeView outputTreeView) { + bool handled = true; + + PacketOpcode opcode = Util.readOpcode(messageDataReader); + switch (opcode) { + case PacketOpcode.Evt_Login__CharacterSet_ID: { + Login__CharacterSet message = Login__CharacterSet.read(messageDataReader); + message.contributeToTreeView(outputTreeView); + break; + } + case PacketOpcode.Evt_Login__WorldInfo_ID: { + WorldInfo message = WorldInfo.read(messageDataReader); + message.contributeToTreeView(outputTreeView); + break; + } + default: { + handled = false; + break; + } + } + + return handled; + } + + public class CharacterIdentity { + public uint gid_; + public PStringChar name_; + public uint secondsGreyedOut_; + + public static CharacterIdentity read(BinaryReader binaryReader) { + CharacterIdentity newObj = new CharacterIdentity(); + newObj.gid_ = binaryReader.ReadUInt32(); + newObj.name_ = PStringChar.read(binaryReader); + newObj.secondsGreyedOut_ = binaryReader.ReadUInt32(); + + return newObj; + } + + public void contributeToTreeNode(TreeNode node) { + node.Nodes.Add("gid_ = " + gid_); + node.Nodes.Add("name_ = " + name_.m_buffer); + node.Nodes.Add("secondsGreyedOut_ = " + secondsGreyedOut_); + } + } + + public class Login__CharacterSet : Message { + public uint status_; + public List set_ = new List(); + public List delSet_ = new List(); + public uint numAllowedCharacters_; + public PStringChar account_; + public uint m_fUseTurbineChat; + public uint m_fHasThroneofDestiny; + + public static Login__CharacterSet read(BinaryReader binaryReader) { + Login__CharacterSet newObj = new Login__CharacterSet(); + newObj.status_ = binaryReader.ReadUInt32(); + uint setNum = binaryReader.ReadUInt32(); + for (uint i = 0; i < setNum; ++i) { + newObj.set_.Add(CharacterIdentity.read(binaryReader)); + } + uint delSetNum = binaryReader.ReadUInt32(); + for (uint i = 0; i < delSetNum; ++i) { + newObj.delSet_.Add(CharacterIdentity.read(binaryReader)); + } + newObj.numAllowedCharacters_ = binaryReader.ReadUInt32(); + newObj.account_ = PStringChar.read(binaryReader); + newObj.m_fUseTurbineChat = binaryReader.ReadUInt32(); + newObj.m_fHasThroneofDestiny = binaryReader.ReadUInt32(); + + return newObj; + } + + public override void contributeToTreeView(TreeView treeView) { + TreeNode rootNode = new TreeNode(this.GetType().Name); + rootNode.Expand(); + rootNode.Nodes.Add("status_ = " + status_); + TreeNode setNode = rootNode.Nodes.Add("set_ = "); + foreach (CharacterIdentity identity in set_) { + identity.contributeToTreeNode(setNode); + } + TreeNode delSetNode = rootNode.Nodes.Add("delSet_ = "); + foreach (CharacterIdentity identity in delSet_) { + identity.contributeToTreeNode(delSetNode); + } + rootNode.Nodes.Add("numAllowedCharacters_ = " + numAllowedCharacters_); + rootNode.Nodes.Add("account_ = " + account_.m_buffer); + rootNode.Nodes.Add("m_fUseTurbineChat = " + m_fUseTurbineChat); + rootNode.Nodes.Add("m_fHasThroneofDestiny = " + m_fHasThroneofDestiny); + treeView.Nodes.Add(rootNode); + } + } + + public class WorldInfo : Message { + public int cConnections; + public int cMaxConnections; + public PStringChar strWorldName; + + public static WorldInfo read(BinaryReader binaryReader) { + WorldInfo newObj = new WorldInfo(); + newObj.cConnections = binaryReader.ReadInt32(); + newObj.cMaxConnections = binaryReader.ReadInt32(); + newObj.strWorldName = PStringChar.read(binaryReader); + return newObj; + } + + public override void contributeToTreeView(TreeView treeView) { + TreeNode rootNode = new TreeNode(this.GetType().Name); + rootNode.Expand(); + rootNode.Nodes.Add("cConnections = " + cConnections); + rootNode.Nodes.Add("cMaxConnections = " + cMaxConnections); + rootNode.Nodes.Add("strWorldName = " + strWorldName.m_buffer); + treeView.Nodes.Add(rootNode); + } + } +} diff --git a/aclogview/CM_Magic.cs b/aclogview/CM_Magic.cs new file mode 100644 index 0000000..69b37a8 --- /dev/null +++ b/aclogview/CM_Magic.cs @@ -0,0 +1,325 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +public class CM_Magic : MessageProcessor { + + public override bool acceptMessageData(BinaryReader messageDataReader, TreeView outputTreeView) { + bool handled = true; + + PacketOpcode opcode = Util.readOpcode(messageDataReader); + switch (opcode) { + case PacketOpcode.Evt_Magic__PurgeEnchantments_ID: + case PacketOpcode.Evt_Magic__PurgeBadEnchantments_ID: { + EmptyMessage message = new EmptyMessage(opcode); + message.contributeToTreeView(outputTreeView); + break; + } + case PacketOpcode.Evt_Magic__CastUntargetedSpell_ID: { + CastUntargetedSpell message = CastUntargetedSpell.read(messageDataReader); + message.contributeToTreeView(outputTreeView); + break; + } + case PacketOpcode.Evt_Magic__CastTargetedSpell_ID: { + CastTargetedSpell message = CastTargetedSpell.read(messageDataReader); + message.contributeToTreeView(outputTreeView); + break; + } + // TODO: Evt_Magic__ResearchSpell_ID + case PacketOpcode.UPDATE_SPELL_EVENT: { + UpdateSpell message = UpdateSpell.read(messageDataReader); + message.contributeToTreeView(outputTreeView); + break; + } + case PacketOpcode.REMOVE_SPELL_EVENT: { + RemoveSpell message = RemoveSpell.read(messageDataReader); + message.contributeToTreeView(outputTreeView); + break; + } + case PacketOpcode.UPDATE_ENCHANTMENT_EVENT: { + UpdateEnchantment message = UpdateEnchantment.read(messageDataReader); + message.contributeToTreeView(outputTreeView); + break; + } + case PacketOpcode.REMOVE_ENCHANTMENT_EVENT: { + RemoveEnchantment message = RemoveEnchantment.read(messageDataReader); + message.contributeToTreeView(outputTreeView); + break; + } + case PacketOpcode.Evt_Magic__UpdateMultipleEnchantments_ID: { + UpdateMultipleEnchantments message = UpdateMultipleEnchantments.read(messageDataReader); + message.contributeToTreeView(outputTreeView); + break; + } + case PacketOpcode.Evt_Magic__RemoveMultipleEnchantments_ID: { + RemoveMultipleEnchantments message = RemoveMultipleEnchantments.read(messageDataReader); + message.contributeToTreeView(outputTreeView); + break; + } + case PacketOpcode.Evt_Magic__DispelEnchantment_ID: { + DispelEnchantment message = DispelEnchantment.read(messageDataReader); + message.contributeToTreeView(outputTreeView); + break; + } + case PacketOpcode.Evt_Magic__DispelMultipleEnchantments_ID: { + DispelMultipleEnchantments message = DispelMultipleEnchantments.read(messageDataReader); + message.contributeToTreeView(outputTreeView); + break; + } + default: { + handled = false; + break; + } + } + + return handled; + } + + public class CastTargetedSpell : Message { + public uint i_target; + public SpellID i_spell_id; + + public static CastTargetedSpell read(BinaryReader binaryReader) { + CastTargetedSpell newObj = new CastTargetedSpell(); + newObj.i_target = binaryReader.ReadUInt32(); + newObj.i_spell_id = (SpellID)binaryReader.ReadUInt32(); + return newObj; + } + + public override void contributeToTreeView(TreeView treeView) { + TreeNode rootNode = new TreeNode(this.GetType().Name); + rootNode.Expand(); + rootNode.Nodes.Add("i_target = " + i_target); + rootNode.Nodes.Add("i_spell_id = " + i_spell_id); + treeView.Nodes.Add(rootNode); + } + } + + public class CastUntargetedSpell : Message { + public SpellID i_spell_id; + + public static CastUntargetedSpell read(BinaryReader binaryReader) { + CastUntargetedSpell newObj = new CastUntargetedSpell(); + newObj.i_spell_id = (SpellID)binaryReader.ReadUInt32(); + return newObj; + } + + public override void contributeToTreeView(TreeView treeView) { + TreeNode rootNode = new TreeNode(this.GetType().Name); + rootNode.Expand(); + rootNode.Nodes.Add("i_spell_id = " + i_spell_id); + treeView.Nodes.Add(rootNode); + } + } + + public class RemoveSpell : Message { + public SpellID i_spell_id; + + public static RemoveSpell read(BinaryReader binaryReader) { + RemoveSpell newObj = new RemoveSpell(); + newObj.i_spell_id = (SpellID)binaryReader.ReadUInt32(); + return newObj; + } + + public override void contributeToTreeView(TreeView treeView) { + TreeNode rootNode = new TreeNode(this.GetType().Name); + rootNode.Expand(); + rootNode.Nodes.Add("i_spell_id = " + i_spell_id); + treeView.Nodes.Add(rootNode); + } + } + + public class UpdateSpell : Message { + public SpellID i_spell_id; + + public static UpdateSpell read(BinaryReader binaryReader) { + UpdateSpell newObj = new UpdateSpell(); + newObj.i_spell_id = (SpellID)binaryReader.ReadUInt32(); + return newObj; + } + + public override void contributeToTreeView(TreeView treeView) { + TreeNode rootNode = new TreeNode(this.GetType().Name); + rootNode.Expand(); + rootNode.Nodes.Add("i_spell_id = " + i_spell_id); + treeView.Nodes.Add(rootNode); + } + } + + public class StatMod { + public uint type; + public uint key; + public float val; + + public static StatMod read(BinaryReader binaryReader) { + StatMod newObj = new StatMod(); + newObj.type = binaryReader.ReadUInt32(); + newObj.key = binaryReader.ReadUInt32(); + newObj.val = binaryReader.ReadSingle(); + return newObj; + } + + public void contributeToTreeNode(TreeNode node) { + node.Nodes.Add("type = " + type); + node.Nodes.Add("key = " + key); + node.Nodes.Add("val = " + val); + } + } + + public class Enchantment { + public uint _id; + public uint _spell_category; + public uint _power_level; + public double _start_time; + public double _duration; + public uint _caster; + public float _degrade_modifier; + public float _degrade_limit; + public double _last_time_degraded; + public StatMod _smod; + public SpellSetID m_SpellSetID; + + public static Enchantment read(BinaryReader binaryReader) { + Enchantment newObj = new Enchantment(); + newObj._id = binaryReader.ReadUInt32(); + newObj._spell_category = binaryReader.ReadUInt32(); + newObj._power_level = binaryReader.ReadUInt32(); + newObj._start_time = binaryReader.ReadDouble(); + newObj._duration = binaryReader.ReadDouble(); + newObj._caster = binaryReader.ReadUInt32(); + newObj._degrade_modifier = binaryReader.ReadSingle(); + newObj._degrade_limit = binaryReader.ReadSingle(); + newObj._last_time_degraded = binaryReader.ReadDouble(); + newObj._smod = StatMod.read(binaryReader); + if ((newObj._spell_category >> 16) >= 1) { + newObj.m_SpellSetID = (SpellSetID)binaryReader.ReadUInt32(); + } + return newObj; + } + + public void contributeToTreeNode(TreeNode node) { + node.Nodes.Add("_id = " + _id); + node.Nodes.Add("_spell_category = " + _spell_category); + node.Nodes.Add("_power_level = " + _power_level); + node.Nodes.Add("_start_time = " + _start_time); + node.Nodes.Add("_duration = " + _duration); + node.Nodes.Add("_caster = " + _caster); + node.Nodes.Add("_degrade_modifier = " + _degrade_modifier); + node.Nodes.Add("_degrade_limit = " + _degrade_limit); + node.Nodes.Add("_last_time_degraded = " + _last_time_degraded); + TreeNode statModNode = node.Nodes.Add("_smod = "); + _smod.contributeToTreeNode(statModNode); + node.Nodes.Add("m_SpellSetID = " + m_SpellSetID); + } + } + + public class DispelEnchantment : Message { + public uint eid; + + public static DispelEnchantment read(BinaryReader binaryReader) { + DispelEnchantment newObj = new DispelEnchantment(); + newObj.eid = binaryReader.ReadUInt32(); + return newObj; + } + + public override void contributeToTreeView(TreeView treeView) { + TreeNode rootNode = new TreeNode(this.GetType().Name); + rootNode.Expand(); + rootNode.Nodes.Add("eid = " + eid); + treeView.Nodes.Add(rootNode); + } + } + + public class RemoveEnchantment : Message { + public uint eid; + + public static RemoveEnchantment read(BinaryReader binaryReader) { + RemoveEnchantment newObj = new RemoveEnchantment(); + newObj.eid = binaryReader.ReadUInt32(); + return newObj; + } + + public override void contributeToTreeView(TreeView treeView) { + TreeNode rootNode = new TreeNode(this.GetType().Name); + rootNode.Expand(); + rootNode.Nodes.Add("eid = " + eid); + treeView.Nodes.Add(rootNode); + } + } + + public class UpdateEnchantment : Message { + public Enchantment enchant; + + public static UpdateEnchantment read(BinaryReader binaryReader) { + UpdateEnchantment newObj = new UpdateEnchantment(); + newObj.enchant = Enchantment.read(binaryReader); + return newObj; + } + + public override void contributeToTreeView(TreeView treeView) { + TreeNode rootNode = new TreeNode(this.GetType().Name); + rootNode.Expand(); + TreeNode enchantmentNode = rootNode.Nodes.Add("enchant = "); + enchant.contributeToTreeNode(enchantmentNode); + treeView.Nodes.Add(rootNode); + } + } + + public class DispelMultipleEnchantments : Message { + public PList list; + + public static DispelMultipleEnchantments read(BinaryReader binaryReader) { + DispelMultipleEnchantments newObj = new DispelMultipleEnchantments(); + newObj.list = PList.read(binaryReader); + return newObj; + } + + public override void contributeToTreeView(TreeView treeView) { + TreeNode rootNode = new TreeNode(this.GetType().Name); + rootNode.Expand(); + TreeNode listNode = rootNode.Nodes.Add("list = "); + list.contributeToTreeNode(listNode); + treeView.Nodes.Add(rootNode); + } + } + + public class RemoveMultipleEnchantments : Message { + public PList list; + + public static RemoveMultipleEnchantments read(BinaryReader binaryReader) { + RemoveMultipleEnchantments newObj = new RemoveMultipleEnchantments(); + newObj.list = PList.read(binaryReader); + return newObj; + } + + public override void contributeToTreeView(TreeView treeView) { + TreeNode rootNode = new TreeNode(this.GetType().Name); + rootNode.Expand(); + TreeNode listNode = rootNode.Nodes.Add("list = "); + list.contributeToTreeNode(listNode); + treeView.Nodes.Add(rootNode); + } + } + + public class UpdateMultipleEnchantments : Message { + public PList list; + + public static UpdateMultipleEnchantments read(BinaryReader binaryReader) { + UpdateMultipleEnchantments newObj = new UpdateMultipleEnchantments(); + newObj.list = PList.read(binaryReader); + return newObj; + } + + public override void contributeToTreeView(TreeView treeView) { + TreeNode rootNode = new TreeNode(this.GetType().Name); + rootNode.Expand(); + TreeNode listNode = rootNode.Nodes.Add("list = "); + list.contributeToTreeNode(listNode); + treeView.Nodes.Add(rootNode); + } + } +} diff --git a/aclogview/CM_Misc.cs b/aclogview/CM_Misc.cs new file mode 100644 index 0000000..25de1f0 --- /dev/null +++ b/aclogview/CM_Misc.cs @@ -0,0 +1,27 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +public class CM_Misc : MessageProcessor { + + public override bool acceptMessageData(BinaryReader messageDataReader, TreeView outputTreeView) { + bool handled = true; + + PacketOpcode opcode = Util.readOpcode(messageDataReader); + switch (opcode) { + + default: { + handled = false; + break; + } + } + + return handled; + } + + +} diff --git a/aclogview/CM_Movement.cs b/aclogview/CM_Movement.cs new file mode 100644 index 0000000..aebf09a --- /dev/null +++ b/aclogview/CM_Movement.cs @@ -0,0 +1,918 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +class CM_Movement : MessageProcessor { + + public override bool acceptMessageData(BinaryReader messageDataReader, TreeView outputTreeView) { + bool handled = true; + + PacketOpcode opcode = Util.readOpcode(messageDataReader); + switch (opcode) { + case PacketOpcode.Evt_Movement__MoveToState_ID: { + MoveToState message = MoveToState.read(messageDataReader); + message.contributeToTreeView(outputTreeView); + break; + } + case PacketOpcode.Evt_Movement__UpdatePosition_ID: { + UpdatePosition message = UpdatePosition.read(messageDataReader); + message.contributeToTreeView(outputTreeView); + break; + } + case PacketOpcode.Evt_Movement__MovementEvent_ID: { + MovementEvent message = MovementEvent.read(messageDataReader); + message.contributeToTreeView(outputTreeView); + break; + } + case PacketOpcode.Evt_Movement__AutonomousPosition_ID: { + AutonomousPosition message = AutonomousPosition.read(messageDataReader); + message.contributeToTreeView(outputTreeView); + break; + } + default: { + handled = false; + break; + } + } + + return handled; + } + + public class MoveToState : Message { + public RawMotionState raw_motion_state; + public Position position; + public ushort instance_timestamp; + public ushort server_control_timestamp; + public ushort teleport_timestamp; + public ushort force_position_ts; + public bool contact; + public bool longjump_mode; + + public static MoveToState read(BinaryReader binaryReader) { + MoveToState newObj = new MoveToState(); + newObj.raw_motion_state = RawMotionState.read(binaryReader); + newObj.position = Position.read(binaryReader); + newObj.instance_timestamp = binaryReader.ReadUInt16(); + newObj.server_control_timestamp = binaryReader.ReadUInt16(); + newObj.teleport_timestamp = binaryReader.ReadUInt16(); + newObj.force_position_ts = binaryReader.ReadUInt16(); + + byte flags = binaryReader.ReadByte(); + + newObj.contact = (flags & (1 << 0)) != 0; + newObj.longjump_mode = (flags & (1 << 1)) != 0; + + Util.readToAlign(binaryReader); + + return newObj; + } + + public override void contributeToTreeView(TreeView treeView) { + TreeNode rootNode = new TreeNode(this.GetType().Name); + rootNode.Expand(); + TreeNode rawMotionStateNode = rootNode.Nodes.Add("raw_motion_state = "); + raw_motion_state.contributeToTreeNode(rawMotionStateNode); + TreeNode posNode = rootNode.Nodes.Add("position = "); + position.contributeToTreeNode(posNode); + rootNode.Nodes.Add("instance_timestamp = " + instance_timestamp); + rootNode.Nodes.Add("server_control_timestamp = " + server_control_timestamp); + rootNode.Nodes.Add("teleport_timestamp = " + teleport_timestamp); + rootNode.Nodes.Add("force_position_ts = " + force_position_ts); + rootNode.Nodes.Add("contact = " + contact); + rootNode.Nodes.Add("longjump_mode = " + longjump_mode); + treeView.Nodes.Add(rootNode); + } + } + + public class UpdatePosition : Message { + public uint object_id; + public uint flags; + public Position position; + public Vector3 velocity = new Vector3(); + public uint placement_id; + public bool has_contact; + public ushort instance_timestamp; + public ushort position_timestamp; + public ushort teleport_timestamp; + public ushort force_position_timestamp; + + public static UpdatePosition read(BinaryReader binaryReader) { + UpdatePosition newObj = new UpdatePosition(); + newObj.object_id = binaryReader.ReadUInt32(); + newObj.flags = binaryReader.ReadUInt32(); + newObj.position = Position.readOrigin(binaryReader); + + if ((newObj.flags & 0x8) == 0) { + newObj.position.frame.qw = binaryReader.ReadSingle(); + } + if ((newObj.flags & 0x10) == 0) { + newObj.position.frame.qx = binaryReader.ReadSingle(); + } + if ((newObj.flags & 0x20) == 0) { + newObj.position.frame.qy = binaryReader.ReadSingle(); + } + if ((newObj.flags & 0x40) == 0) { + newObj.position.frame.qz = binaryReader.ReadSingle(); + } + + newObj.position.frame.cache(); + + if ((newObj.flags & 0x1) != 0) { + newObj.velocity.x = binaryReader.ReadSingle(); + newObj.velocity.y = binaryReader.ReadSingle(); + newObj.velocity.z = binaryReader.ReadSingle(); + } + + if ((newObj.flags & 0x2) != 0) { + newObj.placement_id = binaryReader.ReadUInt32(); + } + + newObj.has_contact = (newObj.flags & 0x4) != 0; + + newObj.instance_timestamp = binaryReader.ReadUInt16(); + newObj.position_timestamp = binaryReader.ReadUInt16(); + newObj.teleport_timestamp = binaryReader.ReadUInt16(); + newObj.force_position_timestamp = binaryReader.ReadUInt16(); + + return newObj; + } + + public override void contributeToTreeView(TreeView treeView) { + TreeNode rootNode = new TreeNode(this.GetType().Name); + rootNode.Expand(); + rootNode.Nodes.Add("object_id = " + object_id); + rootNode.Nodes.Add("flags = " + flags); + TreeNode positionNode = rootNode.Nodes.Add("position = "); + position.contributeToTreeNode(positionNode); + rootNode.Nodes.Add("velocity = " + velocity); + rootNode.Nodes.Add("placement_id = " + placement_id); + rootNode.Nodes.Add("has_contact = " + has_contact); + rootNode.Nodes.Add("instance_timestamp = " + instance_timestamp); + rootNode.Nodes.Add("position_timestamp = " + position_timestamp); + rootNode.Nodes.Add("teleport_timestamp = " + teleport_timestamp); + rootNode.Nodes.Add("force_position_timestamp = " + force_position_timestamp); + treeView.Nodes.Add(rootNode); + } + } + + public class InterpretedMotionState { + public enum PackBitfield { + current_style = (1 << 0), + forward_command = (1 << 1), + forward_speed = (1 << 2), + sidestep_command = (1 << 3), + sidestep_speed = (1 << 4), + turn_command = (1 << 5), + turn_speed = (1 << 6) + } + + public uint bitfield; + public MotionStyle current_style = MotionStyle.Motion_NonCombat; + public MotionStyle forward_command = MotionStyle.Motion_Ready; + public MotionStyle sidestep_command; + public MotionStyle turn_command; + public float forward_speed = 1.0f; + public float sidestep_speed = 1.0f; + public float turn_speed = 1.0f; + + public static InterpretedMotionState read(BinaryReader binaryReader) { + InterpretedMotionState newObj = new InterpretedMotionState(); + newObj.bitfield = binaryReader.ReadUInt32(); + if ((newObj.bitfield & (uint)PackBitfield.current_style) != 0) { + newObj.current_style = (MotionStyle)command_ids[binaryReader.ReadUInt16()]; + } + if ((newObj.bitfield & (uint)PackBitfield.forward_command) != 0) { + newObj.forward_command = (MotionStyle)command_ids[binaryReader.ReadUInt16()]; + } + if ((newObj.bitfield & (uint)PackBitfield.sidestep_command) != 0) { + newObj.sidestep_command = (MotionStyle)command_ids[binaryReader.ReadUInt16()]; + } + if ((newObj.bitfield & (uint)PackBitfield.turn_command) != 0) { + newObj.turn_command = (MotionStyle)command_ids[binaryReader.ReadUInt16()]; + } + if ((newObj.bitfield & (uint)PackBitfield.forward_speed) != 0) { + newObj.forward_speed = binaryReader.ReadSingle(); + } + if ((newObj.bitfield & (uint)PackBitfield.sidestep_speed) != 0) { + newObj.sidestep_speed = binaryReader.ReadSingle(); + } + if ((newObj.bitfield & (uint)PackBitfield.turn_speed) != 0) { + newObj.turn_speed = binaryReader.ReadSingle(); + } + + uint numActions = (newObj.bitfield >> 7) & 0x1F; + for (int i = 0; i < numActions; ++i) { + // TODO: Do actual stuff here! + uint thing1 = command_ids[binaryReader.ReadUInt16()]; + uint thing2 = binaryReader.ReadUInt16(); + uint thing3 = binaryReader.ReadUInt32(); + } + + Util.readToAlign(binaryReader); + + return newObj; + } + + public void contributeToTreeNode(TreeNode node) { + node.Nodes.Add("bitfield = " + bitfield); + node.Nodes.Add("current_style = " + current_style); + node.Nodes.Add("forward_command = " + forward_command); + node.Nodes.Add("sidestep_command = " + sidestep_command); + node.Nodes.Add("turn_command = " + turn_command); + node.Nodes.Add("forward_speed = " + forward_speed); + node.Nodes.Add("sidestep_speed = " + sidestep_speed); + node.Nodes.Add("turn_speed = " + turn_speed); + } + } + + public class MovementParameters { + public uint bitfield; + public float distance_to_object; + public float min_distance; + public float fail_distance; + public float speed; + public float walk_run_threshhold; + public float desired_heading; + + public static MovementParameters read(MovementTypes.Type type, BinaryReader binaryReader) { + MovementParameters newObj = new MovementParameters(); + switch (type) { + case MovementTypes.Type.MoveToObject: + case MovementTypes.Type.MoveToPosition: { + newObj.bitfield = binaryReader.ReadUInt32(); + newObj.distance_to_object = binaryReader.ReadSingle(); + newObj.min_distance = binaryReader.ReadSingle(); + newObj.fail_distance = binaryReader.ReadSingle(); + newObj.speed = binaryReader.ReadSingle(); + newObj.walk_run_threshhold = binaryReader.ReadSingle(); + newObj.desired_heading = binaryReader.ReadSingle(); + break; + } + case MovementTypes.Type.TurnToObject: + case MovementTypes.Type.TurnToHeading: { + newObj.bitfield = binaryReader.ReadUInt32(); + newObj.speed = binaryReader.ReadSingle(); + newObj.desired_heading = binaryReader.ReadSingle(); + break; + } + default: { + break; + } + } + return newObj; + } + + public void contributeToTreeNode(TreeNode node) { + node.Nodes.Add("bitfield = " + bitfield); + node.Nodes.Add("distance_to_object = " + distance_to_object); + node.Nodes.Add("min_distance = " + min_distance); + node.Nodes.Add("fail_distance = " + fail_distance); + node.Nodes.Add("speed = " + speed); + node.Nodes.Add("walk_run_threshhold = " + walk_run_threshhold); + node.Nodes.Add("desired_heading = " + desired_heading); + } + } + + public class MovementEvent : Message { + public uint object_id; + public ushort instance_timestamp; + public ushort server_control_timestamp; + public ushort movement_timestamp; + public byte autonomous; + public MovementTypes.Type movementType__guessedname; + public MovementParameters movementParams__guessedname = new MovementParameters(); + public MotionStyle style; + public InterpretedMotionState motionState__guessedname = new InterpretedMotionState(); + public uint stickToObject; + public uint moveToObject; + public Position moveToPos = new Position(); + public float my_run_rate; + public uint turnToObject; + public float turnToHeading; + + public static MovementEvent read(BinaryReader binaryReader) { + MovementEvent newObj = new MovementEvent(); + newObj.object_id = binaryReader.ReadUInt32(); + newObj.instance_timestamp = binaryReader.ReadUInt16(); + newObj.server_control_timestamp = binaryReader.ReadUInt16(); + newObj.movement_timestamp = binaryReader.ReadUInt16(); + newObj.autonomous = binaryReader.ReadByte(); + + Util.readToAlign(binaryReader); + + newObj.movementType__guessedname = (MovementTypes.Type)binaryReader.ReadUInt16(); + newObj.style = (MotionStyle)command_ids[binaryReader.ReadUInt16()]; + + switch (newObj.movementType__guessedname) { + // TODO: This now needs to mimic the rest of MovementManager::unpack_movement here + case MovementTypes.Type.Invalid: { + newObj.motionState__guessedname = InterpretedMotionState.read(binaryReader); + if (((ushort)newObj.movementType__guessedname & 0x100) != 0) { // TODO: Double check that this is the correct mask here + newObj.stickToObject = binaryReader.ReadUInt32(); + } + break; + } + case MovementTypes.Type.MoveToObject: { + newObj.moveToObject = binaryReader.ReadUInt32(); + newObj.moveToPos = Position.readOrigin(binaryReader); + newObj.movementParams__guessedname = MovementParameters.read(newObj.movementType__guessedname, binaryReader); + newObj.my_run_rate = binaryReader.ReadSingle(); + break; + } + case MovementTypes.Type.MoveToPosition: { + newObj.moveToPos = Position.readOrigin(binaryReader); + newObj.movementParams__guessedname = MovementParameters.read(newObj.movementType__guessedname, binaryReader); + newObj.my_run_rate = binaryReader.ReadSingle(); + break; + } + case MovementTypes.Type.TurnToObject: { + newObj.turnToObject = binaryReader.ReadUInt32(); + newObj.turnToHeading = binaryReader.ReadSingle(); + newObj.movementParams__guessedname = MovementParameters.read(newObj.movementType__guessedname, binaryReader); + break; + } + case MovementTypes.Type.TurnToHeading: { + newObj.movementParams__guessedname = MovementParameters.read(newObj.movementType__guessedname, binaryReader); + break; + } + default: { + break; + } + } + + return newObj; + } + + public override void contributeToTreeView(TreeView treeView) { + TreeNode rootNode = new TreeNode(this.GetType().Name); + rootNode.Expand(); + rootNode.Nodes.Add("object_id = " + object_id); + rootNode.Nodes.Add("instance_timestamp = " + instance_timestamp); + rootNode.Nodes.Add("server_control_timestamp = " + server_control_timestamp); + rootNode.Nodes.Add("movement_timestamp = " + movement_timestamp); + rootNode.Nodes.Add("autonomous = " + autonomous); + rootNode.Nodes.Add("movementType__guessedname = " + movementType__guessedname); + TreeNode moveParamsNode = rootNode.Nodes.Add("movementParams__guessedname = "); + movementParams__guessedname.contributeToTreeNode(moveParamsNode); + rootNode.Nodes.Add("style = " + style); + TreeNode motionStateNode = rootNode.Nodes.Add("motionState__guessedname = "); + motionState__guessedname.contributeToTreeNode(motionStateNode); + rootNode.Nodes.Add("stickToObject = " + stickToObject); + rootNode.Nodes.Add("moveToObject = " + moveToObject); + TreeNode posNode = rootNode.Nodes.Add("moveToPos = "); + moveToPos.contributeToTreeNode(posNode); + rootNode.Nodes.Add("my_run_rate = " + my_run_rate); + rootNode.Nodes.Add("turnToObject = " + turnToObject); + rootNode.Nodes.Add("turnToHeading = " + turnToHeading); + treeView.Nodes.Add(rootNode); + } + } + + public class RawMotionState { + public enum PackBitfield { + current_holdkey = (1 << 0), + current_style = (1 << 1), + forward_command = (1 << 2), + forward_holdkey = (1 << 3), + forward_speed = (1 << 4), + sidestep_command = (1 << 5), + sidestep_holdkey = (1 << 6), + sidestep_speed = (1 << 7), + turn_command = (1 << 8), + turn_holdkey = (1 << 9), + turn_speed = (1 << 10), + } + + public uint bitfield; + public uint current_holdkey; + public MotionStyle current_style = MotionStyle.Motion_NonCombat; + public MotionStyle forward_command = MotionStyle.Motion_Ready; + public uint forward_holdkey; + public float forward_speed = 1.0f; + public MotionStyle sidestep_command; + public uint sidestep_holdkey; + public float sidestep_speed = 1.0f; + public MotionStyle turn_command; + public uint turn_holdkey; + public float turn_speed = 1.0f; + + public static RawMotionState read(BinaryReader binaryReader) { + RawMotionState newObj = new RawMotionState(); + newObj.bitfield = binaryReader.ReadUInt32(); + if ((newObj.bitfield & (uint)PackBitfield.current_holdkey) != 0) { + newObj.current_holdkey = binaryReader.ReadUInt32(); + } + if ((newObj.bitfield & (uint)PackBitfield.current_style) != 0) { + newObj.current_style = (MotionStyle)binaryReader.ReadUInt32(); + } + if ((newObj.bitfield & (uint)PackBitfield.forward_command) != 0) { + newObj.forward_command = (MotionStyle)binaryReader.ReadUInt32(); + } + if ((newObj.bitfield & (uint)PackBitfield.forward_holdkey) != 0) { + newObj.forward_holdkey = binaryReader.ReadUInt32(); + } + if ((newObj.bitfield & (uint)PackBitfield.forward_speed) != 0) { + newObj.forward_speed = binaryReader.ReadSingle(); + } + if ((newObj.bitfield & (uint)PackBitfield.sidestep_command) != 0) { + newObj.sidestep_command = (MotionStyle)binaryReader.ReadUInt32(); + } + if ((newObj.bitfield & (uint)PackBitfield.sidestep_holdkey) != 0) { + newObj.sidestep_holdkey = binaryReader.ReadUInt32(); + } + if ((newObj.bitfield & (uint)PackBitfield.sidestep_speed) != 0) { + newObj.sidestep_speed = binaryReader.ReadSingle(); + } + if ((newObj.bitfield & (uint)PackBitfield.turn_command) != 0) { + newObj.turn_command = (MotionStyle)binaryReader.ReadUInt32(); + } + if ((newObj.bitfield & (uint)PackBitfield.turn_holdkey) != 0) { + newObj.turn_holdkey = binaryReader.ReadUInt32(); + } + if ((newObj.bitfield & (uint)PackBitfield.turn_speed) != 0) { + newObj.turn_speed = binaryReader.ReadSingle(); + } + + uint numActions = (newObj.bitfield >> 11); + for (int i = 0; i < numActions; ++i) { + // TODO: Do actual stuff here! + uint thing1 = command_ids[binaryReader.ReadUInt16()]; + uint thing2 = binaryReader.ReadUInt16(); + uint thing3 = binaryReader.ReadUInt32(); + } + + Util.readToAlign(binaryReader); + + return newObj; + } + + public void contributeToTreeNode(TreeNode node) { + node.Nodes.Add("bitfield = " + bitfield); + node.Nodes.Add("current_holdkey = " + current_holdkey); + node.Nodes.Add("current_style = " + current_style); + node.Nodes.Add("forward_command = " + forward_command); + node.Nodes.Add("forward_holdkey = " + forward_holdkey); + node.Nodes.Add("forward_speed = " + forward_speed); + node.Nodes.Add("sidestep_command = " + sidestep_command); + node.Nodes.Add("sidestep_holdkey = " + sidestep_holdkey); + node.Nodes.Add("sidestep_speed = " + sidestep_speed); + node.Nodes.Add("turn_command = " + turn_command); + node.Nodes.Add("turn_holdkey = " + turn_holdkey); + node.Nodes.Add("turn_speed = " + turn_speed); + } + } + + public class AutonomousPosition : Message { + public Position position; + public ushort instance_timestamp; + public ushort server_control_timestamp; + public ushort teleport_timestamp; + public ushort force_position_timestamp; + public bool contact; + + public static AutonomousPosition read(BinaryReader binaryReader) { + AutonomousPosition newObj = new AutonomousPosition(); + + newObj.position = Position.read(binaryReader); + + newObj.instance_timestamp = binaryReader.ReadUInt16(); + newObj.server_control_timestamp = binaryReader.ReadUInt16(); + newObj.teleport_timestamp = binaryReader.ReadUInt16(); + newObj.force_position_timestamp = binaryReader.ReadUInt16(); + + newObj.contact = binaryReader.ReadByte() != 0; + + Util.readToAlign(binaryReader); + + return newObj; + } + + public override void contributeToTreeView(TreeView treeView) { + TreeNode rootNode = new TreeNode(this.GetType().Name); + rootNode.Expand(); + TreeNode positionNode = rootNode.Nodes.Add("position = "); + position.contributeToTreeNode(positionNode); + rootNode.Nodes.Add("instance_timestamp = " + instance_timestamp); + rootNode.Nodes.Add("server_control_timestamp = " + server_control_timestamp); + rootNode.Nodes.Add("teleport_timestamp = " + teleport_timestamp); + rootNode.Nodes.Add("force_position_timestamp = " + force_position_timestamp); + rootNode.Nodes.Add("contact = " + contact); + treeView.Nodes.Add(rootNode); + } + } + + static uint[] command_ids = { + 2147483648, + 2231369729, + 2231369730, + (uint)MotionStyle.Motion_Ready, + (uint)MotionStyle.Motion_Stop, + (uint)MotionStyle.Motion_WalkForward, + (uint)MotionStyle.Motion_WalkBackwards, + (uint)MotionStyle.Motion_RunForward, + (uint)MotionStyle.Motion_Fallen, + (uint)MotionStyle.Motion_Interpolating, + (uint)MotionStyle.Motion_Hover, + (uint)MotionStyle.Motion_On, + (uint)MotionStyle.Motion_Off, + (uint)MotionStyle.Motion_TurnRight, + (uint)MotionStyle.Motion_TurnLeft, + (uint)MotionStyle.Motion_SideStepRight, + (uint)MotionStyle.Motion_SideStepLeft, + (uint)MotionStyle.Motion_Dead, + (uint)MotionStyle.Motion_Crouch, + (uint)MotionStyle.Motion_Sitting, + (uint)MotionStyle.Motion_Sleeping, + (uint)MotionStyle.Motion_Falling, + (uint)MotionStyle.Motion_Reload, + (uint)MotionStyle.Motion_Unload, + (uint)MotionStyle.Motion_Pickup, + (uint)MotionStyle.Motion_StoreInBackpack, + (uint)MotionStyle.Motion_Eat, + (uint)MotionStyle.Motion_Drink, + (uint)MotionStyle.Motion_Reading, + (uint)MotionStyle.Motion_JumpCharging, + (uint)MotionStyle.Motion_AimLevel, + (uint)MotionStyle.Motion_AimHigh15, + (uint)MotionStyle.Motion_AimHigh30, + (uint)MotionStyle.Motion_AimHigh45, + (uint)MotionStyle.Motion_AimHigh60, + (uint)MotionStyle.Motion_AimHigh75, + (uint)MotionStyle.Motion_AimHigh90, + (uint)MotionStyle.Motion_AimLow15, + (uint)MotionStyle.Motion_AimLow30, + (uint)MotionStyle.Motion_AimLow45, + (uint)MotionStyle.Motion_AimLow60, + (uint)MotionStyle.Motion_AimLow75, + (uint)MotionStyle.Motion_AimLow90, + (uint)MotionStyle.Motion_MagicBlast, + (uint)MotionStyle.Motion_MagicSelfHead, + (uint)MotionStyle.Motion_MagicSelfHeart, + (uint)MotionStyle.Motion_MagicBonus, + (uint)MotionStyle.Motion_MagicClap, + (uint)MotionStyle.Motion_MagicHarm, + (uint)MotionStyle.Motion_MagicHeal, + (uint)MotionStyle.Motion_MagicThrowMissile, + (uint)MotionStyle.Motion_MagicRecoilMissile, + (uint)MotionStyle.Motion_MagicPenalty, + (uint)MotionStyle.Motion_MagicTransfer, + (uint)MotionStyle.Motion_MagicVision, + (uint)MotionStyle.Motion_MagicEnchantItem, + (uint)MotionStyle.Motion_MagicPortal, + (uint)MotionStyle.Motion_MagicPray, + (uint)MotionStyle.Motion_StopTurning, + (uint)MotionStyle.Motion_Jump, + 2147483708, + 2147483709, + 2147483710, + 2147483711, + 2147483712, + 2147483713, + 2147483714, + 2147483715, + 2147483716, + 2147483717, + 2147483718, + 2147483719, + 2147483720, + 2147483721, + (uint)MotionStyle.Motion_Hop, + (uint)MotionStyle.Motion_Jumpup, + (uint)MotionStyle.Motion_Cheer, + (uint)MotionStyle.Motion_ChestBeat, + (uint)MotionStyle.Motion_TippedLeft, + (uint)MotionStyle.Motion_TippedRight, + (uint)MotionStyle.Motion_FallDown, + (uint)MotionStyle.Motion_Twitch1, + (uint)MotionStyle.Motion_Twitch2, + (uint)MotionStyle.Motion_Twitch3, + (uint)MotionStyle.Motion_Twitch4, + (uint)MotionStyle.Motion_StaggerBackward, + (uint)MotionStyle.Motion_StaggerForward, + (uint)MotionStyle.Motion_Sanctuary, + (uint)MotionStyle.Motion_ThrustMed, + (uint)MotionStyle.Motion_ThrustLow, + (uint)MotionStyle.Motion_ThrustHigh, + (uint)MotionStyle.Motion_SlashHigh, + (uint)MotionStyle.Motion_SlashMed, + (uint)MotionStyle.Motion_SlashLow, + (uint)MotionStyle.Motion_BackhandHigh, + (uint)MotionStyle.Motion_BackhandMed, + (uint)MotionStyle.Motion_BackhandLow, + (uint)MotionStyle.Motion_Shoot, + (uint)MotionStyle.Motion_AttackHigh1, + (uint)MotionStyle.Motion_AttackMed1, + (uint)MotionStyle.Motion_AttackLow1, + (uint)MotionStyle.Motion_AttackHigh2, + (uint)MotionStyle.Motion_AttackMed2, + (uint)MotionStyle.Motion_AttackLow2, + (uint)MotionStyle.Motion_AttackHigh3, + (uint)MotionStyle.Motion_AttackMed3, + (uint)MotionStyle.Motion_AttackLow3, + (uint)MotionStyle.Motion_HeadThrow, + (uint)MotionStyle.Motion_FistSlam, + (uint)MotionStyle.Motion_BreatheFlame_, + (uint)MotionStyle.Motion_SpinAttack, + (uint)MotionStyle.Motion_MagicPowerUp01, + (uint)MotionStyle.Motion_MagicPowerUp02, + (uint)MotionStyle.Motion_MagicPowerUp03, + (uint)MotionStyle.Motion_MagicPowerUp04, + (uint)MotionStyle.Motion_MagicPowerUp05, + (uint)MotionStyle.Motion_MagicPowerUp06, + (uint)MotionStyle.Motion_MagicPowerUp07, + (uint)MotionStyle.Motion_MagicPowerUp08, + (uint)MotionStyle.Motion_MagicPowerUp09, + (uint)MotionStyle.Motion_MagicPowerUp10, + (uint)MotionStyle.Motion_ShakeFist, + (uint)MotionStyle.Motion_Beckon, + (uint)MotionStyle.Motion_BeSeeingYou, + (uint)MotionStyle.Motion_BlowKiss, + (uint)MotionStyle.Motion_BowDeep, + (uint)MotionStyle.Motion_ClapHands, + (uint)MotionStyle.Motion_Cry, + (uint)MotionStyle.Motion_Laugh, + (uint)MotionStyle.Motion_MimeEat, + (uint)MotionStyle.Motion_MimeDrink, + (uint)MotionStyle.Motion_Nod, + (uint)MotionStyle.Motion_Point, + (uint)MotionStyle.Motion_ShakeHead, + (uint)MotionStyle.Motion_Shrug, + (uint)MotionStyle.Motion_Wave, + (uint)MotionStyle.Motion_Akimbo, + (uint)MotionStyle.Motion_HeartyLaugh, + (uint)MotionStyle.Motion_Salute, + (uint)MotionStyle.Motion_ScratchHead, + (uint)MotionStyle.Motion_SmackHead, + (uint)MotionStyle.Motion_TapFoot, + (uint)MotionStyle.Motion_WaveHigh, + (uint)MotionStyle.Motion_WaveLow, + (uint)MotionStyle.Motion_YawnStretch, + (uint)MotionStyle.Motion_Cringe, + (uint)MotionStyle.Motion_Kneel, + (uint)MotionStyle.Motion_Plead, + (uint)MotionStyle.Motion_Shiver, + (uint)MotionStyle.Motion_Shoo, + (uint)MotionStyle.Motion_Slouch, + (uint)MotionStyle.Motion_Spit, + (uint)MotionStyle.Motion_Surrender, + (uint)MotionStyle.Motion_Woah, + (uint)MotionStyle.Motion_Winded, + (uint)MotionStyle.Motion_YMCA, + (uint)MotionStyle.Motion_EnterGame, + (uint)MotionStyle.Motion_ExitGame, + (uint)MotionStyle.Motion_OnCreation, + (uint)MotionStyle.Motion_OnDestruction, + (uint)MotionStyle.Motion_EnterPortal, + (uint)MotionStyle.Motion_ExitPortal, + (uint)MotionStyle.Command_Cancel, + (uint)MotionStyle.Command_UseSelected, + (uint)MotionStyle.Command_AutosortSelected, + (uint)MotionStyle.Command_DropSelected, + (uint)MotionStyle.Command_GiveSelected, + (uint)MotionStyle.Command_SplitSelected, + (uint)MotionStyle.Command_ExamineSelected, + (uint)MotionStyle.Command_CreateShortcutToSelected, + (uint)MotionStyle.Command_PreviousCompassItem, + (uint)MotionStyle.Command_NextCompassItem, + (uint)MotionStyle.Command_ClosestCompassItem, + (uint)MotionStyle.Command_PreviousSelection, + (uint)MotionStyle.Command_LastAttacker, + (uint)MotionStyle.Command_PreviousFellow, + (uint)MotionStyle.Command_NextFellow, + (uint)MotionStyle.Command_ToggleCombat, + (uint)MotionStyle.Command_HighAttack, + (uint)MotionStyle.Command_MediumAttack, + (uint)MotionStyle.Command_LowAttack, + (uint)MotionStyle.Command_EnterChat, + (uint)MotionStyle.Command_ToggleChat, + (uint)MotionStyle.Command_SavePosition, + (uint)MotionStyle.Command_OptionsPanel, + (uint)MotionStyle.Command_ResetView, + (uint)MotionStyle.Command_CameraLeftRotate, + (uint)MotionStyle.Command_CameraRightRotate, + (uint)MotionStyle.Command_CameraRaise, + (uint)MotionStyle.Command_CameraLower, + (uint)MotionStyle.Command_CameraCloser, + (uint)MotionStyle.Command_CameraFarther, + (uint)MotionStyle.Command_FloorView, + (uint)MotionStyle.Command_MouseLook, + (uint)MotionStyle.Command_PreviousItem, + (uint)MotionStyle.Command_NextItem, + (uint)MotionStyle.Command_ClosestItem, + (uint)MotionStyle.Command_ShiftView, + (uint)MotionStyle.Command_MapView, + (uint)MotionStyle.Command_AutoRun, + (uint)MotionStyle.Command_DecreasePowerSetting, + (uint)MotionStyle.Command_IncreasePowerSetting, + (uint)MotionStyle.Motion_Pray, + (uint)MotionStyle.Motion_Mock, + (uint)MotionStyle.Motion_Teapot, + (uint)MotionStyle.Motion_SpecialAttack1, + (uint)MotionStyle.Motion_SpecialAttack2, + (uint)MotionStyle.Motion_SpecialAttack3, + (uint)MotionStyle.Motion_MissileAttack1, + (uint)MotionStyle.Motion_MissileAttack2, + (uint)MotionStyle.Motion_MissileAttack3, + (uint)MotionStyle.Motion_CastSpell, + (uint)MotionStyle.Motion_Flatulence, + (uint)MotionStyle.Command_FirstPersonView, + (uint)MotionStyle.Command_AllegiancePanel, + (uint)MotionStyle.Command_FellowshipPanel, + (uint)MotionStyle.Command_SpellbookPanel, + (uint)MotionStyle.Command_SpellComponentsPanel, + (uint)MotionStyle.Command_HousePanel, + (uint)MotionStyle.Command_AttributesPanel, + (uint)MotionStyle.Command_SkillsPanel, + (uint)MotionStyle.Command_MapPanel, + (uint)MotionStyle.Command_InventoryPanel, + (uint)MotionStyle.Motion_Demonet, + (uint)MotionStyle.Motion_UseMagicStaff, + (uint)MotionStyle.Motion_UseMagicWand, + (uint)MotionStyle.Motion_Blink, + (uint)MotionStyle.Motion_Bite, + (uint)MotionStyle.Motion_TwitchSubstate1, + (uint)MotionStyle.Motion_TwitchSubstate2, + (uint)MotionStyle.Motion_TwitchSubstate3, + (uint)MotionStyle.Command_CaptureScreenshotToFile, + 2147483880, + 2147483881, + (uint)MotionStyle.Motion_ShakeFistState, + (uint)MotionStyle.Motion_PrayState, + (uint)MotionStyle.Motion_BowDeepState, + (uint)MotionStyle.Motion_ClapHandsState, + (uint)MotionStyle.Motion_CrossArmsState, + (uint)MotionStyle.Motion_ShiverState, + (uint)MotionStyle.Motion_PointState, + (uint)MotionStyle.Motion_WaveState, + (uint)MotionStyle.Motion_AkimboState, + (uint)MotionStyle.Motion_SaluteState, + (uint)MotionStyle.Motion_ScratchHeadState, + (uint)MotionStyle.Motion_TapFootState, + (uint)MotionStyle.Motion_LeanState, + (uint)MotionStyle.Motion_KneelState, + (uint)MotionStyle.Motion_PleadState, + (uint)MotionStyle.Motion_ATOYOT, + (uint)MotionStyle.Motion_SlouchState, + (uint)MotionStyle.Motion_SurrenderState, + (uint)MotionStyle.Motion_WoahState, + (uint)MotionStyle.Motion_WindedState, + (uint)MotionStyle.Command_AutoCreateShortcuts, + (uint)MotionStyle.Command_AutoRepeatAttacks, + (uint)MotionStyle.Command_AutoTarget, + (uint)MotionStyle.Command_AdvancedCombatInterface, + (uint)MotionStyle.Command_IgnoreAllegianceRequests, + (uint)MotionStyle.Command_IgnoreFellowshipRequests, + (uint)MotionStyle.Command_InvertMouseLook, + (uint)MotionStyle.Command_LetPlayersGiveYouItems, + (uint)MotionStyle.Command_AutoTrackCombatTargets, + (uint)MotionStyle.Command_DisplayTooltips, + (uint)MotionStyle.Command_AttemptToDeceivePlayers, + (uint)MotionStyle.Command_RunAsDefaultMovement, + (uint)MotionStyle.Command_StayInChatModeAfterSend, + (uint)MotionStyle.Command_RightClickToMouseLook, + (uint)MotionStyle.Command_VividTargetIndicator, + (uint)MotionStyle.Command_SelectSelf, + (uint)MotionStyle.Motion_SkillHealSelf, + (uint)MotionStyle.Command_NextMonster, + (uint)MotionStyle.Command_PreviousMonster, + (uint)MotionStyle.Command_ClosestMonster, + (uint)MotionStyle.Command_NextPlayer, + (uint)MotionStyle.Command_PreviousPlayer, + (uint)MotionStyle.Command_ClosestPlayer, + (uint)MotionStyle.Motion_SnowAngelState, + (uint)MotionStyle.Motion_WarmHands, + (uint)MotionStyle.Motion_CurtseyState, + (uint)MotionStyle.Motion_AFKState, + (uint)MotionStyle.Motion_MeditateState, + (uint)MotionStyle.Command_TradePanel, + (uint)MotionStyle.Motion_LogOut, + (uint)MotionStyle.Motion_DoubleSlashLow, + (uint)MotionStyle.Motion_DoubleSlashMed, + (uint)MotionStyle.Motion_DoubleSlashHigh, + (uint)MotionStyle.Motion_TripleSlashLow, + (uint)MotionStyle.Motion_TripleSlashMed, + (uint)MotionStyle.Motion_TripleSlashHigh, + (uint)MotionStyle.Motion_DoubleThrustLow, + (uint)MotionStyle.Motion_DoubleThrustMed, + (uint)MotionStyle.Motion_DoubleThrustHigh, + (uint)MotionStyle.Motion_TripleThrustLow, + (uint)MotionStyle.Motion_TripleThrustMed, + (uint)MotionStyle.Motion_TripleThrustHigh, + (uint)MotionStyle.Motion_MagicPowerUp01Purple, + (uint)MotionStyle.Motion_MagicPowerUp02Purple, + (uint)MotionStyle.Motion_MagicPowerUp03Purple, + (uint)MotionStyle.Motion_MagicPowerUp04Purple, + (uint)MotionStyle.Motion_MagicPowerUp05Purple, + (uint)MotionStyle.Motion_MagicPowerUp06Purple, + (uint)MotionStyle.Motion_MagicPowerUp07Purple, + (uint)MotionStyle.Motion_MagicPowerUp08Purple, + (uint)MotionStyle.Motion_MagicPowerUp09Purple, + (uint)MotionStyle.Motion_MagicPowerUp10Purple, + (uint)MotionStyle.Motion_Helper, + (uint)MotionStyle.Motion_Pickup5, + (uint)MotionStyle.Motion_Pickup10, + (uint)MotionStyle.Motion_Pickup15, + (uint)MotionStyle.Motion_Pickup20, + (uint)MotionStyle.Motion_HouseRecall, + 2147483960, + 2147483961, + (uint)MotionStyle.Motion_SitState, + (uint)MotionStyle.Motion_SitCrossleggedState, + (uint)MotionStyle.Motion_SitBackState, + (uint)MotionStyle.Motion_PointLeftState, + (uint)MotionStyle.Motion_PointRightState, + (uint)MotionStyle.Motion_TalktotheHandState, + (uint)MotionStyle.Motion_PointDownState, + (uint)MotionStyle.Motion_DrudgeDanceState, + (uint)MotionStyle.Motion_PossumState, + (uint)MotionStyle.Motion_ReadState, + (uint)MotionStyle.Motion_ThinkerState, + (uint)MotionStyle.Motion_HaveASeatState, + (uint)MotionStyle.Motion_AtEaseState, + (uint)MotionStyle.Motion_NudgeLeft, + (uint)MotionStyle.Motion_NudgeRight, + (uint)MotionStyle.Motion_PointLeft, + (uint)MotionStyle.Motion_PointRight, + (uint)MotionStyle.Motion_PointDown, + (uint)MotionStyle.Motion_Knock, + (uint)MotionStyle.Motion_ScanHorizon, + (uint)MotionStyle.Motion_DrudgeDance, + (uint)MotionStyle.Motion_HaveASeat, + (uint)MotionStyle.Motion_LifestoneRecall, + (uint)MotionStyle.Command_CharacterOptionsPanel, + (uint)MotionStyle.Command_SoundAndGraphicsPanel, + (uint)MotionStyle.Command_HelpfulSpellsPanel, + (uint)MotionStyle.Command_HarmfulSpellsPanel, + (uint)MotionStyle.Command_CharacterInformationPanel, + (uint)MotionStyle.Command_LinkStatusPanel, + (uint)MotionStyle.Command_VitaePanel, + (uint)MotionStyle.Command_ShareFellowshipXP, + (uint)MotionStyle.Command_ShareFellowshipLoot, + (uint)MotionStyle.Command_AcceptCorpseLooting, + (uint)MotionStyle.Command_IgnoreTradeRequests, + (uint)MotionStyle.Command_DisableWeather, + (uint)MotionStyle.Command_DisableHouseEffect, + (uint)MotionStyle.Command_SideBySideVitals, + (uint)MotionStyle.Command_ShowRadarCoordinates, + (uint)MotionStyle.Command_ShowSpellDurations, + (uint)MotionStyle.Command_MuteOnLosingFocus, + (uint)MotionStyle.Motion_Fishing, + (uint)MotionStyle.Motion_MarketplaceRecall, + (uint)MotionStyle.Motion_EnterPKLite, + (uint)MotionStyle.Command_AllegianceChat, + (uint)MotionStyle.Command_AutomaticallyAcceptFellowshipRequests, + (uint)MotionStyle.Command_Reply, + (uint)MotionStyle.Command_MonarchReply, + (uint)MotionStyle.Command_PatronReply, + (uint)MotionStyle.Command_ToggleCraftingChanceOfSuccessDialog, + (uint)MotionStyle.Command_UseClosestUnopenedCorpse, + (uint)MotionStyle.Command_UseNextUnopenedCorpse, + (uint)MotionStyle.Command_IssueSlashCommand, + (uint)MotionStyle.Motion_AllegianceHometownRecall, + (uint)MotionStyle.Motion_PKArenaRecall, + (uint)MotionStyle.Motion_OffhandSlashHigh, + (uint)MotionStyle.Motion_OffhandSlashMed, + (uint)MotionStyle.Motion_OffhandSlashLow, + (uint)MotionStyle.Motion_OffhandThrustHigh, + (uint)MotionStyle.Motion_OffhandThrustMed, + (uint)MotionStyle.Motion_OffhandThrustLow, + (uint)MotionStyle.Motion_OffhandDoubleSlashLow, + (uint)MotionStyle.Motion_OffhandDoubleSlashMed, + (uint)MotionStyle.Motion_OffhandDoubleSlashHigh, + (uint)MotionStyle.Motion_OffhandTripleSlashLow, + (uint)MotionStyle.Motion_OffhandTripleSlashMed, + (uint)MotionStyle.Motion_OffhandTripleSlashHigh, + (uint)MotionStyle.Motion_OffhandDoubleThrustLow, + (uint)MotionStyle.Motion_OffhandDoubleThrustMed, + (uint)MotionStyle.Motion_OffhandDoubleThrustHigh, + (uint)MotionStyle.Motion_OffhandTripleThrustLow, + (uint)MotionStyle.Motion_OffhandTripleThrustMed, + (uint)MotionStyle.Motion_OffhandTripleThrustHigh, + (uint)MotionStyle.Motion_OffhandKick, + (uint)MotionStyle.Motion_AttackHigh4, + (uint)MotionStyle.Motion_AttackMed4, + (uint)MotionStyle.Motion_AttackLow4, + (uint)MotionStyle.Motion_AttackHigh5, + (uint)MotionStyle.Motion_AttackMed5, + (uint)MotionStyle.Motion_AttackLow5, + (uint)MotionStyle.Motion_AttackHigh6, + (uint)MotionStyle.Motion_AttackMed6, + (uint)MotionStyle.Motion_AttackLow6, + (uint)MotionStyle.Motion_PunchFastHigh, + (uint)MotionStyle.Motion_PunchFastMed, + (uint)MotionStyle.Motion_PunchFastLow, + (uint)MotionStyle.Motion_PunchSlowHigh, + (uint)MotionStyle.Motion_PunchSlowMed, + (uint)MotionStyle.Motion_PunchSlowLow, + (uint)MotionStyle.Motion_OffhandPunchFastHigh, + (uint)MotionStyle.Motion_OffhandPunchFastMed, + (uint)MotionStyle.Motion_OffhandPunchFastLow, + (uint)MotionStyle.Motion_OffhandPunchSlowHigh, + (uint)MotionStyle.Motion_OffhandPunchSlowMed, + (uint)MotionStyle.Motion_OffhandPunchSlowLow + }; +} diff --git a/aclogview/CM_Physics.cs b/aclogview/CM_Physics.cs new file mode 100644 index 0000000..7f5d572 --- /dev/null +++ b/aclogview/CM_Physics.cs @@ -0,0 +1,727 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +public class CM_Physics : MessageProcessor { + + public override bool acceptMessageData(BinaryReader messageDataReader, TreeView outputTreeView) { + bool handled = true; + + PacketOpcode opcode = Util.readOpcode(messageDataReader); + switch (opcode) { + case PacketOpcode.Evt_Physics__CreateObject_ID: { + CreateObject message = CreateObject.read(messageDataReader); + message.contributeToTreeView(outputTreeView); + break; + } + case PacketOpcode.Evt_Physics__CreatePlayer_ID: { + CreatePlayer message = CreatePlayer.read(messageDataReader); + message.contributeToTreeView(outputTreeView); + break; + } + default: { + handled = false; + break; + } + } + + return handled; + } + + public class CreatePlayer : Message { + public uint object_id; + + public static CreatePlayer read(BinaryReader binaryReader) { + CreatePlayer newObj = new CreatePlayer(); + newObj.object_id = binaryReader.ReadUInt32(); + return newObj; + } + + public override void contributeToTreeView(TreeView treeView) { + TreeNode rootNode = new TreeNode(this.GetType().Name); + rootNode.Expand(); + rootNode.Nodes.Add("object_id = " + object_id); + treeView.Nodes.Add(rootNode); + } + } + + public class Subpalette { + public uint subID; + public uint offset; + public uint numcolors; + + public static Subpalette read(BinaryReader binaryReader) { + Subpalette newObj = new Subpalette(); + newObj.subID = Util.readDataIDOfKnownType(0x4000000, binaryReader); + newObj.offset = 8u * binaryReader.ReadByte(); + newObj.numcolors = binaryReader.ReadByte(); + if (newObj.numcolors == 0) { + newObj.numcolors = 256; + } + newObj.numcolors *= 8; + return newObj; + } + + public void contributeToTreeNode(TreeNode node) { + node.Nodes.Add("subID = " + subID); + node.Nodes.Add("offset = " + offset); + node.Nodes.Add("numcolors = " + numcolors); + } + } + + public class TextureMapChange { + public byte part_index; + public uint old_tex_id; + public uint new_tex_id; + + public static TextureMapChange read(BinaryReader binaryReader) { + TextureMapChange newObj = new TextureMapChange(); + newObj.part_index = binaryReader.ReadByte(); + newObj.old_tex_id = Util.readDataIDOfKnownType(0x5000000, binaryReader); + newObj.new_tex_id = Util.readDataIDOfKnownType(0x5000000, binaryReader); + return newObj; + } + + public void contributeToTreeNode(TreeNode node) { + node.Nodes.Add("part_index = " + part_index); + node.Nodes.Add("old_tex_id = " + old_tex_id); + node.Nodes.Add("new_tex_id = " + new_tex_id); + } + } + + public class AnimPartChange { + public byte part_index; + public uint part_id; + + public static AnimPartChange read(BinaryReader binaryReader) { + AnimPartChange newObj = new AnimPartChange(); + newObj.part_index = binaryReader.ReadByte(); + newObj.part_id = Util.readDataIDOfKnownType(0x1000000, binaryReader); + return newObj; + } + + public void contributeToTreeNode(TreeNode node) { + node.Nodes.Add("part_index = " + part_index); + node.Nodes.Add("part_id = " + part_id); + } + } + + public class ObjDesc { + public uint paletteID; + public List subpalettes = new List(); // NOTE: This should be sorted on insertion or something, see ObjDesc::AddSubpalette + public List tmChanges = new List(); + public List apChanges = new List(); + + public static ObjDesc read(BinaryReader binaryReader) { + ObjDesc newObj = new ObjDesc(); + binaryReader.ReadByte(); // Unk, should always be == 17 + + byte numPalettes = binaryReader.ReadByte(); + byte numTMCs = binaryReader.ReadByte(); + byte numAPCs = binaryReader.ReadByte(); + + if (numPalettes > 0) { + newObj.paletteID = Util.readDataIDOfKnownType(0x4000000, binaryReader); + for (int i = 0; i < numPalettes; ++i) { + newObj.subpalettes.Add(Subpalette.read(binaryReader)); + } + } + + if (numTMCs > 0) { + for (int i = 0; i < numTMCs; ++i) { + newObj.tmChanges.Add(TextureMapChange.read(binaryReader)); + } + } + + if (numAPCs > 0) { + for (int i = 0; i < numAPCs; ++i) { + newObj.apChanges.Add(AnimPartChange.read(binaryReader)); + } + } + + Util.readToAlign(binaryReader); + + return newObj; + } + + public void contributeToTreeNode(TreeNode node) { + TreeNode paletteNode = node.Nodes.Add("subpalettes = "); + foreach (Subpalette subpalette in subpalettes) { + subpalette.contributeToTreeNode(paletteNode); + } + TreeNode textureNode = node.Nodes.Add("tmChanges = "); + foreach (TextureMapChange tmChange in tmChanges) { + tmChange.contributeToTreeNode(textureNode); + } + TreeNode animpartNode = node.Nodes.Add("apChanges = "); + foreach (AnimPartChange apChange in apChanges) { + apChange.contributeToTreeNode(animpartNode); + } + } + } + + public class ChildInfo { // Not actually a class in client, but is here for convenience + public uint id; + public uint location_id; + + public static ChildInfo read(BinaryReader binaryReader) { + ChildInfo newObj = new ChildInfo(); + newObj.id = binaryReader.ReadUInt32(); + newObj.location_id = binaryReader.ReadUInt32(); + return newObj; + } + + public void contributeToTreeNode(TreeNode node) { + node.Nodes.Add("id = " + id); + node.Nodes.Add("location_id = " + location_id); + } + } + + public class PhysicsDesc { + enum PhysicsDescInfo { + CSetup = (1 << 0), + MTABLE = (1 << 1), + VELOCITY = (1 << 2), + ACCELERATION = (1 << 3), + OMEGA = (1 << 4), + PARENT = (1 << 5), + CHILDREN = (1 << 6), + OBJSCALE = (1 << 7), + FRICTION = (1 << 8), + ELASTICITY = (1 << 9), + TIMESTAMPS = (1 << 10), + STABLE = (1 << 11), + PETABLE = (1 << 12), + DEFAULT_SCRIPT = (1 << 13), + DEFAULT_SCRIPT_INTENSITY = (1 << 14), + POSITION = (1 << 15), + MOVEMENT = (1 << 16), + ANIMFRAME_ID = (1 << 17), + TRANSLUCENCY = (1 << 18) + } + + public uint bitfield; + public uint state; + public byte[] movement_buffer; + public uint autonomous_movement; + public uint animframe_id; + public Position pos = new Position(); + public uint mtable_id; // These are tag ids like animpartchange + public uint stable_id; + public uint phstable_id; + public uint setup_id; + public uint parent_id; + public uint location_id; + public List children = new List(); + public float object_scale; + public float friction; + public float elasticity; + public float translucency; + public Vector3 velocity = new Vector3(); + public Vector3 acceleration = new Vector3(); + public Vector3 omega = new Vector3(); + public PScriptType default_script; + public float default_script_intensity; + public ushort[] timestamps = new ushort[9]; + + public static PhysicsDesc read(BinaryReader binaryReader) { + PhysicsDesc newObj = new PhysicsDesc(); + newObj.bitfield = binaryReader.ReadUInt32(); + newObj.state = binaryReader.ReadUInt32(); + + if ((newObj.bitfield & (uint)PhysicsDescInfo.MOVEMENT) != 0) { + uint buff_length = binaryReader.ReadUInt32(); + newObj.movement_buffer = binaryReader.ReadBytes((int)buff_length); + newObj.autonomous_movement = binaryReader.ReadUInt32(); + } else if ((newObj.bitfield & (uint)PhysicsDescInfo.ANIMFRAME_ID) != 0) { + newObj.animframe_id = binaryReader.ReadUInt32(); + } + + if ((newObj.bitfield & (uint)PhysicsDescInfo.POSITION) != 0) { + newObj.pos = Position.read(binaryReader); + } + + if ((newObj.bitfield & (uint)PhysicsDescInfo.MTABLE) != 0) { + newObj.mtable_id = binaryReader.ReadUInt32(); + } + + if ((newObj.bitfield & (uint)PhysicsDescInfo.STABLE) != 0) { + newObj.stable_id = binaryReader.ReadUInt32(); + } + + if ((newObj.bitfield & (uint)PhysicsDescInfo.PETABLE) != 0) { + newObj.phstable_id = binaryReader.ReadUInt32(); + } + + if ((newObj.bitfield & (uint)PhysicsDescInfo.CSetup) != 0) { + newObj.setup_id = binaryReader.ReadUInt32(); + } + + if ((newObj.bitfield & (uint)PhysicsDescInfo.PARENT) != 0) { + newObj.parent_id = binaryReader.ReadUInt32(); + newObj.location_id = binaryReader.ReadUInt32(); + } + + if ((newObj.bitfield & (uint)PhysicsDescInfo.CHILDREN) != 0) { + uint num_children = binaryReader.ReadUInt32(); + for (int i = 0; i < num_children; ++i) { + newObj.children.Add(ChildInfo.read(binaryReader)); + } + } + + if ((newObj.bitfield & (uint)PhysicsDescInfo.OBJSCALE) != 0) { + newObj.object_scale = binaryReader.ReadSingle(); + } + + if ((newObj.bitfield & (uint)PhysicsDescInfo.FRICTION) != 0) { + newObj.friction = binaryReader.ReadSingle(); + } + + if ((newObj.bitfield & (uint)PhysicsDescInfo.ELASTICITY) != 0) { + newObj.elasticity = binaryReader.ReadSingle(); + } + + if ((newObj.bitfield & (uint)PhysicsDescInfo.TRANSLUCENCY) != 0) { + newObj.translucency = binaryReader.ReadSingle(); + } + + if ((newObj.bitfield & (uint)PhysicsDescInfo.VELOCITY) != 0) { + newObj.velocity.x = binaryReader.ReadSingle(); + newObj.velocity.y = binaryReader.ReadSingle(); + newObj.velocity.z = binaryReader.ReadSingle(); + } + + if ((newObj.bitfield & (uint)PhysicsDescInfo.ACCELERATION) != 0) { + newObj.acceleration.x = binaryReader.ReadSingle(); + newObj.acceleration.y = binaryReader.ReadSingle(); + newObj.acceleration.z = binaryReader.ReadSingle(); + } + + if ((newObj.bitfield & (uint)PhysicsDescInfo.OMEGA) != 0) { + newObj.omega.x = binaryReader.ReadSingle(); + newObj.omega.y = binaryReader.ReadSingle(); + newObj.omega.z = binaryReader.ReadSingle(); + } + + if ((newObj.bitfield & (uint)PhysicsDescInfo.DEFAULT_SCRIPT) != 0) { + newObj.default_script = (PScriptType)binaryReader.ReadUInt32(); + } + + if ((newObj.bitfield & (uint)PhysicsDescInfo.DEFAULT_SCRIPT_INTENSITY) != 0) { + newObj.default_script_intensity = binaryReader.ReadSingle(); + } + + for (int i = 0; i < newObj.timestamps.Length; ++i) { + newObj.timestamps[i] = binaryReader.ReadUInt16(); + } + + Util.readToAlign(binaryReader); + + return newObj; + } + + public void contributeToTreeNode(TreeNode node) { + node.Nodes.Add("bitfield = " + bitfield); + node.Nodes.Add("state = " + state); + node.Nodes.Add("movement_buffer = " + movement_buffer); + node.Nodes.Add("autonomous_movement = " + autonomous_movement); + node.Nodes.Add("animframe_id = " + animframe_id); + TreeNode posNode = node.Nodes.Add("pos = "); + pos.contributeToTreeNode(posNode); + node.Nodes.Add("mtable_id = " + mtable_id); + node.Nodes.Add("stable_id = " + stable_id); + node.Nodes.Add("phstable_id = " + phstable_id); + node.Nodes.Add("setup_id = " + setup_id); + node.Nodes.Add("parent_id = " + parent_id); + node.Nodes.Add("location_id = " + location_id); + TreeNode childrenNode = node.Nodes.Add("children = "); + foreach (ChildInfo childInfo in children) { + childInfo.contributeToTreeNode(childrenNode); + } + node.Nodes.Add("object_scale = " + object_scale); + node.Nodes.Add("friction = " + friction); + node.Nodes.Add("elasticity = " + elasticity); + node.Nodes.Add("translucency = " + translucency); + node.Nodes.Add("velocity = " + velocity); + node.Nodes.Add("acceleration = " + acceleration); + node.Nodes.Add("omega = " + omega); + node.Nodes.Add("default_script = " + default_script); + node.Nodes.Add("default_script_intensity = " + default_script_intensity); + TreeNode timestampsNode = node.Nodes.Add("timestamps = "); + for (int i = 0; i < timestamps.Length; ++i) { + timestampsNode.Nodes.Add(timestamps[i].ToString()); + } + } + } + + public class RestrictionDB { + // TODO: wew this looks complicated... + } + + public class PublicWeenieDesc { + public enum PublicWeenieDescPackHeader { + PWD_Packed_None = 0, + PWD_Packed_PluralName = (1 << 0), + PWD_Packed_ItemsCapacity = (1 << 1), + PWD_Packed_ContainersCapacity = (1 << 2), + PWD_Packed_Value = (1 << 3), + PWD_Packed_Useability = (1 << 4), + PWD_Packed_UseRadius = (1 << 5), + PWD_Packed_Monarch = (1 << 6), + PWD_Packed_UIEffects = (1 << 7), + PWD_Packed_AmmoType = (1 << 8), + PWD_Packed_CombatUse = (1 << 9), + PWD_Packed_Structure = (1 << 10), + PWD_Packed_MaxStructure = (1 << 11), + PWD_Packed_StackSize = (1 << 12), + PWD_Packed_MaxStackSize = (1 << 13), + PWD_Packed_ContainerID = (1 << 14), + PWD_Packed_WielderID = (1 << 15), + PWD_Packed_ValidLocations = (1 << 16), + PWD_Packed_Location = (1 << 17), + PWD_Packed_Priority = (1 << 18), + PWD_Packed_TargetType = (1 << 19), + PWD_Packed_BlipColor = (1 << 20), + PWD_Packed_Burden = (1 << 21), // NOTE: May be PWD_Packed_VendorClassID + PWD_Packed_SpellID = (1 << 22), + PWD_Packed_RadarEnum = (1 << 23), // NOTE: May be PWD_Packed_RadarDistance + PWD_Packed_Workmanship = (1 << 24), + PWD_Packed_HouseOwner = (1 << 25), + PWD_Packed_HouseRestrictions = (1 << 26), + PWD_Packed_PScript = (1 << 27), + PWD_Packed_HookType = (1 << 28), + PWD_Packed_HookItemTypes = (1 << 29), + PWD_Packed_IconOverlay = (1 << 30), + PWD_Packed_MaterialType = (1 << 31) + } + + public enum PublicWeenieDescPackHeader2 { + PWD2_Packed_None = 0, + PWD2_Packed_IconUnderlay = (1 << 0), + PWD2_Packed_CooldownID = (1 << 1), + PWD2_Packed_CooldownDuration = (1 << 2), + PWD2_Packed_PetOwner = (1 << 3), + } + + public enum BitfieldIndex { + BF_OPENABLE = (1 << 0), + BF_INSCRIBABLE = (1 << 1), + BF_STUCK = (1 << 2), + BF_PLAYER = (1 << 3), + BF_ATTACKABLE = (1 << 4), + BF_PLAYER_KILLER = (1 << 5), + BF_HIDDEN_ADMIN = (1 << 6), + BF_UI_HIDDEN = (1 << 7), + BF_BOOK = (1 << 8), + BF_VENDOR = (1 << 9), + BF_PKSWITCH = (1 << 10), + BF_NPKSWITCH = (1 << 11), + BF_DOOR = (1 << 12), + BF_CORPSE = (1 << 13), + BF_LIFESTONE = (1 << 14), + BF_FOOD = (1 << 15), + BF_HEALER = (1 << 16), + BF_LOCKPICK = (1 << 17), + BF_PORTAL = (1 << 18), + // NOTE: Skip 1 + BF_ADMIN = (1 << 20), + BF_FREE_PKSTATUS = (1 << 21), + BF_IMMUNE_CELL_RESTRICTIONS = (1 << 22), + BF_REQUIRES_PACKSLOT = (1 << 23), + BF_RETAINED = (1 << 24), + BF_PKLITE_PKSTATUS = (1 << 25), + BF_INCLUDES_SECOND_HEADER = (1 << 26), + BF_BINDSTONE = (1 << 27), + BF_VOLATILE_RARE = (1 << 28), + BF_WIELD_ON_USE = (1 << 29), + BF_WIELD_LEFT = (1 << 30), + } + + public uint header; + public uint header2; + public PStringChar _name; + public uint _wcid; + public uint _iconID; + public ITEM_TYPE _type; + public uint _bitfield; + public PStringChar _plural_name; + public byte _itemsCapacity; + public byte _containersCapacity; + public AMMO_TYPE _ammoType; + public uint _value; + public ITEM_USEABLE _useability; + public float _useRadius; + public ITEM_TYPE _targetType; + public uint _effects; + public byte _combatUse; + public ushort _structure; + public ushort _maxStructure; + public ushort _stackSize; + public ushort _maxStackSize; + public uint _containerID; + public uint _wielderID; + public uint _valid_locations; + public uint _location; + public uint _priority; + public byte _blipColor; + public RadarEnum _radar_enum; + public ushort _pscript; + public float _workmanship; + public ushort _burden; + public ushort _spellID; + public uint _house_owner_iid; + public RestrictionDB _db; + public uint _hook_item_types; + public uint _monarch; + public ITEM_TYPE _hook_type; + public uint _iconOverlayID; + public uint _iconUnderlayID; + public uint _material_type; + public uint _cooldown_id; + public double _cooldown_duration; + public uint _pet_owner; + + public static PublicWeenieDesc read(BinaryReader binaryReader) { + PublicWeenieDesc newObj = new PublicWeenieDesc(); + newObj.header = binaryReader.ReadUInt32(); + newObj._name = PStringChar.read(binaryReader); + newObj._wcid = Util.readWClassIDCompressed(binaryReader); + newObj._iconID = Util.readDataIDOfKnownType(0x6000000, binaryReader); + newObj._type = (ITEM_TYPE)binaryReader.ReadUInt32(); + newObj._bitfield = binaryReader.ReadUInt32(); + + Util.readToAlign(binaryReader); + + if ((newObj._bitfield & (uint)BitfieldIndex.BF_INCLUDES_SECOND_HEADER) != 0) { + newObj.header2 = binaryReader.ReadUInt32(); + } + + if ((newObj.header & (uint)PublicWeenieDescPackHeader.PWD_Packed_PluralName) != 0) { + newObj._plural_name = PStringChar.read(binaryReader); + } + + if ((newObj.header & (uint)PublicWeenieDescPackHeader.PWD_Packed_ItemsCapacity) != 0) { + newObj._itemsCapacity = binaryReader.ReadByte(); + } + + if ((newObj.header & (uint)PublicWeenieDescPackHeader.PWD_Packed_ContainersCapacity) != 0) { + newObj._containersCapacity = binaryReader.ReadByte(); + } + + if ((newObj.header & (uint)PublicWeenieDescPackHeader.PWD_Packed_AmmoType) != 0) { + newObj._ammoType = (AMMO_TYPE)binaryReader.ReadUInt16(); + } + + if ((newObj.header & (uint)PublicWeenieDescPackHeader.PWD_Packed_Value) != 0) { + newObj._value = binaryReader.ReadUInt32(); + } + + if ((newObj.header & (uint)PublicWeenieDescPackHeader.PWD_Packed_Useability) != 0) { + newObj._useability = (ITEM_USEABLE)binaryReader.ReadUInt32(); + } + + if ((newObj.header & (uint)PublicWeenieDescPackHeader.PWD_Packed_UseRadius) != 0) { + newObj._useRadius = binaryReader.ReadSingle(); + } + + if ((newObj.header & (uint)PublicWeenieDescPackHeader.PWD_Packed_TargetType) != 0) { + newObj._targetType = (ITEM_TYPE)binaryReader.ReadUInt32(); + } + + if ((newObj.header & (uint)PublicWeenieDescPackHeader.PWD_Packed_UIEffects) != 0) { + newObj._effects = binaryReader.ReadUInt32(); + } + + if ((newObj.header & (uint)PublicWeenieDescPackHeader.PWD_Packed_CombatUse) != 0) { + newObj._combatUse = binaryReader.ReadByte(); + } + + if ((newObj.header & (uint)PublicWeenieDescPackHeader.PWD_Packed_Structure) != 0) { + newObj._structure = binaryReader.ReadUInt16(); + } + + if ((newObj.header & (uint)PublicWeenieDescPackHeader.PWD_Packed_MaxStructure) != 0) { + newObj._maxStructure = binaryReader.ReadUInt16(); + } + + if ((newObj.header & (uint)PublicWeenieDescPackHeader.PWD_Packed_StackSize) != 0) { + newObj._stackSize = binaryReader.ReadUInt16(); + } + + if ((newObj.header & (uint)PublicWeenieDescPackHeader.PWD_Packed_MaxStackSize) != 0) { + newObj._maxStackSize = binaryReader.ReadUInt16(); + } + + if ((newObj.header & (uint)PublicWeenieDescPackHeader.PWD_Packed_ContainerID) != 0) { + newObj._containerID = binaryReader.ReadUInt32(); + } + + if ((newObj.header & (uint)PublicWeenieDescPackHeader.PWD_Packed_WielderID) != 0) { + newObj._wielderID = binaryReader.ReadUInt32(); + } + + if ((newObj.header & (uint)PublicWeenieDescPackHeader.PWD_Packed_ValidLocations) != 0) { + newObj._valid_locations = binaryReader.ReadUInt32(); + } + + if ((newObj.header & (uint)PublicWeenieDescPackHeader.PWD_Packed_Location) != 0) { + newObj._location = binaryReader.ReadUInt32(); + } + + if ((newObj.header & (uint)PublicWeenieDescPackHeader.PWD_Packed_Priority) != 0) { + newObj._priority = binaryReader.ReadUInt32(); + } + + if ((newObj.header & (uint)PublicWeenieDescPackHeader.PWD_Packed_BlipColor) != 0) { + newObj._blipColor = binaryReader.ReadByte(); + } + + if ((newObj.header & (uint)PublicWeenieDescPackHeader.PWD_Packed_RadarEnum) != 0) { + newObj._radar_enum = (RadarEnum)binaryReader.ReadByte(); + } + + if ((newObj.header & (uint)PublicWeenieDescPackHeader.PWD_Packed_PScript) != 0) { + newObj._pscript = binaryReader.ReadUInt16(); + } + + if ((newObj.header & (uint)PublicWeenieDescPackHeader.PWD_Packed_Workmanship) != 0) { + newObj._workmanship = binaryReader.ReadSingle(); + } + + if ((newObj.header & (uint)PublicWeenieDescPackHeader.PWD_Packed_Burden) != 0) { + newObj._burden = binaryReader.ReadUInt16(); + } + + if ((newObj.header & (uint)PublicWeenieDescPackHeader.PWD_Packed_SpellID) != 0) { + newObj._spellID = binaryReader.ReadUInt16(); + } + + if ((newObj.header & (uint)PublicWeenieDescPackHeader.PWD_Packed_HouseOwner) != 0) { + newObj._house_owner_iid = binaryReader.ReadUInt32(); + } + + if ((newObj.header & (uint)PublicWeenieDescPackHeader.PWD_Packed_HouseRestrictions) != 0) { + // TODO: Read here once you get RestrictedDB read finished + } + + if ((newObj.header & (uint)PublicWeenieDescPackHeader.PWD_Packed_HookItemTypes) != 0) { + newObj._hook_item_types = binaryReader.ReadUInt32(); + } + + if ((newObj.header & (uint)PublicWeenieDescPackHeader.PWD_Packed_Monarch) != 0) { + newObj._monarch = binaryReader.ReadUInt32(); + } + + if ((newObj.header & (uint)PublicWeenieDescPackHeader.PWD_Packed_HookType) != 0) { + newObj._hook_type = (ITEM_TYPE)binaryReader.ReadUInt16(); + } + + if ((newObj.header & (uint)PublicWeenieDescPackHeader.PWD_Packed_IconOverlay) != 0) { + newObj._iconOverlayID = Util.readDataIDOfKnownType(0x6000000, binaryReader); + } + + if ((newObj.header & unchecked((uint)PublicWeenieDescPackHeader.PWD_Packed_MaterialType)) != 0) { + newObj._material_type = binaryReader.ReadUInt32(); + } + + if ((newObj.header2 & (uint)PublicWeenieDescPackHeader2.PWD2_Packed_IconUnderlay) != 0) { + newObj._iconUnderlayID = Util.readDataIDOfKnownType(0x6000000, binaryReader); + } + + if ((newObj.header2 & (uint)PublicWeenieDescPackHeader2.PWD2_Packed_CooldownID) != 0) { + newObj._cooldown_id = binaryReader.ReadUInt32(); + } + + if ((newObj.header2 & (uint)PublicWeenieDescPackHeader2.PWD2_Packed_CooldownDuration) != 0) { + newObj._cooldown_duration = binaryReader.ReadDouble(); + } + + if ((newObj.header2 & (uint)PublicWeenieDescPackHeader2.PWD2_Packed_PetOwner) != 0) { + newObj._pet_owner = binaryReader.ReadUInt32(); + } + + Util.readToAlign(binaryReader); + + return newObj; + } + + public void contributeToTreeNode(TreeNode node) { + node.Nodes.Add("header = " + header); + node.Nodes.Add("header2 = " + header2); + node.Nodes.Add("_name = " + _name.m_buffer); + node.Nodes.Add("_wcid = " + _wcid); + node.Nodes.Add("_iconID = " + _iconID); + node.Nodes.Add("_type = " + _type); + node.Nodes.Add("_bitfield = " + _bitfield); + node.Nodes.Add("_plural_name = " + _plural_name); + node.Nodes.Add("_itemsCapacity = " + _itemsCapacity); + node.Nodes.Add("_containersCapacity = " + _containersCapacity); + node.Nodes.Add("_ammoType = " + _ammoType); + node.Nodes.Add("_value = " + _value); + node.Nodes.Add("_useability = " + _useability); + node.Nodes.Add("_useRadius = " + _useRadius); + node.Nodes.Add("_targetType = " + _targetType); + node.Nodes.Add("_effects = " + _effects); + node.Nodes.Add("_combatUse = " + _combatUse); + node.Nodes.Add("_structure = " + _structure); + node.Nodes.Add("_maxStructure = " + _maxStructure); + node.Nodes.Add("_stackSize = " + _stackSize); + node.Nodes.Add("_maxStackSize = " + _maxStackSize); + node.Nodes.Add("_containerID = " + _containerID); + node.Nodes.Add("_wielderID = " + _wielderID); + node.Nodes.Add("_valid_locations = " + _valid_locations); + node.Nodes.Add("_location = " + _location); + node.Nodes.Add("_priority = " + _priority); + node.Nodes.Add("_blipColor = " + _blipColor); + node.Nodes.Add("_radar_enum = " + _radar_enum); + node.Nodes.Add("_pscript = " + _pscript); + node.Nodes.Add("_workmanship = " + _workmanship); + node.Nodes.Add("_burden = " + _burden); + node.Nodes.Add("_spellID = " + _spellID); + node.Nodes.Add("_house_owner_iid = " + _house_owner_iid); + //node.Nodes.Add("_db = " + _db); // TODO: Add once implemented + node.Nodes.Add("_hook_item_types = " + _hook_item_types); + node.Nodes.Add("_monarch = " + _monarch); + node.Nodes.Add("_hook_type = " + _hook_type); + node.Nodes.Add("_iconOverlayID = " + _iconOverlayID); + node.Nodes.Add("_iconUnderlayID = " + _iconUnderlayID); + node.Nodes.Add("_material_type = " + _material_type); + node.Nodes.Add("_cooldown_id = " + _cooldown_id); + node.Nodes.Add("_cooldown_duration = " + _cooldown_duration); + node.Nodes.Add("_pet_owner = " + _pet_owner); + } + } + + public class CreateObject : Message { + public uint object_id; + public ObjDesc objdesc; + public PhysicsDesc physicsdesc; + public PublicWeenieDesc wdesc; + + public static CreateObject read(BinaryReader binaryReader) { + CreateObject newObj = new CreateObject(); + newObj.object_id = binaryReader.ReadUInt32(); + newObj.objdesc = ObjDesc.read(binaryReader); + newObj.physicsdesc = PhysicsDesc.read(binaryReader); + newObj.wdesc = PublicWeenieDesc.read(binaryReader); + return newObj; + } + + public override void contributeToTreeView(TreeView treeView) { + TreeNode rootNode = new TreeNode(this.GetType().Name); + rootNode.Expand(); + rootNode.Nodes.Add("object_id = " + object_id); + TreeNode objdescNode = rootNode.Nodes.Add("objdesc = "); + objdesc.contributeToTreeNode(objdescNode); + TreeNode physicsdescNode = rootNode.Nodes.Add("physicsdesc = "); + physicsdesc.contributeToTreeNode(physicsdescNode); + TreeNode wdescNode = rootNode.Nodes.Add("wdesc = "); + wdesc.contributeToTreeNode(wdescNode); + treeView.Nodes.Add(rootNode); + } + } +} diff --git a/aclogview/CM_Qualities.cs b/aclogview/CM_Qualities.cs new file mode 100644 index 0000000..feb9977 --- /dev/null +++ b/aclogview/CM_Qualities.cs @@ -0,0 +1,359 @@ +using aclogview; +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +public class CM_Qualities : MessageProcessor { + + public override bool acceptMessageData(BinaryReader messageDataReader, TreeView outputTreeView) { + bool handled = true; + + PacketOpcode opcode = Util.readOpcode(messageDataReader); + switch (opcode) { + case PacketOpcode.Evt_Qualities__PrivateRemoveIntEvent_ID: { + PrivateRemoveQualityEvent message = PrivateRemoveQualityEvent.read(opcode, messageDataReader); + message.contributeToTreeView(outputTreeView); + break; + } + case PacketOpcode.Evt_Qualities__RemoveIntEvent_ID: { + RemoveQualityEvent message = RemoveQualityEvent.read(opcode, messageDataReader); + message.contributeToTreeView(outputTreeView); + break; + } + case PacketOpcode.Evt_Qualities__PrivateRemoveBoolEvent_ID: { + PrivateRemoveQualityEvent message = PrivateRemoveQualityEvent.read(opcode, messageDataReader); + message.contributeToTreeView(outputTreeView); + break; + } + case PacketOpcode.Evt_Qualities__RemoveBoolEvent_ID: { + RemoveQualityEvent message = RemoveQualityEvent.read(opcode, messageDataReader); + message.contributeToTreeView(outputTreeView); + break; + } + case PacketOpcode.Evt_Qualities__PrivateRemoveFloatEvent_ID: { + PrivateRemoveQualityEvent message = PrivateRemoveQualityEvent.read(opcode, messageDataReader); + message.contributeToTreeView(outputTreeView); + break; + } + case PacketOpcode.Evt_Qualities__RemoveFloatEvent_ID: { + RemoveQualityEvent message = RemoveQualityEvent.read(opcode, messageDataReader); + message.contributeToTreeView(outputTreeView); + break; + } + case PacketOpcode.Evt_Qualities__PrivateRemoveStringEvent_ID: { + PrivateRemoveQualityEvent message = PrivateRemoveQualityEvent.read(opcode, messageDataReader); + message.contributeToTreeView(outputTreeView); + break; + } + case PacketOpcode.Evt_Qualities__RemoveStringEvent_ID: { + RemoveQualityEvent message = RemoveQualityEvent.read(opcode, messageDataReader); + message.contributeToTreeView(outputTreeView); + break; + } + case PacketOpcode.Evt_Qualities__PrivateRemoveDataIDEvent_ID: { + PrivateRemoveQualityEvent message = PrivateRemoveQualityEvent.read(opcode, messageDataReader); + message.contributeToTreeView(outputTreeView); + break; + } + case PacketOpcode.Evt_Qualities__RemoveDataIDEvent_ID: { + RemoveQualityEvent message = RemoveQualityEvent.read(opcode, messageDataReader); + message.contributeToTreeView(outputTreeView); + break; + } + case PacketOpcode.Evt_Qualities__PrivateRemoveInstanceIDEvent_ID: { + PrivateRemoveQualityEvent message = PrivateRemoveQualityEvent.read(opcode, messageDataReader); + message.contributeToTreeView(outputTreeView); + break; + } + case PacketOpcode.Evt_Qualities__RemoveInstanceIDEvent_ID: { + RemoveQualityEvent message = RemoveQualityEvent.read(opcode, messageDataReader); + message.contributeToTreeView(outputTreeView); + break; + } + case PacketOpcode.Evt_Qualities__PrivateRemovePositionEvent_ID: { + PrivateRemoveQualityEvent message = PrivateRemoveQualityEvent.read(opcode, messageDataReader); + message.contributeToTreeView(outputTreeView); + break; + } + case PacketOpcode.Evt_Qualities__RemovePositionEvent_ID: { + RemoveQualityEvent message = RemoveQualityEvent.read(opcode, messageDataReader); + message.contributeToTreeView(outputTreeView); + break; + } + case PacketOpcode.Evt_Qualities__PrivateRemoveInt64Event_ID: { + PrivateRemoveQualityEvent message = PrivateRemoveQualityEvent.read(opcode, messageDataReader); + message.contributeToTreeView(outputTreeView); + break; + } + case PacketOpcode.Evt_Qualities__RemoveInt64Event_ID: { + RemoveQualityEvent message = RemoveQualityEvent.read(opcode, messageDataReader); + message.contributeToTreeView(outputTreeView); + break; + } + case PacketOpcode.Evt_Qualities__PrivateUpdateInt_ID: { + PrivateUpdateQualityEvent message = PrivateUpdateQualityEvent.read(opcode, messageDataReader); + message.contributeToTreeView(outputTreeView); + break; + } + case PacketOpcode.Evt_Qualities__UpdateInt_ID: { + UpdateQualityEvent message = UpdateQualityEvent.read(opcode, messageDataReader); + message.contributeToTreeView(outputTreeView); + break; + } + case PacketOpcode.Evt_Qualities__PrivateUpdateInt64_ID: { + PrivateUpdateQualityEvent message = PrivateUpdateQualityEvent.read(opcode, messageDataReader); + message.contributeToTreeView(outputTreeView); + break; + } + case PacketOpcode.Evt_Qualities__UpdateInt64_ID: { + UpdateQualityEvent message = UpdateQualityEvent.read(opcode, messageDataReader); + message.contributeToTreeView(outputTreeView); + break; + } + case PacketOpcode.Evt_Qualities__PrivateUpdateBool_ID: { + PrivateUpdateQualityEvent message = PrivateUpdateQualityEvent.read(opcode, messageDataReader); + message.contributeToTreeView(outputTreeView); + break; + } + case PacketOpcode.Evt_Qualities__UpdateBool_ID: { + UpdateQualityEvent message = UpdateQualityEvent.read(opcode, messageDataReader); + message.contributeToTreeView(outputTreeView); + break; + } + case PacketOpcode.Evt_Qualities__PrivateUpdateFloat_ID: { + PrivateUpdateQualityEvent message = PrivateUpdateQualityEvent.read(opcode, messageDataReader); + message.contributeToTreeView(outputTreeView); + break; + } + case PacketOpcode.Evt_Qualities__UpdateFloat_ID: { + UpdateQualityEvent message = UpdateQualityEvent.read(opcode, messageDataReader); + message.contributeToTreeView(outputTreeView); + break; + } + case PacketOpcode.Evt_Qualities__PrivateUpdateString_ID: { + PrivateUpdateQualityEvent message = PrivateUpdateQualityEvent.read(opcode, messageDataReader); + message.contributeToTreeView(outputTreeView); + break; + } + case PacketOpcode.Evt_Qualities__UpdateString_ID: { + UpdateQualityEvent message = UpdateQualityEvent.read(opcode, messageDataReader); + message.contributeToTreeView(outputTreeView); + break; + } + case PacketOpcode.Evt_Qualities__PrivateUpdateDataID_ID: { + PrivateUpdateQualityEvent message = PrivateUpdateQualityEvent.read(opcode, messageDataReader); + message.contributeToTreeView(outputTreeView); + break; + } + case PacketOpcode.Evt_Qualities__UpdateDataID_ID: { + UpdateQualityEvent message = UpdateQualityEvent.read(opcode, messageDataReader); + message.contributeToTreeView(outputTreeView); + break; + } + case PacketOpcode.Evt_Qualities__PrivateUpdateInstanceID_ID: { + PrivateUpdateQualityEvent message = PrivateUpdateQualityEvent.read(opcode, messageDataReader); + message.contributeToTreeView(outputTreeView); + break; + } + case PacketOpcode.Evt_Qualities__UpdateInstanceID_ID: { + UpdateQualityEvent message = UpdateQualityEvent.read(opcode, messageDataReader); + message.contributeToTreeView(outputTreeView); + break; + } + case PacketOpcode.Evt_Qualities__PrivateUpdatePosition_ID: { + PrivateUpdateQualityEvent message = PrivateUpdateQualityEvent.read(opcode, messageDataReader); + message.contributeToTreeView(outputTreeView); + break; + } + case PacketOpcode.Evt_Qualities__UpdatePosition_ID: { + UpdateQualityEvent message = UpdateQualityEvent.read(opcode, messageDataReader); + message.contributeToTreeView(outputTreeView); + break; + } + case PacketOpcode.Evt_Qualities__PrivateUpdateSkill_ID: { + PrivateUpdateQualityEvent message = PrivateUpdateQualityEvent.read(opcode, messageDataReader); + message.contributeToTreeView(outputTreeView); + break; + } + case PacketOpcode.Evt_Qualities__UpdateSkill_ID: { + UpdateQualityEvent message = UpdateQualityEvent.read(opcode, messageDataReader); + message.contributeToTreeView(outputTreeView); + break; + } + case PacketOpcode.Evt_Qualities__PrivateUpdateSkillLevel_ID: { + PrivateUpdateQualityEvent message = PrivateUpdateQualityEvent.read(opcode, messageDataReader); + message.contributeToTreeView(outputTreeView); + break; + } + case PacketOpcode.Evt_Qualities__UpdateSkillLevel_ID: { + UpdateQualityEvent message = UpdateQualityEvent.read(opcode, messageDataReader); + message.contributeToTreeView(outputTreeView); + break; + } + case PacketOpcode.Evt_Qualities__PrivateUpdateSkillAC_ID: { + PrivateUpdateQualityEvent message = PrivateUpdateQualityEvent.read(opcode, messageDataReader); + message.contributeToTreeView(outputTreeView); + break; + } + case PacketOpcode.Evt_Qualities__UpdateSkillAC_ID: { + UpdateQualityEvent message = UpdateQualityEvent.read(opcode, messageDataReader); + message.contributeToTreeView(outputTreeView); + break; + } + case PacketOpcode.Evt_Qualities__PrivateUpdateAttribute_ID: { + PrivateUpdateQualityEvent message = PrivateUpdateQualityEvent.read(opcode, messageDataReader); + message.contributeToTreeView(outputTreeView); + break; + } + case PacketOpcode.Evt_Qualities__UpdateAttribute_ID: { + UpdateQualityEvent message = UpdateQualityEvent.read(opcode, messageDataReader); + message.contributeToTreeView(outputTreeView); + break; + } + case PacketOpcode.Evt_Qualities__PrivateUpdateAttributeLevel_ID: { + PrivateUpdateQualityEvent message = PrivateUpdateQualityEvent.read(opcode, messageDataReader); + message.contributeToTreeView(outputTreeView); + break; + } + case PacketOpcode.Evt_Qualities__UpdateAttributeLevel_ID: { + UpdateQualityEvent message = UpdateQualityEvent.read(opcode, messageDataReader); + message.contributeToTreeView(outputTreeView); + break; + } + case PacketOpcode.Evt_Qualities__PrivateUpdateAttribute2nd_ID: { + PrivateUpdateQualityEvent message = PrivateUpdateQualityEvent.read(opcode, messageDataReader); + message.contributeToTreeView(outputTreeView); + break; + } + case PacketOpcode.Evt_Qualities__UpdateAttribute2nd_ID: { + UpdateQualityEvent message = UpdateQualityEvent.read(opcode, messageDataReader); + message.contributeToTreeView(outputTreeView); + break; + } + case PacketOpcode.Evt_Qualities__PrivateUpdateAttribute2ndLevel_ID: { + PrivateUpdateQualityEvent message = PrivateUpdateQualityEvent.read(opcode, messageDataReader); + message.contributeToTreeView(outputTreeView); + break; + } + case PacketOpcode.Evt_Qualities__UpdateAttribute2ndLevel_ID: { + UpdateQualityEvent message = UpdateQualityEvent.read(opcode, messageDataReader); + message.contributeToTreeView(outputTreeView); + break; + } + default: { + handled = false; + break; + } + } + + return handled; + } + + public class PrivateRemoveQualityEvent : Message { + public PacketOpcode opcode; + public byte wts; + public TSType stype; + + public static PrivateRemoveQualityEvent read(PacketOpcode opcode, BinaryReader binaryReader) { + PrivateRemoveQualityEvent newObj = new PrivateRemoveQualityEvent(); + newObj.opcode = opcode; + newObj.wts = binaryReader.ReadByte(); + newObj.stype = (TSType)Enum.ToObject(typeof(TSType), binaryReader.ReadUInt32()); + return newObj; + } + + public override void contributeToTreeView(TreeView treeView) { + TreeNode rootNode = new TreeNode(this.GetType().Name); + rootNode.Expand(); + rootNode.Nodes.Add("opcode = " + opcode); + rootNode.Nodes.Add("wts = " + wts); + rootNode.Nodes.Add("stype = " + stype); + treeView.Nodes.Add(rootNode); + } + } + + public class RemoveQualityEvent : Message { + public PacketOpcode opcode; + public byte wts; + public uint sender; + public TSType stype; + + public static RemoveQualityEvent read(PacketOpcode opcode, BinaryReader binaryReader) { + RemoveQualityEvent newObj = new RemoveQualityEvent(); + newObj.opcode = opcode; + newObj.wts = binaryReader.ReadByte(); + newObj.sender = binaryReader.ReadUInt32(); + newObj.stype = (TSType)Enum.ToObject(typeof(TSType), binaryReader.ReadUInt32()); + return newObj; + } + + public override void contributeToTreeView(TreeView treeView) { + TreeNode rootNode = new TreeNode(this.GetType().Name); + rootNode.Expand(); + rootNode.Nodes.Add("opcode = " + opcode); + rootNode.Nodes.Add("wts = " + wts); + rootNode.Nodes.Add("sender = " + sender); + rootNode.Nodes.Add("stype = " + stype); + treeView.Nodes.Add(rootNode); + } + } + + public class PrivateUpdateQualityEvent : Message { + public PacketOpcode opcode; + public byte wts; + public TSType stype; + public T val; + + public static PrivateUpdateQualityEvent read(PacketOpcode opcode, BinaryReader binaryReader) { + PrivateUpdateQualityEvent newObj = new PrivateUpdateQualityEvent(); + newObj.opcode = opcode; + newObj.wts = binaryReader.ReadByte(); + newObj.stype = (TSType)Enum.ToObject(typeof(TSType), binaryReader.ReadUInt32()); + newObj.val = Util.readers[typeof(T)](binaryReader); + return newObj; + } + + public override void contributeToTreeView(TreeView treeView) { + TreeNode rootNode = new TreeNode(this.GetType().Name); + rootNode.Expand(); + rootNode.Nodes.Add("opcode = " + opcode); + rootNode.Nodes.Add("wts = " + wts); + rootNode.Nodes.Add("stype = " + stype); + rootNode.Nodes.Add("val = " + val); // TODO: Need to contribute to this node for types that are capable of doing so + treeView.Nodes.Add(rootNode); + } + } + + public class UpdateQualityEvent : Message { + public PacketOpcode opcode; + public byte wts; + public uint sender; + public TSType stype; + public T val; + + public static UpdateQualityEvent read(PacketOpcode opcode, BinaryReader binaryReader) { + UpdateQualityEvent newObj = new UpdateQualityEvent(); + newObj.opcode = opcode; + newObj.wts = binaryReader.ReadByte(); + newObj.sender = binaryReader.ReadUInt32(); + newObj.stype = (TSType)Enum.ToObject(typeof(TSType), binaryReader.ReadUInt32()); + newObj.val = Util.readers[typeof(T)](binaryReader); + return newObj; + } + + public override void contributeToTreeView(TreeView treeView) { + TreeNode rootNode = new TreeNode(this.GetType().Name); + rootNode.Expand(); + rootNode.Nodes.Add("opcode = " + opcode); + rootNode.Nodes.Add("wts = " + wts); + rootNode.Nodes.Add("sender = " + sender); + rootNode.Nodes.Add("stype = " + stype); + rootNode.Nodes.Add("val = " + val); // TODO: Need to contribute to this node for types that are capable of doing so + treeView.Nodes.Add(rootNode); + } + } +} diff --git a/aclogview/CM_Social.cs b/aclogview/CM_Social.cs new file mode 100644 index 0000000..55ab48a --- /dev/null +++ b/aclogview/CM_Social.cs @@ -0,0 +1,309 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +public class CM_Social : MessageProcessor { + + public override bool acceptMessageData(BinaryReader messageDataReader, TreeView outputTreeView) { + bool handled = true; + + PacketOpcode opcode = Util.readOpcode(messageDataReader); + switch (opcode) { + case PacketOpcode.Evt_Social__ClearFriends_ID: { + EmptyMessage message = new EmptyMessage(opcode); + message.contributeToTreeView(outputTreeView); + break; + } + case PacketOpcode.Evt_Social__RemoveFriend_ID: { + RemoveFriend message = RemoveFriend.read(messageDataReader); + message.contributeToTreeView(outputTreeView); + break; + } + case PacketOpcode.Evt_Social__AddFriend_ID: { + AddFriend message = AddFriend.read(messageDataReader); + message.contributeToTreeView(outputTreeView); + break; + } + case PacketOpcode.Evt_Social__FriendsUpdate_ID: { + FriendsUpdate message = FriendsUpdate.read(messageDataReader); + message.contributeToTreeView(outputTreeView); + break; + } + // TODO: AddCharacterTitle + case PacketOpcode.Evt_Social__CharacterTitleTable_ID: { + CharacterTitleTable message = CharacterTitleTable.read(messageDataReader); + message.contributeToTreeView(outputTreeView); + break; + } + case PacketOpcode.Evt_Social__AddOrSetCharacterTitle_ID: { + AddOrSetCharacterTitle message = AddOrSetCharacterTitle.read(messageDataReader); + message.contributeToTreeView(outputTreeView); + break; + } + case PacketOpcode.Evt_Social__SetDisplayCharacterTitle_ID: { + SetDisplayCharacterTitle message = SetDisplayCharacterTitle.read(messageDataReader); + message.contributeToTreeView(outputTreeView); + break; + } + case PacketOpcode.Evt_Social__SendClientContractTrackerTable_ID: { + SendClientContractTrackerTable message = SendClientContractTrackerTable.read(messageDataReader); + message.contributeToTreeView(outputTreeView); + break; + } + case PacketOpcode.Evt_Social__SendClientContractTracker_ID: { + SendClientContractTracker message = SendClientContractTracker.read(messageDataReader); + message.contributeToTreeView(outputTreeView); + break; + } + case PacketOpcode.Evt_Social__AbandonContract_ID: { + AbandonContract message = AbandonContract.read(messageDataReader); + message.contributeToTreeView(outputTreeView); + break; + } + default: { + handled = false; + break; + } + } + + return handled; + } + + public class RemoveFriend : Message { + public uint i_friendID; + + public static RemoveFriend read(BinaryReader binaryReader) { + RemoveFriend newObj = new RemoveFriend(); + newObj.i_friendID = binaryReader.ReadUInt32(); + Util.readToAlign(binaryReader); + return newObj; + } + + public override void contributeToTreeView(TreeView treeView) { + TreeNode rootNode = new TreeNode(this.GetType().Name); + rootNode.Expand(); + rootNode.Nodes.Add("i_friendID = " + i_friendID); + treeView.Nodes.Add(rootNode); + } + } + + public class AddFriend : Message { + public PStringChar i_friend_name; + + public static AddFriend read(BinaryReader binaryReader) { + AddFriend newObj = new AddFriend(); + newObj.i_friend_name = PStringChar.read(binaryReader); + return newObj; + } + + public override void contributeToTreeView(TreeView treeView) { + TreeNode rootNode = new TreeNode(this.GetType().Name); + rootNode.Expand(); + rootNode.Nodes.Add("i_friend_name = " + i_friend_name); + treeView.Nodes.Add(rootNode); + } + } + + public class FriendData { + public uint m_id; + public uint m_online; + public uint m_appearOffline; + public PStringChar m_name; + public PList m_friendsList; + public PList m_friendOfList; + + public static FriendData read(BinaryReader binaryReader) { + FriendData newObj = new FriendData(); + newObj.m_id = binaryReader.ReadUInt32(); + newObj.m_online = binaryReader.ReadUInt32(); + newObj.m_appearOffline = binaryReader.ReadUInt32(); + newObj.m_name = PStringChar.read(binaryReader); + newObj.m_friendsList = PList.read(binaryReader); + newObj.m_friendOfList = PList.read(binaryReader); + return newObj; + } + + public void contributeToTreeNode(TreeNode node) { + node.Nodes.Add("m_id = " + m_id); + node.Nodes.Add("m_online = " + m_online); + node.Nodes.Add("m_appearOffline = " + m_appearOffline); + node.Nodes.Add("m_name = " + m_name); + TreeNode friendsListNode = node.Nodes.Add("m_friendsList = "); + m_friendsList.contributeToTreeNode(friendsListNode); + TreeNode friendOfListNode = node.Nodes.Add("m_friendOfList = "); + m_friendOfList.contributeToTreeNode(friendOfListNode); + } + } + + public class FriendsUpdate : Message { + public PList friendDataList; + public FriendsUpdateType updateType; + + public static FriendsUpdate read(BinaryReader binaryReader) { + FriendsUpdate newObj = new FriendsUpdate(); + newObj.friendDataList = PList.read(binaryReader); + newObj.updateType = (FriendsUpdateType)binaryReader.ReadUInt32(); + return newObj; + } + + public override void contributeToTreeView(TreeView treeView) { + TreeNode rootNode = new TreeNode(this.GetType().Name); + rootNode.Expand(); + TreeNode friendDataListNode = rootNode.Nodes.Add("friendDataList = "); + friendDataList.contributeToTreeNode(friendDataListNode); + rootNode.Nodes.Add("updateType = " + updateType); + treeView.Nodes.Add(rootNode); + } + } + + public class CharacterTitleTable : Message { + public CharacterTitle mDisplayTitle; + public PList mTitleList = new PList(); + + public static CharacterTitleTable read(BinaryReader binaryReader) { + CharacterTitleTable newObj = new CharacterTitleTable(); + uint constantOne = binaryReader.ReadUInt32(); + newObj.mDisplayTitle = (CharacterTitle)binaryReader.ReadUInt32(); + newObj.mTitleList = PList.read(binaryReader); + return newObj; + } + + public override void contributeToTreeView(TreeView treeView) { + TreeNode rootNode = new TreeNode(this.GetType().Name); + rootNode.Expand(); + rootNode.Nodes.Add("mDisplayTitle = " + mDisplayTitle); + TreeNode titleListNode = rootNode.Nodes.Add("mTitleList = "); + mTitleList.contributeToTreeNode(titleListNode); + treeView.Nodes.Add(rootNode); + } + } + + public class AddOrSetCharacterTitle : Message { + public CharacterTitle newTitle; + public int bSetAsDisplayTitle; + + public static AddOrSetCharacterTitle read(BinaryReader binaryReader) { + AddOrSetCharacterTitle newObj = new AddOrSetCharacterTitle(); + uint constantOne = binaryReader.ReadUInt32(); + newObj.newTitle = (CharacterTitle)binaryReader.ReadUInt32(); + newObj.bSetAsDisplayTitle = binaryReader.ReadInt32(); + return newObj; + } + + public override void contributeToTreeView(TreeView treeView) { + TreeNode rootNode = new TreeNode(this.GetType().Name); + rootNode.Expand(); + rootNode.Nodes.Add("newTitle = " + newTitle); + rootNode.Nodes.Add("bSetAsDisplayTitle = " + bSetAsDisplayTitle); + treeView.Nodes.Add(rootNode); + } + } + + public class SetDisplayCharacterTitle : Message { + public CharacterTitle i_i_title; + + public static SetDisplayCharacterTitle read(BinaryReader binaryReader) { + SetDisplayCharacterTitle newObj = new SetDisplayCharacterTitle(); + uint constantOne = binaryReader.ReadUInt32(); + newObj.i_i_title = (CharacterTitle)binaryReader.ReadUInt32(); + return newObj; + } + + public override void contributeToTreeView(TreeView treeView) { + TreeNode rootNode = new TreeNode(this.GetType().Name); + rootNode.Expand(); + rootNode.Nodes.Add("i_i_title = " + i_i_title); + treeView.Nodes.Add(rootNode); + } + } + + public class CContractTracker { + public uint _version; + public uint _contract_id; + public uint _contract_stage; + public double _time_when_done; + public double _time_when_repeats; + + public static CContractTracker read(BinaryReader binaryReader) { + CContractTracker newObj = new CContractTracker(); + newObj._version = binaryReader.ReadUInt32(); + newObj._contract_id = binaryReader.ReadUInt32(); + newObj._contract_stage = binaryReader.ReadUInt32(); + newObj._time_when_done = binaryReader.ReadDouble(); + newObj._time_when_repeats = binaryReader.ReadDouble(); + return newObj; + } + + public void contributeToTreeNode(TreeNode node) { + node.Nodes.Add("_version = " + _version); + node.Nodes.Add("_contract_id = " + _contract_id); + node.Nodes.Add("_contract_stage = " + _contract_stage); + node.Nodes.Add("_time_when_done = " + _time_when_done); + node.Nodes.Add("_time_when_repeats = " + _time_when_repeats); + } + } + + public class SendClientContractTrackerTable : Message { + public PackableHashTable _contractTrackerHash = new PackableHashTable(); + + public static SendClientContractTrackerTable read(BinaryReader binaryReader) { + SendClientContractTrackerTable newObj = new SendClientContractTrackerTable(); + newObj._contractTrackerHash = PackableHashTable.read(binaryReader); + return newObj; + } + + public override void contributeToTreeView(TreeView treeView) { + TreeNode rootNode = new TreeNode(this.GetType().Name); + rootNode.Expand(); + TreeNode trackerTableNode = rootNode.Nodes.Add("_contractTrackerHash = "); + _contractTrackerHash.contributeToTreeNode(trackerTableNode); + treeView.Nodes.Add(rootNode); + } + } + + public class SendClientContractTracker : Message { + public CContractTracker contractTracker; + public int bDeleteContract; + public int bSetAsDisplayContract; + + public static SendClientContractTracker read(BinaryReader binaryReader) { + SendClientContractTracker newObj = new SendClientContractTracker(); + newObj.contractTracker = CContractTracker.read(binaryReader); + newObj.bDeleteContract = binaryReader.ReadInt32(); + newObj.bSetAsDisplayContract = binaryReader.ReadInt32(); + return newObj; + } + + public override void contributeToTreeView(TreeView treeView) { + TreeNode rootNode = new TreeNode(this.GetType().Name); + rootNode.Expand(); + TreeNode trackerNode = rootNode.Nodes.Add("contractTracker = "); + contractTracker.contributeToTreeNode(trackerNode); + rootNode.Nodes.Add("bDeleteContract = " + bDeleteContract); + rootNode.Nodes.Add("bSetAsDisplayContract = " + bSetAsDisplayContract); + treeView.Nodes.Add(rootNode); + } + } + + public class AbandonContract : Message { + public uint i_contract_id; + + public static AbandonContract read(BinaryReader binaryReader) { + AbandonContract newObj = new AbandonContract(); + newObj.i_contract_id = binaryReader.ReadUInt32(); + Util.readToAlign(binaryReader); + return newObj; + } + + public override void contributeToTreeView(TreeView treeView) { + TreeNode rootNode = new TreeNode(this.GetType().Name); + rootNode.Expand(); + rootNode.Nodes.Add("i_contract_id = " + i_contract_id); + treeView.Nodes.Add(rootNode); + } + } +} diff --git a/aclogview/CM_Trade.cs b/aclogview/CM_Trade.cs new file mode 100644 index 0000000..fe4ced9 --- /dev/null +++ b/aclogview/CM_Trade.cs @@ -0,0 +1,27 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +public class CM_Trade : MessageProcessor { + + public override bool acceptMessageData(BinaryReader messageDataReader, TreeView outputTreeView) { + bool handled = true; + + PacketOpcode opcode = Util.readOpcode(messageDataReader); + switch (opcode) { + + default: { + handled = false; + break; + } + } + + return handled; + } + + +} diff --git a/aclogview/CM_Train.cs b/aclogview/CM_Train.cs new file mode 100644 index 0000000..f480342 --- /dev/null +++ b/aclogview/CM_Train.cs @@ -0,0 +1,27 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +public class CM_Train : MessageProcessor { + + public override bool acceptMessageData(BinaryReader messageDataReader, TreeView outputTreeView) { + bool handled = true; + + PacketOpcode opcode = Util.readOpcode(messageDataReader); + switch (opcode) { + + default: { + handled = false; + break; + } + } + + return handled; + } + + +} diff --git a/aclogview/CM_Vendor.cs b/aclogview/CM_Vendor.cs new file mode 100644 index 0000000..888b418 --- /dev/null +++ b/aclogview/CM_Vendor.cs @@ -0,0 +1,27 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +public class CM_Vendor : MessageProcessor { + + public override bool acceptMessageData(BinaryReader messageDataReader, TreeView outputTreeView) { + bool handled = true; + + PacketOpcode opcode = Util.readOpcode(messageDataReader); + switch (opcode) { + + default: { + handled = false; + break; + } + } + + return handled; + } + + +} diff --git a/aclogview/CM_Writing.cs b/aclogview/CM_Writing.cs new file mode 100644 index 0000000..ee7edf7 --- /dev/null +++ b/aclogview/CM_Writing.cs @@ -0,0 +1,173 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +public class CM_Writing : MessageProcessor { + + public override bool acceptMessageData(BinaryReader messageDataReader, TreeView outputTreeView) { + bool handled = true; + + PacketOpcode opcode = Util.readOpcode(messageDataReader); + switch (opcode) { + // TODO: Add all BOOK_*_RESPONSE_EVENT + case PacketOpcode.Evt_Writing__BookData_ID: { + BookData message = BookData.read(messageDataReader); + message.contributeToTreeView(outputTreeView); + break; + } + case PacketOpcode.Evt_Writing__BookModifyPage_ID: { + BookModifyPage message = BookModifyPage.read(messageDataReader); + message.contributeToTreeView(outputTreeView); + break; + } + case PacketOpcode.Evt_Writing__BookAddPage_ID: { + BookAddPage message = BookAddPage.read(messageDataReader); + message.contributeToTreeView(outputTreeView); + break; + } + case PacketOpcode.Evt_Writing__BookDeletePage_ID: { + BookDeletePage message = BookDeletePage.read(messageDataReader); + message.contributeToTreeView(outputTreeView); + break; + } + case PacketOpcode.Evt_Writing__BookPageData_ID: { + BookPageData message = BookPageData.read(messageDataReader); + message.contributeToTreeView(outputTreeView); + break; + } + // TODO: Evt_Writing__GetInscription_ID + case PacketOpcode.Evt_Writing__SetInscription_ID: { + SetInscription message = SetInscription.read(messageDataReader); + message.contributeToTreeView(outputTreeView); + break; + } + default: { + handled = false; + break; + } + } + + return handled; + } + + public class BookData : Message { + public uint i_objectID; + + public static BookData read(BinaryReader binaryReader) { + BookData newObj = new BookData(); + newObj.i_objectID = binaryReader.ReadUInt32(); + return newObj; + } + + public override void contributeToTreeView(TreeView treeView) { + TreeNode rootNode = new TreeNode(this.GetType().Name); + rootNode.Expand(); + rootNode.Nodes.Add("i_objectID = " + i_objectID); + treeView.Nodes.Add(rootNode); + } + } + + public class BookModifyPage : Message { + public uint i_objectID; + public int i_pageNum; + public PStringChar i_pageText; + + public static BookModifyPage read(BinaryReader binaryReader) { + BookModifyPage newObj = new BookModifyPage(); + newObj.i_objectID = binaryReader.ReadUInt32(); + newObj.i_pageNum = binaryReader.ReadInt32(); + newObj.i_pageText = PStringChar.read(binaryReader); + return newObj; + } + + public override void contributeToTreeView(TreeView treeView) { + TreeNode rootNode = new TreeNode(this.GetType().Name); + rootNode.Expand(); + rootNode.Nodes.Add("i_objectID = " + i_objectID); + rootNode.Nodes.Add("i_pageNum = " + i_pageNum); + rootNode.Nodes.Add("i_pageText = " + i_pageText); + treeView.Nodes.Add(rootNode); + } + } + + public class BookAddPage : Message { + public uint i_objectID; + + public static BookAddPage read(BinaryReader binaryReader) { + BookAddPage newObj = new BookAddPage(); + newObj.i_objectID = binaryReader.ReadUInt32(); + return newObj; + } + + public override void contributeToTreeView(TreeView treeView) { + TreeNode rootNode = new TreeNode(this.GetType().Name); + rootNode.Expand(); + rootNode.Nodes.Add("i_objectID = " + i_objectID); + treeView.Nodes.Add(rootNode); + } + } + + public class BookDeletePage : Message { + public uint i_objectID; + public int i_pageNum; + + public static BookDeletePage read(BinaryReader binaryReader) { + BookDeletePage newObj = new BookDeletePage(); + newObj.i_objectID = binaryReader.ReadUInt32(); + newObj.i_pageNum = binaryReader.ReadInt32(); + return newObj; + } + + public override void contributeToTreeView(TreeView treeView) { + TreeNode rootNode = new TreeNode(this.GetType().Name); + rootNode.Expand(); + rootNode.Nodes.Add("i_objectID = " + i_objectID); + rootNode.Nodes.Add("i_pageNum = " + i_pageNum); + treeView.Nodes.Add(rootNode); + } + } + + public class BookPageData : Message { + public uint i_objectID; + public int i_pageNum; + + public static BookPageData read(BinaryReader binaryReader) { + BookPageData newObj = new BookPageData(); + newObj.i_objectID = binaryReader.ReadUInt32(); + newObj.i_pageNum = binaryReader.ReadInt32(); + return newObj; + } + + public override void contributeToTreeView(TreeView treeView) { + TreeNode rootNode = new TreeNode(this.GetType().Name); + rootNode.Expand(); + rootNode.Nodes.Add("i_objectID = " + i_objectID); + rootNode.Nodes.Add("i_pageNum = " + i_pageNum); + treeView.Nodes.Add(rootNode); + } + } + + public class SetInscription : Message { + public uint i_objectID; + public PStringChar i_inscription; + + public static SetInscription read(BinaryReader binaryReader) { + SetInscription newObj = new SetInscription(); + newObj.i_objectID = binaryReader.ReadUInt32(); + newObj.i_inscription = PStringChar.read(binaryReader); + return newObj; + } + + public override void contributeToTreeView(TreeView treeView) { + TreeNode rootNode = new TreeNode(this.GetType().Name); + rootNode.Expand(); + rootNode.Nodes.Add("i_objectID = " + i_objectID); + rootNode.Nodes.Add("i_inscription = " + i_inscription); + treeView.Nodes.Add(rootNode); + } + } +} diff --git a/aclogview/Enums/Account.cs b/aclogview/Enums/Account.cs new file mode 100644 index 0000000..2485c95 --- /dev/null +++ b/aclogview/Enums/Account.cs @@ -0,0 +1,13 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +public enum SubscriptionStatus__guessedname { + No_Subscription, + AsheronsCall_Subscription, + DarkMajesty_Subscription, + ThroneOfDestiny_Subscription, + ThroneOfDestiny_Preordered +} diff --git a/aclogview/Enums/Allegiance.cs b/aclogview/Enums/Allegiance.cs new file mode 100644 index 0000000..9723fdd --- /dev/null +++ b/aclogview/Enums/Allegiance.cs @@ -0,0 +1,59 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +public enum AllegianceVersion { + Undef_AllegianceVersion, + SpokespersonAdded_AllegianceVersion, + PoolsAdded_AllegianceVersion, + MotdAdded_AllegianceVersion, + ChatRoomIDAdded_AllegianceVersion, + BannedCharactersAdded_AllegianceVersion, + MultipleAllegianceOfficersAdded_AllegianceVersion, + Bindstones_AllegianceVersion, + AllegianceName_AllegianceVersion, + OfficersTitlesAdded_AllegianceVersion, + LockedState_AllegianceVersion, + ApprovedVassal_AllegianceVersion, + Newest_AllegianceVersion = ApprovedVassal_AllegianceVersion +} + +public enum AllegianceIndex { + Undef_AllegianceIndex = 0, + LoggedIn_AllegianceIndex = (1 << 0), + Update_AllegianceIndex = (1 << 1), + HasAllegianceAge_AllegianceIndex = (1 << 2), + HasPackedLevel_AllegianceIndex = (1 << 3), + MayPassupExperience_AllegianceIndex = (1 << 4) +} + +public enum eAllegianceHouseAction { + Undef_AllegianceHouseAction, + CheckStatus_AllegianceHouseAction, + GuestOpen_AllegianceHouseAction, + GuestClose_AllegianceHouseAction, + StorageOpen_AllegianceHouseAction, + StorageClose_AllegianceHouseAction, + NumberOfActions_AllegianceHouseAction = StorageClose_AllegianceHouseAction +} + +public enum eAllegianceOfficerLevel { + Undef_AllegianceOfficerLevel, + Speaker_AllegianceOfficerLevel, + Seneschal_AllegianceOfficerLevel, + Castellan_AllegianceOfficerLevel, + NumberOfOfficerTitles_AllegianceOfficerLevel = Castellan_AllegianceOfficerLevel +} + +public enum eAllegianceLockAction { + Undef_AllegianceLockAction, + OffLock_AllegianceLockAction, + OnLock_AllegianceLockAction, + ToggleLock_AllegianceLockAction, + CheckLock_AllegianceLockAction, + CheckApproved_AllegianceLockAction, + ClearApproved_AllegianceLockAction, + NumberOfActions_AllegianceLockAction = ClearApproved_AllegianceLockAction +} diff --git a/aclogview/Enums/Animation.cs b/aclogview/Enums/Animation.cs new file mode 100644 index 0000000..638ce5b --- /dev/null +++ b/aclogview/Enums/Animation.cs @@ -0,0 +1,45 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace CAnimHook { + public enum AnimHookDir { + UNKNOWN_ANIMHOOK = -2, + BACKWARD_ANIMHOOK = -1, + BOTH_ANIMHOOK = 0, + FORWARD_ANIMHOOK = 1 + } + + public enum HookType__guessedname { + NOOP_HOOK, + SOUND_HOOK, + SOUND_TABLE_HOOK, + ATTACK_HOOK, + ANIMDONE_HOOK, + REPLACE_OBJECT_HOOK, + ETHEREAL_HOOK, + TRANSPARENT_PART_HOOK, + LUMINOUS_HOOK, + LUMINOUS_PART_HOOK, + DIFFUSE_HOOK, + DIFFUSE_PART_HOOK, + SCALE_HOOK, + CREATE_PARTICLE_HOOK, + DESTROY_PARTICLE_HOOK, + STOP_PARTICLE_HOOK, + NODRAW_HOOK, + DEFAULT_SCRIPT_HOOK, + DEFAULT_SCRIPT_PART_HOOK, + CALL_PES_HOOK, + TRANSPARENT_HOOK, + SOUND_TWEAKED_HOOK, + SET_OMEGA_HOOK, + TEXTURE_VELOCITY_HOOK, + TEXTURE_VELOCITY_PART_HOOK, + SET_LIGHT_HOOK, + CREATE_BLOCKING_PARTICLE_HOOK, + UNKNOWN_HOOK = -1 + } +} diff --git a/aclogview/Enums/Appraisal.cs b/aclogview/Enums/Appraisal.cs new file mode 100644 index 0000000..a5981a1 --- /dev/null +++ b/aclogview/Enums/Appraisal.cs @@ -0,0 +1,231 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +public enum ObjectSelectStatus { + Invalid_OSS, + ObjectOnscreen_OSS, + ObjectOffscreen_OSS, + ObjectNotFound_OSS +} + +public enum ObjectInfoEnum { + DEFAULT_OI = 0, + CONTACT_OI = (1 << 0), + ON_WALKABLE_OI = (1 << 1), + IS_VIEWER_OI = (1 << 2), + PATH_CLIPPED_OI = (1 << 3), + FREE_ROTATE_OI = (1 << 4), + // NOTE: Skip 1 + PERFECT_CLIP_OI = (1 << 6), + IS_IMPENETRABLE = (1 << 7), + IS_PLAYER = (1 << 8), + EDGE_SLIDE = (1 << 9), + IGNORE_CREATURES = (1 << 10), + IS_PK = (1 << 11), + IS_PKLITE = (1 << 12) +} + +public enum PKStatusEnum { + Undef_PKStatus = 0, + Protected_PKStatus = (1 << 0), + NPK_PKStatus = (1 << 1), + PK_PKStatus = (1 << 2), + Unprotected_PKStatus = (1 << 3), + RubberGlue_PKStatus = (1 << 4), + Free_PKStatus = (1 << 5), + PKLite_PKStatus = (1 << 6), + Creature_PKStatus = Unprotected_PKStatus, // 8 + Trap_PKStatus = Unprotected_PKStatus, // 8 + NPC_PKStatus = Protected_PKStatus, // 1 + Vendor_PKStatus = RubberGlue_PKStatus, // 16 + Baelzharon_PKStatus = Free_PKStatus // 32 +} + +public enum AppraisalLongDescDecorations { + LDDecoration_PrependWorkmanship = (1 << 0), + LDDecoration_PrependMaterial = (1 << 1), + LDDecoration_AppendGemInfo = (1 << 2) +} + +public enum CreatureType { + Invalid_CreatureType, + Olthoi_CreatureType, + Banderling_CreatureType, + Drudge_CreatureType, + Mosswart_CreatureType, + Lugian_CreatureType, + Tumerok_CreatureType, + Mite_CreatureType, + Tusker_CreatureType, + Phyntos_Wasp_CreatureType, + Rat_CreatureType, + Auroch_CreatureType, + Cow_CreatureType, + Golem_CreatureType, + Undead_CreatureType, + Gromnie_CreatureType, + Reedshark_CreatureType, + Armoredillo_CreatureType, + Fae_CreatureType, + Virindi_CreatureType, + Wisp_CreatureType, + Knathtead_CreatureType, + Shadow_CreatureType, + Mattekar_CreatureType, + Mumiyah_CreatureType, + Rabbit_CreatureType, + Sclavus_CreatureType, + Shallows_Shark_CreatureType, + Monouga_CreatureType, + Zefir_CreatureType, + Skeleton_CreatureType, + Human_CreatureType, + Shreth_CreatureType, + Chittick_CreatureType, + Moarsman_CreatureType, + Olthoi_Larvae_CreatureType, + Slithis_CreatureType, + Deru_CreatureType, + Fire_Elemental_CreatureType, + Snowman_CreatureType, + Unknown_CreatureType, + Bunny_CreatureType, + Lightning_Elemental_CreatureType, + Rockslide_CreatureType, + Grievver_CreatureType, + Niffis_CreatureType, + Ursuin_CreatureType, + Crystal_CreatureType, + Hollow_Minion_CreatureType, + Scarecrow_CreatureType, + Idol_CreatureType, + Empyrean_CreatureType, + Hopeslayer_CreatureType, + Doll_CreatureType, + Marionette_CreatureType, + Carenzi_CreatureType, + Siraluun_CreatureType, + Aun_Tumerok_CreatureType, + Hea_Tumerok_CreatureType, + Simulacrum_CreatureType, + Acid_Elemental_CreatureType, + Frost_Elemental_CreatureType, + Elemental_CreatureType, + Statue_CreatureType, + Wall_CreatureType, + Altered_Human_CreatureType, + Device_CreatureType, + Harbinger_CreatureType, + Dark_Sarcophagus_CreatureType, + Chicken_CreatureType, + Gotrok_Lugian_CreatureType, + Margul_CreatureType, + Bleached_Rabbit_CreatureType, + Nasty_Rabbit_CreatureType, + Grimacing_Rabbit_CreatureType, + Burun_CreatureType, + Target_CreatureType, + Ghost_CreatureType, + Fiun_CreatureType, + Eater_CreatureType, + Penguin_CreatureType, + Ruschk_CreatureType, + Thrungus_CreatureType, + Viamontian_Knight_CreatureType, + Remoran_CreatureType, + Swarm_CreatureType, + Moar_CreatureType, + Enchanted_Arms_CreatureType, + Sleech_CreatureType, + Mukkir_CreatureType, + Merwart_CreatureType, + Food_CreatureType, + Paradox_Olthoi_CreatureType, + Harvest_CreatureType, + Energy_CreatureType, + Apparition_CreatureType, + Aerbax_CreatureType, + Touched_CreatureType, + Blighted_Moarsman_CreatureType, + Gear_Knight_CreatureType, + Gurog_CreatureType, + A_nekshay_CreatureType +} + +public enum WeenieType { + Undef_WeenieType, + Generic_WeenieType, + Clothing_WeenieType, + MissileLauncher_WeenieType, + Missile_WeenieType, + Ammunition_WeenieType, + MeleeWeapon_WeenieType, + Portal_WeenieType, + Book_WeenieType, + Coin_WeenieType, + Creature_WeenieType, + Admin_WeenieType, + Vendor_WeenieType, + HotSpot_WeenieType, + Corpse_WeenieType, + Cow_WeenieType, + AI_WeenieType, + Machine_WeenieType, + Food_WeenieType, + Door_WeenieType, + Chest_WeenieType, + Container_WeenieType, + Key_WeenieType, + Lockpick_WeenieType, + PressurePlate_WeenieType, + LifeStone_WeenieType, + Switch_WeenieType, + PKModifier_WeenieType, + Healer_WeenieType, + LightSource_WeenieType, + Allegiance_WeenieType, + UNKNOWN__GUESSEDNAME32, // NOTE: Missing 1 + SpellComponent_WeenieType, + ProjectileSpell_WeenieType, + Scroll_WeenieType, + Caster_WeenieType, + Channel_WeenieType, + ManaStone_WeenieType, + Gem_WeenieType, + AdvocateFane_WeenieType, + AdvocateItem_WeenieType, + Sentinel_WeenieType, + GSpellEconomy_WeenieType, + LSpellEconomy_WeenieType, + CraftTool_WeenieType, + LScoreKeeper_WeenieType, + GScoreKeeper_WeenieType, + GScoreGatherer_WeenieType, + ScoreBook_WeenieType, + EventCoordinator_WeenieType, + Entity_WeenieType, + Stackable_WeenieType, + HUD_WeenieType, + House_WeenieType, + Deed_WeenieType, + SlumLord_WeenieType, + Hook_WeenieType, + Storage_WeenieType, + BootSpot_WeenieType, + HousePortal_WeenieType, + Game_WeenieType, + GamePiece_WeenieType, + SkillAlterationDevice_WeenieType, + AttributeTransferDevice_WeenieType, + Hooker_WeenieType, + AllegianceBindstone_WeenieType, + InGameStatKeeper_WeenieType, + AugmentationDevice_WeenieType, + SocialManager_WeenieType, + Pet_WeenieType, + PetDevice_WeenieType, + CombatPet_WeenieType +} diff --git a/aclogview/Enums/Character.cs b/aclogview/Enums/Character.cs new file mode 100644 index 0000000..9d30f82 --- /dev/null +++ b/aclogview/Enums/Character.cs @@ -0,0 +1,160 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +public enum PlayerOption { + AutoRepeatAttack_PlayerOption, + IgnoreAllegianceRequests_PlayerOption, + IgnoreFellowshipRequests_PlayerOption, + IgnoreTradeRequests_PlayerOption, + DisableMostWeatherEffects_PlayerOption, + PersistentAtDay_PlayerOption, + AllowGive_PlayerOption, + ViewCombatTarget_PlayerOption, + ShowTooltips_PlayerOption, + UseDeception_PlayerOption, + ToggleRun_PlayerOption, + StayInChatMode_PlayerOption, + AdvancedCombatUI_PlayerOption, + AutoTarget_PlayerOption, + VividTargetingIndicator_PlayerOption, + FellowshipShareXP_PlayerOption, + AcceptLootPermits_PlayerOption, + FellowshipShareLoot_PlayerOption, + FellowshipAutoAcceptRequests_PlayerOption, + SideBySideVitals_PlayerOption, + CoordinatesOnRadar_PlayerOption, + SpellDuration_PlayerOption, + DisableHouseRestrictionEffects_PlayerOption, + DragItemOnPlayerOpensSecureTrade_PlayerOption, + DisplayAllegianceLogonNotifications_PlayerOption, + UseChargeAttack_PlayerOption, + UseCraftSuccessDialog_PlayerOption, + HearAllegianceChat_PlayerOption, + DisplayDateOfBirth_PlayerOption, + DisplayAge_PlayerOption, + DisplayChessRank_PlayerOption, + DisplayFishingSkill_PlayerOption, + DisplayNumberDeaths_PlayerOption, + DisplayTimeStamps_PlayerOption, + SalvageMultiple_PlayerOption, + HearGeneralChat_PlayerOption, + HearTradeChat_PlayerOption, + HearLFGChat_PlayerOption, + HearRoleplayChat_PlayerOption, + AppearOffline_PlayerOption, + DisplayNumberCharacterTitles_PlayerOption, + MainPackPreferred_PlayerOption, + LeadMissileTargets_PlayerOption, + UseFastMissiles_PlayerOption, + FilterLanguage_PlayerOption, + ConfirmVolatileRareUse_PlayerOption, + HearSocietyChat_PlayerOption, + ShowHelm_PlayerOption, + DisableDistanceFog_PlayerOption, + UseMouseTurning_PlayerOption, + ShowCloak_PlayerOption, + LockUI_PlayerOption, + TotalNumberOfPlayerOptions_PlayerOption, + Invalid_PlayerOption = -1, +} + +public enum CharacterOption { + Undef_CharacterOption = 0, + // NOTE: Skip 1 + AutoRepeatAttack_CharacterOption = (1 << 1), + IgnoreAllegianceRequests_CharacterOption = (1 << 2), + IgnoreFellowshipRequests_CharacterOption = (1 << 3), + // NOTE: Skip 2 + AllowGive_CharacterOption = (1 << 6), + ViewCombatTarget_CharacterOption = (1 << 7), + ShowTooltips_CharacterOption = (1 << 8), + UseDeception_CharacterOption = (1 << 9), + ToggleRun_CharacterOption = (1 << 10), + StayInChatMode_CharacterOption = (1 << 11), + AdvancedCombatUI_CharacterOption = (1 << 12), + AutoTarget_CharacterOption = (1 << 13), + // NOTE: Skip 1 + VividTargetingIndicator_CharacterOption = (1 << 15), + DisableMostWeatherEffects_CharacterOption = (1 << 16), + IgnoreTradeRequests_CharacterOption = (1 << 17), + FellowshipShareXP_CharacterOption = (1 << 18), + AcceptLootPermits_CharacterOption = (1 << 19), + FellowshipShareLoot_CharacterOption = (1 << 20), + SideBySideVitals_CharacterOption = (1 << 21), + CoordinatesOnRadar_CharacterOption = (1 << 22), + SpellDuration_CharacterOption = (1 << 23), + // NOTE: Skip 1 + DisableHouseRestrictionEffects_CharacterOption = (1 << 25), + DragItemOnPlayerOpensSecureTrade_CharacterOption = (1 << 26), + DisplayAllegianceLogonNotifications_CharacterOption = (1 << 27), + UseChargeAttack_CharacterOption = (1 << 29), + AutoAcceptFellowRequest_CharacterOption = (1 << 29), + HearAllegianceChat_CharacterOption = (1 << 30), + UseCraftSuccessDialog_CharacterOption = (1 << 31), + Default_CharacterOption = AutoRepeatAttack_CharacterOption | IgnoreFellowshipRequests_CharacterOption | AllowGive_CharacterOption | ShowTooltips_CharacterOption | ToggleRun_CharacterOption | AutoTarget_CharacterOption | VividTargetingIndicator_CharacterOption | ToggleRun_CharacterOption | ToggleRun_CharacterOption | FellowshipShareXP_CharacterOption | CoordinatesOnRadar_CharacterOption | SpellDuration_CharacterOption | UseChargeAttack_CharacterOption | HearAllegianceChat_CharacterOption // 1355064650 +} + +public enum CharacterOptions2 { + Undef_CharacterOptions2 = 0, + PersistentAtDay_CharacterOptions2 = (1 << 0), + DisplayDateOfBirth_CharacterOptions2 = (1 << 1), + DisplayChessRank_CharacterOptions2 = (1 << 2), + DisplayFishingSkill_CharacterOptions2 = (1 << 3), + DisplayNumberDeaths_CharacterOptions2 = (1 << 4), + DisplayAge_CharacterOptions2 = (1 << 5), + TimeStamp_CharacterOptions2 = (1 << 6), + SalvageMultiple_CharacterOptions2 = (1 << 7), + HearGeneralChat_CharacterOptions2 = (1 << 8), + HearTradeChat_CharacterOptions2 = (1 << 9), + HearLFGChat_CharacterOptions2 = (1 << 10), + HearRoleplayChat_CharacterOptions2 = (1 << 11), + AppearOffline_CharacterOptions2 = (1 << 12), + DisplayNumberCharacterTitles_CharacterOptions2 = (1 << 13), + MainPackPreferred_CharacterOptions2 = (1 << 14), + LeadMissileTargets_CharacterOptions2 = (1 << 15), + UseFastMissiles_CharacterOptions2 = (1 << 16), + FilterLanguage_CharacterOptions2 = (1 << 17), + ConfirmVolatileRareUse_CharacterOptions2 = (1 << 18), + HearSocietyChat_CharacterOptions2 = (1 << 19), + ShowHelm_CharacterOptions2 = (1 << 20), + DisableDistanceFog_CharacterOptions2 = (1 << 21), + UseMouseTurning_CharacterOptions2 = (1 << 22), + ShowCloak_CharacterOptions2 = (1 << 23), + LockUI_CharacterOptions2 = (1 << 24), + Default_CharacterOptions2 = HearGeneralChat_CharacterOptions2 | HearTradeChat_CharacterOptions2 | HearLFGChat_CharacterOptions2 | LeadMissileTargets_CharacterOptions2 | ConfirmVolatileRareUse_CharacterOptions2 | ShowHelm_CharacterOptions2 | ShowCloak_CharacterOptions2 // 9733888 +} + +public enum SpellbookFilter { + Undef_SpellbookFilter = 0, + Creature_SpellbookFilter = (1 << 1), + Item_SpellbookFilter = (1 << 2), + Life_SpellbookFilter = (1 << 3), + War_SpellbookFilter = (1 << 4), + Level_1_SpellbookFilter = (1 << 5), + Level_2_SpellbookFilter = (1 << 6), + Level_3_SpellbookFilter = (1 << 7), + Level_4_SpellbookFilter = (1 << 8), + Level_5_SpellbookFilter = (1 << 9), + Level_6_SpellbookFilter = (1 << 10), + Level_7_SpellbookFilter = (1 << 11), + Level_8_SpellbookFilter = (1 << 12), + Level_9_SpellbookFilter = (1 << 13), + Void_SpellbookFilter = (1 << 14), + Default_SpellbookFilter = (1 << 15) +} + +namespace ACCharGenResult { + public enum PackVersion__guessedname { + CurrentPackVersion = 1, + OldestValidPackVersion = 1 + } + + public enum VersionInfo__guessedname { + InvalidVersion = 0, + SizeOfVersion = 4, + SizeOfChecksum = 4 + } +} diff --git a/aclogview/Enums/CharacterTitles.cs b/aclogview/Enums/CharacterTitles.cs new file mode 100644 index 0000000..4dcc71c --- /dev/null +++ b/aclogview/Enums/CharacterTitles.cs @@ -0,0 +1,813 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +public enum CharacterTitleTableVersion { + Undef_CharacterTitleTableVersion, + Initial_CharacterTitleTableVersion, + Current_CharacterTitleTableVersion = Initial_CharacterTitleTableVersion, +} + +public enum CharacterTitle { + ID_CharacterTitle_Invalid, + ID_CharacterTitle_Adventurer, + ID_CharacterTitle_Archer, + ID_CharacterTitle_Blademaster, + ID_CharacterTitle_Enchanter, + ID_CharacterTitle_Life_Mage, + ID_CharacterTitle_Sorcerer, + ID_CharacterTitle_Vagabond, + ID_CharacterTitle_Warrior, + ID_CharacterTitle_Bow_Hunter, + ID_CharacterTitle_Life_Caster, + ID_CharacterTitle_Soldier, + ID_CharacterTitle_Swashbuckler, + ID_CharacterTitle_War_Mage, + ID_CharacterTitle_Wayfarer, + ID_CharacterTitle_Abhorrent_Warrior, + ID_CharacterTitle_Alchemist, + ID_CharacterTitle_Annihilator, + ID_CharacterTitle_Apothecary, + ID_CharacterTitle_Arctic_Adventurer, + ID_CharacterTitle_Arctic_Mattekar_Annihilator, + ID_CharacterTitle_Artifex, + ID_CharacterTitle_Axe_Warrior, + ID_CharacterTitle_Ballisteer, + ID_CharacterTitle_Bane_of_the_Remoran, + ID_CharacterTitle_Blood_Shreth_Butcher, + ID_CharacterTitle_Bloodletter, + ID_CharacterTitle_Broodu_Killer, + ID_CharacterTitle_Browerk_Killer, + ID_CharacterTitle_Bug_Butcher, + ID_CharacterTitle_Bugstomper, + ID_CharacterTitle_Bunny_Master, + ID_CharacterTitle_Carenzi_Slayer, + ID_CharacterTitle_Chain_Breaker, + ID_CharacterTitle_Champion_of_Dereth, + ID_CharacterTitle_Champion_of_Sanamar, + ID_CharacterTitle_Champion_of_Silyun, + ID_CharacterTitle_Chef, + ID_CharacterTitle_Creature_Adept, + ID_CharacterTitle_Dagger_Fighter, + ID_CharacterTitle_Deadeye, + ID_CharacterTitle_Deathcap_Defeater, + ID_CharacterTitle_Defender_of_Dereth, + ID_CharacterTitle_Deliverer, + ID_CharacterTitle_Diplomat, + ID_CharacterTitle_Dire_Mattekar_Dispatcher, + ID_CharacterTitle_Duelist, + ID_CharacterTitle_Ebon_Gromnie_Eradicator, + ID_CharacterTitle_Engorged_Scourge, + ID_CharacterTitle_Evoker, + ID_CharacterTitle_Explorer, + ID_CharacterTitle_Exterminator, + ID_CharacterTitle_Fisherman, + ID_CharacterTitle_Fletcher, + ID_CharacterTitle_Floeshark_Flogger, + ID_CharacterTitle_Friend_of_Sanamar, + ID_CharacterTitle_Friend_of_Silyun, + ID_CharacterTitle_Gaerlan_Slayer, + ID_CharacterTitle_Gardener_Weeder, + ID_CharacterTitle_Glenden_Wood_Knight, + ID_CharacterTitle_Glenden_Wood_Militia, + ID_CharacterTitle_Golden_God, + ID_CharacterTitle_Grave_Robber, + ID_CharacterTitle_Guardian_of_Dereth, + ID_CharacterTitle_Gumshoe, + ID_CharacterTitle_Guppy_Master, + ID_CharacterTitle_Heart_Ripper, + ID_CharacterTitle_Hero_of_Dereth, + ID_CharacterTitle_Hero_of_Sanamar, + ID_CharacterTitle_Hero_of_Silyun, + ID_CharacterTitle_Honorary_Snowman, + ID_CharacterTitle_Honorary_Windreave, + ID_CharacterTitle_Hunter, + ID_CharacterTitle_Impaler, + ID_CharacterTitle_Insatiable_Slayer, + ID_CharacterTitle_Invaders_Bane, + ID_CharacterTitle_Iron_Chef, + ID_CharacterTitle_Iron_Spined_Chittick_Immolator, + ID_CharacterTitle_Item_Adept, + ID_CharacterTitle_Keeper_of_Dereth, + ID_CharacterTitle_Keerik_Killer, + ID_CharacterTitle_Kingslayer, + ID_CharacterTitle_Kiree_Killer, + ID_CharacterTitle_Knath_Andras_Assassinator, + ID_CharacterTitle_Lakeman, + ID_CharacterTitle_Life_Adept, + ID_CharacterTitle_Lightbringer, + ID_CharacterTitle_Mace_Warrior, + ID_CharacterTitle_Man_At_Arms_Thrasher, + ID_CharacterTitle_Master_Fletcher, + ID_CharacterTitle_Master_of_Slaughter, + ID_CharacterTitle_Master_of_Staves, + ID_CharacterTitle_Miner, + ID_CharacterTitle_Moarsman_Defiler, + ID_CharacterTitle_Morale_Smasher, + ID_CharacterTitle_Mosswart_Worshipper_Whipper, + ID_CharacterTitle_Mottled_Carenzi_Mauler, + ID_CharacterTitle_Mud_Slinger, + ID_CharacterTitle_Naughty_Skeleton_Snuffer, + ID_CharacterTitle_Olthoi_Ripper_Reducer, + ID_CharacterTitle_Paragon_of_Death, + ID_CharacterTitle_Philanthropist, + ID_CharacterTitle_Plate_Armoredillo_Punisher, + ID_CharacterTitle_Platinum_Prowler, + ID_CharacterTitle_Polar_Ursuin_Pounder, + ID_CharacterTitle_Polardillo_Pummeler, + ID_CharacterTitle_Pond_Scum, + ID_CharacterTitle_Pro_Fisherman, + ID_CharacterTitle_Projectilist, + ID_CharacterTitle_Pugilist, + ID_CharacterTitle_Queenslayer, + ID_CharacterTitle_Ravenous_Killer, + ID_CharacterTitle_Red_Fury, + ID_CharacterTitle_Reeshan_Killer, + ID_CharacterTitle_Rehir_Killer, + ID_CharacterTitle_Repugnant_Eater_Ripper, + ID_CharacterTitle_Resistance_Fighter, + ID_CharacterTitle_Resistance_Recruit, + ID_CharacterTitle_Servant_of_The_Deep, + ID_CharacterTitle_Sezzherei_Slayer, + ID_CharacterTitle_Shadow_Stalker, + ID_CharacterTitle_Shallows_Shark_Nemesis, + ID_CharacterTitle_Sharpshooter, + ID_CharacterTitle_Shellfish_Hater, + ID_CharacterTitle_Shield_of_Glenden, + ID_CharacterTitle_Shredder, + ID_CharacterTitle_Silver_Serf, + ID_CharacterTitle_Siraluun_Slasher, + ID_CharacterTitle_Skipper, + ID_CharacterTitle_Skullcrusher, + ID_CharacterTitle_Skullsplitter, + ID_CharacterTitle_Slicer, + ID_CharacterTitle_Sniper, + ID_CharacterTitle_Soldier_Slaughterer, + ID_CharacterTitle_Spear_Warrior, + ID_CharacterTitle_Spring_Cleaner, + ID_CharacterTitle_Staff_Warrior, + ID_CharacterTitle_Stonebreaker, + ID_CharacterTitle_Sureshot, + ID_CharacterTitle_Swordfighter, + ID_CharacterTitle_Theurgist, + ID_CharacterTitle_Thrungus_Reaper, + ID_CharacterTitle_Timberman, + ID_CharacterTitle_Tracker, + ID_CharacterTitle_Trapper, + ID_CharacterTitle_Tukora_Lieutenant_Trouncer, + ID_CharacterTitle_Unarmed_Brawler, + ID_CharacterTitle_Violator_Grievver_Vetoer, + ID_CharacterTitle_Voracious_Flayer, + ID_CharacterTitle_Voracious_Hunter, + ID_CharacterTitle_War_Adept, + ID_CharacterTitle_Warden_of_Dereth, + ID_CharacterTitle_Warlock, + ID_CharacterTitle_Warlord_of_Dereth, + ID_CharacterTitle_Warrior_Vanquisher, + ID_CharacterTitle_Wicked_Skeleton_Walloper, + ID_CharacterTitle_Windreave_Stalker, + ID_CharacterTitle_Worker_Obliterator, + ID_CharacterTitle_Dryreach_Militia, + ID_CharacterTitle_Honorary_Shadow_Hunter, + ID_CharacterTitle_Perforated_Knight, + UNKNOWN__GUESSEDNAME161, // NOTE: Missing 1 + ID_CharacterTitle_Pest_Control, + ID_CharacterTitle_Rat_Reaper, + ID_CharacterTitle_Nymph_Maniac, + ID_CharacterTitle_SimiuS, + ID_CharacterTitle_Second_Place_Lore_Quiz_Night, + ID_CharacterTitle_AC_Veteran, + ID_CharacterTitle_Aint_afraid_of_no_ghost, + ID_CharacterTitle_Aint_afraid_of_no_ghost_two, + ID_CharacterTitle_Aint_afraid_of_no_ghost_three, + ID_CharacterTitle_Ankle_Biter, + ID_CharacterTitle_Annoying_Furry_Talking_Animal, + ID_CharacterTitle_Archer_Assassin, + ID_CharacterTitle_Archmage, + ID_CharacterTitle_Asherons_Call_God, + ID_CharacterTitle_Avatar_of_Kain, + ID_CharacterTitle_Azure_Assailant, + ID_CharacterTitle_Baby_Bunny_Master, + ID_CharacterTitle_Baron_Oddity, + ID_CharacterTitle_Beginning_of_the_End, + ID_CharacterTitle_Best_Melee_in_DT, + ID_CharacterTitle_Big_Block, + ID_CharacterTitle_Big_Rocx, + ID_CharacterTitle_Blood, + ID_CharacterTitle_Bounty_Hunter, + ID_CharacterTitle_British_Tootsie, + ID_CharacterTitle_Bug_Bait, + ID_CharacterTitle_Bunny_Killer, + ID_CharacterTitle_Carebear_Stare, + ID_CharacterTitle_Certified_Ganksta, + ID_CharacterTitle_Chicken_Nugget, + ID_CharacterTitle_Chicken_Select, + ID_CharacterTitle_Chimaeras_Champion, + ID_CharacterTitle_Co_Monarch_of_TheChosen, + ID_CharacterTitle_Containment_Unit, + ID_CharacterTitle_Coolest_Title_Ever, + ID_CharacterTitle_Corrosive_Soul, + ID_CharacterTitle_Cow_Killer, + ID_CharacterTitle_Cowboy, + ID_CharacterTitle_Crystal_Lord_King, + ID_CharacterTitle_Cuddly_Kitten, + ID_CharacterTitle_Curmudgeons_Friend, + ID_CharacterTitle_Cursed_Adventurer, + ID_CharacterTitle_Dagger_Master, + ID_CharacterTitle_Dark_Sword_Lady, + ID_CharacterTitle_Darktides_Finest, + ID_CharacterTitle_Darktides_Most_Wanted, + ID_CharacterTitle_Dead_Meat, + ID_CharacterTitle_Deadly_Eggburt, + ID_CharacterTitle_Death_by_Default, + ID_CharacterTitle_Death_by_Pumpkin, + ID_CharacterTitle_Death_by_Sappho, + ID_CharacterTitle_Death_Specialist, + ID_CharacterTitle_Defender_of_Mr__P, + ID_CharacterTitle_Dereths_Gladiator, + ID_CharacterTitle_Dereths_Master_Dodger, + ID_CharacterTitle_Dev_Evader, + ID_CharacterTitle_Dev_Killer, + ID_CharacterTitle_Dev_Slayer, + ID_CharacterTitle_Double_Fashion_King, + ID_CharacterTitle_Double_Golem_Killer, + ID_CharacterTitle_Double_Survival_Champion, + ID_CharacterTitle_Dude_of_DOOM, + ID_CharacterTitle_Ecto_Cooler, + ID_CharacterTitle_Ecto_Cooler_two, + ID_CharacterTitle_Envoy_Slayer, + ID_CharacterTitle_Escapee_Killer, + ID_CharacterTitle_Evil_Toothfairy, + ID_CharacterTitle_Fancy_Title, + ID_CharacterTitle_Fashion_King, + ID_CharacterTitle_Fashion_Penguin_King, + ID_CharacterTitle_Fashion_Queen, + ID_CharacterTitle_Fashion_Victim, + ID_CharacterTitle_Fearless_Fighter, + ID_CharacterTitle_Flag_Boy, + ID_CharacterTitle_Frelorn_Slayer, + ID_CharacterTitle_Friend_to_Mr__P, + ID_CharacterTitle_Gangsta_Style, + ID_CharacterTitle_Gangster, + ID_CharacterTitle_Ghostbuster, + ID_CharacterTitle_Gimp, + ID_CharacterTitle_Gimp_Goddess, + ID_CharacterTitle_Gimpy_Mage_of_Might, + ID_CharacterTitle_Gladiator_Champion, + ID_CharacterTitle_Glowing_Archer, + ID_CharacterTitle_God_of_the_Swordsman, + ID_CharacterTitle_Golem_Killer, + ID_CharacterTitle_Golem_Slayer, + ID_CharacterTitle_Great_Pookie_Slayer, + ID_CharacterTitle_Guardian_Angel, + ID_CharacterTitle_Guardian_of_Arwic, + ID_CharacterTitle_Hamster_Herder, + ID_CharacterTitle_Hamster_Vitae, + ID_CharacterTitle_Have_Bunnies_Will_Travel, + ID_CharacterTitle_Have_Trike_Will_Babble, + ID_CharacterTitle_Hide_and_Seek_Specialist, + ID_CharacterTitle_Hollywood_Bud, + ID_CharacterTitle_Holtburg_Survival_Champion, + ID_CharacterTitle_Holtburgs_Survivor_Champion, + ID_CharacterTitle_Honorary_Pink_Eep, + ID_CharacterTitle_Hungry_Hungry_Hippo, + ID_CharacterTitle_Husband_of_Lynnie, + ID_CharacterTitle_Husbands_Healer, + ID_CharacterTitle_I_am_Big_PIMPIN, + ID_CharacterTitle_I_liked_dying, + ID_CharacterTitle_Jessica_Heart, + ID_CharacterTitle_King_of_all_that_is_Pumpkin, + ID_CharacterTitle_King_of_Caul, + ID_CharacterTitle_King_of_Darktide, + ID_CharacterTitle_King_of_Pierce_Diggys, + ID_CharacterTitle_Knight_Rider, + ID_CharacterTitle_Lady_of_the_Four_Towers, + ID_CharacterTitle_Lange_Gang, + ID_CharacterTitle_Level_Master, + ID_CharacterTitle_Leviathan, + ID_CharacterTitle_Leviathan_Slayer, + ID_CharacterTitle_Libe_Events_Manager, + ID_CharacterTitle_Life_Preserver, + ID_CharacterTitle_Live_Event_Coordinator, + ID_CharacterTitle_Live_Events_Manager, + ID_CharacterTitle_Live_Op_Coordinator, + ID_CharacterTitle_Lore_Second_Place, + ID_CharacterTitle_Lore_Second_Place_Quiz_Night, + ID_CharacterTitle_Lore_Champion___Quiz_Night, + ID_CharacterTitle_Lore_Champion_Quiz_Night, + ID_CharacterTitle_Lore_Master, + ID_CharacterTitle_Lore_Master_Quiz_Night, + ID_CharacterTitle_Lore_Master__Quiz_Night, + ID_CharacterTitle_Lore_Master_Second_Place, + ID_CharacterTitle_Lore_Master_of_Staves, + ID_CharacterTitle_Lots_of_Vitae, + ID_CharacterTitle_Lucky_Lady, + ID_CharacterTitle_Mad_Cow_Slayer, + ID_CharacterTitle_Mages_Assitant, + ID_CharacterTitle_Master_Tinkerer, + ID_CharacterTitle_Mayor_of_Ayan_Baqur, + ID_CharacterTitle_Minty_Fresh, + ID_CharacterTitle_Misunderstood_Pengy, + ID_CharacterTitle_Mom, + ID_CharacterTitle_Mommy_Pengy, + ID_CharacterTitle_Mosswart_Ally, + ID_CharacterTitle_Mr_Nice_Guy, + ID_CharacterTitle_Murderer, + ID_CharacterTitle_Murderer_two, + ID_CharacterTitle_Newby_Title, + ID_CharacterTitle_Nice_Blue_Lady, + ID_CharacterTitle_Number_one_draft_pick, + ID_CharacterTitle_Old_School, + ID_CharacterTitle_Paradox_Slayer, + ID_CharacterTitle_Patron_Saint_of_the_Lifestone, + ID_CharacterTitle_Peacebear, + ID_CharacterTitle_Penguin_Killer, + ID_CharacterTitle_Pig_Farmer, + ID_CharacterTitle_Pink_Bunny_Killer, + ID_CharacterTitle_Pink_Bunny_Master, + ID_CharacterTitle_Pink_Goddess, + ID_CharacterTitle_Pink_Lady, + ID_CharacterTitle_PK_Queen, + ID_CharacterTitle_Playa_Killa_King, + ID_CharacterTitle_Pokemon_Slayer, + ID_CharacterTitle_Pretty_Pumpkin, + ID_CharacterTitle_Prisoner, + ID_CharacterTitle_Protector_of_the_Cheese, + ID_CharacterTitle_Proton_Pack, + ID_CharacterTitle_Pumpkin_Slayer, + ID_CharacterTitle_Pumpkin_Stalker, + ID_CharacterTitle_Purple_Pengy, + ID_CharacterTitle_Pwner_of_Newbs, + ID_CharacterTitle_Queen_of_Brats, + ID_CharacterTitle_Queens_Crafter, + ID_CharacterTitle_Queens_Crafter_two, + ID_CharacterTitle_Queens_Pack_Rat, + ID_CharacterTitle_Queens_Packrat, + ID_CharacterTitle_Queens_Tinker, + ID_CharacterTitle_Rawr, + ID_CharacterTitle_Raynes_Mage_Pet, + ID_CharacterTitle_Reggae_Renegade, + ID_CharacterTitle_Ring_Bearer, + ID_CharacterTitle_Ring_ring_ring_Bananaphone, + ID_CharacterTitle_Road_Kill, + ID_CharacterTitle_Rolling_Death_Destroyer, + ID_CharacterTitle_Royal_Chef, + ID_CharacterTitle_Royal_Cook, + ID_CharacterTitle_Rugged, + ID_CharacterTitle_Sanitation_Engineer, + ID_CharacterTitle_Scarecrow_Slayer, + ID_CharacterTitle_Scary_Pumkpkin_Dominator, + ID_CharacterTitle_Scary_Pumpkin_Slayer, + ID_CharacterTitle_Sentinal, + ID_CharacterTitle_Sentry, + ID_CharacterTitle_Shadow_Child, + ID_CharacterTitle_Shadow_Hunter, + ID_CharacterTitle_Shadow_Slayer, + ID_CharacterTitle_Slayer_of_the_Great_Pookie, + ID_CharacterTitle_Slimer, + ID_CharacterTitle_Snazzy_Dresser, + ID_CharacterTitle_Soul_Man, + ID_CharacterTitle_Spooky_Title, + ID_CharacterTitle_Staff_Masta, + ID_CharacterTitle_Staypuffed_Mallow_Girl, + ID_CharacterTitle_Super_Gimped_Adventurer, + ID_CharacterTitle_Supercalifragilisticexpialidocious, + ID_CharacterTitle_Superman, + ID_CharacterTitle_Survivor_Champion, + ID_CharacterTitle_Sword_Scholar, + ID_CharacterTitle_Teh_Newb, + ID_CharacterTitle_Teh_Saint, + ID_CharacterTitle_Testing_Guy, + ID_CharacterTitle_The_Bait, + ID_CharacterTitle_The_Chosen_King, + ID_CharacterTitle_The_Come_Back_Kid, + ID_CharacterTitle_The_Forgotten, + ID_CharacterTitle_The_Gimped, + ID_CharacterTitle_The_Great_and_Powerful, + ID_CharacterTitle_The_Half_Fox, + ID_CharacterTitle_The_Noob, + ID_CharacterTitle_The_Purple_Fez, + ID_CharacterTitle_The_Pwnerer, + ID_CharacterTitle_The_Unknown_Pk, + ID_CharacterTitle_Thunder_Chicken_Slayer, + ID_CharacterTitle_TM_Killer, + ID_CharacterTitle_Tough_Guy, + ID_CharacterTitle_Tradesman_of_Auberean, + ID_CharacterTitle_Treasure_Hunter, + ID_CharacterTitle_Tremendous_Monouga_Master, + ID_CharacterTitle_Triple_Golem_Killer, + ID_CharacterTitle_Turbine_Slayer, + ID_CharacterTitle_Twins_of_Terror, + ID_CharacterTitle_Uberest_Noob_on_Frostfell, + ID_CharacterTitle_Underworld_Thugg, + ID_CharacterTitle_Viamontian_Slayer, + ID_CharacterTitle_Vitae_King, + ID_CharacterTitle_Vitae_Vixen, + ID_CharacterTitle_Vixen_of_Vitae, + ID_CharacterTitle_Wabbit_Bait, + ID_CharacterTitle_Wabbit_Killer, + ID_CharacterTitle_Wandering_Fool, + ID_CharacterTitle_Wardens_Assistant, + ID_CharacterTitle_Wardens_Thug, + ID_CharacterTitle_Wimp, + ID_CharacterTitle_Wolfpack_Crafter, + ID_CharacterTitle_Wonder_Woman, + ID_CharacterTitle_Ya_got_served, + ID_CharacterTitle_GIMP_caps, + ID_CharacterTitle_Wardens_Assistant_two, + ID_CharacterTitle_Supreme_Bunny_Master, + ID_CharacterTitle_Guardian_of_the_Dark, + ID_CharacterTitle_Aprils_Fool, + ID_CharacterTitle_Ulgrims_Eep, + ID_CharacterTitle_Mukkir_Masher, + ID_CharacterTitle_Harbingers_Bane, + ID_CharacterTitle_Master_of_the_Elements, + ID_CharacterTitle_Killcranes_Ally, + ID_CharacterTitle_Apprentice_Shadow_Hunter, + ID_CharacterTitle_Squire_of_the_Golden_Flame, + ID_CharacterTitle_Knight_of_the_Golden_Flame, + ID_CharacterTitle_Knight_of_the_Whispering_Blade, + ID_CharacterTitle_The_Black_Spear, + UNKNOWN__GUESSEDNAME419, // NOTE: Missing 1 + ID_CharacterTitle_Carraidas_Avenger, + ID_CharacterTitle_Paragon_of_the_Whispering_Blade, + ID_CharacterTitle_Paragon_of_the_Rossu_Morta, + ID_CharacterTitle_Chosen_of_Varicci, + ID_CharacterTitle_Chosen_of_Elysa, + ID_CharacterTitle_Small_Mukkir_Squasher, + ID_CharacterTitle_Blood_Warrior, + ID_CharacterTitle_Strategist, + ID_CharacterTitle_War_Beast, + ID_CharacterTitle_Champion_of_Daemal, + ID_CharacterTitle_Hero_of_the_Golden_Flame, + ID_CharacterTitle_Slayer_of_the_Black_Spear, + UNKNOWN__GUESSEDNAME432, // NOTE: Missing 1 + ID_CharacterTitle_Obviously_Bored, + ID_CharacterTitle_Zefir_Zapper, + ID_CharacterTitle_Tusker_Blight, + ID_CharacterTitle_Elemental_Eradicator, + ID_CharacterTitle_Expert_Banished_Hunter, + ID_CharacterTitle_Expert_Fallen_Hunter, + ID_CharacterTitle_Elite_Head_Hunter, + ID_CharacterTitle_Friend_of_the_Frostglaive, + ID_CharacterTitle_Squire_of_New_Viamont, + ID_CharacterTitle_Reanimator, + ID_CharacterTitle_Zombie_Incursion_Survivor, + ID_CharacterTitle_Ulgrims_Drinking_Buddy, + ID_CharacterTitle_Master_of_the_Porcelain_Altar, + ID_CharacterTitle_Master_of_the_Mystical_Mug, + ID_CharacterTitle_Colosseum_Champion, + ID_CharacterTitle_Titan, + ID_CharacterTitle_Colossus, + ID_CharacterTitle_Master_Gladiator, + ID_CharacterTitle_Fearless, + ID_CharacterTitle_Lord_of_the_Arena, + ID_CharacterTitle_Ring_Master, + ID_CharacterTitle_Pit_Fighter, + ID_CharacterTitle_Myrmidon, + ID_CharacterTitle_Hostile_Combatant, + ID_CharacterTitle_Survivalist, + ID_CharacterTitle_Warrior_of_the_Seventh_Circle, + ID_CharacterTitle_Gladiator, + ID_CharacterTitle_Contender, + ID_CharacterTitle_Drudge_Dread, + ID_CharacterTitle_Arena_Custodian, + ID_CharacterTitle_Arena_Rat, + ID_CharacterTitle_Scrapper, + ID_CharacterTitle_Champion_Ring_III, + ID_CharacterTitle_Champion_Ring_V, + ID_CharacterTitle_Champion_Ring_VI, + ID_CharacterTitle_Champion_Ring_VII, + ID_CharacterTitle_Champion_Ring_XII, + ID_CharacterTitle_Master_Champion_Ring_X, + ID_CharacterTitle_Ruuk_Ally, + ID_CharacterTitle_Seeker_of_Asheron, + ID_CharacterTitle_Seeker_of_Torgluuk, + ID_CharacterTitle_Portal_Ritualist, + ID_CharacterTitle_Ranger_Ruuk, + ID_CharacterTitle_Basher_Slasher, + ID_CharacterTitle_Guruk_Hunter, + ID_CharacterTitle_Dead_Eye_for_the_Colossi, + ID_CharacterTitle_Fiendish_Huntsman, + ID_CharacterTitle_Monster_Killer, + ID_CharacterTitle_Bosh_Bosh_Kibosh, + ID_CharacterTitle_Mushroom_Collector, + ID_CharacterTitle_Fungal_Farmer, + ID_CharacterTitle_Mushroom_Man, + ID_CharacterTitle_Fungi, + ID_CharacterTitle_Mushroom_King, + ID_CharacterTitle_Thrungamandius, + ID_CharacterTitle_Initiate_of_the_Blade, + ID_CharacterTitle_Torgluuks_Liberator, + ID_CharacterTitle_Burun_Liberator, + ID_CharacterTitle_Asherons_Savior, + ID_CharacterTitle_Asherons_Defender, + UNKNOWN__GUESSEDNAME493, // NOTE: Missing 1 + ID_CharacterTitle_Fuzzy_Bunny_Slayer, + ID_CharacterTitle_Moar_Hunter, + ID_CharacterTitle_Spiketooth_Slayer, + ID_CharacterTitle_Tower_Guardian_Architect, + ID_CharacterTitle_Artisan_of_the_Flame_and_Light, + ID_CharacterTitle_Guardian_of_the_Tower, + ID_CharacterTitle_Cragstone_Militia, + ID_CharacterTitle_Cragstone_Knight, + ID_CharacterTitle_Guardian_of_Cragstone, + ID_CharacterTitle_Knight_of_the_Windmill, + ID_CharacterTitle_Hero_Of_House_Mhoire, + ID_CharacterTitle_Lady_Tairlas_Champion, + ID_CharacterTitle_Royal_Investigator, + ID_CharacterTitle_Wanga_Fighter, + ID_CharacterTitle_Hoogans_Hero, + ID_CharacterTitle_Cragstone_Firefighter, + UNKNOWN__GUESSEDNAME510, // NOTE: Missing 1 + ID_CharacterTitle_Stalker_Stalker, + ID_CharacterTitle_Ravenous, + ID_CharacterTitle_Altered_Hunter, + ID_CharacterTitle_Augmented_Hunter, + ID_CharacterTitle_Drudge_Doom, + ID_CharacterTitle_Defender_of_Kryst, + ID_CharacterTitle_Paradox_touched_Queenslayer, + ID_CharacterTitle_Amelias_Caretaker, + ID_CharacterTitle_Prodigal_Tusker_Slayer, + ID_CharacterTitle_Mudmouths_Bane, + ID_CharacterTitle_Oolutangas_Bane, + ID_CharacterTitle_Prodigal_Shadow_Slayer, + ID_CharacterTitle_Prodigal_Harbinger_Slayer, + ID_CharacterTitle_Blood_Seeker, + ID_CharacterTitle_Storm_Rider, + ID_CharacterTitle_Meddler, + ID_CharacterTitle_Vile_Betrayer, + ID_CharacterTitle_Spy, + ID_CharacterTitle_Slithis_Slayer, + ID_CharacterTitle_Chosen_of_the_Rift, + ID_CharacterTitle_Rift_Shifter, + ID_CharacterTitle_Rift_Walker, + ID_CharacterTitle_Reef_Builder, + ID_CharacterTitle_Reef_Breaker, + ID_CharacterTitle_Crypt_Rat, + ID_CharacterTitle_Grave_Stalker, + ID_CharacterTitle_Bone_Breaker, + ID_CharacterTitle_Crypt_Creeper, + ID_CharacterTitle_Tomb_Raider, + ID_CharacterTitle_Follower_of_the_Vine, + ID_CharacterTitle_Harvester, + ID_CharacterTitle_Harvester_Harvester, + ID_CharacterTitle_Harvester_Harvester_Harvester, + ID_CharacterTitle_Pumpkin_Throne_Usurper, + ID_CharacterTitle_Death_Knight, + ID_CharacterTitle_NullTitle, + ID_CharacterTitle_Tracker_Guardian, + ID_CharacterTitle_Dojiro_Sangis_Savior, + ID_CharacterTitle_Master_of_the_Hunt, + ID_CharacterTitle_Initiate_of_the_Hunt, + ID_CharacterTitle_Apprentice_of_the_Hunt, + ID_CharacterTitle_Disciple_of_the_Hunt, + ID_CharacterTitle_Seeker_of_the_Hunt, + ID_CharacterTitle_Champion_of_the_Hunt, + ID_CharacterTitle_Guardian_of_Linvak_Tukal, + ID_CharacterTitle_Unwitting_Participant, + ID_CharacterTitle_Friend_of_Rheaga, + ID_CharacterTitle_Slayer_of_Rheaga, + ID_CharacterTitle_Protector_of_the_Past, + ID_CharacterTitle_Warrior_of_the_Past, + ID_CharacterTitle_Anthropologist, + ID_CharacterTitle_Gold_Farmer, + ID_CharacterTitle_Third_Eye_Blinder, + ID_CharacterTitle_Dire_Drudge_Decapitator, + ID_CharacterTitle_Renegade_Hunter, + ID_CharacterTitle_Banderling_Bully, + ID_CharacterTitle_Xenophobic, + ID_CharacterTitle_Shadow_Sunderer, + ID_CharacterTitle_Dire_Huntsman, + ID_CharacterTitle_Game_Warden, + ID_CharacterTitle_Honorary_Rea_of_the_Aun, + ID_CharacterTitle_Hope_of_the_Past, + ID_CharacterTitle_Beacon_of_Hope, + ID_CharacterTitle_Aerbaxs_Bane, + ID_CharacterTitle_Aerbax_Slayer, + ID_CharacterTitle_Jesters_Emancipator, + ID_CharacterTitle_Jesters_Fool, + ID_CharacterTitle_Jesters_Accomplice, + ID_CharacterTitle_Honorary_Burun_Scout, + ID_CharacterTitle_Marble_Wrangler, + ID_CharacterTitle_Secret_Keeper, + ID_CharacterTitle_Jesters_Little_Helper, + ID_CharacterTitle_Hard_To_Kill, + ID_CharacterTitle_Expendable, + ID_CharacterTitle_Novice_of_the_Sea, + ID_CharacterTitle_Acolyte_of_the_Sea, + ID_CharacterTitle_Minister_of_the_Sea, + ID_CharacterTitle_Defender_of_the_Sea, + ID_CharacterTitle_Champion_of_the_Sea, + ID_CharacterTitle_Master_of_the_Sea, + ID_CharacterTitle_DefeaterOfTheBlight, + ID_CharacterTitle_Champion_of_the_Aerlinthe_Node, + ID_CharacterTitle_Champion_of_the_Amun_Node, + ID_CharacterTitle_Champion_of_the_Esper_Node, + ID_CharacterTitle_Champion_of_the_Halaetan_Node, + ID_CharacterTitle_Champion_of_the_Linvak_Node, + ID_CharacterTitle_Champion_of_the_Obsidian_Node, + UNKNOWN__GUESSEDNAME598, // NOTE: Missing 1 + ID_CharacterTitle_Ulgrims_Happy_Hundredth, + ID_CharacterTitle_Plucker_of_Eyes, + ID_CharacterTitle_Warden_of_the_Burning_Wood, + ID_CharacterTitle_Tough_Tough, + ID_CharacterTitle_Archaeologist, + ID_CharacterTitle_Hero_of_Woe, + ID_CharacterTitle_Defender_of_Silyun, + ID_CharacterTitle_Memorial_Champion, + ID_CharacterTitle_Thane_of_Colier, + ID_CharacterTitle_Guardian_of_the_Keep, + ID_CharacterTitle_Warrior_of_the_Crater_Lake, + UNKNOWN__GUESSEDNAME610, // NOTE: Missing 1 + ID_CharacterTitle_Arwician, + ID_CharacterTitle_Desert_Warrior, + ID_CharacterTitle_Mayoi_Protector, + ID_CharacterTitle_Stone_Collector, + ID_CharacterTitle_Rock_Star, + ID_CharacterTitle_Rock_Hound, + ID_CharacterTitle_Warrior_of_Woe, + ID_CharacterTitle_Has_way_too_much_time, + ID_CharacterTitle_Champion_Immemorial, + ID_CharacterTitle_Colier_Miner, + ID_CharacterTitle_Legionnaire, + ID_CharacterTitle_Volcanologist, + ID_CharacterTitle_Hilltop_Defender, + ID_CharacterTitle_Arwic_Noble, + ID_CharacterTitle_Zharalim, + ID_CharacterTitle_Samurai, + ID_CharacterTitle_Guardian_in_the_Patriarch_Raids, + ID_CharacterTitle_Warden_in_the_Patriarch_Raids, + ID_CharacterTitle_Hero_of_the_Patriarch_Raids, + ID_CharacterTitle_Marked_by_the_Patriarchs, + UNKNOWN__GUESSEDNAME631, // NOTE: Missing 1 + UNKNOWN__GUESSEDNAME632, // NOTE: Missing 1 + UNKNOWN__GUESSEDNAME633, // NOTE: Missing 1 + UNKNOWN__GUESSEDNAME634, // NOTE: Missing 1 + UNKNOWN__GUESSEDNAME635, // NOTE: Missing 1 + UNKNOWN__GUESSEDNAME636, // NOTE: Missing 1 + ID_CharacterTitle_Cathedrals_Champion, + ID_CharacterTitle_Asherons_Militia, + ID_CharacterTitle_Minik_Ras_Bane, + ID_CharacterTitle_Kazyk_Ris_Bane, + ID_CharacterTitle_Nivinizks_Bane, + ID_CharacterTitle_Minik_Ras_Nemesis, + ID_CharacterTitle_Kazyk_Ris_Nemesis, + ID_CharacterTitle_Nivinizks_Nemesis, + ID_CharacterTitle_Aubereans_Sentinel, + ID_CharacterTitle_Dereths_Elite, + ID_CharacterTitle_Defender_of_the_Deru, + ID_CharacterTitle_Bane_of_the_Blessed, + ID_CharacterTitle_Negotiator, + ID_CharacterTitle_Bane_of_the_Blight, + ID_CharacterTitle_Gifted, + ID_CharacterTitle_Seasonal_Seeker, + ID_CharacterTitle_Amateur_Explorer, + ID_CharacterTitle_Experienced_Explorer, + ID_CharacterTitle_Adept_Explorer, + ID_CharacterTitle_Master_Explorer, + ID_CharacterTitle_Elite_Explorer, + ID_CharacterTitle_Mountain_Climber, + ID_CharacterTitle_Daredevil, + ID_CharacterTitle_Sky_Diver, + ID_CharacterTitle_Spelunker, + ID_CharacterTitle_Party_Goer, + ID_CharacterTitle_Crater_Crasher, + ID_CharacterTitle_Tactical_Aid, + ID_CharacterTitle_True_Tactician, + ID_CharacterTitle_Tactical_Fantastical, + ID_CharacterTitle_Fire_of_the_Tanada, + ID_CharacterTitle_Crystalline_Adventurer, + ID_CharacterTitle_Wisp_Whipper, + ID_CharacterTitle_Burning_Soul, + ID_CharacterTitle_Frozen_Fighter, + ID_CharacterTitle_Dedicated, + ID_CharacterTitle_Assassin, + ID_CharacterTitle_Death_Dealer, + ID_CharacterTitle_Bridge_Jumper, + ID_CharacterTitle_Sure_Step, + ID_CharacterTitle_Player_Slayer, + ID_CharacterTitle_Bathed_in_Blood, + ID_CharacterTitle_I_Am_Darktide, + ID_CharacterTitle_Darkness_in_the_Light, + ID_CharacterTitle_Beginnings_End, + ID_CharacterTitle_Nexus_Crawler, + ID_CharacterTitle_Selfless_Soul, + ID_CharacterTitle_Timeless_Adventurer, + ID_CharacterTitle_Virindi_Informer, + ID_CharacterTitle_No_Cage_Could_Hold_Me, + ID_CharacterTitle_All_for_One, + ID_CharacterTitle_One_for_All, + ID_CharacterTitle_Jack_O_All_Trades, + ID_CharacterTitle_Knight_of_the_Northeast_Tower, + ID_CharacterTitle_Knight_of_the_Northwest_Tower, + ID_CharacterTitle_Knight_of_the_Southeast_Tower, + ID_CharacterTitle_Knight_of_the_Southwest_Tower, + ID_CharacterTitle_Knight_of_the_Mhoire_Throne, + ID_CharacterTitle_Historian_of_the_Mhoire_Throne, + ID_CharacterTitle_Champion_of_House_Mhoire, + ID_CharacterTitle_Swordbearer_of_House_Mhoire, + ID_CharacterTitle_Archmage_of_House_Mhoire, + ID_CharacterTitle_Seeker_of_Castle_Mhoire, + ID_CharacterTitle_Steward_of_Castle_Mhoire, + ID_CharacterTitle_Golden_Gear_Crafter, + ID_CharacterTitle_Ally_of_the_Gold_Primus, + ID_CharacterTitle_Gear_Knight_Assassin, + ID_CharacterTitle_Gear_Knight_Recruiter, + ID_CharacterTitle_Gear_Knight_Emissary, + ID_CharacterTitle_Menhir_Seeker, + ID_CharacterTitle_Mana_Field_Finder, + ID_CharacterTitle_Assistants_Assistant, + ID_CharacterTitle_Arcanum_Adventurer, + ID_CharacterTitle_Gear_Knight_Defender, + ID_CharacterTitle_Ripper, + ID_CharacterTitle_Acid_Spitter, + ID_CharacterTitle_Bloodstone_Hunter, + ID_CharacterTitle_Guiding_Light, + ID_CharacterTitle_Clouded_Soul, + ID_CharacterTitle_Undercover_of_Darkness, + ID_CharacterTitle_Brought_to_Light, + UNKNOWN__GUESSEDNAME718, // NOTE: Missing 1 + ID_CharacterTitle_Illuminating_the_Shadows, + ID_CharacterTitle_Exploring_Archaeologist, + ID_CharacterTitle_Contract_Killer, + ID_CharacterTitle_Shadow_Puppet, + ID_CharacterTitle_Hopebringer, + ID_CharacterTitle_In_the_Dark, + UNKNOWN__GUESSEDNAME725, // NOTE: Missing 1 + ID_CharacterTitle_Searching_Shadows, + ID_CharacterTitle_Shadow_Soldier, + ID_CharacterTitle_Bright_Knight, + ID_CharacterTitle_Merciful_Killer, + ID_CharacterTitle_Soul_Siphon, + ID_CharacterTitle_The_TouTou_Terror, + ID_CharacterTitle_Double_Agent, + ID_CharacterTitle_Duleing_with_the_Dark, + ID_CharacterTitle_Creature_of_Chaos, + ID_CharacterTitle_Conspirator, + ID_CharacterTitle_Hero_of_the_Night, + ID_CharacterTitle_Master_of_the_Twisted_Word, + ID_CharacterTitle_The_Nightmare_Lord, + ID_CharacterTitle_The_Nightmare_Mage, + ID_CharacterTitle_The_Twisted_Weaver, + ID_CharacterTitle_Lord_of_Dark_Dreams, + UNKNOWN__GUESSEDNAME742, // NOTE: Missing 1 + ID_CharacterTitle_The_Dark_Dreamwalker, + UNKNOWN__GUESSEDNAME744, // NOTE: Missing 1 + ID_CharacterTitle_The_Dreamslayer, + ID_CharacterTitle_The_Nightmare_Stalker, + UNKNOWN__GUESSEDNAME747, // NOTE: Missing 1 + ID_CharacterTitle_The_Thought_Spiral, + UNKNOWN__GUESSEDNAME749, // NOTE: Missing 1 + UNKNOWN__GUESSEDNAME750, // NOTE: Missing 1 + ID_CharacterTitle_Master_of_the_Oubliette, + UNKNOWN__GUESSEDNAME751, // NOTE: Missing 1 + ID_CharacterTitle_The_Restless, + ID_CharacterTitle_Fiery_Spirit, + ID_CharacterTitle_Icy_Veins, + ID_CharacterTitle_Shocking_Disposition, + ID_CharacterTitle_Acidic_Soul, + ID_CharacterTitle_Grounded_Morals, + ID_CharacterTitle_Darkened_Heart, + ID_CharacterTitle_The_True_Emperor, + ID_CharacterTitle_Bearer_of_Darkness, + UNKNOWN__GUESSEDNAME762, // NOTE: Missing 1 + ID_CharacterTitle_Healer_Ritualist, + ID_CharacterTitle_Vanquisher_of_the_Titan, + ID_CharacterTitle_Derethian_Newbie, + ID_CharacterTitle_Novice_Wanderer, + ID_CharacterTitle_Notable_Citizen, + ID_CharacterTitle_Adept_Adventurer, + ID_CharacterTitle_Intrepid_Explorer, + ID_CharacterTitle_Supreme_Soldier, + ID_CharacterTitle_Epic_Warrior, + ID_CharacterTitle_Paragon_of_New_Aluvia, + ID_CharacterTitle_An_Auberean_Legend, + ID_CharacterTitle_Heretic, + ID_CharacterTitle_Captain, + ID_CharacterTitle_Pet_Savior, + ID_CharacterTitle_Avalanche_Avoider, + ID_CharacterTitle_Liberator_of_Uziz, + ID_CharacterTitle_Out_of_Tune, + ID_CharacterTitle_Hive_Queenslayer, + ID_CharacterTitle_Eviscerator_Decimator, + ID_CharacterTitle_Ultimate_Warrior, + ID_CharacterTitle_Stone_Cold_Killer, + ID_CharacterTitle_Queller_of_Rage, + ID_CharacterTitle_Ender_of_Torment, + ID_CharacterTitle_Controller_of_Emotions, + ID_CharacterTitle_Rynthid_Ravager, + ID_CharacterTitle_Lothus_Servitor, + ID_CharacterTitle_Ally_of_the_Lothus, + ID_CharacterTitle_Ally_of_the_Council, + ID_CharacterTitle_Emotional_Wreck, + ID_CharacterTitle_Minion_Marauder, + ID_CharacterTitle_Rynthid_Wrecker, + ID_CharacterTitle_Night_Owl, + ID_CharacterTitle_Mender_of_the_Rift, + ID_CharacterTitle_Sorcerer_Slayer, + ID_CharacterTitle_Rage_Quitter, + ID_CharacterTitle_Purifier +} diff --git a/aclogview/Enums/Chat.cs b/aclogview/Enums/Chat.cs new file mode 100644 index 0000000..0f0a06d --- /dev/null +++ b/aclogview/Enums/Chat.cs @@ -0,0 +1,48 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +public enum eChatTypes { + eTextTypeDefault, + eTextTypeAllChannels, + eTextTypeSpeech, + eTextTypeSpeechDirect, + eTextTypeSpeechDirectSend, + eTextTypeSystemSvent, + eTextTypeCombat, + eTextTypeMagic, + eTextTypeChannel, + eTextTypeChannelCend, + eTextTypeSocialChannel, + eTextTypeSocialChannelSend, + eTextTypeEmote, + eTextTypeAdvancement, + eTextTypeAbuseChannel, + eTextTypeHelpChannel, + eTextTypeAppraisalChannel, + eTextTypeMagicCastingChannel, + eTextTypeAllegienceChannel, + eTextTypeFellowshipChannel, + eTextTypeWorld_broadcast, + eTextTypeCombatEnemy, + eTextTypeCombatSelf, + eTextTypeRecall, + eTextTypeCraft, + eTextTypeTotalNumChannels +} + +public enum ChatTypeEnum { + Undef_ChatTypeEnum, + Allegiance_ChatTypeEnum, + General_ChatTypeEnum, + Trade_ChatTypeEnum, + LFG_ChatTypeEnum, + Roleplay_ChatTypeEnum, + Society_ChatTypeEnum, + SocietyCelHan_ChatTypeEnum, + SocietyEldWeb_ChatTypeEnum, + SocietyRadBlo_ChatTypeEnum, + Olthoi_ChatTypeEnum +} diff --git a/aclogview/Enums/Chess.cs b/aclogview/Enums/Chess.cs new file mode 100644 index 0000000..62205fa --- /dev/null +++ b/aclogview/Enums/Chess.cs @@ -0,0 +1,15 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +public enum MoveType { + MoveType_Invalid, + MoveType_Pass, + MoveType_Resign, + MoveType_Stalemate, + MoveType_Grid, + MoveType_FromTo, + MoveType_SelectedPiece +} diff --git a/aclogview/Enums/Combat.cs b/aclogview/Enums/Combat.cs new file mode 100644 index 0000000..40f072a --- /dev/null +++ b/aclogview/Enums/Combat.cs @@ -0,0 +1,113 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +public enum COMBAT_MODE { + UNDEF_COMBAT_MODE = 0, + NONCOMBAT_COMBAT_MODE = (1 << 0), + MELEE_COMBAT_MODE = (1 << 1), + MISSILE_COMBAT_MODE = (1 << 2), + MAGIC_COMBAT_MODE = (1 << 3), + VALID_COMBAT_MODES = NONCOMBAT_COMBAT_MODE | MELEE_COMBAT_MODE | MISSILE_COMBAT_MODE | MAGIC_COMBAT_MODE, // 15 + COMBAT_COMBAT_MODE = MELEE_COMBAT_MODE | MISSILE_COMBAT_MODE | MAGIC_COMBAT_MODE // 14 +} + +public enum CombatStyle { + Undef_CombatStyle = 0, + Unarmed_CombatStyle = (1 << 0), + OneHanded_CombatStyle = (1 << 1), + OneHandedAndShield_CombatStyle = (1 << 2), + TwoHanded_CombatStyle = (1 << 3), + Bow_CombatStyle = (1 << 4), + Crossbow_CombatStyle = (1 << 5), + Sling_CombatStyle = (1 << 6), + ThrownWeapon_CombatStyle = (1 << 7), + DualWield_CombatStyle = (1 << 8), + Magic_CombatStyle = (1 << 9), + Atlatl_CombatStyle = (1 << 10), + ThrownShield_CombatStyle = (1 << 11), + Reserved1_CombatStyle = (1 << 12), + Reserved2_CombatStyle = (1 << 13), + Reserved3_CombatStyle = (1 << 14), + Reserved4_CombatStyle = (1 << 15), + StubbornMagic_CombatStyle = (1 << 16), + StubbornProjectile_CombatStyle = (1 << 17), + StubbornMelee_CombatStyle = (1 << 18), + StubbornMissile_CombatStyle = (1 << 19), + Melee_CombatStyles = Unarmed_CombatStyle | OneHanded_CombatStyle | OneHandedAndShield_CombatStyle | TwoHanded_CombatStyle | DualWield_CombatStyle, // 271 + Missile_CombatStyles = Bow_CombatStyle | Crossbow_CombatStyle | Sling_CombatStyle | ThrownWeapon_CombatStyle | Atlatl_CombatStyle | ThrownShield_CombatStyle, // 3312 + Magic_CombatStyles = Magic_CombatStyle, // 512 + All_CombatStyle = 65535 +} + +public enum BODY_HEIGHT { + UNDEF_BODY_HEIGHT, + HIGH_BODY_HEIGHT, + MEDIUM_BODY_HEIGHT, + LOW_BODY_HEIGHT, + NUM_BODY_HEIGHTS +} + +public enum DAMAGE_TYPE { + UNDEF_DAMAGE_TYPE = 0, + SLASH_DAMAGE_TYPE = (1 << 0), + PIERCE_DAMAGE_TYPE = (1 << 1), + BLUDGEON_DAMAGE_TYPE = (1 << 2), + COLD_DAMAGE_TYPE = (1 << 3), + FIRE_DAMAGE_TYPE = (1 << 4), + ACID_DAMAGE_TYPE = (1 << 5), + ELECTRIC_DAMAGE_TYPE = (1 << 6), + HEALTH_DAMAGE_TYPE = (1 << 7), + STAMINA_DAMAGE_TYPE = (1 << 8), + MANA_DAMAGE_TYPE = (1 << 9), + NETHER_DAMAGE_TYPE = (1 << 10), + // NOTE: Skip 17 + BASE_DAMAGE_TYPE = (1 << 28), +} + +public enum AttackType { + Undef_AttackType = 0, + Punch_AttackType = (1 << 0), + Thrust_AttackType = (1 << 1), + Slash_AttackType = (1 << 2), + Kick_AttackType = (1 << 3), + OffhandPunch_AttackType = (1 << 4), + DoubleSlash_AttackType = (1 << 5), + TripleSlash_AttackType = (1 << 6), + DoubleThrust_AttackType = (1 << 7), + TripleThrust_AttackType = (1 << 8), + OffhandThrust_AttackType = (1 << 9), + OffhandSlash_AttackType = (1 << 10), + OffhandDoubleSlash_AttackType = (1 << 11), + OffhandTripleSlash_AttackType = (1 << 12), + OffhandDoubleThrust_AttackType = (1 << 13), + OffhandTripleThrust_AttackType = (1 << 14), + Unarmed_AttackType = Punch_AttackType | Kick_AttackType | OffhandPunch_AttackType, // 25 + MultiStrike_AttackType = DoubleSlash_AttackType | TripleSlash_AttackType | DoubleThrust_AttackType | TripleThrust_AttackType | OffhandDoubleSlash_AttackType | OffhandTripleSlash_AttackType | OffhandDoubleThrust_AttackType | OffhandTripleThrust_AttackType // 31200 +} + +public enum eCombatMode { + eCombatModeUndef = 0, + eCombatModeNonCombat = (1 << 0), + eCombatModeMelee = (1 << 1), + eCombatModeMissile = (1 << 2), + eCombatModeMagic = (1 << 3) +} + +public enum ATTACK_HEIGHT { + UNDEF_ATTACK_HEIGHT, + HIGH_ATTACK_HEIGHT, + MEDIUM_ATTACK_HEIGHT, + LOW_ATTACK_HEIGHT, + NUM_ATTACK_HEIGHTS +} + +public enum PowerBarMode { + PBM_UNDEF, + PBM_COMBAT, + PBM_ADVANCED_COMBAT, + PBM_JUMP, + PBM_DDD +} diff --git a/aclogview/Enums/Emote.cs b/aclogview/Enums/Emote.cs new file mode 100644 index 0000000..d07144b --- /dev/null +++ b/aclogview/Enums/Emote.cs @@ -0,0 +1,130 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +public enum EmoteType { + Invalid_EmoteType, + Act_EmoteType, + AwardXP_EmoteType, + Give_EmoteType, + MoveHome_EmoteType, + Motion_EmoteType, + Move_EmoteType, + PhysScript_EmoteType, + Say_EmoteType, + Sound_EmoteType, + Tell_EmoteType, + Turn_EmoteType, + TurnToTarget_EmoteType, + TextDirect_EmoteType, + CastSpell_EmoteType, + Activate_EmoteType, + WorldBroadcast_EmoteType, + LocalBroadcast_EmoteType, + DirectBroadcast_EmoteType, + CastSpellInstant_EmoteType, + UpdateQuest_EmoteType, + InqQuest_EmoteType, + StampQuest_EmoteType, + StartEvent_EmoteType, + StopEvent_EmoteType, + BLog_EmoteType, + AdminSpam_EmoteType, + TeachSpell_EmoteType, + AwardSkillXP_EmoteType, + AwardSkillPoints_EmoteType, + InqQuestSolves_EmoteType, + EraseQuest_EmoteType, + DecrementQuest_EmoteType, + IncrementQuest_EmoteType, + AddCharacterTitle_EmoteType, + InqBoolStat_EmoteType, + InqIntStat_EmoteType, + InqFloatStat_EmoteType, + InqStringStat_EmoteType, + InqAttributeStat_EmoteType, + InqRawAttributeStat_EmoteType, + InqSecondaryAttributeStat_EmoteType, + InqRawSecondaryAttributeStat_EmoteType, + InqSkillStat_EmoteType, + InqRawSkillStat_EmoteType, + InqSkillTrained_EmoteType, + InqSkillSpecialized_EmoteType, + AwardTrainingCredits_EmoteType, + InflictVitaePenalty_EmoteType, + AwardLevelProportionalXP_EmoteType, + AwardLevelProportionalSkillXP_EmoteType, + InqEvent_EmoteType, + ForceMotion_EmoteType, + SetIntStat_EmoteType, + IncrementIntStat_EmoteType, + DecrementIntStat_EmoteType, + CreateTreasure_EmoteType, + ResetHomePosition_EmoteType, + InqFellowQuest_EmoteType, + InqFellowNum_EmoteType, + UpdateFellowQuest_EmoteType, + StampFellowQuest_EmoteType, + AwardNoShareXP_EmoteType, + SetSanctuaryPosition_EmoteType, + TellFellow_EmoteType, + FellowBroadcast_EmoteType, + LockFellow_EmoteType, + Goto_EmoteType, + PopUp_EmoteType, + SetBoolStat_EmoteType, + SetQuestCompletions_EmoteType, + InqNumCharacterTitles_EmoteType, + Generate_EmoteType, + PetCastSpellOnOwner_EmoteType, + TakeItems_EmoteType, + InqYesNo_EmoteType, + InqOwnsItems_EmoteType, + DeleteSelf_EmoteType, + KillSelf_EmoteType, + UpdateMyQuest_EmoteType, + InqMyQuest_EmoteType, + StampMyQuest_EmoteType, + InqMyQuestSolves_EmoteType, + EraseMyQuest_EmoteType, + DecrementMyQuest_EmoteType, + IncrementMyQuest_EmoteType, + SetMyQuestCompletions_EmoteType, + MoveToPos_EmoteType, + LocalSignal_EmoteType, + InqPackSpace_EmoteType, + RemoveVitaePenalty_EmoteType, + SetEyeTexture_EmoteType, + SetEyePalette_EmoteType, + SetNoseTexture_EmoteType, + SetNosePalette_EmoteType, + SetMouthTexture_EmoteType, + SetMouthPalette_EmoteType, + SetHeadObject_EmoteType, + SetHeadPalette_EmoteType, + TeleportTarget_EmoteType, + TeleportSelf_EmoteType, + StartBarber_EmoteType, + InqQuestBitsOn_EmoteType, + InqQuestBitsOff_EmoteType, + InqMyQuestBitsOn_EmoteType, + InqMyQuestBitsOff_EmoteType, + SetQuestBitsOn_EmoteType, + SetQuestBitsOff_EmoteType, + SetMyQuestBitsOn_EmoteType, + SetMyQuestBitsOff_EmoteType, + UntrainSkill_EmoteType, + SetAltRacialSkills_EmoteType, + SpendLuminance_EmoteType, + AwardLuminance_EmoteType, + InqInt64Stat_EmoteType, + SetInt64Stat_EmoteType, + OpenMe_EmoteType, + CloseMe_EmoteType, + SetFloatStat_EmoteType, + AddContract_EmoteType, + RemoveContract_EmoteType, + InqContractsFull_EmoteType +} diff --git a/aclogview/Enums/Enums.cs b/aclogview/Enums/Enums.cs new file mode 100644 index 0000000..4a41b18 --- /dev/null +++ b/aclogview/Enums/Enums.cs @@ -0,0 +1,349 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +public enum ProgramType { + Undef_ProgramType, + Client_ProgramType, + Server_ProgramType, + GameClient_ProgramType = 1073741825, + GameServer_ProgramType = 1073741825, + ClientAdder_ProgramType = -2147483647, + ServerAdder_ProgramType = -2147483647, + WorldBuilder_ProgramType = -2147483647, + RuntimeProgram_ProgramType = 1073741825, + PreprocProgram_ProgramType = -2147483647, + PathMap_ProgramType = 256, + PathGen_ProgramType = -2147483647 +} + +public enum DetectionType { + NoChangeDetection, + EnteredDetection, + LeftDetection +} + +public enum Parts { + Q_X, + Q_Y, + Q_Z, + Q_W +} + +public enum CameraTarget { + INVALID_TARGET = 0, + LOOK_IN_DIRECTION = (1 << 0), + LOOK_AT_OBJECT = (1 << 1), + LOOK_AT_PIVOT = (1 << 2), + ALIGN_WITH_PIVOT = (1 << 3), + ALIGN_WITH_PLANE = (1 << 4) +} + +public enum CG_VERIFICATION_RESPONSE { + UNDEF_CG_VERIFICATION_RESPONSE, + CG_VERIFICATION_RESPONSE_OK, + CG_VERIFICATION_RESPONSE_PENDING, + CG_VERIFICATION_RESPONSE_NAME_IN_USE, + CG_VERIFICATION_RESPONSE_NAME_BANNED, + CG_VERIFICATION_RESPONSE_CORRUPT, + CG_VERIFICATION_RESPONSE_DATABASE_DOWN, + CG_VERIFICATION_RESPONSE_ADMIN_PRIVILEGE_DENIED, + NUM_CG_VERIFICATION_RESPONSES +} + +public enum NameType { + NAME_SINGULAR, + NAME_PLURAL, + NAME_APPROPRIATE +} + + +public enum ExperienceHandlingType { + Undef_ExperienceHandlingType = 0, + ApplyLevelMod_ExperienceHandlingType = (1 << 0), + ShareWithFellows_ExperienceHandlingType = (1 << 1), + AddFellowshipBonus_ExperienceHandlingType = (1 << 2), + ShareWithAllegiance_ExperienceHandlingType = (1 << 3), + ApplyToVitae_ExperienceHandlingType = (1 << 4), + EarnsCP_ExperienceHandlingType = (1 << 5), + ReducedByDistance_ExperienceHandlingType = (1 << 6), + Monster_ExperienceHandlingType = ApplyLevelMod_ExperienceHandlingType | ShareWithFellows_ExperienceHandlingType | AddFellowshipBonus_ExperienceHandlingType | ShareWithAllegiance_ExperienceHandlingType | ApplyToVitae_ExperienceHandlingType | ReducedByDistance_ExperienceHandlingType, // 95 + NormalQuest_ExperienceHandlingType = ShareWithAllegiance_ExperienceHandlingType | ApplyToVitae_ExperienceHandlingType | ShareWithFellows_ExperienceHandlingType, // 26 + NoShareQuest_ExperienceHandlingType = ApplyToVitae_ExperienceHandlingType, // 16 + PassupQuest_ExperienceHandlingType = ShareWithAllegiance_ExperienceHandlingType | ApplyToVitae_ExperienceHandlingType, // 24 + ReceivedFromFellowship_ExperienceHandlingType = ShareWithAllegiance_ExperienceHandlingType | ApplyToVitae_ExperienceHandlingType, // 24 + PPEarnedFromUse_ExperienceHandlingType = ApplyLevelMod_ExperienceHandlingType | ShareWithFellows_ExperienceHandlingType | AddFellowshipBonus_ExperienceHandlingType | ShareWithAllegiance_ExperienceHandlingType | ApplyToVitae_ExperienceHandlingType | EarnsCP_ExperienceHandlingType | ReducedByDistance_ExperienceHandlingType, // 127 + AdminRaiseXP_ExperienceHandlingType = ApplyToVitae_ExperienceHandlingType, // 16 + AdminRaiseSkillXP_ExperienceHandlingType = ApplyToVitae_ExperienceHandlingType, // 16 + ReceivedFromAllegiance_ExperienceHandlingType = Undef_ExperienceHandlingType, // 0 +} + +public enum ComponentTrackerUpdate { + CT_CHANGE_NONE, + CT_CHANGE_ADD, + CT_CHANGE_REMOVE +} + +public enum ContractSortCriteria { + eName, + eStatus +} + +public enum JournalSortCriteria { + ePageNumber, + eTitle, + eLabel, + eTimer +} + +public enum FriendsUpdateType { + FRIENDS_UPDATE, + FRIENDS_UPDATE_ADD, + FRIENDS_UPDATE_REMOVE, + FRIENDS_UPDATE_REMOVE_SILENT, + FRIENDS_UPDATE_ONLINE_STATUS +} + +public enum TargetStatus { + Undef_TargetStatus, + Ok_TargetStatus, + ExitWorld_TargetStatus, + Teleported_TargetStatus, + Contained_TargetStatus, + Parented_TargetStatus, + TimedOut_TargetStatus +} + +public enum LandChangeType { + CHANGE_LAND_HEIGHT, + CHANGE_LAND_ROAD, + CHANGE_LAND_TERRAIN, + CHANGE_LAND_SCENE, + CHANGE_LAND_ENCOUNTER +} + +public enum InterpolationNode { + INVALID_TYPE, + POSITION_TYPE, + JUMP_TYPE, + VELOCITY_TYPE +} + +public enum EnchantmentRegistryPackHeader { + Packed_None = 0, + Packed_MultList = (1 << 0), + Packed_AddList = (1 << 1), + Packed_Vitae = (1 << 2), + Packed_Cooldown = (1 << 3) +} + +namespace OldPublicWeenieDesc { + public enum BitfieldIndex { + BF_OPENABLE = (1 << 0), + BF_INSCRIBABLE = (1 << 1), + BF_STUCK = (1 << 2), + BF_PLAYER = (1 << 3), + BF_ATTACKABLE = (1 << 4), + BF_PLAYER_KILLER = (1 << 5), + BF_HIDDEN_ADMIN = (1 << 6), + BF_UI_HIDDEN = (1 << 7), + BF_BOOK = (1 << 8), + BF_VENDOR = (1 << 9), + BF_PKSWITCH = (1 << 10), + BF_NPKSWITCH = (1 << 11), + BF_DOOR = (1 << 12), + BF_CORPSE = (1 << 13), + BF_LIFESTONE = (1 << 14), + BF_FOOD = (1 << 15), + BF_HEALER = (1 << 16), + BF_LOCKPICK = (1 << 17), + BF_PORTAL = (1 << 18), + // NOTE: Skip 1 + BF_ADMIN = (1 << 20), + BF_FREE_PKSTATUS = (1 << 21), + BF_IMMUNE_CELL_RESTRICTIONS = (1 << 22), + BF_REQUIRES_PACKSLOT = (1 << 23), + } +} + +public enum HookGroupDataVersion { + Undef_HookGroupDataVersion, + Initial_HookGroupDataVersion, + Current_HookGroupDataVersion = Initial_HookGroupDataVersion +} + +public enum CharCase { + CASE_UPPER, + CASE_LOWER, + CASE_EITHER +} + +public enum EnterChargen { + ENTER_NEW, + ENTER_CONTINUE, + ENTER_RANDOM +} + +public enum ExperienceType { + Undef_ExperienceType, + Attribute_ExperienceType, + Attribute2nd_ExperienceType, + TrainedSkill_ExperienceType, + SpecializedSkill_ExperienceType, + Level_ExperienceType, + Credit_ExperienceType +} + +public enum ATTRIBUTE_CACHE_MASK { + UNDEF_MASK = 0, + STRENGTH_MASK = (1 << 0), + ENDURANCE_MASK = (1 << 1), + QUICKNESS_MASK = (1 << 2), + COORDINATION_MASK = (1 << 3), + FOCUS_MASK = (1 << 4), + SELF_MASK = (1 << 5), + HEALTH_MASK = (1 << 6), + STAMINA_MASK = (1 << 7), + MANA_MASK = (1 << 8) +} + +public enum SecurityLevelEnum { + Undef_SecurityLevel, + Advocate1_SecurityLevel, + Advocate2_SecurityLevel, + Advocate3_SecurityLevel, + Advocate4_SecurityLevel, + Advocate5_SecurityLevel, + Sentinel1_SecurityLevel, + Sentinel2_SecurityLevel, + Sentinel3_SecurityLevel, + Turbine_SecurityLevel, + Arch_SecurityLevel, + Admin_SecurityLevel, + Player_SecurityLevel = Undef_SecurityLevel, + MaxAdvocate_SecurityLevel = Advocate5_SecurityLevel, + MaxSentinel_SecurityLevel = Sentinel3_SecurityLevel, + Max_SecurityLevel = Admin_SecurityLevel +} + +public enum GeneratorTimeType { + Undef_GeneratorTimeType, + RealTime_GeneratorTimeType, + Defined_GeneratorTimeType, + Event_GeneratorTimeType, + Night_GeneratorTimeType, + Day_GeneratorTimeType +} + +public enum GeneratorDefinedTimes { + Undef_GeneratorDefinedTimes, + Dusk_GeneratorDefinedTimes, + Dawn_GeneratorDefinedTimes +} + +public enum GeneratorType { + Undef_GeneratorType, + Relative_GeneratorType, + Absolute_GeneratorType +} + +public enum GeneratorDestruct { + Undef_GeneratorDestruct, + Nothing_GeneratorDestruct, + Destroy_GeneratorDestruct, + Kill_GeneratorDestruct +} + +public enum PackItVersionEnum { + Undef_PackItVersionEnum, + Original_GeneratorTimeType, + VersionTwo_GeneratorTimeType, + NewestVersion_PackItVersionEnum = VersionTwo_GeneratorTimeType +} + +namespace Heading { + public enum unit_type { + DEGREES, + RADIANS + } +} + +public enum PropertyDatFileType { + ClientOnlyData, + ServerOnlyData, + SharedData +} + +public enum PropertyPropagationType { + NetPredictedSharedVisually, + NetPredictedSharedPrivately, + NetSharedVisually, + NetSharedPrivately, + NetNotShared, + WorldSharedWithServers, + WorldSharedWithServersAndClients +} + +public enum PropertyCachingType { + Global, + Internal +} + +public enum DATFILE_TYPE { + UNDEF_DISK, + PORTAL_DATFILE, + CELL_DATFILE, + LOCAL_DATFILE +} + +public enum WaveformType { + WAVEFORM_INVALID, + WAVEFORM_NONE, + WAVEFORM_SPEED, + WAVEFORM_NOISE, + WAVEFORM_SINE, + WAVEFORM_SQUARE, + WAVEFORM_BOUNCE, + WAVEFORM_PERLIN, + WAVEFORM_FRACTAL, + WAVEFORM_FRAMELOOP, + NUM_WAVEFORMS +} + +public enum DDDEvent { + DDD_PatchtimeInterrogation, + DDD_RegionSet, + DDD_PatchtimePending, + DDD_PatchtimeBegin, + DDD_PatchtimeEnd, + DDD_DataDownloaded, + DDD_DynamicDataRequested, + DDD_DataError +} + +public enum GRVDataType { + GRVDataType_Unknown, + GRVDataType_DataID, + GRVDataType_Bool, + GRVDataType_Int32, + GRVDataType_UInt32, + GRVDataType_Int16, + GRVDataType_UInt16, + GRVDataType_Int8, + GRVDataType_UInt8, + GRVDataType_Float32, + GRVDataType_Float64, + GRVDataType_Vector3, + GRVDataType_RGBAColor, + GRVDataType_PString, + GRVDataType_Waveform +} + +public enum Target_Mode { + TARGET_MODE_NONE, + TARGET_MODE_USE, + TARGET_MODE_EXAMINE, + TARGET_MODE_USE_TARGET +} diff --git a/aclogview/Enums/House.cs b/aclogview/Enums/House.cs new file mode 100644 index 0000000..77f4cde --- /dev/null +++ b/aclogview/Enums/House.cs @@ -0,0 +1,24 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +public enum HouseOp { + Undef_HouseOp, + Buy_House, + Rent_House +} + +public enum HouseBitmask { + Undef_HouseBitmask = 0, + Active_HouseBitmask = (1 << 0), + RequiresMonarch_HouseBitmask = (1 << 1) +} + +public enum HARBitmask { + Undef_HARBitmask = 0, + OpenHouse_HARBitmask = (1 << 0), + AllegianceGuests_HARBitmask = (1 << 1), + AllegianceStorage_HARBitmask = (1 << 2) +} diff --git a/aclogview/Enums/Inventory.cs b/aclogview/Enums/Inventory.cs new file mode 100644 index 0000000..92779bd --- /dev/null +++ b/aclogview/Enums/Inventory.cs @@ -0,0 +1,113 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +public enum InventoryRequest { + IR_NONE, + IR_MERGE, + IR_SPLIT, + IR_MOVE, + IR_PICK_UP, + IR_PUT_IN_CONTAINER, + IR_DROP, + IR_WIELD, + IR_VIEW_AS_GROUND_CONTAINER, + IR_GIVE, + IR_SHOP_EVENT +} + +public enum DropItemFlags { + DROPITEM_FLAGS_NONE = 0, + DROPITEM_IS_CONTAINER = (1 << 0), + DROPITEM_IS_VENDOR = (1 << 1), + DROPITEM_IS_SHORTCUT = (1 << 2), + DROPITEM_IS_SALVAGE = (1 << 3), + DROPITEM_IS_ALIAS = DROPITEM_IS_VENDOR | DROPITEM_IS_SHORTCUT | DROPITEM_IS_SALVAGE // 14 +} + +public enum INVENTORY_LOC { + NONE_LOC = 0, + HEAD_WEAR_LOC = (1 << 0), + CHEST_WEAR_LOC = (1 << 1), + ABDOMEN_WEAR_LOC = (1 << 2), + UPPER_ARM_WEAR_LOC = (1 << 3), + LOWER_ARM_WEAR_LOC = (1 << 4), + HAND_WEAR_LOC = (1 << 5), + UPPER_LEG_WEAR_LOC = (1 << 6), + LOWER_LEG_WEAR_LOC = (1 << 7), + FOOT_WEAR_LOC = (1 << 8), + CHEST_ARMOR_LOC = (1 << 9), + ABDOMEN_ARMOR_LOC = (1 << 10), + UPPER_ARM_ARMOR_LOC = (1 << 11), + LOWER_ARM_ARMOR_LOC = (1 << 12), + UPPER_LEG_ARMOR_LOC = (1 << 13), + LOWER_LEG_ARMOR_LOC = (1 << 14), + NECK_WEAR_LOC = (1 << 15), + WRIST_WEAR_LEFT_LOC = (1 << 16), + WRIST_WEAR_RIGHT_LOC = (1 << 17), + FINGER_WEAR_LEFT_LOC = (1 << 18), + FINGER_WEAR_RIGHT_LOC = (1 << 19), + MELEE_WEAPON_LOC = (1 << 20), + SHIELD_LOC = (1 << 21), + MISSILE_WEAPON_LOC = (1 << 22), + MISSILE_AMMO_LOC = (1 << 23), + HELD_LOC = (1 << 24), + TWO_HANDED_LOC = (1 << 25), + TRINKET_ONE_LOC = (1 << 26), + CLOAK_LOC = (1 << 27), + SIGIL_ONE_LOC = (1 << 28), + SIGIL_TWO_LOC = (1 << 29), + SIGIL_THREE_LOC = (1 << 30), + CLOTHING_LOC = (1 << 31) | HEAD_WEAR_LOC | CHEST_WEAR_LOC | ABDOMEN_WEAR_LOC | UPPER_ARM_WEAR_LOC | LOWER_ARM_WEAR_LOC | HAND_WEAR_LOC | UPPER_LEG_WEAR_LOC | LOWER_LEG_WEAR_LOC | FOOT_WEAR_LOC, // 134218239 + ARMOR_LOC = CHEST_ARMOR_LOC | ABDOMEN_ARMOR_LOC | UPPER_ARM_ARMOR_LOC | LOWER_ARM_ARMOR_LOC | UPPER_LEG_ARMOR_LOC | LOWER_LEG_ARMOR_LOC, // 32256 + JEWELRY_LOC = NECK_WEAR_LOC | WRIST_WEAR_LEFT_LOC | WRIST_WEAR_RIGHT_LOC | FINGER_WEAR_LEFT_LOC | FINGER_WEAR_RIGHT_LOC | TRINKET_ONE_LOC | CLOAK_LOC | SIGIL_ONE_LOC | SIGIL_TWO_LOC | SIGIL_THREE_LOC, // 2081390592 + WRIST_WEAR_LOC = WRIST_WEAR_LEFT_LOC | WRIST_WEAR_RIGHT_LOC, // 196608 + FINGER_WEAR_LOC = FINGER_WEAR_LEFT_LOC | FINGER_WEAR_RIGHT_LOC, // 786432 + SIGIL_LOC = SIGIL_ONE_LOC | SIGIL_TWO_LOC | SIGIL_THREE_LOC, // 1879048192 + READY_SLOT_LOC = HELD_LOC | TWO_HANDED_LOC | TRINKET_ONE_LOC | CLOAK_LOC | SIGIL_ONE_LOC | SIGIL_TWO_LOC, // 66060288 + WEAPON_LOC = SIGIL_TWO_LOC | TRINKET_ONE_LOC | HELD_LOC, // 38797312 + WEAPON_READY_SLOT_LOC = SIGIL_ONE_LOC | SIGIL_TWO_LOC | TRINKET_ONE_LOC | HELD_LOC, // 55574528 + ALL_LOC = 2147483647, + CAN_GO_IN_READY_SLOT_LOC = 2147483647 +} + +public enum DestinationType { + Undef_DestinationType = 0, + Contain_DestinationType = (1 << 0), + Wield_DestinationType = (1 << 1), + Shop_DestinationType = (1 << 2), + Treasure_DestinationType = (1 << 3), + HouseBuy_DestinationType = (1 << 4), + HouseRent_DestinationType = (1 << 5), + Checkpoint_DestinationType = Contain_DestinationType | Wield_DestinationType | Shop_DestinationType, // 7 + ContainTreasure_DestinationType = Contain_DestinationType | Treasure_DestinationType, // 9 + WieldTreasure_DestinationType = Wield_DestinationType | Treasure_DestinationType, // 10 + ShopTreasure_DestinationType = Shop_DestinationType | Treasure_DestinationType // 12 +} + +public enum RegenerationType { + Undef_RegenerationType = 0, + Destruction_RegenerationType = (1 << 0), + PickUp_RegenerationType = (1 << 1), + Death_RegenerationType = (1 << 2) +} + +public enum RegenLocationType { + Undef_RegenLocationType = 0, + OnTop_RegenLocationType = (1 << 0), + Scatter_RegenLocationType = (1 << 1), + Specific_RegenLocationType = (1 << 2), + Contain_RegenLocationType = (1 << 3), + Wield_RegenLocationType = (1 << 4), + Shop_RegenLocationType = (1 << 5), + Treasure_RegenLocationType = (1 << 6), + Checkpoint_RegenLocationType = Contain_RegenLocationType | Wield_RegenLocationType | Shop_RegenLocationType, // 56 + OnTopTreasure_RegenLocationType = OnTop_RegenLocationType | Treasure_RegenLocationType, // 65 + ScatterTreasure_RegenLocationType = Scatter_RegenLocationType | Treasure_RegenLocationType, // 66 + SpecificTreasure_RegenLocationType = Specific_RegenLocationType | Treasure_RegenLocationType, // 68 + ContainTreasure_RegenLocationType = Contain_RegenLocationType | Treasure_RegenLocationType, // 72 + WieldTreasure_RegenLocationType = Wield_RegenLocationType | Treasure_RegenLocationType, // 80 + ShopTreasure_RegenLocationType = Shop_RegenLocationType | Treasure_RegenLocationType // 96 +} diff --git a/aclogview/Enums/Item.cs b/aclogview/Enums/Item.cs new file mode 100644 index 0000000..1c424d7 --- /dev/null +++ b/aclogview/Enums/Item.cs @@ -0,0 +1,245 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +public enum COMBAT_USE { + COMBAT_USE_NONE, + COMBAT_USE_MELEE, + COMBAT_USE_MISSILE, + COMBAT_USE_AMMO, + COMBAT_USE_SHIELD, + COMBAT_USE_TWO_HANDED +} + +public enum AMMO_TYPE { + AMMO_NONE, + AMMO_ARROW, + AMMO_BOLT, + AMMO_ATLATL, + AMMO_ARROW_CRYSTAL, + AMMO_BOLT_CRYSTAL, + AMMO_ATLATL_CRYSTAL, + AMMO_ARROW_CHORIZITE, + AMMO_BOLT_CHORIZITE, + AMMO_ATLATL_CHORIZITE +} + +public enum ITEM_TYPE { + TYPE_UNDEF = 0, + TYPE_MELEE_WEAPON = (1 << 0), + TYPE_ARMOR = (1 << 1), + TYPE_CLOTHING = (1 << 2), + TYPE_JEWELRY = (1 << 3), + TYPE_CREATURE = (1 << 4), + TYPE_FOOD = (1 << 5), + TYPE_MONEY = (1 << 6), + TYPE_MISC = (1 << 7), + TYPE_MISSILE_WEAPON = (1 << 8), + TYPE_CONTAINER = (1 << 9), + TYPE_USELESS = (1 << 10), + TYPE_GEM = (1 << 11), + TYPE_SPELL_COMPONENTS = (1 << 12), + TYPE_WRITABLE = (1 << 13), + TYPE_KEY = (1 << 14), + TYPE_CASTER = (1 << 15), + TYPE_PORTAL = (1 << 16), + TYPE_LOCKABLE = (1 << 17), + TYPE_PROMISSORY_NOTE = (1 << 18), + TYPE_MANASTONE = (1 << 19), + TYPE_SERVICE = (1 << 20), + TYPE_MAGIC_WIELDABLE = (1 << 21), + TYPE_CRAFT_COOKING_BASE = (1 << 22), + TYPE_CRAFT_ALCHEMY_BASE = (1 << 23), + // NOTE: Skip 1 + TYPE_CRAFT_FLETCHING_BASE = (1 << 25), + TYPE_CRAFT_ALCHEMY_INTERMEDIATE = (1 << 26), + TYPE_CRAFT_FLETCHING_INTERMEDIATE = (1 << 27), + TYPE_LIFESTONE = (1 << 28), + TYPE_TINKERING_TOOL = (1 << 29), + TYPE_TINKERING_MATERIAL = (1 << 30), + TYPE_GAMEBOARD = (1 << 31), + TYPE_PORTAL_MAGIC_TARGET = 268500992, + TYPE_LOCKABLE_MAGIC_TARGET = 640, + TYPE_VESTEMENTS = 6, + TYPE_WEAPON = 257, + TYPE_WEAPON_OR_CASTER = 33025, + TYPE_ITEM = 3013615, + TYPE_REDIRECTABLE_ITEM_ENCHANTMENT_TARGET = 33031, + TYPE_ITEM_ENCHANTABLE_TARGET = 560015, + TYPE_SELF = 0, + TYPE_VENDOR_SHOPKEEP = 1208248231, + TYPE_VENDOR_GROCER = 4481568 +} + +public enum ITEM_USEABLE { + USEABLE_UNDEF = 0, + USEABLE_NO = (1 << 0), + USEABLE_SELF = (1 << 1), + USEABLE_WIELDED = (1 << 2), + USEABLE_CONTAINED = (1 << 3), + USEABLE_VIEWED = (1 << 4), + USEABLE_REMOTE = (1 << 5), + USEABLE_NEVER_WALK = (1 << 6), + USEABLE_OBJSELF = (1 << 7), + USEABLE_CONTAINED_VIEWED = 24, + USEABLE_CONTAINED_VIEWED_REMOTE = 56, + USEABLE_CONTAINED_VIEWED_REMOTE_NEVER_WALK = 120, + USEABLE_VIEWED_REMOTE = 48, + USEABLE_VIEWED_REMOTE_NEVER_WALK = 112, + USEABLE_REMOTE_NEVER_WALK = 96, + USEABLE_SOURCE_WIELDED_TARGET_WIELDED = 262148, + USEABLE_SOURCE_WIELDED_TARGET_CONTAINED = 524292, + USEABLE_SOURCE_WIELDED_TARGET_VIEWED = 1048580, + USEABLE_SOURCE_WIELDED_TARGET_REMOTE = 2097156, + USEABLE_SOURCE_WIELDED_TARGET_REMOTE_NEVER_WALK = 6291460, + USEABLE_SOURCE_CONTAINED_TARGET_WIELDED = 262152, + USEABLE_SOURCE_CONTAINED_TARGET_CONTAINED = 524296, + USEABLE_SOURCE_CONTAINED_TARGET_OBJSELF_OR_CONTAINED = 8912904, + USEABLE_SOURCE_CONTAINED_TARGET_SELF_OR_CONTAINED = 655368, + USEABLE_SOURCE_CONTAINED_TARGET_VIEWED = 1048584, + USEABLE_SOURCE_CONTAINED_TARGET_REMOTE = 2097160, + USEABLE_SOURCE_CONTAINED_TARGET_REMOTE_NEVER_WALK = 6291464, + USEABLE_SOURCE_CONTAINED_TARGET_REMOTE_OR_SELF = 2228232, + USEABLE_SOURCE_VIEWED_TARGET_WIELDED = 262160, + USEABLE_SOURCE_VIEWED_TARGET_CONTAINED = 524304, + USEABLE_SOURCE_VIEWED_TARGET_VIEWED = 1048592, + USEABLE_SOURCE_VIEWED_TARGET_REMOTE = 2097168, + USEABLE_SOURCE_REMOTE_TARGET_WIELDED = 262176, + USEABLE_SOURCE_REMOTE_TARGET_CONTAINED = 524320, + USEABLE_SOURCE_REMOTE_TARGET_VIEWED = 1048608, + USEABLE_SOURCE_REMOTE_TARGET_REMOTE = 2097184, + USEABLE_SOURCE_REMOTE_TARGET_REMOTE_NEVER_WALK = 6291488, + USEABLE_SOURCE_MASK = 65535, + USEABLE_TARGET_MASK = -65536, +} + +public enum ImbuedEffectType { + Undef_ImbuedEffectType = 0, + CriticalStrike_ImbuedEffectType = (1 << 0), + CripplingBlow_ImbuedEffectType = (1 << 1), + ArmorRending_ImbuedEffectType = (1 << 2), + SlashRending_ImbuedEffectType = (1 << 3), + PierceRending_ImbuedEffectType = (1 << 4), + BludgeonRending_ImbuedEffectType = (1 << 5), + AcidRending_ImbuedEffectType = (1 << 6), + ColdRending_ImbuedEffectType = (1 << 7), + ElectricRending_ImbuedEffectType = (1 << 8), + FireRending_ImbuedEffectType = (1 << 9), + MeleeDefense_ImbuedEffectType = (1 << 10), + MissileDefense_ImbuedEffectType = (1 << 11), + MagicDefense_ImbuedEffectType = (1 << 12), + Spellbook_ImbuedEffectType = (1 << 13), + NetherRending_ImbuedEffectType = (1 << 14), + IgnoreSomeMagicProjectileDamage_ImbuedEffectType = (1 << 29), + AlwaysCritical_ImbuedEffectType = (1 << 30), + IgnoreAllArmor_ImbuedEffectType = (1 << 31) +} + +public enum WeaponType { + Undef_WeaponType, + Unarmed_WeaponType, + Sword_WeaponType, + Axe_WeaponType, + Mace_WeaponType, + Spear_WeaponType, + Dagger_WeaponType, + Staff_WeaponType, + Bow_WeaponType, + Crossbow_WeaponType, + Thrown_WeaponType, + TwoHanded_WeaponType, + Magic_WeaponType +} + +public enum Enchantment_BFIndex { + BF_INSCRIBABLE = (1 << 0), + BF_HEALER = (1 << 1), + BF_FOOD = (1 << 2), + BF_LOCKPICK = (1 << 2) +} + +public enum AttunedStatusEnum { + Normal_AttunedStatus, + Attuned_AttunedStatus, + Sticky_AttunedStatus +} + +public enum BondedStatusEnum { + Destroy_BondedStatus = -2, + Slippery_BondedStatus = -1, + Normal_BondedStatus = 0, + Bonded_BondedStatus = 1, + Sticky_BondedStatus = 2 +} + +public enum EnchantmentTypeEnum { + Undef_EnchantmentType = 0, + Attribute_EnchantmentType = (1 << 0), + SecondAtt_EnchantmentType = (1 << 1), + Int_EnchantmentType = (1 << 2), + Float_EnchantmentType = (1 << 3), + Skill_EnchantmentType = (1 << 4), + BodyDamageValue_EnchantmentType = (1 << 5), + BodyDamageVariance_EnchantmentType = (1 << 6), + BodyArmorValue_EnchantmentType = (1 << 7), + // NOTE: Skip 3 + SingleStat_EnchantmentType = (1 << 11), + MultipleStat_EnchantmentType = (1 << 12), + Multiplicative_EnchantmentType = (1 << 13), + Additive_EnchantmentType = (1 << 14), + AttackSkills_EnchantmentType = (1 << 15), + DefenseSkills_EnchantmentType = (1 << 16), + // NOTE: Skip 3 + Multiplicative_Degrade_EnchantmentType = (1 << 20), + Additive_Degrade_EnchantmentType = (1 << 21), + // NOTE: Skip 1 + Vitae_EnchantmentType = (1 << 23), + Cooldown_EnchantmentType = (1 << 24), + Beneficial_EnchantmentType = (1 << 25), + StatTypes_EnchantmentType = 255 +} + +public enum EquipmentSet { + ShadowMelee_EquipmentSet = 91, + ShadowMagic_EquipmentSet, + ShadowMissile_EquipmentSet, + ShadowMeleeAcidMinor_EquipmentSet, + ShadowMeleeElectricMinor_EquipmentSet, + ShadowMeleeFireMinor_EquipmentSet, + ShadowMeleeFrostMinor_EquipmentSet, + ShadowMagicAcidMinor_EquipmentSet, + ShadowMagicElectricMinor_EquipmentSet, + ShadowMagicFireMinor_EquipmentSet, + ShadowMagicFrostMinor_EquipmentSet, + ShadowMissileAcidMinor_EquipmentSet, + ShadowMissileElectricMinor_EquipmentSet, + ShadowMissileFireMinor_EquipmentSet, + ShadowMissileFrostMinor_EquipmentSet, + ShadowMeleeAcidMajor_EquipmentSet, + ShadowMeleeElectricMajor_EquipmentSet, + ShadowMeleeFireMajor_EquipmentSet, + ShadowMeleeFrostMajor_EquipmentSet, + ShadowMagicAcidMajor_EquipmentSet, + ShadowMagicElectricMajor_EquipmentSet, + ShadowMagicFireMajor_EquipmentSet, + ShadowMagicFrostMajor_EquipmentSet, + ShadowMissileAcidMajor_EquipmentSet, + ShadowMissileElectricMajor_EquipmentSet, + ShadowMissileFireMajor_EquipmentSet, + ShadowMissileFrostMajor_EquipmentSet, + ShadowMeleeAcidBlackfire_EquipmentSet, + ShadowMeleeElectricBlackfire_EquipmentSet, + ShadowMeleeFireBlackfire_EquipmentSet, + ShadowMeleeFrostBlackfire_EquipmentSet, + ShadowMagicAcidBlackfire_EquipmentSet, + ShadowMagicElectricBlackfire_EquipmentSet, + ShadowMagicFireBlackfire_EquipmentSet, + ShadowMagicFrostBlackfire_EquipmentSet, + ShadowMissileAcidBlackfire_EquipmentSet, + ShadowMissileElectricBlackfire_EquipmentSet, + ShadowMissileFireBlackfire_EquipmentSet, + ShadowMissileFrostBlackfire_EquipmentSet, + ShadowPrismatic_EquipmentSet +} diff --git a/aclogview/Enums/LandDefs.cs b/aclogview/Enums/LandDefs.cs new file mode 100644 index 0000000..9ba53b1 --- /dev/null +++ b/aclogview/Enums/LandDefs.cs @@ -0,0 +1,82 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +public enum SURFCHAR { + SOLID, + WATER +} + +namespace LandDefs { + public enum TerrainType { + BarrenRock, + Grassland, + Ice, + LushGrass, + MarshSparseSwamp, + MudRichDirt, + ObsidianPlain, + PackedDirt, + PatchyDirt, + PatchyGrassland, + SandYellow, + SandGrey, + SandRockStrewn, + SedimentaryRock, + SemiBarrenRock, + Snow, + WaterRunning, + WaterStandingFresh, + WaterShallowSea, + WaterShallowStillSea, + WaterDeepSea, + Reserved21, + Reserved22, + Reserved23, + Reserved24, + Reserved25, + Reserved26, + Reserved27, + Reserved28, + Reserved29, + Reserved30, + Reserved31, + RoadType + } + + public enum WaterType { + NOT_WATER, + PARTIALLY_WATER, + ENTIRELY_WATER + } + + public enum PalType { + SWTerrain, + SETerrain, + NETerrain, + NWTerrain, + Road + } + + public enum Rotation { + ROT_0, + ROT_90, + ROT_180, + ROT_270 + } + + public enum Direction { + IN_VIEWER_BLOCK, + NORTH_OF_VIEWER, + SOUTH_OF_VIEWER, + EAST_OF_VIEWER, + WEST_OF_VIEWER, + NORTHWEST_OF_VIEWER, + SOUTHWEST_OF_VIEWER, + NORTHEAST_OF_VIEWER, + SOUTHEAST_OF_VIEWER, + UNKNOWN + } +} diff --git a/aclogview/Enums/MaterialType.cs b/aclogview/Enums/MaterialType.cs new file mode 100644 index 0000000..62240e5 --- /dev/null +++ b/aclogview/Enums/MaterialType.cs @@ -0,0 +1,88 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +public enum MaterialType { + Undef_MaterialType, + Ceramic_MaterialType, + Porcelain_MaterialType, + Cloth_MaterialType, + Linen_MaterialType, + Satin_MaterialType, + Silk_MaterialType, + Velvet_MaterialType, + Wool_MaterialType, + Gem_MaterialType, + Agate_MaterialType, + Amber_MaterialType, + Amethyst_MaterialType, + Aquamarine_MaterialType, + Azurite_MaterialType, + Black_Garnet_MaterialType, + Black_Opal_MaterialType, + Bloodstone_MaterialType, + Carnelian_MaterialType, + Citrine_MaterialType, + Diamond_MaterialType, + Emerald_MaterialType, + Fire_Opal_MaterialType, + Green_Garnet_MaterialType, + Green_Jade_MaterialType, + Hematite_MaterialType, + Imperial_Topaz_MaterialType, + Jet_MaterialType, + Lapis_Lazuli_MaterialType, + Lavender_Jade_MaterialType, + Malachite_MaterialType, + Moonstone_MaterialType, + Onyx_MaterialType, + Opal_MaterialType, + Peridot_MaterialType, + Red_Garnet_MaterialType, + Red_Jade_MaterialType, + Rose_Quartz_MaterialType, + Ruby_MaterialType, + Sapphire_MaterialType, + Smoky_Quartz_MaterialType, + Sunstone_MaterialType, + Tiger_Eye_MaterialType, + Tourmaline_MaterialType, + Turquoise_MaterialType, + White_Jade_MaterialType, + White_Quartz_MaterialType, + White_Sapphire_MaterialType, + Yellow_Garnet_MaterialType, + Yellow_Topaz_MaterialType, + Zircon_MaterialType, + Ivory_MaterialType, + Leather_MaterialType, + Armoredillo_Hide_MaterialType, + Gromnie_Hide_MaterialType, + Reed_Shark_Hide_MaterialType, + Metal_MaterialType, + Brass_MaterialType, + Bronze_MaterialType, + Copper_MaterialType, + Gold_MaterialType, + Iron_MaterialType, + Pyreal_MaterialType, + Silver_MaterialType, + Steel_MaterialType, + Stone_MaterialType, + Alabaster_MaterialType, + Granite_MaterialType, + Marble_MaterialType, + Obsidian_MaterialType, + Sandstone_MaterialType, + Serpentine_MaterialType, + Wood_MaterialType, + Ebony_MaterialType, + Mahogany_MaterialType, + Oak_MaterialType, + Pine_MaterialType, + Teak_MaterialType, + Number_MaterialType = Teak_MaterialType, + NumMaterialTypes_MaterialType = 238 +} diff --git a/aclogview/Enums/Movement.cs b/aclogview/Enums/Movement.cs new file mode 100644 index 0000000..d5cc4a2 --- /dev/null +++ b/aclogview/Enums/Movement.cs @@ -0,0 +1,433 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +// TODO: Figure out what bitfield(s) these values map to and replace with OR's +public enum MotionStyle { + Motion_Invalid = -2147483648, + Motion_HandCombat = -2147483588, + Motion_NonCombat = -2147483587, + Motion_SwordCombat = -2147483586, + Motion_BowCombat = -2147483585, + Motion_SwordShieldCombat = -2147483584, + Motion_CrossbowCombat = -2147483583, + Motion_UnusedCombat = -2147483582, + Motion_SlingCombat = -2147483581, + Motion_2HandedSwordCombat = -2147483580, + Motion_2HandedStaffCombat = -2147483579, + Motion_DualWieldCombat = -2147483578, + Motion_ThrownWeaponCombat = -2147483577, + Motion_Graze = -2147483576, + Motion_Magic = -2147483575, + Motion_BowNoAmmo = -2147483416, + Motion_CrossBowNoAmmo = -2147483415, + Motion_AtlatlCombat = -2147483336, + Motion_ThrownShieldCombat = -2147483335, + Motion_HoldRun = -2063597567, + Motion_HoldSidestep = -2063597566, + Command_Invalid = 0, + Command_Cancel = 134217890, + Command_CreateShortcutToSelected = 134217897, + Command_EnterChat = 134217909, + Command_ToggleChat = 134217910, + Command_SavePosition = 134217911, + Command_UseSelected = 150995107, + Command_AutosortSelected = 150995108, + Command_DropSelected = 150995109, + Command_GiveSelected = 150995110, + Command_SplitSelected = 150995111, + Command_ExamineSelected = 150995112, + Command_PreviousCompassItem = 150995114, + Command_NextCompassItem = 150995115, + Command_ClosestCompassItem = 150995116, + Command_PreviousSelection = 150995117, + Command_LastAttacker = 150995118, + Command_PreviousFellow = 150995119, + Command_NextFellow = 150995120, + Command_ToggleCombat = 150995121, + Command_OptionsPanel = 150995128, + Command_ResetView = 150995129, + Command_FloorView = 150995136, + Command_PreviousItem = 150995138, + Command_NextItem = 150995139, + Command_ClosestItem = 150995140, + Command_MapView = 150995142, + Command_AutoRun = 150995143, + Command_DecreasePowerSetting = 150995144, + Command_IncreasePowerSetting = 150995145, + Command_FirstPersonView = 150995157, + Command_AllegiancePanel = 150995158, + Command_FellowshipPanel = 150995159, + Command_SpellbookPanel = 150995160, + Command_SpellComponentsPanel = 150995161, + Command_HousePanel = 150995162, + Command_AttributesPanel = 150995163, + Command_SkillsPanel = 150995164, + Command_MapPanel = 150995165, + Command_InventoryPanel = 150995166, + Command_CaptureScreenshotToFile = 150995175, + Command_AutoCreateShortcuts = 150995198, + Command_AutoRepeatAttacks = 150995199, + Command_AutoTarget = 150995200, + Command_AdvancedCombatInterface = 150995201, + Command_IgnoreAllegianceRequests = 150995202, + Command_IgnoreFellowshipRequests = 150995203, + Command_InvertMouseLook = 150995204, + Command_LetPlayersGiveYouItems = 150995205, + Command_AutoTrackCombatTargets = 150995206, + Command_DisplayTooltips = 150995207, + Command_AttemptToDeceivePlayers = 150995208, + Command_RunAsDefaultMovement = 150995209, + Command_StayInChatModeAfterSend = 150995210, + Command_RightClickToMouseLook = 150995211, + Command_VividTargetIndicator = 150995212, + Command_SelectSelf = 150995213, + Command_NextMonster = 150995215, + Command_PreviousMonster = 150995216, + Command_ClosestMonster = 150995217, + Command_NextPlayer = 150995218, + Command_PreviousPlayer = 150995219, + Command_ClosestPlayer = 150995220, + Command_TradePanel = 150995226, + Command_CharacterOptionsPanel = 150995281, + Command_SoundAndGraphicsPanel = 150995282, + Command_HelpfulSpellsPanel = 150995283, + Command_HarmfulSpellsPanel = 150995284, + Command_CharacterInformationPanel = 150995285, + Command_LinkStatusPanel = 150995286, + Command_VitaePanel = 150995287, + Command_ShareFellowshipXP = 150995288, + Command_ShareFellowshipLoot = 150995289, + Command_AcceptCorpseLooting = 150995290, + Command_IgnoreTradeRequests = 150995291, + Command_DisableWeather = 150995292, + Command_DisableHouseEffect = 150995293, + Command_SideBySideVitals = 150995294, + Command_ShowRadarCoordinates = 150995295, + Command_ShowSpellDurations = 150995296, + Command_MuteOnLosingFocus = 150995297, + Command_AllegianceChat = 150995301, + Command_AutomaticallyAcceptFellowshipRequests = 150995302, + Command_Reply = 150995303, + Command_MonarchReply = 150995304, + Command_PatronReply = 150995305, + Command_ToggleCraftingChanceOfSuccessDialog = 150995306, + Command_UseClosestUnopenedCorpse = 150995307, + Command_UseNextUnopenedCorpse = 150995308, + Command_IssueSlashCommand = 150995309, + Command_MouseLook = 201326785, + Command_HighAttack = 218103986, + Command_MediumAttack = 218103987, + Command_LowAttack = 218103988, + Command_CameraLeftRotate = 218103994, + Command_CameraRightRotate = 218103995, + Command_CameraRaise = 218103996, + Command_CameraLower = 218103997, + Command_CameraCloser = 218103998, + Command_CameraFarther = 218103999, + Command_ShiftView = 218104005, + Motion_Hop = 268435530, + Motion_Jumpup = 268435531, + Motion_ChestBeat = 268435533, + Motion_TippedLeft = 268435534, + Motion_TippedRight = 268435535, + Motion_FallDown = 268435536, + Motion_Twitch1 = 268435537, + Motion_Twitch2 = 268435538, + Motion_Twitch3 = 268435539, + Motion_Twitch4 = 268435540, + Motion_StaggerBackward = 268435541, + Motion_StaggerForward = 268435542, + Motion_Sanctuary = 268435543, + Motion_ThrustMed = 268435544, + Motion_ThrustLow = 268435545, + Motion_ThrustHigh = 268435546, + Motion_SlashHigh = 268435547, + Motion_SlashMed = 268435548, + Motion_SlashLow = 268435549, + Motion_BackhandHigh = 268435550, + Motion_BackhandMed = 268435551, + Motion_BackhandLow = 268435552, + Motion_Shoot = 268435553, + Motion_AttackHigh1 = 268435554, + Motion_AttackMed1 = 268435555, + Motion_AttackLow1 = 268435556, + Motion_AttackHigh2 = 268435557, + Motion_AttackMed2 = 268435558, + Motion_AttackLow2 = 268435559, + Motion_AttackHigh3 = 268435560, + Motion_AttackMed3 = 268435561, + Motion_AttackLow3 = 268435562, + Motion_HeadThrow = 268435563, + Motion_FistSlam = 268435564, + Motion_BreatheFlame_ = 268435565, + Motion_SpinAttack = 268435566, + Motion_MagicPowerUp01 = 268435567, + Motion_MagicPowerUp02 = 268435568, + Motion_MagicPowerUp03 = 268435569, + Motion_MagicPowerUp04 = 268435570, + Motion_MagicPowerUp05 = 268435571, + Motion_MagicPowerUp06 = 268435572, + Motion_MagicPowerUp07 = 268435573, + Motion_MagicPowerUp08 = 268435574, + Motion_MagicPowerUp09 = 268435575, + Motion_MagicPowerUp10 = 268435576, + Motion_EnterGame = 268435612, + Motion_ExitGame = 268435613, + Motion_OnCreation = 268435614, + Motion_OnDestruction = 268435615, + Motion_EnterPortal = 268435616, + Motion_ExitPortal = 268435617, + Motion_SpecialAttack1 = 268435661, + Motion_SpecialAttack2 = 268435662, + Motion_SpecialAttack3 = 268435663, + Motion_MissileAttack1 = 268435664, + Motion_MissileAttack2 = 268435665, + Motion_MissileAttack3 = 268435666, + Motion_Blink = 268435682, + Motion_Bite = 268435683, + Motion_SkillHealSelf = 268435726, + Motion_LogOut = 268435739, + Motion_DoubleSlashLow = 268435740, + Motion_DoubleSlashMed = 268435741, + Motion_DoubleSlashHigh = 268435742, + Motion_TripleSlashLow = 268435743, + Motion_TripleSlashMed = 268435744, + Motion_TripleSlashHigh = 268435745, + Motion_DoubleThrustLow = 268435746, + Motion_DoubleThrustMed = 268435747, + Motion_DoubleThrustHigh = 268435748, + Motion_TripleThrustLow = 268435749, + Motion_TripleThrustMed = 268435750, + Motion_TripleThrustHigh = 268435751, + Motion_MagicPowerUp01Purple = 268435752, + Motion_MagicPowerUp02Purple = 268435753, + Motion_MagicPowerUp03Purple = 268435754, + Motion_MagicPowerUp04Purple = 268435755, + Motion_MagicPowerUp05Purple = 268435756, + Motion_MagicPowerUp06Purple = 268435757, + Motion_MagicPowerUp07Purple = 268435758, + Motion_MagicPowerUp08Purple = 268435759, + Motion_MagicPowerUp09Purple = 268435760, + Motion_MagicPowerUp10Purple = 268435761, + Motion_HouseRecall = 268435767, + Motion_LifestoneRecall = 268435792, + Motion_Fishing = 268435810, + Motion_MarketplaceRecall = 268435811, + Motion_EnterPKLite = 268435812, + Motion_AllegianceHometownRecall = 268435822, + Motion_PKArenaRecall = 268435823, + Motion_OffhandSlashHigh = 268435824, + Motion_OffhandSlashMed = 268435825, + Motion_OffhandSlashLow = 268435826, + Motion_OffhandThrustHigh = 268435827, + Motion_OffhandThrustMed = 268435828, + Motion_OffhandThrustLow = 268435829, + Motion_OffhandDoubleSlashLow = 268435830, + Motion_OffhandDoubleSlashMed = 268435831, + Motion_OffhandDoubleSlashHigh = 268435832, + Motion_OffhandTripleSlashLow = 268435833, + Motion_OffhandTripleSlashMed = 268435834, + Motion_OffhandTripleSlashHigh = 268435835, + Motion_OffhandDoubleThrustLow = 268435836, + Motion_OffhandDoubleThrustMed = 268435837, + Motion_OffhandDoubleThrustHigh = 268435838, + Motion_OffhandTripleThrustLow = 268435839, + Motion_OffhandTripleThrustMed = 268435840, + Motion_OffhandTripleThrustHigh = 268435841, + Motion_OffhandKick = 268435842, + Motion_AttackHigh4 = 268435843, + Motion_AttackMed4 = 268435844, + Motion_AttackLow4 = 268435845, + Motion_AttackHigh5 = 268435846, + Motion_AttackMed5 = 268435847, + Motion_AttackLow5 = 268435848, + Motion_AttackHigh6 = 268435849, + Motion_AttackMed6 = 268435850, + Motion_AttackLow6 = 268435851, + Motion_PunchFastHigh = 268435852, + Motion_PunchFastMed = 268435853, + Motion_PunchFastLow = 268435854, + Motion_PunchSlowHigh = 268435855, + Motion_PunchSlowMed = 268435856, + Motion_PunchSlowLow = 268435857, + Motion_OffhandPunchFastHigh = 268435858, + Motion_OffhandPunchFastMed = 268435859, + Motion_OffhandPunchFastLow = 268435860, + Motion_OffhandPunchSlowHigh = 268435861, + Motion_OffhandPunchSlowMed = 268435862, + Motion_OffhandPunchSlowLow = 268435863, + Motion_YMCA = 301990043, + Motion_Flatulence = 301990100, + Motion_Demonet = 301990111, + Motion_Cheer = 318767180, + Motion_ShakeFist = 318767225, + Motion_Beckon = 318767226, + Motion_BeSeeingYou = 318767227, + Motion_BlowKiss = 318767228, + Motion_BowDeep = 318767229, + Motion_ClapHands = 318767230, + Motion_Cry = 318767231, + Motion_Laugh = 318767232, + Motion_MimeEat = 318767233, + Motion_MimeDrink = 318767234, + Motion_Nod = 318767235, + Motion_Point = 318767236, + Motion_ShakeHead = 318767237, + Motion_Shrug = 318767238, + Motion_Wave = 318767239, + Motion_Akimbo = 318767240, + Motion_HeartyLaugh = 318767241, + Motion_Salute = 318767242, + Motion_ScratchHead = 318767243, + Motion_SmackHead = 318767244, + Motion_TapFoot = 318767245, + Motion_WaveHigh = 318767246, + Motion_WaveLow = 318767247, + Motion_YawnStretch = 318767248, + Motion_Cringe = 318767249, + Motion_Kneel = 318767250, + Motion_Plead = 318767251, + Motion_Shiver = 318767252, + Motion_Shoo = 318767253, + Motion_Slouch = 318767254, + Motion_Spit = 318767255, + Motion_Surrender = 318767256, + Motion_Woah = 318767257, + Motion_Winded = 318767258, + Motion_Pray = 318767306, + Motion_Mock = 318767307, + Motion_Teapot = 318767308, + Motion_WarmHands = 318767382, + Motion_Helper = 318767410, + Motion_NudgeLeft = 318767431, + Motion_NudgeRight = 318767432, + Motion_PointLeft = 318767433, + Motion_PointRight = 318767434, + Motion_PointDown = 318767435, + Motion_Knock = 318767436, + Motion_ScanHorizon = 318767437, + Motion_DrudgeDance = 318767438, + Motion_HaveASeat = 318767439, + Motion_StopTurning = 536870970, + Motion_Jump = 620757051, + Motion_Stop = 1073741828, + Motion_Fallen = 1073741832, + Motion_Interpolating = 1073741833, + Motion_Hover = 1073741834, + Motion_On = 1073741835, + Motion_Off = 1073741836, + Motion_Dead = 1073741841, + Motion_Falling = 1073741845, + Motion_Reload = 1073741846, + Motion_Unload = 1073741847, + Motion_Pickup = 1073741848, + Motion_StoreInBackpack = 1073741849, + Motion_Eat = 1073741850, + Motion_Drink = 1073741851, + Motion_Reading = 1073741852, + Motion_JumpCharging = 1073741853, + Motion_AimLevel = 1073741854, + Motion_AimHigh15 = 1073741855, + Motion_AimHigh30 = 1073741856, + Motion_AimHigh45 = 1073741857, + Motion_AimHigh60 = 1073741858, + Motion_AimHigh75 = 1073741859, + Motion_AimHigh90 = 1073741860, + Motion_AimLow15 = 1073741861, + Motion_AimLow30 = 1073741862, + Motion_AimLow45 = 1073741863, + Motion_AimLow60 = 1073741864, + Motion_AimLow75 = 1073741865, + Motion_AimLow90 = 1073741866, + Motion_MagicBlast = 1073741867, + Motion_MagicSelfHead = 1073741868, + Motion_MagicSelfHeart = 1073741869, + Motion_MagicBonus = 1073741870, + Motion_MagicClap = 1073741871, + Motion_MagicHarm = 1073741872, + Motion_MagicHeal = 1073741873, + Motion_MagicThrowMissile = 1073741874, + Motion_MagicRecoilMissile = 1073741875, + Motion_MagicPenalty = 1073741876, + Motion_MagicTransfer = 1073741877, + Motion_MagicVision = 1073741878, + Motion_MagicEnchantItem = 1073741879, + Motion_MagicPortal = 1073741880, + Motion_MagicPray = 1073741881, + Motion_CastSpell = 1073742035, + Motion_UseMagicStaff = 1073742048, + Motion_UseMagicWand = 1073742049, + Motion_TwitchSubstate1 = 1073742052, + Motion_TwitchSubstate2 = 1073742053, + Motion_TwitchSubstate3 = 1073742054, + Motion_Pickup5 = 1073742131, + Motion_Pickup10 = 1073742132, + Motion_Pickup15 = 1073742133, + Motion_Pickup20 = 1073742134, + Motion_Ready = 1090519043, + Motion_Crouch = 1090519058, + Motion_Sitting = 1090519059, + Motion_Sleeping = 1090519060, + Motion_ATOYOT = 1107296505, + Motion_ShakeFistState = 1124073706, + Motion_PrayState = 1124073707, + Motion_BowDeepState = 1124073708, + Motion_ClapHandsState = 1124073709, + Motion_CrossArmsState = 1124073710, + Motion_ShiverState = 1124073711, + Motion_PointState = 1124073712, + Motion_WaveState = 1124073713, + Motion_AkimboState = 1124073714, + Motion_SaluteState = 1124073715, + Motion_ScratchHeadState = 1124073716, + Motion_TapFootState = 1124073717, + Motion_LeanState = 1124073718, + Motion_KneelState = 1124073719, + Motion_PleadState = 1124073720, + Motion_SlouchState = 1124073722, + Motion_SurrenderState = 1124073723, + Motion_WoahState = 1124073724, + Motion_WindedState = 1124073725, + Motion_SnowAngelState = 1124073749, + Motion_CurtseyState = 1124073751, + Motion_AFKState = 1124073752, + Motion_MeditateState = 1124073753, + Motion_SitState = 1124073786, + Motion_SitCrossleggedState = 1124073787, + Motion_SitBackState = 1124073788, + Motion_PointLeftState = 1124073789, + Motion_PointRightState = 1124073790, + Motion_TalktotheHandState = 1124073791, + Motion_PointDownState = 1124073792, + Motion_DrudgeDanceState = 1124073793, + Motion_PossumState = 1124073794, + Motion_ReadState = 1124073795, + Motion_ThinkerState = 1124073796, + Motion_HaveASeatState = 1124073797, + Motion_AtEaseState = 1124073798, + Motion_RunForward = 1140850695, + Motion_WalkForward = 1157627909, + Motion_WalkBackwards = 1157627910, + Motion_TurnRight = 1694498829, + Motion_TurnLeft = 1694498830, + Motion_SideStepRight = 1694498831, + Motion_SideStepLeft = 1694498832 +} + +namespace MovementTypes { + public enum Type { + Invalid, + RawCommand, + InterpretedCommand, + StopRawCommand, + StopInterpretedCommand, + StopCompletely, + MoveToObject, + MoveToPosition, + TurnToObject, + TurnToHeading + } +} diff --git a/aclogview/Enums/Net.cs b/aclogview/Enums/Net.cs new file mode 100644 index 0000000..33d59df --- /dev/null +++ b/aclogview/Enums/Net.cs @@ -0,0 +1,113 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +public enum charError { + CHAR_ERROR_UNDEF, + CHAR_ERROR_LOGON, + CHAR_ERROR_LOGGED_ON, + CHAR_ERROR_ACCOUNT_LOGON, + CHAR_ERROR_SERVER_CRASH, + CHAR_ERROR_LOGOFF, + CHAR_ERROR_DELETE, + CHAR_ERROR_NO_PREMADE, + CHAR_ERROR_ACCOUNT_IN_USE, + CHAR_ERROR_ACCOUNT_INVALID, + CHAR_ERROR_ACCOUNT_DOESNT_EXIST, + CHAR_ERROR_ENTER_GAME_GENERIC, + CHAR_ERROR_ENTER_GAME_STRESS_ACCOUNT, + CHAR_ERROR_ENTER_GAME_CHARACTER_IN_WORLD, + CHAR_ERROR_ENTER_GAME_PLAYER_ACCOUNT_MISSING, + CHAR_ERROR_ENTER_GAME_CHARACTER_NOT_OWNED, + CHAR_ERROR_ENTER_GAME_CHARACTER_IN_WORLD_SERVER, + CHAR_ERROR_ENTER_GAME_OLD_CHARACTER, + CHAR_ERROR_ENTER_GAME_CORRUPT_CHARACTER, + CHAR_ERROR_ENTER_GAME_START_SERVER_DOWN, + CHAR_ERROR_ENTER_GAME_COULDNT_PLACE_CHARACTER, + CHAR_ERROR_LOGON_SERVER_FULL, + CHAR_ERROR_CHARACTER_IS_BOOTED, + CHAR_ERROR_ENTER_GAME_CHARACTER_LOCKED, + CHAR_ERROR_SUBSCRIPTION_EXPIRED, + CHAR_ERROR_NUM_ERRORS +} + +public enum ServerSwitchType { + ssWorldSwitch, + ssLogonSwitch +} + +public enum ReceiverState { + UNDEF_STATE, + NAK_STATE, + NO_NAK_STATE, + NO_STATE +} + +public enum ConnectionState { + cs_Disconnected, + cs_AwaitingWorldAuth, + cs_AuthSent, + cs_ConnectionRequestSent, + cs_ConnectionRequestAcked, + cs_Connected, + cs_DisconnectReceived, + cs_DisconnectSent +} + +public enum ICMDCommandEnum { + cmdNOP = 1, + cmdEchoRequest = 1902465605, + cmdEchoReply = 1819300421 +} + +public enum SEND_CODE { + UNDEF_SEND, + OK_SEND, + NET_FAIL_SEND, + FLOW_FAIL_SEND +} + +public enum DEFAULT_AUTHFLAGS { + AUTHFLAGS_ENABLECRYPTO = (1 << 0), + AUTHFLAGS_ADMINACCTOVERRIDE = (1 << 1), + AUTHFLAGS_EXTRADATA = (1 << 2), + AUTHFLAGS_LASTDEFAULT = AUTHFLAGS_EXTRADATA +} + +namespace ClientNet { + public enum WAIT_RESULT { + UNDEF_WAIT_RESULT, + DONE_WAIT_RESULT, + FAILED_WAIT_RESULT, + ROUTED_WAIT_RESULT, + NO_LOGON_SERVER_WAIT_RESULT, + EXPIRED_ZONE_TICKET_RESULT + } +} + +namespace PacketInfo { + public enum Protocol { + fe_tcp, + be_tcp, + fe_udp + } +} + +public enum NetStatus { + Net_Initializing, + Net_LoginAuthenticating, + Net_LoginConnecting, + Net_LoginConnected, + Net_LoginConnectionError, + Net_WorldConnectionError +} + +public enum NetBlobProcessedStatus { + NETBLOB_UNDEF_STATUS, + NETBLOB_PROCESSED_OK, + NETBLOB_OLD_INSTANCE, + NETBLOB_ERROR, + NETBLOB_QUEUED +} diff --git a/aclogview/Enums/Physics.cs b/aclogview/Enums/Physics.cs new file mode 100644 index 0000000..4b7496f --- /dev/null +++ b/aclogview/Enums/Physics.cs @@ -0,0 +1,129 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +public enum PhysicsState { + STATIC_PS = (1 << 0), + UNUSED1_PS = (1 << 1), + ETHEREAL_PS = (1 << 2), + REPORT_COLLISIONS_PS = (1 << 3), + IGNORE_COLLISIONS_PS = (1 << 4), + NODRAW_PS = (1 << 5), + MISSILE_PS = (1 << 6), + PUSHABLE_PS = (1 << 7), + ALIGNPATH_PS = (1 << 8), + PATHCLIPPED_PS = (1 << 9), + GRAVITY_PS = (1 << 10), + LIGHTING_ON_PS = (1 << 11), + PARTICLE_EMITTER_PS = (1 << 12), + UNNUSED2_PS = (1 << 13), + HIDDEN_PS = (1 << 14), + SCRIPTED_COLLISION_PS = (1 << 15), + HAS_PHYSICS_BSP_PS = (1 << 16), + INELASTIC_PS = (1 << 17), + HAS_DEFAULT_ANIM_PS = (1 << 18), + HAS_DEFAULT_SCRIPT_PS = (1 << 19), + CLOAKED_PS = (1 << 20), + REPORT_COLLISIONS_AS_ENVIRONMENT_PS = (1 << 21), + EDGE_SLIDE_PS = (1 << 22), + SLEDDING_PS = (1 << 23), + FROZEN_PS = (1 << 24) +} + +namespace PhysicsObjHook { + public enum HookType { + SCALING, + TRANSLUCENCY, + PART_TRANSLUCENCY, + LUMINOSITY, + DIFFUSION, + PART_LUMINOSITY, + PART_DIFFUSION, + CALL_PES + } +} + +public enum HookTypeEnum { + Undef_HookTypeEnum = 0, + Floor_HookTypeEnum = (1 << 0), + Wall_HookTypeEnum = (1 << 1), + Ceiling_HookTypeEnum = (1 << 2), + Yard_HookTypeEnum = (1 << 3), + Roof_HookTypeEnum = (1 << 4) +} + +public enum PhysicsTimeStamp { + POSITION_TS, + MOVEMENT_TS, + STATE_TS, + VECTOR_TS, + TELEPORT_TS, + SERVER_CONTROLLED_MOVE_TS, + FORCE_POSITION_TS, + OBJDESC_TS, + INSTANCE_TS, + NUM_PHYSICS_TS +} + +public enum SetPositionError { + OK_SPE, + GENERAL_FAILURE_SPE, + NO_VALID_POSITION_SPE, + NO_CELL_SPE, + COLLIDED_SPE, + INVALID_ARGUMENTS = 256 +} + +public enum SetPositionFlag { + PLACEMENT_SPF = (1 << 0), + TELEPORT_SPF = (1 << 1), + RESTORE_SPF = (1 << 2), + // NOTE: Skip 1 + SLIDE_SPF = (1 << 4), + DONOTCREATECELLS_SPF = (1 << 5), + // NOTE: Skip 2 + SCATTER_SPF = (1 << 8), + RANDOMSCATTER_SPF = (1 << 9), + LINE_SPF = (1 << 10), + // NOTE: Skip 1 + SEND_POSITION_EVENT_SPF = (1 << 12) +} + +public enum ObjCollisionProfile_Bitfield { + Undef_ECPB = 0, + Creature_OCPB = (1 << 0), + Player_OCPB = (1 << 1), + Attackable_OCPB = (1 << 2), + Missile_OCPB = (1 << 3), + Contact_OCPB = (1 << 4), + MyContact_OCPB = (1 << 5), + Door_OCPB = (1 << 6), + Cloaked_OCPB = (1 << 7) +} + +public enum EnvCollisionProfile_Bitfield { + Undef_ECPB = 0, + MyContact_ECPB = (1 << 0) +} + +public enum TransientState { + CONTACT_TS = (1 << 0), + ON_WALKABLE_TS = (1 << 1), + SLIDING_TS = (1 << 2), + WATER_CONTACT_TS = (1 << 3), + STATIONARY_FALL_TS = (1 << 4), + STATIONARY_STOP_TS = (1 << 5), + STATIONARY_STUCK_TS = (1 << 6), + ACTIVE_TS = (1 << 7), + CHECK_ETHEREAL_TS = (1 << 8) +} + +public enum TransitionState { + INVALID_TS, + OK_TS, + COLLIDED_TS, + ADJUSTED_TS, + SLID_TS +} diff --git a/aclogview/Enums/Portals.cs b/aclogview/Enums/Portals.cs new file mode 100644 index 0000000..3e12826 --- /dev/null +++ b/aclogview/Enums/Portals.cs @@ -0,0 +1,27 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +public enum PortalLinkType { + Undef_PortalLinkType, + LinkedLifestone_PortalLinkType, + LinkedPortalOne_PortalLinkType, + LinkedPortalTwo_PortalLinkType +} + +public enum PortalRecallType { + Undef_PortalRecallType, + LastLifestone_PortalRecallType, + LinkedLifestone_PortalRecallType, + LastPortal_PortalRecallType, + LinkedPortalOne_PortalRecallType, + LinkedPortalTwo_PortalRecallType +} + +public enum PortalSummonType { + Undef_PortalSummonType, + LinkedPortalOne_PortalSummonType, + LinkedPortalTwo_PortalSummonType +} diff --git a/aclogview/Enums/Script.cs b/aclogview/Enums/Script.cs new file mode 100644 index 0000000..514bef7 --- /dev/null +++ b/aclogview/Enums/Script.cs @@ -0,0 +1,183 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +public enum PScriptType { + PS_Invalid, + PS_Test1, + PS_Test2, + PS_Test3, + PS_Launch, + PS_Explode, + PS_AttribUpRed, + PS_AttribDownRed, + PS_AttribUpOrange, + PS_AttribDownOrange, + PS_AttribUpYellow, + PS_AttribDownYellow, + PS_AttribUpGreen, + PS_AttribDownGreen, + PS_AttribUpBlue, + PS_AttribDownBlue, + PS_AttribUpPurple, + PS_AttribDownPurple, + PS_SkillUpRed, + PS_SkillDownRed, + PS_SkillUpOrange, + PS_SkillDownOrange, + PS_SkillUpYellow, + PS_SkillDownYellow, + PS_SkillUpGreen, + PS_SkillDownGreen, + PS_SkillUpBlue, + PS_SkillDownBlue, + PS_SkillUpPurple, + PS_SkillDownPurple, + PS_SkillDownBlack, + PS_HealthUpRed, + PS_HealthDownRed, + PS_HealthUpBlue, + PS_HealthDownBlue, + PS_HealthUpYellow, + PS_HealthDownYellow, + PS_RegenUpRed, + PS_RegenDownREd, + PS_RegenUpBlue, + PS_RegenDownBlue, + PS_RegenUpYellow, + PS_RegenDownYellow, + PS_ShieldUpRed, + PS_ShieldDownRed, + PS_ShieldUpOrange, + PS_ShieldDownOrange, + PS_ShieldUpYellow, + PS_ShieldDownYellow, + PS_ShieldUpGreen, + PS_ShieldDownGreen, + PS_ShieldUpBlue, + PS_ShieldDownBlue, + PS_ShieldUpPurple, + PS_ShieldDownPurple, + PS_ShieldUpGrey, + PS_ShieldDownGrey, + PS_EnchantUpRed, + PS_EnchantDownRed, + PS_EnchantUpOrange, + PS_EnchantDownOrange, + PS_EnchantUpYellow, + PS_EnchantDownYellow, + PS_EnchantUpGreen, + PS_EnchantDownGreen, + PS_EnchantUpBlue, + PS_EnchantDownBlue, + PS_EnchantUpPurple, + PS_EnchantDownPurple, + PS_VitaeUpWhite, + PS_VitaeDownBlack, + PS_VisionUpWhite, + PS_VisionDownBlack, + PS_SwapHealth_Red_To_Yellow, + PS_SwapHealth_Red_To_Blue, + PS_SwapHealth_Yellow_To_Red, + PS_SwapHealth_Yellow_To_Blue, + PS_SwapHealth_Blue_To_Red, + PS_SwapHealth_Blue_To_Yellow, + PS_TransUpWhite, + PS_TransDownBlack, + PS_Fizzle, + PS_PortalEntry, + PS_PortalExit, + PS_BreatheFlame, + PS_BreatheFrost, + PS_BreatheAcid, + PS_BreatheLightning, + PS_Create, + PS_Destroy, + PS_ProjectileCollision, + PS_SplatterLowLeftBack, + PS_SplatterLowLeftFront, + PS_SplatterLowRightBack, + PS_SplatterLowRightFront, + PS_SplatterMidLeftBack, + PS_SplatterMidLeftFront, + PS_SplatterMidRightBack, + PS_SplatterMidRightFront, + PS_SplatterUpLeftBack, + PS_SplatterUpLeftFront, + PS_SplatterUpRightBack, + PS_SplatterUpRightFront, + PS_SparkLowLeftBack, + PS_SparkLowLeftFront, + PS_SparkLowRightBack, + PS_SparkLowRightFront, + PS_SparkMidLeftBack, + PS_SparkMidLeftFront, + PS_SparkMidRightBack, + PS_SparkMidRightFront, + PS_SparkUpLeftBack, + PS_SparkUpLeftFront, + PS_SparkUpRightBack, + PS_SparkUpRightFront, + PS_PortalStorm, + PS_Hide, + PS_UnHide, + PS_Hidden, + PS_DisappearDestroy, + SpecialState1, + SpecialState2, + SpecialState3, + SpecialState4, + SpecialState5, + SpecialState6, + SpecialState7, + SpecialState8, + SpecialState9, + SpecialState0, + SpecialStateRed, + SpecialStateOrange, + SpecialStateYellow, + SpecialStateGreen, + SpecialStateBlue, + SpecialStatePurple, + SpecialStateWhite, + SpecialStateBlack, + PS_LevelUp, + PS_EnchantUpGrey, + PS_EnchantDownGrey, + PS_WeddingBliss, + PS_EnchantUpWhite, + PS_EnchantDownWhite, + PS_CampingMastery, + PS_CampingIneptitude, + PS_DispelLife, + PS_DispelCreature, + PS_DispelAll, + PS_BunnySmite, + PS_BaelZharonSmite, + PS_WeddingSteele, + PS_RestrictionEffectBlue, + PS_RestrictionEffectGreen, + PS_RestrictionEffectGold, + PS_LayingofHands, + PS_AugmentationUseAttribute, + PS_AugmentationUseSkill, + PS_AugmentationUseResistances, + PS_AugmentationUseOther, + PS_BlackMadness, + PS_AetheriaLevelUp, + PS_AetheriaSurgeDestruction, + PS_AetheriaSurgeProtection, + PS_AetheriaSurgeRegeneration, + PS_AetheriaSurgeAffliction, + PS_AetheriaSurgeFestering, + PS_HealthDownVoid, + PS_RegenDownVoid, + PS_SkillDownVoid, + PS_DirtyFightingHealDebuff, + PS_DirtyFightingAttackDebuff, + PS_DirtyFightingDefenseDebuff, + PS_DirtyFightingDamageOverTime, + NUM_PSCRIPT_TYPES +} diff --git a/aclogview/Enums/Shop.cs b/aclogview/Enums/Shop.cs new file mode 100644 index 0000000..3aa3bb0 --- /dev/null +++ b/aclogview/Enums/Shop.cs @@ -0,0 +1,17 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +public enum ShopMode { + SHOP_MODE_UNDEF, + SHOP_MODE_NONE, + SHOP_MODE_BUY, + SHOP_MODE_SELL +} + +public enum ShopEvent { + SE_BUY, + SE_SELL +} diff --git a/aclogview/Enums/Skills.cs b/aclogview/Enums/Skills.cs new file mode 100644 index 0000000..52f8b8d --- /dev/null +++ b/aclogview/Enums/Skills.cs @@ -0,0 +1,21 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +public enum SKILL_ADVANCEMENT_CLASS { + UNDEF_SKILL_ADVANCEMENT_CLASS, + UNTRAINED_SKILL_ADVANCEMENT_CLASS, + TRAINED_SKILL_ADVANCEMENT_CLASS, + SPECIALIZED_SKILL_ADVANCEMENT_CLASS, + NUM_SKILL_ADVANCEMENT_CLASSES +} + +public enum SKILL_CATEGORY { + UNDEF_SKILL_CATEGORY, + WEAPON_SKILL_CATEGORY, + NONWEAPON_SKILL_CATEGORY, + MAGIC_SKILL_CATEGORY, + NUM_SKILL_CATEGORIES +} diff --git a/aclogview/Enums/Sound.cs b/aclogview/Enums/Sound.cs new file mode 100644 index 0000000..1175bdc --- /dev/null +++ b/aclogview/Enums/Sound.cs @@ -0,0 +1,214 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +public enum SoundType { + Sound_Invalid, + Sound_Speak1, + Sound_Random, + Sound_Attack1, + Sound_Attack2, + Sound_Attack3, + Sound_SpecialAttack1, + Sound_SpecialAttack2, + Sound_SpecialAttack3, + Sound_Damage1, + Sound_Damage2, + Sound_Damage3, + Sound_Wound1, + Sound_Wound2, + Sound_Wound3, + Sound_Death1, + Sound_Death2, + Sound_Death3, + Sound_Grunt1, + Sound_Grunt2, + Sound_Grunt3, + Sound_Oh1, + Sound_Oh2, + Sound_Oh3, + Sound_Heave1, + Sound_Heave2, + Sound_Heave3, + Sound_Knockdown1, + Sound_Knockdown2, + Sound_Knockdown3, + Sound_Swoosh1, + Sound_Swoosh2, + Sound_Swoosh3, + Sound_Thump1, + Sound_Smash1, + Sound_Scratch1, + Sound_Spear, + Sound_Sling, + Sound_Dagger, + Sound_ArrowWhiz1, + Sound_ArrowWhiz2, + Sound_CrossbowPull, + Sound_CrossbowRelease, + Sound_BowPull, + Sound_BowRelease, + Sound_ThrownWeaponRelease1, + Sound_ArrowLand, + Sound_Collision, + Sound_HitFlesh1, + Sound_HitLeather1, + Sound_HitChain1, + Sound_HitPlate1, + Sound_HitMissile1, + Sound_HitMissile2, + Sound_HitMissile3, + Sound_Footstep1, + Sound_Footstep2, + Sound_Walk1, + Sound_Dance1, + Sound_Dance2, + Sound_Dance3, + Sound_Hidden1, + Sound_Hidden2, + Sound_Hidden3, + Sound_Eat1, + Sound_Drink1, + Sound_Open, + Sound_Close, + Sound_OpenSlam, + Sound_CloseSlam, + Sound_Ambient1, + Sound_Ambient2, + Sound_Ambient3, + Sound_Ambient4, + Sound_Ambient5, + Sound_Ambient6, + Sound_Ambient7, + Sound_Ambient8, + Sound_Waterfall, + Sound_LogOut, + Sound_LogIn, + Sound_LifestoneOn, + Sound_AttribUp, + Sound_AttribDown, + Sound_SkillUp, + Sound_SkillDown, + Sound_HealthUp, + Sound_HealthDown, + Sound_ShieldUp, + Sound_ShieldDown, + Sound_EnchantUp, + Sound_EnchantDown, + Sound_VisionUp, + Sound_VisionDown, + Sound_Fizzle, + Sound_Launch, + Sound_Explode, + Sound_TransUp, + Sound_TransDown, + Sound_BreatheFlaem, + Sound_BreatheAcid, + Sound_BreatheFrost, + Sound_BreatheLightning, + Sound_Create, + Sound_Destroy, + Sound_Lockpicking, + Sound_UI_EnterPortal, + Sound_UI_ExitPortal, + Sound_UI_GeneralQuery, + Sound_UI_GeneralError, + Sound_UI_TransientMessage, + Sound_UI_IconPickUp, + Sound_UI_IconSuccessfulDrop, + Sound_UI_IconInvalid_Drop, + Sound_UI_ButtonPress, + Sound_UI_GrabSlider, + Sound_UI_ReleaseSlider, + Sound_UI_NewTargetSelected, + Sound_UI_Roar, + Sound_UI_Bell, + Sound_UI_Chant1, + Sound_UI_Chant2, + Sound_UI_DarkWhispers1, + Sound_UI_DarkWhispers2, + Sound_UI_DarkLaugh, + Sound_UI_DarkWind, + Sound_UI_DarkSpeech, + Sound_UI_Drums, + Sound_UI_GhostSpeak, + Sound_UI_Breathing, + Sound_UI_Howl, + Sound_UI_LostSouls, + Sound_UI_Squeal, + Sound_UI_Thunder1, + Sound_UI_Thunder2, + Sound_UI_Thunder3, + Sound_UI_Thunder4, + Sound_UI_Thunder5, + Sound_UI_Thunder6, + Sound_RaiseTrait, + Sound_WieldObject, + Sound_UnwieldObject, + Sound_ReceiveItem, + Sound_PickUpItem, + Sound_DropItem, + Sound_ResistSpell, + Sound_PicklockFail, + Sound_LockSuccess, + Sound_OpenFailDueToLock, + Sound_TriggerActivated, + Sound_SpellExpire, + Sound_ItemManaDepleted, + Sound_TriggerActivated1, + Sound_TriggerActivated2, + Sound_TriggerActivated3, + Sound_TriggerActivated4, + Sound_TriggerActivated5, + Sound_TriggerActivated6, + Sound_TriggerActivated7, + Sound_TriggerActivated8, + Sound_TriggerActivated9, + Sound_TriggerActivated10, + Sound_TriggerActivated11, + Sound_TriggerActivated12, + Sound_TriggerActivated13, + Sound_TriggerActivated14, + Sound_TriggerActivated15, + Sound_TriggerActivated16, + Sound_TriggerActivated17, + Sound_TriggerActivated18, + Sound_TriggerActivated19, + Sound_TriggerActivated20, + Sound_TriggerActivated21, + Sound_TriggerActivated22, + Sound_TriggerActivated23, + Sound_TriggerActivated24, + Sound_TriggerActivated25, + Sound_TriggerActivated26, + Sound_TriggerActivated27, + Sound_TriggerActivated28, + Sound_TriggerActivated29, + Sound_TriggerActivated30, + Sound_TriggerActivated31, + Sound_TriggerActivated32, + Sound_TriggerActivated33, + Sound_TriggerActivated34, + Sound_TriggerActivated35, + Sound_TriggerActivated36, + Sound_TriggerActivated37, + Sound_TriggerActivated38, + Sound_TriggerActivated39, + Sound_TriggerActivated40, + Sound_TriggerActivated41, + Sound_TriggerActivated42, + Sound_TriggerActivated43, + Sound_TriggerActivated44, + Sound_TriggerActivated45, + Sound_TriggerActivated46, + Sound_TriggerActivated47, + Sound_TriggerActivated48, + Sound_TriggerActivated49, + Sound_TriggerActivated50, + Sound_HealthDownVoid, + Sound_RegenDownVoid, + Sound_SkillDownVoid, + NUM_SOUND_TYPES +} diff --git a/aclogview/Enums/Spells.cs b/aclogview/Enums/Spells.cs new file mode 100644 index 0000000..a615dcd --- /dev/null +++ b/aclogview/Enums/Spells.cs @@ -0,0 +1,6337 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +public enum EnchantmentVersion { + Undef_EnchantmentVersion, + SpellSetID_EnchantmentVersion, + Newest_EnchantmentVersion = SpellSetID_EnchantmentVersion +} + +public enum SpellBanks { + SPELLCAST_BANK_1, + SPELLCAST_BANK_2, + SPELLCAST_BANK_3, + SPELLCAST_BANK_4, + SPELLCAST_BANK_5, + SPELLCAST_BANK_6, + SPELLCAST_BANK_7, + SPELLCAST_BANK_8, + NUM_SPELLCAST_BANKS +} + +public enum SpellIndex { + Undef_SpellIndex = 0, + Resistable_SpellIndex = (1 << 0), + PKSensitive_SpellIndex = (1 << 1), + Beneficial_SpellIndex = (1 << 2), + SelfTargeted_SpellIndex = (1 << 3), + Reversed_SpellIndex = (1 << 4), + NotIndoor_SpellIndex = (1 << 5), + NotOutdoor_SpellIndex = (1 << 6), + NotResearchable_SpellIndex = (1 << 7), + Projectile_SpellIndex = (1 << 8), + CreatureSpell_SpellIndex = (1 << 9), + ExcludedFromItemDescriptions_SpellIndex = (1 << 10), + IgnoresManaConversion_SpellIndex = (1 << 11), + NonTrackingProjectile_SpellIndex = (1 << 12), + FellowshipSpell_SpellIndex = (1 << 13), + FastCast_SpellIndex = (1 << 14), + IndoorLongRange_SpellIndex = (1 << 15), + DamageOverTime_SpellIndex = (1 << 16) +} + +public enum SpellComponentType { + Undef_SpellComponentType, + Power_SpellComponentType, + Action_SpellComponentType, + ConceptPrefix_SpellComponentType, + ConceptSuffix_SpellComponentType, + Target_SpellComponentType, + Accent_SpellComponentType, + Pea_SpellComponentType +} + +public enum SpellComponentCategory { + Scarab_SpellComponentCategory, + Herb_SpellComponentCategory, + PowderedGem_SpellComponentCategory, + AlchemicalSubstance_SpellComponentCategory, + Talisman_SpellComponentCategory, + Taper_SpellComponentCategory, + Pea_SpellComponentCategory, + Num_SpellComponentCategories, + Undef_SpellComponentCategory +} + +public enum SpellType { + Undef_SpellType, + Enchantment_SpellType, + Projectile_SpellType, + Boost_SpellType, + Transfer_SpellType, + PortalLink_SpellType, + PortalRecall_SpellType, + PortalSummon_SpellType, + PortalSending_SpellType, + Dispel_SpellType, + LifeProjectile_SpellType, + FellowBoost_SpellType, + FellowEnchantment_SpellType, + FellowPortalSending_SpellType, + FellowDispel_SpellType, + EnchantmentProjectile_SpellType +} + +public enum SpellSetID { + Invalid_SpellSetID, + Test_SpellSetID, + Test_EquipmentSet_SpellSetID, + UNKNOWN__GUESSEDNAME, // NOTE: Missing 1 + CarraidasBenediction_EquipmentSet_SpellSetID, + NobleRelic_EquipmentSet_SpellSetID, + AncientRelic_EquipmentSet_SpellSetID, + AlduressaRelic_EquipmentSet_SpellSetID, + Ninja_EquipmentSet_SpellSetID, + EmpyreanRings_EquipmentSet_SpellSetID, + ArmMindHeart_EquipmentSet_SpellSetID, + ArmorPerfectLight_EquipmentSet_SpellSetID, + ArmorPerfectLight2_EquipmentSet_SpellSetID, + Soldiers_EquipmentSet_SpellSetID, + Adepts_EquipmentSet_SpellSetID, + Archers_EquipmentSet_SpellSetID, + Defenders_EquipmentSet_SpellSetID, + Tinkers_EquipmentSet_SpellSetID, + Crafters_EquipmentSet_SpellSetID, + Hearty_EquipmentSet_SpellSetID, + Dexterous_EquipmentSet_SpellSetID, + Wise_EquipmentSet_SpellSetID, + Swift_EquipmentSet_SpellSetID, + Hardened_EquipmentSet_SpellSetID, + Reinforced_EquipmentSet_SpellSetID, + Interlocking_EquipmentSet_SpellSetID, + Flameproof_EquipmentSet_SpellSetID, + Acidproof_EquipmentSet_SpellSetID, + Coldproof_EquipmentSet_SpellSetID, + Lightningproof_EquipmentSet_SpellSetID, + SocietyArmor_EquipmentSet_SpellSetID, + ColosseumClothing_EquipmentSet_SpellSetID, + GraveyardClothing_EquipmentSet_SpellSetID, + OlthoiClothing_EquipmentSet_SpellSetID, + NoobieArmor_EquipmentSet_SpellSetID, + AetheriaDefense_EquipmentSet_SpellSetID, + AetheriaDestruction_EquipmentSet_SpellSetID, + AetheriaFury_EquipmentSet_SpellSetID, + AetheriaGrowth_EquipmentSet_SpellSetID, + AetheriaVigor_EquipmentSet_SpellSetID, + RareDamageResistance_EquipmentSet_SpellSetID, + RareDamageBoost_EquipmentSet_SpellSetID, + OlthoiArmorDRed_Set_SpellSetID, + OlthoiArmorCRat_Set_SpellSetID, + OlthoiArmorCRed_Set_SpellSetID, + OlthoiArmorDRat_Set_SpellSetID, + AlduressaRelicUpgrade_EquipmentSet_SpellSetID, + AncientRelicUpgrade_EquipmentSet_SpellSetID, + NobleRelicUpgrade_EquipmentSet_SpellSetID, + CloakAlchemy_EquipmentSet_SpellSetID, + CloakArcaneLore_EquipmentSet_SpellSetID, + CloakArmorTinkering_EquipmentSet_SpellSetID, + CloakAssessPerson_EquipmentSet_SpellSetID, + CloakAxe_EquipmentSet_SpellSetID, + CloakBow_EquipmentSet_SpellSetID, + CloakCooking_EquipmentSet_SpellSetID, + CloakCreatureEnchantment_EquipmentSet_SpellSetID, + CloakCrossbow_EquipmentSet_SpellSetID, + CloakDagger_EquipmentSet_SpellSetID, + CloakDeception_EquipmentSet_SpellSetID, + CloakFletching_EquipmentSet_SpellSetID, + CloakHealing_EquipmentSet_SpellSetID, + CloakItemEnchantment_EquipmentSet_SpellSetID, + CloakItemTinkering_EquipmentSet_SpellSetID, + CloakLeadership_EquipmentSet_SpellSetID, + CloakLifeMagic_EquipmentSet_SpellSetID, + CloakLoyalty_EquipmentSet_SpellSetID, + CloakMace_EquipmentSet_SpellSetID, + CloakMagicDefense_EquipmentSet_SpellSetID, + CloakMagicItemTinkering_EquipmentSet_SpellSetID, + CloakManaConversion_EquipmentSet_SpellSetID, + CloakMeleeDefense_EquipmentSet_SpellSetID, + CloakMissileDefense_EquipmentSet_SpellSetID, + CloakSalvaging_EquipmentSet_SpellSetID, + CloakSpear_EquipmentSet_SpellSetID, + CloakStaff_EquipmentSet_SpellSetID, + CloakSword_EquipmentSet_SpellSetID, + CloakThrownWeapon_EquipmentSet_SpellSetID, + CloakTwoHandedCombat_EquipmentSet_SpellSetID, + CloakUnarmedCombat_EquipmentSet_SpellSetID, + CloakVoidMagic_EquipmentSet_SpellSetID, + CloakWarMagic_EquipmentSet_SpellSetID, + CloakWeaponTinkering_EquipmentSet_SpellSetID, + CloakAssessCreature_EquipmentSet_SpellSetID, + CloakDirtyFighting_EquipmentSet_SpellSetID, + CloakDualWield_EquipmentSet_SpellSetID, + CloakRecklessness_EquipmentSet_SpellSetID, + CloakShield_EquipmentSet_SpellSetID, + CloakSneakAttack_EquipmentSet_SpellSetID, + Ninja_New_EquipmentSet_SpellSetID, + CloakSummoning_EquipmentSet_SpellSetID +} + +public enum SpellID { + Undef_SpellID, + StrengthOther1_SpellID, + StrengthSelf1_SpellID, + WeaknessOther1_SpellID, + WeaknessSelf1_SpellID, + HealOther1_SpellID, + HealSelf1_SpellID, + HarmOther1_SpellID, + HarmSelf1_SpellID, + InfuseMana1_SpellID, + UNKNOWN__GUESSEDNAME10, // NOTE: Missing 1 + UNKNOWN__GUESSEDNAME11, // NOTE: Missing 1 + UNKNOWN__GUESSEDNAME12, // NOTE: Missing 1 + UNKNOWN__GUESSEDNAME13, // NOTE: Missing 1 + UNKNOWN__GUESSEDNAME14, // NOTE: Missing 1 + VulnerabilityOther1_SpellID, + VulnerabilitySelf1_SpellID, + InvulnerabilityOther1_SpellID, + InvulnerabilitySelf1_SpellID, + FireProtectionOther1_SpellID, + FireProtectionSelf1_SpellID, + FireVulnerabilityOther1_SpellID, + FireVulnerabilitySelf1_SpellID, + ArmorOther1_SpellID, + ArmorSelf1_SpellID, + ImperilOther1_SpellID, + ImperilSelf1_SpellID, + FlameBolt1_SpellID, + FrostBolt1_SpellID, + UNKNOWN__GUESSEDNAME29, // NOTE: Missing 1 + UNKNOWN__GUESSEDNAME30, // NOTE: Missing 1 + UNKNOWN__GUESSEDNAME31, // NOTE: Missing 1 + UNKNOWN__GUESSEDNAME32, // NOTE: Missing 1 + UNKNOWN__GUESSEDNAME33, // NOTE: Missing 1 + UNKNOWN__GUESSEDNAME34, // NOTE: Missing 1 + BloodDrinker1_SpellID, + BloodLoather_SpellID, + Bladebane1_SpellID, + BladeLure1_SpellID, + UNKNOWN__GUESSEDNAME39, // NOTE: Missing 1 + UNKNOWN__GUESSEDNAME40, // NOTE: Missing 1 + UNKNOWN__GUESSEDNAME41, // NOTE: Missing 1 + UNKNOWN__GUESSEDNAME42, // NOTE: Missing 1 + UNKNOWN__GUESSEDNAME43, // NOTE: Missing 1 + UNKNOWN__GUESSEDNAME44, // NOTE: Missing 1 + UNKNOWN__GUESSEDNAME45, // NOTE: Missing 1 + UNKNOWN__GUESSEDNAME46, // NOTE: Missing 1 + PortalTie1_SpellID, + PortalTieRecall1_SpellID, + SwiftKiller1_SpellID, + LeadenWeapon1_SpellID, + Impenetrability1_SpellID, + UNKNOWN__GUESSEDNAME52, // NOTE: Missing 1 + RejuvenationOther1_SpellID, + RejuvenationSelf1_SpellID, + UNKNOWN__GUESSEDNAME55, // NOTE: Missing 1 + UNKNOWN__GUESSEDNAME56, // NOTE: Missing 1 + MagicBolt1_SpellID, + AcidStream1_SpellID, + AcidStream2_SpellID, + AcidStream3_SpellID, + AcidStream4_SpellID, + AcidStream5_SpellID, + AcidStream6_SpellID, + ShockWave1_SpellID, + ShockWave2_SpellID, + ShockWave3_SpellID, + ShockWave4_SpellID, + ShockWave5_SpellID, + ShockWave6_SpellID, + FrostBolt2_SpellID, + FrostBolt3_SpellID, + FrostBolt4_SpellID, + FrostBolt5_SpellID, + FrostBolt6_SpellID, + LightningBolt1_SpellID, + LightningBolt2_SpellID, + LightningBolt3_SpellID, + LightningBolt4_SpellID, + LightningBolt5_SpellID, + LightningBolt6_SpellID, + FlameBolt2_SpellID, + FlameBolt3_SpellID, + FlameBolt4_SpellID, + FlameBolt5_SpellID, + FlameBolt6_SpellID, + ForceBolt1_SpellID, + ForceBolt2_SpellID, + ForceBolt3_SpellID, + ForceBolt4_SpellID, + ForceBolt5_SpellID, + ForceBolt6_SpellID, + WhirlingBlade1_SpellID, + WhirlingBlade2_SpellID, + WhirlingBlade3_SpellID, + WhirlingBlade4_SpellID, + WhirlingBlade5_SpellID, + WhirlingBlade6_SpellID, + UNKNOWN__GUESSEDNAME98, // NOTE: Missing 1 + AcidBlast3_SpellID, + AcidBlast4_SpellID, + AcidBlast5_SpellID, + AcidBlast6_SpellID, + ShockBlast3_SpellID, + ShockBlast4_SpellID, + ShockBlast5_SpellID, + ShockBlast6_SpellID, + FrostBlast3_SpellID, + FrostBlast4_SpellID, + FrostBlast5_SpellID, + FrostBlast6_SpellID, + LightningBlast3_SpellID, + LightningBlast4_SpellID, + LightningBlast5_SpellID, + LightningBlast6_SpellID, + FlameBlast3_SpellID, + FlameBlast4_SpellID, + FlameBlast5_SpellID, + FlameBlast6_SpellID, + ForceBlast3_SpellID, + ForceBlast4_SpellID, + ForceBlast5_SpellID, + ForceBlast6_SpellID, + BladeBlast3_SpellID, + BladeBlast4_SpellID, + BladeBlast5_SpellID, + BladeBlast6_SpellID, + AcidVolley3_SpellID, + AcidVolley4_SpellID, + AcidVolley5_SpellID, + AcidVolley6_SpellID, + BludgeoningVolley3_SpellID, + BludgeoningVolley4_SpellID, + BludgeoningVolley5_SpellID, + BludgeoningVolley6_SpellID, + FrostVolley3_SpellID, + FrostVolley4_SpellID, + FrostVolley5_SpellID, + FrostVolley6_SpellID, + LightningVolley3_SpellID, + LightningVolley4_SpellID, + LightningVolley5_SpellID, + LightningVolley6_SpellID, + FlameVolley3_SpellID, + FlameVolley4_SpellID, + FlameVolley5_SpellID, + FlameVolley6_SpellID, + ForceVolley3_SpellID, + ForceVolley4_SpellID, + ForceVolley5_SpellID, + ForceVolley6_SpellID, + BladeVolley3_SpellID, + BladeVolley4_SpellID, + BladeVolley5_SpellID, + BladeVolley6_SpellID, + UNKNOWN__GUESSEDNAME155, // NOTE: Missing 1 + UNKNOWN__GUESSEDNAME156, // NOTE: Missing 1 + SummonPortal1_SpellID, + SummonPortal2_SpellID, + RegenerationOther1_SpellID, + RegenerationOther2_SpellID, + RegenerationOther3_SpellID, + RegenerationOther4_SpellID, + RegenerationOther5_SpellID, + RegenerationOther6_SpellID, + RegenerationSelf1_SpellID, + RegenerationSelf2_SpellID, + RegenerationSelf3_SpellID, + RegenerationSelf4_SpellID, + RegenerationSelf5_SpellID, + RegenerationSelf6_SpellID, + FesterOther1_SpellID, + FesterOther2_SpellID, + FesterOther3_SpellID, + FesterOther4_SpellID, + FesterOther5_SpellID, + FesterOther6_SpellID, + UNKNOWN__GUESSEDNAME177, // NOTE: Missing 1 + FesterSelf1_SpellID, + FesterSelf2_SpellID, + FesterSelf3_SpellID, + FesterSelf4_SpellID, + FesterSelf5_SpellID, + FesterSelf6_SpellID, + RejuvenationOther2_SpellID, + RejuvenationOther3_SpellID, + RejuvenationOther4_SpellID, + RejuvenationOther5_SpellID, + RejuvenationOther6_SpellID, + RejuvenationSelf2_SpellID, + RejuvenationSelf3_SpellID, + RejuvenationSelf4_SpellID, + RejuvenationSelf5_SpellID, + RejuvenationSelf6_SpellID, + ExhaustionOther1_SpellID, + ExhaustionOther2_SpellID, + ExhaustionOther3_SpellID, + ExhaustionOther4_SpellID, + ExhaustionOther5_SpellID, + ExhaustionOther6_SpellID, + ExhaustionSelf1_SpellID, + ExhaustionSelf2_SpellID, + ExhaustionSelf3_SpellID, + ExhaustionSelf4_SpellID, + ExhaustionSelf5_SpellID, + ExhaustionSelf6_SpellID, + ManaRenewalOther1_SpellID, + ManaRenewalOther2_SpellID, + ManaRenewalOther3_SpellID, + ManaRenewalOther4_SpellID, + ManaRenewalOther5_SpellID, + ManaRenewalOther6_SpellID, + ManaRenewalSelf1_SpellID, + ManaRenewalSelf2_SpellID, + ManaRenewalSelf3_SpellID, + ManaRenewalSelf4_SpellID, + ManaRenewalSelf5_SpellID, + ManaRenewalSelf6_SpellID, + ManaDepletionOther1_SpellID, + ManaDepletionOther2_SpellID, + ManaDepletionOther3_SpellID, + ManaDepletionOther4_SpellID, + ManaDepletionOther5_SpellID, + ManaDepletionOther6_SpellID, + ManaDepletionSelf1_SpellID, + ManaDepletionSelf2_SpellID, + ManaDepletionSelf3_SpellID, + ManaDepletionSelf4_SpellID, + ManaDepletionSelf5_SpellID, + ManaDepletionSelf6_SpellID, + VulnerabilityOther2_SpellID, + VulnerabilityOther3_SpellID, + VulnerabilityOther4_SpellID, + VulnerabilityOther5_SpellID, + VulnerabilityOther6_SpellID, + VulnerabilitySelf2_SpellID, + VulnerabilitySelf3_SpellID, + VulnerabilitySelf4_SpellID, + VulnerabilitySelf5_SpellID, + VulnerabilitySelf6_SpellID, + InvulnerabilityOther2_SpellID, + InvulnerabilityOther3_SpellID, + InvulnerabilityOther4_SpellID, + InvulnerabilityOther5_SpellID, + InvulnerabilityOther6_SpellID, + InvulnerabilitySelf2_SpellID, + InvulnerabilitySelf3_SpellID, + InvulnerabilitySelf4_SpellID, + InvulnerabilitySelf5_SpellID, + InvulnerabilitySelf6_SpellID, + ImpregnabilityOther1_SpellID, + ImpregnabilityOther2_SpellID, + ImpregnabilityOther3_SpellID, + ImpregnabilityOther4_SpellID, + ImpregnabilityOther5_SpellID, + ImpregnabilityOther6_SpellID, + ImpregnabilitySelf1_SpellID, + ImpregnabilitySelf2_SpellID, + ImpregnabilitySelf3_SpellID, + ImpregnabilitySelf4_SpellID, + ImpregnabilitySelf5_SpellID, + ImpregnabilitySelf6_SpellID, + DefenselessnessOther1_SpellID, + DefenselessnessOther2_SpellID, + DefenselessnessOther3_SpellID, + DefenselessnessOther4_SpellID, + DefenselessnessOther5_SpellID, + DefenselessnessOther6_SpellID, + MagicResistanceOther1_SpellID, + MagicResistanceOther2_SpellID, + MagicResistanceOther3_SpellID, + MagicResistanceOther4_SpellID, + MagicResistanceOther5_SpellID, + MagicResistanceOther6_SpellID, + MagicResistanceSelf1_SpellID, + MagicResistanceSelf2_SpellID, + MagicResistanceSelf3_SpellID, + MagicResistanceSelf4_SpellID, + MagicResistanceSelf5_SpellID, + MagicResistanceSelf6_SpellID, + MagicYieldOther1_SpellID, + MagicYieldOther2_SpellID, + MagicYieldOther3_SpellID, + MagicYieldOther4_SpellID, + MagicYieldOther5_SpellID, + MagicYieldOther6_SpellID, + MagicYieldSelf1_SpellID, + MagicYieldSelf2_SpellID, + MagicYieldSelf3_SpellID, + MagicYieldSelf4_SpellID, + MagicYieldSelf5_SpellID, + MagicYieldSelf6_SpellID, + AxeMasteryOther1_SpellID, + AxeMasteryOther2_SpellID, + AxeMasteryOther3_SpellID, + AxeMasteryOther4_SpellID, + AxeMasteryOther5_SpellID, + AxeMasteryOther6_SpellID, + AxeMasterySelf1_SpellID, + AxeMasterySelf2_SpellID, + AxeMasterySelf3_SpellID, + AxeMasterySelf4_SpellID, + AxeMasterySelf5_SpellID, + AxeMasterySelf6_SpellID, + AxeIneptitudeOther1_SpellID, + AxeIneptitudeOther2_SpellID, + AxeIneptitudeOther3_SpellID, + AxeIneptitudeOther4_SpellID, + AxeIneptitudeOther5_SpellID, + AxeIneptitudeOther6_SpellID, + AxeIneptitudeSelf1_SpellID, + AxeIneptitudeSelf2_SpellID, + AxeIneptitudeSelf3_SpellID, + AxeIneptitudeSelf4_SpellID, + AxeIneptitudeSelf5_SpellID, + AxeIneptitudeSelf6_SpellID, + DaggerMasteryOther1_SpellID, + DaggerMasteryOther2_SpellID, + DaggerMasteryOther3_SpellID, + DaggerMasteryOther4_SpellID, + DaggerMasteryOther5_SpellID, + DaggerMasteryOther6_SpellID, + DaggerMasterySelf1_SpellID, + DaggerMasterySelf2_SpellID, + DaggerMasterySelf3_SpellID, + DaggerMasterySelf4_SpellID, + DaggerMasterySelf5_SpellID, + DaggerMasterySelf6_SpellID, + DaggerIneptitudeOther1_SpellID, + DaggerIneptitudeOther2_SpellID, + DaggerIneptitudeOther3_SpellID, + DaggerIneptitudeOther4_SpellID, + DaggerIneptitudeOther5_SpellID, + DaggerIneptitudeOther6_SpellID, + DaggerIneptitudeSelf1_SpellID, + DaggerIneptitudeSelf2_SpellID, + DaggerIneptitudeSelf3_SpellID, + DaggerIneptitudeSelf4_SpellID, + DaggerIneptitudeSelf5_SpellID, + DaggerIneptitudeSelf6_SpellID, + MaceMasteryOther1_SpellID, + MaceMasteryOther2_SpellID, + MaceMasteryOther3_SpellID, + MaceMasteryOther4_SpellID, + MaceMasteryOther5_SpellID, + MaceMasteryOther6_SpellID, + MaceMasterySelf1_SpellID, + MaceMasterySelf2_SpellID, + MaceMasterySelf3_SpellID, + MaceMasterySelf4_SpellID, + MaceMasterySelf5_SpellID, + MaceMasterySelf6_SpellID, + MaceIneptitudeOther1_SpellID, + MaceIneptitudeOther2_SpellID, + MaceIneptitudeOther3_SpellID, + MaceIneptitudeOther4_SpellID, + MaceIneptitudeOther5_SpellID, + MaceIneptitudeOther6_SpellID, + MaceIneptitudeSelf1_SpellID, + MaceIneptitudeSelf2_SpellID, + MaceIneptitudeSelf3_SpellID, + MaceIneptitudeSelf4_SpellID, + MaceIneptitudeSelf5_SpellID, + MaceIneptitudeSelf6_SpellID, + SpearMasteryOther1_SpellID, + SpearMasteryOther2_SpellID, + SpearMasteryOther3_SpellID, + SpearMasteryOther4_SpellID, + SpearMasteryOther5_SpellID, + SpearMasteryOther6_SpellID, + SpearMasterySelf1_SpellID, + SpearMasterySelf2_SpellID, + SpearMasterySelf3_SpellID, + SpearMasterySelf4_SpellID, + SpearMasterySelf5_SpellID, + SpearMasterySelf6_SpellID, + SpearIneptitudeOther1_SpellID, + SpearIneptitudeOther2_SpellID, + SpearIneptitudeOther3_SpellID, + SpearIneptitudeOther4_SpellID, + SpearIneptitudeOther5_SpellID, + SpearIneptitudeOther6_SpellID, + SpearIneptitudeSelf1_SpellID, + SpearIneptitudeSelf2_SpellID, + SpearIneptitudeSelf3_SpellID, + SpearIneptitudeSelf4_SpellID, + SpearIneptitudeSelf5_SpellID, + SpearIneptitudeSelf6_SpellID, + StaffMasteryOther1_SpellID, + StaffMasteryOther2_SpellID, + StaffMasteryOther3_SpellID, + StaffMasteryOther4_SpellID, + StaffMasteryOther5_SpellID, + StaffMasteryOther6_SpellID, + StaffMasterySelf1_SpellID, + StaffMasterySelf2_SpellID, + StaffMasterySelf3_SpellID, + StaffMasterySelf4_SpellID, + StaffMasterySelf5_SpellID, + StaffMasterySelf6_SpellID, + StaffIneptitudeOther1_SpellID, + StaffIneptitudeOther2_SpellID, + StaffIneptitudeOther3_SpellID, + StaffIneptitudeOther4_SpellID, + StaffIneptitudeOther5_SpellID, + StaffIneptitudeOther6_SpellID, + StaffIneptitudeSelf1_SpellID, + StaffIneptitudeSelf2_SpellID, + StaffIneptitudeSelf3_SpellID, + StaffIneptitudeSelf4_SpellID, + StaffIneptitudeSelf5_SpellID, + StaffIneptitudeSelf6_SpellID, + SwordMasteryOther1_SpellID, + SwordMasteryOther2_SpellID, + SwordMasteryOther3_SpellID, + SwordMasteryOther4_SpellID, + SwordMasteryOther5_SpellID, + SwordMasteryOther6_SpellID, + SwordMasterySelf1_SpellID, + SwordMasterySelf2_SpellID, + SwordMasterySelf3_SpellID, + SwordMasterySelf4_SpellID, + SwordMasterySelf5_SpellID, + SwordMasterySelf6_SpellID, + SwordIneptitudeOther1_SpellID, + SwordIneptitudeOther2_SpellID, + SwordIneptitudeOther3_SpellID, + SwordIneptitudeOther4_SpellID, + SwordIneptitudeOther5_SpellID, + SwordIneptitudeOther6_SpellID, + SwordIneptitudeSelf1_SpellID, + SwordIneptitudeSelf2_SpellID, + SwordIneptitudeSelf3_SpellID, + SwordIneptitudeSelf4_SpellID, + UNKNOWN__GUESSEDNAME434, // NOTE: Missing 1 + SwordIneptitudeSelf5_SpellID, + SwordIneptitudeSelf6_SpellID, + UnarmedCombatMasteryOther1_SpellID, + UnarmedCombatMasteryOther2_SpellID, + UnarmedCombatMasteryOther3_SpellID, + UnarmedCombatMasteryOther4_SpellID, + UnarmedCombatMasteryOther5_SpellID, + UnarmedCombatMasteryOther6_SpellID, + UnarmedCombatMasterySelf1_SpellID, + UnarmedCombatMasterySelf2_SpellID, + UnarmedCombatMasterySelf3_SpellID, + UnarmedCombatMasterySelf4_SpellID, + UnarmedCombatMasterySelf5_SpellID, + UnarmedCombatMasterySelf6_SpellID, + UnarmedCombatIneptitudeOther1_SpellID, + UnarmedCombatIneptitudeOther2_SpellID, + UnarmedCombatIneptitudeOther3_SpellID, + UnarmedCombatIneptitudeOther4_SpellID, + UnarmedCombatIneptitudeOther5_SpellID, + UnarmedCombatIneptitudeOther6_SpellID, + UnarmedCombatIneptitudeSelf1_SpellID, + UnarmedCombatIneptitudeSelf2_SpellID, + UnarmedCombatIneptitudeSelf3_SpellID, + UnarmedCombatIneptitudeSelf4_SpellID, + UnarmedCombatIneptitudeSelf5_SpellID, + UnarmedCombatIneptitudeSelf6_SpellID, + BowMasteryOther1_SpellID, + BowMasteryOther2_SpellID, + BowMasteryOther3_SpellID, + BowMasteryOther4_SpellID, + BowMasteryOther5_SpellID, + BowMasteryOther6_SpellID, + BowMasterySelf1_SpellID, + BowMasterySelf2_SpellID, + BowMasterySelf3_SpellID, + BowMasterySelf4_SpellID, + BowMasterySelf5_SpellID, + BowMasterySelf6_SpellID, + BowIneptitudeOther1_SpellID, + BowIneptitudeOther2_SpellID, + BowIneptitudeOther3_SpellID, + BowIneptitudeOther4_SpellID, + BowIneptitudeOther5_SpellID, + BowIneptitudeOther6_SpellID, + BowIneptitudeSelf1_SpellID, + BowIneptitudeSelf2_SpellID, + BowIneptitudeSelf3_SpellID, + BowIneptitudeSelf4_SpellID, + BowIneptitudeSelf5_SpellID, + BowIneptitudeSelf6_SpellID, + CrossBowMasteryOther1_SpellID, + CrossBowMasteryOther2_SpellID, + CrossBowMasteryOther3_SpellID, + CrossBowMasteryOther4_SpellID, + CrossBowMasteryOther5_SpellID, + CrossBowMasteryOther6_SpellID, + CrossBowMasterySelf1_SpellID, + CrossBowMasterySelf2_SpellID, + CrossBowMasterySelf3_SpellID, + CrossBowMasterySelf4_SpellID, + CrossBowMasterySelf5_SpellID, + CrossBowMasterySelf6_SpellID, + CrossBowIneptitudeOther1_SpellID, + CrossBowIneptitudeOther2_SpellID, + CrossBowIneptitudeOther3_SpellID, + CrossBowIneptitudeOther4_SpellID, + CrossBowIneptitudeOther5_SpellID, + CrossBowIneptitudeOther6_SpellID, + CrossBowIneptitudeSelf1_SpellID, + CrossBowIneptitudeSelf2_SpellID, + CrossBowIneptitudeSelf3_SpellID, + CrossBowIneptitudeSelf4_SpellID, + CrossBowIneptitudeSelf5_SpellID, + CrossBowIneptitudeSelf6_SpellID, + AcidProtectionOther1_SpellID, + AcidProtectionOther2_SpellID, + AcidProtectionOther3_SpellID, + AcidProtectionOther4_SpellID, + AcidProtectionOther5_SpellID, + AcidProtectionOther6_SpellID, + AcidProtectionSelf1_SpellID, + AcidProtectionSelf2_SpellID, + AcidProtectionSelf3_SpellID, + AcidProtectionSelf4_SpellID, + AcidProtectionSelf5_SpellID, + AcidProtectionSelf6_SpellID, + AcidVulnerabilityOther1_SpellID, + AcidVulnerabilityOther2_SpellID, + AcidVulnerabilityOther3_SpellID, + AcidVulnerabilityOther4_SpellID, + AcidVulnerabilityOther5_SpellID, + AcidVulnerabilityOther6_SpellID, + AcidVulnerabilitySelf1_SpellID, + AcidVulnerabilitySelf2_SpellID, + AcidVulnerabilitySelf3_SpellID, + AcidVulnerabilitySelf4_SpellID, + AcidVulnerabilitySelf5_SpellID, + AcidVulnerabilitySelf6_SpellID, + ThrownWeaponMasteryOther1_SpellID, + ThrownWeaponMasteryOther2_SpellID, + ThrownWeaponMasteryOther3_SpellID, + ThrownWeaponMasteryOther4_SpellID, + ThrownWeaponMasteryOther5_SpellID, + ThrownWeaponMasteryOther6_SpellID, + ThrownWeaponMasterySelf1_SpellID, + ThrownWeaponMasterySelf2_SpellID, + ThrownWeaponMasterySelf3_SpellID, + ThrownWeaponMasterySelf4_SpellID, + ThrownWeaponMasterySelf5_SpellID, + ThrownWeaponMasterySelf6_SpellID, + ThrownWeaponIneptitudeOther1_SpellID, + ThrownWeaponIneptitudeOther2_SpellID, + ThrownWeaponIneptitudeOther3_SpellID, + ThrownWeaponIneptitudeOther4_SpellID, + ThrownWeaponIneptitudeOther5_SpellID, + ThrownWeaponIneptitudeOther6_SpellID, + ThrownWeaponIneptitudeSelf1_SpellID, + ThrownWeaponIneptitudeSelf2_SpellID, + ThrownWeaponIneptitudeSelf3_SpellID, + ThrownWeaponIneptitudeSelf4_SpellID, + ThrownWeaponIneptitudeSelf5_SpellID, + ThrownWeaponIneptitudeSelf6_SpellID, + CreatureEnchantmentMasterySelf1_SpellID, + CreatureEnchantmentMasterySelf2_SpellID, + CreatureEnchantmentMasterySelf3_SpellID, + CreatureEnchantmentMasterySelf4_SpellID, + CreatureEnchantmentMasterySelf5_SpellID, + CreatureEnchantmentMasterySelf6_SpellID, + CreatureEnchantmentMasteryOther1_SpellID, + CreatureEnchantmentMasteryOther2_SpellID, + CreatureEnchantmentMasteryOther3_SpellID, + CreatureEnchantmentMasteryOther4_SpellID, + CreatureEnchantmentMasteryOther5_SpellID, + CreatureEnchantmentMasteryOther6_SpellID, + CreatureEnchantmentIneptitudeOther1_SpellID, + CreatureEnchantmentIneptitudeOther2_SpellID, + CreatureEnchantmentIneptitudeOther3_SpellID, + CreatureEnchantmentIneptitudeOther4_SpellID, + CreatureEnchantmentIneptitudeOther5_SpellID, + CreatureEnchantmentIneptitudeOther6_SpellID, + CreatureEnchantmentIneptitudeSelf1_SpellID, + CreatureEnchantmentIneptitudeSelf2_SpellID, + CreatureEnchantmentIneptitudeSelf3_SpellID, + CreatureEnchantmentIneptitudeSelf4_SpellID, + CreatureEnchantmentIneptitudeSelf5_SpellID, + CreatureEnchantmentIneptitudeSelf6_SpellID, + ItemEnchantmentMasterySelf1_SpellID, + ItemEnchantmentMasterySelf2_SpellID, + ItemEnchantmentMasterySelf3_SpellID, + ItemEnchantmentMasterySelf4_SpellID, + ItemEnchantmentMasterySelf5_SpellID, + ItemEnchantmentMasterySelf6_SpellID, + ItemEnchantmentMasteryOther1_SpellID, + ItemEnchantmentMasteryOther2_SpellID, + ItemEnchantmentMasteryOther3_SpellID, + ItemEnchantmentMasteryOther4_SpellID, + ItemEnchantmentMasteryOther5_SpellID, + ItemEnchantmentMasteryOther6_SpellID, + ItemEnchantmentIneptitudeOther1_SpellID, + ItemEnchantmentIneptitudeOther2_SpellID, + ItemEnchantmentIneptitudeOther3_SpellID, + ItemEnchantmentIneptitudeOther4_SpellID, + ItemEnchantmentIneptitudeOther5_SpellID, + ItemEnchantmentIneptitudeOther6_SpellID, + ItemEnchantmentIneptitudeSelf1_SpellID, + ItemEnchantmentIneptitudeSelf2_SpellID, + ItemEnchantmentIneptitudeSelf3_SpellID, + ItemEnchantmentIneptitudeSelf4_SpellID, + ItemEnchantmentIneptitudeSelf5_SpellID, + ItemEnchantmentIneptitudeSelf6_SpellID, + LifeMagicMasterySelf1_SpellID, + LifeMagicMasterySelf2_SpellID, + LifeMagicMasterySelf3_SpellID, + LifeMagicMasterySelf4_SpellID, + LifeMagicMasterySelf5_SpellID, + LifeMagicMasterySelf6_SpellID, + LifeMagicMasteryOther1_SpellID, + LifeMagicMasteryOther2_SpellID, + LifeMagicMasteryOther3_SpellID, + LifeMagicMasteryOther4_SpellID, + LifeMagicMasteryOther5_SpellID, + LifeMagicMasteryOther6_SpellID, + LifeMagicIneptitudeSelf1_SpellID, + LifeMagicIneptitudeSelf2_SpellID, + LifeMagicIneptitudeSelf3_SpellID, + LifeMagicIneptitudeSelf4_SpellID, + LifeMagicIneptitudeSelf5_SpellID, + LifeMagicIneptitudeSelf6_SpellID, + LifeMagicIneptitudeOther1_SpellID, + LifeMagicIneptitudeOther2_SpellID, + LifeMagicIneptitudeOther3_SpellID, + LifeMagicIneptitudeOther4_SpellID, + LifeMagicIneptitudeOther5_SpellID, + LifeMagicIneptitudeOther6_SpellID, + WarMagicMasterySelf1_SpellID, + WarMagicMasterySelf2_SpellID, + WarMagicMasterySelf3_SpellID, + WarMagicMasterySelf4_SpellID, + WarMagicMasterySelf5_SpellID, + WarMagicMasterySelf6_SpellID, + WarMagicMasteryOther1_SpellID, + WarMagicMasteryOther2_SpellID, + WarMagicMasteryOther3_SpellID, + WarMagicMasteryOther4_SpellID, + WarMagicMasteryOther5_SpellID, + WarMagicMasteryOther6_SpellID, + WarMagicIneptitudeSelf1_SpellID, + WarMagicIneptitudeSelf2_SpellID, + WarMagicIneptitudeSelf3_SpellID, + WarMagicIneptitudeSelf4_SpellID, + WarMagicIneptitudeSelf5_SpellID, + WarMagicIneptitudeSelf6_SpellID, + WarMagicIneptitudeOther1_SpellID, + WarMagicIneptitudeOther2_SpellID, + WarMagicIneptitudeOther3_SpellID, + WarMagicIneptitudeOther4_SpellID, + WarMagicIneptitudeOther5_SpellID, + WarMagicIneptitudeOther6_SpellID, + ManaMasterySelf1_SpellID, + ManaMasterySelf2_SpellID, + ManaMasterySelf3_SpellID, + ManaMasterySelf4_SpellID, + ManaMasterySelf5_SpellID, + ManaMasterySelf6_SpellID, + ManaMasteryOther1_SpellID, + ManaMasteryOther2_SpellID, + ManaMasteryOther3_SpellID, + ManaMasteryOther4_SpellID, + ManaMasteryOther5_SpellID, + ManaMasteryOther6_SpellID, + ManaIneptitudeSelf1_SpellID, + Vitae_SpellID, + ManaIneptitudeSelf2_SpellID, + ManaIneptitudeSelf3_SpellID, + ManaIneptitudeSelf4_SpellID, + ManaIneptitudeSelf5_SpellID, + ManaIneptitudeSelf6_SpellID, + ManaIneptitudeOther1_SpellID, + ManaIneptitudeOther2_SpellID, + ManaIneptitudeOther3_SpellID, + ManaIneptitudeOther4_SpellID, + ManaIneptitudeOther5_SpellID, + ManaIneptitudeOther6_SpellID, + ArcaneEnlightenmentSelf1_SpellID, + ArcaneEnlightenmentSelf2_SpellID, + ArcaneEnlightenmentSelf3_SpellID, + ArcaneEnlightenmentSelf4_SpellID, + ArcaneEnlightenmentSelf5_SpellID, + ArcaneEnlightenmentSelf6_SpellID, + ArcaneEnlightenmentOther1_SpellID, + ArcaneEnlightenmentOther2_SpellID, + ArcaneEnlightenmentOther3_SpellID, + ArcaneEnlightenmentOther4_SpellID, + ArcaneEnlightenmentOther5_SpellID, + ArcaneEnlightenmentOther6_SpellID, + ArcaneBenightednessSelf1_SpellID, + ArcaneBenightednessSelf2_SpellID, + ArcaneBenightednessSelf3_SpellID, + ArcaneBenightednessSelf4_SpellID, + ArcaneBenightednessSelf5_SpellID, + ArcaneBenightednessSelf6_SpellID, + ArcaneBenightednessOther1_SpellID, + ArcaneBenightednessOther2_SpellID, + ArcaneBenightednessOther3_SpellID, + ArcaneBenightednessOther4_SpellID, + ArcaneBenightednessOther5_SpellID, + ArcaneBenightednessOther6_SpellID, + ArmorExpertiseSelf1_SpellID, + ArmorExpertiseSelf2_SpellID, + ArmorExpertiseSelf3_SpellID, + ArmorExpertiseSelf4_SpellID, + ArmorExpertiseSelf5_SpellID, + ArmorExpertiseSelf6_SpellID, + ArmorExpertiseOther1_SpellID, + ArmorExpertiseOther2_SpellID, + ArmorExpertiseOther3_SpellID, + ArmorExpertiseOther4_SpellID, + ArmorExpertiseOther5_SpellID, + ArmorExpertiseOther6_SpellID, + ArmorIgnoranceSelf1_SpellID, + ArmorIgnoranceSelf2_SpellID, + ArmorIgnoranceSelf3_SpellID, + ArmorIgnoranceSelf4_SpellID, + ArmorIgnoranceSelf5_SpellID, + ArmorIgnoranceSelf6_SpellID, + ArmorIgnoranceOther1_SpellID, + ArmorIgnoranceOther2_SpellID, + ArmorIgnoranceOther3_SpellID, + ArmorIgnoranceOther4_SpellID, + ArmorIgnoranceOther5_SpellID, + ArmorIgnoranceOther6_SpellID, + ItemExpertiseSelf1_SpellID, + ItemExpertiseSelf2_SpellID, + ItemExpertiseSelf3_SpellID, + ItemExpertiseSelf4_SpellID, + ItemExpertiseSelf5_SpellID, + ItemExpertiseSelf6_SpellID, + ItemExpertiseOther1_SpellID, + ItemExpertiseOther2_SpellID, + ItemExpertiseOther3_SpellID, + ItemExpertiseOther4_SpellID, + ItemExpertiseOther5_SpellID, + ItemExpertiseOther6_SpellID, + ItemIgnoranceSelf1_SpellID, + ItemIgnoranceSelf2_SpellID, + ItemIgnoranceSelf3_SpellID, + ItemIgnoranceSelf4_SpellID, + ItemIgnoranceSelf5_SpellID, + ItemIgnoranceSelf6_SpellID, + ItemIgnoranceOther1_SpellID, + ItemIgnoranceOther2_SpellID, + ItemIgnoranceOther3_SpellID, + ItemIgnoranceOther4_SpellID, + ItemIgnoranceOther5_SpellID, + ItemIgnoranceOther6_SpellID, + MagicItemExpertiseSelf1_SpellID, + MagicItemExpertiseSelf2_SpellID, + MagicItemExpertiseSelf3_SpellID, + MagicItemExpertiseSelf4_SpellID, + MagicItemExpertiseSelf5_SpellID, + MagicItemExpertiseSelf6_SpellID, + MagicItemExpertiseOther1_SpellID, + MagicItemExpertiseOther2_SpellID, + MagicItemExpertiseOther3_SpellID, + MagicItemExpertiseOther4_SpellID, + MagicItemExpertiseOther5_SpellID, + MagicItemExpertiseOther6_SpellID, + MagicItemIgnoranceSelf1_SpellID, + MagicItemIgnoranceSelf2_SpellID, + MagicItemIgnoranceSelf3_SpellID, + MagicItemIgnoranceSelf4_SpellID, + MagicItemIgnoranceSelf5_SpellID, + MagicItemIgnoranceSelf6_SpellID, + MagicItemIgnoranceOther1_SpellID, + MagicItemIgnoranceOther2_SpellID, + MagicItemIgnoranceOther3_SpellID, + MagicItemIgnoranceOther4_SpellID, + MagicItemIgnoranceOther5_SpellID, + MagicItemIgnoranceOther6_SpellID, + WeaponExpertiseSelf1_SpellID, + WeaponExpertiseSelf2_SpellID, + WeaponExpertiseSelf3_SpellID, + WeaponExpertiseSelf4_SpellID, + WeaponExpertiseSelf5_SpellID, + WeaponExpertiseSelf6_SpellID, + WeaponExpertiseOther1_SpellID, + WeaponExpertiseOther2_SpellID, + WeaponExpertiseOther3_SpellID, + WeaponExpertiseOther4_SpellID, + WeaponExpertiseOther5_SpellID, + WeaponExpertiseOther6_SpellID, + WeaponIgnoranceSelf1_SpellID, + WeaponIgnoranceSelf2_SpellID, + WeaponIgnoranceSelf3_SpellID, + WeaponIgnoranceSelf4_SpellID, + WeaponIgnoranceSelf5_SpellID, + WeaponIgnoranceSelf6_SpellID, + WeaponIgnoranceOther1_SpellID, + WeaponIgnoranceOther2_SpellID, + WeaponIgnoranceOther3_SpellID, + WeaponIgnoranceOther4_SpellID, + WeaponIgnoranceOther5_SpellID, + WeaponIgnoranceOther6_SpellID, + MonsterAttunementSelf1_SpellID, + MonsterAttunementSelf2_SpellID, + MonsterAttunementSelf3_SpellID, + MonsterAttunementSelf4_SpellID, + MonsterAttunementSelf5_SpellID, + MonsterAttunementSelf6_SpellID, + MonsterAttunementOther1_SpellID, + MonsterAttunementOther2_SpellID, + MonsterAttunementOther3_SpellID, + MonsterAttunementOther4_SpellID, + MonsterAttunementOther5_SpellID, + MonsterAttunementOther6_SpellID, + FireProtectionOther2_SpellID, + MonsterUnfamiliaritySelf1_SpellID, + MonsterUnfamiliaritySelf2_SpellID, + MonsterUnfamiliaritySelf3_SpellID, + MonsterUnfamiliaritySelf4_SpellID, + MonsterUnfamiliaritySelf5_SpellID, + MonsterUnfamiliaritySelf6_SpellID, + MonsterUnfamiliarityOther1_SpellID, + MonsterUnfamiliarityOther2_SpellID, + MonsterUnfamiliarityOther3_SpellID, + MonsterUnfamiliarityOther4_SpellID, + MonsterUnfamiliarityOther5_SpellID, + MonsterUnfamiliarityOther6_SpellID, + UNKNOWN__GUESSEDNAME823, // NOTE: Missing 1 + PersonAttunementSelf1_SpellID, + PersonAttunementSelf2_SpellID, + PersonAttunementSelf3_SpellID, + PersonAttunementSelf4_SpellID, + PersonAttunementSelf5_SpellID, + PersonAttunementSelf6_SpellID, + PersonAttunementOther1_SpellID, + PersonAttunementOther2_SpellID, + PersonAttunementOther3_SpellID, + PersonAttunementOther4_SpellID, + PersonAttunementOther5_SpellID, + PersonAttunementOther6_SpellID, + FireProtectionOther3_SpellID, + PersonUnfamiliaritySelf1_SpellID, + PersonUnfamiliaritySelf2_SpellID, + PersonUnfamiliaritySelf3_SpellID, + PersonUnfamiliaritySelf4_SpellID, + PersonUnfamiliaritySelf5_SpellID, + PersonUnfamiliaritySelf6_SpellID, + PersonUnfamiliarityOther1_SpellID, + PersonUnfamiliarityOther2_SpellID, + PersonUnfamiliarityOther3_SpellID, + PersonUnfamiliarityOther4_SpellID, + PersonUnfamiliarityOther5_SpellID, + PersonUnfamiliarityOther6_SpellID, + FireProtectionOther4_SpellID, + DeceptionMasterySelf1_SpellID, + DeceptionMasterySelf2_SpellID, + DeceptionMasterySelf3_SpellID, + DeceptionMasterySelf4_SpellID, + DeceptionMasterySelf5_SpellID, + DeceptionMasterySelf6_SpellID, + DeceptionMasteryOther1_SpellID, + DeceptionMasteryOther2_SpellID, + DeceptionMasteryOther3_SpellID, + DeceptionMasteryOther4_SpellID, + DeceptionMasteryOther5_SpellID, + DeceptionMasteryOther6_SpellID, + DeceptionIneptitudeSelf1_SpellID, + DeceptionIneptitudeSelf2_SpellID, + DeceptionIneptitudeSelf3_SpellID, + DeceptionIneptitudeSelf4_SpellID, + DeceptionIneptitudeSelf5_SpellID, + DeceptionIneptitudeSelf6_SpellID, + DeceptionIneptitudeOther1_SpellID, + DeceptionIneptitudeOther2_SpellID, + DeceptionIneptitudeOther3_SpellID, + DeceptionIneptitudeOther4_SpellID, + DeceptionIneptitudeOther5_SpellID, + DeceptionIneptitudeOther6_SpellID, + HealingMasterySelf1_SpellID, + HealingMasterySelf2_SpellID, + HealingMasterySelf3_SpellID, + HealingMasterySelf4_SpellID, + HealingMasterySelf5_SpellID, + HealingMasterySelf6_SpellID, + HealingMasteryOther1_SpellID, + HealingMasteryOther2_SpellID, + HealingMasteryOther3_SpellID, + HealingMasteryOther4_SpellID, + HealingMasteryOther5_SpellID, + HealingMasteryOther6_SpellID, + HealingIneptitudeSelf1_SpellID, + HealingIneptitudeSelf2_SpellID, + HealingIneptitudeSelf3_SpellID, + HealingIneptitudeSelf4_SpellID, + HealingIneptitudeSelf5_SpellID, + HealingIneptitudeSelf6_SpellID, + HealingIneptitudeOther1_SpellID, + HealingIneptitudeOther2_SpellID, + HealingIneptitudeOther3_SpellID, + HealingIneptitudeOther4_SpellID, + HealingIneptitudeOther5_SpellID, + HealingIneptitudeOther6_SpellID, + LeadershipMasterySelf1_SpellID, + LeadershipMasterySelf2_SpellID, + LeadershipMasterySelf3_SpellID, + LeadershipMasterySelf4_SpellID, + LeadershipMasterySelf5_SpellID, + LeadershipMasterySelf6_SpellID, + LeadershipMasteryOther1_SpellID, + LeadershipMasteryOther2_SpellID, + LeadershipMasteryOther3_SpellID, + LeadershipMasteryOther4_SpellID, + LeadershipMasteryOther5_SpellID, + LeadershipMasteryOther6_SpellID, + LeadershipIneptitudeSelf1_SpellID, + LeadershipIneptitudeSelf2_SpellID, + LeadershipIneptitudeSelf3_SpellID, + LeadershipIneptitudeSelf4_SpellID, + LeadershipIneptitudeSelf5_SpellID, + LeadershipIneptitudeSelf6_SpellID, + LeadershipIneptitudeOther1_SpellID, + LeadershipIneptitudeOther2_SpellID, + LeadershipIneptitudeOther3_SpellID, + LeadershipIneptitudeOther4_SpellID, + LeadershipIneptitudeOther5_SpellID, + LeadershipIneptitudeOther6_SpellID, + LockpickMasterySelf1_SpellID, + LockpickMasterySelf2_SpellID, + LockpickMasterySelf3_SpellID, + LockpickMasterySelf4_SpellID, + LockpickMasterySelf5_SpellID, + LockpickMasterySelf6_SpellID, + LockpickMasteryOther1_SpellID, + LockpickMasteryOther2_SpellID, + LockpickMasteryOther3_SpellID, + LockpickMasteryOther4_SpellID, + LockpickMasteryOther5_SpellID, + LockpickMasteryOther6_SpellID, + LockpickIneptitudeSelf1_SpellID, + LockpickIneptitudeSelf2_SpellID, + LockpickIneptitudeSelf3_SpellID, + LockpickIneptitudeSelf4_SpellID, + LockpickIneptitudeSelf5_SpellID, + LockpickIneptitudeSelf6_SpellID, + LockpickIneptitudeOther1_SpellID, + LockpickIneptitudeOther2_SpellID, + LockpickIneptitudeOther3_SpellID, + LockpickIneptitudeOther4_SpellID, + LockpickIneptitudeOther5_SpellID, + LockpickIneptitudeOther6_SpellID, + FealtySelf1_SpellID, + FealtySelf2_SpellID, + FealtySelf3_SpellID, + FealtySelf4_SpellID, + FealtySelf5_SpellID, + FealtySelf6_SpellID, + FealtyOther1_SpellID, + FealtyOther2_SpellID, + FealtyOther3_SpellID, + FealtyOther4_SpellID, + FealtyOther5_SpellID, + FealtyOther6_SpellID, + FaithlessnessSelf1_SpellID, + FaithlessnessSelf2_SpellID, + FaithlessnessSelf3_SpellID, + FaithlessnessSelf4_SpellID, + FaithlessnessSelf5_SpellID, + FaithlessnessSelf6_SpellID, + FaithlessnessOther1_SpellID, + FaithlessnessOther2_SpellID, + FaithlessnessOther3_SpellID, + FaithlessnessOther4_SpellID, + FaithlessnessOther5_SpellID, + FaithlessnessOther6_SpellID, + JumpingMasterySelf1_SpellID, + JumpingMasterySelf2_SpellID, + JumpingMasterySelf3_SpellID, + JumpingMasterySelf4_SpellID, + JumpingMasterySelf5_SpellID, + JumpingMasterySelf6_SpellID, + JumpingMasteryOther1_SpellID, + JumpingMasteryOther2_SpellID, + JumpingMasteryOther3_SpellID, + JumpingMasteryOther4_SpellID, + JumpingMasteryOther5_SpellID, + JumpingMasteryOther6_SpellID, + SprintSelf1_SpellID, + SprintSelf2_SpellID, + SprintSelf3_SpellID, + SprintSelf4_SpellID, + SprintSelf5_SpellID, + SprintSelf6_SpellID, + SprintOther1_SpellID, + SprintOther2_SpellID, + SprintOther3_SpellID, + SprintOther4_SpellID, + SprintOther5_SpellID, + SprintOther6_SpellID, + LeadenFeetSelf1_SpellID, + LeadenFeetSelf2_SpellID, + LeadenFeetSelf3_SpellID, + LeadenFeetSelf4_SpellID, + LeadenFeetSelf5_SpellID, + LeadenFeetSelf6_SpellID, + LeadenFeetOther1_SpellID, + LeadenFeetOther2_SpellID, + LeadenFeetOther3_SpellID, + LeadenFeetOther4_SpellID, + LeadenFeetOther5_SpellID, + LeadenFeetOther6_SpellID, + JumpingIneptitudeSelf1_SpellID, + JumpingIneptitudeSelf2_SpellID, + JumpingIneptitudeSelf3_SpellID, + JumpingIneptitudeSelf4_SpellID, + JumpingIneptitudeSelf5_SpellID, + JumpingIneptitudeSelf6_SpellID, + JumpingIneptitudeOther1_SpellID, + JumpingIneptitudeOther2_SpellID, + JumpingIneptitudeOther3_SpellID, + JumpingIneptitudeOther4_SpellID, + JumpingIneptitudeOther5_SpellID, + JumpingIneptitudeOther6_SpellID, + BludgeonProtectionSelf1_SpellID, + BludgeonProtectionSelf2_SpellID, + BludgeonProtectionSelf3_SpellID, + BludgeonProtectionSelf4_SpellID, + BludgeonProtectionSelf5_SpellID, + BludgeonProtectionSelf6_SpellID, + BludgeonProtectionOther1_SpellID, + BludgeonProtectionOther2_SpellID, + BludgeonProtectionOther3_SpellID, + BludgeonProtectionOther4_SpellID, + BludgeonProtectionOther5_SpellID, + BludgeonProtectionOther6_SpellID, + ColdProtectionSelf1_SpellID, + ColdProtectionSelf2_SpellID, + ColdProtectionSelf3_SpellID, + ColdProtectionSelf4_SpellID, + ColdProtectionSelf5_SpellID, + ColdProtectionSelf6_SpellID, + ColdProtectionOther1_SpellID, + ColdProtectionOther2_SpellID, + ColdProtectionOther3_SpellID, + ColdProtectionOther4_SpellID, + ColdProtectionOther5_SpellID, + ColdProtectionOther6_SpellID, + BludgeonVulnerabilitySelf1_SpellID, + BludgeonVulnerabilitySelf2_SpellID, + BludgeonVulnerabilitySelf3_SpellID, + BludgeonVulnerabilitySelf4_SpellID, + BludgeonVulnerabilitySelf5_SpellID, + BludgeonVulnerabilitySelf6_SpellID, + BludgeonVulnerabilityOther1_SpellID, + BludgeonVulnerabilityOther2_SpellID, + BludgeonVulnerabilityOther3_SpellID, + BludgeonVulnerabilityOther4_SpellID, + BludgeonVulnerabilityOther5_SpellID, + BludgeonVulnerabilityOther6_SpellID, + ColdVulnerabilitySelf1_SpellID, + ColdVulnerabilitySelf2_SpellID, + ColdVulnerabilitySelf3_SpellID, + ColdVulnerabilitySelf4_SpellID, + ColdVulnerabilitySelf5_SpellID, + ColdVulnerabilitySelf6_SpellID, + ColdVulnerabilityOther1_SpellID, + ColdVulnerabilityOther2_SpellID, + ColdVulnerabilityOther3_SpellID, + ColdVulnerabilityOther4_SpellID, + ColdVulnerabilityOther5_SpellID, + ColdVulnerabilityOther6_SpellID, + LightningProtectionSelf1_SpellID, + LightningProtectionSelf2_SpellID, + LightningProtectionSelf3_SpellID, + LightningProtectionSelf4_SpellID, + LightningProtectionSelf5_SpellID, + LightningProtectionSelf6_SpellID, + LightningProtectionOther1_SpellID, + LightningProtectionOther2_SpellID, + LightningProtectionOther3_SpellID, + LightningProtectionOther4_SpellID, + LightningProtectionOther5_SpellID, + LightningProtectionOther6_SpellID, + LightningVulnerabilitySelf1_SpellID, + LightningVulnerabilitySelf2_SpellID, + LightningVulnerabilitySelf3_SpellID, + LightningVulnerabilitySelf4_SpellID, + LightningVulnerabilitySelf5_SpellID, + LightningVulnerabilitySelf6_SpellID, + LightningVulnerabilityOther1_SpellID, + LightningVulnerabilityOther2_SpellID, + LightningVulnerabilityOther3_SpellID, + LightningVulnerabilityOther4_SpellID, + LightningVulnerabilityOther5_SpellID, + LightningVulnerabilityOther6_SpellID, + FireProtectionSelf2_SpellID, + FireProtectionSelf3_SpellID, + FireProtectionSelf4_SpellID, + FireProtectionSelf5_SpellID, + FireProtectionSelf6_SpellID, + FireProtectionOther5_SpellID, + FireProtectionOther6_SpellID, + Nullmissile_SpellID, + FireVulnerabilitySelf2_SpellID, + FireVulnerabilitySelf3_SpellID, + FireVulnerabilitySelf4_SpellID, + FireVulnerabilitySelf5_SpellID, + FireVulnerabilitySelf6_SpellID, + UNKNOWN__GUESSEDNAME1103, // NOTE: Missing 1 + FireVulnerabilityOther2_SpellID, + FireVulnerabilityOther3_SpellID, + FireVulnerabilityOther4_SpellID, + FireVulnerabilityOther5_SpellID, + FireVulnerabilityOther6_SpellID, + BladeProtectionSelf1_SpellID, + BladeProtectionSelf2_SpellID, + BladeProtectionSelf3_SpellID, + BladeProtectionSelf4_SpellID, + BladeProtectionSelf5_SpellID, + BladeProtectionSelf6_SpellID, + BladeProtectionOther1_SpellID, + BladeProtectionOther2_SpellID, + BladeProtectionOther3_SpellID, + BladeProtectionOther4_SpellID, + BladeProtectionOther5_SpellID, + BladeProtectionOther6_SpellID, + BladeVulnerabilitySelf1_SpellID, + BladeVulnerabilitySelf2_SpellID, + BladeVulnerabilitySelf3_SpellID, + BladeVulnerabilitySelf4_SpellID, + BladeVulnerabilitySelf5_SpellID, + BladeVulnerabilitySelf6_SpellID, + BladeVulnerabilityOther1_SpellID, + BladeVulnerabilityOther2_SpellID, + BladeVulnerabilityOther3_SpellID, + BladeVulnerabilityOther4_SpellID, + BladeVulnerabilityOther5_SpellID, + BladeVulnerabilityOther6_SpellID, + PiercingProtectionSelf1_SpellID, + PiercingProtectionSelf2_SpellID, + PiercingProtectionSelf3_SpellID, + PiercingProtectionSelf4_SpellID, + PiercingProtectionSelf5_SpellID, + PiercingProtectionSelf6_SpellID, + PiercingProtectionOther1_SpellID, + PiercingProtectionOther2_SpellID, + PiercingProtectionOther3_SpellID, + PiercingProtectionOther4_SpellID, + PiercingProtectionOther5_SpellID, + PiercingProtectionOther6_SpellID, + PiercingVulnerabilitySelf1_SpellID, + PiercingVulnerabilitySelf2_SpellID, + PiercingVulnerabilitySelf3_SpellID, + PiercingVulnerabilitySelf4_SpellID, + PiercingVulnerabilitySelf5_SpellID, + PiercingVulnerabilitySelf6_SpellID, + PiercingVulnerabilityOther1_SpellID, + PiercingVulnerabilityOther2_SpellID, + PiercingVulnerabilityOther3_SpellID, + PiercingVulnerabilityOther4_SpellID, + PiercingVulnerabilityOther5_SpellID, + PiercingVulnerabilityOther6_SpellID, + HealSelf2_SpellID, + HealSelf3_SpellID, + HealSelf4_SpellID, + HealSelf5_SpellID, + HealSelf6_SpellID, + HealOther2_SpellID, + HealOther3_SpellID, + HealOther4_SpellID, + HealOther5_SpellID, + HealOther6_SpellID, + HarmSelf2_SpellID, + HarmSelf3_SpellID, + HarmSelf4_SpellID, + HarmSelf5_SpellID, + HarmSelf6_SpellID, + HarmOther2_SpellID, + HarmOther3_SpellID, + HarmOther4_SpellID, + HarmOther5_SpellID, + HarmOther6_SpellID, + RevitalizeSelf1_SpellID, + RevitalizeSelf2_SpellID, + RevitalizeSelf3_SpellID, + RevitalizeSelf4_SpellID, + RevitalizeSelf5_SpellID, + RevitalizeSelf6_SpellID, + RevitalizeOther1_SpellID, + RevitalizeOther2_SpellID, + RevitalizeOther3_SpellID, + RevitalizeOther4_SpellID, + RevitalizeOther5_SpellID, + RevitalizeOther6_SpellID, + EnfeebleSelf1_SpellID, + EnfeebleSelf2_SpellID, + EnfeebleSelf3_SpellID, + EnfeebleSelf4_SpellID, + EnfeebleSelf5_SpellID, + EnfeebleSelf6_SpellID, + EnfeebleOther1_SpellID, + EnfeebleOther2_SpellID, + EnfeebleOther3_SpellID, + EnfeebleOther4_SpellID, + EnfeebleOther5_SpellID, + EnfeebleOther6_SpellID, + ManaBoostSelf1_SpellID, + ManaBoostSelf2_SpellID, + ManaBoostSelf3_SpellID, + ManaBoostSelf4_SpellID, + ManaBoostSelf5_SpellID, + ManaBoostSelf6_SpellID, + ManaBoostOther1_SpellID, + ManaBoostOther2_SpellID, + ManaBoostOther3_SpellID, + ManaBoostOther4_SpellID, + ManaBoostOther5_SpellID, + ManaBoostOther6_SpellID, + ManaDrainSelf1_SpellID, + ManaDrainSelf2_SpellID, + ManaDrainSelf3_SpellID, + ManaDrainSelf4_SpellID, + ManaDrainSelf5_SpellID, + ManaDrainSelf6_SpellID, + ManaDrainOther1_SpellID, + ManaDrainOther2_SpellID, + ManaDrainOther3_SpellID, + ManaDrainOther4_SpellID, + ManaDrainOther5_SpellID, + ManaDrainOther6_SpellID, + InfuseHealth1_SpellID, + InfuseHealth2_SpellID, + InfuseHealth3_SpellID, + InfuseHealth4_SpellID, + InfuseHealth5_SpellID, + InfuseHealth6_SpellID, + UNKNOWN__GUESSEDNAME1231, // NOTE: Missing 1 + UNKNOWN__GUESSEDNAME1232, // NOTE: Missing 1 + UNKNOWN__GUESSEDNAME1233, // NOTE: Missing 1 + UNKNOWN__GUESSEDNAME1234, // NOTE: Missing 1 + UNKNOWN__GUESSEDNAME1235, // NOTE: Missing 1 + UNKNOWN__GUESSEDNAME1236, // NOTE: Missing 1 + DrainHealth1_SpellID, + DrainHealth2_SpellID, + DrainHealth3_SpellID, + DrainHealth4_SpellID, + DrainHealth5_SpellID, + DrainHealth6_SpellID, + InfuseStamina1_SpellID, + InfuseStamina2_SpellID, + InfuseStamina3_SpellID, + InfuseStamina4_SpellID, + InfuseStamina5_SpellID, + InfuseStamina6_SpellID, + DrainStamina1_SpellID, + DrainStamina2_SpellID, + DrainStamina3_SpellID, + DrainStamina4_SpellID, + DrainStamina5_SpellID, + DrainStamina6_SpellID, + InfuseMana2_SpellID, + InfuseMana3_SpellID, + InfuseMana4_SpellID, + InfuseMana5_SpellID, + InfuseMana6_SpellID, + DrainMana1_SpellID, + DrainMana2_SpellID, + DrainMana3_SpellID, + DrainMana4_SpellID, + DrainMana5_SpellID, + DrainMana6_SpellID, + HealthtoStaminaOther1_SpellID, + HealthtoStaminaOther2_SpellID, + HealthtoStaminaOther3_SpellID, + HealthtoStaminaOther4_SpellID, + HealthtoStaminaOther5_SpellID, + HealthtoStaminaOther6_SpellID, + HealthtoStaminaSelf1_SpellID, + HealthtoStaminaSelf2_SpellID, + HealthtoStaminaSelf3_SpellID, + HealthtoStaminaSelf4_SpellID, + HealthtoStaminaSelf5_SpellID, + HealthtoStaminaSelf6_SpellID, + HealthtoManaSelf1_SpellID, + HealthtoManaSelf2_SpellID, + HealthtoManaSelf3_SpellID, + HealthtoManaOther4_SpellID, + HealthtoManaOther5_SpellID, + HealthtoManaOther6_SpellID, + ManatoHealthOther1_SpellID, + ManatoHealthOther2_SpellID, + ManatoHealthOther3_SpellID, + ManatoHealthOther4_SpellID, + ManatoHealthOther5_SpellID, + ManatoHealthOther6_SpellID, + ManatoHealthSelf1_SpellID, + ManatoHealthSelf2_SpellID, + ManatoHealthSelf3_SpellID, + ManatoHealthSelf4_SpellID, + ManatoHealthSelf5_SpellID, + ManatoHealthSelf6_SpellID, + ManatoStaminaSelf1_SpellID, + ManatoStaminaSelf2_SpellID, + ManatoStaminaSelf3_SpellID, + ManatoStaminaSelf4_SpellID, + ManatoStaminaSelf5_SpellID, + ManatoStaminaSelf6_SpellID, + ManatoStaminaOther1_SpellID, + ManatoStaminaOther2_SpellID, + ManatoStaminaOther3_SpellID, + ManatoStaminaOther4_SpellID, + ManatoStaminaOther5_SpellID, + ManatoStaminaOther6_SpellID, + ArmorSelf2_SpellID, + ArmorSelf3_SpellID, + ArmorSelf4_SpellID, + ArmorSelf5_SpellID, + ArmorSelf6_SpellID, + ArmorOther2_SpellID, + ArmorOther3_SpellID, + ArmorOther4_SpellID, + ArmorOther5_SpellID, + ArmorOther6_SpellID, + ImperilSelf2_SpellID, + ImperilSelf3_SpellID, + ImperilSelf4_SpellID, + ImperilSelf5_SpellID, + ImperilSelf6_SpellID, + ImperilOther2_SpellID, + ImperilOther3_SpellID, + ImperilOther4_SpellID, + ImperilOther5_SpellID, + ImperilOther6_SpellID, + StrengthSelf2_SpellID, + StrengthSelf3_SpellID, + StrengthSelf4_SpellID, + StrengthSelf5_SpellID, + StrengthSelf6_SpellID, + StrengthOther2_SpellID, + StrengthOther3_SpellID, + StrengthOther4_SpellID, + StrengthOther5_SpellID, + StrengthOther6_SpellID, + UNKNOWN__GUESSEDNAME1338, // NOTE: Missing 1 + WeaknessOther2_SpellID, + WeaknessOther3_SpellID, + WeaknessOther4_SpellID, + WeaknessOther5_SpellID, + WeaknessOther6_SpellID, + WeaknessSelf2_SpellID, + WeaknessSelf3_SpellID, + WeaknessSelf4_SpellID, + WeaknessSelf5_SpellID, + WeaknessSelf6_SpellID, + EnduranceSelf1_SpellID, + EnduranceSelf2_SpellID, + EnduranceSelf3_SpellID, + EnduranceSelf4_SpellID, + EnduranceSelf5_SpellID, + EnduranceSelf6_SpellID, + EnduranceOther1_SpellID, + EnduranceOther2_SpellID, + EnduranceOther3_SpellID, + EnduranceOther4_SpellID, + EnduranceOther5_SpellID, + EnduranceOther6_SpellID, + FrailtySelf1_SpellID, + FrailtySelf2_SpellID, + FrailtySelf3_SpellID, + FrailtySelf4_SpellID, + FrailtySelf5_SpellID, + FrailtySelf6_SpellID, + FrailtyOther1_SpellID, + FrailtyOther2_SpellID, + FrailtyOther3_SpellID, + FrailtyOther4_SpellID, + FrailtyOther5_SpellID, + FrailtyOther6_SpellID, + CoordinationSelf1_SpellID, + CoordinationSelf2_SpellID, + CoordinationSelf3_SpellID, + CoordinationSelf4_SpellID, + CoordinationSelf5_SpellID, + CoordinationSelf6_SpellID, + CoordinationOther1_SpellID, + CoordinationOther2_SpellID, + CoordinationOther3_SpellID, + CoordinationOther4_SpellID, + CoordinationOther5_SpellID, + CoordinationOther6_SpellID, + ClumsinessSelf1_SpellID, + ClumsinessSelf2_SpellID, + ClumsinessSelf3_SpellID, + ClumsinessSelf4_SpellID, + ClumsinessSelf5_SpellID, + ClumsinessSelf6_SpellID, + ClumsinessOther1_SpellID, + ClumsinessOther2_SpellID, + ClumsinessOther3_SpellID, + ClumsinessOther4_SpellID, + ClumsinessOther5_SpellID, + ClumsinessOther6_SpellID, + QuicknessSelf1_SpellID, + QuicknessSelf2_SpellID, + QuicknessSelf3_SpellID, + QuicknessSelf4_SpellID, + QuicknessSelf5_SpellID, + QuicknessSelf6_SpellID, + QuicknessOther1_SpellID, + QuicknessOther2_SpellID, + QuicknessOther3_SpellID, + QuicknessOther4_SpellID, + QuicknessOther5_SpellID, + QuicknessOther6_SpellID, + SlownessSelf1_SpellID, + SlownessSelf2_SpellID, + SlownessSelf3_SpellID, + SlownessSelf4_SpellID, + SlownessSelf5_SpellID, + SlownessSelf6_SpellID, + SlownessOther1_SpellID, + SlownessOther2_SpellID, + SlownessOther3_SpellID, + SlownessOther4_SpellID, + SlownessOther5_SpellID, + SlownessOther6_SpellID, + FocusSelf1_SpellID, + FocusSelf2_SpellID, + FocusSelf3_SpellID, + FocusSelf4_SpellID, + FocusSelf5_SpellID, + FocusSelf6_SpellID, + FocusOther1_SpellID, + FocusOther2_SpellID, + FocusOther3_SpellID, + FocusOther4_SpellID, + FocusOther5_SpellID, + FocusOther6_SpellID, + BafflementSelf1_SpellID, + BafflementSelf2_SpellID, + BafflementSelf3_SpellID, + BafflementSelf4_SpellID, + BafflementSelf5_SpellID, + BafflementSelf6_SpellID, + BafflementOther1_SpellID, + BafflementOther2_SpellID, + BafflementOther3_SpellID, + BafflementOther4_SpellID, + BafflementOther5_SpellID, + BafflementOther6_SpellID, + WillpowerSelf1_SpellID, + WillpowerSelf2_SpellID, + WillpowerSelf3_SpellID, + WillpowerSelf4_SpellID, + WillpowerSelf5_SpellID, + WillpowerSelf6_SpellID, + WillpowerOther1_SpellID, + WillpowerOther2_SpellID, + WillpowerOther3_SpellID, + WillpowerOther4_SpellID, + WillpowerOther5_SpellID, + WillpowerOther6_SpellID, + FeeblemindSelf1_SpellID, + FeeblemindSelf2_SpellID, + FeeblemindSelf3_SpellID, + FeeblemindSelf4_SpellID, + FeeblemindSelf5_SpellID, + FeeblemindSelf6_SpellID, + FeeblemindOther1_SpellID, + FeeblemindOther2_SpellID, + FeeblemindOther3_SpellID, + FeeblemindOther4_SpellID, + FeeblemindOther5_SpellID, + FeeblemindOther6_SpellID, + HideValue1_SpellID, + HideValue2_SpellID, + HideValue3_SpellID, + HideValue4_SpellID, + HideValue5_SpellID, + HideValue6_SpellID, + TrueValue1_SpellID, + TrueValue2_SpellID, + TrueValue3_SpellID, + TrueValue4_SpellID, + TrueValue5_SpellID, + TrueValue6_SpellID, + Nullmissilevolley_SpellID, + Impenetrability2_SpellID, + Impenetrability3_SpellID, + Impenetrability4_SpellID, + Impenetrability5_SpellID, + Impenetrability6_SpellID, + Brittlemail1_SpellID, + Brittlemail2_SpellID, + Brittlemail3_SpellID, + Brittlemail4_SpellID, + Brittlemail5_SpellID, + Brittlemail6_SpellID, + AcidBane1_SpellID, + AcidBane2_SpellID, + AcidBane3_SpellID, + AcidBane4_SpellID, + AcidBane5_SpellID, + AcidBane6_SpellID, + AcidLure1_SpellID, + AcidLure2_SpellID, + AcidLure3_SpellID, + AcidLure4_SpellID, + AcidLure5_SpellID, + AcidLure6_SpellID, + BludgeonLure1_SpellID, + BludgeonLure2_SpellID, + BludgeonLure3_SpellID, + BludgeonLure4_SpellID, + BludgeonLure5_SpellID, + BludgeonLure6_SpellID, + BludgeonBane1_SpellID, + BludgeonBane2_SpellID, + BludgeonBane3_SpellID, + BludgeonBane4_SpellID, + BludgeonBane5_SpellID, + BludgeonBane6_SpellID, + FrostLure1_SpellID, + FrostLure2_SpellID, + FrostLure3_SpellID, + FrostLure4_SpellID, + FrostLure5_SpellID, + FrostLure6_SpellID, + FrostBane1_SpellID, + FrostBane2_SpellID, + FrostBane3_SpellID, + FrostBane4_SpellID, + FrostBane5_SpellID, + FrostBane6_SpellID, + LightningLure1_SpellID, + LightningLure2_SpellID, + LightningLure3_SpellID, + LightningLure4_SpellID, + LightningLure5_SpellID, + LightningLure6_SpellID, + LightningBane1_SpellID, + LightningBane2_SpellID, + LightningBane3_SpellID, + LightningBane4_SpellID, + LightningBane5_SpellID, + LightningBane6_SpellID, + FlameLure1_SpellID, + FlameLure2_SpellID, + FlameLure3_SpellID, + FlameLure4_SpellID, + FlameLure5_SpellID, + FlameLure6_SpellID, + FlameBane1_SpellID, + FlameBane2_SpellID, + FlameBane3_SpellID, + FlameBane4_SpellID, + FlameBane5_SpellID, + FlameBane6_SpellID, + BladeLure2_SpellID, + BladeLure3_SpellID, + BladeLure4_SpellID, + BladeLure5_SpellID, + BladeLure6_SpellID, + BladeBane2_SpellID, + BladeBane3_SpellID, + BladeBane4_SpellID, + BladeBane5_SpellID, + BladeBane6_SpellID, + PiercingLure1_SpellID, + PiercingLure2_SpellID, + PiercingLure3_SpellID, + PiercingLure4_SpellID, + PiercingLure5_SpellID, + PiercingLure6_SpellID, + PiercingBane1_SpellID, + PiercingBane2_SpellID, + PiercingBane3_SpellID, + PiercingBane4_SpellID, + PiercingBane5_SpellID, + PiercingBane6_SpellID, + StrengthenLock1_SpellID, + StrengthenLock2_SpellID, + StrengthenLock3_SpellID, + StrengthenLock4_SpellID, + StrengthenLock5_SpellID, + StrengthenLock6_SpellID, + WeakenLock1_SpellID, + WeakenLock2_SpellID, + WeakenLock3_SpellID, + WeakenLock4_SpellID, + WeakenLock5_SpellID, + WeakenLock6_SpellID, + HeartSeeker1_SpellID, + HeartSeeker2_SpellID, + HeartSeeker3_SpellID, + HeartSeeker4_SpellID, + HeartSeeker5_SpellID, + HeartSeeker6_SpellID, + TurnBlade1_SpellID, + TurnBlade2_SpellID, + TurnBlade3_SpellID, + TurnBlade4_SpellID, + TurnBlade5_SpellID, + TurnBlade6_SpellID, + Defender1_SpellID, + UNKNOWN__GUESSEDNAME1600, // NOTE: Missing 1 + Defender2_SpellID, + Defender3_SpellID, + Defender4_SpellID, + Defender5_SpellID, + Defender6_SpellID, + LureBlade1_SpellID, + LureBlade2_SpellID, + LureBlade3_SpellID, + LureBlade4_SpellID, + LureBlade5_SpellID, + LureBlade6_SpellID, + BloodDrinker2_SpellID, + BloodDrinker3_SpellID, + BloodDrinker4_SpellID, + BloodDrinker5_SpellID, + BloodDrinker6_SpellID, + BloodLoather2_SpellID, + BloodLoather3_SpellID, + BloodLoather4_SpellID, + BloodLoather5_SpellID, + BloodLoather6_SpellID, + UNKNOWN__GUESSEDNAME1622, // NOTE: Missing 1 + SwiftKiller2_SpellID, + SwiftKiller3_SpellID, + SwiftKiller4_SpellID, + SwiftKiller5_SpellID, + SwiftKiller6_SpellID, + UNKNOWN__GUESSEDNAME1628, // NOTE: Missing 1 + LeadenWeapon2_SpellID, + LeadenWeapon3_SpellID, + LeadenWeapon4_SpellID, + LeadenWeapon5_SpellID, + LeadenWeapon6_SpellID, + PortalSending1_SpellID, + LifestoneRecall1_SpellID, + LifestoneSending1_SpellID, + SummonPortal3_SpellID, + DefenselessnessSelf1_SpellID, + DefenselessnessSelf2_SpellID, + DefenselessnessSelf3_SpellID, + DefenselessnessSelf4_SpellID, + DefenselessnessSelf5_SpellID, + DefenselessnessSelf6_SpellID, + SentinelRun_SpellID, + UNKNOWN__GUESSEDNAME1645, // NOTE: Missing 1 + UNKNOWN__GUESSEDNAME1646, // NOTE: Missing 1 + UNKNOWN__GUESSEDNAME1647, // NOTE: Missing 1 + UNKNOWN__GUESSEDNAME1648, // NOTE: Missing 1 + UNKNOWN__GUESSEDNAME1649, // NOTE: Missing 1 + UNKNOWN__GUESSEDNAME1650, // NOTE: Missing 1 + UNKNOWN__GUESSEDNAME1651, // NOTE: Missing 1 + UNKNOWN__GUESSEDNAME1652, // NOTE: Missing 1 + UNKNOWN__GUESSEDNAME1653, // NOTE: Missing 1 + UNKNOWN__GUESSEDNAME1654, // NOTE: Missing 1 + UNKNOWN__GUESSEDNAME1655, // NOTE: Missing 1 + UNKNOWN__GUESSEDNAME1656, // NOTE: Missing 1 + UNKNOWN__GUESSEDNAME1657, // NOTE: Missing 1 + StaminatoHealthOther1_SpellID, + StaminatoHealthOther2_SpellID, + StaminatoHealthOther3_SpellID, + StaminatoHealthOther4_SpellID, + StaminatoHealthOther5_SpellID, + StaminatoHealthOther6_SpellID, + StaminatoHealthSelf1_SpellID, + StaminatoHealthSelf2_SpellID, + StaminatoHealthSelf3_SpellID, + StaminatoHealthSelf4_SpellID, + StaminatoHealthSelf5_SpellID, + StaminatoHealthSelf6_SpellID, + StaminatoManaOther1_SpellID, + StaminatoManaOther2_SpellID, + StaminatoManaOther3_SpellID, + StaminatoManaOther4_SpellID, + StaminatoManaOther5_SpellID, + StaminatoManaOther6_SpellID, + StaminatoManaSelf1_SpellID, + StaminatoManaSelf2_SpellID, + StaminatoManaSelf3_SpellID, + StaminatoManaSelf4_SpellID, + StaminatoManaSelf5_SpellID, + StaminatoManaSelf6_SpellID, + UNKNOWN__GUESSEDNAME1682, // NOTE: Missing 1 + UNKNOWN__GUESSEDNAME1683, // NOTE: Missing 1 + UNKNOWN__GUESSEDNAME1684, // NOTE: Missing 1 + UNKNOWN__GUESSEDNAME1685, // NOTE: Missing 1 + UNKNOWN__GUESSEDNAME1686, // NOTE: Missing 1 + UNKNOWN__GUESSEDNAME1687, // NOTE: Missing 1 + UNKNOWN__GUESSEDNAME1688, // NOTE: Missing 1 + UNKNOWN__GUESSEDNAME1689, // NOTE: Missing 1 + UNKNOWN__GUESSEDNAME1690, // NOTE: Missing 1 + UNKNOWN__GUESSEDNAME1691, // NOTE: Missing 1 + UNKNOWN__GUESSEDNAME1692, // NOTE: Missing 1 + UNKNOWN__GUESSEDNAME1693, // NOTE: Missing 1 + UNKNOWN__GUESSEDNAME1694, // NOTE: Missing 1 + UNKNOWN__GUESSEDNAME1695, // NOTE: Missing 1 + UNKNOWN__GUESSEDNAME1696, // NOTE: Missing 1 + UNKNOWN__GUESSEDNAME1697, // NOTE: Missing 1 + UNKNOWN__GUESSEDNAME1698, // NOTE: Missing 1 + UNKNOWN__GUESSEDNAME1699, // NOTE: Missing 1 + UNKNOWN__GUESSEDNAME1700, // NOTE: Missing 1 + UNKNOWN__GUESSEDNAME1701, // NOTE: Missing 1 + HealthtoManaSelf4_SpellID, + HealthtoManaSelf5_SpellID, + HealthtoManaSelf6_SpellID, + HealthtoManaOther1_SpellID, + HealthtoManaOther2_SpellID, + HealthtoManaOther3_SpellID, + WeddingBliss_SpellID, + CookingMasteryOther1_SpellID, + CookingMasteryOther2_SpellID, + CookingMasteryOther3_SpellID, + CookingMasteryOther4_SpellID, + CookingMasteryOther5_SpellID, + CookingMasteryOther6_SpellID, + CookingMasterySelf1_SpellID, + CookingMasterySelf2_SpellID, + CookingMasterySelf3_SpellID, + CookingMasterySelf4_SpellID, + CookingMasterySelf5_SpellID, + CookingMasterySelf6_SpellID, + CookingIneptitudeOther1_SpellID, + CookingIneptitudeOther2_SpellID, + CookingIneptitudeOther3_SpellID, + CookingIneptitudeOther4_SpellID, + CookingIneptitudeOther5_SpellID, + CookingIneptitudeOther6_SpellID, + CookingIneptitudeSelf1_SpellID, + CookingIneptitudeSelf2_SpellID, + CookingIneptitudeSelf3_SpellID, + CookingIneptitudeSelf4_SpellID, + CookingIneptitudeSelf5_SpellID, + CookingIneptitudeSelf6_SpellID, + FletchingMasteryOther1_SpellID, + FletchingMasteryOther2_SpellID, + FletchingMasteryOther3_SpellID, + FletchingMasteryOther4_SpellID, + FletchingMasteryOther5_SpellID, + FletchingMasteryOther6_SpellID, + FletchingMasterySelf1_SpellID, + FletchingMasterySelf2_SpellID, + FletchingMasterySelf3_SpellID, + FletchingMasterySelf4_SpellID, + FletchingMasterySelf5_SpellID, + FletchingMasterySelf6_SpellID, + FletchingIneptitudeOther1_SpellID, + FletchingIneptitudeOther2_SpellID, + FletchingIneptitudeOther3_SpellID, + FletchingIneptitudeOther4_SpellID, + FletchingIneptitudeOther5_SpellID, + FletchingIneptitudeOther6_SpellID, + FletchingIneptitudeSelf1_SpellID, + FletchingIneptitudeSelf2_SpellID, + FletchingIneptitudeSelf3_SpellID, + FletchingIneptitudeSelf4_SpellID, + FletchingIneptitudeSelf5_SpellID, + FletchingIneptitudeSelf6_SpellID, + AlchemyMasteryOther1_SpellID, + AlchemyMasteryOther2_SpellID, + AlchemyMasteryOther3_SpellID, + AlchemyMasteryOther4_SpellID, + AlchemyMasteryOther5_SpellID, + AlchemyMasteryOther6_SpellID, + AlchemyMasterySelf1_SpellID, + AlchemyMasterySelf2_SpellID, + AlchemyMasterySelf3_SpellID, + AlchemyMasterySelf4_SpellID, + AlchemyMasterySelf5_SpellID, + AlchemyMasterySelf6_SpellID, + AlchemyIneptitudeOther1_SpellID, + AlchemyIneptitudeOther2_SpellID, + AlchemyIneptitudeOther3_SpellID, + AlchemyIneptitudeOther4_SpellID, + AlchemyIneptitudeOther5_SpellID, + AlchemyIneptitudeOther6_SpellID, + AlchemyIneptitudeSelf1_SpellID, + AlchemyIneptitudeSelf2_SpellID, + AlchemyIneptitudeSelf3_SpellID, + AlchemyIneptitudeSelf4_SpellID, + AlchemyIneptitudeSelf5_SpellID, + AlchemyIneptitudeSelf6_SpellID, + GolemDeathBlast_SpellID, + GertarhsCurse_SpellID, + AcidRing_SpellID, + BladeRing_SpellID, + FlameRing_SpellID, + ForceRing_SpellID, + FrostRing_SpellID, + LightningRing_SpellID, + ShockwaveRing_SpellID, + AcidStreak1_SpellID, + AcidStreak2_SpellID, + AcidStreak3_SpellID, + AcidStreak4_SpellID, + AcidStreak5_SpellID, + AcidStreak6_SpellID, + FlameStreak1_SpellID, + FlameStreak2_SpellID, + FlameStreak3_SpellID, + FlameStreak4_SpellID, + FlameStreak5_SpellID, + FlameStreak6_SpellID, + ForceStreak1_SpellID, + ForceStreak2_SpellID, + ForceStreak3_SpellID, + ForceStreak4_SpellID, + ForceStreak5_SpellID, + ForceStreak6_SpellID, + FrostStreak1_SpellID, + FrostStreak2_SpellID, + FrostStreak3_SpellID, + FrostStreak4_SpellID, + FrostStreak5_SpellID, + FrostStreak6_SpellID, + LightningStreak1_SpellID, + LightningStreak2_SpellID, + LightningStreak3_SpellID, + LightningStreak4_SpellID, + LightningStreak5_SpellID, + LightningStreak6_SpellID, + ShockwaveStreak1_SpellID, + ShockwaveStreak2_SpellID, + ShockwaveStreak3_SpellID, + ShockwaveStreak4_SpellID, + ShockwaveStreak5_SpellID, + ShockwaveStreak6_SpellID, + WhirlingBladeStreak1_SpellID, + WhirlingBladeStreak2_SpellID, + WhirlingBladeStreak3_SpellID, + WhirlingBladeStreak4_SpellID, + WhirlingBladeStreak5_SpellID, + WhirlingBladeStreak6_SpellID, + AcidStrike_SpellID, + BladeStrike_SpellID, + FlameStrike_SpellID, + ForceStrike_SpellID, + FrostStrike_SpellID, + LightningStrike_SpellID, + ShockwaveStrike_SpellID, + AcidWall_SpellID, + BladeWall_SpellID, + FlameWall_SpellID, + ForceWall_SpellID, + FrostWall_SpellID, + LightningWall_SpellID, + ShockwaveWall_SpellID, + MagicYieldBlackFire_SpellID, + DispelAllNeutralOther1_SpellID, + DispelAllGoodOther1_SpellID, + DispelAllBadOther1_SpellID, + DispelAllNeutralSelf1_SpellID, + DispelAllGoodSelf1_SpellID, + DispelAllBadSelf1_SpellID, + DispelAllNeutralOther2_SpellID, + DispelAllGoodOther2_SpellID, + DispelAllBadOther2_SpellID, + DispelAllNeutralSelf2_SpellID, + DispelAllGoodSelf2_SpellID, + DispelAllBadSelf2_SpellID, + DispelAllNeutralOther3_SpellID, + DispelAllGoodOther3_SpellID, + DispelAllBadOther3_SpellID, + DispelAllNeutralSelf3_SpellID, + DispelAllGoodSelf3_SpellID, + DispelAllBadSelf3_SpellID, + DispelAllNeutralOther4_SpellID, + DispelAllGoodOther4_SpellID, + DispelAllBadOther4_SpellID, + DispelAllNeutralSelf4_SpellID, + DispelAllGoodSelf4_SpellID, + DispelAllBadSelf4_SpellID, + DispelAllNeutralOther5_SpellID, + DispelAllGoodOther5_SpellID, + DispelAllBadOther5_SpellID, + DispelAllNeutralSelf5_SpellID, + DispelAllGoodSelf5_SpellID, + DispelAllBadSelf5_SpellID, + DispelAllNeutralOther6_SpellID, + DispelAllGoodOther6_SpellID, + DispelAllBadOther6_SpellID, + DispelAllNeutralSelf6_SpellID, + DispelAllGoodSelf6_SpellID, + DispelAllBadSelf6_SpellID, + DispelCreatureNeutralOther1_SpellID, + DispelCreatureGoodOther1_SpellID, + DispelCreatureBadOther1_SpellID, + DispelCreatureNeutralSelf1_SpellID, + DispelCreatureGoodSelf1_SpellID, + DispelCreatureBadSelf1_SpellID, + DispelCreatureNeutralOther2_SpellID, + DispelCreatureGoodOther2_SpellID, + DispelCreatureBadOther2_SpellID, + DispelCreatureNeutralSelf2_SpellID, + DispelCreatureGoodSelf2_SpellID, + DispelCreatureBadSelf2_SpellID, + DispelCreatureNeutralOther3_SpellID, + DispelCreatureGoodOther3_SpellID, + DispelCreatureBadOther3_SpellID, + DispelCreatureNeutralSelf3_SpellID, + DispelCreatureGoodSelf3_SpellID, + DispelCreatureBadSelf3_SpellID, + DispelCreatureNeutralOther4_SpellID, + DispelCreatureGoodOther4_SpellID, + DispelCreatureBadOther4_SpellID, + DispelCreatureNeutralSelf4_SpellID, + DispelCreatureGoodSelf4_SpellID, + DispelCreatureBadSelf4_SpellID, + DispelCreatureNeutralOther5_SpellID, + DispelCreatureGoodOther5_SpellID, + DispelCreatureBadOther5_SpellID, + DispelCreatureNeutralSelf5_SpellID, + DispelCreatureGoodSelf5_SpellID, + DispelCreatureBadSelf5_SpellID, + DispelCreatureNeutralOther6_SpellID, + DispelCreatureGoodOther6_SpellID, + DispelCreatureBadOther6_SpellID, + DispelCreatureNeutralSelf6_SpellID, + DispelCreatureGoodSelf6_SpellID, + DispelCreatureBadSelf6_SpellID, + DispelItemNeutralOther1_SpellID, + DispelItemGoodOther1_SpellID, + DispelItemBadOther1_SpellID, + DispelItemNeutralSelf1_SpellID, + DispelItemGoodSelf1_SpellID, + DispelItemBadSelf1_SpellID, + DispelItemNeutralOther2_SpellID, + DispelItemGoodOther2_SpellID, + DispelItemBadOther2_SpellID, + DispelItemNeutralSelf2_SpellID, + DispelItemGoodSelf2_SpellID, + DispelItemBadSelf2_SpellID, + DispelItemNeutralOther3_SpellID, + DispelItemGoodOther3_SpellID, + DispelItemBadOther3_SpellID, + DispelItemNeutralSelf3_SpellID, + DispelItemGoodSelf3_SpellID, + DispelItemBadSelf3_SpellID, + DispelItemNeutralOther4_SpellID, + DispelItemGoodOther4_SpellID, + DispelItemBadOther4_SpellID, + DispelItemNeutralSelf4_SpellID, + DispelItemGoodSelf4_SpellID, + DispelItemBadSelf4_SpellID, + DispelItemNeutralOther5_SpellID, + DispelItemGoodOther5_SpellID, + DispelItemBadOther5_SpellID, + DispelItemNeutralSelf5_SpellID, + DispelItemGoodSelf5_SpellID, + DispelItemBadSelf5_SpellID, + DispelItemNeutralOther6_SpellID, + DispelItemGoodOther6_SpellID, + DispelItemBadOther6_SpellID, + DispelItemNeutralSelf6_SpellID, + DispelItemGoodSelf6_SpellID, + DispelItemBadSelf6_SpellID, + DispelLifeNeutralOther1_SpellID, + DispelLifeGoodOther1_SpellID, + DispelLifeBadOther1_SpellID, + DispelLifeNeutralSelf1_SpellID, + DispelLifeGoodSelf1_SpellID, + DispelLifeBadSelf1_SpellID, + DispelLifeNeutralOther2_SpellID, + DispelLifeGoodOther2_SpellID, + DispelLifeBadOther2_SpellID, + DispelLifeNeutralSelf2_SpellID, + DispelLifeGoodSelf2_SpellID, + DispelLifeBadSelf2_SpellID, + DispelLifeNeutralOther3_SpellID, + DispelLifeGoodOther3_SpellID, + DispelLifeBadOther3_SpellID, + DispelLifeNeutralSelf3_SpellID, + DispelLifeGoodSelf3_SpellID, + DispelLifeBadSelf3_SpellID, + DispelLifeNeutralOther4_SpellID, + DispelLifeGoodOther4_SpellID, + DispelLifeBadOther4_SpellID, + DispelLifeNeutralSelf4_SpellID, + DispelLifeGoodSelf4_SpellID, + DispelLifeBadSelf4_SpellID, + DispelLifeNeutralOther5_SpellID, + DispelLifeGoodOther5_SpellID, + DispelLifeBadOther5_SpellID, + DispelLifeNeutralSelf5_SpellID, + DispelLifeGoodSelf5_SpellID, + DispelLifeBadSelf5_SpellID, + DispelLifeNeutralOther6_SpellID, + DispelLifeGoodOther6_SpellID, + DispelLifeBadOther6_SpellID, + DispelLifeNeutralSelf6_SpellID, + DispelLifeGoodSelf6_SpellID, + DispelLifeBadSelf6_SpellID, + ManaBlight_SpellID, + CampingMastery_SpellID, + CampingIneptitude_SpellID, + WoundTwister_SpellID, + Alacrity_SpellID, + SoulHunter_SpellID, + LifeGiver_SpellID, + StaminaGiver_SpellID, + ManaGiver_SpellID, + PortalSendingCaulnalain_SpellID, + PortalSendingFenmalain_SpellID, + PortalSendingShendolain_SpellID, + WarriorsLesserVitality_SpellID, + WarriorsVitality_SpellID, + WarriorsGreaterVitality_SpellID, + WarriorsUltimateVitality_SpellID, + WarriorsLesserVigor_SpellID, + WarriorsVigor_SpellID, + WarriorsGreaterVigor_SpellID, + WarriorsUltimateVigor_SpellID, + WizardsLesserIntellect_SpellID, + WizardsIntellect_SpellID, + WizardsGreaterIntellect_SpellID, + WizardsUltimateIntellect_SpellID, + AerfallesWard_SpellID, + Impulse_SpellID, + BunnySmite_SpellID, + BaelZharonSmite_SpellID, + CrystalSunderRing_SpellID, + RecallAsmolum1_SpellID, + ShadowCloudManaDrain_SpellID, + ShadowCloudLifeDrain_SpellID, + SanctuaryRecall_SpellID, + RecallAsmolum2_SpellID, + RecallAsmolum3_SpellID, + ShadowCloudStamDrain_SpellID, + Martyr_SpellID, + SummonPortalCoIPK_SpellID, + StaminaBlight_SpellID, + FlamingBlaze_SpellID, + SteelThorns_SpellID, + ElectricBlaze_SpellID, + AcidicSpray_SpellID, + ExplodingFury_SpellID, + ElectricDischarge_SpellID, + FumingAcid_SpellID, + FlamingIrruption_SpellID, + ExplodingIce_SpellID, + SparkingFury_SpellID, + SummonPortalHopeslayer_SpellID, + RecallAerlinthe_SpellID, + BaelzharonWallFire_SpellID, + BaelzharonWeaknessOther_SpellID, + BaelzharonItemIneptOther_SpellID, + BaelzharonRainBludgeon_SpellID, + BaelzharonPortalExile_SpellID, + BaelzharonArmorOther_SpellID, + BaelzharonMagicDefense_SpellID, + BaelzharonBloodDrinker_SpellID, + WeddingSteele_SpellID, + SteeleGenericFancy_SpellID, + ArmorOther7_SpellID, + ArmorSelf7_SpellID, + BafflementOther7_SpellID, + BafflementSelf7_SpellID, + ClumsinessOther7_SpellID, + ClumsinessSelf7_SpellID, + CoordinationOther7_SpellID, + CoordinationSelf7_SpellID, + EnduranceOther7_SpellID, + EnduranceSelf7_SpellID, + EnfeebleOther7_SpellID, + EnfeebleSelf7_SpellID, + FeeblemindOther7_SpellID, + FeeblemindSelf7_SpellID, + FocusOther7_SpellID, + FocusSelf7_SpellID, + FrailtyOther7_SpellID, + FrailtySelf7_SpellID, + HarmOther7_SpellID, + HarmSelf7_SpellID, + healother7_SpellID, + healself7_SpellID, + ImperilOther7_SpellID, + ImperilSelf7_SpellID, + ManaBoostOther7_SpellID, + ManaBoostSelf7_SpellID, + ManaDrainOther7_SpellID, + ManaDrainSelf7_SpellID, + QuicknessOther7_SpellID, + QuicknessSelf7_SpellID, + Revitalizeother7_SpellID, + RevitalizeSelf7_SpellID, + SlownessOther7_SpellID, + SlownessSelf7_SpellID, + StrengthOther7_SpellID, + StrengthSelf7_SpellID, + WeaknessOther7_SpellID, + WeaknessSelf7_SpellID, + WillPowerOther7_SpellID, + WillpowerSelf7_SpellID, + AcidBane7_SpellID, + AcidLure7_SpellID, + BladeBane7_SpellID, + BladeLure7_SpellID, + BloodDrinker7_SpellID, + BloodLoather7_SpellID, + BludgeonBane7_SpellID, + BludgeonLure7_SpellID, + Brittlemail7_SpellID, + Defender7_SpellID, + FlameBane7_SpellID, + FlameLure7_SpellID, + FrostBane7_SpellID, + FrostLure7_SpellID, + Heartseeker7_SpellID, + Hidevalue7_SpellID, + Impenetrability7_SpellID, + Leadenweapon7_SpellID, + LightningBane7_SpellID, + LightningLure7_SpellID, + LureBlade7_SpellID, + PiercingBane7_SpellID, + PiercingLure7_SpellID, + Strengthenlock7_SpellID, + Swiftkiller7_SpellID, + Truevalue7_SpellID, + TurnBlade7_SpellID, + Weakenlock7_SpellID, + AcidBlast7_SpellID, + AcidStreak7_SpellID, + AcidStream7_SpellID, + AcidVolley7_SpellID, + BladeBlast7_SpellID, + BladeVolley7_SpellID, + BludgeoningVolley7_SpellID, + FlameBlast7_SpellID, + FlameBolt7_SpellID, + FlameStreak7_SpellID, + FlameVolley7_SpellID, + ForceBlast7_SpellID, + ForceBolt7_SpellID, + ForceStreak7_SpellID, + ForceVolley7_SpellID, + Frostblast7_SpellID, + FrostBolt7_SpellID, + FrostStreak7_SpellID, + FrostVolley7_SpellID, + Lightningblast7_SpellID, + Lightningbolt7_SpellID, + LightningStreak7_SpellID, + LightningVolley7_SpellID, + Shockblast7_SpellID, + Shockwave7_SpellID, + ShockwaveStreak7_SpellID, + Whirlingblade7_SpellID, + WhirlingBladeStreak7_SpellID, + AcidProtectionOther7_SpellID, + AcidProtectionSelf7_SpellID, + BladeProtectionOther7_SpellID, + BladeProtectionSelf7_SpellID, + BludgeonProtectionOther7_SpellID, + BludgeonProtectionSelf7_SpellID, + ColdProtectionOther7_SpellID, + ColdProtectionSelf7_SpellID, + FireProtectionOther7_SpellID, + FireProtectionSelf7_SpellID, + LightningProtectionOther7_SpellID, + LightningProtectionSelf7_SpellID, + PiercingProtectionOther7_SpellID, + PiercingProtectionSelf7_SpellID, + AcidVulnerabilityOther7_SpellID, + AcidVulnerabilitySelf7_SpellID, + BladeVulnerabilityOther7_SpellID, + BladeVulnerabilitySelf7_SpellID, + BludgeonVulnerabilityOther7_SpellID, + BludgeonVulnerabilitySelf7_SpellID, + ColdVulnerabilityOther7_SpellID, + ColdVulnerabilitySelf7_SpellID, + FireVulnerabilityOther7_SpellID, + FireVulnerabilitySelf7_SpellID, + LightningVulnerabilityOther7_SpellID, + LightningVulnerabilitySelf7_SpellID, + PiercingVulnerabilityOther7_SpellID, + PiercingVulnerabilitySelf7_SpellID, + ExhaustionOther7_SpellID, + ExhaustionSelf7_SpellID, + FesterOther7_SpellID, + FesterSelf7_SpellID, + ManaDepletionOther7_SpellID, + ManaDepletionSelf7_SpellID, + ManaRenewalOther7_SpellID, + ManaRenewalSelf7_SpellID, + RegenerationOther7_SpellID, + RegenerationSelf7_SpellID, + RejuvenationOther7_SpellID, + RejuvenationSelf7_SpellID, + AlchemyIneptitudeOther7_SpellID, + AlchemyIneptitudeSelf7_SpellID, + AlchemyMasteryOther7_SpellID, + AlchemyMasterySelf7_SpellID, + ArcaneBenightednessOther7_SpellID, + ArcaneBenightednessSelf7_SpellID, + ArcaneEnlightenmentOther7_SpellID, + ArcaneEnlightenmentSelf7_SpellID, + ArmorExpertiseOther7_SpellID, + ArmorExpertiseSelf7_SpellID, + ArmorIgnoranceOther7_SpellID, + ArmorIgnoranceSelf7_SpellID, + AxeIneptitudeOther7_SpellID, + AxeIneptitudeSelf7_SpellID, + AxeMasteryOther7_SpellID, + AxeMasterySelf7_SpellID, + BowIneptitudeOther7_SpellID, + BowIneptitudeSelf7_SpellID, + BowMasteryOther7_SpellID, + BowMasterySelf7_SpellID, + CookingIneptitudeOther7_SpellID, + CookingIneptitudeSelf7_SpellID, + CookingMasteryOther7_SpellID, + CookingMasterySelf7_SpellID, + CreatureEnchantmentIneptitudeOther7_SpellID, + CreatureEnchantmentIneptitudeSelf7_SpellID, + CreatureEnchantmentMasteryOther7_SpellID, + CreatureEnchantmentMasterySelf7_SpellID, + CrossbowIneptitudeOther7_SpellID, + CrossbowIneptitudeSelf7_SpellID, + CrossbowMasteryOther7_SpellID, + CrossbowMasterySelf7_SpellID, + DaggerIneptitudeOther7_SpellID, + DaggerIneptitudeSelf7_SpellID, + DaggerMasteryOther7_SpellID, + DaggerMasterySelf7_SpellID, + DeceptionIneptitudeOther7_SpellID, + DeceptionIneptitudeSelf7_SpellID, + DeceptionMasteryOther7_SpellID, + DeceptionMasterySelf7_SpellID, + DefenselessnessOther7_SpellID, + DefenselessnessSelf7_SpellID, + FaithlessnessOther7_SpellID, + FaithlessnessSelf7_SpellID, + FealtyOther7_SpellID, + FealtySelf7_SpellID, + FletchingIneptitudeOther7_SpellID, + FletchingIneptitudeSelf7_SpellID, + FletchingMasteryOther7_SpellID, + FletchingMasterySelf7_SpellID, + HealingIneptitudeOther7_SpellID, + HealingIneptitudeSelf7_SpellID, + HealingMasteryOther7_SpellID, + HealingMasterySelf7_SpellID, + ImpregnabilityOther7_SpellID, + ImpregnabilitySelf7_SpellID, + InvulnerabilityOther7_SpellID, + InvulnerabilitySelf7_SpellID, + ItemEnchantmentIneptitudeOther7_SpellID, + ItemEnchantmentIneptitudeSelf7_SpellID, + ItemEnchantmentMasteryOther7_SpellID, + ItemEnchantmentMasterySelf7_SpellID, + ItemExpertiseOther7_SpellID, + ItemExpertiseSelf7_SpellID, + ItemIgnoranceOther7_SpellID, + ItemIgnoranceSelf7_SpellID, + JumpingIneptitudeOther7_SpellID, + JumpingIneptitudeSelf7_SpellID, + JumpingMasteryOther7_SpellID, + JumpingMasterySelf7_SpellID, + LeadenFeetOther7_SpellID, + LeadenFeetSelf7_SpellID, + LeadershipIneptitudeOther7_SpellID, + LeadershipIneptitudeSelf7_SpellID, + LeadershipMasteryOther7_SpellID, + LeadershipMasterySelf7_SpellID, + LifeMagicIneptitudeOther7_SpellID, + LifeMagicIneptitudeSelf7_SpellID, + LifeMagicMasteryOther7_SpellID, + LifeMagicMasterySelf7_SpellID, + LockpickIneptitudeOther7_SpellID, + LockpickIneptitudeSelf7_SpellID, + LockpickMasteryOther7_SpellID, + LockpickMasterySelf7_SpellID, + MaceIneptitudeOther7_SpellID, + MaceIneptitudeSelf7_SpellID, + MaceMasteryOther7_SpellID, + MaceMasterySelf7_SpellID, + MagicItemExpertiseOther7_SpellID, + MagicItemExpertiseSelf7_SpellID, + MagicItemIgnoranceOther7_SpellID, + MagicItemIgnoranceSelf7_SpellID, + MagicResistanceOther7_SpellID, + MagicResistanceSelf7_SpellID, + MagicYieldOther7_SpellID, + MagicYieldSelf7_SpellID, + ManaIneptitudeOther7_SpellID, + ManaIneptitudeSelf7_SpellID, + ManaMasteryOther7_SpellID, + ManaMasterySelf7_SpellID, + MonsterAttunementOther7_SpellID, + MonsterAttunementSelf7_SpellID, + MonsterUnfamiliarityOther7_SpellID, + MonsterUnfamiliaritySelf7_SpellID, + PersonAttunementOther7_SpellID, + PersonAttunementSelf7_SpellID, + PersonUnfamiliarityOther7_SpellID, + PersonUnfamiliaritySelf7_SpellID, + SpearIneptitudeOther7_SpellID, + SpearIneptitudeSelf7_SpellID, + SpearMasteryOther7_SpellID, + SpearMasterySelf7_SpellID, + SprintOther7_SpellID, + SprintSelf7_SpellID, + StaffIneptitudeOther7_SpellID, + StaffIneptitudeSelf7_SpellID, + StaffMasteryOther7_SpellID, + StaffMasterySelf7_SpellID, + SwordIneptitudeOther7_SpellID, + SwordIneptitudeSelf7_SpellID, + SwordMasteryOther7_SpellID, + SwordMasterySelf7_SpellID, + ThrownWeaponIneptitudeOther7_SpellID, + ThrownWeaponIneptitudeSelf7_SpellID, + ThrownWeaponMasteryOther7_SpellID, + ThrownWeaponMasterySelf7_SpellID, + UnarmedCombatIneptitudeOther7_SpellID, + UnarmedCombatMasteryOther7_SpellID, + UnarmedCombatMasterySelf7_SpellID, + UnarmedCombatIneptitudeSelf7_SpellID, + VulnerabilityOther7_SpellID, + VulnerabilitySelf7_SpellID, + WarMagicIneptitudeOther7_SpellID, + WarMagicIneptitudeSelf7_SpellID, + WarMagicMasteryOther7_SpellID, + WarMagicMasterySelf7_SpellID, + WeaponExpertiseOther7_SpellID, + WeaponExpertiseSelf7_SpellID, + WeaponIgnoranceOther7_SpellID, + WeaponIgnoranceSelf7_SpellID, + DrainHealth7_SpellID, + DrainMana7_SpellID, + DrainStamina7_SpellID, + HealthtoManaOther7_SpellID, + HealthtoManaSelf7_SpellID, + HealthtoStaminaOther7_SpellID, + HealthtoStaminaSelf7_SpellID, + InfuseHealth7_SpellID, + InfuseMana7_SpellID, + InfuseStamina7_SpellID, + ManatoHealthOther7_SpellID, + ManatoHealthSelf7_SpellID, + ManatoStaminaOther7_SpellID, + ManatoStaminaSelf7_SpellID, + StaminatoHealthOther7_SpellID, + StaminatoHealthSelf7_SpellID, + StaminatoManaOther7_SpellID, + StaminatoManaSelf7_SpellID, + MaledictionSelf_SpellID, + ConcentrationSelf_SpellID, + BrillianceOther_SpellID, + HieroWard_SpellID, + DecayDurance_SpellID, + ConsumptionDurance_SpellID, + StasisDurance_SpellID, + StimulationDurance_SpellID, + PiercingDuranceLess_SpellID, + SlashingDuranceLess_SpellID, + BludgeoningDuranceLess_SpellID, + FaunaPerlustration_SpellID, + RecallLyceum_SpellID, + PortalSendTrial1_SpellID, + PortalSendTrial2_SpellID, + PortalSendTrial3_SpellID, + PortalSendTrial4_SpellID, + PortalSendTrial5_SpellID, + PortalSendingHHSW_SpellID, + PortalSendingObsidianRim_SpellID, + BovineIntervention_SpellID, + PortalSummonReward_SpellID, + PortalSendingTombExit_SpellID, + AerfalleExpulsion_SpellID, + AerfalleColdVuln_SpellID, + AerfalleFireVuln_SpellID, + AerfalleFester_SpellID, + AerfalleLifeLower_SpellID, + AerfalleStamLower_SpellID, + AerfalleManaLower_SpellID, + AnnihilationGlimpse_SpellID, + AnnihilationVision_SpellID, + BeastMurmur_SpellID, + BeastWhisper_SpellID, + InstrumentalityGrip_SpellID, + InstrumentalityTouch_SpellID, + UnnaturalPersistence_SpellID, + DarkFlame_SpellID, + ArcaneRestoration_SpellID, + Vigilance_SpellID, + Indomitability_SpellID, + Determination_SpellID, + Caution_SpellID, + Vigor_SpellID, + Haste_SpellID, + Prowess_SpellID, + Serenity_SpellID, + ForceArmor_SpellID, + AcidShield_SpellID, + ElectricShield_SpellID, + FlameShield_SpellID, + IceShield_SpellID, + BludgeonShield_SpellID, + PiercingShield_SpellID, + SlashingShield_SpellID, + PortalSendingBunnyGarden_SpellID, + EssenceLull_SpellID, + BalancedBreakfast_SpellID, + CollectorAcidProtection_SpellID, + CollectorBladeProtection_SpellID, + CollectorBludgeoningProtection_SpellID, + CollectorColdProtection_SpellID, + CollectorFireProtection_SpellID, + CollectorLightningProtection_SpellID, + CollectorPiercingProtection_SpellID, + Discipline_SpellID, + EnduringCoordination_SpellID, + EnduringFocus_SpellID, + EnduringStoicism_SpellID, + EyeHunter_SpellID, + HighTensionString_SpellID, + Obedience_SpellID, + OccultPotence_SpellID, + PanicAttack_SpellID, + PanoplyQueenslayer_SpellID, + ParalyzingFear_SpellID, + PortalSendDryreach_SpellID, + Precise_SpellID, + RabbitsEye_SpellID, + StoneWall_SpellID, + StrongPull_SpellID, + SugarRush_SpellID, + TimaruShelterMagic_SpellID, + TimaruShelterMelee_SpellID, + TimaruShelterMissile_SpellID, + Vivification_SpellID, + AcidWard_SpellID, + FlameWard_SpellID, + FrostWard_SpellID, + LightningWard_SpellID, + LayingonofHands_SpellID, + RockslideGreater_SpellID, + RockslideLesser_SpellID, + Rockslide_SpellID, + StoneCliffsGreater_SpellID, + StoneCliffsLesser_SpellID, + StoneCliffs_SpellID, + StrengthofEarthGreater_SpellID, + StrengthofEarthLesser_SpellID, + StrengthofEarth_SpellID, + GrowthGreater_SpellID, + GrowthLesser_SpellID, + Growth_SpellID, + HuntersAcumenGreater_SpellID, + HuntersAcumenLesser_SpellID, + HuntersAcumen_SpellID, + ThornsGreater_SpellID, + ThornsLesser_SpellID, + Thorns_SpellID, + CascadeAxeGreater_SpellID, + CascadeAxeLesser_SpellID, + CascadeAxe_SpellID, + CascadeDaggerGreater_SpellID, + CascadeDaggerLesser_SpellID, + CascadeDagger_SpellID, + CascadeMaceGreater_SpellID, + CascadeMaceLesser_SpellID, + CascadeMace_SpellID, + CascadeSpearGreater_SpellID, + CascadeSpearLesser_SpellID, + CascadeSpear_SpellID, + CascadeStaffGreater_SpellID, + CascadeStaffLesser_SpellID, + CascadeStaff_SpellID, + StillWaterGreater_SpellID, + StillWaterLesser_SpellID, + StillWater_SpellID, + TorrentGreater_SpellID, + TorrentLesser_SpellID, + Torrent_SpellID, + PortalSendTimaru_SpellID, + PORTALTUMEROKWARALU_SpellID, + PORTALTUMEROKWARALUGREATER_SpellID, + PORTALTUMEROKWARALULESSER_SpellID, + PORTALTUMEROKWARGHA_SpellID, + PORTALTUMEROKWARGHAGREATER_SpellID, + PORTALTUMEROKWARGHALESSER_SpellID, + PORTALTUMEROKWARSHO_SpellID, + PORTALTUMEROKWARSHOGREATER_SpellID, + PORTALTUMEROKWARSHOLESSER_SpellID, + BLOODTHIRST_SpellID, + SPIRITSTRIKE_SpellID, + ElariBowFamiliarity_SpellID, + PORTALSENDSHOUSHISE_SpellID, + PORTALSENDHOLTS_SpellID, + PORTALSENDHOLTW_SpellID, + PORTALSENDSHOUSHIW_SpellID, + PORTALSENDYARAQE_SpellID, + PORTALSENDYARAQN_SpellID, + PORTALSENDINGAREACHOLTW_SpellID, + PORTALSENDINGAREACHOLTS_SpellID, + PORTALSENDINGAREACSHOUSHISE_SpellID, + PORTALSENDINGAREACSHOUSHIW_SpellID, + PORTALSENDINGAREACYARAQE_SpellID, + PORTALSENDINGAREACYARAQN_SpellID, + CANTRIPALCHEMICALPROWESS2_SpellID, + CANTRIPARCANEPROWESS2_SpellID, + CANTRIPARMOREXPERTISE2_SpellID, + CANTRIPAXEAPTITUDE2_SpellID, + CANTRIPBOWAPTITUDE2_SpellID, + CANTRIPCOOKINGPROWESS2_SpellID, + CANTRIPCREATUREENCHANTMENTAPTITUDE2_SpellID, + CANTRIPCROSSBOWAPTITUDE2_SpellID, + CANTRIPDAGGERAPTITUDE2_SpellID, + CANTRIPDECEPTIONPROWESS2_SpellID, + CANTRIPFEALTY2_SpellID, + CANTRIPFLETCHINGPROWESS2_SpellID, + CANTRIPHEALINGPROWESS2_SpellID, + CANTRIPIMPREGNABILITY2_SpellID, + CANTRIPINVULNERABILITY2_SpellID, + CANTRIPITEMENCHANTMENTAPTITUDE2_SpellID, + CANTRIPITEMEXPERTISE2_SpellID, + CANTRIPJUMPINGPROWESS2_SpellID, + CANTRIPLEADERSHIP2_SpellID, + CANTRIPLIFEMAGICAPTITUDE2_SpellID, + CANTRIPLOCKPICKPROWESS2_SpellID, + CANTRIPMACEAPTITUDE2_SpellID, + CANTRIPMAGICITEMEXPERTISE2_SpellID, + CANTRIPMAGICRESISTANCE2_SpellID, + CANTRIPMANACONVERSIONPROWESS2_SpellID, + CANTRIPMONSTERATTUNEMENT2_SpellID, + CANTRIPPERSONATTUNEMENT2_SpellID, + CANTRIPSPEARAPTITUDE2_SpellID, + CANTRIPSPRINT2_SpellID, + CANTRIPSTAFFAPTITUDE2_SpellID, + CANTRIPSWORDAPTITUDE2_SpellID, + CANTRIPTHROWNAPTITUDE2_SpellID, + CANTRIPUNARMEDAPTITUDE2_SpellID, + CANTRIPWARMAGICAPTITUDE2_SpellID, + CANTRIPWEAPONEXPERTISE2_SpellID, + CANTRIPALCHEMICALPROWESS1_SpellID, + CANTRIPARCANEPROWESS1_SpellID, + CANTRIPARMOREXPERTISE1_SpellID, + CANTRIPAXEAPTITUDE1_SpellID, + CANTRIPBOWAPTITUDE1_SpellID, + CANTRIPCOOKINGPROWESS1_SpellID, + CANTRIPCREATUREENCHANTMENTAPTITUDE1_SpellID, + CANTRIPCROSSBOWAPTITUDE1_SpellID, + CANTRIPDAGGERAPTITUDE1_SpellID, + CANTRIPDECEPTIONPROWESS1_SpellID, + CANTRIPFEALTY1_SpellID, + CANTRIPFLETCHINGPROWESS1_SpellID, + CANTRIPHEALINGPROWESS1_SpellID, + CANTRIPIMPREGNABILITY1_SpellID, + CANTRIPINVULNERABILITY1_SpellID, + CANTRIPITEMENCHANTMENTAPTITUDE1_SpellID, + CANTRIPITEMEXPERTISE1_SpellID, + CANTRIPJUMPINGPROWESS1_SpellID, + CANTRIPLEADERSHIP1_SpellID, + CANTRIPLIFEMAGICAPTITUDE1_SpellID, + CANTRIPLOCKPICKPROWESS1_SpellID, + CANTRIPMACEAPTITUDE1_SpellID, + CANTRIPMAGICITEMEXPERTISE1_SpellID, + CANTRIPMAGICRESISTANCE1_SpellID, + CANTRIPMANACONVERSIONPROWESS1_SpellID, + CANTRIPMONSTERATTUNEMENT1_SpellID, + CANTRIPPERSONATTUNEMENT1_SpellID, + CANTRIPSPEARAPTITUDE1_SpellID, + CANTRIPSPRINT1_SpellID, + CANTRIPSTAFFAPTITUDE1_SpellID, + CANTRIPSWORDAPTITUDE1_SpellID, + CANTRIPTHROWNAPTITUDE1_SpellID, + CANTRIPUNARMEDAPTITUDE1_SpellID, + CANTRIPWARMAGICAPTITUDE1_SpellID, + CANTRIPWEAPONEXPERTISE1_SpellID, + CANTRIPARMOR2_SpellID, + CANTRIPCOORDINATION2_SpellID, + CANTRIPENDURANCE2_SpellID, + CANTRIPFOCUS2_SpellID, + CANTRIPQUICKNESS2_SpellID, + CANTRIPSTRENGTH2_SpellID, + CANTRIPWILLPOWER2_SpellID, + CANTRIPARMOR1_SpellID, + CANTRIPCOORDINATION1_SpellID, + CANTRIPENDURANCE1_SpellID, + CANTRIPFOCUS1_SpellID, + CANTRIPQUICKNESS1_SpellID, + CANTRIPSTRENGTH1_SpellID, + CANTRIPWILLPOWER1_SpellID, + CANTRIPACIDBANE2_SpellID, + CANTRIPBLOODTHIRST2_SpellID, + CANTRIPBLUDGEONINGBANE2_SpellID, + CANTRIPDEFENDER2_SpellID, + CANTRIPFLAMEBANE2_SpellID, + CANTRIPFROSTBANE2_SpellID, + CANTRIPHEARTTHIRST2_SpellID, + CANTRIPIMPENETRABILITY2_SpellID, + CANTRIPPIERCINGBANE2_SpellID, + CANTRIPSLASHINGBANE2_SpellID, + CANTRIPSTORMBANE2_SpellID, + CANTRIPSWIFTHUNTER2_SpellID, + CANTRIPACIDBANE1_SpellID, + CANTRIPBLOODTHIRST1_SpellID, + CANTRIPBLUDGEONINGBANE1_SpellID, + CANTRIPDEFENDER1_SpellID, + CANTRIPFLAMEBANE1_SpellID, + CANTRIPFROSTBANE1_SpellID, + CANTRIPHEARTTHIRST1_SpellID, + CANTRIPIMPENETRABILITY1_SpellID, + CANTRIPPIERCINGBANE1_SpellID, + CANTRIPSLASHINGBANE1_SpellID, + CANTRIPSTORMBANE1_SpellID, + CANTRIPSWIFTHUNTER1_SpellID, + CANTRIPACIDWARD2_SpellID, + CANTRIPBLUDGEONINGWARD2_SpellID, + CANTRIPFLAMEWARD2_SpellID, + CANTRIPFROSTWARD2_SpellID, + CANTRIPPIERCINGWARD2_SpellID, + CANTRIPSLASHINGWARD2_SpellID, + CANTRIPSTORMWARD2_SpellID, + CANTRIPACIDWARD1_SpellID, + CANTRIPBLUDGEONINGWARD1_SpellID, + CANTRIPFLAMEWARD1_SpellID, + CANTRIPFROSTWARD1_SpellID, + CANTRIPPIERCINGWARD1_SpellID, + CANTRIPSLASHINGWARD1_SpellID, + CANTRIPSTORMWARD1_SpellID, + CANTRIPHEALTHGAIN2_SpellID, + CANTRIPMANAGAIN2_SpellID, + CANTRIPSTAMINAGAIN2_SpellID, + CANTRIPHEALTHGAIN1_SpellID, + CANTRIPMANAGAIN1_SpellID, + CANTRIPSTAMINAGAIN1_SpellID, + HuntressBoon_SpellID, + PreysReflex_SpellID, + PortalSendingHallofHollows_SpellID, + PortalSendingHallofHollowsSurface_SpellID, + PortalSendingRegicideBasement_SpellID, + PortalSendingRegicideBasementSurface_SpellID, + PortalSummonDungeonWitshire_SpellID, + KarenuasCurse_SpellID, + InvokingAunTanua_SpellID, + HeartofOak_SpellID, + Repulsion_SpellID, + Devourer_SpellID, + ForcetoArms_SpellID, + Consumption_SpellID, + Stasis_SpellID, + LifestoneTie1_SpellID, + PortalRecall_SpellID, + PortalTie2_SpellID, + PortalTieRecall2_SpellID, + SummonSecondPortal1_SpellID, + SummonSecondPortal2_SpellID, + SummonSecondPortal3_SpellID, + PortalSendingSelfSacrifice_SpellID, + PortalSendingMerciless_SpellID, + FeebleWillpower_SpellID, + FeebleEndurance_SpellID, + FeebleFocus_SpellID, + FeebleQuickness_SpellID, + FeebleStrength_SpellID, + FeebleCoordination_SpellID, + ModerateCoordination_SpellID, + ModerateEndurance_SpellID, + ModerateFocus_SpellID, + ModerateQuickness_SpellID, + ModerateStrength_SpellID, + ModerateWillpower_SpellID, + EssenceSluice_SpellID, + EssenceGlutton_SpellID, + EssenceSpike_SpellID, + NuhmudirasBenefaction_SpellID, + NuhmudirasBestowment_SpellID, + NuhmudirasEndowment_SpellID, + PortalSendingLabyrinthRewards_SpellID, + MartineRing1_SpellID, + MartineRing2_SpellID, + MartineStrike_SpellID, + FeebleAxeAptitude_SpellID, + FeebleBowAptitude_SpellID, + FeebleCrossbowAptitude_SpellID, + FeebleDaggerAptitude_SpellID, + FeebleMaceAptitude_SpellID, + FeebleManaConversionProwess_SpellID, + FeebleSpearAptitude_SpellID, + FeebleStaffAptitude_SpellID, + FeebleSwordAptitude_SpellID, + FeebleThrownAptitude_SpellID, + FeebleUnarmedAptitude_SpellID, + ModerateAxeAptitude_SpellID, + ModerateBowAptitude_SpellID, + ModerateCrossbowAptitude_SpellID, + ModerateDaggerAptitude_SpellID, + ModerateMaceAptitude_SpellID, + ModerateManaConversionProwess_SpellID, + ModerateSpearAptitude_SpellID, + ModerateStaffAptitude_SpellID, + ModerateSwordAptitude_SpellID, + ModerateThrownAptitude_SpellID, + ModerateUnarmedAptitude_SpellID, + MartineDebuff_SpellID, + MartineDegeneration_SpellID, + AuroricWhip_SpellID, + CorrosiveCloud_SpellID, + ElementalFury1_SpellID, + ElementalFury2_SpellID, + ElementalFury3_SpellID, + ElementalFury4_SpellID, + ElementalistsBoon_SpellID, + ElementalWard_SpellID, + PortalSendingGaerlan_SpellID, + StasisField_SpellID, + SummonPortalFloater_SpellID, + VolcanicBlast_SpellID, + AcidArc1_SpellID, + AcidArc2_SpellID, + AcidArc3_SpellID, + AcidArc4_SpellID, + AcidArc5_SpellID, + AcidArc6_SpellID, + AcidArc7_SpellID, + ForceArc1_SpellID, + ForceArc2_SpellID, + ForceArc3_SpellID, + ForceArc4_SpellID, + ForceArc5_SpellID, + ForceArc6_SpellID, + ForceArc7_SpellID, + FrostArc1_SpellID, + FrostArc2_SpellID, + FrostArc3_SpellID, + FrostArc4_SpellID, + FrostArc5_SpellID, + FrostArc6_SpellID, + FrostArc7_SpellID, + LightningArc1_SpellID, + LightningArc2_SpellID, + LightningArc3_SpellID, + LightningArc4_SpellID, + LightningArc5_SpellID, + LightningArc6_SpellID, + LightningArc7_SpellID, + FlameArc1_SpellID, + FlameArc2_SpellID, + FlameArc3_SpellID, + FlameArc4_SpellID, + FlameArc5_SpellID, + FlameArc6_SpellID, + FlameArc7_SpellID, + ShockArc1_SpellID, + ShockArc2_SpellID, + ShockArc3_SpellID, + ShockArc4_SpellID, + ShockArc5_SpellID, + ShockArc6_SpellID, + ShockArc7_SpellID, + BladeArc1_SpellID, + BladeArc2_SpellID, + BladeArc3_SpellID, + BladeArc4_SpellID, + BladeArc5_SpellID, + BladeArc6_SpellID, + BladeArc7_SpellID, + HealthBolt1_SpellID, + HealthBolt2_SpellID, + HealthBolt3_SpellID, + HealthBolt4_SpellID, + HealthBolt5_SpellID, + HealthBolt6_SpellID, + HealthBolt7_SpellID, + StaminaBolt1_SpellID, + StaminaBolt2_SpellID, + StaminaBolt3_SpellID, + StaminaBolt4_SpellID, + StaminaBolt5_SpellID, + StaminaBolt6_SpellID, + StaminaBolt7_SpellID, + ManaBolt1_SpellID, + ManaBolt2_SpellID, + ManaBolt3_SpellID, + ManaBolt4_SpellID, + ManaBolt5_SpellID, + ManaBolt6_SpellID, + ManaBolt7_SpellID, + LesserElementalFuryAcid_SpellID, + LesserElementalFuryFlame_SpellID, + LesserElementalFuryFrost_SpellID, + LesserElementalFuryLightning_SpellID, + LesserStasisField_SpellID, + Madness_SpellID, + Supremacy_SpellID, + HarbingerManaBlight_SpellID, + HarbingerSmite_SpellID, + HarbingerWeaknessOther_SpellID, + RollingDeathAcid_SpellID, + RollingDeathFlame_SpellID, + RollingDeathFrost_SpellID, + RollingDeathLightning_SpellID, + PortalSendingCitadelLibrary_SpellID, + PortalSendingCitadelSurface_SpellID, + PortalSendingProvingGrounds2Extreme_SpellID, + PortalSendingProvingGrounds2High_SpellID, + PortalSendingProvingGrounds2Low_SpellID, + PortalSendingProvingGrounds2Mid_SpellID, + PortalSendingProvingGrounds3Extreme_SpellID, + PortalSendingProvingGrounds3High_SpellID, + PortalSendingProvingGrounds3Low_SpellID, + PortalSendingProvingGrounds3Mid_SpellID, + PortalSendingProvingGrounds4Extreme_SpellID, + PortalSendingProvingGrounds4High_SpellID, + PortalSendingProvingGrounds4Low_SpellID, + PortalSendingProvingGrounds4Mid_SpellID, + ModerateArcaneProwess_SpellID, + ModerateLifeMagicAptitude_SpellID, + ModerateMagicResistance_SpellID, + ModerateWarMagicAptitude_SpellID, + RecallLethe_SpellID, + ImpiousCurse_SpellID, + FireworkOutBlack1_SpellID, + FireworkOutBlack2_SpellID, + FireworkOutBlack3_SpellID, + FireworkOutBlack4_SpellID, + FireworkOutBlack5_SpellID, + FireworkOutBlack6_SpellID, + FireworkOutBlack7_SpellID, + FireworkOutBlue1_SpellID, + FireworkOutBlue2_SpellID, + FireworkOutBlue3_SpellID, + FireworkOutBlue4_SpellID, + FireworkOutBlue5_SpellID, + FireworkOutBlue6_SpellID, + FireworkOutBlue7_SpellID, + FireworkOutGreen1_SpellID, + FireworkOutGreen2_SpellID, + FireworkOutGreen3_SpellID, + FireworkOutGreen4_SpellID, + FireworkOutGreen5_SpellID, + FireworkOutGreen6_SpellID, + FireworkOutGreen7_SpellID, + FireworkOutOrange1_SpellID, + FireworkOutOrange2_SpellID, + FireworkOutOrange3_SpellID, + FireworkOutOrange4_SpellID, + FireworkOutOrange5_SpellID, + FireworkOutOrange6_SpellID, + FireworkOutOrange7_SpellID, + FireworkOutPurple1_SpellID, + FireworkOutPurple2_SpellID, + FireworkOutPurple3_SpellID, + FireworkOutPurple4_SpellID, + FireworkOutPurple5_SpellID, + FireworkOutPurple6_SpellID, + FireworkOutPurple7_SpellID, + FireworkOutRed1_SpellID, + FireworkOutRed2_SpellID, + FireworkOutRed3_SpellID, + FireworkOutRed4_SpellID, + FireworkOutRed5_SpellID, + FireworkOutRed6_SpellID, + FireworkOutRed7_SpellID, + FireworkOutWhite1_SpellID, + FireworkOutWhite2_SpellID, + FireworkOutWhite3_SpellID, + FireworkOutWhite4_SpellID, + FireworkOutWhite5_SpellID, + FireworkOutWhite6_SpellID, + FireworkOutWhite7_SpellID, + FireworkOutYellow1_SpellID, + FireworkOutYellow2_SpellID, + FireworkOutYellow3_SpellID, + FireworkOutYellow4_SpellID, + FireworkOutYellow5_SpellID, + FireworkOutYellow6_SpellID, + FireworkOutYellow7_SpellID, + FireworkUpBlack1_SpellID, + FireworkUpBlack2_SpellID, + FireworkUpBlack3_SpellID, + FireworkUpBlack4_SpellID, + FireworkUpBlack5_SpellID, + FireworkUpBlack6_SpellID, + FireworkUpBlack7_SpellID, + FireworkUpBlue1_SpellID, + FireworkUpBlue2_SpellID, + FireworkUpBlue3_SpellID, + FireworkUpBlue4_SpellID, + FireworkUpBlue5_SpellID, + FireworkUpBlue6_SpellID, + FireworkUpBlue7_SpellID, + FireworkUpGreen1_SpellID, + FireworkUpGreen2_SpellID, + FireworkUpGreen3_SpellID, + FireworkUpGreen4_SpellID, + FireworkUpGreen5_SpellID, + FireworkUpGreen6_SpellID, + FireworkUpGreen7_SpellID, + FireworkUpOrange1_SpellID, + FireworkUpOrange2_SpellID, + FireworkUpOrange3_SpellID, + FireworkUpOrange4_SpellID, + FireworkUpOrange5_SpellID, + FireworkUpOrange6_SpellID, + FireworkUpOrange7_SpellID, + FireworkUpPurple1_SpellID, + FireworkUpPurple2_SpellID, + FireworkUpPurple3_SpellID, + FireworkUpPurple4_SpellID, + FireworkUpPurple5_SpellID, + FireworkUpPurple6_SpellID, + FireworkUpPurple7_SpellID, + FireworkUpRed1_SpellID, + FireworkUpRed2_SpellID, + FireworkUpRed3_SpellID, + FireworkUpRed4_SpellID, + FireworkUpRed5_SpellID, + FireworkUpRed6_SpellID, + FireworkUpRed7_SpellID, + FireworkUpWhite1_SpellID, + FireworkUpWhite2_SpellID, + FireworkUpWhite3_SpellID, + FireworkUpWhite4_SpellID, + FireworkUpWhite5_SpellID, + FireworkUpWhite6_SpellID, + FireworkUpWhite7_SpellID, + FireworkUpYellow1_SpellID, + FireworkUpYellow2_SpellID, + FireworkUpYellow3_SpellID, + FireworkUpYellow4_SpellID, + FireworkUpYellow5_SpellID, + FireworkUpYellow6_SpellID, + FireworkUpYellow7_SpellID, + FireworkOldSchool_SpellID, + TuskerHide_SpellID, + TuskerMight_SpellID, + TuskerSkin_SpellID, + TuskerIslandRecall_SpellID, + TuskerLeap_SpellID, + TuskerSprint_SpellID, + TuskerFists_SpellID, + PortalSendingMowen_SpellID, + PortalSendingTuskerIsland_SpellID, + ModerateImpregnability_SpellID, + ModerateInvulnerability_SpellID, + PortalSendingTempleEnlightenment_SpellID, + PortalSendingTempleForgetfulness_SpellID, + UlgrimsRecall_SpellID, + PortalSendAbandonedMine_SpellID, + SingularityIslandRecall_SpellID, + PortalSendingCrystalMindsWarehseOK_SpellID, + PortalSendingCrystalMindsWarehseRobbed_SpellID, + ModerateCreatureMagicAptitude_SpellID, + DispelAllBadOther6NoManaCon_SpellID, + HieroWardGreat_SpellID, + LightbringersWay_SpellID, + MaidensKiss_SpellID, + PortalSendingKnorr_SpellID, + PortalSendingKnorr2_SpellID, + PortalSendingKnorr3_SpellID, + PortalSendingKnorrBarracks_SpellID, + PortalSendingKnorrForge_SpellID, + PortalSendingKnorrResearch_SpellID, + PortalSendingKnorrSeat_SpellID, + BlessingofthePriestess_SpellID, + MarkofthePriestess_SpellID, + BludgeoningDurance_SpellID, + PiercingDurance_SpellID, + SlashingDurance_SpellID, + CunningHunter_SpellID, + MarkHunter_SpellID, + MurderousIntent_SpellID, + MurderousThirst_SpellID, + SpeedHunter_SpellID, + VisionHunter_SpellID, + MothersBlessing_SpellID, + HuntersLash_SpellID, + PortalSendingOswaldLogic_SpellID, + PortalSendingOswaldsRoom_SpellID, + PortalSendingSecretLair_SpellID, + PortalSendingVagabondPassed_SpellID, + ModerateItemEnchantmentAptitude_SpellID, + OlthoiAcidBlast_SpellID, + PortalSendHiddenWarehouseROT2_SpellID, + DispelAllNeutralOther7_SpellID, + DestinyWind_SpellID, + EndlessVigor_SpellID, + HealFellow1_SpellID, + AlchemyMasteryFellow1_SpellID, + DispelLifeBadFellow1_SpellID, + FellowPortalSendHoltS_SpellID, + Ardence_SpellID, + Vim_SpellID, + Volition_SpellID, + PortalSendingCageNoir1_SpellID, + PortalSendingDarkNoir1_SpellID, + PortalSendingTreeNoir1_SpellID, + WintersKiss_SpellID, + Depletion_SpellID, + GraceUnicorn_SpellID, + Plague_SpellID, + PowerDragon_SpellID, + Scourge_SpellID, + SplendorFireBird_SpellID, + WrathPuppeteer_SpellID, + EnduranceAbyss_SpellID, + IreDarkPrince_SpellID, + PuppetString_SpellID, + WillpowerQuiddity_SpellID, + DarkWave_SpellID, + PuppetStrings_SpellID, + Dispersion_SpellID, + Foresight_SpellID, + UncannyDodge_SpellID, + Finesse_SpellID, + Thew_SpellID, + Zeal_SpellID, + EndlessSight_SpellID, + FarSight_SpellID, + OasisHealthRegen_SpellID, + OasisManaRegen_SpellID, + OasisStaminaRegen_SpellID, + RaptorSight_SpellID, + PortalSendingCandethKeepBattleDungeon_SpellID, + PortalSendingFortTethBattleDungeon_SpellID, + PortalSendingNantoBattleDungeon_SpellID, + PortalSendingPlateauBattleDungeon_SpellID, + PortalSendingQalabarBattleDungeon_SpellID, + PortalSendingTouTouBattleDungeon_SpellID, + PortalSendingXarabydunBattleDungeon_SpellID, + PortalSendingYaraqBattleDungeon_SpellID, + Shriek_SpellID, + PortalSendingCandethKeepBattleDungeonPKL_SpellID, + PortalSendingFortTethBattleDungeonPKL_SpellID, + PortalSendingNantoBattleDungeonPKL_SpellID, + PortalSendingPlateauBattleDungeonPKL_SpellID, + PortalSendingQalabarBattleDungeonPKL_SpellID, + PortalSendingTouTouBattleDungeonPKL_SpellID, + PortalSendingXarabydunBattleDungeonPKL_SpellID, + PortalSendingYaraqBattleDungeonPKL_SpellID, + BenedictionImmortality_SpellID, + ClosingGreatDivide_SpellID, + ColdGripGrave_SpellID, + DeathsCall_SpellID, + DeathsEmbrace_SpellID, + DeathsFeast_SpellID, + DeathsKiss_SpellID, + EssenceDissolution_SpellID, + GripDeath_SpellID, + KissGrave_SpellID, + LesserBenedictionImmortality_SpellID, + LesserClosingGreatDivide_SpellID, + LesserMistsBur_SpellID, + MatronsBarb_SpellID, + MinorBenedictionImmortality_SpellID, + MinorClosingGreatDivide_SpellID, + MinorMistsBur_SpellID, + MireFoot_SpellID, + MistsBur_SpellID, + ParalyzingTouch_SpellID, + SoulDissolution_SpellID, + Asphyxiation_SpellID, + DeathsVice_SpellID, + Enervation_SpellID, + GreaterAsphyxiation_SpellID, + GreaterEnervation_SpellID, + GreaterPoisonBlood_SpellID, + GreaterTaintMana_SpellID, + LesserAsphyxation_SpellID, + LesserEnervation_SpellID, + LesserPoisonBlood_SpellID, + LesserTaintMana_SpellID, + LesserWardRebirth_SpellID, + MatronsCurse_SpellID, + MinorWardRebirth_SpellID, + PoisonBlood_SpellID, + TaintMana_SpellID, + WardRebirth_SpellID, + PortalSendingFellowshipTempleGuardians_SpellID, + PortalSendingFellowshipTempleMatron_SpellID, + FeebleFleshBruised_SpellID, + FeebleFleshCloth_SpellID, + FeebleFleshExposed_SpellID, + FeebleFleshFlint_SpellID, + FeebleFleshWeak_SpellID, + FeebleThinSkin_SpellID, + FleshBruised_SpellID, + FleshCloth_SpellID, + FleshExposed_SpellID, + FleshFlint_SpellID, + FleshWeak_SpellID, + LesserFleshBruised_SpellID, + LesserFleshCloth_SpellID, + LesserFleshExposed_SpellID, + LesserFleshFlint_SpellID, + LesserFleshWeak_SpellID, + LesserThinSkin_SpellID, + ThinSkin_SpellID, + LesserSkinFiazhat_SpellID, + MinorSkinFiazhat_SpellID, + SkinFiazhat_SpellID, + PortalSendingTempleApprentice_SpellID, + PortalSendingTempleConsort_SpellID, + PortalSendingTempleGuardOrange_SpellID, + PortalSendingTempleGuardRed_SpellID, + PortalSendingTempleGuardYellow_SpellID, + PortalSendingTempleIxir_SpellID, + PortalSendingTempleIxirZiCrypt_SpellID, + PortalSendingTempleKivikLir_SpellID, + PortalSendingTempleMatriarch_SpellID, + PortalSendingTempleTestsOrange_SpellID, + PortalSendingTempleTestsRed_SpellID, + PortalSendingTempleTestsYellow_SpellID, + FlaySoul_SpellID, + GreaterFlaySoul_SpellID, + GreaterLiquefyFlesh_SpellID, + GreaterSearFlesh_SpellID, + GreaterSoulHammer_SpellID, + GreaterSoulSpike_SpellID, + LesserFlaySoul_SpellID, + LesserLiquefyFlesh_SpellID, + LesserSearFlesh_SpellID, + LesserSoulHammer_SpellID, + LesserSoulSpike_SpellID, + LiquefyFlesh_SpellID, + SearFlesh_SpellID, + SoulHammer_SpellID, + SoulSpike_SpellID, + SacrificialEdge_SpellID, + SacrificialEdges_SpellID, + BlightMana_SpellID, + EnervateBeing_SpellID, + PoisonHealth_SpellID, + FellWind_SpellID, + InfectedBlood_SpellID, + InfirmedMana_SpellID, + PortalSendingFellowshipLiazkBurun40_SpellID, + PortalSendingFellowshipLiazkBurun60_SpellID, + PortalSendingFellowshipLiazkBurun80_SpellID, + PortalSendingFellowshipLiazkBurun100_SpellID, + PortalSendingLiazkBurun40_SpellID, + PortalSendingLiazkBurun60_SpellID, + PortalSendingLiazkBurun80_SpellID, + PortalSendingLiazkBurun100_SpellID, + PortalSendingLiazkItziAntechamber_SpellID, + PortalSendingLiazkItziCrypt_SpellID, + PortalSendingLiazkJump40_SpellID, + PortalSendingLiazkJump60_SpellID, + PortalSendingLiazkJump80_SpellID, + PortalSendingLiazkJump100_SpellID, + PortalSendingLiazkSpirits40_SpellID, + PortalSendingLiazkSpirits60_SpellID, + PortalSendingLiazkSpirits80_SpellID, + PortalSendingLiazkSpirits100_SpellID, + PortalSendingLiazkTest40_SpellID, + PortalSendingLiazkTest60_SpellID, + PortalSendingLiazkTest80_SpellID, + PortalSendingLiazkTest100_SpellID, + InferiorScytheAegis_SpellID, + LesserScytheAegis_SpellID, + ScytheAegis_SpellID, + CoordinationFellowship4_SpellID, + CoordinationFellowship5_SpellID, + CoordinationFellowship6_SpellID, + CoordinationFellowship7_SpellID, + EnduranceFellowship4_SpellID, + EnduranceFellowship5_SpellID, + EnduranceFellowship6_SpellID, + EnduranceFellowship7_SpellID, + FocusFellowship4_SpellID, + FocusFellowship5_SpellID, + FocusFellowship6_SpellID, + FocusFellowship7_SpellID, + QuicknessFellowship4_SpellID, + QuicknessFellowship5_SpellID, + QuicknessFellowship6_SpellID, + QuicknessFellowship7_SpellID, + SelfFellowship4_SpellID, + SelfFellowship5_SpellID, + SelfFellowship6_SpellID, + SelfFellowship7_SpellID, + StrengthFellowship4_SpellID, + StrengthFellowship5_SpellID, + StrengthFellowship6_SpellID, + StrengthFellowship7_SpellID, + DispelAllBadOther7_SpellID, + DispelAllBadSelf7_SpellID, + DispelAllGoodOther7_SpellID, + DispelAllGoodSelf7_SpellID, + DispelAllNeutralSelf7_SpellID, + DispelCreatureBadOther7_SpellID, + DispelCreatureBadSelf7_SpellID, + DispelCreatureGoodOther7_SpellID, + DispelCreatureGoodSelf7_SpellID, + DispelCreatureNeutralOther7_SpellID, + DispelCreatureNeutralSelf7_SpellID, + DispelItemBadOther7_SpellID, + DispelItemGoodOther7_SpellID, + DispelItemNeutralOther7_SpellID, + DispelLifeBadOther7_SpellID, + DispelLifeBadSelf7_SpellID, + DispelLifeGoodOther7_SpellID, + DispelLifeGoodSelf7_SpellID, + DispelLifeNeutralOther7_SpellID, + DispelLifeNeutralSelf7_SpellID, + CantripHermeticLink1_SpellID, + CantripHermeticLink2_SpellID, + CantripHermeticLinkFeeble_SpellID, + CantripHermeticLinkModerate_SpellID, + DispelAllBadOther7NoManaCon_SpellID, + GolemHunterHealthHigh_SpellID, + GolemHunterHealthLow_SpellID, + GolemHunterManaHigh_SpellID, + GolemHunterManaLow_SpellID, + GolemHunterStaminaHigh_SpellID, + GolemHunterStaminaLow_SpellID, + Agitate_SpellID, + Annoyance_SpellID, + GuiltTrip_SpellID, + Heartache_SpellID, + Sorrow_SpellID, + Underfoot_SpellID, + PortalSendingForbiddenCatacombs_SpellID, + CascadeAtlatl_SpellID, + CascadeAtlatlGreater_SpellID, + CascadeAtlatlLesser_SpellID, + CascadeBow_SpellID, + CascadeBowGreater_SpellID, + CascadeBowLesser_SpellID, + CascadeManaC_SpellID, + CascadeManaCGreater_SpellID, + CascadeManaCLesser_SpellID, + CascadeSword_SpellID, + CascadeSwordGreater_SpellID, + CascadeSwordLesser_SpellID, + CascadeUA_SpellID, + CascadeUAGreater_SpellID, + CascadeUALesser_SpellID, + CascadeXBow_SpellID, + CascadeXBowGreater_SpellID, + CascadeXBowLesser_SpellID, + DarkPower_SpellID, + RestorativeDraught_SpellID, + Fanaticism_SpellID, + PortalSendingNannerIsland_SpellID, + InsightKhe_SpellID, + WisdomKhe_SpellID, + FlameBurst_SpellID, + ChoriziteWeave_SpellID, + Consecration_SpellID, + DevineManipulation_SpellID, + SacrosanctTouch_SpellID, + CantripRegenAdja_SpellID, + CantripRejuvAdja_SpellID, + CantripRenewAdja_SpellID, + ManaRenewalAdja_SpellID, + CantripSpiritThirst2_SpellID, + CantripSpiritThirst1_SpellID, + ModerateSpiritThirst_SpellID, + SpiritDrinker1_SpellID, + SpiritDrinker2_SpellID, + SpiritDrinker3_SpellID, + SpiritDrinker4_SpellID, + SpiritDrinker5_SpellID, + SpiritDrinker6_SpellID, + SpiritDrinker7_SpellID, + SpiritLoather1_SpellID, + SpiritLoather2_SpellID, + SpiritLoather3_SpellID, + SpiritLoather4_SpellID, + SpiritLoather5_SpellID, + SpiritLoather6_SpellID, + SpiritLoather7_SpellID, + BitBetweenTeeth_SpellID, + BitingBonds_SpellID, + UnderTheLash_SpellID, + PortalSendingHezhitFight1_SpellID, + PortalSendingHezhitFight2_SpellID, + PortalSendingHezhitFight3_SpellID, + PortalSendingHezhitPrison1_SpellID, + PortalSendingHezhitPrison2_SpellID, + PortalSendingHezhitPrison3_SpellID, + PortalSendingHezhitPrison4_SpellID, + PortalSendingHezhitPrison5_SpellID, + PortalSendingHezhitPrison6_SpellID, + PortalSendingHizkRiAntechamber_SpellID, + PortalSendingHizkRiCorridor_SpellID, + PortalSendingHizkRiGauntlet60_SpellID, + PortalSendingHizkRiGauntlet80_SpellID, + PortalSendingHizkRiGauntlet100_SpellID, + PortalSendingHizkRiHezhit_SpellID, + PortalSendingHizkRiJrvik_SpellID, + PortalSendingHizkRiWell60_SpellID, + PortalSendingHizkRiWell80_SpellID, + PortalSendingHizkRiWell100_SpellID, + PortalSendingHizkRiZixki_SpellID, + PortalSendingJrvikFight1_SpellID, + PortalSendingJrvikFight2_SpellID, + PortalSendingJrvikFight3_SpellID, + PortalSendingJrvikPrison1_SpellID, + PortalSendingJrvikPrison2_SpellID, + PortalSendingJrvikPrison3_SpellID, + PortalSendingJrvikPrison4_SpellID, + PortalSendingJrvikPrison5_SpellID, + PortalSendingJrvikPrison6_SpellID, + PortalSendingZixkFight1_SpellID, + PortalSendingZixkFight2_SpellID, + PortalSendingZixkFight3_SpellID, + PortalSendingZixkPrison1_SpellID, + PortalSendingZixkPrison2_SpellID, + PortalSendingZixkPrison3_SpellID, + PortalSendingZixkPrison4_SpellID, + PortalSendingZixkPrison5_SpellID, + PortalSendingZixkPrison6_SpellID, + FlangeAegis_SpellID, + InferiorFlangeAegis_SpellID, + InferiorLanceAegis_SpellID, + LanceAegis_SpellID, + LesserFlangeAegis_SpellID, + LesserLanceAegis_SpellID, + ChainedToTheWall_SpellID, + PortalSendingHizkRiGuruk60_SpellID, + PortalSendingHizkRiGuruk80_SpellID, + PortalSendingHizkRiGuruk100_SpellID, + PortalSendingHizkRiRewards_SpellID, + PortalSendingTempleIzjiQo_SpellID, + AcidProtectionFellowship4_SpellID, + AcidProtectionFellowship5_SpellID, + AcidProtectionFellowship6_SpellID, + AcidProtectionFellowship7_SpellID, + BladeProtectionFellowship4_SpellID, + BladeProtectionFellowship5_SpellID, + BladeProtectionFellowship6_SpellID, + BladeProtectionFellowship7_SpellID, + BludgeonProtectionFellowship4_SpellID, + BludgeonProtectionFellowship5_SpellID, + BludgeonProtectionFellowship6_SpellID, + BludgeonProtectionFellowship7_SpellID, + ColdProtectionFellowship4_SpellID, + ColdProtectionFellowship5_SpellID, + ColdProtectionFellowship6_SpellID, + ColdProtectionFellowship7_SpellID, + FireProtectionFellowship4_SpellID, + FireProtectionFellowship5_SpellID, + FireProtectionFellowship6_SpellID, + FireProtectionFellowship7_SpellID, + LightningProtectionFellowship4_SpellID, + LightningProtectionFellowship5_SpellID, + LightningProtectionFellowship6_SpellID, + LightningProtectionFellowship7_SpellID, + PierceProtectionFellowship4_SpellID, + PierceProtectionFellowship5_SpellID, + PierceProtectionFellowship6_SpellID, + PierceProtectionFellowship7_SpellID, + ImpregnabilityFellowship4_SpellID, + ImpregnabilityFellowship5_SpellID, + ImpregnabilityFellowship6_SpellID, + ImpregnabilityFellowship7_SpellID, + InvulnerabilityFellowship4_SpellID, + InvulnerabilityFellowship5_SpellID, + InvulnerabilityFellowship6_SpellID, + InvulnerabilityFellowship7_SpellID, + MagicResistanceFellowship4_SpellID, + MagicResistanceFellowship5_SpellID, + MagicResistanceFellowship6_SpellID, + MagicResistanceFellowship7_SpellID, + PortalSendingBurunShrine_SpellID, + ArtDestruction_SpellID, + BlessingHorn_SpellID, + BlessingScale_SpellID, + BlessingWing_SpellID, + GiftEnhancement_SpellID, + HeartsTouch_SpellID, + LeapingLegs_SpellID, + MagesUnderstanding_SpellID, + OntheRun_SpellID, + PowerEnchantment_SpellID, + lifegivergreater_SpellID, + DebilitatingSpore_SpellID, + DiseasedAir_SpellID, + DrainHealthKivikLir_SpellID, + FungalBloom_SpellID, + LesserVisionBeyondTheGrave_SpellID, + MinorVisionBeyondTheGrave_SpellID, + VisionBeyondTheGrave_SpellID, + VitaeGreaterKivikLir_SpellID, + VitaeKivikLir_SpellID, + DebilitatingSporeFellowship_SpellID, + DiseasedAirFellowship_SpellID, + FungalBloomFellowship_SpellID, + CreatureEnchantmentMasteryFellow4_SpellID, + CreatureEnchantmentMasteryFellow5_SpellID, + CreatureEnchantmentMasteryFellow6_SpellID, + CreatureEnchantmentMasteryFellow7_SpellID, + ItemEnchantmentMasteryFellow4_SpellID, + ItemEnchantmentMasteryFellow5_SpellID, + ItemEnchantmentMasteryFellow6_SpellID, + ItemEnchantmentMasteryFellow7_SpellID, + LifeMagicMasteryFellow4_SpellID, + LifeMagicMasteryFellow5_SpellID, + LifeMagicMasteryFellow6_SpellID, + LifeMagicMasteryFellow7_SpellID, + ManaConversionMasteryFellow4_SpellID, + ManaConversionMasteryFellow5_SpellID, + ManaConversionMasteryFellow6_SpellID, + ManaConversionMasteryFellow7_SpellID, + WarMagicMasteryFellow4_SpellID, + WarMagicMasteryFellow5_SpellID, + WarMagicMasteryFellow6_SpellID, + WarMagicMasteryFellow7_SpellID, + EvilThirst_SpellID, + GiftoftheFiazhat_SpellID, + KivikLirTimerSpell_SpellID, + LesserEvilThirst_SpellID, + LesserGiftoftheFiazhat_SpellID, + MinorEvilThirst_SpellID, + MinorGiftoftheFiazhat_SpellID, + PortalSendingMorgluukReward_SpellID, + PortalSendingKivikLirAntechamber_SpellID, + PortalSendingKivikLirArena60_SpellID, + PortalSendingKivikLirArena80_SpellID, + PortalSendingKivikLirArena100_SpellID, + PortalSendingKivikLirBoss60_SpellID, + PortalSendingKivikLirBoss80_SpellID, + PortalSendingKivikLirBoss100_SpellID, + PortalSendingKivikLirExit_SpellID, + PortalSendingKivikLirHaven60_SpellID, + PortalSendingKivikLirHaven80_SpellID, + PortalSendingKivikLirHaven100_SpellID, + PortalSendingKivikLirSplittingHalls_SpellID, + PortalSendingKivikLirSplittingHallsUpper_SpellID, + PortalSendingKivikLirStagingArea_SpellID, + GreaterWhithering_SpellID, + LesserWhithering_SpellID, + Whithering_SpellID, + ImperilKivikLir_SpellID, + InferiorScourgeAegis_SpellID, + LesserScourgeAegis_SpellID, + ScourgeAegis_SpellID, + Decay_SpellID, + EyesBeyondtheMist_SpellID, + GreaterMucorBlight_SpellID, + LesserEyesBeyondtheMist_SpellID, + LesserMucorBlight_SpellID, + MinorEyesBeyondtheMist_SpellID, + MucorBlight_SpellID, + LugianHealth_SpellID, + LugianInsight_SpellID, + LugianStamina_SpellID, + SwampBlight_SpellID, + JusticeSleepingOne_SpellID, + PurgeSleepingOne_SpellID, + SwampWrath_SpellID, + ChokingSporeCloud_SpellID, + MassBloodAffliction_SpellID, + MassBloodDisease_SpellID, + MoldSporeCloud_SpellID, + ConcussiveBelch_SpellID, + ConcussiveWail_SpellID, + FeelunBlight_SpellID, + FeelunWrath_SpellID, + KoruuCloud_SpellID, + KoruuWrath_SpellID, + ManaBolt_SpellID, + ManaPurge_SpellID, + MucorCloud_SpellID, + MucorWrath_SpellID, + BatterFlesh_SpellID, + CankerFlesh_SpellID, + CharFlesh_SpellID, + NumbFlesh_SpellID, + BloodAffliction_SpellID, + BloodDisease_SpellID, + ChokingSpores_SpellID, + MoldSpores_SpellID, + ParasiticAffliction_SpellID, + ManaRenewalFellowship4_SpellID, + ManaRenewalFellowship5_SpellID, + ManaRenewalFellowship6_SpellID, + ManaRenewalFellowship7_SpellID, + RegenerationFellowship4_SpellID, + RegenerationFellowship5_SpellID, + RegenerationFellowship6_SpellID, + RegenerationFellowship7_SpellID, + RejuvenationFellowship4_SpellID, + RejuvenationFellowship5_SpellID, + RejuvenationFellowship6_SpellID, + RejuvenationFellowship7_SpellID, + PortalSendingIzjiQoAntechamber_SpellID, + PortalSendingIzjiQoGauntlet60_SpellID, + PortalSendingIzjiQoGauntlet80_SpellID, + PortalSendingIzjiQoGauntlet100_SpellID, + PortalSendingIzjiQoReceivingChamber_SpellID, + PortalSendingIzjiQoReceivingChamber1_SpellID, + PortalSendingIzjiQoReceivingChamber2_SpellID, + PortalSendingIzjiQoReceivingChamber3_SpellID, + PortalSendingIzjiQoReceivingChamber4_SpellID, + PortalSendingIzjiQoReceivingChamber5_SpellID, + PortalSendingIzjiQoReceivingChamber6_SpellID, + PortalSendingIzjiQoReceivingChamber7_SpellID, + PortalSendingIzjiQoRewards_SpellID, + PortalSendingIzjiQoTest60_SpellID, + PortalSendingIzjiQoTest80_SpellID, + PortalSendingIzjiQoTest100_SpellID, + PortalSendingLifestoneOther_SpellID, + ArcanumSalvaging1_SpellID, + ArcanumSalvaging2_SpellID, + ArcanumSalvaging3_SpellID, + ArcanumSalvaging4_SpellID, + ArcanumSalvaging5_SpellID, + ArcanumSalvaging6_SpellID, + ArcanumSalvaging7_SpellID, + ArcanumSalvagingOther1_SpellID, + ArcanumSalvagingOther2_SpellID, + ArcanumSalvagingOther3_SpellID, + ArcanumSalvagingOther4_SpellID, + ArcanumSalvagingOther5_SpellID, + ArcanumSalvagingOther6_SpellID, + ArcanumSalvagingOther7_SpellID, + NuhmudirasWisdom1_SpellID, + NuhmudirasWisdom2_SpellID, + NuhmudirasWisdom3_SpellID, + NuhmudirasWisdom4_SpellID, + NuhmudirasWisdom5_SpellID, + NuhmudirasWisdom6_SpellID, + NuhmudirasWisdom7_SpellID, + NuhmudirasWisdomOther1_SpellID, + NuhmudirasWisdomOther2_SpellID, + NuhmudirasWisdomOther3_SpellID, + NuhmudirasWisdomOther4_SpellID, + NuhmudirasWisdomOther5_SpellID, + NuhmudirasWisdomOther6_SpellID, + NuhmudirasWisdomOther7_SpellID, + Intoxication1_SpellID, + Intoxication2_SpellID, + Intoxication3_SpellID, + KetnansBoon_SpellID, + BobosBlessingCoord_SpellID, + BobosBlessingFocus_SpellID, + BrighteyesFavor_SpellID, + PortalSendingKnathLair_SpellID, + PortalSendSanamar_SpellID, + PortalSendingNumberPuzzleENTER_SpellID, + PortalSendingNumberPuzzleEXIT_SpellID, + PortalSendingRainbowPuzzleENTER_SpellID, + PortalSendingRainbowPuzzleEXIT_SpellID, + PortalSendingShellGameENTER_SpellID, + PortalSendingShellGameEXIT_SpellID, + PortalSendingThreeBagsPuzzleENTER_SpellID, + PortalSendingThreeBagsPuzzleEXIT_SpellID, + PortalSendingBloodPuzzleENTER_SpellID, + PortalSendingBloodPuzzleEXIT_SpellID, + PortalSendingMemoryGameENTER_SpellID, + PortalSendingMemoryGameEXIT_SpellID, + PortalSendingMemRoomA_SpellID, + PortalSendingMemRoomB_SpellID, + PortalSendingMemRoomC_SpellID, + PortalSendingMemRoomD_SpellID, + PortalSendingMemRoomE_SpellID, + PortalSendingMemRoomF_SpellID, + PortalSendingMemRoomG_SpellID, + PortalSendingMemRoomH_SpellID, + PortalSendingNumRoomA_SpellID, + PortalSendingNumRoomB_SpellID, + PortalSendingNumRoomC_SpellID, + PortalSendingNumRoomD_SpellID, + PortalSendingNumRoomE_SpellID, + PortalSendingNumRoomF_SpellID, + PortalSendingNumRoomG_SpellID, + PortalSendingNumRoomH_SpellID, + PortalSendingNumRoomI_SpellID, + PortalSendingNumRoomJ_SpellID, + PortalSendingMemoryGameFinish_SpellID, + CantripFiunFlee_SpellID, + CantripFiunEfficiency_SpellID, + ManaUp10Percent_SpellID, + StaminaUp10Percent_SpellID, + HealthUp10Percent_SpellID, + InnerBrilliance_SpellID, + InnerMight_SpellID, + InnerWill_SpellID, + PerfectBalance_SpellID, + PerfectHealth_SpellID, + PerfectSpeed_SpellID, + PortalSendingBrooduAntechamber_SpellID, + PortalSendingBrooduGauntlet_SpellID, + PortalSendingBrooduLair_SpellID, + PortalSendingBrooduPuzzle_SpellID, + PortalSendingEatenBroodu_SpellID, + PortalSendingRegurgitatedBroodu_SpellID, + PortalSendingBrowerkLair_SpellID, + PortalSendingEatenBrowerk_SpellID, + PortalSendingQinXikitAntechamber_SpellID, + PortalSendingQinXikitGauntlet_SpellID, + PortalSendingQinXikitPuzzle_SpellID, + PortalSendingQinXikitReward_SpellID, + PortalSendingRegurgitatedBrowerk_SpellID, + PortalSendingXiRuFont_SpellID, + SummonPortalQinXikitIsland_SpellID, + PortalSendingEatenKeerik_SpellID, + PortalSendingKeerikAntechamber_SpellID, + PortalSendingKeerikGauntlet_SpellID, + PortalSendingKeerikLair_SpellID, + PortalSendingKeerikPuzzle_SpellID, + PortalSendingRegurgitatedKeerik_SpellID, + PortalSendingEatenKiree_SpellID, + PortalSendingKireeAntechamber_SpellID, + PortalSendingKireeGauntlet_SpellID, + PortalSendingKireeLair_SpellID, + PortalSendingKireePuzzle_SpellID, + PortalSendingRegurgitatedKiree_SpellID, + PortalSendingCragstone_SpellID, + PortalSendingEatenReeshan_SpellID, + PortalSendingReeshanAntechamber_SpellID, + PortalSendingReeshanGauntlet_SpellID, + PortalSendingReeshanLair_SpellID, + PortalSendingReeshanPuzzle_SpellID, + PortalSendingRegurgitatedReeshan_SpellID, + PortalSendingEatenRehir_SpellID, + PortalSendingRegurgitatedRehir_SpellID, + PortalSendingRehirGauntlet_SpellID, + PortalSendingRehirLair_SpellID, + PortalSendingRehirPuzzle_SpellID, + PortalSendingRehirAntechamber_SpellID, + PortalSendingAphusLasselWest_SpellID, + PortalSendingBlackDeath_SpellID, + PortalSendingBSDAlu_SpellID, + PortalSendingBSDGha_SpellID, + PortalSendingBSDSho_SpellID, + PortalSendingCenterObsidianPlains_SpellID, + PortalSendingHillsCitadel_SpellID, + PortalSendingKaraWetlands_SpellID, + PortalSendingMarescentBase_SpellID, + PortalSendingNeydisa_SpellID, + PortalSendingNorthernLandbridge_SpellID, + PortalSendingOlthoiHordeNest_SpellID, + PortalSendingOlthoiNorth_SpellID, + PortalSendingRenegadeFortress_SpellID, + PortalSendingRidgeCitadel_SpellID, + PortalSendingSouthernLandbridge_SpellID, + PortalSendingValleyofDeath_SpellID, + PortalSendingWildernessCitadel_SpellID, + AxemansBoon_SpellID, + BowmansBoon_SpellID, + ChuckersBoon_SpellID, + CrossbowmansBoon_SpellID, + EnchantersBoon_SpellID, + HieromancersBoon_SpellID, + KnifersBoon_SpellID, + LifeGiversBoon_SpellID, + MacersBoon_SpellID, + PugilistsBoon_SpellID, + SpearmansBoon_SpellID, + StafferBoon_SpellID, + SwordsmansBoon_SpellID, + AerfallesEmbrace_SpellID, + AerfallesEnforcement_SpellID, + AerfallesGaze_SpellID, + AerfallesTouch_SpellID, + acidblast2_SpellID, + acidvolley1_SpellID, + acidvolley2_SpellID, + bladeblast1_SpellID, + bladeblast2_SpellID, + bladevolley1_SpellID, + bladevolley2_SpellID, + bludgeoningvolley1_SpellID, + bludgeoningvolley2_SpellID, + flameblast2_SpellID, + flamevolley1_SpellID, + flamevolley2_SpellID, + forceblast1_SpellID, + forceblast2_SpellID, + forcevolley1_SpellID, + forcevolley2_SpellID, + frostblast1_SpellID, + frostblast2_SpellID, + frostvolley1_SpellID, + frostvolley2_SpellID, + lightningblast1_SpellID, + lightningblast2_SpellID, + lightningvolley1_SpellID, + lightningvolley2_SpellID, + shockblast1_SpellID, + shockblast2_SpellID, + AcidBaneRare_SpellID, + AcidProtectionRare_SpellID, + AlchemyMasteryRare_SpellID, + ArcaneEnlightenmentRare_SpellID, + ArmorExpertiseRare_SpellID, + ArmorRare_SpellID, + AxeMasteryRare_SpellID, + BladeBaneRare_SpellID, + BladeProtectionRare_SpellID, + BloodDrinkerRare_SpellID, + BludgeonBaneRare_SpellID, + BludgeonProtectionRare_SpellID, + BowMasteryRare_SpellID, + ColdProtectionRare_SpellID, + CookingMasteryRare_SpellID, + CoordinationRare_SpellID, + CreatureEnchantmentMasteryRare_SpellID, + CrossbowMasteryRare_SpellID, + DaggerMasteryRare_SpellID, + DeceptionMasteryRare_SpellID, + DefenderRare_SpellID, + EnduranceRare_SpellID, + FealtyRare_SpellID, + FireProtectionRare_SpellID, + FlameBaneRare_SpellID, + FletchingMasteryRare_SpellID, + FocusRare_SpellID, + FrostBaneRare_SpellID, + HealingMasteryRare_SpellID, + HeartSeekerRare_SpellID, + HermeticLinkRare_SpellID, + ImpenetrabilityRare_SpellID, + ImpregnabilityRare_SpellID, + InvulnerabilityRare_SpellID, + ItemEnchantmentMasteryRare_SpellID, + ItemExpertiseRare_SpellID, + JumpMasteryRare_SpellID, + LeadershipMasteryRare_SpellID, + LifeMagicMasteryRare_SpellID, + LightningBaneRare_SpellID, + LightningProtectionRare_SpellID, + LockpickMasteryRare_SpellID, + MaceMasteryRare_SpellID, + MagicItemExpertiseRare_SpellID, + MagicResistanceRare_SpellID, + ManaConvertMasteryRare_SpellID, + ManaRenewalRare_SpellID, + MonsterAttunementRare_SpellID, + PersonAttunementRare_SpellID, + PiercingBaneRare_SpellID, + PiercingProtectionRare_SpellID, + QuicknessRare_SpellID, + RegenerationRare_SpellID, + RejuvenationRare_SpellID, + SelfRare_SpellID, + SpearMasteryRare_SpellID, + SpiritDrinkerRare_SpellID, + SprintRare_SpellID, + StaffMasteryRare_SpellID, + StrengthRare_SpellID, + SwiftKillerRare_SpellID, + SwordMasteryRare_SpellID, + ThrownWeaponMasteryRare_SpellID, + UnarmedCombatMasteryRare_SpellID, + WarMagicMasteryRare_SpellID, + WeaponExpertiseRare_SpellID, + InferiorInfernoAegis_SpellID, + InfernoAegis_SpellID, + LesserInfernoAegis_SpellID, + SalvagingMasteryForge2_SpellID, + AlchemyMasteryForge1_SpellID, + AlchemyMasteryForge2_SpellID, + CookingMasteryForge1_SpellID, + CookingMasteryForge2_SpellID, + FletchingMasteryForge1_SpellID, + FletchingMasteryForge2_SpellID, + LockpickMasteryForge1_SpellID, + LockpickMasteryForge2_SpellID, + SalvagingMasteryForge1_SpellID, + CantripInkyArmor1_SpellID, + MinorManaGiver_SpellID, + SecondaryAttribsUp10Percent_SpellID, + CantripFiunResistance_SpellID, + PortalSendingDefiledTemple_SpellID, + PortalSendingAludi_SpellID, + SummonPortalBanderlingShrine_SpellID, + PortalSendingPvPHate20Entry4_SpellID, + PortalSendingPvPHate20Entry5_SpellID, + PortalSendingPvPHate20Entry6_SpellID, + PortalSendingPvPHate20Punishment_SpellID, + PortalSendingPvPHate40Entry1_SpellID, + PortalSendingPvPHate40Entry2_SpellID, + PortalSendingPvPHate40Entry3_SpellID, + PortalSendingPvPHate40Entry4_SpellID, + PortalSendingPvPHate40Entry5_SpellID, + PortalSendingPvPHate40Entry6_SpellID, + PortalSendingPvPHate40Punishment_SpellID, + PortalSendingPvPHate60Entry1_SpellID, + PortalSendingPvPHate60Entry2_SpellID, + PortalSendingPvPHate60Entry3_SpellID, + PortalSendingPvPHate60Entry4_SpellID, + PortalSendingPvPHate60Entry5_SpellID, + PortalSendingPvPHate60Entry6_SpellID, + PortalSendingPvPHate60Punishment_SpellID, + PortalSendingPvPHate80AccursedEntry1_SpellID, + PortalSendingPvPHate80AccursedEntry2_SpellID, + PortalSendingPvPHate80AccursedEntry3_SpellID, + PortalSendingPvPHate80AccursedEntry4_SpellID, + PortalSendingPvPHate80AccursedEntry5_SpellID, + PortalSendingPvPHate80AccursedEntry6_SpellID, + PortalSendingPvPHate80Punishment_SpellID, + PortalSendingPvPHate80UnholyEntry1_SpellID, + PortalSendingPvPHate80UnholyEntry2_SpellID, + PortalSendingPvPHate80UnholyEntry3_SpellID, + PortalSendingPvPHate80UnholyEntry4_SpellID, + PortalSendingPvPHate80UnholyEntry5_SpellID, + PortalSendingPvPHate80UnholyEntry6_SpellID, + PortalSendingPvPHate20Entry1_SpellID, + PortalSendingPvPHate20Entry2_SpellID, + PortalSendingPvPHate20Entry3_SpellID, + BlackMarrowBliss_SpellID, + BurningSpiritReliquary_SpellID, + CantripShadowTouch_SpellID, + CantripShadowReek_SpellID, + CantripShadowShot_SpellID, + CantripShadowCross_SpellID, + AcidRingInfiltration_SpellID, + FlameRingInfiltration_SpellID, + ForceRingInfiltration_SpellID, + LightningRingInfiltration_SpellID, + CantripSalvagingMinor_SpellID, + AsheronsBenediction_SpellID, + BlackmoorsFavor_SpellID, + PortalSendingRuschkTrials_SpellID, + PortalSendShoushi_SpellID, + PortalSendYaraq_SpellID, + PortalSendHoltburg_SpellID, + EyeShot_SpellID, + HuntersWard_SpellID, + CurseRavenFury_SpellID, + ConscriptsMight_SpellID, + ConscriptsWard_SpellID, + AugursWill_SpellID, + AugursGlare_SpellID, + AugursWard_SpellID, + MarksmansKen_SpellID, + ArbalestersIntuition_SpellID, + PortalSendingNightmareSepulcher_SpellID, + ImpenetrabilityLunnumsPyre_SpellID, + CantripRageofGrael_SpellID, + MonsterPlantSundew_SpellID, + MonsterPlantFlyTrap_SpellID, + MonsterPlantPitcherPlant_SpellID, + CantripMastersVoice_SpellID, + CantripSalvaging1_SpellID, + CantripSalvaging2_SpellID, + HarmOtherLeviathan_SpellID, + FrostBoltLeviathan_SpellID, + PortalSendDeepWater_SpellID, + PortalSendDeepAbandoned_SpellID, + PortalSendDeepBrilliant_SpellID, + PortalSendDeepDazzling_SpellID, + PortalSendDeepDevastated_SpellID, + PortalSendDeepEndGame_SpellID, + PortalSendDeepFire_SpellID, + PortalSendDeepGatekeeper_SpellID, + PortalSendDeepRadiant_SpellID, + PortalSendDeepRuined_SpellID, + PortalSendXikMinruCataracts_SpellID, + CombatMedication_SpellID, + NightRunner_SpellID, + Selflessness_SpellID, + CorruptedEssence_SpellID, + RavenousArmor_SpellID, + ArdentDefense_SpellID, + TrueLoyalty_SpellID, + FlightofBats_SpellID, + UlgrimsSending_SpellID, + PumpkinRain_SpellID, + PumpkinRing_SpellID, + PumpkinWall_SpellID, + SweetSpeed_SpellID, + CantripTasteForBlood_SpellID, + DukeRaoulPride_SpellID, + HunterHardiness_SpellID, + ZongoFist_SpellID, + GlendenWoodRecall_SpellID, + GlacialSpeed_SpellID, + CantripFrostWardShadowsEmbrace_SpellID, + PortalSendingDardanteKeep_SpellID, + CantripSaltAshAttackMod_SpellID, + DispelCreatureAll_SpellID, + DispelItemAll_SpellID, + DispelLifeAll_SpellID, + DispelLifeGoodFellow_SpellID, + HarmFellowEssence_SpellID, + AcidVulnerabilityFellowEssence_SpellID, + BladeVulnerabilityFellowEssence_SpellID, + AcidBoltEssence_SpellID, + FlameBoltEssence_SpellID, + FrostBoltEssence_SpellID, + LightningBoltEssence_SpellID, + AcidRingEssence_SpellID, + FlameRingEssence_SpellID, + FlameRingWallEssence_SpellID, + FrostRingEssence_SpellID, + LightningRingEssence_SpellID, + MagicYieldEssence_SpellID, + PortalSendHatchHideout_SpellID, + PortalSendRareChambers_SpellID, + PortalSendingRuschkBurialMound_SpellID, + WillPeople_SpellID, + HonorBull_SpellID, + SummonFlameSeekers_SpellID, + SummonHotspot_SpellID, + DarkPersistance_SpellID, + DarkReflexes_SpellID, + DarkEquilibrium_SpellID, + DarkPurpose_SpellID, + RecallSonPooky1_SpellID, + RecallSonPooky2_SpellID, + RecallSonPooky3_SpellID, + EggBomb_SpellID, + RabbitRing_SpellID, + WhirlwindRing_SpellID, + ElementalFuryEssenceAcid_SpellID, + ElementalFuryEssenceFlame_SpellID, + ElementalFuryEssenceFrost_SpellID, + ElementalFuryEssenceLightning_SpellID, + ManaBoltEssence_SpellID, + ManaDepletionEssence_SpellID, + BrainFreeze_SpellID, + RingHarmOther_SpellID, + PortalSendingBlackSpearTempleLower_SpellID, + ArmorSelfAegisGoldenFlame_SpellID, + DarkVortex_SpellID, + BlackMadness_SpellID, + ImperilEssence_SpellID, + ColdVulnerabilityFellowEssence_SpellID, + FireVulnerabilityFellowEssence_SpellID, + LightningVulnerabilityFellowEssence_SpellID, + PortalSendHarbingerAerbax_SpellID, + PortalSendHarbingerExtreme_SpellID, + PortalSendHarbingerNuhmudira_SpellID, + PortalSendHarbingerTunnelsAerbax_SpellID, + PortalSendHarbingerTunnelsNuhmudira_SpellID, + PortalSendHarbingerUber_SpellID, + HarbingersFieryTouch_SpellID, + ChargeFlesh_SpellID, + MeleeYieldEssence_SpellID, + RecallRossuMorta_SpellID, + RecallWhisperingBlade_SpellID, + GraelRing_SpellID, + GraelSmite_SpellID, + GraelBlackSpearBolt_SpellID, + AcidRingWall_SpellID, + BladeRingWall_SpellID, + FlameRingWall_SpellID, + ForceRingWall_SpellID, + FrostRingWall_SpellID, + GraelLightningRing_SpellID, + GraelRingHarm_SpellID, + LightningRingWall_SpellID, + ShockwaveRingWall_SpellID, + BurningEarth_SpellID, + GraelBlackSpearRain_SpellID, + GraelLightningRain_SpellID, + AcidWave_SpellID, + BladeWave_SpellID, + FlameWave_SpellID, + ForceWave_SpellID, + FrostWave_SpellID, + LightningWave_SpellID, + ShockwaveWave_SpellID, + CarraidasBenediction_SpellID, + PortalSendingAsheronTower_SpellID, + BludgeonWard_SpellID, + PiercingWard_SpellID, + SlashingWard_SpellID, + PortalSendingAsheronTowerExit_SpellID, + RedirectMotives_SpellID, + Authority_SpellID, + DefenseJust_SpellID, + BoundToLaw_SpellID, + CANTRIPCOORDINATION3_SpellID, + CANTRIPFOCUS3_SpellID, + CANTRIPSTRENGTH3_SpellID, + PortalSendingBanditRingleader_SpellID, + PortalSendingBanditTrap_SpellID, + PortalSendingSawatoExtortion_SpellID, + AcidBomb_SpellID, + BladeBomb_SpellID, + FlameBomb_SpellID, + ForceBomb_SpellID, + FrostBomb_SpellID, + LightningBomb_SpellID, + ShockwaveBomb_SpellID, + ArmorOtherIncantation_SpellID, + CoordinationOtherIncantation_SpellID, + FocusOtherIncantation_SpellID, + StrengthOtherIncantation_SpellID, + ImpenetrabilityIncantation_SpellID, + ManarenewalOtherIncantation_SpellID, + RegenerationOtherIncantation_SpellID, + RejuvenationOtherIncantation_SpellID, + MukkirFerocity_SpellID, + MukkirSense_SpellID, + GraelRockFall_SpellID, + GraelRuschkBlackSpearBolt_SpellID, + GraelShadowBlackSpearBolt_SpellID, + LightningBoltRed_SpellID, + GraelRuschkFrostRing_SpellID, + DardanteLightningRingGravity_SpellID, + GraelShadowAcidRing_SpellID, + GraelShadowBladeRing_SpellID, + GraelShadowFlameRing_SpellID, + GraelShadowForceRing_SpellID, + GraelShadowFrostRing_SpellID, + GraelShadowLightningRing_SpellID, + GraelShadowRing_SpellID, + GraelShadowRingHarm_SpellID, + GraelShadowShockwaveRing_SpellID, + BurningEarthGreater_SpellID, + BurningEarthLesser_SpellID, + GraelMukkirBlackSpearWall_SpellID, + GraelRuschkBlackSpearWall_SpellID, + GraelShadowacidwave_SpellID, + GraelShadowbladewave_SpellID, + GraelShadowflamewave_SpellID, + GraelShadowforcewave_SpellID, + GraelShadowfrostwave_SpellID, + GraelShadowlightningwave_SpellID, + GraelShadowshockwavewave_SpellID, + PortalSendingWhiteTotemTemple_SpellID, + PortalSendingBlackTotemTemple_SpellID, + PortalSendingAbyssalTotemTemple_SpellID, + RuschkSkin_SpellID, + ShadowsHeart_SpellID, + SkillThrownWeaponPhialsAccuracy_SpellID, + Permafrost_SpellID, + CANTRIPQUICKNESS3_SpellID, + CANTRIPDECEPTIONPROWESS3_SpellID, + FlurryOfStars_SpellID, + ZombiesPersistence_SpellID, + PortalSendingDiscoInferno_SpellID, + AsheronsLesserBenediction_SpellID, + CastIronStomach_SpellID, + HematicVerdure_SpellID, + MessengersStride_SpellID, + Snowball_SpellID, + PortalSendingColosseum_SpellID, + PortalSendingColosseumA1_SpellID, + PortalSendingColosseumA6_SpellID, + PortalSendingColosseumB1_SpellID, + PortalSendingColosseumB6_SpellID, + PortalSendingColosseumC1_SpellID, + PortalSendingColosseumC6_SpellID, + PortalSendingColosseumD1_SpellID, + PortalSendingColosseumD6_SpellID, + PortalSendingColosseumE1_SpellID, + PortalSendingColosseumE6_SpellID, + HealMaster_SpellID, + PortalSendingBurLowLevel_SpellID, + PortalSendingBurHighLevel_SpellID, + KukuurHide_SpellID, + AcidBall_SpellID, + FlameBall_SpellID, + LightningBall_SpellID, + EpicAlchemyPetBuff_SpellID, + EpicCookingPetBuff_SpellID, + EpicFletchingPetBuff_SpellID, + EpicLockpickPetBuff_SpellID, + MajorAlchemyPetBuff_SpellID, + MajorCookingPetBuff_SpellID, + MajorFletchingPetBuff_SpellID, + MajorLockpickPetBuff_SpellID, + ModerateAlchemyPetBuff_SpellID, + ModerateCookingPetBuff_SpellID, + ModerateFletchingPetBuff_SpellID, + ModerateLockpickPetBuff_SpellID, + EnduranceOtherIncantation_SpellID, + QuicknessOtherIncantation_SpellID, + WillpowerOtherIncantation_SpellID, + ImpenetrabilityEmpyreanAegis_SpellID, + BurUpperCatacombExitPortalSending_SpellID, + BurUpperCatacombPortalSending_SpellID, + BurunLiberationPortalSending_SpellID, + InstabilityBurPortalSending_SpellID, + MucorBolt_SpellID, + MucorManaWell_SpellID, + MucorJolt_SpellID, + EmpyreanManaAbsorbtion_SpellID, + EmpyreanStaminaAbsorbtion_SpellID, + AurlanaasResolve_SpellID, + CantripRegenEmpyrean_SpellID, + CantripRejuvEmpyrean_SpellID, + CantripRenewEmpyrean_SpellID, + EmpyreanEnlightenment_SpellID, + ManaConvertMasteryIncantation_SpellID, + EggBolt_SpellID, + THOPPortalSendingDishwashing_SpellID, + THOPPortalSendingKitchen_SpellID, + LightningRingLarge_SpellID, + BigFire_SpellID, + PortalSendingKresovusWarren_SpellID, + RecallBur_SpellID, + PortalSendingProdigalBanderling_SpellID, + CantripArmorIceShield_SpellID, + ImperilOther7Proc_SpellID, + FesterOtherAssassin_SpellID, + DeceptionAssassinsGift_SpellID, + DrudgeArmor_SpellID, + DrudgeSpearBolt_SpellID, + FlameGrenade_SpellID, + DontBiteMe_SpellID, + DontBurnMe_SpellID, + DontStabMe_SpellID, + FlameChain_SpellID, + VirindiLightningRain_SpellID, + PortalSendingProdigalDrudgeTreasureRoom_SpellID, + StrengthDiemos_SpellID, + ChampionHealMaster_SpellID, + ChampionSkullduggery_SpellID, + ChampionCleverRuse_SpellID, + PortalSendingTanadaBlackWater_SpellID, + PortalSendingColosseumBoss10x_SpellID, + PortalSendingColosseumBoss200_SpellID, + PortalSendingProdigalOlthoiLowerDungeon_SpellID, + MarrowBlight_SpellID, + Apathy_SpellID, + MarrowBlightGreater_SpellID, + PoisonedBarb_SpellID, + TuskerHideLesser_SpellID, + SpiritNullification_SpellID, + FoulRing_SpellID, + HypnoticSuggestion_SpellID, + MesmerizingGaze_SpellID, + Trance_SpellID, + DarkShieldAcid_SpellID, + DarkShieldElectric_SpellID, + DarkShieldFlame_SpellID, + DarkShieldIce_SpellID, + DarkShieldBludgeon_SpellID, + DarkShieldPierce_SpellID, + DarkShieldSlash_SpellID, + WallDarkNanners_SpellID, + WallArcDarkNanners_SpellID, + RainDarkNanners_SpellID, + OolutangaPortalExile_SpellID, + GraveyardRecall_SpellID, + PortalSendingProdigalShadowLair_SpellID, + PortalSendingProdigalShadowSanctum_SpellID, + AxeMasterySpectral_SpellID, + BloodDrinkerSpectral_SpellID, + BowMasterySpectral_SpellID, + CrossbowMasterySpectral_SpellID, + DaggerMasterySpectral_SpellID, + MaceMasterySpectral_SpellID, + SpearMasterySpectral_SpellID, + StaffMasterySpectral_SpellID, + SwordMasterySpectral_SpellID, + ThrownWeaponMasterySpectral_SpellID, + UnarmedCombatMasterySpectral_SpellID, + WarMagicMasterySpectral_SpellID, + PortalSendingVisionQuestBranch4Stage4_SpellID, + PortalSendingVisionQuestBranch5Stage4_SpellID, + PortalSendingVisionQuestBranch1Stage6_SpellID, + PortalSendingVisionQuestBranch2Stage6_SpellID, + PortalSendingVisionQuestBranch3Stage6_SpellID, + PortalSendingVisionQuestBranch4Stage6_SpellID, + PortalSendingVisionQuestBranch5Stage6_SpellID, + PortalSendingVisionQuestTent_SpellID, + PortalSendingVisionQuestBranch1Stage1_SpellID, + PortalSendingVisionQuestBranch2Stage1_SpellID, + PortalSendingVisionQuestBranch3Stage1_SpellID, + PortalSendingVisionQuestBranch4Stage1_SpellID, + PortalSendingVisionQuestBranch5Stage1_SpellID, + PortalSendingVisionQuestBranch1Stage2_SpellID, + PortalSendingVisionQuestBranch2Stage2_SpellID, + PortalSendingVisionQuestBranch3Stage2_SpellID, + PortalSendingVisionQuestBranch4Stage2_SpellID, + PortalSendingVisionQuestBranch5Stage2_SpellID, + PortalSendingVisionQuestBranch1Stage3_SpellID, + PortalSendingVisionQuestBranch2Stage3_SpellID, + PortalSendingVisionQuestBranch3Stage3_SpellID, + PortalSendingVisionQuestBranch4Stage3_SpellID, + PortalSendingVisionQuestBranch5Stage3_SpellID, + PortalSendingVisionQuestBranch1Stage4_SpellID, + PortalSendingVisionQuestBranch2Stage4_SpellID, + PortalSendingVisionQuestBranch3Stage4_SpellID, + ArmorProdigalHarbinger_SpellID, + HarbingerCantripCoordination3_SpellID, + HarbingerCantripEndurance3_SpellID, + HarbingerCantripFocus3_SpellID, + HarbingerCantripQuickness3_SpellID, + HarbingerCantripStrength3_SpellID, + HarbingerCantripWillpower3_SpellID, + PortalSendProdigalHarbinger_SpellID, + PortalSendProdigalHarbingerPrepAcid_SpellID, + PortalSendProdigalHarbingerPrepCold_SpellID, + PortalSendProdigalHarbingerPrepFire_SpellID, + PortalSendProdigalHarbingerPrepLightning_SpellID, + AcidBoltEssenceDeath_SpellID, + BallLightning_SpellID, + CorrosiveVeil_SpellID, + FlameBoltEssenceDeath_SpellID, + FrostBoltEssenceDeath_SpellID, + HoarFrost_SpellID, + LightningBoltEssenceDeath_SpellID, + ShadowedFlame_SpellID, + HarbingerProtectionAcid_SpellID, + HarbingerProtectionCold_SpellID, + HarbingerProtectionFire_SpellID, + HarbingerProtectionLightning_SpellID, + HarbingerMagicDefense_SpellID, + HarbingerMagicYield_SpellID, + HarbingerMeleeDefense_SpellID, + HarbingerMissileDefense_SpellID, + HarbingerVulnerability_SpellID, + InfestedAreaRecall_SpellID, + FrozenArmor_SpellID, + PortalZombieKeep_SpellID, + ColdVulnerabilityNumbing_SpellID, + FlameStreak7Untargeted_SpellID, + PortalSendDarkCrypt1_SpellID, + PortalSendDarkCrypt2_SpellID, + PortalSendDarkCrypt3_SpellID, + ChewyCenter_SpellID, + PortalSendingColosseumBossGolemPumpkin_SpellID, + SpectralFlame_SpellID, + GummyShield_SpellID, + JumpSpin_SpellID, + LicoriceLeap_SpellID, + StickyMelee_SpellID, + RecallColosseum_SpellID, + CandethKeepRecall_SpellID, + ShadowArmor_SpellID, + FrostWaveOrisis_SpellID, + GourdGuard_SpellID, + PortalSendKnockback_SpellID, + PortalSendTrialoftheArm_SpellID, + PortalSendTrialoftheHeart_SpellID, + LifeMagicMasterySpectral_SpellID, + PortalSendProdigalLugian_SpellID, + PortalSendTrialFinalFight_SpellID, + PortalSendTrialoftheMind_SpellID, + PortalSendTrialPreperations_SpellID, + CANTRIPENDURANCE3_SpellID, + CANTRIPWILLPOWER3_SpellID, + PortalSendAwakening_SpellID, + PortalSendingApparitionBDC_SpellID, + PortalSendBaelzharonDream_SpellID, + LeadershipMasteryOtherIncantation_SpellID, + CANTRIPLEADERSHIP3_SpellID, + PortalRecallAerbaxPlatformCenter_SpellID, + PortalRecallAerbaxPlatformEast_SpellID, + PortalRecallAerbaxPlatformNorth_SpellID, + PortalRecallAerbaxPlatformSouth_SpellID, + PortalRecallAerbaxPlatformWest_SpellID, + PortalSendAerbaxExpel_SpellID, + AerbaxRingHarm_SpellID, + AerbaxMagicShield_SpellID, + AerbaxMagicShieldNull_SpellID, + AerbaxMeleeShield_SpellID, + AerbaxMeleeShieldNull_SpellID, + AerbaxMissileShield_SpellID, + AerbaxMissileShieldNull_SpellID, + MeteorStrike_SpellID, + PortalSendingTanadaBattleBurrows_SpellID, + PortalSendingShroudCabalNorth80_SpellID, + PortalSendingShroudCabalSouth40_SpellID, + PortalSendAerbaxPlatform_SpellID, + PortalSendJester_SpellID, + PortalSendJesterCell_SpellID, + PortalSendJesterCellRepeat_SpellID, + PortalSendJesterHallwayTrap_SpellID, + PortalSendJesterPrison_SpellID, + RecallJester1_SpellID, + RecallJester2_SpellID, + RecallJester3_SpellID, + RecallJester4_SpellID, + RecallJester5_SpellID, + RecallJester6_SpellID, + RecallJester7_SpellID, + RecallJester8_SpellID, + ArcaneDeath_SpellID, + ArcanePyramid_SpellID, + JesterBloodBolt_SpellID, + JesterCowArc_SpellID, + JesterFireworksBolt_SpellID, + JesterPresentArc_SpellID, + JesterTableArc_SpellID, + AcidWallJester_SpellID, + BladeWallJester_SpellID, + CoinWallJester_SpellID, + FlameWallJester_SpellID, + LightningWallJester_SpellID, + JesterMalevolentEye_SpellID, + PortalSendJesterPrison2_SpellID, + PortalSendingRytheranLibrary_SpellID, + UNKNOWN__GUESSEDNAME4279, // NOTE: Missing 1 + CoordinationJesterDeck_SpellID, + FocusJesterDeck_SpellID, + ArcaneDeathLeft_SpellID, + ArcaneDeathRight_SpellID, + AerbaxHarmSelfEast_SpellID, + AerbaxHarmSelfFinalFight_SpellID, + AerbaxHarmSelfNorth_SpellID, + AerbaxHarmSelfSouth_SpellID, + AerbaxHarmSelfWest_SpellID, + MessagesBurPortalSending_SpellID, + ArmorOther8_SpellID, + ArmorSelf8_SpellID, + BafflementOther8_SpellID, + BafflementSelf8_SpellID, + ClumsinessOther8_SpellID, + ClumsinessSelf8_SpellID, + CoordinationOther8_SpellID, + CoordinationSelf8_SpellID, + EnduranceOther8_SpellID, + EnduranceSelf8_SpellID, + EnfeebleOther8_SpellID, + EnfeebleSelf8_SpellID, + FeeblemindOther8_SpellID, + FeeblemindSelf8_SpellID, + FocusOther8_SpellID, + FocusSelf8_SpellID, + FrailtyOther8_SpellID, + FrailtySelf8_SpellID, + HarmOther8_SpellID, + HarmSelf8_SpellID, + HealOther8_SpellID, + HealSelf8_SpellID, + ImperilOther8_SpellID, + ImperilSelf8_SpellID, + ManaBoostOther8_SpellID, + ManaBoostSelf8_SpellID, + ManaDrainOther8_SpellID, + ManaDrainSelf8_SpellID, + QuicknessOther8_SpellID, + QuicknessSelf8_SpellID, + RevitalizeOther8_SpellID, + RevitalizeSelf8_SpellID, + SlownessOther8_SpellID, + SlownessSelf8_SpellID, + StrengthOther8_SpellID, + StrengthSelf8_SpellID, + WeaknessOther8_SpellID, + WeaknessSelf8_SpellID, + WillpowerOther8_SpellID, + WillpowerSelf8_SpellID, + DispelAllBadOther8_SpellID, + DispelAllBadSelf8_SpellID, + DispelAllGoodOther8_SpellID, + DispelAllGoodSelf8_SpellID, + DispelAllNeutralOther8_SpellID, + DispelAllNeutralSelf8_SpellID, + DispelCreatureBadOther8_SpellID, + DispelCreatureBadSelf8_SpellID, + DispelCreatureGoodOther8_SpellID, + DispelCreatureGoodSelf8_SpellID, + DispelCreatureNeutralOther8_SpellID, + DispelCreatureNeutralSelf8_SpellID, + DispelItemBadOther8_SpellID, + DispelItemGoodOther8_SpellID, + DispelItemNeutralOther8_SpellID, + DispelLifeBadOther8_SpellID, + DispelLifeBadSelf8_SpellID, + DispelLifeGoodOther8_SpellID, + DispelLifeGoodSelf8_SpellID, + DispelLifeNeutralOther8_SpellID, + DispelLifeNeutralSelf8_SpellID, + CoordinationFellowship8_SpellID, + EnduranceFellowship8_SpellID, + FocusFellowship8_SpellID, + QuicknessFellowship8_SpellID, + SelfFellowship8_SpellID, + StrengthFellowship8_SpellID, + AcidProtectionFellowship8_SpellID, + BladeProtectionFellowship8_SpellID, + BludgeonProtectionFellowship8_SpellID, + ColdProtectionFellowship8_SpellID, + FireProtectionFellowship8_SpellID, + LightningProtectionFellowship8_SpellID, + PierceProtectionFellowship8_SpellID, + ManaRenewalFellowship8_SpellID, + RegenerationFellowship8_SpellID, + RejuvenationFellowship8_SpellID, + CreatureEnchantmentMasteryFellow8_SpellID, + ImpregnabilityFellowship8_SpellID, + InvulnerabilityFellowship8_SpellID, + ItemEnchantmentMasteryFellow8_SpellID, + LifeMagicMasteryFellow8_SpellID, + MagicResistanceFellowship8_SpellID, + ManaConversionMasteryFellow8_SpellID, + WarMagicMasteryFellow8_SpellID, + FireworkOutBlack8_SpellID, + FireworkOutBlue8_SpellID, + FireworkOutGreen8_SpellID, + FireworkOutOrange8_SpellID, + FireworkOutPurple8_SpellID, + FireworkOutRed8_SpellID, + FireworkOutWhite8_SpellID, + FireworkOutYellow8_SpellID, + FireworkUpBlack8_SpellID, + FireworkUpBlue8_SpellID, + FireworkUpGreen8_SpellID, + FireworkUpOrange8_SpellID, + FireworkUpPurple8_SpellID, + FireworkUpRed8_SpellID, + FireworkUpWhite8_SpellID, + FireworkUpYellow8_SpellID, + AcidBane8_SpellID, + AcidLure8_SpellID, + BladeBane8_SpellID, + BladeLure8_SpellID, + Blooddrinker8_SpellID, + Bloodloather8_SpellID, + BludgeonBane8_SpellID, + BludgeonLure8_SpellID, + Brittlemail8_SpellID, + Defender8_SpellID, + FlameBane8_SpellID, + FlameLure8_SpellID, + FrostBane8_SpellID, + FrostLure8_SpellID, + Heartseeker8_SpellID, + HideValue8_SpellID, + Impenetrability8_SpellID, + LeadenWeapon8_SpellID, + LightningBane8_SpellID, + LightningLure8_SpellID, + LureBlade8_SpellID, + PiercingBane8_SpellID, + PiercingLure8_SpellID, + Spiritdrinker8_SpellID, + Spiritloather8_SpellID, + StrengthenLock8_SpellID, + Swiftkiller8_SpellID, + TrueValue8_SpellID, + TurnBlade8_SpellID, + WeakenLock8_SpellID, + AcidArc8_SpellID, + BladeArc8_SpellID, + FlameArc8_SpellID, + ForceArc8_SpellID, + FrostArc8_SpellID, + LightningArc8_SpellID, + ShockArc8_SpellID, + HealthBolt8_SpellID, + ManaBolt8_SpellID, + StaminaBolt8_SpellID, + AcidBlast8_SpellID, + AcidStreak8_SpellID, + AcidStream8_SpellID, + AcidVolley8_SpellID, + BladeBlast8_SpellID, + BladeVolley8_SpellID, + BludgeoningVolley8_SpellID, + FlameBlast8_SpellID, + FlameBolt8_SpellID, + FlameStreak8_SpellID, + FlameVolley8_SpellID, + ForceBlast8_SpellID, + ForceBolt8_SpellID, + ForceStreak8_SpellID, + ForceVolley8_SpellID, + FrostBlast8_SpellID, + FrostBolt8_SpellID, + FrostStreak8_SpellID, + FrostVolley8_SpellID, + LightningBlast8_SpellID, + LightningBolt8_SpellID, + LightningStreak8_SpellID, + LightningVolley8_SpellID, + ShockBlast8_SpellID, + ShockWave8_SpellID, + ShockwaveStreak8_SpellID, + WhirlingBlade8_SpellID, + WhirlingBladeStreak8_SpellID, + AcidProtectionOther8_SpellID, + AcidProtectionSelf8_SpellID, + BladeProtectionOther8_SpellID, + BladeProtectionSelf8_SpellID, + BludgeonProtectionOther8_SpellID, + BludgeonProtectionSelf8_SpellID, + ColdProtectionOther8_SpellID, + ColdProtectionSelf8_SpellID, + FireProtectionOther8_SpellID, + FireProtectionSelf8_SpellID, + LightningProtectionOther8_SpellID, + LightningProtectionSelf8_SpellID, + PiercingProtectionOther8_SpellID, + PiercingProtectionSelf8_SpellID, + AcidVulnerabilityOther8_SpellID, + AcidVulnerabilitySelf8_SpellID, + BladeVulnerabilityOther8_SpellID, + BladeVulnerabilitySelf8_SpellID, + BludgeonVulnerabilityOther8_SpellID, + BludgeonVulnerabilitySelf8_SpellID, + ColdVulnerabilityOther8_SpellID, + ColdVulnerabilitySelf8_SpellID, + FireVulnerabilityOther8_SpellID, + FireVulnerabilitySelf8_SpellID, + LightningVulnerabilityOther8_SpellID, + LightningVulnerabilitySelf8_SpellID, + PiercingVulnerabilityOther8_SpellID, + PiercingVulnerabilitySelf8_SpellID, + ExhaustionOther8_SpellID, + ExhaustionSelf8_SpellID, + FesterOther8_SpellID, + FesterSelf8_SpellID, + ManaDepletionOther8_SpellID, + ManaDepletionSelf8_SpellID, + ManaRenewalOther8_SpellID, + ManaRenewalSelf8_SpellID, + RegenerationOther8_SpellID, + RegenerationSelf8_SpellID, + RejuvenationOther8_SpellID, + RejuvenationSelf8_SpellID, + ArcanumSalvaging8_SpellID, + ArcanumSalvagingOther8_SpellID, + NuhmudirasWisdom8_SpellID, + NuhmudirasWisdomOther8_SpellID, + AlchemyIneptitudeOther8_SpellID, + AlchemyIneptitudeSelf8_SpellID, + AlchemyMasteryOther8_SpellID, + AlchemyMasterySelf8_SpellID, + ArcaneBenightednessOther8_SpellID, + ArcaneBenightednessSelf8_SpellID, + ArcaneEnlightenmentOther8_SpellID, + ArcaneEnlightenmentSelf8_SpellID, + ArmorExpertiseOther8_SpellID, + ArmorExpertiseSelf8_SpellID, + ArmorIgnoranceOther8_SpellID, + ArmorIgnoranceSelf8_SpellID, + AxeIneptitudeOther8_SpellID, + AxeIneptitudeSelf8_SpellID, + AxeMasteryOther8_SpellID, + AxeMasterySelf8_SpellID, + BowIneptitudeOther8_SpellID, + BowIneptitudeSelf8_SpellID, + BowMasteryOther8_SpellID, + BowMasterySelf8_SpellID, + CookingIneptitudeOther8_SpellID, + CookingIneptitudeSelf8_SpellID, + CookingMasteryOther8_SpellID, + CookingMasterySelf8_SpellID, + CreatureEnchantmentIneptitudeOther8_SpellID, + CreatureEnchantmentIneptitudeSelf8_SpellID, + CreatureEnchantmentMasteryOther8_SpellID, + CreatureEnchantmentMasterySelf8_SpellID, + CrossbowIneptitudeOther8_SpellID, + CrossbowIneptitudeSelf8_SpellID, + CrossbowMasteryOther8_SpellID, + CrossbowMasterySelf8_SpellID, + DaggerIneptitudeOther8_SpellID, + DaggerIneptitudeSelf8_SpellID, + DaggerMasteryOther8_SpellID, + DaggerMasterySelf8_SpellID, + DeceptionIneptitudeOther8_SpellID, + DeceptionIneptitudeSelf8_SpellID, + DeceptionMasteryOther8_SpellID, + DeceptionMasterySelf8_SpellID, + defenselessnessOther8_SpellID, + defenselessnessSelf8_SpellID, + FaithlessnessOther8_SpellID, + FaithlessnessSelf8_SpellID, + FealtyOther8_SpellID, + FealtySelf8_SpellID, + FletchingIneptitudeOther8_SpellID, + FletchingIneptitudeSelf8_SpellID, + FletchingMasteryOther8_SpellID, + FletchingMasterySelf8_SpellID, + HealingIneptitudeOther8_SpellID, + HealingIneptitudeSelf8_SpellID, + HealingMasteryOther8_SpellID, + HealingMasterySelf8_SpellID, + ImpregnabilityOther8_SpellID, + ImpregnabilitySelf8_SpellID, + InvulnerabilityOther8_SpellID, + InvulnerabilitySelf8_SpellID, + ItemEnchantmentIneptitudeOther8_SpellID, + ItemEnchantmentIneptitudeSelf8_SpellID, + ItemEnchantmentMasteryOther8_SpellID, + ItemEnchantmentMasterySelf8_SpellID, + ItemExpertiseOther8_SpellID, + ItemExpertiseSelf8_SpellID, + ItemIgnoranceOther8_SpellID, + ItemIgnoranceSelf8_SpellID, + JumpingIneptitudeOther8_SpellID, + JumpingIneptitudeSelf8_SpellID, + JumpingMasteryOther8_SpellID, + JumpingMasterySelf8_SpellID, + LeadenFeetOther8_SpellID, + LeadenFeetSelf8_SpellID, + LeadershipIneptitudeOther8_SpellID, + LeadershipIneptitudeSelf8_SpellID, + LeadershipMasteryOther8_SpellID, + LeadershipMasterySelf8_SpellID, + LifeMagicIneptitudeOther8_SpellID, + LifeMagicIneptitudeSelf8_SpellID, + LifeMagicMasteryOther8_SpellID, + LifeMagicMasterySelf8_SpellID, + LockpickIneptitudeOther8_SpellID, + LockpickIneptitudeSelf8_SpellID, + LockpickMasteryOther8_SpellID, + LockpickMasterySelf8_SpellID, + MaceIneptitudeOther8_SpellID, + MaceIneptitudeSelf8_SpellID, + MaceMasteryOther8_SpellID, + MaceMasterySelf8_SpellID, + MagicItemExpertiseOther8_SpellID, + MagicItemExpertiseSelf8_SpellID, + MagicItemIgnoranceOther8_SpellID, + MagicItemIgnoranceSelf8_SpellID, + MagicResistanceOther8_SpellID, + MagicResistanceSelf8_SpellID, + MagicYieldOther8_SpellID, + MagicYieldSelf8_SpellID, + ManaIneptitudeOther8_SpellID, + ManaIneptitudeSelf8_SpellID, + ManaMasteryOther8_SpellID, + ManaMasterySelf8_SpellID, + MonsterAttunementOther8_SpellID, + MonsterAttunementSelf8_SpellID, + MonsterUnfamiliarityOther8_SpellID, + MonsterUnfamiliaritySelf8_SpellID, + PersonAttunementOther8_SpellID, + PersonAttunementSelf8_SpellID, + PersonUnfamiliarityOther8_SpellID, + PersonUnfamiliaritySelf8_SpellID, + SpearIneptitudeOther8_SpellID, + SpearIneptitudeSelf8_SpellID, + SpearMasteryOther8_SpellID, + SpearMasterySelf8_SpellID, + SprintOther8_SpellID, + SprintSelf8_SpellID, + StaffIneptitudeOther8_SpellID, + StaffIneptitudeSelf8_SpellID, + StaffMasteryOther8_SpellID, + StaffMasterySelf8_SpellID, + SwordIneptitudeOther8_SpellID, + SwordIneptitudeSelf8_SpellID, + SwordMasteryOther8_SpellID, + SwordMasterySelf8_SpellID, + ThrownWeaponIneptitudeOther8_SpellID, + ThrownWeaponIneptitudeSelf8_SpellID, + ThrownWeaponMasteryOther8_SpellID, + ThrownWeaponMasterySelf8_SpellID, + UnarmedCombatIneptitudeOther8_SpellID, + UnarmedCombatMasteryOther8_SpellID, + UnarmedCombatMasterySelf8_SpellID, + UnarmedCombatIneptitudeSelf8_SpellID, + VulnerabilityOther8_SpellID, + VulnerabilitySelf8_SpellID, + WarMagicIneptitudeOther8_SpellID, + WarMagicIneptitudeSelf8_SpellID, + WarMagicMasteryOther8_SpellID, + WarMagicMasterySelf8_SpellID, + WeaponExpertiseOther8_SpellID, + WeaponExpertiseSelf8_SpellID, + WeaponIgnoranceOther8_SpellID, + WeaponIgnoranceSelf8_SpellID, + DrainHealth8_SpellID, + DrainMana8_SpellID, + DrainStamina8_SpellID, + HealthToManaOther8_SpellID, + HealthToManaSelf8_SpellID, + HealthToStaminaOther8_SpellID, + HealthToStaminaSelf8_SpellID, + InfuseHealth8_SpellID, + InfuseMana8_SpellID, + InfuseStamina8_SpellID, + ManaToHealthOther8_SpellID, + ManaToHealthSelf8_SpellID, + ManaToStaminaOther8_SpellID, + ManaToStaminaSelf8_SpellID, + StaminaToHealthOther8_SpellID, + StaminaToHealthSelf8_SpellID, + StaminaToManaOther8_SpellID, + CANTRIPACIDBANE3_SpellID, + CANTRIPBLOODTHIRST3_SpellID, + CANTRIPBLUDGEONINGBANE3_SpellID, + CANTRIPDEFENDER3_SpellID, + CANTRIPFLAMEBANE3_SpellID, + CANTRIPFROSTBANE3_SpellID, + CANTRIPHEARTTHIRST3_SpellID, + CANTRIPIMPENETRABILITY3_SpellID, + CANTRIPPIERCINGBANE3_SpellID, + CANTRIPSLASHINGBANE3_SpellID, + CANTRIPSPIRITTHIRST3_SpellID, + CANTRIPSTORMBANE3_SpellID, + CANTRIPSWIFTHUNTER3_SpellID, + CANTRIPACIDWARD3_SpellID, + CANTRIPBLUDGEONINGWARD3_SpellID, + CANTRIPFLAMEWARD3_SpellID, + CANTRIPFROSTWARD3_SpellID, + CANTRIPPIERCINGWARD3_SpellID, + CANTRIPSLASHINGWARD3_SpellID, + CANTRIPSTORMWARD3_SpellID, + CANTRIPHEALTHGAIN3_SpellID, + CANTRIPMANAGAIN3_SpellID, + CANTRIPSTAMINAGAIN3_SpellID, + CANTRIPALCHEMICALPROWESS3_SpellID, + CANTRIPARCANEPROWESS3_SpellID, + CANTRIPARMOREXPERTISE3_SpellID, + CANTRIPAXEAPTITUDE3_SpellID, + CANTRIPBOWAPTITUDE3_SpellID, + CANTRIPCOOKINGPROWESS3_SpellID, + CANTRIPCREATUREENCHANTMENTAPTITUDE3_SpellID, + CANTRIPCROSSBOWAPTITUDE3_SpellID, + CANTRIPDAGGERAPTITUDE3_SpellID, + CANTRIPFEALTY3_SpellID, + CANTRIPFLETCHINGPROWESS3_SpellID, + CANTRIPHEALINGPROWESS3_SpellID, + CANTRIPIMPREGNABILITY3_SpellID, + CANTRIPINVULNERABILITY3_SpellID, + CANTRIPITEMENCHANTMENTAPTITUDE3_SpellID, + CANTRIPITEMEXPERTISE3_SpellID, + CANTRIPJUMPINGPROWESS3_SpellID, + CANTRIPLIFEMAGICAPTITUDE3_SpellID, + CANTRIPLOCKPICKPROWESS3_SpellID, + CANTRIPMACEAPTITUDE3_SpellID, + CANTRIPMAGICITEMEXPERTISE3_SpellID, + CANTRIPMAGICRESISTANCE3_SpellID, + CANTRIPMANACONVERSIONPROWESS3_SpellID, + CANTRIPMONSTERATTUNEMENT3_SpellID, + CANTRIPPERSONATTUNEMENT3_SpellID, + CANTRIPSALVAGING3_SpellID, + CANTRIPSPEARAPTITUDE3_SpellID, + CANTRIPSPRINT3_SpellID, + CANTRIPSTAFFAPTITUDE3_SpellID, + CANTRIPSWORDAPTITUDE3_SpellID, + CANTRIPTHROWNAPTITUDE3_SpellID, + CANTRIPUNARMEDAPTITUDE3_SpellID, + CANTRIPWARMAGICAPTITUDE3_SpellID, + BurningCurse_SpellID, + PortalSendingUlgrimSkyHigh_SpellID, + PortalSendingCHDSStage1_SpellID, + PortalSendingCHDSStage2_SpellID, + PortalSendingCHDSStage3_SpellID, + PortalSendingFreebooterIsle_SpellID, + DoTHealthOther1_SpellID, + DoTHealthSelf1_SpellID, + PortalSendMoarsmenCity_SpellID, + PortalSendMoarsmenCitySclavusPit_SpellID, + MoarsmanPoison1_SpellID, + MoarsmanPoison2_SpellID, + MoarsmanPoison3_SpellID, + PortalSendingMasterGateway_SpellID, + SetCoordination1_SpellID, + SetCoordination2_SpellID, + SetCoordination3_SpellID, + SetCoordination4_SpellID, + SetEndurance1_SpellID, + SetEndurance2_SpellID, + SetEndurance3_SpellID, + SetEndurance4_SpellID, + SetFocus1_SpellID, + SetFocus2_SpellID, + SetFocus3_SpellID, + SetFocus4_SpellID, + SetQuickness1_SpellID, + SetQuickness2_SpellID, + SetQuickness3_SpellID, + SetQuickness4_SpellID, + SetStrength1_SpellID, + SetStrength2_SpellID, + SetStrength3_SpellID, + SetStrength4_SpellID, + SetWillpower1_SpellID, + SetWillpower2_SpellID, + SetWillpower3_SpellID, + SetWillpower4_SpellID, + SetHealth2_SpellID, + SetHealth3_SpellID, + SetMana2_SpellID, + SetMana3_SpellID, + SetStamina2_SpellID, + SetStamina3_SpellID, + SetAcidResistance1_SpellID, + SetAcidResistance2_SpellID, + SetAcidResistance3_SpellID, + SetAcidResistance4_SpellID, + SetBludgeonResistance1_SpellID, + SetBludgeonResistance2_SpellID, + SetBludgeonResistance3_SpellID, + SetBludgeonResistance4_SpellID, + SetFlameResistance1_SpellID, + SetFlameResistance2_SpellID, + SetFlameResistance3_SpellID, + SetFlameResistance4_SpellID, + SetFrostResistance1_SpellID, + SetFrostResistance2_SpellID, + SetFrostResistance3_SpellID, + SetFrostResistance4_SpellID, + SetLightningResistance1_SpellID, + SetLightningResistance2_SpellID, + SetLightningResistance3_SpellID, + SetLightningResistance4_SpellID, + SetPierceResistance1_SpellID, + SetPierceResistance2_SpellID, + SetPierceResistance3_SpellID, + SetPierceResistance4_SpellID, + SetSlashingResistance1_SpellID, + SetSlashingResistance2_SpellID, + SetSlashingResistance3_SpellID, + SetSlashingResistance4_SpellID, + SetAlchemyAptitude1_SpellID, + SetAlchemyAptitude2_SpellID, + SetAlchemyAptitude3_SpellID, + SetAlchemyAptitude4_SpellID, + SetArmorExpertiseAptitude1_SpellID, + SetArmorExpertiseAptitude2_SpellID, + SetArmorExpertiseAptitude3_SpellID, + SetArmorExpertiseAptitude4_SpellID, + SetAxeAptitude1_SpellID, + SetAxeAptitude2_SpellID, + SetAxeAptitude3_SpellID, + SetAxeAptitude4_SpellID, + SetBowAptitude1_SpellID, + SetBowAptitude2_SpellID, + SetBowAptitude3_SpellID, + SetBowAptitude4_SpellID, + SetCookingAptitude1_SpellID, + SetCookingAptitude2_SpellID, + SetCookingAptitude3_SpellID, + SetCookingAptitude4_SpellID, + SetCreatureEnchantmentAptitude1_SpellID, + SetCreatureEnchantmentAptitude2_SpellID, + SetCreatureEnchantmentAptitude3_SpellID, + SetCreatureEnchantmentAptitude4_SpellID, + SetCrossbowAptitude1_SpellID, + SetCrossbowAptitude2_SpellID, + SetCrossbowAptitude3_SpellID, + SetCrossbowAptitude4_SpellID, + SetDaggerAptitude1_SpellID, + SetDaggerAptitude2_SpellID, + SetDaggerAptitude3_SpellID, + SetDaggerAptitude4_SpellID, + SetFletchingAptitude1_SpellID, + SetFletchingAptitude2_SpellID, + SetFletchingAptitude3_SpellID, + SetFletchingAptitude4_SpellID, + SetItemEnchantmentAptitude1_SpellID, + SetItemEnchantmentAptitude2_SpellID, + SetItemEnchantmentAptitude3_SpellID, + SetItemEnchantmentAptitude4_SpellID, + SetItemExpertiseAptitude1_SpellID, + SetItemExpertiseAptitude2_SpellID, + SetItemExpertiseAptitude3_SpellID, + SetItemExpertiseAptitude4_SpellID, + SetJumpingAptitude1_SpellID, + SetJumpingAptitude2_SpellID, + SetJumpingAptitude3_SpellID, + SetJumpingAptitude4_SpellID, + SetLifeMagicAptitude1_SpellID, + SetLifeMagicAptitude2_SpellID, + SetLifeMagicAptitude3_SpellID, + SetLifeMagicAptitude4_SpellID, + SetLockpickAptitude1_SpellID, + SetLockpickAptitude2_SpellID, + SetLockpickAptitude3_SpellID, + SetLockpickAptitude4_SpellID, + SetLoyaltyAptitude1_SpellID, + SetLoyaltyAptitude2_SpellID, + SetMaceAptitude1_SpellID, + SetMaceAptitude2_SpellID, + SetMaceAptitude3_SpellID, + SetMaceAptitude4_SpellID, + SetMagicDefenseAptitude1_SpellID, + SetMagicDefenseAptitude2_SpellID, + SetMagicDefenseAptitude3_SpellID, + SetMagicDefenseAptitude4_SpellID, + SetMagicItemExpertiseAptitude1_SpellID, + SetMagicItemExpertiseAptitude2_SpellID, + SetMagicItemExpertiseAptitude3_SpellID, + SetMagicItemExpertiseAptitude4_SpellID, + SetMeleeDefenseAptitude1_SpellID, + SetMeleeDefenseAptitude2_SpellID, + SetMeleeDefenseAptitude3_SpellID, + SetMeleeDefenseAptitude4_SpellID, + SetMissileDefenseAptitude1_SpellID, + SetMissileDefenseAptitude2_SpellID, + SetMissileDefenseAptitude3_SpellID, + SetMissileDefenseAptitude4_SpellID, + SetSalvagingAptitude1_SpellID, + SetSalvagingAptitude2_SpellID, + SetSpearAptitude1_SpellID, + SetSpearAptitude2_SpellID, + SetSpearAptitude3_SpellID, + SetSpearAptitude4_SpellID, + SetSprintAptitude1_SpellID, + SetSprintAptitude2_SpellID, + SetSprintAptitude3_SpellID, + SetSprintAptitude4_SpellID, + SetStaffAptitude1_SpellID, + SetStaffAptitude2_SpellID, + SetStaffAptitude3_SpellID, + SetStaffAptitude4_SpellID, + SetSwordAptitude1_SpellID, + SetSwordAptitude2_SpellID, + SetSwordAptitude3_SpellID, + SetSwordAptitude4_SpellID, + SetThrownAptitude1_SpellID, + SetThrownAptitude2_SpellID, + SetThrownAptitude3_SpellID, + SetThrownAptitude4_SpellID, + SetUnarmedAptitude1_SpellID, + SetUnarmedAptitude2_SpellID, + SetUnarmedAptitude3_SpellID, + SetUnarmedAptitude4_SpellID, + SetWarMagicAptitude1_SpellID, + SetWarMagicAptitude2_SpellID, + SetWarMagicAptitude3_SpellID, + SetWarMagicAptitude4_SpellID, + SetWeaponExpertiseAptitude1_SpellID, + SetWeaponExpertiseAptitude2_SpellID, + SetWeaponExpertiseAptitude3_SpellID, + SetWeaponExpertiseAptitude4_SpellID, + SetSocietyAttributeAll1_SpellID, + SetSocietyAttributeAll2_SpellID, + SetSocietyAttributeAll3_SpellID, + SetSocietyAttributeAll4_SpellID, + SetSocietyAttributeAll5_SpellID, + SetRejuvenation1_SpellID, + SetRejuvenation2_SpellID, + RecallCelestialHand_SpellID, + RecallEldrytchWeb_SpellID, + RecallRadiantBlood_SpellID, + HarmRaiderTag_SpellID, + CANTRIPARMOR3_SpellID, + CANTRIPWEAPONEXPERTISE3_SpellID, + PortalSendingNodePyramidAerlinthe_SpellID, + PortalSendingNodePyramidAerlintheExit_SpellID, + PortalSendingNodePyramidAmun_SpellID, + PortalSendingNodePyramidAmunExit_SpellID, + PortalSendingNodePyramidEsper_SpellID, + PortalSendingNodePyramidEsperExit_SpellID, + PortalSendingNodePyramidHalaetan_SpellID, + PortalSendingNodePyramidHalaetanExit_SpellID, + PortalSendingNodePyramidLinvak_SpellID, + PortalSendingNodePyramidLinvakExit_SpellID, + PortalSendingNodePyramidObsidian_SpellID, + PortalSendingNodePyramidObsidianExit_SpellID, + Dance_SpellID, + TthuunSmite_SpellID, + AcidStream8Spellpower300_SpellID, + AcidStream8Spellpower350_SpellID, + MiniArcaneDeath_SpellID, + MiniFireball1_SpellID, + MiniFireball2_SpellID, + MiniFireball3_SpellID, + MiniIceball1_SpellID, + MiniIceball2_SpellID, + MiniIceball3_SpellID, + MiniArrow1_SpellID, + MiniArrow2_SpellID, + MiniArrow3_SpellID, + MiniUber_SpellID, + MiniRing1_SpellID, + MiniRing2_SpellID, + MiniRing3_SpellID, + MiniFireball4_SpellID, + MiniIceball4_SpellID, + MiniArrow4_SpellID, + MiniRing4_SpellID, + MiniArcaneDeath2_SpellID, + MiniArcaneDeath3_SpellID, + MiniArcaneDeath4_SpellID, + PortalTowerDefenseRB_SpellID, + PortalTowerDefenseCH_SpellID, + PortalTowerDefenseEW_SpellID, + PortalSendingLostPortalTest_SpellID, + PortalSendingCrystallineCrag_SpellID, + PortalSendingLostPortalTestRare_SpellID, + PortalSendingTanadaScrollsToSanctum_SpellID, + PortalSendingTanadaScrollsReturn_SpellID, + RockslidegreaterXBow_SpellID, + RockslidelesserBow_SpellID, + RockslidelesserTW_SpellID, + RockslidelesserXBow_SpellID, + RockslideTW_SpellID, + RockslideXBow_SpellID, + RockslideBow_SpellID, + RockslidegreaterBow_SpellID, + RockslidegreaterTW_SpellID, + cleansingring_SpellID, + BowmansBoon3_SpellID, + ChuckersBoon3_SpellID, + CrossbowmansBoon3_SpellID, + EnchantersBoon3_SpellID, + HieromancersBoon3_SpellID, + KnifersBoon3_SpellID, + LifeGiversBoon3_SpellID, + MacersBoon3_SpellID, + PugilistsBoon3_SpellID, + SpearmansBoon3_SpellID, + StafferBoon3_SpellID, + SwordsmansBoon3_SpellID, + AxemansBoon3_SpellID, + StaminatoManaSelf8_SpellID, + LockpickBonus5_SpellID, + AlchemyBonus5_SpellID, + CookingBonus5_SpellID, + FletchingBonus5_SpellID, + AlchemyPercentBoost1_SpellID, + olthoiSpit_SpellID, + PortalTunnelOut_SpellID, + PortalSendingAssassinsRoost1_SpellID, + PortalSendingAssassinsRoost2_SpellID, + PortalSendingAssassinsRoost3_SpellID, + PortalSendingAssassinsRoost4_SpellID, + PortalSendingPKDungeon_SpellID, + PortalSendingAssassinsRoost5_SpellID, + PortalSendingPKDungeonTwo_SpellID, + PortalSendingPKDungeonThree_SpellID, + PortalSendingPKDungeonFour_SpellID, + ArenaStamina_SpellID, + ArenaHealth_SpellID, + ArenaMana_SpellID, + PiercingProtectionOtherArena_SpellID, + AcidProtectionOtherArena_SpellID, + BladeProtectionOtherArena_SpellID, + BludgeonProtectionOtherArena_SpellID, + ColdProtectionOtherArena_SpellID, + FireProtectionOtherArena_SpellID, + LightningProtectionOtherArena_SpellID, + PortalSendingApostateNexus_SpellID, + AerfallesWardGreater_SpellID, + PortalSendingAerfalleSanctum_SpellID, + HarmOtherGeomanticRaze_SpellID, + PortalSendingLostPortalMar_SpellID, + PortalSendingLostPortaMay_SpellID, + PortalSendingLostPortaApr_SpellID, + PortalSendingLostPortalFeb_SpellID, + PortalSendingLostPortaAlive_SpellID, + PortalSendingLostPortaDead_SpellID, + PortalDesperadoStory_SpellID, + PortalSendingLostPortalFrost_SpellID, + PortalSendingLostPortalLightning_SpellID, + PortalSendingLostPortalAcid_SpellID, + PortalSendingLostPortalFire_SpellID, + TwoHandedMasterySpectral_SpellID, + GearCraftMasterySpectral_SpellID, + GearCraftMasteryRare_SpellID, + TwoHandedMasteryRare_SpellID, + CascadeTwoHandedGreater_SpellID, + CascadeTwoHandedLesser_SpellID, + CascadeTwoHanded_SpellID, + TwoHandedBoon_SpellID, + TwoHandedBoon3_SpellID, + twohandedmasteryself8_SpellID, + CANTRIPGEARCRAFTAPTITUDE3_SpellID, + CANTRIPTWOHANDEDAPTITUDE3_SpellID, + FeebleGearCraftAptitude_SpellID, + FeebleTwoHandedAptitude_SpellID, + gearcraftineptitude1_SpellID, + gearcraftineptitude2_SpellID, + gearcraftineptitude3_SpellID, + gearcraftineptitude4_SpellID, + gearcraftineptitude5_SpellID, + gearcraftineptitude6_SpellID, + gearcraftineptitude7_SpellID, + gearcraftineptitude8_SpellID, + gearcraftineptitudeself1_SpellID, + gearcraftineptitudeself2_SpellID, + gearcraftineptitudeself3_SpellID, + gearcraftineptitudeself4_SpellID, + gearcraftineptitudeself5_SpellID, + gearcraftineptitudeself6_SpellID, + gearcraftineptitudeself7_SpellID, + gearcraftineptitudeself8_SpellID, + gearcraftmastery1_SpellID, + gearcraftmastery2_SpellID, + gearcraftmastery3_SpellID, + gearcraftmastery4_SpellID, + gearcraftmastery5_SpellID, + gearcraftmastery6_SpellID, + gearcraftmastery7_SpellID, + gearcraftmastery8_SpellID, + gearcraftmasteryself1_SpellID, + gearcraftmasteryself2_SpellID, + gearcraftmasteryself3_SpellID, + gearcraftmasteryself4_SpellID, + gearcraftmasteryself5_SpellID, + gearcraftmasteryself6_SpellID, + gearcraftmasteryself7_SpellID, + gearcraftmasteryself8_SpellID, + CANTRIPGEARCRAFTAPTITUDE2_SpellID, + CANTRIPTWOHANDEDAPTITUDE2_SpellID, + CANTRIPGEARCRAFTAPTITUDE1_SpellID, + CANTRIPTWOHANDEDAPTITUDE1_SpellID, + ModerateGearCraftAptitude_SpellID, + ModerateTwoHandedAptitude_SpellID, + twohandedineptitude1_SpellID, + twohandedineptitude2_SpellID, + twohandedineptitude3_SpellID, + twohandedineptitude4_SpellID, + twohandedineptitude5_SpellID, + twohandedineptitude6_SpellID, + twohandedineptitude7_SpellID, + twohandedineptitude8_SpellID, + twohandedineptitudeself1_SpellID, + twohandedineptitudeself2_SpellID, + twohandedineptitudeself3_SpellID, + twohandedineptitudeself4_SpellID, + twohandedineptitudeself5_SpellID, + twohandedineptitudeself6_SpellID, + twohandedineptitudeself7_SpellID, + twohandedineptitudeself8_SpellID, + twohandedmastery1_SpellID, + twohandedmastery2_SpellID, + twohandedmastery3_SpellID, + twohandedmastery4_SpellID, + twohandedmastery5_SpellID, + twohandedmastery6_SpellID, + twohandedmastery7_SpellID, + twohandedmastery8_SpellID, + twohandedmasteryself1_SpellID, + twohandedmasteryself2_SpellID, + twohandedmasteryself3_SpellID, + twohandedmasteryself4_SpellID, + twohandedmasteryself5_SpellID, + twohandedmasteryself6_SpellID, + twohandedmasteryself7_SpellID, + SetGearCraftAptitude4_SpellID, + SetTwoHandedAptitude1_SpellID, + SetTwoHandedAptitude2_SpellID, + SetTwoHandedAptitude3_SpellID, + SetTwoHandedAptitude4_SpellID, + SetGearCraftAptitude1_SpellID, + SetGearCraftAptitude2_SpellID, + SetGearCraftAptitude3_SpellID, + exposeweakness8_SpellID, + exposeweakness1_SpellID, + exposeweakness2_SpellID, + exposeweakness3_SpellID, + exposeweakness4_SpellID, + exposeweakness5_SpellID, + exposeweakness6_SpellID, + exposeweakness7_SpellID, + CallOfLeadership5_SpellID, + AnswerOfLoyaltyMana1_SpellID, + AnswerOfLoyaltyMana2_SpellID, + AnswerOfLoyaltyMana3_SpellID, + AnswerOfLoyaltyMana4_SpellID, + AnswerOfLoyaltyMana5_SpellID, + AnswerOfLoyaltyStam1_SpellID, + AnswerOfLoyaltyStam2_SpellID, + AnswerOfLoyaltyStam3_SpellID, + AnswerOfLoyaltyStam4_SpellID, + AnswerOfLoyaltyStam5_SpellID, + CallOfLeadership1_SpellID, + CallOfLeadership2_SpellID, + CallOfLeadership3_SpellID, + CallOfLeadership4_SpellID, + TrinketXPBoost3_SpellID, + TrinketDamageBoost1_SpellID, + TrinketDamageBoost2_SpellID, + TrinketDamageBoost3_SpellID, + TrinketDamageReduction1_SpellID, + TrinketDamageReduction2_SpellID, + TrinketDamageReduction3_SpellID, + TrinketHealth1_SpellID, + TrinketHealth2_SpellID, + TrinketHealth3_SpellID, + TrinketMana1_SpellID, + TrinketMana2_SpellID, + TrinketMana3_SpellID, + TrinketStamina1_SpellID, + TrinketStamina2_SpellID, + TrinketStamina3_SpellID, + TrinketXPBoost1_SpellID, + TrinketXPBoost2_SpellID, + DeceptionArcane4_SpellID, + DeceptionArcane5_SpellID, + DeceptionArcane1_SpellID, + DeceptionArcane2_SpellID, + DeceptionArcane3_SpellID, + PortalMhoireCastle_SpellID, + PortalMhoireCastleGreatHall_SpellID, + PortalMhoireCastleNortheast_SpellID, + PortalMhoireCastleNorthwest_SpellID, + PortalMhoireCastleSoutheast_SpellID, + PortalMhoireCastleSouthwest_SpellID, + FlamingSkullTrap_SpellID, + PortalMhoireCastleExit_SpellID, + SpectralFountain_PortalFreefall_SpellID, + SpectralFountain_PortalMaze1_SpellID, + SpectralFountain_PortalMaze2_SpellID, + SpectralFountain_HoT_SpellID, + SpectralFountain_DoT_SpellID, + SpectralFountain_HealDebuff_SpellID, + SpectralFountain_DamageBoost_SpellID, + PortalSendHubNPE_SpellID, + PortalCHSocietyAug_SpellID, + PortalRBSocietyAug_SpellID, + PortalEWSocietyAug_SpellID, + PortalCHSocietyAugTwo_SpellID, + PortalRBSocietyAugTwo_SpellID, + PortalEWSocietyAugTwo_SpellID, + SpiritDrinker8Cast_SpellID, + BloodDrinker8Cast_SpellID, + RareDamageBoost7_SpellID, + RareDamageBoost8_SpellID, + RareDamageBoost9_SpellID, + RareDamageBoost10_SpellID, + RareDamageReduction1_SpellID, + RareDamageReduction2_SpellID, + RareDamageReduction3_SpellID, + RareDamageReduction4_SpellID, + RareDamageReduction5_SpellID, + RareDamageReduction6_SpellID, + RareDamageReduction7_SpellID, + RareDamageReduction8_SpellID, + RareDamageReduction9_SpellID, + RareDamageReduction10_SpellID, + RareDamageBoost1_SpellID, + RareDamageBoost2_SpellID, + RareDamageBoost3_SpellID, + RareDamageBoost4_SpellID, + RareDamageBoost5_SpellID, + RareDamageBoost6_SpellID, + AetheriaProcDamageBoost_SpellID, + AetheriaProcDamageOverTime_SpellID, + AetheriaProcDamageReduction_SpellID, + AetheriaProcHealDebuff_SpellID, + AetheriaProcHealthOverTime_SpellID, + AetheriaCriticalDamageBoost1_SpellID, + AetheriaCriticalDamageBoost2_SpellID, + AetheriaCriticalDamageBoost3_SpellID, + AetheriaCriticalDamageBoost4_SpellID, + AetheriaCriticalDamageBoost5_SpellID, + AetheriaCriticalDamageBoost6_SpellID, + AetheriaCriticalDamageBoost7_SpellID, + AetheriaCriticalDamageBoost8_SpellID, + AetheriaCriticalDamageBoost9_SpellID, + AetheriaCriticalDamageBoost10_SpellID, + AetheriaCriticalDamageBoost11_SpellID, + AetheriaCriticalDamageBoost12_SpellID, + AetheriaCriticalDamageBoost13_SpellID, + AetheriaCriticalDamageBoost14_SpellID, + AetheriaCriticalDamageBoost15_SpellID, + AetheriaDamageBoost1_SpellID, + AetheriaDamageBoost2_SpellID, + AetheriaDamageBoost3_SpellID, + AetheriaDamageBoost4_SpellID, + AetheriaDamageBoost5_SpellID, + AetheriaDamageBoost6_SpellID, + AetheriaDamageBoost7_SpellID, + AetheriaDamageBoost8_SpellID, + AetheriaDamageBoost9_SpellID, + AetheriaDamageBoost10_SpellID, + AetheriaDamageBoost11_SpellID, + AetheriaDamageBoost12_SpellID, + AetheriaDamageBoost13_SpellID, + AetheriaDamageBoost14_SpellID, + AetheriaDamageBoost15_SpellID, + AetheriaDamageReduction1_SpellID, + AetheriaDamageReduction2_SpellID, + AetheriaDamageReduction3_SpellID, + AetheriaDamageReduction4_SpellID, + AetheriaDamageReduction5_SpellID, + AetheriaDamageReduction6_SpellID, + AetheriaDamageReduction7_SpellID, + AetheriaDamageReduction8_SpellID, + AetheriaDamageReduction9_SpellID, + AetheriaDamageReduction10_SpellID, + AetheriaDamageReduction11_SpellID, + AetheriaDamageReduction12_SpellID, + AetheriaDamageReduction13_SpellID, + AetheriaDamageReduction14_SpellID, + AetheriaDamageReduction15_SpellID, + AetheriaHealBuff1_SpellID, + AetheriaHealBuff2_SpellID, + AetheriaHealBuff3_SpellID, + AetheriaHealBuff4_SpellID, + AetheriaHealBuff5_SpellID, + AetheriaHealBuff6_SpellID, + AetheriaHealBuff7_SpellID, + AetheriaHealBuff8_SpellID, + AetheriaHealBuff9_SpellID, + AetheriaHealBuff10_SpellID, + AetheriaHealBuff11_SpellID, + AetheriaHealBuff12_SpellID, + AetheriaHealBuff13_SpellID, + AetheriaHealBuff14_SpellID, + AetheriaHealBuff15_SpellID, + AetheriaHealth1_SpellID, + AetheriaHealth2_SpellID, + AetheriaHealth3_SpellID, + AetheriaHealth4_SpellID, + AetheriaHealth5_SpellID, + AetheriaHealth6_SpellID, + AetheriaHealth7_SpellID, + AetheriaHealth8_SpellID, + AetheriaHealth9_SpellID, + AetheriaHealth10_SpellID, + AetheriaHealth11_SpellID, + AetheriaHealth12_SpellID, + AetheriaHealth13_SpellID, + AetheriaHealth14_SpellID, + AetheriaHealth15_SpellID, + AetheriaMana1_SpellID, + AetheriaMana2_SpellID, + AetheriaMana3_SpellID, + AetheriaMana4_SpellID, + AetheriaMana5_SpellID, + AetheriaMana6_SpellID, + AetheriaMana7_SpellID, + AetheriaMana8_SpellID, + AetheriaMana9_SpellID, + AetheriaMana10_SpellID, + AetheriaMana11_SpellID, + AetheriaMana12_SpellID, + AetheriaMana13_SpellID, + AetheriaMana14_SpellID, + AetheriaMana15_SpellID, + AetheriaStamina1_SpellID, + AetheriaStamina2_SpellID, + AetheriaStamina3_SpellID, + AetheriaStamina4_SpellID, + AetheriaStamina5_SpellID, + AetheriaStamina6_SpellID, + AetheriaStamina7_SpellID, + AetheriaStamina8_SpellID, + AetheriaStamina9_SpellID, + AetheriaStamina10_SpellID, + AetheriaStamina11_SpellID, + AetheriaStamina12_SpellID, + AetheriaStamina13_SpellID, + AetheriaStamina14_SpellID, + AetheriaStamina15_SpellID, + BlessingOfUnity_SpellID, + AetheriaEndurance1_SpellID, + AetheriaEndurance2_SpellID, + AetheriaEndurance3_SpellID, + AetheriaEndurance4_SpellID, + AetheriaEndurance5_SpellID, + AetheriaEndurance6_SpellID, + AetheriaEndurance7_SpellID, + AetheriaEndurance8_SpellID, + AetheriaEndurance9_SpellID, + AetheriaEndurance10_SpellID, + AetheriaEndurance11_SpellID, + AetheriaEndurance12_SpellID, + AetheriaEndurance13_SpellID, + AetheriaEndurance14_SpellID, + AetheriaEndurance15_SpellID, + RecallGearKnightInvasionHigh_SpellID, + BaelzharonsNetherRing_SpellID, + BaelzharonsNetherStreak_SpellID, + BaelzharonsNetherArc_SpellID, + BaelzharonsCurseDestruction_SpellID, + BaelzharonsCurseDestruction2_SpellID, + BaelzharonsCurseFestering_SpellID, + CurseDestructionOther7_SpellID, + CurseDestructionOther8_SpellID, + CurseDestructionOther1_SpellID, + CurseDestructionOther2_SpellID, + CurseDestructionOther3_SpellID, + CurseDestructionOther4_SpellID, + CurseDestructionOther5_SpellID, + CurseDestructionOther6_SpellID, + netherstreak5_SpellID, + netherstreak6_SpellID, + netherstreak7_SpellID, + netherstreak8_SpellID, + netherbolt1_SpellID, + netherbolt2_SpellID, + netherbolt3_SpellID, + netherbolt4_SpellID, + netherbolt5_SpellID, + netherbolt6_SpellID, + netherbolt7_SpellID, + netherbolt8_SpellID, + netherstreak1_SpellID, + netherstreak2_SpellID, + netherstreak3_SpellID, + netherstreak4_SpellID, + netherring_SpellID, + NetherArc2_SpellID, + NetherArc3_SpellID, + NetherArc4_SpellID, + NetherArc5_SpellID, + NetherArc6_SpellID, + NetherArc7_SpellID, + NetherArc8_SpellID, + NetherArc1_SpellID, + TestStreakDoTMajor_SpellID, + CurseFestering1_SpellID, + CurseFestering2_SpellID, + CurseFestering3_SpellID, + CurseFestering4_SpellID, + CurseFestering5_SpellID, + CurseFestering6_SpellID, + CurseFestering7_SpellID, + CurseFestering8_SpellID, + CurseWeakness1_SpellID, + CurseWeakness2_SpellID, + CurseWeakness3_SpellID, + CurseWeakness4_SpellID, + CurseWeakness5_SpellID, + CurseWeakness6_SpellID, + CurseWeakness7_SpellID, + CurseWeakness8_SpellID, + Corrosion1_SpellID, + Corrosion2_SpellID, + Corrosion3_SpellID, + Corrosion4_SpellID, + Corrosion5_SpellID, + Corrosion6_SpellID, + Corrosion7_SpellID, + Corrosion8_SpellID, + Corruption1_SpellID, + Corruption2_SpellID, + Corruption3_SpellID, + Corruption4_SpellID, + Corruption5_SpellID, + Corruption6_SpellID, + Corruption7_SpellID, + Corruption8_SpellID, + VoidMagicMasteryOther1_SpellID, + VoidMagicMasteryOther2_SpellID, + VoidMagicMasteryOther3_SpellID, + VoidMagicMasteryOther4_SpellID, + VoidMagicMasteryOther5_SpellID, + VoidMagicMasteryOther6_SpellID, + VoidMagicMasteryOther7_SpellID, + VoidMagicMasteryOther8_SpellID, + VoidMagicMasterySelf1_SpellID, + VoidMagicMasterySelf2_SpellID, + VoidMagicMasterySelf3_SpellID, + VoidMagicMasterySelf4_SpellID, + VoidMagicMasterySelf5_SpellID, + VoidMagicMasterySelf6_SpellID, + VoidMagicMasterySelf7_SpellID, + VoidMagicMasterySelf8_SpellID, + VoidMagicIneptitudeOther1_SpellID, + VoidMagicIneptitudeOther2_SpellID, + VoidMagicIneptitudeOther3_SpellID, + VoidMagicIneptitudeOther4_SpellID, + VoidMagicIneptitudeOther5_SpellID, + VoidMagicIneptitudeOther6_SpellID, + VoidMagicIneptitudeOther7_SpellID, + VoidMagicIneptitudeOther8_SpellID, + CantripVoidMagicAptitude1_SpellID, + CantripVoidMagicAptitude2_SpellID, + CantripVoidMagicAptitude3_SpellID, + ModerateVoidMagicAptitude_SpellID, + SetVoidMagicAptitude1_SpellID, + SetVoidMagicAptitude2_SpellID, + SetVoidMagicAptitude3_SpellID, + SetVoidMagicAptitude4_SpellID, + VoidMagicMasterySpectral_SpellID, + VoidMagicMasteryRare_SpellID, + CorruptorsBoon_SpellID, + CorruptorsBoon3_SpellID, + AcidSpitStreak1_SpellID, + AcidSpit1_SpellID, + AcidSpit2_SpellID, + AcidSpitArc1_SpellID, + AcidSpitArc2_SpellID, + AcidSpitBlast1_SpellID, + AcidspitBlast2_SpellID, + AcidSpitVolley1_SpellID, + AcidSpitVolley2_SpellID, + AcidSpitStreak2_SpellID, + LuminanceRewardDamageBoost_SpellID, + LuminanceRewardDamageReduction_SpellID, + LuminanceRewardHealthRaising_SpellID, + OlthoiWillpowerOther1_SpellID, + OlthoiArmorOther1_SpellID, + OlthoiCoordinationOther1_SpellID, + OlthoiEnduranceOther1_SpellID, + OlthoiFocusOther1_SpellID, + OlthoiQuicknessOther1_SpellID, + OlthoiStrengthOther1_SpellID, + OlthoiPiercingProtectionOther1_SpellID, + OlthoiAcidProtectionOther1_SpellID, + OlthoiBladeProtectionOther1_SpellID, + OlthoiBludgeonProtectionOther1_SpellID, + OlthoiColdProtectionOther1_SpellID, + OlthoiFireProtectionOther1_SpellID, + OlthoiLightningProtectionOther1_SpellID, + OlthoiRejuvenationOther1_SpellID, + OlthoimanarenewalOther1_SpellID, + OlthoiregenerationOther1_SpellID, + OlthoiImpregnabilityOther1_SpellID, + OlthoiInvulnerabilityOther1_SpellID, + OlthoiMagicResistanceOther1_SpellID, + OlthoiManaMasteryOther1_SpellID, + OlthoiSalvagingMasteryOther1_SpellID, + OlthoiSprintOther1_SpellID, + OlthoiUnarmedCombatMasteryOther1_SpellID, + OlthoiWarMagicMasteryOther1_SpellID, + OlthoiCriticalDamageBoost1_SpellID, + OlthoiCriticalDamageBoost2_SpellID, + OlthoiCriticalDamageBoost3_SpellID, + OlthoiCriticalDamageBoost4_SpellID, + OlthoiCriticalDamageBoost5_SpellID, + OlthoiCriticalDamageBoost6_SpellID, + OlthoiCriticalDamageBoost7_SpellID, + OlthoiCriticalDamageBoost8_SpellID, + OlthoiCriticalDamageBoost9_SpellID, + OlthoiCriticalDamageBoost10_SpellID, + OlthoiCriticalDamageBoost11_SpellID, + UNKNOWN__GUESSEDNAME5488, // NOTE: Missing 1 + OlthoiCriticalDamageReduction1_SpellID, + OlthoiCriticalDamageReduction2_SpellID, + OlthoiCriticalDamageReduction3_SpellID, + OlthoiCriticalDamageReduction4_SpellID, + OlthoiCriticalDamageReduction5_SpellID, + OlthoiCriticalDamageReduction6_SpellID, + OlthoiCriticalDamageReduction7_SpellID, + OlthoiCriticalDamageReduction8_SpellID, + OlthoiCriticalDamageReduction9_SpellID, + OlthoiCriticalDamageReduction10_SpellID, + OlthoiCriticalDamageReduction11_SpellID, + OlthoiDamageBoost1_SpellID, + OlthoiDamageBoost2_SpellID, + OlthoiDamageBoost3_SpellID, + OlthoiDamageBoost4_SpellID, + OlthoiDamageBoost5_SpellID, + OlthoiDamageBoost6_SpellID, + OlthoiDamageBoost7_SpellID, + OlthoiDamageBoost8_SpellID, + OlthoiDamageBoost9_SpellID, + OlthoiDamageBoost10_SpellID, + OlthoiDamageBoost11_SpellID, + OlthoiDamageReduction1_SpellID, + OlthoiDamageReduction2_SpellID, + OlthoiDamageReduction3_SpellID, + OlthoiDamageReduction4_SpellID, + OlthoiDamageReduction5_SpellID, + OlthoiDamageReduction6_SpellID, + OlthoiDamageReduction7_SpellID, + OlthoiDamageReduction8_SpellID, + OlthoiDamageReduction9_SpellID, + OlthoiDamageReduction10_SpellID, + OlthoiDamageReduction11_SpellID, + AcidSpitVulnerability1_SpellID, + AcidSpitVulnerability2_SpellID, + FallingStoneSpikes_SpellID, + BloodstoneBolt1_SpellID, + BloodstoneBolt2_SpellID, + BloodstoneBolt3_SpellID, + BloodstoneBolt4_SpellID, + BloodstoneBolt5_SpellID, + BloodstoneBolt6_SpellID, + BloodstoneBolt7_SpellID, + BloodstoneBolt8_SpellID, + PortalSendingBloodstoneFactory1_SpellID, + PortalSendingBloodstoneFactory2_SpellID, + AcidicBlood_SpellID, + AcidicBloodGreater_SpellID, + AcidicBloodLesser_SpellID, + DarkenedHeart_SpellID, + PortalSendingRitualTime1_SpellID, + PortalSendingRitualTime2_SpellID, + SandAreaRecall_SpellID, + BurningSands_DoT_SpellID, + BurningSands_HealDebuff_SpellID, + NetherBlast1_SpellID, + NetherBlast2_SpellID, + NetherBlast3_SpellID, + NetherBlast4_SpellID, + NetherBlast5_SpellID, + NetherBlast6_SpellID, + NetherBlast7_SpellID, + NetherBlast8_SpellID, + AetheriaDoTResistance9_SpellID, + AetheriaHealthResistance1_SpellID, + AetheriaHealthResistance10_SpellID, + AetheriaHealthResistance11_SpellID, + AetheriaHealthResistance12_SpellID, + AetheriaHealthResistance13_SpellID, + AetheriaHealthResistance14_SpellID, + AetheriaHealthResistance15_SpellID, + AetheriaHealthResistance2_SpellID, + AetheriaHealthResistance3_SpellID, + AetheriaHealthResistance4_SpellID, + AetheriaHealthResistance5_SpellID, + AetheriaHealthResistance6_SpellID, + AetheriaHealthResistance7_SpellID, + AetheriaHealthResistance8_SpellID, + AetheriaHealthResistance9_SpellID, + AetheriaDoTResistance1_SpellID, + AetheriaDoTResistance10_SpellID, + AetheriaDoTResistance11_SpellID, + AetheriaDoTResistance12_SpellID, + AetheriaDoTResistance13_SpellID, + AetheriaDoTResistance14_SpellID, + AetheriaDoTResistance15_SpellID, + AetheriaDoTResistance2_SpellID, + AetheriaDoTResistance3_SpellID, + AetheriaDoTResistance4_SpellID, + AetheriaDoTResistance5_SpellID, + AetheriaDoTResistance6_SpellID, + AetheriaDoTResistance7_SpellID, + AetheriaDoTResistance8_SpellID, + DispelAllRare_SpellID, + CloakAlchemyMastery1_SpellID, + CloakAlchemyMastery2_SpellID, + CloakAlchemyMastery3_SpellID, + CloakAlchemyMastery4_SpellID, + CloakAlchemyMastery5_SpellID, + CloakArcaneloreMastery1_SpellID, + CloakArcaneloreMastery2_SpellID, + CloakArcaneloreMastery3_SpellID, + CloakArcaneloreMastery4_SpellID, + CloakArcaneloreMastery5_SpellID, + CloakArmortinkeringMastery1_SpellID, + CloakArmortinkeringMastery2_SpellID, + CloakArmortinkeringMastery3_SpellID, + CloakArmortinkeringMastery4_SpellID, + CloakArmortinkeringMastery5_SpellID, + CloakAssesspersonMastery1_SpellID, + CloakAssesspersonMastery2_SpellID, + CloakAssesspersonMastery3_SpellID, + CloakAssesspersonMastery4_SpellID, + CloakAssesspersonMastery5_SpellID, + CloakAxeMastery1_SpellID, + CloakAxeMastery2_SpellID, + CloakAxeMastery3_SpellID, + CloakAxeMastery4_SpellID, + CloakAxeMastery5_SpellID, + CloakBowMastery1_SpellID, + CloakBowMastery2_SpellID, + CloakBowMastery3_SpellID, + CloakBowMastery4_SpellID, + CloakBowMastery5_SpellID, + CloakCookingMastery1_SpellID, + CloakCookingMastery2_SpellID, + CloakCookingMastery3_SpellID, + CloakCookingMastery4_SpellID, + CloakCookingMastery5_SpellID, + CloakCreatureenchantmentMastery1_SpellID, + CloakCreatureenchantmentMastery2_SpellID, + CloakCreatureenchantmentMastery3_SpellID, + CloakCreatureenchantmentMastery4_SpellID, + CloakCreatureenchantmentMastery5_SpellID, + CloakCrossbowMastery1_SpellID, + CloakCrossbowMastery2_SpellID, + CloakCrossbowMastery3_SpellID, + CloakCrossbowMastery4_SpellID, + CloakCrossbowMastery5_SpellID, + CloakDaggerMastery1_SpellID, + CloakDaggerMastery2_SpellID, + CloakDaggerMastery3_SpellID, + CloakDaggerMastery4_SpellID, + CloakDaggerMastery5_SpellID, + CloakDeceptionMastery1_SpellID, + CloakDeceptionMastery2_SpellID, + CloakDeceptionMastery3_SpellID, + CloakDeceptionMastery4_SpellID, + CloakDeceptionMastery5_SpellID, + CloakFletchingMastery1_SpellID, + CloakFletchingMastery2_SpellID, + CloakFletchingMastery3_SpellID, + CloakFletchingMastery4_SpellID, + CloakFletchingMastery5_SpellID, + CloakHealingMastery1_SpellID, + CloakHealingMastery2_SpellID, + CloakHealingMastery3_SpellID, + CloakHealingMastery4_SpellID, + CloakHealingMastery5_SpellID, + CloakItemenchantmentMastery1_SpellID, + CloakItemenchantmentMastery2_SpellID, + CloakItemenchantmentMastery3_SpellID, + CloakItemenchantmentMastery4_SpellID, + CloakItemenchantmentMastery5_SpellID, + CloakItemtinkeringMastery1_SpellID, + CloakItemtinkeringMastery2_SpellID, + CloakItemtinkeringMastery3_SpellID, + CloakItemtinkeringMastery4_SpellID, + CloakItemtinkeringMastery5_SpellID, + CloakLeadershipMastery1_SpellID, + CloakLeadershipMastery2_SpellID, + CloakLeadershipMastery3_SpellID, + CloakLeadershipMastery4_SpellID, + CloakLeadershipMastery5_SpellID, + CloakLifemagicMastery1_SpellID, + CloakLifemagicMastery2_SpellID, + CloakLifemagicMastery3_SpellID, + CloakLifemagicMastery4_SpellID, + CloakLifemagicMastery5_SpellID, + CloakLoyaltyMastery1_SpellID, + CloakLoyaltyMastery2_SpellID, + CloakLoyaltyMastery3_SpellID, + CloakLoyaltyMastery4_SpellID, + CloakLoyaltyMastery5_SpellID, + CloakMaceMastery1_SpellID, + CloakMaceMastery2_SpellID, + CloakMaceMastery3_SpellID, + CloakMaceMastery4_SpellID, + CloakMaceMastery5_SpellID, + CloakMagicdefenseMastery1_SpellID, + CloakMagicdefenseMastery2_SpellID, + CloakMagicdefenseMastery3_SpellID, + CloakMagicdefenseMastery4_SpellID, + CloakMagicdefenseMastery5_SpellID, + CloakMagictinkeringMastery1_SpellID, + CloakMagictinkeringMastery2_SpellID, + CloakMagictinkeringMastery3_SpellID, + CloakMagictinkeringMastery4_SpellID, + CloakMagictinkeringMastery5_SpellID, + CloakManaconversionMastery1_SpellID, + CloakManaconversionMastery2_SpellID, + CloakManaconversionMastery3_SpellID, + CloakManaconversionMastery4_SpellID, + CloakManaconversionMastery5_SpellID, + CloakMeleedefenseMastery1_SpellID, + CloakMeleedefenseMastery2_SpellID, + CloakMeleedefenseMastery3_SpellID, + CloakMeleedefenseMastery4_SpellID, + CloakMeleedefenseMastery5_SpellID, + CloakMissiledefenseMastery1_SpellID, + CloakMissiledefenseMastery2_SpellID, + CloakMissiledefenseMastery3_SpellID, + CloakMissiledefenseMastery4_SpellID, + CloakMissiledefenseMastery5_SpellID, + CloakSalvagingMastery1_SpellID, + CloakSalvagingMastery2_SpellID, + CloakSalvagingMastery3_SpellID, + CloakSalvagingMastery4_SpellID, + CloakSalvagingMastery5_SpellID, + CloakSpearMastery1_SpellID, + CloakSpearMastery2_SpellID, + CloakSpearMastery3_SpellID, + CloakSpearMastery4_SpellID, + CloakSpearMastery5_SpellID, + CloakStaffMastery1_SpellID, + CloakStaffMastery2_SpellID, + CloakStaffMastery3_SpellID, + CloakStaffMastery4_SpellID, + CloakStaffMastery5_SpellID, + CloakSwordMastery1_SpellID, + CloakSwordMastery2_SpellID, + CloakSwordMastery3_SpellID, + CloakSwordMastery4_SpellID, + CloakSwordMastery5_SpellID, + CloakThrownweaponMastery1_SpellID, + CloakThrownweaponMastery2_SpellID, + CloakThrownweaponMastery3_SpellID, + CloakThrownweaponMastery4_SpellID, + CloakThrownweaponMastery5_SpellID, + CloakTwohandedcombatMastery1_SpellID, + CloakTwohandedcombatMastery2_SpellID, + CloakTwohandedcombatMastery3_SpellID, + CloakTwohandedcombatMastery4_SpellID, + CloakTwohandedcombatMastery5_SpellID, + CloakUnarmedcombatMastery1_SpellID, + CloakUnarmedcombatMastery2_SpellID, + CloakUnarmedcombatMastery3_SpellID, + CloakUnarmedcombatMastery4_SpellID, + CloakUnarmedcombatMastery5_SpellID, + CloakVoidmagicMastery1_SpellID, + CloakVoidmagicMastery2_SpellID, + CloakVoidmagicMastery3_SpellID, + CloakVoidmagicMastery4_SpellID, + CloakVoidmagicMastery5_SpellID, + CloakWarmagicMastery1_SpellID, + CloakWarmagicMastery2_SpellID, + CloakWarmagicMastery3_SpellID, + CloakWarmagicMastery4_SpellID, + CloakWarmagicMastery5_SpellID, + CloakWeapontinkeringMastery1_SpellID, + CloakWeapontinkeringMastery2_SpellID, + CloakWeapontinkeringMastery3_SpellID, + CloakWeapontinkeringMastery4_SpellID, + CloakWeapontinkeringMastery5_SpellID, + CloakAllSkill_SpellID, + CloakMagicDLower_SpellID, + CloakMeleeDLower_SpellID, + CloakMissileDLower_SpellID, + cloakassesscreaturemastery3_SpellID, + cloakassesscreaturemastery4_SpellID, + cloakassesscreaturemastery5_SpellID, + cloakassesscreaturemastery1_SpellID, + cloakassesscreaturemastery2_SpellID, + RollingDeathSnow_SpellID, + DirtyFightingIneptitudeOther1_SpellID, + dirtyfightingineptitudeother2_SpellID, + dirtyfightingineptitudeother3_SpellID, + dirtyfightingineptitudeother4_SpellID, + dirtyfightingineptitudeother5_SpellID, + dirtyfightingineptitudeother6_SpellID, + dirtyfightingineptitudeother7_SpellID, + dirtyfightingineptitudeother8_SpellID, + dirtyfightingmasteryother1_SpellID, + dirtyfightingmasteryother2_SpellID, + dirtyfightingmasteryother3_SpellID, + dirtyfightingmasteryother4_SpellID, + dirtyfightingmasteryother5_SpellID, + dirtyfightingmasteryother6_SpellID, + dirtyfightingmasteryother7_SpellID, + dirtyfightingmasteryother8_SpellID, + dirtyfightingmasteryself1_SpellID, + dirtyfightingmasteryself2_SpellID, + dirtyfightingmasteryself3_SpellID, + dirtyfightingmasteryself4_SpellID, + dirtyfightingmasteryself5_SpellID, + dirtyfightingmasteryself6_SpellID, + dirtyfightingmasteryself7_SpellID, + dirtyfightingmasteryself8_SpellID, + dualwieldineptitudeother1_SpellID, + dualwieldineptitudeother2_SpellID, + dualwieldineptitudeother3_SpellID, + dualwieldineptitudeother4_SpellID, + dualwieldineptitudeother5_SpellID, + dualwieldineptitudeother6_SpellID, + dualwieldineptitudeother7_SpellID, + dualwieldineptitudeother8_SpellID, + dualwieldmasteryother1_SpellID, + dualwieldmasteryother2_SpellID, + dualwieldmasteryother3_SpellID, + dualwieldmasteryother4_SpellID, + dualwieldmasteryother5_SpellID, + dualwieldmasteryother6_SpellID, + dualwieldmasteryother7_SpellID, + dualwieldmasteryother8_SpellID, + dualwieldmasteryself1_SpellID, + dualwieldmasteryself2_SpellID, + dualwieldmasteryself3_SpellID, + dualwieldmasteryself4_SpellID, + dualwieldmasteryself5_SpellID, + dualwieldmasteryself6_SpellID, + dualwieldmasteryself7_SpellID, + dualwieldmasteryself8_SpellID, + recklessnessineptitudeother1_SpellID, + recklessnessineptitudeother2_SpellID, + recklessnessineptitudeother3_SpellID, + recklessnessineptitudeother4_SpellID, + recklessnessineptitudeother5_SpellID, + recklessnessineptitudeother6_SpellID, + recklessnessineptitudeother7_SpellID, + recklessnessineptitudeother8_SpellID, + recklessnessmasteryother1_SpellID, + recklessnessmasteryother2_SpellID, + recklessnessmasteryother3_SpellID, + recklessnessmasteryother4_SpellID, + recklessnessmasteryother5_SpellID, + recklessnessmasteryother6_SpellID, + recklessnessmasteryother7_SpellID, + recklessnessmasteryother8_SpellID, + recklessnessmasteryself1_SpellID, + recklessnessmasteryself2_SpellID, + recklessnessmasteryself3_SpellID, + recklessnessmasteryself4_SpellID, + recklessnessmasteryself5_SpellID, + recklessnessmasteryself6_SpellID, + recklessnessmasteryself7_SpellID, + recklessnessmasteryself8_SpellID, + shieldineptitudeother1_SpellID, + shieldineptitudeother2_SpellID, + shieldineptitudeother3_SpellID, + shieldineptitudeother4_SpellID, + shieldineptitudeother5_SpellID, + shieldineptitudeother6_SpellID, + shieldineptitudeother7_SpellID, + shieldineptitudeother8_SpellID, + shieldmasteryother1_SpellID, + shieldmasteryother2_SpellID, + shieldmasteryother3_SpellID, + shieldmasteryother4_SpellID, + shieldmasteryother5_SpellID, + shieldmasteryother6_SpellID, + shieldmasteryother7_SpellID, + shieldmasteryother8_SpellID, + shieldmasteryself1_SpellID, + shieldmasteryself2_SpellID, + shieldmasteryself3_SpellID, + shieldmasteryself4_SpellID, + shieldmasteryself5_SpellID, + shieldmasteryself6_SpellID, + shieldmasteryself7_SpellID, + shieldmasteryself8_SpellID, + sneakattackineptitudeother1_SpellID, + sneakattackineptitudeother2_SpellID, + sneakattackineptitudeother3_SpellID, + sneakattackineptitudeother4_SpellID, + sneakattackineptitudeother5_SpellID, + sneakattackineptitudeother6_SpellID, + sneakattackineptitudeother7_SpellID, + sneakattackineptitudeother8_SpellID, + sneakattackmasteryother1_SpellID, + sneakattackmasteryother2_SpellID, + sneakattackmasteryother3_SpellID, + sneakattackmasteryother4_SpellID, + sneakattackmasteryother5_SpellID, + sneakattackmasteryother6_SpellID, + sneakattackmasteryother7_SpellID, + sneakattackmasteryother8_SpellID, + sneakattackmasteryself1_SpellID, + sneakattackmasteryself2_SpellID, + sneakattackmasteryself3_SpellID, + sneakattackmasteryself4_SpellID, + sneakattackmasteryself5_SpellID, + sneakattackmasteryself6_SpellID, + sneakattackmasteryself7_SpellID, + sneakattackmasteryself8_SpellID, + CantripDirtyFightingProwess1_SpellID, + CantripDualWieldAptitude1_SpellID, + CantripRecklessnessProwess1_SpellID, + CantripShieldAptitude1_SpellID, + CantripSneakAttackProwess1_SpellID, + CantripDirtyFightingProwess2_SpellID, + CantripDualWieldAptitude2_SpellID, + CantripRecklessnessProwess2_SpellID, + CantripShieldAptitude2_SpellID, + CantripSneakAttackProwess2_SpellID, + CantripDirtyFightingProwess3_SpellID, + CantripDualWieldAptitude3_SpellID, + CantripRecklessnessProwess3_SpellID, + CantripShieldAptitude3_SpellID, + CantripSneakAttackProwess3_SpellID, + ModerateDirtyFightingProwess_SpellID, + ModerateDualWieldAptitude_SpellID, + ModerateRecklessnessProwess_SpellID, + ModerateShieldAptitude_SpellID, + ModerateSneakAttackProwess_SpellID, + DualWieldMasteryRare_SpellID, + DualWieldMasterySpectral_SpellID, + RecklessnessMasteryRare_SpellID, + RecklessnessMasterySpectral_SpellID, + ShieldMasteryRare_SpellID, + ShieldMasterySpectral_SpellID, + SneakAttackMasteryRare_SpellID, + SneakAttackMasterySpectral_SpellID, + DirtyFightingMasteryRare_SpellID, + DirtyFightingMasterySpectral_SpellID, + cloakdirtyfightingmastery1_SpellID, + cloakdirtyfightingmastery2_SpellID, + cloakdirtyfightingmastery3_SpellID, + cloakdirtyfightingmastery4_SpellID, + cloakdirtyfightingmastery5_SpellID, + cloakdualwieldmastery1_SpellID, + cloakdualwieldmastery2_SpellID, + cloakdualwieldmastery3_SpellID, + cloakdualwieldmastery4_SpellID, + cloakdualwieldmastery5_SpellID, + cloakrecklessnessmastery1_SpellID, + cloakrecklessnessmastery2_SpellID, + cloakrecklessnessmastery3_SpellID, + cloakrecklessnessmastery4_SpellID, + cloakrecklessnessmastery5_SpellID, + cloakshieldmastery1_SpellID, + cloakshieldmastery2_SpellID, + cloakshieldmastery3_SpellID, + cloakshieldmastery4_SpellID, + cloakshieldmastery5_SpellID, + cloaksneakattackmastery1_SpellID, + cloaksneakattackmastery2_SpellID, + cloaksneakattackmastery3_SpellID, + cloaksneakattackmastery4_SpellID, + cloaksneakattackmastery5_SpellID, + DF_Specialized_AttackDebuff_SpellID, + DF_Specialized_Bleed_SpellID, + DF_Specialized_DefenseDebuff_SpellID, + DF_Specialized_HealingDebuff_SpellID, + DF_Trained_AttackDebuff_SpellID, + DF_Trained_Bleed_SpellID, + DF_Trained_DefenseDebuff_SpellID, + DF_Trained_HealingDebuff_SpellID, + SetDirtyFightingAptitude1_SpellID, + SetDirtyFightingAptitude2_SpellID, + SetDirtyFightingAptitude3_SpellID, + SetDirtyFightingAptitude4_SpellID, + SetDualWieldAptitude1_SpellID, + SetDualWieldAptitude2_SpellID, + SetDualWieldAptitude3_SpellID, + SetDualWieldAptitude4_SpellID, + SetRecklessnessAptitude1_SpellID, + SetRecklessnessAptitude2_SpellID, + SetRecklessnessAptitude3_SpellID, + SetRecklessnessAptitude4_SpellID, + SetShieldAptitude1_SpellID, + SetShieldAptitude2_SpellID, + SetShieldAptitude3_SpellID, + SetShieldAptitude4_SpellID, + SetSneakAttackAptitude1_SpellID, + SetSneakAttackAptitude2_SpellID, + SetSneakAttackAptitude3_SpellID, + SetSneakAttackAptitude4_SpellID, + GeraineDefeatedHealth_SpellID, + LightningArcBlue_SpellID, + LightningBlastBlue_SpellID, + LightningBoltBlue_SpellID, + LightningStreakBlue_SpellID, + LightningVolleyBlue_SpellID, + LightningBombBlue_SpellID, + PetPenguinMoufProtection_SpellID, + RareArmorDamageBoost1_SpellID, + RareArmorDamageBoost2_SpellID, + RareArmorDamageBoost3_SpellID, + RareArmorDamageBoost4_SpellID, + RareArmorDamageBoost5_SpellID, + CorruptedTouch_Blight_SpellID, + CorruptedTouch_DoT_SpellID, + CorruptedTouch_HealDebuff_SpellID, + truevalueOther1_SpellID, + truevalueOther2_SpellID, + truevalueOther3_SpellID, + truevalueOther4_SpellID, + truevalueOther5_SpellID, + truevalueOther6_SpellID, + truevalueOther7_SpellID, + truevalueOther8_SpellID, + blooddrinkerOther1_SpellID, + blooddrinkerOther2_SpellID, + blooddrinkerOther3_SpellID, + blooddrinkerOther4_SpellID, + blooddrinkerOther5_SpellID, + blooddrinkerOther6_SpellID, + blooddrinkerOther7_SpellID, + blooddrinkerOther8_SpellID, + blooddrinkerOther8cast_SpellID, + defenderOther1_SpellID, + defenderOther2_SpellID, + defenderOther3_SpellID, + defenderOther4_SpellID, + defenderOther5_SpellID, + defenderOther6_SpellID, + defenderOther7_SpellID, + defenderOther8_SpellID, + heartseekerOther1_SpellID, + heartseekerOther2_SpellID, + heartseekerOther3_SpellID, + heartseekerOther4_SpellID, + heartseekerOther5_SpellID, + heartseekerOther6_SpellID, + heartseekerOther7_SpellID, + heartseekerOther8_SpellID, + spiritdrinkerOther1_SpellID, + spiritdrinkerOther2_SpellID, + spiritdrinkerOther3_SpellID, + spiritdrinkerOther4_SpellID, + spiritdrinkerOther5_SpellID, + spiritdrinkerOther6_SpellID, + spiritdrinkerOther7_SpellID, + spiritdrinkerOther8_SpellID, + spiritdrinkerOther8cast_SpellID, + swiftkillerOther1_SpellID, + swiftkillerOther2_SpellID, + swiftkillerOther3_SpellID, + swiftkillerOther4_SpellID, + swiftkillerOther5_SpellID, + swiftkillerOther6_SpellID, + swiftkillerOther7_SpellID, + swiftkillerOther8_SpellID, + PortalSendingNanjouStockade_SpellID, + PortalSendingProvingGrounds5Uber_SpellID, + PortalSendingProvingGrounds2Uber_SpellID, + CantripSpiritofIzexi_SpellID, + NoEscape_SpellID, + FleetingWill_SpellID, + CiderStamina_SpellID, + CantripWeaponExpertise4_SpellID, + CantripAlchemicalProwess4_SpellID, + CantripArcaneProwess4_SpellID, + CantripArmorExpertise4_SpellID, + CantripAxeAptitude4_SpellID, + CantripBowAptitude4_SpellID, + CantripCookingProwess4_SpellID, + CantripCreatureEnchantmentAptitude4_SpellID, + CantripDaggerAptitude4_SpellID, + CantripDeceptionProwess4_SpellID, + CantripDirtyFightingProwess4_SpellID, + CantripDualWieldAptitude4_SpellID, + CantripFealty4_SpellID, + CantripFletchingProwess4_SpellID, + CantripHealingProwess4_SpellID, + CantripImpregnability4_SpellID, + CantripInvulnerability4_SpellID, + CantripItemEnchantmentAptitude4_SpellID, + CantripItemExpertise4_SpellID, + CantripJumpingProwess4_SpellID, + CantripLeadership4_SpellID, + CantripLifeMagicAptitude4_SpellID, + CantripLockpickProwess4_SpellID, + CantripMagicItemExpertise4_SpellID, + CantripMagicResistance4_SpellID, + CantripManaConversionProwess4_SpellID, + CantripMonsterAttunement4_SpellID, + CantripPersonAttunement4_SpellID, + CantripRecklessnessProwess4_SpellID, + CantripSalvaging4_SpellID, + CantripShieldAptitude4_SpellID, + CantripSneakAttackProwess4_SpellID, + CantripSprint4_SpellID, + CantripSwordAptitude4_SpellID, + CantripTwoHandedAptitude4_SpellID, + CantripVoidMagicAptitude4_SpellID, + CantripWarMagicAptitude4_SpellID, + CantripStaminaGain4_SpellID, + CantripHealthGain4_SpellID, + CantripManaGain4_SpellID, + CantripStormWard4_SpellID, + CantripAcidWard4_SpellID, + CantripBludgeoningWard4_SpellID, + CantripFlameWard4_SpellID, + CantripFrostWard4_SpellID, + CantripPiercingWard4_SpellID, + CantripSlashingWard4_SpellID, + CantripHermeticLink3_SpellID, + CantripHermeticLink4_SpellID, + CantripAcidBane4_SpellID, + CantripBloodThirst4_SpellID, + CantripBludgeoningBane4_SpellID, + CantripDefender4_SpellID, + CantripFlameBane4_SpellID, + CantripFrostBane4_SpellID, + CantripHeartThirst4_SpellID, + CantripImpenetrability4_SpellID, + CantripPiercingBane4_SpellID, + CantripSlashingBane4_SpellID, + CantripSpiritThirst4_SpellID, + CantripStormBane4_SpellID, + CantripSwiftHunter4_SpellID, + CantripWillpower4_SpellID, + CantripArmor4_SpellID, + CantripCoordination4_SpellID, + CantripEndurance4_SpellID, + CantripFocus4_SpellID, + CantripQuickness4_SpellID, + CantripStrength4_SpellID, + SummoningMasteryOther1_SpellID, + SummoningMasteryOther2_SpellID, + SummoningMasteryOther3_SpellID, + SummoningMasteryOther4_SpellID, + SummoningMasteryOther5_SpellID, + SummoningMasteryOther6_SpellID, + SummoningMasteryOther7_SpellID, + SummoningMasteryOther8_SpellID, + SummoningMasterySelf1_SpellID, + SummoningMasterySelf2_SpellID, + SummoningMasterySelf3_SpellID, + SummoningMasterySelf4_SpellID, + SummoningMasterySelf5_SpellID, + SummoningMasterySelf6_SpellID, + SummoningMasterySelf7_SpellID, + SummoningMasterySelf8_SpellID, + CantripSummoningProwess3_SpellID, + CantripSummoningProwess4_SpellID, + CantripSummoningProwess2_SpellID, + CantripSummoningProwess1_SpellID, + ModerateSummoningProwess_SpellID, + SummoningIneptitudeOther1_SpellID, + SummoningIneptitudeOther2_SpellID, + SummoningIneptitudeOther3_SpellID, + SummoningIneptitudeOther4_SpellID, + SummoningIneptitudeOther5_SpellID, + SummoningIneptitudeOther6_SpellID, + SummoningIneptitudeOther7_SpellID, + SummoningIneptitudeOther8_SpellID, + CloakSummoningMastery2_SpellID, + CloakSummoningMastery3_SpellID, + CloakSummoningMastery4_SpellID, + CloakSummoningMastery5_SpellID, + CloakSummoningMastery1_SpellID, + SetSummoningAptitude1_SpellID, + SetSummoningAptitude2_SpellID, + SetSummoningAptitude3_SpellID, + SetSummoningAptitude4_SpellID, + RideTheLightning_SpellID, + PortalSendingIceValley_SpellID, + PortalSendingVisitors4_SpellID, + PortalSendingVisitorsVision_SpellID, + RynthidRecall_SpellID, + LightningRingRed_SpellID, + LugianBomb_SpellID, + NumSpells_SpellID = 8192 +} diff --git a/aclogview/Enums/StatTypes.cs b/aclogview/Enums/StatTypes.cs new file mode 100644 index 0000000..8b163f5 --- /dev/null +++ b/aclogview/Enums/StatTypes.cs @@ -0,0 +1,1017 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +public enum GenericQualitiesPackHeader { + Packed_None = 0, + Packed_IntStats = (1 << 0), + Packed_BoolStats = (1 << 1), + Packed_FloatStats = (1 << 2), + Packed_StringStats = (1 << 3) +} + +public enum StatType { + Undef_StatType, + Int_StatType, + Float_StatType, + Position_StatType, + Skill_StatType, + String_StatType, + DataID_StatType, + InstanceID_StatType, + Attribute_StatType, + Attribute_2nd_StatType, + BodyDamageValue_StatType, + BodyDamageVariance_StatType, + BodyArmorValue_StatType, + Bool_StatType, + Int64_StatType, + Num_StatTypes, + DID_StatType = DataID_StatType, + IID_StatType = InstanceID_StatType +} + +public enum STypeAttribute { + UNDEF_ATTRIBUTE, + STRENGTH_ATTRIBUTE, + ENDURANCE_ATTRIBUTE, + QUICKNESS_ATTRIBUTE, + COORDINATION_ATTRIBUTE, + FOCUS_ATTRIBUTE, + SELF_ATTRIBUTE +} + +public enum STypeAttribute2nd { + UNDEF_ATTRIBUTE_2ND, + MAX_HEALTH_ATTRIBUTE_2ND, + HEALTH_ATTRIBUTE_2ND, + MAX_STAMINA_ATTRIBUTE_2ND, + STAMINA_ATTRIBUTE_2ND, + MAX_MANA_ATTRIBUTE_2ND, + MANA_ATTRIBUTE_2ND +} + +public enum STypeBool { + UNDEF_BOOL, + STUCK_BOOL, + OPEN_BOOL, + LOCKED_BOOL, + ROT_PROOF_BOOL, + ALLEGIANCE_UPDATE_REQUEST_BOOL, + AI_USES_MANA_BOOL, + AI_USE_HUMAN_MAGIC_ANIMATIONS_BOOL, + ALLOW_GIVE_BOOL, + CURRENTLY_ATTACKING_BOOL, + ATTACKER_AI_BOOL, + IGNORE_COLLISIONS_BOOL, + REPORT_COLLISIONS_BOOL, + ETHEREAL_BOOL, + GRAVITY_STATUS_BOOL, + LIGHTS_STATUS_BOOL, + SCRIPTED_COLLISION_BOOL, + INELASTIC_BOOL, + VISIBILITY_BOOL, + ATTACKABLE_BOOL, + SAFE_SPELL_COMPONENTS_BOOL, + ADVOCATE_STATE_BOOL, + INSCRIBABLE_BOOL, + DESTROY_ON_SELL_BOOL, + UI_HIDDEN_BOOL, + IGNORE_HOUSE_BARRIERS_BOOL, + HIDDEN_ADMIN_BOOL, + PK_WOUNDER_BOOL, + PK_KILLER_BOOL, + NO_CORPSE_BOOL, + UNDER_LIFESTONE_PROTECTION_BOOL, + ITEM_MANA_UPDATE_PENDING_BOOL, + GENERATOR_STATUS_BOOL, + RESET_MESSAGE_PENDING_BOOL, + DEFAULT_OPEN_BOOL, + DEFAULT_LOCKED_BOOL, + DEFAULT_ON_BOOL, + OPEN_FOR_BUSINESS_BOOL, + IS_FROZEN_BOOL, + DEAL_MAGICAL_ITEMS_BOOL, + LOGOFF_IM_DEAD_BOOL, + REPORT_COLLISIONS_AS_ENVIRONMENT_BOOL, + ALLOW_EDGE_SLIDE_BOOL, + ADVOCATE_QUEST_BOOL, + IS_ADMIN_BOOL, + IS_ARCH_BOOL, + IS_SENTINEL_BOOL, + IS_ADVOCATE_BOOL, + CURRENTLY_POWERING_UP_BOOL, + GENERATOR_ENTERED_WORLD_BOOL, + NEVER_FAIL_CASTING_BOOL, + VENDOR_SERVICE_BOOL, + AI_IMMOBILE_BOOL, + DAMAGED_BY_COLLISIONS_BOOL, + IS_DYNAMIC_BOOL, + IS_HOT_BOOL, + IS_AFFECTING_BOOL, + AFFECTS_AIS_BOOL, + SPELL_QUEUE_ACTIVE_BOOL, + GENERATOR_DISABLED_BOOL, + IS_ACCEPTING_TELLS_BOOL, + LOGGING_CHANNEL_BOOL, + OPENS_ANY_LOCK_BOOL, + UNLIMITED_USE_BOOL, + GENERATED_TREASURE_ITEM_BOOL, + IGNORE_MAGIC_RESIST_BOOL, + IGNORE_MAGIC_ARMOR_BOOL, + AI_ALLOW_TRADE_BOOL, + SPELL_COMPONENTS_REQUIRED_BOOL, + IS_SELLABLE_BOOL, + IGNORE_SHIELDS_BY_SKILL_BOOL, + NODRAW_BOOL, + ACTIVATION_UNTARGETED_BOOL, + HOUSE_HAS_GOTTEN_PRIORITY_BOOT_POS_BOOL, + GENERATOR_AUTOMATIC_DESTRUCTION_BOOL, + HOUSE_HOOKS_VISIBLE_BOOL, + HOUSE_REQUIRES_MONARCH_BOOL, + HOUSE_HOOKS_ENABLED_BOOL, + HOUSE_NOTIFIED_HUD_OF_HOOK_COUNT_BOOL, + AI_ACCEPT_EVERYTHING_BOOL, + IGNORE_PORTAL_RESTRICTIONS_BOOL, + REQUIRES_BACKPACK_SLOT_BOOL, + DONT_TURN_OR_MOVE_WHEN_GIVING_BOOL, + NPC_LOOKS_LIKE_OBJECT_BOOL, + IGNORE_CLO_ICONS_BOOL, + APPRAISAL_HAS_ALLOWED_WIELDER_BOOL, + CHEST_REGEN_ON_CLOSE_BOOL, + LOGOFF_IN_MINIGAME_BOOL, + PORTAL_SHOW_DESTINATION_BOOL, + PORTAL_IGNORES_PK_ATTACK_TIMER_BOOL, + NPC_INTERACTS_SILENTLY_BOOL, + RETAINED_BOOL, + IGNORE_AUTHOR_BOOL, + LIMBO_BOOL, + APPRAISAL_HAS_ALLOWED_ACTIVATOR_BOOL, + EXISTED_BEFORE_ALLEGIANCE_XP_CHANGES_BOOL, + IS_DEAF_BOOL, + IS_PSR_BOOL, + INVINCIBLE_BOOL, + IVORYABLE_BOOL, + DYABLE_BOOL, + CAN_GENERATE_RARE_BOOL, + CORPSE_GENERATED_RARE_BOOL, + NON_PROJECTILE_MAGIC_IMMUNE_BOOL, + ACTD_RECEIVED_ITEMS_BOOL, + UNKNOWN__GUESSEDNAME, // NOTE: Missing 1 + FIRST_ENTER_WORLD_DONE_BOOL, + RECALLS_DISABLED_BOOL, + RARE_USES_TIMER_BOOL, + ACTD_PREORDER_RECEIVED_ITEMS_BOOL, + AFK_BOOL, + IS_GAGGED_BOOL, + PROC_SPELL_SELF_TARGETED_BOOL, + IS_ALLEGIANCE_GAGGED_BOOL, + EQUIPMENT_SET_TRIGGER_PIECE_BOOL, + UNINSCRIBE_BOOL, + WIELD_ON_USE_BOOL, + CHEST_CLEARED_WHEN_CLOSED_BOOL, + NEVER_ATTACK_BOOL, + SUPPRESS_GENERATE_EFFECT_BOOL, + TREASURE_CORPSE_BOOL, + EQUIPMENT_SET_ADD_LEVEL_BOOL, + BARBER_ACTIVE_BOOL, + TOP_LAYER_PRIORITY_BOOL, + NO_HELD_ITEM_SHOWN_BOOL, + LOGIN_AT_LIFESTONE_BOOL, + OLTHOI_PK_BOOL, + ACCOUNT_15_DAYS_BOOL, + HAD_NO_VITAE_BOOL, + NO_OLTHOI_TALK_BOOL, + AUTOWIELD_LEFT_BOOL +} + +public enum STypeDID { + UNDEF_DID, + SETUP_DID, + MOTION_TABLE_DID, + SOUND_TABLE_DID, + COMBAT_TABLE_DID, + QUALITY_FILTER_DID, + PALETTE_BASE_DID, + CLOTHINGBASE_DID, + ICON_DID, + EYES_TEXTURE_DID, + NOSE_TEXTURE_DID, + MOUTH_TEXTURE_DID, + DEFAULT_EYES_TEXTURE_DID, + DEFAULT_NOSE_TEXTURE_DID, + DEFAULT_MOUTH_TEXTURE_DID, + HAIR_PALETTE_DID, + EYES_PALETTE_DID, + SKIN_PALETTE_DID, + HEAD_OBJECT_DID, + ACTIVATION_ANIMATION_DID, + INIT_MOTION_DID, + ACTIVATION_SOUND_DID, + PHYSICS_EFFECT_TABLE_DID, + USE_SOUND_DID, + USE_TARGET_ANIMATION_DID, + USE_TARGET_SUCCESS_ANIMATION_DID, + USE_TARGET_FAILURE_ANIMATION_DID, + USE_USER_ANIMATION_DID, + SPELL_DID, + SPELL_COMPONENT_DID, + PHYSICS_SCRIPT_DID, + LINKED_PORTAL_ONE_DID, + WIELDED_TREASURE_TYPE_DID, + UNKNOWN_GUESSEDNAME, // NOTE: Missing 1 + UNKNOWN_GUESSEDNAME2, // NOTE: Missing 1 + DEATH_TREASURE_TYPE_DID, + MUTATE_FILTER_DID, + ITEM_SKILL_LIMIT_DID, + USE_CREATE_ITEM_DID, + DEATH_SPELL_DID, + VENDORS_CLASSID_DID, + ITEM_SPECIALIZED_ONLY_DID, + HOUSEID_DID, + ACCOUNT_HOUSEID_DID, + RESTRICTION_EFFECT_DID, + CREATION_MUTATION_FILTER_DID, + TSYS_MUTATION_FILTER_DID, + LAST_PORTAL_DID, + LINKED_PORTAL_TWO_DID, + ORIGINAL_PORTAL_DID, + ICON_OVERLAY_DID, + ICON_OVERLAY_SECONDARY_DID, + ICON_UNDERLAY_DID, + AUGMENTATION_MUTATION_FILTER_DID, + AUGMENTATION_EFFECT_DID, + PROC_SPELL_DID, + AUGMENTATION_CREATE_ITEM_DID, + ALTERNATE_CURRENCY_DID, + BLUE_SURGE_SPELL_DID, + YELLOW_SURGE_SPELL_DID, + RED_SURGE_SPELL_DID, + OLTHOI_DEATH_TREASURE_TYPE_DID +} + +public enum STypeFloat { + UNDEF_FLOAT, + HEARTBEAT_INTERVAL_FLOAT, + HEARTBEAT_TIMESTAMP_FLOAT, + HEALTH_RATE_FLOAT, + STAMINA_RATE_FLOAT, + MANA_RATE_FLOAT, + HEALTH_UPON_RESURRECTION_FLOAT, + STAMINA_UPON_RESURRECTION_FLOAT, + MANA_UPON_RESURRECTION_FLOAT, + START_TIME_FLOAT, + STOP_TIME_FLOAT, + RESET_INTERVAL_FLOAT, + SHADE_FLOAT, + ARMOR_MOD_VS_SLASH_FLOAT, + ARMOR_MOD_VS_PIERCE_FLOAT, + ARMOR_MOD_VS_BLUDGEON_FLOAT, + ARMOR_MOD_VS_COLD_FLOAT, + ARMOR_MOD_VS_FIRE_FLOAT, + ARMOR_MOD_VS_ACID_FLOAT, + ARMOR_MOD_VS_ELECTRIC_FLOAT, + COMBAT_SPEED_FLOAT, + WEAPON_LENGTH_FLOAT, + DAMAGE_VARIANCE_FLOAT, + CURRENT_POWER_MOD_FLOAT, + ACCURACY_MOD_FLOAT, + STRENGTH_MOD_FLOAT, + MAXIMUM_VELOCITY_FLOAT, + ROTATION_SPEED_FLOAT, + MOTION_TIMESTAMP_FLOAT, + WEAPON_DEFENSE_FLOAT, + WIMPY_LEVEL_FLOAT, + VISUAL_AWARENESS_RANGE_FLOAT, + AURAL_AWARENESS_RANGE_FLOAT, + PERCEPTION_LEVEL_FLOAT, + POWERUP_TIME_FLOAT, + MAX_CHARGE_DISTANCE_FLOAT, + CHARGE_SPEED_FLOAT, + BUY_PRICE_FLOAT, + SELL_PRICE_FLOAT, + DEFAULT_SCALE_FLOAT, + LOCKPICK_MOD_FLOAT, + REGENERATION_INTERVAL_FLOAT, + REGENERATION_TIMESTAMP_FLOAT, + GENERATOR_RADIUS_FLOAT, + TIME_TO_ROT_FLOAT, + DEATH_TIMESTAMP_FLOAT, + PK_TIMESTAMP_FLOAT, + VICTIM_TIMESTAMP_FLOAT, + LOGIN_TIMESTAMP_FLOAT, + CREATION_TIMESTAMP_FLOAT, + MINIMUM_TIME_SINCE_PK_FLOAT, + DEPRECATED_HOUSEKEEPING_PRIORITY_FLOAT, + ABUSE_LOGGING_TIMESTAMP_FLOAT, + LAST_PORTAL_TELEPORT_TIMESTAMP_FLOAT, + USE_RADIUS_FLOAT, + HOME_RADIUS_FLOAT, + RELEASED_TIMESTAMP_FLOAT, + MIN_HOME_RADIUS_FLOAT, + FACING_FLOAT, + RESET_TIMESTAMP_FLOAT, + LOGOFF_TIMESTAMP_FLOAT, + ECON_RECOVERY_INTERVAL_FLOAT, + WEAPON_OFFENSE_FLOAT, + DAMAGE_MOD_FLOAT, + RESIST_SLASH_FLOAT, + RESIST_PIERCE_FLOAT, + RESIST_BLUDGEON_FLOAT, + RESIST_FIRE_FLOAT, + RESIST_COLD_FLOAT, + RESIST_ACID_FLOAT, + RESIST_ELECTRIC_FLOAT, + RESIST_HEALTH_BOOST_FLOAT, + RESIST_STAMINA_DRAIN_FLOAT, + RESIST_STAMINA_BOOST_FLOAT, + RESIST_MANA_DRAIN_FLOAT, + RESIST_MANA_BOOST_FLOAT, + TRANSLUCENCY_FLOAT, + PHYSICS_SCRIPT_INTENSITY_FLOAT, + FRICTION_FLOAT, + ELASTICITY_FLOAT, + AI_USE_MAGIC_DELAY_FLOAT, + ITEM_MIN_SPELLCRAFT_MOD_FLOAT, + ITEM_MAX_SPELLCRAFT_MOD_FLOAT, + ITEM_RANK_PROBABILITY_FLOAT, + SHADE2_FLOAT, + SHADE3_FLOAT, + SHADE4_FLOAT, + ITEM_EFFICIENCY_FLOAT, + ITEM_MANA_UPDATE_TIMESTAMP_FLOAT, + SPELL_GESTURE_SPEED_MOD_FLOAT, + SPELL_STANCE_SPEED_MOD_FLOAT, + ALLEGIANCE_APPRAISAL_TIMESTAMP_FLOAT, + POWER_LEVEL_FLOAT, + ACCURACY_LEVEL_FLOAT, + ATTACK_ANGLE_FLOAT, + ATTACK_TIMESTAMP_FLOAT, + CHECKPOINT_TIMESTAMP_FLOAT, + SOLD_TIMESTAMP_FLOAT, + USE_TIMESTAMP_FLOAT, + USE_LOCK_TIMESTAMP_FLOAT, + HEALKIT_MOD_FLOAT, + FROZEN_TIMESTAMP_FLOAT, + HEALTH_RATE_MOD_FLOAT, + ALLEGIANCE_SWEAR_TIMESTAMP_FLOAT, + OBVIOUS_RADAR_RANGE_FLOAT, + HOTSPOT_CYCLE_TIME_FLOAT, + HOTSPOT_CYCLE_TIME_VARIANCE_FLOAT, + SPAM_TIMESTAMP_FLOAT, + SPAM_RATE_FLOAT, + BOND_WIELDED_TREASURE_FLOAT, + BULK_MOD_FLOAT, + SIZE_MOD_FLOAT, + GAG_TIMESTAMP_FLOAT, + GENERATOR_UPDATE_TIMESTAMP_FLOAT, + DEATH_SPAM_TIMESTAMP_FLOAT, + DEATH_SPAM_RATE_FLOAT, + WILD_ATTACK_PROBABILITY_FLOAT, + FOCUSED_PROBABILITY_FLOAT, + CRASH_AND_TURN_PROBABILITY_FLOAT, + CRASH_AND_TURN_RADIUS_FLOAT, + CRASH_AND_TURN_BIAS_FLOAT, + GENERATOR_INITIAL_DELAY_FLOAT, + AI_ACQUIRE_HEALTH_FLOAT, + AI_ACQUIRE_STAMINA_FLOAT, + AI_ACQUIRE_MANA_FLOAT, + RESIST_HEALTH_DRAIN_FLOAT, + LIFESTONE_PROTECTION_TIMESTAMP_FLOAT, + AI_COUNTERACT_ENCHANTMENT_FLOAT, + AI_DISPEL_ENCHANTMENT_FLOAT, + TRADE_TIMESTAMP_FLOAT, + AI_TARGETED_DETECTION_RADIUS_FLOAT, + EMOTE_PRIORITY_FLOAT, + LAST_TELEPORT_START_TIMESTAMP_FLOAT, + EVENT_SPAM_TIMESTAMP_FLOAT, + EVENT_SPAM_RATE_FLOAT, + INVENTORY_OFFSET_FLOAT, + CRITICAL_MULTIPLIER_FLOAT, + MANA_STONE_DESTROY_CHANCE_FLOAT, + SLAYER_DAMAGE_BONUS_FLOAT, + ALLEGIANCE_INFO_SPAM_TIMESTAMP_FLOAT, + ALLEGIANCE_INFO_SPAM_RATE_FLOAT, + NEXT_SPELLCAST_TIMESTAMP_FLOAT, + APPRAISAL_REQUESTED_TIMESTAMP_FLOAT, + APPRAISAL_HEARTBEAT_DUE_TIMESTAMP_FLOAT, + MANA_CONVERSION_MOD_FLOAT, + LAST_PK_ATTACK_TIMESTAMP_FLOAT, + FELLOWSHIP_UPDATE_TIMESTAMP_FLOAT, + CRITICAL_FREQUENCY_FLOAT, + LIMBO_START_TIMESTAMP_FLOAT, + WEAPON_MISSILE_DEFENSE_FLOAT, + WEAPON_MAGIC_DEFENSE_FLOAT, + IGNORE_SHIELD_FLOAT, + ELEMENTAL_DAMAGE_MOD_FLOAT, + START_MISSILE_ATTACK_TIMESTAMP_FLOAT, + LAST_RARE_USED_TIMESTAMP_FLOAT, + IGNORE_ARMOR_FLOAT, + PROC_SPELL_RATE_FLOAT, + RESISTANCE_MODIFIER_FLOAT, + ALLEGIANCE_GAG_TIMESTAMP_FLOAT, + ABSORB_MAGIC_DAMAGE_FLOAT, + CACHED_MAX_ABSORB_MAGIC_DAMAGE_FLOAT, + GAG_DURATION_FLOAT, + ALLEGIANCE_GAG_DURATION_FLOAT, + GLOBAL_XP_MOD_FLOAT, + HEALING_MODIFIER_FLOAT, + ARMOR_MOD_VS_NETHER_FLOAT, + RESIST_NETHER_FLOAT, + COOLDOWN_DURATION_FLOAT, + WEAPON_AURA_OFFENSE_FLOAT, + WEAPON_AURA_DEFENSE_FLOAT, + WEAPON_AURA_ELEMENTAL_FLOAT, + WEAPON_AURA_MANA_CONV_FLOAT +} + +public enum STypeInt { + UNDEF_INT, + ITEM_TYPE_INT, + CREATURE_TYPE_INT, + PALETTE_TEMPLATE_INT, + CLOTHING_PRIORITY_INT, + ENCUMB_VAL_INT, + ITEMS_CAPACITY_INT, + CONTAINERS_CAPACITY_INT, + MASS_INT, + LOCATIONS_INT, + CURRENT_WIELDED_LOCATION_INT, + MAX_STACK_SIZE_INT, + STACK_SIZE_INT, + STACK_UNIT_ENCUMB_INT, + STACK_UNIT_MASS_INT, + STACK_UNIT_VALUE_INT, + ITEM_USEABLE_INT, + RARE_ID_INT, + UI_EFFECTS_INT, + VALUE_INT, + COIN_VALUE_INT, + TOTAL_EXPERIENCE_INT, + AVAILABLE_CHARACTER_INT, + TOTAL_SKILL_CREDITS_INT, + AVAILABLE_SKILL_CREDITS_INT, + LEVEL_INT, + ACCOUNT_REQUIREMENTS_INT, + ARMOR_TYPE_INT, + ARMOR_LEVEL_INT, + ALLEGIANCE_CP_POOL_INT, + ALLEGIANCE_RANK_INT, + CHANNELS_ALLOWED_INT, + CHANNELS_ACTIVE_INT, + BONDED_INT, + MONARCHS_RANK_INT, + ALLEGIANCE_FOLLOWERS_INT, + RESIST_MAGIC_INT, + RESIST_ITEM_APPRAISAL_INT, + RESIST_LOCKPICK_INT, + DEPRECATED_RESIST_REPAIR_INT, + COMBAT_MODE_INT, + CURRENT_ATTACK_HEIGHT_INT, + COMBAT_COLLISIONS_INT, + NUM_DEATHS_INT, + DAMAGE_INT, + DAMAGE_TYPE_INT, + DEFAULT_COMBAT_STYLE_INT, + ATTACK_TYPE_INT, + WEAPON_SKILL_INT, + WEAPON_TIME_INT, + AMMO_TYPE_INT, + COMBAT_USE_INT, + PARENT_LOCATION_INT, + PLACEMENT_POSITION_INT, + WEAPON_ENCUMBRANCE_INT, + WEAPON_MASS_INT, + SHIELD_VALUE_INT, + SHIELD_ENCUMBRANCE_INT, + MISSILE_INVENTORY_LOCATION_INT, + FULL_DAMAGE_TYPE_INT, + WEAPON_RANGE_INT, + ATTACKERS_SKILL_INT, + DEFENDERS_SKILL_INT, + ATTACKERS_SKILL_VALUE_INT, + ATTACKERS_CLASS_INT, + PLACEMENT_INT, + CHECKPOINT_STATUS_INT, + TOLERANCE_INT, + TARGETING_TACTIC_INT, + COMBAT_TACTIC_INT, + HOMESICK_TARGETING_TACTIC_INT, + NUM_FOLLOW_FAILURES_INT, + FRIEND_TYPE_INT, + FOE_TYPE_INT, + MERCHANDISE_ITEM_TYPES_INT, + MERCHANDISE_MIN_VALUE_INT, + MERCHANDISE_MAX_VALUE_INT, + NUM_ITEMS_SOLD_INT, + NUM_ITEMS_BOUGHT_INT, + MONEY_INCOME_INT, + MONEY_OUTFLOW_INT, + MAX_GENERATED_OBJECTS_INT, + INIT_GENERATED_OBJECTS_INT, + ACTIVATION_RESPONSE_INT, + ORIGINAL_VALUE_INT, + NUM_MOVE_FAILURES_INT, + MIN_LEVEL_INT, + MAX_LEVEL_INT, + LOCKPICK_MOD_INT, + BOOSTER_ENUM_INT, + BOOST_VALUE_INT, + MAX_STRUCTURE_INT, + STRUCTURE_INT, + PHYSICS_STATE_INT, + TARGET_TYPE_INT, + RADARBLIP_COLOR_INT, + ENCUMB_CAPACITY_INT, + LOGIN_TIMESTAMP_INT, + CREATION_TIMESTAMP_INT, + PK_LEVEL_MODIFIER_INT, + GENERATOR_TYPE_INT, + AI_ALLOWED_COMBAT_STYLE_INT, + LOGOFF_TIMESTAMP_INT, + GENERATOR_DESTRUCTION_TYPE_INT, + ACTIVATION_CREATE_CLASS_INT, + ITEM_WORKMANSHIP_INT, + ITEM_SPELLCRAFT_INT, + ITEM_CUR_MANA_INT, + ITEM_MAX_MANA_INT, + ITEM_DIFFICULTY_INT, + ITEM_ALLEGIANCE_RANK_LIMIT_INT, + PORTAL_BITMASK_INT, + ADVOCATE_LEVEL_INT, + GENDER_INT, + ATTUNED_INT, + ITEM_SKILL_LEVEL_LIMIT_INT, + GATE_LOGIC_INT, + ITEM_MANA_COST_INT, + LOGOFF_INT, + ACTIVE_INT, + ATTACK_HEIGHT_INT, + NUM_ATTACK_FAILURES_INT, + AI_CP_THRESHOLD_INT, + AI_ADVANCEMENT_STRATEGY_INT, + VERSION_INT, + AGE_INT, + VENDOR_HAPPY_MEAN_INT, + VENDOR_HAPPY_VARIANCE_INT, + CLOAK_STATUS_INT, + VITAE_CP_POOL_INT, + NUM_SERVICES_SOLD_INT, + MATERIAL_TYPE_INT, + NUM_ALLEGIANCE_BREAKS_INT, + SHOWABLE_ON_RADAR_INT, + PLAYER_KILLER_STATUS_INT, + VENDOR_HAPPY_MAX_ITEMS_INT, + SCORE_PAGE_NUM_INT, + SCORE_CONFIG_NUM_INT, + SCORE_NUM_SCORES_INT, + DEATH_LEVEL_INT, + AI_OPTIONS_INT, + OPEN_TO_EVERYONE_INT, + GENERATOR_TIME_TYPE_INT, + GENERATOR_START_TIME_INT, + GENERATOR_END_TIME_INT, + GENERATOR_END_DESTRUCTION_TYPE_INT, + XP_OVERRIDE_INT, + NUM_CRASH_AND_TURNS_INT, + COMPONENT_WARNING_THRESHOLD_INT, + HOUSE_STATUS_INT, + HOOK_PLACEMENT_INT, + HOOK_TYPE_INT, + HOOK_ITEM_TYPE_INT, + AI_PP_THRESHOLD_INT, + GENERATOR_VERSION_INT, + HOUSE_TYPE_INT, + PICKUP_EMOTE_OFFSET_INT, + WEENIE_ITERATION_INT, + WIELD_REQUIREMENTS_INT, + WIELD_SKILLTYPE_INT, + WIELD_DIFFICULTY_INT, + HOUSE_MAX_HOOKS_USABLE_INT, + HOUSE_CURRENT_HOOKS_USABLE_INT, + ALLEGIANCE_MIN_LEVEL_INT, + ALLEGIANCE_MAX_LEVEL_INT, + HOUSE_RELINK_HOOK_COUNT_INT, + SLAYER_CREATURE_TYPE_INT, + CONFIRMATION_IN_PROGRESS_INT, + CONFIRMATION_TYPE_IN_PROGRESS_INT, + TSYS_MUTATION_DATA_INT, + NUM_ITEMS_IN_MATERIAL_INT, + NUM_TIMES_TINKERED_INT, + APPRAISAL_LONG_DESC_DECORATION_INT, + APPRAISAL_LOCKPICK_SUCCESS_PERCENT_INT, + APPRAISAL_PAGES_INT, + APPRAISAL_MAX_PAGES_INT, + APPRAISAL_ITEM_SKILL_INT, + GEM_COUNT_INT, + GEM_TYPE_INT, + IMBUED_EFFECT_INT, + ATTACKERS_RAW_SKILL_VALUE_INT, + CHESS_RANK_INT, + CHESS_TOTALGAMES_INT, + CHESS_GAMESWON_INT, + CHESS_GAMESLOST_INT, + TYPE_OF_ALTERATION_INT, + SKILL_TO_BE_ALTERED_INT, + SKILL_ALTERATION_COUNT_INT, + HERITAGE_GROUP_INT, + TRANSFER_FROM_ATTRIBUTE_INT, + TRANSFER_TO_ATTRIBUTE_INT, + ATTRIBUTE_TRANSFER_COUNT_INT, + FAKE_FISHING_SKILL_INT, + NUM_KEYS_INT, + DEATH_TIMESTAMP_INT, + PK_TIMESTAMP_INT, + VICTIM_TIMESTAMP_INT, + HOOK_GROUP_INT, + ALLEGIANCE_SWEAR_TIMESTAMP_INT, + HOUSE_PURCHASE_TIMESTAMP_INT, + REDIRECTABLE_EQUIPPED_ARMOR_COUNT_INT, + MELEEDEFENSE_IMBUEDEFFECTTYPE_CACHE_INT, + MISSILEDEFENSE_IMBUEDEFFECTTYPE_CACHE_INT, + MAGICDEFENSE_IMBUEDEFFECTTYPE_CACHE_INT, + ELEMENTAL_DAMAGE_BONUS_INT, + IMBUE_ATTEMPTS_INT, + IMBUE_SUCCESSES_INT, + CREATURE_KILLS_INT, + PLAYER_KILLS_PK_INT, + PLAYER_KILLS_PKL_INT, + RARES_TIER_ONE_INT, + RARES_TIER_TWO_INT, + RARES_TIER_THREE_INT, + RARES_TIER_FOUR_INT, + RARES_TIER_FIVE_INT, + AUGMENTATION_STAT_INT, + AUGMENTATION_FAMILY_STAT_INT, + AUGMENTATION_INNATE_FAMILY_INT, + AUGMENTATION_INNATE_STRENGTH_INT, + AUGMENTATION_INNATE_ENDURANCE_INT, + AUGMENTATION_INNATE_COORDINATION_INT, + AUGMENTATION_INNATE_QUICKNESS_INT, + AUGMENTATION_INNATE_FOCUS_INT, + AUGMENTATION_INNATE_SELF_INT, + AUGMENTATION_SPECIALIZE_SALVAGING_INT, + AUGMENTATION_SPECIALIZE_ITEM_TINKERING_INT, + AUGMENTATION_SPECIALIZE_ARMOR_TINKERING_INT, + AUGMENTATION_SPECIALIZE_MAGIC_ITEM_TINKERING_INT, + AUGMENTATION_SPECIALIZE_WEAPON_TINKERING_INT, + AUGMENTATION_EXTRA_PACK_SLOT_INT, + AUGMENTATION_INCREASED_CARRYING_CAPACITY_INT, + AUGMENTATION_LESS_DEATH_ITEM_LOSS_INT, + AUGMENTATION_SPELLS_REMAIN_PAST_DEATH_INT, + AUGMENTATION_CRITICAL_DEFENSE_INT, + AUGMENTATION_BONUS_XP_INT, + AUGMENTATION_BONUS_SALVAGE_INT, + AUGMENTATION_BONUS_IMBUE_CHANCE_INT, + AUGMENTATION_FASTER_REGEN_INT, + AUGMENTATION_INCREASED_SPELL_DURATION_INT, + AUGMENTATION_RESISTANCE_FAMILY_INT, + AUGMENTATION_RESISTANCE_SLASH_INT, + AUGMENTATION_RESISTANCE_PIERCE_INT, + AUGMENTATION_RESISTANCE_BLUNT_INT, + AUGMENTATION_RESISTANCE_ACID_INT, + AUGMENTATION_RESISTANCE_FIRE_INT, + AUGMENTATION_RESISTANCE_FROST_INT, + AUGMENTATION_RESISTANCE_LIGHTNING_INT, + RARES_TIER_ONE_LOGIN_INT, + RARES_TIER_TWO_LOGIN_INT, + RARES_TIER_THREE_LOGIN_INT, + RARES_TIER_FOUR_LOGIN_INT, + RARES_TIER_FIVE_LOGIN_INT, + RARES_LOGIN_TIMESTAMP_INT, + RARES_TIER_SIX_INT, + RARES_TIER_SEVEN_INT, + RARES_TIER_SIX_LOGIN_INT, + RARES_TIER_SEVEN_LOGIN_INT, + ITEM_ATTRIBUTE_LIMIT_INT, + ITEM_ATTRIBUTE_LEVEL_LIMIT_INT, + ITEM_ATTRIBUTE_2ND_LIMIT_INT, + ITEM_ATTRIBUTE_2ND_LEVEL_LIMIT_INT, + CHARACTER_TITLE_ID_INT, + NUM_CHARACTER_TITLES_INT, + RESISTANCE_MODIFIER_TYPE_INT, + FREE_TINKERS_BITFIELD_INT, + EQUIPMENT_SET_ID_INT, + PET_CLASS_INT, + LIFESPAN_INT, + REMAINING_LIFESPAN_INT, + USE_CREATE_QUANTITY_INT, + WIELD_REQUIREMENTS_2_INT, + WIELD_SKILLTYPE_2_INT, + WIELD_DIFFICULTY_2_INT, + WIELD_REQUIREMENTS_3_INT, + WIELD_SKILLTYPE_3_INT, + WIELD_DIFFICULTY_3_INT, + WIELD_REQUIREMENTS_4_INT, + WIELD_SKILLTYPE_4_INT, + WIELD_DIFFICULTY_4_INT, + UNIQUE_INT, + SHARED_COOLDOWN_INT, + FACTION1_BITS_INT, + FACTION2_BITS_INT, + FACTION3_BITS_INT, + HATRED1_BITS_INT, + HATRED2_BITS_INT, + HATRED3_BITS_INT, + SOCIETY_RANK_CELHAN_INT, + SOCIETY_RANK_ELDWEB_INT, + SOCIETY_RANK_RADBLO_INT, + HEAR_LOCAL_SIGNALS_INT, + HEAR_LOCAL_SIGNALS_RADIUS_INT, + CLEAVING_INT, + AUGMENTATION_SPECIALIZE_GEARCRAFT_INT, + AUGMENTATION_INFUSED_CREATURE_MAGIC_INT, + AUGMENTATION_INFUSED_ITEM_MAGIC_INT, + AUGMENTATION_INFUSED_LIFE_MAGIC_INT, + AUGMENTATION_INFUSED_WAR_MAGIC_INT, + AUGMENTATION_CRITICAL_EXPERTISE_INT, + AUGMENTATION_CRITICAL_POWER_INT, + AUGMENTATION_SKILLED_MELEE_INT, + AUGMENTATION_SKILLED_MISSILE_INT, + AUGMENTATION_SKILLED_MAGIC_INT, + IMBUED_EFFECT_2_INT, + IMBUED_EFFECT_3_INT, + IMBUED_EFFECT_4_INT, + IMBUED_EFFECT_5_INT, + DAMAGE_RATING_INT, + DAMAGE_RESIST_RATING_INT, + AUGMENTATION_DAMAGE_BONUS_INT, + AUGMENTATION_DAMAGE_REDUCTION_INT, + IMBUE_STACKING_BITS_INT, + HEAL_OVER_TIME_INT, + CRIT_RATING_INT, + CRIT_DAMAGE_RATING_INT, + CRIT_RESIST_RATING_INT, + CRIT_DAMAGE_RESIST_RATING_INT, + HEALING_RESIST_RATING_INT, + DAMAGE_OVER_TIME_INT, + ITEM_MAX_LEVEL_INT, + ITEM_XP_STYLE_INT, + EQUIPMENT_SET_EXTRA_INT, + AETHERIA_BITFIELD_INT, + HEALING_BOOST_RATING_INT, + HERITAGE_SPECIFIC_ARMOR_INT, + ALTERNATE_RACIAL_SKILLS_INT, + AUGMENTATION_JACK_OF_ALL_TRADES_INT, + AUGMENTATION_RESISTANCE_NETHER_INT, + AUGMENTATION_INFUSED_VOID_MAGIC_INT, + WEAKNESS_RATING_INT, + NETHER_OVER_TIME_INT, + NETHER_RESIST_RATING_INT, + LUMINANCE_AWARD_INT, + LUM_AUG_DAMAGE_RATING_INT, + LUM_AUG_DAMAGE_REDUCTION_RATING_INT, + LUM_AUG_CRIT_DAMAGE_RATING_INT, + LUM_AUG_CRIT_REDUCTION_RATING_INT, + LUM_AUG_SURGE_EFFECT_RATING_INT, + LUM_AUG_SURGE_CHANCE_RATING_INT, + LUM_AUG_ITEM_MANA_USAGE_INT, + LUM_AUG_ITEM_MANA_GAIN_INT, + LUM_AUG_VITALITY_INT, + LUM_AUG_HEALING_RATING_INT, + LUM_AUG_SKILLED_CRAFT_INT, + LUM_AUG_SKILLED_SPEC_INT, + LUM_AUG_NO_DESTROY_CRAFT_INT, + RESTRICT_INTERACTION_INT, + OLTHOI_LOOT_TIMESTAMP_INT, + OLTHOI_LOOT_STEP_INT, + USE_CREATES_CONTRACT_ID_INT, + DOT_RESIST_RATING_INT, + LIFE_RESIST_RATING_INT, + CLOAK_WEAVE_PROC_INT, + WEAPON_TYPE_INT, + MELEE_MASTERY_INT, + RANGED_MASTERY_INT, + SNEAK_ATTACK_RATING_INT, + RECKLESSNESS_RATING_INT, + DECEPTION_RATING_INT, + COMBAT_PET_RANGE_INT, + WEAPON_AURA_DAMAGE_INT, + WEAPON_AURA_SPEED_INT, + SUMMONING_MASTERY_INT, + HEARTBEAT_LIFESPAN_INT, + USE_LEVEL_REQUIREMENT_INT, + LUM_AUG_ALL_SKILLS_INT, + USE_REQUIRES_SKILL_INT, + USE_REQUIRES_SKILL_LEVEL_INT, + USE_REQUIRES_SKILL_SPEC_INT, + USE_REQUIRES_LEVEL_INT, + GEAR_DAMAGE_INT, + GEAR_DAMAGE_RESIST_INT, + GEAR_CRIT_INT, + GEAR_CRIT_RESIST_INT, + GEAR_CRIT_DAMAGE_INT, + GEAR_CRIT_DAMAGE_RESIST_INT, + GEAR_HEALING_BOOST_INT, + GEAR_NETHER_RESIST_INT, + GEAR_LIFE_RESIST_INT, + GEAR_MAX_HEALTH_INT +} + +public enum STypeInt64 { + UNDEF_INT64, + TOTAL_EXPERIENCE_INT64, + AVAILABLE_EXPERIENCE_INT64, + AUGMENTATION_COST_INT64, + ITEM_TOTAL_XP_INT64, + ITEM_BASE_XP_INT64, + AVAILABLE_LUMINANCE_INT64, + MAXIMUM_LUMINANCE_INT64, + INTERACTION_REQS_INT64 +} + +public enum STypeIID { + UNDEF_IID, + OWNER_IID, + CONTAINER_IID, + WIELDER_IID, + FREEZER_IID, + VIEWER_IID, + GENERATOR_IID, + SCRIBE_IID, + CURRENT_COMBAT_TARGET_IID, + CURRENT_ENEMY_IID, + PROJECTILE_LAUNCHER_IID, + CURRENT_ATTACKER_IID, + CURRENT_DAMAGER_IID, + CURRENT_FOLLOW_TARGET_IID, + CURRENT_APPRAISAL_TARGET_IID, + CURRENT_FELLOWSHIP_APPRAISAL_TARGET_IID, + ACTIVATION_TARGET_IID, + CREATOR_IID, + VICTIM_IID, + KILLER_IID, + VENDOR_IID, + CUSTOMER_IID, + BONDED_IID, + WOUNDER_IID, + ALLEGIANCE_IID, + PATRON_IID, + MONARCH_IID, + COMBAT_TARGET_IID, + HEALTH_QUERY_TARGET_IID, + LAST_UNLOCKER_IID, + CRASH_AND_TURN_TARGET_IID, + ALLOWED_ACTIVATOR_IID, + HOUSE_OWNER_IID, + HOUSE_IID, + SLUMLORD_IID, + MANA_QUERY_TARGET_IID, + CURRENT_GAME_IID, + REQUESTED_APPRAISAL_TARGET_IID, + ALLOWED_WIELDER_IID, + ASSIGNED_TARGET_IID, + LIMBO_SOURCE_IID, + SNOOPER_IID, + TELEPORTED_CHARACTER_IID, + PET_IID, + PET_OWNER_IID, + PET_DEVICE_IID +} + +public enum STypePosition { + UNDEF_POSITION, + LOCATION_POSITION, + DESTINATION_POSITION, + INSTANTIATION_POSITION, + SANCTUARY_POSITION, + HOME_POSITION, + ACTIVATION_MOVE_POSITION, + TARGET_POSITION, + LINKED_PORTAL_ONE_POSITION, + LAST_PORTAL_POSITION, + PORTAL_STORM_POSITION, + CRASH_AND_TURN_POSITION, + PORTAL_SUMMON_LOC_POSITION, + HOUSE_BOOT_POSITION, + LAST_OUTSIDE_DEATH_POSITION, + LINKED_LIFESTONE_POSITION, + LINKED_PORTAL_TWO_POSITION, + SAVE_1_POSITION, + SAVE_2_POSITION, + SAVE_3_POSITION, + SAVE_4_POSITION, + SAVE_5_POSITION, + SAVE_6_POSITION, + SAVE_7_POSITION, + SAVE_8_POSITION, + SAVE_9_POSITION, + RELATIVE_DESTINATION_POSITION, + TELEPORTED_CHARACTER_POSITION +} + +public enum STypeSkill { + UNDEF_SKILL, + AXE_SKILL, + BOW_SKILL, + CROSSBOW_SKILL, + DAGGER_SKILL, + MACE_SKILL, + MELEE_DEFENSE_SKILL, + MISSILE_DEFENSE_SKILL, + SLING_SKILL, + SPEAR_SKILL, + STAFF_SKILL, + SWORD_SKILL, + THROWN_WEAPON_SKILL, + UNARMED_COMBAT_SKILL, + ARCANE_LORE_SKILL, + MAGIC_DEFENSE_SKILL, + MANA_CONVERSION_SKILL, + SPELLCRAFT_SKILL, + ITEM_APPRAISAL_SKILL, + PERSONAL_APPRAISAL_SKILL, + DECEPTION_SKILL, + HEALING_SKILL, + JUMP_SKILL, + LOCKPICK_SKILL, + RUN_SKILL, + AWARENESS_SKILL, + ARMS_AND_ARMOR_REPAIR_SKILL, + CREATURE_APPRAISAL_SKILL, + WEAPON_APPRAISAL_SKILL, + ARMOR_APPRAISAL_SKILL, + MAGIC_ITEM_APPRAISAL_SKILL, + CREATURE_ENCHANTMENT_SKILL, + ITEM_ENCHANTMENT_SKILL, + LIFE_MAGIC_SKILL, + WAR_MAGIC_SKILL, + LEADERSHIP_SKILL, + LOYALTY_SKILL, + FLETCHING_SKILL, + ALCHEMY_SKILL, + COOKING_SKILL, + SALVAGING_SKILL, + TWO_HANDED_COMBAT_SKILL, + GEARCRAFT_SKILL, + VOID_MAGIC_SKILL, + HEAVY_WEAPONS_SKILL, + LIGHT_WEAPONS_SKILL, + FINESSE_WEAPONS_SKILL, + MISSILE_WEAPONS_SKILL, + SHIELD_SKILL, + DUAL_WIELD_SKILL, + RECKLESSNESS_SKILL, + SNEAK_ATTACK_SKILL, + DIRTY_FIGHTING_SKILL, + CHALLENGE_SKILL, + SUMMONING_SKILL +} + +public enum STypeString { + UNDEF_STRING, + NAME_STRING, + TITLE_STRING, + SEX_STRING, + HERITAGE_GROUP_STRING, + TEMPLATE_STRING, + ATTACKERS_NAME_STRING, + INSCRIPTION_STRING, + SCRIBE_NAME_STRING, + VENDORS_NAME_STRING, + FELLOWSHIP_STRING, + MONARCHS_NAME_STRING, + LOCK_CODE_STRING, + KEY_CODE_STRING, + USE_STRING, + SHORT_DESC_STRING, + LONG_DESC_STRING, + ACTIVATION_TALK_STRING, + USE_MESSAGE_STRING, + ITEM_HERITAGE_GROUP_RESTRICTION_STRING, + PLURAL_NAME_STRING, + MONARCHS_TITLE_STRING, + ACTIVATION_FAILURE_STRING, + SCRIBE_ACCOUNT_STRING, + TOWN_NAME_STRING, + CRAFTSMAN_NAME_STRING, + USE_PK_SERVER_ERROR_STRING, + SCORE_CACHED_TEXT_STRING, + SCORE_DEFAULT_ENTRY_FORMAT_STRING, + SCORE_FIRST_ENTRY_FORMAT_STRING, + SCORE_LAST_ENTRY_FORMAT_STRING, + SCORE_ONLY_ENTRY_FORMAT_STRING, + SCORE_NO_ENTRY_STRING, + QUEST_STRING, + GENERATOR_EVENT_STRING, + PATRONS_TITLE_STRING, + HOUSE_OWNER_NAME_STRING, + QUEST_RESTRICTION_STRING, + APPRAISAL_PORTAL_DESTINATION_STRING, + TINKER_NAME_STRING, + IMBUER_NAME_STRING, + HOUSE_OWNER_ACCOUNT_STRING, + DISPLAY_NAME_STRING, + DATE_OF_BIRTH_STRING, + THIRD_PARTY_API_STRING, + KILL_QUEST_STRING, + AFK_STRING, + ALLEGIANCE_NAME_STRING, + AUGMENTATION_ADD_QUEST_STRING, + KILL_QUEST_2_STRING, + KILL_QUEST_3_STRING, + USE_SENDS_SIGNAL_STRING, + GEAR_PLATING_NAME_STRING +} diff --git a/aclogview/Enums/Trade.cs b/aclogview/Enums/Trade.cs new file mode 100644 index 0000000..9767432 --- /dev/null +++ b/aclogview/Enums/Trade.cs @@ -0,0 +1,24 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +public enum TradeListIDEnum { + Undef_TradeListID, + Self_TradeListID, + Partner_TradeListID +} + +public enum TradeStatusEnum { + Undef_TradeStatus = 0, + Pending_TradeStatus = (1 << 0), + Open_TradeStatus = (1 << 1), + WaitingToClose_TradeStatus = (1 << 2) +} + +public enum eTradeListID { + TradeListIDUndef, + TradeListIDSelf, + TradeListIDPartner +} diff --git a/aclogview/Enums/UI.cs b/aclogview/Enums/UI.cs new file mode 100644 index 0000000..4926437 --- /dev/null +++ b/aclogview/Enums/UI.cs @@ -0,0 +1,81 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +public enum TeleportAnimState { + TAS_OFF, + TAS_WORLD_FADE_OUT, + TAS_TUNNEL_FADE_IN, + TAS_TUNNEL, + TAS_TUNNEL_CONTINUE, + TAS_TUNNEL_FADE_OUT, + TAS_WORLD_FADE_IN +} + +public enum RadarBlipShape { + Undef_RadarBlipShape, + Circle_RadarBlipShape, + Box_RadarBlipShape, + X_RadarBlipShape, + Plus_RadarBlipShape, + Triangle_RadarBlipShape, + InvertedTriangle_RadarBlipShape, + XBox_RadarBlipShape, + Default_RadarBlipShape, + AllegianceMember_RadarBlipShape, + FellowshipLeader_RadarBlipShape, + Fellowship_RadarBlipShape, + Threat_RadarBlipShape, + ThreatAllegiance_RadarBlipShape +} + +public enum ConfirmationType { + UNDEF_CONFIRM, + ALLEGIANCE_SWEAR_CONFIRM, + ALTER_SKILL_CONFIRM, + ALTER_ATTRIBUTE_CONFIRM, + FELLOWSHIP_RECRUIT_CONFIRM, + CRAFT_INTERACTION_CONFIRM, + USE_AUGMENTATION_CONFIRM, + YESNO_CONFIRM +} + +public enum PositionState { + IN_3D_VIEW, + WIELDED, + IN_CONTAINER, + BEING_REMOVED +} + +public enum RadarEnum { + Undef_RadarEnum, + ShowNever_RadarEnum, + ShowMovement_RadarEnum, + ShowAttacking_RadarEnum, + ShowAlways_RadarEnum +} + +public enum UI_EFFECT_TYPE { + UI_EFFECT_UNDEF = 0, + UI_EFFECT_MAGICAL = (1 << 0), + UI_EFFECT_POISONED = (1 << 1), + UI_EFFECT_BOOST_HEALTH = (1 << 2), + UI_EFFECT_BOOST_MANA = (1 << 3), + UI_EFFECT_BOOST_STAMINA = (1 << 4), + UI_EFFECT_FIRE = (1 << 5), + UI_EFFECT_LIGHTNING = (1 << 6), + UI_EFFECT_FROST = (1 << 7), + UI_EFFECT_ACID = (1 << 8), + UI_EFFECT_BLUDGEONING = (1 << 9), + UI_EFFECT_SLASHING = (1 << 10), + UI_EFFECT_PIERCING = (1 << 11), + UI_EFFECT_NETHER = (1 << 12) +} + +public enum HousePanelTextColor { + Normal_HousePanelTextColor, + RentPaid_HousePanelTextColor, + RentNotPaid_HousePanelTextColor +} diff --git a/aclogview/Enums/WeenieError.cs b/aclogview/Enums/WeenieError.cs new file mode 100644 index 0000000..e2500ed --- /dev/null +++ b/aclogview/Enums/WeenieError.cs @@ -0,0 +1,523 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +// Corresponds to giant string switch in ClientCommunicationSystem::HandleFailureEvent +public enum WERROR { + WERROR_NONE, + WERROR_NOMEM, + WERROR_BAD_PARAM, + WERROR_DIV_ZERO, + WERROR_SEGV, + WERROR_UNIMPLEMENTED, + WERROR_UNKNOWN_MESSAGE_TYPE, + WERROR_NO_ANIMATION_TABLE, + WERROR_NO_PHYSICS_OBJECT, + WERROR_NO_BOOKIE_OBJECT, + WERROR_NO_WSL_OBJECT, + WERROR_NO_MOTION_INTERPRETER, + WERROR_UNHANDLED_SWITCH, + WERROR_DEFAULT_CONSTRUCTOR_CALLED, + WERROR_INVALID_COMBAT_MANEUVER, + WERROR_BAD_CAST, + WERROR_MISSING_QUALITY, + UNKNOWN__GUESSEDNAME17, // NOTE: Missing 1 + WERROR_MISSING_DATABASE_OBJECT, + WERROR_NO_CALLBACK_SET, + WERROR_CORRUPT_QUALITY, + WERROR_BAD_CONTEXT, + WERROR_NO_EPHSEQ_MANAGER, + WERROR_BAD_MOVEMENT_EVENT, + WERROR_CANNOT_CREATE_NEW_OBJECT, + WERROR_NO_CONTROLLER_OBJECT, + WERROR_CANNOT_SEND_EVENT, + WERROR_PHYSICS_CANT_TRANSITION, + WERROR_PHYSICS_MAX_DISTANCE_EXCEEDED, + WERROR_ACTIONS_LOCKED, + WERROR_EXTERNAL_ACTIONS_LOCKED, + WERROR_CANNOT_SEND_MESSAGE, + WERROR_ILLEGAL_INVENTORY_TRANSACTION, + WERROR_EXTERNAL_WEENIE_OBJECT, + WERROR_INTERNAL_WEENIE_OBJECT, + WERROR_MOTION_FAILURE, + WERROR_NO_CONTACT, + WERROR_INQ_CYL_SPHERE_FAILURE, + WERROR_BAD_COMMAND, + WERROR_CARRYING_ITEM, + WERROR_FROZEN, + WERROR_STUCK, + WERROR_OVERLOAD, + WERROR_EXTERNAL_OVERLOAD, + WERROR_BAD_CONTAIN, + WERROR_BAD_PARENT, + WERROR_BAD_DROP, + WERROR_BAD_RELEASE, + WERROR_MSG_BAD_MSG, + WERROR_MSG_UNPACK_FAILED, + WERROR_MSG_NO_MSG, + WERROR_MSG_UNDERFLOW, + WERROR_MSG_OVERFLOW, + WERROR_MSG_CALLBACK_FAILED, + WERROR_INTERRUPTED, + WERROR_OBJECT_GONE, + WERROR_NO_OBJECT, + WERROR_CANT_GET_THERE, + WERROR_DEAD, + WERROR_I_LEFT_THE_WORLD, + WERROR_I_TELEPORTED, + WERROR_TOO_FAR, + WERROR_STAMINA_TOO_LOW, + WERROR_CANT_CROUCH_IN_COMBAT, + WERROR_CANT_SIT_IN_COMBAT, + WERROR_CANT_LIE_DOWN_IN_COMBAT, + WERROR_CANT_CHAT_EMOTE_IN_COMBAT, + WERROR_NO_MTABLE_DATA, + WERROR_CANT_CHAT_EMOTE_NOT_STANDING, + WERROR_TOO_MANY_ACTIONS, + WERROR_HIDDEN, + WERROR_GENERAL_MOVEMENT_FAILURE, + WERROR_CANT_JUMP_POSITION, + WERROR_CANT_JUMP_LOAD, + WERROR_SELF_INFLICTED_DEATH, + WERROR_MSG_RESPONSE_FAILURE, + WERROR_OBJECT_IS_STATIC, + WERROR_PK_INVALID_STATUS, + WERROR_PK_PROTECTED_ATTACKER, + WERROR_PK_PROTECTED_TARGET, + WERROR_PK_UNPROTECTED_TARGET, + WERROR_PK_NPK_ATTACKER, + WERROR_PK_NPK_TARGET, + WERROR_PK_WRONG_KIND, + WERROR_PK_CROSS_HOUSE_BOUNDARY, + // NOTE: Large skip + WERROR_INVALID_XP_AMOUNT = 1001, + WERROR_INVALID_PP_CALCULATION, + WERROR_INVALID_CP_CALCULATION, + WERROR_UNHANDLED_STAT_ANSWER, + WERROR_HEART_ATTACK, + WERROR_CLOSED, + WERROR_GIVE_NOT_ALLOWED, + WERROR_INVALID_INVENTORY_LOCATION, + WERROR_CHANGE_COMBAT_MODE_FAILURE, + WERROR_FULL_INVENTORY_LOCATION, + WERROR_CONFLICTING_INVENTORY_LOCATION, + WERROR_ITEM_NOT_PENDING, + WERROR_BE_WIELDED_FAILURE, + WERROR_BE_DROPPED_FAILURE, + WERROR_COMBAT_FATIGUE, + WERROR_COMBAT_OUT_OF_AMMO, + WERROR_COMBAT_MISFIRE, + WERROR_BAD_MISSILE_CALCULATIONS, + WERROR_MAGIC_INCOMPLETE_ANIM_LIST, + WERROR_MAGIC_INVALID_SPELL_TYPE, + WERROR_MAGIC_INQ_POSITION_AND_VELOCITY_FAILURE, + WERROR_MAGIC_UNLEARNED_SPELL, + WERROR_MAGIC_BAD_TARGET_TYPE, + WERROR_MAGIC_MISSING_COMPONENTS, + WERROR_MAGIC_INSUFFICIENT_MANA, + WERROR_MAGIC_FIZZLE, + WERROR_MAGIC_MISSING_TARGET, + WERROR_MAGIC_MISFIRED_PROJECTILE_SPELL, + WERROR_MAGIC_SPELLBOOK_ADDSPELL_FAILURE, + WERROR_MAGIC_TARGET_OUT_OF_RANGE, + WERROR_MAGIC_NON_OUTDOOR_SPELL_CAST_OUTSIDE, + WERROR_MAGIC_NON_INDOOR_SPELL_CAST_INSIDE, + WERROR_MAGIC_GENERAL_FAILURE, + WERROR_MAGIC_UNPREPARED, + WERROR_ALLEGIANCE_PATRON_EXISTS, + WERROR_ALLEGIANCE_INSUFFICIENT_CP, + WERROR_ALLEGIANCE_IGNORING_REQUESTS, + WERROR_ALLEGIANCE_SQUELCHED, + WERROR_ALLEGIANCE_MAX_DISTANCE_EXCEEDED, + WERROR_ALLEGIANCE_ILLEGAL_LEVEL, + WERROR_ALLEGIANCE_BAD_CREATION, + WERROR_ALLEGIANCE_PATRON_BUSY, + WERROR_ALLEGIANCE_ADD_HIERARCHY_FAILURE, + WERROR_ALLEGIANCE_NONEXISTENT, + WERROR_ALLEGIANCE_REMOVE_HIERARCHY_FAILURE, + WERROR_ALLEGIANCE_MAX_VASSALS, + WERROR_FELLOWSHIP_IGNORING_REQUESTS, + WERROR_FELLOWSHIP_SQUELCHED, + WERROR_FELLOWSHIP_MAX_DISTANCE_EXCEEDED, + WERROR_FELLOWSHIP_MEMBER, + WERROR_FELLOWSHIP_ILLEGAL_LEVEL, + WERROR_FELLOWSHIP_RECRUIT_BUSY, + WERROR_FELLOWSHIP_NOT_LEADER, + WERROR_FELLOWSHIP_FULL, + WERROR_FELLOWSHIP_UNCLEAN_NAME, + WERROR_LEVEL_TOO_LOW, + WERROR_LEVEL_TOO_HIGH, + WERROR_CHAN_INVALID, + WERROR_CHAN_SECURITY, + WERROR_CHAN_ALREADY_ACTIVE, + WERROR_CHAN_NOT_ACTIVE, + WERROR_ATTUNED_ITEM, + WERROR_MERGE_BAD, + WERROR_MERGE_ENCHANTED, + WERROR_UNCONTROLLED_STACK, + WERROR_CURRENTLY_ATTACKING, + WERROR_MISSILE_ATTACK_NOT_OK, + WERROR_TARGET_NOT_ACQUIRED, + WERROR_IMPOSSIBLE_SHOT, + WERROR_BAD_WEAPON_SKILL, + WERROR_UNWIELD_FAILURE, + WERROR_LAUNCH_FAILURE, + WERROR_RELOAD_FAILURE, + WERROR_CRAFT_UNABLE_TO_MAKE_CRAFTREQ, + WERROR_CRAFT_ANIMATION_FAILED, + WERROR_CRAFT_NO_MATCH_WITH_NUMPREOBJ, + WERROR_CRAFT_GENERAL_ERROR_UI_MSG, + WERROR_CRAFT_GENERAL_ERROR_NO_UI_MSG, + WERROR_CRAFT_FAILED_REQUIREMENTS, + WERROR_CRAFT_DONT_CONTAIN_EVERYTHING, + WERROR_CRAFT_ALL_OBJECTS_NOT_FROZEN, + WERROR_CRAFT_NOT_IN_PEACE_MODE, + WERROR_CRAFT_NOT_HAVE_SKILL, + WERROR_HANDS_NOT_FREE, + WERROR_PORTAL_NOT_LINKABLE, + WERROR_QUEST_SOLVED_TOO_RECENTLY, + WERROR_QUEST_SOLVED_MAX_TIMES, + WERROR_QUEST_UNKNOWN, + WERROR_QUEST_TABLE_CORRUPT, + WERROR_QUEST_BAD, + WERROR_QUEST_DUPLICATE, + WERROR_QUEST_UNSOLVED, + WERROR_QUEST_RESRICTION_UNSOLVED, + WERROR_QUEST_SOLVED_TOO_LONG_AGO, + UNKNOWN__GUESSEDNAME1095, // NOTE: Missing 1 + UNKNOWN__GUESSEDNAME1096, // NOTE: Missing 1 + UNKNOWN__GUESSEDNAME1097, // NOTE: Missing 1 + UNKNOWN__GUESSEDNAME1098, // NOTE: Missing 1 + UNKNOWN__GUESSEDNAME1099, // NOTE: Missing 1 + WERROR_TRADE_IGNORING_REQUESTS, + WERROR_TRADE_SQUELCHED, + WERROR_TRADE_MAX_DISTANCE_EXCEEDED, + WERROR_TRADE_ALREADY_TRADING, + WERROR_TRADE_BUSY, + WERROR_TRADE_CLOSED, + WERROR_TRADE_EXPIRED, + WERROR_TRADE_ITEM_BEING_TRADED, + WERROR_TRADE_NON_EMPTY_CONTAINER, + WERROR_TRADE_NONCOMBAT_MODE, + WERROR_TRADE_INCOMPLETE, + WERROR_TRADE_STAMP_MISMATCH, + WERROR_TRADE_UNOPENED, + WERROR_TRADE_EMPTY, + WERROR_TRADE_ALREADY_ACCEPTED, + WERROR_TRADE_OUT_OF_SYNC, + WERROR_PORTAL_PK_NOT_ALLOWED, + WERROR_PORTAL_NPK_NOT_ALLOWED, + WERROR_HOUSE_ABANDONED, + WERROR_HOUSE_EVICTED, + WERROR_HOUSE_ALREADY_OWNED, + WERROR_HOUSE_BUY_FAILED, + WERROR_HOUSE_RENT_FAILED, + WERROR_HOOKED, + UNKNOWN__GUESSEDNAME1124, // NOTE: Missing 1 + WERROR_MAGIC_INVALID_POSITION, + WERROR_PORTAL_ACDM_ONLY, + WERROR_INVALID_AMMO_TYPE, + WERROR_SKILL_TOO_LOW, + WERROR_HOUSE_MAX_NUMBER_HOOKS_USED, + WERROR_TRADE_AI_DOESNT_WANT, + WERROR_HOOK_HOUSE_NOTE_OWNED, + UNKNOWN__GUESSEDNAME1132, // NOTE: Missing 1 + UNKNOWN__GUESSEDNAME1133, // NOTE: Missing 1 + UNKNOWN__GUESSEDNAME1134, // NOTE: Missing 1 + UNKNOWN__GUESSEDNAME1135, // NOTE: Missing 1 + UNKNOWN__GUESSEDNAME1136, // NOTE: Missing 1 + UNKNOWN__GUESSEDNAME1137, // NOTE: Missing 1 + UNKNOWN__GUESSEDNAME1138, // NOTE: Missing 1 + UNKNOWN__GUESSEDNAME1139, // NOTE: Missing 1 + WERROR_PORTAL_QUEST_RESTRICTED, + UNKNOWN__GUESSEDNAME1141, // NOTE: Missing 1 + UNKNOWN__GUESSEDNAME1142, // NOTE: Missing 1 + UNKNOWN__GUESSEDNAME1143, // NOTE: Missing 1 + UNKNOWN__GUESSEDNAME1144, // NOTE: Missing 1 + UNKNOWN__GUESSEDNAME1145, // NOTE: Missing 1 + UNKNOWN__GUESSEDNAME1146, // NOTE: Missing 1 + UNKNOWN__GUESSEDNAME1147, // NOTE: Missing 1 + UNKNOWN__GUESSEDNAME1148, // NOTE: Missing 1 + UNKNOWN__GUESSEDNAME1149, // NOTE: Missing 1 + WERROR_HOUSE_NO_ALLEGIANCE, + WERROR_NO_HOUSE, + WERROR_HOUSE_NO_MANSION_NO_POSITION, + WERROR_HOUSE_NOT_A_MANSION, + WERROR_HOUSE_NOT_ALLOWED_IN, + UNKNOWN__GUESSEDNAME1155, // NOTE: Missing 1 + UNKNOWN__GUESSEDNAME1156, // NOTE: Missing 1 + UNKNOWN__GUESSEDNAME1157, // NOTE: Missing 1 + UNKNOWN__GUESSEDNAME1158, // NOTE: Missing 1 + UNKNOWN__GUESSEDNAME1159, // NOTE: Missing 1 + WERROR_HOUSE_UNDER_MIN_LEVEL, + WERROR_HOUSE_OVER_MAX_LEVEL, + WERROR_HOUSE_NOT_A_MONARCH, + WERROR_HOUSE_UNDER_MIN_RANK, + WERROR_HOUSE_OVER_MAX_RANK, + WERROR_ALLEGIANCE_DECLINED, + WERROR_ALLEGIANCE_TIMEOUT, + WERROR_CONFIRMATION_IN_PROGRESS, + WERROR_MONARCH_ONLY, + WERROR_ALLEGIANCE_BOOT_EMPTY_NAME, + WERROR_ALLEGIANCE_BOOT_SELF, + WERROR_NO_SUCH_CHARACTER, + WERROR_ALLEGIANCE_TARGET_NOT_A_MEMBER, + WERROR_ALLEGIANCE_REMOVE_NO_PATRON, + WERROR_ALLEGIANCE_OFFLINE_DISSOLVED, + WERROR_ALLEGIANCE_OFFLINE_DISMISSED, + WERROR_MOVED_TOO_FAR, + WERROR_TELETO_INVALID_POSITION, + WERROR_ACDM_ONLY, + WERROR_LIFESTONE_LINK_FAILED, + WERROR_LIFESTONE_LINK_TOO_FAR, + WERROR_LIFESTONE_LINK_SUCCESS, + WERROR_LIFESTONE_RECALL_NO_LINK, + WERROR_LIFESTONE_RECALL_FAILED, + WERROR_PORTAL_LINK_FAILED, + WERROR_PORTAL_LINK_SUCCESS, + WERROR_PORTAL_RECALL_FAILED, + WERROR_PORTAL_RECALL_NO_LINK, + WERROR_PORTAL_SUMMON_FAILED, + WERROR_PORTAL_SUMMON_NO_LINK, + WERROR_PORTAL_TELEPORT_FAILED, + WERROR_PORTAL_TOO_RECENTLY, + WERROR_PORTAL_ADVOCATE_ONLY, + WERROR_PORTAL_AIS_NOT_ALLOWED, + WERROR_PORTAL_PLAYERS_NOT_ALLOWED, + WERROR_PORTAL_LEVEL_TOO_LOW, + WERROR_PORTAL_LEVEL_TOO_HIGH, + WERROR_PORTAL_NOT_RECALLABLE, + WERROR_PORTAL_NOT_SUMMONABLE, + WERROR_CHEST_ALREADY_UNLOCKED, + WERROR_CHEST_NOT_LOCKABLE, + WERROR_CHEST_ALREADY_OPEN, + WERROR_CHEST_WRONG_KEY, + WERROR_CHEST_USED_TOO_RECENTLY, + WERROR_DONT_KNOW_LOCKPICKING, + WERROR_ALLEGIANCE_INFO_EMPTY_NAME, + WERROR_ALLEGIANCE_INFO_SELF, + WERROR_ALLEGIANCE_INFO_TOO_RECENT, + WERROR_ABUSE_NO_SUCH_CHARACTER, + WERROR_ABUSE_REPORTED_SELF, + WERROR_ABUSE_COMPLAINT_HANDLED, + UNKNOWN__GUESSEDNAME1211, // NOTE: Missing 1 + UNKNOWN__GUESSEDNAME1212, // NOTE: Missing 1 + WERROR_SALVAGE_DONT_OWN_TOOL, + WERROR_SALVAGE_DONT_OWN_LOOT, + WERROR_SALVAGE_NOT_SUITABLE, + WERROR_SALVAGE_WRONG_MATERIAL, + WERROR_SALVAGE_CREATION_FAILED, + WERROR_SALVAGE_INVALID_LOOT_LIST, + WERROR_SALVAGE_TRADING_LOOT, + WERROR_PORTAL_HOUSE_RESTRICTED, + WERROR_ACTIVATION_RANK_TOO_LOW, + WERROR_ACTIVATION_WRONG_RACE, + WERROR_ACTIVATION_ARCANE_LORE_TOO_LOW, + WERROR_ACTIVATION_NOT_ENOUGH_MANA, + WERROR_ACTIVATION_SKILL_TOO_LOW, + WERROR_ACTIVATION_NOT_CRAFTSMAN, + WERROR_ACTIVATION_NOT_SPECIALIZED, + WERROR_PORTAL_PK_ATTACKED_TO_RECENTLY, + WERROR_TRADE_AI_REFUSE_EMOTE, + WERROR_TRADE_AI_REFUSE_EMOTE_FAILED_TOO_BUSY, + WERROR_TRADE_AI_TOO_MANY, + WERROR_SKILL_ALTERATION_FAILED, + WERROR_SKILL_ALTERATION_RAISE_NOT_TRAINED, + WERROR_SKILL_ALTERATION_RAISE_NOT_ENOUGH_CREDITS, + WERROR_SKILL_ALTERATION_WRAP_AROUND, + WERROR_SKILL_ALTERATION_LOWER_UNTRAINED, + WERROR_SKILL_ALTERATION_ILLEGAL_WIELDED_ITEMS, + WERROR_SKILL_ALTERATION_SPEC_SUCCEEDED, + WERROR_SKILL_ALTERATION_UNSPEC_SUCCEEDED, + WERROR_SKILL_ALTERATION_UNTRAIN_SUCCEEDED, + WERROR_SKILL_ALTERATION_UNTRAIN_RACIAL_SUCCEEDED, + WERROR_SKILL_ALTERATION_RAISE_TOO_MANY_SPEC_CREDITS, + WERROR_FELLOWSHIP_DECLINED, + WERROR_FELLOWSHIP_TIMEOUT, + WERROR_ATTRIBUTE_ALTERATION_FAILED, + WERROR_ATTRIBUTE_TRANSFER_FROM_TOO_LOW, + WERROR_ATTRIBUTE_TRANSFER_TO_TOO_HIGH, + WERROR_ATTRIBUTE_ALTERATION_ILLEGAL_WIELDED_ITEMS, + WERROR_ATTRIBUTE_ALTERATION_SUCCEEDED, + WERROR_HOUSE_DYNAMIC_HOOK_ADD, + WERROR_HOUSE_WRONG_HOOK_TYPE, + WERROR_HOUSE_DYNAMIC_STORAGE_ADD, + WERROR_HOUSE_DYNAMIC_HOOK_CLOSE, + WERROR_HOUSE_DYNAMIC_STORAGE_CLOSE, + WERROR_ALLEGIANCE_OWNS_MANSION, + WERROR_HOOK_ITEM_ON_HOOK_NOT_USEABLE, + WERROR_HOOK_ITEM_ON_HOOK_NOT_USEABLE_OWNER, + WERROR_HOOKER_NOT_USEABLE_OFF_HOOK, + WERROR_MIDAIR, + WERROR_PK_SWITCH_RECOVERING, + WERROR_PK_SWITCH_ADVOCATE, + WERROR_PK_SWITCH_MIN_LEVEL, + WERROR_PK_SWITCH_MAX_LEVEL, + WERROR_PK_SWITCH_RECENT_KILL, + WERROR_PK_SWITCH_AUTO_PK, + WERROR_PK_SWITCH_RESPITE, + WERROR_PORTAL_PKLITE_NOT_ALLOWED, + WERROR_PK_PROTECTED_ATTACKER_PASSIVE, + WERROR_PK_PROTECTED_TARGET_PASSIVE, + WERROR_PK_NPK_ATTACKER_PASSIVE, + WERROR_PK_NPK_TARGET_PASSIVE, + WERROR_PK_WRONG_KIND_PASSIVE, + WERROR_PK_CROSS_HOUSE_BOUNDARY_PASSIVE, + WERROR_MAGIC_INVALID_TARGET, + WERROR_MAGIC_INVALID_TARGET_PASSIVE, + WERROR_HEAL_NOT_TRAINED, + WERROR_HEAL_DONT_OWN_KIT, + WERROR_HEAL_CANT_HEAL_THAT, + WERROR_HEAL_FULL_HEALTH, + WERROR_HEAL_NOT_READY, + WERROR_HEAL_PLAYERS_ONLY, + WERROR_LIFESTONE_PROTECTION, + WERROR_PORTAL_PROTECTION, + WERROR_PK_SWITCH_PKLITE_OFF, + WERROR_DEATH_TOO_CLOSE_TO_SANCTUARY, + WERROR_TRADE_IN_PROGRESS, + WERROR_PK_SWITCH_PKLITE_ON_PK, + WERROR_PK_SWITCH_PKLITE_ON, + WERROR_MAGIC_NO_SUITABLE_ALTERNATE_TARGET, + WERROR_MAGIC_NO_SUITABLE_ALTERNATE_TARGET_PASSIVE, + WERROR_FELLOWSHIP_NOW_OPEN, + WERROR_FELLOWSHIP_NOW_CLOSED, + WERROR_FELLOWSHIP_NEW_LEADER, + WERROR_FELLOWSHIP_NO_LONGER_LEADER, + WERROR_FELLOWSHIP_NO_FELLOWSHIP, + WERROR_HOUSE_MAX_HOOK_GROUP_REACHED, + WERROR_HOUSE_MAX_HOOK_GROUP_REACHED_SILENT, + WERROR_HOUSE_NOW_USING_MAX_HOOKS, + WERROR_HOUSE_NO_LONGER_USING_MAX_HOOKS, + WERROR_HOUSE_NOW_USING_MAX_IN_HOOKGROUP, + WERROR_HOUSE_NO_LONGER_USING_MAX_IN_HOOKGROUP, + WERROR_HOOK_NOT_PERMITED_TO_USE_HOOK, + WERROR_FELLOWSHIP_NOT_CLOSE_ENOUGH_LEVEL, + WERROR_FELLOWSHIP_LOCKED_RECRUITER, + WERROR_FELLOWSHIP_LOCKED_RECRUITEE, + WERROR_ACTIVATION_NOT_ALLOWED_NO_NAME, + WERROR_CHAT_ENTERED_TURBINE_CHAT_ROOM, + WERROR_CHAT_LEFT_TURBINE_CHAT_ROOM, + WERROR_CHAT_NOW_USING_TURBINE_CHAT, + WERROR_ADMIN_IS_DEAF, + WERROR_ADMIN_DEAF_TO_MESSAGE, + WERROR_LOUD_LIST_IS_FULL, + WERROR_CHARACTER_ADDED_LOUD_LIST, + WERROR_CHARACTER_REMOVED_LOUD_LIST, + WERROR_DEAF_MODE_ON, + WERROR_DEAF_MODE_OFF, + WERROR_FAILED_MUTE, + WERROR_CRAFT_CHICKEN_OUT_MSG, + WERROR_CRAFT_NO_CHANCE, + WERROR_FELLOWSHIP_FELLOW_LOCKED_CAN_NOT_OPEN, + WERROR_TRADE_COMPLETE, + WERROR_SALVAGE_NOT_A_TOOL, + WERROR_CHARACTER_NOT_AVAILABLE, + WERROR_SNOOP_STARTED, + WERROR_SNOOP_STOPED, + WERROR_SNOOP_FAILED, + WERROR_SNOOP_UNAUTHORIZED, + WERROR_SNOOP_ALREADY_SNOOPED_ON, + WERROR_CHARACTER_IN_LIMBO_MSG_NOT_RECIVED, + WERROR_HOUSE_PURCHASE_TOO_SOON, + WERROR_ALLEGIANCE_I_AM_BOOTED_FROM_CHAT, + WERROR_ALLEGIANCE_TARGET_BOOTED_FROM_CHAT, + WERROR_ALLEGIANCE_NOT_AUTHORIZED, + WERROR_ALLEGIANCE_CHAR_ALREADY_BANNED, + WERROR_ALLEGIANCE_CHAR_NOT_BANNED, + WERROR_ALLEGIANCE_CHAR_NOT_UNBANNED, + WERROR_ALLEGIANCE_CHAR_BANNED_SUCCESSFULLY, + WERROR_ALLEGIANCE_CHAR_UNBANNED_SUCCESSFULLY, + WERROR_ALLEGIANCE_LIST_BANNED_CHARACTERS, + UNKNOWN__GUESSEDNAME1340, // NOTE: Missing 1 + UNKNOWN__GUESSEDNAME1341, // NOTE: Missing 1 + WERROR_ALLEGIANCE_BANNED, + WERROR_ALLEGIANCE_YOU_ARE_BANNED, + WERROR_ALLEGIANCE_BANNED_LIST_FULL, + WERROR_ALLEGIANCE_OFFICER_SET, + WERROR_ALLEGIANCE_OFFICER_NOT_SET, + WERROR_ALLEGIANCE_OFFICER_REMOVED, + WERROR_ALLEGIANCE_OFFICER_NOT_REMOVED, + WERROR_ALLEGIANCE_OFFICER_FULL, + WERROR_ALLEGIANCE_OFFICERS_CLEARED, + WERROR_CHAT_MUST_WAIT_TO_COMMUNICATE, + WERROR_CHAT_NO_JOIN_CHANNEL_WHILE_GAGGED, + WERROR_ALLEGIANCE_YOU_ARE_NOW_AN_OFFICER, + WERROR_ALLEGIANCE_YOU_ARE_NO_LONGER_AN_OFFICER, + WERROR_ALLEGIANCE_OFFICER_ALREADY_OFFICER, + WERROR_ALLEGIANCE_HOMETOWN_NOT_SET, + WERROR_ALREADY_BEING_USED, + WERROR_HOOK_EMPTY_NOT_OWNER, + WERROR_HOOK_EMPTY_OWNER, + WERROR_MISSILE_OUT_OF_RANGE, + WERROR_CHAT_NOT_LISTENING_TO_CHANNEL, + WERROR_ACTOD_ONLY, + WERROR_ITEM_ACTOD_ONLY, + WERROR_PORTAL_ACTOD_ONLY, + WERROR_QUEST_ACTOD_ONLY, + WERROR_AUGMENTATION_FAILED, + WERROR_AUGMENTATION_TOO_MANY_TIMES, + WERROR_AUGMENTATION_FAMILY_TOO_MANY_TIMES, + WERROR_AUGMENTATION_NOT_ENOUGH_XP, + WERROR_AUGMENTATION_SKILL_NOT_TRAINED, + WERROR_AUGMENTATION_SUCCEEDED, + WERROR_SKILL_ALTERATION_UNTRAIN_AUGMENTED_SUCCEEDED, + WERROR_PORTAL_RECALLS_DISABLED, + WERROR_AFK, + WERROR_PK_ONLY, + WERROR_PKL_ONLY, + WERROR_FRIENDS_EXCEEDED_MAX, + WERROR_FRIENDS_ALREADY_FRIEND, + WERROR_FRIENDS_NOT_FRIEND, + WERROR_HOUSE_NOT_OWNER, + WERROR_ALLEGIANCE_NAME_EMPTY, + WERROR_ALLEGIANCE_NAME_TOO_LONG, + WERROR_ALLEGIANCE_NAME_BAD_CHARACTER, + WERROR_ALLEGIANCE_NAME_NOT_APPROPRIATE, + WERROR_ALLEGIANCE_NAME_IN_USE, + WERROR_ALLEGIANCE_NAME_TIMER, + WERROR_ALLEGIANCE_NAME_CLEARED, + WERROR_ALLEGIANCE_NAME_SAME_NAME, + WERROR_ALLEGIANCE_OFFICER_ALREADY_MONARCH, + WERROR_ALLEGIANCE_OFFICER_TITLE_SET, + WERROR_ALLEGIANCE_OFFICER_INVALID_LEVEL, + WERROR_ALLEGIANCE_OFFICER_TITLE_NOT_APPROPRIATE, + WERROR_ALLEGIANCE_OFFICER_TITLE_TOO_LONG, + WERROR_ALLEGIANCE_OFFICER_TITLE_CLEARED, + WERROR_ALLEGIANCE_OFFICER_TITLE_BAD_CHARACTER, + WERROR_ALLEGIANCE_LOCK_DISPLAY, + WERROR_ALLEGIANCE_LOCK_SET, + WERROR_ALLEGIANCE_LOCK_PREVENTS_PATRON, + WERROR_ALLEGIANCE_LOCK_PREVENTS_VASSAL, + WERROR_ALLEGIANCE_LOCK_APPROVED_DISPLAY, + WERROR_ALLEGIANCE_LOCK_NO_APPROVED, + WERROR_ALLEGIANCE_TARGET_ALREADY_A_MEMBER, + WERROR_ALLEGIANCE_APPROVED_SET, + WERROR_ALLEGIANCE_APPROVED_CLEARED, + WERROR_ALLEGIANCE_GAG_ALREADY, + WERROR_ALLEGIANCE_GAG_NOT_ALREADY, + WERROR_ALLEGIANCE_GAG_TARGET, + WERROR_ALLEGIANCE_GAG_OFFICER, + WERROR_ALLEGIANCE_GAG_AUTO_UNGAG, + WERROR_ALLEGIANCE_GAG_UNGAG_TARGET, + WERROR_ALLEGIANCE_GAG_UNGAG_OFFICER, + WERROR_TOO_MANY_UNIQUE_ITEMS, + WERROR_HERITAGE_REQUIRES_SPECIFIC_ARMOR, + WERROR_SPECIFIC_ARMOR_REQUIRES_HERITAGE, + WERROR_NOT_OLTHOI_INTERACTION, + WERROR_NOT_OLTHOI_LIFESTONE, + WERROR_NOT_OLTHOI_VENDOR, + WERROR_NOT_OLTHOI_NPC, + WERROR_NO_OLTHOI_FELLOWSHIP, + WERROR_NO_OLTHOI_ALLEGIANCE, + WERROR_ITEM_INTERACTION_RESTRICTED, + WERROR_PERSON_INTERACTION_RESTRICTED, + WERROR_PORTAL_ONLY_OLTHOI_PK, + WERROR_PORTAL_NO_OLTHOI_PK, + WERROR_PORTAL_NO_VITAE, + WERROR_PORTAL_NO_NEW_ACCOUNTS, + WERROR_BAD_OLTHOI_RECALL, + WERROR_CONTRACT_ERROR +} diff --git a/aclogview/Form1.Designer.cs b/aclogview/Form1.Designer.cs new file mode 100644 index 0000000..76438d8 --- /dev/null +++ b/aclogview/Form1.Designer.cs @@ -0,0 +1,316 @@ +namespace aclogview { + partial class Form1 { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) { + if (disposing && (components != null)) { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() { + this.components = new System.ComponentModel.Container(); + this.splitContainer_Main = new System.Windows.Forms.SplitContainer(); + this.listView_Packets = new System.Windows.Forms.ListView(); + this.columnHeader1 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); + this.columnHeader5 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); + this.columnHeader2 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); + this.columnHeader7 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); + this.columnHeader3 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); + this.columnHeader4 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); + this.columnHeader6 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); + this.splitContainer_Bottom = new System.Windows.Forms.SplitContainer(); + this.textBox_PacketData = new System.Windows.Forms.TextBox(); + this.treeView_ParsedData = new System.Windows.Forms.TreeView(); + this.mainMenu = new System.Windows.Forms.MainMenu(this.components); + this.menuItem_File = new System.Windows.Forms.MenuItem(); + this.menuItem_Open = new System.Windows.Forms.MenuItem(); + this.menuItem_Edit = new System.Windows.Forms.MenuItem(); + this.menuItem_Help = new System.Windows.Forms.MenuItem(); + this.menuItem_About = new System.Windows.Forms.MenuItem(); + this.menuStrip = new System.Windows.Forms.MenuStrip(); + this.textBox_Search = new System.Windows.Forms.TextBox(); + this.pictureBox_Search = new System.Windows.Forms.PictureBox(); + this.statusStrip = new System.Windows.Forms.StatusStrip(); + this.checkBox_HideHeaderOnly = new System.Windows.Forms.CheckBox(); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer_Main)).BeginInit(); + this.splitContainer_Main.Panel1.SuspendLayout(); + this.splitContainer_Main.Panel2.SuspendLayout(); + this.splitContainer_Main.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer_Bottom)).BeginInit(); + this.splitContainer_Bottom.Panel1.SuspendLayout(); + this.splitContainer_Bottom.Panel2.SuspendLayout(); + this.splitContainer_Bottom.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox_Search)).BeginInit(); + this.SuspendLayout(); + // + // splitContainer_Main + // + this.splitContainer_Main.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D; + this.splitContainer_Main.Dock = System.Windows.Forms.DockStyle.Fill; + this.splitContainer_Main.Location = new System.Drawing.Point(0, 24); + this.splitContainer_Main.Name = "splitContainer_Main"; + this.splitContainer_Main.Orientation = System.Windows.Forms.Orientation.Horizontal; + // + // splitContainer_Main.Panel1 + // + this.splitContainer_Main.Panel1.Controls.Add(this.listView_Packets); + this.splitContainer_Main.Panel1.RightToLeft = System.Windows.Forms.RightToLeft.No; + // + // splitContainer_Main.Panel2 + // + this.splitContainer_Main.Panel2.Controls.Add(this.splitContainer_Bottom); + this.splitContainer_Main.Panel2.RightToLeft = System.Windows.Forms.RightToLeft.No; + this.splitContainer_Main.Size = new System.Drawing.Size(1520, 918); + this.splitContainer_Main.SplitterDistance = 423; + this.splitContainer_Main.TabIndex = 0; + // + // listView_Packets + // + this.listView_Packets.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] { + this.columnHeader1, + this.columnHeader5, + this.columnHeader2, + this.columnHeader7, + this.columnHeader3, + this.columnHeader4, + this.columnHeader6}); + this.listView_Packets.Dock = System.Windows.Forms.DockStyle.Fill; + this.listView_Packets.FullRowSelect = true; + this.listView_Packets.Location = new System.Drawing.Point(0, 0); + this.listView_Packets.MultiSelect = false; + this.listView_Packets.Name = "listView_Packets"; + this.listView_Packets.Size = new System.Drawing.Size(1516, 419); + this.listView_Packets.TabIndex = 0; + this.listView_Packets.UseCompatibleStateImageBehavior = false; + this.listView_Packets.View = System.Windows.Forms.View.Details; + this.listView_Packets.VirtualMode = true; + this.listView_Packets.ColumnClick += new System.Windows.Forms.ColumnClickEventHandler(this.listView_Packets_ColumnClick); + this.listView_Packets.RetrieveVirtualItem += new System.Windows.Forms.RetrieveVirtualItemEventHandler(this.listView_Packets_RetrieveVirtualItem); + this.listView_Packets.SelectedIndexChanged += new System.EventHandler(this.listView_Packets_SelectedIndexChanged); + // + // columnHeader1 + // + this.columnHeader1.Text = "#"; + this.columnHeader1.Width = 50; + // + // columnHeader5 + // + this.columnHeader5.Text = "S/R"; + // + // columnHeader2 + // + this.columnHeader2.Text = "Time"; + this.columnHeader2.Width = 100; + // + // columnHeader7 + // + this.columnHeader7.Text = "Headers"; + this.columnHeader7.Width = 150; + // + // columnHeader3 + // + this.columnHeader3.Text = "Type"; + this.columnHeader3.Width = 200; + // + // columnHeader4 + // + this.columnHeader4.Text = "Size"; + this.columnHeader4.Width = 100; + // + // columnHeader6 + // + this.columnHeader6.Text = "Extra Info"; + this.columnHeader6.Width = 250; + // + // splitContainer_Bottom + // + this.splitContainer_Bottom.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D; + this.splitContainer_Bottom.Dock = System.Windows.Forms.DockStyle.Fill; + this.splitContainer_Bottom.Location = new System.Drawing.Point(0, 0); + this.splitContainer_Bottom.Name = "splitContainer_Bottom"; + // + // splitContainer_Bottom.Panel1 + // + this.splitContainer_Bottom.Panel1.Controls.Add(this.textBox_PacketData); + // + // splitContainer_Bottom.Panel2 + // + this.splitContainer_Bottom.Panel2.Controls.Add(this.treeView_ParsedData); + this.splitContainer_Bottom.Size = new System.Drawing.Size(1520, 491); + this.splitContainer_Bottom.SplitterDistance = 1130; + this.splitContainer_Bottom.TabIndex = 0; + // + // textBox_PacketData + // + this.textBox_PacketData.Dock = System.Windows.Forms.DockStyle.Fill; + this.textBox_PacketData.Font = new System.Drawing.Font("Courier New", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.textBox_PacketData.Location = new System.Drawing.Point(0, 0); + this.textBox_PacketData.Multiline = true; + this.textBox_PacketData.Name = "textBox_PacketData"; + this.textBox_PacketData.Size = new System.Drawing.Size(1126, 487); + this.textBox_PacketData.TabIndex = 0; + // + // treeView_ParsedData + // + this.treeView_ParsedData.Dock = System.Windows.Forms.DockStyle.Fill; + this.treeView_ParsedData.Location = new System.Drawing.Point(0, 0); + this.treeView_ParsedData.Name = "treeView_ParsedData"; + this.treeView_ParsedData.Size = new System.Drawing.Size(382, 487); + this.treeView_ParsedData.TabIndex = 0; + // + // mainMenu + // + this.mainMenu.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] { + this.menuItem_File, + this.menuItem_Edit, + this.menuItem_Help}); + // + // menuItem_File + // + this.menuItem_File.Index = 0; + this.menuItem_File.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] { + this.menuItem_Open}); + this.menuItem_File.Text = "File"; + // + // menuItem_Open + // + this.menuItem_Open.Index = 0; + this.menuItem_Open.Text = "Open"; + this.menuItem_Open.Click += new System.EventHandler(this.menuItem5_Click); + // + // menuItem_Edit + // + this.menuItem_Edit.Index = 1; + this.menuItem_Edit.Text = "Edit"; + // + // menuItem_Help + // + this.menuItem_Help.Index = 2; + this.menuItem_Help.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] { + this.menuItem_About}); + this.menuItem_Help.Text = "Help"; + // + // menuItem_About + // + this.menuItem_About.Index = 0; + this.menuItem_About.Text = "About"; + this.menuItem_About.Click += new System.EventHandler(this.menuItem_About_Click); + // + // menuStrip + // + this.menuStrip.Location = new System.Drawing.Point(0, 0); + this.menuStrip.Name = "menuStrip"; + this.menuStrip.Size = new System.Drawing.Size(1520, 24); + this.menuStrip.TabIndex = 1; + this.menuStrip.Text = "menuStrip1"; + // + // textBox_Search + // + this.textBox_Search.Location = new System.Drawing.Point(566, 0); + this.textBox_Search.Name = "textBox_Search"; + this.textBox_Search.Size = new System.Drawing.Size(165, 20); + this.textBox_Search.TabIndex = 2; + this.textBox_Search.Visible = false; + // + // pictureBox_Search + // + this.pictureBox_Search.Location = new System.Drawing.Point(539, 0); + this.pictureBox_Search.Name = "pictureBox_Search"; + this.pictureBox_Search.Size = new System.Drawing.Size(20, 20); + this.pictureBox_Search.TabIndex = 3; + this.pictureBox_Search.TabStop = false; + this.pictureBox_Search.Visible = false; + // + // statusStrip + // + this.statusStrip.Location = new System.Drawing.Point(0, 942); + this.statusStrip.Name = "statusStrip"; + this.statusStrip.Size = new System.Drawing.Size(1520, 22); + this.statusStrip.TabIndex = 1; + this.statusStrip.Text = "statusStrip1"; + // + // checkBox_HideHeaderOnly + // + this.checkBox_HideHeaderOnly.Location = new System.Drawing.Point(805, 3); + this.checkBox_HideHeaderOnly.Name = "checkBox_HideHeaderOnly"; + this.checkBox_HideHeaderOnly.Size = new System.Drawing.Size(138, 17); + this.checkBox_HideHeaderOnly.TabIndex = 0; + this.checkBox_HideHeaderOnly.Text = "Hide Header Only"; + this.checkBox_HideHeaderOnly.UseVisualStyleBackColor = true; + this.checkBox_HideHeaderOnly.Visible = false; + this.checkBox_HideHeaderOnly.CheckedChanged += new System.EventHandler(this.checkBox_HideHeaderOnly_CheckedChanged); + // + // Form1 + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(1520, 964); + this.Controls.Add(this.checkBox_HideHeaderOnly); + this.Controls.Add(this.splitContainer_Main); + this.Controls.Add(this.textBox_Search); + this.Controls.Add(this.pictureBox_Search); + this.Controls.Add(this.menuStrip); + this.Controls.Add(this.statusStrip); + this.DoubleBuffered = true; + this.Menu = this.mainMenu; + this.Name = "Form1"; + this.Text = "AC Log View"; + this.Load += new System.EventHandler(this.Form1_Load); + this.splitContainer_Main.Panel1.ResumeLayout(false); + this.splitContainer_Main.Panel2.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer_Main)).EndInit(); + this.splitContainer_Main.ResumeLayout(false); + this.splitContainer_Bottom.Panel1.ResumeLayout(false); + this.splitContainer_Bottom.Panel1.PerformLayout(); + this.splitContainer_Bottom.Panel2.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer_Bottom)).EndInit(); + this.splitContainer_Bottom.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox_Search)).EndInit(); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.SplitContainer splitContainer_Main; + private System.Windows.Forms.ListView listView_Packets; + private System.Windows.Forms.MainMenu mainMenu; + private System.Windows.Forms.MenuItem menuItem_File; + private System.Windows.Forms.MenuItem menuItem_Edit; + private System.Windows.Forms.MenuItem menuItem_Help; + private System.Windows.Forms.MenuItem menuItem_Open; + private System.Windows.Forms.MenuItem menuItem_About; + private System.Windows.Forms.SplitContainer splitContainer_Bottom; + private System.Windows.Forms.MenuStrip menuStrip; + private System.Windows.Forms.TextBox textBox_Search; + private System.Windows.Forms.PictureBox pictureBox_Search; + private System.Windows.Forms.StatusStrip statusStrip; + private System.Windows.Forms.TextBox textBox_PacketData; + private System.Windows.Forms.ColumnHeader columnHeader1; + private System.Windows.Forms.ColumnHeader columnHeader2; + private System.Windows.Forms.ColumnHeader columnHeader3; + private System.Windows.Forms.ColumnHeader columnHeader4; + private System.Windows.Forms.ColumnHeader columnHeader5; + private System.Windows.Forms.ColumnHeader columnHeader6; + private System.Windows.Forms.ColumnHeader columnHeader7; + private System.Windows.Forms.TreeView treeView_ParsedData; + private System.Windows.Forms.CheckBox checkBox_HideHeaderOnly; + } +} + diff --git a/aclogview/Form1.cs b/aclogview/Form1.cs new file mode 100644 index 0000000..7c2411f --- /dev/null +++ b/aclogview/Form1.cs @@ -0,0 +1,479 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace aclogview { + public partial class Form1 : Form { + private ListViewItemComparer comparer = new ListViewItemComparer(); + public List messageProcessors = new List(); + + public Form1() { + InitializeComponent(); + } + + private void Form1_Load(object sender, EventArgs e) { + Util.initReaders(); + messageProcessors.Add(new CM_Admin()); + messageProcessors.Add(new CM_Allegiance()); + messageProcessors.Add(new CM_Character()); + messageProcessors.Add(new CM_Combat()); + messageProcessors.Add(new CM_Communication()); + messageProcessors.Add(new CM_Examine()); + messageProcessors.Add(new CM_Fellowship()); + messageProcessors.Add(new CM_Game()); + messageProcessors.Add(new CM_House()); + messageProcessors.Add(new CM_Inventory()); + messageProcessors.Add(new CM_Item()); + messageProcessors.Add(new CM_Login()); + messageProcessors.Add(new CM_Magic()); + messageProcessors.Add(new CM_Misc()); + messageProcessors.Add(new CM_Movement()); + messageProcessors.Add(new CM_Physics()); + messageProcessors.Add(new CM_Qualities()); + messageProcessors.Add(new CM_Social()); + messageProcessors.Add(new CM_Trade()); + messageProcessors.Add(new CM_Train()); + messageProcessors.Add(new CM_Vendor()); + messageProcessors.Add(new CM_Writing()); + messageProcessors.Add(new Proto_UI()); + } + + private void menuItem5_Click(object sender, EventArgs e) { + OpenFileDialog openFile = new OpenFileDialog(); + openFile.AddExtension = true; + openFile.Filter = "Packet Captures (*.pcap)|*.pcap|All Files (*.*)|*.*"; + + if (openFile.ShowDialog() != DialogResult.OK) { + return; + } + + loadPcap(openFile.FileName); + } + + class PacketRecord { + public int index; + public bool isSend; + public uint tsSec; + public string packetHeadersStr; + public string packetTypeStr; + public byte[] data; + public NetPacket netPacket; + public PacketOpcode opcode; + public string extraInfo; + } + + private void readPacket(PacketRecord packet, StringBuilder packetTypeStr, BinaryReader packetReader) { + BlobFrag newFrag = new BlobFrag(); + newFrag.memberHeader_ = BlobFragHeader_t.read(packetReader); + newFrag.dat_ = packetReader.ReadBytes(newFrag.memberHeader_.blobFragSize - 16); // 16 == size of frag header + + packet.netPacket.fragList_.Add(newFrag); + + BinaryReader fragDataReader = new BinaryReader(new MemoryStream(newFrag.dat_)); + + if (newFrag.memberHeader_.blobNum != 0) { + packetTypeStr.Append("FragData["); + packetTypeStr.Append(newFrag.memberHeader_.blobNum); + packetTypeStr.Append("]"); + } else { + packetTypeStr.Append(Util.readOpcode(fragDataReader).ToString()); + } + } + + private void readOptionalHeaders(uint header_, StringBuilder packetHeadersStr, BinaryReader packetReader) { + if ((header_ & CServerSwitchStructHeader.mask) != 0) { + CServerSwitchStruct serverSwitchStruct = CServerSwitchStruct.read(packetReader); + if (packetHeadersStr.Length != 0) { + packetHeadersStr.Append(" | "); + } + packetHeadersStr.Append("Server Switch"); + } + + if ((header_ & LogonServerAddrHeader.mask) != 0) { + sockaddr_in serverAddr = sockaddr_in.read(packetReader); + if (packetHeadersStr.Length != 0) { + packetHeadersStr.Append(" | "); + } + packetHeadersStr.Append("Logon Server Addr"); + } + + if ((header_ & CEmptyHeader1.mask) != 0) { + if (packetHeadersStr.Length != 0) { + packetHeadersStr.Append(" | "); + } + packetHeadersStr.Append("Empty Header 1"); + } + + if ((header_ & CReferralStructHeader.mask) != 0) { + CReferralStruct referralStruct = CReferralStruct.read(packetReader); + if (packetHeadersStr.Length != 0) { + packetHeadersStr.Append(" | "); + } + packetHeadersStr.Append("Referral"); + } + + if ((header_ & NakHeader.mask) != 0) { + CSeqIDListHeader nakSeqIDs = NakHeader.read(packetReader); + if (packetHeadersStr.Length != 0) { + packetHeadersStr.Append(" | "); + } + packetHeadersStr.Append("Nak"); + } + + if ((header_ & EmptyAckHeader.mask) != 0) { + CSeqIDListHeader ackSeqIDs = EmptyAckHeader.read(packetReader); + if (packetHeadersStr.Length != 0) { + packetHeadersStr.Append(" | "); + } + packetHeadersStr.Append("Empty Ack"); + } + + if ((header_ & PakHeader.mask) != 0) { + PakHeader pakHeader = PakHeader.read(packetReader); + if (packetHeadersStr.Length != 0) { + packetHeadersStr.Append(" | "); + } + packetHeadersStr.Append("Pak"); + } + + if ((header_ & CEmptyHeader2.mask) != 0) { + if (packetHeadersStr.Length != 0) { + packetHeadersStr.Append(" | "); + } + packetHeadersStr.Append("Empty Header 2"); + } + + if ((header_ & CLogonHeader.mask) != 0) { + CLogonHeader.HandshakeWireData handshakeData = CLogonHeader.HandshakeWireData.read(packetReader); + byte[] authData = packetReader.ReadBytes((int)handshakeData.cbAuthData); + if (packetHeadersStr.Length != 0) { + packetHeadersStr.Append(" | "); + } + packetHeadersStr.Append("Logon"); + } + + if ((header_ & ULongHeader.mask) != 0) { + ULongHeader ulongHeader = ULongHeader.read(packetReader); + if (packetHeadersStr.Length != 0) { + packetHeadersStr.Append(" | "); + } + packetHeadersStr.Append("ULong 1"); + } + + if ((header_ & CConnectHeader.mask) != 0) { + CConnectHeader.HandshakeWireData handshakeData = CConnectHeader.HandshakeWireData.read(packetReader); + if (packetHeadersStr.Length != 0) { + packetHeadersStr.Append(" | "); + } + packetHeadersStr.Append("Connect"); + } + + if ((header_ & ULongHeader2.mask) != 0) { + ULongHeader2 ulongHeader = ULongHeader2.read(packetReader); + if (packetHeadersStr.Length != 0) { + packetHeadersStr.Append(" | "); + } + packetHeadersStr.Append("ULong 2"); + } + + if ((header_ & NetErrorHeader.mask) != 0) { + NetError netError = NetError.read(packetReader); + if (packetHeadersStr.Length != 0) { + packetHeadersStr.Append(" | "); + } + packetHeadersStr.Append("Net Error"); + } + + if ((header_ & NetErrorHeader_cs_DisconnectReceived.mask) != 0) { + NetError netError = NetError.read(packetReader); + if (packetHeadersStr.Length != 0) { + packetHeadersStr.Append(" | "); + } + packetHeadersStr.Append("Net Error Disconnect"); + } + + if ((header_ & CICMDCommandStructHeader.mask) != 0) { + CICMDCommandStruct icmdStruct = CICMDCommandStruct.read(packetReader); + if (packetHeadersStr.Length != 0) { + packetHeadersStr.Append(" | "); + } + packetHeadersStr.Append("ICmd"); + } + + if ((header_ & CTimeSyncHeader.mask) != 0) { + CTimeSyncHeader timeSyncHeader = CTimeSyncHeader.read(packetReader); + if (packetHeadersStr.Length != 0) { + packetHeadersStr.Append(" | "); + } + packetHeadersStr.Append("Time Sync"); + } + + if ((header_ & CEchoRequestHeader.mask) != 0) { + CEchoRequestHeader echoRequestHeader = CEchoRequestHeader.read(packetReader); + if (packetHeadersStr.Length != 0) { + packetHeadersStr.Append(" | "); + } + packetHeadersStr.Append("Echo Request"); + } + + if ((header_ & CEchoResponseHeader.mask) != 0) { + CEchoResponseHeader.CEchoResponseHeaderWireData echoResponseData = CEchoResponseHeader.CEchoResponseHeaderWireData.read(packetReader); + if (packetHeadersStr.Length != 0) { + packetHeadersStr.Append(" | "); + } + packetHeadersStr.Append("Echo Response"); + } + + if ((header_ & CFlowStructHeader.mask) != 0) { + CFlowStruct flowStruct = CFlowStruct.read(packetReader); + if (packetHeadersStr.Length != 0) { + packetHeadersStr.Append(" | "); + } + packetHeadersStr.Append("Flow"); + } + } + + List records = new List(); + List listItems = new List(); + + private void loadPcap(string fileName) { + this.Text = "AC Log View - " + Path.GetFileName(fileName); + + records.Clear(); + listItems.Clear(); + + using (FileStream fileStream = new FileStream(fileName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)) { + using (BinaryReader binaryReader = new BinaryReader(fileStream)) { + PcapHeader pcapHeader = PcapHeader.read(binaryReader); + while (binaryReader.BaseStream.Position != binaryReader.BaseStream.Length) { + PcapRecordHeader recordHeader = PcapRecordHeader.read(binaryReader); + + long packetStartPos = binaryReader.BaseStream.Position; + EthernetHeader ethernetHeader = EthernetHeader.read(binaryReader); + IpHeader ipHeader = IpHeader.read(binaryReader); + UdpHeader udpHeader = UdpHeader.read(binaryReader); + long headersSize = binaryReader.BaseStream.Position - packetStartPos; + + StringBuilder packetHeadersStr = new StringBuilder(); + StringBuilder packetTypeStr = new StringBuilder(); + + PacketRecord packet = new PacketRecord(); + packet.index = records.Count; + packet.isSend = (udpHeader.sPort == 12345); + packet.tsSec = recordHeader.tsSec; + packet.netPacket = new NetPacket(); + packet.data = binaryReader.ReadBytes((int)(recordHeader.inclLen - headersSize)); + packet.extraInfo = ""; + BinaryReader packetReader = new BinaryReader(new MemoryStream(packet.data)); + try { + ProtoHeader pHeader = ProtoHeader.read(packetReader); + + readOptionalHeaders(pHeader.header_, packetHeadersStr, packetReader); + + if (packetReader.BaseStream.Position == packetReader.BaseStream.Length) { + packetTypeStr.Append("
"); + } + + uint HAS_FRAGS_MASK = 0x4; // See SharedNet::SplitPacketData + if ((pHeader.header_ & HAS_FRAGS_MASK) != 0) { + bool first = true; + while (packetReader.BaseStream.Position != packetReader.BaseStream.Length) { + if (!first) { + packetTypeStr.Append(" + "); + } + readPacket(packet, packetTypeStr, packetReader); + first = false; + } + } + + if (packetReader.BaseStream.Position != packetReader.BaseStream.Length) { + packet.extraInfo = "Didnt read entire packet! " + packet.extraInfo; + } + } catch (Exception e) { + packet.extraInfo += "EXCEPTION: " + e.Message + " " + e.StackTrace; + } + packet.packetHeadersStr = packetHeadersStr.ToString(); + packet.packetTypeStr = packetTypeStr.ToString(); + + records.Add(packet); + + ListViewItem newItem = new ListViewItem(packet.index.ToString()); + newItem.SubItems.Add(packet.isSend ? "Send" : "Recv"); + newItem.SubItems.Add(packet.tsSec.ToString()); + newItem.SubItems.Add(packet.packetHeadersStr); + newItem.SubItems.Add(packet.packetTypeStr); + newItem.SubItems.Add(packet.data.Length.ToString()); + newItem.SubItems.Add(packet.extraInfo); + listItems.Add(newItem); + } + } + } + + listView_Packets.VirtualListSize = records.Count; + + listView_Packets.RedrawItems(0, records.Count - 1, false); + updateData(); + } + + private void listView_Packets_ColumnClick(object sender, ColumnClickEventArgs e) { + if (comparer.col == e.Column) { + comparer.reverse = !comparer.reverse; + } + comparer.col = e.Column; + listItems.Sort(comparer); + + listView_Packets.RedrawItems(0, records.Count - 1, false); + updateData(); + } + + class ListViewItemComparer : IComparer { + public int col; + public bool reverse; + + public int Compare(ListViewItem x, ListViewItem y) { + int result = 0; + if (col == 0 || col == 2 || col == 5) { + result = CompareUInt(x.SubItems[col].Text, y.SubItems[col].Text); + } else { + result = CompareString(x.SubItems[col].Text, y.SubItems[col].Text); + } + + if (reverse) { + result = -result; + } + + return result; + } + + public int CompareUInt(string x, string y) { + return UInt32.Parse(x).CompareTo(UInt32.Parse(y)); + } + + public int CompareString(string x, string y) { + return String.Compare(x, y); + } + } + + private void updateData() { + if (listView_Packets.SelectedIndices.Count > 0) { + PacketRecord record = records[Int32.Parse(listItems[listView_Packets.SelectedIndices[0]].SubItems[0].Text)]; + byte[] data = record.data; + + StringBuilder strBuilder = new StringBuilder(); + StringBuilder hexBuilder = new StringBuilder(); + StringBuilder asciiBuilder = new StringBuilder(); + int wrapCounter = 0; + for (int i = 0; i < data.Length; ++i) { + if (wrapCounter == 0) { + strBuilder.Append(string.Format("{0:X4} ", i)); + } + + hexBuilder.Append(string.Format("{0:X2} ", data[i])); + + char asChar = Convert.ToChar(data[i]); + if (asChar >= ' ' && asChar <= '~') { + asciiBuilder.Append(asChar); + } else { + asciiBuilder.Append('.'); + } + + wrapCounter++; + if (wrapCounter == 8) { + hexBuilder.Append(' '); + asciiBuilder.Append(' '); + } else if (wrapCounter == 16) { + strBuilder.Append(hexBuilder.ToString()); + hexBuilder.Clear(); + + strBuilder.Append(' '); + + strBuilder.Append(asciiBuilder.ToString()); + asciiBuilder.Clear(); + + strBuilder.Append(Environment.NewLine); + + wrapCounter = 0; + } + } + + if (wrapCounter != 0) { + int spacesToAppend = (16 - wrapCounter) * 3; + if (wrapCounter < 8) { + spacesToAppend++; + } + + hexBuilder.Append(' ', spacesToAppend); + + strBuilder.Append(hexBuilder.ToString()); + + strBuilder.Append(' '); + + strBuilder.Append(asciiBuilder.ToString()); + } + + textBox_PacketData.Text = strBuilder.ToString(); + + + foreach (BlobFrag frag in record.netPacket.fragList_) { + BinaryReader fragDataReader = new BinaryReader(new MemoryStream(frag.dat_)); + try { + bool handled = false; + foreach (MessageProcessor messageProcessor in messageProcessors) { + long readerStartPos = fragDataReader.BaseStream.Position; + + bool accepted = messageProcessor.acceptMessageData(fragDataReader, treeView_ParsedData); + + if (accepted && handled) { + throw new Exception("Multiple message processors are handling the same data!"); + } + + if (accepted) { + handled = true; + if (fragDataReader.BaseStream.Position != fragDataReader.BaseStream.Length) { + treeView_ParsedData.Nodes.Add(new TreeNode("WARNING: Prev fragment not fully read!")); + } + } + + fragDataReader.BaseStream.Position = readerStartPos; + } + + if (!handled) { + PacketOpcode opcode = Util.readOpcode(fragDataReader); + treeView_ParsedData.Nodes.Add(new TreeNode("Unhandled: " + opcode)); + } + } catch (Exception e) { + treeView_ParsedData.Nodes.Add(new TreeNode("EXCEPTION: " + e.Message)); + } + } + } else { + textBox_PacketData.Text = ""; + treeView_ParsedData.Nodes.Clear(); + } + } + + private void listView_Packets_SelectedIndexChanged(object sender, EventArgs e) { + updateData(); + } + + private void checkBox_HideHeaderOnly_CheckedChanged(object sender, EventArgs e) { + listView_Packets.RedrawItems(0, records.Count - 1, false); + updateData(); + } + + private void listView_Packets_RetrieveVirtualItem(object sender, RetrieveVirtualItemEventArgs e) { + e.Item = listItems[e.ItemIndex]; + } + + private void menuItem_About_Click(object sender, EventArgs e) { + MessageBox.Show("aclogview\n\nA program to view and parse Asheron's Call 1 packet capture files (.pcap) generated by aclog.\n\nFor more info and source code, see https://github.com/tfarley/aclogview", "About"); + } + } +} diff --git a/aclogview/Form1.resx b/aclogview/Form1.resx new file mode 100644 index 0000000..72c8844 --- /dev/null +++ b/aclogview/Form1.resx @@ -0,0 +1,132 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + + 134, 17 + + + 249, 17 + + + 56 + + \ No newline at end of file diff --git a/aclogview/PacketHeaders.cs b/aclogview/PacketHeaders.cs new file mode 100644 index 0000000..676defb --- /dev/null +++ b/aclogview/PacketHeaders.cs @@ -0,0 +1,365 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +public class ProtoHeader { + public uint seqID_; // Sequence number + public uint header_; // Bitmask for which optional headers are present + public uint checksum_; // CRC + public ushort recID_; // Recipient ID - maps to the receivers_ (aka packet stream? can have different ip per receiver) + public ushort interval_; // Has to do with flow management + public ushort datalen_; // Length of data in the packet, excluding this header + public ushort iteration_; // Appears to be bound to each receiever - doesn't change? + + public static ProtoHeader read(BinaryReader binaryReader) { + ProtoHeader newObj = new ProtoHeader(); + newObj.seqID_ = binaryReader.ReadUInt32(); + newObj.header_ = binaryReader.ReadUInt32(); + newObj.checksum_ = binaryReader.ReadUInt32(); + newObj.recID_ = binaryReader.ReadUInt16(); + newObj.interval_ = binaryReader.ReadUInt16(); + newObj.datalen_ = binaryReader.ReadUInt16(); + newObj.iteration_ = binaryReader.ReadUInt16(); + return newObj; + } +} + +// See RegisterOptionalHeaderType for mask, ::CreateFromData and ::CreateFromStream for flags +public class COptionalHeader { + public enum OptionalHeaderFlags { + ohfDisposable = (1 << 0), + ohfExclusive = (1 << 1), + ohfNotConn = (1 << 2), + ohfTimeSensitive = (1 << 3), + ohfShouldPiggyBack = (1 << 4), + ohfHighPriority = (1 << 5), + ohfCountsAsTouch = (1 << 6), + // NOTE: Skip 22 + ohfEncrypted = (1 << 29), + ohfSigned = (1 << 30) + } + + //public uint m_dwMask; + //public uint m_Flags; +} + +public class CServerSwitchStructHeader : COptionalHeader { + public static uint mask = 0x100; + public static uint flags = (uint)(OptionalHeaderFlags.ohfHighPriority | OptionalHeaderFlags.ohfCountsAsTouch); // 96 +} + +public class CServerSwitchStruct { + uint dwSeqNo; + uint Type; + + public static CServerSwitchStruct read(BinaryReader binaryReader) { + CServerSwitchStruct newObj = new CServerSwitchStruct(); + newObj.dwSeqNo = binaryReader.ReadUInt32(); + newObj.Type = binaryReader.ReadUInt32(); + return newObj; + } +} + +public class LogonServerAddrHeader : COptionalHeader { + public static uint mask = 0x200; + public static uint flags = (uint)(OptionalHeaderFlags.ohfDisposable | OptionalHeaderFlags.ohfExclusive | OptionalHeaderFlags.ohfNotConn); // 7 +} + +public class sockaddr_in { + public short sin_family; + public ushort sin_port; + public byte[] sin_addr = new byte[4]; + public byte[] sin_zero = new byte[8]; + + public static sockaddr_in read(BinaryReader binaryReader) { + sockaddr_in newObj = new sockaddr_in(); + newObj.sin_family = binaryReader.ReadInt16(); + newObj.sin_port = binaryReader.ReadUInt16(); + newObj.sin_addr = binaryReader.ReadBytes(4); + newObj.sin_zero = binaryReader.ReadBytes(8); + return newObj; + } +} + +public class CEmptyHeader1 : COptionalHeader { + public static uint mask = 0x400u; + public static uint flags = (uint)(OptionalHeaderFlags.ohfDisposable | OptionalHeaderFlags.ohfExclusive | OptionalHeaderFlags.ohfNotConn); // 7 +} + +public class CReferralStructHeader : COptionalHeader { + public static uint mask = 0x800; + public static uint flags = (uint)(OptionalHeaderFlags.ohfExclusive | OptionalHeaderFlags.ohfHighPriority | OptionalHeaderFlags.ohfCountsAsTouch | OptionalHeaderFlags.ohfSigned); // 1073741922 +} + +public class CReferralStruct { + public ulong qwCookie; + public sockaddr_in Addr; + public ushort idServer; + public ushort padding; + public uint unk; // Missing info, just to make it the proper 32 bytes... + + public static CReferralStruct read(BinaryReader binaryReader) { + CReferralStruct newObj = new CReferralStruct(); + newObj.qwCookie = binaryReader.ReadUInt64(); + newObj.Addr = sockaddr_in.read(binaryReader); + newObj.idServer = binaryReader.ReadUInt16(); + newObj.padding = binaryReader.ReadUInt16(); + newObj.unk = binaryReader.ReadUInt32(); + return newObj; + } +} + +public class CSeqIDListHeader : COptionalHeader { + public uint[] seqIDs; + + public static CSeqIDListHeader read(BinaryReader binaryReader) { + CSeqIDListHeader newObj = new CSeqIDListHeader(); + uint num = binaryReader.ReadUInt32(); + newObj.seqIDs = new uint[num]; + for (uint i = 0; i < num; ++i) { + newObj.seqIDs[i] = binaryReader.ReadUInt32(); + } + return newObj; + } +} + +// HandleNak +public class NakHeader : CSeqIDListHeader { + public static uint mask = 0x1000; + public static uint flags = (uint)(OptionalHeaderFlags.ohfDisposable | OptionalHeaderFlags.ohfHighPriority); // 33 +} + +// HandleEmptyAck +public class EmptyAckHeader : CSeqIDListHeader { + public static uint mask = 0x2000; + public static uint flags = (uint)(OptionalHeaderFlags.ohfDisposable | OptionalHeaderFlags.ohfHighPriority); // 33 +} + +// HandlePak +public class PakHeader : COptionalHeader { + public static uint mask = 0x4000; + public static uint flags = (uint)(OptionalHeaderFlags.ohfDisposable); // 1 + + uint num; + + public static PakHeader read(BinaryReader binaryReader) { + PakHeader newObj = new PakHeader(); + newObj.num = binaryReader.ReadUInt32(); + return newObj; + } +} + +public class CEmptyHeader2 : COptionalHeader { + public static uint mask = 0x8000; + public static uint flags = (uint)(OptionalHeaderFlags.ohfDisposable | OptionalHeaderFlags.ohfExclusive); // 3 +} + +public class CLogonHeader : COptionalHeader { + public static uint mask = 0x10000; + public static uint flags = (uint)(OptionalHeaderFlags.ohfDisposable | OptionalHeaderFlags.ohfExclusive | OptionalHeaderFlags.ohfNotConn); // 7 + + public class HandshakeWireData { + public PStringChar ClientVersion; + public uint cbAuthData; + + public static HandshakeWireData read(BinaryReader binaryReader) { + HandshakeWireData newObj = new HandshakeWireData(); + newObj.ClientVersion = PStringChar.read(binaryReader); + newObj.cbAuthData = binaryReader.ReadUInt32(); + return newObj; + } + } +} + +public class ULongHeader : COptionalHeader { + public static uint mask = 0x20000; + public static uint flags = (uint)(OptionalHeaderFlags.ohfDisposable | OptionalHeaderFlags.ohfExclusive | OptionalHeaderFlags.ohfNotConn); // 7 + + ulong m_Prim; + + public static ULongHeader read(BinaryReader binaryReader) { + ULongHeader newObj = new ULongHeader(); + newObj.m_Prim = binaryReader.ReadUInt64(); + return newObj; + } +} + +public class CConnectHeader : COptionalHeader { + public static uint mask = 0x40000; + public static uint flags = (uint)(OptionalHeaderFlags.ohfDisposable | OptionalHeaderFlags.ohfExclusive | OptionalHeaderFlags.ohfNotConn | OptionalHeaderFlags.ohfEncrypted); // 536870919 + + public class HandshakeWireData { + public double ServerTime; + public ulong qwCookie; + public uint NetID; + public uint OutgoingSeed; + public uint IncomingSeed; + public uint unk; // Missing info, just to make it the proper 32 bytes... + + public static HandshakeWireData read(BinaryReader binaryReader) { + HandshakeWireData newObj = new HandshakeWireData(); + newObj.ServerTime = binaryReader.ReadDouble(); + newObj.qwCookie = binaryReader.ReadUInt64(); + newObj.NetID = binaryReader.ReadUInt32(); + newObj.OutgoingSeed = binaryReader.ReadUInt32(); + newObj.IncomingSeed = binaryReader.ReadUInt32(); + newObj.unk = binaryReader.ReadUInt32(); + return newObj; + } + } +} + +public class ULongHeader2 : COptionalHeader { + public static uint mask = 0x80000; + public static uint flags = (uint)(OptionalHeaderFlags.ohfDisposable | OptionalHeaderFlags.ohfExclusive | OptionalHeaderFlags.ohfNotConn | OptionalHeaderFlags.ohfEncrypted); // 536870919 + + ulong m_Prim; + + public static ULongHeader2 read(BinaryReader binaryReader) { + ULongHeader2 newObj = new ULongHeader2(); + newObj.m_Prim = binaryReader.ReadUInt64(); + return newObj; + } +} + +public class NetErrorHeader : COptionalHeader { + public static uint mask = 0x100000; + public static uint flags = (uint)(OptionalHeaderFlags.ohfDisposable | OptionalHeaderFlags.ohfExclusive | OptionalHeaderFlags.ohfNotConn); // 7 +} + +public class NetError { + public uint m_stringID; + public uint m_tableID; // NOTE: Presence of this field depends on the NetError subclass?? + + public static NetError read(BinaryReader binaryReader) { + NetError newObj = new NetError(); + newObj.m_stringID = binaryReader.ReadUInt32(); + newObj.m_tableID = binaryReader.ReadUInt32(); + return newObj; + } +} + +public class NetErrorHeader_cs_DisconnectReceived : COptionalHeader { + public static uint mask = 0x200000; + public static uint flags = (uint)(OptionalHeaderFlags.ohfExclusive); // 2 +} + +public class CICMDCommandStructHeader : COptionalHeader { + public static uint mask = 0x400000; + public static uint flags = (uint)(OptionalHeaderFlags.ohfDisposable | OptionalHeaderFlags.ohfExclusive | OptionalHeaderFlags.ohfNotConn); // 7 +} + +public class CICMDCommandStruct { + public uint Cmd; + public uint Param; + + public static CICMDCommandStruct read(BinaryReader binaryReader) { + CICMDCommandStruct newObj = new CICMDCommandStruct(); + newObj.Cmd = binaryReader.ReadUInt32(); + newObj.Param = binaryReader.ReadUInt32(); + return newObj; + } +} + +public class CTimeSyncHeader : COptionalHeader { + public static uint mask = 0x1000000; + public static uint flags = (uint)(OptionalHeaderFlags.ohfTimeSensitive | OptionalHeaderFlags.ohfShouldPiggyBack); // 24 + + public ulong m_time; + + public static CTimeSyncHeader read(BinaryReader binaryReader) { + CTimeSyncHeader newObj = new CTimeSyncHeader(); + newObj.m_time = binaryReader.ReadUInt64(); + return newObj; + } +} + +public class CEchoRequestHeader : COptionalHeader { + public static uint mask = 0x2000000; + public static uint flags = (uint)(OptionalHeaderFlags.ohfTimeSensitive | OptionalHeaderFlags.ohfShouldPiggyBack); // 24 + + public float m_LocalTime; + + public static CEchoRequestHeader read(BinaryReader binaryReader) { + CEchoRequestHeader newObj = new CEchoRequestHeader(); + newObj.m_LocalTime = binaryReader.ReadSingle(); + return newObj; + } +} + +public class CEchoResponseHeader : COptionalHeader { + public static uint mask = 0x4000000; + public static uint flags = (uint)(OptionalHeaderFlags.ohfTimeSensitive | OptionalHeaderFlags.ohfShouldPiggyBack); // 24 + + public class CEchoResponseHeaderWireData { + public float LocalTime; + public float HoldingTime; + + public static CEchoResponseHeaderWireData read(BinaryReader binaryReader) { + CEchoResponseHeaderWireData newObj = new CEchoResponseHeaderWireData(); + newObj.LocalTime = binaryReader.ReadSingle(); + newObj.HoldingTime = binaryReader.ReadSingle(); + return newObj; + } + } +} + +public class CFlowStructHeader : COptionalHeader { + public static uint mask = 0x8000000; + public static uint flags = (uint)(OptionalHeaderFlags.ohfShouldPiggyBack); // 16 +} + +public class CFlowStruct { + public uint cbDataRecvd; + public ushort interval; + + public static CFlowStruct read(BinaryReader binaryReader) { + CFlowStruct newObj = new CFlowStruct(); + newObj.cbDataRecvd = binaryReader.ReadUInt32(); + newObj.interval = binaryReader.ReadUInt16(); + return newObj; + } +} + +public class BlobFragHeader_t { + public ulong blobID; + public ushort numFrags; + public ushort blobFragSize; + public ushort blobNum; + public ushort queueID; + + public static BlobFragHeader_t read(BinaryReader binaryReader) { + BlobFragHeader_t newObj = new BlobFragHeader_t(); + newObj.blobID = binaryReader.ReadUInt64(); + newObj.numFrags = binaryReader.ReadUInt16(); + newObj.blobFragSize = binaryReader.ReadUInt16(); + newObj.blobNum = binaryReader.ReadUInt16(); + newObj.queueID = binaryReader.ReadUInt16(); + return newObj; + } +} + +class OrderHdr { + public uint stamp; // Ordering number + + public static OrderHdr read(BinaryReader binaryReader) { + OrderHdr newObj = new OrderHdr(); + newObj.stamp = binaryReader.ReadUInt32(); + return newObj; + } +} + +class WOrderHdr { + public uint id; // GUID of object to apply to + public uint stamp; // Ordering number + + public static WOrderHdr read(BinaryReader binaryReader) { + WOrderHdr newObj = new WOrderHdr(); + newObj.id = binaryReader.ReadUInt32(); + newObj.stamp = binaryReader.ReadUInt32(); + return newObj; + } +} diff --git a/aclogview/PacketOpcode.cs b/aclogview/PacketOpcode.cs new file mode 100644 index 0000000..1c7a986 --- /dev/null +++ b/aclogview/PacketOpcode.cs @@ -0,0 +1,590 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +public enum PacketOpcode { + Evt_Admin__CreateRare_ID = 1, + NSP_NOTIFY_EVENT = 2, + Evt_Allegiance__AllegianceUpdateAborted_ID = 3, + Evt_Communication__PopUpString_ID = 4, + Evt_Character__PlayerOptionChangedEvent_ID = 5, + Evt_Admin__TeleportCharacterReturn_ID = 6, + Evt_Combat__UntargetedMeleeAttack_ID = 7, + Evt_Combat__TargetedMeleeAttack_ID = 8, + OBJECT_STARTUP_EVENT = 9, + Evt_Combat__TargetedMissileAttack_ID = 10, + Evt_Combat__UntargetedMissileAttack_ID = 11, + Evt_Admin__TeleportCharacterToMe_ID = 12, + Evt_Admin__AdminCharDataByName_ID = 13, + Evt_Admin__SetBodyPart_ID = 14, + Evt_Communication__SetAFKMode_ID = 15, + Evt_Communication__SetAFKMessage_ID = 16, + PLAYER_DESCRIPTION_EVENT = 19, + Evt_Communication__Talk_ID = 21, + Evt_Social__RemoveFriend_ID = 23, + Evt_Social__AddFriend_ID = 24, + Evt_Inventory__PutItemInContainer_ID = 25, + Evt_Inventory__GetAndWieldItem_ID = 26, + Evt_Inventory__DropItem_ID = 27, + WEENIE_ERROR_EVENT = 28, + Evt_Allegiance__SwearAllegiance_ID = 29, + Evt_Allegiance__BreakAllegiance_ID = 30, + Evt_Allegiance__UpdateRequest_ID = 31, + ALLEGIANCE_UPDATE_EVENT = 32, + Evt_Social__FriendsUpdate_ID = 33, + INVENTORY_PUT_OBJ_IN_CONTAINER_EVENT = 34, + INVENTORY_WIELD_OBJ_EVENT = 35, + INVENTORY_REMOVE_OBJ_EVENT = 36, + Evt_Social__ClearFriends_ID = 37, + Evt_Character__TeleToPKLArena_ID = 38, + Evt_Character__TeleToPKArena_ID = 39, + Evt_Social__AddCharacterTitle_ID = 40, + Evt_Social__CharacterTitleTable_ID = 41, + CHARACTER_GENERATION_RESULT_EVENT = 42, + Evt_Social__AddOrSetCharacterTitle_ID = 43, + Evt_Social__SetDisplayCharacterTitle_ID = 44, + Evt_Admin__RemoveCharacterTitle_ID = 45, + Evt_Admin__AddCharacterTitle_ID = 46, + Evt_Admin__DumpCharacterTitles_ID = 47, + Evt_Allegiance__QueryAllegianceName_ID = 48, + Evt_Allegiance__ClearAllegianceName_ID = 49, + Evt_Communication__TalkDirect_ID = 50, + Evt_Allegiance__SetAllegianceName_ID = 51, + CHAR_BASE_OBJDESC_EVENT = 52, + Evt_Inventory__UseWithTargetEvent_ID = 53, + Evt_Inventory__UseEvent_ID = 54, + HEAR_TEXTBOX_SPEECH = 55, + HEAR_TEXTBOX_SPEECH_DIRECT = 56, + Evt_Admin__ResetAllegianceName_ID = 57, + CHARACTER_LOGON_EVENT = 58, + Evt_Allegiance__SetAllegianceOfficer_ID = 59, + Evt_Allegiance__SetAllegianceOfficerTitle_ID = 60, + Evt_Allegiance__ListAllegianceOfficerTitles_ID = 61, + Evt_Allegiance__ClearAllegianceOfficerTitles_ID = 62, + Evt_Allegiance__DoAllegianceLockAction_ID = 63, + Evt_Allegiance__SetAllegianceApprovedVassal_ID = 64, + Evt_Allegiance__AllegianceChatGag_ID = 65, + Evt_Allegiance__DoAllegianceHouseAction_ID = 66, + Evt_Train__TrainAttribute2nd_ID = 68, + Evt_Train__TrainAttribute_ID = 69, + Evt_Train__TrainSkill_ID = 70, + Evt_Train__TrainSkillAdvancementClass_ID = 71, + Evt_Magic__CastUntargetedSpell_ID = 72, + Evt_Magic__CastTargetedSpell_ID = 74, + Evt_Magic__ResearchSpell_ID = 75, + UPDATE_SPELL_EVENT = 76, + REMOVE_SPELL_EVENT = 77, + UPDATE_ENCHANTMENT_EVENT = 78, + REMOVE_ENCHANTMENT_EVENT = 79, + Evt_Inventory__CommenceViewingContents_ID = 80, + UPDATE_SPELL_TIMESTAMP_EVENT = 81, + CLOSE_GROUND_CONTAINER_EVENT = 82, + Evt_Combat__ChangeCombatMode_ID = 83, + Evt_Inventory__StackableMerge_ID = 84, + Evt_Inventory__StackableSplitToContainer_ID = 85, + Evt_Inventory__StackableSplitTo3D_ID = 86, + Evt_Communication__ModifyCharacterSquelch_ID = 88, + Evt_Communication__ModifyAccountSquelch_ID = 89, + Evt_Communication__SquelchQuery_ID = 90, + Evt_Communication__ModifyGlobalSquelch_ID = 91, + Evt_Communication__TalkDirectByName_ID = 93, + ATTACK_NOTIFICATION_EVENT = 94, + Evt_Vendor__Buy_ID = 95, + Evt_Vendor__Sell_ID = 96, + Evt_Vendor__RequestVendorInfo_ID = 97, + VENDOR_INFO_EVENT = 98, + Evt_Character__TeleToLifestone_ID = 99, + Evt_Admin__InqWeenieDesc_ID = 100, + Evt_Admin__SetPosition_ID = 101, + Evt_Admin__SetSkill_ID = 102, + Evt_Admin__SetDataID_ID = 103, + Evt_Admin__SetString_ID = 104, + Evt_Admin__SetFloat_ID = 105, + Evt_Admin__SetInt_ID = 106, + Evt_Admin__SetAttribute2nd_ID = 107, + Evt_Admin__SetAttribute_ID = 108, + Evt_Admin__Teleport_ID = 109, + Evt_Admin__Create_ID = 112, + Evt_Character__StartBarber_ID = 117, + Evt_Admin__Delete_ID = 118, + Evt_Admin__RaiseAttribute2nd_ID = 125, + Evt_Admin__RaiseAttribute_ID = 126, + Evt_Admin__RaiseSkill_ID = 127, + Evt_Admin__RaiseXP_ID = 128, + Evt_Admin__WeenieLogEvent_ID = 129, + Evt_Admin__InqPlayerDataEvent_ID = 130, + Evt_Admin__InqFullPlayerDataEvent_ID = 132, + ADMIN_RECV_FULL_PLAYER_DATA_EVENT = 133, + Evt_Admin__CloakRequest_ID = 134, + Evt_Admin__PortalTeleport_ID = 135, + Evt_Admin__SetInstanceID_ID = 136, + Evt_Admin__StickyRequest_ID = 137, + Evt_Admin__SetBool_ID = 138, + ADMIN_RECV_WEENIE_DESC_EVENT = 150, + ADMIN_RECV_POSITION_EVENT = 151, + PORTAL_STORM_SUBSIDED_EVENT = 156, + PORTAL_STORM_BREWING_EVENT = 157, + PORTAL_STORM_IMMINENT_EVENT = 158, + PORTAL_STORM_EVENT = 159, + INVENTORY_SERVER_SAYS_FAILED_EVENT = 160, + Evt_Character__LoginCompleteNotification_ID = 161, + Evt_Fellowship__Create_ID = 162, + Evt_Fellowship__Quit_ID = 163, // Bidirectional + Evt_Fellowship__Dismiss_ID = 164, // Bidirectional + Evt_Fellowship__Recruit_ID = 165, + Evt_Fellowship__UpdateRequest_ID = 166, + RECV_QUIT_FELLOW_EVENT = 167, + Evt_Writing__BookData_ID = 170, + Evt_Writing__BookModifyPage_ID = 171, + Evt_Writing__BookAddPage_ID = 172, + Evt_Writing__BookDeletePage_ID = 173, + Evt_Writing__BookPageData_ID = 174, + RECV_FELLOWSHIP_UPDATE_EVENT = 175, + RECV_UPDATE_FELLOW_EVENT = 176, + RECV_DISMISS_FELLOW_EVENT = 177, + RECV_LOGOFF_FELLOW_EVENT = 178, + RECV_DISBAND_FELLOWSHIP_EVENT = 179, + BOOK_DATA_RESPONSE_EVENT = 180, + BOOK_MODIFY_PAGE_RESPONSE_EVENT = 181, + BOOK_ADD_PAGE_RESPONSE_EVENT = 182, + BOOK_DELETE_PAGE_RESPONSE_EVENT = 183, + BOOK_PAGE_DATA_RESPONSE_EVENT = 184, + Evt_Writing__GetInscription_ID = 190, + Evt_Writing__SetInscription_ID = 191, + GET_INSCRIPTION_RESPONSE_EVENT = 195, + Evt_Item__Appraise_ID = 200, + APPRAISAL_INFO_EVENT = 201, + Evt_Fellowship__Appraise_ID = 202, + Evt_Inventory__GiveObjectRequest_ID = 205, + Evt_Advocate__Bestow_ID = 211, + Evt_Advocate__SetState_ID = 212, + Evt_Advocate__SetAttackable_ID = 213, + Evt_Advocate__Teleport_ID = 214, + HEAR_LOCAL_SIGNALS_INT = 290, + HEAR_LOCAL_SIGNALS_RADIUS_INT = 291, + Evt_Character__AbuseLogRequest_ID = 320, + Evt_Communication__AddToChannel_ID = 325, + Evt_Communication__RemoveFromChannel_ID = 326, + Evt_Communication__ChannelBroadcast_ID = 327, // Bidirectional + Evt_Communication__ChannelList_ID = 328, // Bidirectional + Evt_Communication__ChannelIndex_ID = 329, // Bidirectional + CHANNEL_BROADCAST_EVENT = 330, + CHANNEL_LIST_EVENT = 331, + CHANNEL_INDEX_EVENT = 332, + Evt_Inventory__NoLongerViewingContents_ID = 405, + VIEW_CONTENTS_EVENT = 406, + STACKABLE_SET_STACKSIZE_EVENT = 407, + INVENTORY_PUT_OBJ_IN_3D_EVENT = 410, + Evt_Inventory__StackableSplitToWield_ID = 411, + Evt_Character__AddShortCut_ID = 412, + Evt_Character__RemoveShortCut_ID = 413, + PLAYER_DEATH_EVENT = 414, + Evt_Character__CharacterOptionsEvent_ID = 417, + Evt_Admin__SaveSanctuaryPosition_ID = 418, + DISPEL_ENCHANTMENT_EVENT = 420, + UPDATE_ENCHANTMENTS_EVENT = 421, + REMOVE_ENCHANTMENTS_EVENT = 422, + ATTACK_DONE_EVENT = 423, + Evt_Magic__RemoveSpell_ID = 424, // Bidirectional + PURGE_ENCHANTMENTS_EVENT = 427, + VICTIM_NOTIFICATION_EVENT = 428, + KILLER_NOTIFICATION_EVENT = 429, + DISPEL_ENCHANTMENTS_EVENT = 430, + ATTACKER_NOTIFICATION_EVENT = 433, + DEFENDER_NOTIFICATION_EVENT = 434, + EVASION_ATTACKER_NOTIFICATION_EVENT = 435, + EVASION_DEFENDER_NOTIFICATION_EVENT = 436, + HEAR_RANGED_TEXTBOX_SPEECH = 437, + Evt_Admin__DumpEnemyTable_ID = 438, + Evt_Combat__CancelAttack_ID = 439, + Evt_Combat__CommenceAttack_ID = 440, + Evt_Admin__Kill_ID = 441, + Evt_Admin__DropAll_ID = 442, + Evt_Admin__Dispel_ID = 443, + Evt_Admin__Humble_ID = 444, + Evt_Admin__QueryActive_ID = 445, + Evt_Admin__QueryContext_ID = 446, + Evt_Combat__QueryHealth_ID = 447, + Evt_Combat__QueryHealthResponse_ID = 448, + Evt_Admin__QueryHouseKeeping_ID = 449, + Evt_Character__QueryAge_ID = 450, + Evt_Character__QueryAgeResponse_ID = 451, + Evt_Character__QueryBirth_ID = 452, + Evt_Admin__QueryShop_ID = 454, + Evt_Item__UseDone_ID = 455, + Evt_Allegiance__AllegianceUpdateDone_ID = 456, + Evt_Fellowship__FellowUpdateDone_ID = 457, + Evt_Fellowship__FellowStatsDone_ID = 458, + Evt_Item__AppraiseDone_ID = 459, + Evt_Admin__QueryCPWorth_ID = 460, + Evt_Admin__Heal_ID = 461, + Evt_Admin__InqAccountDataEvent_ID = 462, + Evt_Admin__Freeze_ID = 463, + Evt_Admin__TeleportHome_ID = 464, + Evt_Qualities__PrivateRemoveIntEvent_ID = 465, + Evt_Qualities__RemoveIntEvent_ID = 466, + Evt_Qualities__PrivateRemoveBoolEvent_ID = 467, + Evt_Qualities__RemoveBoolEvent_ID = 468, + Evt_Qualities__PrivateRemoveFloatEvent_ID = 469, + Evt_Qualities__RemoveFloatEvent_ID = 470, + Evt_Qualities__PrivateRemoveStringEvent_ID = 471, + Evt_Qualities__RemoveStringEvent_ID = 472, + Evt_Qualities__PrivateRemoveDataIDEvent_ID = 473, + Evt_Qualities__RemoveDataIDEvent_ID = 474, + Evt_Qualities__PrivateRemoveInstanceIDEvent_ID = 475, + Evt_Qualities__RemoveInstanceIDEvent_ID = 476, + Evt_Qualities__PrivateRemovePositionEvent_ID = 477, + Evt_Qualities__RemovePositionEvent_ID = 478, + Evt_Communication__Emote_ID = 479, + Evt_Communication__HearEmote_ID = 480, + Evt_Communication__SoulEmote_ID = 481, + Evt_Communication__HearSoulEmote_ID = 482, + Evt_Character__AddSpellFavorite_ID = 483, + Evt_Character__RemoveSpellFavorite_ID = 484, + Evt_Admin__ForceRegen_ID = 485, + Evt_Advocate__TeleportTo_ID = 486, + Evt_Admin__QueryMessage_ID = 487, + Evt_Admin__QueryTime_ID = 488, + Evt_Character__RequestPing_ID = 489, + Evt_Character__ReturnPing_ID = 490, + Evt_Admin__Gag_ID = 492, + Evt_Admin__DumpQuestTable_ID = 493, + Evt_Admin__WorldBroadcastEmote_ID = 494, + Evt_Admin__LocalBroadcastEmote_ID = 495, + Evt_Admin__DirectBroadcastEmote_ID = 496, + Evt_Admin__QueryEventStatus_ID = 497, + Evt_Admin__SetEventState_ID = 498, + Evt_Communication__SetSquelchDB_ID = 500, + Evt_Admin__CreateInternal_ID = 501, + Evt_Trade__OpenTradeNegotiations_ID = 502, + Evt_Trade__CloseTradeNegotiations_ID = 503, + Evt_Trade__AddToTrade_ID = 504, + Evt_Trade__RemoveFromTrade_ID = 505, + Evt_Trade__AcceptTrade_ID = 506, + Evt_Trade__DeclineTrade_ID = 507, + Evt_Trade__DumpTrade_ID = 508, + Evt_Trade__Recv_RegisterTrade_ID = 509, + Evt_Trade__Recv_OpenTrade_ID = 510, + Evt_Trade__Recv_CloseTrade_ID = 511, + Evt_Trade__Recv_AddToTrade_ID = 512, + Evt_Trade__Recv_RemoveFromTrade_ID = 513, + Evt_Trade__Recv_AcceptTrade_ID = 514, + Evt_Trade__Recv_DeclineTrade_ID = 515, + Evt_Trade__ResetTrade_ID = 516, + Evt_Trade__Recv_ResetTrade_ID = 517, + Evt_Admin__QueryViewing_ID = 518, + Evt_Trade__Recv_TradeFailure_ID = 519, + Evt_Trade__Recv_ClearTradeAcceptance_ID = 520, + Evt_Character__ClearPlayerConsentList_ID = 534, + Evt_Character__DisplayPlayerConsentList_ID = 535, + Evt_Character__RemoveFromPlayerConsentList_ID = 536, + Evt_Character__AddPlayerPermission_ID = 537, + Evt_Character__RemovePlayerPermission_ID = 538, + Evt_House__DumpHouse_ID = 539, + Evt_House__BuyHouse_ID = 540, + Evt_House__Recv_HouseProfile_ID = 541, + Evt_House__QueryHouse_ID = 542, + Evt_House__AbandonHouse_ID = 543, + Evt_House__StealHouse_ID = 544, + Evt_House__RentHouse_ID = 545, + Evt_House__LinkToHouse_ID = 546, + Evt_House__ReCacheHouse_ID = 547, + Evt_Character__SetDesiredComponentLevel_ID = 548, + Evt_House__Recv_HouseData_ID = 549, + Evt_House__Recv_HouseStatus_ID = 550, + Evt_House__Recv_UpdateRentTime_ID = 551, + Evt_House__Recv_UpdateRentPayment_ID = 552, + UPDATE_INT_EVENT = 553, + UPDATE_FLOAT_EVENT = 554, + UPDATE_STRING_EVENT = 555, + UPDATE_BOOL_EVENT = 556, + UPDATE_IID_EVENT = 557, + UPDATE_DID_EVENT = 558, + UPDATE_POSITION_EVENT = 559, + UPDATE_SKILL_EVENT = 560, + UPDATE_SKILL_LEVEL_EVENT = 561, + UPDATE_SAC_EVENT = 562, + UPDATE_ATTRIBUTE_EVENT = 563, + UPDATE_ATTRIBUTE_LEVEL_EVENT = 564, + UPDATE_ATTRIBUTE_2ND_EVENT = 565, + UPDATE_ATTRIBUTE_2ND_LEVEL_EVENT = 566, + UPDATE_INT_PRIVATE_EVENT = 567, + UPDATE_FLOAT_PRIVATE_EVENT = 568, + UPDATE_STRING_PRIVATE_EVENT = 569, + UPDATE_BOOL_PRIVATE_EVENT = 570, + UPDATE_IID_PRIVATE_EVENT = 571, + UPDATE_DID_PRIVATE_EVENT = 572, + UPDATE_POSITION_PRIVATE_EVENT = 573, + UPDATE_SKILL_PRIVATE_EVENT = 574, + UPDATE_SKILL_LEVEL_PRIVATE_EVENT = 575, + UPDATE_SAC_PRIVATE_EVENT = 576, + UPDATE_ATTRIBUTE_PRIVATE_EVENT = 577, + UPDATE_ATTRIBUTE_LEVEL_PRIVATE_EVENT = 578, + UPDATE_ATTRIBUTE_2ND_PRIVATE_EVENT = 579, + UPDATE_ATTRIBUTE_2ND_LEVEL_PRIVATE_EVENT = 580, + Evt_House__AddPermanentGuest_Event_ID = 581, + Evt_House__RemovePermanentGuest_Event_ID = 582, + Evt_House__SetOpenHouseStatus_Event_ID = 583, + Evt_House__Recv_UpdateRestrictions_ID = 584, + Evt_House__ChangeStoragePermission_Event_ID = 585, + Evt_House__BootSpecificHouseGuest_Event_ID = 586, + Evt_House__BootAllUninvitedGuests_Event_ID = 587, + Evt_House__RemoveAllStoragePermission_ID = 588, + Evt_House__RequestFullGuestList_Event_ID = 589, + Evt_House__RentPay_ID = 590, + Evt_House__RentWarn_ID = 591, + Evt_House__RentDue_ID = 592, + Evt_Allegiance__SetMotd_ID = 596, + Evt_Allegiance__QueryMotd_ID = 597, + Evt_Allegiance__ClearMotd_ID = 598, + Evt_House__Recv_UpdateHAR_ID = 599, + Evt_House__QueryLord_ID = 600, + Evt_House__Recv_HouseTransaction_ID = 601, + Evt_House__RentOverDue_ID = 602, + Evt_Admin__QueryInv_ID = 603, + Evt_House__AddAllStoragePermission_ID = 604, + Evt_House__QueryHouseOwner_ID = 605, + Evt_House__RemoveAllPermanentGuests_Event_ID = 606, + Evt_House__BootEveryone_Event_ID = 607, + Evt_Admin__Orphan_ID = 608, + Evt_House__AdminTeleToHouse_ID = 609, + Evt_House__TeleToHouse_Event_ID = 610, + Evt_Item__QueryItemMana_ID = 611, + Evt_Item__QueryItemManaResponse_ID = 612, + Evt_House__PayRentForAllHouses_ID = 613, + Evt_House__SetHooksVisibility_ID = 614, + Evt_House__ModifyAllegianceGuestPermission_ID = 615, + Evt_House__ModifyAllegianceStoragePermission_ID = 616, + Evt_Game__Join_ID = 617, + Evt_Game__Quit_ID = 618, + Evt_Game__Move_ID = 619, + Evt_Game__MoveGrid_ID = 620, + Evt_Game__MovePass_ID = 621, + Evt_Game__Stalemate_ID = 622, + Evt_Admin__CreateTreasure_ID = 623, + Evt_House__ListAvailableHouses_ID = 624, + Evt_House__Recv_AvailableHouses_ID = 625, + Evt_Admin__TogglePortalBypass_ID = 626, + Evt_Admin__Mutate_ID = 627, + Evt_Character__ConfirmationRequest_ID = 628, + Evt_Character__ConfirmationResponse_ID = 629, + Evt_Character__ConfirmationDone_ID = 630, + Evt_Allegiance__BreakAllegianceBoot_ID = 631, + Evt_House__TeleToMansion_Event_ID = 632, + Evt_Character__Suicide_ID = 633, + Evt_Allegiance__AllegianceLoginNotificationEvent_ID = 634, + Evt_Allegiance__AllegianceInfoRequest_ID = 635, + Evt_Allegiance__AllegianceInfoResponseEvent_ID = 636, + Evt_Inventory__CreateTinkeringTool_ID = 637, + Evt_Admin__CreateMaterial_ID = 638, + Evt_Admin__EraseQuestTable_ID = 639, + Recv_Game__OpponentStalemateState_ID = 640, + Evt_Game__Recv_JoinGameResponse_ID = 641, + Evt_Game__Recv_StartGame_ID = 642, + Evt_Game__Recv_MoveResponse_ID = 643, + Evt_Game__Recv_OpponentTurn_ID = 644, + Evt_Game__Recv_OppenentStalemateState_ID = 645, + Evt_Character__SpellbookFilterEvent_ID = 646, + Evt_Admin__QueryTrophyDrops_ID = 647, + Evt_House__SetMaintenanceFree_ID = 648, + Evt_House__DumpHouseAccess_ID = 649, + Evt_Communication__WeenieError_ID = 650, + Evt_Communication__WeenieErrorWithString_ID = 651, + Evt_Game__Recv_GameOver_ID = 652, + Evt_Character__TeleToMarketplace_ID = 653, + Evt_Admin__StampQuest_ID = 654, + Evt_Character__EnterPKLite_ID = 655, + Evt_Fellowship__AssignNewLeader_ID = 656, + Evt_Fellowship__ChangeFellowOpeness_ID = 657, + Evt_Admin__ClearEvent_ID = 658, + Evt_Admin__Limbo_ID = 659, + Evt_Admin__SentinelRunBoost_ID = 660, + Evt_Communication__Recv_ChatRoomTracker_ID = 661, + Evt_Admin__PassupInfo_ID = 662, + Evt_Admin__SetNeverHouseKept_ID = 663, + Evt_Admin__SetCPWorth_ID = 664, + Evt_Admin__SetDeafMode_ID = 665, + Evt_Admin__SetDeafHear_ID = 666, + Evt_Admin__SetDeafMute_ID = 667, + Evt_Admin__SnoopOn_ID = 668, + Evt_Admin__SetInvincibility_ID = 669, + Evt_Admin__AssertTheServer_ID = 671, + Evt_Allegiance__AllegianceChatBoot_ID = 672, + Evt_Allegiance__AddAllegianceBan_ID = 673, + Evt_Allegiance__RemoveAllegianceBan_ID = 674, + Evt_Allegiance__ListAllegianceBans_ID = 675, + Evt_Allegiance__AddAllegianceOfficer_ID = 676, + Evt_Allegiance__RemoveAllegianceOfficer_ID = 677, + Evt_Allegiance__ListAllegianceOfficers_ID = 678, + Evt_Allegiance__ClearAllegianceOfficers_ID = 679, + Evt_Admin__SavePosition_ID = 680, + Evt_Admin__RecallPosition_ID = 681, + Evt_Admin__AdminBoot_ID = 682, + Evt_Allegiance__RecallAllegianceHometown_ID = 683, + Evt_Admin__DumpRareTiers_ID = 684, + Evt_Admin__QueryPluginList_ID = 685, + Evt_Admin__Recv_QueryPluginList_ID = 686, + Evt_Admin__QueryPluginListResponse_ID = 687, + Evt_Admin__QueryPlugin_ID = 688, + Evt_Admin__Recv_QueryPlugin_ID = 689, + Evt_Admin__QueryPluginResponse_ID = 690, + Evt_Admin__Recv_QueryPluginResponse_ID = 691, + Evt_Inventory__Recv_SalvageOperationsResultData_ID = 692, + Evt_Admin__SetInt64_ID = 693, + UPDATE_INT64_EVENT = 694, + UPDATE_INT64_PRIVATE_EVENT = 695, + Evt_Qualities__PrivateRemoveInt64Event_ID = 696, + Evt_Qualities__RemoveInt64Event_ID = 697, + Evt_Admin__RaiseLevel_ID = 698, + Evt_Communication__HearSpeech_ID = 699, + Evt_Communication__HearRangedSpeech_ID = 700, + Evt_Communication__HearDirectSpeech_ID = 701, + Evt_Fellowship__FullUpdate_ID = 702, + Evt_Fellowship__Disband_ID = 703, + Evt_Fellowship__UpdateFellow_ID = 704, + Evt_Magic__UpdateSpell_ID = 705, + Evt_Magic__UpdateEnchantment_ID = 706, + Evt_Magic__RemoveEnchantment_ID = 707, + Evt_Magic__UpdateMultipleEnchantments_ID = 708, + Evt_Magic__RemoveMultipleEnchantments_ID = 709, + Evt_Magic__PurgeEnchantments_ID = 710, + Evt_Magic__DispelEnchantment_ID = 711, + Evt_Magic__DispelMultipleEnchantments_ID = 712, + Evt_Misc__PortalStormBrewing_ID = 713, + Evt_Misc__PortalStormImminent_ID = 714, + Evt_Misc__PortalStorm_ID = 715, + Evt_Misc__PortalStormSubsided_ID = 716, + Evt_Qualities__PrivateUpdateInt_ID = 717, + Evt_Qualities__UpdateInt_ID = 718, + Evt_Qualities__PrivateUpdateInt64_ID = 719, + Evt_Qualities__UpdateInt64_ID = 720, + Evt_Qualities__PrivateUpdateBool_ID = 721, + Evt_Qualities__UpdateBool_ID = 722, + Evt_Qualities__PrivateUpdateFloat_ID = 723, + Evt_Qualities__UpdateFloat_ID = 724, + Evt_Qualities__PrivateUpdateString_ID = 725, + Evt_Qualities__UpdateString_ID = 726, + Evt_Qualities__PrivateUpdateDataID_ID = 727, + Evt_Qualities__UpdateDataID_ID = 728, + Evt_Qualities__PrivateUpdateInstanceID_ID = 729, + Evt_Qualities__UpdateInstanceID_ID = 730, + Evt_Qualities__PrivateUpdatePosition_ID = 731, + Evt_Qualities__UpdatePosition_ID = 732, + Evt_Qualities__PrivateUpdateSkill_ID = 733, + Evt_Qualities__UpdateSkill_ID = 734, + Evt_Qualities__PrivateUpdateSkillLevel_ID = 735, + Evt_Qualities__UpdateSkillLevel_ID = 736, + Evt_Qualities__PrivateUpdateSkillAC_ID = 737, + Evt_Qualities__UpdateSkillAC_ID = 738, + Evt_Qualities__PrivateUpdateAttribute_ID = 739, + Evt_Qualities__UpdateAttribute_ID = 740, + Evt_Qualities__PrivateUpdateAttributeLevel_ID = 741, + Evt_Qualities__UpdateAttributeLevel_ID = 742, + Evt_Qualities__PrivateUpdateAttribute2nd_ID = 743, + Evt_Qualities__UpdateAttribute2nd_ID = 744, + Evt_Qualities__PrivateUpdateAttribute2ndLevel_ID = 745, + Evt_Qualities__UpdateAttribute2ndLevel_ID = 746, + Evt_Communication__TransientString_ID = 747, + Evt_Admin__ForceRenameCharacter_ID = 780, + Evt_Admin__GagTime_ID = 781, + Evt_Admin__AddRenameToken_ID = 782, + Evt_Character__Rename_ID = 783, + Evt_Character__FinishBarber_ID = 785, + Evt_Magic__PurgeBadEnchantments_ID = 786, + Evt_Social__SendClientContractTrackerTable_ID = 788, + Evt_Social__SendClientContractTracker_ID = 789, + Evt_Social__AbandonContract_ID = 790, + Evt_Admin__Environs_ID = 60000, + Evt_Movement__PositionAndMovement_ID = 63001, + Evt_Movement__Jump_ID = 63003, + Evt_Movement__MoveToState_ID = 63004, + Evt_Movement__DoMovementCommand_ID = 63006, + Evt_Physics__ObjDescEvent_ID = 63013, + USER_ALERT_EVENT = 63024, + CHARACTER_GENERATION_VERIFICATION_RESPONSE_EVENT = 63043, + Evt_Movement__TurnEvent_ID = 63048, + Evt_Movement__TurnToEvent_ID = 63049, + EXPIRE_WARNING_EVENT = 63057, + CHARACTER_EXIT_GAME_EVENT = 63059, // Bidirectional + CHARACTER_PREVIEW_EVENT = 63060, + CHARACTER_DELETE_EVENT = 63061, // Bidirectional + CHARACTER_CREATE_EVENT = 63062, + CHARACTER_ENTER_GAME_EVENT = 63063, + Evt_Login__CharacterSet_ID = 63064, + CHARACTER_ERROR_EVENT = 63065, + SYSTEM_MESSAGES_EVENT = 63066, + Evt_Movement__StopMovementCommand_ID = 63073, + ADMIN_RECV_PLAYER_DATA_EVENT = 63131, + CONTROL_FORCE_OBJDESC_SEND_EVENT = 63210, + Evt_Physics__CreateObject_ID = 63301, + Evt_Physics__CreatePlayer_ID = 63302, + Evt_Physics__DeleteObject_ID = 63303, + Evt_Movement__UpdatePosition_ID = 63304, + Evt_Physics__ParentEvent_ID = 63305, + Evt_Physics__PickupEvent_ID = 63306, + Evt_Physics__SetState_ID = 63307, + Evt_Movement__MovementEvent_ID = 63308, + Evt_Physics__VectorUpdate_ID = 63310, + Evt_Physics__SoundEvent_ID = 63312, + Evt_Physics__PlayerTeleport_ID = 63313, + Evt_Movement__AutonomyLevel_ID = 63314, + Evt_Movement__AutonomousPosition_ID = 63315, + Evt_Physics__PlayScriptID_ID = 63316, + Evt_Physics__PlayScriptType_ID = 63317, + LBDB_STATUS_CLIENT_EVENT = 63333, + CLIDAT_REQUEST_DATA_EVENT = 63400, + CLIDAT_REQUEST_CELL_EVENT = 63401, + CLIDAT_ERROR_EVENT = 63402, + CLIDAT_LANDBLOCK_EVENT = 63403, + CLIDAT_CELL_EVENT = 63404, + WEENIE_ORDERED_EVENT = 63408, + ORDERED_EVENT = 63409, + CLIDAT_DATA_EVENT = 63415, + CLIDAT_CELL_PURGE_EVENT = 63419, + ACCOUNT_BANNED_EVENT = 63425, + CLIENT_LOGON_SERVER_EVENT = 63426, + CHARDB_READY_TO_ENTER_GAME_EVENT = 63431, + CLIENT_REQUEST_ENTER_GAME_EVENT = 63432, + Evt_Movement__Jump_NonAutonomous_ID = 63433, + Evt_Admin__ReceiveAccountData_ID = 63434, + Evt_Admin__ReceivePlayerData_ID = 63435, + Evt_Admin__GetServerVersion_ID = 63436, + Evt_Admin__Friends_ID = 63437, + Evt_Admin__ReloadSystemMessages_ID = 63438, + Evt_Admin__SetUserLimit_ID = 63439, + Evt_Admin__SetLoadBalanceInterval_ID = 63440, + Evt_Admin__SetLoadBalanceThreshold_ID = 63441, + Evt_Admin__SetPortalStormThreshold_ID = 63442, + Evt_Admin__SetPortalStormNumToMove_ID = 63443, + Evt_Admin__FingerCharacter_ID = 63444, + Evt_Admin__FingerAccount_ID = 63445, + Evt_Admin__AdminLevelList_ID = 63446, + Evt_Admin__CopyCharacter_ID = 63447, + Evt_Admin__AdminNextIDsList_ID = 63448, + Evt_Admin__AdminRestoreCharacter_ID = 63449, + Evt_Admin__QueryBannedList_ID = 63450, + Evt_Physics__UpdateObject_ID = 63451, + ACCOUNT_BOOTED_EVENT = 63452, + Evt_Admin__ClearLocks_ID = 63453, + Evt_Admin__ChatServerData_ID = 63454, // Bidirectional + Evt_Character__EnterGame_ServerReady_ID = 63455, + Evt_Communication__TextboxString_ID = 63456, + Evt_Login__WorldInfo_ID = 63457, + Evt_DDD__Data_ID = 63458, + Evt_DDD__RequestData_ID = 63459, + Evt_DDD__Error_ID = 63460, + Evt_DDD__Interrogation_ID = 63461, + Evt_DDD__InterrogationResponse_ID = 63462, + Evt_DDD__BeginDDD_ID = 63463, + Evt_DDD__BeginPullDDD_ID = 63464, + Evt_DDD__IterationData_ID = 63465, + Evt_DDD__EndDDD_ID = 63466, + Evt_DDD__Pending_ID = 63467 + + // sendtocontrol = 2 + // weenie = 3 + // logon = 4 + // database = 5 +} diff --git a/aclogview/Packets.cs b/aclogview/Packets.cs new file mode 100644 index 0000000..40f8fc1 --- /dev/null +++ b/aclogview/Packets.cs @@ -0,0 +1,438 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +public class Util { + public static IDictionary> readers = null; + + public static void initReaders() { + if (readers == null) { + readers = new Dictionary>(); + readers.Add(typeof(byte), r => r.ReadByte()); + readers.Add(typeof(ushort), r => r.ReadUInt16()); + readers.Add(typeof(short), r => r.ReadInt16()); + readers.Add(typeof(uint), r => r.ReadUInt32()); + readers.Add(typeof(int), r => r.ReadInt32()); + readers.Add(typeof(ulong), r => r.ReadUInt64()); + readers.Add(typeof(long), r => r.ReadInt64()); + readers.Add(typeof(float), r => r.ReadSingle()); + readers.Add(typeof(double), r => r.ReadDouble()); + + readers.Add(typeof(PStringChar), r => PStringChar.read(r)); + + readers.Add(typeof(STypeInt), r => (STypeInt)r.ReadUInt32()); + readers.Add(typeof(STypeInt64), r => (STypeInt64)r.ReadUInt32()); + readers.Add(typeof(STypeBool), r => (STypeBool)r.ReadUInt32()); + readers.Add(typeof(STypeFloat), r => (STypeFloat)r.ReadUInt32()); + readers.Add(typeof(STypeString), r => (STypeString)r.ReadUInt32()); + readers.Add(typeof(STypeDID), r => (STypeDID)r.ReadUInt32()); + readers.Add(typeof(STypePosition), r => (STypePosition)r.ReadUInt32()); + readers.Add(typeof(STypeIID), r => (STypeIID)r.ReadUInt32()); + readers.Add(typeof(STypeSkill), r => (STypeSkill)r.ReadUInt32()); + + readers.Add(typeof(CharacterTitle), r => (CharacterTitle)r.ReadUInt32()); + readers.Add(typeof(SKILL_ADVANCEMENT_CLASS), r => (SKILL_ADVANCEMENT_CLASS)r.ReadUInt32()); + + readers.Add(typeof(CM_Magic.Enchantment), r => CM_Magic.Enchantment.read(r)); + readers.Add(typeof(CM_Social.FriendData), r => CM_Social.FriendData.read(r)); + readers.Add(typeof(Attribute), r => Attribute.read(r)); + readers.Add(typeof(SecondaryAttribute), r => SecondaryAttribute.read(r)); + readers.Add(typeof(Position), r => Position.read(r)); + readers.Add(typeof(Skill), r => Skill.read(r)); + } + } + + public static ushort byteSwapped(ushort value) { + return (ushort)(((value & 0x00FFU) << 8) | ((value & 0xFF00U) >> 8)); + } + + public static void readToAlign(BinaryReader binaryReader) { + long alignDelta = binaryReader.BaseStream.Position % 4; + if (alignDelta != 0) { + binaryReader.ReadBytes((int)(4 - alignDelta)); + } + } + + public static uint readDataIDOfKnownType(uint i_didFirstID, BinaryReader binaryReader) { + ushort offset = binaryReader.ReadUInt16(); + + if ((offset & 0x8000) == 0) { + return i_didFirstID + offset; + } else { + ushort offsetHigh = binaryReader.ReadUInt16(); + return i_didFirstID + (uint)(offsetHigh | ((offset & 0x3FFF) << 16)); + } + } + + public static uint readWClassIDCompressed(BinaryReader binaryReader) { + ushort id = binaryReader.ReadUInt16(); + + if ((id & 0x8000) == 0) { + return id; + } else { + ushort idHigh = binaryReader.ReadUInt16(); + return (uint)(idHigh | ((id & 0x3FFF) << 16)); + } + } + + public static PacketOpcode readOpcode(BinaryReader fragDataReader) { + PacketOpcode opcode = 0; + opcode = (PacketOpcode)fragDataReader.ReadUInt32(); + if (opcode == PacketOpcode.WEENIE_ORDERED_EVENT) { + WOrderHdr orderHeader = WOrderHdr.read(fragDataReader); + opcode = (PacketOpcode)fragDataReader.ReadUInt32(); + } + if (opcode == PacketOpcode.ORDERED_EVENT) { + OrderHdr orderHeader = OrderHdr.read(fragDataReader); + opcode = (PacketOpcode)fragDataReader.ReadUInt32(); + } + + return opcode; + } +} + +public class NetBlobIDUtils { + public static bool IsEphemeralFlagSet(ulong _id) { + return (_id & 0x8000000000000000) != 0; + } + + public static ulong GetOrderingType(ulong _id) { + return (_id & 0x1F00000000000000); + } + + public static ulong GetSequenceID(ulong _id) { + return (_id & 0x00FF0000FFFFFFFF); + } +} + +public class NetBlob { + public enum State { + NETBLOB_FROZEN, + NETBLOB_SENDING, + NETBLOB_RECEIVING, + NETBLOB_RECEIVED, + NETBLOB_FRAGMENTED + } + + public State state_; + public byte[] buf_; + public uint cMaxFragments_; + public uint numFragments_; + public ushort sender_; + public ushort queueID_; + public uint priority_; + public NetBlob waitNext_; + ulong savedNetBlobID_; +} + +public class BlobFrag { + //public BlobFragHeader_t hdrWrite_; + //public BlobFragHeader_t hdrRead_; + public BlobFragHeader_t memberHeader_; + public byte[] dat_; + public NetBlob myBlob_; +} + +public class NetPacket { + public enum Flags__guessedname { + npfChecksumEncrypted = (1 << 0), + npfHasTimeSensitiveHeaders = (1 << 1), + npfHasSequencedData = (1 << 2), + npfHasHighPriorityHeaders = (1 << 3) + } + + public List specialFragList_ = new List(); + public List fragList_ = new List(); + public ushort recipient_; + public uint realPriority_; + public uint size_; + public uint seqNum_; + public uint cryptoKey_; + public uint checksum_; + public uint flags_; +} + +public class PStringChar { + public string m_buffer; + + public static PStringChar read(BinaryReader binaryReader) { + PStringChar newObj = new PStringChar(); + + uint size = binaryReader.ReadUInt16(); + if (size == ushort.MaxValue) { + binaryReader.BaseStream.Seek(-2, SeekOrigin.Current); + size = binaryReader.ReadUInt32(); + } + + if (size == 0) { + newObj.m_buffer = null; + } else { + newObj.m_buffer = new string(binaryReader.ReadChars((int)size)); + } + + Util.readToAlign(binaryReader); + + return newObj; + } + + public override string ToString() { + return m_buffer; + } +} + +public class PList { + public List list = new List(); + + public static PList read(BinaryReader binaryReader) { + PList newObj = new PList(); + uint numElements = binaryReader.ReadUInt32(); + for (int i = 0; i < numElements; ++i) { + newObj.list.Add(Util.readers[typeof(T)](binaryReader)); + } + return newObj; + } + + public void contributeToTreeNode(TreeNode node) { + foreach (T element in list) { + node.Nodes.Add(element.ToString()); + } + } +} + +public class PackableHashTable { + public Dictionary hashTable = new Dictionary(); + + public static PackableHashTable read(BinaryReader binaryReader) { + PackableHashTable newObj = new PackableHashTable(); + uint sizeInfo = binaryReader.ReadUInt32(); + uint _table_size = sizeInfo >> 16; // NOTE: We don't actually need the bucket sizes since C# will just do its own thing internally + uint _currNum = sizeInfo & 0xFFFF; + for (int i = 0; i < _currNum; ++i) { + newObj.hashTable.Add(Util.readers[typeof(TKey)](binaryReader), Util.readers[typeof(TValue)](binaryReader)); + } + return newObj; + } + + public void contributeToTreeNode(TreeNode node) { + foreach (KeyValuePair element in hashTable) { + node.Nodes.Add(element.Key + " -> " + element.Value); + } + } +} + +public abstract class Message { + public abstract void contributeToTreeView(TreeView treeView); +} + +public class EmptyMessage : Message { + public PacketOpcode opcode; + + public EmptyMessage(PacketOpcode opcode) { + this.opcode = opcode; + } + + public override void contributeToTreeView(TreeView treeView) { + TreeNode rootNode = new TreeNode(opcode.ToString()); + rootNode.Expand(); + treeView.Nodes.Add(rootNode); + } +} + +public class MessageProcessor { + public virtual bool acceptMessageData(BinaryReader messageDataReader, TreeView outputTreeView) { + return false; + } +} + +public class Vector3 { + public float x; + public float y; + public float z; + + public override string ToString() { + StringBuilder builder = new StringBuilder(); + + builder.Append(x); + builder.Append(" "); + builder.Append(y); + builder.Append(" "); + builder.Append(z); + + return builder.ToString(); + } +} + +public class Mat3x3 { + public float[] entries = new float[9]; + + public override string ToString() { + StringBuilder builder = new StringBuilder(); + + for (int i = 0; i < entries.Length; ++i) { + builder.Append(entries[i]); + builder.Append(" "); + } + + return builder.ToString(); + } +} + +public class Frame { + public float qw = 1.0f; + public float qx; + public float qy; + public float qz; + public Mat3x3 m_fl2gv = new Mat3x3(); // Local-to-global matrix? + public Vector3 m_fOrigin = new Vector3(); + + public void cache() { + // TODO: Clean this up + float b2 = qx + qx; + float c2 = qy + qy; + float v3 = qz + qz; + float v4 = qw * b2; + float v5 = qw * c2; + float v6 = qw * v3; + float v7 = qx * b2; + float v8 = qx * c2; + float bd2 = qx * v3; + float cc2 = qy * c2; + float v11 = qy * v3; + float v12 = qz * v3; + m_fl2gv.entries[0] = 1.0f - cc2 - v12; + m_fl2gv.entries[1] = v8 + v6; + m_fl2gv.entries[2] = bd2 - v5; + m_fl2gv.entries[3] = v8 - v6; + float v13 = 1.0f - v7; + m_fl2gv.entries[4] = v13 - v12; + m_fl2gv.entries[5] = v11 + v4; + m_fl2gv.entries[6] = bd2 + v5; + m_fl2gv.entries[7] = v11 - v4; + m_fl2gv.entries[8] = v13 - cc2; + } + + public static Frame read(BinaryReader binaryReader) { + Frame newObj = new Frame(); + newObj.m_fOrigin.x = binaryReader.ReadSingle(); + newObj.m_fOrigin.y = binaryReader.ReadSingle(); + newObj.m_fOrigin.z = binaryReader.ReadSingle(); + newObj.qw = binaryReader.ReadSingle(); + newObj.qx = binaryReader.ReadSingle(); + newObj.qy = binaryReader.ReadSingle(); + newObj.qz = binaryReader.ReadSingle(); + newObj.cache(); + return newObj; + } + + public void contributeToTreeNode(TreeNode node) { + node.Nodes.Add("qw = " + qw); + node.Nodes.Add("qx = " + qx); + node.Nodes.Add("qy = " + qy); + node.Nodes.Add("qz = " + qz); + node.Nodes.Add("m_fl2gv = " + m_fl2gv); + node.Nodes.Add("m_fOrigin = " + m_fOrigin); + } +} + +public class Position { + public uint objcell_id; + public Frame frame = new Frame(); + + public static Position read(BinaryReader binaryReader) { + Position newObj = new Position(); + newObj.objcell_id = binaryReader.ReadUInt32(); + newObj.frame = Frame.read(binaryReader); + return newObj; + } + + public static Position readOrigin(BinaryReader binaryReader) { + Position newObj = new Position(); + newObj.objcell_id = binaryReader.ReadUInt32(); + newObj.frame.m_fOrigin.x = binaryReader.ReadSingle(); + newObj.frame.m_fOrigin.y = binaryReader.ReadSingle(); + newObj.frame.m_fOrigin.z = binaryReader.ReadSingle(); + return newObj; + } + + public void contributeToTreeNode(TreeNode node) { + node.Nodes.Add("objcell_id = " + objcell_id); + TreeNode frameNode = node.Nodes.Add("frame = "); + frame.contributeToTreeNode(frameNode); + } +} + +public class Skill { + public uint _level_from_pp; + public SKILL_ADVANCEMENT_CLASS _sac; + public uint _pp; + public uint _init_level; + public double _resistance_of_last_check; + public double _last_used_time; + + public static Skill read(BinaryReader binaryReader) { + Skill newObj = new Skill(); + newObj._level_from_pp = binaryReader.ReadUInt32(); + newObj._sac = (SKILL_ADVANCEMENT_CLASS)binaryReader.ReadUInt32(); + newObj._pp = binaryReader.ReadUInt32(); + newObj._init_level = binaryReader.ReadUInt32(); + newObj._resistance_of_last_check = binaryReader.ReadDouble(); + newObj._last_used_time = binaryReader.ReadDouble(); + return newObj; + } + + public void contributeToTreeNode(TreeNode node) { + node.Nodes.Add("_level_from_pp = " + _level_from_pp); + node.Nodes.Add("_sac = " + _sac); + node.Nodes.Add("_pp = " + _pp); + node.Nodes.Add("_init_level = " + _init_level); + node.Nodes.Add("_resistance_of_last_check = " + _resistance_of_last_check); + node.Nodes.Add("_last_used_time = " + _last_used_time); + } +} + +public class Attribute { + public uint _level_from_cp; + public uint _init_level; + public uint _cp_spent; + + public static Attribute read(BinaryReader binaryReader) { + Attribute newObj = new Attribute(); + newObj._level_from_cp = binaryReader.ReadUInt32(); + newObj._init_level = binaryReader.ReadUInt32(); + newObj._cp_spent = binaryReader.ReadUInt32(); + return newObj; + } + + public void contributeToTreeNode(TreeNode node) { + node.Nodes.Add("_level_from_cp = " + _level_from_cp); + node.Nodes.Add("_init_level = " + _init_level); + node.Nodes.Add("_cp_spent = " + _cp_spent); + } +} + +public class SecondaryAttribute { + public uint _level_from_cp; + public uint _init_level; + public uint _cp_spent; + public uint _current_level; + + public static SecondaryAttribute read(BinaryReader binaryReader) { + SecondaryAttribute newObj = new SecondaryAttribute(); + newObj._level_from_cp = binaryReader.ReadUInt32(); + newObj._init_level = binaryReader.ReadUInt32(); + newObj._cp_spent = binaryReader.ReadUInt32(); + newObj._current_level = binaryReader.ReadUInt32(); + return newObj; + } + + public void contributeToTreeNode(TreeNode node) { + node.Nodes.Add("_level_from_cp = " + _level_from_cp); + node.Nodes.Add("_init_level = " + _init_level); + node.Nodes.Add("_cp_spent = " + _cp_spent); + node.Nodes.Add("_current_level = " + _current_level); + } +} diff --git a/aclogview/Program.cs b/aclogview/Program.cs new file mode 100644 index 0000000..f6e8268 --- /dev/null +++ b/aclogview/Program.cs @@ -0,0 +1,19 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace aclogview { + static class Program { + /// + /// The main entry point for the application. + /// + [STAThread] + static void Main() { + Application.EnableVisualStyles(); + Application.SetCompatibleTextRenderingDefault(false); + Application.Run(new Form1()); + } + } +} diff --git a/aclogview/Properties/AssemblyInfo.cs b/aclogview/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..7ff0ffd --- /dev/null +++ b/aclogview/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("aclogview")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("aclogview")] +[assembly: AssemblyCopyright("Copyright © 2017")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("e0f3d649-bd24-4a37-8bd5-4f421263e0f2")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/aclogview/Properties/Resources.Designer.cs b/aclogview/Properties/Resources.Designer.cs new file mode 100644 index 0000000..2cc86c5 --- /dev/null +++ b/aclogview/Properties/Resources.Designer.cs @@ -0,0 +1,62 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.42000 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace aclogview.Properties { + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager { + get { + if ((resourceMan == null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("aclogview.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + } +} diff --git a/aclogview/Properties/Resources.resx b/aclogview/Properties/Resources.resx new file mode 100644 index 0000000..af7dbeb --- /dev/null +++ b/aclogview/Properties/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/aclogview/Properties/Settings.Designer.cs b/aclogview/Properties/Settings.Designer.cs new file mode 100644 index 0000000..7fbd5ef --- /dev/null +++ b/aclogview/Properties/Settings.Designer.cs @@ -0,0 +1,26 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.42000 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace aclogview.Properties { + + + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "11.0.0.0")] + internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase { + + private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); + + public static Settings Default { + get { + return defaultInstance; + } + } + } +} diff --git a/aclogview/Properties/Settings.settings b/aclogview/Properties/Settings.settings new file mode 100644 index 0000000..3964565 --- /dev/null +++ b/aclogview/Properties/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/aclogview/Proto_UI.cs b/aclogview/Proto_UI.cs new file mode 100644 index 0000000..737f292 --- /dev/null +++ b/aclogview/Proto_UI.cs @@ -0,0 +1,112 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +public class Proto_UI : MessageProcessor { + + public override bool acceptMessageData(BinaryReader messageDataReader, TreeView outputTreeView) { + bool handled = true; + + PacketOpcode opcode = Util.readOpcode(messageDataReader); + switch (opcode) { + case PacketOpcode.CHARACTER_EXIT_GAME_EVENT: { + LogOff message = LogOff.read(messageDataReader); + message.contributeToTreeView(outputTreeView); + break; + } + case PacketOpcode.CHARACTER_ENTER_GAME_EVENT: { + EnterWorld message = EnterWorld.read(messageDataReader); + message.contributeToTreeView(outputTreeView); + break; + } + case PacketOpcode.CONTROL_FORCE_OBJDESC_SEND_EVENT: { + ForceObjdesc message = ForceObjdesc.read(messageDataReader); + message.contributeToTreeView(outputTreeView); + break; + } + case PacketOpcode.CLIENT_REQUEST_ENTER_GAME_EVENT: { + EnterWorldRequest message = EnterWorldRequest.read(messageDataReader); + message.contributeToTreeView(outputTreeView); + break; + } + default: { + handled = false; + break; + } + } + + return handled; + } + + public class EnterWorldRequest : Message { + public static EnterWorldRequest read(BinaryReader binaryReader) { + EnterWorldRequest newObj = new EnterWorldRequest(); + return newObj; + } + + public override void contributeToTreeView(TreeView treeView) { + TreeNode rootNode = new TreeNode(this.GetType().Name); + rootNode.Expand(); + treeView.Nodes.Add(rootNode); + } + } + + public class EnterWorld : Message { + public uint gid; + public PStringChar account; + + public static EnterWorld read(BinaryReader binaryReader) { + EnterWorld newObj = new EnterWorld(); + newObj.gid = binaryReader.ReadUInt32(); + newObj.account = PStringChar.read(binaryReader); + return newObj; + } + + public override void contributeToTreeView(TreeView treeView) { + TreeNode rootNode = new TreeNode(this.GetType().Name); + rootNode.Expand(); + rootNode.Nodes.Add("gid = " + gid); + rootNode.Nodes.Add("account = " + account.m_buffer); + treeView.Nodes.Add(rootNode); + } + } + + public class ForceObjdesc : Message { + public uint object_id; + + public static ForceObjdesc read(BinaryReader binaryReader) { + ForceObjdesc newObj = new ForceObjdesc(); + newObj.object_id = binaryReader.ReadUInt32(); + return newObj; + } + + public override void contributeToTreeView(TreeView treeView) { + TreeNode rootNode = new TreeNode(this.GetType().Name); + rootNode.Expand(); + rootNode.Nodes.Add("object_id = " + object_id); + treeView.Nodes.Add(rootNode); + } + } + + // TODO: This is bidirectional: client-to-sever has a gid; server-to-client does not + public class LogOff : Message { + public uint gid; + + public static LogOff read(BinaryReader binaryReader) { + LogOff newObj = new LogOff(); + newObj.gid = binaryReader.ReadUInt32(); + return newObj; + } + + public override void contributeToTreeView(TreeView treeView) { + TreeNode rootNode = new TreeNode(this.GetType().Name); + rootNode.Expand(); + rootNode.Nodes.Add("gid = " + gid); + treeView.Nodes.Add(rootNode); + } + } +} diff --git a/aclogview/aclogview.csproj b/aclogview/aclogview.csproj new file mode 100644 index 0000000..20e45bc --- /dev/null +++ b/aclogview/aclogview.csproj @@ -0,0 +1,146 @@ + + + + + Debug + AnyCPU + {E0F3D649-BD24-4A37-8BD5-4F421263E0F2} + WinExe + Properties + aclogview + aclogview + v4.5.2 + 512 + true + + + AnyCPU + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + AnyCPU + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Form + + + Form1.cs + + + + + + + + + + + + Form1.cs + + + ResXFileCodeGenerator + Resources.Designer.cs + Designer + + + True + Resources.resx + + + SettingsSingleFileGenerator + Settings.Designer.cs + + + True + Settings.settings + True + + + + + + + + \ No newline at end of file diff --git a/aclogview/pcap.cs b/aclogview/pcap.cs new file mode 100644 index 0000000..3da4fc5 --- /dev/null +++ b/aclogview/pcap.cs @@ -0,0 +1,112 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +class PcapHeader { + public uint magicNumber; + public ushort versionMajor; + public ushort versionMinor; + public uint thisZone; + public uint sigFigs; + public uint snapLen; + public uint network; + + public static PcapHeader read(BinaryReader binaryReader) { + PcapHeader newObj = new PcapHeader(); + newObj.magicNumber = binaryReader.ReadUInt32(); + newObj.versionMajor = binaryReader.ReadUInt16(); + newObj.versionMinor = binaryReader.ReadUInt16(); + newObj.thisZone = binaryReader.ReadUInt32(); + newObj.sigFigs = binaryReader.ReadUInt32(); + newObj.snapLen = binaryReader.ReadUInt32(); + newObj.network = binaryReader.ReadUInt32(); + return newObj; + } +} + +class PcapRecordHeader { + public uint tsSec; + public uint tsUsec; + public uint inclLen; + public uint origLen; + + public static PcapRecordHeader read(BinaryReader binaryReader) { + PcapRecordHeader newObj = new PcapRecordHeader(); + newObj.tsSec = binaryReader.ReadUInt32(); + newObj.tsUsec = binaryReader.ReadUInt32(); + newObj.inclLen = binaryReader.ReadUInt32(); + newObj.origLen = binaryReader.ReadUInt32(); + return newObj; + } +} + +class EthernetHeader { + public byte[] dest; + public byte[] source; + public ushort proto; + + public static EthernetHeader read(BinaryReader binaryReader) { + EthernetHeader newObj = new EthernetHeader(); + newObj.dest = binaryReader.ReadBytes(6); + newObj.source = binaryReader.ReadBytes(6); + newObj.proto = binaryReader.ReadUInt16(); + return newObj; + } +} + +class IpAddress { + public byte[] bytes; + + public static IpAddress read(BinaryReader binaryReader) { + IpAddress newObj = new IpAddress(); + newObj.bytes = binaryReader.ReadBytes(4); + return newObj; + } +} + +class IpHeader { + public byte verIhl; + public byte tos; + public ushort tLen; + public ushort identification; + public ushort flagsFo; + public byte ttl; + public byte proto; + public ushort crc; + public IpAddress sAddr; + public IpAddress dAddr; + + public static IpHeader read(BinaryReader binaryReader) { + IpHeader newObj = new IpHeader(); + newObj.verIhl = binaryReader.ReadByte(); + newObj.tos = binaryReader.ReadByte(); + newObj.tLen = binaryReader.ReadUInt16(); + newObj.identification = binaryReader.ReadUInt16(); + newObj.flagsFo = binaryReader.ReadUInt16(); + newObj.ttl = binaryReader.ReadByte(); + newObj.proto = binaryReader.ReadByte(); + newObj.crc = binaryReader.ReadUInt16(); + newObj.sAddr = IpAddress.read(binaryReader); + newObj.dAddr = IpAddress.read(binaryReader); + return newObj; + } +} + +class UdpHeader { + public ushort sPort; + public ushort dPort; + public ushort len; + public ushort crc; + + public static UdpHeader read(BinaryReader binaryReader) { + UdpHeader newObj = new UdpHeader(); + newObj.sPort = Util.byteSwapped(binaryReader.ReadUInt16()); + newObj.dPort = Util.byteSwapped(binaryReader.ReadUInt16()); + newObj.len = Util.byteSwapped(binaryReader.ReadUInt16()); + newObj.crc = Util.byteSwapped(binaryReader.ReadUInt16()); + return newObj; + } +}