Reusable Tin Cans 1.0.0: банки, вынесенные из «Книги некроманта»

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
AlexCube
2026-10-23 11:36:07 +03:00
co-authored by Claude Opus 5.5
commit 236c9b9df1
11 changed files with 171 additions and 0 deletions
+7
View File
@@ -0,0 +1,7 @@
Key,File,Type,UsedInMainMenu,NoTranslate,KeepLoaded,english,Context / Alternate Text,german,spanish,french,italian,japanese,koreana,polish,brazilian,russian,turkish,schinese,tchinese
tinCanEmpty,items,Item,,,,Empty Tin Can,,Leere Blechdose,Lata vacía,Boîte de conserve vide,Lattina vuota,空き缶,빈 깡통,Pusta puszka,Lata vazia,Пустая консервная банка,Boş Teneke Kutu,空罐头,空罐頭
tinCanEmptyDesc,items,Item,,,,An empty tin can. Can be filled with water or used in crafting.,,Eine leere Blechdose. Kann mit Wasser gefüllt oder beim Herstellen verwendet werden.,Una lata vacía. Se puede llenar de agua o usar en fabricación.,Une boîte de conserve vide. Peut être remplie d'eau ou utilisée en fabrication.,Una lattina vuota. Può essere riempita d'acqua o usata per fabbricare.,空の缶。水を入れるか、クラフトに使える。,빈 깡통. 물을 채우거나 제작에 쓸 수 있습니다.,Pusta puszka. Można ją napełnić wodą lub wykorzystać przy wytwarzaniu.,Uma lata vazia. Pode ser enchida com água ou usada na fabricação.,Пустая консервная банка. Можно наполнить водой или использовать в крафте.,Boş bir teneke kutu. Suyla doldurulabilir ya da üretimde kullanılabilir.,一个空罐头。可以装水,也可用于制作。,一個空罐頭。可以裝水,也可用於製作。
tinCanRiverWater,items,Item,,,,Tin Can of Murky Water,,Blechdose mit trübem Wasser,Lata de agua turbia,Boîte de conserve d'eau trouble,Lattina d'acqua torbida,濁った水の缶,탁한 물이 담긴 깡통,Puszka mętnej wody,Lata de água turva,Консервная банка с мутной водой,Bulanık Su Dolu Teneke Kutu,装浑水的罐头,裝濁水的罐頭
tinCanRiverWaterDesc,items,Item,,,,Murky water collected in a tin can. Drinking may cause dysentery. Holds less water than glass jars.,,"Trübes Wasser, in einer Blechdose gesammelt. Trinken kann Ruhr verursachen. Fasst weniger Wasser als ein Einmachglas.",Agua turbia recogida en una lata. Beberla puede causar disentería. Contiene menos agua que un tarro de cristal.,De l'eau trouble recueillie dans une boîte de conserve. En boire peut provoquer la dysenterie. Contient moins d'eau qu'un bocal en verre.,Acqua torbida raccolta in una lattina. Berla può causare dissenteria. Contiene meno acqua di un barattolo di vetro.,缶に汲んだ濁った水。飲むと赤痢にかかることがある。ガラス瓶より容量が少ない。,깡통에 담은 탁한 물. 마시면 이질에 걸릴 수 있습니다. 유리병보다 적게 담깁니다.,Mętna woda zebrana do puszki. Picie może wywołać czerwonkę. Mieści mniej wody niż szklany słoik.,Água turva coletada numa lata. Beber pode causar disenteria. Contém menos água que um pote de vidro.,"Мутная вода в консервной банке. Употребление может вызвать дизентерию. Вмещает меньше воды, чем стеклянные банки.",Teneke kutuya doldurulmuş bulanık su. İçmek dizanteriye yol açabilir. Cam kavanozdan daha az su alır.,用罐头装的浑水。饮用可能引发痢疾。容量比玻璃罐少。,用罐頭裝的濁水。飲用可能引發痢疾。容量比玻璃罐少。
tinCanBoiledWater,items,Item,,,,Tin Can of Boiled Water,,Blechdose mit abgekochtem Wasser,Lata de agua hervida,Boîte de conserve d'eau bouillie,Lattina d'acqua bollita,煮沸した水の缶,끓인 물이 담긴 깡통,Puszka przegotowanej wody,Lata de água fervida,Консервная банка с кипячёной водой,Kaynatılmış Su Dolu Teneke Kutu,装开水的罐头,裝開水的罐頭
tinCanBoiledWaterDesc,items,Item,,,,Purified boiled water in a tin can. Safe to drink. Holds less water than glass jars.,,"Gereinigtes, abgekochtes Wasser in einer Blechdose. Sicher zu trinken. Fasst weniger Wasser als ein Einmachglas.",Agua hervida y purificada en una lata. Segura para beber. Contiene menos agua que un tarro de cristal.,De l'eau bouillie et purifiée dans une boîte de conserve. Potable sans risque. Contient moins d'eau qu'un bocal en verre.,Acqua bollita e purificata in una lattina. Si può bere senza rischi. Contiene meno acqua di un barattolo di vetro.,缶に入った煮沸済みの浄化された水。安全に飲める。ガラス瓶より容量が少ない。,깡통에 담긴 끓여서 정화한 물. 안전하게 마실 수 있습니다. 유리병보다 적게 담깁니다.,"Oczyszczona, przegotowana woda w puszce. Można ją bezpiecznie pić. Mieści mniej wody niż szklany słoik.",Água fervida e purificada numa lata. Segura para beber. Contém menos água que um pote de vidro.,"Очищенная кипячёная вода в консервной банке. Безопасна для питья. Вмещает меньше воды, чем стеклянные банки.","Teneke kutuda kaynatılmış, arıtılmış su. İçmek güvenlidir. Cam kavanozdan daha az su alır.",罐头里的煮沸净水。可安全饮用。容量比玻璃罐少。,罐頭裡的煮沸淨水。可安全飲用。容量比玻璃罐少。
1 Key File Type UsedInMainMenu NoTranslate KeepLoaded english Context / Alternate Text german spanish french italian japanese koreana polish brazilian russian turkish schinese tchinese
2 tinCanEmpty items Item Empty Tin Can Leere Blechdose Lata vacía Boîte de conserve vide Lattina vuota 空き缶 빈 깡통 Pusta puszka Lata vazia Пустая консервная банка Boş Teneke Kutu 空罐头 空罐頭
3 tinCanEmptyDesc items Item An empty tin can. Can be filled with water or used in crafting. Eine leere Blechdose. Kann mit Wasser gefüllt oder beim Herstellen verwendet werden. Una lata vacía. Se puede llenar de agua o usar en fabricación. Une boîte de conserve vide. Peut être remplie d'eau ou utilisée en fabrication. Una lattina vuota. Può essere riempita d'acqua o usata per fabbricare. 空の缶。水を入れるか、クラフトに使える。 빈 깡통. 물을 채우거나 제작에 쓸 수 있습니다. Pusta puszka. Można ją napełnić wodą lub wykorzystać przy wytwarzaniu. Uma lata vazia. Pode ser enchida com água ou usada na fabricação. Пустая консервная банка. Можно наполнить водой или использовать в крафте. Boş bir teneke kutu. Suyla doldurulabilir ya da üretimde kullanılabilir. 一个空罐头。可以装水,也可用于制作。 一個空罐頭。可以裝水,也可用於製作。
4 tinCanRiverWater items Item Tin Can of Murky Water Blechdose mit trübem Wasser Lata de agua turbia Boîte de conserve d'eau trouble Lattina d'acqua torbida 濁った水の缶 탁한 물이 담긴 깡통 Puszka mętnej wody Lata de água turva Консервная банка с мутной водой Bulanık Su Dolu Teneke Kutu 装浑水的罐头 裝濁水的罐頭
5 tinCanRiverWaterDesc items Item Murky water collected in a tin can. Drinking may cause dysentery. Holds less water than glass jars. Trübes Wasser, in einer Blechdose gesammelt. Trinken kann Ruhr verursachen. Fasst weniger Wasser als ein Einmachglas. Agua turbia recogida en una lata. Beberla puede causar disentería. Contiene menos agua que un tarro de cristal. De l'eau trouble recueillie dans une boîte de conserve. En boire peut provoquer la dysenterie. Contient moins d'eau qu'un bocal en verre. Acqua torbida raccolta in una lattina. Berla può causare dissenteria. Contiene meno acqua di un barattolo di vetro. 缶に汲んだ濁った水。飲むと赤痢にかかることがある。ガラス瓶より容量が少ない。 깡통에 담은 탁한 물. 마시면 이질에 걸릴 수 있습니다. 유리병보다 적게 담깁니다. Mętna woda zebrana do puszki. Picie może wywołać czerwonkę. Mieści mniej wody niż szklany słoik. Água turva coletada numa lata. Beber pode causar disenteria. Contém menos água que um pote de vidro. Мутная вода в консервной банке. Употребление может вызвать дизентерию. Вмещает меньше воды, чем стеклянные банки. Teneke kutuya doldurulmuş bulanık su. İçmek dizanteriye yol açabilir. Cam kavanozdan daha az su alır. 用罐头装的浑水。饮用可能引发痢疾。容量比玻璃罐少。 用罐頭裝的濁水。飲用可能引發痢疾。容量比玻璃罐少。
6 tinCanBoiledWater items Item Tin Can of Boiled Water Blechdose mit abgekochtem Wasser Lata de agua hervida Boîte de conserve d'eau bouillie Lattina d'acqua bollita 煮沸した水の缶 끓인 물이 담긴 깡통 Puszka przegotowanej wody Lata de água fervida Консервная банка с кипячёной водой Kaynatılmış Su Dolu Teneke Kutu 装开水的罐头 裝開水的罐頭
7 tinCanBoiledWaterDesc items Item Purified boiled water in a tin can. Safe to drink. Holds less water than glass jars. Gereinigtes, abgekochtes Wasser in einer Blechdose. Sicher zu trinken. Fasst weniger Wasser als ein Einmachglas. Agua hervida y purificada en una lata. Segura para beber. Contiene menos agua que un tarro de cristal. De l'eau bouillie et purifiée dans une boîte de conserve. Potable sans risque. Contient moins d'eau qu'un bocal en verre. Acqua bollita e purificata in una lattina. Si può bere senza rischi. Contiene meno acqua di un barattolo di vetro. 缶に入った煮沸済みの浄化された水。安全に飲める。ガラス瓶より容量が少ない。 깡통에 담긴 끓여서 정화한 물. 안전하게 마실 수 있습니다. 유리병보다 적게 담깁니다. Oczyszczona, przegotowana woda w puszce. Można ją bezpiecznie pić. Mieści mniej wody niż szklany słoik. Água fervida e purificada numa lata. Segura para beber. Contém menos água que um pote de vidro. Очищенная кипячёная вода в консервной банке. Безопасна для питья. Вмещает меньше воды, чем стеклянные банки. Teneke kutuda kaynatılmış, arıtılmış su. İçmek güvenlidir. Cam kavanozdan daha az su alır. 罐头里的煮沸净水。可安全饮用。容量比玻璃罐少。 罐頭裡的煮沸淨水。可安全飲用。容量比玻璃罐少。
+127
View File
@@ -0,0 +1,127 @@
<config>
<!-- Reusable tin cans: eating canned food leaves you an empty can, which works like the
vanilla mason jar (drinkJarEmpty/drinkJarRiverWater/drinkJarBoiledWater - fill from
water, drink, get the empty can back). Ported from AC-EnergyBow (__NoMods reference
library), fixing one bug in it along the way: it extends the jar items but never
overrides Meshfile, so its "tin can" is visually a mason jar in hand. We use the mesh
from vanilla's own disabled-but-fully-built "drinkCanEmpty" item (items.xml, commented
out under "*** Drinks") instead - a real can model, just never wired up by TFP.
BUG FIXED 2026-09-01 (canned water didn't quench thirst): the initial port only copied
each item's own property/property-class nodes and dropped the effect_group blocks,
on the wrong assumption that Extends would pull those in from drinkJarRiverWater/
drinkJarBoiledWater - it doesn't (see the comment above: effect_group is parsed from
each item's own XML node only, never inherited through Extends). So tinCanRiverWater/
tinCanBoiledWater ran their Eat action (sound, delay, empty-can-back) but never applied
$waterAmountAdd - the can "drank" and did nothing. Restored the effect_group from
AC-EnergyBow verbatim (river water still carries dysentery risk/HP hit without
buffWaterPurifier, same as a jar; boiled water is clean), fixing one more small bug in
the source along the way: its dDysenteryRisk display_value said .16 while the actual
roll it sets is 8 (i.e. .08) - tooltip now matches what the roll does. -->
<append xpath="/items">
<item name="tinCanEmpty">
<property name="Extends" value="drinkJarEmpty"/>
<property name="CustomIcon" value="tinCanEmpty"/>
<property name="DescriptionKey" value="tinCanEmptyDesc"/>
<!-- Своя модель (01.10.2026): ванильная консервная банка без отогнутой крышки - пустая
открытая банка. Бандл necrocan; текстура пока ванильная cannedfood01 - до релиза
перерисовать (гигиена ассетов). Банки с водой - свои модели с водой внутри. -->
<property name="Meshfile" value="#@modfolder(ReusableTinCans):Resources/necrocan?necroTinCanPrefab.prefab"/>
<!-- HoldType 87 = хват пустой стеклянной банки (drinkJarEmpty), единственный с анимацией набора воды;
консервный 14 её не имеет - банка набирала воду без движения рук (05.10.2026). -->
<property name="HoldType" value="87"/>
<property name="Material" value="Mmetal"/>
<property class="Action1"> <!-- UseAction -->
<property name="Class" value="CollectWater"/>
<property name="Delay" value="3.4"/>
<property name="Change_item_to" value="tinCanRiverWater"/>
<property name="Sound_start" value="bucketfill_water"/>
</property>
</item>
<item name="tinCanRiverWater">
<property name="Extends" value="drinkJarRiverWater"/>
<property name="CustomIcon" value="tinCanRiverWater"/>
<property name="DescriptionKey" value="tinCanRiverWaterDesc"/>
<!-- Своя модель (01.10.2026): банка без крышки, внутри мутная бурая вода (бандл necrocan). -->
<property name="Meshfile" value="#@modfolder(ReusableTinCans):Resources/necrocan?necroTinCanMurkyPrefab.prefab"/>
<!-- HoldType 3 = хват стеклянной банки (drinkJar*): сразу питьё, без фазы вскрытия, которая есть у консервного хвата 14 (05.10.2026). -->
<property name="HoldType" value="3"/>
<property name="Material" value="Mmetal"/>
<property class="Action0">
<property name="Class" value="Eat"/>
<property name="Delay" value="4"/>
<property name="Sound_start" value="player_drinking"/>
<property name="Create_item" value="tinCanEmpty"/>
<property name="Use_jar_refund" value="false"/>
</property>
<effect_group tiered="false" name="Drink Tier 0">
<requirement name="!HasBuff" buff="buffIsOnFire"/>
<triggered_effect trigger="onSelfPrimaryActionEnd" action="ModifyCVar" cvar="$waterAmountAdd" operation="add" value="10"/>
<display_value name="dStaminaRegen" value=".15"/>
<triggered_effect trigger="onSelfPrimaryActionEnd" action="AddBuff" buff="buffProcessConsumables"/>
<triggered_effect trigger="onSelfPrimaryActionEnd" action="ModifyStats" stat="Health" operation="add" value="-5">
<requirement name="!HasBuff" buff="buffWaterPurifier"/>
</triggered_effect>
<display_value name="foodHealthAmount" value="-5"/>
<triggered_effect trigger="onSelfPrimaryActionEnd" action="ModifyCVar" cvar=".DiseaseRoll" operation="set" value="8"/>
<display_value name="dDysenteryRisk" value=".08"/>
<triggered_effect trigger="onSelfPrimaryActionEnd" action="ModifyCVar" cvar=".DiseaseRoll" operation="add" value="@$MetabolismResist"/>
<triggered_effect trigger="onSelfPrimaryActionEnd" action="AddBuff" buff="buffDysenteryCatchDrink">
<requirement name="RandomRoll" seed_type="Random" min_max="1,100" operation="LTE" value="@.DiseaseRoll"/>
</triggered_effect>
<triggered_effect trigger="onSelfPrimaryActionEnd" action="PlaySound" sound="player#vomit">
<requirement name="!HasBuff" buff="buffWaterPurifier"/>
</triggered_effect>
</effect_group>
<effect_group tiered="false">
<requirement name="HasBuff" buff="buffIsOnFire"/>
<triggered_effect trigger="onSelfPrimaryActionEnd" action="AddBuff" buff="buffExtinguishFire"/>
</effect_group>
</item>
<item name="tinCanBoiledWater">
<property name="Extends" value="drinkJarBoiledWater"/>
<property name="CustomIcon" value="tinCanBoiledWater"/>
<property name="DescriptionKey" value="tinCanBoiledWaterDesc"/>
<!-- Своя модель (01.10.2026): банка без крышки, внутри чистая прозрачная голубоватая вода (бандл necrocan). -->
<property name="Meshfile" value="#@modfolder(ReusableTinCans):Resources/necrocan?necroTinCanCleanPrefab.prefab"/>
<property name="HoldType" value="3"/> <!-- хват стеклянной банки, без вскрытия - см. tinCanRiverWater -->
<property name="Material" value="Mmetal"/>
<property class="Action0">
<property name="Class" value="Eat"/>
<property name="Delay" value="4"/>
<property name="Sound_start" value="player_drinking"/>
<property name="Create_item" value="tinCanEmpty"/>
<property name="Use_jar_refund" value="false"/>
</property>
<effect_group tiered="false" name="Drink Tier 0/1">
<requirement name="!HasBuff" buff="buffIsOnFire"/>
<triggered_effect trigger="onSelfPrimaryActionEnd" action="ModifyCVar" cvar="$waterAmountAdd" operation="add" value="16"/>
<display_value name="dStaminaRegen" value=".15"/>
<triggered_effect trigger="onSelfPrimaryActionEnd" action="AddBuff" buff="buffProcessConsumables"/>
</effect_group>
<effect_group tiered="false">
<requirement name="HasBuff" buff="buffIsOnFire"/>
<triggered_effect trigger="onSelfPrimaryActionEnd" action="AddBuff" buff="buffExtinguishFire"/>
</effect_group>
</item>
</append>
<!-- Only foodCanBeef needs patching, even though Chicken/Lamb/Catfood should also leave a
can behind: those three Extends="foodCanBeef" without their own Action0 element, so
there's nothing for a foodCanChicken/foodCanLamb/foodCanCatfood xpath to match - but for
the same reason, they'll all inherit foodCanBeef's patched Action0 (Create_item included)
at load time anyway, same as how our zombie kill counter above only had to patch
zombieTemplateMale once. -->
<append xpath="/items/item[@name='foodCanBeef']/property[@class='Action0']">
<property name="Create_item" value="tinCanEmpty"/>
</append>
</config>
+29
View File
@@ -0,0 +1,29 @@
<config>
<!-- Tin can water boiling - user request 2026-08-30 ("Вода в консервных банках должна
кипятиться на костре даже если там нету кастрюли... так было сделано в другом моём моде
'Энерголук'" = AC-EnergyBow, the same __NoMods reference the tin can items themselves were
ported from - see items.xml's own comment on tinCanEmpty/tinCanRiverWater/
tinCanBoiledWater).
Root cause this was missing at all: `Extends` copies an item's PROPERTIES, never its
RECIPES - recipes are separate top-level <recipe> nodes matched by name, with no
inheritance mechanism of their own (confirmed by grepping this mod's own recipes.xml -
zero "tinCan" hits before this entry). tinCanRiverWater/tinCanBoiledWater extending
drinkJarRiverWater/drinkJarBoiledWater therefore got NONE of the vanilla mason-jar-boiling
recipe (`<recipe name="drinkJarBoiledWater" craft_area="campfire"
craft_tool="toolCookingPot">`, Data/Config/recipes.xml) - boiling a tin can was never
possible at all until this recipe existed, not merely pot-gated.
No `craft_tool="toolCookingPot"` here BY DESIGN, per the direct request - a metal can can
sit right in a campfire's coals on its own, unlike a mason jar. Confirmed real vanilla
precedent for a pot-less campfire recipe existing at all: `foodBakedPotato`/
`foodCharredMeat` both use craft_area="campfire" with no craft_tool attribute at all - a
campfire recipe is not implicitly pot-gated, craft_tool is an opt-in extra requirement,
not something `craft_area="campfire"` implies on its own. -->
<append xpath="/recipes">
<recipe name="tinCanBoiledWater" count="1" craft_area="campfire">
<ingredient name="tinCanRiverWater" count="1"/>
</recipe>
</append>
</config>