Одержимость питомцев, стервятник-разведчик, метки на карте, череп, глава письма
- Одержимость питомца: ПКМ с книгой - вселиться, E - отозвать (и изнутри питомца), пояс скрыт, надпись о враге у тела. - Одержимый стервятник: полёт, рывок на ЛКМ с 10 м с прямым уроном, звуком и кровотечением, обычный прицел краснеет на цели; посадка в позу 0 и взлёт на пробел; ПКМ - клич-приманка (паникующая курица, откат 0.5 с); F - питаться трупами и блоками-падалью, доеденное исчезает. - Дух змеи атакует только нежить; фиолетовая метка на карте у змеи и одержимого. - Череп из красного трупа (этап 1 цинерария); глава книги «Письмо архимага» с видео. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5.5
parent
a79bb085ab
commit
beab1640b0
@@ -0,0 +1,64 @@
|
||||
using UnityEngine;
|
||||
|
||||
namespace NecromancerTome
|
||||
{
|
||||
/// <summary>
|
||||
/// Метка на карте для того, кем сейчас управляет игрок: дух змеи и одержимый (зомби или питомец).
|
||||
/// Указание 06.10: «Змея всё ещё не появляется на карте. Подозреваю, что питомцы в режиме одержимости тоже».
|
||||
///
|
||||
/// ПОЧЕМУ НЕ Entity.AddNavObject (так было у змеи с 02.10). У сущности одна общая NavObject на все её
|
||||
/// классы меток; у змеи от ванильного animalSnake там уже лежат twitch_spawn, animaltracking_snake,
|
||||
/// clear_sleeper. AddNavObject только дописывает класс в этот список, а какой из них показывать,
|
||||
/// игра решает сама (NavObject.HandleActiveNavClass), и карта (XUiC_MapArea.updateNavObjectList)
|
||||
/// заводит спрайт метки один раз по её ключу. Метка змеи так и не появилась ни разу.
|
||||
///
|
||||
/// ЗДЕСЬ - как у транспорта (EntityVehicle.HandleNavObject: RegisterNavObject(класс,
|
||||
/// vehicle.GetMeshTransform()), разбор 06.10): своя, отдельная NavObject, привязанная к Transform (перегрузка
|
||||
/// NavObjectManager.RegisterNavObject(className, Transform)): своя запись, свой ключ, один класс.
|
||||
/// Позиция - transform.position (NavObject.GetPosition для TrackTypes.Transform), т.е. сама модель.
|
||||
/// Снимается UnRegisterNavObject; если сущность исчезла, игра снимет метку сама (IsValid).
|
||||
///
|
||||
/// ЧУЖУЮ МЕТКУ НЕ ТРОГАТЬ (проверка на утечки 06.10). Снятые метки игра кладёт в пул
|
||||
/// (removedNavObjectPool) и раздаёт заново. Если модель исчезла раньше нашего Hide, игра сама сняла
|
||||
/// метку, и пул мог уже отдать этот же объект другому (метка чутья, транспорт). Поэтому снимаем, только
|
||||
/// если объект ещё в NavObjectList и следит за НАШЕЙ моделью; иначе просто забываем ссылку.
|
||||
/// Класс necroSnakeSpirit (nav_objects.xml) - только карта, фиолетовый; значок - OverrideSpriteName.
|
||||
/// </summary>
|
||||
public static class NecroMapMarker
|
||||
{
|
||||
public const string NavClass = "necroSnakeSpirit";
|
||||
|
||||
/// <summary>Метка и модель, за которой она следит.</summary>
|
||||
public class Marker
|
||||
{
|
||||
public NavObject Nav;
|
||||
public Transform Tracked;
|
||||
}
|
||||
|
||||
public static Marker Show(EntityAlive _e, string _sprite)
|
||||
{
|
||||
if (_e == null || _e.transform == null || NavObjectManager.Instance == null)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
NavObject nav = NavObjectManager.Instance.RegisterNavObject(NavClass, _e.transform, _sprite, true);
|
||||
Debug.Log("[NecromancerTome] NecroMapMarker: метка на карте для " + _e.EntityName + " (" + _e.entityId + ") - " + nav);
|
||||
return new Marker { Nav = nav, Tracked = _e.transform };
|
||||
}
|
||||
|
||||
public static void Hide(ref Marker _m)
|
||||
{
|
||||
NavObjectManager manager = NavObjectManager.Instance;
|
||||
if (_m != null && _m.Nav != null && manager != null && _m.Tracked != null &&
|
||||
manager.NavObjectList.Contains(_m.Nav) && _m.Nav.IsTrackedTransform(_m.Tracked))
|
||||
{
|
||||
manager.UnRegisterNavObject(_m.Nav);
|
||||
}
|
||||
_m = null;
|
||||
}
|
||||
|
||||
/// <summary>Значок одержимого (зомби или питомца) - значок дебаффа «Почти смерть» (buffNearDeathTrauma,
|
||||
/// вешается игроку после гибели), указание 06.10.</summary>
|
||||
public const string PossessedSprite = "ui_game_symbol_near_death_trauma";
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user