Фильтр логиста: отдельная группа «Корм для кур»; призраками - только торговцы игры (NPCCore)

Корм кур - группа 22 в конце (биты старых не сдвинуты); у урн из прошлых сейвов она берёт выбор
«Сырого», где корм был раньше. Число групп теперь пишется вторым числом.
Призрачный вид - только у точного класса EntityTrader: NPC NPCCore (наследники EntityTrader)
становились почти невидимыми (Nexus, Crozekanov, 16.10).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
AlexCube
2026-10-17 00:21:44 +03:00
co-authored by Claude Opus 5.5
parent d0f66c784e
commit 1b60cfd627
5 changed files with 31 additions and 7 deletions
+13 -1
View File
@@ -168,7 +168,8 @@ namespace NecromancerTome
t.Add(HasThreadTo ? 1 : 0);
t.Add(ThreadTo.x); t.Add(ThreadTo.y); t.Add(ThreadTo.z);
CinerariumWriteHelper.WriteInts(_bw, t.ToArray());
CinerariumWriteHelper.WriteInts(_bw, new[] { unchecked((int)GroupMask) });
// Второе число - сколько групп было при записи: новые группы (в конец) у старых урн включаются по правилу ниже.
CinerariumWriteHelper.WriteInts(_bw, new[] { unchecked((int)GroupMask), CinerariumGroups.Count });
}
public override void Read(PooledBinaryReader _br, StreamModeRead _eStreamMode)
@@ -203,6 +204,7 @@ namespace NecromancerTome
if (version >= 3)
{
int n = _br.ReadInt32();
int known = 22; // до 17.10 число групп не писалось - их было 22
for (int i = 0; i < n; i++)
{
int v = _br.ReadInt32();
@@ -210,6 +212,16 @@ namespace NecromancerTome
{
GroupMask = unchecked((uint)v);
}
else if (i == 1)
{
known = v;
}
}
// Группы, которых урна ещё не знала: корм кур раньше ехал с «Сырым» - берёт его выбор, прочие новые - включены.
for (int g = known; g < CinerariumGroups.Count; g++)
{
bool on = g == CinerariumGroups.ChickenFeed ? (GroupMask & (1u << CinerariumGroups.Raw)) != 0 : true;
GroupMask = on ? GroupMask | (1u << g) : GroupMask & ~(1u << g);
}
}
_threadsDirty = true;