Иконка ресурса

Скидка FCleaner 2.4.0

FCleaner 2.4.0 (обновление)​


Привет! Подкинул небольшое, но полезное обновление для FCleaner.
Основная цель — убрать пару косяков из старой версии и сделать плагин легче для сервера (особенно когда много dropped items).

Что поменялось:​


Исправил систему “кто выбросил предмет”
В старой версии это хранилось криво (uid был не того типа, да и вообще толком не работало).
Теперь нормально: хранится itemUid -> steamId, так что можно точно понимать, что предмет реально выброшен игроком.

Убрал жёстко тяжёлый FindObjectsOfType()
В AutoCleanByType раньше использовался FindObjectsOfType<DroppedItem>() — это жёстко лагает на больших серверах.
Переделал на перебор через BaseNetworkable.serverEntities, стало заметно легче.

Антиспам дропа теперь работает стабильнее
Раньше бан-модуль держал таймеры сброса (они иногда залипали/дублировались, особенно при перезаходах).
Сейчас всё через окно + кулдаун — таймеров нет, поведение предсказуемое.

ZeroPoint теперь виден в отчёте очистки
Раньше чистило, но в сообщении не писало. Теперь ZeroPoint учитывается и отображается.

Добавил мелочи по удобству:​


Команды (консоль):

  • fcleaner.status — показывает предпросмотр, сколько объектов сейчас попадёт под очистку
  • fcleaner.reload — просто перезагружает конфиг без рестарта
Новый параметр в конфиге:
  • "Не очищать предметы, выброшенные игроками"
    Полезно если хочешь чистить мусор/скриптовый дроп, но не трогать выброшенный лут игроков.
  • Вычистили консоль от мусора:
    Консоль сервера больше не забивается кучей логов типа "метка создана" или "ошибка с файлом". Убрал все лишние сообщения, оставил только то, что реально нужно: ошибки в конфиге, инфа о банах игроков и уведомления об очистке. Теперь консоль чистая, как после вайпа!
  • Починили метки на карте:
    Метки были больным местом — то и дело выскакивали ошибки "Couldn't find prefab", потому что файлы игры (prefab'ы) не находились. Пробовал разные варианты: круги (generic_radius), иконки ящиков (cratemarker), даже маркеры взрывов (explosion). Но на некоторых серверах они не работали из-за проблем с версией Rust или Oxide.
    В итоге оставил только метку торгового автомата (vending), которая пашет без сбоев. Она отображается как иконка автомата, и вы можете задать ей любое название в конфиге (по умолчанию "Зона Очистки"). Если метки всё же не работают, просто выключите их в конфиге (ShowMarkersOnMap: false), и плагин будет чистить карту без них.
  • Дали волю с карточками:
    Раньше плагин сам добавлял ключ-карты (синяя, зелёная, красная) в список исключений, чтобы их не чистили, и это бесило, если вы хотели их убирать. Я убрал это поведение, теперь вы сами решаете, что не трогать.
    Добавил настройку AutoAddKeycardsToExcluded (по умолчанию выключена). Если включите, плагин будет защищать карточки, как раньше. Полный контроль в ваших руках!
  • Зафиксили баги:
    Плагин ломался из-за ошибок в коде: то синтаксис кривой, то типы меток не совпадали, то настройки глючили. Всё это починил, так что теперь он собирается без проблем и работает стабильно.
    Ещё сделал метки проще: меньше кода — меньше шансов, что что-то сломается, особенно если файлы игры недоступны.
  • Добавили гибкости в настройки:
    • Новая настройка LogLayerChanges (по умолчанию выключена) позволяет включить логирование изменений слоёв предметов, если вам нужно отладить физику. Без неё консоль не спамит сообщениями вроде "layer 31 -> 17".
    • Можно настроить название меток (MapMarkerName) и отключить их совсем (ShowMarkersOnMap), если они не нужны.
    • Все старые функции (очистка предметов, трупов, рюкзаков, баны за спам) работают как раньше, с теми же настройками.
  • Сохранили ядро плагина:
    FCleaner по-прежнему делает то, за что вы его любите: чистит карту от хлама (предметы, трупы, рюкзаки, неактивные штуки) по расписанию, банит спамеров предметами и шлёт уведомления в чат. Ничего не сломали, только улучшили!

Обновление плагина FCleaner до версии 2.2.3​

Всем привет!
Представляю обновление для FCleaner — версию 2.2.3. Основной фокус был на интеграции с плагином JetPack, но мы также рассмотрели и протестировали несколько других улучшений. Вот полный список изменений:

1. Интеграция с JetPack​

  • Что сделано: Добавлена защита джетпаков от удаления во время очистки. Теперь сущности DroppedItem, созданные JetPack (с shortname "largebackpack" и дочерними BaseMountable), исключаются из всех списков очистки.
  • Как работает: Проверка происходит на этапе подготовки списков для удаления, что предотвращает случайное уничтожение джетпаков и падение игроков во время полёта.
  • Где применяется: В основном модуле очистки (CleanupModule), а также в авто-очистке по типу (AutoCleanByTypeModule).

2. Попытка защиты недавно выброшенных предметов​

  • Что тестировалось: Добавление задержки перед очисткой выброшенных предметов (опция DroppedItemProtectionTime), чтобы игроки могли их подобрать.
  • Результат: Реализация столкнулась с проблемами из-за несовпадения типов Item.uid (ulong) и NetworkableId (uint), что вызвало ошибки компиляции. В итоговую версию это не вошло, но идея остаётся в планах с более надёжной логикой.

3. Тестирование очистки по расписанию​

  • Что тестировалось: Добавление расписания очистки через список времени (CleanupSchedule, например, "12:00", "18:00") с запуском через таймер.
  • Результат: Работало корректно в тестах, но было исключено из финальной версии 2.2.3, чтобы сохранить исходную простоту плагина. Может быть добавлено в будущем как опция.

4. Оптимизация и отладка​

  • Что сделано: В процессе работы над интеграцией с JetPack были протестированы разные подходы (например, использование HashSet для хранения ID джетпаков, проверка через GetComponent). Итоговая версия использует самый надёжный и простой метод — проверку по shortname и дочерним сущностям.
  • Исправления: Устранены потенциальные ошибки, связанные с асинхронностью спавна DroppedItem, что улучшило стабильность.
  • Мне нравится
Реакции: Rhaegar и Voldemor
  • Улучшено отслеживание выброшенных ключ-карт: теперь не удаляются те, что появляются на монументах, а только выброшенные игроками.
  • Обновлён список исключённых предметов по умолчанию, администраторы могут свободно его менять без автоматического отката.
  • Добавлена многоязычная поддержка (русский, английский, французский) для сообщений плагина.
  • Доработан режим пошаговой очистки, позволяющий удалять большое количество сущностей пакетами с настраиваемой задержкой.
  • Небольшие оптимизации кода и улучшение стабильности.
Расширенная Система Банa:

  • Бан по IP: Добавлена возможность банить игроков по их IP-адресу для более строгого контроля нарушителей. Это реализовано через внешний метод RunServerCommand, который позволяет выполнять консольные команды от имени сервера.
  • Гибкость Бана: В конфигурации можно выбрать тип бана (IP или SteamID) и настроить соответствующие параметры.
  • Кастомная команда для бана: Теперь можно использовать собственную команду для бана игроков, что позволяет интегрировать FCleaner с другими системами бана на сервере.
FCleaner 1.3.0 — что нового в обновлённой версии:

  1. Оптимизация сбора сущностей: вместо нескольких вызовов FindObjectsOfType используется единый проход по всем сущностям. Это значительно уменьшает нагрузку на сервер при подготовке к очистке и снижает возможные фризы на больших картах.
  2. Отключение коллизий у выпавших предметов:
    • Предметы принудительно переводятся на слой 17.
    • Physics.IgnoreLayerCollision(17, 17) позволяет полностью отключить коллизии между ними, при этом остаются коллизии с землёй.
    • Это помогает избежать «застреваний» и нагромождения объектов, а также улучшает производительность.
  3. Разделение уведомлений:
    • Теперь есть два отдельных параметра: EnableCleanupMessages (включает/отключает сообщения об очистке) и EnableDropWarnings (отвечает за предупреждения игрокам о бане при массовом выбросе).
    • Можно отключить постоянные оповещения об очистке, но при этом оставить включёнными предупреждения о бане за спам выброса.
  4. Пошаговая очистка (Chunk Cleanup):
    • При большом количестве объектов используется поэтапное удаление пачками с настраиваемым размером пакета (CleanupChunkSize) и задержкой между ними (CleanupChunkDelay), что помогает избежать резких просадок FPS.
  5. Автоочистка по типам (AutoCleanByType):
    • По умолчанию она может срабатывать сразу в OnEntitySpawned при достижении заданного порога одного типа предмета.
    • Дополнительно повторная проверка происходит при каждом цикле плановой очистки.
  6. Доработанный бан за массовый выброс:
    • Отдельное разрешение fcleaner.admin для админов (не учитываются в банах).
    • Отдельное разрешение fcleaner.notify для мониторинга (админы с этим разрешением получают уведомление о потенциальном бане игрока).
    • Настраиваемые пороги предупреждения (ItemDropWarningThreshold) и бана (ItemDropBanThreshold), а также время сброса счётчика (ItemDropResetTime).
Ниже список основных изменений, внесённых в последнюю версию FCleaner:

  1. Мгновенная автоочистка по типам (AutoCleanByType):
    • Если включена опция Включитьавтоочисткупотипам и количество выброшенных предметов одного типа достигает Порогавтоочисткипотипам, плагин сразу удаляет все эти предметы, без ожидания запланированной очистки.
  2. Исправление повторов в списке исключённых предметов:
    • Теперь плагин при загрузке конфига удаляет дубликаты в "Списокисключенныхпредметов", чтобы он содержал только уникальные shortname.
  3. Регистрация разрешений (permissions) в OnServerInitialized:
    • Добавлен вызов permission.RegisterPermission("fcleaner.admin", this); и permission.RegisterPermission("fcleaner.notify", this);, чтобы избежать ошибки «Permission 'fcleaner.notify' doesn't exist» при попытке выдать права.
  4. Пошаговая очистка (EnablePartialCleanup):
    • Реализован механизм «chunk-based cleanup», позволяющий очищать объекты кусками, чтобы избежать резкой нагрузки на сервер при большом количестве предметов.
  5. Улучшенная отладка (logging) при спавне сущностей и их удалении:
    • Добавлен вывод информации в консоль при автоочистке, что позволяет видеть, какие типы предметов и в каком количестве были удалены.
  6. Прочие мелкие исправления и оптимизации:
    • Устранены ситуации, когда очищаемые предметы могли оставаться на клиенте в виде «призраков».
    • Дополнительные проверки на типы выброшенных объектов, чтобы успешнее удалять именно те сущности, которые соответствуют DroppedItem.
  • RCON-команда для принудительной очистки
    • Добавлена консольная команда fcleaner.forceclean (через [ConsoleCommand("fcleaner.forceclean")]), позволяющая вызвать очистку в любой момент.
    • Команда возвращает ответ в консоль и (при желании) оповещает игроков в чате.
  • Возможность отключать/включать логику бана
    • Появился параметр в конфиге BanEnabled, который, если false, полностью отключает бан за «спам» выбрасывания предметов.
    • При отключённом бане счётчик выброшенных предметов у игроков учитываться может, но бан никогда не будет выдан.
  • Логика бана при выбрасывании предметов
    • Определён порог предупреждения (ItemDropWarningThreshold) и порог бана (ItemDropBanThreshold).
    • При достижении порога предупреждения игроку выводится сообщение и оповещаются админы.
    • При достижении порога бана игрок автоматически банится (если BanEnabled = true).
    • Счётчик выброшенных предметов сбрасывается через ItemDropResetTime секунд.
  • Автоочистка предметов по типу
    • Появился параметр AutoCleanByTypeEnabled и AutoCleanTypeThreshold.
    • Если в мире обнаруживается тип предмета, превысивший заданное количество, все такие предметы немедленно удаляются (автоочистка).
  • Поэтапная (пошаговая) очистка
    • Если включена (EnablePartialCleanup = true), то все сущности (предметы, трупы и т.п.) удаляются не сразу, а «пакетами» (чанками).
    • Параметры CleanupChunkSize (сколько за раз) и CleanupChunkDelay (задержка в секундах между пакетами) позволяют снизить нагрузку на сервер и избежать возможных лагов при массовом удалении большого количества объектов.
  • Отключение коллизии у выброшенных предметов
    • При включённом параметре DisableItemCollisions = true, у каждого DroppedItem при спавне отключается коллайдер (collider.enabled = false).
    • Это может помочь избежать «залипаний» предметов или лагов, связанных с физическими коллизиями большого числа объектов.
  • Чёрный список (список исключённых предметов)
    • Поле ExcludedItems хранит список shortname-предметов, которые не будут удаляться при очистке.
    • По умолчанию возвращён набор: horsedung, keycard_blue, keycard_green, keycard_red.
  • RCON и чат-уведомления
    • При запуске очистки, а также при предупреждениях о бане, плагин может выводить сообщения в чат (если EnableChatNotifications = true).
    • При принудительной очистке через RCON возвращается сообщение в консоль.
  • Метки на карте (возможность отключения/включения)
    • Настройка ShowMarkersOnMap: если true, перед очисткой на карте устанавливаются маркеры (VendingMachineMapMarker) в местах, где будут удаляться предметы/трупы.
    • После очистки все маркеры автоматически удаляются.
  • Перевод JSON-полей на русский язык через атрибуты [JsonProperty("...")]
    • В самом коде вы обращаетесь к полям на английском (например, config.PrefixColor, config.CleanInterval).
    • При этом в конфигурационном JSON-файле они отображаются по-русски (например, "ЦветПрефикса": "#34eb4f").
    • Это сделано, чтобы администраторам сервера было проще и нагляднее вносить изменения в файл конфигурации, не ломая при этом логику кода.
  • Кастомизация уведомлений и локализация
    • Все основные сообщения вынесены в lang.RegisterMessages(...), где есть английская (en) и русская (ru) локализации.
    • Плагин автоматически подберёт нужный перевод на основе настроек языка сервера или вручную выбранного языка (при желании).
  • Общие улучшения кода и структуры
    • Добавлены комментарии и более гибкие настройки (например, время уведомления перед очисткой, интервал очистки).
    • Убраны «жёстко» захардкоженные моменты, сделано больше параметров, которые админ может менять в конфиге.
    • Улучшена читаемость и поддерживаемость плагина.
перефикс предыдущей обновы, убрал все спамы в консоль кроме как за 5 предметов до бана