corrade-vassal

Subversion Repositories:
Compare Path: Rev
With Path: Rev
?path1? @ 6  →  ?path2? @ 7
/Vassal/Vassal/RegionEditForm.cs
@@ -66,6 +66,14 @@
{
Vassal.vassalForm.BatchRestartGridView.Rows.Add(data.Key, data.Value);
}
// Update region state grid view.
Vassal.vassalForm.RegionsStateGridView.Rows.Clear();
foreach (KeyValuePair<string, Vector3> data in ConfiguredRegions)
{
Vassal.vassalForm.RegionsStateGridView.Rows.Add(data.Key, "Check pending...",
DateTime.Now.ToUniversalTime()
.ToString(Vassal.LINDEN_CONSTANTS.LSL.DATE_TIME_STAMP));
}
}));
 
Regions.Items.Clear();
@@ -194,6 +202,9 @@
});
// Add the row to the batch restart grid view.
Vassal.vassalForm.BatchRestartGridView.Rows.Add(RegionName.Text, position.ToString());
Vassal.vassalForm.RegionsStateGridView.Rows.Add(RegionName.Text, "Check pending...",
DateTime.Now.ToUniversalTime()
.ToString(Vassal.LINDEN_CONSTANTS.LSL.DATE_TIME_STAMP));
}));
}));
}
@@ -220,6 +231,7 @@
Vassal.vassalForm.LoadedRegions.Items.RemoveAt(selectedItemIndex);
// Update the batch restart grid view.
Vassal.vassalForm.BatchRestartGridView.Rows.RemoveAt(selectedItemIndex);
Vassal.vassalForm.RegionsStateGridView.Rows.RemoveAt(selectedItemIndex);
}));
 
Regions.Items.RemoveAt(Regions.SelectedIndex);
@@ -277,6 +289,20 @@
.Value
= position.ToString();
}
// Update the region state grid view.
if (Vassal.vassalForm.RegionsStateGridView.Rows.Count > selectedItemIndex)
{
Vassal.vassalForm.RegionsStateGridView.Rows[selectedItemIndex].Cells["RegionsStateRegionName"]
.Value
= RegionName.Text;
Vassal.vassalForm.RegionsStateGridView.Rows[selectedItemIndex].Cells["RegionsStateLastState"]
.Value
= "Check pending...";
Vassal.vassalForm.RegionsStateGridView.Rows[selectedItemIndex].Cells["RegionsStateLastCheck"]
.Value
= DateTime.Now.ToUniversalTime()
.ToString(Vassal.LINDEN_CONSTANTS.LSL.DATE_TIME_STAMP);
}
}));
 
Regions.Items[selectedItemIndex] = new ListViewItem
/Vassal/Vassal/SettingsForm.Designer.cs
@@ -32,15 +32,23 @@
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(SettingsForm));
this.tabControl1 = new System.Windows.Forms.TabControl();
this.tabPage1 = new System.Windows.Forms.TabPage();
this.groupBox6 = new System.Windows.Forms.GroupBox();
this.pictureBox5 = new System.Windows.Forms.PictureBox();
this.RegionRestartDelay = new System.Windows.Forms.TextBox();
this.groupBox5 = new System.Windows.Forms.GroupBox();
this.pictureBox4 = new System.Windows.Forms.PictureBox();
this.DataTimeout = new System.Windows.Forms.TextBox();
this.groupBox4 = new System.Windows.Forms.GroupBox();
this.pictureBox3 = new System.Windows.Forms.PictureBox();
this.TeleportTimeout = new System.Windows.Forms.TextBox();
this.groupBox3 = new System.Windows.Forms.GroupBox();
this.pictureBox2 = new System.Windows.Forms.PictureBox();
this.HTTPServerURL = new System.Windows.Forms.TextBox();
this.groupBox2 = new System.Windows.Forms.GroupBox();
this.pictureBox1 = new System.Windows.Forms.PictureBox();
this.Password = new System.Windows.Forms.TextBox();
this.groupBox1 = new System.Windows.Forms.GroupBox();
this.pictureBox6 = new System.Windows.Forms.PictureBox();
this.Group = new System.Windows.Forms.TextBox();
this.tabPage2 = new System.Windows.Forms.TabPage();
this.groupBox16 = new System.Windows.Forms.GroupBox();
@@ -91,22 +99,21 @@
this.statusStrip1 = new System.Windows.Forms.StatusStrip();
this.StatusProgress = new System.Windows.Forms.ToolStripProgressBar();
this.StatusText = new System.Windows.Forms.ToolStripStatusLabel();
this.pictureBox6 = new System.Windows.Forms.PictureBox();
this.toolTip1 = new System.Windows.Forms.ToolTip(this.components);
this.pictureBox1 = new System.Windows.Forms.PictureBox();
this.pictureBox2 = new System.Windows.Forms.PictureBox();
this.pictureBox3 = new System.Windows.Forms.PictureBox();
this.pictureBox4 = new System.Windows.Forms.PictureBox();
this.groupBox6 = new System.Windows.Forms.GroupBox();
this.RegionRestartDelay = new System.Windows.Forms.TextBox();
this.pictureBox5 = new System.Windows.Forms.PictureBox();
this.tabControl1.SuspendLayout();
this.tabPage1.SuspendLayout();
this.groupBox6.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.pictureBox5)).BeginInit();
this.groupBox5.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.pictureBox4)).BeginInit();
this.groupBox4.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.pictureBox3)).BeginInit();
this.groupBox3.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.pictureBox2)).BeginInit();
this.groupBox2.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit();
this.groupBox1.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.pictureBox6)).BeginInit();
this.tabPage2.SuspendLayout();
this.groupBox16.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.pictureBox18)).BeginInit();
@@ -128,13 +135,6 @@
this.groupBox35.SuspendLayout();
this.groupBox34.SuspendLayout();
this.statusStrip1.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.pictureBox6)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.pictureBox2)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.pictureBox3)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.pictureBox4)).BeginInit();
this.groupBox6.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.pictureBox5)).BeginInit();
this.SuspendLayout();
//
// tabControl1
@@ -164,6 +164,38 @@
this.tabPage1.Text = "General";
this.tabPage1.UseVisualStyleBackColor = true;
//
// groupBox6
//
this.groupBox6.Controls.Add(this.pictureBox5);
this.groupBox6.Controls.Add(this.RegionRestartDelay);
this.groupBox6.Font = new System.Drawing.Font("Palatino Linotype", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.groupBox6.Location = new System.Drawing.Point(6, 126);
this.groupBox6.Name = "groupBox6";
this.groupBox6.Size = new System.Drawing.Size(200, 50);
this.groupBox6.TabIndex = 5;
this.groupBox6.TabStop = false;
this.groupBox6.Text = "Region Restart Delay";
//
// pictureBox5
//
this.pictureBox5.Cursor = System.Windows.Forms.Cursors.Help;
this.pictureBox5.Image = ((System.Drawing.Image)(resources.GetObject("pictureBox5.Image")));
this.pictureBox5.Location = new System.Drawing.Point(174, 19);
this.pictureBox5.Name = "pictureBox5";
this.pictureBox5.Size = new System.Drawing.Size(20, 20);
this.pictureBox5.TabIndex = 13;
this.pictureBox5.TabStop = false;
this.toolTip1.SetToolTip(this.pictureBox5, "Used for region restarts, this setting\r\nspecifies with what delay to schedule a\r\n" +
"region restart when requested by Vassal.");
//
// RegionRestartDelay
//
this.RegionRestartDelay.Font = new System.Drawing.Font("Consolas", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.RegionRestartDelay.Location = new System.Drawing.Point(7, 19);
this.RegionRestartDelay.Name = "RegionRestartDelay";
this.RegionRestartDelay.Size = new System.Drawing.Size(161, 20);
this.RegionRestartDelay.TabIndex = 0;
//
// groupBox5
//
this.groupBox5.Controls.Add(this.pictureBox4);
@@ -176,6 +208,18 @@
this.groupBox5.TabStop = false;
this.groupBox5.Text = "Data Timeout";
//
// pictureBox4
//
this.pictureBox4.Cursor = System.Windows.Forms.Cursors.Help;
this.pictureBox4.Image = ((System.Drawing.Image)(resources.GetObject("pictureBox4.Image")));
this.pictureBox4.Location = new System.Drawing.Point(159, 19);
this.pictureBox4.Name = "pictureBox4";
this.pictureBox4.Size = new System.Drawing.Size(20, 20);
this.pictureBox4.TabIndex = 15;
this.pictureBox4.TabStop = false;
this.toolTip1.SetToolTip(this.pictureBox4, "This represents the time in milliseconds\r\nbefore Corrade considers that it was no" +
"t\r\nable to pull data for the current region.");
//
// DataTimeout
//
this.DataTimeout.Font = new System.Drawing.Font("Consolas", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
@@ -196,6 +240,18 @@
this.groupBox4.TabStop = false;
this.groupBox4.Text = "Teleport Timeout";
//
// pictureBox3
//
this.pictureBox3.Cursor = System.Windows.Forms.Cursors.Help;
this.pictureBox3.Image = ((System.Drawing.Image)(resources.GetObject("pictureBox3.Image")));
this.pictureBox3.Location = new System.Drawing.Point(156, 20);
this.pictureBox3.Name = "pictureBox3";
this.pictureBox3.Size = new System.Drawing.Size(20, 20);
this.pictureBox3.TabIndex = 14;
this.pictureBox3.TabStop = false;
this.toolTip1.SetToolTip(this.pictureBox3, "This represents the time in milliseconds\r\nbefore Corrade considers that it cannot" +
"\r\nconnect to a region.");
//
// TeleportTimeout
//
this.TeleportTimeout.Font = new System.Drawing.Font("Consolas", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
@@ -216,6 +272,18 @@
this.groupBox3.TabStop = false;
this.groupBox3.Text = "Corrade HTTP URL";
//
// pictureBox2
//
this.pictureBox2.Cursor = System.Windows.Forms.Cursors.Help;
this.pictureBox2.Image = ((System.Drawing.Image)(resources.GetObject("pictureBox2.Image")));
this.pictureBox2.Location = new System.Drawing.Point(300, 20);
this.pictureBox2.Name = "pictureBox2";
this.pictureBox2.Size = new System.Drawing.Size(20, 20);
this.pictureBox2.TabIndex = 13;
this.pictureBox2.TabStop = false;
this.toolTip1.SetToolTip(this.pictureBox2, "Enter the full address and port (prefix)\r\nthat Vassal will use to talk to Corrade" +
".");
//
// HTTPServerURL
//
this.HTTPServerURL.Font = new System.Drawing.Font("Consolas", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
@@ -236,6 +304,17 @@
this.groupBox2.TabStop = false;
this.groupBox2.Text = "Group Password";
//
// pictureBox1
//
this.pictureBox1.Cursor = System.Windows.Forms.Cursors.Help;
this.pictureBox1.Image = ((System.Drawing.Image)(resources.GetObject("pictureBox1.Image")));
this.pictureBox1.Location = new System.Drawing.Point(231, 20);
this.pictureBox1.Name = "pictureBox1";
this.pictureBox1.Size = new System.Drawing.Size(20, 20);
this.pictureBox1.TabIndex = 12;
this.pictureBox1.TabStop = false;
this.toolTip1.SetToolTip(this.pictureBox1, "Enter the group password that Vassal\r\nwill use to authenticate to Corrade.");
//
// Password
//
this.Password.Font = new System.Drawing.Font("Consolas", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
@@ -256,6 +335,17 @@
this.groupBox1.TabStop = false;
this.groupBox1.Text = "Group";
//
// pictureBox6
//
this.pictureBox6.Cursor = System.Windows.Forms.Cursors.Help;
this.pictureBox6.Image = ((System.Drawing.Image)(resources.GetObject("pictureBox6.Image")));
this.pictureBox6.Location = new System.Drawing.Point(300, 20);
this.pictureBox6.Name = "pictureBox6";
this.pictureBox6.Size = new System.Drawing.Size(20, 20);
this.pictureBox6.TabIndex = 11;
this.pictureBox6.TabStop = false;
this.toolTip1.SetToolTip(this.pictureBox6, "Enter the group that will authenticate\r\nwith Corrade.");
//
// Group
//
this.Group.Font = new System.Drawing.Font("Consolas", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
@@ -817,17 +907,6 @@
this.StatusText.Size = new System.Drawing.Size(10, 17);
this.StatusText.Text = " ";
//
// pictureBox6
//
this.pictureBox6.Cursor = System.Windows.Forms.Cursors.Help;
this.pictureBox6.Image = ((System.Drawing.Image)(resources.GetObject("pictureBox6.Image")));
this.pictureBox6.Location = new System.Drawing.Point(300, 20);
this.pictureBox6.Name = "pictureBox6";
this.pictureBox6.Size = new System.Drawing.Size(20, 20);
this.pictureBox6.TabIndex = 11;
this.pictureBox6.TabStop = false;
this.toolTip1.SetToolTip(this.pictureBox6, "Enter the group that will authenticate\r\nwith Corrade.");
//
// toolTip1
//
this.toolTip1.AutoPopDelay = 32767;
@@ -834,84 +913,6 @@
this.toolTip1.InitialDelay = 500;
this.toolTip1.ReshowDelay = 100;
//
// pictureBox1
//
this.pictureBox1.Cursor = System.Windows.Forms.Cursors.Help;
this.pictureBox1.Image = ((System.Drawing.Image)(resources.GetObject("pictureBox1.Image")));
this.pictureBox1.Location = new System.Drawing.Point(231, 20);
this.pictureBox1.Name = "pictureBox1";
this.pictureBox1.Size = new System.Drawing.Size(20, 20);
this.pictureBox1.TabIndex = 12;
this.pictureBox1.TabStop = false;
this.toolTip1.SetToolTip(this.pictureBox1, "Enter the group password that Vassal\r\nwill use to authenticate to Corrade.");
//
// pictureBox2
//
this.pictureBox2.Cursor = System.Windows.Forms.Cursors.Help;
this.pictureBox2.Image = ((System.Drawing.Image)(resources.GetObject("pictureBox2.Image")));
this.pictureBox2.Location = new System.Drawing.Point(300, 20);
this.pictureBox2.Name = "pictureBox2";
this.pictureBox2.Size = new System.Drawing.Size(20, 20);
this.pictureBox2.TabIndex = 13;
this.pictureBox2.TabStop = false;
this.toolTip1.SetToolTip(this.pictureBox2, "Enter the full address and port (prefix)\r\nthat Vassal will use to talk to Corrade" +
".");
//
// pictureBox3
//
this.pictureBox3.Cursor = System.Windows.Forms.Cursors.Help;
this.pictureBox3.Image = ((System.Drawing.Image)(resources.GetObject("pictureBox3.Image")));
this.pictureBox3.Location = new System.Drawing.Point(156, 20);
this.pictureBox3.Name = "pictureBox3";
this.pictureBox3.Size = new System.Drawing.Size(20, 20);
this.pictureBox3.TabIndex = 14;
this.pictureBox3.TabStop = false;
this.toolTip1.SetToolTip(this.pictureBox3, "This represents the time in milliseconds\r\nbefore Corrade considers that it cannot" +
"\r\nconnect to a region.");
//
// pictureBox4
//
this.pictureBox4.Cursor = System.Windows.Forms.Cursors.Help;
this.pictureBox4.Image = ((System.Drawing.Image)(resources.GetObject("pictureBox4.Image")));
this.pictureBox4.Location = new System.Drawing.Point(159, 19);
this.pictureBox4.Name = "pictureBox4";
this.pictureBox4.Size = new System.Drawing.Size(20, 20);
this.pictureBox4.TabIndex = 15;
this.pictureBox4.TabStop = false;
this.toolTip1.SetToolTip(this.pictureBox4, "This represents the time in milliseconds\r\nbefore Corrade considers that it was no" +
"t\r\nable to pull data for the current region.");
//
// groupBox6
//
this.groupBox6.Controls.Add(this.pictureBox5);
this.groupBox6.Controls.Add(this.RegionRestartDelay);
this.groupBox6.Font = new System.Drawing.Font("Palatino Linotype", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.groupBox6.Location = new System.Drawing.Point(6, 126);
this.groupBox6.Name = "groupBox6";
this.groupBox6.Size = new System.Drawing.Size(200, 50);
this.groupBox6.TabIndex = 5;
this.groupBox6.TabStop = false;
this.groupBox6.Text = "Region Restart Delay";
//
// RegionRestartDelay
//
this.RegionRestartDelay.Font = new System.Drawing.Font("Consolas", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.RegionRestartDelay.Location = new System.Drawing.Point(7, 19);
this.RegionRestartDelay.Name = "RegionRestartDelay";
this.RegionRestartDelay.Size = new System.Drawing.Size(161, 20);
this.RegionRestartDelay.TabIndex = 0;
//
// pictureBox5
//
this.pictureBox5.Cursor = System.Windows.Forms.Cursors.Help;
this.pictureBox5.Image = ((System.Drawing.Image)(resources.GetObject("pictureBox5.Image")));
this.pictureBox5.Location = new System.Drawing.Point(174, 19);
this.pictureBox5.Name = "pictureBox5";
this.pictureBox5.Size = new System.Drawing.Size(20, 20);
this.pictureBox5.TabIndex = 13;
this.pictureBox5.TabStop = false;
this.toolTip1.SetToolTip(this.pictureBox5, "Enter the group password that Vassal\r\nwill use to authenticate to Corrade.");
//
// SettingsForm
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
@@ -931,16 +932,24 @@
this.Shown += new System.EventHandler(this.SettingsFormShown);
this.tabControl1.ResumeLayout(false);
this.tabPage1.ResumeLayout(false);
this.groupBox6.ResumeLayout(false);
this.groupBox6.PerformLayout();
((System.ComponentModel.ISupportInitialize)(this.pictureBox5)).EndInit();
this.groupBox5.ResumeLayout(false);
this.groupBox5.PerformLayout();
((System.ComponentModel.ISupportInitialize)(this.pictureBox4)).EndInit();
this.groupBox4.ResumeLayout(false);
this.groupBox4.PerformLayout();
((System.ComponentModel.ISupportInitialize)(this.pictureBox3)).EndInit();
this.groupBox3.ResumeLayout(false);
this.groupBox3.PerformLayout();
((System.ComponentModel.ISupportInitialize)(this.pictureBox2)).EndInit();
this.groupBox2.ResumeLayout(false);
this.groupBox2.PerformLayout();
((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit();
this.groupBox1.ResumeLayout(false);
this.groupBox1.PerformLayout();
((System.ComponentModel.ISupportInitialize)(this.pictureBox6)).EndInit();
this.tabPage2.ResumeLayout(false);
this.groupBox16.ResumeLayout(false);
((System.ComponentModel.ISupportInitialize)(this.pictureBox18)).EndInit();
@@ -964,14 +973,6 @@
this.groupBox34.ResumeLayout(false);
this.statusStrip1.ResumeLayout(false);
this.statusStrip1.PerformLayout();
((System.ComponentModel.ISupportInitialize)(this.pictureBox6)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.pictureBox2)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.pictureBox3)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.pictureBox4)).EndInit();
this.groupBox6.ResumeLayout(false);
this.groupBox6.PerformLayout();
((System.ComponentModel.ISupportInitialize)(this.pictureBox5)).EndInit();
this.ResumeLayout(false);
this.PerformLayout();
 
/Vassal/Vassal/SettingsForm.cs
@@ -1,4 +1,10 @@
using System;
///////////////////////////////////////////////////////////////////////////
// Copyright (C) Wizardry and Steamworks 2015 - License: GNU GPLv3 //
// Please see: http://www.gnu.org/licenses/gpl.html for legal details, //
// rights of fair usage, the disclaimer and warranty conditions. //
///////////////////////////////////////////////////////////////////////////
 
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
@@ -5,6 +11,8 @@
using System.Drawing;
using System.IO;
using System.Linq;
using System.Net.Sockets;
using System.Reflection;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
@@ -421,6 +429,39 @@
}
}));
}));
// Spawn a thread to check Corrade's connection status.
new Thread(() =>
{
TcpClient tcpClient = new TcpClient();
try
{
System.Uri uri = new System.Uri(Vassal.vassalConfiguration.HTTPServerURL);
tcpClient.Connect(uri.Host, uri.Port);
// port open
Vassal.vassalForm.BeginInvoke((MethodInvoker)(() => { Vassal.vassalForm.Tabs.Enabled = true; }));
// set the loading spinner
Assembly thisAssembly = System.Reflection.Assembly.GetExecutingAssembly();
System.IO.Stream file =
thisAssembly.GetManifestResourceStream("Vassal.img.loading.gif");
switch (file != null)
{
case true:
Vassal.vassalForm.BeginInvoke((MethodInvoker)(() =>
{
Vassal.vassalForm.RegionAvatarsMap.SizeMode = PictureBoxSizeMode.CenterImage;
Vassal.vassalForm.RegionAvatarsMap.Image = Image.FromStream(file);
Vassal.vassalForm.RegionAvatarsMap.Refresh();
}));
break;
}
}
catch (Exception)
{
// port closed
Vassal.vassalForm.BeginInvoke((MethodInvoker)(() => { Vassal.vassalForm.Tabs.Enabled = false; }));
}
})
{ IsBackground = true }.Start();
}
}
}
/Vassal/Vassal/SettingsForm.resx
@@ -175,7 +175,7 @@
<metadata name="toolTip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>447, 17</value>
</metadata>
<data name="pictureBox18.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<data name="pictureBox4.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAABGdBTUEAALGOfPtRkwAAACBjSFJNAACH
DwAAjA8AAP1SAACBQAAAfXkAAOmLAAA85QAAGcxzPIV3AAAKOWlDQ1BQaG90b3Nob3AgSUNDIHByb2Zp
@@ -229,7 +229,7 @@
dQgdpxD/YtCVgwtB0JV/5d+Fgp6AN1enJiPk3QAAAABJRU5ErkJggg==
</value>
</data>
<data name="pictureBox17.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<data name="pictureBox3.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAABGdBTUEAALGOfPtRkwAAACBjSFJNAACH
DwAAjA8AAP1SAACBQAAAfXkAAOmLAAA85QAAGcxzPIV3AAAKOWlDQ1BQaG90b3Nob3AgSUNDIHByb2Zp
@@ -283,13 +283,7 @@
dQgdpxD/YtCVgwtB0JV/5d+Fgp6AN1enJiPk3QAAAABJRU5ErkJggg==
</value>
</data>
<data name="pictureBox17.ToolTip" xml:space="preserve">
<value>The input filters will be crossed on every message in-
order from top to bottom. You can chain several
input filters here as you wish and Corrade will run
them all in sequence when it receives a message.</value>
</data>
<data name="pictureBox20.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<data name="pictureBox2.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAABGdBTUEAALGOfPtRkwAAACBjSFJNAACH
DwAAjA8AAP1SAACBQAAAfXkAAOmLAAA85QAAGcxzPIV3AAAKOWlDQ1BQaG90b3Nob3AgSUNDIHByb2Zp
@@ -343,7 +337,7 @@
dQgdpxD/YtCVgwtB0JV/5d+Fgp6AN1enJiPk3QAAAABJRU5ErkJggg==
</value>
</data>
<data name="pictureBox19.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<data name="pictureBox1.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAABGdBTUEAALGOfPtRkwAAACBjSFJNAACH
DwAAjA8AAP1SAACBQAAAfXkAAOmLAAA85QAAGcxzPIV3AAAKOWlDQ1BQaG90b3Nob3AgSUNDIHByb2Zp
@@ -397,15 +391,6 @@
dQgdpxD/YtCVgwtB0JV/5d+Fgp6AN1enJiPk3QAAAABJRU5ErkJggg==
</value>
</data>
<metadata name="LoadSettingsDialog.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
<metadata name="SaveSettingsDialog.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>175, 17</value>
</metadata>
<metadata name="statusStrip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>331, 17</value>
</metadata>
<data name="pictureBox6.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAABGdBTUEAALGOfPtRkwAAACBjSFJNAACH
@@ -460,7 +445,7 @@
dQgdpxD/YtCVgwtB0JV/5d+Fgp6AN1enJiPk3QAAAABJRU5ErkJggg==
</value>
</data>
<data name="pictureBox1.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<data name="pictureBox18.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAABGdBTUEAALGOfPtRkwAAACBjSFJNAACH
DwAAjA8AAP1SAACBQAAAfXkAAOmLAAA85QAAGcxzPIV3AAAKOWlDQ1BQaG90b3Nob3AgSUNDIHByb2Zp
@@ -514,7 +499,7 @@
dQgdpxD/YtCVgwtB0JV/5d+Fgp6AN1enJiPk3QAAAABJRU5ErkJggg==
</value>
</data>
<data name="pictureBox2.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<data name="pictureBox17.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAABGdBTUEAALGOfPtRkwAAACBjSFJNAACH
DwAAjA8AAP1SAACBQAAAfXkAAOmLAAA85QAAGcxzPIV3AAAKOWlDQ1BQaG90b3Nob3AgSUNDIHByb2Zp
@@ -568,7 +553,13 @@
dQgdpxD/YtCVgwtB0JV/5d+Fgp6AN1enJiPk3QAAAABJRU5ErkJggg==
</value>
</data>
<data name="pictureBox3.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<data name="pictureBox17.ToolTip" xml:space="preserve">
<value>The input filters will be crossed on every message in-
order from top to bottom. You can chain several
input filters here as you wish and Corrade will run
them all in sequence when it receives a message.</value>
</data>
<data name="pictureBox20.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAABGdBTUEAALGOfPtRkwAAACBjSFJNAACH
DwAAjA8AAP1SAACBQAAAfXkAAOmLAAA85QAAGcxzPIV3AAAKOWlDQ1BQaG90b3Nob3AgSUNDIHByb2Zp
@@ -622,7 +613,7 @@
dQgdpxD/YtCVgwtB0JV/5d+Fgp6AN1enJiPk3QAAAABJRU5ErkJggg==
</value>
</data>
<data name="pictureBox4.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<data name="pictureBox19.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAABGdBTUEAALGOfPtRkwAAACBjSFJNAACH
DwAAjA8AAP1SAACBQAAAfXkAAOmLAAA85QAAGcxzPIV3AAAKOWlDQ1BQaG90b3Nob3AgSUNDIHByb2Zp
@@ -676,6 +667,15 @@
dQgdpxD/YtCVgwtB0JV/5d+Fgp6AN1enJiPk3QAAAABJRU5ErkJggg==
</value>
</data>
<metadata name="LoadSettingsDialog.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
<metadata name="SaveSettingsDialog.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>175, 17</value>
</metadata>
<metadata name="statusStrip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>331, 17</value>
</metadata>
<data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
AAABAAYAAAAAAAEAIADVHwEAZgAAAICAAAABACAAKAgBADsgAQBAQAAAAQAgAChCAABjKAIAMDAAAAEA
/Vassal/Vassal/Vassal.csproj
@@ -11,6 +11,21 @@
<AssemblyName>Vassal</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>
@@ -125,6 +140,18 @@
<ItemGroup>
<Folder Include="libs\" />
</ItemGroup>
<ItemGroup>
<BootstrapperPackage Include=".NETFramework,Version=v4.5">
<Visible>False</Visible>
<ProductName>Microsoft .NET Framework 4.5 %28x86 and x64%29</ProductName>
<Install>true</Install>
</BootstrapperPackage>
<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.
/Vassal/Vassal/Vassal.ini
@@ -25,5 +25,5 @@
<HTTPServerURL>http://127.0.0.1:8080/</HTTPServerURL>
<TeleportTimeout>30000</TeleportTimeout>
<DataTimeout>15000</DataTimeout>
<RegionRestartDelay>120000</RegionRestartDelay>
<RegionRestartDelay>120</RegionRestartDelay>
</VassalConfiguration>
/Vassal/Vassal/VassalConfiguration.cs
@@ -1,4 +1,10 @@
using System;
///////////////////////////////////////////////////////////////////////////
// Copyright (C) Wizardry and Steamworks 2015 - License: GNU GPLv3 //
// Please see: http://www.gnu.org/licenses/gpl.html for legal details, //
// rights of fair usage, the disclaimer and warranty conditions. //
///////////////////////////////////////////////////////////////////////////
 
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.IO;
@@ -67,7 +73,7 @@
private string _vigenereSecret = string.Empty;
private uint _teleportTimeout = 30000;
private uint _dataTimeout = 15000;
private uint _regionRestartDelay = 120000;
private uint _regionRestartDelay = 120;
 
public string Group
{
/Vassal/Vassal/VassalForm.Designer.cs
@@ -56,6 +56,29 @@
this.LastLag = new System.Windows.Forms.Label();
this.groupBox2 = new System.Windows.Forms.GroupBox();
this.Agents = new System.Windows.Forms.Label();
this.RegionsStateTab = new System.Windows.Forms.TabPage();
this.RegionsStateGridView = new System.Windows.Forms.DataGridView();
this.RegionsStateRegionName = new System.Windows.Forms.DataGridViewTextBoxColumn();
this.RegionsStateLastState = new System.Windows.Forms.DataGridViewTextBoxColumn();
this.RegionsStateLastCheck = new System.Windows.Forms.DataGridViewTextBoxColumn();
this.ResidentListTab = new System.Windows.Forms.TabPage();
this.ResidentListBanGroup = new System.Windows.Forms.GroupBox();
this.ResidentBanAllEstatesBox = new System.Windows.Forms.CheckBox();
this.ResidentBanButton = new System.Windows.Forms.Button();
this.label4 = new System.Windows.Forms.Label();
this.ResidentListFilter = new System.Windows.Forms.TextBox();
this.ResidentListGridView = new System.Windows.Forms.DataGridView();
this.ResidentListName = new System.Windows.Forms.DataGridViewTextBoxColumn();
this.ResidentListUUID = new System.Windows.Forms.DataGridViewTextBoxColumn();
this.ResidentListPosition = new System.Windows.Forms.DataGridViewTextBoxColumn();
this.BatchRestartTab = new System.Windows.Forms.TabPage();
this.label3 = new System.Windows.Forms.Label();
this.RegionRestartDelayBox = new System.Windows.Forms.TextBox();
this.pictureBox3 = new System.Windows.Forms.PictureBox();
this.BatchRestartButton = new System.Windows.Forms.Button();
this.BatchRestartGridView = new System.Windows.Forms.DataGridView();
this.BatchRestartRegionName = new System.Windows.Forms.DataGridViewTextBoxColumn();
this.BatchRestartPosition = new System.Windows.Forms.DataGridViewTextBoxColumn();
this.TopScriptsTab = new System.Windows.Forms.TabPage();
this.label1 = new System.Windows.Forms.Label();
this.TopScriptsFilter = new System.Windows.Forms.TextBox();
@@ -78,14 +101,6 @@
this.TopCollidersUUID = new System.Windows.Forms.DataGridViewTextBoxColumn();
this.TopCollidersOwner = new System.Windows.Forms.DataGridViewTextBoxColumn();
this.TopCollidersPosition = new System.Windows.Forms.DataGridViewTextBoxColumn();
this.BatchRestartTab = new System.Windows.Forms.TabPage();
this.label3 = new System.Windows.Forms.Label();
this.RegionRestartDelayBox = new System.Windows.Forms.TextBox();
this.pictureBox3 = new System.Windows.Forms.PictureBox();
this.BatchRestartButton = new System.Windows.Forms.Button();
this.BatchRestartGridView = new System.Windows.Forms.DataGridView();
this.BatchRestartRegionName = new System.Windows.Forms.DataGridViewTextBoxColumn();
this.BatchRestartPosition = new System.Windows.Forms.DataGridViewTextBoxColumn();
this.statusStrip1 = new System.Windows.Forms.StatusStrip();
this.StatusProgress = new System.Windows.Forms.ToolStripProgressBar();
this.StatusText = new System.Windows.Forms.ToolStripStatusLabel();
@@ -101,6 +116,18 @@
this.pictureBox2 = new System.Windows.Forms.PictureBox();
this.Version = new System.Windows.Forms.Label();
this.toolTip1 = new System.Windows.Forms.ToolTip(this.components);
this.RegionToolsTab = new System.Windows.Forms.TabPage();
this.groupBox11 = new System.Windows.Forms.GroupBox();
this.button4 = new System.Windows.Forms.Button();
this.RipTerrainButton = new System.Windows.Forms.Button();
this.button7 = new System.Windows.Forms.Button();
this.pictureBox4 = new System.Windows.Forms.PictureBox();
this.pictureBox5 = new System.Windows.Forms.PictureBox();
this.pictureBox7 = new System.Windows.Forms.PictureBox();
this.LoadTerrainFileDialog = new System.Windows.Forms.OpenFileDialog();
this.SaveTerrainFileDialog = new System.Windows.Forms.SaveFileDialog();
this.EstateTerrainDownloadUploadGroup = new System.Windows.Forms.GroupBox();
this.groupBox13 = new System.Windows.Forms.GroupBox();
((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit();
this.Tabs.SuspendLayout();
this.OverviewTab.SuspendLayout();
@@ -114,18 +141,30 @@
this.groupBox4.SuspendLayout();
this.groupBox3.SuspendLayout();
this.groupBox2.SuspendLayout();
this.RegionsStateTab.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.RegionsStateGridView)).BeginInit();
this.ResidentListTab.SuspendLayout();
this.ResidentListBanGroup.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.ResidentListGridView)).BeginInit();
this.BatchRestartTab.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.pictureBox3)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.BatchRestartGridView)).BeginInit();
this.TopScriptsTab.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.TopScriptsGridView)).BeginInit();
this.TopCollidersTab.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.TopCollidersGridView)).BeginInit();
this.BatchRestartTab.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.pictureBox3)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.BatchRestartGridView)).BeginInit();
this.statusStrip1.SuspendLayout();
this.RegionTeleportGroup.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.pictureBox6)).BeginInit();
this.groupBox1.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.pictureBox2)).BeginInit();
this.RegionToolsTab.SuspendLayout();
this.groupBox11.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.pictureBox4)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.pictureBox5)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.pictureBox7)).BeginInit();
this.EstateTerrainDownloadUploadGroup.SuspendLayout();
this.groupBox13.SuspendLayout();
this.SuspendLayout();
//
// pictureBox1
@@ -141,9 +180,13 @@
// Tabs
//
this.Tabs.Controls.Add(this.OverviewTab);
this.Tabs.Controls.Add(this.RegionsStateTab);
this.Tabs.Controls.Add(this.ResidentListTab);
this.Tabs.Controls.Add(this.BatchRestartTab);
this.Tabs.Controls.Add(this.TopScriptsTab);
this.Tabs.Controls.Add(this.TopCollidersTab);
this.Tabs.Controls.Add(this.BatchRestartTab);
this.Tabs.Controls.Add(this.RegionToolsTab);
this.Tabs.Enabled = false;
this.Tabs.Font = new System.Drawing.Font("Palatino Linotype", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.Tabs.Location = new System.Drawing.Point(13, 186);
this.Tabs.Name = "Tabs";
@@ -359,6 +402,243 @@
this.Agents.TabIndex = 0;
this.Agents.Text = " ";
//
// RegionsStateTab
//
this.RegionsStateTab.Controls.Add(this.RegionsStateGridView);
this.RegionsStateTab.Location = new System.Drawing.Point(4, 25);
this.RegionsStateTab.Name = "RegionsStateTab";
this.RegionsStateTab.Size = new System.Drawing.Size(671, 401);
this.RegionsStateTab.TabIndex = 5;
this.RegionsStateTab.Text = "Regions State";
this.RegionsStateTab.UseVisualStyleBackColor = true;
//
// RegionsStateGridView
//
this.RegionsStateGridView.AllowUserToAddRows = false;
this.RegionsStateGridView.AllowUserToDeleteRows = false;
this.RegionsStateGridView.AllowUserToOrderColumns = true;
this.RegionsStateGridView.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize;
this.RegionsStateGridView.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] {
this.RegionsStateRegionName,
this.RegionsStateLastState,
this.RegionsStateLastCheck});
this.RegionsStateGridView.Font = new System.Drawing.Font("Consolas", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.RegionsStateGridView.Location = new System.Drawing.Point(4, 4);
this.RegionsStateGridView.Name = "RegionsStateGridView";
this.RegionsStateGridView.ReadOnly = true;
this.RegionsStateGridView.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect;
this.RegionsStateGridView.Size = new System.Drawing.Size(663, 394);
this.RegionsStateGridView.TabIndex = 1;
//
// RegionsStateRegionName
//
this.RegionsStateRegionName.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill;
this.RegionsStateRegionName.HeaderText = "Region Name";
this.RegionsStateRegionName.Name = "RegionsStateRegionName";
this.RegionsStateRegionName.ReadOnly = true;
this.RegionsStateRegionName.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.Programmatic;
//
// RegionsStateLastState
//
this.RegionsStateLastState.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill;
this.RegionsStateLastState.HeaderText = "Last State";
this.RegionsStateLastState.Name = "RegionsStateLastState";
this.RegionsStateLastState.ReadOnly = true;
this.RegionsStateLastState.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.Programmatic;
//
// RegionsStateLastCheck
//
this.RegionsStateLastCheck.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill;
this.RegionsStateLastCheck.HeaderText = "Last Check";
this.RegionsStateLastCheck.Name = "RegionsStateLastCheck";
this.RegionsStateLastCheck.ReadOnly = true;
//
// ResidentListTab
//
this.ResidentListTab.Controls.Add(this.ResidentListBanGroup);
this.ResidentListTab.Controls.Add(this.label4);
this.ResidentListTab.Controls.Add(this.ResidentListFilter);
this.ResidentListTab.Controls.Add(this.ResidentListGridView);
this.ResidentListTab.Location = new System.Drawing.Point(4, 25);
this.ResidentListTab.Name = "ResidentListTab";
this.ResidentListTab.Size = new System.Drawing.Size(671, 401);
this.ResidentListTab.TabIndex = 4;
this.ResidentListTab.Text = "Resident List";
this.ResidentListTab.UseVisualStyleBackColor = true;
//
// ResidentListBanGroup
//
this.ResidentListBanGroup.Controls.Add(this.ResidentBanAllEstatesBox);
this.ResidentListBanGroup.Controls.Add(this.ResidentBanButton);
this.ResidentListBanGroup.Enabled = false;
this.ResidentListBanGroup.Location = new System.Drawing.Point(467, 345);
this.ResidentListBanGroup.Name = "ResidentListBanGroup";
this.ResidentListBanGroup.Size = new System.Drawing.Size(200, 51);
this.ResidentListBanGroup.TabIndex = 10;
this.ResidentListBanGroup.TabStop = false;
this.ResidentListBanGroup.Text = "Ban Residents";
//
// ResidentBanAllEstatesBox
//
this.ResidentBanAllEstatesBox.AutoSize = true;
this.ResidentBanAllEstatesBox.Location = new System.Drawing.Point(91, 23);
this.ResidentBanAllEstatesBox.Name = "ResidentBanAllEstatesBox";
this.ResidentBanAllEstatesBox.Size = new System.Drawing.Size(79, 20);
this.ResidentBanAllEstatesBox.TabIndex = 3;
this.ResidentBanAllEstatesBox.Text = "All Estates";
this.ResidentBanAllEstatesBox.UseVisualStyleBackColor = true;
//
// ResidentBanButton
//
this.ResidentBanButton.Location = new System.Drawing.Point(10, 21);
this.ResidentBanButton.Name = "ResidentBanButton";
this.ResidentBanButton.Size = new System.Drawing.Size(75, 23);
this.ResidentBanButton.TabIndex = 2;
this.ResidentBanButton.Text = "Ban";
this.ResidentBanButton.UseVisualStyleBackColor = true;
this.ResidentBanButton.Click += new System.EventHandler(this.RequestBanAgents);
//
// label4
//
this.label4.AutoSize = true;
this.label4.Location = new System.Drawing.Point(6, 348);
this.label4.Name = "label4";
this.label4.Size = new System.Drawing.Size(36, 16);
this.label4.TabIndex = 9;
this.label4.Text = "Filter:";
//
// ResidentListFilter
//
this.ResidentListFilter.Location = new System.Drawing.Point(44, 345);
this.ResidentListFilter.Name = "ResidentListFilter";
this.ResidentListFilter.Size = new System.Drawing.Size(196, 22);
this.ResidentListFilter.TabIndex = 8;
this.ResidentListFilter.TextChanged += new System.EventHandler(this.RequestFilterResidentList);
//
// ResidentListGridView
//
this.ResidentListGridView.AllowUserToAddRows = false;
this.ResidentListGridView.AllowUserToDeleteRows = false;
this.ResidentListGridView.AllowUserToOrderColumns = true;
this.ResidentListGridView.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize;
this.ResidentListGridView.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] {
this.ResidentListName,
this.ResidentListUUID,
this.ResidentListPosition});
this.ResidentListGridView.Font = new System.Drawing.Font("Consolas", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.ResidentListGridView.Location = new System.Drawing.Point(4, 4);
this.ResidentListGridView.Name = "ResidentListGridView";
this.ResidentListGridView.ReadOnly = true;
this.ResidentListGridView.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect;
this.ResidentListGridView.Size = new System.Drawing.Size(663, 335);
this.ResidentListGridView.TabIndex = 0;
//
// ResidentListName
//
this.ResidentListName.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill;
this.ResidentListName.HeaderText = "Name";
this.ResidentListName.Name = "ResidentListName";
this.ResidentListName.ReadOnly = true;
//
// ResidentListUUID
//
this.ResidentListUUID.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill;
this.ResidentListUUID.HeaderText = "UUID";
this.ResidentListUUID.Name = "ResidentListUUID";
this.ResidentListUUID.ReadOnly = true;
//
// ResidentListPosition
//
this.ResidentListPosition.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill;
this.ResidentListPosition.HeaderText = "Position";
this.ResidentListPosition.Name = "ResidentListPosition";
this.ResidentListPosition.ReadOnly = true;
//
// BatchRestartTab
//
this.BatchRestartTab.Controls.Add(this.label3);
this.BatchRestartTab.Controls.Add(this.RegionRestartDelayBox);
this.BatchRestartTab.Controls.Add(this.pictureBox3);
this.BatchRestartTab.Controls.Add(this.BatchRestartButton);
this.BatchRestartTab.Controls.Add(this.BatchRestartGridView);
this.BatchRestartTab.Location = new System.Drawing.Point(4, 25);
this.BatchRestartTab.Name = "BatchRestartTab";
this.BatchRestartTab.Size = new System.Drawing.Size(671, 401);
this.BatchRestartTab.TabIndex = 3;
this.BatchRestartTab.Text = "Batch Restart";
this.BatchRestartTab.UseVisualStyleBackColor = true;
//
// label3
//
this.label3.AutoSize = true;
this.label3.Font = new System.Drawing.Font("Palatino Linotype", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.label3.Location = new System.Drawing.Point(183, 378);
this.label3.Name = "label3";
this.label3.Size = new System.Drawing.Size(77, 16);
this.label3.TabIndex = 13;
this.label3.Text = "Restart Delay:";
//
// RegionRestartDelayBox
//
this.RegionRestartDelayBox.Location = new System.Drawing.Point(266, 375);
this.RegionRestartDelayBox.Name = "RegionRestartDelayBox";
this.RegionRestartDelayBox.Size = new System.Drawing.Size(72, 22);
this.RegionRestartDelayBox.TabIndex = 12;
//
// pictureBox3
//
this.pictureBox3.Cursor = System.Windows.Forms.Cursors.Help;
this.pictureBox3.Image = ((System.Drawing.Image)(resources.GetObject("pictureBox3.Image")));
this.pictureBox3.Location = new System.Drawing.Point(457, 375);
this.pictureBox3.Name = "pictureBox3";
this.pictureBox3.Size = new System.Drawing.Size(20, 20);
this.pictureBox3.TabIndex = 11;
this.pictureBox3.TabStop = false;
this.toolTip1.SetToolTip(this.pictureBox3, resources.GetString("pictureBox3.ToolTip"));
//
// BatchRestartButton
//
this.BatchRestartButton.Location = new System.Drawing.Point(344, 374);
this.BatchRestartButton.Name = "BatchRestartButton";
this.BatchRestartButton.Size = new System.Drawing.Size(107, 23);
this.BatchRestartButton.TabIndex = 1;
this.BatchRestartButton.Text = "Batch Restart";
this.BatchRestartButton.UseVisualStyleBackColor = true;
this.BatchRestartButton.Click += new System.EventHandler(this.RequestBatchRestart);
//
// BatchRestartGridView
//
this.BatchRestartGridView.AllowUserToAddRows = false;
this.BatchRestartGridView.AllowUserToDeleteRows = false;
this.BatchRestartGridView.AllowUserToOrderColumns = true;
this.BatchRestartGridView.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize;
this.BatchRestartGridView.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] {
this.BatchRestartRegionName,
this.BatchRestartPosition});
this.BatchRestartGridView.Font = new System.Drawing.Font("Consolas", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.BatchRestartGridView.Location = new System.Drawing.Point(4, 4);
this.BatchRestartGridView.Name = "BatchRestartGridView";
this.BatchRestartGridView.ReadOnly = true;
this.BatchRestartGridView.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect;
this.BatchRestartGridView.Size = new System.Drawing.Size(663, 364);
this.BatchRestartGridView.TabIndex = 0;
//
// BatchRestartRegionName
//
this.BatchRestartRegionName.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill;
this.BatchRestartRegionName.HeaderText = "Region Name";
this.BatchRestartRegionName.Name = "BatchRestartRegionName";
this.BatchRestartRegionName.ReadOnly = true;
this.BatchRestartRegionName.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.Programmatic;
//
// BatchRestartPosition
//
this.BatchRestartPosition.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill;
this.BatchRestartPosition.HeaderText = "Position";
this.BatchRestartPosition.Name = "BatchRestartPosition";
this.BatchRestartPosition.ReadOnly = true;
this.BatchRestartPosition.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.Programmatic;
//
// TopScriptsTab
//
this.TopScriptsTab.Controls.Add(this.label1);
@@ -376,7 +656,7 @@
// label1
//
this.label1.AutoSize = true;
this.label1.Location = new System.Drawing.Point(5, 380);
this.label1.Location = new System.Drawing.Point(4, 377);
this.label1.Name = "label1";
this.label1.Size = new System.Drawing.Size(36, 16);
this.label1.TabIndex = 7;
@@ -384,7 +664,7 @@
//
// TopScriptsFilter
//
this.TopScriptsFilter.Location = new System.Drawing.Point(43, 377);
this.TopScriptsFilter.Location = new System.Drawing.Point(42, 374);
this.TopScriptsFilter.Name = "TopScriptsFilter";
this.TopScriptsFilter.Size = new System.Drawing.Size(196, 22);
this.TopScriptsFilter.TabIndex = 6;
@@ -482,7 +762,7 @@
// label2
//
this.label2.AutoSize = true;
this.label2.Location = new System.Drawing.Point(5, 380);
this.label2.Location = new System.Drawing.Point(4, 377);
this.label2.Name = "label2";
this.label2.Size = new System.Drawing.Size(36, 16);
this.label2.TabIndex = 9;
@@ -490,7 +770,7 @@
//
// TopCollidersFilter
//
this.TopCollidersFilter.Location = new System.Drawing.Point(43, 377);
this.TopCollidersFilter.Location = new System.Drawing.Point(42, 374);
this.TopCollidersFilter.Name = "TopCollidersFilter";
this.TopCollidersFilter.Size = new System.Drawing.Size(196, 22);
this.TopCollidersFilter.TabIndex = 8;
@@ -565,91 +845,6 @@
this.TopCollidersPosition.HeaderText = "Position";
this.TopCollidersPosition.Name = "TopCollidersPosition";
//
// BatchRestartTab
//
this.BatchRestartTab.Controls.Add(this.label3);
this.BatchRestartTab.Controls.Add(this.RegionRestartDelayBox);
this.BatchRestartTab.Controls.Add(this.pictureBox3);
this.BatchRestartTab.Controls.Add(this.BatchRestartButton);
this.BatchRestartTab.Controls.Add(this.BatchRestartGridView);
this.BatchRestartTab.Location = new System.Drawing.Point(4, 25);
this.BatchRestartTab.Name = "BatchRestartTab";
this.BatchRestartTab.Size = new System.Drawing.Size(671, 401);
this.BatchRestartTab.TabIndex = 3;
this.BatchRestartTab.Text = "Batch Restart";
this.BatchRestartTab.UseVisualStyleBackColor = true;
//
// label3
//
this.label3.AutoSize = true;
this.label3.Font = new System.Drawing.Font("Palatino Linotype", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.label3.Location = new System.Drawing.Point(183, 378);
this.label3.Name = "label3";
this.label3.Size = new System.Drawing.Size(77, 16);
this.label3.TabIndex = 13;
this.label3.Text = "Restart Delay:";
//
// RegionRestartDelayBox
//
this.RegionRestartDelayBox.Location = new System.Drawing.Point(266, 375);
this.RegionRestartDelayBox.Name = "RegionRestartDelayBox";
this.RegionRestartDelayBox.Size = new System.Drawing.Size(72, 22);
this.RegionRestartDelayBox.TabIndex = 12;
//
// pictureBox3
//
this.pictureBox3.Cursor = System.Windows.Forms.Cursors.Help;
this.pictureBox3.Image = ((System.Drawing.Image)(resources.GetObject("pictureBox3.Image")));
this.pictureBox3.Location = new System.Drawing.Point(457, 375);
this.pictureBox3.Name = "pictureBox3";
this.pictureBox3.Size = new System.Drawing.Size(20, 20);
this.pictureBox3.TabIndex = 11;
this.pictureBox3.TabStop = false;
this.toolTip1.SetToolTip(this.pictureBox3, resources.GetString("pictureBox3.ToolTip"));
//
// BatchRestartButton
//
this.BatchRestartButton.Location = new System.Drawing.Point(344, 374);
this.BatchRestartButton.Name = "BatchRestartButton";
this.BatchRestartButton.Size = new System.Drawing.Size(107, 23);
this.BatchRestartButton.TabIndex = 1;
this.BatchRestartButton.Text = "Batch Restart";
this.BatchRestartButton.UseVisualStyleBackColor = true;
this.BatchRestartButton.Click += new System.EventHandler(this.RequestBatchRestart);
//
// BatchRestartGridView
//
this.BatchRestartGridView.AllowUserToAddRows = false;
this.BatchRestartGridView.AllowUserToDeleteRows = false;
this.BatchRestartGridView.AllowUserToOrderColumns = true;
this.BatchRestartGridView.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize;
this.BatchRestartGridView.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] {
this.BatchRestartRegionName,
this.BatchRestartPosition});
this.BatchRestartGridView.Font = new System.Drawing.Font("Consolas", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.BatchRestartGridView.Location = new System.Drawing.Point(4, 4);
this.BatchRestartGridView.Name = "BatchRestartGridView";
this.BatchRestartGridView.ReadOnly = true;
this.BatchRestartGridView.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect;
this.BatchRestartGridView.Size = new System.Drawing.Size(663, 364);
this.BatchRestartGridView.TabIndex = 0;
//
// BatchRestartRegionName
//
this.BatchRestartRegionName.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill;
this.BatchRestartRegionName.HeaderText = "Region Name";
this.BatchRestartRegionName.Name = "BatchRestartRegionName";
this.BatchRestartRegionName.ReadOnly = true;
this.BatchRestartRegionName.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.Programmatic;
//
// BatchRestartPosition
//
this.BatchRestartPosition.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill;
this.BatchRestartPosition.HeaderText = "Position";
this.BatchRestartPosition.Name = "BatchRestartPosition";
this.BatchRestartPosition.ReadOnly = true;
this.BatchRestartPosition.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.Programmatic;
//
// statusStrip1
//
this.statusStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
@@ -794,6 +989,120 @@
this.toolTip1.InitialDelay = 500;
this.toolTip1.ReshowDelay = 100;
//
// RegionToolsTab
//
this.RegionToolsTab.Controls.Add(this.groupBox11);
this.RegionToolsTab.Location = new System.Drawing.Point(4, 25);
this.RegionToolsTab.Name = "RegionToolsTab";
this.RegionToolsTab.Size = new System.Drawing.Size(671, 401);
this.RegionToolsTab.TabIndex = 6;
this.RegionToolsTab.Text = "Region Tools";
this.RegionToolsTab.UseVisualStyleBackColor = true;
//
// groupBox11
//
this.groupBox11.Controls.Add(this.groupBox13);
this.groupBox11.Controls.Add(this.EstateTerrainDownloadUploadGroup);
this.groupBox11.Location = new System.Drawing.Point(3, 3);
this.groupBox11.Name = "groupBox11";
this.groupBox11.Size = new System.Drawing.Size(213, 172);
this.groupBox11.TabIndex = 0;
this.groupBox11.TabStop = false;
this.groupBox11.Text = "Terrain";
//
// button4
//
this.button4.Location = new System.Drawing.Point(47, 20);
this.button4.Name = "button4";
this.button4.Size = new System.Drawing.Size(121, 23);
this.button4.TabIndex = 0;
this.button4.Text = "Download Terrain...";
this.button4.UseVisualStyleBackColor = true;
//
// RipTerrainButton
//
this.RipTerrainButton.Location = new System.Drawing.Point(73, 21);
this.RipTerrainButton.Name = "RipTerrainButton";
this.RipTerrainButton.Size = new System.Drawing.Size(94, 23);
this.RipTerrainButton.TabIndex = 1;
this.RipTerrainButton.Text = "Rip Terrain...";
this.RipTerrainButton.UseVisualStyleBackColor = true;
this.RipTerrainButton.Click += new System.EventHandler(this.RequestRipTerrain);
//
// button7
//
this.button7.Location = new System.Drawing.Point(66, 49);
this.button7.Name = "button7";
this.button7.Size = new System.Drawing.Size(102, 23);
this.button7.TabIndex = 2;
this.button7.Text = "Upload Terrain...";
this.button7.UseVisualStyleBackColor = true;
//
// pictureBox4
//
this.pictureBox4.Cursor = System.Windows.Forms.Cursors.Help;
this.pictureBox4.Image = ((System.Drawing.Image)(resources.GetObject("pictureBox4.Image")));
this.pictureBox4.Location = new System.Drawing.Point(174, 21);
this.pictureBox4.Name = "pictureBox4";
this.pictureBox4.Size = new System.Drawing.Size(20, 20);
this.pictureBox4.TabIndex = 12;
this.pictureBox4.TabStop = false;
this.toolTip1.SetToolTip(this.pictureBox4, "This option downloads the current region\r\nterrain given estate rights.");
//
// pictureBox5
//
this.pictureBox5.Cursor = System.Windows.Forms.Cursors.Help;
this.pictureBox5.Image = ((System.Drawing.Image)(resources.GetObject("pictureBox5.Image")));
this.pictureBox5.Location = new System.Drawing.Point(173, 22);
this.pictureBox5.Name = "pictureBox5";
this.pictureBox5.Size = new System.Drawing.Size(20, 20);
this.pictureBox5.TabIndex = 12;
this.pictureBox5.TabStop = false;
this.toolTip1.SetToolTip(this.pictureBox5, resources.GetString("pictureBox5.ToolTip"));
//
// pictureBox7
//
this.pictureBox7.Cursor = System.Windows.Forms.Cursors.Help;
this.pictureBox7.Image = ((System.Drawing.Image)(resources.GetObject("pictureBox7.Image")));
this.pictureBox7.Location = new System.Drawing.Point(174, 50);
this.pictureBox7.Name = "pictureBox7";
this.pictureBox7.Size = new System.Drawing.Size(20, 20);
this.pictureBox7.TabIndex = 12;
this.pictureBox7.TabStop = false;
this.toolTip1.SetToolTip(this.pictureBox7, "This option uploads a terrain height-map\r\nto the current region and applies it.");
//
// LoadTerrainFileDialog
//
this.LoadTerrainFileDialog.FileName = "openFileDialog1";
//
// SaveTerrainFileDialog
//
this.SaveTerrainFileDialog.Filter = "PNG (*.png)|*.png|All files (*.*)|*.*";
//
// EstateTerrainDownloadUploadGroup
//
this.EstateTerrainDownloadUploadGroup.Controls.Add(this.button4);
this.EstateTerrainDownloadUploadGroup.Controls.Add(this.pictureBox7);
this.EstateTerrainDownloadUploadGroup.Controls.Add(this.pictureBox4);
this.EstateTerrainDownloadUploadGroup.Controls.Add(this.button7);
this.EstateTerrainDownloadUploadGroup.Location = new System.Drawing.Point(6, 21);
this.EstateTerrainDownloadUploadGroup.Name = "EstateTerrainDownloadUploadGroup";
this.EstateTerrainDownloadUploadGroup.Size = new System.Drawing.Size(200, 83);
this.EstateTerrainDownloadUploadGroup.TabIndex = 13;
this.EstateTerrainDownloadUploadGroup.TabStop = false;
this.EstateTerrainDownloadUploadGroup.Text = "Estate";
//
// groupBox13
//
this.groupBox13.Controls.Add(this.RipTerrainButton);
this.groupBox13.Controls.Add(this.pictureBox5);
this.groupBox13.Location = new System.Drawing.Point(7, 111);
this.groupBox13.Name = "groupBox13";
this.groupBox13.Size = new System.Drawing.Size(200, 56);
this.groupBox13.TabIndex = 14;
this.groupBox13.TabStop = false;
this.groupBox13.Text = "Override";
//
// Vassal
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
@@ -835,6 +1144,17 @@
this.groupBox3.PerformLayout();
this.groupBox2.ResumeLayout(false);
this.groupBox2.PerformLayout();
this.RegionsStateTab.ResumeLayout(false);
((System.ComponentModel.ISupportInitialize)(this.RegionsStateGridView)).EndInit();
this.ResidentListTab.ResumeLayout(false);
this.ResidentListTab.PerformLayout();
this.ResidentListBanGroup.ResumeLayout(false);
this.ResidentListBanGroup.PerformLayout();
((System.ComponentModel.ISupportInitialize)(this.ResidentListGridView)).EndInit();
this.BatchRestartTab.ResumeLayout(false);
this.BatchRestartTab.PerformLayout();
((System.ComponentModel.ISupportInitialize)(this.pictureBox3)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.BatchRestartGridView)).EndInit();
this.TopScriptsTab.ResumeLayout(false);
this.TopScriptsTab.PerformLayout();
((System.ComponentModel.ISupportInitialize)(this.TopScriptsGridView)).EndInit();
@@ -841,10 +1161,6 @@
this.TopCollidersTab.ResumeLayout(false);
this.TopCollidersTab.PerformLayout();
((System.ComponentModel.ISupportInitialize)(this.TopCollidersGridView)).EndInit();
this.BatchRestartTab.ResumeLayout(false);
this.BatchRestartTab.PerformLayout();
((System.ComponentModel.ISupportInitialize)(this.pictureBox3)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.BatchRestartGridView)).EndInit();
this.statusStrip1.ResumeLayout(false);
this.statusStrip1.PerformLayout();
this.RegionTeleportGroup.ResumeLayout(false);
@@ -851,6 +1167,13 @@
((System.ComponentModel.ISupportInitialize)(this.pictureBox6)).EndInit();
this.groupBox1.ResumeLayout(false);
((System.ComponentModel.ISupportInitialize)(this.pictureBox2)).EndInit();
this.RegionToolsTab.ResumeLayout(false);
this.groupBox11.ResumeLayout(false);
((System.ComponentModel.ISupportInitialize)(this.pictureBox4)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.pictureBox5)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.pictureBox7)).EndInit();
this.EstateTerrainDownloadUploadGroup.ResumeLayout(false);
this.groupBox13.ResumeLayout(false);
this.ResumeLayout(false);
this.PerformLayout();
 
@@ -859,7 +1182,7 @@
#endregion
 
private PictureBox pictureBox1;
private TabControl Tabs;
public TabControl Tabs;
private TabPage OverviewTab;
private StatusStrip statusStrip1;
private ToolStripProgressBar StatusProgress;
@@ -869,7 +1192,7 @@
public ComboBox LoadedRegions;
private Label CurrentRegionName;
private Label CurrentRegionAt;
private PictureBox RegionAvatarsMap;
public PictureBox RegionAvatarsMap;
private Button button1;
private GroupBox groupBox2;
private Label Agents;
@@ -924,6 +1247,33 @@
private PictureBox pictureBox3;
private Label label3;
public TextBox RegionRestartDelayBox;
private TabPage ResidentListTab;
private DataGridView ResidentListGridView;
private DataGridViewTextBoxColumn ResidentListName;
private DataGridViewTextBoxColumn ResidentListUUID;
private DataGridViewTextBoxColumn ResidentListPosition;
private Button ResidentBanButton;
private Label label4;
private TextBox ResidentListFilter;
private GroupBox ResidentListBanGroup;
private CheckBox ResidentBanAllEstatesBox;
private TabPage RegionsStateTab;
public DataGridView RegionsStateGridView;
private DataGridViewTextBoxColumn RegionsStateRegionName;
private DataGridViewTextBoxColumn RegionsStateLastState;
private DataGridViewTextBoxColumn RegionsStateLastCheck;
private TabPage RegionToolsTab;
private GroupBox groupBox11;
private PictureBox pictureBox7;
private PictureBox pictureBox5;
private PictureBox pictureBox4;
private Button button7;
private Button RipTerrainButton;
private Button button4;
private OpenFileDialog LoadTerrainFileDialog;
private SaveFileDialog SaveTerrainFileDialog;
private GroupBox groupBox13;
private GroupBox EstateTerrainDownloadUploadGroup;
}
}
 
/Vassal/Vassal/VassalForm.cs
@@ -10,9 +10,11 @@
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Drawing.Imaging;
using System.IO;
using System.Linq;
using System.Net;
using System.Net.Sockets;
using System.Reflection;
using System.Text;
using System.Text.RegularExpressions;
@@ -29,15 +31,211 @@
public partial class Vassal : Form
{
public static System.Timers.Timer overviewTabTimer = new Timer(TimeSpan.FromSeconds(1).TotalMilliseconds);
public static System.Timers.Timer residentListTimer = new Timer(TimeSpan.FromSeconds(1).TotalMilliseconds);
public static System.Timers.Timer topScriptsTabTimer = new Timer(TimeSpan.FromSeconds(1).TotalMilliseconds);
public static System.Timers.Timer topCollidersTabTimer = new Timer(TimeSpan.FromSeconds(1).TotalMilliseconds);
public static System.Timers.Timer regionsStateTabTimer = new Timer(TimeSpan.FromSeconds(1).TotalMilliseconds);
public static volatile int regionsStateCheckIndex = 0;
public static VassalConfiguration vassalConfiguration = new VassalConfiguration();
public static Vassal vassalForm;
public static readonly object ClientInstanceTeleportLock = new object();
public static readonly object RegionsStateCheckLock = new object();
 
/// <summary>
/// Linden constants.
/// </summary>
public struct LINDEN_CONSTANTS
{
public struct ALERTS
{
public const string NO_ROOM_TO_SIT_HERE = @"No room to sit here, try another spot.";
 
public const string UNABLE_TO_SET_HOME =
@"You can only set your 'Home Location' on your land or at a mainland Infohub.";
 
public const string HOME_SET = @"Home position set.";
}
 
public struct ASSETS
{
public struct NOTECARD
{
public const string NEWLINE = "\n";
public const uint MAXIMUM_BODY_LENTH = 65536;
}
}
 
public struct AVATARS
{
public const uint SET_DISPLAY_NAME_SUCCESS = 200;
public const string LASTNAME_PLACEHOLDER = @"Resident";
public const uint MAXIMUM_DISPLAY_NAME_CHARACTERS = 31;
public const uint MINIMUM_DISPLAY_NAME_CHARACTERS = 1;
public const uint MAXIMUM_NUMBER_OF_ATTACHMENTS = 38;
 
public struct PROFILE
{
public const uint SECOND_LIFE_TEXT_SIZE = 510;
public const uint FIRST_LIFE_TEXT_SIZE = 253;
}
 
public struct PICKS
{
public const uint MAXIMUM_PICKS = 10;
public const uint MAXIMUM_PICK_DESCRIPTION_SIZE = 1022;
}
 
public struct CLASSIFIEDS
{
public const uint MAXIMUM_CLASSIFIEDS = 100;
}
}
 
public struct PRIMITIVES
{
public const uint MAXIMUM_NAME_SIZE = 63;
public const uint MAXIMUM_DESCRIPTION_SIZE = 127;
public const double MAXIMUM_REZ_HEIGHT = 4096.0;
public const double MINIMUM_SIZE_X = 0.01;
public const double MINIMUM_SIZE_Y = 0.01;
public const double MINIMUM_SIZE_Z = 0.01;
public const double MAXIMUM_SIZE_X = 64.0;
public const double MAXIMUM_SIZE_Y = 64.0;
public const double MAXIMUM_SIZE_Z = 64.0;
}
 
public struct OBJECTS
{
public const uint MAXIMUM_PRIMITIVE_COUNT = 256;
}
 
public struct DIRECTORY
{
public struct EVENT
{
public const uint SEARCH_RESULTS_COUNT = 200;
}
 
public struct GROUP
{
public const uint SEARCH_RESULTS_COUNT = 100;
}
 
public struct LAND
{
public const uint SEARCH_RESULTS_COUNT = 100;
}
 
public struct PEOPLE
{
public const uint SEARCH_RESULTS_COUNT = 100;
}
}
 
public struct ESTATE
{
public const uint REGION_RESTART_DELAY = 120;
public const uint MAXIMUM_BAN_LIST_LENGTH = 500;
public const uint MAXIMUM_GROUP_LIST_LENGTH = 63;
public const uint MAXIMUM_USER_LIST_LENGTH = 500;
public const uint MAXIMUM_MANAGER_LIST_LENGTH = 10;
 
public struct MESSAGES
{
public const string REGION_RESTART_MESSAGE = @"restart";
}
}
 
public struct PARCELS
{
public const double MAXIMUM_AUTO_RETURN_TIME = 999999;
public const uint MINIMUM_AUTO_RETURN_TIME = 0;
public const uint MAXIMUM_NAME_LENGTH = 63;
public const uint MAXIMUM_DESCRIPTION_LENGTH = 255;
}
 
public struct GRID
{
public const string SECOND_LIFE = @"Second Life";
public const string TIME_ZONE = @"Pacific Standard Time";
}
 
public struct CHAT
{
public const uint MAXIMUM_MESSAGE_LENGTH = 1024;
}
 
public struct GROUPS
{
public const uint MAXIMUM_NUMBER_OF_ROLES = 10;
public const string EVERYONE_ROLE_NAME = @"Everyone";
public const uint MAXIMUM_GROUP_NAME_LENGTH = 35;
public const uint MAXIMUM_GROUP_TITLE_LENGTH = 20;
}
 
public struct NOTICES
{
public const uint MAXIMUM_NOTICE_MESSAGE_LENGTH = 512;
}
 
public struct LSL
{
public const string CSV_DELIMITER = @", ";
public const float SENSOR_RANGE = 96;
public const string DATE_TIME_STAMP = @"yyy-MM-ddTHH:mm:ss.ffffffZ";
}
 
public struct REGION
{
public const float TELEPORT_MINIMUM_DISTANCE = 1;
public const float DEFAULT_AGENT_LIMIT = 40;
public const float DEFAULT_OBJECT_BONUS = 1;
public const bool DEFAULT_FIXED_SUN = false;
public const float DEFAULT_TERRAIN_LOWER_LIMIT = -4;
public const float DEFAULT_TERRAIN_RAISE_LIMIT = 4;
public const bool DEFAULT_USE_ESTATE_SUN = true;
public const float DEFAULT_WATER_HEIGHT = 20;
public const float SUNRISE = 6;
}
 
public struct VIEWER
{
public const float MAXIMUM_DRAW_DISTANCE = 4096;
}
 
public struct TELEPORTS
{
public struct THROTTLE
{
public const uint MAX_TELEPORTS = 10;
public const uint GRACE_SECONDS = 15;
}
}
}
 
///////////////////////////////////////////////////////////////////////////
// Copyright (C) Wizardry and Steamworks 2015 - License: GNU GPLv3 //
///////////////////////////////////////////////////////////////////////////
private static double wasMapValueToRange(double value, double xMin, double xMax, double yMin, double yMax)
{
return yMin + (
(
yMax - yMin
)
*
(
value - xMin
)
/
(
xMax - xMin
)
);
}
 
///////////////////////////////////////////////////////////////////////////
// Copyright (C) Wizardry and Steamworks 2015 - License: GNU GPLv3 //
///////////////////////////////////////////////////////////////////////////
/// <summary>RFC1738 URL Escapes a string</summary>
/// <param name="data">a string to escape</param>
/// <returns>an RFC1738 escaped string</returns>
@@ -980,7 +1178,7 @@
{
case true:
selectedRegionName = listViewItem.Text;
selectedRegionPosition = (Vector3)listViewItem.Tag;
selectedRegionPosition = (Vector3) listViewItem.Tag;
startTeleport = true;
break;
default:
@@ -990,10 +1188,10 @@
}));
 
if (!startTeleport) return;
 
 
// Announce teleport.
vassalForm.Invoke((MethodInvoker)(() =>
vassalForm.Invoke((MethodInvoker) (() =>
{
vassalForm.RegionTeleportGroup.Enabled = false;
vassalForm.StatusProgress.Value = 0;
@@ -1078,7 +1276,7 @@
finally
{
Monitor.Exit(ClientInstanceTeleportLock);
vassalForm.Invoke((MethodInvoker) (() =>
vassalForm.BeginInvoke((MethodInvoker) (() =>
{
vassalForm.StatusProgress.Value = 100;
vassalForm.RegionTeleportGroup.Enabled = true;
@@ -1097,6 +1295,8 @@
}));
break;
}
// Clear the resident list table.
ResidentListGridView.Rows.Clear();
// Clear the top scripts table.
TopScriptsGridView.Rows.Clear();
// Clear the top colliders table.
@@ -1122,8 +1322,8 @@
Objects.Enabled = false;
}));
}
}).Start();
 
})
{IsBackground = true}.Start();
}
 
private void SettingsRequested(object sender, EventArgs e)
@@ -1140,6 +1340,7 @@
// Disable estate manager tabs since we will enable these dynamically.
TopScriptsTab.Enabled = false;
TopCollidersTab.Enabled = false;
ResidentListBanGroup.Enabled = false;
 
// Get the configuration file settings if it exists.
if (File.Exists(VASSAL_CONSTANTS.VASSAL_CONFIGURATION_FILE))
@@ -1150,6 +1351,40 @@
RegionRestartDelayBox.Text = vassalConfiguration.RegionRestartDelay.ToString(Utils.EnUsCulture);
}
 
// Spawn a thread to check Corrade's connection status.
new Thread(() =>
{
TcpClient tcpClient = new TcpClient();
try
{
System.Uri uri = new System.Uri(vassalConfiguration.HTTPServerURL);
tcpClient.Connect(uri.Host, uri.Port);
// port open
vassalForm.BeginInvoke((MethodInvoker) (() => { Tabs.Enabled = true; }));
// set the loading spinner
Assembly thisAssembly = System.Reflection.Assembly.GetExecutingAssembly();
System.IO.Stream file =
thisAssembly.GetManifestResourceStream("Vassal.img.loading.gif");
switch (file != null)
{
case true:
vassalForm.BeginInvoke((MethodInvoker) (() =>
{
RegionAvatarsMap.SizeMode = PictureBoxSizeMode.CenterImage;
RegionAvatarsMap.Image = Image.FromStream(file);
RegionAvatarsMap.Refresh();
}));
break;
}
}
catch (Exception)
{
// port closed
vassalForm.BeginInvoke((MethodInvoker) (() => { Tabs.Enabled = false; }));
}
})
{IsBackground = true}.Start();
 
// Get all the regions if they exist.
if (File.Exists(VASSAL_CONSTANTS.VASSAL_REGIONS))
{
@@ -1174,24 +1409,13 @@
{
BatchRestartGridView.Rows.Add(data.Key, data.Value.ToString());
}
// Populate the regions state grid view.
foreach (KeyValuePair<string, Vector3> data in ConfiguredRegions)
{
RegionsStateGridView.Rows.Add(data.Key, "Check pening...");
}
}
 
// Set the map image to the loading spinner.
Assembly thisAssembly = System.Reflection.Assembly.GetExecutingAssembly();
System.IO.Stream file =
thisAssembly.GetManifestResourceStream("Vassal.img.loading.gif");
switch (file != null)
{
case true:
vassalForm.Invoke((MethodInvoker) (() =>
{
RegionAvatarsMap.SizeMode = PictureBoxSizeMode.CenterImage;
RegionAvatarsMap.Image = Image.FromStream(file);
RegionAvatarsMap.Refresh();
}));
break;
}
 
// Start the overview timer.
overviewTabTimer.Elapsed += (o, p) =>
{
@@ -1200,12 +1424,7 @@
 
try
{
// Do not do anything in case the tab is not selected.
vassalForm.Invoke((MethodInvoker) (() =>
{
if (!Tabs.SelectedTab.Equals(OverviewTab))
throw new Exception();
}));
// Always run the overview regardless which tab is active.
 
// Get the statistics.
string result = wasPOST(vassalConfiguration.HTTPServerURL,
@@ -1240,7 +1459,7 @@
if (data.Count.Equals(0))
throw new Exception();
 
vassalForm.Invoke((MethodInvoker) (() =>
vassalForm.BeginInvoke((MethodInvoker) (() =>
{
// Drop access to features if we are not estate managers.
bool isEstateManager;
@@ -1251,10 +1470,12 @@
case true: // we are an estate manager
TopScriptsTab.Enabled = true;
TopCollidersTab.Enabled = true;
ResidentListBanGroup.Enabled = true;
break;
default:
TopScriptsTab.Enabled = false;
TopCollidersTab.Enabled = false;
ResidentListBanGroup.Enabled = false;
break;
}
 
@@ -1355,7 +1576,7 @@
}
mapGraphics.DrawImage(mapImage, new Point(0, 0));
 
vassalForm.Invoke((MethodInvoker) (() =>
vassalForm.BeginInvoke((MethodInvoker) (() =>
{
RegionAvatarsMap.SizeMode = PictureBoxSizeMode.StretchImage;
RegionAvatarsMap.Image = mapImage;
@@ -1374,21 +1595,113 @@
};
overviewTabTimer.Start();
 
// Start the top scores timer.
topScriptsTabTimer.Elapsed += (o, p) =>
regionsStateTabTimer.Elapsed += (o, p) =>
{
if (!Monitor.TryEnter(ClientInstanceTeleportLock))
// Do not do anything in case the tab is not selected.
bool run = false;
vassalForm.Invoke((MethodInvoker) (() =>
{
run = Tabs.SelectedTab.Equals(RegionsStateTab);
}));
if (!run) return;
 
if (!Monitor.TryEnter(RegionsStateCheckLock))
return;
 
try
{
// Do not do anything in case the tab is not selected.
string regionName = string.Empty;
vassalForm.Invoke((MethodInvoker) (() =>
{
if (!Tabs.SelectedTab.Equals(TopScriptsTab))
throw new Exception();
regionName =
RegionsStateGridView.Rows[regionsStateCheckIndex].Cells["RegionsStateRegionName"].Value
.ToString();
}));
 
if (string.IsNullOrEmpty(regionName))
throw new Exception();
 
// Get the region status.
string result = wasPOST(vassalConfiguration.HTTPServerURL,
wasKeyValueEscape(new Dictionary<string, string>
{
{"command", "getgridregiondata"},
{"group", vassalConfiguration.Group},
{"password", vassalConfiguration.Password},
{"region", regionName},
{"data", "Access"}
}), vassalConfiguration.DataTimeout);
 
bool success;
if (string.IsNullOrEmpty(result) ||
!bool.TryParse(wasInput(wasKeyValueGet("success", result)), out success))
throw new Exception();
 
List<string> data = wasCSVToEnumerable(wasInput(wasKeyValueGet("data", result))).ToList();
if (!data.Count.Equals(2))
throw new Exception();
 
string status = data.Last();
vassalForm.Invoke((MethodInvoker) (() =>
{
switch (status)
{
case "Unknown":
case "Down":
case "NonExistent":
RegionsStateGridView.Rows[regionsStateCheckIndex].DefaultCellStyle.BackColor =
Color.LightPink;
RegionsStateGridView.Rows[regionsStateCheckIndex].Cells["RegionsStateLastState"].Value =
status;
break;
default:
RegionsStateGridView.Rows[regionsStateCheckIndex].DefaultCellStyle.BackColor =
Color.LightGreen;
RegionsStateGridView.Rows[regionsStateCheckIndex].Cells["RegionsStateLastState"].Value =
"Up";
break;
}
RegionsStateGridView.Rows[regionsStateCheckIndex].Cells["RegionsStateLastCheck"].Value = DateTime
.Now.ToUniversalTime()
.ToString(Vassal.LINDEN_CONSTANTS.LSL.DATE_TIME_STAMP);
 
}));
}
catch (Exception)
{
 
}
finally
{
Monitor.Exit(RegionsStateCheckLock);
++regionsStateCheckIndex;
vassalForm.Invoke((MethodInvoker) (() =>
{
if (regionsStateCheckIndex >= RegionsStateGridView.Rows.Count)
{
regionsStateCheckIndex = 0;
}
}));
}
};
regionsStateTabTimer.Start();
 
// Start the top scores timer.
topScriptsTabTimer.Elapsed += (o, p) =>
{
// Do not do anything in case the tab is not selected.
bool run = false;
vassalForm.Invoke((MethodInvoker) (() =>
{
run = Tabs.SelectedTab.Equals(TopScriptsTab);
}));
if (!run) return;
 
if (!Monitor.TryEnter(ClientInstanceTeleportLock))
return;
 
try
{
// Get the statistics.
string result = wasPOST(vassalConfiguration.HTTPServerURL,
wasKeyValueEscape(new Dictionary<string, string>
@@ -1463,18 +1776,19 @@
// Start the top colliders timer.
topCollidersTabTimer.Elapsed += (o, p) =>
{
// Do not do anything in case the tab is not selected.
bool run = false;
vassalForm.Invoke((MethodInvoker) (() =>
{
run = Tabs.SelectedTab.Equals(TopCollidersTab);
}));
if (!run) return;
 
if (!Monitor.TryEnter(ClientInstanceTeleportLock))
return;
 
try
{
// Do not do anything in case the tab is not selected.
vassalForm.Invoke((MethodInvoker) (() =>
{
if (!Tabs.SelectedTab.Equals(TopCollidersTab))
throw new Exception();
}));
 
// Get the statistics.
string result = wasPOST(vassalConfiguration.HTTPServerURL,
wasKeyValueEscape(new Dictionary<string, string>
@@ -1528,7 +1842,8 @@
row.Cells["TopCollidersPosition"].Value = dataComponents[4];
break;
case false: // the row dosn't exist, so add it.
TopCollidersGridView.Rows.Add(dataComponents[0], dataComponents[1], dataComponents[2],
TopCollidersGridView.Rows.Add(dataComponents[0], dataComponents[1],
dataComponents[2],
dataComponents[3], dataComponents[4]);
break;
}
@@ -1546,6 +1861,92 @@
}
};
topCollidersTabTimer.Start();
 
// Start the resident list timer.
residentListTimer.Elapsed += (o, p) =>
{
// Do not do anything in case the tab is not selected.
bool run = false;
vassalForm.Invoke((MethodInvoker) (() =>
{
run = Tabs.SelectedTab.Equals(ResidentListTab);
}));
if (!run) return;
 
if (!Monitor.TryEnter(ClientInstanceTeleportLock))
return;
 
try
{
// Get the avatar positions.
string result = wasPOST(vassalConfiguration.HTTPServerURL,
wasKeyValueEscape(new Dictionary<string, string>
{
{"command", "getavatarpositions"},
{"group", vassalConfiguration.Group},
{"password", vassalConfiguration.Password},
{"entity", "region"}
}), vassalConfiguration.DataTimeout);
 
bool success;
if (string.IsNullOrEmpty(result) ||
!bool.TryParse(wasInput(wasKeyValueGet("success", result)), out success))
throw new Exception();
 
HashSet<List<string>> data =
new HashSet<List<string>>(wasCSVToEnumerable(wasInput(wasKeyValueGet("data", result)))
.Select((x, i) => new {Index = i, Value = x})
.GroupBy(x => x.Index/3)
.Select(x => x.Select(v => v.Value).ToList()));
if (data.Count.Equals(0))
throw new Exception();
 
vassalForm.Invoke((MethodInvoker) (() =>
{
// Remove rows that are not in the data update.
foreach (
int index in
ResidentListGridView.Rows.AsParallel().Cast<DataGridViewRow>()
.Where(
residentListRow =>
!data.Any(q => q[1].Equals(residentListRow.Cells["ResidentListUUID"].Value)))
.Select(q => q.Index))
{
ResidentListGridView.Rows.RemoveAt(index);
}
// Now update or add new data.
foreach (List<string> dataComponents in data.Where(q => q.Count.Equals(3)))
{
DataGridViewRow row =
ResidentListGridView.Rows.AsParallel()
.Cast<DataGridViewRow>()
.FirstOrDefault(q => q.Cells["ResidentListUUID"].Value.Equals(dataComponents[1]));
switch (row != null)
{
case true: // the row exists, so update it.
row.Cells["ResidentListName"].Value = dataComponents[0];
row.Cells["ResidentListUUID"].Value = dataComponents[1];
row.Cells["ResidentListPosition"].Value = dataComponents[2];
break;
case false: // the row dosn't exist, so add it.
ResidentListGridView.Rows.Add(dataComponents[0], dataComponents[1],
dataComponents[2]);
break;
}
}
 
}));
}
catch (Exception)
{
 
}
finally
{
Monitor.Exit(ClientInstanceTeleportLock);
}
};
residentListTimer.Start();
}
 
private void RequestedEditRegions(object sender, EventArgs e)
@@ -1602,7 +2003,7 @@
}
}));
})
{IsBackground = true, Priority = ThreadPriority.Normal}.Start();
{IsBackground = true}.Start();
break;
}
}));
@@ -1649,7 +2050,7 @@
}
}));
})
{IsBackground = true, Priority = ThreadPriority.Normal}.Start();
{IsBackground = true}.Start();
break;
}
}));
@@ -1685,7 +2086,7 @@
 
private void RequestFilterTopColliders(object sender, EventArgs e)
{
vassalForm.BeginInvoke((MethodInvoker)(() =>
vassalForm.BeginInvoke((MethodInvoker) (() =>
{
Regex topCollidersRowRegex;
switch (!string.IsNullOrEmpty(TopScriptsFilter.Text))
@@ -1697,7 +2098,8 @@
topCollidersRowRegex = new Regex(@".+?", RegexOptions.Compiled);
break;
}
foreach (DataGridViewRow topCollidersRow in TopCollidersGridView.Rows.AsParallel().Cast<DataGridViewRow>())
foreach (
DataGridViewRow topCollidersRow in TopCollidersGridView.Rows.AsParallel().Cast<DataGridViewRow>())
{
topCollidersRow.Visible =
topCollidersRowRegex.IsMatch(topCollidersRow.Cells["TopCollidersScore"].Value.ToString()) ||
@@ -1742,7 +2144,7 @@
// If no rows were selected, enable teleports, the return button and return.
if (returnUUIDs.Count.Equals(0))
{
vassalForm.Invoke((MethodInvoker)(() =>
vassalForm.Invoke((MethodInvoker) (() =>
{
vassalForm.ReturnTopScriptsButton.Enabled = true;
RegionTeleportGroup.Enabled = true;
@@ -1776,7 +2178,7 @@
{
currentRegionName = CurrentRegionName.Text;
}));
 
// Teleport to the object.
string result = wasPOST(vassalConfiguration.HTTPServerURL,
wasKeyValueEscape(new Dictionary<string, string>
@@ -1791,7 +2193,7 @@
 
if (string.IsNullOrEmpty(result))
{
vassalForm.Invoke((MethodInvoker)(() =>
vassalForm.Invoke((MethodInvoker) (() =>
{
vassalForm.StatusText.Text = @"Error communicating with Corrade.";
}));
@@ -1806,7 +2208,7 @@
{"group", vassalConfiguration.Group},
{"password", vassalConfiguration.Password},
{"item", objectData.Key.ToString()},
{"range", "32" }, // maximal prim size = 64 - middle bounding box at half
{"range", "32"}, // maximal prim size = 64 - middle bounding box at half
{"type", "ReturnToOwner"}
}), vassalConfiguration.DataTimeout);
 
@@ -1836,11 +2238,11 @@
{
vassalForm.StatusText.Text = @"Returned object: " + objectData.Key.ToString();
// Remove the row from the grid view.
DataGridViewRow row =
TopScriptsGridView.Rows.AsParallel()
.Cast<DataGridViewRow>()
.FirstOrDefault(
o => o.Cells["TopScriptsUUID"].Value.Equals(objectData.Key.ToString()));
DataGridViewRow row =
TopScriptsGridView.Rows.AsParallel()
.Cast<DataGridViewRow>()
.FirstOrDefault(
o => o.Cells["TopScriptsUUID"].Value.Equals(objectData.Key.ToString()));
if (row == null) return;
int i = row.Index;
TopScriptsGridView.Rows.RemoveAt(i);
@@ -1870,7 +2272,7 @@
}
catch (Exception ex)
{
vassalForm.Invoke((MethodInvoker)(() =>
vassalForm.Invoke((MethodInvoker) (() =>
{
vassalForm.StatusText.Text = @"Unexpected error: " + ex.Message;
}));
@@ -1879,7 +2281,7 @@
{
Monitor.Exit(ClientInstanceTeleportLock);
// Allow teleports and enable button.
vassalForm.BeginInvoke((MethodInvoker)(() =>
vassalForm.BeginInvoke((MethodInvoker) (() =>
{
vassalForm.ReturnTopScriptsButton.Enabled = true;
RegionTeleportGroup.Enabled = true;
@@ -1892,7 +2294,7 @@
private void RequestReturnTopCollidersObjects(object sender, EventArgs e)
{
// Block teleports and disable button.
vassalForm.Invoke((MethodInvoker)(() =>
vassalForm.Invoke((MethodInvoker) (() =>
{
vassalForm.ReturnTopCollidersButton.Enabled = false;
RegionTeleportGroup.Enabled = false;
@@ -1899,8 +2301,8 @@
}));
 
// Enqueue all the UUIDs to return.
Queue<KeyValuePair<UUID, Vector3>> returnUUIDs = new Queue<KeyValuePair<UUID, Vector3>>();
vassalForm.Invoke((MethodInvoker)(() =>
Queue<KeyValuePair<UUID, Vector3>> returnObjectUUIDQueue = new Queue<KeyValuePair<UUID, Vector3>>();
vassalForm.Invoke((MethodInvoker) (() =>
{
foreach (
DataGridViewRow topCollidersRow in
@@ -1911,16 +2313,17 @@
Vector3 objectPosition;
UUID returnUUID;
if (!UUID.TryParse(topCollidersRow.Cells["TopCollidersUUID"].Value.ToString(), out returnUUID) ||
!Vector3.TryParse(topCollidersRow.Cells["TopCollidersPosition"].Value.ToString(), out objectPosition))
!Vector3.TryParse(topCollidersRow.Cells["TopCollidersPosition"].Value.ToString(),
out objectPosition))
continue;
returnUUIDs.Enqueue(new KeyValuePair<UUID, Vector3>(returnUUID, objectPosition));
returnObjectUUIDQueue.Enqueue(new KeyValuePair<UUID, Vector3>(returnUUID, objectPosition));
}
}));
 
// If no rows were selected, enable teleports, the return button and return.
if (returnUUIDs.Count.Equals(0))
if (returnObjectUUIDQueue.Count.Equals(0))
{
vassalForm.Invoke((MethodInvoker)(() =>
vassalForm.Invoke((MethodInvoker) (() =>
{
vassalForm.ReturnTopCollidersButton.Enabled = true;
RegionTeleportGroup.Enabled = true;
@@ -1934,23 +2337,23 @@
 
try
{
vassalForm.Invoke((MethodInvoker)(() =>
vassalForm.Invoke((MethodInvoker) (() =>
{
vassalForm.StatusProgress.Value = 0;
}));
int totalObjects = returnUUIDs.Count;
int totalObjects = returnObjectUUIDQueue.Count;
do
{
// Dequeue the first object.
KeyValuePair<UUID, Vector3> objectData = returnUUIDs.Dequeue();
KeyValuePair<UUID, Vector3> objectData = returnObjectUUIDQueue.Dequeue();
 
vassalForm.Invoke((MethodInvoker)(() =>
vassalForm.Invoke((MethodInvoker) (() =>
{
vassalForm.StatusText.Text = @"Returning UUID: " + objectData.Key.ToString();
}));
 
string currentRegionName = string.Empty;
vassalForm.Invoke((MethodInvoker)(() =>
vassalForm.Invoke((MethodInvoker) (() =>
{
currentRegionName = CurrentRegionName.Text;
}));
@@ -1969,7 +2372,7 @@
 
if (string.IsNullOrEmpty(result))
{
vassalForm.Invoke((MethodInvoker)(() =>
vassalForm.Invoke((MethodInvoker) (() =>
{
vassalForm.StatusText.Text = @"Error communicating with Corrade.";
}));
@@ -1984,13 +2387,13 @@
{"group", vassalConfiguration.Group},
{"password", vassalConfiguration.Password},
{"item", objectData.Key.ToString()},
{"range", "32" }, // maximal prim size = 64 - middle bounding box at half
{"range", "32"}, // maximal prim size = 64 - middle bounding box at half
{"type", "ReturnToOwner"}
}), vassalConfiguration.DataTimeout);
 
if (string.IsNullOrEmpty(result))
{
vassalForm.Invoke((MethodInvoker)(() =>
vassalForm.Invoke((MethodInvoker) (() =>
{
vassalForm.StatusText.Text = @"Error communicating with Corrade.";
}));
@@ -2000,7 +2403,7 @@
bool success;
if (!bool.TryParse(wasInput(wasKeyValueGet("success", result)), out success))
{
vassalForm.Invoke((MethodInvoker)(() =>
vassalForm.Invoke((MethodInvoker) (() =>
{
vassalForm.StatusText.Text = @"No success status could be retrieved. ";
}));
@@ -2010,15 +2413,15 @@
switch (success)
{
case true:
vassalForm.Invoke((MethodInvoker)(() =>
vassalForm.Invoke((MethodInvoker) (() =>
{
vassalForm.StatusText.Text = @"Returned object: " + objectData.Key.ToString();
// Remove the row from the grid view.
DataGridViewRow row =
TopCollidersGridView.Rows.AsParallel()
.Cast<DataGridViewRow>()
.FirstOrDefault(
o => o.Cells["TopCollidersUUID"].Value.Equals(objectData.Key.ToString()));
TopCollidersGridView.Rows.AsParallel()
.Cast<DataGridViewRow>()
.FirstOrDefault(
o => o.Cells["TopCollidersUUID"].Value.Equals(objectData.Key.ToString()));
if (row == null) return;
int i = row.Index;
TopCollidersGridView.Rows.RemoveAt(i);
@@ -2025,7 +2428,7 @@
}));
break;
case false:
vassalForm.Invoke((MethodInvoker)(() =>
vassalForm.Invoke((MethodInvoker) (() =>
{
vassalForm.StatusText.Text = @"Could not return object " + objectData.Key.ToString() +
@": " +
@@ -2034,14 +2437,14 @@
break;
}
 
vassalForm.Invoke((MethodInvoker)(() =>
vassalForm.Invoke((MethodInvoker) (() =>
{
vassalForm.StatusProgress.Value =
Math.Min((int)(Math.Abs(returnUUIDs.Count - totalObjects) /
(double)totalObjects), 100);
Math.Min((int) (Math.Abs(returnObjectUUIDQueue.Count - totalObjects)/
(double) totalObjects), 100);
}));
} while (!returnUUIDs.Count.Equals(0));
vassalForm.Invoke((MethodInvoker)(() =>
} while (!returnObjectUUIDQueue.Count.Equals(0));
vassalForm.Invoke((MethodInvoker) (() =>
{
vassalForm.StatusProgress.Value = 100;
}));
@@ -2048,7 +2451,7 @@
}
catch (Exception ex)
{
vassalForm.Invoke((MethodInvoker)(() =>
vassalForm.Invoke((MethodInvoker) (() =>
{
vassalForm.StatusText.Text = @"Unexpected error: " + ex.Message;
}));
@@ -2057,7 +2460,7 @@
{
Monitor.Exit(ClientInstanceTeleportLock);
// Allow teleports and enable button.
vassalForm.BeginInvoke((MethodInvoker)(() =>
vassalForm.BeginInvoke((MethodInvoker) (() =>
{
vassalForm.ReturnTopScriptsButton.Enabled = true;
RegionTeleportGroup.Enabled = true;
@@ -2064,12 +2467,539 @@
}));
}
})
{ IsBackground = true }.Start();
{IsBackground = true}.Start();
}
 
private void RequestBatchRestart(object sender, EventArgs e)
{
// Block teleports and disable button.
vassalForm.Invoke((MethodInvoker) (() =>
{
vassalForm.BatchRestartButton.Enabled = false;
RegionTeleportGroup.Enabled = false;
}));
 
// Enqueue all the regions to restart.
Queue<KeyValuePair<string, Vector3>> restartRegionQueue = new Queue<KeyValuePair<string, Vector3>>();
vassalForm.Invoke((MethodInvoker) (() =>
{
foreach (
DataGridViewRow topCollidersRow in
BatchRestartGridView.Rows.AsParallel()
.Cast<DataGridViewRow>()
.Where(o => o.Selected || o.Cells.Cast<DataGridViewCell>().Any(p => p.Selected)))
{
Vector3 objectPosition;
string regionName = topCollidersRow.Cells["BatchRestartRegionName"].Value.ToString();
if (string.IsNullOrEmpty(regionName) ||
!Vector3.TryParse(topCollidersRow.Cells["BatchRestartPosition"].Value.ToString(),
out objectPosition))
continue;
restartRegionQueue.Enqueue(new KeyValuePair<string, Vector3>(regionName, objectPosition));
}
}));
 
// If no rows were selected, enable teleports, the return button and return.
if (restartRegionQueue.Count.Equals(0))
{
vassalForm.Invoke((MethodInvoker) (() =>
{
vassalForm.BatchRestartButton.Enabled = true;
RegionTeleportGroup.Enabled = true;
}));
return;
}
 
new Thread(() =>
{
Monitor.Enter(ClientInstanceTeleportLock);
 
try
{
do
{
// Dequeue the first object.
KeyValuePair<string, Vector3> restartRegionData = restartRegionQueue.Dequeue();
DataGridViewRow currentDataGridViewRow = null;
vassalForm.Invoke((MethodInvoker) (() =>
{
currentDataGridViewRow = vassalForm.BatchRestartGridView.Rows.AsParallel()
.Cast<DataGridViewRow>()
.FirstOrDefault(
o =>
o.Cells["BatchRestartRegionName"].Value.ToString()
.Equals(restartRegionData.Key, StringComparison.OrdinalIgnoreCase) &&
o.Cells["BatchRestartPosition"].Value.ToString()
.Equals(restartRegionData.Value.ToString(),
StringComparison.OrdinalIgnoreCase));
}));
 
if (currentDataGridViewRow == null) continue;
 
try
{
bool success = false;
string result;
 
// Retry to teleport to each region a few times.
int teleportRetries = 3;
do
{
vassalForm.Invoke((MethodInvoker) (() =>
{
vassalForm.StatusText.Text = @"Attempting to teleport to " + restartRegionData.Key +
@" " + @"(" +
teleportRetries.ToString(Utils.EnUsCulture) +
@")";
}));
 
// Teleport to the region.
result = wasPOST(vassalConfiguration.HTTPServerURL,
wasKeyValueEscape(new Dictionary<string, string>
{
{"command", "teleport"},
{"group", vassalConfiguration.Group},
{"password", vassalConfiguration.Password},
{"position", restartRegionData.Value.ToString()},
{"region", restartRegionData.Key},
{"fly", "True"}
}), vassalConfiguration.DataTimeout);
 
if (string.IsNullOrEmpty(result))
{
vassalForm.Invoke((MethodInvoker) (() =>
{
vassalForm.StatusText.Text = @"Error communicating with Corrade.";
}));
continue;
}
if (!bool.TryParse(wasInput(wasKeyValueGet("success", result)), out success))
{
vassalForm.Invoke((MethodInvoker) (() =>
{
vassalForm.StatusText.Text = @"No success status could be retrieved. ";
}));
continue;
}
switch (success)
{
case true:
vassalForm.Invoke((MethodInvoker) (() =>
{
vassalForm.StatusText.Text = @"Teleport succeeded.";
}));
Thread.Sleep(TimeSpan.FromSeconds(1).Milliseconds);
break;
default:
// In case the destination is to close (Corrade status code 37559),
// then we are on the same region so no need to retry.
uint status; //37559
switch (
uint.TryParse(wasInput(wasKeyValueGet("status", result)), out status) &&
status.Equals(37559))
{
case true: // We are on the region already!
success = true;
break;
default:
vassalForm.Invoke((MethodInvoker) (() =>
{
vassalForm.StatusText.Text = @"Teleport failed.";
}));
Thread.Sleep(10000);
break;
}
break;
}
} while (!success && !(--teleportRetries).Equals(0));
 
if (!success)
throw new Exception("Failed to teleport to region.");
 
result = wasPOST(vassalConfiguration.HTTPServerURL,
wasKeyValueEscape(new Dictionary<string, string>
{
{"command", "getregiondata"},
{"group", vassalConfiguration.Group},
{"password", vassalConfiguration.Password},
{"data", "IsEstateManager"}
}), vassalConfiguration.DataTimeout);
 
if (string.IsNullOrEmpty(result))
throw new Exception("Error communicating with Corrade.");
 
if (!bool.TryParse(wasInput(wasKeyValueGet("success", result)), out success))
throw new Exception("No success status could be retrieved.");
 
if (!success)
throw new Exception("Could not retrieve estate rights.");
 
List<string> data = wasCSVToEnumerable(wasInput(wasKeyValueGet("data", result))).ToList();
if (!data.Count.Equals(2))
throw new Exception("Could not retrieve estate rights.");
 
bool isEstateManager;
switch (
bool.TryParse(data[data.IndexOf("IsEstateManager") + 1], out isEstateManager) &&
isEstateManager)
{
case true: // we are an estate manager
result = wasPOST(vassalConfiguration.HTTPServerURL,
wasKeyValueEscape(new Dictionary<string, string>
{
{"command", "restartregion"},
{"group", vassalConfiguration.Group},
{"password", vassalConfiguration.Password},
{"action", "restart"},
{
"delay", vassalConfiguration.RegionRestartDelay.ToString(Utils.EnUsCulture)
}
}), vassalConfiguration.DataTimeout);
 
if (string.IsNullOrEmpty(result))
throw new Exception("Error communicating with Corrade.");
 
if (!bool.TryParse(wasInput(wasKeyValueGet("success", result)), out success))
throw new Exception("No success status could be retrieved.");
 
if (!success)
throw new Exception("Could not schedule a region restart.");
 
vassalForm.Invoke((MethodInvoker) (() =>
{
vassalForm.StatusText.Text = @"Region scheduled for restart.";
currentDataGridViewRow.Selected = false;
currentDataGridViewRow.DefaultCellStyle.BackColor = Color.LightGreen;
foreach (
DataGridViewCell cell in
currentDataGridViewRow.Cells.AsParallel().Cast<DataGridViewCell>())
{
cell.ToolTipText = @"Region scheduled for restart.";
}
}));
break;
default:
throw new Exception("No estate manager rights for region restart.");
}
}
catch (Exception ex)
{
vassalForm.Invoke((MethodInvoker) (() =>
{
vassalForm.StatusText.Text = ex.Message;
currentDataGridViewRow.Selected = false;
currentDataGridViewRow.DefaultCellStyle.BackColor = Color.LightPink;
foreach (
DataGridViewCell cell in
currentDataGridViewRow.Cells.AsParallel().Cast<DataGridViewCell>())
{
cell.ToolTipText = ex.Message;
}
}));
}
} while (!restartRegionQueue.Count.Equals(0));
}
catch (Exception)
{
 
}
finally
{
Monitor.Exit(ClientInstanceTeleportLock);
// Allow teleports and enable button.
vassalForm.BeginInvoke((MethodInvoker) (() =>
{
vassalForm.BatchRestartButton.Enabled = true;
RegionTeleportGroup.Enabled = true;
}));
}
})
{IsBackground = true}.Start();
 
}
 
private void RequestFilterResidentList(object sender, EventArgs e)
{
vassalForm.BeginInvoke((MethodInvoker) (() =>
{
Regex residentListRowRegex;
switch (!string.IsNullOrEmpty(ResidentListFilter.Text))
{
case true:
residentListRowRegex = new Regex(ResidentListFilter.Text, RegexOptions.Compiled);
break;
default:
residentListRowRegex = new Regex(@".+?", RegexOptions.Compiled);
break;
}
foreach (
DataGridViewRow residentListRow in ResidentListGridView.Rows.AsParallel().Cast<DataGridViewRow>())
{
residentListRow.Visible =
residentListRowRegex.IsMatch(residentListRow.Cells["ResidentListName"].Value.ToString()) ||
residentListRowRegex.IsMatch(
residentListRow.Cells["ResidentListUUID"].Value.ToString()) ||
residentListRowRegex.IsMatch(residentListRow.Cells["ResidentListPosition"].Value.ToString());
}
}));
}
 
private void RequestBanAgents(object sender, EventArgs e)
{
// Block teleports and disable button.
vassalForm.Invoke((MethodInvoker) (() =>
{
ResidentListBanGroup.Enabled = false;
RegionTeleportGroup.Enabled = false;
}));
 
// Enqueue all the regions to restart.
Queue<UUID> agentsQueue = new Queue<UUID>();
vassalForm.Invoke((MethodInvoker) (() =>
{
foreach (
DataGridViewRow residentListRow in
ResidentListGridView.Rows.AsParallel()
.Cast<DataGridViewRow>()
.Where(o => o.Selected || o.Cells.Cast<DataGridViewCell>().Any(p => p.Selected)))
{
UUID agentUUID;
if (!UUID.TryParse(residentListRow.Cells["ResidentListUUID"].Value.ToString(), out agentUUID))
continue;
agentsQueue.Enqueue(agentUUID);
}
}));
 
// If no rows were selected, enable teleports, the return button and return.
if (agentsQueue.Count.Equals(0))
{
vassalForm.Invoke((MethodInvoker) (() =>
{
ResidentListBanGroup.Enabled = true;
RegionTeleportGroup.Enabled = true;
}));
return;
}
 
new Thread(() =>
{
Monitor.Enter(ClientInstanceTeleportLock);
try
{
do
{
// Dequeue the first object.
UUID agentUUID = agentsQueue.Dequeue();
DataGridViewRow currentDataGridViewRow = null;
vassalForm.Invoke((MethodInvoker) (() =>
{
currentDataGridViewRow = vassalForm.ResidentListGridView.Rows.AsParallel()
.Cast<DataGridViewRow>()
.FirstOrDefault(
o =>
o.Cells["ResidentListUUID"].Value.ToString()
.Equals(agentUUID.ToString(), StringComparison.OrdinalIgnoreCase));
}));
 
if (currentDataGridViewRow == null) continue;
 
try
{
bool alsoBan = false;
vassalForm.Invoke((MethodInvoker) (() =>
{
alsoBan = vassalForm.ResidentBanAllEstatesBox.Checked;
}));
 
// Teleport to the region.
string result = wasPOST(vassalConfiguration.HTTPServerURL,
wasKeyValueEscape(new Dictionary<string, string>
{
{"command", "setestatelist"},
{"group", vassalConfiguration.Group},
{"password", vassalConfiguration.Password},
{"type", "ban"},
{"action", "add"},
{"agent", agentUUID.ToString()},
{"all", alsoBan.ToString()}
}), vassalConfiguration.DataTimeout);
 
if (string.IsNullOrEmpty(result))
throw new Exception("Error communicating with Corrade.");
 
bool success;
if (!bool.TryParse(wasInput(wasKeyValueGet("success", result)), out success))
throw new Exception("No success status could be retrieved.");
 
switch (success)
{
case true:
vassalForm.Invoke((MethodInvoker) (() =>
{
vassalForm.StatusText.Text = @"Resident banned.";
currentDataGridViewRow.Selected = false;
currentDataGridViewRow.DefaultCellStyle.BackColor = Color.LightGreen;
foreach (
DataGridViewCell cell in
currentDataGridViewRow.Cells.AsParallel().Cast<DataGridViewCell>())
{
cell.ToolTipText = @"Resident banned.";
}
}));
break;
default:
throw new Exception("Unable to ban resident.");
}
}
catch (Exception ex)
{
vassalForm.Invoke((MethodInvoker) (() =>
{
vassalForm.StatusText.Text = ex.Message;
currentDataGridViewRow.Selected = false;
currentDataGridViewRow.DefaultCellStyle.BackColor = Color.LightPink;
foreach (
DataGridViewCell cell in
currentDataGridViewRow.Cells.AsParallel().Cast<DataGridViewCell>())
{
cell.ToolTipText = ex.Message;
}
}));
}
 
} while (agentsQueue.Count.Equals(0));
}
catch (Exception)
{
 
}
finally
{
Monitor.Exit(ClientInstanceTeleportLock);
// Allow teleports and enable button.
vassalForm.BeginInvoke((MethodInvoker) (() =>
{
ResidentListBanGroup.Enabled = true;
RegionTeleportGroup.Enabled = true;
}));
}
})
{IsBackground = true}.Start();
}
 
private void RequestRipTerrain(object sender, EventArgs e)
{
// Block teleports and disable button.
vassalForm.Invoke((MethodInvoker) (() =>
{
RegionTeleportGroup.Enabled = false;
RipTerrainButton.Enabled = false;
}));
 
new Thread(() =>
{
Monitor.Enter(ClientInstanceTeleportLock);
 
try
{
// Get the statistics.
string result = wasPOST(vassalConfiguration.HTTPServerURL,
wasKeyValueEscape(new Dictionary<string, string>
{
{"command", "getterrainheight"},
{"group", vassalConfiguration.Group},
{"password", vassalConfiguration.Password},
{"entity", "region"}
}), vassalConfiguration.DataTimeout);
 
if (string.IsNullOrEmpty(result))
throw new Exception("Error communicating with Corrade.");
 
bool success;
if (!bool.TryParse(wasInput(wasKeyValueGet("success", result)), out success))
throw new Exception("No success status could be retrieved.");
 
if (!success)
throw new Exception("Could not get terrain heights.");
 
List<double> heights = new List<double>();
foreach (string map in wasCSVToEnumerable(wasInput(wasKeyValueGet("data", result))))
{
double height;
if (!double.TryParse(map, out height))
continue;
heights.Add(height);
}
if (heights.Count.Equals(0))
throw new Exception("Could not get terrain heights.");
 
double maxHeight = heights.Max();
using (Bitmap bitmap = new Bitmap(256, 256))
{
foreach (int x in Enumerable.Range(1, 255))
{
foreach (int y in Enumerable.Range(1, 255))
{
bitmap.SetPixel(x, 256 - y,
Color.FromArgb((int) wasMapValueToRange(heights[256*x + y], 0, maxHeight, 0, 255), 0, 0));
}
}
Bitmap closureBitmap = (Bitmap)bitmap.Clone();
vassalForm.BeginInvoke((MethodInvoker) (() =>
{
switch (vassalForm.SaveTerrainFileDialog.ShowDialog())
{
case DialogResult.OK:
string file = vassalForm.SaveTerrainFileDialog.FileName;
new Thread(() =>
{
vassalForm.BeginInvoke((MethodInvoker) (() =>
{
try
{
vassalForm.StatusText.Text = @"saving terrain...";
vassalForm.StatusProgress.Value = 0;
 
closureBitmap.Save(file, ImageFormat.Png);
 
vassalForm.StatusText.Text = @"terrain saved";
vassalForm.StatusProgress.Value = 100;
}
catch (Exception ex)
{
vassalForm.StatusText.Text = ex.Message;
}
finally
{
closureBitmap.Dispose();
}
}));
})
{IsBackground = true, Priority = ThreadPriority.Normal}.Start();
break;
}
}));
}
}
catch (Exception ex)
{
vassalForm.BeginInvoke((MethodInvoker)(() =>
{
StatusText.Text = ex.Message;
}));
}
finally
{
Monitor.Exit(ClientInstanceTeleportLock);
vassalForm.BeginInvoke((MethodInvoker)(() =>
{
RegionTeleportGroup.Enabled = true;
RipTerrainButton.Enabled = true;
}));
}
 
}) {IsBackground = true}.Start();
}
}
}
/Vassal/Vassal/VassalForm.resx
@@ -5833,36 +5833,42 @@
SUVORK5CYII=
</value>
</data>
<metadata name="TopScriptsScore.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<metadata name="RegionsStateRegionName.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="TopScriptsTaskName.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<metadata name="RegionsStateLastState.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="TopScriptsUUID.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<metadata name="RegionsStateLastCheck.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="TopScriptsOwner.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<metadata name="RegionsStateRegionName.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="TopScriptsPosition.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<metadata name="RegionsStateLastState.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="TopCollidersScore.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<metadata name="RegionsStateLastCheck.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="TopCollidersTaskName.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<metadata name="ResidentListName.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="TopCollidersUUID.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<metadata name="ResidentListUUID.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="TopCollidersOwner.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<metadata name="ResidentListPosition.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="TopCollidersPosition.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<metadata name="ResidentListName.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="ResidentListUUID.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="ResidentListPosition.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="toolTip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>277, 17</value>
</metadata>
@@ -5933,6 +5939,72 @@
<metadata name="BatchRestartPosition.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="BatchRestartRegionName.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="BatchRestartPosition.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="TopScriptsScore.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="TopScriptsTaskName.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="TopScriptsUUID.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="TopScriptsOwner.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="TopScriptsPosition.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="TopScriptsScore.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="TopScriptsTaskName.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="TopScriptsUUID.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="TopScriptsOwner.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="TopScriptsPosition.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="TopCollidersScore.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="TopCollidersTaskName.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="TopCollidersUUID.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="TopCollidersOwner.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="TopCollidersPosition.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="TopCollidersScore.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="TopCollidersTaskName.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="TopCollidersUUID.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="TopCollidersOwner.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="TopCollidersPosition.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="statusStrip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
@@ -6057,6 +6129,182 @@
<metadata name="toolTip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>277, 17</value>
</metadata>
<data name="pictureBox4.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
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
</value>
</data>
<data name="pictureBox5.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
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
</value>
</data>
<data name="pictureBox5.ToolTip" xml:space="preserve">
<value>Sometimes region leasers do not allow
people that rent to either upload or
download their own terrain. This option
will rip the terrain by making Corrade
scan the height of the terrain and
generate a downloadable height-map.</value>
</data>
<data name="pictureBox7.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
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
</value>
</data>
<metadata name="LoadTerrainFileDialog.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>374, 17</value>
</metadata>
<metadata name="SaveTerrainFileDialog.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>544, 17</value>
</metadata>
<data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
AAABAAYAAAAAAAEAIADVHwEAZgAAAICAAAABACAAKAgBADsgAQBAQAAAAQAgAChCAABjKAIAMDAAAAEA