Browse Source

Movement Loop Generator added

- fixed crash on subsequent load of file
- fixed Settings.cs missing from project (not needed)
Image 4 years ago
parent
commit
abd5840191
46 changed files with 2931 additions and 0 deletions
  1. BIN
      EQ2/devtools/Movement Loop Generator/.vs/Movement Loop Generator 2.0/v16/.suo
  2. BIN
      EQ2/devtools/Movement Loop Generator/.vs/Movement Loop Generator 2.0/v16/Server/sqlite3/storage.ide
  3. 22 0
      EQ2/devtools/Movement Loop Generator/Movement Loop Generator 2.0.sln
  4. 18 0
      EQ2/devtools/Movement Loop Generator/Movement Loop Generator 2.0/App.config
  5. 69 0
      EQ2/devtools/Movement Loop Generator/Movement Loop Generator 2.0/DataStruct.cs
  6. 597 0
      EQ2/devtools/Movement Loop Generator/Movement Loop Generator 2.0/Form1.Designer.cs
  7. 766 0
      EQ2/devtools/Movement Loop Generator/Movement Loop Generator 2.0/Form1.cs
  8. 123 0
      EQ2/devtools/Movement Loop Generator/Movement Loop Generator 2.0/Form1.resx
  9. 111 0
      EQ2/devtools/Movement Loop Generator/Movement Loop Generator 2.0/Movement Loop Generator 2.0.csproj
  10. 172 0
      EQ2/devtools/Movement Loop Generator/Movement Loop Generator 2.0/ParseDetalis.Designer.cs
  11. 90 0
      EQ2/devtools/Movement Loop Generator/Movement Loop Generator 2.0/ParseDetalis.cs
  12. 120 0
      EQ2/devtools/Movement Loop Generator/Movement Loop Generator 2.0/ParseDetalis.resx
  13. 22 0
      EQ2/devtools/Movement Loop Generator/Movement Loop Generator 2.0/Program.cs
  14. 39 0
      EQ2/devtools/Movement Loop Generator/Movement Loop Generator 2.0/Properties/AssemblyInfo.cs
  15. 71 0
      EQ2/devtools/Movement Loop Generator/Movement Loop Generator 2.0/Properties/Resources.Designer.cs
  16. 117 0
      EQ2/devtools/Movement Loop Generator/Movement Loop Generator 2.0/Properties/Resources.resx
  17. 38 0
      EQ2/devtools/Movement Loop Generator/Movement Loop Generator 2.0/Properties/Settings.Designer.cs
  18. 9 0
      EQ2/devtools/Movement Loop Generator/Movement Loop Generator 2.0/Properties/Settings.settings
  19. BIN
      EQ2/devtools/Movement Loop Generator/Movement Loop Generator 2.0/bin/Debug/Movement Loop Generator 2.0.exe
  20. 18 0
      EQ2/devtools/Movement Loop Generator/Movement Loop Generator 2.0/bin/Debug/Movement Loop Generator 2.0.exe.config
  21. BIN
      EQ2/devtools/Movement Loop Generator/Movement Loop Generator 2.0/bin/Debug/Movement Loop Generator 2.0.pdb
  22. 166 0
      EQ2/devtools/Movement Loop Generator/Movement Loop Generator 2.0/bin/Debug/deathly_scarab.txt
  23. 186 0
      EQ2/devtools/Movement Loop Generator/Movement Loop Generator 2.0/bin/Debug/deathly_scarab5.lua
  24. 56 0
      EQ2/devtools/Movement Loop Generator/Movement Loop Generator 2.0/bin/Debug/ire_minion10.lua
  25. 36 0
      EQ2/devtools/Movement Loop Generator/Movement Loop Generator 2.0/bin/Debug/ire_minion10.txt
  26. BIN
      EQ2/devtools/Movement Loop Generator/Movement Loop Generator 2.0/bin/Release/Movement Loop Generator 2.0.exe
  27. 18 0
      EQ2/devtools/Movement Loop Generator/Movement Loop Generator 2.0/bin/Release/Movement Loop Generator 2.0.exe.config
  28. BIN
      EQ2/devtools/Movement Loop Generator/Movement Loop Generator 2.0/bin/Release/Movement Loop Generator 2.0.pdb
  29. 38 0
      EQ2/devtools/Movement Loop Generator/Movement Loop Generator 2.0/obj/Debug/Movement Loop Generator 2.0.csproj.FileListAbsolute.txt
  30. BIN
      EQ2/devtools/Movement Loop Generator/Movement Loop Generator 2.0/obj/Debug/Movement Loop Generator 2.0.exe
  31. BIN
      EQ2/devtools/Movement Loop Generator/Movement Loop Generator 2.0/obj/Debug/Movement Loop Generator 2.0.pdb
  32. BIN
      EQ2/devtools/Movement Loop Generator/Movement Loop Generator 2.0/obj/Debug/Movement_Loop_Generator_2._0.Form1.resources
  33. BIN
      EQ2/devtools/Movement Loop Generator/Movement Loop Generator 2.0/obj/Debug/Movement_Loop_Generator_2._0.ParseDetalis.resources
  34. BIN
      EQ2/devtools/Movement Loop Generator/Movement Loop Generator 2.0/obj/Debug/Movement_Loop_Generator_2._0.Properties.Resources.resources
  35. 0 0
      EQ2/devtools/Movement Loop Generator/Movement Loop Generator 2.0/obj/Debug/TemporaryGeneratedFile_036C0B5B-1481-4323-8D20-8F5ADCB23D92.cs
  36. 0 0
      EQ2/devtools/Movement Loop Generator/Movement Loop Generator 2.0/obj/Debug/TemporaryGeneratedFile_5937a670-0e60-4077-877b-f7221da3dda1.cs
  37. 0 0
      EQ2/devtools/Movement Loop Generator/Movement Loop Generator 2.0/obj/Debug/TemporaryGeneratedFile_E7A71F73-0F8D-4B9B-B56E-8E70B10BC5D3.cs
  38. 29 0
      EQ2/devtools/Movement Loop Generator/Movement Loop Generator 2.0/obj/Release/Movement Loop Generator 2.0.csproj.FileListAbsolute.txt
  39. BIN
      EQ2/devtools/Movement Loop Generator/Movement Loop Generator 2.0/obj/Release/Movement Loop Generator 2.0.exe
  40. BIN
      EQ2/devtools/Movement Loop Generator/Movement Loop Generator 2.0/obj/Release/Movement Loop Generator 2.0.pdb
  41. BIN
      EQ2/devtools/Movement Loop Generator/Movement Loop Generator 2.0/obj/Release/Movement_Loop_Generator_2._0.Form1.resources
  42. BIN
      EQ2/devtools/Movement Loop Generator/Movement Loop Generator 2.0/obj/Release/Movement_Loop_Generator_2._0.ParseDetalis.resources
  43. BIN
      EQ2/devtools/Movement Loop Generator/Movement Loop Generator 2.0/obj/Release/Movement_Loop_Generator_2._0.Properties.Resources.resources
  44. 0 0
      EQ2/devtools/Movement Loop Generator/Movement Loop Generator 2.0/obj/Release/TemporaryGeneratedFile_036C0B5B-1481-4323-8D20-8F5ADCB23D92.cs
  45. 0 0
      EQ2/devtools/Movement Loop Generator/Movement Loop Generator 2.0/obj/Release/TemporaryGeneratedFile_5937a670-0e60-4077-877b-f7221da3dda1.cs
  46. 0 0
      EQ2/devtools/Movement Loop Generator/Movement Loop Generator 2.0/obj/Release/TemporaryGeneratedFile_E7A71F73-0F8D-4B9B-B56E-8E70B10BC5D3.cs

BIN
EQ2/devtools/Movement Loop Generator/.vs/Movement Loop Generator 2.0/v16/.suo


BIN
EQ2/devtools/Movement Loop Generator/.vs/Movement Loop Generator 2.0/v16/Server/sqlite3/storage.ide


+ 22 - 0
EQ2/devtools/Movement Loop Generator/Movement Loop Generator 2.0.sln

@@ -0,0 +1,22 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio 2013
+VisualStudioVersion = 12.0.31101.0
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Movement Loop Generator 2.0", "Movement Loop Generator 2.0\Movement Loop Generator 2.0.csproj", "{153255FE-C8A9-49FA-B043-8B60A3A48C54}"
+EndProject
+Global
+	GlobalSection(SolutionConfigurationPlatforms) = preSolution
+		Debug|Any CPU = Debug|Any CPU
+		Release|Any CPU = Release|Any CPU
+	EndGlobalSection
+	GlobalSection(ProjectConfigurationPlatforms) = postSolution
+		{153255FE-C8A9-49FA-B043-8B60A3A48C54}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{153255FE-C8A9-49FA-B043-8B60A3A48C54}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{153255FE-C8A9-49FA-B043-8B60A3A48C54}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{153255FE-C8A9-49FA-B043-8B60A3A48C54}.Release|Any CPU.Build.0 = Release|Any CPU
+	EndGlobalSection
+	GlobalSection(SolutionProperties) = preSolution
+		HideSolutionNode = FALSE
+	EndGlobalSection
+EndGlobal

+ 18 - 0
EQ2/devtools/Movement Loop Generator/Movement Loop Generator 2.0/App.config

@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<configuration>
+    <configSections>
+        <sectionGroup name="userSettings" type="System.Configuration.UserSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >
+            <section name="Movement_Loop_Generator_2._0.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false" />
+        </sectionGroup>
+    </configSections>
+    <startup> 
+        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
+    </startup>
+    <userSettings>
+        <Movement_Loop_Generator_2._0.Properties.Settings>
+            <setting name="Author" serializeAs="String">
+                <value>Auto Generated</value>
+            </setting>
+        </Movement_Loop_Generator_2._0.Properties.Settings>
+    </userSettings>
+</configuration>

+ 69 - 0
EQ2/devtools/Movement Loop Generator/Movement Loop Generator 2.0/DataStruct.cs

@@ -0,0 +1,69 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace Movement_Loop_Generator_2._0
+{
+    struct DataStruct
+    {
+        public string Name;
+        public string Author;
+        public float XLoc;
+        public float YLoc;
+        public float ZLoc;
+        public int Speed;
+        public int Delay;
+        public string Function;
+
+
+        public DataStruct(string name, string author, float xloc, float yloc, float zloc, int speed, int delay, string function)
+        {
+            Name = name;
+            Author = author;
+            XLoc = xloc;
+            YLoc = yloc;
+            ZLoc = zloc;
+            Speed = speed;
+            Delay = delay;
+            Function = function;
+        }
+
+        public string mName
+        {
+            get { return Name; }
+            set { Name = value; }
+        }
+        public float mXLoc
+        {
+            get { return XLoc; }
+            set { XLoc = value; }
+        }
+        public float mYLoc
+        {
+            get { return YLoc; }
+            set { YLoc = value; }
+        }
+        public float mZLoc
+        {
+            get { return ZLoc; }
+            set { ZLoc = value; }
+        }
+        public int mSpeed
+        {
+            get { return Speed; }
+            set { Speed = value; }
+        }
+        public int mDelay
+        {
+            get { return Delay; }
+            set { Delay = value; }
+        }
+        public string mFunction
+        {
+            get { return Function; }
+            set { Function = value; }
+        }
+    }
+}

+ 597 - 0
EQ2/devtools/Movement Loop Generator/Movement Loop Generator 2.0/Form1.Designer.cs

@@ -0,0 +1,597 @@
+namespace Movement_Loop_Generator_2._0
+{
+    partial class Form1
+    {
+        /// <summary>
+        /// Required designer variable.
+        /// </summary>
+        private System.ComponentModel.IContainer components = null;
+
+        /// <summary>
+        /// Clean up any resources being used.
+        /// </summary>
+        /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+        protected override void Dispose(bool disposing)
+        {
+            if (disposing && (components != null))
+            {
+                components.Dispose();
+            }
+            base.Dispose(disposing);
+        }
+
+        #region Windows Form Designer generated code
+
+        /// <summary>
+        /// Required method for Designer support - do not modify
+        /// the contents of this method with the code editor.
+        /// </summary>
+        private void InitializeComponent()
+        {
+            this.menuStrip1 = new System.Windows.Forms.MenuStrip();
+            this.fileToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+            this.exitToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+            this.settingsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+            this.authorToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem();
+            this.toolStripTextBox_Author = new System.Windows.Forms.ToolStripTextBox();
+            this.reversePathToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+            this.howToUseToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+            this.collectWaypointsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+            this.loadingLogsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+            this.useGeneratorToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+            this.aboutToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+            this.userToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+            this.authorToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+            this.textBox_LogFile = new System.Windows.Forms.TextBox();
+            this.label1 = new System.Windows.Forms.Label();
+            this.btn_Browse = new System.Windows.Forms.Button();
+            this.listView_Loaded = new System.Windows.Forms.ListView();
+            this.column_blank = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
+            this.column_SpawnX = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
+            this.column_SpawnY = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
+            this.column_SpawnZ = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
+            this.column_SpawnSpeed = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
+            this.column_SpawnDelay = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
+            this.column_SpawnFunction = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
+            this.richTextBox_OutputView = new System.Windows.Forms.RichTextBox();
+            this.groupBox_Edit = new System.Windows.Forms.GroupBox();
+            this.checkBox_ReversePath = new System.Windows.Forms.CheckBox();
+            this.button_Remove = new System.Windows.Forms.Button();
+            this.button_Update = new System.Windows.Forms.Button();
+            this.button_Reset = new System.Windows.Forms.Button();
+            this.button_InsertBelow = new System.Windows.Forms.Button();
+            this.textBox_Function = new System.Windows.Forms.TextBox();
+            this.textBox_Delay = new System.Windows.Forms.TextBox();
+            this.textBox_Speed = new System.Windows.Forms.TextBox();
+            this.label9 = new System.Windows.Forms.Label();
+            this.label8 = new System.Windows.Forms.Label();
+            this.label7 = new System.Windows.Forms.Label();
+            this.label6 = new System.Windows.Forms.Label();
+            this.textBox_ZLOC = new System.Windows.Forms.TextBox();
+            this.textBox_YLOC = new System.Windows.Forms.TextBox();
+            this.textBox_XLOC = new System.Windows.Forms.TextBox();
+            this.label5 = new System.Windows.Forms.Label();
+            this.label3 = new System.Windows.Forms.Label();
+            this.button_Save = new System.Windows.Forms.Button();
+            this.button_ParseDetalis = new System.Windows.Forms.Button();
+            this.listBox_NPCs = new System.Windows.Forms.ListBox();
+            this.button_InsertAbove = new System.Windows.Forms.Button();
+            this.menuStrip1.SuspendLayout();
+            this.SuspendLayout();
+            // 
+            // menuStrip1
+            // 
+            this.menuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
+            this.fileToolStripMenuItem,
+            this.howToUseToolStripMenuItem,
+            this.aboutToolStripMenuItem,
+            this.userToolStripMenuItem,
+            this.authorToolStripMenuItem});
+            this.menuStrip1.Location = new System.Drawing.Point(0, 0);
+            this.menuStrip1.Name = "menuStrip1";
+            this.menuStrip1.Size = new System.Drawing.Size(940, 24);
+            this.menuStrip1.TabIndex = 0;
+            this.menuStrip1.Text = "menuStrip1";
+            // 
+            // fileToolStripMenuItem
+            // 
+            this.fileToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
+            this.exitToolStripMenuItem,
+            this.settingsToolStripMenuItem});
+            this.fileToolStripMenuItem.Name = "fileToolStripMenuItem";
+            this.fileToolStripMenuItem.Size = new System.Drawing.Size(37, 20);
+            this.fileToolStripMenuItem.Text = "File";
+            // 
+            // exitToolStripMenuItem
+            // 
+            this.exitToolStripMenuItem.Name = "exitToolStripMenuItem";
+            this.exitToolStripMenuItem.Size = new System.Drawing.Size(116, 22);
+            this.exitToolStripMenuItem.Text = "Exit";
+            this.exitToolStripMenuItem.Click += new System.EventHandler(this.exitToolStripMenuItem_Click_1);
+            // 
+            // settingsToolStripMenuItem
+            // 
+            this.settingsToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
+            this.authorToolStripMenuItem1,
+            this.reversePathToolStripMenuItem});
+            this.settingsToolStripMenuItem.Name = "settingsToolStripMenuItem";
+            this.settingsToolStripMenuItem.Size = new System.Drawing.Size(116, 22);
+            this.settingsToolStripMenuItem.Text = "Settings";
+            // 
+            // authorToolStripMenuItem1
+            // 
+            this.authorToolStripMenuItem1.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
+            this.toolStripTextBox_Author});
+            this.authorToolStripMenuItem1.Name = "authorToolStripMenuItem1";
+            this.authorToolStripMenuItem1.Size = new System.Drawing.Size(141, 22);
+            this.authorToolStripMenuItem1.Text = "Author";
+            this.authorToolStripMenuItem1.MouseEnter += new System.EventHandler(this.authorToolStripMenuItem_MouseEnter);
+            // 
+            // toolStripTextBox_Author
+            // 
+            this.toolStripTextBox_Author.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
+            this.toolStripTextBox_Author.Name = "toolStripTextBox_Author";
+            this.toolStripTextBox_Author.Size = new System.Drawing.Size(100, 23);
+            this.toolStripTextBox_Author.KeyDown += new System.Windows.Forms.KeyEventHandler(this.toolStripTextBoxAuthor_KeyDown);
+            // 
+            // reversePathToolStripMenuItem
+            // 
+            this.reversePathToolStripMenuItem.Name = "reversePathToolStripMenuItem";
+            this.reversePathToolStripMenuItem.Size = new System.Drawing.Size(141, 22);
+            this.reversePathToolStripMenuItem.Text = "Reverse Path";
+            // 
+            // howToUseToolStripMenuItem
+            // 
+            this.howToUseToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
+            this.collectWaypointsToolStripMenuItem,
+            this.loadingLogsToolStripMenuItem,
+            this.useGeneratorToolStripMenuItem});
+            this.howToUseToolStripMenuItem.Name = "howToUseToolStripMenuItem";
+            this.howToUseToolStripMenuItem.Size = new System.Drawing.Size(60, 20);
+            this.howToUseToolStripMenuItem.Text = "How To";
+            // 
+            // collectWaypointsToolStripMenuItem
+            // 
+            this.collectWaypointsToolStripMenuItem.Name = "collectWaypointsToolStripMenuItem";
+            this.collectWaypointsToolStripMenuItem.Size = new System.Drawing.Size(179, 22);
+            this.collectWaypointsToolStripMenuItem.Text = "Collecting locations";
+            this.collectWaypointsToolStripMenuItem.Click += new System.EventHandler(this.collectWaypointsToolStripMenuItem_Click);
+            // 
+            // loadingLogsToolStripMenuItem
+            // 
+            this.loadingLogsToolStripMenuItem.Name = "loadingLogsToolStripMenuItem";
+            this.loadingLogsToolStripMenuItem.Size = new System.Drawing.Size(179, 22);
+            this.loadingLogsToolStripMenuItem.Text = "Loading logs";
+            this.loadingLogsToolStripMenuItem.Click += new System.EventHandler(this.loadingLogsToolStripMenuItem_Click);
+            // 
+            // useGeneratorToolStripMenuItem
+            // 
+            this.useGeneratorToolStripMenuItem.Name = "useGeneratorToolStripMenuItem";
+            this.useGeneratorToolStripMenuItem.Size = new System.Drawing.Size(179, 22);
+            this.useGeneratorToolStripMenuItem.Text = "Editing locations";
+            this.useGeneratorToolStripMenuItem.Click += new System.EventHandler(this.editinglogsToolStripMenuItem_Click);
+            // 
+            // aboutToolStripMenuItem
+            // 
+            this.aboutToolStripMenuItem.Name = "aboutToolStripMenuItem";
+            this.aboutToolStripMenuItem.Size = new System.Drawing.Size(52, 20);
+            this.aboutToolStripMenuItem.Text = "About";
+            // 
+            // userToolStripMenuItem
+            // 
+            this.userToolStripMenuItem.Alignment = System.Windows.Forms.ToolStripItemAlignment.Right;
+            this.userToolStripMenuItem.Name = "userToolStripMenuItem";
+            this.userToolStripMenuItem.Size = new System.Drawing.Size(41, 20);
+            this.userToolStripMenuItem.Text = "user";
+            // 
+            // authorToolStripMenuItem
+            // 
+            this.authorToolStripMenuItem.Alignment = System.Windows.Forms.ToolStripItemAlignment.Right;
+            this.authorToolStripMenuItem.Name = "authorToolStripMenuItem";
+            this.authorToolStripMenuItem.Size = new System.Drawing.Size(62, 20);
+            this.authorToolStripMenuItem.Text = "Author :";
+            // 
+            // textBox_LogFile
+            // 
+            this.textBox_LogFile.AllowDrop = true;
+            this.textBox_LogFile.Location = new System.Drawing.Point(92, 29);
+            this.textBox_LogFile.Name = "textBox_LogFile";
+            this.textBox_LogFile.Size = new System.Drawing.Size(348, 20);
+            this.textBox_LogFile.TabIndex = 1;
+            this.textBox_LogFile.DoubleClick += new System.EventHandler(this.textBox_LogFile_DoubleClick);
+            // 
+            // label1
+            // 
+            this.label1.AutoSize = true;
+            this.label1.Location = new System.Drawing.Point(12, 32);
+            this.label1.Name = "label1";
+            this.label1.Size = new System.Drawing.Size(74, 13);
+            this.label1.TabIndex = 2;
+            this.label1.Text = "Load Log File:";
+            // 
+            // btn_Browse
+            // 
+            this.btn_Browse.Location = new System.Drawing.Point(446, 27);
+            this.btn_Browse.Name = "btn_Browse";
+            this.btn_Browse.Size = new System.Drawing.Size(75, 23);
+            this.btn_Browse.TabIndex = 3;
+            this.btn_Browse.Text = "Browse";
+            this.btn_Browse.UseVisualStyleBackColor = true;
+            this.btn_Browse.Click += new System.EventHandler(this.btn_Browse_Click);
+            // 
+            // listView_Loaded
+            // 
+            this.listView_Loaded.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
+            this.column_blank,
+            this.column_SpawnX,
+            this.column_SpawnY,
+            this.column_SpawnZ,
+            this.column_SpawnSpeed,
+            this.column_SpawnDelay,
+            this.column_SpawnFunction});
+            this.listView_Loaded.FullRowSelect = true;
+            this.listView_Loaded.GridLines = true;
+            this.listView_Loaded.HideSelection = false;
+            this.listView_Loaded.Location = new System.Drawing.Point(141, 55);
+            this.listView_Loaded.MultiSelect = false;
+            this.listView_Loaded.Name = "listView_Loaded";
+            this.listView_Loaded.Size = new System.Drawing.Size(509, 374);
+            this.listView_Loaded.TabIndex = 1;
+            this.listView_Loaded.TabStop = false;
+            this.listView_Loaded.UseCompatibleStateImageBehavior = false;
+            this.listView_Loaded.View = System.Windows.Forms.View.Details;
+            this.listView_Loaded.SelectedIndexChanged += new System.EventHandler(this.listView_Loaded_SelectedIndexChanged);
+            // 
+            // column_blank
+            // 
+            this.column_blank.Text = "";
+            this.column_blank.Width = 0;
+            // 
+            // column_SpawnX
+            // 
+            this.column_SpawnX.Text = "X";
+            this.column_SpawnX.TextAlign = System.Windows.Forms.HorizontalAlignment.Center;
+            this.column_SpawnX.Width = 70;
+            // 
+            // column_SpawnY
+            // 
+            this.column_SpawnY.Text = "Y";
+            this.column_SpawnY.TextAlign = System.Windows.Forms.HorizontalAlignment.Center;
+            this.column_SpawnY.Width = 70;
+            // 
+            // column_SpawnZ
+            // 
+            this.column_SpawnZ.Text = "Z";
+            this.column_SpawnZ.TextAlign = System.Windows.Forms.HorizontalAlignment.Center;
+            this.column_SpawnZ.Width = 70;
+            // 
+            // column_SpawnSpeed
+            // 
+            this.column_SpawnSpeed.Text = "Speed";
+            this.column_SpawnSpeed.TextAlign = System.Windows.Forms.HorizontalAlignment.Center;
+            this.column_SpawnSpeed.Width = 70;
+            // 
+            // column_SpawnDelay
+            // 
+            this.column_SpawnDelay.Text = "Delay";
+            this.column_SpawnDelay.TextAlign = System.Windows.Forms.HorizontalAlignment.Center;
+            this.column_SpawnDelay.Width = 70;
+            // 
+            // column_SpawnFunction
+            // 
+            this.column_SpawnFunction.Text = "Function";
+            this.column_SpawnFunction.TextAlign = System.Windows.Forms.HorizontalAlignment.Center;
+            this.column_SpawnFunction.Width = 150;
+            // 
+            // richTextBox_OutputView
+            // 
+            this.richTextBox_OutputView.BackColor = System.Drawing.Color.Gainsboro;
+            this.richTextBox_OutputView.Enabled = false;
+            this.richTextBox_OutputView.Location = new System.Drawing.Point(656, 353);
+            this.richTextBox_OutputView.Name = "richTextBox_OutputView";
+            this.richTextBox_OutputView.Size = new System.Drawing.Size(277, 174);
+            this.richTextBox_OutputView.TabIndex = 0;
+            this.richTextBox_OutputView.Text = "";
+            // 
+            // groupBox_Edit
+            // 
+            this.groupBox_Edit.Location = new System.Drawing.Point(656, 55);
+            this.groupBox_Edit.Name = "groupBox_Edit";
+            this.groupBox_Edit.Size = new System.Drawing.Size(277, 292);
+            this.groupBox_Edit.TabIndex = 4;
+            this.groupBox_Edit.TabStop = false;
+            // 
+            // checkBox_ReversePath
+            // 
+            this.checkBox_ReversePath.AutoSize = true;
+            this.checkBox_ReversePath.Location = new System.Drawing.Point(569, 463);
+            this.checkBox_ReversePath.Name = "checkBox_ReversePath";
+            this.checkBox_ReversePath.Size = new System.Drawing.Size(75, 17);
+            this.checkBox_ReversePath.TabIndex = 16;
+            this.checkBox_ReversePath.Text = "Loop Path";
+            this.checkBox_ReversePath.UseVisualStyleBackColor = true;
+            this.checkBox_ReversePath.Visible = false;
+            this.checkBox_ReversePath.CheckedChanged += new System.EventHandler(this.checkBox_ReversePath_CheckedChanged);
+            // 
+            // button_Remove
+            // 
+            this.button_Remove.Enabled = false;
+            this.button_Remove.Location = new System.Drawing.Point(405, 487);
+            this.button_Remove.Name = "button_Remove";
+            this.button_Remove.Size = new System.Drawing.Size(75, 23);
+            this.button_Remove.TabIndex = 5;
+            this.button_Remove.Text = "Remove";
+            this.button_Remove.UseVisualStyleBackColor = true;
+            this.button_Remove.Click += new System.EventHandler(this.button_Remove_Click);
+            // 
+            // button_Update
+            // 
+            this.button_Update.Enabled = false;
+            this.button_Update.Location = new System.Drawing.Point(324, 487);
+            this.button_Update.Name = "button_Update";
+            this.button_Update.Size = new System.Drawing.Size(75, 23);
+            this.button_Update.TabIndex = 5;
+            this.button_Update.Text = "Update";
+            this.button_Update.UseVisualStyleBackColor = true;
+            this.button_Update.Click += new System.EventHandler(this.button_Update_Click);
+            // 
+            // button_Reset
+            // 
+            this.button_Reset.Enabled = false;
+            this.button_Reset.Location = new System.Drawing.Point(486, 487);
+            this.button_Reset.Name = "button_Reset";
+            this.button_Reset.Size = new System.Drawing.Size(75, 23);
+            this.button_Reset.TabIndex = 5;
+            this.button_Reset.Text = "Reset";
+            this.button_Reset.UseVisualStyleBackColor = true;
+            this.button_Reset.Click += new System.EventHandler(this.button_Reset_Click);
+            // 
+            // button_InsertBelow
+            // 
+            this.button_InsertBelow.Enabled = false;
+            this.button_InsertBelow.Location = new System.Drawing.Point(243, 487);
+            this.button_InsertBelow.Name = "button_InsertBelow";
+            this.button_InsertBelow.Size = new System.Drawing.Size(75, 23);
+            this.button_InsertBelow.TabIndex = 8;
+            this.button_InsertBelow.Text = "Insert Below";
+            this.button_InsertBelow.UseVisualStyleBackColor = true;
+            this.button_InsertBelow.Click += new System.EventHandler(this.button_InsertBelow_Click);
+            // 
+            // textBox_Function
+            // 
+            this.textBox_Function.Location = new System.Drawing.Point(525, 435);
+            this.textBox_Function.Name = "textBox_Function";
+            this.textBox_Function.Size = new System.Drawing.Size(117, 20);
+            this.textBox_Function.TabIndex = 15;
+            // 
+            // textBox_Delay
+            // 
+            this.textBox_Delay.Location = new System.Drawing.Point(348, 435);
+            this.textBox_Delay.Name = "textBox_Delay";
+            this.textBox_Delay.Size = new System.Drawing.Size(117, 20);
+            this.textBox_Delay.TabIndex = 14;
+            // 
+            // textBox_Speed
+            // 
+            this.textBox_Speed.Location = new System.Drawing.Point(185, 435);
+            this.textBox_Speed.Name = "textBox_Speed";
+            this.textBox_Speed.Size = new System.Drawing.Size(117, 20);
+            this.textBox_Speed.TabIndex = 13;
+            // 
+            // label9
+            // 
+            this.label9.AutoSize = true;
+            this.label9.Location = new System.Drawing.Point(471, 438);
+            this.label9.Name = "label9";
+            this.label9.Size = new System.Drawing.Size(48, 13);
+            this.label9.TabIndex = 12;
+            this.label9.Text = "Function";
+            // 
+            // label8
+            // 
+            this.label8.AutoSize = true;
+            this.label8.Location = new System.Drawing.Point(141, 438);
+            this.label8.Name = "label8";
+            this.label8.Size = new System.Drawing.Size(38, 13);
+            this.label8.TabIndex = 11;
+            this.label8.Text = "Speed";
+            // 
+            // label7
+            // 
+            this.label7.AutoSize = true;
+            this.label7.Location = new System.Drawing.Point(308, 438);
+            this.label7.Name = "label7";
+            this.label7.Size = new System.Drawing.Size(34, 13);
+            this.label7.TabIndex = 10;
+            this.label7.Text = "Delay";
+            // 
+            // label6
+            // 
+            this.label6.AutoSize = true;
+            this.label6.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
+            this.label6.Location = new System.Drawing.Point(429, 464);
+            this.label6.Name = "label6";
+            this.label6.Size = new System.Drawing.Size(15, 13);
+            this.label6.TabIndex = 9;
+            this.label6.Text = "Z";
+            // 
+            // textBox_ZLOC
+            // 
+            this.textBox_ZLOC.Location = new System.Drawing.Point(446, 461);
+            this.textBox_ZLOC.Name = "textBox_ZLOC";
+            this.textBox_ZLOC.Size = new System.Drawing.Size(117, 20);
+            this.textBox_ZLOC.TabIndex = 8;
+            // 
+            // textBox_YLOC
+            // 
+            this.textBox_YLOC.Location = new System.Drawing.Point(306, 461);
+            this.textBox_YLOC.Name = "textBox_YLOC";
+            this.textBox_YLOC.Size = new System.Drawing.Size(117, 20);
+            this.textBox_YLOC.TabIndex = 7;
+            // 
+            // textBox_XLOC
+            // 
+            this.textBox_XLOC.Location = new System.Drawing.Point(162, 461);
+            this.textBox_XLOC.Name = "textBox_XLOC";
+            this.textBox_XLOC.Size = new System.Drawing.Size(117, 20);
+            this.textBox_XLOC.TabIndex = 6;
+            // 
+            // label5
+            // 
+            this.label5.AutoSize = true;
+            this.label5.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
+            this.label5.Location = new System.Drawing.Point(285, 464);
+            this.label5.Name = "label5";
+            this.label5.Size = new System.Drawing.Size(15, 13);
+            this.label5.TabIndex = 5;
+            this.label5.Text = "Y";
+            // 
+            // label3
+            // 
+            this.label3.AutoSize = true;
+            this.label3.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
+            this.label3.Location = new System.Drawing.Point(141, 464);
+            this.label3.Name = "label3";
+            this.label3.Size = new System.Drawing.Size(15, 13);
+            this.label3.TabIndex = 2;
+            this.label3.Text = "X";
+            // 
+            // button_Save
+            // 
+            this.button_Save.Location = new System.Drawing.Point(679, 26);
+            this.button_Save.Name = "button_Save";
+            this.button_Save.Size = new System.Drawing.Size(75, 23);
+            this.button_Save.TabIndex = 5;
+            this.button_Save.Text = "Save";
+            this.button_Save.UseVisualStyleBackColor = true;
+            this.button_Save.Click += new System.EventHandler(this.button_Save_Click);
+            // 
+            // button_ParseDetalis
+            // 
+            this.button_ParseDetalis.Location = new System.Drawing.Point(575, 26);
+            this.button_ParseDetalis.Name = "button_ParseDetalis";
+            this.button_ParseDetalis.Size = new System.Drawing.Size(75, 23);
+            this.button_ParseDetalis.TabIndex = 6;
+            this.button_ParseDetalis.Text = "Parse";
+            this.button_ParseDetalis.UseVisualStyleBackColor = true;
+            this.button_ParseDetalis.Click += new System.EventHandler(this.button_ParseDetalis_Click);
+            // 
+            // listBox_NPCs
+            // 
+            this.listBox_NPCs.FormattingEnabled = true;
+            this.listBox_NPCs.Location = new System.Drawing.Point(9, 55);
+            this.listBox_NPCs.Name = "listBox_NPCs";
+            this.listBox_NPCs.Size = new System.Drawing.Size(126, 472);
+            this.listBox_NPCs.TabIndex = 7;
+            this.listBox_NPCs.MouseDoubleClick += new System.Windows.Forms.MouseEventHandler(this.listBox_NPCs_MouseDoubleClick);
+            // 
+            // button_InsertAbove
+            // 
+            this.button_InsertAbove.Enabled = false;
+            this.button_InsertAbove.Location = new System.Drawing.Point(162, 487);
+            this.button_InsertAbove.Name = "button_InsertAbove";
+            this.button_InsertAbove.Size = new System.Drawing.Size(75, 23);
+            this.button_InsertAbove.TabIndex = 16;
+            this.button_InsertAbove.Text = "Insert Above";
+            this.button_InsertAbove.UseVisualStyleBackColor = true;
+            this.button_InsertAbove.Click += new System.EventHandler(this.button_InsertAbove_Click);
+            // 
+            // Form1
+            // 
+            this.AllowDrop = true;
+            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+            this.ClientSize = new System.Drawing.Size(940, 537);
+            this.Controls.Add(this.button_Reset);
+            this.Controls.Add(this.checkBox_ReversePath);
+            this.Controls.Add(this.button_InsertAbove);
+            this.Controls.Add(this.button_Remove);
+            this.Controls.Add(this.listBox_NPCs);
+            this.Controls.Add(this.button_Update);
+            this.Controls.Add(this.richTextBox_OutputView);
+            this.Controls.Add(this.listView_Loaded);
+            this.Controls.Add(this.button_ParseDetalis);
+            this.Controls.Add(this.textBox_Function);
+            this.Controls.Add(this.button_InsertBelow);
+            this.Controls.Add(this.label9);
+            this.Controls.Add(this.textBox_Delay);
+            this.Controls.Add(this.button_Save);
+            this.Controls.Add(this.textBox_Speed);
+            this.Controls.Add(this.label7);
+            this.Controls.Add(this.groupBox_Edit);
+            this.Controls.Add(this.btn_Browse);
+            this.Controls.Add(this.label8);
+            this.Controls.Add(this.label1);
+            this.Controls.Add(this.textBox_LogFile);
+            this.Controls.Add(this.menuStrip1);
+            this.Controls.Add(this.textBox_XLOC);
+            this.Controls.Add(this.textBox_ZLOC);
+            this.Controls.Add(this.label6);
+            this.Controls.Add(this.label3);
+            this.Controls.Add(this.label5);
+            this.Controls.Add(this.textBox_YLOC);
+            this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.Fixed3D;
+            this.Name = "Form1";
+            this.Text = "Form1";
+            this.DragDrop += new System.Windows.Forms.DragEventHandler(this.Form1_DragDrop);
+            this.DragEnter += new System.Windows.Forms.DragEventHandler(this.Form1_DragEnter);
+            this.menuStrip1.ResumeLayout(false);
+            this.menuStrip1.PerformLayout();
+            this.ResumeLayout(false);
+            this.PerformLayout();
+
+        }
+
+        #endregion
+
+        private System.Windows.Forms.MenuStrip menuStrip1;
+        private System.Windows.Forms.ToolStripMenuItem fileToolStripMenuItem;
+        private System.Windows.Forms.ToolStripMenuItem exitToolStripMenuItem;
+        private System.Windows.Forms.TextBox textBox_LogFile;
+        private System.Windows.Forms.Label label1;
+        private System.Windows.Forms.Button btn_Browse;
+        private System.Windows.Forms.ListView listView_Loaded;
+        private System.Windows.Forms.ColumnHeader column_SpawnX;
+        private System.Windows.Forms.ColumnHeader column_SpawnY;
+        private System.Windows.Forms.ColumnHeader column_SpawnZ;
+        private System.Windows.Forms.ColumnHeader column_SpawnSpeed;
+        private System.Windows.Forms.ColumnHeader column_SpawnDelay;
+        private System.Windows.Forms.ColumnHeader column_SpawnFunction;
+        private System.Windows.Forms.ColumnHeader column_blank;
+        private System.Windows.Forms.RichTextBox richTextBox_OutputView;
+        private System.Windows.Forms.GroupBox groupBox_Edit;
+        private System.Windows.Forms.TextBox textBox_Function;
+        private System.Windows.Forms.TextBox textBox_Delay;
+        private System.Windows.Forms.TextBox textBox_Speed;
+        private System.Windows.Forms.Label label9;
+        private System.Windows.Forms.Label label8;
+        private System.Windows.Forms.Label label7;
+        private System.Windows.Forms.Label label6;
+        private System.Windows.Forms.TextBox textBox_ZLOC;
+        private System.Windows.Forms.TextBox textBox_YLOC;
+        private System.Windows.Forms.TextBox textBox_XLOC;
+        private System.Windows.Forms.Label label5;
+        private System.Windows.Forms.Label label3;
+        private System.Windows.Forms.Button button_Reset;
+        private System.Windows.Forms.Button button_InsertBelow;
+        private System.Windows.Forms.Button button_Update;
+        private System.Windows.Forms.Button button_Remove;
+        private System.Windows.Forms.Button button_Save;
+        private System.Windows.Forms.Button button_ParseDetalis;
+        private System.Windows.Forms.ToolStripMenuItem howToUseToolStripMenuItem;
+        private System.Windows.Forms.ToolStripMenuItem aboutToolStripMenuItem;
+        private System.Windows.Forms.ToolStripMenuItem collectWaypointsToolStripMenuItem;
+        private System.Windows.Forms.ToolStripMenuItem useGeneratorToolStripMenuItem;
+        private System.Windows.Forms.ToolStripMenuItem loadingLogsToolStripMenuItem;
+        private System.Windows.Forms.CheckBox checkBox_ReversePath;
+        private System.Windows.Forms.ToolStripMenuItem userToolStripMenuItem;
+        private System.Windows.Forms.ToolStripMenuItem authorToolStripMenuItem;
+        private System.Windows.Forms.ToolStripMenuItem settingsToolStripMenuItem;
+        private System.Windows.Forms.ToolStripMenuItem authorToolStripMenuItem1;
+        private System.Windows.Forms.ToolStripTextBox toolStripTextBox_Author;
+        private System.Windows.Forms.ToolStripMenuItem reversePathToolStripMenuItem;
+        private System.Windows.Forms.ListBox listBox_NPCs;
+        private System.Windows.Forms.Button button_InsertAbove;
+    }
+}
+

+ 766 - 0
EQ2/devtools/Movement Loop Generator/Movement Loop Generator 2.0/Form1.cs

@@ -0,0 +1,766 @@
+// At some point add in the option to use either MoveToLocation()
+// or MovementLoopAddLocation() for looping or for one time path
+
+using System;
+using System.Collections.Generic;
+using System.Globalization;
+using System.IO;
+using System.Linq;
+using System.Text.RegularExpressions;
+using System.Threading;
+using System.Windows.Forms;
+
+namespace Movement_Loop_Generator_2._0
+{
+    public partial class Form1 : Form
+    {
+        float x;
+        float y;
+        float z;
+        int rowNumber;
+
+        List<DataStruct> dataLoc = new List<DataStruct>();
+
+        Dictionary<string, string> NPCList = new Dictionary<string, string>();
+
+        private OpenFileDialog file_dialog = new OpenFileDialog();
+        StreamReader streamReader;
+
+        public Form1()
+        {
+            InitializeComponent();
+            userToolStripMenuItem.Text = Properties.Settings.Default.Author;
+
+            //Thread.CurrentThread.CurrentCulture = new CultureInfo("eu-fr");
+        }
+
+        /*********************************************************************************************************************************
+         *                                               Drag and Drop handler
+         *********************************************************************************************************************************/
+
+        private void Form1_DragEnter(object sender, DragEventArgs e)
+        {
+            if (e.Data.GetDataPresent(DataFormats.FileDrop))
+                e.Effect = DragDropEffects.All;
+            else
+                e.Effect = DragDropEffects.None;
+        }
+
+        private void Form1_DragDrop(object sender, DragEventArgs e)
+        {
+            string[] FileList = (string[])e.Data.GetData(DataFormats.FileDrop, true);
+            string filename = Path.GetFullPath(FileList[0]);
+
+            ResetListView(true);
+            ResetTextBoxes();
+            NPCList.Clear();
+            listBox_NPCs.Items.Clear();
+            dataLoc.Clear();
+            richTextBox_OutputView.Clear();
+            this.textBox_LogFile.Text = filename;
+            
+            //richTextBox_OutputView.Text = "Clearing listview, textboxes, and location data.\nGetting spawn and author information.\nGetting spawn location data.\n" +
+                                            //"Loading list with spawn location data.\n";
+
+            if (checkBox_ReversePath.Checked == true)
+            {
+                checkBox_ReversePath.Checked = false;
+            }
+
+            ParseNPC();
+            ListviewLoad();
+        }
+
+        /*********************************************************************************************************************************
+         *                                               Load DataStruct List
+         *********************************************************************************************************************************/
+
+
+        private void ParseData()
+        {
+            if (listBox_NPCs.SelectedIndex < 0)
+            {
+                return;
+            }
+
+            checkBox_ReversePath.Visible = true;
+
+            bool found = false;
+
+            int npcname_count = 0;
+            string [] split = NPCList[listBox_NPCs.SelectedItem.ToString()].Split(' ');
+            string npcname = split[0];
+
+            if (split.Length > 1)
+            {
+                npcname_count = Convert.ToInt32(split[1]);
+            }
+            
+
+            string line;
+            string locSpeed = "'loc_speed ";
+            string locDelay = "'loc_delay ";
+            string locStart = "'loc_start "; 
+            string locEnd = "'";
+            string locStop = "'loc_stop'";
+
+            int namecount = 0;
+            int count = 0;
+            int setSpeed = 0;
+            int index;
+
+            int setDelay = 0;
+            int delindex;
+            dataLoc = new List<DataStruct>();
+            ResetListView(true);
+            // Parse button throws an exception Unhandled if the logfile text box is empty
+            streamReader = new StreamReader(this.textBox_LogFile.Text);
+            try
+            {
+                while ((line = streamReader.ReadLine()) != null)
+                {
+                    if (line.Contains(locSpeed))
+                    {
+                        index = line.IndexOf("Unknown command: 'loc_speed") + 28;
+                        setSpeed = Convert.ToInt32(line.Substring(index, (line.Length - index) - 1));
+                    }
+
+                    if (line.Contains(locDelay))
+                    {
+                        delindex = line.IndexOf("Unknown command: 'loc_delay") + 28;
+                        setDelay = Convert.ToInt32(line.Substring(delindex, (line.Length - delindex) - 1));
+                    }
+
+                    // Test to see if I can advanced to the next name and get the loc from the second collect
+                    if (line.Contains(locStart + npcname + locEnd) && npcname_count < 1)
+                    {
+                        found = true;
+                        count++;
+                    }
+
+                    if (line.Contains(locStart + npcname + locEnd) && npcname_count >= 1)
+                    {
+                        if (npcname_count == namecount)
+                        {
+                            found = true;
+                            count++;
+                            namecount = 0;
+                        }
+                        else
+                        {
+                            found = false;
+                            namecount++;
+                        }
+                    }
+
+                    if (line.Contains(locStop))
+                    {
+                        if (count >= 1)
+                        {
+                            streamReader.Close();
+                            return;
+                        }
+                        else
+                        {
+                            found = false;
+                        }
+                    }
+
+                    if (found)
+                    {
+                        if (line.Contains("Your location is"))
+                        {
+                            Match matchPosition = Regex.Match(line, @"Your location is.*Your orientation is", RegexOptions.IgnoreCase);
+                            string[] location = matchPosition.Value.Replace(@"Your location is ", "").Replace(@".  Your orientation is", "").Split(',');
+                            if (location.Count() == 3)
+                            {
+                                x = float.Parse(location[0].Trim(), CultureInfo.InvariantCulture);
+                                y = float.Parse(location[1].Trim(), CultureInfo.InvariantCulture);
+                                z = float.Parse(location[2].Trim(), CultureInfo.InvariantCulture);
+
+                                DataStruct locData;
+
+                                if (npcname_count >= 1)
+                                {
+                                    locData.Name = npcname + "_" + npcname_count.ToString();
+                                }
+                                else
+                                {
+                                    locData.Name = npcname;
+                                }
+                                
+                                locData.Author = Properties.Settings.Default.Author;
+                                locData.XLoc = x;
+                                locData.YLoc = y;
+                                locData.ZLoc = z;
+
+                                if (setSpeed > 0)
+                                {
+                                    locData.Speed = setSpeed;
+                                    setSpeed = 0;
+                                }
+                                else
+                                {
+                                    locData.Speed = 2;
+                                }
+
+                                if (setDelay > 0)
+                                {
+                                    locData.Delay = setDelay;
+                                    setDelay = 0;
+                                }
+                                else
+                                {
+                                    locData.Delay = 0;
+                                }
+
+                                locData.Function = textBox_Function.Text;
+                                dataLoc.Add(locData);
+                            }
+                        }
+                    }
+                }
+                streamReader.Close();
+            }
+            catch
+            {
+                MessageBox.Show("Cannot read log file", "Error", MessageBoxButtons.OK, MessageBoxIcon.Warning);
+            }
+        }
+
+        private void ParseNPC()
+        {
+            string line;
+            string locStart = "'loc_start ";
+            int index = 0;
+            int multipleNPC = 0;
+
+            streamReader = new StreamReader(this.textBox_LogFile.Text);
+
+            while ((line = streamReader.ReadLine()) != null)
+            {
+
+                if (line.Contains(locStart))
+                {
+                    index = line.IndexOf(locStart) + 11;
+                    string npc_name = line.Substring(index, (line.Length - index) - 1);
+
+                    if (NPCList.ContainsKey(npc_name))
+                    {
+                        multipleNPC++;
+                        string newNPCName = npc_name + " " + Convert.ToString(multipleNPC);
+                        
+                        NPCList.Add(newNPCName, newNPCName);
+                        listBox_NPCs.Items.Add(newNPCName);
+                    }
+                    else
+                    {
+                        NPCList.Add(npc_name, npc_name);
+                        listBox_NPCs.Items.Add(npc_name);
+                    }
+                    
+                }
+            }
+            streamReader.Close();
+        }
+
+        /*********************************************************************************************************************************
+         *                                            List View & Rich TextBox Load
+         *********************************************************************************************************************************/
+
+        private void ListviewLoad()
+        { 
+            foreach(DataStruct locData in dataLoc)
+            {
+                ListViewItem loc = new ListViewItem();
+                loc.SubItems.Add(locData.XLoc.ToString(CultureInfo.InvariantCulture));
+                loc.SubItems.Add(locData.YLoc.ToString(CultureInfo.InvariantCulture));
+                loc.SubItems.Add(locData.ZLoc.ToString(CultureInfo.InvariantCulture));
+                loc.SubItems.Add(locData.Speed.ToString(CultureInfo.InvariantCulture));
+                loc.SubItems.Add(locData.Delay.ToString(CultureInfo.InvariantCulture));
+                loc.SubItems.Add(locData.Function);
+                listView_Loaded.Items.Add(loc);
+            }
+        }
+
+        private void RTBLoad()
+        {
+            foreach (DataStruct locData in dataLoc)
+            {
+                string Output;
+                string name = locData.Name;
+                string author = locData.Author;
+                string x = locData.XLoc.ToString();
+                string y = locData.YLoc.ToString();
+                string z = locData.ZLoc.ToString();
+                string speed = locData.Speed.ToString();
+                string delay = locData.Delay.ToString();
+                string function = locData.Function;
+                if (string.IsNullOrEmpty(function))
+                {
+                    Output = "MovementLoopAddLocation(NPC, " + x + ", " + y + ", " + z + ", " + speed + ", " + delay + ")" + System.Environment.NewLine;
+                    this.richTextBox_OutputView.Text += Output;
+                }
+                else
+                {
+                    Output = "MovementLoopAddLocation(NPC, " + x + ", " + y + ", " + z + ", " + speed + ", " + delay + ", " + function + ")" + System.Environment.NewLine;
+                    this.richTextBox_OutputView.Text += Output;
+                }
+                
+            }
+        }
+
+        /*********************************************************************************************************************************
+         *                                           ListView Select Loads TextBoxes
+         *********************************************************************************************************************************/
+
+        private void listView_Loaded_SelectedIndexChanged(object sender, EventArgs e)
+        {
+            if (listView_Loaded.SelectedIndices.Count == 0 || listView_Loaded.SelectedIndices[0] == -1)
+            {
+                ResetListView(false);
+                return;
+            }
+            ListViewItem loc = listView_Loaded.Items[listView_Loaded.SelectedIndices[0]];
+            textBox_XLOC.Text = loc.SubItems[1].Text;
+            textBox_YLOC.Text = loc.SubItems[2].Text;
+            textBox_ZLOC.Text = loc.SubItems[3].Text;
+            textBox_Speed.Text = loc.SubItems[4].Text;
+            textBox_Delay.Text = loc.SubItems[5].Text;
+            textBox_Function.Text = loc.SubItems[6].Text;
+
+            rowNumber = listView_Loaded.FocusedItem.Index;
+
+            richTextBox_OutputView.Clear();
+            richTextBox_OutputView.Text = "Data Loaded";
+
+            button_InsertAbove.Enabled = true;
+            button_InsertBelow.Enabled = true;
+            button_Update.Enabled = true;
+            button_Remove.Enabled = true;
+            button_Reset.Enabled = true;
+        }
+
+        /*********************************************************************************************************************************
+         *                                            Reset ListView & TextBoxes
+         *********************************************************************************************************************************/
+
+        private void ResetListView(bool include_listview)
+        {
+            if (include_listview)
+                listView_Loaded.Items.Clear();  
+        }
+
+        private void ResetTextBoxes()
+        {
+            textBox_XLOC.Clear();
+            textBox_YLOC.Clear();
+            textBox_ZLOC.Clear();
+            textBox_Speed.Clear();
+            textBox_Delay.Clear();
+            textBox_Function.Clear();
+        }
+
+        /*********************************************************************************************************************************
+         *                                               Buttons
+         *********************************************************************************************************************************/
+
+        private void btn_Browse_Click(object sender, EventArgs e)
+        {
+            file_dialog.Title = "Load Log File";
+            file_dialog.Filter = "Text|*.txt|All|*.*";
+            if (this.file_dialog.ShowDialog() == DialogResult.OK)
+            {
+                this.textBox_LogFile.Text = this.file_dialog.FileName;
+
+                ResetListView(true);
+                ResetTextBoxes();
+                NPCList.Clear();
+                listBox_NPCs.Items.Clear();
+                dataLoc.Clear();
+
+                //richTextBox_OutputView.Text = "Clearing listview, textboxes, and location data.\nGetting spawn and author information.\nGetting spawn location data.\n" +
+                //"Loading list with spawn location data.\n";
+
+                rowNumber = 0; // resetting since setting reversepath to false calls this as part of the [] iterator
+
+                if (checkBox_ReversePath.Checked == true)
+                {
+                    checkBox_ReversePath.Checked = false;
+                }
+
+                ParseNPC();
+
+                richTextBox_OutputView.Clear();
+                int total_npcs = NPCList.Count;
+                richTextBox_OutputView.Text = total_npcs + " NPC's Found and listed on the left\n\nDouble Click an NPC's name to load its waypoints.";
+
+                ListviewLoad();
+            }
+        }
+
+        private void textBox_LogFile_DoubleClick(object sender, EventArgs e)
+        {
+            btn_Browse_Click(sender, e);
+        }
+
+        private void button_Update_Click(object sender, EventArgs e)
+        {
+            richTextBox_OutputView.Clear();
+
+            if (textBox_XLOC.Text == String.Empty || textBox_YLOC.Text == String.Empty || textBox_ZLOC.Text == String.Empty || textBox_Speed.Text == String.Empty)
+            {
+                listView_Loaded_SelectedIndexChanged(sender, e);
+            }
+            else
+            {
+                DataStruct locData = dataLoc[rowNumber];
+                locData.XLoc = float.Parse(textBox_XLOC.Text);
+                locData.YLoc = float.Parse(textBox_YLOC.Text);
+                locData.ZLoc = float.Parse(textBox_ZLOC.Text);
+                locData.Speed = Convert.ToInt32(textBox_Speed.Text);
+                locData.Delay = Convert.ToInt32(textBox_Delay.Text);
+                locData.Function = textBox_Function.Text;
+                dataLoc.Insert(rowNumber, locData);
+                dataLoc.RemoveAt(rowNumber + 1);
+
+                ResetTextBoxes();
+                ResetListView(true);
+                ListviewLoad();
+                richTextBox_OutputView.Text = "Updated Entry";
+            }
+            
+        }
+
+        private void button_InsertAbove_Click(object sender, EventArgs e)
+        {
+            richTextBox_OutputView.Clear();
+
+            if (listView_Loaded.SelectedIndices.Count == 0 || listView_Loaded.SelectedIndices[0] == -1)
+            {
+                MessageBox.Show("You must select something from the list first", "Error", MessageBoxButtons.OK, MessageBoxIcon.Warning);
+                return;
+            }
+            if (textBox_XLOC.Text == String.Empty || textBox_YLOC.Text == String.Empty || textBox_ZLOC.Text == String.Empty)
+            {
+                MessageBox.Show("You are missing either X, Y, or Z coordinates", "Error", MessageBoxButtons.OK, MessageBoxIcon.Warning);
+                return;
+            }
+            if (string.IsNullOrEmpty(textBox_Speed.Text))
+            {
+                textBox_Speed.Text = "2";
+            }
+            if (string.IsNullOrEmpty(textBox_Delay.Text))
+            {
+                textBox_Delay.Text = "0";
+            }
+            DataStruct locData = dataLoc[rowNumber];
+            locData.XLoc = float.Parse(textBox_XLOC.Text);
+            locData.YLoc = float.Parse(textBox_YLOC.Text);
+            locData.ZLoc = float.Parse(textBox_ZLOC.Text);
+            locData.Speed = Convert.ToInt32(textBox_Speed.Text);
+            locData.Delay = Convert.ToInt32(textBox_Delay.Text);
+            locData.Function = textBox_Function.Text;
+            dataLoc.Insert(rowNumber, locData);
+
+            ResetTextBoxes();
+            ResetListView(true);
+            ListviewLoad();
+            richTextBox_OutputView.Text = "Inserted New Entry";
+        }
+
+        private void button_InsertBelow_Click(object sender, EventArgs e)
+        {
+            richTextBox_OutputView.Clear();
+
+            if (listView_Loaded.SelectedIndices.Count == 0 || listView_Loaded.SelectedIndices[0] == -1)
+            {
+                MessageBox.Show("You must select something from the list first", "Error", MessageBoxButtons.OK, MessageBoxIcon.Warning);
+                return;
+            }
+            if (textBox_XLOC.Text == String.Empty || textBox_YLOC.Text == String.Empty || textBox_ZLOC.Text == String.Empty)
+            {
+                MessageBox.Show("You are missing either X, Y, or Z coordinates", "Error", MessageBoxButtons.OK, MessageBoxIcon.Warning);
+                return;
+            }
+            if (string.IsNullOrEmpty(textBox_Speed.Text))
+            {
+                textBox_Speed.Text = "2";
+            }
+            if (string.IsNullOrEmpty(textBox_Delay.Text))
+            {
+                textBox_Delay.Text = "0";
+            }
+            DataStruct locData = dataLoc[rowNumber];
+            locData.XLoc = float.Parse(textBox_XLOC.Text);
+            locData.YLoc = float.Parse(textBox_YLOC.Text);
+            locData.ZLoc = float.Parse(textBox_ZLOC.Text);
+            locData.Speed = Convert.ToInt32(textBox_Speed.Text);
+            locData.Delay = Convert.ToInt32(textBox_Delay.Text);
+            locData.Function = textBox_Function.Text;
+            dataLoc.Insert(rowNumber + 1, locData);
+
+            ResetTextBoxes();
+            ResetListView(true);
+            ListviewLoad();
+            richTextBox_OutputView.Text = "Inserted New Entry";
+        }
+
+        private void button_Remove_Click(object sender, EventArgs e)
+        {
+            richTextBox_OutputView.Clear();
+
+            DataStruct locData = dataLoc[rowNumber];
+            dataLoc.RemoveAt(rowNumber);
+
+            ResetTextBoxes();
+            ResetListView(true);
+            ListviewLoad();
+            richTextBox_OutputView.Text = "Removed Selected Entry";
+        }
+
+        private void checkBox_ReversePath_CheckedChanged(object sender, EventArgs e)
+        {
+            // might be a reload so don't crash trying to pull beyond the array!
+            if (dataLoc.Count() <= rowNumber)
+                return;
+
+            int rowCount = dataLoc.Count;
+            // Throws an error here if the checkbox has been unchecked and checked a second time
+
+            DataStruct locData = dataLoc[rowNumber];
+            bool firstRun = true;
+
+            // Reverse the path
+            if (checkBox_ReversePath.Checked)
+            {
+                rowNumber = rowCount - 1;
+                while (rowCount > 0)
+                {
+                    if (firstRun == true)
+                    {
+                        rowCount = (rowCount - 2);
+
+                        firstRun = false;
+                    }
+                    else
+                    {
+                        rowCount--;
+                    }
+
+                    locData = dataLoc[rowCount];
+                    float tmpXLoc = locData.XLoc;
+                    float tmpYLoc = locData.YLoc;
+                    float tmpZLoc = locData.ZLoc;
+                    int tmpSpeed = locData.Speed;
+                    int tmpDelay = locData.Delay;
+                    string tmpFunction = locData.Function;
+
+                    locData.XLoc = tmpXLoc;
+                    locData.YLoc = tmpYLoc;
+                    locData.ZLoc = tmpZLoc;
+                    locData.Speed = tmpSpeed;
+                    locData.Delay = tmpDelay;
+                    locData.Function = tmpFunction;
+                    dataLoc.Add(locData);
+                }
+
+                ResetListView(true);
+                ResetTextBoxes();
+                richTextBox_OutputView.Clear();
+                richTextBox_OutputView.Text = "The waypoints have been reverse, added to the current list of waypoints, and the spawn path will now loop";
+                ListviewLoad();
+            }
+            else
+            {
+                // Revert Changes if checkbox is unchecked
+                int revertrowcount = rowCount / 2;
+                int count = 0;
+
+                while (count < revertrowcount)
+                {
+                    count++;
+                    dataLoc.RemoveAt(rowNumber);
+                    rowNumber--;
+
+                }
+                ResetListView(true);
+                ResetTextBoxes();
+                richTextBox_OutputView.Clear();
+                ListviewLoad();
+            }
+
+        }
+
+        private void button_Save_Click(object sender, EventArgs e)
+        {
+            richTextBox_OutputView.Clear();
+
+            DateTime dateTime = DateTime.Now;
+
+            List<string> checkfunctions = new List<string>();
+            DataStruct locData = dataLoc[rowNumber];
+            string spawnName = locData.Name + ".lua";
+            StreamWriter streamWriter = new StreamWriter(spawnName);
+
+            string script = "--[[\n\tScript Name\t\t:\t" + spawnName + "\n\tScript Purpose\t:\tWaypoint Path for " + spawnName + "\n\tScript Author\t:\t" +
+                             locData.Author + "\n\tScript Date\t\t:\t" + dateTime.ToString("MM/dd/yyyy hh:mm:ss tt") + "\n\tScript Notes\t:\tLocations collected from Live\n--]]\n\n" +
+                             "function spawn(NPC)\n\twaypoints(NPC)\nend\n\nfunction hailed(NPC, Spawn)\n\tFaceTarget(NPC, Spawn)\nend\n\nfunction respawn(NPC)\nend\n\n" +
+                             "function waypoints(NPC)";
+            streamWriter.WriteLine(script);
+
+            for (int i = 0; i < dataLoc.Count; i++)
+            {
+                //rowNumber = i;
+                locData = dataLoc[i];
+                if (!String.IsNullOrEmpty(locData.Function.ToString()))
+                {
+                    string output = "	MovementLoopAddLocation(NPC, " + locData.XLoc.ToString(CultureInfo.InvariantCulture) + ", " + locData.YLoc.ToString(CultureInfo.InvariantCulture) + ", " + locData.ZLoc.ToString(CultureInfo.InvariantCulture) + ", " +
+                                     locData.Speed + ", " + locData.Delay + ", " +
+                                     "\"" + locData.Function.ToString() + "\")";
+                    streamWriter.WriteLine(output);
+                }
+                else
+                {
+                    string output = "	MovementLoopAddLocation(NPC, " + locData.XLoc.ToString(CultureInfo.InvariantCulture) + ", " + locData.YLoc.ToString(CultureInfo.InvariantCulture) + ", " + locData.ZLoc.ToString(CultureInfo.InvariantCulture) + ", " +
+                                     locData.Speed + ", " + locData.Delay + ")";
+                    streamWriter.WriteLine(output);
+                }
+                
+            
+            }
+            
+            streamWriter.WriteLine("end\n\n");
+
+            for (int i = 0; i < dataLoc.Count; i++)
+            {
+                
+                //need to check for duplicates of the movement function
+                locData = dataLoc[i];
+
+                if (!String.IsNullOrEmpty(locData.Function.ToString()))
+                {
+                    string movementfunctions = "function " + locData.Function.ToString() + "(NPC)\n\t Say(NPC, " + "\"" + "This is the " + locData.Function.ToString() + " function\"" + ")\nend";
+                    streamWriter.WriteLine(movementfunctions + "\n\n");
+                }
+            }
+
+            streamWriter.Close();
+            richTextBox_OutputView.Text = "Saved to " + spawnName + "";
+        }
+
+        private void button_Reset_Click(object sender, EventArgs e)
+        {
+            richTextBox_OutputView.Clear();
+
+            ResetTextBoxes();
+            DataStruct locData = dataLoc[rowNumber];
+            richTextBox_OutputView.Text = "Cleared Textboxes";
+        }
+
+        private void button_ParseDetalis_Click(object sender, EventArgs e)
+        {
+            ParseData();
+            ListviewLoad();
+        }
+
+
+        /*********************************************************************************************************************************
+         *                                               MENU ITEMS
+         *********************************************************************************************************************************/
+
+        private void exitToolStripMenuItem_Click_1(object sender, EventArgs e)
+        {
+            Application.Exit();
+        }
+
+        private void collectWaypointsToolStripMenuItem_Click(object sender, EventArgs e)
+        {
+            MessageBox.Show("Begin by using this line" + System.Environment.NewLine +
+                System.Environment.NewLine +
+                            "/loc_start <name of spawn>" + System.Environment.NewLine +
+                            "Example: /loc_start a trained wolf" + System.Environment.NewLine +
+                            System.Environment.NewLine +
+                            "Use /loc at each point the spawn stops/turns to log location" + System.Environment.NewLine +
+                            System.Environment.NewLine +
+                            "Use /loc_speed to change the movement between waypoints" + System.Environment.NewLine +
+                            "Example: /loc_speed 4"+ System.Environment.NewLine +
+                            "to make spawn run from point to point" + System.Environment.NewLine +
+                            System.Environment.NewLine +
+                            "Use /loc_delay to pause at a waypoint. /loc_delay 3" + System.Environment.NewLine +
+                            "Example /loc_delay 3" + System.Environment.NewLine + 
+                            "to make spawn pause for 3 seconds" + System.Environment.NewLine +
+                            System.Environment.NewLine +
+                            "End the session by using this line" + System.Environment.NewLine +
+                            "/loc_stop", "Collecting location Waypoints", MessageBoxButtons.OK, MessageBoxIcon.Information);
+        }
+
+        private void editinglogsToolStripMenuItem_Click(object sender, EventArgs e)
+        {
+            MessageBox.Show("Choose a line of waypoints in the list to work on" + System.Environment.NewLine +
+                            "Edit the values in the boxes on the bottom" + System.Environment.NewLine +
+                            System.Environment.NewLine +
+                            "Use the Update button to update the line" + System.Environment.NewLine +
+                            System.Environment.NewLine +
+                            "Add a new waypoint to the list by using the Insert Above or Insert Below buttons" + System.Environment.NewLine +
+                            "Add a function here if the spawns does something at a stop/turn" + System.Environment.NewLine +
+                            "Otherwise leave blank"+ System.Environment.NewLine +
+                            "Note: If a function is added it auto creates a new function in the script" + System.Environment.NewLine +
+                            "Once script is saved you can edit the function in an editor" + System.Environment.NewLine +
+                            System.Environment.NewLine +
+                            "Once you are finished click on the Parse button to save or edit", "Editing Locations", MessageBoxButtons.OK, MessageBoxIcon.Information);
+        }
+
+        private void loadingLogsToolStripMenuItem_Click(object sender, EventArgs e)
+        {
+            MessageBox.Show("Use the browse button in the generator to locate your log." + System.Environment.NewLine +
+                            "these are located in your EverQuest II->logs folder inside the folder of your live client." + System.Environment.NewLine +
+                            System.Environment.NewLine +
+                            "Double click your spawn from the list on the left" + System.Environment.NewLine +
+                            "You can use the Parse button as well" + System.Environment.NewLine +
+                            "Example a trained wolf" + System.Environment.NewLine +
+                            "Note: Change the default author under file menu" + System.Environment.NewLine +
+                            "File->Settings->Author and edit in the textbox" + System.Environment.NewLine +
+                            "Hit enter to save.", "Loading Logs", MessageBoxButtons.OK, MessageBoxIcon.Information);
+        }
+
+        // This loads the saved settings for Author into the toolStripTextBox
+        private void authorToolStripMenuItem_MouseEnter(object sender, EventArgs e)
+        {
+            toolStripTextBox_Author.Text = Properties.Settings.Default.Author;
+        }
+
+        //Code for toolStripTextBoxAuthor Key Event set in the toolStripTextBoxAuthor Properties
+        private void toolStripTextBoxAuthor_KeyDown(object sender, KeyEventArgs e)
+        {
+            if (e.KeyCode == Keys.Enter || e.KeyCode == Keys.Return)
+            {
+                Properties.Settings.Default.Author = toolStripTextBox_Author.Text;
+                Properties.Settings.Default.Save();
+
+                userToolStripMenuItem.Text = Properties.Settings.Default.Author;
+
+                e.Handled = true;
+                e.SuppressKeyPress = true;
+                fileToolStripMenuItem.HideDropDown(); // Hides the menu after enter key is pressed
+            }
+        }
+
+        private void listBox_NPCs_MouseDoubleClick(object sender, MouseEventArgs e)
+        {
+            if (checkBox_ReversePath.Checked == true)
+            {
+                checkBox_ReversePath.Checked = false;
+            }
+            ParseData();
+            ListviewLoad();
+
+            int total_wapoints = dataLoc.Count;
+            richTextBox_OutputView.Text = richTextBox_OutputView.Text + "\n\n\n" + total_wapoints + " Waypoints were loaded\n\nClick a waypoint to edit it in the boxes below";
+        }
+
+        /*********************************************************************************************************************************
+         *                                               Notes
+         *********************************************************************************************************************************/
+    }
+}

+ 123 - 0
EQ2/devtools/Movement Loop Generator/Movement Loop Generator 2.0/Form1.resx

@@ -0,0 +1,123 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <metadata name="menuStrip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>17, 17</value>
+  </metadata>
+</root>

+ 111 - 0
EQ2/devtools/Movement Loop Generator/Movement Loop Generator 2.0/Movement Loop Generator 2.0.csproj

@@ -0,0 +1,111 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProjectGuid>{153255FE-C8A9-49FA-B043-8B60A3A48C54}</ProjectGuid>
+    <OutputType>WinExe</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>Movement_Loop_Generator_2._0</RootNamespace>
+    <AssemblyName>Movement Loop Generator 2.0</AssemblyName>
+    <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
+    <FileAlignment>512</FileAlignment>
+    <PublishUrl>publish\</PublishUrl>
+    <Install>true</Install>
+    <InstallFrom>Disk</InstallFrom>
+    <UpdateEnabled>false</UpdateEnabled>
+    <UpdateMode>Foreground</UpdateMode>
+    <UpdateInterval>7</UpdateInterval>
+    <UpdateIntervalUnits>Days</UpdateIntervalUnits>
+    <UpdatePeriodically>false</UpdatePeriodically>
+    <UpdateRequired>false</UpdateRequired>
+    <MapFileExtensions>true</MapFileExtensions>
+    <ApplicationRevision>0</ApplicationRevision>
+    <ApplicationVersion>1.0.0.%2a</ApplicationVersion>
+    <IsWebBootstrapper>false</IsWebBootstrapper>
+    <UseApplicationTrust>false</UseApplicationTrust>
+    <BootstrapperEnabled>true</BootstrapperEnabled>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <PlatformTarget>AnyCPU</PlatformTarget>
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>bin\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <PlatformTarget>AnyCPU</PlatformTarget>
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>bin\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="System" />
+    <Reference Include="System.Core" />
+    <Reference Include="System.Xml.Linq" />
+    <Reference Include="System.Data.DataSetExtensions" />
+    <Reference Include="Microsoft.CSharp" />
+    <Reference Include="System.Data" />
+    <Reference Include="System.Deployment" />
+    <Reference Include="System.Drawing" />
+    <Reference Include="System.Windows.Forms" />
+    <Reference Include="System.Xml" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="Form1.cs">
+      <SubType>Form</SubType>
+    </Compile>
+    <Compile Include="Form1.Designer.cs">
+      <DependentUpon>Form1.cs</DependentUpon>
+    </Compile>
+    <Compile Include="Program.cs" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+    <Compile Include="DataStruct.cs" />
+    <EmbeddedResource Include="Form1.resx">
+      <DependentUpon>Form1.cs</DependentUpon>
+    </EmbeddedResource>
+    <EmbeddedResource Include="Properties\Resources.resx">
+      <Generator>ResXFileCodeGenerator</Generator>
+      <LastGenOutput>Resources.Designer.cs</LastGenOutput>
+      <SubType>Designer</SubType>
+    </EmbeddedResource>
+    <Compile Include="Properties\Resources.Designer.cs">
+      <AutoGen>True</AutoGen>
+      <DependentUpon>Resources.resx</DependentUpon>
+    </Compile>
+    <None Include="Properties\Settings.settings">
+      <Generator>SettingsSingleFileGenerator</Generator>
+      <LastGenOutput>Settings.Designer.cs</LastGenOutput>
+    </None>
+    <Compile Include="Properties\Settings.Designer.cs">
+      <AutoGen>True</AutoGen>
+      <DependentUpon>Settings.settings</DependentUpon>
+      <DesignTimeSharedInput>True</DesignTimeSharedInput>
+    </Compile>
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="App.config" />
+  </ItemGroup>
+  <ItemGroup>
+    <BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1">
+      <Visible>False</Visible>
+      <ProductName>.NET Framework 3.5 SP1</ProductName>
+      <Install>false</Install>
+    </BootstrapperPackage>
+  </ItemGroup>
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
+       Other similar extension points exist, see Microsoft.Common.targets.
+  <Target Name="BeforeBuild">
+  </Target>
+  <Target Name="AfterBuild">
+  </Target>
+  -->
+</Project>

+ 172 - 0
EQ2/devtools/Movement Loop Generator/Movement Loop Generator 2.0/ParseDetalis.Designer.cs

@@ -0,0 +1,172 @@
+namespace Movement_Loop_Generator_2._0
+{
+    partial class ParseDetalis
+    {
+        /// <summary>
+        /// Required designer variable.
+        /// </summary>
+        private System.ComponentModel.IContainer components = null;
+
+        /// <summary>
+        /// Clean up any resources being used.
+        /// </summary>
+        /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+        protected override void Dispose(bool disposing)
+        {
+            if (disposing && (components != null))
+            {
+                components.Dispose();
+            }
+            base.Dispose(disposing);
+        }
+
+        #region Windows Form Designer generated code
+
+        /// <summary>
+        /// Required method for Designer support - do not modify
+        /// the contents of this method with the code editor.
+        /// </summary>
+        private void InitializeComponent()
+        {
+            this.label1 = new System.Windows.Forms.Label();
+            this.label2 = new System.Windows.Forms.Label();
+            this.tbSpawnName = new System.Windows.Forms.TextBox();
+            this.tbAuthorName = new System.Windows.Forms.TextBox();
+            this.label6 = new System.Windows.Forms.Label();
+            this.label7 = new System.Windows.Forms.Label();
+            this.tbSpeed = new System.Windows.Forms.TextBox();
+            this.tbDelay = new System.Windows.Forms.TextBox();
+            this.label8 = new System.Windows.Forms.Label();
+            this.tbFunction = new System.Windows.Forms.TextBox();
+            this.btnParse = new System.Windows.Forms.Button();
+            this.SuspendLayout();
+            // 
+            // label1
+            // 
+            this.label1.AutoSize = true;
+            this.label1.Location = new System.Drawing.Point(12, 22);
+            this.label1.Name = "label1";
+            this.label1.Size = new System.Drawing.Size(71, 13);
+            this.label1.TabIndex = 0;
+            this.label1.Text = "Spawn Name";
+            // 
+            // label2
+            // 
+            this.label2.AutoSize = true;
+            this.label2.Location = new System.Drawing.Point(186, 22);
+            this.label2.Name = "label2";
+            this.label2.Size = new System.Drawing.Size(38, 13);
+            this.label2.TabIndex = 1;
+            this.label2.Text = "Author";
+            // 
+            // tbSpawnName
+            // 
+            this.tbSpawnName.Location = new System.Drawing.Point(12, 38);
+            this.tbSpawnName.Name = "tbSpawnName";
+            this.tbSpawnName.Size = new System.Drawing.Size(138, 20);
+            this.tbSpawnName.TabIndex = 2;
+            // 
+            // tbAuthorName
+            // 
+            this.tbAuthorName.Location = new System.Drawing.Point(186, 38);
+            this.tbAuthorName.Name = "tbAuthorName";
+            this.tbAuthorName.Size = new System.Drawing.Size(138, 20);
+            this.tbAuthorName.TabIndex = 3;
+            // 
+            // label6
+            // 
+            this.label6.AutoSize = true;
+            this.label6.Location = new System.Drawing.Point(50, 74);
+            this.label6.Name = "label6";
+            this.label6.Size = new System.Drawing.Size(38, 13);
+            this.label6.TabIndex = 10;
+            this.label6.Text = "Speed";
+            // 
+            // label7
+            // 
+            this.label7.AutoSize = true;
+            this.label7.Location = new System.Drawing.Point(186, 74);
+            this.label7.Name = "label7";
+            this.label7.Size = new System.Drawing.Size(34, 13);
+            this.label7.TabIndex = 11;
+            this.label7.Text = "Delay";
+            // 
+            // tbSpeed
+            // 
+            this.tbSpeed.Location = new System.Drawing.Point(50, 90);
+            this.tbSpeed.Name = "tbSpeed";
+            this.tbSpeed.Size = new System.Drawing.Size(100, 20);
+            this.tbSpeed.TabIndex = 13;
+            // 
+            // tbDelay
+            // 
+            this.tbDelay.Location = new System.Drawing.Point(186, 90);
+            this.tbDelay.Name = "tbDelay";
+            this.tbDelay.Size = new System.Drawing.Size(100, 20);
+            this.tbDelay.TabIndex = 14;
+            // 
+            // label8
+            // 
+            this.label8.AutoSize = true;
+            this.label8.Location = new System.Drawing.Point(50, 126);
+            this.label8.Name = "label8";
+            this.label8.Size = new System.Drawing.Size(48, 13);
+            this.label8.TabIndex = 15;
+            this.label8.Text = "Function";
+            // 
+            // tbFunction
+            // 
+            this.tbFunction.Location = new System.Drawing.Point(50, 142);
+            this.tbFunction.Name = "tbFunction";
+            this.tbFunction.Size = new System.Drawing.Size(236, 20);
+            this.tbFunction.TabIndex = 16;
+            // 
+            // btnParse
+            // 
+            this.btnParse.Location = new System.Drawing.Point(120, 187);
+            this.btnParse.Name = "btnParse";
+            this.btnParse.Size = new System.Drawing.Size(100, 31);
+            this.btnParse.TabIndex = 17;
+            this.btnParse.Text = "Parse";
+            this.btnParse.UseVisualStyleBackColor = true;
+            this.btnParse.Click += new System.EventHandler(this.btnParse_Click);
+            // 
+            // ParseDetalis
+            // 
+            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+            this.ClientSize = new System.Drawing.Size(336, 230);
+            this.Controls.Add(this.btnParse);
+            this.Controls.Add(this.tbFunction);
+            this.Controls.Add(this.label8);
+            this.Controls.Add(this.tbDelay);
+            this.Controls.Add(this.tbSpeed);
+            this.Controls.Add(this.label7);
+            this.Controls.Add(this.label6);
+            this.Controls.Add(this.tbAuthorName);
+            this.Controls.Add(this.tbSpawnName);
+            this.Controls.Add(this.label2);
+            this.Controls.Add(this.label1);
+            this.Name = "ParseDetalis";
+            this.Text = "ParseDetalis";
+            this.Load += new System.EventHandler(this.ParseDetalis_Load);
+            this.ResumeLayout(false);
+            this.PerformLayout();
+
+        }
+
+        #endregion
+
+        private System.Windows.Forms.Label label1;
+        private System.Windows.Forms.Label label2;
+        private System.Windows.Forms.TextBox tbSpawnName;
+        private System.Windows.Forms.TextBox tbAuthorName;
+        private System.Windows.Forms.Label label6;
+        private System.Windows.Forms.Label label7;
+        private System.Windows.Forms.TextBox tbSpeed;
+        private System.Windows.Forms.TextBox tbDelay;
+        private System.Windows.Forms.Label label8;
+        private System.Windows.Forms.TextBox tbFunction;
+        private System.Windows.Forms.Button btnParse;
+    }
+}

+ 90 - 0
EQ2/devtools/Movement Loop Generator/Movement Loop Generator 2.0/ParseDetalis.cs

@@ -0,0 +1,90 @@
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Data;
+using System.Drawing;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows.Forms;
+
+namespace Movement_Loop_Generator_2._0
+{
+    public partial class ParseDetalis : Form
+    {
+        private string parseName;
+        private string parseAuthor;
+        private int parseSpeed;
+        private int parseDelay;
+        private string parseFunction;
+
+        public ParseDetalis()
+        {
+            InitializeComponent();
+        }
+
+        private void btnParse_Click(object sender, EventArgs e)
+        {
+            
+            
+            parseName = tbSpawnName.Text;
+            parseAuthor = tbAuthorName.Text;
+            if (string.IsNullOrEmpty(tbSpeed.Text))
+            {
+                parseSpeed = 2;
+            }
+            else
+            {
+                parseSpeed = Convert.ToInt32(tbSpeed.Text);
+            }
+            if (string.IsNullOrEmpty(tbDelay.Text))
+            {
+                parseDelay = 0;
+            }
+            else
+            {
+                parseDelay = Convert.ToInt32(tbDelay.Text);
+            }
+            parseFunction = tbFunction.Text;
+            if (string.IsNullOrEmpty(tbAuthorName.Text))
+            {
+                parseAuthor = "Generated with Movement Loop Generator 2.0";
+            }
+            if (string.IsNullOrEmpty(tbSpawnName.Text))
+            {
+
+                MessageBox.Show("Spawn Name must be entered", "Error", MessageBoxButtons.OK, MessageBoxIcon.Warning);
+            }
+            else
+            {
+                this.Close();
+            }
+        }
+
+        public string getName()
+        {
+            return parseName;
+        }
+        public string getAuthor()
+        {
+            return parseAuthor;
+        }
+        public int getSpeed()
+        {
+            return parseSpeed;
+        }
+        public int getDelay()
+        {
+            return parseDelay;
+        }
+        public string getFunction()
+        {
+            return parseFunction;
+        }
+
+        private void ParseDetalis_Load(object sender, EventArgs e)
+        {
+            this.AcceptButton = btnParse;
+        }
+    }
+}

+ 120 - 0
EQ2/devtools/Movement Loop Generator/Movement Loop Generator 2.0/ParseDetalis.resx

@@ -0,0 +1,120 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+</root>

+ 22 - 0
EQ2/devtools/Movement Loop Generator/Movement Loop Generator 2.0/Program.cs

@@ -0,0 +1,22 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading.Tasks;
+using System.Windows.Forms;
+
+namespace Movement_Loop_Generator_2._0
+{
+    static class Program
+    {
+        /// <summary>
+        /// The main entry point for the application.
+        /// </summary>
+        [STAThread]
+        static void Main()
+        {
+            Application.EnableVisualStyles();
+            Application.SetCompatibleTextRenderingDefault(false);
+            Application.Run(new Form1());
+        }
+    }
+}

+ 39 - 0
EQ2/devtools/Movement Loop Generator/Movement Loop Generator 2.0/Properties/AssemblyInfo.cs

@@ -0,0 +1,39 @@
+using System.Resources;
+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("Movement Loop Generator 2.0")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("Movement Loop Generator 2.0")]
+[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("5eef6feb-1a41-47db-b2ae-3725b4a58235")]
+
+// 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")]
+[assembly: NeutralResourcesLanguage("")]
+

+ 71 - 0
EQ2/devtools/Movement Loop Generator/Movement Loop Generator 2.0/Properties/Resources.Designer.cs

@@ -0,0 +1,71 @@
+//------------------------------------------------------------------------------
+// <auto-generated>
+//     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.
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace Movement_Loop_Generator_2._0.Properties
+{
+
+
+    /// <summary>
+    ///   A strongly-typed resource class, for looking up localized strings, etc.
+    /// </summary>
+    // 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()
+        {
+        }
+
+        /// <summary>
+        ///   Returns the cached ResourceManager instance used by this class.
+        /// </summary>
+        [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("Movement_Loop_Generator_2._0.Properties.Resources", typeof(Resources).Assembly);
+                    resourceMan = temp;
+                }
+                return resourceMan;
+            }
+        }
+
+        /// <summary>
+        ///   Overrides the current thread's CurrentUICulture property for all
+        ///   resource lookups using this strongly typed resource class.
+        /// </summary>
+        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+        internal static global::System.Globalization.CultureInfo Culture
+        {
+            get
+            {
+                return resourceCulture;
+            }
+            set
+            {
+                resourceCulture = value;
+            }
+        }
+    }
+}

+ 117 - 0
EQ2/devtools/Movement Loop Generator/Movement Loop Generator 2.0/Properties/Resources.resx

@@ -0,0 +1,117 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+</root>

+ 38 - 0
EQ2/devtools/Movement Loop Generator/Movement Loop Generator 2.0/Properties/Settings.Designer.cs

@@ -0,0 +1,38 @@
+//------------------------------------------------------------------------------
+// <auto-generated>
+//     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.
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace Movement_Loop_Generator_2._0.Properties {
+    
+    
+    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "15.7.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;
+            }
+        }
+        
+        [global::System.Configuration.UserScopedSettingAttribute()]
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.Configuration.DefaultSettingValueAttribute("Auto Generated")]
+        public string Author {
+            get {
+                return ((string)(this["Author"]));
+            }
+            set {
+                this["Author"] = value;
+            }
+        }
+    }
+}

+ 9 - 0
EQ2/devtools/Movement Loop Generator/Movement Loop Generator 2.0/Properties/Settings.settings

@@ -0,0 +1,9 @@
+<?xml version='1.0' encoding='utf-8'?>
+<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)" GeneratedClassNamespace="Movement_Loop_Generator_2._0.Properties" GeneratedClassName="Settings">
+  <Profiles />
+  <Settings>
+    <Setting Name="Author" Type="System.String" Scope="User">
+      <Value Profile="(Default)">Auto Generated</Value>
+    </Setting>
+  </Settings>
+</SettingsFile>

BIN
EQ2/devtools/Movement Loop Generator/Movement Loop Generator 2.0/bin/Debug/Movement Loop Generator 2.0.exe


+ 18 - 0
EQ2/devtools/Movement Loop Generator/Movement Loop Generator 2.0/bin/Debug/Movement Loop Generator 2.0.exe.config

@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<configuration>
+    <configSections>
+        <sectionGroup name="userSettings" type="System.Configuration.UserSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >
+            <section name="Movement_Loop_Generator_2._0.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false" />
+        </sectionGroup>
+    </configSections>
+    <startup> 
+        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
+    </startup>
+    <userSettings>
+        <Movement_Loop_Generator_2._0.Properties.Settings>
+            <setting name="Author" serializeAs="String">
+                <value>Auto Generated</value>
+            </setting>
+        </Movement_Loop_Generator_2._0.Properties.Settings>
+    </userSettings>
+</configuration>

BIN
EQ2/devtools/Movement Loop Generator/Movement Loop Generator 2.0/bin/Debug/Movement Loop Generator 2.0.pdb


+ 166 - 0
EQ2/devtools/Movement Loop Generator/Movement Loop Generator 2.0/bin/Debug/deathly_scarab.txt

@@ -0,0 +1,166 @@
+(1590011077)[Wed May 20 14:44:37 2020] Logging to 'logs/Zeklabs/deathly_scarab.txt' is now *ON*
+(1590011105)[Wed May 20 14:45:05 2020] Unknown command: 'loc_start deathly_scarab5'
+(1590011117)[Wed May 20 14:45:17 2020] Your location is 141.35, 6.85, -71.46.  Your orientation is 83.41, 0.00, 0.00
+Use 'loc clipboard' to copy the loc info to clipboard.
+(1590011120)[Wed May 20 14:45:20 2020] Your location is 138.75, 6.96, -69.87.  Your orientation is 347.03, 0.00, 0.00
+Use 'loc clipboard' to copy the loc info to clipboard.
+(1590011121)[Wed May 20 14:45:21 2020] Your location is 140.64, 6.89, -78.15.  Your orientation is 347.10, 0.00, 0.00
+Use 'loc clipboard' to copy the loc info to clipboard.
+(1590011126)[Wed May 20 14:45:26 2020] Your location is 138.87, 6.96, -70.29.  Your orientation is 279.51, 0.00, 0.00
+Use 'loc clipboard' to copy the loc info to clipboard.
+(1590011129)[Wed May 20 14:45:29 2020] Your location is 151.91, 6.90, -71.55.  Your orientation is 203.52, 0.00, 0.00
+Use 'loc clipboard' to copy the loc info to clipboard.
+(1590011134)[Wed May 20 14:45:34 2020] Your location is 155.97, 6.90, -61.92.  Your orientation is 135.17, 0.00, 0.00
+Use 'loc clipboard' to copy the loc info to clipboard.
+(1590011135)[Wed May 20 14:45:35 2020] Your location is 150.44, 7.46, -56.35.  Your orientation is 135.17, 0.00, 0.00
+Use 'loc clipboard' to copy the loc info to clipboard.
+(1590011138)[Wed May 20 14:45:38 2020] Your location is 148.73, 6.99, -43.28.  Your orientation is 177.72, 0.00, 0.00
+Use 'loc clipboard' to copy the loc info to clipboard.
+(1590011140)[Wed May 20 14:45:40 2020] Your location is 155.72, 6.99, -43.30.  Your orientation is 250.76, 0.00, 0.00
+Use 'loc clipboard' to copy the loc info to clipboard.
+(1590011142)[Wed May 20 14:45:42 2020] Your location is 155.76, 6.99, -27.76.  Your orientation is 178.03, 0.00, 0.00
+Use 'loc clipboard' to copy the loc info to clipboard.
+(1590011145)[Wed May 20 14:45:45 2020] Your location is 143.18, 6.99, -27.74.  Your orientation is 85.81, 0.00, 0.00
+Use 'loc clipboard' to copy the loc info to clipboard.
+(1590011148)[Wed May 20 14:45:48 2020] Your location is 143.31, 6.99, -44.13.  Your orientation is 357.64, 0.00, 0.00
+Use 'loc clipboard' to copy the loc info to clipboard.
+(1590011150)[Wed May 20 14:45:50 2020] Your location is 141.58, 6.99, -45.37.  Your orientation is 54.63, 0.00, 0.00
+Use 'loc clipboard' to copy the loc info to clipboard.
+(1590011154)[Wed May 20 14:45:54 2020] Your location is 145.80, 6.99, -39.39.  Your orientation is 215.23, 0.00, 0.00
+Use 'loc clipboard' to copy the loc info to clipboard.
+(1590011157)[Wed May 20 14:45:57 2020] Your location is 159.25, 6.99, -45.96.  Your orientation is 299.68, 0.00, 0.00
+Use 'loc clipboard' to copy the loc info to clipboard.
+(1590011161)[Wed May 20 14:46:01 2020] Your location is 142.37, 6.99, -37.53.  Your orientation is 122.71, 0.00, 0.00
+Use 'loc clipboard' to copy the loc info to clipboard.
+(1590011163)[Wed May 20 14:46:03 2020] Your location is 143.00, 6.99, -27.77.  Your orientation is 175.17, 0.00, 0.00
+Use 'loc clipboard' to copy the loc info to clipboard.
+(1590011166)[Wed May 20 14:46:06 2020] Your location is 150.35, 6.99, -25.70.  Your orientation is 231.12, 0.00, 0.00
+Use 'loc clipboard' to copy the loc info to clipboard.
+(1590011170)[Wed May 20 14:46:10 2020] Your location is 156.69, 6.99, -26.30.  Your orientation is 271.01, 0.00, 0.00
+Use 'loc clipboard' to copy the loc info to clipboard.
+(1590011172)[Wed May 20 14:46:12 2020] Your location is 158.31, 6.99, -30.32.  Your orientation is 334.47, 0.00, 0.00
+Use 'loc clipboard' to copy the loc info to clipboard.
+(1590011174)[Wed May 20 14:46:14 2020] Your location is 155.56, 6.99, -44.83.  Your orientation is 0.28, 0.00, 0.00
+Use 'loc clipboard' to copy the loc info to clipboard.
+(1590011180)[Wed May 20 14:46:20 2020] Your location is 146.14, 6.99, -27.59.  Your orientation is 175.31, 0.00, 0.00
+Use 'loc clipboard' to copy the loc info to clipboard.
+(1590011183)[Wed May 20 14:46:23 2020] Your location is 146.05, 6.99, -20.33.  Your orientation is 186.25, 0.00, 0.00
+Use 'loc clipboard' to copy the loc info to clipboard.
+(1590011186)[Wed May 20 14:46:26 2020] Your location is 158.60, 6.99, -21.79.  Your orientation is 268.63, 0.00, 0.00
+Use 'loc clipboard' to copy the loc info to clipboard.
+(1590011190)[Wed May 20 14:46:30 2020] Your location is 143.62, 6.99, -22.03.  Your orientation is 179.56, 0.00, 0.00
+Use 'loc clipboard' to copy the loc info to clipboard.
+(1590011192)[Wed May 20 14:46:32 2020] Your location is 142.34, 6.99, -4.72.  Your orientation is 170.46, 0.00, 0.00
+Use 'loc clipboard' to copy the loc info to clipboard.
+(1590011195)[Wed May 20 14:46:35 2020] Your location is 157.67, 6.99, -3.98.  Your orientation is 268.93, 0.00, 0.00
+Use 'loc clipboard' to copy the loc info to clipboard.
+(1590011198)[Wed May 20 14:46:38 2020] Your location is 151.67, 6.99, -4.40.  Your orientation is 86.37, 0.00, 0.00
+Use 'loc clipboard' to copy the loc info to clipboard.
+(1590011200)[Wed May 20 14:46:40 2020] Your location is 151.38, 6.99, -8.97.  Your orientation is 3.63, 0.00, 0.00
+Use 'loc clipboard' to copy the loc info to clipboard.
+(1590011204)[Wed May 20 14:46:44 2020] Your location is 154.92, 6.99, -13.62.  Your orientation is 326.40, 0.00, 0.00
+Use 'loc clipboard' to copy the loc info to clipboard.
+(1590011206)[Wed May 20 14:46:46 2020] Your location is 149.69, 6.99, -20.43.  Your orientation is 11.57, 0.00, 0.00
+Use 'loc clipboard' to copy the loc info to clipboard.
+(1590011211)[Wed May 20 14:46:51 2020] Your location is 140.79, 6.99, -17.94.  Your orientation is 179.26, 0.00, 0.00
+Use 'loc clipboard' to copy the loc info to clipboard.
+(1590011213)[Wed May 20 14:46:53 2020] Your location is 140.75, 6.99, -5.89.  Your orientation is 179.45, 0.00, 0.00
+Use 'loc clipboard' to copy the loc info to clipboard.
+(1590011219)[Wed May 20 14:46:59 2020] Your location is 154.04, 6.99, -4.81.  Your orientation is 179.87, 0.00, 0.00
+Use 'loc clipboard' to copy the loc info to clipboard.
+(1590011224)[Wed May 20 14:47:04 2020] Your location is 153.91, 6.99, 0.90.  Your orientation is 264.68, 0.00, 0.00
+Use 'loc clipboard' to copy the loc info to clipboard.
+(1590011225)[Wed May 20 14:47:05 2020] Your location is 158.25, 6.99, 1.24.  Your orientation is 266.13, 0.00, 0.00
+Use 'loc clipboard' to copy the loc info to clipboard.
+(1590011227)[Wed May 20 14:47:07 2020] Your location is 143.75, 6.99, 0.61.  Your orientation is 87.20, 0.00, 0.00
+Use 'loc clipboard' to copy the loc info to clipboard.
+(1590011232)[Wed May 20 14:47:12 2020] Your location is 140.97, 6.99, 16.44.  Your orientation is 177.51, 0.00, 0.00
+Use 'loc clipboard' to copy the loc info to clipboard.
+(1590011235)[Wed May 20 14:47:15 2020] Your location is 158.82, 6.99, 15.81.  Your orientation is 270.23, 0.00, 0.00
+Use 'loc clipboard' to copy the loc info to clipboard.
+(1590011238)[Wed May 20 14:47:18 2020] Your location is 153.34, 6.99, 16.07.  Your orientation is 358.67, 0.00, 0.00
+Use 'loc clipboard' to copy the loc info to clipboard.
+(1590011240)[Wed May 20 14:47:20 2020] Your location is 153.29, 6.99, 9.85.  Your orientation is 262.23, 0.00, 0.00
+Use 'loc clipboard' to copy the loc info to clipboard.
+(1590011242)[Wed May 20 14:47:22 2020] Your location is 156.91, 8.49, 10.25.  Your orientation is 266.25, 0.00, 0.00
+Use 'loc clipboard' to copy the loc info to clipboard.
+(1590011245)[Wed May 20 14:47:25 2020] Your location is 157.36, 8.49, 13.56.  Your orientation is 1.89, 0.00, 0.00
+Use 'loc clipboard' to copy the loc info to clipboard.
+(1590011247)[Wed May 20 14:47:27 2020] Your location is 157.36, 8.49, 4.94.  Your orientation is 354.48, 0.00, 0.00
+Use 'loc clipboard' to copy the loc info to clipboard.
+(1590011256)[Wed May 20 14:47:36 2020] Your location is 157.25, 8.49, 7.66.  Your orientation is 88.93, 0.00, 0.00
+Use 'loc clipboard' to copy the loc info to clipboard.
+(1590011261)[Wed May 20 14:47:41 2020] Your location is 152.60, 6.99, 7.71.  Your orientation is 355.22, 0.00, 0.00
+Use 'loc clipboard' to copy the loc info to clipboard.
+(1590011266)[Wed May 20 14:47:46 2020] Your location is 152.60, 6.99, 4.76.  Your orientation is 91.00, 0.00, 0.00
+Use 'loc clipboard' to copy the loc info to clipboard.
+(1590011274)[Wed May 20 14:47:54 2020] Your location is 136.97, 6.99, 4.96.  Your orientation is 269.51, 0.00, 0.00
+Use 'loc clipboard' to copy the loc info to clipboard.
+(1590011277)[Wed May 20 14:47:57 2020] Your location is 137.04, 6.99, -0.25.  Your orientation is 359.12, 0.00, 0.00
+Use 'loc clipboard' to copy the loc info to clipboard.
+(1590011280)[Wed May 20 14:48:00 2020] Your location is 136.89, 6.99, 16.92.  Your orientation is 181.71, 0.00, 0.00
+Use 'loc clipboard' to copy the loc info to clipboard.
+(1590011284)[Wed May 20 14:48:04 2020] Your location is 132.75, 6.99, 2.06.  Your orientation is 11.52, 0.00, 0.00
+Use 'loc clipboard' to copy the loc info to clipboard.
+(1590011287)[Wed May 20 14:48:07 2020] Your location is 119.66, 6.99, 1.80.  Your orientation is 86.83, 0.00, 0.00
+Use 'loc clipboard' to copy the loc info to clipboard.
+(1590011292)[Wed May 20 14:48:12 2020] Your location is 119.03, 6.99, 7.49.  Your orientation is 180.73, 0.00, 0.00
+Use 'loc clipboard' to copy the loc info to clipboard.
+(1590011294)[Wed May 20 14:48:14 2020] Your location is 117.12, 6.99, 17.23.  Your orientation is 158.43, 0.00, 0.00
+Use 'loc clipboard' to copy the loc info to clipboard.
+(1590011296)[Wed May 20 14:48:16 2020] Your location is 118.51, 6.99, 13.64.  Your orientation is 165.54, 0.00, 0.00
+Use 'loc clipboard' to copy the loc info to clipboard.
+(1590011297)[Wed May 20 14:48:17 2020] Your location is 120.86, 6.99, 17.51.  Your orientation is 224.81, 0.00, 0.00
+Use 'loc clipboard' to copy the loc info to clipboard.
+(1590011299)[Wed May 20 14:48:19 2020] Your location is 121.77, 6.99, 11.22.  Your orientation is 351.83, 0.00, 0.00
+Use 'loc clipboard' to copy the loc info to clipboard.
+(1590011301)[Wed May 20 14:48:21 2020] Your location is 127.09, 6.99, 11.49.  Your orientation is 170.17, 0.00, 0.00
+Use 'loc clipboard' to copy the loc info to clipboard.
+(1590011302)[Wed May 20 14:48:22 2020] Your location is 126.49, 8.49, 16.34.  Your orientation is 178.31, 0.00, 0.00
+Use 'loc clipboard' to copy the loc info to clipboard.
+(1590011304)[Wed May 20 14:48:24 2020] Your location is 123.08, 8.49, 16.24.  Your orientation is 178.31, 0.00, 0.00
+Use 'loc clipboard' to copy the loc info to clipboard.
+(1590011307)[Wed May 20 14:48:27 2020] Your location is 132.44, 8.49, 16.39.  Your orientation is 270.25, 0.00, 0.00
+Use 'loc clipboard' to copy the loc info to clipboard.
+(1590011312)[Wed May 20 14:48:32 2020] Your location is 129.22, 8.49, 16.35.  Your orientation is 2.00, 0.00, 0.00
+Use 'loc clipboard' to copy the loc info to clipboard.
+(1590011315)[Wed May 20 14:48:35 2020] Your location is 129.29, 6.99, 12.31.  Your orientation is 356.47, 0.00, 0.00
+Use 'loc clipboard' to copy the loc info to clipboard.
+(1590011317)[Wed May 20 14:48:37 2020] Your location is 134.31, 6.99, 1.65.  Your orientation is 335.01, 0.00, 0.00
+Use 'loc clipboard' to copy the loc info to clipboard.
+(1590011319)[Wed May 20 14:48:39 2020] Your location is 120.62, 6.99, 2.08.  Your orientation is 91.78, 0.00, 0.00
+Use 'loc clipboard' to copy the loc info to clipboard.
+(1590011320)[Wed May 20 14:48:40 2020] Your location is 120.49, 6.99, 5.40.  Your orientation is 87.66, 0.00, 0.00
+Use 'loc clipboard' to copy the loc info to clipboard.
+(1590011321)[Wed May 20 14:48:41 2020] Your location is 112.06, 6.87, 5.30.  Your orientation is 89.33, 0.00, 0.00
+Use 'loc clipboard' to copy the loc info to clipboard.
+(1590011324)[Wed May 20 14:48:44 2020] Your location is 106.12, 6.91, 10.73.  Your orientation is 134.87, 0.00, 0.00
+Use 'loc clipboard' to copy the loc info to clipboard.
+(1590011326)[Wed May 20 14:48:46 2020] Your location is 100.19, 7.35, 16.55.  Your orientation is 126.28, 0.00, 0.00
+Use 'loc clipboard' to copy the loc info to clipboard.
+(1590011329)[Wed May 20 14:48:49 2020] Your location is 90.21, 6.89, 18.56.  Your orientation is 100.19, 0.00, 0.00
+Use 'loc clipboard' to copy the loc info to clipboard.
+(1590011330)[Wed May 20 14:48:50 2020] Your location is 87.31, 6.88, 18.28.  Your orientation is 175.01, 0.00, 0.00
+Use 'loc clipboard' to copy the loc info to clipboard.
+(1590011333)[Wed May 20 14:48:53 2020] Your location is 68.98, 7.37, 15.74.  Your orientation is 55.60, 0.00, 0.00
+Use 'loc clipboard' to copy the loc info to clipboard.
+(1590011335)[Wed May 20 14:48:55 2020] Your location is 62.49, 6.88, 10.83.  Your orientation is 358.32, 0.00, 0.00
+Use 'loc clipboard' to copy the loc info to clipboard.
+(1590011337)[Wed May 20 14:48:57 2020] Your location is 63.17, 6.87, -17.19.  Your orientation is 6.74, 0.00, 0.00
+Use 'loc clipboard' to copy the loc info to clipboard.
+(1590011339)[Wed May 20 14:48:59 2020] Your location is 60.39, 6.88, -19.28.  Your orientation is 59.63, 0.00, 0.00
+Use 'loc clipboard' to copy the loc info to clipboard.
+(1590011340)[Wed May 20 14:49:00 2020] Your location is 46.74, 6.90, -21.63.  Your orientation is 37.78, 0.00, 0.00
+Use 'loc clipboard' to copy the loc info to clipboard.
+(1590011344)[Wed May 20 14:49:04 2020] Your location is 33.41, 6.75, -33.13.  Your orientation is 22.02, 0.00, 0.00
+Use 'loc clipboard' to copy the loc info to clipboard.
+(1590011345)[Wed May 20 14:49:05 2020] Your location is 31.80, 6.84, -43.76.  Your orientation is 8.49, 0.00, 0.00
+Use 'loc clipboard' to copy the loc info to clipboard.
+(1590011347)[Wed May 20 14:49:07 2020] Your location is 17.41, 6.59, -44.20.  Your orientation is 89.08, 0.00, 0.00
+Use 'loc clipboard' to copy the loc info to clipboard.
+(1590011350)[Wed May 20 14:49:10 2020] Your location is 2.59, 7.43, -43.84.  Your orientation is 92.90, 0.00, 0.00
+Use 'loc clipboard' to copy the loc info to clipboard.
+(1590011355)[Wed May 20 14:49:15 2020] Your location is -15.57, 6.99, -25.24.  Your orientation is 131.60, 0.00, 0.00
+Use 'loc clipboard' to copy the loc info to clipboard.
+(1590011361)[Wed May 20 14:49:21 2020] Your location is -31.47, 6.86, -9.73.  Your orientation is 131.41, 0.00, 0.00
+Use 'loc clipboard' to copy the loc info to clipboard.

+ 186 - 0
EQ2/devtools/Movement Loop Generator/Movement Loop Generator 2.0/bin/Debug/deathly_scarab5.lua

@@ -0,0 +1,186 @@
+--[[
+	Script Name		:	deathly_scarab5.lua
+	Script Purpose	:	Waypoint Path for deathly_scarab5.lua
+	Script Author	:	Auto Generated
+	Script Date		:	05/20/2020 09:49:21 PM
+	Script Notes	:	Locations collected from Live
+--]]
+
+function spawn(NPC)
+	waypoints(NPC)
+end
+
+function hailed(NPC, Spawn)
+	FaceTarget(NPC, Spawn)
+end
+
+function respawn(NPC)
+end
+
+function waypoints(NPC)
+	MovementLoopAddLocation(NPC, 141.35, 6.85, -71.46, 2, 0)
+	MovementLoopAddLocation(NPC, 138.75, 6.96, -69.87, 2, 0)
+	MovementLoopAddLocation(NPC, 140.64, 6.89, -78.15, 2, 0)
+	MovementLoopAddLocation(NPC, 138.87, 6.96, -70.29, 2, 0)
+	MovementLoopAddLocation(NPC, 151.91, 6.9, -71.55, 2, 0)
+	MovementLoopAddLocation(NPC, 155.97, 6.9, -61.92, 2, 0)
+	MovementLoopAddLocation(NPC, 150.44, 7.46, -56.35, 2, 0)
+	MovementLoopAddLocation(NPC, 148.73, 6.99, -43.28, 2, 0)
+	MovementLoopAddLocation(NPC, 155.72, 6.99, -43.3, 2, 0)
+	MovementLoopAddLocation(NPC, 155.76, 6.99, -27.76, 2, 0)
+	MovementLoopAddLocation(NPC, 143.18, 6.99, -27.74, 2, 0)
+	MovementLoopAddLocation(NPC, 143.31, 6.99, -44.13, 2, 0)
+	MovementLoopAddLocation(NPC, 141.58, 6.99, -45.37, 2, 0)
+	MovementLoopAddLocation(NPC, 145.8, 6.99, -39.39, 2, 0)
+	MovementLoopAddLocation(NPC, 159.25, 6.99, -45.96, 2, 0)
+	MovementLoopAddLocation(NPC, 142.37, 6.99, -37.53, 2, 0)
+	MovementLoopAddLocation(NPC, 143, 6.99, -27.77, 2, 0)
+	MovementLoopAddLocation(NPC, 150.35, 6.99, -25.7, 2, 0)
+	MovementLoopAddLocation(NPC, 156.69, 6.99, -26.3, 2, 0)
+	MovementLoopAddLocation(NPC, 158.31, 6.99, -30.32, 2, 0)
+	MovementLoopAddLocation(NPC, 155.56, 6.99, -44.83, 2, 0)
+	MovementLoopAddLocation(NPC, 146.14, 6.99, -27.59, 2, 0)
+	MovementLoopAddLocation(NPC, 146.05, 6.99, -20.33, 2, 0)
+	MovementLoopAddLocation(NPC, 158.6, 6.99, -21.79, 2, 0)
+	MovementLoopAddLocation(NPC, 143.62, 6.99, -22.03, 2, 0)
+	MovementLoopAddLocation(NPC, 142.34, 6.99, -4.72, 2, 0)
+	MovementLoopAddLocation(NPC, 157.67, 6.99, -3.98, 2, 0)
+	MovementLoopAddLocation(NPC, 151.67, 6.99, -4.4, 2, 0)
+	MovementLoopAddLocation(NPC, 151.38, 6.99, -8.97, 2, 0)
+	MovementLoopAddLocation(NPC, 154.92, 6.99, -13.62, 2, 0)
+	MovementLoopAddLocation(NPC, 149.69, 6.99, -20.43, 2, 0)
+	MovementLoopAddLocation(NPC, 140.79, 6.99, -17.94, 2, 0)
+	MovementLoopAddLocation(NPC, 140.75, 6.99, -5.89, 2, 0)
+	MovementLoopAddLocation(NPC, 154.04, 6.99, -4.81, 2, 0)
+	MovementLoopAddLocation(NPC, 153.91, 6.99, 0.9, 2, 0)
+	MovementLoopAddLocation(NPC, 158.25, 6.99, 1.24, 2, 0)
+	MovementLoopAddLocation(NPC, 143.75, 6.99, 0.61, 2, 0)
+	MovementLoopAddLocation(NPC, 140.97, 6.99, 16.44, 2, 0)
+	MovementLoopAddLocation(NPC, 158.82, 6.99, 15.81, 2, 0)
+	MovementLoopAddLocation(NPC, 153.34, 6.99, 16.07, 2, 0)
+	MovementLoopAddLocation(NPC, 153.29, 6.99, 9.85, 2, 0)
+	MovementLoopAddLocation(NPC, 156.91, 8.49, 10.25, 2, 0)
+	MovementLoopAddLocation(NPC, 157.36, 8.49, 13.56, 2, 0)
+	MovementLoopAddLocation(NPC, 157.36, 8.49, 4.94, 2, 0)
+	MovementLoopAddLocation(NPC, 157.25, 8.49, 7.66, 2, 0)
+	MovementLoopAddLocation(NPC, 152.6, 6.99, 7.71, 2, 0)
+	MovementLoopAddLocation(NPC, 152.6, 6.99, 4.76, 2, 0)
+	MovementLoopAddLocation(NPC, 136.97, 6.99, 4.96, 2, 0)
+	MovementLoopAddLocation(NPC, 137.04, 6.99, -0.25, 2, 0)
+	MovementLoopAddLocation(NPC, 136.89, 6.99, 16.92, 2, 0)
+	MovementLoopAddLocation(NPC, 132.75, 6.99, 2.06, 2, 0)
+	MovementLoopAddLocation(NPC, 119.66, 6.99, 1.8, 2, 0)
+	MovementLoopAddLocation(NPC, 119.03, 6.99, 7.49, 2, 0)
+	MovementLoopAddLocation(NPC, 117.12, 6.99, 17.23, 2, 0)
+	MovementLoopAddLocation(NPC, 118.51, 6.99, 13.64, 2, 0)
+	MovementLoopAddLocation(NPC, 120.86, 6.99, 17.51, 2, 0)
+	MovementLoopAddLocation(NPC, 121.77, 6.99, 11.22, 2, 0)
+	MovementLoopAddLocation(NPC, 127.09, 6.99, 11.49, 2, 0)
+	MovementLoopAddLocation(NPC, 126.49, 8.49, 16.34, 2, 0)
+	MovementLoopAddLocation(NPC, 123.08, 8.49, 16.24, 2, 0)
+	MovementLoopAddLocation(NPC, 132.44, 8.49, 16.39, 2, 0)
+	MovementLoopAddLocation(NPC, 129.22, 8.49, 16.35, 2, 0)
+	MovementLoopAddLocation(NPC, 129.29, 6.99, 12.31, 2, 0)
+	MovementLoopAddLocation(NPC, 134.31, 6.99, 1.65, 2, 0)
+	MovementLoopAddLocation(NPC, 120.62, 6.99, 2.08, 2, 0)
+	MovementLoopAddLocation(NPC, 120.49, 6.99, 5.4, 2, 0)
+	MovementLoopAddLocation(NPC, 112.06, 6.87, 5.3, 2, 0)
+	MovementLoopAddLocation(NPC, 106.12, 6.91, 10.73, 2, 0)
+	MovementLoopAddLocation(NPC, 100.19, 7.35, 16.55, 2, 0)
+	MovementLoopAddLocation(NPC, 90.21, 6.89, 18.56, 2, 0)
+	MovementLoopAddLocation(NPC, 87.31, 6.88, 18.28, 2, 0)
+	MovementLoopAddLocation(NPC, 68.98, 7.37, 15.74, 2, 0)
+	MovementLoopAddLocation(NPC, 62.49, 6.88, 10.83, 2, 0)
+	MovementLoopAddLocation(NPC, 63.17, 6.87, -17.19, 2, 0)
+	MovementLoopAddLocation(NPC, 60.39, 6.88, -19.28, 2, 0)
+	MovementLoopAddLocation(NPC, 46.74, 6.9, -21.63, 2, 0)
+	MovementLoopAddLocation(NPC, 33.41, 6.75, -33.13, 2, 0)
+	MovementLoopAddLocation(NPC, 31.8, 6.84, -43.76, 2, 0)
+	MovementLoopAddLocation(NPC, 17.41, 6.59, -44.2, 2, 0)
+	MovementLoopAddLocation(NPC, 2.59, 7.43, -43.84, 2, 0)
+	MovementLoopAddLocation(NPC, -15.57, 6.99, -25.24, 2, 0)
+	MovementLoopAddLocation(NPC, -31.47, 6.86, -9.73, 2, 0)
+	MovementLoopAddLocation(NPC, -15.57, 6.99, -25.24, 2, 0)
+	MovementLoopAddLocation(NPC, 2.59, 7.43, -43.84, 2, 0)
+	MovementLoopAddLocation(NPC, 17.41, 6.59, -44.2, 2, 0)
+	MovementLoopAddLocation(NPC, 31.8, 6.84, -43.76, 2, 0)
+	MovementLoopAddLocation(NPC, 33.41, 6.75, -33.13, 2, 0)
+	MovementLoopAddLocation(NPC, 46.74, 6.9, -21.63, 2, 0)
+	MovementLoopAddLocation(NPC, 60.39, 6.88, -19.28, 2, 0)
+	MovementLoopAddLocation(NPC, 63.17, 6.87, -17.19, 2, 0)
+	MovementLoopAddLocation(NPC, 62.49, 6.88, 10.83, 2, 0)
+	MovementLoopAddLocation(NPC, 68.98, 7.37, 15.74, 2, 0)
+	MovementLoopAddLocation(NPC, 87.31, 6.88, 18.28, 2, 0)
+	MovementLoopAddLocation(NPC, 90.21, 6.89, 18.56, 2, 0)
+	MovementLoopAddLocation(NPC, 100.19, 7.35, 16.55, 2, 0)
+	MovementLoopAddLocation(NPC, 106.12, 6.91, 10.73, 2, 0)
+	MovementLoopAddLocation(NPC, 112.06, 6.87, 5.3, 2, 0)
+	MovementLoopAddLocation(NPC, 120.49, 6.99, 5.4, 2, 0)
+	MovementLoopAddLocation(NPC, 120.62, 6.99, 2.08, 2, 0)
+	MovementLoopAddLocation(NPC, 134.31, 6.99, 1.65, 2, 0)
+	MovementLoopAddLocation(NPC, 129.29, 6.99, 12.31, 2, 0)
+	MovementLoopAddLocation(NPC, 129.22, 8.49, 16.35, 2, 0)
+	MovementLoopAddLocation(NPC, 132.44, 8.49, 16.39, 2, 0)
+	MovementLoopAddLocation(NPC, 123.08, 8.49, 16.24, 2, 0)
+	MovementLoopAddLocation(NPC, 126.49, 8.49, 16.34, 2, 0)
+	MovementLoopAddLocation(NPC, 127.09, 6.99, 11.49, 2, 0)
+	MovementLoopAddLocation(NPC, 121.77, 6.99, 11.22, 2, 0)
+	MovementLoopAddLocation(NPC, 120.86, 6.99, 17.51, 2, 0)
+	MovementLoopAddLocation(NPC, 118.51, 6.99, 13.64, 2, 0)
+	MovementLoopAddLocation(NPC, 117.12, 6.99, 17.23, 2, 0)
+	MovementLoopAddLocation(NPC, 119.03, 6.99, 7.49, 2, 0)
+	MovementLoopAddLocation(NPC, 119.66, 6.99, 1.8, 2, 0)
+	MovementLoopAddLocation(NPC, 132.75, 6.99, 2.06, 2, 0)
+	MovementLoopAddLocation(NPC, 136.89, 6.99, 16.92, 2, 0)
+	MovementLoopAddLocation(NPC, 137.04, 6.99, -0.25, 2, 0)
+	MovementLoopAddLocation(NPC, 136.97, 6.99, 4.96, 2, 0)
+	MovementLoopAddLocation(NPC, 152.6, 6.99, 4.76, 2, 0)
+	MovementLoopAddLocation(NPC, 152.6, 6.99, 7.71, 2, 0)
+	MovementLoopAddLocation(NPC, 157.25, 8.49, 7.66, 2, 0)
+	MovementLoopAddLocation(NPC, 157.36, 8.49, 4.94, 2, 0)
+	MovementLoopAddLocation(NPC, 157.36, 8.49, 13.56, 2, 0)
+	MovementLoopAddLocation(NPC, 156.91, 8.49, 10.25, 2, 0)
+	MovementLoopAddLocation(NPC, 153.29, 6.99, 9.85, 2, 0)
+	MovementLoopAddLocation(NPC, 153.34, 6.99, 16.07, 2, 0)
+	MovementLoopAddLocation(NPC, 158.82, 6.99, 15.81, 2, 0)
+	MovementLoopAddLocation(NPC, 140.97, 6.99, 16.44, 2, 0)
+	MovementLoopAddLocation(NPC, 143.75, 6.99, 0.61, 2, 0)
+	MovementLoopAddLocation(NPC, 158.25, 6.99, 1.24, 2, 0)
+	MovementLoopAddLocation(NPC, 153.91, 6.99, 0.9, 2, 0)
+	MovementLoopAddLocation(NPC, 154.04, 6.99, -4.81, 2, 0)
+	MovementLoopAddLocation(NPC, 140.75, 6.99, -5.89, 2, 0)
+	MovementLoopAddLocation(NPC, 140.79, 6.99, -17.94, 2, 0)
+	MovementLoopAddLocation(NPC, 149.69, 6.99, -20.43, 2, 0)
+	MovementLoopAddLocation(NPC, 154.92, 6.99, -13.62, 2, 0)
+	MovementLoopAddLocation(NPC, 151.38, 6.99, -8.97, 2, 0)
+	MovementLoopAddLocation(NPC, 151.67, 6.99, -4.4, 2, 0)
+	MovementLoopAddLocation(NPC, 157.67, 6.99, -3.98, 2, 0)
+	MovementLoopAddLocation(NPC, 142.34, 6.99, -4.72, 2, 0)
+	MovementLoopAddLocation(NPC, 143.62, 6.99, -22.03, 2, 0)
+	MovementLoopAddLocation(NPC, 158.6, 6.99, -21.79, 2, 0)
+	MovementLoopAddLocation(NPC, 146.05, 6.99, -20.33, 2, 0)
+	MovementLoopAddLocation(NPC, 146.14, 6.99, -27.59, 2, 0)
+	MovementLoopAddLocation(NPC, 155.56, 6.99, -44.83, 2, 0)
+	MovementLoopAddLocation(NPC, 158.31, 6.99, -30.32, 2, 0)
+	MovementLoopAddLocation(NPC, 156.69, 6.99, -26.3, 2, 0)
+	MovementLoopAddLocation(NPC, 150.35, 6.99, -25.7, 2, 0)
+	MovementLoopAddLocation(NPC, 143, 6.99, -27.77, 2, 0)
+	MovementLoopAddLocation(NPC, 142.37, 6.99, -37.53, 2, 0)
+	MovementLoopAddLocation(NPC, 159.25, 6.99, -45.96, 2, 0)
+	MovementLoopAddLocation(NPC, 145.8, 6.99, -39.39, 2, 0)
+	MovementLoopAddLocation(NPC, 141.58, 6.99, -45.37, 2, 0)
+	MovementLoopAddLocation(NPC, 143.31, 6.99, -44.13, 2, 0)
+	MovementLoopAddLocation(NPC, 143.18, 6.99, -27.74, 2, 0)
+	MovementLoopAddLocation(NPC, 155.76, 6.99, -27.76, 2, 0)
+	MovementLoopAddLocation(NPC, 155.72, 6.99, -43.3, 2, 0)
+	MovementLoopAddLocation(NPC, 148.73, 6.99, -43.28, 2, 0)
+	MovementLoopAddLocation(NPC, 150.44, 7.46, -56.35, 2, 0)
+	MovementLoopAddLocation(NPC, 155.97, 6.9, -61.92, 2, 0)
+	MovementLoopAddLocation(NPC, 151.91, 6.9, -71.55, 2, 0)
+	MovementLoopAddLocation(NPC, 138.87, 6.96, -70.29, 2, 0)
+	MovementLoopAddLocation(NPC, 140.64, 6.89, -78.15, 2, 0)
+	MovementLoopAddLocation(NPC, 138.75, 6.96, -69.87, 2, 0)
+	MovementLoopAddLocation(NPC, 141.35, 6.85, -71.46, 2, 0)
+end
+
+

+ 56 - 0
EQ2/devtools/Movement Loop Generator/Movement Loop Generator 2.0/bin/Debug/ire_minion10.lua

@@ -0,0 +1,56 @@
+--[[
+	Script Name		:	ire_minion10.lua
+	Script Purpose	:	Waypoint Path for ire_minion10.lua
+	Script Author	:	Auto Generated
+	Script Date		:	05/20/2020 09:49:29 PM
+	Script Notes	:	Locations collected from Live
+--]]
+
+function spawn(NPC)
+	waypoints(NPC)
+end
+
+function hailed(NPC, Spawn)
+	FaceTarget(NPC, Spawn)
+end
+
+function respawn(NPC)
+end
+
+function waypoints(NPC)
+	MovementLoopAddLocation(NPC, 165.44, 6.89, -51.63, 2, 0)
+	MovementLoopAddLocation(NPC, 163.87, 6.89, -53.39, 2, 0)
+	MovementLoopAddLocation(NPC, 169.71, 7.09, -55.82, 2, 0)
+	MovementLoopAddLocation(NPC, 167.8, 7.01, -57.66, 2, 0)
+	MovementLoopAddLocation(NPC, 168.4, 7.24, -54.97, 2, 0)
+	MovementLoopAddLocation(NPC, 166.34, 7.24, -52.81, 2, 0)
+	MovementLoopAddLocation(NPC, 166.05, 6.82, -56.79, 2, 0)
+	MovementLoopAddLocation(NPC, 168, 7.89, -53.02, 2, 0)
+	MovementLoopAddLocation(NPC, 164.47, 6.83, -55.21, 2, 0)
+	MovementLoopAddLocation(NPC, 167.37, 6.8, -55.15, 2, 0)
+	MovementLoopAddLocation(NPC, 165.28, 6.79, -55.51, 2, 0)
+	MovementLoopAddLocation(NPC, 164.06, 6.89, -52.59, 2, 0)
+	MovementLoopAddLocation(NPC, 168.66, 6.97, -56.92, 2, 0)
+	MovementLoopAddLocation(NPC, 168.56, 7.24, -54.62, 2, 0)
+	MovementLoopAddLocation(NPC, 166.27, 7.24, -52.51, 2, 0)
+	MovementLoopAddLocation(NPC, 168.45, 7.24, -54.6, 2, 0)
+	MovementLoopAddLocation(NPC, 166.98, 6.8, -54.96, 2, 0)
+	MovementLoopAddLocation(NPC, 168.45, 7.24, -54.6, 2, 0)
+	MovementLoopAddLocation(NPC, 166.27, 7.24, -52.51, 2, 0)
+	MovementLoopAddLocation(NPC, 168.56, 7.24, -54.62, 2, 0)
+	MovementLoopAddLocation(NPC, 168.66, 6.97, -56.92, 2, 0)
+	MovementLoopAddLocation(NPC, 164.06, 6.89, -52.59, 2, 0)
+	MovementLoopAddLocation(NPC, 165.28, 6.79, -55.51, 2, 0)
+	MovementLoopAddLocation(NPC, 167.37, 6.8, -55.15, 2, 0)
+	MovementLoopAddLocation(NPC, 164.47, 6.83, -55.21, 2, 0)
+	MovementLoopAddLocation(NPC, 168, 7.89, -53.02, 2, 0)
+	MovementLoopAddLocation(NPC, 166.05, 6.82, -56.79, 2, 0)
+	MovementLoopAddLocation(NPC, 166.34, 7.24, -52.81, 2, 0)
+	MovementLoopAddLocation(NPC, 168.4, 7.24, -54.97, 2, 0)
+	MovementLoopAddLocation(NPC, 167.8, 7.01, -57.66, 2, 0)
+	MovementLoopAddLocation(NPC, 169.71, 7.09, -55.82, 2, 0)
+	MovementLoopAddLocation(NPC, 163.87, 6.89, -53.39, 2, 0)
+	MovementLoopAddLocation(NPC, 165.44, 6.89, -51.63, 2, 0)
+end
+
+

+ 36 - 0
EQ2/devtools/Movement Loop Generator/Movement Loop Generator 2.0/bin/Debug/ire_minion10.txt

@@ -0,0 +1,36 @@
+(1590012027)[Wed May 20 15:00:27 2020] Logging to 'logs/Zeklabs/ire_minion10.txt' is now *ON*
+(1590012033)[Wed May 20 15:00:33 2020] Unknown command: 'loc_start ire_minion10'
+(1590012038)[Wed May 20 15:00:38 2020] Your location is 165.44, 6.89, -51.63.  Your orientation is 171.69, 0.00, 0.00
+Use 'loc clipboard' to copy the loc info to clipboard.
+(1590012040)[Wed May 20 15:00:40 2020] Your location is 163.87, 6.89, -53.39.  Your orientation is 43.60, 0.00, 0.00
+Use 'loc clipboard' to copy the loc info to clipboard.
+(1590012043)[Wed May 20 15:00:43 2020] Your location is 169.71, 7.09, -55.82.  Your orientation is 271.31, 0.00, 0.00
+Use 'loc clipboard' to copy the loc info to clipboard.
+(1590012045)[Wed May 20 15:00:45 2020] Your location is 167.80, 7.01, -57.66.  Your orientation is 43.32, 0.00, 0.00
+Use 'loc clipboard' to copy the loc info to clipboard.
+(1590012048)[Wed May 20 15:00:48 2020] Your location is 168.40, 7.24, -54.97.  Your orientation is 173.03, 0.00, 0.00
+Use 'loc clipboard' to copy the loc info to clipboard.
+(1590012052)[Wed May 20 15:00:52 2020] Your location is 166.34, 7.24, -52.81.  Your orientation is 135.91, 0.00, 0.00
+Use 'loc clipboard' to copy the loc info to clipboard.
+(1590012055)[Wed May 20 15:00:55 2020] Your location is 166.05, 6.82, -56.79.  Your orientation is 42.54, 0.00, 0.00
+Use 'loc clipboard' to copy the loc info to clipboard.
+(1590012060)[Wed May 20 15:01:00 2020] Your location is 168.00, 7.89, -53.02.  Your orientation is 222.95, 0.00, 0.00
+Use 'loc clipboard' to copy the loc info to clipboard.
+(1590012064)[Wed May 20 15:01:04 2020] Your location is 164.47, 6.83, -55.21.  Your orientation is 50.60, 0.00, 0.00
+Use 'loc clipboard' to copy the loc info to clipboard.
+(1590012070)[Wed May 20 15:01:10 2020] Your location is 167.37, 6.80, -55.15.  Your orientation is 141.74, 0.00, 0.00
+Use 'loc clipboard' to copy the loc info to clipboard.
+(1590012074)[Wed May 20 15:01:14 2020] Your location is 165.28, 6.79, -55.51.  Your orientation is 95.72, 0.00, 0.00
+Use 'loc clipboard' to copy the loc info to clipboard.
+(1590012075)[Wed May 20 15:01:15 2020] Your location is 164.06, 6.89, -52.59.  Your orientation is 151.33, 0.00, 0.00
+Use 'loc clipboard' to copy the loc info to clipboard.
+(1590012077)[Wed May 20 15:01:17 2020] Your location is 168.66, 6.97, -56.92.  Your orientation is 313.31, 0.00, 0.00
+Use 'loc clipboard' to copy the loc info to clipboard.
+(1590012079)[Wed May 20 15:01:19 2020] Your location is 168.56, 7.24, -54.62.  Your orientation is 138.65, 0.00, 0.00
+Use 'loc clipboard' to copy the loc info to clipboard.
+(1590012081)[Wed May 20 15:01:21 2020] Your location is 166.27, 7.24, -52.51.  Your orientation is 297.34, 0.00, 0.00
+Use 'loc clipboard' to copy the loc info to clipboard.
+(1590012083)[Wed May 20 15:01:23 2020] Your location is 168.45, 7.24, -54.60.  Your orientation is 311.06, 0.00, 0.00
+Use 'loc clipboard' to copy the loc info to clipboard.
+(1590012085)[Wed May 20 15:01:25 2020] Your location is 166.98, 6.80, -54.96.  Your orientation is 42.73, 0.00, 0.00
+Use 'loc clipboard' to copy the loc info to clipboard.

BIN
EQ2/devtools/Movement Loop Generator/Movement Loop Generator 2.0/bin/Release/Movement Loop Generator 2.0.exe


+ 18 - 0
EQ2/devtools/Movement Loop Generator/Movement Loop Generator 2.0/bin/Release/Movement Loop Generator 2.0.exe.config

@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<configuration>
+    <configSections>
+        <sectionGroup name="userSettings" type="System.Configuration.UserSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >
+            <section name="Movement_Loop_Generator_2._0.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false" />
+        </sectionGroup>
+    </configSections>
+    <startup> 
+        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
+    </startup>
+    <userSettings>
+        <Movement_Loop_Generator_2._0.Properties.Settings>
+            <setting name="Author" serializeAs="String">
+                <value>Auto Generated</value>
+            </setting>
+        </Movement_Loop_Generator_2._0.Properties.Settings>
+    </userSettings>
+</configuration>

BIN
EQ2/devtools/Movement Loop Generator/Movement Loop Generator 2.0/bin/Release/Movement Loop Generator 2.0.pdb


+ 38 - 0
EQ2/devtools/Movement Loop Generator/Movement Loop Generator 2.0/obj/Debug/Movement Loop Generator 2.0.csproj.FileListAbsolute.txt

@@ -0,0 +1,38 @@
+E:\Visual Studios Projects\Movement Loop Generator 2.0\Movement Loop Generator 2.0\bin\Debug\Movement Loop Generator 2.0.exe.config
+E:\Visual Studios Projects\Movement Loop Generator 2.0\Movement Loop Generator 2.0\bin\Debug\Movement Loop Generator 2.0.exe
+E:\Visual Studios Projects\Movement Loop Generator 2.0\Movement Loop Generator 2.0\bin\Debug\Movement Loop Generator 2.0.pdb
+E:\Visual Studios Projects\Movement Loop Generator 2.0\Movement Loop Generator 2.0\obj\Debug\Movement Loop Generator 2.0.csprojResolveAssemblyReference.cache
+E:\Visual Studios Projects\Movement Loop Generator 2.0\Movement Loop Generator 2.0\obj\Debug\Movement_Loop_Generator_2._0.Form1.resources
+E:\Visual Studios Projects\Movement Loop Generator 2.0\Movement Loop Generator 2.0\obj\Debug\Movement_Loop_Generator_2._0.Properties.Resources.resources
+E:\Visual Studios Projects\Movement Loop Generator 2.0\Movement Loop Generator 2.0\obj\Debug\Movement Loop Generator 2.0.csproj.GenerateResource.Cache
+E:\Visual Studios Projects\Movement Loop Generator 2.0\Movement Loop Generator 2.0\obj\Debug\Movement Loop Generator 2.0.exe
+E:\Visual Studios Projects\Movement Loop Generator 2.0\Movement Loop Generator 2.0\obj\Debug\Movement Loop Generator 2.0.pdb
+E:\Visual Studios Projects\Movement Loop Generator 2.0\Movement Loop Generator 2.0\obj\Debug\Movement_Loop_Generator_2._0.ParseDetalis.resources
+E:\EQ2\Source\Tools\trunk\DBEditors\cynnar\Movement Loop Generator 2.0\Movement Loop Generator 2.0\bin\Debug\Movement Loop Generator 2.0.exe.config
+E:\EQ2\Source\Tools\trunk\DBEditors\cynnar\Movement Loop Generator 2.0\Movement Loop Generator 2.0\bin\Debug\Movement Loop Generator 2.0.exe
+E:\EQ2\Source\Tools\trunk\DBEditors\cynnar\Movement Loop Generator 2.0\Movement Loop Generator 2.0\bin\Debug\Movement Loop Generator 2.0.pdb
+E:\EQ2\Source\Tools\trunk\DBEditors\cynnar\Movement Loop Generator 2.0\Movement Loop Generator 2.0\obj\Debug\Movement_Loop_Generator_2._0.Form1.resources
+E:\EQ2\Source\Tools\trunk\DBEditors\cynnar\Movement Loop Generator 2.0\Movement Loop Generator 2.0\obj\Debug\Movement_Loop_Generator_2._0.Properties.Resources.resources
+E:\EQ2\Source\Tools\trunk\DBEditors\cynnar\Movement Loop Generator 2.0\Movement Loop Generator 2.0\obj\Debug\Movement Loop Generator 2.0.csproj.GenerateResource.cache
+E:\EQ2\Source\Tools\trunk\DBEditors\cynnar\Movement Loop Generator 2.0\Movement Loop Generator 2.0\obj\Debug\Movement Loop Generator 2.0.csproj.CoreCompileInputs.cache
+E:\EQ2\Source\Tools\trunk\DBEditors\cynnar\Movement Loop Generator 2.0\Movement Loop Generator 2.0\obj\Debug\Movement Loop Generator 2.0.exe
+E:\EQ2\Source\Tools\trunk\DBEditors\cynnar\Movement Loop Generator 2.0\Movement Loop Generator 2.0\obj\Debug\Movement Loop Generator 2.0.pdb
+K:\EQ2Emu\Source\EQ2 SVN\eq2tools\trunk\DBEditors\cynnar\Movement Loop Generator 2.0\Movement Loop Generator 2.0\bin\Debug\Movement Loop Generator 2.0.exe.config
+K:\EQ2Emu\Source\EQ2 SVN\eq2tools\trunk\DBEditors\cynnar\Movement Loop Generator 2.0\Movement Loop Generator 2.0\bin\Debug\Movement Loop Generator 2.0.exe
+K:\EQ2Emu\Source\EQ2 SVN\eq2tools\trunk\DBEditors\cynnar\Movement Loop Generator 2.0\Movement Loop Generator 2.0\bin\Debug\Movement Loop Generator 2.0.pdb
+K:\EQ2Emu\Source\EQ2 SVN\eq2tools\trunk\DBEditors\cynnar\Movement Loop Generator 2.0\Movement Loop Generator 2.0\obj\Debug\Movement Loop Generator 2.0.csprojAssemblyReference.cache
+K:\EQ2Emu\Source\EQ2 SVN\eq2tools\trunk\DBEditors\cynnar\Movement Loop Generator 2.0\Movement Loop Generator 2.0\obj\Debug\Movement_Loop_Generator_2._0.Form1.resources
+K:\EQ2Emu\Source\EQ2 SVN\eq2tools\trunk\DBEditors\cynnar\Movement Loop Generator 2.0\Movement Loop Generator 2.0\obj\Debug\Movement_Loop_Generator_2._0.Properties.Resources.resources
+K:\EQ2Emu\Source\EQ2 SVN\eq2tools\trunk\DBEditors\cynnar\Movement Loop Generator 2.0\Movement Loop Generator 2.0\obj\Debug\Movement Loop Generator 2.0.csproj.GenerateResource.cache
+K:\EQ2Emu\Source\EQ2 SVN\eq2tools\trunk\DBEditors\cynnar\Movement Loop Generator 2.0\Movement Loop Generator 2.0\obj\Debug\Movement Loop Generator 2.0.csproj.CoreCompileInputs.cache
+K:\EQ2Emu\Source\EQ2 SVN\eq2tools\trunk\DBEditors\cynnar\Movement Loop Generator 2.0\Movement Loop Generator 2.0\obj\Debug\Movement Loop Generator 2.0.exe
+K:\EQ2Emu\Source\EQ2 SVN\eq2tools\trunk\DBEditors\cynnar\Movement Loop Generator 2.0\Movement Loop Generator 2.0\obj\Debug\Movement Loop Generator 2.0.pdb
+D:\github\eq2emu_public\EQ2\devtools\Movement Loop Generator\Movement Loop Generator 2.0\obj\Debug\Movement_Loop_Generator_2._0.Form1.resources
+D:\github\eq2emu_public\EQ2\devtools\Movement Loop Generator\Movement Loop Generator 2.0\obj\Debug\Movement_Loop_Generator_2._0.Properties.Resources.resources
+D:\github\eq2emu_public\EQ2\devtools\Movement Loop Generator\Movement Loop Generator 2.0\obj\Debug\Movement Loop Generator 2.0.csproj.GenerateResource.cache
+D:\github\eq2emu_public\EQ2\devtools\Movement Loop Generator\Movement Loop Generator 2.0\obj\Debug\Movement Loop Generator 2.0.csproj.CoreCompileInputs.cache
+D:\github\eq2emu_public\EQ2\devtools\Movement Loop Generator\Movement Loop Generator 2.0\obj\Debug\Movement Loop Generator 2.0.exe
+D:\github\eq2emu_public\EQ2\devtools\Movement Loop Generator\Movement Loop Generator 2.0\obj\Debug\Movement Loop Generator 2.0.pdb
+D:\github\eq2emu_public\EQ2\devtools\Movement Loop Generator\Movement Loop Generator 2.0\bin\Debug\Movement Loop Generator 2.0.exe.config
+D:\github\eq2emu_public\EQ2\devtools\Movement Loop Generator\Movement Loop Generator 2.0\bin\Debug\Movement Loop Generator 2.0.exe
+D:\github\eq2emu_public\EQ2\devtools\Movement Loop Generator\Movement Loop Generator 2.0\bin\Debug\Movement Loop Generator 2.0.pdb

BIN
EQ2/devtools/Movement Loop Generator/Movement Loop Generator 2.0/obj/Debug/Movement Loop Generator 2.0.exe


BIN
EQ2/devtools/Movement Loop Generator/Movement Loop Generator 2.0/obj/Debug/Movement Loop Generator 2.0.pdb


BIN
EQ2/devtools/Movement Loop Generator/Movement Loop Generator 2.0/obj/Debug/Movement_Loop_Generator_2._0.Form1.resources


BIN
EQ2/devtools/Movement Loop Generator/Movement Loop Generator 2.0/obj/Debug/Movement_Loop_Generator_2._0.ParseDetalis.resources


BIN
EQ2/devtools/Movement Loop Generator/Movement Loop Generator 2.0/obj/Debug/Movement_Loop_Generator_2._0.Properties.Resources.resources


+ 0 - 0
EQ2/devtools/Movement Loop Generator/Movement Loop Generator 2.0/obj/Debug/TemporaryGeneratedFile_036C0B5B-1481-4323-8D20-8F5ADCB23D92.cs


+ 0 - 0
EQ2/devtools/Movement Loop Generator/Movement Loop Generator 2.0/obj/Debug/TemporaryGeneratedFile_5937a670-0e60-4077-877b-f7221da3dda1.cs


+ 0 - 0
EQ2/devtools/Movement Loop Generator/Movement Loop Generator 2.0/obj/Debug/TemporaryGeneratedFile_E7A71F73-0F8D-4B9B-B56E-8E70B10BC5D3.cs


+ 29 - 0
EQ2/devtools/Movement Loop Generator/Movement Loop Generator 2.0/obj/Release/Movement Loop Generator 2.0.csproj.FileListAbsolute.txt

@@ -0,0 +1,29 @@
+E:\EQ2\Source\Tools\trunk\DBEditors\cynnar\Movement Loop Generator 2.0\Movement Loop Generator 2.0\bin\Release\Movement Loop Generator 2.0.exe.config
+E:\EQ2\Source\Tools\trunk\DBEditors\cynnar\Movement Loop Generator 2.0\Movement Loop Generator 2.0\bin\Release\Movement Loop Generator 2.0.exe
+E:\EQ2\Source\Tools\trunk\DBEditors\cynnar\Movement Loop Generator 2.0\Movement Loop Generator 2.0\bin\Release\Movement Loop Generator 2.0.pdb
+E:\EQ2\Source\Tools\trunk\DBEditors\cynnar\Movement Loop Generator 2.0\Movement Loop Generator 2.0\obj\Release\Movement_Loop_Generator_2._0.Form1.resources
+E:\EQ2\Source\Tools\trunk\DBEditors\cynnar\Movement Loop Generator 2.0\Movement Loop Generator 2.0\obj\Release\Movement_Loop_Generator_2._0.Properties.Resources.resources
+E:\EQ2\Source\Tools\trunk\DBEditors\cynnar\Movement Loop Generator 2.0\Movement Loop Generator 2.0\obj\Release\Movement Loop Generator 2.0.csproj.GenerateResource.Cache
+E:\EQ2\Source\Tools\trunk\DBEditors\cynnar\Movement Loop Generator 2.0\Movement Loop Generator 2.0\obj\Release\Movement Loop Generator 2.0.exe
+E:\EQ2\Source\Tools\trunk\DBEditors\cynnar\Movement Loop Generator 2.0\Movement Loop Generator 2.0\obj\Release\Movement Loop Generator 2.0.pdb
+E:\EQ2\Source\Tools\trunk\DBEditors\cynnar\Movement Loop Generator 2.0\Movement Loop Generator 2.0\obj\Release\Movement Loop Generator 2.0.csproj.CoreCompileInputs.cache
+E:\EQ2\Source\Tools\trunk\DBEditors\cynnar\Movement Loop Generator 2.0\Movement Loop Generator 2.0\obj\Release\Movement Loop Generator 2.0.csprojAssemblyReference.cache
+K:\EQ2Emu\Source\EQ2 SVN\eq2tools\trunk\DBEditors\cynnar\Movement Loop Generator 2.0\Movement Loop Generator 2.0\bin\Release\Movement Loop Generator 2.0.exe.config
+K:\EQ2Emu\Source\EQ2 SVN\eq2tools\trunk\DBEditors\cynnar\Movement Loop Generator 2.0\Movement Loop Generator 2.0\bin\Release\Movement Loop Generator 2.0.exe
+K:\EQ2Emu\Source\EQ2 SVN\eq2tools\trunk\DBEditors\cynnar\Movement Loop Generator 2.0\Movement Loop Generator 2.0\bin\Release\Movement Loop Generator 2.0.pdb
+K:\EQ2Emu\Source\EQ2 SVN\eq2tools\trunk\DBEditors\cynnar\Movement Loop Generator 2.0\Movement Loop Generator 2.0\obj\Release\Movement Loop Generator 2.0.csprojAssemblyReference.cache
+K:\EQ2Emu\Source\EQ2 SVN\eq2tools\trunk\DBEditors\cynnar\Movement Loop Generator 2.0\Movement Loop Generator 2.0\obj\Release\Movement_Loop_Generator_2._0.Form1.resources
+K:\EQ2Emu\Source\EQ2 SVN\eq2tools\trunk\DBEditors\cynnar\Movement Loop Generator 2.0\Movement Loop Generator 2.0\obj\Release\Movement_Loop_Generator_2._0.Properties.Resources.resources
+K:\EQ2Emu\Source\EQ2 SVN\eq2tools\trunk\DBEditors\cynnar\Movement Loop Generator 2.0\Movement Loop Generator 2.0\obj\Release\Movement Loop Generator 2.0.csproj.GenerateResource.cache
+K:\EQ2Emu\Source\EQ2 SVN\eq2tools\trunk\DBEditors\cynnar\Movement Loop Generator 2.0\Movement Loop Generator 2.0\obj\Release\Movement Loop Generator 2.0.csproj.CoreCompileInputs.cache
+K:\EQ2Emu\Source\EQ2 SVN\eq2tools\trunk\DBEditors\cynnar\Movement Loop Generator 2.0\Movement Loop Generator 2.0\obj\Release\Movement Loop Generator 2.0.exe
+K:\EQ2Emu\Source\EQ2 SVN\eq2tools\trunk\DBEditors\cynnar\Movement Loop Generator 2.0\Movement Loop Generator 2.0\obj\Release\Movement Loop Generator 2.0.pdb
+D:\github\eq2emu_public\EQ2\devtools\Movement Loop Generator\Movement Loop Generator 2.0\bin\Release\Movement Loop Generator 2.0.exe.config
+D:\github\eq2emu_public\EQ2\devtools\Movement Loop Generator\Movement Loop Generator 2.0\bin\Release\Movement Loop Generator 2.0.exe
+D:\github\eq2emu_public\EQ2\devtools\Movement Loop Generator\Movement Loop Generator 2.0\bin\Release\Movement Loop Generator 2.0.pdb
+D:\github\eq2emu_public\EQ2\devtools\Movement Loop Generator\Movement Loop Generator 2.0\obj\Release\Movement_Loop_Generator_2._0.Form1.resources
+D:\github\eq2emu_public\EQ2\devtools\Movement Loop Generator\Movement Loop Generator 2.0\obj\Release\Movement_Loop_Generator_2._0.Properties.Resources.resources
+D:\github\eq2emu_public\EQ2\devtools\Movement Loop Generator\Movement Loop Generator 2.0\obj\Release\Movement Loop Generator 2.0.csproj.GenerateResource.cache
+D:\github\eq2emu_public\EQ2\devtools\Movement Loop Generator\Movement Loop Generator 2.0\obj\Release\Movement Loop Generator 2.0.csproj.CoreCompileInputs.cache
+D:\github\eq2emu_public\EQ2\devtools\Movement Loop Generator\Movement Loop Generator 2.0\obj\Release\Movement Loop Generator 2.0.exe
+D:\github\eq2emu_public\EQ2\devtools\Movement Loop Generator\Movement Loop Generator 2.0\obj\Release\Movement Loop Generator 2.0.pdb

BIN
EQ2/devtools/Movement Loop Generator/Movement Loop Generator 2.0/obj/Release/Movement Loop Generator 2.0.exe


BIN
EQ2/devtools/Movement Loop Generator/Movement Loop Generator 2.0/obj/Release/Movement Loop Generator 2.0.pdb


BIN
EQ2/devtools/Movement Loop Generator/Movement Loop Generator 2.0/obj/Release/Movement_Loop_Generator_2._0.Form1.resources


BIN
EQ2/devtools/Movement Loop Generator/Movement Loop Generator 2.0/obj/Release/Movement_Loop_Generator_2._0.ParseDetalis.resources


BIN
EQ2/devtools/Movement Loop Generator/Movement Loop Generator 2.0/obj/Release/Movement_Loop_Generator_2._0.Properties.Resources.resources


+ 0 - 0
EQ2/devtools/Movement Loop Generator/Movement Loop Generator 2.0/obj/Release/TemporaryGeneratedFile_036C0B5B-1481-4323-8D20-8F5ADCB23D92.cs


+ 0 - 0
EQ2/devtools/Movement Loop Generator/Movement Loop Generator 2.0/obj/Release/TemporaryGeneratedFile_5937a670-0e60-4077-877b-f7221da3dda1.cs


+ 0 - 0
EQ2/devtools/Movement Loop Generator/Movement Loop Generator 2.0/obj/Release/TemporaryGeneratedFile_E7A71F73-0F8D-4B9B-B56E-8E70B10BC5D3.cs