Stun Combat Drones


Боевые дроны, поражающие врагов электрическим током. Включает в себя снаряжение, улучшения и капсулы в виде гранат. Combat drones that stun enemies with electric shocks. Includes equipment, upgrades, and grenade-style capsules.

5 days ago
2.0
81
Combat Armor

Changelog

Version: 2.2.1
Date: 2025-01-31
  Bugfixes:
    - Fixed crash in multiplayer when a player throws a stun grenade before the host's on_init runs.
      The startup settings cache (CACHED_BASE_AOE_RADIUS, CACHED_BASE_STUN_TIME) is now lazily 
      initialized on first access, ensuring it works correctly for all players in multiplayer.

  Исправления:
    - Исправлен вылет в мультиплеере, когда игрок бросает оглушающую гранату до того, как 
      на хосте выполнится on_init. Кеш startup-настроек теперь инициализируется лениво при 
      первом обращении, что гарантирует корректную работу для всех игроков в мультиплеере.
Version: 2.2.0
Date: 2025-01-31
  Optimizations:
    - CRITICAL: Removed global enemy search every 20 ticks that was searching ALL enemies on ALL surfaces.
      Now tracks only stunned enemies in a cache, reducing CPU load by 90%+ in late-game scenarios.
    - Implemented player data caching system: equipment status, quality level, and energy are now cached
      and only updated when armor/equipment changes (via event handlers).
    - Replaced inventory slot-by-slot iteration with get_item_count() for drone ammo checks.
    - Optimized find_nearest_enemy: reduced search limit from 20 to 10, removed unnecessary table.sort().
    - Added periodic cleanup routine (every 60 seconds) for stale projectile data and disconnected player caches.
    - Cached startup settings to avoid repeated settings.startup lookups.
    - Local references to frequently used Lua functions (pairs, math.random, math.floor, table.insert, table.remove).
  Multiplayer:
    - Player cache system now properly handles multiple players with separate data per player_index.
    - Cache invalidation on equipment/armor changes is deterministic and synced across clients.
  Bugfixes:
    - Fixed potential memory leak in drone_projectiles storage (added cleanup for orphaned entries).
    - Fixed edge case where equipment_ref could become invalid between cache reads.
  Info:
    - Added remote interface function get_stats() for debugging (returns stunned_count, projectiles_count, cached_players).

  Оптимизации:
    - КРИТИЧНО: Убран глобальный поиск врагов каждые 20 тиков, который искал ВСЕХ врагов на ВСЕХ поверхностях.
      Теперь отслеживаются только оглушённые враги в кеше, снижение нагрузки на CPU на 90%+ в поздней игре.
    - Реализована система кеширования данных игрока: статус оборудования, уровень качества и энергия
      теперь кешируются и обновляются только при изменении брони/оборудования.
    - Заменён перебор слотов инвентаря на get_item_count() для проверки наличия боеприпасов.
    - Оптимизирован поиск ближайшего врага: уменьшен лимит поиска с 20 до 10, убрана ненужная сортировка table.sort().
    - Добавлена периодическая очистка (каждые 60 секунд) устаревших данных снарядов и кешей отключившихся игроков.
    - Закешированы startup-настройки, чтобы избежать повторных обращений к settings.startup.
    - Локальные ссылки на часто используемые функции Lua (pairs, math.random, math.floor, table.insert, table.remove).
  Мультиплеер:
    - Система кеширования игроков корректно обрабатывает нескольких игроков с отдельными данными по player_index.
    - Инвалидация кеша при изменении оборудования/брони детерминирована и синхронизирована между клиентами.
  Исправления:
    - Исправлена потенциальная утечка памяти в хранилище drone_projectiles (добавлена очистка осиротевших записей).
    - Исправлен краевой случай, когда equipment_ref мог стать невалидным между чтениями кеша.
  Информация:
    - Добавлена функция remote-интерфейса get_stats() для отладки (возвращает stunned_count, projectiles_count, cached_players).
Version: 2.1.0
Date: 2025-01-05
  Features:
    - Reworked stun drone and stun grenade behavior: damage and stun are now applied exactly on projectile impact via scripted handlers, not instantly on launch.
    - Added full quality support:
      * Stun drone equipment quality now increases damage, radius and stun duration.
      * Stun drone ammo quality increases per-shot damage, radius and stun duration.
      * Stun grenade quality increases AOE damage, radius and stun duration.
    - Added energy mechanics for the stun drone equipment:
      * Equipment now has its own internal energy buffer (500 kJ by default).
      * At normal quality this buffer is enough for 5 drone launches without recharging.
      * Higher quality effectively increases the number of shots from a full charge by lowering energy cost per shot.
    - Added a toggle for the stun drone system:
      * Shortcut button "Stun Drone System" in the shortcut bar.
      * Hotkey: Shift + T.
      * The system can be turned on/off per player.
  Changes:
    - Disabled the built-in active-defense attack of the equipment; all attack behavior is now fully handled by script to avoid double damage and ammo-free shots.
    - Separated projectile visuals:
      * Drones use stun-drone-moving / hr-stun-drone-moving.
      * Stun grenades use stun-grenade-moving / hr-stun-grenade-moving and appear smaller than drones.
    - Equipment tooltip now shows a non-zero "Energy per use" and a reasonable max power input, matching its scripted energy behavior.
    - Reworked stun logic to use only stickers and scripted AOE, avoiding engine-side create-sticker in projectile definitions.
  Bugfixes:
    - Fixed crashes caused by accessing invalid entities after they were killed by damage (added .valid checks everywhere).
    - Fixed errors when trying to create stun stickers on entities that do not accept stickers.
    - Fixed ammo consumption logic so that stun drone ammo of any quality (including legendary) is correctly detected and consumed.
    - Fixed desynchronization of visual effects and actual damage/stun application for stun drones.
    - Shortcut state:
      * The stun drone shortcut is now greyed out and unavailable when the player has no stun drone equipment in armor.
      * Shortcut toggle state is correctly updated on armor/equipment changes and on load.
       
  Новое:
    - Полностью переработана логика автодронов и оглушающих гранат: урон и стан теперь происходят строго в момент попадания снаряда (через on_script_trigger_effect), а не сразу при выстреле.
    - Добавлена поддержка качества:
      * Качество оборудования оглушающих дронов усиливает урон, радиус и длительность стана.
      * Качество боеприпасов оглушающих дронов влияет на урон, радиус и длительность стана конкретного выстрела.
      * Качество оглушающих гранат усиливает AOE-урон, радиус и длительность стана.
    - Добавлена энергетика для системы защиты:
      * Оборудование имеет собственный энергетический буфер (500 кДж по умолчанию).
      * При обычном качестве буфера хватает примерно на 5 выстрелов без подзарядки.
      * С ростом качества фактическое количество выстрелов от полного заряда растёт за счёт снижения стоимости выстрела по энергии.
    - Добавлена кнопка включения/выключения системы:
      * Ярлык «Система защиты оглушающими дронами» в панели ярлыков.
      * Горячая клавиша: Shift + T.
      * Состояние (вкл/выкл) хранится отдельно для каждого игрока.
  Изменения:
    - Встроенная атака active-defense-оборудования отключена, всё поведение реализовано только скриптом, чтобы избежать двойного урона и «бесплатных» выстрелов.
    - Разделены визуальные эффекты полёта: дроны и гранаты используют свои спрайты, гранаты визуально меньше.
    - Подсказка оборудования теперь показывает осмысленную «Энергию за использование» и максимальное потребление энергии, соответствующие скриптовой логике.
    - Логика стана полностью переведена на скриптовые AOE и стикеры, без create-sticker в определении снаряда.
  Исправления:
    - Исправлены вылеты при обращении к невалидным сущностям после нанесения урона (добавлены проверки .valid).
    - Исправлены ошибки при попытке создать стикер на сущностях, которые не поддерживают стикеры.
    - Исправлена проблема, из-за которой система не видела/не тратила боеприпасы улучшенного качества (включая легендарные).
    - Исправлена рассинхронизация между визуальным полётом дрона и фактическим моментом нанесения урона и стана.
    - Ярлык системы теперь становится серым и недоступен, если в броне нет соответствующего оборудования, и автоматически обновляется при изменении брони/оборудования.