Helpers all added as singletons

Helpers all added as singletons

--- Source/MVC6/Boilerplate.AspNetCore.Sample/Startup.cs
+++ Source/MVC6/Boilerplate.AspNetCore.Sample/Startup.cs
@@ -97,11 +97,11 @@
                         ConfigureRouting(x);
                     })
                 // Add useful interface for accessing the ActionContext outside a controller.
-                .AddScoped<IActionContextAccessor, ActionContextAccessor>()
+                .AddSingleton<IActionContextAccessor, ActionContextAccessor>()
                 // Add useful interface for accessing the HttpContext outside a controller.
-                .AddScoped<IHttpContextAccessor, HttpContextAccessor>()
+                .AddSingleton<IHttpContextAccessor, HttpContextAccessor>()
                 // Add useful interface for accessing the IUrlHelper outside a controller.
-                .AddScoped<IUrlHelper>(x => x
+                .AddSingleton<IUrlHelper>(x => x
                     .GetRequiredService<IUrlHelperFactory>()
                     .GetUrlHelper(x.GetRequiredService<IActionContextAccessor>().ActionContext))
                 // Add many MVC services to the services container.


- Updated debugger framework

- Updated debugger framework

--- Source/Mosa.Utility.DebugEngine/DebugServerEngine.cs
+++ Source/Mosa.Utility.DebugEngine/DebugServerEngine.cs
@@ -25,8 +25,21 @@

 		private NamedPipeClientStream pipeClient;

-		public object receiver;
-		public SenderMesseageDelegate receiverMethod;
+		private object receiver;
+		private SenderMesseageDelegate receiverMethod;
+
+		public void ThreadStart()
+		{
+			while (true)
+			{
+				using (pipeClient = new NamedPipeClientStream(".", @"MOSA", PipeDirection.InOut))
+				{
+					PostResponse(0, Codes.Connecting, null);
+					pipeClient.Connect();
+					ReceiveLoop();
+				}
+			}
+		}

 		public void SetMirrorReceiver(object receiver, SenderMesseageDelegate receiverMethod)
 		{
@@ -47,6 +60,25 @@
 			ProcessCommandQueue(); // HACK
 		}

+		public void ProcessCommandQueue()
+		{
+			while (true)
+			{
+				lock (sync)
+				{
+					if (!pipeClient.IsConnected)
+						return;
+
+					if (commands.Count == 0)
+						return;
+
+					DebugMessage message = commands.Dequeue();
+
+					SendCommandMessage(message);
+				}
+			}
+		}
+
 		private void SendByte(int b)
 		{
 			pipeClient.WriteByte((byte)b);
@@ -68,37 +100,23 @@
 			SendByte('A');
 		}

-		public void ProcessCommandQueue()
-		{
-			while (true)
-			{
-				lock (sync)
-				{
-					if (!pipeClient.IsConnected)
-						return;
-
-					if (commands.Count == 0)
-						return;
-
-					DebugMessage message = commands.Dequeue();
-
-					SendMagic();
-					SendInteger(message.ID);
-					SendInteger(message.Code);
-					if (message.CommandData == null)
-					{
-						SendInteger(0);
-						SendInteger(message.Checksum);
-					}
-					else
-					{
-						SendInteger(message.CommandData.Length);
-						SendInteger(message.Checksum);
-						foreach (var b in message.CommandData)
-							SendByte(b);
-					}
-
-				}
+		private void SendCommandMessage(DebugMessage message)
+		{
+
+			SendMagic();
+			SendInteger(message.ID);
+			SendInteger(message.Code);
+			if (message.CommandData == null)
+			{
+				SendInteger(0);
+				SendInteger(message.Checksum);
+			}
+			else
+			{
+				SendInteger(message.CommandData.Length);
+				SendInteger(message.Checksum);
+				foreach (var b in message.CommandData)
+					SendByte(b);
 			}
 		}

@@ -221,19 +239,5 @@
 			PostResponse(0, Codes.Disconnected, null);
 		}

-		public void ThreadStart()
-		{
-			while (true)
-			{
-				using (pipeClient = new NamedPipeClientStream(".", @"MOSA", PipeDirection.InOut))
-				{
-					PostResponse(0, Codes.Connecting, null);
-					pipeClient.Connect();
-
-					ReceiveLoop();
-				}
-			}
-		}
-
 	}
 }


Call ResolveKeyed expression with explicit type (#55)

--- Source/Totem/Runtime/Map/Timeline/KeyedDependency.cs
+++ Source/Totem/Runtime/Map/Timeline/KeyedDependency.cs
@@ -1,4 +1,4 @@
-using System;
+using System;
 using System.Collections.Generic;
 using System.Linq;
 using System.Linq.Expressions;
@@ -22,7 +22,7 @@
 		{
 			// dependencies.ResolveKeyed<T>(Key)

-			return Expression.Call(dependencies, "ResolveKeyed", new[] { Parameter.ParameterType }, Expression.Constant(Key));
+			return Expression.Call(dependencies, "ResolveKeyed", new[] { Parameter.ParameterType }, Expression.Constant(Key, typeof(object)));
 		}
 	}
 }


Set Sintrom alarm at 12 pm

Set Sintrom alarm at 12 pm

--- TFG.Droid/Fragments/Sintrom/SintromHeaderFragment.cs
+++ TFG.Droid/Fragments/Sintrom/SintromHeaderFragment.cs
@@ -27,12 +27,18 @@

         public override void OnCreate(Bundle savedInstanceState) {
             base.OnCreate(savedInstanceState);
+
+            //Set alarm at 12 pm
+            int dayOffset = DateTime.UtcNow.ToLocalTime().Hour < 12 ? 0 : 1;
+            var time =
+                (long)
+                DateTime.UtcNow.Date.ToLocalTime()
+                    .AddDays(dayOffset)
+                    .AddHours(12)
+                    .Subtract(DateTime.UtcNow.ToLocalTime())
+                    .TotalMilliseconds;

-            Calendar calendar = Calendar.Instance;
-            calendar.TimeInMillis = DateTime.Now.Ticks/TimeSpan.TicksPerMillisecond;
-            calendar.Set(CalendarField.HourOfDay, 12);
-
-            NotificationsUtils.ScheduleNotification(Activity, HealthModuleType.Sintrom.HealthModuleId(), 10000);
+            NotificationsUtils.ScheduleNotification(Activity, HealthModuleType.Sintrom.HealthModuleId(), time);
         }


Update TSQLNumericLiteral.cs

Update TSQLNumericLiteral.cs

Add CultureInfo("en-US") to TSQLNumericLiteral

--- TSQL_Parser/TSQL_Parser/Tokens/TSQLNumericLiteral.cs
+++ TSQL_Parser/TSQL_Parser/Tokens/TSQLNumericLiteral.cs
@@ -16,7 +16,7 @@
 			// https://docs.microsoft.com/en-us/sql/t-sql/data-types/decimal-and-numeric-transact-sql
 			// can be up to max size of decimal, which is 38 places of precision.

-			Value = Double.Parse(Text, NumberStyles.Any);
+			Value = Double.Parse(Text, NumberStyles.Any, new CultureInfo("en-US"));
 		}

 #pragma warning disable 1591


Rename leveling test

Rename leveling test

--- Tests/MatterControl.AutomationTests/PrintingTests.cs
+++ Tests/MatterControl.AutomationTests/PrintingTests.cs
@@ -82,8 +82,9 @@
 		}

 		[Test, Category("Emulator")]
-		public async Task PulseRequiresLevelingAndLevelingWorks()
-		{
+		public async Task PulseLevelingTest()
+		{
+			// Validates the Pulse profile requires leveling and it works as expected
 			await MatterControlUtilities.RunTest((testRunner) =>
 			{
 				AutomationRunner.TimeToMoveMouse = .2;
@@ -150,7 +151,7 @@
 					// now modify the leveling data manually and assert that it is applied when printing
 					testRunner.SwitchToControlsTab();
 					testRunner.ClickByName("Edit Leveling Data Button");
-					for(int i=0; i<3; i++)
+					for (int i = 0; i < 3; i++)
 					{
 						var name = $"z Position {i}";
 						testRunner.ClickByName(name);
@@ -252,7 +253,7 @@
 				"ok",
 				"N2 M114*37",
 				"X:0.00 Y: 0.00 Z: 0.00 E: 0.00 Count X: 0.00 Y: 0.00 Z: 0.00",
-				 "ok",
+				"ok",
 			};

 			SimulatePrint(test1);
@@ -437,7 +438,7 @@
 					var width = scrollable.Width;

 					// Workaround needed to scroll to the bottom of the Controls panel
-					//scrollable.ScrollPosition = new Vector2();
+					// scrollable.ScrollPosition = new Vector2();
 					scrollable.ScrollPosition = new Vector2(0, 30);

 					// Workaround to force layout to fix problems with size of Tuning Widgets after setting ScrollPosition manually
@@ -488,7 +489,7 @@
 				}

 				return Task.CompletedTask;
-			}, overrideHeight:900, maxTimeToRun: 120);
+			}, overrideHeight: 900, maxTimeToRun: 120);
 		}

 		[Test, Category("Emulator")]
@@ -531,7 +532,7 @@
 					var width = scrollable.Width;

 					// Workaround needed to scroll to the bottom of the Controls panel
-					//scrollable.ScrollPosition = new Vector2();
+					// scrollable.ScrollPosition = new Vector2();
 					scrollable.ScrollPosition = new Vector2(0, 30);

 					// Workaround to force layout to fix problems with size of Tuning Widgets after setting ScrollPosition manually


refactor usings in importers

refactor usings in importers

--- TravelAgency/TravelAgency.Importers/MySqlImporter.cs
+++ TravelAgency/TravelAgency.Importers/MySqlImporter.cs
@@ -1,11 +1,14 @@
 using System.Collections.Generic;
 using System.Linq;
+
 using Telerik.OpenAccess;
+
 using Newtonsoft.Json;
-using TravelAgency.Readers.Contracts;
+
+using TravelAgency.Common;
 using TravelAgency.MySqlData;
 using TravelAgency.ParseModels;
-using TravelAgency.Common;
+using TravelAgency.Readers.Contracts;

 namespace TravelAgency.Importers
 {


exception now logged.

exception now logged.

--- TwitchPlaysAssembly/Src/Holdables/HoldableHandler.cs
+++ TwitchPlaysAssembly/Src/Holdables/HoldableHandler.cs
@@ -44,9 +44,9 @@
 				{
 					result = processCommand.MoveNext();
 				}
-				catch
+				catch (Exception ex)
 				{
-					DebugHelper.Log("Error Processing command. Invocation will not continue.");
+					DebugHelper.LogException(ex, "Error Processing command due to an exception. Invocation will not continue.:");
 				}
 				switch (processCommand.Current)
 				{


Fix KMSelectable handling on Holdables

Fix KMSelectable handling on Holdables

--- TwitchPlaysAssembly/Src/Holdables/HoldableHandler.cs
+++ TwitchPlaysAssembly/Src/Holdables/HoldableHandler.cs
@@ -68,26 +68,29 @@
 					case KMSelectable kmSelectable when kmSelectable != null:
 						if (heldSelectables.Contains(kmSelectable))
 						{
-							DebugHelper.Log("Ending Interaction");
 							DoInteractionEnd(kmSelectable);
 							heldSelectables.Remove(kmSelectable);
 						}
 						else
 						{
-							DebugHelper.Log("Starting Interaction");
 							DoInteractionStart(kmSelectable);
 							heldSelectables.Add(kmSelectable);
 						}
-						continue;
+						break;

 					case KMSelectable[] kmSelectables:
 						foreach (KMSelectable selectable in kmSelectables)
 						{
-							selectable?.OnInteract?.Invoke();
-							selectable?.OnInteractEnded?.Invoke();
-							yield return new WaitForSeconds(0.1f);
-						}
-						continue;
+							if (selectable != null)
+							{
+								yield return DoInteractionClick(selectable);
+							}
+							else
+							{
+								yield return new WaitForSeconds(0.1f);
+							}
+						}
+						break;

 					case Quaternion quaternion:
 						HoldableCommander.RotateByLocalQuaternion(quaternion);


Fix null exception error on closet control

Now checks if the locker can use the CheckAccess function.


DNN-25943 Duplicate Skin In Use Label After Parsing

--- Website/DesktopModules/Admin/Skins/EditSkins.ascx.cs
+++ Website/DesktopModules/Admin/Skins/EditSkins.ascx.cs
@@ -338,6 +338,8 @@
 					fallbackSkin = IsFallbackContainer(strFolderPath);
 				    pnlMsg = pnlMsgContainers;
 				}
+                pnlMsg.Controls.Clear();
+
 				var strSkinType = strFolderPath.ToLower().IndexOf(Globals.HostMapPath.ToLower()) != -1 ? "G" : "L";

 				var canDeleteSkin = SkinController.CanDeleteSkin(strFolderPath, PortalSettings.HomeDirectoryMapPath);
@@ -358,8 +360,8 @@
                  	var pnl = new Panel {CssClass = "dnnFormMessage dnnFormWarning"};
 				    var lbl = new Label {Text = Localization.GetString(type == "Skin" ? "NoSkin.ErrorMessage" : "NoContainer.ErrorMessage", LocalResourceFile)};
 				    pnl.Controls.Add(lbl);
-                    pnlMsg.Controls.Add(pnl);
-				}
+                    pnlMsg.Controls.Add(pnl);
+                }

 				var strFolder = strFolderPath.Substring(strFolderPath.LastIndexOf("\\") + 1);
 				foreach (var strFile in arrFiles)


#1189 Set displayverb so that game-defined verbs with spaces get added correctly to the automatically generated displayverbs list

--- WorldModel/WorldModel/GameLoader/AttributeLoaders.cs
+++ WorldModel/WorldModel/GameLoader/AttributeLoaders.cs
@@ -278,6 +278,9 @@
             private void LoadVerb(Element element, string attribute, string value)
             {
                 element.Fields.Set(attribute, Utility.ConvertVerbSimplePattern(value, element.Fields[FieldDefinitions.Separator]));
+
+                string[] verbs = value.Split(';');
+                element.Fields[FieldDefinitions.DisplayVerb] = verbs[0].Trim();
             }

             public override bool SupportsMode(LoadMode mode)


Show Pin.Tag when info window clicked

Show Pin.Tag when info window clicked

--- XFGoogleMapSample/XFGoogleMapSample/PinsPage.xaml.cs
+++ XFGoogleMapSample/XFGoogleMapSample/PinsPage.xaml.cs
@@ -24,7 +24,8 @@
                     Label = "Tokyo SKYTREE",
                     Address = "Sumida-ku, Tokyo, Japan",
                     Position = new Position(35.71d, 139.81d),
-                    Rotation = 92.3f
+                    Rotation = 33.3f,
+                    Tag = "id_tokyo"
                 };

                 map.Pins.Add(pinTokyo);
@@ -51,7 +52,8 @@
                     Type = PinType.Place,
                     Label = "Central Park NYC",
                     Address = "New York City, NY 10022",
-                    Position = new Position(40.78d, -73.96d)
+                    Position = new Position(40.78d, -73.96d),
+                    Tag = "id_new_york"
                 };

                 map.Pins.Add(pinNewYork);
@@ -118,7 +120,7 @@
         private void InfoWindow_Clicked(object sender, InfoWindowClickedEventArgs e)
         {
             var time = DateTime.Now.ToString("hh:mm:ss");
-            labelStatus.Text = $"[{time}]InfoWindow Clicked - {e?.Pin?.Label ?? "nothing"}";
+            labelStatus.Text = $"[{time}]InfoWindow Clicked - {e?.Pin?.Tag.ToString() ?? "nothing"}";
         }

         void SelectedPin_Changed(object sender, SelectedPinChangedEventArgs e)
@@ -127,9 +129,9 @@
             labelStatus.Text = $"[{time}]SelectedPin changed - {e?.SelectedPin?.Label ?? "nothing"}";
         }

-        void Map_PinClicked(object sender, PinClickedEventArgs e)
+        async void Map_PinClicked(object sender, PinClickedEventArgs e)
         {
-            DisplayAlert("Pin Clicked", $"{e.Pin.Label} Clicked.", "Close");
+            await DisplayAlert("Pin Clicked", $"{e.Pin.Label} Clicked.", "Close");

             e.Handled = switchHandlePinClicked.IsToggled;


Fix preprocessor for conditionally freezing all ROS thread loops while UnityEditor is paused

--- ROS_Comm/_Init.cs
+++ ROS_Comm/_Init.cs
@@ -712,11 +712,13 @@

             if (started)
             {
+#if FOR_UNITY
                 lock (timeStopper)
                 {
                     if (frozen)
                         timeStopper.Set();
                 }
+#endif
                 started = false;
                 _ok = false;
                 RosOutAppender.Instance.shutdown();


This is what happens when you don't use Visual Studio.

--- Rant/RantUtils.cs
+++ Rant/RantUtils.cs
@@ -4,6 +4,7 @@

 using Rant.Engine;
 using Rant.Engine.Metadata;
+using Rant.Engine.Syntax.Richard;

 namespace Rant
 {


Parameter hint for /fn

Parameter hint for /fn

--- fcfh/Program.cs
+++ fcfh/Program.cs
@@ -601,7 +601,8 @@
 /p            Same as /pass but prompts for a password at runtime.
 /fn         - Use the given file name for the header instead of the
               supplied name. If /s is specified and /fn is not,
-              it will default to text.txt
+              it will default to text.txt. This argument is for
+              encoding only. Decoding uses the 'outfile' argument

 Note: When decoding, the arguments /readable and /header are auto-detected", Tools.ProcessName);
         }


move to inner outline rather than outer outline to optimize seam

issue: MatterHackers/MCCentral#4000
Move to outermost perimeter, then to innermost at start of line

fixed for when support is off

--- fffProcessor.cs
+++ fffProcessor.cs
@@ -294,20 +294,23 @@
 			slicingData.CreateIslandData();

 			supportIslands = new List<LayerIsland>();
-
-			foreach (var region in supportOutlines.Layers)
-			{
-				foreach (Polygons island in region.AllOutlines.ProcessIntoSeparateIslands())
-				{
-					var layerIsland = new LayerIsland()
-					{
-						IslandOutline = island,
-						PathFinder = new PathFinder(island, config.ExtrusionWidth_um * 3 / 2, useInsideCache: config.AvoidCrossingPerimeters),
-					};
-
-					layerIsland.BoundingBox.Calculate(layerIsland.IslandOutline);
-
-					supportIslands.Add(layerIsland);
+
+			if (supportOutlines != null)
+			{
+				foreach (var region in supportOutlines.Layers)
+				{
+					foreach (Polygons island in region.AllOutlines.ProcessIntoSeparateIslands())
+					{
+						var layerIsland = new LayerIsland()
+						{
+							IslandOutline = island,
+							PathFinder = new PathFinder(island, config.ExtrusionWidth_um * 3 / 2, useInsideCache: config.AvoidCrossingPerimeters),
+						};
+
+						layerIsland.BoundingBox.Calculate(layerIsland.IslandOutline);
+
+						supportIslands.Add(layerIsland);
+					}
 				}
 			}

@@ -959,9 +962,10 @@
 										&& insetIndex == island.InsetToolPaths.Count - 1)
 									{
 										var closestInsetStart = FindBestPoint(insetsForThisIsland[0], layerGcodePlanner.LastPosition, layerIndex);
-										if(closestInsetStart.X != long.MinValue)
+										if (closestInsetStart.X != long.MinValue)
 										{
-											layerGcodePlanner.QueueTravel(closestInsetStart);
+											var pointOnInside = insetsForThisIsland[insetsForThisIsland.Count - 1].FindClosestPoint(closestInsetStart).position;
+											layerGcodePlanner.QueueTravel(pointOnInside);
 										}
 									}


Update index.cshtml

Update index.cshtml

--- SITE/index.cshtml
+++ SITE/index.cshtml
@@ -97,6 +97,5 @@
 	{

 	}
-    @chart


add comment

add comment

--- windows/react-native-sqlcipher-storage/SqliteModule.cs
+++ windows/react-native-sqlcipher-storage/SqliteModule.cs
@@ -53,6 +53,14 @@
             statement = s;
         }

+        /*
+            Previously we were calling ugly.sqlite3_finalize(statement) which was causing a crash
+            (either during gc or the finally block in All())
+            sqlite3_stmt implements IDisposable so we should instead be calling statement.Dispose()
+            Note: we may not need to implement IDisposable here, however this passes initial tests and has resoved the crash
+            Issue: https://github.com/axsy-dev/react-app/issues/8637
+            Fixed in https://github.com/axsy-dev/react-native-sqlcipher-storage/pull/41
+        */
         public void Dispose() => statement.Dispose();

         public void Bind(IReadOnlyList<JSValue> p)


npc fix

npc fix

--- Server.Players.cs
+++ Server.Players.cs
@@ -128,6 +128,13 @@
                     return player;
             }

+            for (var i = 0; i < NPCs.Count; i++)
+            {
+                var npc = NPCs[i];
+                if (npc.ID == id)
+                    return npc;
+            }
+
             return null;
         }


Update utility method reading registry keys to get more precise messages about subkey or value when they are missing

--- Sharpmake/Util.cs
+++ Sharpmake/Util.cs
@@ -2022,15 +2022,21 @@
             try
             {
                 using (RegistryKey localMachineKey = Registry.LocalMachine.OpenSubKey(registrySubKey))
-                    key = (localMachineKey != null) ? (string)localMachineKey.GetValue(value) : null;
+                {
+                    if (localMachineKey != null)
+                    {
+                        key = (string)localMachineKey.GetValue(value);
+                        if (string.IsNullOrEmpty(key))
+                            LogWrite("Value '{0}' under registry subKey '{1}' is not set, fallback to default: '{2}'", value ?? "(Default)", registrySubKey, fallbackValue);
+                    }
+                    else
+                        LogWrite("Registry subKey '{0}' is not found, fallback to default for value '{1}': '{2}'", registrySubKey, value ?? "(Default)", fallbackValue);
+                }
             }
             catch { }

             if (string.IsNullOrEmpty(key))
-            {
-                LogWrite("Registry subKey (" + registrySubKey + ") or value under it (" + value + ") is not set, fallback to default: " + fallbackValue);
                 key = fallbackValue;
-            }

             s_registryCache.TryAdd(subKeyValueTuple, key);


adds summary for Factory class

adds summary for Factory class

Former-commit-id: 920ff922fae51dbeb83695240dd8dd5fa9b7f493

--- Sharpy/Factory.cs
+++ Sharpy/Factory.cs
@@ -3,7 +3,7 @@

 namespace Sharpy {
     /// <summary>
-    ///
+    ///      Is responsible for initiating the nescesarry objects to create Generators.
     /// </summary>
     public static class Factory {
         /// <summary>
@@ -27,7 +27,7 @@
             var randomizer = new Randomizer(new Config());
             var iteration = -1;
             return new Generator<T>(() => {
-                iteration ++;
+                iteration++;
                 return func(randomizer, iteration);
             }, randomizer.Config);
         }


Created and tested the GetHighestParent extension.

--- ARGame/Assets/Scripts/Projection/TransformExtensions.cs
+++ ARGame/Assets/Scripts/Projection/TransformExtensions.cs
@@ -117,5 +117,21 @@
             scale.z = new Vector4(matrix.m02, matrix.m12, matrix.m22, matrix.m32).magnitude;
             return scale;
         }
+
+        /// <summary>
+        /// Extracts the highest parent from this transform.
+        /// </summary>
+        /// <param name="t">The transform to extract the parent from.</param>
+        /// <returns>The highest parent.</returns>
+        public static Transform GetHighestParent(this Transform t)
+        {
+            Transform t1 = t;
+            while(t1.parent != null)
+            {
+                t1 = t1.parent;
+            }
+
+            return t1;
+        }
     }
 }


Remove unneeded check

Remove unneeded check

--- AnimatorComponent/Editor/AnimationPathAnimatorEditor.cs
+++ AnimatorComponent/Editor/AnimationPathAnimatorEditor.cs
@@ -1010,14 +1010,6 @@
         private void HandleDrawingSceneToolToggleButtons() {
             if (!Script.DrawNodeButtons) return;
             if (!Script.DrawObjectPath) return;
-
-            // todo this is redundant. Button won't display until at lease one
-            // of those mode is active.
-            if ((Script.HandleMode != HandleMode.Ease)
-                && (Script.HandleMode != HandleMode.Tilting)) {
-
-                return;
-            }

             // Get node positions.
             var nodePositions = Script.GetGlobalNodePositions();


add HFTTimePing message

add HFTTimePing message

--- Assets/HappyFunTimes/HappyFunTimesCore/HFTMessageCmd.cs
+++ Assets/HappyFunTimes/HappyFunTimesCore/HFTMessageCmd.cs
@@ -198,6 +198,14 @@
         public string data;
     }

-
+    public class HFTTimePing
+    {
+        public HFTTimePing() {}
+        public HFTTimePing(double currentTimeInSeconds)
+        {
+            this.time = currentTimeInSeconds;
+        }
+        public double time;
+    }

 }  // namespace HappyFunTimes


strip tag in evidence with regex

strip tag in evidence with regex

--- Assets/Watson/Widgets/Question/Elements/EvidenceItem.cs
+++ Assets/Watson/Widgets/Question/Elements/EvidenceItem.cs
@@ -18,6 +18,7 @@

 using UnityEngine;
 using UnityEngine.UI;
+using System.Text.RegularExpressions;

 namespace IBM.Watson.Widgets.Question
 {
@@ -49,7 +50,8 @@
             if (EvidenceString != "")
             {
                 gameObject.SetActive(true);
-                m_EvidenceText.text = EvidenceString;
+				string StrippedEvidence = Regex.Replace(EvidenceString, "<[^>]*>", "");
+				m_EvidenceText.text = StrippedEvidence;
             }
             else
             {


Bugfixing amount in invoice data, we need to set Satoshis

--- BTCPayServer/Payments/Lightning/Lnd/LndInvoiceClient.cs
+++ BTCPayServer/Payments/Lightning/Lnd/LndInvoiceClient.cs
@@ -106,7 +106,7 @@
             {
                 // TODO: Verify id corresponds to R_hash
                 Id = BitString(resp.R_hash),
-                Amount = resp.Value,
+                Amount = new LightMoney(ConvertInv.ToInt64(resp.Value), LightMoneyUnit.Satoshi),
                 BOLT11 = resp.Payment_request,
                 Status = "unpaid"
             };


Added preemptive strike ability

Added preemptive strike ability

fixes #238

--- CombatDataClasses/AbilityProcessing/BrawlerProcessor.cs
+++ CombatDataClasses/AbilityProcessing/BrawlerProcessor.cs
@@ -44,6 +44,13 @@
                     return true;
                 }
             }
+            else if (abilityName == "Preemptive Strike")
+            {
+                if (combatData.hasCooldown(source.name, "Preemptive Strike"))
+                {
+                    return true;
+                }
+            }
             return false;
         }

@@ -73,6 +80,10 @@
             if (level >= 9)
             {
                 commands.Add(new Command(false, new List<ICommand>(), false, 0, 0, "Sweep", false, 0, false, isDisabled("Sweep", source, combatData)));
+            }
+            if (level >= 11)
+            {
+                commands.Add(new Command(false, new List<ICommand>(), false, 0, 0, "Preemptive Strike", false, 0, false, isDisabled("Preemptive Strike", source, combatData)));
             }

             return commands;
@@ -187,6 +198,40 @@
                         GeneralProcessor.calculateNextAttackTime(source, coefficient);
                         return effects;
                     });
+                case "Preemptive Strike":
+                    return ((FullCombatCharacter source, List<FullCombatCharacter> targets, CombatData combatData) =>
+                    {
+                        if (source.classLevel < 13)
+                        {
+                            return new List<IEffect>();
+                        }
+                        List<IEffect> effects = new List<IEffect>();
+                        float coefficient = 1.0f;
+                        FullCombatCharacter currentTarget = targets[0];
+                        foreach (FullCombatCharacter t in targets)
+                        {
+                            if (currentTarget.nextAttackTime > t.nextAttackTime)
+                            {
+                                currentTarget = t;
+                            }
+                        }
+                        int dmg = (int)((CombatCalculator.getNormalAttackValue(source) * 5 * 1.5f / currentTarget.vitality));
+                        if (currentTarget.inflictDamage(ref dmg) == FullCombatCharacter.HitEffect.Unbalance)
+                        {
+                            coefficient = coefficient * 2;
+                        }
+
+                        effects.Add(new Effect(EffectTypes.DealDamage, currentTarget.combatUniq, string.Empty, dmg));
+                        combatData.cooldowns.Add(new CombatData.Cooldown()
+                        {
+                            character = source.name,
+                            name = "Preemptive Strike",
+                            time = (source.nextAttackTime + 120)
+                        });
+                        effects.Add(new Effect(EffectTypes.Message, 0, source.name + " dealt " + dmg + " damage to " + currentTarget.name + " with a preemptive strike!", 0));
+                        GeneralProcessor.calculateNextAttackTime(source, coefficient);
+                        return effects;
+                    });
                 default:
                     return ((FullCombatCharacter source, List<FullCombatCharacter> target, CombatData combatData) =>
                     {