Difference between revisions of "Ru AMX Mod X FAQ"

From AlliedModders Wiki
Jump to: navigation, search
(+ Как очистить статистику StatsX?)
m (Почему клиент не получает права админа по IP?)
Line 113: Line 113:
 
  "<ваш_ip>" "<ваш_пароль>" "<ваши_флаги>" "d<другие_модификаторы>"
 
  "<ваш_ip>" "<ваш_пароль>" "<ваши_флаги>" "d<другие_модификаторы>"
 
:В поле ''<ваш_ip>'' должен быть вбит запомненный ранее IP. Обратите внимание на модификатор '''d'''. Без него проверка на IP проводиться НЕ будет. При указании IP старайтесь не использовать номер порта (знак двоеточия и то, что справа от него).
 
:В поле ''<ваш_ip>'' должен быть вбит запомненный ранее IP. Обратите внимание на модификатор '''d'''. Без него проверка на IP проводиться НЕ будет. При указании IP старайтесь не использовать номер порта (знак двоеточия и то, что справа от него).
: Если все правильно, а вы все равно не становитесь администратором на сервере, то, скорее всего, проблема в том, что вы не прошли авторизацию на сервере. Для этого выполните команду ''users'' или ''stat'' в консоли сервера и обратите внимание на значение в колонке ''userid''. Если напротив потенциального админа стоит '''VALVE_ID_PENDING''', то это означает, что сервер криво заломан, и он не авторизовал данного игрока. В свою очередь это значит, что функция ''client_authorized(id)'' не была вызвана для всех(!) активных AMXX плагинов. Если открыть файл ''admin.sma'', то можно увидеть следующее:
+
: Если все правильно, а вы все равно не становитесь администратором на сервере, то, скорее всего, проблема в том, что вы не прошли авторизацию на сервере. Для этого выполните команду ''users'' или ''stat'' в консоли сервера и обратите внимание на значение в колонке ''userid''. Если напротив потенциального админа стоит '''STEAM_ID_PENDING''', то это означает, что сервер криво заломан, и он не авторизовал данного игрока. В свою очередь это значит, что функция ''client_authorized(id)'' не была вызвана для всех(!) активных AMXX плагинов. Если открыть файл ''admin.sma'', то можно увидеть следующее:
 
  public client_authorized(id)
 
  public client_authorized(id)
 
   return get_cvar_num("amx_mode") ? accessUser(id) : PLUGIN_CONTINUE
 
   return get_cvar_num("amx_mode") ? accessUser(id) : PLUGIN_CONTINUE

Revision as of 04:34, 2 August 2008


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

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

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

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

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

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

Обратитесь к этой статье.

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

Обратитесь к этой статье.

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

Это плагины, которые входят в стандартную поставку AMX Mod X. Они находятся в папке $AMXMODX\scripting.

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

В серверной консоли наберите команду amxx cvars. Выделите текст, скопируйте в файл, там сделайте поиск искомой переменной. В правой колонке будет стоять имя плагина, в котором она и зарегистрирована.

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

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

Как называется статистика, встроенная в AMXX?

Называется "StatsX", реализована в виде плагинов statsx.amxx, statscfg.amxx, stats_logging.amxx, а также в модуле csx. О последнем многие забывают, полагая, что можно просто изменить алгоритм учета статистики на уровне плагинов AMXX.

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

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

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

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

В файле admin.sma замените число 64 на требуемое значение в строке:
#define MAX_ADMINS 64
Не ставьте слишком большие значения. Не забудьте перекомпилировать плагин и заменить исходный новым.
В AMXX 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) не была вызвана для всех(!) активных AMXX плагинов. Если открыть файл 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?

Удалите файл $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 является закрытым проектом без исходных кодов, поэтому могие новые (неизученные) элементы приходится постигать через проведение экспериментов.