- Чертоги разума: дух в префабе chertogi под землёй, книга памяти, нож и плакат; кровать префаба - мебель necroPalaceBed (иначе становилась точкой возрождения); охрана выбрасывает и игроков (их нет в EntityAlives). - Хваты пустой руки по R: «отрицание» и «пиф-паф» - поза рук костями поверх аниматора, остальные кости заморожены, ЛКМ - заклинание, прицел краснеет на зомби. - «Отрицание»: зомби в ужасе бежит дальше 40 м и теряет игрока как цель. - «Пиф-паф»: одержимость зомби-гуманоидом - бег, прыжок, удар, дальняя атака, подрыв, крик крикуньи; тело цепенеет, зомби танкуют одержимого; область вокруг тела сжата; полоска здоровья; спавн и прорисовка у одержимого. - Книга с оглавлением (окно necroTome), глава «Некроэнергия». - Прорисовка дверей у змеи и одержимого (CheckLODs от камеры, а не от тела). - Почтовый ящик консоли и команды necrobones/necropose/necroshot для разработки. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
92 lines
2.9 KiB
C#
92 lines
2.9 KiB
C#
using System.Collections.Generic;
|
||
using System.IO;
|
||
using UnityEngine;
|
||
using UnityEngine.Scripting;
|
||
|
||
namespace NecromancerTome
|
||
{
|
||
/// <summary>
|
||
/// Почтовый ящик консоли - только для разработки (03.10: ассистент подбирает позу рук сам, без
|
||
/// клавиатуры). Работает, лишь если есть папка %APPDATA%\7DaysToDie\NecroMailbox - у игроков её
|
||
/// нет. Раз в полсекунды: команды из cmd.txt (по строке) выполняются в консоли игры, как набранные
|
||
/// вручную, файл удаляется, ответ - в лог строками «[NecromancerTome] mailbox:».
|
||
/// </summary>
|
||
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<string> 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);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
/// <summary>necroshot [имя] - снимок экрана игры в %APPDATA%\7DaysToDie\NecroMailbox\shots\имя.png
|
||
/// (как F9, только в известное место). Файл появляется в конце кадра.</summary>
|
||
[Preserve]
|
||
public class ConsoleCmdNecroShot : ConsoleCmdAbstract
|
||
{
|
||
public override string[] getCommands() => new[] { "necroshot" };
|
||
public override string getDescription() => "NecromancerTome: снимок экрана в NecroMailbox/shots/<имя>.png";
|
||
|
||
public override void Execute(List<string> _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);
|
||
}
|
||
}
|
||
}
|