Skip to content
54 changes: 19 additions & 35 deletions Essentials/AutoCommands.cs
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,10 @@
using NLog;
using Torch;
using Torch.API;
using Torch.Server.ViewModels;
using Sandbox.Game.World;
using Sandbox.Game.Multiplayer;
using Sandbox.Game.Entities;
using Torch.Server.ViewModels;
using VRage.Game.ModAPI;


Expand All @@ -18,6 +18,7 @@ namespace Essentials
public class AutoCommands : IDisposable
{
protected EntityTreeViewModel Tree { get; }

private static AutoCommands _instance;
public static AutoCommands Instance => _instance ?? (_instance = new AutoCommands());
private static readonly Logger Log = LogManager.GetLogger("Essentials");
Expand All @@ -31,58 +32,41 @@ public void Start()
_timer.Start();
}

public void RunOnStart()
{
foreach (var command in EssentialsPlugin.Instance.Config.AutoCommands)
{
if (command.CommandTrigger != Trigger.OnStart)
return;
else if(command.CommandTrigger == Trigger.OnStart)
{
var a = TimeSpan.Parse(command.Interval);
var b = ((ITorchServer)TorchBase.Instance).ElapsedPlayTime;
if ((a - b).TotalSeconds <= 1 && (a - b).TotalSeconds > 0)
command.RunNow();
}
}
}
private bool CanRun(AutoCommand command)
{
switch (command.CommandTrigger)
{
default:
return false;
case Trigger.Disabled:
return false;
case Trigger.OnStart:
var a = Math.Max(TimeSpan.Parse(command.Interval).TotalSeconds, 60);
var b = ((ITorchServer)TorchBase.Instance).ElapsedPlayTime;
if ((a - b.TotalSeconds) <= 1 && (a - b.TotalSeconds > 0))
command.RunNow();
break;
case Trigger.Vote:
break;
case Trigger.Timed:
return true;
case Trigger.Scheduled:
return true;
case Trigger.GridCount:
int gridCount = 0;
foreach (var e in MyEntities.GetEntities())
{
if (e is IMyCubeGrid)
gridCount++;
}
if (gridCount >= command.TriggerCount)
return true;
else return false;
return Tree.Grids.Count >= command.TriggerCount;
case Trigger.PlayerCount:
if (MySession.Static.Players.GetOnlinePlayerCount() >= command.TriggerCount)
return true;
else return false;
return MySession.Static.Players.GetOnlinePlayerCount() >= command.TriggerCount;
case Trigger.SimSpeed:
if (Math.Min(Sync.ServerSimulationRatio, 1) <= command.TriggerRatio)
return true;
else
return false;
return Math.Min(Sync.ServerSimulationRatio, 1) <= command.TriggerRatio;

default:
throw new Exception("fuck it");
}

return false;
}


private void TimerElapsed(object sender, ElapsedEventArgs e)
{
RunOnStart();
foreach (var command in EssentialsPlugin.Instance.Config.AutoCommands)
{
if(!CanRun(command))
Expand Down