Книга: главы ножа и Могильной крысы; плакат ножа, грифельная доска, дверь-шкаф; чертоги 25x8x25; плата силовой ножа 20/40
- Книга некроманта: главы «Нож некроманта» и «Могильная крыса» - лист-чертёж сверху (Textures/, три вида из Blender, подписи на эсперанто), управление и лор; окно книги непрозрачное, текст с контуром - «Дух крысы» переименован в «Могильную крысу» на 13 языках (ключи прежние) - Блоки (Dev): плакат-синька ножа (necroPosterKnife, 3:2 под полотно рамки), грифельная доска necroChalkboard (надписи - TEFeatureSignable, писать только в редакторе/творческом; шрифт Neucha OFL, свой шейдер текста с тестом глубины), дверь-книжный шкаф necroBookDoor (своя модель с аниматором, хитбокс створки через RootTransformRefParent) - Чертоги: префаб 25x8x25 (промежуточный); открываются только межкомнатные двери; надписи на досках по дням игры: «Отомсти архимагу!», с 5-го дня «Берегись излучения красной луны» - Нож: силовая атака стоит 20 здоровья, с «Мёртвой бурей» 40; не хватает - itembreak, «Недостаточно здоровья» и обычный удар; описания на 13 языках - Консольная команда necromodel - устройство модели блока в лог Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5.5
parent
e94e967b8e
commit
4e14a0562b
@@ -0,0 +1,61 @@
|
||||
using HarmonyLib;
|
||||
using UnityEngine;
|
||||
|
||||
namespace NecromancerTome
|
||||
{
|
||||
/// <summary>
|
||||
/// Плата здоровьем за силовую атаку Ножа некроманта (указание 09.10.2026: «обычная силовая - 20 хп, с модификацией
|
||||
/// 40; если здоровья на штраф не хватает - звук сломавшегося инвентаря, а силовая заменится обычной»).
|
||||
/// Саму плату снимает XML (items.xml - 20 при попадании силовой, item_modifiers.xml «Мёртвая буря» - ещё 20).
|
||||
/// Здесь - только проверка до удара: ItemClass.ExecuteAction запускает и обычный удар (действие 0), и силовую
|
||||
/// (действие 1); не хватает здоровья - номер действия меняется на 0 (тот же удар с той же анимацией обычного),
|
||||
/// а при нажатии звучит ванильный itembreak и надпись «Недостаточно здоровья».
|
||||
/// Почему был нужен штраф побольше: лечение обычным ударом - убийства/20, и уже со 100 убийств один удар
|
||||
/// окупал прежнюю плату в 5 здоровья.
|
||||
/// </summary>
|
||||
[HarmonyPatch(typeof(ItemClass), nameof(ItemClass.ExecuteAction))]
|
||||
public static class Patch_ItemClass_ExecuteAction_KnifePowerCost
|
||||
{
|
||||
public const string KnifeName = "necroWpnBladeNecroKnife";
|
||||
public const string StormMod = "necroModKnifeDeadStorm";
|
||||
/// <summary>Должно совпадать с items.xml и item_modifiers.xml.</summary>
|
||||
public const int Cost = 20, StormCost = 40;
|
||||
|
||||
public static void Prefix(ItemClass __instance, ref int _actionIdx, ItemInventoryData _data, bool _bReleased)
|
||||
{
|
||||
if (_actionIdx != 1 || __instance.Name != KnifeName || !(_data?.holdingEntity is EntityPlayerLocal player))
|
||||
{
|
||||
return;
|
||||
}
|
||||
int cost = HasStorm(_data.itemValue) ? StormCost : Cost;
|
||||
if (player.Health > cost)
|
||||
{
|
||||
return;
|
||||
}
|
||||
_actionIdx = 0;
|
||||
if (!_bReleased)
|
||||
{
|
||||
Audio.Manager.PlayInsidePlayerHead("itembreak");
|
||||
// Надпись (указание 09.10) - сразу, мимо очереди подсказок, чтобы при частых нажатиях не копилась.
|
||||
GameManager.ShowTooltip(player, Localization.Get("necroKnifeNoHealth"), true);
|
||||
Debug.Log("[NecromancerTome] KnifePowerCost: здоровья " + player.Health + ", плата " + cost + " - вместо силовой обычный удар");
|
||||
}
|
||||
}
|
||||
|
||||
static bool HasStorm(ItemValue _iv)
|
||||
{
|
||||
if (_iv?.modifications == null)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
foreach (ItemValue m in _iv.modifications)
|
||||
{
|
||||
if (m != null && !m.IsEmpty() && m.ItemClass?.Name == StormMod)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user