diff --git a/Config/Localization.csv b/Config/Localization.csv
index 96e7dc9..df4f950 100644
--- a/Config/Localization.csv
+++ b/Config/Localization.csv
@@ -67,6 +67,7 @@ necroGroup18,UI,Tooltip,,,,Books and schematics,,Bücher und Baupläne,Libros y
necroGroup19,UI,Tooltip,,,,Blocks,,Blöcke,Bloques,Blocs,Blocchi,ブロック,블록,Bloki,Blocos,Блоки,Bloklar,方块,方塊
necroGroup20,UI,Tooltip,,,,Necromancy,,Nekromantie,Nigromancia,Nécromancie,Negromanzia,降霊術,강령술,Nekromancja,Necromancia,Некромантия,Nekromansi,亡灵法术,亡靈法術
necroGroup21,UI,Tooltip,,,,Other,,Sonstiges,Otros,Divers,Altro,その他,기타,Inne,Outros,Прочее,Diğer,其他,其他
+necroGroup22,UI,Tooltip,,,,Chicken feed,,Hühnerfutter,Pienso para gallinas,Nourriture pour poules,Mangime per galline,鶏の餌,닭 모이,Karma dla kur,Ração para galinhas,Корм для кур,Tavuk yemi,鸡饲料,雞飼料
necroGroupOn,UI,Tooltip,,,,carried,,wird getragen,se transporta,transporté,si trasporta,運ぶ,옮김,przenoszone,transportado,носит,taşınır,搬运,搬運
necroGroupOff,UI,Tooltip,,,,not carried,,wird nicht getragen,no se transporta,pas transporté,non si trasporta,運ばない,옮기지 않음,nieprzenoszone,não transportado,не носит,taşınmaz,不搬运,不搬運
necroUrnFilterTitle,UI,Tooltip,,,,What to carry,,Was tragen,Qué llevar,Quoi porter,Cosa portare,運ぶもの,옮길 것,Co nosić,O que levar,Что носить,Ne taşınsın,搬运什么,搬運什麼
diff --git a/Config/XUi_InGame/windows.xml b/Config/XUi_InGame/windows.xml
index 013ffdb..4424b3e 100644
--- a/Config/XUi_InGame/windows.xml
+++ b/Config/XUi_InGame/windows.xml
@@ -262,6 +262,8 @@
+
+
diff --git a/HarmonySrc/Cinerarium.cs b/HarmonySrc/Cinerarium.cs
index 5640938..0cff44b 100644
--- a/HarmonySrc/Cinerarium.cs
+++ b/HarmonySrc/Cinerarium.cs
@@ -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;
diff --git a/HarmonySrc/CinerariumGroups.cs b/HarmonySrc/CinerariumGroups.cs
index d53033c..086e316 100644
--- a/HarmonySrc/CinerariumGroups.cs
+++ b/HarmonySrc/CinerariumGroups.cs
@@ -17,8 +17,10 @@ namespace NecromancerTome
{
public const int Cooked = 0, Canned = 1, Raw = 2, Harvest = 3, Flowers = 4, Seeds = 5, Drinks = 6, Medicine = 7, Ore = 8,
Ingots = 9, Parts = 10, Materials = 11, Chemicals = 12, Tools = 13, Weapons = 14, Ammo = 15, Armor = 16, Mods = 17,
- Books = 18, Blocks = 19, Necro = 20, Other = 21;
- public const int Count = 22;
+ Books = 18, Blocks = 19, Necro = 20, Other = 21,
+ // 17.10: «Корм для кур вынеси в отдельную группу» (был в «Сыром»).
+ ChickenFeed = 22;
+ public const int Count = 23;
public const uint All = (1u << Count) - 1;
/// Значок группы - иконка типичного предмета (ItemIconAtlas).
@@ -27,10 +29,11 @@ namespace NecromancerTome
"foodMeatStew", "foodCanChili", "foodRawMeat", "foodCropCorn", "plantedChrysanthemum3Harvest", "plantedCorn1",
"drinkJarBoiledWater", "medicalFirstAidKit", "resourceRockSmall", "resourceForgedSteel", "resourceMechanicalParts",
"resourceWood", "resourceGunPowder", "meleeToolPickT1IronPickaxe", "gunHandgunT1Pistol", "ammo9mmBulletBall",
- "armorMinerHelmet", "modGunLaserSight", "bookArtOfMiningLuckyStrike", "cobblestoneMaster", "necroSkull", "oldCash"
+ "armorMinerHelmet", "modGunLaserSight", "bookArtOfMiningLuckyStrike", "cobblestoneMaster", "necroSkull", "oldCash",
+ "resourceChickenFeed"
};
- /// Ключ названия группы в Localization.csv: necroGroup0..necroGroup21.
+ /// Ключ названия группы в Localization.csv: necroGroup0..necroGroup22.
public static string NameKey(int _g) => "necroGroup" + _g;
static readonly HashSet OreNames = new HashSet
@@ -62,7 +65,7 @@ namespace NecromancerTome
};
static readonly HashSet RawNames = new HashSet
{
- "foodRawMeat", "foodRawMeatBundle", "foodEgg", "foodHoney", "foodRottingFlesh", "resourceChickenFeed"
+ "foodRawMeat", "foodRawMeatBundle", "foodEgg", "foodHoney", "foodRottingFlesh"
};
/// Предметы и блоки самого мода - по его Config/items.xml и blocks.xml (у многих нет «necro» в имени: книги
@@ -124,6 +127,10 @@ namespace NecromancerTome
{
return Necro;
}
+ if (n == "resourceChickenFeed")
+ {
+ return ChickenFeed;
+ }
if (_ic is ItemClassModifier)
{
return Mods;
diff --git a/HarmonySrc/GhostTraderPatch.cs b/HarmonySrc/GhostTraderPatch.cs
index 9191703..b706407 100644
--- a/HarmonySrc/GhostTraderPatch.cs
+++ b/HarmonySrc/GhostTraderPatch.cs
@@ -319,7 +319,9 @@ namespace NecromancerTome
{
if (_entity is EntityTrader)
{
- return true;
+ // Только торговцы самой игры (класс EntityTrader). 16.10 (Nexus, Crozekanov): NPC мода NPCCore построены на
+ // наследнике EntityTrader и тоже становились призраками - «практически невидимыми».
+ return _entity.GetType() == typeof(EntityTrader);
}
EntityClass entityClass = EntityClass.list[_entity.entityClass];
if (entityClass == null || entityClass.entityClassName == null)