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;
+ }
+}