SourceMod Ввод в файловую структуру (и информация о том, что можно удалить)

Kruzya

Участник
Сообщения
12,970
Реакции
10,914
  • Команда форума
  • #1
Сначала разберёмся с тем, что и где SourceMod держит.
  • bin
    Основная папка. Здесь лежит:
    • Загрузчик Сурсмода (sourcemod_mm).
      Входная точка, с которой MMS начинает загрузку.
    • Общая логика между всеми играми (sourcemod.logic).
      К примеру, загрузка плагинов SM, расширений, API (датапаки, админки, работа с переводами...) и прочее.
    • Виртуальная машина SourcePawn (sourcepawn.jit.x86; если запускается 64-битный SourceMod, то sourcepawn.vm).
      Центр скриптового языка. Предоставляет возможность запускать SMX-файлы, изолируя их от системы.
    • Game-Specific бинарники (sourcemod.2.tf2, sourcemod.2.css и так далее).
      От игры к игре, у движка отличается SDK. Иногда это буквально смещение функции в таблице на два элемента из-за других, специфичных для ревизии движка изменений, иногда ещё чего. Из-за этого для каждой игры приходится содержать свой бинарь с "мостом" к движку.
  • configs
    Конфигурационные файлы SourceMod и плагинов.
  • data
    Сами разработчики никак не классифицируют назначение этой папки, но используют её для хранения тех же локальных баз SQLite. Так что это скорее некое хранилище для данных плагинов, к которым нужен постоянный доступ, и которые пользователи вручную изменять не должны.
  • extensions
    Расширения для SourceMod. Они могут как изменять какое-то поведение игры/движка, так и расширять API плагинов. А могут и то, и другое.
    По-умолчанию, здесь уже лежат следующие расширения:
    • BinTools (bintools.ext).
      Вспомогательный функционал для вызовов функций движка.
    • Client Preferences (clientprefs.ext).
      Расширение, реализующее "куки" для плагинов, которые хранятся на сервере. Хороший способ сохранять какие-то настройки пользователя.
    • CS Tools (game.cstrike.ext.2.*).
      Специфичное расширение для CS:S и CS:GO, реализовывает некоторый дополнительный функционал для плагинов (форварды покупки оружия, например).
    • Webternet (webternet.ext).
      Расширение, предоставляющее HTTP-клиент (cURL) для расширений. Для плагинов, данный функционал недоступен (но его пытались очень давно "пробросить").
    • GeoIP (geoip.ext).
      Расширение для работы с GeoIP базой от MaxMind (старого образца).
    • MySQL-DBI (dbi.mysql.ext).
      Драйвер для "единого интерфейса БД" для работы с MySQL. Реализует основной функционал общения с базой.
    • Regex (regex.ext).
      Предоставляет для плагинов API для работы с регулярными выражениями.
    • SDK Hooks (sdkhooks.ext.*).
      Разнообразные хуки для плагинов, по типу "при прикосновении" (одна энтитя - с другой), PostThink, смена оружия и прочее.
    • SDK Tools (sdktools.ext.*).
      Разнообразные вспомогательные функции для плагинов, по типу воспроизведения звука, работы с таблицами строк (stringtable) и многое другое.
    • SQLite (dbi.sqlite.ext).
      Драйвер для "единого интерфейса БД" для работы с SQLite. Реализует основной функционал общения с базой.
    • TF2 Tools (game.tf2.ext.2.tf2).
      Вспомогательное расширение для работы со специфичными для Team Fortress 2 вещами ("конды", смена PowerPlay состояния игрока, проверка на нахождение игрока в "дуэли", получение активного класса и т.д.).
    • Top Menus (topmenus.ext).
      Создание "сортируемых" вложенных меню. На основе этого расширения работает стандартное админ-меню, и проблему с "кнопкой", когда открывается совсем другое подменю - именно его вина.
    • Automatic Updater (updater.ext).
      Автоматический "обновлятор" геймдаты SourceMod.
  • gamedata
    Вспомогательные метаданные, которые могут зависеть от игры и от ОС, где запускается сервер (адреса функций в памяти, "смещения" и прочее).
  • logs
    Папка для логов, которые создаются в процессе работы плагинов, расширений и самого SM.
  • plugins
    Плагины, которые запускаются виртуальной машиной SourcePawn.
    Поддерживается вложенная (древовидная) структура. Вы можете создавать папки внутри этой папки.
    Если папка называется optional или disabled, её содержимое не загружается автоматически.
  • scripting
    Папка для хранения исходного кода плагинов, вспомогательных (include) файлов. Так же здесь располагается компилятор для той ОС, для которой скачан SourceMod, но Вам никто не мешает компилировать плагины на совсем другой ОС (см. подробнее в теме про компиляцию плагинов).
  • translations
    Переводы плагинов. Здесь хранятся "фразы", которые используются плагинами и выводятся конечному игроку/администратору.
  • GPLv2.txt / GPLv3.txt / LICENSE.txt
    Лицензии, с которыми Вы должны ознакомиться и принять, если используете SourceMod или производите написание плагинов для него. Но в России (и в СНГ в целом) это не работает.
После распаковки, SourceMod занимает на диске 65,5 МБайт пространства (Windows-версия, билд 1.10.0.6488).
1601808415307.png

Попробуем его почистить и посмотреть, сколько места нам удастся сэкономить.
Обратите внимание, что чистка рассматривается для "только что установленного" SourceMod. Для случаев, где уже имеются какие-то плагины, понадобится "корректировка".
  1. Начнём с самого простого. Лицензии. Их Вы можете безболезненно удалить. На работу самого SourceMod это не повлияет никак.
  2. В папке bin можно абсолютно безболезненно удалять dll, которые не относятся к Вашей игре. Например, для CS:S я удаляю всё, кроме sourcemod.2.css, sourcemod.logic, sourcemod_mm и sourcepawn.jit.x86. Аналогичную чистку можно произвести в директории MetaMod: Source.
  3. В конфигах (configs) можно удалить sql-init-scripts (если Вы не используете стандартную админку SM, основывающуюся на хранении админов в СУБД; он по-умолчанию отключен и находится в disabled).
    Если не используется стандартный файловый загрузчик админок (admin-flatfile), можно так же удалить admins.cfg, admins_simple.ini, admin_groups.cfg, admin_overrides.cfg).
    Если не используется стандартный плагин банов, можно удалить banreasons.txt.

    Так же, для экономии пространства (незначительно поможет), можно:
    • Очистить languages.cfg от неиспользуемых языков, оставив только английский и русский.
    • Если нет необходимости использовать разные списки карт в разных местах (админка, nominate, votemap), можно удалить неиспользуемые секции. Если в конечном итоге adminmenu_maplist.ini фигурировать в файле не будет, можно так же удалить его.
  4. Обратите внимание, что папку gamedata трогать смысла ноль. Updater всё равно всё перекачает (если включен) и вернёт на место. И его лучше не выключать, если у Вас часто обновляемая (или ломаемая) игра, по типу CS:GO.
  5. В папке plugins можно полностью удалить неиспользуемые плагины, и папку disabled.
  6. Откажитесь от хранения исходного кода плагинов (и инклудов). Это добавит Вам места, но одновременно повысит риск, если Вам резко понадобится что-то поправить в плагинах, а исходный код потерян/не представляется возможным найти.
  7. Если Вы ранее чистили languages.cfg, то можете удалить неиспользуемые языки из папки translations, а так же - файлы переводов от удалённых плагинов.
После проведения всей чистки "ядра SM", можно получить экономию места в 3 раза:
1601809405381.png
 
Последнее редактирование:

Grey83

не пишу плагины с весны 2022
Сообщения
8,519
Реакции
4,979
итого мы сэкономили АЖ 42МБ
как раз как занимает один-два скина
 

ShyperOne

Участник
Сообщения
32
Реакции
3
Игра CSS. Можете посмотреть? Ничего лишнего не удалил?
Что может означать эта ошибка? Файл core.phrases.txt я вообще не трогал...
C-подобный:
L 11/26/2020 - 14:27:28: [SM] Could not find core phrase: Back
L 11/26/2020 - 14:27:28: [SM] Could not find core phrase: Exit
 

Вложения

  • metamod.PNG
    metamod.PNG
    5.5 КБ · Просмотры: 47
  • sourcemod.PNG
    sourcemod.PNG
    5.8 КБ · Просмотры: 46
Последнее редактирование:

ShyperOne

Участник
Сообщения
32
Реакции
3
@Young <, я уже понял, что в основных переводах нет перевода ru, а только en...
 

Young <

Now, finally free
Сообщения
1,263
Реакции
505
@ShyperOne, так если он её вообще не находит, значит не только ru
 

ShyperOne

Участник
Сообщения
32
Реакции
3
@Young <, вернул в файл language и папку translations прошлые переводы и всё стало хорошо :D
 
Сверху Снизу