diff --git a/.gitignore b/.gitignore index 5ce7f30..8a30d25 100644 --- a/.gitignore +++ b/.gitignore @@ -396,4 +396,3 @@ FodyWeavers.xsd # JetBrains Rider *.sln.iml -/TweaksAndThings/Commands/EchoCommand.cs diff --git a/TweaksAndThings.sln b/TweaksAndThings.sln index 3176b51..da34e15 100644 --- a/TweaksAndThings.sln +++ b/TweaksAndThings.sln @@ -5,6 +5,7 @@ VisualStudioVersion = 17.4.33122.133 MinimumVisualStudioVersion = 10.0.40219.1 Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{452A23A6-81C8-49C6-A7EE-95FD9377F896}" ProjectSection(SolutionItems) = preProject + .gitignore = .gitignore Directory.Build.props = Directory.Build.props Directory.Build.targets = Directory.Build.targets Paths.user = Paths.user diff --git a/TweaksAndThings/Commands/CrewUpdateCommand.cs b/TweaksAndThings/Commands/CrewUpdateCommand.cs new file mode 100644 index 0000000..d204df2 --- /dev/null +++ b/TweaksAndThings/Commands/CrewUpdateCommand.cs @@ -0,0 +1,44 @@ +using Game.State; +using Helpers; +using Model.OpsNew; +using Network; +using RMROC451.TweaksAndThings.Extensions; +using System.Linq; +using UI.Console; + +namespace RMROC451.TweaksAndThings.Commands; + +[ConsoleCommand("/cu", "generate a formatted message about a locomotive's status.")] +public class EchoCommand : IConsoleCommand +{ + public string Execute(string[] comps) + { + if (comps.Length < 4) + { + return "Usage: /cu |. +|- "; + } + + string query = comps[1]; + Model.Car car = query == "." ? TrainController.Shared.SelectedLocomotive : TrainController.Shared.CarForString(query); + + if (car.DetermineFuelCar() == null) + { + return "Car not found."; + } + string message = string.Join(" ", comps.Skip(3)).Truncate(512); + + switch (comps[2]) + { + case "+": + break; + case "-": + break; + default: + return "+ to include area or - to leave it out"; + } + + if (comps[2] == "+") message += $" {OpsController.Shared.ClosestArea(car)?.name ?? "???"}"; + Multiplayer.Broadcast($"{StateManager.Shared._playersManager.LocalPlayer} {Hyperlink.To(car)}: \"{message}\""); + return string.Empty; + } +} \ No newline at end of file diff --git a/TweaksAndThings/Extensions/Car_Extensions.cs b/TweaksAndThings/Extensions/Car_Extensions.cs index 6415c92..00e56ea 100644 --- a/TweaksAndThings/Extensions/Car_Extensions.cs +++ b/TweaksAndThings/Extensions/Car_Extensions.cs @@ -24,6 +24,7 @@ namespace RMROC451.TweaksAndThings.Extensions public static Car? DetermineFuelCar(this Car engine, bool returnEngineIfNull = false) { + if (engine == null) return null; Car? car; if (engine is SteamLocomotive steamLocomotive && new Func(steamLocomotive.FuelCar) != null) { diff --git a/TweaksAndThings/TweaksAndThings.cs b/TweaksAndThings/TweaksAndThings.cs index fe59771..b76c517 100644 --- a/TweaksAndThings/TweaksAndThings.cs +++ b/TweaksAndThings/TweaksAndThings.cs @@ -11,6 +11,7 @@ using System.Net.Http; using UI.Builder; using RMROC451.TweaksAndThings.Enums; +using RMROC451.TweaksAndThings.Commands; namespace RMROC451.TweaksAndThings; @@ -45,7 +46,7 @@ public class TweaksAndThings : SingletonPluginBase, IUpdateHand logger.Information("Hello! Constructor was called for {modId}/{modVersion}!", self.Id, self.Version); - //moddingContext.RegisterConsoleCommand(new EchoCommand()); + moddingContext.RegisterConsoleCommand(new EchoCommand()); settings = moddingContext.LoadSettingsData(self.Id); }