Weather fix (#30857)

* weather fix

* localize errors
This commit is contained in:
Ed
2024-08-25 20:20:47 +05:00
committed by GitHub
parent ae310878a6
commit ff412a65ba
3 changed files with 34 additions and 35 deletions

View File

@@ -33,58 +33,50 @@ public sealed class WeatherSystem : SharedWeatherSystem
{ {
if (args.Length < 2) if (args.Length < 2)
{ {
shell.WriteError($"A"); shell.WriteError(Loc.GetString("cmd-weather-error-no-arguments"));
return; return;
} }
if (!int.TryParse(args[0], out var mapInt)) if (!int.TryParse(args[0], out var mapInt))
{
return; return;
}
var mapId = new MapId(mapInt); var mapId = new MapId(mapInt);
if (!MapManager.MapExists(mapId)) if (!MapManager.MapExists(mapId))
{
return; return;
}
TimeSpan? endTime = null; if (!_mapSystem.TryGetMap(mapId, out var mapUid))
return;
if (args.Length == 3) var weatherComp = EnsureComp<WeatherComponent>(mapUid.Value);
//Weather Proto parsing
WeatherPrototype? weather = null;
if (!args[1].Equals("null"))
{ {
if (int.TryParse(args[2], out var durationInt)) if (!ProtoMan.TryIndex(args[1], out weather))
{ {
var curTime = Timing.CurTime; shell.WriteError(Loc.GetString("cmd-weather-error-unknown-proto"));
var maxTime = TimeSpan.MaxValue; return;
// If it's already running then just fade out with how much time we're into the weather.
if (_mapSystem.TryGetMap(mapId, out var mapUid) &&
TryComp<WeatherComponent>(mapUid, out var weatherComp) &&
weatherComp.Weather.TryGetValue(args[1], out var existing))
{
maxTime = curTime - existing.StartTime;
}
endTime = curTime + TimeSpan.FromSeconds(durationInt);
if (endTime > maxTime)
endTime = maxTime;
} }
} }
if (args[1].Equals("null")) //Time parsing
TimeSpan? endTime = null;
if (args.Length == 3)
{ {
SetWeather(mapId, null, endTime); var curTime = Timing.CurTime;
} if (int.TryParse(args[2], out var durationInt))
else if (ProtoMan.TryIndex<WeatherPrototype>(args[1], out var weatherProto)) {
{ endTime = curTime + TimeSpan.FromSeconds(durationInt);
SetWeather(mapId, weatherProto, endTime); }
} else
else {
{ shell.WriteError(Loc.GetString("cmd-weather-error-wrong-time"));
shell.WriteError($"Unable to parse weather prototype"); }
} }
SetWeather(mapId, weather, endTime);
} }
private CompletionResult WeatherCompletion(IConsoleShell shell, string[] args) private CompletionResult WeatherCompletion(IConsoleShell shell, string[] args)

View File

@@ -156,11 +156,14 @@ public abstract class SharedWeatherSystem : EntitySystem
foreach (var (eProto, weather) in weatherComp.Weather) foreach (var (eProto, weather) in weatherComp.Weather)
{ {
// if we turn off the weather, we don't want endTime = null
if (proto == null)
endTime ??= Timing.CurTime + WeatherComponent.ShutdownTime;
// Reset cooldown if it's an existing one. // Reset cooldown if it's an existing one.
if (proto == null || eProto == proto.ID) if (proto is not null && eProto == proto.ID)
{ {
weather.EndTime = endTime; weather.EndTime = endTime;
if (weather.State == WeatherState.Ending) if (weather.State == WeatherState.Ending)
weather.State = WeatherState.Running; weather.State = WeatherState.Running;

View File

@@ -1,3 +1,7 @@
cmd-weather-desc = Sets the weather for the current map. cmd-weather-desc = Sets the weather for the current map.
cmd-weather-help = weather <mapId> <prototype / null> cmd-weather-help = weather <mapId> <prototype / null>
cmd-weather-hint = Weather prototype cmd-weather-hint = Weather prototype
cmd-weather-error-no-arguments = Not enough arguments!
cmd-weather-error-unknown-proto = Unknown Weather prototype!
cmd-weather-error-wrong-time = Time is in the wrong format!