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)