Files
necromants-tome-7d2d-3-2/HarmonySrc/NecroSkull.cs
T
AlexCubeandClaude Opus 5.5 31aa99860c Одержимость питомцев: роли медведя, волка, собаки и крысы; ноша стервятника; череп при обыске
- Могильная крыса: своя модель без волчьей шерсти; стоит на земле (центр капсулы);
  E - осмотр контейнеров без права взять (окно игры, рюкзак скрыт, отказ «инвентарь
  заполнен», контейнер не разрушается); ПКМ - проход сквозь постройки, полупрозрачная.
- Стервятник: курица в когтях - слепок с обвисшими крыльями и шеей, без хитбокса.
- Зомбособака: нюх - все существа рядом на компасе и карте.
- Медведь: толстая шкура (вдвое меньше урона), рёв-провокация, удар лапой по блокам.
- Лютоволк: бросок на цель с опрокидыванием, след крови раненых, сумка на 3 ячейки
  (лут, выгрузка у тела, выпадает мешком при гибели и отзыве; отдельный файл сейва).
- Череп (останки): 2% при обычном обыске красного трупа вместо браслета.
- Прицел книги не рисуется в одержимости; подсказки вселения на 13 языках.
- Замер EntityLeakProbe: удалённые, но живые в памяти сущности - в лог.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-09 00:58:40 +03:00

48 lines
2.3 KiB
C#

using UnityEngine;
namespace NecromancerTome
{
/// <summary>
/// Череп (останки) из красного трупа - сырьё для цинерария (дух-работник).
///
/// С 09.10 - находка при обычном обыске (указание: «браслет больше не собирает красные трупы,
/// выпиливаем; останки дропаются с шансом 2% при обычном лутании красного трупа»). Раньше (06.10) череп
/// вырывали пространственным браслетом: зажатая атака по трупу, три секунды канала, при неудаче труп
/// уходил в чёрный разрыв. Сняли из-за подозрения на утечку памяти на этом пути (тест 09.10: после
/// разрывов в памяти копились экземпляры сущностей - 31 при 7 живых).
///
/// Бросок - один раз на труп, при первом открытии его сумки, на сервере, сразу после того, как игра
/// наполнила её добычей (Patch_EntityAlive_OnLockRequestServer_Corpse). Шанс прежний - 2%
/// («так ресурс станет ценнее»).
/// </summary>
public static class NecroSkull
{
public const string ItemName = "necroSkull";
public const float Chance = 0.02f;
/// <summary>Бросок на череп в только что наполненную сумку трупа. Места нет - сумка на ячейку больше.</summary>
public static void Roll(EntityAlive _corpse, Bag _bag)
{
ItemValue skull = ItemClass.GetItem(ItemName);
if (_bag == null || skull == null || skull.IsEmpty())
{
return;
}
float roll = Random.value;
bool success = roll < Chance;
Debug.Log("[NecromancerTome] NecroSkull: труп " + _corpse.entityId + " - бросок " + roll.ToString("0.000") +
" против " + Chance.ToString("0.00") + (success ? " -> ЧЕРЕП" : ""));
if (!success)
{
return;
}
ItemStack stack = new ItemStack(skull, 1);
if (!_bag.AddItem(stack.Clone()))
{
_bag.Resize(new Vector2i(_bag.SlotCount + 1, 1));
_bag.AddItem(stack);
}
}
}
}