Ru AMX Mod X FAQ

From AlliedModders Wiki
Revision as of 10:31, 19 October 2008 by VEN (talk | contribs) (Как полностью отключить/включить плагин (модуль)?)
Jump to: navigation, search


Contents

Общие положения, термины, сокращения и условные обозначения

  • HL или HL1 - аббревиатура от Half-Life (часть первая);
  • Mod - "мод", модификация - дополнение к чему-либо, как правило, расширяющее/изменяющее функциональность;
  • HL Engine - "движок" Half-Life - "центральный модуль", осуществляющий выполнение базовых "общемодовых" задач;
  • MM - Metamod - сторонний мод особого типа, является промежуточным звеном в системе "HL движок - HL мод";
  • AMXX - аббревиатура от AMX Mod X - Metamod plugin ("плагин"), своего рода Metamod мод;
  • Map - "карта" - определяет внешний вид территории, на которой происходит игровое действие;
  • World - "мир" - все пространство, которое занимает карта, а также область, находящаяся за картой;
  • Spawn - "спавн" - момент, когда игрок появляется в мире, обретая физическое тело;
  • SinglePlayer - "синглплеер" - игровой тип, когда одновременно в игре может участвовать только один игрок;
  • MultiPlayer - "мультиплеер" - игровой тип, когда одновременно в игре может участвовать несколько игроков;
  • DM - аббревиатура от Death Match - динамичный мультиплеер тип игры, когда после "смерти" игрока происходит его скорый спавн ("респавн");
  • HLDM - аббревиатура от Half-Life Death Match - оригинальный HL мод DM типа;
  • CS - аббревиатура от Counter-Stirke - наиболее популярный HL мод;
  • VALVE - корпорация, разработчик HL и CS, также редко используется как синоним HLDM, подчеркивая название директории мода ("valve");
  • $MODDIR - способ условного обозначения корневой директории мода, например: cstrike, valve;
  • $MMDIR - способ условного обозначения относительного пути (относительно пути к $MODDIR) к корневой директории Metamod, по умолчанию: addons\metamod;
  • $AMXMODX - способ условного обозначения относительного пути (относительно пути к $MODDIR) к корневой директории AMX Mod X, по умолчанию: addons\amxmodx.


Общие вопросы

Где скачать последнюю версию AMX Mod X?

Последнюю версию всегда можно скачать на официальном сайте AMX Mod X в разделе закачек.

А что именно качать?

Качайте либо инсталлятор (AMX Mod X Full Installer), который включает базовый AMX Mod X пакет, все AMX Mod X дополнения для HL модов, а также AMXX-Studio (специализированный редактор AMX Mod X плагинов), либо, если готовы произвести установку AMX Mod X вручную, а также не желаете закачивать все существующие AMX Mod X дополнения для HL модов, качайте базовый архив (AMX Mod X Base), а затем дополнение для интересующего вас HL мода. Сама по себе базовая поставка практически во всех случаях будет достаточна только для HLDM мода.

Чем отличается AMX Mod X от AMX Mod?

Буквой X ;). На самом деле отличий очень много:
  • AMX Mod X поддерживается до сих пор, а поддержка AMX Mod была завершена примерно в 2006 году;
  • функциональность AMX Mod X значительно превосходит AMX Mod, это также касается и расширенной поддержки других модов, в то время как AMX Mod поддерживал только HLDM, CS и CZ;
  • AMX Mod X принято считать быстрее AMX Mod;
  • плагины AMX Mod X не совместимы с плагинами AMX Mod;
  • плагины AMX Mod 0.9.9 совместимы с AMX Mod X, если последний работает в режиме совместимости(?);
  • плагины для AMX Mod имеют расширение .amx, а плагины AMX Mod X - .amxx;
  • TODO: дополнить список

Как полностью отключить AMX Mod X?

В файле $MMDIR\plugins.ini (по умолчанию: addons\metamod\plugins.ini) необходимо закомментировать строку типа:
win32 addons\amxmodx\dlls\amxmodx_mm.dll
т.е. добавить в начало строки cимвол(ы) начала комментария (# или //), например:
//win32 addons\amxmodx\dlls\amxmodx_mm.dll
После чего следует сохранить изменения в файле и перезапустить сервер.

Как найти причину "падений" сервера?

Чтобы убедиться, что причина "падений" действительно в AMX Mod X, необходимо полностью его отключить. После чего посредством серверной консольной команды meta list следует убедиться, что AMX Mod X не запущен. Теперь необходимо снова попытаться воспроизвести "падение" сервера. Если этого удалось достигнуть вновь, очевидно, что истоки проблемы кроются за пределами AMX Mod X.
Иначе виновником "падений" может являться один из плагинов, поэтому для подтверждения данного предположения следует отключить все плагины без исключения. После чего посредством серверной консольной команды amxx plugins необходимо убедиться, что ни один из плагинов не запущен. Теперь следует снова попытаться воспроизвести "падение" сервера. Если этого удалось достигнуть вновь, очевидно, что истоки проблемы кроются за пределами плагинов - в самом AMX Mod X либо его модулях.
Иначе виновником "падений" является один из плагинов, который необходимо локализовать. Если подозреваемых плагинов большое количество, то следует последовательно включать половину (т.е. сначала 1/2, затем 1/4, после чего 1/8 и так далее) отключенных плагинов с последующей проверкой на "падение". При возникновении "падений", очевидно, что плагин-виновник находится в последней группе включенных плагинов, поэтому необходимо последовательно выключать половину (т.е. сначала 1/2, затем 1/4, после чего 1/8 и так далее) плагинов именно последней группы с последующей проверкой на "падение". При исчезновении "падений" следует снова повторить вариант со включением/выключением плагинов, описанный выше, но уже для локализованной группы, которая с каждым повторением данных действий будет уменьшаться, и в конечном итоге в ней останется только один плагин, который и является причиной "падений".
Метод проверки модулей на причастность к "падению" сервера аналогичен приведенному выше методу для плагинов.
Если ничего из вышеописанного не прояснило ситуацию, и если режим HL logging был активирован (серверная консольная команда log on), следует попытаться найти причину в последних по дате изменения файлах директории HL логов - $MODDIR/logs (например, для cstrike мода - по умолчанию cstrike\logs).
Также, возможно, есть смысл проверить системный журнал на наличие записей об ошибке самого приложения hl.exe, перейдя в Панель управления(Control Panel) -> Администрирование(Administration) -> Просмотр событий(Event viewer).

Как запустить два различных сервера AMX Mod X?

К примеру, вы хотите запустить два различных сервера из одной cstrike директории на базе различных AMX Mod X/Metamod плагинов, настроек и прочего. Это решаемо. Один из примеров для win32 системы приведен ниже:
  • cоздать отдельную AMX Mod X директорию с необходимыми файлами, например: .\addons\amxmodx2;
  • в .\addons\amxmodx2\configs\core.ini везде изменить amxmodx на amxmodx2;
  • создать отдельный файл загрузки Metamod плагинов, например: .\addons\metamod\plugins2.ini;
  • в созданный plugins2.ini файл вписать: win32 addons\amxmodx2\dlls\amxmodx_mm.dll;
  • создать в директории cstrike файл, например, с именем amxmodx2.cfg, его содержимое должно быть следующим:
localinfo mm_pluginsfile "addons/metamod/plugins2.ini"
localinfo amxx_basedir "addons/amxmodx2"
localinfo amxx_cfg "addons/amxmodx2/configs/core.ini"
localinfo amxx_configsdir "addons/amxmodx2/configs"
localinfo amxx_customdir "addons/amxmodx2/custom"
localinfo amxx_datadir "addons/amxmodx2/data"
localinfo amxx_logdir "addons/amxmodx2/logs"
localinfo amxx_logs "addons/amxmodx2/logs"
localinfo amxx_modules "addons/amxmodx2/configs/modules.ini"
localinfo amxx_modulesdir "addons/amxmodx2/modules"
localinfo amxx_plugins "addons/amxmodx2/configs/plugins.ini"
localinfo amxx_pluginsdir "addons/amxmodx2/plugins"
localinfo amxx_vault "addons/amxmodx2/data/vault.ini"
localinfo csstats "addons/amxmodx2/data/csstats.dat"
localinfo csstats_score "addons/amxmodx2/data/csstats.amxx"
localinfo amx_basedir "addons/amxmodx2"
localinfo amx_configdir "addons/amxmodx2/configs"
localinfo amx_langdir "addons/amxmodx2/data/amxmod-lang"
localinfo amx_logdir "addons/amxmodx2/logs"
localinfo amx_modulesdir "addons/amxmodx2/modules"
localinfo amx_pluginsdir "addons/amxmodx2/plugins"
Теперь второй сервер необходимо будет запускать с параметром командной строки: +exec amxmodx2.cfg.


Вопросы по плагинам

Общие вопросы

Где и как искать плагины?

Предварительно отметим, что условно AMX Mod X плагины можно разделить на следующие категории: стандартные, официально одобренные, официально отклоненные и неофициальные.
Одобренные плагины можно искать с помощью специальной поисковой системы AMX Mod X плагинов.
Также имеется возможность использовать поисковую систему официального форума (примечание: было замечено, что в последнее время эта система функционирует не совсем корректно). В поле Search in Forum(s) отметьте Approved Plugins, также, зажав клавишу Ctrl, можно отметить интересующие вас секции из подраздела High-Traffic Plugins. Чтобы искать неофициальные плагины, следует также воспользоваться поисковой системой официального форума, правда, в поле Search in Forum(s) необходимо выбрать Unapproved/Old Plugins. Если для вас не имеет значения статус плагина, и вы склонны к экспериментам, осуществляйте поиск по категории Plugins, которая включает в себя одобренные, отклоненные, недавно опубликованные, вполне возможно, "сырые" плагины, а также темы-запросы, в которых могут быть "быстро написанные" плагины.
Особенность поиска на официальных форумах еще состоит в том, что при вводе слова система ищет именно слова (без учета регистра), т.е. фрагменты, разделенные слева и справа пробелами. Т.о., к примеру, набрав для поиска слово FCOS вы не найдете нужного вам плагина, хотя есть тема, в которой присутствует текст [fcos]. Для этого необходимо использовать в поиске строку *FCOS*. Немного поработав с поисковой формой форума, вы легко освоите эту систему. Единственное возможное для некоторых неудобство - практически все описания плагинов написаны на английском языке.
Неофициальные плагины также можно попробовать искать с помощью общеизвестных поисковых систем: Google, Yandex, Rambler и др.

Сколько плагинов сейчас выпущено под AMX Mod X?

"Тонны" плагинов. Но, к сожалению, качеством и надежностью большая половина из них не белещет. К тому же некоторые плагины, "заброшены" авторами и не обновляются, что приводит даже к несовместимости с новыми версиями AMX Mod X.

Как устанавливать/удалять плагины?

Обратитесь к статье Кофигурирование AMX Mod X.

Как полностью отключить/включить плагин (модуль)?

Чтобы полностью отключить плагин (модуль), в файле $AMXMODX\configs\plugins.ini ($AMXMODX\configs\modules.ini) необходимо закомментировать имя плагина (модуля), т.е. поставить перед ним символ комментария - точку с запятой. Примеры для плагина и модуля:
;myplugin.amxx
;fakemeta
После чего следует сохранить изменения в файле и перезапустить сервер. Для случая с плагином в перезапуске сервера необходимости нет - достаточно лишь смены карты.
Чтобы включить плагин (модуль) следует проделать действия, являющиеся обратными вышеописанным, при этом смена карты является достаточным условием и для случая с модулем.

Что такое стандартные плагины?

Это плагины, которые входят в стандартную поставку AMX Mod X, т.е. те, которые находятся непосредственно после установки AMX Mod X в папках: $AMXMODX\plugins (.amxx - откомпилированные плагины) и $AMXMODX\scripting (.sma - исходные коды плагинов).

Как узнать, в каком плагине зарегистрирована та или иная переменная (команда)?

В серверной консоли наберите команду amxx cvars ( amxx cmds ). Выделите текст, скопируйте в файл, там сделайте поиск искомой переменной (команды). В правой колонке будет стоять имя плагина, в котором она и зарегистрирована. Примечание: если сервер запущен с параметром -console, то поиск можно осуществлять непосредственно в окне сервера посредством доступа к диалоговому окну поиска через оконное меню.

Как активировать/отключить плагин(ы) лишь на конкретной(ых) карте(ах)?

Чтобы активировать плагин(ы) плагин1.amxx, плагин2.amxx, <...>, плагинN.amxx на всех картах, кроме конкретной(ых) карта1, карта2, <...>, картаN, помимо добавления в $AMXMODX\consfigs\plugins.ini строк:
плагин1.amxx
плагин2.amxx
<...>
плагинN.amxx
необходимо также создать файлы:
$AMXMODX\consfigs\maps\plugins-карта1.ini
$AMXMODX\consfigs\maps\plugins-карта2.ini
<...>
$AMXMODX\consfigs\maps\plugins-картаN.ini
с содержанием:
плагин1.amxx disabled
плагин2.amxx disabled
<...>
плагинN.amxx disabled
Чтобы активировать плагин(ы) плагин1.amxx, плагин2.amxx, <...>, плагинN.amxx лишь на конкретной(ых) карта1, карта2, <...>, картаN, необходимо только лишь создать файлы:
$AMXMODX\consfigs\maps\plugins-карта1.ini
$AMXMODX\consfigs\maps\plugins-карта2.ini
<...>
$AMXMODX\consfigs\maps\plugins-картаN.ini
с содержанием:
плагин1.amxx
плагин2.amxx
<...>
плагинN.amxx
Примечания:
  • плагин1.amxx, плагин2.amxx, <...>, плагинN.amxx - это имена файлов ваших плагинов, количество которых может быть один и более;
  • карта1, карта2, <...>, картаN - это имена файлов (без расширения .bsp) ваших карт, количество которых может быть одна и более;

Я перевел на русский языковой файл плагина, а текст в игре отображается криво

Скорее всего вы не сохранили файл в UTF-8 кодировке. Даже если вы это сделали, проверьте что в начале файла нет маркера кодировки, потому что некоторые редакторы его вставляют без предупреждения. Для этого надо использовать редактор или режим, который НЕ понимает UTF-8, потому что unicode редактор не отображает такой маркер.
Имейте в виду, что в консоли сервера, работающего в режиме -console, переведенный текст не будет отображаться по-русски.


Вопросы по стандартным плагинам

Как увеличить число карт в стандартном голосовании?

Откройте файл $AMXMODX\scripting\mapchooser.sma, замените число 3 в строке:
#define SELECTMAPS  3
на требуемое, затем откомпилируйте плагин и замените исходный.

Как увеличить число администраторов?

В файле $AMXMODX\scripting\admin.sma замените число 64 на требуемое значение в строке:
#define MAX_ADMINS 64
Не ставьте слишком большие значения. Не забудьте перекомпилировать плагин и заменить исходный новым.
В AMX Mod X 1.8.X и выше такой проблемы не существует, т.к. там реализован динамический список админов.

Почему клиент не получает права админа по IP?

Данная проблема возникает на публичных Non-Steam (патченных) интернет-серверах c значением sv_lan равным 0 при подключении Steam/Non-Steam клиентов.
Сначала убедитесь, что у вас нединамический внешний IP. Динамический IP означает, что каждый раз, подключась к Интернету, вам назначается новый внешний IP (обычно из какого-то фиксированного диапазона). Для этого обратитесь к вашему провайдеру. Далее необходимо сверить, правильно ли вы прописали доступ в файле users.ini. Для этого проверьте свой внешний IP на страничке myip.ru. Запомните его. Откройте файл user.ini и убедитесь что там есть такая запись:
"<ваш_ip>" "<ваш_пароль>" "<ваши_флаги>" "d<другие_модификаторы>"
В поле <ваш_ip> должен быть вбит запомненный ранее IP. Обратите внимание на модификатор d. Без него проверка на IP проводиться НЕ будет. При указании IP старайтесь не использовать номер порта (знак двоеточия и то, что справа от него).
Если все правильно, а вы все равно не становитесь администратором на сервере, то, скорее всего, проблема в том, что вы не прошли авторизацию на сервере. Для этого выполните команду users или stat в консоли сервера и обратите внимание на значение в колонке userid. Если напротив потенциального админа стоит STEAM_ID_PENDING, то это означает, что сервер криво заломан, и он не авторизовал данного игрока. В свою очередь это значит, что функция client_authorized(id) не была вызвана для всех(!) активных AMX Mod X плагинов. Если открыть файл admin.sma, то можно увидеть следующее:
public client_authorized(id) {
    return get_cvar_num("amx_mode") ? accessUser(id) : PLUGIN_CONTINUE
}
Это и есть проверка клиента на админа. Чтобы эта функция вызывалась всегда, client_authorized надо переименовать в client_putinserver, а существующую функцию client_putinserver либо удалить, либо закомментировать.

Как заставить команду amx_who выводить IP вместо ID?

В файле admincmd.sma в указанном ниже месте
public cmdWho(id, level, cid)
{
    //...
    console_print(id, "^n%s:^n #  %-16.15s %-20s %-8s %-4.3s %-4.3s %s", cl_on_server, "nick", "authid", "userid", lImm, lRes, lAccess) 
    for (new a = 0; a < inum; ++a)
    {
        get_user_authid(players[a], authid, 31)
        //...
    }
    //...
}
замените:
console_print(id, "^n%s:^n #  %-16.15s %-20s %-8s %-4.3s %-4.3s %s", cl_on_server, "nick", "authid", "userid", lImm, lRes, lAccess)
на:
console_print(id, "^n%s:^n #  %-16.15s %-20s %-8s %-4.3s %-4.3s %s", cl_on_server, "nick", "ip", "userid", lImm, lRes, lAccess)
а также:
get_user_authid(players[a], authid, 31)
на:
get_user_ip(players[a], authid, 31, 1)
Сохраните файл и перекомпилируйте плагин.

А как дать всем доступ к команде amx_who?

По умолчанию, команда доступна только игрокам с правами y (т.е. это признак админа). Чтобы разрешить пользоваться ею всем игрокам, надо открыть файл admincmd.sma, и в строке
register_concmd("amx_who", "cmdWho", ADMIN_ADMIN, "- displays who is on server")
заменить ADMIN_ADMIN на ADMIN_ALL и перекомпилировать плагин.
В AMX 1.8.X и выше доступны стандартные средства переопределения прав доступа к командам без исправления самих плагинов (TODO: ссылка?).


Вопросы по StatsX

Что такое StatsX?

StatsX - это статистическое расширение AMX Mod X, предназначенное исключительно для Counter-Strike мода, реализованное в виде плагинов statsx.amxx, statscfg.amxx, stats_logging.amxx, а также в модуле csx, являющимся необходимым для работы данных плагинов.

Как изменять конфигурацию StatsX?

Изменять конфигурацию StatsX можно тремя способами:
  • посредством HUD-меню, вызываемого консольной командой amx_statscfgmenu;
  • посредством расширенных возможностей консольной команды amx_statscfg;
  • посредством редактирования текстового файла конфигурации StatsX - $AMXMODX\configs\stats.ini.

Как редактировать данные статистики StatsX?

Данные статистики StatsX хранятся в файле $AMXMODX\data\csstats.dat, который не является текстовым, поэтому редактировать данные можно либо с помощью утилиты WinSCX (для платформы MS Windows), расположенной по адресу $AMXMODX\data\wincsx.exe, либо с помощью сторонних методов, основанных на принципе работы со структурой данных файла csstats.dat.

Как очистить статистику StatsX?

Очистить статистику StatsX можно тремя способами:
  • штатным методом StatsX, заключающимся в установке значения 1 для серверной консольной переменной csstats_reset и последующей смене карты;
  • посредством нажатия кнопки Clear stats утилиты WinSCX;
  • посредством удаления файла $AMXMODX\data\csstats.dat.


Вопросы по компилированию

Что такое компиляция?

Это процесс, который переводит текстовые файлы (*.sma), содержащие исходный код (т.е. инструкции для AMX Mod X, который их исполняет), в формат, более пригодный для исполнения. За счет этого скорость выполнения плагинов возрастает многократно, упрощается разработка "движка", который эти плагины исполняет, а также в некотором смысле защищается авторский код. Почему в "некотором смысле"? Потому что все AMX Mod X плагины должны публиковаться под лицензией GNU General Public License. В случае публикации плагина лицензия обязывает также публиковать и его исходный код. Откомпилированные плагины имеют расширение .amxx. Именно файлы этого типа, а не .sma, должны указываться в файле plugins.ini для последующей корректной загрузки плагина.

Как компилировать плагины?

Базовую информацию вы можете найти в статье Компилирование плагинов.

Как упростить процесс компилирования?

Можно написать стороннюю программу или скрипт, например такой, как пакетный Batch файл. Например, создайте файл make.bat со следующим содержимым:
@amxxpc.exe %1 -i.\include -o.\compiled\%1
Чтобы с помощью него откомпилировать плагин, необходимо выполнить следующую команду:
make.bat my_plugin.sma
В итоге откомпилированный файл будет помещен в каталог compiled текущей директории. Если его там нет, значит в процессе компилирования возникли фатальные ошибки, которые выводятся на экран.
Если вам необходимо (например, в случае ошибок) отправить кому-нибудь результат компиляции, можете перенаправить вывод информации о процессе компилирования в файл, например таким образом:
make.bat my_plugin.sma > my_plugin.log

Компилятор выводит "max. usage is unknown, due to recursion"

Ничего страшного - просто компилятор не может вычислить предполагаемый объем памяти, используемый вашим плагином.


Вопросы по скриптингу

С чего начать?

С со статьи Фундаментальные основы AMX Mod X скриптинга.

А стоит ли вообще начинать?

В зависимости от того, какую цель вы преследуете, а также от вашего желания и потенциала. Знание английского языка (чтение) будет огромным плюсом во время обучения, иначе постигать азы будет очень сложно. CS является закрытым проектом без исходных кодов, поэтому многие новые (неизученные) элементы приходится постигать через проведение экспериментов.