using UnityEngine; namespace NecromancerTome { /// /// Череп (останки) из красного трупа - сырьё для цинерария (дух-работник). /// /// С 09.10 - находка при обычном обыске (указание: «браслет больше не собирает красные трупы, /// выпиливаем; останки дропаются с шансом 2% при обычном лутании красного трупа»). Раньше (06.10) череп /// вырывали пространственным браслетом: зажатая атака по трупу, три секунды канала, при неудаче труп /// уходил в чёрный разрыв. Сняли из-за подозрения на утечку памяти на этом пути (тест 09.10: после /// разрывов в памяти копились экземпляры сущностей - 31 при 7 живых). /// /// Бросок - один раз на труп, при первом открытии его сумки, на сервере, сразу после того, как игра /// наполнила её добычей (Patch_EntityAlive_OnLockRequestServer_Corpse). Шанс прежний - 2% /// («так ресурс станет ценнее»). /// public static class NecroSkull { public const string ItemName = "necroSkull"; public const float Chance = 0.02f; /// Бросок на череп в только что наполненную сумку трупа. Места нет - сумка на ячейку больше. 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); } } } }