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, что улучшило стабильность.
- Улучшено отслеживание выброшенных ключ-карт: теперь не удаляются те, что появляются на монументах, а только выброшенные игроками.
- Обновлён список исключённых предметов по умолчанию, администраторы могут свободно его менять без автоматического отката.
- Добавлена многоязычная поддержка (русский, английский, французский) для сообщений плагина.
- Доработан режим пошаговой очистки, позволяющий удалять большое количество сущностей пакетами с настраиваемой задержкой.
- Небольшие оптимизации кода и улучшение стабильности.
Расширенная Система Банa:
- Бан по IP: Добавлена возможность банить игроков по их IP-адресу для более строгого контроля нарушителей. Это реализовано через внешний метод RunServerCommand, который позволяет выполнять консольные команды от имени сервера.
- Гибкость Бана: В конфигурации можно выбрать тип бана (IP или SteamID) и настроить соответствующие параметры.
- Кастомная команда для бана: Теперь можно использовать собственную команду для бана игроков, что позволяет интегрировать FCleaner с другими системами бана на сервере.
FCleaner 1.3.0 — что нового в обновлённой версии:
- Оптимизация сбора сущностей: вместо нескольких вызовов FindObjectsOfType используется единый проход по всем сущностям. Это значительно уменьшает нагрузку на сервер при подготовке к очистке и снижает возможные фризы на больших картах.
- Отключение коллизий у выпавших предметов:
- Предметы принудительно переводятся на слой 17.
- Physics.IgnoreLayerCollision(17, 17) позволяет полностью отключить коллизии между ними, при этом остаются коллизии с землёй.
- Это помогает избежать «застреваний» и нагромождения объектов, а также улучшает производительность.
- Разделение уведомлений:
- Теперь есть два отдельных параметра: EnableCleanupMessages (включает/отключает сообщения об очистке) и EnableDropWarnings (отвечает за предупреждения игрокам о бане при массовом выбросе).
- Можно отключить постоянные оповещения об очистке, но при этом оставить включёнными предупреждения о бане за спам выброса.
- Пошаговая очистка (Chunk Cleanup):
- При большом количестве объектов используется поэтапное удаление пачками с настраиваемым размером пакета (CleanupChunkSize) и задержкой между ними (CleanupChunkDelay), что помогает избежать резких просадок FPS.
- Автоочистка по типам (AutoCleanByType):
- По умолчанию она может срабатывать сразу в OnEntitySpawned при достижении заданного порога одного типа предмета.
- Дополнительно повторная проверка происходит при каждом цикле плановой очистки.
- Доработанный бан за массовый выброс:
- Отдельное разрешение fcleaner.admin для админов (не учитываются в банах).
- Отдельное разрешение fcleaner.notify для мониторинга (админы с этим разрешением получают уведомление о потенциальном бане игрока).
- Настраиваемые пороги предупреждения (ItemDropWarningThreshold) и бана (ItemDropBanThreshold), а также время сброса счётчика (ItemDropResetTime).
Ниже список основных изменений, внесённых в последнюю версию FCleaner:
- Мгновенная автоочистка по типам (AutoCleanByType):
- Если включена опция Включитьавтоочисткупотипам и количество выброшенных предметов одного типа достигает Порогавтоочисткипотипам, плагин сразу удаляет все эти предметы, без ожидания запланированной очистки.
- Исправление повторов в списке исключённых предметов:
- Теперь плагин при загрузке конфига удаляет дубликаты в "Списокисключенныхпредметов", чтобы он содержал только уникальные shortname.
- Регистрация разрешений (permissions) в OnServerInitialized:
- Добавлен вызов permission.RegisterPermission("fcleaner.admin", this); и permission.RegisterPermission("fcleaner.notify", this);, чтобы избежать ошибки «Permission 'fcleaner.notify' doesn't exist» при попытке выдать права.
- Пошаговая очистка (EnablePartialCleanup):
- Реализован механизм «chunk-based cleanup», позволяющий очищать объекты кусками, чтобы избежать резкой нагрузки на сервер при большом количестве предметов.
- Улучшенная отладка (logging) при спавне сущностей и их удалении:
- Добавлен вывод информации в консоль при автоочистке, что позволяет видеть, какие типы предметов и в каком количестве были удалены.
- Прочие мелкие исправления и оптимизации:
- Устранены ситуации, когда очищаемые предметы могли оставаться на клиенте в виде «призраков».
- Дополнительные проверки на типы выброшенных объектов, чтобы успешнее удалять именно те сущности, которые соответствуют 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) локализации.
- Плагин автоматически подберёт нужный перевод на основе настроек языка сервера или вручную выбранного языка (при желании).
- Общие улучшения кода и структуры
- Добавлены комментарии и более гибкие настройки (например, время уведомления перед очисткой, интервал очистки).
- Убраны «жёстко» захардкоженные моменты, сделано больше параметров, которые админ может менять в конфиге.
- Улучшена читаемость и поддерживаемость плагина.