- Пояс - нижний ряд сумки зомби; оружие ближнего боя в руку, если этот тип зомби им владеет (ZombieWeapons: таблица умений, утверждена 25.10). Удар как у персонажа: ItemActionAttack.Hit, урон предмета без перков зомби, износ, темп оружия. Модель на кость RightWeapon, хват WeaponHoldType; иконки и износ на поясе HUD. Неумелое или сломанное - кулаки и подсказка (13 языков). Выключатель necroarms weapon on|off; dev-команда necropossess для проверок без мыши. - M в зомби и волке открывал сумку вместо карты (перехват windowpaging) - исправлено; туман карты и карта на одержимом - у любого одержимого зомби, как у стервятника. - Глава «Одержимость» (EN/RU): пояс - оружие, M - карта. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5.5
parent
5ebd09dacd
commit
cf61d98bb7
+34
-2
@@ -11,6 +11,8 @@ namespace NecromancerTome
|
||||
/// - при выходе из одержимости зомби сбрасывает рюкзаком всё, что было в сумке (и на поясе - когда в поясе
|
||||
/// появятся предметы);
|
||||
/// - гибель одержимого - мешок на месте и метка на карте, как у сумки волка.
|
||||
/// ПОЯС (#37, 25.10) - нижний ряд той же сумки: Possession.BeltSlots ячеек под верхним рядом, оружие в руке берётся
|
||||
/// оттуда (ZombieWeapons). Хранение, выброс мешком и метка - общие с сумкой.
|
||||
/// Лут (указание 13.10: «раз у них E свободно, подключай лутание») - как у волка: E на ящик или мешок - обыск с
|
||||
/// переносом в сумку, E на предмет на земле - подобрать (WolfBag.Target - сумка зомби, пока она есть).
|
||||
/// Только зомби из списка вида от первого лица (FpArms.Allows), не питомцы. Окно - то же, что у сумки волка
|
||||
@@ -28,12 +30,41 @@ namespace NecromancerTome
|
||||
public const string WaypointName = "necroZombieBagWaypoint";
|
||||
public static bool WindowOpen;
|
||||
static Bag _bag;
|
||||
/// <summary>Ячеек в ряду: верхний ряд - сумка, нижний - пояс.</summary>
|
||||
static int _cols;
|
||||
|
||||
static string FilePath => Path.Combine(GameIO.GetSaveGameDir(), FileName);
|
||||
|
||||
public static bool Active => _bag != null;
|
||||
public static Bag Current => _bag;
|
||||
|
||||
/// <summary>Ячейка пояса (0..BeltSlots-1) - нижний ряд сумки; нет сумки - null.</summary>
|
||||
public static ItemStack Belt(int _i)
|
||||
{
|
||||
ItemStack[] items = _bag?.ItemGrid?.items;
|
||||
int idx = _cols + _i;
|
||||
return items != null && _i >= 0 && _i < Possession.BeltSlots && idx < items.Length && !items[idx].IsEmpty() ? items[idx] : null;
|
||||
}
|
||||
|
||||
/// <summary>necropossess belt: положить предмет в ячейку пояса (проверка без мыши).</summary>
|
||||
public static bool DevSetBelt(int _i, ItemStack _s)
|
||||
{
|
||||
if (_bag == null || _i < 0 || _i >= Possession.BeltSlots)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
_bag.SetSlot(_cols + _i, _s);
|
||||
Save();
|
||||
return true;
|
||||
}
|
||||
|
||||
/// <summary>Предмет пояса изменился на месте (износ) - окно и файл.</summary>
|
||||
public static void BeltChanged()
|
||||
{
|
||||
_bag?.onBackpackChanged();
|
||||
Save();
|
||||
}
|
||||
|
||||
/// <summary>Записать после лута (WolfBag.SaveTarget).</summary>
|
||||
public static void SaveNow() => Save();
|
||||
|
||||
@@ -64,8 +95,9 @@ namespace NecromancerTome
|
||||
{
|
||||
Debug.LogWarning("[NecromancerTome] ZombieBag: файл сумки не прочитан (" + e.Message + ") - оставлен как есть");
|
||||
}
|
||||
_bag = new Bag(new Vector2i(SlotsFor(_z), 1), XUiC_ItemStack.StackLocationTypes.LootContainer, null);
|
||||
Debug.Log("[NecromancerTome] ZombieBag: сумка " + _z.EntityName + " - ячеек " + _bag.SlotCount);
|
||||
_cols = Mathf.Max(SlotsFor(_z), Possession.BeltSlots);
|
||||
_bag = new Bag(new Vector2i(_cols, 2), XUiC_ItemStack.StackLocationTypes.LootContainer, null);
|
||||
Debug.Log("[NecromancerTome] ZombieBag: сумка " + _z.EntityName + " - ячеек " + _bag.SlotCount + ", из них пояс " + Possession.BeltSlots);
|
||||
}
|
||||
|
||||
/// <summary>Вселение кончилось: всё из сумки - мешком на месте зомби; погиб - ещё и метка на карте.</summary>
|
||||
|
||||
Reference in New Issue
Block a user