Черепа-ретрансляторы отменены: череп-декор нить не передаёт, нити через черепа снимаются при загрузке; тексты на 13 языках

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
AlexCube
2026-10-23 22:26:09 +03:00
co-authored by Claude Opus 5.5
parent 8a5f4fa0e3
commit 54cafab4f1
3 changed files with 43 additions and 53 deletions
File diff suppressed because one or more lines are too long
+38
View File
@@ -405,6 +405,7 @@ namespace NecromancerTome
}
}
AlignVia();
DropRelayThreads();
ZoneSide = 0;
ZoneRunning = false;
ZoneCursor = 0;
@@ -548,6 +549,43 @@ namespace NecromancerTome
return n;
}
/// <summary>Черепа-ретрансляторы отменены (23.10, пользователь: «черепа как удлинитель не работают. Думаю нам стоит
/// отказаться от их функции ретрансляторов»): нити, протянутые через черепа, при загрузке снимаются; прямые остаются.
/// Списки Via в сейве остаются (формат не меняется), но всегда пустые.</summary>
void DropRelayThreads()
{
int n = 0;
for (int i = ThreadFrom.Count - 1; i >= 0; i--)
{
if (FromVia[i].Count > 0)
{
ThreadFrom.RemoveAt(i);
FromVia.RemoveAt(i);
n++;
}
}
for (int i = ThreadOut.Count - 1; i >= 0; i--)
{
if (OutVia[i].Count > 0)
{
ThreadOut.RemoveAt(i);
OutVia.RemoveAt(i);
n++;
}
}
if (HasThreadTo && ToVia.Count > 0)
{
HasThreadTo = false;
ToVia.Clear();
n++;
}
if (n > 0)
{
_threadsDirty = true;
Debug.Log("[NecromancerTome] Cinerarium: урна " + ToWorldPos() + " - снято нитей через черепа: " + n);
}
}
/// <summary>Снять нити, у которых конец (_end) или череп на пути (_via) - в клетке _p.</summary>
int RemoveWhere(Vector3i _p, bool _end, bool _via)
{
+1 -49
View File
@@ -152,8 +152,7 @@ namespace NecromancerTome
{
if (IsRelay(w.GetBlock(_pos).Block))
{
ClickRelay(_pl, w, _pos, _connect);
return;
return; // 23.10: черепа-ретрансляторы отменены - череп-декор нитью не задевается
}
bool ok = Resolve(w, _pos, out Vector3i owner, out TEFeatureCinerarium urn);
bool station = false;
@@ -290,53 +289,6 @@ namespace NecromancerTome
_pl.PlayOneShot("wiretool_place");
}
/// <summary>Щелчок ножом по черепу-ретранслятору: ПКМ при тянущейся нити - провести её через череп; ЛКМ - снять все нити
/// через него (или бросить тянущуюся).</summary>
static void ClickRelay(EntityPlayerLocal _pl, World _w, Vector3i _skull, bool _connect)
{
if (!_connect)
{
if (_start.HasValue)
{
Cancel();
GameManager.ShowTooltip(_pl, Localization.Get("necroThreadCancel"));
return;
}
int n = 0;
foreach (Vector3i p in CinerariumRegistry.All())
{
TEFeatureCinerarium u = UrnAt(_w, p);
if (u != null)
{
n += u.RemoveThreadsVia(_skull);
}
}
if (n > 0)
{
_pl.PlayOneShot("wiretool_grab");
GameManager.ShowTooltip(_pl, Localization.Get("necroThreadRemoved"));
}
return;
}
if (!_start.HasValue)
{
GameManager.ShowTooltip(_pl, Localization.Get("necroThreadRelayFirst"));
return;
}
if (_via.Contains(_skull))
{
return;
}
if (Vector3.Distance(LastPoint.Value.ToVector3(), _skull.ToVector3()) > MaxLength)
{
GameManager.ShowTooltip(_pl, Localization.Get("necroThreadTooFar"));
return;
}
_via.Add(_skull);
_pl.PlayOneShot("wiretool_place");
GameManager.ShowTooltip(_pl, Localization.Get("necroThreadRelay"));
}
/// <summary>Нить урны _urn к _end через черепа _via (по порядку от урны) - пролётами в _pairs, огоньки бегут по направлению
/// нити: _toUrn - от конца к урне (нить «откуда»), иначе от урны к концу.</summary>
public static void AddPath(List<(Vector3 a, Vector3 b)> _pairs, Vector3i _urn, List<Vector3i> _via, Vector3i _end, bool _toUrn)