public string Reply() { switch (State) { case IdleState.Initialize: break; case IdleState.StartDelay: if (Stats.IsInGame || Stats.IsLoadingWorld) { State = IdleState.CheckIdle; } else if (General.DateSubtract(StartDelay) > 0) { if (FailedStartDelay > 5 || (FailedStartDelay > 3 && General.DateSubtract(TimeFailedStartDelay) > 600)) { State = IdleState.Terminate; break; } Logger.Instance.Write(Parent, "Demonbuddy:{0}: Delayed start failed! ({1} seconds overtime)", Parent.Demonbuddy.Proc.Id, General.DateSubtract(StartDelay)); TimeFailedStartDelay = DateTime.Now; FailedStartDelay++; return("Restart"); } break; case IdleState.CheckIdle: _lastIdleAction = DateTime.Now; // Update Last Idle action time return(IdleAction); case IdleState.Busy: if (Stats.IsRunning && !Stats.IsPaused && Stats.IsInGame) { Reset(); } else if (General.DateSubtract(_lastIdleAction) > 10) { if (Failed >= 3) { State = IdleState.Terminate; } Failed++; Reset(); } break; case IdleState.UserStop: if (Stats.IsRunning) { State = IdleState.CheckIdle; } ResetCoinage(); break; case IdleState.UserPause: if (!Stats.IsPaused) { State = IdleState.CheckIdle; } break; case IdleState.NewProfile: State = IdleState.CheckIdle; return("LoadProfile " + Parent.ProfileSchedule.GetProfile); case IdleState.Terminate: Parent.Restart(); break; } return("Roger!"); }