using System.Collections.Generic; using System.IO; using UnityEngine; using UnityEngine.Scripting; namespace NecromancerTome { /// /// Почтовый ящик консоли - только для разработки (03.10: ассистент подбирает позу рук сам, без /// клавиатуры). Работает, лишь если есть папка %APPDATA%\7DaysToDie\NecroMailbox - у игроков её /// нет. Раз в полсекунды: команды из cmd.txt (по строке) выполняются в консоли игры, как набранные /// вручную, файл удаляется, ответ - в лог строками «[NecromancerTome] mailbox:». /// public static class NecroMailbox { public static string Dir => Path.Combine(GameIO.GetUserGameDataDir(), "NecroMailbox"); static string CmdFile => Path.Combine(Dir, "cmd.txt"); static float _next; public static void Init() { ModEvents.UnityUpdate.RegisterHandler(OnUnityUpdate); } static void OnUnityUpdate(ref ModEvents.SUnityUpdateData _data) { if (Time.unscaledTime < _next) { return; } _next = Time.unscaledTime + 0.5f; if (!File.Exists(CmdFile) || SdtdConsole.Instance == null) { return; } string[] lines; try { lines = File.ReadAllLines(CmdFile); File.Delete(CmdFile); } catch (IOException) { return; // файл ещё пишется - в следующий раз } foreach (string raw in lines) { string line = raw.Trim(); if (line.Length == 0) { continue; } Debug.Log("[NecromancerTome] mailbox: > " + line); try { List res = SdtdConsole.Instance.ExecuteSync(line, null); if (res != null) { foreach (string r in res) { Debug.Log("[NecromancerTome] mailbox: " + r); } } } catch (System.Exception ex) { Debug.LogWarning("[NecromancerTome] mailbox: ошибка - " + ex); } } } } /// necroshot [имя] - снимок экрана игры в %APPDATA%\7DaysToDie\NecroMailbox\shots\имя.png /// (как F9, только в известное место). Файл появляется в конце кадра. [Preserve] public class ConsoleCmdNecroShot : ConsoleCmdAbstract { public override string[] getCommands() => new[] { "necroshot" }; public override string getDescription() => "NecromancerTome: снимок экрана в NecroMailbox/shots/<имя>.png"; public override void Execute(List _params, CommandSenderInfo _senderInfo) { string dir = Path.Combine(NecroMailbox.Dir, "shots"); Directory.CreateDirectory(dir); string name = _params.Count > 0 ? _params[0] : System.DateTime.Now.ToString("HHmmss"); string path = Path.Combine(dir, name + ".png"); ScreenCapture.CaptureScreenshot(path); SdtdConsole.Instance.Output("снимок: " + path); } } }