diff --git a/ShiftOS.WinForms/ShiftOS.WinForms.csproj b/ShiftOS.WinForms/ShiftOS.WinForms.csproj index 432a417..65c658f 100644 --- a/ShiftOS.WinForms/ShiftOS.WinForms.csproj +++ b/ShiftOS.WinForms/ShiftOS.WinForms.csproj @@ -476,6 +476,7 @@ + diff --git a/ShiftOS.WinForms/Viruses/ConsoleGarble.cs b/ShiftOS.WinForms/Viruses/ConsoleGarble.cs new file mode 100644 index 0000000..2b83846 --- /dev/null +++ b/ShiftOS.WinForms/Viruses/ConsoleGarble.cs @@ -0,0 +1,50 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using ShiftOS.Engine; +using System.Windows.Forms; + +namespace ShiftOS.WinForms.Viruses +{ + [Virus("console_garble", "Console Garbler", "Sends random characters to stdout which can muck up your Terminal. The threatlevel determines the rate at which characters are sent.")] + public class ConsoleGarble : IVirus + { + Timer timer = null; + Random rnd = null; + + public void Disinfect() + { + timer.Stop(); + timer = null; + rnd = null; + } + + public void Infect(int threatlevel) + { + rnd = new Random(); + timer = new Timer(); + timer.Interval = 6000 / threatlevel; + timer.Tick += (o, a) => + { + var oldFG = ConsoleEx.ForegroundColor; + var oldBG = ConsoleEx.BackgroundColor; + var character = (char)rnd.Next(255); + while (!char.IsLetterOrDigit(character)) + character = (char)rnd.Next(255); + var ccolormax = Enum.GetValues(typeof(ConsoleColor)).Cast().Max(); + + ConsoleEx.BackgroundColor = (ConsoleColor)rnd.Next(ccolormax); + ConsoleEx.ForegroundColor = (ConsoleColor)rnd.Next(ccolormax); + + Console.Write(character); + ConsoleEx.OnFlush?.Invoke(); + + ConsoleEx.BackgroundColor = oldBG; + ConsoleEx.ForegroundColor = oldFG; + }; + timer.Start(); + } + } +} diff --git a/ShiftOS_TheReturn/VirusManager.cs b/ShiftOS_TheReturn/VirusManager.cs index f4a7fc6..31152cc 100644 --- a/ShiftOS_TheReturn/VirusManager.cs +++ b/ShiftOS_TheReturn/VirusManager.cs @@ -50,6 +50,11 @@ namespace ShiftOS.Engine { infection.ThreatLevel = threatlevel; } + else + { + return; + //no need to reinfect with a lower threatlevel + } } else {