<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.alliedmods.net/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=VEN</id>
	<title>AlliedModders Wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.alliedmods.net/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=VEN"/>
	<link rel="alternate" type="text/html" href="https://wiki.alliedmods.net/Special:Contributions/VEN"/>
	<updated>2026-05-20T23:43:58Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.31.6</generator>
	<entry>
		<id>https://wiki.alliedmods.net/index.php?title=Talk:%D0%9E%D0%BF%D1%82%D0%B8%D0%BC%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F_%D0%9F%D0%BB%D0%B0%D0%B3%D0%B8%D0%BD%D0%BE%D0%B2_(AMX_Mod_X_Scripting)&amp;diff=6434</id>
		<title>Talk:Оптимизация Плагинов (AMX Mod X Scripting)</title>
		<link rel="alternate" type="text/html" href="https://wiki.alliedmods.net/index.php?title=Talk:%D0%9E%D0%BF%D1%82%D0%B8%D0%BC%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F_%D0%9F%D0%BB%D0%B0%D0%B3%D0%B8%D0%BD%D0%BE%D0%B2_(AMX_Mod_X_Scripting)&amp;diff=6434"/>
		<updated>2008-11-22T11:10:51Z</updated>

		<summary type="html">&lt;p&gt;VEN: note&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Без префикса Ru: статья не отображается в сводке статей (см. http://wiki.alliedmods.net/Category:Russian )&lt;/div&gt;</summary>
		<author><name>VEN</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.alliedmods.net/index.php?title=Ru_AMX_Mod_X_FAQ&amp;diff=6367</id>
		<title>Ru AMX Mod X FAQ</title>
		<link rel="alternate" type="text/html" href="https://wiki.alliedmods.net/index.php?title=Ru_AMX_Mod_X_FAQ&amp;diff=6367"/>
		<updated>2008-10-22T15:05:54Z</updated>

		<summary type="html">&lt;p&gt;VEN: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Russian]]&lt;br /&gt;
[[Category:Ru:AMX Mod X]]&lt;br /&gt;
&lt;br /&gt;
= Общие положения, термины, сокращения и условные обозначения =&lt;br /&gt;
:* HL или HL1 - аббревиатура от [[Half-Life 1|Half-Life]] (часть первая);&lt;br /&gt;
:* Mod - &amp;quot;мод&amp;quot;, модификация - дополнение к чему-либо, как правило, расширяющее/изменяющее функциональность;&lt;br /&gt;
:* HL Engine - &amp;quot;движок&amp;quot; Half-Life - &amp;quot;центральный модуль&amp;quot;, осуществляющий выполнение базовых &amp;quot;общемодовых&amp;quot; задач;&lt;br /&gt;
:* MM - [[Metamod]] - сторонний мод особого типа, является промежуточным звеном в системе &amp;quot;HL движок - HL мод&amp;quot;;&lt;br /&gt;
:* AMXX - аббревиатура от [[AMX Mod X]] - Metamod plugin (&amp;quot;плагин&amp;quot;), своего рода Metamod мод;&lt;br /&gt;
:* Map - &amp;quot;карта&amp;quot; - определяет внешний вид территории, на которой происходит игровое действие;&lt;br /&gt;
:* World - &amp;quot;мир&amp;quot; - все пространство, которое занимает карта, а также область, находящаяся за картой;&lt;br /&gt;
:* Spawn - &amp;quot;спавн&amp;quot; - момент, когда игрок появляется в мире, обретая физическое тело;&lt;br /&gt;
:* SinglePlayer - &amp;quot;синглплеер&amp;quot; - игровой тип, когда одновременно в игре может участвовать только один игрок;&lt;br /&gt;
:* MultiPlayer - &amp;quot;мультиплеер&amp;quot; - игровой тип, когда одновременно в игре может участвовать несколько игроков;&lt;br /&gt;
:* DM - аббревиатура от Death Match - динамичный мультиплеер тип игры, когда после &amp;quot;смерти&amp;quot; игрока происходит его скорый спавн (&amp;quot;респавн&amp;quot;);&lt;br /&gt;
:* HLDM - аббревиатура от Half-Life Death Match - оригинальный HL мод DM типа;&lt;br /&gt;
:* CS - аббревиатура от [[Counter-Stirke]] - наиболее популярный HL мод;&lt;br /&gt;
:* VALVE - [[VALVe Software|корпорация, разработчик HL и CS]], также редко используется как синоним HLDM, подчеркивая название директории мода (&amp;quot;valve&amp;quot;);&lt;br /&gt;
:* $MODDIR - способ условного обозначения корневой директории мода, например: ''cstrike'', ''valve'';&lt;br /&gt;
:* $MMDIR - способ условного обозначения относительного пути (относительно пути к $MODDIR) к корневой директории Metamod, по умолчанию: ''addons\metamod'';&lt;br /&gt;
:* $AMXMODX - способ условного обозначения относительного пути (относительно пути к $MODDIR) к корневой директории AMX Mod X, по умолчанию: ''addons\amxmodx''.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Общие вопросы =&lt;br /&gt;
&lt;br /&gt;
=== Где скачать последнюю версию AMX Mod X? ===&lt;br /&gt;
: Последнюю версию всегда можно скачать на официальном сайте AMX Mod X в [http://www.amxmodx.org/downloads.php разделе закачек].&lt;br /&gt;
&lt;br /&gt;
=== А что именно качать? ===&lt;br /&gt;
: Качайте либо инсталлятор (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 мода.&lt;br /&gt;
&lt;br /&gt;
=== Чем отличается AMX Mod X от AMX Mod? ===&lt;br /&gt;
: Буквой X ;). На самом деле отличий очень много:&lt;br /&gt;
:* AMX Mod X поддерживается до сих пор, а поддержка AMX Mod была завершена примерно в 2006 году;&lt;br /&gt;
:* функциональность AMX Mod X значительно превосходит AMX Mod, это также касается и расширенной поддержки других модов, в то время как AMX Mod поддерживал только HLDM, CS и CZ;&lt;br /&gt;
:* AMX Mod X принято считать быстрее AMX Mod;&lt;br /&gt;
:* плагины AMX Mod X не совместимы с плагинами AMX Mod;&lt;br /&gt;
:* плагины AMX Mod 0.9.9 совместимы с AMX Mod X, если последний работает в режиме совместимости(?);&lt;br /&gt;
:* плагины для AMX Mod имеют расширение ''.amx'', а плагины AMX Mod X - ''.amxx'';&lt;br /&gt;
:* ''TODO: дополнить список''&lt;br /&gt;
&lt;br /&gt;
=== Как полностью отключить AMX Mod X? ===&lt;br /&gt;
: В файле ''$MMDIR\plugins.ini'' (по умолчанию: ''addons\metamod\plugins.ini'') необходимо закомментировать строку типа:&lt;br /&gt;
&amp;lt;pre&amp;gt;win32 addons\amxmodx\dlls\amxmodx_mm.dll&amp;lt;/pre&amp;gt;&lt;br /&gt;
: т.е. добавить в начало строки cимвол(ы) начала комментария (''#'' или ''//''), например:&lt;br /&gt;
&amp;lt;pre&amp;gt;//win32 addons\amxmodx\dlls\amxmodx_mm.dll&amp;lt;/pre&amp;gt;&lt;br /&gt;
: После чего следует сохранить изменения в файле и перезапустить сервер.&lt;br /&gt;
&lt;br /&gt;
=== Как найти причину &amp;quot;падений&amp;quot; сервера? ===&lt;br /&gt;
: Прежде всего следует искать причину &amp;quot;падений&amp;quot; сервера в сообщениях об ошибках AMX Mod X, которые могут содержаться непосредственно в файлах AMX Mod X логов, находящихся в директории ''$AMXMODX\logs''.&lt;br /&gt;
&lt;br /&gt;
: Если режим ''HL logging'' был активирован (серверная консольная команда ''log on''), следует попытаться найти причину &amp;quot;падений&amp;quot; в последних по дате изменения файлах директории HL логов - ''$MODDIR/logs'' (например, для ''cstrike'' мода по умолчанию: ''cstrike\logs'').&lt;br /&gt;
&lt;br /&gt;
: Также, возможно, имеет смысл проверить системный журнал на наличие записей об ошибке самого приложения ''hl.exe'', перейдя в ''Панель управления(Control Panel)'' -&amp;gt; ''Администрирование(Administration)'' -&amp;gt; ''Просмотр событий(Event viewer)''.&lt;br /&gt;
&lt;br /&gt;
: Чтобы убедиться, что причина &amp;quot;падений&amp;quot; действительно в AMX Mod X, необходимо полностью его [[#Как полностью отключить AMX Mod X?|отключить]]. После чего посредством серверной консольной команды ''meta list'' следует убедиться, что AMX Mod X не запущен. Теперь необходимо снова попытаться воспроизвести &amp;quot;падение&amp;quot; сервера. Если этого удалось достигнуть вновь, очевидно, что истоки проблемы кроются за пределами AMX Mod X.&lt;br /&gt;
&lt;br /&gt;
: Иначе виновником &amp;quot;падений&amp;quot; может являться один из плагинов, поэтому для подтверждения данного предположения следует [[#Как полностью отключить/включить плагин (модуль)?|отключить]] все плагины без исключения. После чего посредством серверной консольной команды ''amxx plugins'' необходимо убедиться, что ни один из плагинов не запущен. Теперь следует снова попытаться воспроизвести &amp;quot;падение&amp;quot; сервера. Если этого удалось достигнуть вновь, очевидно, что истоки проблемы кроются за пределами плагинов - в самом AMX Mod X либо его модулях.&lt;br /&gt;
&lt;br /&gt;
: Иначе виновником &amp;quot;падений&amp;quot; является один из плагинов, который необходимо локализовать. Если подозреваемых плагинов большое количество, то следует последовательно [[#Как полностью отключить/включить плагин (модуль)?|включать]] половину (т.е. сначала 1/2, затем 1/4, после чего 1/8 и так далее) отключенных плагинов с последующей проверкой на &amp;quot;падение&amp;quot;. При возникновении &amp;quot;падений&amp;quot;, очевидно, что плагин-виновник находится в последней группе включенных плагинов, поэтому необходимо последовательно [[#Как полностью отключить/включить плагин (модуль)?|выключать]] половину (т.е. сначала 1/2, затем 1/4, после чего 1/8 и так далее) плагинов именно последней группы с последующей проверкой на &amp;quot;падение&amp;quot;. При исчезновении &amp;quot;падений&amp;quot; следует снова повторить вариант со включением/выключением плагинов, описанный выше, но уже для локализованной группы, которая с каждым повторением данных действий будет уменьшаться вдвое, и в конечном итоге в ней останется только один плагин, который и является причиной &amp;quot;падений&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
: Метод проверки модулей на причастность к &amp;quot;падению&amp;quot; сервера аналогичен приведенному выше методу для плагинов.&lt;br /&gt;
&lt;br /&gt;
=== Как запустить два различных сервера AMX Mod X? ===&lt;br /&gt;
: К примеру, вы хотите запустить два различных сервера из одной ''cstrike'' директории на базе различных AMX Mod X/Metamod плагинов, настроек и прочего. Это решаемо. Один из примеров для win32 системы приведен ниже:&lt;br /&gt;
:* cоздать отдельную AMX Mod X директорию с необходимыми файлами, например: ''.\addons\amxmodx2'';&lt;br /&gt;
:* в ''.\addons\amxmodx2\configs\core.ini'' везде изменить ''amxmodx'' на ''amxmodx2'';&lt;br /&gt;
:* создать отдельный файл загрузки Metamod плагинов, например: ''.\addons\metamod\plugins2.ini'';&lt;br /&gt;
:* в созданный ''plugins2.ini'' файл вписать: ''win32 addons\amxmodx2\dlls\amxmodx_mm.dll'';&lt;br /&gt;
:* создать в директории ''cstrike'' файл, например, с именем ''amxmodx2.cfg'', его содержимое должно быть следующим:&lt;br /&gt;
&amp;lt;pre&amp;gt;localinfo mm_pluginsfile &amp;quot;addons/metamod/plugins2.ini&amp;quot;&lt;br /&gt;
localinfo amxx_basedir &amp;quot;addons/amxmodx2&amp;quot;&lt;br /&gt;
localinfo amxx_cfg &amp;quot;addons/amxmodx2/configs/core.ini&amp;quot;&lt;br /&gt;
localinfo amxx_configsdir &amp;quot;addons/amxmodx2/configs&amp;quot;&lt;br /&gt;
localinfo amxx_customdir &amp;quot;addons/amxmodx2/custom&amp;quot;&lt;br /&gt;
localinfo amxx_datadir &amp;quot;addons/amxmodx2/data&amp;quot;&lt;br /&gt;
localinfo amxx_logdir &amp;quot;addons/amxmodx2/logs&amp;quot;&lt;br /&gt;
localinfo amxx_logs &amp;quot;addons/amxmodx2/logs&amp;quot;&lt;br /&gt;
localinfo amxx_modules &amp;quot;addons/amxmodx2/configs/modules.ini&amp;quot;&lt;br /&gt;
localinfo amxx_modulesdir &amp;quot;addons/amxmodx2/modules&amp;quot;&lt;br /&gt;
localinfo amxx_plugins &amp;quot;addons/amxmodx2/configs/plugins.ini&amp;quot;&lt;br /&gt;
localinfo amxx_pluginsdir &amp;quot;addons/amxmodx2/plugins&amp;quot;&lt;br /&gt;
localinfo amxx_vault &amp;quot;addons/amxmodx2/data/vault.ini&amp;quot;&lt;br /&gt;
localinfo csstats &amp;quot;addons/amxmodx2/data/csstats.dat&amp;quot;&lt;br /&gt;
localinfo csstats_score &amp;quot;addons/amxmodx2/data/csstats.amxx&amp;quot;&lt;br /&gt;
localinfo amx_basedir &amp;quot;addons/amxmodx2&amp;quot;&lt;br /&gt;
localinfo amx_configdir &amp;quot;addons/amxmodx2/configs&amp;quot;&lt;br /&gt;
localinfo amx_langdir &amp;quot;addons/amxmodx2/data/amxmod-lang&amp;quot;&lt;br /&gt;
localinfo amx_logdir &amp;quot;addons/amxmodx2/logs&amp;quot;&lt;br /&gt;
localinfo amx_modulesdir &amp;quot;addons/amxmodx2/modules&amp;quot;&lt;br /&gt;
localinfo amx_pluginsdir &amp;quot;addons/amxmodx2/plugins&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
: Теперь второй сервер необходимо будет запускать с параметром командной строки: ''+exec amxmodx2.cfg''.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Вопросы по плагинам =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Общие вопросы ==&lt;br /&gt;
&lt;br /&gt;
=== Где и как искать плагины? ===&lt;br /&gt;
: Предварительно отметим, что условно AMX Mod X плагины можно разделить на следующие категории: стандартные, официально одобренные, официально отклоненные и неофициальные. &lt;br /&gt;
&lt;br /&gt;
: Одобренные плагины можно искать с помощью специальной [http://www.amxmodx.org/compiler.php поисковой системы AMX Mod X плагинов].&lt;br /&gt;
&lt;br /&gt;
: Также имеется возможность использовать [http://forums.alliedmods.net/search.php поисковую систему официального форума] (примечание: было замечено, что в последнее время эта система функционирует не совсем корректно). В поле '''Search in Forum(s)''' отметьте '''Approved Plugins''', также, зажав клавишу Ctrl, можно отметить интересующие вас секции из подраздела '''High-Traffic Plugins'''. Чтобы искать неофициальные плагины, следует также воспользоваться [http://forums.alliedmods.net/search.php поисковой системой официального форума], правда, в поле '''Search in Forum(s)''' необходимо выбрать '''Unapproved/Old Plugins'''. Если для вас не имеет значения статус плагина, и вы склонны к экспериментам, осуществляйте поиск по категории '''Plugins''', которая включает в себя одобренные, отклоненные, недавно опубликованные, вполне возможно, &amp;quot;сырые&amp;quot; плагины, а также темы-запросы, в которых могут быть &amp;quot;быстро написанные&amp;quot; плагины.&lt;br /&gt;
&lt;br /&gt;
: Особенность поиска на официальных форумах еще состоит в том, что при вводе слова система ищет именно слова (без учета регистра), т.е. фрагменты, разделенные слева и справа пробелами. Т.о., к примеру, набрав для поиска слово ''FCOS'' вы не найдете нужного вам плагина, хотя есть тема, в которой присутствует текст ''[fcos]''. Для этого необходимо использовать в поиске строку ''*FCOS*''. Немного поработав с поисковой формой форума, вы легко освоите эту систему. Единственное возможное для некоторых неудобство - практически все описания плагинов написаны на английском языке.&lt;br /&gt;
&lt;br /&gt;
: Неофициальные плагины также можно попробовать искать с помощью общеизвестных поисковых систем: Google, Yandex, Rambler и др.&lt;br /&gt;
&lt;br /&gt;
=== Сколько плагинов сейчас выпущено под AMX Mod X? ===&lt;br /&gt;
: &amp;quot;Тонны&amp;quot; плагинов. Но, к сожалению, качеством и надежностью б'''о'''льшая половина из них не белещет. К тому же некоторые плагины, &amp;quot;заброшены&amp;quot; авторами и не обновляются, что приводит даже к несовместимости с новыми версиями AMX Mod X.&lt;br /&gt;
&lt;br /&gt;
=== Как устанавливать/удалять плагины? ===&lt;br /&gt;
: Обратитесь к статье [[Ru Configuring AMX Mod X|Кофигурирование AMX Mod X]].&lt;br /&gt;
&lt;br /&gt;
=== Как полностью отключить/включить плагин (модуль)? ===&lt;br /&gt;
: Чтобы полностью отключить плагин (модуль), в файле ''$AMXMODX\configs\plugins.ini'' (''$AMXMODX\configs\modules.ini'') необходимо закомментировать имя плагина (модуля), т.е. поставить перед ним символ комментария - точку с запятой. Примеры для плагина и модуля приведены ниже:&lt;br /&gt;
&amp;lt;pre&amp;gt;;myplugin.amxx&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;;fakemeta&amp;lt;/pre&amp;gt;&lt;br /&gt;
: Затем следует сохранить изменения в файле и перезапустить сервер. Для случая с плагином в перезапуске сервера необходимости нет - достаточно лишь смены карты.&lt;br /&gt;
: Чтобы включить плагин (модуль), следует проделать действия, являющиеся обратными вышеописанным, при этом смена карты является достаточным условием и для случая с модулем.&lt;br /&gt;
&lt;br /&gt;
=== Что такое стандартные плагины? ===&lt;br /&gt;
: Это плагины, которые входят в стандартную поставку AMX Mod X, т.е. те, которые находятся непосредственно после установки AMX Mod X в папках: ''$AMXMODX\plugins'' (''.amxx'' - откомпилированные плагины) и ''$AMXMODX\scripting'' (''.sma'' - исходные коды плагинов).&lt;br /&gt;
&lt;br /&gt;
=== Как узнать, в каком плагине зарегистрирована та или иная переменная (команда)? ===&lt;br /&gt;
: В серверной консоли наберите команду ''amxx cvars'' ( ''amxx cmds'' ). Выделите текст, скопируйте в файл, там сделайте поиск искомой переменной (команды). В правой колонке будет стоять имя плагина, в котором она и зарегистрирована.&lt;br /&gt;
&lt;br /&gt;
: Примечание: если сервер запущен с параметром -console, то поиск можно осуществлять непосредственно в окне сервера посредством доступа к диалоговому окну поиска через оконное меню.&lt;br /&gt;
&lt;br /&gt;
=== Как активировать/отключить плагин(ы) лишь на конкретной(ых) карте(ах)? ===&lt;br /&gt;
: Чтобы активировать плагин(ы) ''плагин1.amxx, плагин2.amxx, &amp;lt;...&amp;gt;, плагинN.amxx'' на всех картах, кроме конкретной(ых) ''карта1, карта2, &amp;lt;...&amp;gt;, картаN'', помимо добавления в ''$AMXMODX\consfigs\plugins.ini'' строк:&lt;br /&gt;
&amp;lt;pre&amp;gt;плагин1.amxx&lt;br /&gt;
плагин2.amxx&lt;br /&gt;
&amp;lt;...&amp;gt;&lt;br /&gt;
плагинN.amxx&amp;lt;/pre&amp;gt;&lt;br /&gt;
: необходимо также создать файлы:&lt;br /&gt;
&amp;lt;pre&amp;gt;$AMXMODX\consfigs\maps\plugins-карта1.ini&lt;br /&gt;
$AMXMODX\consfigs\maps\plugins-карта2.ini&lt;br /&gt;
&amp;lt;...&amp;gt;&lt;br /&gt;
$AMXMODX\consfigs\maps\plugins-картаN.ini&amp;lt;/pre&amp;gt;&lt;br /&gt;
: с содержанием:&lt;br /&gt;
&amp;lt;pre&amp;gt;плагин1.amxx disabled&lt;br /&gt;
плагин2.amxx disabled&lt;br /&gt;
&amp;lt;...&amp;gt;&lt;br /&gt;
плагинN.amxx disabled&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
: Чтобы активировать плагин(ы) ''плагин1.amxx, плагин2.amxx, &amp;lt;...&amp;gt;, плагинN.amxx'' лишь на конкретной(ых) ''карта1, карта2, &amp;lt;...&amp;gt;, картаN'', необходимо только лишь создать файлы:&lt;br /&gt;
&amp;lt;pre&amp;gt;$AMXMODX\consfigs\maps\plugins-карта1.ini&lt;br /&gt;
$AMXMODX\consfigs\maps\plugins-карта2.ini&lt;br /&gt;
&amp;lt;...&amp;gt;&lt;br /&gt;
$AMXMODX\consfigs\maps\plugins-картаN.ini&amp;lt;/pre&amp;gt;&lt;br /&gt;
: с содержанием:&lt;br /&gt;
&amp;lt;pre&amp;gt;плагин1.amxx&lt;br /&gt;
плагин2.amxx&lt;br /&gt;
&amp;lt;...&amp;gt;&lt;br /&gt;
плагинN.amxx&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
: Примечания:&lt;br /&gt;
:* ''плагин1.amxx, плагин2.amxx, &amp;lt;...&amp;gt;, плагинN.amxx'' - это имена файлов ваших плагинов, количество которых может быть один и более;&lt;br /&gt;
:* ''карта1, карта2, &amp;lt;...&amp;gt;, картаN'' - это имена файлов (без расширения ''.bsp'') ваших карт, количество которых может быть одна и более;&lt;br /&gt;
&lt;br /&gt;
=== Я перевел на русский языковой файл плагина, а текст в игре отображается криво ===&lt;br /&gt;
: Скорее всего вы не сохранили файл в UTF-8 кодировке. Даже если вы это сделали, проверьте что в начале файла нет маркера кодировки, потому что некоторые редакторы его вставляют без предупреждения. Для этого надо использовать редактор или режим, который НЕ понимает UTF-8, потому что unicode редактор не отображает такой маркер.&lt;br /&gt;
: Имейте в виду, что в консоли сервера, работающего в режиме ''-console'', переведенный текст не будет отображаться по-русски.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Вопросы по стандартным плагинам ==&lt;br /&gt;
&lt;br /&gt;
=== Как увеличить число карт в стандартном голосовании? ===&lt;br /&gt;
: Откройте файл ''$AMXMODX\scripting\mapchooser.sma'', замените число ''3'' в строке:&lt;br /&gt;
&amp;lt;pawn&amp;gt;#define SELECTMAPS  3&amp;lt;/pawn&amp;gt;&lt;br /&gt;
: на требуемое, затем [[#Как компилировать плагины?|откомпилируйте]] плагин и замените исходный.&lt;br /&gt;
&lt;br /&gt;
=== Как увеличить число администраторов? ===&lt;br /&gt;
: В файле ''$AMXMODX\scripting\admin.sma'' замените число ''64'' на требуемое значение в строке:&lt;br /&gt;
&amp;lt;pawn&amp;gt;#define MAX_ADMINS 64&amp;lt;/pawn&amp;gt;&lt;br /&gt;
: Не ставьте слишком большие значения. Не забудьте [[#Как компилировать плагины?|перекомпилировать]] плагин и заменить исходный новым.&lt;br /&gt;
: В AMX Mod X 1.8.X и выше такой проблемы не существует, т.к. там реализован динамический список админов.&lt;br /&gt;
&lt;br /&gt;
=== Почему клиент не получает права админа по IP? ===&lt;br /&gt;
:Данная проблема возникает на публичных Non-Steam (патченных) интернет-серверах c значением ''sv_lan'' равным ''0'' при подключении Steam/Non-Steam клиентов.&lt;br /&gt;
: Сначала убедитесь, что у вас нединамический внешний IP. Динамический IP означает, что каждый раз, подключась к Интернету, вам назначается новый внешний IP (обычно из какого-то фиксированного диапазона). Для этого обратитесь к вашему провайдеру. Далее необходимо сверить, правильно ли вы прописали доступ в файле users.ini. Для этого проверьте свой внешний IP на страничке [http://myip.ru/ myip.ru]. Запомните его. Откройте файл user.ini и убедитесь что там есть такая запись:&lt;br /&gt;
 &amp;quot;&amp;lt;ваш_ip&amp;gt;&amp;quot; &amp;quot;&amp;lt;ваш_пароль&amp;gt;&amp;quot; &amp;quot;&amp;lt;ваши_флаги&amp;gt;&amp;quot; &amp;quot;d&amp;lt;другие_модификаторы&amp;gt;&amp;quot;&lt;br /&gt;
:В поле ''&amp;lt;ваш_ip&amp;gt;'' должен быть вбит запомненный ранее IP. Обратите внимание на модификатор '''d'''. Без него проверка на IP проводиться НЕ будет. При указании IP старайтесь не использовать номер порта (знак двоеточия и то, что справа от него).&lt;br /&gt;
: Если все правильно, а вы все равно не становитесь администратором на сервере, то, скорее всего, проблема в том, что вы не прошли авторизацию на сервере. Для этого выполните команду ''users'' или ''stat'' в консоли сервера и обратите внимание на значение в колонке ''userid''. Если напротив потенциального админа стоит '''STEAM_ID_PENDING''', то это означает, что сервер криво заломан, и он не авторизовал данного игрока. В свою очередь это значит, что функция ''client_authorized(id)'' не была вызвана для всех(!) активных AMX Mod X плагинов. Если открыть файл ''admin.sma'', то можно увидеть следующее:&lt;br /&gt;
&amp;lt;pawn&amp;gt;public client_authorized(id) {&lt;br /&gt;
    return get_cvar_num(&amp;quot;amx_mode&amp;quot;) ? accessUser(id) : PLUGIN_CONTINUE&lt;br /&gt;
}&amp;lt;/pawn&amp;gt;&lt;br /&gt;
: Это и есть проверка клиента на админа. Чтобы эта функция вызывалась всегда, ''client_authorized'' надо переименовать в ''client_putinserver'', а существующую функцию ''client_putinserver'' либо удалить, либо [[Ru_Fundamental_Basics_of_AMX_Mod_X_Scripting#Комментарии|закомментировать]].&lt;br /&gt;
&lt;br /&gt;
=== Как заставить команду amx_who выводить IP вместо ID? ===&lt;br /&gt;
: В файле ''admincmd.sma'' в указанном ниже месте &lt;br /&gt;
&amp;lt;pawn&amp;gt;public cmdWho(id, level, cid)&lt;br /&gt;
{&lt;br /&gt;
    //...&lt;br /&gt;
    console_print(id, &amp;quot;^n%s:^n #  %-16.15s %-20s %-8s %-4.3s %-4.3s %s&amp;quot;, cl_on_server, &amp;quot;nick&amp;quot;, &amp;quot;authid&amp;quot;, &amp;quot;userid&amp;quot;, lImm, lRes, lAccess) &lt;br /&gt;
    for (new a = 0; a &amp;lt; inum; ++a)&lt;br /&gt;
    {&lt;br /&gt;
        get_user_authid(players[a], authid, 31)&lt;br /&gt;
        //...&lt;br /&gt;
    }&lt;br /&gt;
    //...&lt;br /&gt;
}&amp;lt;/pawn&amp;gt;&lt;br /&gt;
: замените:&lt;br /&gt;
&amp;lt;pawn&amp;gt;console_print(id, &amp;quot;^n%s:^n #  %-16.15s %-20s %-8s %-4.3s %-4.3s %s&amp;quot;, cl_on_server, &amp;quot;nick&amp;quot;, &amp;quot;authid&amp;quot;, &amp;quot;userid&amp;quot;, lImm, lRes, lAccess)&amp;lt;/pawn&amp;gt;&lt;br /&gt;
: на:&lt;br /&gt;
&amp;lt;pawn&amp;gt;console_print(id, &amp;quot;^n%s:^n #  %-16.15s %-20s %-8s %-4.3s %-4.3s %s&amp;quot;, cl_on_server, &amp;quot;nick&amp;quot;, &amp;quot;ip&amp;quot;, &amp;quot;userid&amp;quot;, lImm, lRes, lAccess)&amp;lt;/pawn&amp;gt;&lt;br /&gt;
: а также:&lt;br /&gt;
&amp;lt;pawn&amp;gt;get_user_authid(players[a], authid, 31)&amp;lt;/pawn&amp;gt;&lt;br /&gt;
: на:&lt;br /&gt;
&amp;lt;pawn&amp;gt;get_user_ip(players[a], authid, 31, 1)&amp;lt;/pawn&amp;gt;&lt;br /&gt;
: Сохраните файл и [[#Как компилировать плагины?|перекомпилируйте]] плагин.&lt;br /&gt;
&lt;br /&gt;
=== А как дать всем доступ к команде amx_who? ===&lt;br /&gt;
: По умолчанию, команда доступна только игрокам с правами '''y''' (т.е. это признак админа). Чтобы разрешить пользоваться ею всем игрокам, надо открыть файл ''admincmd.sma'', и в строке&lt;br /&gt;
&amp;lt;pawn&amp;gt;register_concmd(&amp;quot;amx_who&amp;quot;, &amp;quot;cmdWho&amp;quot;, ADMIN_ADMIN, &amp;quot;- displays who is on server&amp;quot;)&amp;lt;/pawn&amp;gt;&lt;br /&gt;
: заменить ''ADMIN_ADMIN'' на ''ADMIN_ALL'' и [[#Как компилировать плагины?|перекомпилировать]] плагин.&lt;br /&gt;
: В AMX 1.8.X и выше доступны стандартные средства переопределения прав доступа к командам без исправления самих плагинов (''TODO: ссылка?'').&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Вопросы по StatsX =&lt;br /&gt;
&lt;br /&gt;
=== Что такое StatsX? ===&lt;br /&gt;
: ''StatsX'' - это статистическое расширение AMX Mod X, предназначенное исключительно для Counter-Strike мода, реализованное в виде плагинов ''statsx.amxx'', ''statscfg.amxx'', ''stats_logging.amxx'', а также в модуле ''csx'', являющимся необходимым для работы данных плагинов.&lt;br /&gt;
&lt;br /&gt;
=== Как изменять конфигурацию StatsX? ===&lt;br /&gt;
: Изменять конфигурацию StatsX можно тремя способами:&lt;br /&gt;
:* посредством HUD-меню, вызываемого консольной командой ''amx_statscfgmenu'';&lt;br /&gt;
:* посредством расширенных возможностей консольной команды ''amx_statscfg'';&lt;br /&gt;
:* посредством редактирования текстового файла конфигурации StatsX - ''$AMXMODX\configs\stats.ini''.&lt;br /&gt;
&lt;br /&gt;
=== Как редактировать данные статистики StatsX? ===&lt;br /&gt;
: Данные статистики StatsX хранятся в файле ''$AMXMODX\data\csstats.dat'', который не является текстовым, поэтому редактировать данные можно либо с помощью утилиты ''WinCSX'' (для платформы MS Windows), расположенной по адресу ''$AMXMODX\data\wincsx.exe'', либо с помощью сторонних методов, основанных на принципе работы со [[Stats File Formats (AMX Mod X)|структурой данных файла csstats.dat]].&lt;br /&gt;
&lt;br /&gt;
=== Как очистить данные статистики StatsX? ===&lt;br /&gt;
: Очистить данные статистики StatsX можно тремя способами:&lt;br /&gt;
:* штатным методом StatsX, заключающимся в установке значения ''1'' для серверной консольной переменной ''csstats_reset'' и последующей смене карты;&lt;br /&gt;
:* посредством нажатия кнопки ''Clear stats'' утилиты WinCSX;&lt;br /&gt;
:* посредством удаления файла данных статистики ''$AMXMODX\data\csstats.dat''.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Вопросы по компилированию =&lt;br /&gt;
&lt;br /&gt;
=== Что такое компиляция? ===&lt;br /&gt;
: Это процесс, который переводит текстовые файлы (*.sma), содержащие исходный код (т.е. инструкции для AMX Mod X, который их исполняет), в формат, более пригодный для исполнения.  За счет этого скорость выполнения плагинов возрастает многократно, упрощается разработка &amp;quot;движка&amp;quot;, который эти плагины исполняет, а также в некотором смысле защищается авторский код. Почему в &amp;quot;некотором смысле&amp;quot;? Потому что все AMX Mod X плагины должны публиковаться под лицензией GNU General Public License. В случае публикации плагина лицензия обязывает также публиковать и его исходный код. Откомпилированные плагины имеют расширение .amxx. Именно файлы этого типа, а не .sma, должны указываться в файле plugins.ini для последующей корректной загрузки плагина.&lt;br /&gt;
&lt;br /&gt;
=== Как компилировать плагины? ===&lt;br /&gt;
: Базовую информацию вы можете найти в статье [[Ru Compiling Plugins (AMX Mod X)|Компилирование плагинов]].&lt;br /&gt;
&lt;br /&gt;
=== Как упростить процесс компилирования? ===&lt;br /&gt;
: Можно написать стороннюю программу или скрипт, например такой, как пакетный Batch файл. Например, создайте файл ''make.bat'' со следующим содержимым:&lt;br /&gt;
&amp;lt;pre&amp;gt;@amxxpc.exe %1 -i.\include -o.\compiled\%1&amp;lt;/pre&amp;gt;&lt;br /&gt;
: Чтобы с помощью него откомпилировать плагин, необходимо выполнить следующую команду:&lt;br /&gt;
&amp;lt;pre&amp;gt;make.bat my_plugin.sma&amp;lt;/pre&amp;gt;&lt;br /&gt;
: В итоге откомпилированный файл будет помещен в каталог ''compiled'' текущей директории. Если его там нет, значит в процессе компилирования возникли фатальные ошибки, которые выводятся на экран.&lt;br /&gt;
: Если вам необходимо (например, в случае ошибок) отправить кому-нибудь результат компиляции, можете перенаправить вывод информации о процессе компилирования в файл, например таким образом:&lt;br /&gt;
&amp;lt;pre&amp;gt;make.bat my_plugin.sma &amp;gt; my_plugin.log&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Компилятор выводит &amp;quot;max. usage is unknown, due to recursion&amp;quot; ===&lt;br /&gt;
: Ничего страшного - просто компилятор не может вычислить предполагаемый объем памяти, используемый вашим плагином.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Вопросы по скриптингу =&lt;br /&gt;
&lt;br /&gt;
=== С чего начать? ===&lt;br /&gt;
: С со статьи [[Ru Fundamental Basics of AMX Mod X Scripting|Фундаментальные основы AMX Mod X скриптинга]].&lt;br /&gt;
&lt;br /&gt;
=== А стоит ли вообще начинать? ===&lt;br /&gt;
: В зависимости от того, какую цель вы преследуете, а также от вашего желания и потенциала. Знание английского языка (чтение) будет огромным плюсом во время обучения, иначе постигать азы будет очень сложно. CS является закрытым проектом без исходных кодов, поэтому многие новые (неизученные) элементы приходится постигать через проведение экспериментов.&lt;/div&gt;</summary>
		<author><name>VEN</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.alliedmods.net/index.php?title=Ru_AMX_Mod_X_FAQ&amp;diff=6366</id>
		<title>Ru AMX Mod X FAQ</title>
		<link rel="alternate" type="text/html" href="https://wiki.alliedmods.net/index.php?title=Ru_AMX_Mod_X_FAQ&amp;diff=6366"/>
		<updated>2008-10-19T15:31:11Z</updated>

		<summary type="html">&lt;p&gt;VEN: /* Как полностью отключить/включить плагин (модуль)? */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Russian]]&lt;br /&gt;
[[Category:Ru:AMX Mod X]]&lt;br /&gt;
&lt;br /&gt;
= Общие положения, термины, сокращения и условные обозначения =&lt;br /&gt;
:* HL или HL1 - аббревиатура от [[Half-Life 1|Half-Life]] (часть первая);&lt;br /&gt;
:* Mod - &amp;quot;мод&amp;quot;, модификация - дополнение к чему-либо, как правило, расширяющее/изменяющее функциональность;&lt;br /&gt;
:* HL Engine - &amp;quot;движок&amp;quot; Half-Life - &amp;quot;центральный модуль&amp;quot;, осуществляющий выполнение базовых &amp;quot;общемодовых&amp;quot; задач;&lt;br /&gt;
:* MM - [[Metamod]] - сторонний мод особого типа, является промежуточным звеном в системе &amp;quot;HL движок - HL мод&amp;quot;;&lt;br /&gt;
:* AMXX - аббревиатура от [[AMX Mod X]] - Metamod plugin (&amp;quot;плагин&amp;quot;), своего рода Metamod мод;&lt;br /&gt;
:* Map - &amp;quot;карта&amp;quot; - определяет внешний вид территории, на которой происходит игровое действие;&lt;br /&gt;
:* World - &amp;quot;мир&amp;quot; - все пространство, которое занимает карта, а также область, находящаяся за картой;&lt;br /&gt;
:* Spawn - &amp;quot;спавн&amp;quot; - момент, когда игрок появляется в мире, обретая физическое тело;&lt;br /&gt;
:* SinglePlayer - &amp;quot;синглплеер&amp;quot; - игровой тип, когда одновременно в игре может участвовать только один игрок;&lt;br /&gt;
:* MultiPlayer - &amp;quot;мультиплеер&amp;quot; - игровой тип, когда одновременно в игре может участвовать несколько игроков;&lt;br /&gt;
:* DM - аббревиатура от Death Match - динамичный мультиплеер тип игры, когда после &amp;quot;смерти&amp;quot; игрока происходит его скорый спавн (&amp;quot;респавн&amp;quot;);&lt;br /&gt;
:* HLDM - аббревиатура от Half-Life Death Match - оригинальный HL мод DM типа;&lt;br /&gt;
:* CS - аббревиатура от [[Counter-Stirke]] - наиболее популярный HL мод;&lt;br /&gt;
:* VALVE - [[VALVe Software|корпорация, разработчик HL и CS]], также редко используется как синоним HLDM, подчеркивая название директории мода (&amp;quot;valve&amp;quot;);&lt;br /&gt;
:* $MODDIR - способ условного обозначения корневой директории мода, например: ''cstrike'', ''valve'';&lt;br /&gt;
:* $MMDIR - способ условного обозначения относительного пути (относительно пути к $MODDIR) к корневой директории Metamod, по умолчанию: ''addons\metamod'';&lt;br /&gt;
:* $AMXMODX - способ условного обозначения относительного пути (относительно пути к $MODDIR) к корневой директории AMX Mod X, по умолчанию: ''addons\amxmodx''.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Общие вопросы =&lt;br /&gt;
&lt;br /&gt;
=== Где скачать последнюю версию AMX Mod X? ===&lt;br /&gt;
: Последнюю версию всегда можно скачать на официальном сайте AMX Mod X в [http://www.amxmodx.org/downloads.php разделе закачек].&lt;br /&gt;
&lt;br /&gt;
=== А что именно качать? ===&lt;br /&gt;
: Качайте либо инсталлятор (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 мода.&lt;br /&gt;
&lt;br /&gt;
=== Чем отличается AMX Mod X от AMX Mod? ===&lt;br /&gt;
: Буквой X ;). На самом деле отличий очень много:&lt;br /&gt;
:* AMX Mod X поддерживается до сих пор, а поддержка AMX Mod была завершена примерно в 2006 году;&lt;br /&gt;
:* функциональность AMX Mod X значительно превосходит AMX Mod, это также касается и расширенной поддержки других модов, в то время как AMX Mod поддерживал только HLDM, CS и CZ;&lt;br /&gt;
:* AMX Mod X принято считать быстрее AMX Mod;&lt;br /&gt;
:* плагины AMX Mod X не совместимы с плагинами AMX Mod;&lt;br /&gt;
:* плагины AMX Mod 0.9.9 совместимы с AMX Mod X, если последний работает в режиме совместимости(?);&lt;br /&gt;
:* плагины для AMX Mod имеют расширение ''.amx'', а плагины AMX Mod X - ''.amxx'';&lt;br /&gt;
:* ''TODO: дополнить список''&lt;br /&gt;
&lt;br /&gt;
=== Как полностью отключить AMX Mod X? ===&lt;br /&gt;
: В файле ''$MMDIR\plugins.ini'' (по умолчанию: ''addons\metamod\plugins.ini'') необходимо закомментировать строку типа:&lt;br /&gt;
&amp;lt;pre&amp;gt;win32 addons\amxmodx\dlls\amxmodx_mm.dll&amp;lt;/pre&amp;gt;&lt;br /&gt;
: т.е. добавить в начало строки cимвол(ы) начала комментария (''#'' или ''//''), например:&lt;br /&gt;
&amp;lt;pre&amp;gt;//win32 addons\amxmodx\dlls\amxmodx_mm.dll&amp;lt;/pre&amp;gt;&lt;br /&gt;
: После чего следует сохранить изменения в файле и перезапустить сервер.&lt;br /&gt;
&lt;br /&gt;
=== Как найти причину &amp;quot;падений&amp;quot; сервера? ===&lt;br /&gt;
: Чтобы убедиться, что причина &amp;quot;падений&amp;quot; действительно в AMX Mod X, необходимо полностью его [[#Как полностью отключить AMX Mod X?|отключить]]. После чего посредством серверной консольной команды ''meta list'' следует убедиться, что AMX Mod X не запущен. Теперь необходимо снова попытаться воспроизвести &amp;quot;падение&amp;quot; сервера. Если этого удалось достигнуть вновь, очевидно, что истоки проблемы кроются за пределами AMX Mod X.&lt;br /&gt;
&lt;br /&gt;
: Иначе виновником &amp;quot;падений&amp;quot; может являться один из плагинов, поэтому для подтверждения данного предположения следует [[#Как полностью отключить/включить плагин (модуль)?|отключить]] все плагины без исключения. После чего посредством серверной консольной команды ''amxx plugins'' необходимо убедиться, что ни один из плагинов не запущен. Теперь следует снова попытаться воспроизвести &amp;quot;падение&amp;quot; сервера. Если этого удалось достигнуть вновь, очевидно, что истоки проблемы кроются за пределами плагинов - в самом AMX Mod X либо его модулях.&lt;br /&gt;
&lt;br /&gt;
: Иначе виновником &amp;quot;падений&amp;quot; является один из плагинов, который необходимо локализовать. Если подозреваемых плагинов большое количество, то следует последовательно [[#Как полностью отключить/включить плагин (модуль)?|включать]] половину (т.е. сначала 1/2, затем 1/4, после чего 1/8 и так далее) отключенных плагинов с последующей проверкой на &amp;quot;падение&amp;quot;. При возникновении &amp;quot;падений&amp;quot;, очевидно, что плагин-виновник находится в последней группе включенных плагинов, поэтому необходимо последовательно [[#Как полностью отключить/включить плагин (модуль)?|выключать]] половину (т.е. сначала 1/2, затем 1/4, после чего 1/8 и так далее) плагинов именно последней группы с последующей проверкой на &amp;quot;падение&amp;quot;. При исчезновении &amp;quot;падений&amp;quot; следует снова повторить вариант со включением/выключением плагинов, описанный выше, но уже для локализованной группы, которая с каждым повторением данных действий будет уменьшаться, и в конечном итоге в ней останется только один плагин, который и является причиной &amp;quot;падений&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
: Метод проверки модулей на причастность к &amp;quot;падению&amp;quot; сервера аналогичен приведенному выше методу для плагинов.&lt;br /&gt;
&lt;br /&gt;
: Если ничего из вышеописанного не прояснило ситуацию, и если режим ''HL logging'' был активирован (серверная консольная команда ''log on''), следует попытаться найти причину в последних по дате изменения файлах директории HL логов - ''$MODDIR/logs'' (например, для ''cstrike'' мода - по умолчанию ''cstrike\logs'').&lt;br /&gt;
&lt;br /&gt;
: Также, возможно, есть смысл проверить системный журнал на наличие записей об ошибке самого приложения ''hl.exe'', перейдя в ''Панель управления(Control Panel)'' -&amp;gt; ''Администрирование(Administration)'' -&amp;gt; ''Просмотр событий(Event viewer)''.&lt;br /&gt;
&lt;br /&gt;
=== Как запустить два различных сервера AMX Mod X? ===&lt;br /&gt;
: К примеру, вы хотите запустить два различных сервера из одной ''cstrike'' директории на базе различных AMX Mod X/Metamod плагинов, настроек и прочего. Это решаемо. Один из примеров для win32 системы приведен ниже:&lt;br /&gt;
:* cоздать отдельную AMX Mod X директорию с необходимыми файлами, например: ''.\addons\amxmodx2'';&lt;br /&gt;
:* в ''.\addons\amxmodx2\configs\core.ini'' везде изменить ''amxmodx'' на ''amxmodx2'';&lt;br /&gt;
:* создать отдельный файл загрузки Metamod плагинов, например: ''.\addons\metamod\plugins2.ini'';&lt;br /&gt;
:* в созданный ''plugins2.ini'' файл вписать: ''win32 addons\amxmodx2\dlls\amxmodx_mm.dll'';&lt;br /&gt;
:* создать в директории ''cstrike'' файл, например, с именем ''amxmodx2.cfg'', его содержимое должно быть следующим:&lt;br /&gt;
&amp;lt;pre&amp;gt;localinfo mm_pluginsfile &amp;quot;addons/metamod/plugins2.ini&amp;quot;&lt;br /&gt;
localinfo amxx_basedir &amp;quot;addons/amxmodx2&amp;quot;&lt;br /&gt;
localinfo amxx_cfg &amp;quot;addons/amxmodx2/configs/core.ini&amp;quot;&lt;br /&gt;
localinfo amxx_configsdir &amp;quot;addons/amxmodx2/configs&amp;quot;&lt;br /&gt;
localinfo amxx_customdir &amp;quot;addons/amxmodx2/custom&amp;quot;&lt;br /&gt;
localinfo amxx_datadir &amp;quot;addons/amxmodx2/data&amp;quot;&lt;br /&gt;
localinfo amxx_logdir &amp;quot;addons/amxmodx2/logs&amp;quot;&lt;br /&gt;
localinfo amxx_logs &amp;quot;addons/amxmodx2/logs&amp;quot;&lt;br /&gt;
localinfo amxx_modules &amp;quot;addons/amxmodx2/configs/modules.ini&amp;quot;&lt;br /&gt;
localinfo amxx_modulesdir &amp;quot;addons/amxmodx2/modules&amp;quot;&lt;br /&gt;
localinfo amxx_plugins &amp;quot;addons/amxmodx2/configs/plugins.ini&amp;quot;&lt;br /&gt;
localinfo amxx_pluginsdir &amp;quot;addons/amxmodx2/plugins&amp;quot;&lt;br /&gt;
localinfo amxx_vault &amp;quot;addons/amxmodx2/data/vault.ini&amp;quot;&lt;br /&gt;
localinfo csstats &amp;quot;addons/amxmodx2/data/csstats.dat&amp;quot;&lt;br /&gt;
localinfo csstats_score &amp;quot;addons/amxmodx2/data/csstats.amxx&amp;quot;&lt;br /&gt;
localinfo amx_basedir &amp;quot;addons/amxmodx2&amp;quot;&lt;br /&gt;
localinfo amx_configdir &amp;quot;addons/amxmodx2/configs&amp;quot;&lt;br /&gt;
localinfo amx_langdir &amp;quot;addons/amxmodx2/data/amxmod-lang&amp;quot;&lt;br /&gt;
localinfo amx_logdir &amp;quot;addons/amxmodx2/logs&amp;quot;&lt;br /&gt;
localinfo amx_modulesdir &amp;quot;addons/amxmodx2/modules&amp;quot;&lt;br /&gt;
localinfo amx_pluginsdir &amp;quot;addons/amxmodx2/plugins&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
: Теперь второй сервер необходимо будет запускать с параметром командной строки: ''+exec amxmodx2.cfg''.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Вопросы по плагинам =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Общие вопросы ==&lt;br /&gt;
&lt;br /&gt;
=== Где и как искать плагины? ===&lt;br /&gt;
: Предварительно отметим, что условно AMX Mod X плагины можно разделить на следующие категории: стандартные, официально одобренные, официально отклоненные и неофициальные. &lt;br /&gt;
&lt;br /&gt;
: Одобренные плагины можно искать с помощью специальной [http://www.amxmodx.org/compiler.php поисковой системы AMX Mod X плагинов].&lt;br /&gt;
&lt;br /&gt;
: Также имеется возможность использовать [http://forums.alliedmods.net/search.php поисковую систему официального форума] (примечание: было замечено, что в последнее время эта система функционирует не совсем корректно). В поле '''Search in Forum(s)''' отметьте '''Approved Plugins''', также, зажав клавишу Ctrl, можно отметить интересующие вас секции из подраздела '''High-Traffic Plugins'''. Чтобы искать неофициальные плагины, следует также воспользоваться [http://forums.alliedmods.net/search.php поисковой системой официального форума], правда, в поле '''Search in Forum(s)''' необходимо выбрать '''Unapproved/Old Plugins'''. Если для вас не имеет значения статус плагина, и вы склонны к экспериментам, осуществляйте поиск по категории '''Plugins''', которая включает в себя одобренные, отклоненные, недавно опубликованные, вполне возможно, &amp;quot;сырые&amp;quot; плагины, а также темы-запросы, в которых могут быть &amp;quot;быстро написанные&amp;quot; плагины.&lt;br /&gt;
&lt;br /&gt;
: Особенность поиска на официальных форумах еще состоит в том, что при вводе слова система ищет именно слова (без учета регистра), т.е. фрагменты, разделенные слева и справа пробелами. Т.о., к примеру, набрав для поиска слово ''FCOS'' вы не найдете нужного вам плагина, хотя есть тема, в которой присутствует текст ''[fcos]''. Для этого необходимо использовать в поиске строку ''*FCOS*''. Немного поработав с поисковой формой форума, вы легко освоите эту систему. Единственное возможное для некоторых неудобство - практически все описания плагинов написаны на английском языке.&lt;br /&gt;
&lt;br /&gt;
: Неофициальные плагины также можно попробовать искать с помощью общеизвестных поисковых систем: Google, Yandex, Rambler и др.&lt;br /&gt;
&lt;br /&gt;
=== Сколько плагинов сейчас выпущено под AMX Mod X? ===&lt;br /&gt;
: &amp;quot;Тонны&amp;quot; плагинов. Но, к сожалению, качеством и надежностью б'''о'''льшая половина из них не белещет. К тому же некоторые плагины, &amp;quot;заброшены&amp;quot; авторами и не обновляются, что приводит даже к несовместимости с новыми версиями AMX Mod X.&lt;br /&gt;
&lt;br /&gt;
=== Как устанавливать/удалять плагины? ===&lt;br /&gt;
: Обратитесь к статье [[Ru Configuring AMX Mod X|Кофигурирование AMX Mod X]].&lt;br /&gt;
&lt;br /&gt;
=== Как полностью отключить/включить плагин (модуль)? ===&lt;br /&gt;
: Чтобы полностью отключить плагин (модуль), в файле ''$AMXMODX\configs\plugins.ini'' (''$AMXMODX\configs\modules.ini'') необходимо закомментировать имя плагина (модуля), т.е. поставить перед ним символ комментария - точку с запятой. Примеры для плагина и модуля:&lt;br /&gt;
&amp;lt;pre&amp;gt;;myplugin.amxx&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;;fakemeta&amp;lt;/pre&amp;gt;&lt;br /&gt;
: После чего следует сохранить изменения в файле и перезапустить сервер. Для случая с плагином в перезапуске сервера необходимости нет - достаточно лишь смены карты.&lt;br /&gt;
: Чтобы включить плагин (модуль) следует проделать действия, являющиеся обратными вышеописанным, при этом смена карты является достаточным условием и для случая с модулем.&lt;br /&gt;
&lt;br /&gt;
=== Что такое стандартные плагины? ===&lt;br /&gt;
: Это плагины, которые входят в стандартную поставку AMX Mod X, т.е. те, которые находятся непосредственно после установки AMX Mod X в папках: ''$AMXMODX\plugins'' (''.amxx'' - откомпилированные плагины) и ''$AMXMODX\scripting'' (''.sma'' - исходные коды плагинов).&lt;br /&gt;
&lt;br /&gt;
=== Как узнать, в каком плагине зарегистрирована та или иная переменная (команда)? ===&lt;br /&gt;
: В серверной консоли наберите команду ''amxx cvars'' ( ''amxx cmds'' ). Выделите текст, скопируйте в файл, там сделайте поиск искомой переменной (команды). В правой колонке будет стоять имя плагина, в котором она и зарегистрирована. Примечание: если сервер запущен с параметром -console, то поиск можно осуществлять непосредственно в окне сервера посредством доступа к диалоговому окну поиска через оконное меню.&lt;br /&gt;
&lt;br /&gt;
=== Как активировать/отключить плагин(ы) лишь на конкретной(ых) карте(ах)? ===&lt;br /&gt;
: Чтобы активировать плагин(ы) ''плагин1.amxx, плагин2.amxx, &amp;lt;...&amp;gt;, плагинN.amxx'' на всех картах, кроме конкретной(ых) ''карта1, карта2, &amp;lt;...&amp;gt;, картаN'', помимо добавления в ''$AMXMODX\consfigs\plugins.ini'' строк:&lt;br /&gt;
&amp;lt;pre&amp;gt;плагин1.amxx&lt;br /&gt;
плагин2.amxx&lt;br /&gt;
&amp;lt;...&amp;gt;&lt;br /&gt;
плагинN.amxx&amp;lt;/pre&amp;gt;&lt;br /&gt;
: необходимо также создать файлы:&lt;br /&gt;
&amp;lt;pre&amp;gt;$AMXMODX\consfigs\maps\plugins-карта1.ini&lt;br /&gt;
$AMXMODX\consfigs\maps\plugins-карта2.ini&lt;br /&gt;
&amp;lt;...&amp;gt;&lt;br /&gt;
$AMXMODX\consfigs\maps\plugins-картаN.ini&amp;lt;/pre&amp;gt;&lt;br /&gt;
: с содержанием:&lt;br /&gt;
&amp;lt;pre&amp;gt;плагин1.amxx disabled&lt;br /&gt;
плагин2.amxx disabled&lt;br /&gt;
&amp;lt;...&amp;gt;&lt;br /&gt;
плагинN.amxx disabled&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
: Чтобы активировать плагин(ы) ''плагин1.amxx, плагин2.amxx, &amp;lt;...&amp;gt;, плагинN.amxx'' лишь на конкретной(ых) ''карта1, карта2, &amp;lt;...&amp;gt;, картаN'', необходимо только лишь создать файлы:&lt;br /&gt;
&amp;lt;pre&amp;gt;$AMXMODX\consfigs\maps\plugins-карта1.ini&lt;br /&gt;
$AMXMODX\consfigs\maps\plugins-карта2.ini&lt;br /&gt;
&amp;lt;...&amp;gt;&lt;br /&gt;
$AMXMODX\consfigs\maps\plugins-картаN.ini&amp;lt;/pre&amp;gt;&lt;br /&gt;
: с содержанием:&lt;br /&gt;
&amp;lt;pre&amp;gt;плагин1.amxx&lt;br /&gt;
плагин2.amxx&lt;br /&gt;
&amp;lt;...&amp;gt;&lt;br /&gt;
плагинN.amxx&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
: Примечания:&lt;br /&gt;
:* ''плагин1.amxx, плагин2.amxx, &amp;lt;...&amp;gt;, плагинN.amxx'' - это имена файлов ваших плагинов, количество которых может быть один и более;&lt;br /&gt;
:* ''карта1, карта2, &amp;lt;...&amp;gt;, картаN'' - это имена файлов (без расширения ''.bsp'') ваших карт, количество которых может быть одна и более;&lt;br /&gt;
&lt;br /&gt;
=== Я перевел на русский языковой файл плагина, а текст в игре отображается криво ===&lt;br /&gt;
: Скорее всего вы не сохранили файл в UTF-8 кодировке. Даже если вы это сделали, проверьте что в начале файла нет маркера кодировки, потому что некоторые редакторы его вставляют без предупреждения. Для этого надо использовать редактор или режим, который НЕ понимает UTF-8, потому что unicode редактор не отображает такой маркер.&lt;br /&gt;
: Имейте в виду, что в консоли сервера, работающего в режиме ''-console'', переведенный текст не будет отображаться по-русски.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Вопросы по стандартным плагинам ==&lt;br /&gt;
&lt;br /&gt;
=== Как увеличить число карт в стандартном голосовании? ===&lt;br /&gt;
: Откройте файл ''$AMXMODX\scripting\mapchooser.sma'', замените число ''3'' в строке:&lt;br /&gt;
&amp;lt;pawn&amp;gt;#define SELECTMAPS  3&amp;lt;/pawn&amp;gt;&lt;br /&gt;
: на требуемое, затем [[#Как компилировать плагины?|откомпилируйте]] плагин и замените исходный.&lt;br /&gt;
&lt;br /&gt;
=== Как увеличить число администраторов? ===&lt;br /&gt;
: В файле ''$AMXMODX\scripting\admin.sma'' замените число ''64'' на требуемое значение в строке:&lt;br /&gt;
&amp;lt;pawn&amp;gt;#define MAX_ADMINS 64&amp;lt;/pawn&amp;gt;&lt;br /&gt;
: Не ставьте слишком большие значения. Не забудьте [[#Как компилировать плагины?|перекомпилировать]] плагин и заменить исходный новым.&lt;br /&gt;
: В AMX Mod X 1.8.X и выше такой проблемы не существует, т.к. там реализован динамический список админов.&lt;br /&gt;
&lt;br /&gt;
=== Почему клиент не получает права админа по IP? ===&lt;br /&gt;
:Данная проблема возникает на публичных Non-Steam (патченных) интернет-серверах c значением ''sv_lan'' равным ''0'' при подключении Steam/Non-Steam клиентов.&lt;br /&gt;
: Сначала убедитесь, что у вас нединамический внешний IP. Динамический IP означает, что каждый раз, подключась к Интернету, вам назначается новый внешний IP (обычно из какого-то фиксированного диапазона). Для этого обратитесь к вашему провайдеру. Далее необходимо сверить, правильно ли вы прописали доступ в файле users.ini. Для этого проверьте свой внешний IP на страничке [http://myip.ru/ myip.ru]. Запомните его. Откройте файл user.ini и убедитесь что там есть такая запись:&lt;br /&gt;
 &amp;quot;&amp;lt;ваш_ip&amp;gt;&amp;quot; &amp;quot;&amp;lt;ваш_пароль&amp;gt;&amp;quot; &amp;quot;&amp;lt;ваши_флаги&amp;gt;&amp;quot; &amp;quot;d&amp;lt;другие_модификаторы&amp;gt;&amp;quot;&lt;br /&gt;
:В поле ''&amp;lt;ваш_ip&amp;gt;'' должен быть вбит запомненный ранее IP. Обратите внимание на модификатор '''d'''. Без него проверка на IP проводиться НЕ будет. При указании IP старайтесь не использовать номер порта (знак двоеточия и то, что справа от него).&lt;br /&gt;
: Если все правильно, а вы все равно не становитесь администратором на сервере, то, скорее всего, проблема в том, что вы не прошли авторизацию на сервере. Для этого выполните команду ''users'' или ''stat'' в консоли сервера и обратите внимание на значение в колонке ''userid''. Если напротив потенциального админа стоит '''STEAM_ID_PENDING''', то это означает, что сервер криво заломан, и он не авторизовал данного игрока. В свою очередь это значит, что функция ''client_authorized(id)'' не была вызвана для всех(!) активных AMX Mod X плагинов. Если открыть файл ''admin.sma'', то можно увидеть следующее:&lt;br /&gt;
&amp;lt;pawn&amp;gt;public client_authorized(id) {&lt;br /&gt;
    return get_cvar_num(&amp;quot;amx_mode&amp;quot;) ? accessUser(id) : PLUGIN_CONTINUE&lt;br /&gt;
}&amp;lt;/pawn&amp;gt;&lt;br /&gt;
: Это и есть проверка клиента на админа. Чтобы эта функция вызывалась всегда, ''client_authorized'' надо переименовать в ''client_putinserver'', а существующую функцию ''client_putinserver'' либо удалить, либо [[Ru_Fundamental_Basics_of_AMX_Mod_X_Scripting#Комментарии|закомментировать]].&lt;br /&gt;
&lt;br /&gt;
=== Как заставить команду amx_who выводить IP вместо ID? ===&lt;br /&gt;
: В файле ''admincmd.sma'' в указанном ниже месте &lt;br /&gt;
&amp;lt;pawn&amp;gt;public cmdWho(id, level, cid)&lt;br /&gt;
{&lt;br /&gt;
    //...&lt;br /&gt;
    console_print(id, &amp;quot;^n%s:^n #  %-16.15s %-20s %-8s %-4.3s %-4.3s %s&amp;quot;, cl_on_server, &amp;quot;nick&amp;quot;, &amp;quot;authid&amp;quot;, &amp;quot;userid&amp;quot;, lImm, lRes, lAccess) &lt;br /&gt;
    for (new a = 0; a &amp;lt; inum; ++a)&lt;br /&gt;
    {&lt;br /&gt;
        get_user_authid(players[a], authid, 31)&lt;br /&gt;
        //...&lt;br /&gt;
    }&lt;br /&gt;
    //...&lt;br /&gt;
}&amp;lt;/pawn&amp;gt;&lt;br /&gt;
: замените:&lt;br /&gt;
&amp;lt;pawn&amp;gt;console_print(id, &amp;quot;^n%s:^n #  %-16.15s %-20s %-8s %-4.3s %-4.3s %s&amp;quot;, cl_on_server, &amp;quot;nick&amp;quot;, &amp;quot;authid&amp;quot;, &amp;quot;userid&amp;quot;, lImm, lRes, lAccess)&amp;lt;/pawn&amp;gt;&lt;br /&gt;
: на:&lt;br /&gt;
&amp;lt;pawn&amp;gt;console_print(id, &amp;quot;^n%s:^n #  %-16.15s %-20s %-8s %-4.3s %-4.3s %s&amp;quot;, cl_on_server, &amp;quot;nick&amp;quot;, &amp;quot;ip&amp;quot;, &amp;quot;userid&amp;quot;, lImm, lRes, lAccess)&amp;lt;/pawn&amp;gt;&lt;br /&gt;
: а также:&lt;br /&gt;
&amp;lt;pawn&amp;gt;get_user_authid(players[a], authid, 31)&amp;lt;/pawn&amp;gt;&lt;br /&gt;
: на:&lt;br /&gt;
&amp;lt;pawn&amp;gt;get_user_ip(players[a], authid, 31, 1)&amp;lt;/pawn&amp;gt;&lt;br /&gt;
: Сохраните файл и [[#Как компилировать плагины?|перекомпилируйте]] плагин.&lt;br /&gt;
&lt;br /&gt;
=== А как дать всем доступ к команде amx_who? ===&lt;br /&gt;
: По умолчанию, команда доступна только игрокам с правами '''y''' (т.е. это признак админа). Чтобы разрешить пользоваться ею всем игрокам, надо открыть файл ''admincmd.sma'', и в строке&lt;br /&gt;
&amp;lt;pawn&amp;gt;register_concmd(&amp;quot;amx_who&amp;quot;, &amp;quot;cmdWho&amp;quot;, ADMIN_ADMIN, &amp;quot;- displays who is on server&amp;quot;)&amp;lt;/pawn&amp;gt;&lt;br /&gt;
: заменить ''ADMIN_ADMIN'' на ''ADMIN_ALL'' и [[#Как компилировать плагины?|перекомпилировать]] плагин.&lt;br /&gt;
: В AMX 1.8.X и выше доступны стандартные средства переопределения прав доступа к командам без исправления самих плагинов (''TODO: ссылка?'').&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Вопросы по StatsX =&lt;br /&gt;
&lt;br /&gt;
=== Что такое StatsX? ===&lt;br /&gt;
: ''StatsX'' - это статистическое расширение AMX Mod X, предназначенное исключительно для Counter-Strike мода, реализованное в виде плагинов ''statsx.amxx'', ''statscfg.amxx'', ''stats_logging.amxx'', а также в модуле ''csx'', являющимся необходимым для работы данных плагинов.&lt;br /&gt;
&lt;br /&gt;
=== Как изменять конфигурацию StatsX? ===&lt;br /&gt;
: Изменять конфигурацию StatsX можно тремя способами:&lt;br /&gt;
:* посредством HUD-меню, вызываемого консольной командой ''amx_statscfgmenu'';&lt;br /&gt;
:* посредством расширенных возможностей консольной команды ''amx_statscfg'';&lt;br /&gt;
:* посредством редактирования текстового файла конфигурации StatsX - ''$AMXMODX\configs\stats.ini''.&lt;br /&gt;
&lt;br /&gt;
=== Как редактировать данные статистики StatsX? ===&lt;br /&gt;
: Данные статистики StatsX хранятся в файле ''$AMXMODX\data\csstats.dat'', который не является текстовым, поэтому редактировать данные можно либо с помощью утилиты ''WinSCX'' (для платформы MS Windows), расположенной по адресу ''$AMXMODX\data\wincsx.exe'', либо с помощью сторонних методов, основанных на принципе работы со [[Stats File Formats (AMX Mod X)|структурой данных файла csstats.dat]].&lt;br /&gt;
&lt;br /&gt;
=== Как очистить статистику StatsX? ===&lt;br /&gt;
: Очистить статистику StatsX можно тремя способами:&lt;br /&gt;
:* штатным методом StatsX, заключающимся в установке значения ''1'' для серверной консольной переменной ''csstats_reset'' и последующей смене карты;&lt;br /&gt;
:* посредством нажатия кнопки ''Clear stats'' утилиты WinSCX;&lt;br /&gt;
:* посредством удаления файла ''$AMXMODX\data\csstats.dat''.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Вопросы по компилированию =&lt;br /&gt;
&lt;br /&gt;
=== Что такое компиляция? ===&lt;br /&gt;
: Это процесс, который переводит текстовые файлы (*.sma), содержащие исходный код (т.е. инструкции для AMX Mod X, который их исполняет), в формат, более пригодный для исполнения.  За счет этого скорость выполнения плагинов возрастает многократно, упрощается разработка &amp;quot;движка&amp;quot;, который эти плагины исполняет, а также в некотором смысле защищается авторский код. Почему в &amp;quot;некотором смысле&amp;quot;? Потому что все AMX Mod X плагины должны публиковаться под лицензией GNU General Public License. В случае публикации плагина лицензия обязывает также публиковать и его исходный код. Откомпилированные плагины имеют расширение .amxx. Именно файлы этого типа, а не .sma, должны указываться в файле plugins.ini для последующей корректной загрузки плагина.&lt;br /&gt;
&lt;br /&gt;
=== Как компилировать плагины? ===&lt;br /&gt;
: Базовую информацию вы можете найти в статье [[Ru Compiling Plugins (AMX Mod X)|Компилирование плагинов]].&lt;br /&gt;
&lt;br /&gt;
=== Как упростить процесс компилирования? ===&lt;br /&gt;
: Можно написать стороннюю программу или скрипт, например такой, как пакетный Batch файл. Например, создайте файл ''make.bat'' со следующим содержимым:&lt;br /&gt;
&amp;lt;pre&amp;gt;@amxxpc.exe %1 -i.\include -o.\compiled\%1&amp;lt;/pre&amp;gt;&lt;br /&gt;
: Чтобы с помощью него откомпилировать плагин, необходимо выполнить следующую команду:&lt;br /&gt;
&amp;lt;pre&amp;gt;make.bat my_plugin.sma&amp;lt;/pre&amp;gt;&lt;br /&gt;
: В итоге откомпилированный файл будет помещен в каталог ''compiled'' текущей директории. Если его там нет, значит в процессе компилирования возникли фатальные ошибки, которые выводятся на экран.&lt;br /&gt;
: Если вам необходимо (например, в случае ошибок) отправить кому-нибудь результат компиляции, можете перенаправить вывод информации о процессе компилирования в файл, например таким образом:&lt;br /&gt;
&amp;lt;pre&amp;gt;make.bat my_plugin.sma &amp;gt; my_plugin.log&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Компилятор выводит &amp;quot;max. usage is unknown, due to recursion&amp;quot; ===&lt;br /&gt;
: Ничего страшного - просто компилятор не может вычислить предполагаемый объем памяти, используемый вашим плагином.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Вопросы по скриптингу =&lt;br /&gt;
&lt;br /&gt;
=== С чего начать? ===&lt;br /&gt;
: С со статьи [[Ru Fundamental Basics of AMX Mod X Scripting|Фундаментальные основы AMX Mod X скриптинга]].&lt;br /&gt;
&lt;br /&gt;
=== А стоит ли вообще начинать? ===&lt;br /&gt;
: В зависимости от того, какую цель вы преследуете, а также от вашего желания и потенциала. Знание английского языка (чтение) будет огромным плюсом во время обучения, иначе постигать азы будет очень сложно. CS является закрытым проектом без исходных кодов, поэтому многие новые (неизученные) элементы приходится постигать через проведение экспериментов.&lt;/div&gt;</summary>
		<author><name>VEN</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.alliedmods.net/index.php?title=Ru_AMX_Mod_X_FAQ&amp;diff=6365</id>
		<title>Ru AMX Mod X FAQ</title>
		<link rel="alternate" type="text/html" href="https://wiki.alliedmods.net/index.php?title=Ru_AMX_Mod_X_FAQ&amp;diff=6365"/>
		<updated>2008-10-19T15:29:24Z</updated>

		<summary type="html">&lt;p&gt;VEN: добавлено несколько новых пунктов/разделов + улучшения в существующих / noticeable update&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Russian]]&lt;br /&gt;
[[Category:Ru:AMX Mod X]]&lt;br /&gt;
&lt;br /&gt;
= Общие положения, термины, сокращения и условные обозначения =&lt;br /&gt;
:* HL или HL1 - аббревиатура от [[Half-Life 1|Half-Life]] (часть первая);&lt;br /&gt;
:* Mod - &amp;quot;мод&amp;quot;, модификация - дополнение к чему-либо, как правило, расширяющее/изменяющее функциональность;&lt;br /&gt;
:* HL Engine - &amp;quot;движок&amp;quot; Half-Life - &amp;quot;центральный модуль&amp;quot;, осуществляющий выполнение базовых &amp;quot;общемодовых&amp;quot; задач;&lt;br /&gt;
:* MM - [[Metamod]] - сторонний мод особого типа, является промежуточным звеном в системе &amp;quot;HL движок - HL мод&amp;quot;;&lt;br /&gt;
:* AMXX - аббревиатура от [[AMX Mod X]] - Metamod plugin (&amp;quot;плагин&amp;quot;), своего рода Metamod мод;&lt;br /&gt;
:* Map - &amp;quot;карта&amp;quot; - определяет внешний вид территории, на которой происходит игровое действие;&lt;br /&gt;
:* World - &amp;quot;мир&amp;quot; - все пространство, которое занимает карта, а также область, находящаяся за картой;&lt;br /&gt;
:* Spawn - &amp;quot;спавн&amp;quot; - момент, когда игрок появляется в мире, обретая физическое тело;&lt;br /&gt;
:* SinglePlayer - &amp;quot;синглплеер&amp;quot; - игровой тип, когда одновременно в игре может участвовать только один игрок;&lt;br /&gt;
:* MultiPlayer - &amp;quot;мультиплеер&amp;quot; - игровой тип, когда одновременно в игре может участвовать несколько игроков;&lt;br /&gt;
:* DM - аббревиатура от Death Match - динамичный мультиплеер тип игры, когда после &amp;quot;смерти&amp;quot; игрока происходит его скорый спавн (&amp;quot;респавн&amp;quot;);&lt;br /&gt;
:* HLDM - аббревиатура от Half-Life Death Match - оригинальный HL мод DM типа;&lt;br /&gt;
:* CS - аббревиатура от [[Counter-Stirke]] - наиболее популярный HL мод;&lt;br /&gt;
:* VALVE - [[VALVe Software|корпорация, разработчик HL и CS]], также редко используется как синоним HLDM, подчеркивая название директории мода (&amp;quot;valve&amp;quot;);&lt;br /&gt;
:* $MODDIR - способ условного обозначения корневой директории мода, например: ''cstrike'', ''valve'';&lt;br /&gt;
:* $MMDIR - способ условного обозначения относительного пути (относительно пути к $MODDIR) к корневой директории Metamod, по умолчанию: ''addons\metamod'';&lt;br /&gt;
:* $AMXMODX - способ условного обозначения относительного пути (относительно пути к $MODDIR) к корневой директории AMX Mod X, по умолчанию: ''addons\amxmodx''.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Общие вопросы =&lt;br /&gt;
&lt;br /&gt;
=== Где скачать последнюю версию AMX Mod X? ===&lt;br /&gt;
: Последнюю версию всегда можно скачать на официальном сайте AMX Mod X в [http://www.amxmodx.org/downloads.php разделе закачек].&lt;br /&gt;
&lt;br /&gt;
=== А что именно качать? ===&lt;br /&gt;
: Качайте либо инсталлятор (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 мода.&lt;br /&gt;
&lt;br /&gt;
=== Чем отличается AMX Mod X от AMX Mod? ===&lt;br /&gt;
: Буквой X ;). На самом деле отличий очень много:&lt;br /&gt;
:* AMX Mod X поддерживается до сих пор, а поддержка AMX Mod была завершена примерно в 2006 году;&lt;br /&gt;
:* функциональность AMX Mod X значительно превосходит AMX Mod, это также касается и расширенной поддержки других модов, в то время как AMX Mod поддерживал только HLDM, CS и CZ;&lt;br /&gt;
:* AMX Mod X принято считать быстрее AMX Mod;&lt;br /&gt;
:* плагины AMX Mod X не совместимы с плагинами AMX Mod;&lt;br /&gt;
:* плагины AMX Mod 0.9.9 совместимы с AMX Mod X, если последний работает в режиме совместимости(?);&lt;br /&gt;
:* плагины для AMX Mod имеют расширение ''.amx'', а плагины AMX Mod X - ''.amxx'';&lt;br /&gt;
:* ''TODO: дополнить список''&lt;br /&gt;
&lt;br /&gt;
=== Как полностью отключить AMX Mod X? ===&lt;br /&gt;
: В файле ''$MMDIR\plugins.ini'' (по умолчанию: ''addons\metamod\plugins.ini'') необходимо закомментировать строку типа:&lt;br /&gt;
&amp;lt;pre&amp;gt;win32 addons\amxmodx\dlls\amxmodx_mm.dll&amp;lt;/pre&amp;gt;&lt;br /&gt;
: т.е. добавить в начало строки cимвол(ы) начала комментария (''#'' или ''//''), например:&lt;br /&gt;
&amp;lt;pre&amp;gt;//win32 addons\amxmodx\dlls\amxmodx_mm.dll&amp;lt;/pre&amp;gt;&lt;br /&gt;
: После чего следует сохранить изменения в файле и перезапустить сервер.&lt;br /&gt;
&lt;br /&gt;
=== Как найти причину &amp;quot;падений&amp;quot; сервера? ===&lt;br /&gt;
: Чтобы убедиться, что причина &amp;quot;падений&amp;quot; действительно в AMX Mod X, необходимо полностью его [[#Как полностью отключить AMX Mod X?|отключить]]. После чего посредством серверной консольной команды ''meta list'' следует убедиться, что AMX Mod X не запущен. Теперь необходимо снова попытаться воспроизвести &amp;quot;падение&amp;quot; сервера. Если этого удалось достигнуть вновь, очевидно, что истоки проблемы кроются за пределами AMX Mod X.&lt;br /&gt;
&lt;br /&gt;
: Иначе виновником &amp;quot;падений&amp;quot; может являться один из плагинов, поэтому для подтверждения данного предположения следует [[#Как полностью отключить/включить плагин (модуль)?|отключить]] все плагины без исключения. После чего посредством серверной консольной команды ''amxx plugins'' необходимо убедиться, что ни один из плагинов не запущен. Теперь следует снова попытаться воспроизвести &amp;quot;падение&amp;quot; сервера. Если этого удалось достигнуть вновь, очевидно, что истоки проблемы кроются за пределами плагинов - в самом AMX Mod X либо его модулях.&lt;br /&gt;
&lt;br /&gt;
: Иначе виновником &amp;quot;падений&amp;quot; является один из плагинов, который необходимо локализовать. Если подозреваемых плагинов большое количество, то следует последовательно [[#Как полностью отключить/включить плагин (модуль)?|включать]] половину (т.е. сначала 1/2, затем 1/4, после чего 1/8 и так далее) отключенных плагинов с последующей проверкой на &amp;quot;падение&amp;quot;. При возникновении &amp;quot;падений&amp;quot;, очевидно, что плагин-виновник находится в последней группе включенных плагинов, поэтому необходимо последовательно [[#Как полностью отключить/включить плагин (модуль)?|выключать]] половину (т.е. сначала 1/2, затем 1/4, после чего 1/8 и так далее) плагинов именно последней группы с последующей проверкой на &amp;quot;падение&amp;quot;. При исчезновении &amp;quot;падений&amp;quot; следует снова повторить вариант со включением/выключением плагинов, описанный выше, но уже для локализованной группы, которая с каждым повторением данных действий будет уменьшаться, и в конечном итоге в ней останется только один плагин, который и является причиной &amp;quot;падений&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
: Метод проверки модулей на причастность к &amp;quot;падению&amp;quot; сервера аналогичен приведенному выше методу для плагинов.&lt;br /&gt;
&lt;br /&gt;
: Если ничего из вышеописанного не прояснило ситуацию, и если режим ''HL logging'' был активирован (серверная консольная команда ''log on''), следует попытаться найти причину в последних по дате изменения файлах директории HL логов - ''$MODDIR/logs'' (например, для ''cstrike'' мода - по умолчанию ''cstrike\logs'').&lt;br /&gt;
&lt;br /&gt;
: Также, возможно, есть смысл проверить системный журнал на наличие записей об ошибке самого приложения ''hl.exe'', перейдя в ''Панель управления(Control Panel)'' -&amp;gt; ''Администрирование(Administration)'' -&amp;gt; ''Просмотр событий(Event viewer)''.&lt;br /&gt;
&lt;br /&gt;
=== Как запустить два различных сервера AMX Mod X? ===&lt;br /&gt;
: К примеру, вы хотите запустить два различных сервера из одной ''cstrike'' директории на базе различных AMX Mod X/Metamod плагинов, настроек и прочего. Это решаемо. Один из примеров для win32 системы приведен ниже:&lt;br /&gt;
:* cоздать отдельную AMX Mod X директорию с необходимыми файлами, например: ''.\addons\amxmodx2'';&lt;br /&gt;
:* в ''.\addons\amxmodx2\configs\core.ini'' везде изменить ''amxmodx'' на ''amxmodx2'';&lt;br /&gt;
:* создать отдельный файл загрузки Metamod плагинов, например: ''.\addons\metamod\plugins2.ini'';&lt;br /&gt;
:* в созданный ''plugins2.ini'' файл вписать: ''win32 addons\amxmodx2\dlls\amxmodx_mm.dll'';&lt;br /&gt;
:* создать в директории ''cstrike'' файл, например, с именем ''amxmodx2.cfg'', его содержимое должно быть следующим:&lt;br /&gt;
&amp;lt;pre&amp;gt;localinfo mm_pluginsfile &amp;quot;addons/metamod/plugins2.ini&amp;quot;&lt;br /&gt;
localinfo amxx_basedir &amp;quot;addons/amxmodx2&amp;quot;&lt;br /&gt;
localinfo amxx_cfg &amp;quot;addons/amxmodx2/configs/core.ini&amp;quot;&lt;br /&gt;
localinfo amxx_configsdir &amp;quot;addons/amxmodx2/configs&amp;quot;&lt;br /&gt;
localinfo amxx_customdir &amp;quot;addons/amxmodx2/custom&amp;quot;&lt;br /&gt;
localinfo amxx_datadir &amp;quot;addons/amxmodx2/data&amp;quot;&lt;br /&gt;
localinfo amxx_logdir &amp;quot;addons/amxmodx2/logs&amp;quot;&lt;br /&gt;
localinfo amxx_logs &amp;quot;addons/amxmodx2/logs&amp;quot;&lt;br /&gt;
localinfo amxx_modules &amp;quot;addons/amxmodx2/configs/modules.ini&amp;quot;&lt;br /&gt;
localinfo amxx_modulesdir &amp;quot;addons/amxmodx2/modules&amp;quot;&lt;br /&gt;
localinfo amxx_plugins &amp;quot;addons/amxmodx2/configs/plugins.ini&amp;quot;&lt;br /&gt;
localinfo amxx_pluginsdir &amp;quot;addons/amxmodx2/plugins&amp;quot;&lt;br /&gt;
localinfo amxx_vault &amp;quot;addons/amxmodx2/data/vault.ini&amp;quot;&lt;br /&gt;
localinfo csstats &amp;quot;addons/amxmodx2/data/csstats.dat&amp;quot;&lt;br /&gt;
localinfo csstats_score &amp;quot;addons/amxmodx2/data/csstats.amxx&amp;quot;&lt;br /&gt;
localinfo amx_basedir &amp;quot;addons/amxmodx2&amp;quot;&lt;br /&gt;
localinfo amx_configdir &amp;quot;addons/amxmodx2/configs&amp;quot;&lt;br /&gt;
localinfo amx_langdir &amp;quot;addons/amxmodx2/data/amxmod-lang&amp;quot;&lt;br /&gt;
localinfo amx_logdir &amp;quot;addons/amxmodx2/logs&amp;quot;&lt;br /&gt;
localinfo amx_modulesdir &amp;quot;addons/amxmodx2/modules&amp;quot;&lt;br /&gt;
localinfo amx_pluginsdir &amp;quot;addons/amxmodx2/plugins&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
: Теперь второй сервер необходимо будет запускать с параметром командной строки: ''+exec amxmodx2.cfg''.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Вопросы по плагинам =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Общие вопросы ==&lt;br /&gt;
&lt;br /&gt;
=== Где и как искать плагины? ===&lt;br /&gt;
: Предварительно отметим, что условно AMX Mod X плагины можно разделить на следующие категории: стандартные, официально одобренные, официально отклоненные и неофициальные. &lt;br /&gt;
&lt;br /&gt;
: Одобренные плагины можно искать с помощью специальной [http://www.amxmodx.org/compiler.php поисковой системы AMX Mod X плагинов].&lt;br /&gt;
&lt;br /&gt;
: Также имеется возможность использовать [http://forums.alliedmods.net/search.php поисковую систему официального форума] (примечание: было замечено, что в последнее время эта система функционирует не совсем корректно). В поле '''Search in Forum(s)''' отметьте '''Approved Plugins''', также, зажав клавишу Ctrl, можно отметить интересующие вас секции из подраздела '''High-Traffic Plugins'''. Чтобы искать неофициальные плагины, следует также воспользоваться [http://forums.alliedmods.net/search.php поисковой системой официального форума], правда, в поле '''Search in Forum(s)''' необходимо выбрать '''Unapproved/Old Plugins'''. Если для вас не имеет значения статус плагина, и вы склонны к экспериментам, осуществляйте поиск по категории '''Plugins''', которая включает в себя одобренные, отклоненные, недавно опубликованные, вполне возможно, &amp;quot;сырые&amp;quot; плагины, а также темы-запросы, в которых могут быть &amp;quot;быстро написанные&amp;quot; плагины.&lt;br /&gt;
&lt;br /&gt;
: Особенность поиска на официальных форумах еще состоит в том, что при вводе слова система ищет именно слова (без учета регистра), т.е. фрагменты, разделенные слева и справа пробелами. Т.о., к примеру, набрав для поиска слово ''FCOS'' вы не найдете нужного вам плагина, хотя есть тема, в которой присутствует текст ''[fcos]''. Для этого необходимо использовать в поиске строку ''*FCOS*''. Немного поработав с поисковой формой форума, вы легко освоите эту систему. Единственное возможное для некоторых неудобство - практически все описания плагинов написаны на английском языке.&lt;br /&gt;
&lt;br /&gt;
: Неофициальные плагины также можно попробовать искать с помощью общеизвестных поисковых систем: Google, Yandex, Rambler и др.&lt;br /&gt;
&lt;br /&gt;
=== Сколько плагинов сейчас выпущено под AMX Mod X? ===&lt;br /&gt;
: &amp;quot;Тонны&amp;quot; плагинов. Но, к сожалению, качеством и надежностью б'''о'''льшая половина из них не белещет. К тому же некоторые плагины, &amp;quot;заброшены&amp;quot; авторами и не обновляются, что приводит даже к несовместимости с новыми версиями AMX Mod X.&lt;br /&gt;
&lt;br /&gt;
=== Как устанавливать/удалять плагины? ===&lt;br /&gt;
: Обратитесь к статье [[Ru Configuring AMX Mod X|Кофигурирование AMX Mod X]].&lt;br /&gt;
&lt;br /&gt;
=== Как полностью отключить/включить плагин (модуль)? ===&lt;br /&gt;
: Чтобы полностью отключить плагин (модуль), в файле ''$AMXMODX\configs\plugins.ini'' (''$AMXMODX\configs\modules.ini'') необходимо закомментировать имя плагина (модуля), т.е. поставить перед ним символ комментария - точку с запятой. Примеры для плагина и модуля:&lt;br /&gt;
&amp;lt;pre&amp;gt;;myplugin.amxx&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;fakemeta&amp;lt;/pre&amp;gt;&lt;br /&gt;
: После чего следует сохранить изменения в файле и перезапустить сервер. Для случая с плагином в перезапуске сервера необходимости нет - достаточно лишь смены карты.&lt;br /&gt;
: Чтобы включить плагин (модуль) следует проделать действия, являющиеся обратными вышеописанным, при этом смена карты является достаточным условием и для случая с модулем.&lt;br /&gt;
&lt;br /&gt;
=== Что такое стандартные плагины? ===&lt;br /&gt;
: Это плагины, которые входят в стандартную поставку AMX Mod X, т.е. те, которые находятся непосредственно после установки AMX Mod X в папках: ''$AMXMODX\plugins'' (''.amxx'' - откомпилированные плагины) и ''$AMXMODX\scripting'' (''.sma'' - исходные коды плагинов).&lt;br /&gt;
&lt;br /&gt;
=== Как узнать, в каком плагине зарегистрирована та или иная переменная (команда)? ===&lt;br /&gt;
: В серверной консоли наберите команду ''amxx cvars'' ( ''amxx cmds'' ). Выделите текст, скопируйте в файл, там сделайте поиск искомой переменной (команды). В правой колонке будет стоять имя плагина, в котором она и зарегистрирована. Примечание: если сервер запущен с параметром -console, то поиск можно осуществлять непосредственно в окне сервера посредством доступа к диалоговому окну поиска через оконное меню.&lt;br /&gt;
&lt;br /&gt;
=== Как активировать/отключить плагин(ы) лишь на конкретной(ых) карте(ах)? ===&lt;br /&gt;
: Чтобы активировать плагин(ы) ''плагин1.amxx, плагин2.amxx, &amp;lt;...&amp;gt;, плагинN.amxx'' на всех картах, кроме конкретной(ых) ''карта1, карта2, &amp;lt;...&amp;gt;, картаN'', помимо добавления в ''$AMXMODX\consfigs\plugins.ini'' строк:&lt;br /&gt;
&amp;lt;pre&amp;gt;плагин1.amxx&lt;br /&gt;
плагин2.amxx&lt;br /&gt;
&amp;lt;...&amp;gt;&lt;br /&gt;
плагинN.amxx&amp;lt;/pre&amp;gt;&lt;br /&gt;
: необходимо также создать файлы:&lt;br /&gt;
&amp;lt;pre&amp;gt;$AMXMODX\consfigs\maps\plugins-карта1.ini&lt;br /&gt;
$AMXMODX\consfigs\maps\plugins-карта2.ini&lt;br /&gt;
&amp;lt;...&amp;gt;&lt;br /&gt;
$AMXMODX\consfigs\maps\plugins-картаN.ini&amp;lt;/pre&amp;gt;&lt;br /&gt;
: с содержанием:&lt;br /&gt;
&amp;lt;pre&amp;gt;плагин1.amxx disabled&lt;br /&gt;
плагин2.amxx disabled&lt;br /&gt;
&amp;lt;...&amp;gt;&lt;br /&gt;
плагинN.amxx disabled&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
: Чтобы активировать плагин(ы) ''плагин1.amxx, плагин2.amxx, &amp;lt;...&amp;gt;, плагинN.amxx'' лишь на конкретной(ых) ''карта1, карта2, &amp;lt;...&amp;gt;, картаN'', необходимо только лишь создать файлы:&lt;br /&gt;
&amp;lt;pre&amp;gt;$AMXMODX\consfigs\maps\plugins-карта1.ini&lt;br /&gt;
$AMXMODX\consfigs\maps\plugins-карта2.ini&lt;br /&gt;
&amp;lt;...&amp;gt;&lt;br /&gt;
$AMXMODX\consfigs\maps\plugins-картаN.ini&amp;lt;/pre&amp;gt;&lt;br /&gt;
: с содержанием:&lt;br /&gt;
&amp;lt;pre&amp;gt;плагин1.amxx&lt;br /&gt;
плагин2.amxx&lt;br /&gt;
&amp;lt;...&amp;gt;&lt;br /&gt;
плагинN.amxx&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
: Примечания:&lt;br /&gt;
:* ''плагин1.amxx, плагин2.amxx, &amp;lt;...&amp;gt;, плагинN.amxx'' - это имена файлов ваших плагинов, количество которых может быть один и более;&lt;br /&gt;
:* ''карта1, карта2, &amp;lt;...&amp;gt;, картаN'' - это имена файлов (без расширения ''.bsp'') ваших карт, количество которых может быть одна и более;&lt;br /&gt;
&lt;br /&gt;
=== Я перевел на русский языковой файл плагина, а текст в игре отображается криво ===&lt;br /&gt;
: Скорее всего вы не сохранили файл в UTF-8 кодировке. Даже если вы это сделали, проверьте что в начале файла нет маркера кодировки, потому что некоторые редакторы его вставляют без предупреждения. Для этого надо использовать редактор или режим, который НЕ понимает UTF-8, потому что unicode редактор не отображает такой маркер.&lt;br /&gt;
: Имейте в виду, что в консоли сервера, работающего в режиме ''-console'', переведенный текст не будет отображаться по-русски.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Вопросы по стандартным плагинам ==&lt;br /&gt;
&lt;br /&gt;
=== Как увеличить число карт в стандартном голосовании? ===&lt;br /&gt;
: Откройте файл ''$AMXMODX\scripting\mapchooser.sma'', замените число ''3'' в строке:&lt;br /&gt;
&amp;lt;pawn&amp;gt;#define SELECTMAPS  3&amp;lt;/pawn&amp;gt;&lt;br /&gt;
: на требуемое, затем [[#Как компилировать плагины?|откомпилируйте]] плагин и замените исходный.&lt;br /&gt;
&lt;br /&gt;
=== Как увеличить число администраторов? ===&lt;br /&gt;
: В файле ''$AMXMODX\scripting\admin.sma'' замените число ''64'' на требуемое значение в строке:&lt;br /&gt;
&amp;lt;pawn&amp;gt;#define MAX_ADMINS 64&amp;lt;/pawn&amp;gt;&lt;br /&gt;
: Не ставьте слишком большие значения. Не забудьте [[#Как компилировать плагины?|перекомпилировать]] плагин и заменить исходный новым.&lt;br /&gt;
: В AMX Mod X 1.8.X и выше такой проблемы не существует, т.к. там реализован динамический список админов.&lt;br /&gt;
&lt;br /&gt;
=== Почему клиент не получает права админа по IP? ===&lt;br /&gt;
:Данная проблема возникает на публичных Non-Steam (патченных) интернет-серверах c значением ''sv_lan'' равным ''0'' при подключении Steam/Non-Steam клиентов.&lt;br /&gt;
: Сначала убедитесь, что у вас нединамический внешний IP. Динамический IP означает, что каждый раз, подключась к Интернету, вам назначается новый внешний IP (обычно из какого-то фиксированного диапазона). Для этого обратитесь к вашему провайдеру. Далее необходимо сверить, правильно ли вы прописали доступ в файле users.ini. Для этого проверьте свой внешний IP на страничке [http://myip.ru/ myip.ru]. Запомните его. Откройте файл user.ini и убедитесь что там есть такая запись:&lt;br /&gt;
 &amp;quot;&amp;lt;ваш_ip&amp;gt;&amp;quot; &amp;quot;&amp;lt;ваш_пароль&amp;gt;&amp;quot; &amp;quot;&amp;lt;ваши_флаги&amp;gt;&amp;quot; &amp;quot;d&amp;lt;другие_модификаторы&amp;gt;&amp;quot;&lt;br /&gt;
:В поле ''&amp;lt;ваш_ip&amp;gt;'' должен быть вбит запомненный ранее IP. Обратите внимание на модификатор '''d'''. Без него проверка на IP проводиться НЕ будет. При указании IP старайтесь не использовать номер порта (знак двоеточия и то, что справа от него).&lt;br /&gt;
: Если все правильно, а вы все равно не становитесь администратором на сервере, то, скорее всего, проблема в том, что вы не прошли авторизацию на сервере. Для этого выполните команду ''users'' или ''stat'' в консоли сервера и обратите внимание на значение в колонке ''userid''. Если напротив потенциального админа стоит '''STEAM_ID_PENDING''', то это означает, что сервер криво заломан, и он не авторизовал данного игрока. В свою очередь это значит, что функция ''client_authorized(id)'' не была вызвана для всех(!) активных AMX Mod X плагинов. Если открыть файл ''admin.sma'', то можно увидеть следующее:&lt;br /&gt;
&amp;lt;pawn&amp;gt;public client_authorized(id) {&lt;br /&gt;
    return get_cvar_num(&amp;quot;amx_mode&amp;quot;) ? accessUser(id) : PLUGIN_CONTINUE&lt;br /&gt;
}&amp;lt;/pawn&amp;gt;&lt;br /&gt;
: Это и есть проверка клиента на админа. Чтобы эта функция вызывалась всегда, ''client_authorized'' надо переименовать в ''client_putinserver'', а существующую функцию ''client_putinserver'' либо удалить, либо [[Ru_Fundamental_Basics_of_AMX_Mod_X_Scripting#Комментарии|закомментировать]].&lt;br /&gt;
&lt;br /&gt;
=== Как заставить команду amx_who выводить IP вместо ID? ===&lt;br /&gt;
: В файле ''admincmd.sma'' в указанном ниже месте &lt;br /&gt;
&amp;lt;pawn&amp;gt;public cmdWho(id, level, cid)&lt;br /&gt;
{&lt;br /&gt;
    //...&lt;br /&gt;
    console_print(id, &amp;quot;^n%s:^n #  %-16.15s %-20s %-8s %-4.3s %-4.3s %s&amp;quot;, cl_on_server, &amp;quot;nick&amp;quot;, &amp;quot;authid&amp;quot;, &amp;quot;userid&amp;quot;, lImm, lRes, lAccess) &lt;br /&gt;
    for (new a = 0; a &amp;lt; inum; ++a)&lt;br /&gt;
    {&lt;br /&gt;
        get_user_authid(players[a], authid, 31)&lt;br /&gt;
        //...&lt;br /&gt;
    }&lt;br /&gt;
    //...&lt;br /&gt;
}&amp;lt;/pawn&amp;gt;&lt;br /&gt;
: замените:&lt;br /&gt;
&amp;lt;pawn&amp;gt;console_print(id, &amp;quot;^n%s:^n #  %-16.15s %-20s %-8s %-4.3s %-4.3s %s&amp;quot;, cl_on_server, &amp;quot;nick&amp;quot;, &amp;quot;authid&amp;quot;, &amp;quot;userid&amp;quot;, lImm, lRes, lAccess)&amp;lt;/pawn&amp;gt;&lt;br /&gt;
: на:&lt;br /&gt;
&amp;lt;pawn&amp;gt;console_print(id, &amp;quot;^n%s:^n #  %-16.15s %-20s %-8s %-4.3s %-4.3s %s&amp;quot;, cl_on_server, &amp;quot;nick&amp;quot;, &amp;quot;ip&amp;quot;, &amp;quot;userid&amp;quot;, lImm, lRes, lAccess)&amp;lt;/pawn&amp;gt;&lt;br /&gt;
: а также:&lt;br /&gt;
&amp;lt;pawn&amp;gt;get_user_authid(players[a], authid, 31)&amp;lt;/pawn&amp;gt;&lt;br /&gt;
: на:&lt;br /&gt;
&amp;lt;pawn&amp;gt;get_user_ip(players[a], authid, 31, 1)&amp;lt;/pawn&amp;gt;&lt;br /&gt;
: Сохраните файл и [[#Как компилировать плагины?|перекомпилируйте]] плагин.&lt;br /&gt;
&lt;br /&gt;
=== А как дать всем доступ к команде amx_who? ===&lt;br /&gt;
: По умолчанию, команда доступна только игрокам с правами '''y''' (т.е. это признак админа). Чтобы разрешить пользоваться ею всем игрокам, надо открыть файл ''admincmd.sma'', и в строке&lt;br /&gt;
&amp;lt;pawn&amp;gt;register_concmd(&amp;quot;amx_who&amp;quot;, &amp;quot;cmdWho&amp;quot;, ADMIN_ADMIN, &amp;quot;- displays who is on server&amp;quot;)&amp;lt;/pawn&amp;gt;&lt;br /&gt;
: заменить ''ADMIN_ADMIN'' на ''ADMIN_ALL'' и [[#Как компилировать плагины?|перекомпилировать]] плагин.&lt;br /&gt;
: В AMX 1.8.X и выше доступны стандартные средства переопределения прав доступа к командам без исправления самих плагинов (''TODO: ссылка?'').&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Вопросы по StatsX =&lt;br /&gt;
&lt;br /&gt;
=== Что такое StatsX? ===&lt;br /&gt;
: ''StatsX'' - это статистическое расширение AMX Mod X, предназначенное исключительно для Counter-Strike мода, реализованное в виде плагинов ''statsx.amxx'', ''statscfg.amxx'', ''stats_logging.amxx'', а также в модуле ''csx'', являющимся необходимым для работы данных плагинов.&lt;br /&gt;
&lt;br /&gt;
=== Как изменять конфигурацию StatsX? ===&lt;br /&gt;
: Изменять конфигурацию StatsX можно тремя способами:&lt;br /&gt;
:* посредством HUD-меню, вызываемого консольной командой ''amx_statscfgmenu'';&lt;br /&gt;
:* посредством расширенных возможностей консольной команды ''amx_statscfg'';&lt;br /&gt;
:* посредством редактирования текстового файла конфигурации StatsX - ''$AMXMODX\configs\stats.ini''.&lt;br /&gt;
&lt;br /&gt;
=== Как редактировать данные статистики StatsX? ===&lt;br /&gt;
: Данные статистики StatsX хранятся в файле ''$AMXMODX\data\csstats.dat'', который не является текстовым, поэтому редактировать данные можно либо с помощью утилиты ''WinSCX'' (для платформы MS Windows), расположенной по адресу ''$AMXMODX\data\wincsx.exe'', либо с помощью сторонних методов, основанных на принципе работы со [[Stats File Formats (AMX Mod X)|структурой данных файла csstats.dat]].&lt;br /&gt;
&lt;br /&gt;
=== Как очистить статистику StatsX? ===&lt;br /&gt;
: Очистить статистику StatsX можно тремя способами:&lt;br /&gt;
:* штатным методом StatsX, заключающимся в установке значения ''1'' для серверной консольной переменной ''csstats_reset'' и последующей смене карты;&lt;br /&gt;
:* посредством нажатия кнопки ''Clear stats'' утилиты WinSCX;&lt;br /&gt;
:* посредством удаления файла ''$AMXMODX\data\csstats.dat''.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Вопросы по компилированию =&lt;br /&gt;
&lt;br /&gt;
=== Что такое компиляция? ===&lt;br /&gt;
: Это процесс, который переводит текстовые файлы (*.sma), содержащие исходный код (т.е. инструкции для AMX Mod X, который их исполняет), в формат, более пригодный для исполнения.  За счет этого скорость выполнения плагинов возрастает многократно, упрощается разработка &amp;quot;движка&amp;quot;, который эти плагины исполняет, а также в некотором смысле защищается авторский код. Почему в &amp;quot;некотором смысле&amp;quot;? Потому что все AMX Mod X плагины должны публиковаться под лицензией GNU General Public License. В случае публикации плагина лицензия обязывает также публиковать и его исходный код. Откомпилированные плагины имеют расширение .amxx. Именно файлы этого типа, а не .sma, должны указываться в файле plugins.ini для последующей корректной загрузки плагина.&lt;br /&gt;
&lt;br /&gt;
=== Как компилировать плагины? ===&lt;br /&gt;
: Базовую информацию вы можете найти в статье [[Ru Compiling Plugins (AMX Mod X)|Компилирование плагинов]].&lt;br /&gt;
&lt;br /&gt;
=== Как упростить процесс компилирования? ===&lt;br /&gt;
: Можно написать стороннюю программу или скрипт, например такой, как пакетный Batch файл. Например, создайте файл ''make.bat'' со следующим содержимым:&lt;br /&gt;
&amp;lt;pre&amp;gt;@amxxpc.exe %1 -i.\include -o.\compiled\%1&amp;lt;/pre&amp;gt;&lt;br /&gt;
: Чтобы с помощью него откомпилировать плагин, необходимо выполнить следующую команду:&lt;br /&gt;
&amp;lt;pre&amp;gt;make.bat my_plugin.sma&amp;lt;/pre&amp;gt;&lt;br /&gt;
: В итоге откомпилированный файл будет помещен в каталог ''compiled'' текущей директории. Если его там нет, значит в процессе компилирования возникли фатальные ошибки, которые выводятся на экран.&lt;br /&gt;
: Если вам необходимо (например, в случае ошибок) отправить кому-нибудь результат компиляции, можете перенаправить вывод информации о процессе компилирования в файл, например таким образом:&lt;br /&gt;
&amp;lt;pre&amp;gt;make.bat my_plugin.sma &amp;gt; my_plugin.log&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Компилятор выводит &amp;quot;max. usage is unknown, due to recursion&amp;quot; ===&lt;br /&gt;
: Ничего страшного - просто компилятор не может вычислить предполагаемый объем памяти, используемый вашим плагином.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Вопросы по скриптингу =&lt;br /&gt;
&lt;br /&gt;
=== С чего начать? ===&lt;br /&gt;
: С со статьи [[Ru Fundamental Basics of AMX Mod X Scripting|Фундаментальные основы AMX Mod X скриптинга]].&lt;br /&gt;
&lt;br /&gt;
=== А стоит ли вообще начинать? ===&lt;br /&gt;
: В зависимости от того, какую цель вы преследуете, а также от вашего желания и потенциала. Знание английского языка (чтение) будет огромным плюсом во время обучения, иначе постигать азы будет очень сложно. CS является закрытым проектом без исходных кодов, поэтому многие новые (неизученные) элементы приходится постигать через проведение экспериментов.&lt;/div&gt;</summary>
		<author><name>VEN</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.alliedmods.net/index.php?title=Ru_AMX_Mod_X_FAQ&amp;diff=6364</id>
		<title>Ru AMX Mod X FAQ</title>
		<link rel="alternate" type="text/html" href="https://wiki.alliedmods.net/index.php?title=Ru_AMX_Mod_X_FAQ&amp;diff=6364"/>
		<updated>2008-10-19T09:16:22Z</updated>

		<summary type="html">&lt;p&gt;VEN: /* Я перевел на русский языковой файл плагина, а текст в игре отображается криво */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Russian]]&lt;br /&gt;
[[Category:Ru:AMX Mod X]]&lt;br /&gt;
&lt;br /&gt;
= Общие положения, термины, сокращения и условные обозначения =&lt;br /&gt;
:* HL или HL1 - аббревиатура от [[Half-Life 1|Half-Life]] (часть первая);&lt;br /&gt;
:* Mod - &amp;quot;мод&amp;quot;, модификация - дополнение к чему-либо, как правило, расширяющее/изменяющее функциональность;&lt;br /&gt;
:* HL Engine - &amp;quot;движок&amp;quot; Half-Life - &amp;quot;центральный модуль&amp;quot;, осуществляющий выполнение базовых &amp;quot;общемодовых&amp;quot; задач;&lt;br /&gt;
:* MM - [[Metamod]] - сторонний мод особого типа, является промежуточным звеном в системе &amp;quot;HL движок - HL мод&amp;quot;;&lt;br /&gt;
:* AMXX - аббревиатура от [[AMX Mod X]] - Metamod plugin (&amp;quot;плагин&amp;quot;), своего рода Metamod мод;&lt;br /&gt;
:* Map - &amp;quot;карта&amp;quot; - определяет внешний вид территории, на которой происходит игровое действие;&lt;br /&gt;
:* World - &amp;quot;мир&amp;quot; - все пространство, которое занимает карта, а также область, находящаяся за картой;&lt;br /&gt;
:* Spawn - &amp;quot;спавн&amp;quot; - момент, когда игрок появляется в мире, обретая физическое тело;&lt;br /&gt;
:* SinglePlayer - &amp;quot;синглплеер&amp;quot; - игровой тип, когда одновременно в игре может участвовать только один игрок;&lt;br /&gt;
:* MultiPlayer - &amp;quot;мультиплеер&amp;quot; - игровой тип, когда одновременно в игре может участвовать несколько игроков;&lt;br /&gt;
:* DM - аббревиатура от Death Match - динамичный мультиплеер тип игры, когда после &amp;quot;смерти&amp;quot; игрока происходит его скорый спавн (&amp;quot;респавн&amp;quot;);&lt;br /&gt;
:* HLDM - аббревиатура от Half-Life Death Match - оригинальный HL мод DM типа;&lt;br /&gt;
:* CS - аббревиатура от [[Counter-Stirke]] - наиболее популярный HL мод;&lt;br /&gt;
:* VALVE - [[VALVe Software|корпорация, разработчик HL и CS]], также редко используется как синоним HLDM, подчеркивая название директории мода (&amp;quot;valve&amp;quot;);&lt;br /&gt;
:* $MODDIR - способ условного обозначения корневой директории мода, например: ''cstrike'', ''valve'';&lt;br /&gt;
:* $MMDIR - способ условного обозначения относительного пути (относительно пути к $MODDIR) к корневой директории Metamod, по умолчанию: ''addons/metamod'';&lt;br /&gt;
:* $AMXMODX - способ условного обозначения относительного пути (относительно пути к $MODDIR) к корневой директории AMX Mod X, по умолчанию: ''addons/amxmodx''.&lt;br /&gt;
&lt;br /&gt;
= Общие вопросы =&lt;br /&gt;
=== Где скачать последнюю версию AMX Mod X? ===&lt;br /&gt;
: Последнюю версию всегда можно скачать на официальном сайте AMX Mod X в [http://www.amxmodx.org/downloads.php разделе закачек].&lt;br /&gt;
&lt;br /&gt;
=== А что именно качать? ===&lt;br /&gt;
: Качайте либо инсталлятор (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 мода.&lt;br /&gt;
&lt;br /&gt;
=== Чем отличается AMX Mod X от AMX Mod? ===&lt;br /&gt;
: Буквой X ;). На самом деле отличий очень много:&lt;br /&gt;
:* AMXX поддерживается до сих пор, а поддержка AMX Mod была завершена примерно в 2006 году;&lt;br /&gt;
:* функциональность AMXX значительно превосходит AMX Mod, это также касается и расширенной поддержки других модов, в то время как AMX Mod поддерживал только HLDM, CS и CZ;&lt;br /&gt;
:* AMXX принято считать быстрее AMX Mod;&lt;br /&gt;
:* плагины AMXX не совместимы с плагинами AMX Mod;&lt;br /&gt;
:* плагины AMX Mod 0.9.9 совместимы с AMXX, если последний работает в режиме совместимости(?);&lt;br /&gt;
:* плагины для AMX Mod имеют расширение .amx, а плагины AMXX - .amxx;&lt;br /&gt;
:* ''TODO: дополнить список''&lt;br /&gt;
&lt;br /&gt;
=== Как запустить два различных сервера AMX Mod X? ===&lt;br /&gt;
: К примеру, вы хотите запустить два различных сервера из одной ''cstrike'' директории на базе различных AMX Mod X/Metamod плагинов, настроек и прочего. Это решаемо. Один из примеров для win32 системы приведен ниже:&lt;br /&gt;
:* Создать отдельную AMX Mod X директорию с необходимыми файлами, например: ''addons/amxmodx2''&lt;br /&gt;
:* В ''addons/amxmodx2/configs/core.ini'' везде изменить &amp;quot;amxmodx&amp;quot; на &amp;quot;amxmodx2&amp;quot;&lt;br /&gt;
:* Создать отдельный файл загрузки Metamod плагинов, например: ''addons/metamod/plugins2.ini''&lt;br /&gt;
:* В созданный ''plugins2.ini'' файл вписать: ''win32 addons\amxmodx2\dlls\amxmodx_mm.dll''&lt;br /&gt;
:* Создать в директории ''cstrike'' файл, например, с именем ''amxmodx2.cfg'', его содержимое должно быть следующим:&lt;br /&gt;
&amp;lt;pre&amp;gt;localinfo mm_pluginsfile &amp;quot;addons/metamod/plugins2.ini&amp;quot;&lt;br /&gt;
localinfo amxx_basedir &amp;quot;addons/amxmodx2&amp;quot;&lt;br /&gt;
localinfo amxx_cfg &amp;quot;addons/amxmodx2/configs/core.ini&amp;quot;&lt;br /&gt;
localinfo amxx_configsdir &amp;quot;addons/amxmodx2/configs&amp;quot;&lt;br /&gt;
localinfo amxx_customdir &amp;quot;addons/amxmodx2/custom&amp;quot;&lt;br /&gt;
localinfo amxx_datadir &amp;quot;addons/amxmodx2/data&amp;quot;&lt;br /&gt;
localinfo amxx_logdir &amp;quot;addons/amxmodx2/logs&amp;quot;&lt;br /&gt;
localinfo amxx_logs &amp;quot;addons/amxmodx2/logs&amp;quot;&lt;br /&gt;
localinfo amxx_modules &amp;quot;addons/amxmodx2/configs/modules.ini&amp;quot;&lt;br /&gt;
localinfo amxx_modulesdir &amp;quot;addons/amxmodx2/modules&amp;quot;&lt;br /&gt;
localinfo amxx_plugins &amp;quot;addons/amxmodx2/configs/plugins.ini&amp;quot;&lt;br /&gt;
localinfo amxx_pluginsdir &amp;quot;addons/amxmodx2/plugins&amp;quot;&lt;br /&gt;
localinfo amxx_vault &amp;quot;addons/amxmodx2/data/vault.ini&amp;quot;&lt;br /&gt;
localinfo csstats &amp;quot;addons/amxmodx2/data/csstats.dat&amp;quot;&lt;br /&gt;
localinfo csstats_score &amp;quot;addons/amxmodx2/data/csstats.amxx&amp;quot;&lt;br /&gt;
localinfo amx_basedir &amp;quot;addons/amxmodx2&amp;quot;&lt;br /&gt;
localinfo amx_configdir &amp;quot;addons/amxmodx2/configs&amp;quot;&lt;br /&gt;
localinfo amx_langdir &amp;quot;addons/amxmodx2/data/amxmod-lang&amp;quot;&lt;br /&gt;
localinfo amx_logdir &amp;quot;addons/amxmodx2/logs&amp;quot;&lt;br /&gt;
localinfo amx_modulesdir &amp;quot;addons/amxmodx2/modules&amp;quot;&lt;br /&gt;
localinfo amx_pluginsdir &amp;quot;addons/amxmodx2/plugins&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
:* Теперь второй сервер необходимо будет запускать с параметром командной строки: ''+exec amxmodx2.cfg''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Вопросы по плагинам =&lt;br /&gt;
== Общие вопросы ==&lt;br /&gt;
=== Где и как искать плагины? ===&lt;br /&gt;
: Предварительно отметим, что условно AMX Mod X плагины можно разделить на следующие категории: стандартные, официально одобренные, официально отклоненные и неофициальные. Одобренные плагины можно искать [http://www.amxmodx.org/compiler.php здесь], или, используя [http://forums.alliedmods.net/search.php поисковую систему официального форума] (примечание: было замечено, что в последнее время эта система функционирует не совсем корректно). В поле '''Search in Forum(s)''' отметьте '''Approved Plugins''', также, зажав клавишу Ctrl, можно отметить интересующие вас секции из подраздела '''High-Traffic Plugins'''. Чтобы искать неофициальные плагины, следует также воспользоваться [http://forums.alliedmods.net/search.php поисковой системой официального форума], правда, в поле '''Search in Forum(s)''' необходимо выбрать '''Unapproved/Old Plugins'''. Если для вас не имеет значения статус плагина, и вы склонны к экспериментам, осуществляйте поиск по категории '''Plugins''', которая включает в себя одобренные, отклоненные, недавно опубликованные, вполне возможно, &amp;quot;сырые&amp;quot; плагины, а также темы-запросы, в которых могут быть &amp;quot;быстро написанные&amp;quot; плагины.  Особенность поиска на официальных форумах еще состоит в том, что при вводе слова система ищет именно слова (без учета регистра), т.е. фрагменты, разделенные слева и справа пробелами. Т.о., к примеру, набрав для поиска слово ''FCOS'' вы не найдете нужного вам плагина, хотя есть тема, в которой присутствует текст ''[fcos]''. Для этого надо использовать в поиске строку ''*FCOS*''. Немного поработав с поисковой формой форума, вы легко освоите эту систему. Единственное возможное для некоторых неудобство - практически все описания плагинов написаны на английcком языке. Неофициальные плагины также можно попробовать искать с помощью общеизвестных поисковых систем: Google, Yandex, Rambler и др.&lt;br /&gt;
&lt;br /&gt;
=== Сколько плагинов сейчас выпущено под AMX Mod X? ===&lt;br /&gt;
: &amp;quot;Тонны&amp;quot; плагинов. Но, к сожалению, качеством и надежностью б'''о'''льшая половина из них не белещет. К тому же некоторые плагины, &amp;quot;заброшены&amp;quot; авторами и не обновляются, что приводит даже к несовместимости с новыми версиями AMX Mod X.&lt;br /&gt;
&lt;br /&gt;
=== Как устанавливать плагины? ===&lt;br /&gt;
: Обратитесь к [[Ru Configuring AMX Mod X|этой]] статье.&lt;br /&gt;
&lt;br /&gt;
=== Как удалять плагины? ===&lt;br /&gt;
: Обратитесь к [[Ru Configuring AMX Mod X|этой]] статье.&lt;br /&gt;
&lt;br /&gt;
=== Что такое стандартные плагины? ===&lt;br /&gt;
: Это плагины, которые входят в стандартную поставку AMX Mod X, т.е. те, которые находятся непосредственно после установки AMX Mod X в папках: $AMXMODX\plugins (.amxx - откомпилированые плагины) и $AMXMODX\scripting (.sma - исходные коды плагинов).&lt;br /&gt;
&lt;br /&gt;
=== Как узнать, в каком плагине зарегистрирована та или иная переменная(команда)? ===&lt;br /&gt;
: В серверной консоли наберите команду ''amxx cvars'' ( ''amxx cmds'' ). Выделите текст, скопируйте в файл, там сделайте поиск искомой переменной (команды). В правой колонке будет стоять имя плагина, в котором она и зарегистрирована. Примечание: если сервер запущен с параметром -console, то поиск можно осуществлять непосредственно в окне сервера посредством доступа к диалоговому окну поиска через оконное меню.&lt;br /&gt;
&lt;br /&gt;
=== Я перевел на русский языковой файл плагина, а текст в игре отображается криво ===&lt;br /&gt;
: Скорее всего вы не сохранили файл в UTF-8 кодировке. Даже если вы это сделали, проверьте что в начале файла нет маркера кодировки, потому что некоторые редакторы его вставляют без предупреждения. Для этого надо использовать редактор или режим, который НЕ понимает UTF-8, потому что unicode редактор не отображает такой маркер.&lt;br /&gt;
: Имейте в виду, что в консоли сервера, работающего в режиме ''-console'', переведенный текст не будет отображаться по-русски.&lt;br /&gt;
&lt;br /&gt;
=== Как называется статистика, встроенная в AMXX? ===&lt;br /&gt;
: Называется &amp;quot;StatsX&amp;quot;, реализована в виде плагинов ''statsx.amxx'', ''statscfg.amxx'', ''stats_logging.amxx'', а также в модуле ''csx''. О последнем многие забывают, полагая, что можно просто изменить алгоритм учета статистики на уровне плагинов AMXX.&lt;br /&gt;
&lt;br /&gt;
== Вопросы по стандартным плагинам ==&lt;br /&gt;
=== Как увеличить число карт в стандартном голосовании? ===&lt;br /&gt;
: Откройте файл $AMXMODX\scripting\mapchooser.sma, замените число 3 в строке&lt;br /&gt;
 #define SELECTMAPS  3&lt;br /&gt;
: на требуемое, затем [[#Как компилировать плагины?|откомпилируйте]] плагин и замените исходный.&lt;br /&gt;
&lt;br /&gt;
=== Как увеличить число администраторов? ===&lt;br /&gt;
: В файле ''admin.sma'' замените число 64 на требуемое значение в строке:&lt;br /&gt;
 #define MAX_ADMINS 64&lt;br /&gt;
: Не ставьте слишком большие значения. Не забудьте [[#Как компилировать плагины?|перекомпилировать]] плагин и заменить исходный новым.&lt;br /&gt;
: В AMXX 1.8.X и выше такая проблема не стоит, т.к. там реализован динамический список админов.&lt;br /&gt;
&lt;br /&gt;
=== Почему клиент не получает права админа по IP? ===&lt;br /&gt;
:Данная проблема возникает на публичных Non-Steam (патченных) интернет-серверах c sv_lan = 0 при подключении Steam/Non-Steam клиентов.&lt;br /&gt;
: Сначала убедитесь, что у вас нединамический внешний IP. Динамический IP означает, что каждый раз, подключась к Интернету, вам назначается новый внешний IP (обычно из какого-то фиксированного диапазона). Для этого обратитесь к вашему провайдеру. Далее необходимо сверить, правильно ли вы прописали доступ в файле users.ini. Для этого проверьте свой внешний IP на страничке [http://myip.ru/ myip.ru]. Запомните его. Откройте файл user.ini и убедитесь что там есть такая запись:&lt;br /&gt;
 &amp;quot;&amp;lt;ваш_ip&amp;gt;&amp;quot; &amp;quot;&amp;lt;ваш_пароль&amp;gt;&amp;quot; &amp;quot;&amp;lt;ваши_флаги&amp;gt;&amp;quot; &amp;quot;d&amp;lt;другие_модификаторы&amp;gt;&amp;quot;&lt;br /&gt;
:В поле ''&amp;lt;ваш_ip&amp;gt;'' должен быть вбит запомненный ранее IP. Обратите внимание на модификатор '''d'''. Без него проверка на IP проводиться НЕ будет. При указании IP старайтесь не использовать номер порта (знак двоеточия и то, что справа от него).&lt;br /&gt;
: Если все правильно, а вы все равно не становитесь администратором на сервере, то, скорее всего, проблема в том, что вы не прошли авторизацию на сервере. Для этого выполните команду ''users'' или ''stat'' в консоли сервера и обратите внимание на значение в колонке ''userid''. Если напротив потенциального админа стоит '''STEAM_ID_PENDING''', то это означает, что сервер криво заломан, и он не авторизовал данного игрока. В свою очередь это значит, что функция ''client_authorized(id)'' не была вызвана для всех(!) активных AMXX плагинов. Если открыть файл ''admin.sma'', то можно увидеть следующее:&lt;br /&gt;
 public client_authorized(id)&lt;br /&gt;
   return get_cvar_num(&amp;quot;amx_mode&amp;quot;) ? accessUser(id) : PLUGIN_CONTINUE&lt;br /&gt;
: Это и есть проверка клиента на админа. Чтобы эта функция вызывалась всегда, ''client_authorized'' надо переименовать в ''client_putinserver'', а существующую функцию ''client_putinserver'' либо удалить, либо [[Ru_Fundamental_Basics_of_AMX_Mod_X_Scripting#Комментарии|закомментировать]].&lt;br /&gt;
&lt;br /&gt;
=== Как заставить команду amx_who выводить IP вместо ID? ===&lt;br /&gt;
: В файле ''admincmd.sma'' в указанном ниже месте &lt;br /&gt;
 public cmdWho(id, level, cid)&lt;br /&gt;
 {&lt;br /&gt;
  ...&lt;br /&gt;
  console_print(id, &amp;quot;^n%s:^n #  %-16.15s %-20s %-8s %-4.3s %-4.3s %s&amp;quot;, cl_on_server, &amp;quot;nick&amp;quot;, &amp;quot;authid&amp;quot;, &amp;quot;userid&amp;quot;, lImm, lRes, lAccess) &lt;br /&gt;
  for (new a = 0; a &amp;lt; inum; ++a)&lt;br /&gt;
  {&lt;br /&gt;
   get_user_authid(players[a], authid, 31)&lt;br /&gt;
   ...&lt;br /&gt;
  }&lt;br /&gt;
  ...&lt;br /&gt;
 }&lt;br /&gt;
:замените &lt;br /&gt;
 console_print(id, &amp;quot;^n%s:^n #  %-16.15s %-20s %-8s %-4.3s %-4.3s %s&amp;quot;, cl_on_server, &amp;quot;nick&amp;quot;, &amp;quot;authid&amp;quot;, &amp;quot;userid&amp;quot;, lImm, lRes, lAccess)&lt;br /&gt;
: на&lt;br /&gt;
 console_print(id, &amp;quot;^n%s:^n #  %-16.15s %-20s %-8s %-4.3s %-4.3s %s&amp;quot;, cl_on_server, &amp;quot;nick&amp;quot;, &amp;quot;ip&amp;quot;, &amp;quot;userid&amp;quot;, lImm, lRes, lAccess)&lt;br /&gt;
: а также&lt;br /&gt;
 get_user_authid(players[a], authid, 31)&lt;br /&gt;
: на&lt;br /&gt;
 get_user_ip(players[a], authid, 31, 1)&lt;br /&gt;
: Сохраните файл и [[#Как компилировать плагины?|перекомпилируйте]] плагин.&lt;br /&gt;
&lt;br /&gt;
=== А как дать всем доступ к команде amx_who? ===&lt;br /&gt;
: По умолчанию, команда доступна только игрокам с правами '''y''' (т.е. это признак админа). Чтобы разрешить пользоваться ею всем игрокам, надо открыть файл ''admincmd.sma'', и в строке&lt;br /&gt;
 register_concmd(&amp;quot;amx_who&amp;quot;, &amp;quot;cmdWho&amp;quot;, ADMIN_ADMIN, &amp;quot;- displays who is on server&amp;quot;)&lt;br /&gt;
: заменить ''ADMIN_ADMIN'' на ''ADMIN_ALL'' и [[#Как компилировать плагины?|перекомпилировать]] плагин.&lt;br /&gt;
: В AMX 1.8.X и выше доступны стандартные средства переопределения прав доступа к командам без исправления самих плагинов (''TODO: ссылка?'').&lt;br /&gt;
&lt;br /&gt;
=== Как очистить статистику StatsX? ===&lt;br /&gt;
: Удалите файл ''$AMXMODX/data/csstats.dat''.&lt;br /&gt;
&lt;br /&gt;
= Вопросы по компилированию =&lt;br /&gt;
=== Что такое компиляция? ===&lt;br /&gt;
: Это процесс, который переводит текстовые файлы (*.sma), содержащие исходный код (т.е. инструкции для AMX Mod X, который их исполняет), в формат, более пригодный для исполнения.  За счет этого скорость выполнения плагинов возрастает многократно, упрощается разработка &amp;quot;движка&amp;quot;, который эти плагины исполняет, а также в некотором смысле защищается авторский код. Почему в &amp;quot;некотором смысле&amp;quot;? Потому что все AMX Mod X плагины должны публиковаться под лицензией GNU General Public License. В случае публикации плагина лицензия обязывает также публиковать и его исходный код. Откомпилированные плагины имеют расширение .amxx. Именно файлы этого типа, а не .sma, должны указываться в файле plugins.ini для последующей корректной загрузки плагина.&lt;br /&gt;
&lt;br /&gt;
=== Как компилировать плагины? ===&lt;br /&gt;
: Базовую информацию вы можете найти на [[Ru Compiling Plugins (AMX Mod X)|этой]] странице.&lt;br /&gt;
&lt;br /&gt;
=== Как упростить процесс компилирования? ===&lt;br /&gt;
: Можно написать стороннюю программу или скрипт, например такой, как пакетный batch файл. Например, создайте файл make.bat со следующим содержимым:&lt;br /&gt;
 @amxxpc.exe %1 -i.\include -o.\compiled\%1&lt;br /&gt;
: Чтобы с помощью него откомпилировать плагин, необходимо выполнить следующую команду:&lt;br /&gt;
 make.bat my_plugin.sma&lt;br /&gt;
: В итоге откомпилированный файл будет помещен в каталог ''compiled'' текущей директории. Если его там нет, значит в процессе компилирования возникли фатальные ошибки, которые выводятся на экран.&lt;br /&gt;
: Если вам необходимо (например, в случае ошибок) отправить кому-нибудь результат компиляции, можете перенаправить вывод информации о процессе компилирования в файл, например таким образом:&lt;br /&gt;
 make.bat my_plugin.sma &amp;gt; my_plugin.log&lt;br /&gt;
&lt;br /&gt;
=== Компилятор выводит &amp;quot;max. usage is unknown, due to recursion&amp;quot; ===&lt;br /&gt;
: Ничего страшного - просто компилятор не может вычислить предполагаемый объем памяти, используемый вашим плагином.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Вопросы по скриптингу =&lt;br /&gt;
=== С чего начать? ===&lt;br /&gt;
: С со статьи [[Ru Fundamental Basics of AMX Mod X Scripting|Фундаментальные основы AMX Mod X скриптинга]].&lt;br /&gt;
&lt;br /&gt;
=== А стоит ли вообще начинать? ===&lt;br /&gt;
: В зависимости от того, какую цель вы преследуете, а также от вашего желания и потенциала. Знание английского языка (чтение) будет огромным плюсом во время обучения, иначе постигать азы будет очень сложно. CS является закрытым проектом без исходных кодов, поэтому могие новые (неизученные) элементы приходится постигать через проведение экспериментов.&lt;/div&gt;</summary>
		<author><name>VEN</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.alliedmods.net/index.php?title=Ru_AMX_Mod_X_FAQ&amp;diff=6363</id>
		<title>Ru AMX Mod X FAQ</title>
		<link rel="alternate" type="text/html" href="https://wiki.alliedmods.net/index.php?title=Ru_AMX_Mod_X_FAQ&amp;diff=6363"/>
		<updated>2008-10-19T09:15:11Z</updated>

		<summary type="html">&lt;p&gt;VEN: /* Как узнать, в каком плагине зарегистрирована та или иная переменная(команда)? */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Russian]]&lt;br /&gt;
[[Category:Ru:AMX Mod X]]&lt;br /&gt;
&lt;br /&gt;
= Общие положения, термины, сокращения и условные обозначения =&lt;br /&gt;
:* HL или HL1 - аббревиатура от [[Half-Life 1|Half-Life]] (часть первая);&lt;br /&gt;
:* Mod - &amp;quot;мод&amp;quot;, модификация - дополнение к чему-либо, как правило, расширяющее/изменяющее функциональность;&lt;br /&gt;
:* HL Engine - &amp;quot;движок&amp;quot; Half-Life - &amp;quot;центральный модуль&amp;quot;, осуществляющий выполнение базовых &amp;quot;общемодовых&amp;quot; задач;&lt;br /&gt;
:* MM - [[Metamod]] - сторонний мод особого типа, является промежуточным звеном в системе &amp;quot;HL движок - HL мод&amp;quot;;&lt;br /&gt;
:* AMXX - аббревиатура от [[AMX Mod X]] - Metamod plugin (&amp;quot;плагин&amp;quot;), своего рода Metamod мод;&lt;br /&gt;
:* Map - &amp;quot;карта&amp;quot; - определяет внешний вид территории, на которой происходит игровое действие;&lt;br /&gt;
:* World - &amp;quot;мир&amp;quot; - все пространство, которое занимает карта, а также область, находящаяся за картой;&lt;br /&gt;
:* Spawn - &amp;quot;спавн&amp;quot; - момент, когда игрок появляется в мире, обретая физическое тело;&lt;br /&gt;
:* SinglePlayer - &amp;quot;синглплеер&amp;quot; - игровой тип, когда одновременно в игре может участвовать только один игрок;&lt;br /&gt;
:* MultiPlayer - &amp;quot;мультиплеер&amp;quot; - игровой тип, когда одновременно в игре может участвовать несколько игроков;&lt;br /&gt;
:* DM - аббревиатура от Death Match - динамичный мультиплеер тип игры, когда после &amp;quot;смерти&amp;quot; игрока происходит его скорый спавн (&amp;quot;респавн&amp;quot;);&lt;br /&gt;
:* HLDM - аббревиатура от Half-Life Death Match - оригинальный HL мод DM типа;&lt;br /&gt;
:* CS - аббревиатура от [[Counter-Stirke]] - наиболее популярный HL мод;&lt;br /&gt;
:* VALVE - [[VALVe Software|корпорация, разработчик HL и CS]], также редко используется как синоним HLDM, подчеркивая название директории мода (&amp;quot;valve&amp;quot;);&lt;br /&gt;
:* $MODDIR - способ условного обозначения корневой директории мода, например: ''cstrike'', ''valve'';&lt;br /&gt;
:* $MMDIR - способ условного обозначения относительного пути (относительно пути к $MODDIR) к корневой директории Metamod, по умолчанию: ''addons/metamod'';&lt;br /&gt;
:* $AMXMODX - способ условного обозначения относительного пути (относительно пути к $MODDIR) к корневой директории AMX Mod X, по умолчанию: ''addons/amxmodx''.&lt;br /&gt;
&lt;br /&gt;
= Общие вопросы =&lt;br /&gt;
=== Где скачать последнюю версию AMX Mod X? ===&lt;br /&gt;
: Последнюю версию всегда можно скачать на официальном сайте AMX Mod X в [http://www.amxmodx.org/downloads.php разделе закачек].&lt;br /&gt;
&lt;br /&gt;
=== А что именно качать? ===&lt;br /&gt;
: Качайте либо инсталлятор (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 мода.&lt;br /&gt;
&lt;br /&gt;
=== Чем отличается AMX Mod X от AMX Mod? ===&lt;br /&gt;
: Буквой X ;). На самом деле отличий очень много:&lt;br /&gt;
:* AMXX поддерживается до сих пор, а поддержка AMX Mod была завершена примерно в 2006 году;&lt;br /&gt;
:* функциональность AMXX значительно превосходит AMX Mod, это также касается и расширенной поддержки других модов, в то время как AMX Mod поддерживал только HLDM, CS и CZ;&lt;br /&gt;
:* AMXX принято считать быстрее AMX Mod;&lt;br /&gt;
:* плагины AMXX не совместимы с плагинами AMX Mod;&lt;br /&gt;
:* плагины AMX Mod 0.9.9 совместимы с AMXX, если последний работает в режиме совместимости(?);&lt;br /&gt;
:* плагины для AMX Mod имеют расширение .amx, а плагины AMXX - .amxx;&lt;br /&gt;
:* ''TODO: дополнить список''&lt;br /&gt;
&lt;br /&gt;
=== Как запустить два различных сервера AMX Mod X? ===&lt;br /&gt;
: К примеру, вы хотите запустить два различных сервера из одной ''cstrike'' директории на базе различных AMX Mod X/Metamod плагинов, настроек и прочего. Это решаемо. Один из примеров для win32 системы приведен ниже:&lt;br /&gt;
:* Создать отдельную AMX Mod X директорию с необходимыми файлами, например: ''addons/amxmodx2''&lt;br /&gt;
:* В ''addons/amxmodx2/configs/core.ini'' везде изменить &amp;quot;amxmodx&amp;quot; на &amp;quot;amxmodx2&amp;quot;&lt;br /&gt;
:* Создать отдельный файл загрузки Metamod плагинов, например: ''addons/metamod/plugins2.ini''&lt;br /&gt;
:* В созданный ''plugins2.ini'' файл вписать: ''win32 addons\amxmodx2\dlls\amxmodx_mm.dll''&lt;br /&gt;
:* Создать в директории ''cstrike'' файл, например, с именем ''amxmodx2.cfg'', его содержимое должно быть следующим:&lt;br /&gt;
&amp;lt;pre&amp;gt;localinfo mm_pluginsfile &amp;quot;addons/metamod/plugins2.ini&amp;quot;&lt;br /&gt;
localinfo amxx_basedir &amp;quot;addons/amxmodx2&amp;quot;&lt;br /&gt;
localinfo amxx_cfg &amp;quot;addons/amxmodx2/configs/core.ini&amp;quot;&lt;br /&gt;
localinfo amxx_configsdir &amp;quot;addons/amxmodx2/configs&amp;quot;&lt;br /&gt;
localinfo amxx_customdir &amp;quot;addons/amxmodx2/custom&amp;quot;&lt;br /&gt;
localinfo amxx_datadir &amp;quot;addons/amxmodx2/data&amp;quot;&lt;br /&gt;
localinfo amxx_logdir &amp;quot;addons/amxmodx2/logs&amp;quot;&lt;br /&gt;
localinfo amxx_logs &amp;quot;addons/amxmodx2/logs&amp;quot;&lt;br /&gt;
localinfo amxx_modules &amp;quot;addons/amxmodx2/configs/modules.ini&amp;quot;&lt;br /&gt;
localinfo amxx_modulesdir &amp;quot;addons/amxmodx2/modules&amp;quot;&lt;br /&gt;
localinfo amxx_plugins &amp;quot;addons/amxmodx2/configs/plugins.ini&amp;quot;&lt;br /&gt;
localinfo amxx_pluginsdir &amp;quot;addons/amxmodx2/plugins&amp;quot;&lt;br /&gt;
localinfo amxx_vault &amp;quot;addons/amxmodx2/data/vault.ini&amp;quot;&lt;br /&gt;
localinfo csstats &amp;quot;addons/amxmodx2/data/csstats.dat&amp;quot;&lt;br /&gt;
localinfo csstats_score &amp;quot;addons/amxmodx2/data/csstats.amxx&amp;quot;&lt;br /&gt;
localinfo amx_basedir &amp;quot;addons/amxmodx2&amp;quot;&lt;br /&gt;
localinfo amx_configdir &amp;quot;addons/amxmodx2/configs&amp;quot;&lt;br /&gt;
localinfo amx_langdir &amp;quot;addons/amxmodx2/data/amxmod-lang&amp;quot;&lt;br /&gt;
localinfo amx_logdir &amp;quot;addons/amxmodx2/logs&amp;quot;&lt;br /&gt;
localinfo amx_modulesdir &amp;quot;addons/amxmodx2/modules&amp;quot;&lt;br /&gt;
localinfo amx_pluginsdir &amp;quot;addons/amxmodx2/plugins&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
:* Теперь второй сервер необходимо будет запускать с параметром командной строки: ''+exec amxmodx2.cfg''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Вопросы по плагинам =&lt;br /&gt;
== Общие вопросы ==&lt;br /&gt;
=== Где и как искать плагины? ===&lt;br /&gt;
: Предварительно отметим, что условно AMX Mod X плагины можно разделить на следующие категории: стандартные, официально одобренные, официально отклоненные и неофициальные. Одобренные плагины можно искать [http://www.amxmodx.org/compiler.php здесь], или, используя [http://forums.alliedmods.net/search.php поисковую систему официального форума] (примечание: было замечено, что в последнее время эта система функционирует не совсем корректно). В поле '''Search in Forum(s)''' отметьте '''Approved Plugins''', также, зажав клавишу Ctrl, можно отметить интересующие вас секции из подраздела '''High-Traffic Plugins'''. Чтобы искать неофициальные плагины, следует также воспользоваться [http://forums.alliedmods.net/search.php поисковой системой официального форума], правда, в поле '''Search in Forum(s)''' необходимо выбрать '''Unapproved/Old Plugins'''. Если для вас не имеет значения статус плагина, и вы склонны к экспериментам, осуществляйте поиск по категории '''Plugins''', которая включает в себя одобренные, отклоненные, недавно опубликованные, вполне возможно, &amp;quot;сырые&amp;quot; плагины, а также темы-запросы, в которых могут быть &amp;quot;быстро написанные&amp;quot; плагины.  Особенность поиска на официальных форумах еще состоит в том, что при вводе слова система ищет именно слова (без учета регистра), т.е. фрагменты, разделенные слева и справа пробелами. Т.о., к примеру, набрав для поиска слово ''FCOS'' вы не найдете нужного вам плагина, хотя есть тема, в которой присутствует текст ''[fcos]''. Для этого надо использовать в поиске строку ''*FCOS*''. Немного поработав с поисковой формой форума, вы легко освоите эту систему. Единственное возможное для некоторых неудобство - практически все описания плагинов написаны на английcком языке. Неофициальные плагины также можно попробовать искать с помощью общеизвестных поисковых систем: Google, Yandex, Rambler и др.&lt;br /&gt;
&lt;br /&gt;
=== Сколько плагинов сейчас выпущено под AMX Mod X? ===&lt;br /&gt;
: &amp;quot;Тонны&amp;quot; плагинов. Но, к сожалению, качеством и надежностью б'''о'''льшая половина из них не белещет. К тому же некоторые плагины, &amp;quot;заброшены&amp;quot; авторами и не обновляются, что приводит даже к несовместимости с новыми версиями AMX Mod X.&lt;br /&gt;
&lt;br /&gt;
=== Как устанавливать плагины? ===&lt;br /&gt;
: Обратитесь к [[Ru Configuring AMX Mod X|этой]] статье.&lt;br /&gt;
&lt;br /&gt;
=== Как удалять плагины? ===&lt;br /&gt;
: Обратитесь к [[Ru Configuring AMX Mod X|этой]] статье.&lt;br /&gt;
&lt;br /&gt;
=== Что такое стандартные плагины? ===&lt;br /&gt;
: Это плагины, которые входят в стандартную поставку AMX Mod X, т.е. те, которые находятся непосредственно после установки AMX Mod X в папках: $AMXMODX\plugins (.amxx - откомпилированые плагины) и $AMXMODX\scripting (.sma - исходные коды плагинов).&lt;br /&gt;
&lt;br /&gt;
=== Как узнать, в каком плагине зарегистрирована та или иная переменная(команда)? ===&lt;br /&gt;
: В серверной консоли наберите команду ''amxx cvars'' ( ''amxx cmds'' ). Выделите текст, скопируйте в файл, там сделайте поиск искомой переменной (команды). В правой колонке будет стоять имя плагина, в котором она и зарегистрирована. Примечание: если сервер запущен с параметром -console, то поиск можно осуществлять непосредственно в окне сервера посредством доступа к диалоговому окну поиска через оконное меню.&lt;br /&gt;
&lt;br /&gt;
=== Я перевел на русский языковой файл плагина, а текст в игре отображается криво ===&lt;br /&gt;
: Скорее всего вы не сохранили файл в UTF-8 кодировке. Даже если вы это сделали, проверьте что в начале файле нет маркера кодировки, потому что некоторые редакторы его вставляют без предупреждения. Для этого надо использовать редактор или режим, который НЕ понимает UTF-8, потому что unicode редактор не отображает такой маркер.&lt;br /&gt;
: Имейте в виду, что в консоли сервера, работающего в режиме ''-console'', переведенный текст не будет отображаться по-русски.&lt;br /&gt;
&lt;br /&gt;
=== Как называется статистика, встроенная в AMXX? ===&lt;br /&gt;
: Называется &amp;quot;StatsX&amp;quot;, реализована в виде плагинов ''statsx.amxx'', ''statscfg.amxx'', ''stats_logging.amxx'', а также в модуле ''csx''. О последнем многие забывают, полагая, что можно просто изменить алгоритм учета статистики на уровне плагинов AMXX.&lt;br /&gt;
&lt;br /&gt;
== Вопросы по стандартным плагинам ==&lt;br /&gt;
=== Как увеличить число карт в стандартном голосовании? ===&lt;br /&gt;
: Откройте файл $AMXMODX\scripting\mapchooser.sma, замените число 3 в строке&lt;br /&gt;
 #define SELECTMAPS  3&lt;br /&gt;
: на требуемое, затем [[#Как компилировать плагины?|откомпилируйте]] плагин и замените исходный.&lt;br /&gt;
&lt;br /&gt;
=== Как увеличить число администраторов? ===&lt;br /&gt;
: В файле ''admin.sma'' замените число 64 на требуемое значение в строке:&lt;br /&gt;
 #define MAX_ADMINS 64&lt;br /&gt;
: Не ставьте слишком большие значения. Не забудьте [[#Как компилировать плагины?|перекомпилировать]] плагин и заменить исходный новым.&lt;br /&gt;
: В AMXX 1.8.X и выше такая проблема не стоит, т.к. там реализован динамический список админов.&lt;br /&gt;
&lt;br /&gt;
=== Почему клиент не получает права админа по IP? ===&lt;br /&gt;
:Данная проблема возникает на публичных Non-Steam (патченных) интернет-серверах c sv_lan = 0 при подключении Steam/Non-Steam клиентов.&lt;br /&gt;
: Сначала убедитесь, что у вас нединамический внешний IP. Динамический IP означает, что каждый раз, подключась к Интернету, вам назначается новый внешний IP (обычно из какого-то фиксированного диапазона). Для этого обратитесь к вашему провайдеру. Далее необходимо сверить, правильно ли вы прописали доступ в файле users.ini. Для этого проверьте свой внешний IP на страничке [http://myip.ru/ myip.ru]. Запомните его. Откройте файл user.ini и убедитесь что там есть такая запись:&lt;br /&gt;
 &amp;quot;&amp;lt;ваш_ip&amp;gt;&amp;quot; &amp;quot;&amp;lt;ваш_пароль&amp;gt;&amp;quot; &amp;quot;&amp;lt;ваши_флаги&amp;gt;&amp;quot; &amp;quot;d&amp;lt;другие_модификаторы&amp;gt;&amp;quot;&lt;br /&gt;
:В поле ''&amp;lt;ваш_ip&amp;gt;'' должен быть вбит запомненный ранее IP. Обратите внимание на модификатор '''d'''. Без него проверка на IP проводиться НЕ будет. При указании IP старайтесь не использовать номер порта (знак двоеточия и то, что справа от него).&lt;br /&gt;
: Если все правильно, а вы все равно не становитесь администратором на сервере, то, скорее всего, проблема в том, что вы не прошли авторизацию на сервере. Для этого выполните команду ''users'' или ''stat'' в консоли сервера и обратите внимание на значение в колонке ''userid''. Если напротив потенциального админа стоит '''STEAM_ID_PENDING''', то это означает, что сервер криво заломан, и он не авторизовал данного игрока. В свою очередь это значит, что функция ''client_authorized(id)'' не была вызвана для всех(!) активных AMXX плагинов. Если открыть файл ''admin.sma'', то можно увидеть следующее:&lt;br /&gt;
 public client_authorized(id)&lt;br /&gt;
   return get_cvar_num(&amp;quot;amx_mode&amp;quot;) ? accessUser(id) : PLUGIN_CONTINUE&lt;br /&gt;
: Это и есть проверка клиента на админа. Чтобы эта функция вызывалась всегда, ''client_authorized'' надо переименовать в ''client_putinserver'', а существующую функцию ''client_putinserver'' либо удалить, либо [[Ru_Fundamental_Basics_of_AMX_Mod_X_Scripting#Комментарии|закомментировать]].&lt;br /&gt;
&lt;br /&gt;
=== Как заставить команду amx_who выводить IP вместо ID? ===&lt;br /&gt;
: В файле ''admincmd.sma'' в указанном ниже месте &lt;br /&gt;
 public cmdWho(id, level, cid)&lt;br /&gt;
 {&lt;br /&gt;
  ...&lt;br /&gt;
  console_print(id, &amp;quot;^n%s:^n #  %-16.15s %-20s %-8s %-4.3s %-4.3s %s&amp;quot;, cl_on_server, &amp;quot;nick&amp;quot;, &amp;quot;authid&amp;quot;, &amp;quot;userid&amp;quot;, lImm, lRes, lAccess) &lt;br /&gt;
  for (new a = 0; a &amp;lt; inum; ++a)&lt;br /&gt;
  {&lt;br /&gt;
   get_user_authid(players[a], authid, 31)&lt;br /&gt;
   ...&lt;br /&gt;
  }&lt;br /&gt;
  ...&lt;br /&gt;
 }&lt;br /&gt;
:замените &lt;br /&gt;
 console_print(id, &amp;quot;^n%s:^n #  %-16.15s %-20s %-8s %-4.3s %-4.3s %s&amp;quot;, cl_on_server, &amp;quot;nick&amp;quot;, &amp;quot;authid&amp;quot;, &amp;quot;userid&amp;quot;, lImm, lRes, lAccess)&lt;br /&gt;
: на&lt;br /&gt;
 console_print(id, &amp;quot;^n%s:^n #  %-16.15s %-20s %-8s %-4.3s %-4.3s %s&amp;quot;, cl_on_server, &amp;quot;nick&amp;quot;, &amp;quot;ip&amp;quot;, &amp;quot;userid&amp;quot;, lImm, lRes, lAccess)&lt;br /&gt;
: а также&lt;br /&gt;
 get_user_authid(players[a], authid, 31)&lt;br /&gt;
: на&lt;br /&gt;
 get_user_ip(players[a], authid, 31, 1)&lt;br /&gt;
: Сохраните файл и [[#Как компилировать плагины?|перекомпилируйте]] плагин.&lt;br /&gt;
&lt;br /&gt;
=== А как дать всем доступ к команде amx_who? ===&lt;br /&gt;
: По умолчанию, команда доступна только игрокам с правами '''y''' (т.е. это признак админа). Чтобы разрешить пользоваться ею всем игрокам, надо открыть файл ''admincmd.sma'', и в строке&lt;br /&gt;
 register_concmd(&amp;quot;amx_who&amp;quot;, &amp;quot;cmdWho&amp;quot;, ADMIN_ADMIN, &amp;quot;- displays who is on server&amp;quot;)&lt;br /&gt;
: заменить ''ADMIN_ADMIN'' на ''ADMIN_ALL'' и [[#Как компилировать плагины?|перекомпилировать]] плагин.&lt;br /&gt;
: В AMX 1.8.X и выше доступны стандартные средства переопределения прав доступа к командам без исправления самих плагинов (''TODO: ссылка?'').&lt;br /&gt;
&lt;br /&gt;
=== Как очистить статистику StatsX? ===&lt;br /&gt;
: Удалите файл ''$AMXMODX/data/csstats.dat''.&lt;br /&gt;
&lt;br /&gt;
= Вопросы по компилированию =&lt;br /&gt;
=== Что такое компиляция? ===&lt;br /&gt;
: Это процесс, который переводит текстовые файлы (*.sma), содержащие исходный код (т.е. инструкции для AMX Mod X, который их исполняет), в формат, более пригодный для исполнения.  За счет этого скорость выполнения плагинов возрастает многократно, упрощается разработка &amp;quot;движка&amp;quot;, который эти плагины исполняет, а также в некотором смысле защищается авторский код. Почему в &amp;quot;некотором смысле&amp;quot;? Потому что все AMX Mod X плагины должны публиковаться под лицензией GNU General Public License. В случае публикации плагина лицензия обязывает также публиковать и его исходный код. Откомпилированные плагины имеют расширение .amxx. Именно файлы этого типа, а не .sma, должны указываться в файле plugins.ini для последующей корректной загрузки плагина.&lt;br /&gt;
&lt;br /&gt;
=== Как компилировать плагины? ===&lt;br /&gt;
: Базовую информацию вы можете найти на [[Ru Compiling Plugins (AMX Mod X)|этой]] странице.&lt;br /&gt;
&lt;br /&gt;
=== Как упростить процесс компилирования? ===&lt;br /&gt;
: Можно написать стороннюю программу или скрипт, например такой, как пакетный batch файл. Например, создайте файл make.bat со следующим содержимым:&lt;br /&gt;
 @amxxpc.exe %1 -i.\include -o.\compiled\%1&lt;br /&gt;
: Чтобы с помощью него откомпилировать плагин, необходимо выполнить следующую команду:&lt;br /&gt;
 make.bat my_plugin.sma&lt;br /&gt;
: В итоге откомпилированный файл будет помещен в каталог ''compiled'' текущей директории. Если его там нет, значит в процессе компилирования возникли фатальные ошибки, которые выводятся на экран.&lt;br /&gt;
: Если вам необходимо (например, в случае ошибок) отправить кому-нибудь результат компиляции, можете перенаправить вывод информации о процессе компилирования в файл, например таким образом:&lt;br /&gt;
 make.bat my_plugin.sma &amp;gt; my_plugin.log&lt;br /&gt;
&lt;br /&gt;
=== Компилятор выводит &amp;quot;max. usage is unknown, due to recursion&amp;quot; ===&lt;br /&gt;
: Ничего страшного - просто компилятор не может вычислить предполагаемый объем памяти, используемый вашим плагином.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Вопросы по скриптингу =&lt;br /&gt;
=== С чего начать? ===&lt;br /&gt;
: С со статьи [[Ru Fundamental Basics of AMX Mod X Scripting|Фундаментальные основы AMX Mod X скриптинга]].&lt;br /&gt;
&lt;br /&gt;
=== А стоит ли вообще начинать? ===&lt;br /&gt;
: В зависимости от того, какую цель вы преследуете, а также от вашего желания и потенциала. Знание английского языка (чтение) будет огромным плюсом во время обучения, иначе постигать азы будет очень сложно. CS является закрытым проектом без исходных кодов, поэтому могие новые (неизученные) элементы приходится постигать через проведение экспериментов.&lt;/div&gt;</summary>
		<author><name>VEN</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.alliedmods.net/index.php?title=Ru_AMX_Mod_X_FAQ&amp;diff=6362</id>
		<title>Ru AMX Mod X FAQ</title>
		<link rel="alternate" type="text/html" href="https://wiki.alliedmods.net/index.php?title=Ru_AMX_Mod_X_FAQ&amp;diff=6362"/>
		<updated>2008-10-19T09:12:16Z</updated>

		<summary type="html">&lt;p&gt;VEN: /* Как узнать, в каком плагине зарегистрирована та или иная переменная? */ amxx cmds случай + примечание по поиску / search note&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Russian]]&lt;br /&gt;
[[Category:Ru:AMX Mod X]]&lt;br /&gt;
&lt;br /&gt;
= Общие положения, термины, сокращения и условные обозначения =&lt;br /&gt;
:* HL или HL1 - аббревиатура от [[Half-Life 1|Half-Life]] (часть первая);&lt;br /&gt;
:* Mod - &amp;quot;мод&amp;quot;, модификация - дополнение к чему-либо, как правило, расширяющее/изменяющее функциональность;&lt;br /&gt;
:* HL Engine - &amp;quot;движок&amp;quot; Half-Life - &amp;quot;центральный модуль&amp;quot;, осуществляющий выполнение базовых &amp;quot;общемодовых&amp;quot; задач;&lt;br /&gt;
:* MM - [[Metamod]] - сторонний мод особого типа, является промежуточным звеном в системе &amp;quot;HL движок - HL мод&amp;quot;;&lt;br /&gt;
:* AMXX - аббревиатура от [[AMX Mod X]] - Metamod plugin (&amp;quot;плагин&amp;quot;), своего рода Metamod мод;&lt;br /&gt;
:* Map - &amp;quot;карта&amp;quot; - определяет внешний вид территории, на которой происходит игровое действие;&lt;br /&gt;
:* World - &amp;quot;мир&amp;quot; - все пространство, которое занимает карта, а также область, находящаяся за картой;&lt;br /&gt;
:* Spawn - &amp;quot;спавн&amp;quot; - момент, когда игрок появляется в мире, обретая физическое тело;&lt;br /&gt;
:* SinglePlayer - &amp;quot;синглплеер&amp;quot; - игровой тип, когда одновременно в игре может участвовать только один игрок;&lt;br /&gt;
:* MultiPlayer - &amp;quot;мультиплеер&amp;quot; - игровой тип, когда одновременно в игре может участвовать несколько игроков;&lt;br /&gt;
:* DM - аббревиатура от Death Match - динамичный мультиплеер тип игры, когда после &amp;quot;смерти&amp;quot; игрока происходит его скорый спавн (&amp;quot;респавн&amp;quot;);&lt;br /&gt;
:* HLDM - аббревиатура от Half-Life Death Match - оригинальный HL мод DM типа;&lt;br /&gt;
:* CS - аббревиатура от [[Counter-Stirke]] - наиболее популярный HL мод;&lt;br /&gt;
:* VALVE - [[VALVe Software|корпорация, разработчик HL и CS]], также редко используется как синоним HLDM, подчеркивая название директории мода (&amp;quot;valve&amp;quot;);&lt;br /&gt;
:* $MODDIR - способ условного обозначения корневой директории мода, например: ''cstrike'', ''valve'';&lt;br /&gt;
:* $MMDIR - способ условного обозначения относительного пути (относительно пути к $MODDIR) к корневой директории Metamod, по умолчанию: ''addons/metamod'';&lt;br /&gt;
:* $AMXMODX - способ условного обозначения относительного пути (относительно пути к $MODDIR) к корневой директории AMX Mod X, по умолчанию: ''addons/amxmodx''.&lt;br /&gt;
&lt;br /&gt;
= Общие вопросы =&lt;br /&gt;
=== Где скачать последнюю версию AMX Mod X? ===&lt;br /&gt;
: Последнюю версию всегда можно скачать на официальном сайте AMX Mod X в [http://www.amxmodx.org/downloads.php разделе закачек].&lt;br /&gt;
&lt;br /&gt;
=== А что именно качать? ===&lt;br /&gt;
: Качайте либо инсталлятор (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 мода.&lt;br /&gt;
&lt;br /&gt;
=== Чем отличается AMX Mod X от AMX Mod? ===&lt;br /&gt;
: Буквой X ;). На самом деле отличий очень много:&lt;br /&gt;
:* AMXX поддерживается до сих пор, а поддержка AMX Mod была завершена примерно в 2006 году;&lt;br /&gt;
:* функциональность AMXX значительно превосходит AMX Mod, это также касается и расширенной поддержки других модов, в то время как AMX Mod поддерживал только HLDM, CS и CZ;&lt;br /&gt;
:* AMXX принято считать быстрее AMX Mod;&lt;br /&gt;
:* плагины AMXX не совместимы с плагинами AMX Mod;&lt;br /&gt;
:* плагины AMX Mod 0.9.9 совместимы с AMXX, если последний работает в режиме совместимости(?);&lt;br /&gt;
:* плагины для AMX Mod имеют расширение .amx, а плагины AMXX - .amxx;&lt;br /&gt;
:* ''TODO: дополнить список''&lt;br /&gt;
&lt;br /&gt;
=== Как запустить два различных сервера AMX Mod X? ===&lt;br /&gt;
: К примеру, вы хотите запустить два различных сервера из одной ''cstrike'' директории на базе различных AMX Mod X/Metamod плагинов, настроек и прочего. Это решаемо. Один из примеров для win32 системы приведен ниже:&lt;br /&gt;
:* Создать отдельную AMX Mod X директорию с необходимыми файлами, например: ''addons/amxmodx2''&lt;br /&gt;
:* В ''addons/amxmodx2/configs/core.ini'' везде изменить &amp;quot;amxmodx&amp;quot; на &amp;quot;amxmodx2&amp;quot;&lt;br /&gt;
:* Создать отдельный файл загрузки Metamod плагинов, например: ''addons/metamod/plugins2.ini''&lt;br /&gt;
:* В созданный ''plugins2.ini'' файл вписать: ''win32 addons\amxmodx2\dlls\amxmodx_mm.dll''&lt;br /&gt;
:* Создать в директории ''cstrike'' файл, например, с именем ''amxmodx2.cfg'', его содержимое должно быть следующим:&lt;br /&gt;
&amp;lt;pre&amp;gt;localinfo mm_pluginsfile &amp;quot;addons/metamod/plugins2.ini&amp;quot;&lt;br /&gt;
localinfo amxx_basedir &amp;quot;addons/amxmodx2&amp;quot;&lt;br /&gt;
localinfo amxx_cfg &amp;quot;addons/amxmodx2/configs/core.ini&amp;quot;&lt;br /&gt;
localinfo amxx_configsdir &amp;quot;addons/amxmodx2/configs&amp;quot;&lt;br /&gt;
localinfo amxx_customdir &amp;quot;addons/amxmodx2/custom&amp;quot;&lt;br /&gt;
localinfo amxx_datadir &amp;quot;addons/amxmodx2/data&amp;quot;&lt;br /&gt;
localinfo amxx_logdir &amp;quot;addons/amxmodx2/logs&amp;quot;&lt;br /&gt;
localinfo amxx_logs &amp;quot;addons/amxmodx2/logs&amp;quot;&lt;br /&gt;
localinfo amxx_modules &amp;quot;addons/amxmodx2/configs/modules.ini&amp;quot;&lt;br /&gt;
localinfo amxx_modulesdir &amp;quot;addons/amxmodx2/modules&amp;quot;&lt;br /&gt;
localinfo amxx_plugins &amp;quot;addons/amxmodx2/configs/plugins.ini&amp;quot;&lt;br /&gt;
localinfo amxx_pluginsdir &amp;quot;addons/amxmodx2/plugins&amp;quot;&lt;br /&gt;
localinfo amxx_vault &amp;quot;addons/amxmodx2/data/vault.ini&amp;quot;&lt;br /&gt;
localinfo csstats &amp;quot;addons/amxmodx2/data/csstats.dat&amp;quot;&lt;br /&gt;
localinfo csstats_score &amp;quot;addons/amxmodx2/data/csstats.amxx&amp;quot;&lt;br /&gt;
localinfo amx_basedir &amp;quot;addons/amxmodx2&amp;quot;&lt;br /&gt;
localinfo amx_configdir &amp;quot;addons/amxmodx2/configs&amp;quot;&lt;br /&gt;
localinfo amx_langdir &amp;quot;addons/amxmodx2/data/amxmod-lang&amp;quot;&lt;br /&gt;
localinfo amx_logdir &amp;quot;addons/amxmodx2/logs&amp;quot;&lt;br /&gt;
localinfo amx_modulesdir &amp;quot;addons/amxmodx2/modules&amp;quot;&lt;br /&gt;
localinfo amx_pluginsdir &amp;quot;addons/amxmodx2/plugins&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
:* Теперь второй сервер необходимо будет запускать с параметром командной строки: ''+exec amxmodx2.cfg''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Вопросы по плагинам =&lt;br /&gt;
== Общие вопросы ==&lt;br /&gt;
=== Где и как искать плагины? ===&lt;br /&gt;
: Предварительно отметим, что условно AMX Mod X плагины можно разделить на следующие категории: стандартные, официально одобренные, официально отклоненные и неофициальные. Одобренные плагины можно искать [http://www.amxmodx.org/compiler.php здесь], или, используя [http://forums.alliedmods.net/search.php поисковую систему официального форума] (примечание: было замечено, что в последнее время эта система функционирует не совсем корректно). В поле '''Search in Forum(s)''' отметьте '''Approved Plugins''', также, зажав клавишу Ctrl, можно отметить интересующие вас секции из подраздела '''High-Traffic Plugins'''. Чтобы искать неофициальные плагины, следует также воспользоваться [http://forums.alliedmods.net/search.php поисковой системой официального форума], правда, в поле '''Search in Forum(s)''' необходимо выбрать '''Unapproved/Old Plugins'''. Если для вас не имеет значения статус плагина, и вы склонны к экспериментам, осуществляйте поиск по категории '''Plugins''', которая включает в себя одобренные, отклоненные, недавно опубликованные, вполне возможно, &amp;quot;сырые&amp;quot; плагины, а также темы-запросы, в которых могут быть &amp;quot;быстро написанные&amp;quot; плагины.  Особенность поиска на официальных форумах еще состоит в том, что при вводе слова система ищет именно слова (без учета регистра), т.е. фрагменты, разделенные слева и справа пробелами. Т.о., к примеру, набрав для поиска слово ''FCOS'' вы не найдете нужного вам плагина, хотя есть тема, в которой присутствует текст ''[fcos]''. Для этого надо использовать в поиске строку ''*FCOS*''. Немного поработав с поисковой формой форума, вы легко освоите эту систему. Единственное возможное для некоторых неудобство - практически все описания плагинов написаны на английcком языке. Неофициальные плагины также можно попробовать искать с помощью общеизвестных поисковых систем: Google, Yandex, Rambler и др.&lt;br /&gt;
&lt;br /&gt;
=== Сколько плагинов сейчас выпущено под AMX Mod X? ===&lt;br /&gt;
: &amp;quot;Тонны&amp;quot; плагинов. Но, к сожалению, качеством и надежностью б'''о'''льшая половина из них не белещет. К тому же некоторые плагины, &amp;quot;заброшены&amp;quot; авторами и не обновляются, что приводит даже к несовместимости с новыми версиями AMX Mod X.&lt;br /&gt;
&lt;br /&gt;
=== Как устанавливать плагины? ===&lt;br /&gt;
: Обратитесь к [[Ru Configuring AMX Mod X|этой]] статье.&lt;br /&gt;
&lt;br /&gt;
=== Как удалять плагины? ===&lt;br /&gt;
: Обратитесь к [[Ru Configuring AMX Mod X|этой]] статье.&lt;br /&gt;
&lt;br /&gt;
=== Что такое стандартные плагины? ===&lt;br /&gt;
: Это плагины, которые входят в стандартную поставку AMX Mod X, т.е. те, которые находятся непосредственно после установки AMX Mod X в папках: $AMXMODX\plugins (.amxx - откомпилированые плагины) и $AMXMODX\scripting (.sma - исходные коды плагинов).&lt;br /&gt;
&lt;br /&gt;
=== Как узнать, в каком плагине зарегистрирована та или иная переменная(команда)? ===&lt;br /&gt;
: В серверной консоли наберите команду ''amxx cvars'' ( ''amxx cmds'' ). Выделите текст, скопируйте в файл, там сделайте поиск искомой переменной (команды). В правой колонке будет стоять имя плагина, в котором она и зарегистрирована. Примечание: если сервер запущен с параметром -console, то поиск можно осуществлять непосредственно в окне консоле посредством дотупа к его диалоговому окну через окнное меню.&lt;br /&gt;
&lt;br /&gt;
=== Я перевел на русский языковой файл плагина, а текст в игре отображается криво ===&lt;br /&gt;
: Скорее всего вы не сохранили файл в UTF-8 кодировке. Даже если вы это сделали, проверьте что в начале файле нет маркера кодировки, потому что некоторые редакторы его вставляют без предупреждения. Для этого надо использовать редактор или режим, который НЕ понимает UTF-8, потому что unicode редактор не отображает такой маркер.&lt;br /&gt;
: Имейте в виду, что в консоли сервера, работающего в режиме ''-console'', переведенный текст не будет отображаться по-русски.&lt;br /&gt;
&lt;br /&gt;
=== Как называется статистика, встроенная в AMXX? ===&lt;br /&gt;
: Называется &amp;quot;StatsX&amp;quot;, реализована в виде плагинов ''statsx.amxx'', ''statscfg.amxx'', ''stats_logging.amxx'', а также в модуле ''csx''. О последнем многие забывают, полагая, что можно просто изменить алгоритм учета статистики на уровне плагинов AMXX.&lt;br /&gt;
&lt;br /&gt;
== Вопросы по стандартным плагинам ==&lt;br /&gt;
=== Как увеличить число карт в стандартном голосовании? ===&lt;br /&gt;
: Откройте файл $AMXMODX\scripting\mapchooser.sma, замените число 3 в строке&lt;br /&gt;
 #define SELECTMAPS  3&lt;br /&gt;
: на требуемое, затем [[#Как компилировать плагины?|откомпилируйте]] плагин и замените исходный.&lt;br /&gt;
&lt;br /&gt;
=== Как увеличить число администраторов? ===&lt;br /&gt;
: В файле ''admin.sma'' замените число 64 на требуемое значение в строке:&lt;br /&gt;
 #define MAX_ADMINS 64&lt;br /&gt;
: Не ставьте слишком большие значения. Не забудьте [[#Как компилировать плагины?|перекомпилировать]] плагин и заменить исходный новым.&lt;br /&gt;
: В AMXX 1.8.X и выше такая проблема не стоит, т.к. там реализован динамический список админов.&lt;br /&gt;
&lt;br /&gt;
=== Почему клиент не получает права админа по IP? ===&lt;br /&gt;
:Данная проблема возникает на публичных Non-Steam (патченных) интернет-серверах c sv_lan = 0 при подключении Steam/Non-Steam клиентов.&lt;br /&gt;
: Сначала убедитесь, что у вас нединамический внешний IP. Динамический IP означает, что каждый раз, подключась к Интернету, вам назначается новый внешний IP (обычно из какого-то фиксированного диапазона). Для этого обратитесь к вашему провайдеру. Далее необходимо сверить, правильно ли вы прописали доступ в файле users.ini. Для этого проверьте свой внешний IP на страничке [http://myip.ru/ myip.ru]. Запомните его. Откройте файл user.ini и убедитесь что там есть такая запись:&lt;br /&gt;
 &amp;quot;&amp;lt;ваш_ip&amp;gt;&amp;quot; &amp;quot;&amp;lt;ваш_пароль&amp;gt;&amp;quot; &amp;quot;&amp;lt;ваши_флаги&amp;gt;&amp;quot; &amp;quot;d&amp;lt;другие_модификаторы&amp;gt;&amp;quot;&lt;br /&gt;
:В поле ''&amp;lt;ваш_ip&amp;gt;'' должен быть вбит запомненный ранее IP. Обратите внимание на модификатор '''d'''. Без него проверка на IP проводиться НЕ будет. При указании IP старайтесь не использовать номер порта (знак двоеточия и то, что справа от него).&lt;br /&gt;
: Если все правильно, а вы все равно не становитесь администратором на сервере, то, скорее всего, проблема в том, что вы не прошли авторизацию на сервере. Для этого выполните команду ''users'' или ''stat'' в консоли сервера и обратите внимание на значение в колонке ''userid''. Если напротив потенциального админа стоит '''STEAM_ID_PENDING''', то это означает, что сервер криво заломан, и он не авторизовал данного игрока. В свою очередь это значит, что функция ''client_authorized(id)'' не была вызвана для всех(!) активных AMXX плагинов. Если открыть файл ''admin.sma'', то можно увидеть следующее:&lt;br /&gt;
 public client_authorized(id)&lt;br /&gt;
   return get_cvar_num(&amp;quot;amx_mode&amp;quot;) ? accessUser(id) : PLUGIN_CONTINUE&lt;br /&gt;
: Это и есть проверка клиента на админа. Чтобы эта функция вызывалась всегда, ''client_authorized'' надо переименовать в ''client_putinserver'', а существующую функцию ''client_putinserver'' либо удалить, либо [[Ru_Fundamental_Basics_of_AMX_Mod_X_Scripting#Комментарии|закомментировать]].&lt;br /&gt;
&lt;br /&gt;
=== Как заставить команду amx_who выводить IP вместо ID? ===&lt;br /&gt;
: В файле ''admincmd.sma'' в указанном ниже месте &lt;br /&gt;
 public cmdWho(id, level, cid)&lt;br /&gt;
 {&lt;br /&gt;
  ...&lt;br /&gt;
  console_print(id, &amp;quot;^n%s:^n #  %-16.15s %-20s %-8s %-4.3s %-4.3s %s&amp;quot;, cl_on_server, &amp;quot;nick&amp;quot;, &amp;quot;authid&amp;quot;, &amp;quot;userid&amp;quot;, lImm, lRes, lAccess) &lt;br /&gt;
  for (new a = 0; a &amp;lt; inum; ++a)&lt;br /&gt;
  {&lt;br /&gt;
   get_user_authid(players[a], authid, 31)&lt;br /&gt;
   ...&lt;br /&gt;
  }&lt;br /&gt;
  ...&lt;br /&gt;
 }&lt;br /&gt;
:замените &lt;br /&gt;
 console_print(id, &amp;quot;^n%s:^n #  %-16.15s %-20s %-8s %-4.3s %-4.3s %s&amp;quot;, cl_on_server, &amp;quot;nick&amp;quot;, &amp;quot;authid&amp;quot;, &amp;quot;userid&amp;quot;, lImm, lRes, lAccess)&lt;br /&gt;
: на&lt;br /&gt;
 console_print(id, &amp;quot;^n%s:^n #  %-16.15s %-20s %-8s %-4.3s %-4.3s %s&amp;quot;, cl_on_server, &amp;quot;nick&amp;quot;, &amp;quot;ip&amp;quot;, &amp;quot;userid&amp;quot;, lImm, lRes, lAccess)&lt;br /&gt;
: а также&lt;br /&gt;
 get_user_authid(players[a], authid, 31)&lt;br /&gt;
: на&lt;br /&gt;
 get_user_ip(players[a], authid, 31, 1)&lt;br /&gt;
: Сохраните файл и [[#Как компилировать плагины?|перекомпилируйте]] плагин.&lt;br /&gt;
&lt;br /&gt;
=== А как дать всем доступ к команде amx_who? ===&lt;br /&gt;
: По умолчанию, команда доступна только игрокам с правами '''y''' (т.е. это признак админа). Чтобы разрешить пользоваться ею всем игрокам, надо открыть файл ''admincmd.sma'', и в строке&lt;br /&gt;
 register_concmd(&amp;quot;amx_who&amp;quot;, &amp;quot;cmdWho&amp;quot;, ADMIN_ADMIN, &amp;quot;- displays who is on server&amp;quot;)&lt;br /&gt;
: заменить ''ADMIN_ADMIN'' на ''ADMIN_ALL'' и [[#Как компилировать плагины?|перекомпилировать]] плагин.&lt;br /&gt;
: В AMX 1.8.X и выше доступны стандартные средства переопределения прав доступа к командам без исправления самих плагинов (''TODO: ссылка?'').&lt;br /&gt;
&lt;br /&gt;
=== Как очистить статистику StatsX? ===&lt;br /&gt;
: Удалите файл ''$AMXMODX/data/csstats.dat''.&lt;br /&gt;
&lt;br /&gt;
= Вопросы по компилированию =&lt;br /&gt;
=== Что такое компиляция? ===&lt;br /&gt;
: Это процесс, который переводит текстовые файлы (*.sma), содержащие исходный код (т.е. инструкции для AMX Mod X, который их исполняет), в формат, более пригодный для исполнения.  За счет этого скорость выполнения плагинов возрастает многократно, упрощается разработка &amp;quot;движка&amp;quot;, который эти плагины исполняет, а также в некотором смысле защищается авторский код. Почему в &amp;quot;некотором смысле&amp;quot;? Потому что все AMX Mod X плагины должны публиковаться под лицензией GNU General Public License. В случае публикации плагина лицензия обязывает также публиковать и его исходный код. Откомпилированные плагины имеют расширение .amxx. Именно файлы этого типа, а не .sma, должны указываться в файле plugins.ini для последующей корректной загрузки плагина.&lt;br /&gt;
&lt;br /&gt;
=== Как компилировать плагины? ===&lt;br /&gt;
: Базовую информацию вы можете найти на [[Ru Compiling Plugins (AMX Mod X)|этой]] странице.&lt;br /&gt;
&lt;br /&gt;
=== Как упростить процесс компилирования? ===&lt;br /&gt;
: Можно написать стороннюю программу или скрипт, например такой, как пакетный batch файл. Например, создайте файл make.bat со следующим содержимым:&lt;br /&gt;
 @amxxpc.exe %1 -i.\include -o.\compiled\%1&lt;br /&gt;
: Чтобы с помощью него откомпилировать плагин, необходимо выполнить следующую команду:&lt;br /&gt;
 make.bat my_plugin.sma&lt;br /&gt;
: В итоге откомпилированный файл будет помещен в каталог ''compiled'' текущей директории. Если его там нет, значит в процессе компилирования возникли фатальные ошибки, которые выводятся на экран.&lt;br /&gt;
: Если вам необходимо (например, в случае ошибок) отправить кому-нибудь результат компиляции, можете перенаправить вывод информации о процессе компилирования в файл, например таким образом:&lt;br /&gt;
 make.bat my_plugin.sma &amp;gt; my_plugin.log&lt;br /&gt;
&lt;br /&gt;
=== Компилятор выводит &amp;quot;max. usage is unknown, due to recursion&amp;quot; ===&lt;br /&gt;
: Ничего страшного - просто компилятор не может вычислить предполагаемый объем памяти, используемый вашим плагином.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Вопросы по скриптингу =&lt;br /&gt;
=== С чего начать? ===&lt;br /&gt;
: С со статьи [[Ru Fundamental Basics of AMX Mod X Scripting|Фундаментальные основы AMX Mod X скриптинга]].&lt;br /&gt;
&lt;br /&gt;
=== А стоит ли вообще начинать? ===&lt;br /&gt;
: В зависимости от того, какую цель вы преследуете, а также от вашего желания и потенциала. Знание английского языка (чтение) будет огромным плюсом во время обучения, иначе постигать азы будет очень сложно. CS является закрытым проектом без исходных кодов, поэтому могие новые (неизученные) элементы приходится постигать через проведение экспериментов.&lt;/div&gt;</summary>
		<author><name>VEN</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.alliedmods.net/index.php?title=Ru_AMX_Mod_X_FAQ&amp;diff=6361</id>
		<title>Ru AMX Mod X FAQ</title>
		<link rel="alternate" type="text/html" href="https://wiki.alliedmods.net/index.php?title=Ru_AMX_Mod_X_FAQ&amp;diff=6361"/>
		<updated>2008-10-19T09:06:47Z</updated>

		<summary type="html">&lt;p&gt;VEN: /* Что такое стандартные плагины? */ более четкое определение / better definition&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Russian]]&lt;br /&gt;
[[Category:Ru:AMX Mod X]]&lt;br /&gt;
&lt;br /&gt;
= Общие положения, термины, сокращения и условные обозначения =&lt;br /&gt;
:* HL или HL1 - аббревиатура от [[Half-Life 1|Half-Life]] (часть первая);&lt;br /&gt;
:* Mod - &amp;quot;мод&amp;quot;, модификация - дополнение к чему-либо, как правило, расширяющее/изменяющее функциональность;&lt;br /&gt;
:* HL Engine - &amp;quot;движок&amp;quot; Half-Life - &amp;quot;центральный модуль&amp;quot;, осуществляющий выполнение базовых &amp;quot;общемодовых&amp;quot; задач;&lt;br /&gt;
:* MM - [[Metamod]] - сторонний мод особого типа, является промежуточным звеном в системе &amp;quot;HL движок - HL мод&amp;quot;;&lt;br /&gt;
:* AMXX - аббревиатура от [[AMX Mod X]] - Metamod plugin (&amp;quot;плагин&amp;quot;), своего рода Metamod мод;&lt;br /&gt;
:* Map - &amp;quot;карта&amp;quot; - определяет внешний вид территории, на которой происходит игровое действие;&lt;br /&gt;
:* World - &amp;quot;мир&amp;quot; - все пространство, которое занимает карта, а также область, находящаяся за картой;&lt;br /&gt;
:* Spawn - &amp;quot;спавн&amp;quot; - момент, когда игрок появляется в мире, обретая физическое тело;&lt;br /&gt;
:* SinglePlayer - &amp;quot;синглплеер&amp;quot; - игровой тип, когда одновременно в игре может участвовать только один игрок;&lt;br /&gt;
:* MultiPlayer - &amp;quot;мультиплеер&amp;quot; - игровой тип, когда одновременно в игре может участвовать несколько игроков;&lt;br /&gt;
:* DM - аббревиатура от Death Match - динамичный мультиплеер тип игры, когда после &amp;quot;смерти&amp;quot; игрока происходит его скорый спавн (&amp;quot;респавн&amp;quot;);&lt;br /&gt;
:* HLDM - аббревиатура от Half-Life Death Match - оригинальный HL мод DM типа;&lt;br /&gt;
:* CS - аббревиатура от [[Counter-Stirke]] - наиболее популярный HL мод;&lt;br /&gt;
:* VALVE - [[VALVe Software|корпорация, разработчик HL и CS]], также редко используется как синоним HLDM, подчеркивая название директории мода (&amp;quot;valve&amp;quot;);&lt;br /&gt;
:* $MODDIR - способ условного обозначения корневой директории мода, например: ''cstrike'', ''valve'';&lt;br /&gt;
:* $MMDIR - способ условного обозначения относительного пути (относительно пути к $MODDIR) к корневой директории Metamod, по умолчанию: ''addons/metamod'';&lt;br /&gt;
:* $AMXMODX - способ условного обозначения относительного пути (относительно пути к $MODDIR) к корневой директории AMX Mod X, по умолчанию: ''addons/amxmodx''.&lt;br /&gt;
&lt;br /&gt;
= Общие вопросы =&lt;br /&gt;
=== Где скачать последнюю версию AMX Mod X? ===&lt;br /&gt;
: Последнюю версию всегда можно скачать на официальном сайте AMX Mod X в [http://www.amxmodx.org/downloads.php разделе закачек].&lt;br /&gt;
&lt;br /&gt;
=== А что именно качать? ===&lt;br /&gt;
: Качайте либо инсталлятор (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 мода.&lt;br /&gt;
&lt;br /&gt;
=== Чем отличается AMX Mod X от AMX Mod? ===&lt;br /&gt;
: Буквой X ;). На самом деле отличий очень много:&lt;br /&gt;
:* AMXX поддерживается до сих пор, а поддержка AMX Mod была завершена примерно в 2006 году;&lt;br /&gt;
:* функциональность AMXX значительно превосходит AMX Mod, это также касается и расширенной поддержки других модов, в то время как AMX Mod поддерживал только HLDM, CS и CZ;&lt;br /&gt;
:* AMXX принято считать быстрее AMX Mod;&lt;br /&gt;
:* плагины AMXX не совместимы с плагинами AMX Mod;&lt;br /&gt;
:* плагины AMX Mod 0.9.9 совместимы с AMXX, если последний работает в режиме совместимости(?);&lt;br /&gt;
:* плагины для AMX Mod имеют расширение .amx, а плагины AMXX - .amxx;&lt;br /&gt;
:* ''TODO: дополнить список''&lt;br /&gt;
&lt;br /&gt;
=== Как запустить два различных сервера AMX Mod X? ===&lt;br /&gt;
: К примеру, вы хотите запустить два различных сервера из одной ''cstrike'' директории на базе различных AMX Mod X/Metamod плагинов, настроек и прочего. Это решаемо. Один из примеров для win32 системы приведен ниже:&lt;br /&gt;
:* Создать отдельную AMX Mod X директорию с необходимыми файлами, например: ''addons/amxmodx2''&lt;br /&gt;
:* В ''addons/amxmodx2/configs/core.ini'' везде изменить &amp;quot;amxmodx&amp;quot; на &amp;quot;amxmodx2&amp;quot;&lt;br /&gt;
:* Создать отдельный файл загрузки Metamod плагинов, например: ''addons/metamod/plugins2.ini''&lt;br /&gt;
:* В созданный ''plugins2.ini'' файл вписать: ''win32 addons\amxmodx2\dlls\amxmodx_mm.dll''&lt;br /&gt;
:* Создать в директории ''cstrike'' файл, например, с именем ''amxmodx2.cfg'', его содержимое должно быть следующим:&lt;br /&gt;
&amp;lt;pre&amp;gt;localinfo mm_pluginsfile &amp;quot;addons/metamod/plugins2.ini&amp;quot;&lt;br /&gt;
localinfo amxx_basedir &amp;quot;addons/amxmodx2&amp;quot;&lt;br /&gt;
localinfo amxx_cfg &amp;quot;addons/amxmodx2/configs/core.ini&amp;quot;&lt;br /&gt;
localinfo amxx_configsdir &amp;quot;addons/amxmodx2/configs&amp;quot;&lt;br /&gt;
localinfo amxx_customdir &amp;quot;addons/amxmodx2/custom&amp;quot;&lt;br /&gt;
localinfo amxx_datadir &amp;quot;addons/amxmodx2/data&amp;quot;&lt;br /&gt;
localinfo amxx_logdir &amp;quot;addons/amxmodx2/logs&amp;quot;&lt;br /&gt;
localinfo amxx_logs &amp;quot;addons/amxmodx2/logs&amp;quot;&lt;br /&gt;
localinfo amxx_modules &amp;quot;addons/amxmodx2/configs/modules.ini&amp;quot;&lt;br /&gt;
localinfo amxx_modulesdir &amp;quot;addons/amxmodx2/modules&amp;quot;&lt;br /&gt;
localinfo amxx_plugins &amp;quot;addons/amxmodx2/configs/plugins.ini&amp;quot;&lt;br /&gt;
localinfo amxx_pluginsdir &amp;quot;addons/amxmodx2/plugins&amp;quot;&lt;br /&gt;
localinfo amxx_vault &amp;quot;addons/amxmodx2/data/vault.ini&amp;quot;&lt;br /&gt;
localinfo csstats &amp;quot;addons/amxmodx2/data/csstats.dat&amp;quot;&lt;br /&gt;
localinfo csstats_score &amp;quot;addons/amxmodx2/data/csstats.amxx&amp;quot;&lt;br /&gt;
localinfo amx_basedir &amp;quot;addons/amxmodx2&amp;quot;&lt;br /&gt;
localinfo amx_configdir &amp;quot;addons/amxmodx2/configs&amp;quot;&lt;br /&gt;
localinfo amx_langdir &amp;quot;addons/amxmodx2/data/amxmod-lang&amp;quot;&lt;br /&gt;
localinfo amx_logdir &amp;quot;addons/amxmodx2/logs&amp;quot;&lt;br /&gt;
localinfo amx_modulesdir &amp;quot;addons/amxmodx2/modules&amp;quot;&lt;br /&gt;
localinfo amx_pluginsdir &amp;quot;addons/amxmodx2/plugins&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
:* Теперь второй сервер необходимо будет запускать с параметром командной строки: ''+exec amxmodx2.cfg''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Вопросы по плагинам =&lt;br /&gt;
== Общие вопросы ==&lt;br /&gt;
=== Где и как искать плагины? ===&lt;br /&gt;
: Предварительно отметим, что условно AMX Mod X плагины можно разделить на следующие категории: стандартные, официально одобренные, официально отклоненные и неофициальные. Одобренные плагины можно искать [http://www.amxmodx.org/compiler.php здесь], или, используя [http://forums.alliedmods.net/search.php поисковую систему официального форума] (примечание: было замечено, что в последнее время эта система функционирует не совсем корректно). В поле '''Search in Forum(s)''' отметьте '''Approved Plugins''', также, зажав клавишу Ctrl, можно отметить интересующие вас секции из подраздела '''High-Traffic Plugins'''. Чтобы искать неофициальные плагины, следует также воспользоваться [http://forums.alliedmods.net/search.php поисковой системой официального форума], правда, в поле '''Search in Forum(s)''' необходимо выбрать '''Unapproved/Old Plugins'''. Если для вас не имеет значения статус плагина, и вы склонны к экспериментам, осуществляйте поиск по категории '''Plugins''', которая включает в себя одобренные, отклоненные, недавно опубликованные, вполне возможно, &amp;quot;сырые&amp;quot; плагины, а также темы-запросы, в которых могут быть &amp;quot;быстро написанные&amp;quot; плагины.  Особенность поиска на официальных форумах еще состоит в том, что при вводе слова система ищет именно слова (без учета регистра), т.е. фрагменты, разделенные слева и справа пробелами. Т.о., к примеру, набрав для поиска слово ''FCOS'' вы не найдете нужного вам плагина, хотя есть тема, в которой присутствует текст ''[fcos]''. Для этого надо использовать в поиске строку ''*FCOS*''. Немного поработав с поисковой формой форума, вы легко освоите эту систему. Единственное возможное для некоторых неудобство - практически все описания плагинов написаны на английcком языке. Неофициальные плагины также можно попробовать искать с помощью общеизвестных поисковых систем: Google, Yandex, Rambler и др.&lt;br /&gt;
&lt;br /&gt;
=== Сколько плагинов сейчас выпущено под AMX Mod X? ===&lt;br /&gt;
: &amp;quot;Тонны&amp;quot; плагинов. Но, к сожалению, качеством и надежностью б'''о'''льшая половина из них не белещет. К тому же некоторые плагины, &amp;quot;заброшены&amp;quot; авторами и не обновляются, что приводит даже к несовместимости с новыми версиями AMX Mod X.&lt;br /&gt;
&lt;br /&gt;
=== Как устанавливать плагины? ===&lt;br /&gt;
: Обратитесь к [[Ru Configuring AMX Mod X|этой]] статье.&lt;br /&gt;
&lt;br /&gt;
=== Как удалять плагины? ===&lt;br /&gt;
: Обратитесь к [[Ru Configuring AMX Mod X|этой]] статье.&lt;br /&gt;
&lt;br /&gt;
=== Что такое стандартные плагины? ===&lt;br /&gt;
: Это плагины, которые входят в стандартную поставку AMX Mod X, т.е. те, которые находятся непосредственно после установки AMX Mod X в папках: $AMXMODX\plugins (.amxx - откомпилированые плагины) и $AMXMODX\scripting (.sma - исходные коды плагинов).&lt;br /&gt;
&lt;br /&gt;
=== Как узнать, в каком плагине зарегистрирована та или иная переменная? ===&lt;br /&gt;
: В серверной консоли наберите команду ''amxx cvars''. Выделите текст, скопируйте в файл, там сделайте поиск искомой переменной. В правой колонке будет стоять имя плагина, в котором она и зарегистрирована.&lt;br /&gt;
&lt;br /&gt;
=== Я перевел на русский языковой файл плагина, а текст в игре отображается криво ===&lt;br /&gt;
: Скорее всего вы не сохранили файл в UTF-8 кодировке. Даже если вы это сделали, проверьте что в начале файле нет маркера кодировки, потому что некоторые редакторы его вставляют без предупреждения. Для этого надо использовать редактор или режим, который НЕ понимает UTF-8, потому что unicode редактор не отображает такой маркер.&lt;br /&gt;
: Имейте в виду, что в консоли сервера, работающего в режиме ''-console'', переведенный текст не будет отображаться по-русски.&lt;br /&gt;
&lt;br /&gt;
=== Как называется статистика, встроенная в AMXX? ===&lt;br /&gt;
: Называется &amp;quot;StatsX&amp;quot;, реализована в виде плагинов ''statsx.amxx'', ''statscfg.amxx'', ''stats_logging.amxx'', а также в модуле ''csx''. О последнем многие забывают, полагая, что можно просто изменить алгоритм учета статистики на уровне плагинов AMXX.&lt;br /&gt;
&lt;br /&gt;
== Вопросы по стандартным плагинам ==&lt;br /&gt;
=== Как увеличить число карт в стандартном голосовании? ===&lt;br /&gt;
: Откройте файл $AMXMODX\scripting\mapchooser.sma, замените число 3 в строке&lt;br /&gt;
 #define SELECTMAPS  3&lt;br /&gt;
: на требуемое, затем [[#Как компилировать плагины?|откомпилируйте]] плагин и замените исходный.&lt;br /&gt;
&lt;br /&gt;
=== Как увеличить число администраторов? ===&lt;br /&gt;
: В файле ''admin.sma'' замените число 64 на требуемое значение в строке:&lt;br /&gt;
 #define MAX_ADMINS 64&lt;br /&gt;
: Не ставьте слишком большие значения. Не забудьте [[#Как компилировать плагины?|перекомпилировать]] плагин и заменить исходный новым.&lt;br /&gt;
: В AMXX 1.8.X и выше такая проблема не стоит, т.к. там реализован динамический список админов.&lt;br /&gt;
&lt;br /&gt;
=== Почему клиент не получает права админа по IP? ===&lt;br /&gt;
:Данная проблема возникает на публичных Non-Steam (патченных) интернет-серверах c sv_lan = 0 при подключении Steam/Non-Steam клиентов.&lt;br /&gt;
: Сначала убедитесь, что у вас нединамический внешний IP. Динамический IP означает, что каждый раз, подключась к Интернету, вам назначается новый внешний IP (обычно из какого-то фиксированного диапазона). Для этого обратитесь к вашему провайдеру. Далее необходимо сверить, правильно ли вы прописали доступ в файле users.ini. Для этого проверьте свой внешний IP на страничке [http://myip.ru/ myip.ru]. Запомните его. Откройте файл user.ini и убедитесь что там есть такая запись:&lt;br /&gt;
 &amp;quot;&amp;lt;ваш_ip&amp;gt;&amp;quot; &amp;quot;&amp;lt;ваш_пароль&amp;gt;&amp;quot; &amp;quot;&amp;lt;ваши_флаги&amp;gt;&amp;quot; &amp;quot;d&amp;lt;другие_модификаторы&amp;gt;&amp;quot;&lt;br /&gt;
:В поле ''&amp;lt;ваш_ip&amp;gt;'' должен быть вбит запомненный ранее IP. Обратите внимание на модификатор '''d'''. Без него проверка на IP проводиться НЕ будет. При указании IP старайтесь не использовать номер порта (знак двоеточия и то, что справа от него).&lt;br /&gt;
: Если все правильно, а вы все равно не становитесь администратором на сервере, то, скорее всего, проблема в том, что вы не прошли авторизацию на сервере. Для этого выполните команду ''users'' или ''stat'' в консоли сервера и обратите внимание на значение в колонке ''userid''. Если напротив потенциального админа стоит '''STEAM_ID_PENDING''', то это означает, что сервер криво заломан, и он не авторизовал данного игрока. В свою очередь это значит, что функция ''client_authorized(id)'' не была вызвана для всех(!) активных AMXX плагинов. Если открыть файл ''admin.sma'', то можно увидеть следующее:&lt;br /&gt;
 public client_authorized(id)&lt;br /&gt;
   return get_cvar_num(&amp;quot;amx_mode&amp;quot;) ? accessUser(id) : PLUGIN_CONTINUE&lt;br /&gt;
: Это и есть проверка клиента на админа. Чтобы эта функция вызывалась всегда, ''client_authorized'' надо переименовать в ''client_putinserver'', а существующую функцию ''client_putinserver'' либо удалить, либо [[Ru_Fundamental_Basics_of_AMX_Mod_X_Scripting#Комментарии|закомментировать]].&lt;br /&gt;
&lt;br /&gt;
=== Как заставить команду amx_who выводить IP вместо ID? ===&lt;br /&gt;
: В файле ''admincmd.sma'' в указанном ниже месте &lt;br /&gt;
 public cmdWho(id, level, cid)&lt;br /&gt;
 {&lt;br /&gt;
  ...&lt;br /&gt;
  console_print(id, &amp;quot;^n%s:^n #  %-16.15s %-20s %-8s %-4.3s %-4.3s %s&amp;quot;, cl_on_server, &amp;quot;nick&amp;quot;, &amp;quot;authid&amp;quot;, &amp;quot;userid&amp;quot;, lImm, lRes, lAccess) &lt;br /&gt;
  for (new a = 0; a &amp;lt; inum; ++a)&lt;br /&gt;
  {&lt;br /&gt;
   get_user_authid(players[a], authid, 31)&lt;br /&gt;
   ...&lt;br /&gt;
  }&lt;br /&gt;
  ...&lt;br /&gt;
 }&lt;br /&gt;
:замените &lt;br /&gt;
 console_print(id, &amp;quot;^n%s:^n #  %-16.15s %-20s %-8s %-4.3s %-4.3s %s&amp;quot;, cl_on_server, &amp;quot;nick&amp;quot;, &amp;quot;authid&amp;quot;, &amp;quot;userid&amp;quot;, lImm, lRes, lAccess)&lt;br /&gt;
: на&lt;br /&gt;
 console_print(id, &amp;quot;^n%s:^n #  %-16.15s %-20s %-8s %-4.3s %-4.3s %s&amp;quot;, cl_on_server, &amp;quot;nick&amp;quot;, &amp;quot;ip&amp;quot;, &amp;quot;userid&amp;quot;, lImm, lRes, lAccess)&lt;br /&gt;
: а также&lt;br /&gt;
 get_user_authid(players[a], authid, 31)&lt;br /&gt;
: на&lt;br /&gt;
 get_user_ip(players[a], authid, 31, 1)&lt;br /&gt;
: Сохраните файл и [[#Как компилировать плагины?|перекомпилируйте]] плагин.&lt;br /&gt;
&lt;br /&gt;
=== А как дать всем доступ к команде amx_who? ===&lt;br /&gt;
: По умолчанию, команда доступна только игрокам с правами '''y''' (т.е. это признак админа). Чтобы разрешить пользоваться ею всем игрокам, надо открыть файл ''admincmd.sma'', и в строке&lt;br /&gt;
 register_concmd(&amp;quot;amx_who&amp;quot;, &amp;quot;cmdWho&amp;quot;, ADMIN_ADMIN, &amp;quot;- displays who is on server&amp;quot;)&lt;br /&gt;
: заменить ''ADMIN_ADMIN'' на ''ADMIN_ALL'' и [[#Как компилировать плагины?|перекомпилировать]] плагин.&lt;br /&gt;
: В AMX 1.8.X и выше доступны стандартные средства переопределения прав доступа к командам без исправления самих плагинов (''TODO: ссылка?'').&lt;br /&gt;
&lt;br /&gt;
=== Как очистить статистику StatsX? ===&lt;br /&gt;
: Удалите файл ''$AMXMODX/data/csstats.dat''.&lt;br /&gt;
&lt;br /&gt;
= Вопросы по компилированию =&lt;br /&gt;
=== Что такое компиляция? ===&lt;br /&gt;
: Это процесс, который переводит текстовые файлы (*.sma), содержащие исходный код (т.е. инструкции для AMX Mod X, который их исполняет), в формат, более пригодный для исполнения.  За счет этого скорость выполнения плагинов возрастает многократно, упрощается разработка &amp;quot;движка&amp;quot;, который эти плагины исполняет, а также в некотором смысле защищается авторский код. Почему в &amp;quot;некотором смысле&amp;quot;? Потому что все AMX Mod X плагины должны публиковаться под лицензией GNU General Public License. В случае публикации плагина лицензия обязывает также публиковать и его исходный код. Откомпилированные плагины имеют расширение .amxx. Именно файлы этого типа, а не .sma, должны указываться в файле plugins.ini для последующей корректной загрузки плагина.&lt;br /&gt;
&lt;br /&gt;
=== Как компилировать плагины? ===&lt;br /&gt;
: Базовую информацию вы можете найти на [[Ru Compiling Plugins (AMX Mod X)|этой]] странице.&lt;br /&gt;
&lt;br /&gt;
=== Как упростить процесс компилирования? ===&lt;br /&gt;
: Можно написать стороннюю программу или скрипт, например такой, как пакетный batch файл. Например, создайте файл make.bat со следующим содержимым:&lt;br /&gt;
 @amxxpc.exe %1 -i.\include -o.\compiled\%1&lt;br /&gt;
: Чтобы с помощью него откомпилировать плагин, необходимо выполнить следующую команду:&lt;br /&gt;
 make.bat my_plugin.sma&lt;br /&gt;
: В итоге откомпилированный файл будет помещен в каталог ''compiled'' текущей директории. Если его там нет, значит в процессе компилирования возникли фатальные ошибки, которые выводятся на экран.&lt;br /&gt;
: Если вам необходимо (например, в случае ошибок) отправить кому-нибудь результат компиляции, можете перенаправить вывод информации о процессе компилирования в файл, например таким образом:&lt;br /&gt;
 make.bat my_plugin.sma &amp;gt; my_plugin.log&lt;br /&gt;
&lt;br /&gt;
=== Компилятор выводит &amp;quot;max. usage is unknown, due to recursion&amp;quot; ===&lt;br /&gt;
: Ничего страшного - просто компилятор не может вычислить предполагаемый объем памяти, используемый вашим плагином.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Вопросы по скриптингу =&lt;br /&gt;
=== С чего начать? ===&lt;br /&gt;
: С со статьи [[Ru Fundamental Basics of AMX Mod X Scripting|Фундаментальные основы AMX Mod X скриптинга]].&lt;br /&gt;
&lt;br /&gt;
=== А стоит ли вообще начинать? ===&lt;br /&gt;
: В зависимости от того, какую цель вы преследуете, а также от вашего желания и потенциала. Знание английского языка (чтение) будет огромным плюсом во время обучения, иначе постигать азы будет очень сложно. CS является закрытым проектом без исходных кодов, поэтому могие новые (неизученные) элементы приходится постигать через проведение экспериментов.&lt;/div&gt;</summary>
		<author><name>VEN</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.alliedmods.net/index.php?title=Ru_AMX_Mod_X_FAQ&amp;diff=6360</id>
		<title>Ru AMX Mod X FAQ</title>
		<link rel="alternate" type="text/html" href="https://wiki.alliedmods.net/index.php?title=Ru_AMX_Mod_X_FAQ&amp;diff=6360"/>
		<updated>2008-10-19T08:52:35Z</updated>

		<summary type="html">&lt;p&gt;VEN: /* Где и как искать плагины? */ предупреждение о некорректной работе alliedmods.net/search.php / bug warning&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Russian]]&lt;br /&gt;
[[Category:Ru:AMX Mod X]]&lt;br /&gt;
&lt;br /&gt;
= Общие положения, термины, сокращения и условные обозначения =&lt;br /&gt;
:* HL или HL1 - аббревиатура от [[Half-Life 1|Half-Life]] (часть первая);&lt;br /&gt;
:* Mod - &amp;quot;мод&amp;quot;, модификация - дополнение к чему-либо, как правило, расширяющее/изменяющее функциональность;&lt;br /&gt;
:* HL Engine - &amp;quot;движок&amp;quot; Half-Life - &amp;quot;центральный модуль&amp;quot;, осуществляющий выполнение базовых &amp;quot;общемодовых&amp;quot; задач;&lt;br /&gt;
:* MM - [[Metamod]] - сторонний мод особого типа, является промежуточным звеном в системе &amp;quot;HL движок - HL мод&amp;quot;;&lt;br /&gt;
:* AMXX - аббревиатура от [[AMX Mod X]] - Metamod plugin (&amp;quot;плагин&amp;quot;), своего рода Metamod мод;&lt;br /&gt;
:* Map - &amp;quot;карта&amp;quot; - определяет внешний вид территории, на которой происходит игровое действие;&lt;br /&gt;
:* World - &amp;quot;мир&amp;quot; - все пространство, которое занимает карта, а также область, находящаяся за картой;&lt;br /&gt;
:* Spawn - &amp;quot;спавн&amp;quot; - момент, когда игрок появляется в мире, обретая физическое тело;&lt;br /&gt;
:* SinglePlayer - &amp;quot;синглплеер&amp;quot; - игровой тип, когда одновременно в игре может участвовать только один игрок;&lt;br /&gt;
:* MultiPlayer - &amp;quot;мультиплеер&amp;quot; - игровой тип, когда одновременно в игре может участвовать несколько игроков;&lt;br /&gt;
:* DM - аббревиатура от Death Match - динамичный мультиплеер тип игры, когда после &amp;quot;смерти&amp;quot; игрока происходит его скорый спавн (&amp;quot;респавн&amp;quot;);&lt;br /&gt;
:* HLDM - аббревиатура от Half-Life Death Match - оригинальный HL мод DM типа;&lt;br /&gt;
:* CS - аббревиатура от [[Counter-Stirke]] - наиболее популярный HL мод;&lt;br /&gt;
:* VALVE - [[VALVe Software|корпорация, разработчик HL и CS]], также редко используется как синоним HLDM, подчеркивая название директории мода (&amp;quot;valve&amp;quot;);&lt;br /&gt;
:* $MODDIR - способ условного обозначения корневой директории мода, например: ''cstrike'', ''valve'';&lt;br /&gt;
:* $MMDIR - способ условного обозначения относительного пути (относительно пути к $MODDIR) к корневой директории Metamod, по умолчанию: ''addons/metamod'';&lt;br /&gt;
:* $AMXMODX - способ условного обозначения относительного пути (относительно пути к $MODDIR) к корневой директории AMX Mod X, по умолчанию: ''addons/amxmodx''.&lt;br /&gt;
&lt;br /&gt;
= Общие вопросы =&lt;br /&gt;
=== Где скачать последнюю версию AMX Mod X? ===&lt;br /&gt;
: Последнюю версию всегда можно скачать на официальном сайте AMX Mod X в [http://www.amxmodx.org/downloads.php разделе закачек].&lt;br /&gt;
&lt;br /&gt;
=== А что именно качать? ===&lt;br /&gt;
: Качайте либо инсталлятор (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 мода.&lt;br /&gt;
&lt;br /&gt;
=== Чем отличается AMX Mod X от AMX Mod? ===&lt;br /&gt;
: Буквой X ;). На самом деле отличий очень много:&lt;br /&gt;
:* AMXX поддерживается до сих пор, а поддержка AMX Mod была завершена примерно в 2006 году;&lt;br /&gt;
:* функциональность AMXX значительно превосходит AMX Mod, это также касается и расширенной поддержки других модов, в то время как AMX Mod поддерживал только HLDM, CS и CZ;&lt;br /&gt;
:* AMXX принято считать быстрее AMX Mod;&lt;br /&gt;
:* плагины AMXX не совместимы с плагинами AMX Mod;&lt;br /&gt;
:* плагины AMX Mod 0.9.9 совместимы с AMXX, если последний работает в режиме совместимости(?);&lt;br /&gt;
:* плагины для AMX Mod имеют расширение .amx, а плагины AMXX - .amxx;&lt;br /&gt;
:* ''TODO: дополнить список''&lt;br /&gt;
&lt;br /&gt;
=== Как запустить два различных сервера AMX Mod X? ===&lt;br /&gt;
: К примеру, вы хотите запустить два различных сервера из одной ''cstrike'' директории на базе различных AMX Mod X/Metamod плагинов, настроек и прочего. Это решаемо. Один из примеров для win32 системы приведен ниже:&lt;br /&gt;
:* Создать отдельную AMX Mod X директорию с необходимыми файлами, например: ''addons/amxmodx2''&lt;br /&gt;
:* В ''addons/amxmodx2/configs/core.ini'' везде изменить &amp;quot;amxmodx&amp;quot; на &amp;quot;amxmodx2&amp;quot;&lt;br /&gt;
:* Создать отдельный файл загрузки Metamod плагинов, например: ''addons/metamod/plugins2.ini''&lt;br /&gt;
:* В созданный ''plugins2.ini'' файл вписать: ''win32 addons\amxmodx2\dlls\amxmodx_mm.dll''&lt;br /&gt;
:* Создать в директории ''cstrike'' файл, например, с именем ''amxmodx2.cfg'', его содержимое должно быть следующим:&lt;br /&gt;
&amp;lt;pre&amp;gt;localinfo mm_pluginsfile &amp;quot;addons/metamod/plugins2.ini&amp;quot;&lt;br /&gt;
localinfo amxx_basedir &amp;quot;addons/amxmodx2&amp;quot;&lt;br /&gt;
localinfo amxx_cfg &amp;quot;addons/amxmodx2/configs/core.ini&amp;quot;&lt;br /&gt;
localinfo amxx_configsdir &amp;quot;addons/amxmodx2/configs&amp;quot;&lt;br /&gt;
localinfo amxx_customdir &amp;quot;addons/amxmodx2/custom&amp;quot;&lt;br /&gt;
localinfo amxx_datadir &amp;quot;addons/amxmodx2/data&amp;quot;&lt;br /&gt;
localinfo amxx_logdir &amp;quot;addons/amxmodx2/logs&amp;quot;&lt;br /&gt;
localinfo amxx_logs &amp;quot;addons/amxmodx2/logs&amp;quot;&lt;br /&gt;
localinfo amxx_modules &amp;quot;addons/amxmodx2/configs/modules.ini&amp;quot;&lt;br /&gt;
localinfo amxx_modulesdir &amp;quot;addons/amxmodx2/modules&amp;quot;&lt;br /&gt;
localinfo amxx_plugins &amp;quot;addons/amxmodx2/configs/plugins.ini&amp;quot;&lt;br /&gt;
localinfo amxx_pluginsdir &amp;quot;addons/amxmodx2/plugins&amp;quot;&lt;br /&gt;
localinfo amxx_vault &amp;quot;addons/amxmodx2/data/vault.ini&amp;quot;&lt;br /&gt;
localinfo csstats &amp;quot;addons/amxmodx2/data/csstats.dat&amp;quot;&lt;br /&gt;
localinfo csstats_score &amp;quot;addons/amxmodx2/data/csstats.amxx&amp;quot;&lt;br /&gt;
localinfo amx_basedir &amp;quot;addons/amxmodx2&amp;quot;&lt;br /&gt;
localinfo amx_configdir &amp;quot;addons/amxmodx2/configs&amp;quot;&lt;br /&gt;
localinfo amx_langdir &amp;quot;addons/amxmodx2/data/amxmod-lang&amp;quot;&lt;br /&gt;
localinfo amx_logdir &amp;quot;addons/amxmodx2/logs&amp;quot;&lt;br /&gt;
localinfo amx_modulesdir &amp;quot;addons/amxmodx2/modules&amp;quot;&lt;br /&gt;
localinfo amx_pluginsdir &amp;quot;addons/amxmodx2/plugins&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
:* Теперь второй сервер необходимо будет запускать с параметром командной строки: ''+exec amxmodx2.cfg''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Вопросы по плагинам =&lt;br /&gt;
== Общие вопросы ==&lt;br /&gt;
=== Где и как искать плагины? ===&lt;br /&gt;
: Предварительно отметим, что условно AMX Mod X плагины можно разделить на следующие категории: стандартные, официально одобренные, официально отклоненные и неофициальные. Одобренные плагины можно искать [http://www.amxmodx.org/compiler.php здесь], или, используя [http://forums.alliedmods.net/search.php поисковую систему официального форума] (примечание: было замечено, что в последнее время эта система функционирует не совсем корректно). В поле '''Search in Forum(s)''' отметьте '''Approved Plugins''', также, зажав клавишу Ctrl, можно отметить интересующие вас секции из подраздела '''High-Traffic Plugins'''. Чтобы искать неофициальные плагины, следует также воспользоваться [http://forums.alliedmods.net/search.php поисковой системой официального форума], правда, в поле '''Search in Forum(s)''' необходимо выбрать '''Unapproved/Old Plugins'''. Если для вас не имеет значения статус плагина, и вы склонны к экспериментам, осуществляйте поиск по категории '''Plugins''', которая включает в себя одобренные, отклоненные, недавно опубликованные, вполне возможно, &amp;quot;сырые&amp;quot; плагины, а также темы-запросы, в которых могут быть &amp;quot;быстро написанные&amp;quot; плагины.  Особенность поиска на официальных форумах еще состоит в том, что при вводе слова система ищет именно слова (без учета регистра), т.е. фрагменты, разделенные слева и справа пробелами. Т.о., к примеру, набрав для поиска слово ''FCOS'' вы не найдете нужного вам плагина, хотя есть тема, в которой присутствует текст ''[fcos]''. Для этого надо использовать в поиске строку ''*FCOS*''. Немного поработав с поисковой формой форума, вы легко освоите эту систему. Единственное возможное для некоторых неудобство - практически все описания плагинов написаны на английcком языке. Неофициальные плагины также можно попробовать искать с помощью общеизвестных поисковых систем: Google, Yandex, Rambler и др.&lt;br /&gt;
&lt;br /&gt;
=== Сколько плагинов сейчас выпущено под AMX Mod X? ===&lt;br /&gt;
: &amp;quot;Тонны&amp;quot; плагинов. Но, к сожалению, качеством и надежностью б'''о'''льшая половина из них не белещет. К тому же некоторые плагины, &amp;quot;заброшены&amp;quot; авторами и не обновляются, что приводит даже к несовместимости с новыми версиями AMX Mod X.&lt;br /&gt;
&lt;br /&gt;
=== Как устанавливать плагины? ===&lt;br /&gt;
: Обратитесь к [[Ru Configuring AMX Mod X|этой]] статье.&lt;br /&gt;
&lt;br /&gt;
=== Как удалять плагины? ===&lt;br /&gt;
: Обратитесь к [[Ru Configuring AMX Mod X|этой]] статье.&lt;br /&gt;
&lt;br /&gt;
=== Что такое стандартные плагины? ===&lt;br /&gt;
: Это плагины, которые входят в стандартную поставку AMX Mod X. Они находятся в папке $AMXMODX\scripting.&lt;br /&gt;
&lt;br /&gt;
=== Как узнать, в каком плагине зарегистрирована та или иная переменная? ===&lt;br /&gt;
: В серверной консоли наберите команду ''amxx cvars''. Выделите текст, скопируйте в файл, там сделайте поиск искомой переменной. В правой колонке будет стоять имя плагина, в котором она и зарегистрирована.&lt;br /&gt;
&lt;br /&gt;
=== Я перевел на русский языковой файл плагина, а текст в игре отображается криво ===&lt;br /&gt;
: Скорее всего вы не сохранили файл в UTF-8 кодировке. Даже если вы это сделали, проверьте что в начале файле нет маркера кодировки, потому что некоторые редакторы его вставляют без предупреждения. Для этого надо использовать редактор или режим, который НЕ понимает UTF-8, потому что unicode редактор не отображает такой маркер.&lt;br /&gt;
: Имейте в виду, что в консоли сервера, работающего в режиме ''-console'', переведенный текст не будет отображаться по-русски.&lt;br /&gt;
&lt;br /&gt;
=== Как называется статистика, встроенная в AMXX? ===&lt;br /&gt;
: Называется &amp;quot;StatsX&amp;quot;, реализована в виде плагинов ''statsx.amxx'', ''statscfg.amxx'', ''stats_logging.amxx'', а также в модуле ''csx''. О последнем многие забывают, полагая, что можно просто изменить алгоритм учета статистики на уровне плагинов AMXX.&lt;br /&gt;
&lt;br /&gt;
== Вопросы по стандартным плагинам ==&lt;br /&gt;
=== Как увеличить число карт в стандартном голосовании? ===&lt;br /&gt;
: Откройте файл $AMXMODX\scripting\mapchooser.sma, замените число 3 в строке&lt;br /&gt;
 #define SELECTMAPS  3&lt;br /&gt;
: на требуемое, затем [[#Как компилировать плагины?|откомпилируйте]] плагин и замените исходный.&lt;br /&gt;
&lt;br /&gt;
=== Как увеличить число администраторов? ===&lt;br /&gt;
: В файле ''admin.sma'' замените число 64 на требуемое значение в строке:&lt;br /&gt;
 #define MAX_ADMINS 64&lt;br /&gt;
: Не ставьте слишком большие значения. Не забудьте [[#Как компилировать плагины?|перекомпилировать]] плагин и заменить исходный новым.&lt;br /&gt;
: В AMXX 1.8.X и выше такая проблема не стоит, т.к. там реализован динамический список админов.&lt;br /&gt;
&lt;br /&gt;
=== Почему клиент не получает права админа по IP? ===&lt;br /&gt;
:Данная проблема возникает на публичных Non-Steam (патченных) интернет-серверах c sv_lan = 0 при подключении Steam/Non-Steam клиентов.&lt;br /&gt;
: Сначала убедитесь, что у вас нединамический внешний IP. Динамический IP означает, что каждый раз, подключась к Интернету, вам назначается новый внешний IP (обычно из какого-то фиксированного диапазона). Для этого обратитесь к вашему провайдеру. Далее необходимо сверить, правильно ли вы прописали доступ в файле users.ini. Для этого проверьте свой внешний IP на страничке [http://myip.ru/ myip.ru]. Запомните его. Откройте файл user.ini и убедитесь что там есть такая запись:&lt;br /&gt;
 &amp;quot;&amp;lt;ваш_ip&amp;gt;&amp;quot; &amp;quot;&amp;lt;ваш_пароль&amp;gt;&amp;quot; &amp;quot;&amp;lt;ваши_флаги&amp;gt;&amp;quot; &amp;quot;d&amp;lt;другие_модификаторы&amp;gt;&amp;quot;&lt;br /&gt;
:В поле ''&amp;lt;ваш_ip&amp;gt;'' должен быть вбит запомненный ранее IP. Обратите внимание на модификатор '''d'''. Без него проверка на IP проводиться НЕ будет. При указании IP старайтесь не использовать номер порта (знак двоеточия и то, что справа от него).&lt;br /&gt;
: Если все правильно, а вы все равно не становитесь администратором на сервере, то, скорее всего, проблема в том, что вы не прошли авторизацию на сервере. Для этого выполните команду ''users'' или ''stat'' в консоли сервера и обратите внимание на значение в колонке ''userid''. Если напротив потенциального админа стоит '''STEAM_ID_PENDING''', то это означает, что сервер криво заломан, и он не авторизовал данного игрока. В свою очередь это значит, что функция ''client_authorized(id)'' не была вызвана для всех(!) активных AMXX плагинов. Если открыть файл ''admin.sma'', то можно увидеть следующее:&lt;br /&gt;
 public client_authorized(id)&lt;br /&gt;
   return get_cvar_num(&amp;quot;amx_mode&amp;quot;) ? accessUser(id) : PLUGIN_CONTINUE&lt;br /&gt;
: Это и есть проверка клиента на админа. Чтобы эта функция вызывалась всегда, ''client_authorized'' надо переименовать в ''client_putinserver'', а существующую функцию ''client_putinserver'' либо удалить, либо [[Ru_Fundamental_Basics_of_AMX_Mod_X_Scripting#Комментарии|закомментировать]].&lt;br /&gt;
&lt;br /&gt;
=== Как заставить команду amx_who выводить IP вместо ID? ===&lt;br /&gt;
: В файле ''admincmd.sma'' в указанном ниже месте &lt;br /&gt;
 public cmdWho(id, level, cid)&lt;br /&gt;
 {&lt;br /&gt;
  ...&lt;br /&gt;
  console_print(id, &amp;quot;^n%s:^n #  %-16.15s %-20s %-8s %-4.3s %-4.3s %s&amp;quot;, cl_on_server, &amp;quot;nick&amp;quot;, &amp;quot;authid&amp;quot;, &amp;quot;userid&amp;quot;, lImm, lRes, lAccess) &lt;br /&gt;
  for (new a = 0; a &amp;lt; inum; ++a)&lt;br /&gt;
  {&lt;br /&gt;
   get_user_authid(players[a], authid, 31)&lt;br /&gt;
   ...&lt;br /&gt;
  }&lt;br /&gt;
  ...&lt;br /&gt;
 }&lt;br /&gt;
:замените &lt;br /&gt;
 console_print(id, &amp;quot;^n%s:^n #  %-16.15s %-20s %-8s %-4.3s %-4.3s %s&amp;quot;, cl_on_server, &amp;quot;nick&amp;quot;, &amp;quot;authid&amp;quot;, &amp;quot;userid&amp;quot;, lImm, lRes, lAccess)&lt;br /&gt;
: на&lt;br /&gt;
 console_print(id, &amp;quot;^n%s:^n #  %-16.15s %-20s %-8s %-4.3s %-4.3s %s&amp;quot;, cl_on_server, &amp;quot;nick&amp;quot;, &amp;quot;ip&amp;quot;, &amp;quot;userid&amp;quot;, lImm, lRes, lAccess)&lt;br /&gt;
: а также&lt;br /&gt;
 get_user_authid(players[a], authid, 31)&lt;br /&gt;
: на&lt;br /&gt;
 get_user_ip(players[a], authid, 31, 1)&lt;br /&gt;
: Сохраните файл и [[#Как компилировать плагины?|перекомпилируйте]] плагин.&lt;br /&gt;
&lt;br /&gt;
=== А как дать всем доступ к команде amx_who? ===&lt;br /&gt;
: По умолчанию, команда доступна только игрокам с правами '''y''' (т.е. это признак админа). Чтобы разрешить пользоваться ею всем игрокам, надо открыть файл ''admincmd.sma'', и в строке&lt;br /&gt;
 register_concmd(&amp;quot;amx_who&amp;quot;, &amp;quot;cmdWho&amp;quot;, ADMIN_ADMIN, &amp;quot;- displays who is on server&amp;quot;)&lt;br /&gt;
: заменить ''ADMIN_ADMIN'' на ''ADMIN_ALL'' и [[#Как компилировать плагины?|перекомпилировать]] плагин.&lt;br /&gt;
: В AMX 1.8.X и выше доступны стандартные средства переопределения прав доступа к командам без исправления самих плагинов (''TODO: ссылка?'').&lt;br /&gt;
&lt;br /&gt;
=== Как очистить статистику StatsX? ===&lt;br /&gt;
: Удалите файл ''$AMXMODX/data/csstats.dat''.&lt;br /&gt;
&lt;br /&gt;
= Вопросы по компилированию =&lt;br /&gt;
=== Что такое компиляция? ===&lt;br /&gt;
: Это процесс, который переводит текстовые файлы (*.sma), содержащие исходный код (т.е. инструкции для AMX Mod X, который их исполняет), в формат, более пригодный для исполнения.  За счет этого скорость выполнения плагинов возрастает многократно, упрощается разработка &amp;quot;движка&amp;quot;, который эти плагины исполняет, а также в некотором смысле защищается авторский код. Почему в &amp;quot;некотором смысле&amp;quot;? Потому что все AMX Mod X плагины должны публиковаться под лицензией GNU General Public License. В случае публикации плагина лицензия обязывает также публиковать и его исходный код. Откомпилированные плагины имеют расширение .amxx. Именно файлы этого типа, а не .sma, должны указываться в файле plugins.ini для последующей корректной загрузки плагина.&lt;br /&gt;
&lt;br /&gt;
=== Как компилировать плагины? ===&lt;br /&gt;
: Базовую информацию вы можете найти на [[Ru Compiling Plugins (AMX Mod X)|этой]] странице.&lt;br /&gt;
&lt;br /&gt;
=== Как упростить процесс компилирования? ===&lt;br /&gt;
: Можно написать стороннюю программу или скрипт, например такой, как пакетный batch файл. Например, создайте файл make.bat со следующим содержимым:&lt;br /&gt;
 @amxxpc.exe %1 -i.\include -o.\compiled\%1&lt;br /&gt;
: Чтобы с помощью него откомпилировать плагин, необходимо выполнить следующую команду:&lt;br /&gt;
 make.bat my_plugin.sma&lt;br /&gt;
: В итоге откомпилированный файл будет помещен в каталог ''compiled'' текущей директории. Если его там нет, значит в процессе компилирования возникли фатальные ошибки, которые выводятся на экран.&lt;br /&gt;
: Если вам необходимо (например, в случае ошибок) отправить кому-нибудь результат компиляции, можете перенаправить вывод информации о процессе компилирования в файл, например таким образом:&lt;br /&gt;
 make.bat my_plugin.sma &amp;gt; my_plugin.log&lt;br /&gt;
&lt;br /&gt;
=== Компилятор выводит &amp;quot;max. usage is unknown, due to recursion&amp;quot; ===&lt;br /&gt;
: Ничего страшного - просто компилятор не может вычислить предполагаемый объем памяти, используемый вашим плагином.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Вопросы по скриптингу =&lt;br /&gt;
=== С чего начать? ===&lt;br /&gt;
: С со статьи [[Ru Fundamental Basics of AMX Mod X Scripting|Фундаментальные основы AMX Mod X скриптинга]].&lt;br /&gt;
&lt;br /&gt;
=== А стоит ли вообще начинать? ===&lt;br /&gt;
: В зависимости от того, какую цель вы преследуете, а также от вашего желания и потенциала. Знание английского языка (чтение) будет огромным плюсом во время обучения, иначе постигать азы будет очень сложно. CS является закрытым проектом без исходных кодов, поэтому могие новые (неизученные) элементы приходится постигать через проведение экспериментов.&lt;/div&gt;</summary>
		<author><name>VEN</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.alliedmods.net/index.php?title=Ru_AMX_Mod_X_FAQ&amp;diff=6359</id>
		<title>Ru AMX Mod X FAQ</title>
		<link rel="alternate" type="text/html" href="https://wiki.alliedmods.net/index.php?title=Ru_AMX_Mod_X_FAQ&amp;diff=6359"/>
		<updated>2008-10-19T08:47:46Z</updated>

		<summary type="html">&lt;p&gt;VEN: /* Общие положения, термины, сокращения и условные обозначения */ правописание / spelling&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Russian]]&lt;br /&gt;
[[Category:Ru:AMX Mod X]]&lt;br /&gt;
&lt;br /&gt;
= Общие положения, термины, сокращения и условные обозначения =&lt;br /&gt;
:* HL или HL1 - аббревиатура от [[Half-Life 1|Half-Life]] (часть первая);&lt;br /&gt;
:* Mod - &amp;quot;мод&amp;quot;, модификация - дополнение к чему-либо, как правило, расширяющее/изменяющее функциональность;&lt;br /&gt;
:* HL Engine - &amp;quot;движок&amp;quot; Half-Life - &amp;quot;центральный модуль&amp;quot;, осуществляющий выполнение базовых &amp;quot;общемодовых&amp;quot; задач;&lt;br /&gt;
:* MM - [[Metamod]] - сторонний мод особого типа, является промежуточным звеном в системе &amp;quot;HL движок - HL мод&amp;quot;;&lt;br /&gt;
:* AMXX - аббревиатура от [[AMX Mod X]] - Metamod plugin (&amp;quot;плагин&amp;quot;), своего рода Metamod мод;&lt;br /&gt;
:* Map - &amp;quot;карта&amp;quot; - определяет внешний вид территории, на которой происходит игровое действие;&lt;br /&gt;
:* World - &amp;quot;мир&amp;quot; - все пространство, которое занимает карта, а также область, находящаяся за картой;&lt;br /&gt;
:* Spawn - &amp;quot;спавн&amp;quot; - момент, когда игрок появляется в мире, обретая физическое тело;&lt;br /&gt;
:* SinglePlayer - &amp;quot;синглплеер&amp;quot; - игровой тип, когда одновременно в игре может участвовать только один игрок;&lt;br /&gt;
:* MultiPlayer - &amp;quot;мультиплеер&amp;quot; - игровой тип, когда одновременно в игре может участвовать несколько игроков;&lt;br /&gt;
:* DM - аббревиатура от Death Match - динамичный мультиплеер тип игры, когда после &amp;quot;смерти&amp;quot; игрока происходит его скорый спавн (&amp;quot;респавн&amp;quot;);&lt;br /&gt;
:* HLDM - аббревиатура от Half-Life Death Match - оригинальный HL мод DM типа;&lt;br /&gt;
:* CS - аббревиатура от [[Counter-Stirke]] - наиболее популярный HL мод;&lt;br /&gt;
:* VALVE - [[VALVe Software|корпорация, разработчик HL и CS]], также редко используется как синоним HLDM, подчеркивая название директории мода (&amp;quot;valve&amp;quot;);&lt;br /&gt;
:* $MODDIR - способ условного обозначения корневой директории мода, например: ''cstrike'', ''valve'';&lt;br /&gt;
:* $MMDIR - способ условного обозначения относительного пути (относительно пути к $MODDIR) к корневой директории Metamod, по умолчанию: ''addons/metamod'';&lt;br /&gt;
:* $AMXMODX - способ условного обозначения относительного пути (относительно пути к $MODDIR) к корневой директории AMX Mod X, по умолчанию: ''addons/amxmodx''.&lt;br /&gt;
&lt;br /&gt;
= Общие вопросы =&lt;br /&gt;
=== Где скачать последнюю версию AMX Mod X? ===&lt;br /&gt;
: Последнюю версию всегда можно скачать на официальном сайте AMX Mod X в [http://www.amxmodx.org/downloads.php разделе закачек].&lt;br /&gt;
&lt;br /&gt;
=== А что именно качать? ===&lt;br /&gt;
: Качайте либо инсталлятор (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 мода.&lt;br /&gt;
&lt;br /&gt;
=== Чем отличается AMX Mod X от AMX Mod? ===&lt;br /&gt;
: Буквой X ;). На самом деле отличий очень много:&lt;br /&gt;
:* AMXX поддерживается до сих пор, а поддержка AMX Mod была завершена примерно в 2006 году;&lt;br /&gt;
:* функциональность AMXX значительно превосходит AMX Mod, это также касается и расширенной поддержки других модов, в то время как AMX Mod поддерживал только HLDM, CS и CZ;&lt;br /&gt;
:* AMXX принято считать быстрее AMX Mod;&lt;br /&gt;
:* плагины AMXX не совместимы с плагинами AMX Mod;&lt;br /&gt;
:* плагины AMX Mod 0.9.9 совместимы с AMXX, если последний работает в режиме совместимости(?);&lt;br /&gt;
:* плагины для AMX Mod имеют расширение .amx, а плагины AMXX - .amxx;&lt;br /&gt;
:* ''TODO: дополнить список''&lt;br /&gt;
&lt;br /&gt;
=== Как запустить два различных сервера AMX Mod X? ===&lt;br /&gt;
: К примеру, вы хотите запустить два различных сервера из одной ''cstrike'' директории на базе различных AMX Mod X/Metamod плагинов, настроек и прочего. Это решаемо. Один из примеров для win32 системы приведен ниже:&lt;br /&gt;
:* Создать отдельную AMX Mod X директорию с необходимыми файлами, например: ''addons/amxmodx2''&lt;br /&gt;
:* В ''addons/amxmodx2/configs/core.ini'' везде изменить &amp;quot;amxmodx&amp;quot; на &amp;quot;amxmodx2&amp;quot;&lt;br /&gt;
:* Создать отдельный файл загрузки Metamod плагинов, например: ''addons/metamod/plugins2.ini''&lt;br /&gt;
:* В созданный ''plugins2.ini'' файл вписать: ''win32 addons\amxmodx2\dlls\amxmodx_mm.dll''&lt;br /&gt;
:* Создать в директории ''cstrike'' файл, например, с именем ''amxmodx2.cfg'', его содержимое должно быть следующим:&lt;br /&gt;
&amp;lt;pre&amp;gt;localinfo mm_pluginsfile &amp;quot;addons/metamod/plugins2.ini&amp;quot;&lt;br /&gt;
localinfo amxx_basedir &amp;quot;addons/amxmodx2&amp;quot;&lt;br /&gt;
localinfo amxx_cfg &amp;quot;addons/amxmodx2/configs/core.ini&amp;quot;&lt;br /&gt;
localinfo amxx_configsdir &amp;quot;addons/amxmodx2/configs&amp;quot;&lt;br /&gt;
localinfo amxx_customdir &amp;quot;addons/amxmodx2/custom&amp;quot;&lt;br /&gt;
localinfo amxx_datadir &amp;quot;addons/amxmodx2/data&amp;quot;&lt;br /&gt;
localinfo amxx_logdir &amp;quot;addons/amxmodx2/logs&amp;quot;&lt;br /&gt;
localinfo amxx_logs &amp;quot;addons/amxmodx2/logs&amp;quot;&lt;br /&gt;
localinfo amxx_modules &amp;quot;addons/amxmodx2/configs/modules.ini&amp;quot;&lt;br /&gt;
localinfo amxx_modulesdir &amp;quot;addons/amxmodx2/modules&amp;quot;&lt;br /&gt;
localinfo amxx_plugins &amp;quot;addons/amxmodx2/configs/plugins.ini&amp;quot;&lt;br /&gt;
localinfo amxx_pluginsdir &amp;quot;addons/amxmodx2/plugins&amp;quot;&lt;br /&gt;
localinfo amxx_vault &amp;quot;addons/amxmodx2/data/vault.ini&amp;quot;&lt;br /&gt;
localinfo csstats &amp;quot;addons/amxmodx2/data/csstats.dat&amp;quot;&lt;br /&gt;
localinfo csstats_score &amp;quot;addons/amxmodx2/data/csstats.amxx&amp;quot;&lt;br /&gt;
localinfo amx_basedir &amp;quot;addons/amxmodx2&amp;quot;&lt;br /&gt;
localinfo amx_configdir &amp;quot;addons/amxmodx2/configs&amp;quot;&lt;br /&gt;
localinfo amx_langdir &amp;quot;addons/amxmodx2/data/amxmod-lang&amp;quot;&lt;br /&gt;
localinfo amx_logdir &amp;quot;addons/amxmodx2/logs&amp;quot;&lt;br /&gt;
localinfo amx_modulesdir &amp;quot;addons/amxmodx2/modules&amp;quot;&lt;br /&gt;
localinfo amx_pluginsdir &amp;quot;addons/amxmodx2/plugins&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
:* Теперь второй сервер необходимо будет запускать с параметром командной строки: ''+exec amxmodx2.cfg''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Вопросы по плагинам =&lt;br /&gt;
== Общие вопросы ==&lt;br /&gt;
=== Где и как искать плагины? ===&lt;br /&gt;
: Предварительно отметим, что условно AMX Mod X плагины можно разделить на следующие категории: стандартные, официально одобренные, официально отклоненные и неофициальные. Одобренные плагины можно искать [http://www.amxmodx.org/compiler.php здесь], или, используя [http://forums.alliedmods.net/search.php поисковую систему официального форума]. В поле '''Search in Forum(s)''' отметьте '''Approved Plugins''', также, зажав клавишу Ctrl, можно отметить интересующие вас секции из подраздела '''High-Traffic Plugins'''. Чтобы искать неофициальные плагины, следует также воспользоваться [http://forums.alliedmods.net/search.php поисковой системой официального форума], правда, в поле '''Search in Forum(s)''' необходимо выбрать '''Unapproved/Old Plugins'''. Если для вас не имеет значения статус плагина, и вы склонны к экспериментам, осуществляйте поиск по категории '''Plugins''', которая включает в себя одобренные, отклоненные, недавно опубликованные, вполне возможно, &amp;quot;сырые&amp;quot; плагины, а также темы-запросы, в которых могут быть &amp;quot;быстро написанные&amp;quot; плагины.  Особенность поиска на официальных форумах еще состоит в том, что при вводе слова система ищет именно слова (без учета регистра), т.е. фрагменты, разделенные слева и справа пробелами. Т.о., к примеру, набрав для поиска слово ''FCOS'' вы не найдете нужного вам плагина, хотя есть тема, в которой присутствует текст ''[fcos]''. Для этого надо использовать в поиске строку ''*FCOS*''. Немного поработав с поисковой формой форума, вы легко освоите эту систему. Единственное возможное для некоторых неудобство - практически все описания плагинов написаны на английcком языке. Неофициальные плагины также можно попробовать искать с помощью общеизвестных поисковых систем: Google, Yandex, Rambler и др.&lt;br /&gt;
&lt;br /&gt;
=== Сколько плагинов сейчас выпущено под AMX Mod X? ===&lt;br /&gt;
: &amp;quot;Тонны&amp;quot; плагинов. Но, к сожалению, качеством и надежностью б'''о'''льшая половина из них не белещет. К тому же некоторые плагины, &amp;quot;заброшены&amp;quot; авторами и не обновляются, что приводит даже к несовместимости с новыми версиями AMX Mod X.&lt;br /&gt;
&lt;br /&gt;
=== Как устанавливать плагины? ===&lt;br /&gt;
: Обратитесь к [[Ru Configuring AMX Mod X|этой]] статье.&lt;br /&gt;
&lt;br /&gt;
=== Как удалять плагины? ===&lt;br /&gt;
: Обратитесь к [[Ru Configuring AMX Mod X|этой]] статье.&lt;br /&gt;
&lt;br /&gt;
=== Что такое стандартные плагины? ===&lt;br /&gt;
: Это плагины, которые входят в стандартную поставку AMX Mod X. Они находятся в папке $AMXMODX\scripting.&lt;br /&gt;
&lt;br /&gt;
=== Как узнать, в каком плагине зарегистрирована та или иная переменная? ===&lt;br /&gt;
: В серверной консоли наберите команду ''amxx cvars''. Выделите текст, скопируйте в файл, там сделайте поиск искомой переменной. В правой колонке будет стоять имя плагина, в котором она и зарегистрирована.&lt;br /&gt;
&lt;br /&gt;
=== Я перевел на русский языковой файл плагина, а текст в игре отображается криво ===&lt;br /&gt;
: Скорее всего вы не сохранили файл в UTF-8 кодировке. Даже если вы это сделали, проверьте что в начале файле нет маркера кодировки, потому что некоторые редакторы его вставляют без предупреждения. Для этого надо использовать редактор или режим, который НЕ понимает UTF-8, потому что unicode редактор не отображает такой маркер.&lt;br /&gt;
: Имейте в виду, что в консоли сервера, работающего в режиме ''-console'', переведенный текст не будет отображаться по-русски.&lt;br /&gt;
&lt;br /&gt;
=== Как называется статистика, встроенная в AMXX? ===&lt;br /&gt;
: Называется &amp;quot;StatsX&amp;quot;, реализована в виде плагинов ''statsx.amxx'', ''statscfg.amxx'', ''stats_logging.amxx'', а также в модуле ''csx''. О последнем многие забывают, полагая, что можно просто изменить алгоритм учета статистики на уровне плагинов AMXX.&lt;br /&gt;
&lt;br /&gt;
== Вопросы по стандартным плагинам ==&lt;br /&gt;
=== Как увеличить число карт в стандартном голосовании? ===&lt;br /&gt;
: Откройте файл $AMXMODX\scripting\mapchooser.sma, замените число 3 в строке&lt;br /&gt;
 #define SELECTMAPS  3&lt;br /&gt;
: на требуемое, затем [[#Как компилировать плагины?|откомпилируйте]] плагин и замените исходный.&lt;br /&gt;
&lt;br /&gt;
=== Как увеличить число администраторов? ===&lt;br /&gt;
: В файле ''admin.sma'' замените число 64 на требуемое значение в строке:&lt;br /&gt;
 #define MAX_ADMINS 64&lt;br /&gt;
: Не ставьте слишком большие значения. Не забудьте [[#Как компилировать плагины?|перекомпилировать]] плагин и заменить исходный новым.&lt;br /&gt;
: В AMXX 1.8.X и выше такая проблема не стоит, т.к. там реализован динамический список админов.&lt;br /&gt;
&lt;br /&gt;
=== Почему клиент не получает права админа по IP? ===&lt;br /&gt;
:Данная проблема возникает на публичных Non-Steam (патченных) интернет-серверах c sv_lan = 0 при подключении Steam/Non-Steam клиентов.&lt;br /&gt;
: Сначала убедитесь, что у вас нединамический внешний IP. Динамический IP означает, что каждый раз, подключась к Интернету, вам назначается новый внешний IP (обычно из какого-то фиксированного диапазона). Для этого обратитесь к вашему провайдеру. Далее необходимо сверить, правильно ли вы прописали доступ в файле users.ini. Для этого проверьте свой внешний IP на страничке [http://myip.ru/ myip.ru]. Запомните его. Откройте файл user.ini и убедитесь что там есть такая запись:&lt;br /&gt;
 &amp;quot;&amp;lt;ваш_ip&amp;gt;&amp;quot; &amp;quot;&amp;lt;ваш_пароль&amp;gt;&amp;quot; &amp;quot;&amp;lt;ваши_флаги&amp;gt;&amp;quot; &amp;quot;d&amp;lt;другие_модификаторы&amp;gt;&amp;quot;&lt;br /&gt;
:В поле ''&amp;lt;ваш_ip&amp;gt;'' должен быть вбит запомненный ранее IP. Обратите внимание на модификатор '''d'''. Без него проверка на IP проводиться НЕ будет. При указании IP старайтесь не использовать номер порта (знак двоеточия и то, что справа от него).&lt;br /&gt;
: Если все правильно, а вы все равно не становитесь администратором на сервере, то, скорее всего, проблема в том, что вы не прошли авторизацию на сервере. Для этого выполните команду ''users'' или ''stat'' в консоли сервера и обратите внимание на значение в колонке ''userid''. Если напротив потенциального админа стоит '''STEAM_ID_PENDING''', то это означает, что сервер криво заломан, и он не авторизовал данного игрока. В свою очередь это значит, что функция ''client_authorized(id)'' не была вызвана для всех(!) активных AMXX плагинов. Если открыть файл ''admin.sma'', то можно увидеть следующее:&lt;br /&gt;
 public client_authorized(id)&lt;br /&gt;
   return get_cvar_num(&amp;quot;amx_mode&amp;quot;) ? accessUser(id) : PLUGIN_CONTINUE&lt;br /&gt;
: Это и есть проверка клиента на админа. Чтобы эта функция вызывалась всегда, ''client_authorized'' надо переименовать в ''client_putinserver'', а существующую функцию ''client_putinserver'' либо удалить, либо [[Ru_Fundamental_Basics_of_AMX_Mod_X_Scripting#Комментарии|закомментировать]].&lt;br /&gt;
&lt;br /&gt;
=== Как заставить команду amx_who выводить IP вместо ID? ===&lt;br /&gt;
: В файле ''admincmd.sma'' в указанном ниже месте &lt;br /&gt;
 public cmdWho(id, level, cid)&lt;br /&gt;
 {&lt;br /&gt;
  ...&lt;br /&gt;
  console_print(id, &amp;quot;^n%s:^n #  %-16.15s %-20s %-8s %-4.3s %-4.3s %s&amp;quot;, cl_on_server, &amp;quot;nick&amp;quot;, &amp;quot;authid&amp;quot;, &amp;quot;userid&amp;quot;, lImm, lRes, lAccess) &lt;br /&gt;
  for (new a = 0; a &amp;lt; inum; ++a)&lt;br /&gt;
  {&lt;br /&gt;
   get_user_authid(players[a], authid, 31)&lt;br /&gt;
   ...&lt;br /&gt;
  }&lt;br /&gt;
  ...&lt;br /&gt;
 }&lt;br /&gt;
:замените &lt;br /&gt;
 console_print(id, &amp;quot;^n%s:^n #  %-16.15s %-20s %-8s %-4.3s %-4.3s %s&amp;quot;, cl_on_server, &amp;quot;nick&amp;quot;, &amp;quot;authid&amp;quot;, &amp;quot;userid&amp;quot;, lImm, lRes, lAccess)&lt;br /&gt;
: на&lt;br /&gt;
 console_print(id, &amp;quot;^n%s:^n #  %-16.15s %-20s %-8s %-4.3s %-4.3s %s&amp;quot;, cl_on_server, &amp;quot;nick&amp;quot;, &amp;quot;ip&amp;quot;, &amp;quot;userid&amp;quot;, lImm, lRes, lAccess)&lt;br /&gt;
: а также&lt;br /&gt;
 get_user_authid(players[a], authid, 31)&lt;br /&gt;
: на&lt;br /&gt;
 get_user_ip(players[a], authid, 31, 1)&lt;br /&gt;
: Сохраните файл и [[#Как компилировать плагины?|перекомпилируйте]] плагин.&lt;br /&gt;
&lt;br /&gt;
=== А как дать всем доступ к команде amx_who? ===&lt;br /&gt;
: По умолчанию, команда доступна только игрокам с правами '''y''' (т.е. это признак админа). Чтобы разрешить пользоваться ею всем игрокам, надо открыть файл ''admincmd.sma'', и в строке&lt;br /&gt;
 register_concmd(&amp;quot;amx_who&amp;quot;, &amp;quot;cmdWho&amp;quot;, ADMIN_ADMIN, &amp;quot;- displays who is on server&amp;quot;)&lt;br /&gt;
: заменить ''ADMIN_ADMIN'' на ''ADMIN_ALL'' и [[#Как компилировать плагины?|перекомпилировать]] плагин.&lt;br /&gt;
: В AMX 1.8.X и выше доступны стандартные средства переопределения прав доступа к командам без исправления самих плагинов (''TODO: ссылка?'').&lt;br /&gt;
&lt;br /&gt;
=== Как очистить статистику StatsX? ===&lt;br /&gt;
: Удалите файл ''$AMXMODX/data/csstats.dat''.&lt;br /&gt;
&lt;br /&gt;
= Вопросы по компилированию =&lt;br /&gt;
=== Что такое компиляция? ===&lt;br /&gt;
: Это процесс, который переводит текстовые файлы (*.sma), содержащие исходный код (т.е. инструкции для AMX Mod X, который их исполняет), в формат, более пригодный для исполнения.  За счет этого скорость выполнения плагинов возрастает многократно, упрощается разработка &amp;quot;движка&amp;quot;, который эти плагины исполняет, а также в некотором смысле защищается авторский код. Почему в &amp;quot;некотором смысле&amp;quot;? Потому что все AMX Mod X плагины должны публиковаться под лицензией GNU General Public License. В случае публикации плагина лицензия обязывает также публиковать и его исходный код. Откомпилированные плагины имеют расширение .amxx. Именно файлы этого типа, а не .sma, должны указываться в файле plugins.ini для последующей корректной загрузки плагина.&lt;br /&gt;
&lt;br /&gt;
=== Как компилировать плагины? ===&lt;br /&gt;
: Базовую информацию вы можете найти на [[Ru Compiling Plugins (AMX Mod X)|этой]] странице.&lt;br /&gt;
&lt;br /&gt;
=== Как упростить процесс компилирования? ===&lt;br /&gt;
: Можно написать стороннюю программу или скрипт, например такой, как пакетный batch файл. Например, создайте файл make.bat со следующим содержимым:&lt;br /&gt;
 @amxxpc.exe %1 -i.\include -o.\compiled\%1&lt;br /&gt;
: Чтобы с помощью него откомпилировать плагин, необходимо выполнить следующую команду:&lt;br /&gt;
 make.bat my_plugin.sma&lt;br /&gt;
: В итоге откомпилированный файл будет помещен в каталог ''compiled'' текущей директории. Если его там нет, значит в процессе компилирования возникли фатальные ошибки, которые выводятся на экран.&lt;br /&gt;
: Если вам необходимо (например, в случае ошибок) отправить кому-нибудь результат компиляции, можете перенаправить вывод информации о процессе компилирования в файл, например таким образом:&lt;br /&gt;
 make.bat my_plugin.sma &amp;gt; my_plugin.log&lt;br /&gt;
&lt;br /&gt;
=== Компилятор выводит &amp;quot;max. usage is unknown, due to recursion&amp;quot; ===&lt;br /&gt;
: Ничего страшного - просто компилятор не может вычислить предполагаемый объем памяти, используемый вашим плагином.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Вопросы по скриптингу =&lt;br /&gt;
=== С чего начать? ===&lt;br /&gt;
: С со статьи [[Ru Fundamental Basics of AMX Mod X Scripting|Фундаментальные основы AMX Mod X скриптинга]].&lt;br /&gt;
&lt;br /&gt;
=== А стоит ли вообще начинать? ===&lt;br /&gt;
: В зависимости от того, какую цель вы преследуете, а также от вашего желания и потенциала. Знание английского языка (чтение) будет огромным плюсом во время обучения, иначе постигать азы будет очень сложно. CS является закрытым проектом без исходных кодов, поэтому могие новые (неизученные) элементы приходится постигать через проведение экспериментов.&lt;/div&gt;</summary>
		<author><name>VEN</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.alliedmods.net/index.php?title=Half-Life_1_Game_Events&amp;diff=6358</id>
		<title>Half-Life 1 Game Events</title>
		<link rel="alternate" type="text/html" href="https://wiki.alliedmods.net/index.php?title=Half-Life_1_Game_Events&amp;diff=6358"/>
		<updated>2008-10-19T08:43:10Z</updated>

		<summary type="html">&lt;p&gt;VEN: /* ClCorpse */ qnotice doesn't like x == y * z construction&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Half-Life 1]]&lt;br /&gt;
[[Category:Scripting (AMX Mod X)]]&lt;br /&gt;
&lt;br /&gt;
= Introduction =&lt;br /&gt;
&lt;br /&gt;
In [[AMX Mod X]] you are able to hook in-game messages/events with [http://www.amxmodx.org/funcwiki.php?search=register_message&amp;amp;go=search register_message] / [http://www.amxmodx.org/funcwiki.php?go=func&amp;amp;id=26 register_event]. Here are the list of messages/events and their arguments which can be read with [http://www.amxmodx.org/funcwiki.php?search=get_msg_arg_&amp;amp;go=search get_msg_arg_*] / [http://www.amxmodx.org/funcwiki.php?go=func&amp;amp;id=132 read_data].&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
*See the [[Advanced Scripting (AMX Mod X)#Events.2FMessages|Advanced Scripting]] article for more on events and messages.&amp;lt;br&amp;gt;&lt;br /&gt;
*See messages.inc and message_const.inc from amxmodx/scriptong/include folder or [http://www.amxmodx.org/funcwiki.php?go=inc&amp;amp;id=47 Messaging functions] and [http://www.amxmodx.org/funcwiki.php?go=inc&amp;amp;id=48 Message constants] for full messages control including blocking, argument alteration and much more.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= ADStop =&lt;br /&gt;
{{qnotice|No Information available for this message.}}&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{qnotice|This message has no arguments.}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl1msg|ADStop}}&lt;br /&gt;
{{end-hl1msg}}&lt;br /&gt;
&lt;br /&gt;
= AllowSpec =&lt;br /&gt;
Changes whether or not &amp;quot;SPECTATE&amp;quot; appears on the change team menu. Called whenever the allow_spectators CVar is changed, with its new value sent as the byte.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{qnotice|This changes how the change team menu appears, but spectating functionality is based off of the actual CVar value.}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl1msg|AllowSpec|byte}}&lt;br /&gt;
{{hl1msg|byte|Allowed}}&lt;br /&gt;
{{end-hl1msg}}&lt;br /&gt;
&lt;br /&gt;
= AmmoPickup =&lt;br /&gt;
Temporarily draws [[HUD]] ammo amount and correspoding ammo [[HUD]] icon in the middle of the right side of the screen.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{qnotice|Draw time is depend on the ''hud_drawhistory_time'' client CVar value.}}&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{qnotice|See [[CS Weapons Information]] for more information.}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl1msg|AmmoPickup|byte, byte}}&lt;br /&gt;
{{hl1msg|byte|AmmoID}}&lt;br /&gt;
{{hl1msg|byte|Ammount}}&lt;br /&gt;
{{end-hl1msg}}&lt;br /&gt;
&lt;br /&gt;
= AmmoX =&lt;br /&gt;
Updates the green bar indicator in the [[HUD]] weapons list. Also updates [[HUD]] backpack ammo number in the lower right corner of the screen in case the given ammo type are compatible with the current weapon.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{qnotice|See [[CS Weapons Information]] for more information.}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl1msg|AmmoX|byte, byte}}&lt;br /&gt;
{{hl1msg|byte|AmmoID}}&lt;br /&gt;
{{hl1msg|byte|Ammount}}&lt;br /&gt;
{{end-hl1msg}}&lt;br /&gt;
&lt;br /&gt;
= ArmorType =&lt;br /&gt;
Draws/removes helmet [[HUD]] icon. If flag is set to 1 the helmet [[HUD]] icon will be drawn (located right on the armor icon).&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl1msg|ArmorType|byte}}&lt;br /&gt;
{{hl1msg|byte|Flag}}&lt;br /&gt;
{{end-hl1msg}}&lt;br /&gt;
&lt;br /&gt;
= BarTime =&lt;br /&gt;
Draws a [[HUD]] progress bar which is filled from 0% to 100% for the time Duration seconds. Once the bar is fully filled it will be removed from the screen automatically.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{qnotice|Set Duration to 0 to hide the bar.}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl1msg|BarTime|short}}&lt;br /&gt;
{{hl1msg|short|Duration}}&lt;br /&gt;
{{end-hl1msg}}&lt;br /&gt;
&lt;br /&gt;
= BarTime2 =&lt;br /&gt;
The same as BarTime but StartPercents is specify how many per cents of the bar are (already) filled.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{qnotice|Display time can be calculated with this formula: ''(1 - (StartPercents / 100)) / Duration''}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl1msg|BarTime2|short, short}}&lt;br /&gt;
{{hl1msg|short|Duration}}&lt;br /&gt;
{{hl1msg|short|StartPercents}}&lt;br /&gt;
{{end-hl1msg}}&lt;br /&gt;
&lt;br /&gt;
= Battery =&lt;br /&gt;
Updates the icon and the number of armor on the [[HUD]].&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl1msg|Battery|short}}&lt;br /&gt;
{{hl1msg|short|Armor}}&lt;br /&gt;
{{end-hl1msg}}&lt;br /&gt;
&lt;br /&gt;
= BlinkAcct =&lt;br /&gt;
Makes a player's money display flash rapidly, until it flashes a total of BlinkAmt times.&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl1msg|BlinkAcct|byte}}&lt;br /&gt;
{{hl1msg|byte|BlinkAmt}}&lt;br /&gt;
{{end-hl1msg}}&lt;br /&gt;
&lt;br /&gt;
= BombDrop =&lt;br /&gt;
The first three arguments are the origin of the dropped bomb. The last argument is set to 1 if the bomb has been planted. It is 0 if the bomb was dropped due to voluntary dropping or death/disconnect. Setting the last argument 1, will also trigger the round timer to hide. It also will show the dropped bomb on the Terrorist team's radar in the location specified by the first three arguments.&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl1msg|BombDrop|coord, coord, coord, byte}}&lt;br /&gt;
{{hl1msg|coord|CoordX}}&lt;br /&gt;
{{hl1msg|coord|CoordY}}&lt;br /&gt;
{{hl1msg|coord|CoordZ}}&lt;br /&gt;
{{hl1msg|byte|Flag}}&lt;br /&gt;
{{end-hl1msg}}&lt;br /&gt;
&lt;br /&gt;
= BombPickup =&lt;br /&gt;
This message just tells the game that the bomb has been picked up. It will cause the dropped/planted bomb to disappear from the Terrorist team's radar.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{qnotice|This message has no arguments.}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl1msg|BombPickup}}&lt;br /&gt;
{{end-hl1msg}}&lt;br /&gt;
&lt;br /&gt;
= BotProgress =&lt;br /&gt;
Used by CZ's bots when learning a new map. Displays a progress bar in the middle of the screen, with some header text. The bar doesn't move, and you can't do anything while the bar is displayed. This is a different style of progress bar than from the BarTime event. This really doesn't display well in CS.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{qnotice|Flag can be 0 (update bar), 1 (create new bar), or 2 (remove bar). When using flag 0, send all arguments. When using flag 1, send only Flag and Header. When using flag 2, send only Flag.}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl1msg|BotProgress|byte, byte, string}}&lt;br /&gt;
{{hl1msg|byte|Flag}}&lt;br /&gt;
{{hl1msg|byte|Progress}}&lt;br /&gt;
{{hl1msg|string|Header}}&lt;br /&gt;
{{end-hl1msg}}&lt;br /&gt;
&lt;br /&gt;
= BotVoice =&lt;br /&gt;
Displays (or hides) the voice icon above a user's head and the talking icon on the right side of the screen. This is called by CZ for bots; it's not called by regular players, although you &amp;lt;i&amp;gt;can&amp;lt;/i&amp;gt; specify a regular player (non-bot) for the PlayerIndex. Status is 1 for talking, or 0 for not talking.&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl1msg|BotVoice|byte, byte}}&lt;br /&gt;
{{hl1msg|byte|Status}}&lt;br /&gt;
{{hl1msg|byte|PlayerIndex}}&lt;br /&gt;
{{end-hl1msg}}&lt;br /&gt;
&lt;br /&gt;
= Brass =&lt;br /&gt;
Creates a brass shell. Used, for example, by the AWP, after firing.&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl1msg|Brass|byte, coord, coord, coord, coord, coord, coord, coord, coord, coord, angle, short, byte, byte, byte}}&lt;br /&gt;
{{hl1msg|byte|Unknown}}&lt;br /&gt;
{{hl1msg|coord|StartX}}&lt;br /&gt;
{{hl1msg|coord|StartY}}&lt;br /&gt;
{{hl1msg|coord|StartZ}}&lt;br /&gt;
{{hl1msg|coord|VelocityX?}}&lt;br /&gt;
{{hl1msg|coord|VelocityY?}}&lt;br /&gt;
{{hl1msg|coord|VelocityZ?}}&lt;br /&gt;
{{hl1msg|coord|UnknownX}}&lt;br /&gt;
{{hl1msg|coord|UnknownY}}&lt;br /&gt;
{{hl1msg|coord|UnknownZ}}&lt;br /&gt;
{{hl1msg|angle|Life?}}&lt;br /&gt;
{{hl1msg|short|Model?}}&lt;br /&gt;
{{hl1msg|byte|Unknown}}&lt;br /&gt;
{{hl1msg|byte|Unknown}}&lt;br /&gt;
{{hl1msg|byte|Unknown}}&lt;br /&gt;
{{end-hl1msg}}&lt;br /&gt;
&lt;br /&gt;
= BuyClose =&lt;br /&gt;
Forces the buy menu to close. This is not called when the player closes the buy menu by himself; it's only called when the game forces him to do so (ie: he walks outside of the buy zone, gets killed, etcetera).&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{qnotice|This message has no arguments.}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl1msg|BuyClose}}&lt;br /&gt;
{{end-hl1msg}}&lt;br /&gt;
&lt;br /&gt;
= ClCorpse =&lt;br /&gt;
Spawns a player's corpse. ModelName is the player's model name, for example: &amp;quot;leet&amp;quot;. Delay is a delay before animation plaback, can be negative value.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{qnotice|Coord and Delay is multiplied by 128.}}&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{qnotice|In CS argument #10 is always equal to 0.}}&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*See [http://www.amxmodx.org/funcwiki.php?go=module&amp;amp;id=4#const_teams CS Team Constants] for team indeces constants list.&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl1msg|ClCorpse|string, long, long, long, coord, coord, coord, long, byte, byte, byte, byte}}&lt;br /&gt;
{{hl1msg|string|ModelName}}&lt;br /&gt;
{{hl1msg|long|CoordX}}&lt;br /&gt;
{{hl1msg|long|CoordY}}&lt;br /&gt;
{{hl1msg|long|CoordZ}}&lt;br /&gt;
{{hl1msg|coord|Angle0}}&lt;br /&gt;
{{hl1msg|coord|Angle1}}&lt;br /&gt;
{{hl1msg|coord|Angle2}}&lt;br /&gt;
{{hl1msg|long|Delay}}&lt;br /&gt;
{{hl1msg|byte|Sequence}}&lt;br /&gt;
{{hl1msg|byte|ClassID?}}&lt;br /&gt;
{{hl1msg|byte|TeamID}}&lt;br /&gt;
{{hl1msg|byte|PlayerID}}&lt;br /&gt;
{{end-hl1msg}}&lt;br /&gt;
&lt;br /&gt;
= Crosshair =&lt;br /&gt;
Draws/removes a crosshair. If Flag is set to 1 the crosshair will be drawn.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{qnotice|This crossair looks not like the regular one but like the one that is drawn in the spectator mode.}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl1msg|Crosshair|byte}}&lt;br /&gt;
{{hl1msg|byte|Flag}}&lt;br /&gt;
{{end-hl1msg}}&lt;br /&gt;
&lt;br /&gt;
= CurWeapon =&lt;br /&gt;
Updates the clip ammo number and weapon's corresponding ammo type icon on the [[HUD]].&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{qnotice|See [[CS Weapons Information]] for more information.}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl1msg|CurWeapon|byte, byte, byte}}&lt;br /&gt;
{{hl1msg|byte|IsActive}}&lt;br /&gt;
{{hl1msg|byte|WeaponID}}&lt;br /&gt;
{{hl1msg|byte|ClipAmmo}}&lt;br /&gt;
{{end-hl1msg}}&lt;br /&gt;
&lt;br /&gt;
= CZCareer =&lt;br /&gt;
Supplies certain updates to the player regarding Condition Zero singleplayer missions.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{qnotice|See the [[CZCareer]] page for more information.}}&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{qnotice|Using an invalid type has no repercussions whatsoever. Therefore, you can use this to make your own custom communications (you can send any number of arguments of any type after the first string).}}&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{qnotice|The Type argument is case-sensitive.}}&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{qnotice|This event does nothing in CS and CZ multiplayer.}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl1msg|CZCareer|string,*}}&lt;br /&gt;
{{hl1msg|string|Type}}&lt;br /&gt;
{{hl1msg|*|Parameters}}&lt;br /&gt;
{{end-hl1msg}}&lt;br /&gt;
&lt;br /&gt;
= CZCareerHUD =&lt;br /&gt;
Displays certain [[HUD]] elements regarding Condition Zero singleplayer missions.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{qnotice|See the [[CZCareerHUD]] page for more information.}}&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{qnotice|Using an invalid type has no repercussions whatsoever. Therefore, you can use this to make your own custom communications (you can send any number of arguments of any type after the first string).}}&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{qnotice|The Type argument is case-sensitive.}}&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{qnotice|This event has some limited functionality in CS and CZ multiplayer (albeit better in CZ).}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl1msg|CZCareerHUD|string,*}}&lt;br /&gt;
{{hl1msg|string|Type}}&lt;br /&gt;
{{hl1msg|*|Parameters}}&lt;br /&gt;
{{end-hl1msg}}&lt;br /&gt;
&lt;br /&gt;
= Damage =&lt;br /&gt;
Called when a player takes damage, to display the red locational indicators. The last three arguments is the origin of the damage inflictor or victim origin if inflictor isn't found. DamageType is a bitwise value usually consist of a single bit.&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl1msg|Damage|byte, byte, long, coord, coord, coord}}&lt;br /&gt;
{{hl1msg|byte|DamageSave}}&lt;br /&gt;
{{hl1msg|byte|DamageTake}}&lt;br /&gt;
{{hl1msg|long|DamageType}}&lt;br /&gt;
{{hl1msg|coord|CoordX}}&lt;br /&gt;
{{hl1msg|coord|CoordY}}&lt;br /&gt;
{{hl1msg|coord|CoordZ}}&lt;br /&gt;
{{end-hl1msg}}&lt;br /&gt;
&lt;br /&gt;
= DeathMsg =&lt;br /&gt;
Fired to all players (MSG_ALL or MSG_BROADCAST) to notify them of a death. This generates the [[HUD]] message the client sees in the upper right corner of their screen.&amp;lt;br&amp;gt;&lt;br /&gt;
Also prints the console text message &amp;quot;KillerName killed VictimName with TruncatedWeaponName&amp;quot; or &amp;quot;*** KillerName killed VictimName with a headshot from TruncatedWeaponName ***&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{qnotice|TruncatedWeaponName doesn't contain a &amp;quot;weapon_&amp;quot; prefix. See [[CS Weapons Information]] for more information.}}&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{qnotice|For grenade kill TruncatedWeaponName isn't &amp;quot;hegrenade&amp;quot; but &amp;quot;grenade&amp;quot;, in fact it's an actual classname of a throwed grenade.}}&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{qnotice|For KillerID it's not necessarily should be a PlayerID, it could be 0 if player dies from fall/acid/radiation/fire/etc damage/lack of oxygen or from touch to a &amp;quot;trigger_hurt&amp;quot; entity, in this case TruncatedWeaponName will be &amp;quot;worldspawn&amp;quot; and &amp;quot;trigger_hurt&amp;quot; respectively.}}&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{qnotice|For vehicle kills TruncatedWeaponName could be &amp;quot;vehicle&amp;quot;, &amp;quot;tank&amp;quot; et cetera.}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl1msg|DeathMsg|byte, byte, byte, string}}&lt;br /&gt;
{{hl1msg|byte|KillerID}}&lt;br /&gt;
{{hl1msg|byte|VictimID}}&lt;br /&gt;
{{hl1msg|byte|IsHeadshot}}&lt;br /&gt;
{{hl1msg|string|TruncatedWeaponName}}&lt;br /&gt;
{{end-hl1msg}}&lt;br /&gt;
&lt;br /&gt;
= FlashBat =&lt;br /&gt;
Updates the flashlight battery charge on the [[HUD]].&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl1msg|FlashBat|byte}}&lt;br /&gt;
{{hl1msg|byte|ChargePercents}}&lt;br /&gt;
{{end-hl1msg}}&lt;br /&gt;
&lt;br /&gt;
= Flashlight =&lt;br /&gt;
Updates the flashlight state and battery charge on the [[HUD]]. If Flag is set to 1 the flashlight [[HUD]] icon will be shown as active.&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl1msg|Flashlight|byte, byte}}&lt;br /&gt;
{{hl1msg|byte|Flag}}&lt;br /&gt;
{{hl1msg|byte|ChargePercents}}&lt;br /&gt;
{{end-hl1msg}}&lt;br /&gt;
&lt;br /&gt;
= Fog =&lt;br /&gt;
{{qnotice|mp_Fog 1 for fog in counter-strike}}&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{begin-hl1msg|Fog|byte, byte, byte}}&lt;br /&gt;
{{hl1msg|byte|FogValue}}&lt;br /&gt;
{{hl1msg|byte|FogValue}}&lt;br /&gt;
{{hl1msg|byte|Unknown}}&lt;br /&gt;
{{end-hl1msg}}&lt;br /&gt;
&lt;br /&gt;
= ForceCam =&lt;br /&gt;
Called whenever mp_forcecam or mp_forcechasecam are changed, with their new values passed. There is assumedly a third CVar that this tracks, but it is yet unknown. Note that this message doesn't actually change any of the spectating rules for the client.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{qnotice|Even if mp_forcechasecam is set to 2, it is sent by this message as 1.}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl1msg|ForceCam|byte, byte, byte}}&lt;br /&gt;
{{hl1msg|byte|ForcecamValue}}&lt;br /&gt;
{{hl1msg|byte|ForcechasecamValue}}&lt;br /&gt;
{{hl1msg|byte|Unknown}}&lt;br /&gt;
{{end-hl1msg}}&lt;br /&gt;
&lt;br /&gt;
= GameMode =&lt;br /&gt;
{{qnotice|No Information available for this message.}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl1msg|GameMode|byte}}&lt;br /&gt;
{{hl1msg|byte|Unknown}}&lt;br /&gt;
{{end-hl1msg}}&lt;br /&gt;
&lt;br /&gt;
= GameTitle =&lt;br /&gt;
{{qnotice|No Information available for this message.}}&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Geiger =&lt;br /&gt;
Notifies about radiation level through special sound signals. Distance is a distance to hazard area.&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl1msg|Geiger|byte}}&lt;br /&gt;
{{hl1msg|byte|Distance}}&lt;br /&gt;
{{end-hl1msg}}&lt;br /&gt;
&lt;br /&gt;
= Health =&lt;br /&gt;
Updates the number of health on the [[HUD]].&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl1msg|Health|byte}}&lt;br /&gt;
{{hl1msg|byte|Health}}&lt;br /&gt;
{{end-hl1msg}}&lt;br /&gt;
&lt;br /&gt;
= HideWeapon =&lt;br /&gt;
Hides the specified [[HUD]] elements.&amp;lt;br&amp;gt;&lt;br /&gt;
Flags:&lt;br /&gt;
   1   (1&amp;lt;&amp;lt;0)  -  crosshair, ammo, weapons list&lt;br /&gt;
   2   (1&amp;lt;&amp;lt;1)  -  flashlight, +&lt;br /&gt;
   4   (1&amp;lt;&amp;lt;2)  -  ALL&lt;br /&gt;
   8   (1&amp;lt;&amp;lt;3)  -  radar, health, armor, +&lt;br /&gt;
  16   (1&amp;lt;&amp;lt;4)  -  timer, +&lt;br /&gt;
  32   (1&amp;lt;&amp;lt;5)  -  money, +&lt;br /&gt;
  64   (1&amp;lt;&amp;lt;6)  -  crosshair&lt;br /&gt;
 128   (1&amp;lt;&amp;lt;7)  -  +&lt;br /&gt;
Symbol + mean that an additional crosshair will be drawn. That crosshair looks exactly like the one from Crosshair message.&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl1msg|HideWeapon|byte}}&lt;br /&gt;
{{hl1msg|byte|Flags}}&lt;br /&gt;
{{end-hl1msg}}&lt;br /&gt;
&lt;br /&gt;
= HLTV =&lt;br /&gt;
{{qnotice|No Information available for this message.}}&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{qnotice|On new round is fired with both arguments equal to 0.}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl1msg|HLTV|byte, byte}}&lt;br /&gt;
{{hl1msg|byte|ClientID}}&lt;br /&gt;
{{hl1msg|byte|Unknown}}&lt;br /&gt;
{{end-hl1msg}}&lt;br /&gt;
&lt;br /&gt;
= HostageK =&lt;br /&gt;
Temporarily draws a blinking red dot on the CT players' radar when a hostage is killed.&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl1msg|HostageK|byte}}&lt;br /&gt;
{{hl1msg|byte|HostageID}}&lt;br /&gt;
{{end-hl1msg}}&lt;br /&gt;
&lt;br /&gt;
= HostagePos =&lt;br /&gt;
Draws/updates the blue mark on the CT players' radar which is indicate the corresponding hostage position.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{qnotice|Is called with Flag set to 1 on player [[HUD]] full update.}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl1msg|HostagePos|byte, byte, coord, coord, coord}}&lt;br /&gt;
{{hl1msg|byte|Flag}}&lt;br /&gt;
{{hl1msg|byte|HostageID}}&lt;br /&gt;
{{hl1msg|coord|CoordX}}&lt;br /&gt;
{{hl1msg|coord|CoordY}}&lt;br /&gt;
{{hl1msg|coord|CoordZ}}&lt;br /&gt;
{{end-hl1msg}}&lt;br /&gt;
&lt;br /&gt;
= HudText =&lt;br /&gt;
{{qnotice|No Information available for this message.}}&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= HudTextArgs =&lt;br /&gt;
Prints [[HUD]] text.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{qnotice|An example of TextCode could be &amp;quot;#Hint_you_have_the_bomb&amp;quot;.}}&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{qnotice|If you have a problems with specifing the last two arguments use 1 and 0 respectively.}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl1msg|HudTextArgs|string, byte, byte}}&lt;br /&gt;
{{hl1msg|string|TextCode}}&lt;br /&gt;
{{hl1msg|byte|Unknown}}&lt;br /&gt;
{{hl1msg|byte|Unknown}}&lt;br /&gt;
{{end-hl1msg}}&lt;br /&gt;
&lt;br /&gt;
= HudTextPro =&lt;br /&gt;
{{qnotice|No Information available for this message.}}&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= InitHUD =&lt;br /&gt;
Initializes the [[HUD]].&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{qnotice|This message has no arguments.}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl1msg|InitHUD}}&lt;br /&gt;
{{end-hl1msg}}&lt;br /&gt;
&lt;br /&gt;
= ItemPickup =&lt;br /&gt;
Temporarily draws correspoding item [[HUD]] icon in the middle of the right side of the screen.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{qnotice|Draw time is depend on the ''hud_drawhistory_time'' client CVar value.}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl1msg|ItemPickup|string}}&lt;br /&gt;
{{hl1msg|string|ItemName}}&lt;br /&gt;
{{end-hl1msg}}&lt;br /&gt;
&lt;br /&gt;
= ItemStatus =&lt;br /&gt;
Notifies about carried items.&amp;lt;br&amp;gt;&lt;br /&gt;
Example of some item bits:&lt;br /&gt;
 1   (1&amp;lt;&amp;lt;0)  -  nightvision goggles&lt;br /&gt;
 2   (1&amp;lt;&amp;lt;1)  -  defusal kit&lt;br /&gt;
{{begin-hl1msg|ItemStatus|byte}}&lt;br /&gt;
{{hl1msg|byte|ItemsBitSum}}&lt;br /&gt;
{{end-hl1msg}}&lt;br /&gt;
&lt;br /&gt;
= Location =&lt;br /&gt;
{{qnotice|No Information available for this message.}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl1msg|Location|byte, string}}&lt;br /&gt;
{{hl1msg|byte|Unknown}}&lt;br /&gt;
{{hl1msg|string|Unknown}}&lt;br /&gt;
{{end-hl1msg}}&lt;br /&gt;
&lt;br /&gt;
= Money =&lt;br /&gt;
Updates the Amount of money on the [[HUD]]. If the Flag is 1, the additional new-old [[HUD]] money amount difference will be also displayed.&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl1msg|Money|long, byte}}&lt;br /&gt;
{{hl1msg|long|Amount}}&lt;br /&gt;
{{hl1msg|byte|Flag}}&lt;br /&gt;
{{end-hl1msg}}&lt;br /&gt;
&lt;br /&gt;
= MOTD =&lt;br /&gt;
Displays MOTD window.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{qnotice|Max. Text length is 60. Large MOTD is sent in multiple messages. For the message that is send a last MOTD part the Flag will be set to 1 and 0 otherwise.}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl1msg|MOTD|byte, string}}&lt;br /&gt;
{{hl1msg|byte|Flag}}&lt;br /&gt;
{{hl1msg|string|Text}}&lt;br /&gt;
{{end-hl1msg}}&lt;br /&gt;
&lt;br /&gt;
= NVGToggle =&lt;br /&gt;
Toggles night vision mode. For Flag: 1 is on, 0 is off.&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl1msg|NVGToggle|byte}}&lt;br /&gt;
{{hl1msg|byte|Flag}}&lt;br /&gt;
{{end-hl1msg}}&lt;br /&gt;
&lt;br /&gt;
= Radar =&lt;br /&gt;
Draws/updates the dot on the [[HUD]] radar which is indicate the given player position.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{qnotice|Works for teammates only.}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl1msg|Radar|byte, coord, coord, coord}}&lt;br /&gt;
{{hl1msg|byte|PlayerID}}&lt;br /&gt;
{{hl1msg|coord|CoordX}}&lt;br /&gt;
{{hl1msg|coord|CoordY}}&lt;br /&gt;
{{hl1msg|coord|CoordZ}}&lt;br /&gt;
{{end-hl1msg}}&lt;br /&gt;
&lt;br /&gt;
= ReceiveW =&lt;br /&gt;
{{qnotice|No Information available for this message.}}&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= ReloadSound =&lt;br /&gt;
{{qnotice|No Information available for this message.}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl1msg|ReloadSound|byte, byte}}&lt;br /&gt;
{{hl1msg|byte|Unknown}}&lt;br /&gt;
{{hl1msg|byte|Unknown}}&lt;br /&gt;
{{end-hl1msg}}&lt;br /&gt;
&lt;br /&gt;
= ReqState =&lt;br /&gt;
{{qnotice|No Information available for this message.}}&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{qnotice|This message has no arguments.}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl1msg|ReqState}}&lt;br /&gt;
{{end-hl1msg}}&lt;br /&gt;
&lt;br /&gt;
= ResetHUD =&lt;br /&gt;
Resets the [[HUD]].&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{qnotice|This message has no arguments.}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl1msg|ResetHUD}}&lt;br /&gt;
{{end-hl1msg}}&lt;br /&gt;
&lt;br /&gt;
= RoundTime =&lt;br /&gt;
Updates the round timer on the [[HUD]]. Time is in seconds.&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl1msg|RoundTime|short}}&lt;br /&gt;
{{hl1msg|short|Time}}&lt;br /&gt;
{{end-hl1msg}}&lt;br /&gt;
&lt;br /&gt;
= SayText =&lt;br /&gt;
Prints say [[HUD]] text. Second argument can be a predefined string or a custom one. In the last case the last two arguments isn't required.&amp;lt;br&amp;gt;&lt;br /&gt;
An examples of a predifined Counter-Strike string values: #Cstrike_Chat_AllDead, #Cstrike_Name_Change&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{qnotice|For #Cstrike_Name_Change String2 is an old name and String3 is a new name.}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl1msg|SayText|byte, string, string, string}}&lt;br /&gt;
{{hl1msg|byte|SenderID}}&lt;br /&gt;
{{hl1msg|string|String1}}&lt;br /&gt;
{{hl1msg|string|String2}}&lt;br /&gt;
{{hl1msg|string|String3}}&lt;br /&gt;
{{end-hl1msg}}&lt;br /&gt;
&lt;br /&gt;
= Scenario =&lt;br /&gt;
If Active is 0, this display will be hidden. If Active is 1, displays Sprite (valid names listed in sprites/hud.txt) to the right of the round timer with an alpha value of Alpha (100-255). If FlashRate is nonzero, then the sprite will flash from the given alpha to an alpha of 100, at a rate of FlashRate (measured in ???). This is used by CZ to display how many hostages remain unrescued, and also to display the ticking bomb when it is planted.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{qnotice|If Active is 0, don't send any other arguments afterwards. Also, you don't need to send either short if FlashRate is just going to be 0.}}&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[image:Cs_scenario_msg.jpg|frame|right|Scenario message in CS, using the following parameters: 1, d_mp5navy, 150]]&lt;br /&gt;
&lt;br /&gt;
{{qnotice|Works in both CS and CZ!}}&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{qnotice|In CZ (and possibly CS), if someone respawns after the bomb has been planted, their Scenario event will not work at all until the next round.}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl1msg|Scenario|byte, string, byte, short, short}}&lt;br /&gt;
{{hl1msg|byte|Active}}&lt;br /&gt;
{{hl1msg|string|Sprite}}&lt;br /&gt;
{{hl1msg|byte|Alpha}}&lt;br /&gt;
{{hl1msg|short|FlashRate}}&lt;br /&gt;
{{hl1msg|short|Unknown}}&lt;br /&gt;
{{end-hl1msg}}&lt;br /&gt;
&lt;br /&gt;
= ScoreAttrib =&lt;br /&gt;
Updates the scoreboard's attribute for the specified player. For the 2nd argument, 0 is nothing, (1&amp;lt;&amp;lt;0) i.e. 1 is dead, (1&amp;lt;&amp;lt;1) i.e. 2 is bomb, (1&amp;lt;&amp;lt;2) i.e. 4 is VIP.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{qnotice|Flags is a bitwise value so if VIP player is dying with the bomb the Flags will be 7 i.e. bit sum of all flags.}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl1msg|ScoreAttrib|byte, byte}}&lt;br /&gt;
{{hl1msg|byte|PlayerID}}&lt;br /&gt;
{{hl1msg|byte|Flags}}&lt;br /&gt;
{{end-hl1msg}}&lt;br /&gt;
&lt;br /&gt;
= ScoreInfo =&lt;br /&gt;
Updates the scoreboard with the given player's Frags and Deaths.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{qnotice|In CS the 4th argument is always equal to 0.}}&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*See [http://www.amxmodx.org/funcwiki.php?go=module&amp;amp;id=4#const_teams CS Team Constants] for team indeces constants list.&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl1msg|ScoreInfo|byte, short, short, short, short}}&lt;br /&gt;
{{hl1msg|byte|PlayerID}}&lt;br /&gt;
{{hl1msg|short|Frags}}&lt;br /&gt;
{{hl1msg|short|Deaths}}&lt;br /&gt;
{{hl1msg|short|ClassID?}}&lt;br /&gt;
{{hl1msg|short|TeamID}}&lt;br /&gt;
{{end-hl1msg}}&lt;br /&gt;
&lt;br /&gt;
= ScreenFade =&lt;br /&gt;
Fades the screen.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{qnotice|Duration and HoldTime is in special units. 1 second is equal to (1&amp;lt;&amp;lt;12) i.e. 4096 units.}}&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Flags (from HLSDK):&lt;br /&gt;
 FFADE_IN         0x0000 // Just here so we don't pass 0 into the function&lt;br /&gt;
 FFADE_OUT        0x0001 // Fade out (not in)&lt;br /&gt;
 FFADE_MODULATE   0x0002 // Modulate (don't blend)&lt;br /&gt;
 FFADE_STAYOUT    0x0004 // ignores the duration, stays faded out until new ScreenFade message received&lt;br /&gt;
{{begin-hl1msg|ScreenFade|short, short, short, byte, byte, byte, byte}}&lt;br /&gt;
{{hl1msg|short|Duration}}&lt;br /&gt;
{{hl1msg|short|HoldTime}}&lt;br /&gt;
{{hl1msg|short|Flags}}&lt;br /&gt;
{{hl1msg|byte|ColorR}}&lt;br /&gt;
{{hl1msg|byte|ColorG}}&lt;br /&gt;
{{hl1msg|byte|ColorB}}&lt;br /&gt;
{{hl1msg|byte|Alpha}}&lt;br /&gt;
{{end-hl1msg}}&lt;br /&gt;
&lt;br /&gt;
= ScreenShake =&lt;br /&gt;
Shakes the screen.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{qnotice|All arguments is in special units. 1 second is equal to (1&amp;lt;&amp;lt;12) i.e. 4096 units.}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl1msg|ScreenShake|short, short, short}}&lt;br /&gt;
{{hl1msg|short|Amplitude}}&lt;br /&gt;
{{hl1msg|short|Duration}}&lt;br /&gt;
{{hl1msg|short|Frequency}}&lt;br /&gt;
{{end-hl1msg}}&lt;br /&gt;
&lt;br /&gt;
= SendAudio =&lt;br /&gt;
Plays the specified audio. An example of AudioCode could be &amp;quot;%!MRAD_rounddraw&amp;quot;.&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl1msg|SendAudio|byte, string, short}}&lt;br /&gt;
{{hl1msg|byte|SenderID}}&lt;br /&gt;
{{hl1msg|string|AudioCode}}&lt;br /&gt;
{{hl1msg|short|Pitch}}&lt;br /&gt;
{{end-hl1msg}}&lt;br /&gt;
&lt;br /&gt;
= ServerName =&lt;br /&gt;
Sends a server name to a client.&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl1msg|ServerName|string}}&lt;br /&gt;
{{hl1msg|string|ServerName}}&lt;br /&gt;
{{end-hl1msg}}&lt;br /&gt;
&lt;br /&gt;
= SetFOV =&lt;br /&gt;
Sets the specified field of view.&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl1msg|SetFOV|byte}}&lt;br /&gt;
{{hl1msg|byte|Degrees}}&lt;br /&gt;
{{end-hl1msg}}&lt;br /&gt;
&lt;br /&gt;
= ShadowIdx =&lt;br /&gt;
{{qnotice|No Information available for this message.}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl1msg|ShadowIdx|long}}&lt;br /&gt;
{{hl1msg|long|Unknown}}&lt;br /&gt;
{{end-hl1msg}}&lt;br /&gt;
&lt;br /&gt;
= ShowMenu =&lt;br /&gt;
Displays a &amp;quot;menu&amp;quot; to a player (text on the left side of the screen). Acts like AMXX's show_menu (in fact, this is how AMXX shows a menu).&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{qnotice|Multipart should be 1 if your menu takes up multiple messages (i.e.: string is too big to fit into one). On the final message, Multipart should be 0.}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl1msg|ShowMenu|short, char, byte, string}}&lt;br /&gt;
{{hl1msg|short|KeysBitSum}}&lt;br /&gt;
{{hl1msg|char|Time}}&lt;br /&gt;
{{hl1msg|byte|Multipart}}&lt;br /&gt;
{{hl1msg|string|Text}}&lt;br /&gt;
{{end-hl1msg}}&lt;br /&gt;
&lt;br /&gt;
= ShowTimer =&lt;br /&gt;
Forces the round timer displaying.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{qnotice|This message has no arguments.}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl1msg|ShowTimer}}&lt;br /&gt;
{{end-hl1msg}}&lt;br /&gt;
&lt;br /&gt;
= SpecHealth =&lt;br /&gt;
{{qnotice|No Information available for this message.}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl1msg|SpecHealth|byte}}&lt;br /&gt;
{{hl1msg|byte|Health?}}&lt;br /&gt;
{{end-hl1msg}}&lt;br /&gt;
&lt;br /&gt;
= SpecHealth2 =&lt;br /&gt;
Updates the observer's screen with a name and health of the given player.&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl1msg|SpecHealth2|byte, byte}}&lt;br /&gt;
{{hl1msg|byte|Health}}&lt;br /&gt;
{{hl1msg|byte|PlayerID}}&lt;br /&gt;
{{end-hl1msg}}&lt;br /&gt;
&lt;br /&gt;
= Spectator =&lt;br /&gt;
Called when player becomes an observer/spectator.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{qnotice|On join to Spectators usually is fired twice in a row.}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl1msg|Spectator|byte, byte}}&lt;br /&gt;
{{hl1msg|byte|ClientID}}&lt;br /&gt;
{{hl1msg|byte|Unknown}}&lt;br /&gt;
{{end-hl1msg}}&lt;br /&gt;
&lt;br /&gt;
= StatusIcon =&lt;br /&gt;
Draws/removes the specified status [[HUD]] icon. For Status, 0 is Hide Icon, 1 is Show Icon, 2 is Flash Icon. Color arguments are optional and is required only if Status aren't equal to 0.&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl1msg|StatusIcon|byte, string, byte, byte, byte}}&lt;br /&gt;
{{hl1msg|byte|Status}}&lt;br /&gt;
{{hl1msg|string|SpriteName}}&lt;br /&gt;
{{hl1msg|byte|ColorR}}&lt;br /&gt;
{{hl1msg|byte|ColorG}}&lt;br /&gt;
{{hl1msg|byte|ColorB}}&lt;br /&gt;
{{end-hl1msg}}&lt;br /&gt;
&lt;br /&gt;
= StatusValue =&lt;br /&gt;
Sends/updates the status values. For the Flag 1 the Value is TeamRelation, for 2 is PlayerID, for 3 is Health. For TeamRelation, 1 is Teammate player, 2 is Non-Teammate player, 3 is Hostage. If TeamRelation is Hostage, PlayerID will be 0 or will be not sent at all.&amp;lt;br&amp;gt;&lt;br /&gt;
Usually is fired as a triple message, for example:&lt;br /&gt;
 {1,  2}  -  non-teammate player&lt;br /&gt;
 {2, 17}  -  player index is 17&lt;br /&gt;
 {3, 59}  -  player health is 59&lt;br /&gt;
{{begin-hl1msg|StatusValue|byte, short}}&lt;br /&gt;
{{hl1msg|byte|Flag}}&lt;br /&gt;
{{hl1msg|short|Value}}&lt;br /&gt;
{{end-hl1msg}}&lt;br /&gt;
&lt;br /&gt;
= StatusText =&lt;br /&gt;
Specifies the status text format.&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl1msg|StatusText|byte, string}}&lt;br /&gt;
{{hl1msg|byte|Unknown}}&lt;br /&gt;
{{hl1msg|string|Text}}&lt;br /&gt;
{{end-hl1msg}}&lt;br /&gt;
&lt;br /&gt;
= TaskTime =&lt;br /&gt;
Displays a secondary timer above the round timer. Used for Condition Zero singleplayer missions.&amp;lt;br&amp;gt;&lt;br /&gt;
If Time is -1, timer dissappears. If Time is any other negative value, it is displayed as green instead of yellow, and considered positive.&amp;lt;br&amp;gt;&lt;br /&gt;
If Active is true, timer counts down. Otherwise, it is paused.&amp;lt;br&amp;gt;If Fade is above zero, the timer will slowly fade out after that many seconds have passed (even if the timer is inactive).&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{qnotice|This event can only be used on missions that have an objective requiring a secondary timer!}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl1msg|TaskTime|short, byte, byte}}&lt;br /&gt;
{{hl1msg|short|Time}}&lt;br /&gt;
{{hl1msg|byte|Active}}&lt;br /&gt;
{{hl1msg|byte|Fade}}&lt;br /&gt;
{{end-hl1msg}}&lt;br /&gt;
&lt;br /&gt;
= TeamInfo =&lt;br /&gt;
Sets the team information for the given player.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{qnotice|In CS TeamName is either &amp;quot;UNASSIGNED&amp;quot;, &amp;quot;TERRORIST&amp;quot;, &amp;quot;CT&amp;quot; or &amp;quot;SPECTATOR&amp;quot;.}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl1msg|TeamInfo|byte, string}}&lt;br /&gt;
{{hl1msg|byte|PlayerID}}&lt;br /&gt;
{{hl1msg|string|TeamName}}&lt;br /&gt;
{{end-hl1msg}}&lt;br /&gt;
&lt;br /&gt;
= TeamScore =&lt;br /&gt;
Updates the team score on the score board.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{qnotice|In CS TeamName is either &amp;quot;TERRORIST&amp;quot; or &amp;quot;CT&amp;quot;.}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl1msg|TeamScore|string, short}}&lt;br /&gt;
{{hl1msg|string|TeamName}}&lt;br /&gt;
{{hl1msg|short|Score}}&lt;br /&gt;
{{end-hl1msg}}&lt;br /&gt;
&lt;br /&gt;
= TextMsg =&lt;br /&gt;
Prints a cutom/or predefined text message.&amp;lt;br&amp;gt;&lt;br /&gt;
There does not necessarily have to be a total of 6 arguments, there could be as little as 2. For example you can send a message with the following:&lt;br /&gt;
 Arg1: 1&lt;br /&gt;
 Arg2: #Game_join_ct&lt;br /&gt;
 Arg3: Pimp Daddy&lt;br /&gt;
{{begin-hl1msg|TextMsg|byte, string, string, string, string, string}}&lt;br /&gt;
{{hl1msg|byte|DestinationType}}&lt;br /&gt;
{{hl1msg|string|Message}}&lt;br /&gt;
{{hl1msg|string|Submsg}}&lt;br /&gt;
{{hl1msg|string|Submsg}}&lt;br /&gt;
{{hl1msg|string|Submsg}}&lt;br /&gt;
{{hl1msg|string|Submsg}}&lt;br /&gt;
{{end-hl1msg}}&lt;br /&gt;
&lt;br /&gt;
= Train =&lt;br /&gt;
Displays the speed bar used for controlling a train.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{qnotice|Speed is as follows: 0 (disable display), 1 (reverse), 2 (neutral), 3 (slow speed), 4 (medium speed), 5 (maximum speed)}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl1msg|Train|byte}}&lt;br /&gt;
{{hl1msg|byte|Speed}}&lt;br /&gt;
{{end-hl1msg}}&lt;br /&gt;
&lt;br /&gt;
= TutorClose =&lt;br /&gt;
Closes all CZ-style tutor popups.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= TutorLine =&lt;br /&gt;
{{qnotice|No Information available for this message.}}&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= TutorState =&lt;br /&gt;
{{qnotice|No Information available for this message.}}&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= TutorText =&lt;br /&gt;
Used to display a CZ-style tutor popup.&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl1msg|TutorText|string, byte, short, short, short}}&lt;br /&gt;
{{hl1msg|string|Unknown}}&lt;br /&gt;
{{hl1msg|byte|Unknown}}&lt;br /&gt;
{{hl1msg|short|Unknown}}&lt;br /&gt;
{{hl1msg|short|Unknown}}&lt;br /&gt;
{{hl1msg|short|Unknown}}&lt;br /&gt;
{{end-hl1msg}}&lt;br /&gt;
&lt;br /&gt;
= ViewMode =&lt;br /&gt;
{{qnotice|No Information available for this message (HLSDK says this switches to first-person view, but it doesn't seem to function as so).}}&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{qnotice|This message has no arguments.}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl1msg|ViewMode}}&lt;br /&gt;
{{end-hl1msg}}&lt;br /&gt;
&lt;br /&gt;
= VGUIMenu =&lt;br /&gt;
Displays a predefined VGUI menu.&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl1msg|VGUIMenu|byte, short, char, byte, string}}&lt;br /&gt;
{{hl1msg|byte|MenuID}}&lt;br /&gt;
{{hl1msg|short|KeysBitSum}}&lt;br /&gt;
{{hl1msg|char|Time?}}&lt;br /&gt;
{{hl1msg|byte|Multipart?}}&lt;br /&gt;
{{hl1msg|string|Name?}}&lt;br /&gt;
{{end-hl1msg}}&lt;br /&gt;
&lt;br /&gt;
= VoiceMask =&lt;br /&gt;
Used to tell a client who he can hear over the microphone.&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl1msg|VoiceMask|long, long}}&lt;br /&gt;
{{hl1msg|long|AudiblePlayersIndexBitSum}}&lt;br /&gt;
{{hl1msg|long|ServerBannedPlayersIndexBitSum}}&lt;br /&gt;
{{end-hl1msg}}&lt;br /&gt;
&lt;br /&gt;
= WeaponList =&lt;br /&gt;
Configures the [[HUD]] weapons list.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{qnotice|Fired on map initialization.}}&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{qnotice|SlotID starts from 0.}}&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Flags (from HLSDK):&lt;br /&gt;
 ITEM_FLAG_SELECTONEMPTY       1&lt;br /&gt;
 ITEM_FLAG_NOAUTORELOAD        2&lt;br /&gt;
 ITEM_FLAG_NOAUTOSWITCHEMPTY   4&lt;br /&gt;
 ITEM_FLAG_LIMITINWORLD        8&lt;br /&gt;
 ITEM_FLAG_EXHAUSTIBLE        16 // A player can totally exhaust their ammo supply and lose this weapon.&lt;br /&gt;
{{qnotice|See [[CS Weapons Information]] for more information.}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl1msg|WeaponList|string, byte, byte, byte, byte, byte, byte, byte, byte}}&lt;br /&gt;
{{hl1msg|string|WeaponName}}&lt;br /&gt;
{{hl1msg|byte|PrimaryAmmoID}}&lt;br /&gt;
{{hl1msg|byte|PrimaryAmmoMaxAmount}}&lt;br /&gt;
{{hl1msg|byte|SecondaryAmmoID}}&lt;br /&gt;
{{hl1msg|byte|SecondaryAmmoMaxAmount}}&lt;br /&gt;
{{hl1msg|byte|SlotID}}&lt;br /&gt;
{{hl1msg|byte|NumberInSlot}}&lt;br /&gt;
{{hl1msg|byte|WeaponID}}&lt;br /&gt;
{{hl1msg|byte|Flags}}&lt;br /&gt;
{{end-hl1msg}}&lt;br /&gt;
&lt;br /&gt;
= WeapPickup =&lt;br /&gt;
Temporarily draws correspoding weapon [[HUD]] icon in the middle of the right side of the screen.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{qnotice|Draw time is depend on the ''hud_drawhistory_time'' client CVar value.}}&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{qnotice|Is fired right before weapon is picked up (notice ''&amp;quot;before&amp;quot;'').}}&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{qnotice|See [[CS Weapons Information]] for more information.}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl1msg|WeapPickup|byte}}&lt;br /&gt;
{{hl1msg|byte|WeaponID}}&lt;br /&gt;
{{end-hl1msg}}&lt;/div&gt;</summary>
		<author><name>VEN</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.alliedmods.net/index.php?title=Half-Life_1_Game_Events&amp;diff=6357</id>
		<title>Half-Life 1 Game Events</title>
		<link rel="alternate" type="text/html" href="https://wiki.alliedmods.net/index.php?title=Half-Life_1_Game_Events&amp;diff=6357"/>
		<updated>2008-10-19T08:39:56Z</updated>

		<summary type="html">&lt;p&gt;VEN: /* ClCorpse */ - info about coord and delay (*128)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Half-Life 1]]&lt;br /&gt;
[[Category:Scripting (AMX Mod X)]]&lt;br /&gt;
&lt;br /&gt;
= Introduction =&lt;br /&gt;
&lt;br /&gt;
In [[AMX Mod X]] you are able to hook in-game messages/events with [http://www.amxmodx.org/funcwiki.php?search=register_message&amp;amp;go=search register_message] / [http://www.amxmodx.org/funcwiki.php?go=func&amp;amp;id=26 register_event]. Here are the list of messages/events and their arguments which can be read with [http://www.amxmodx.org/funcwiki.php?search=get_msg_arg_&amp;amp;go=search get_msg_arg_*] / [http://www.amxmodx.org/funcwiki.php?go=func&amp;amp;id=132 read_data].&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
*See the [[Advanced Scripting (AMX Mod X)#Events.2FMessages|Advanced Scripting]] article for more on events and messages.&amp;lt;br&amp;gt;&lt;br /&gt;
*See messages.inc and message_const.inc from amxmodx/scriptong/include folder or [http://www.amxmodx.org/funcwiki.php?go=inc&amp;amp;id=47 Messaging functions] and [http://www.amxmodx.org/funcwiki.php?go=inc&amp;amp;id=48 Message constants] for full messages control including blocking, argument alteration and much more.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= ADStop =&lt;br /&gt;
{{qnotice|No Information available for this message.}}&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{qnotice|This message has no arguments.}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl1msg|ADStop}}&lt;br /&gt;
{{end-hl1msg}}&lt;br /&gt;
&lt;br /&gt;
= AllowSpec =&lt;br /&gt;
Changes whether or not &amp;quot;SPECTATE&amp;quot; appears on the change team menu. Called whenever the allow_spectators CVar is changed, with its new value sent as the byte.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{qnotice|This changes how the change team menu appears, but spectating functionality is based off of the actual CVar value.}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl1msg|AllowSpec|byte}}&lt;br /&gt;
{{hl1msg|byte|Allowed}}&lt;br /&gt;
{{end-hl1msg}}&lt;br /&gt;
&lt;br /&gt;
= AmmoPickup =&lt;br /&gt;
Temporarily draws [[HUD]] ammo amount and correspoding ammo [[HUD]] icon in the middle of the right side of the screen.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{qnotice|Draw time is depend on the ''hud_drawhistory_time'' client CVar value.}}&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{qnotice|See [[CS Weapons Information]] for more information.}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl1msg|AmmoPickup|byte, byte}}&lt;br /&gt;
{{hl1msg|byte|AmmoID}}&lt;br /&gt;
{{hl1msg|byte|Ammount}}&lt;br /&gt;
{{end-hl1msg}}&lt;br /&gt;
&lt;br /&gt;
= AmmoX =&lt;br /&gt;
Updates the green bar indicator in the [[HUD]] weapons list. Also updates [[HUD]] backpack ammo number in the lower right corner of the screen in case the given ammo type are compatible with the current weapon.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{qnotice|See [[CS Weapons Information]] for more information.}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl1msg|AmmoX|byte, byte}}&lt;br /&gt;
{{hl1msg|byte|AmmoID}}&lt;br /&gt;
{{hl1msg|byte|Ammount}}&lt;br /&gt;
{{end-hl1msg}}&lt;br /&gt;
&lt;br /&gt;
= ArmorType =&lt;br /&gt;
Draws/removes helmet [[HUD]] icon. If flag is set to 1 the helmet [[HUD]] icon will be drawn (located right on the armor icon).&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl1msg|ArmorType|byte}}&lt;br /&gt;
{{hl1msg|byte|Flag}}&lt;br /&gt;
{{end-hl1msg}}&lt;br /&gt;
&lt;br /&gt;
= BarTime =&lt;br /&gt;
Draws a [[HUD]] progress bar which is filled from 0% to 100% for the time Duration seconds. Once the bar is fully filled it will be removed from the screen automatically.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{qnotice|Set Duration to 0 to hide the bar.}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl1msg|BarTime|short}}&lt;br /&gt;
{{hl1msg|short|Duration}}&lt;br /&gt;
{{end-hl1msg}}&lt;br /&gt;
&lt;br /&gt;
= BarTime2 =&lt;br /&gt;
The same as BarTime but StartPercents is specify how many per cents of the bar are (already) filled.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{qnotice|Display time can be calculated with this formula: ''(1 - (StartPercents / 100)) / Duration''}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl1msg|BarTime2|short, short}}&lt;br /&gt;
{{hl1msg|short|Duration}}&lt;br /&gt;
{{hl1msg|short|StartPercents}}&lt;br /&gt;
{{end-hl1msg}}&lt;br /&gt;
&lt;br /&gt;
= Battery =&lt;br /&gt;
Updates the icon and the number of armor on the [[HUD]].&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl1msg|Battery|short}}&lt;br /&gt;
{{hl1msg|short|Armor}}&lt;br /&gt;
{{end-hl1msg}}&lt;br /&gt;
&lt;br /&gt;
= BlinkAcct =&lt;br /&gt;
Makes a player's money display flash rapidly, until it flashes a total of BlinkAmt times.&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl1msg|BlinkAcct|byte}}&lt;br /&gt;
{{hl1msg|byte|BlinkAmt}}&lt;br /&gt;
{{end-hl1msg}}&lt;br /&gt;
&lt;br /&gt;
= BombDrop =&lt;br /&gt;
The first three arguments are the origin of the dropped bomb. The last argument is set to 1 if the bomb has been planted. It is 0 if the bomb was dropped due to voluntary dropping or death/disconnect. Setting the last argument 1, will also trigger the round timer to hide. It also will show the dropped bomb on the Terrorist team's radar in the location specified by the first three arguments.&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl1msg|BombDrop|coord, coord, coord, byte}}&lt;br /&gt;
{{hl1msg|coord|CoordX}}&lt;br /&gt;
{{hl1msg|coord|CoordY}}&lt;br /&gt;
{{hl1msg|coord|CoordZ}}&lt;br /&gt;
{{hl1msg|byte|Flag}}&lt;br /&gt;
{{end-hl1msg}}&lt;br /&gt;
&lt;br /&gt;
= BombPickup =&lt;br /&gt;
This message just tells the game that the bomb has been picked up. It will cause the dropped/planted bomb to disappear from the Terrorist team's radar.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{qnotice|This message has no arguments.}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl1msg|BombPickup}}&lt;br /&gt;
{{end-hl1msg}}&lt;br /&gt;
&lt;br /&gt;
= BotProgress =&lt;br /&gt;
Used by CZ's bots when learning a new map. Displays a progress bar in the middle of the screen, with some header text. The bar doesn't move, and you can't do anything while the bar is displayed. This is a different style of progress bar than from the BarTime event. This really doesn't display well in CS.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{qnotice|Flag can be 0 (update bar), 1 (create new bar), or 2 (remove bar). When using flag 0, send all arguments. When using flag 1, send only Flag and Header. When using flag 2, send only Flag.}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl1msg|BotProgress|byte, byte, string}}&lt;br /&gt;
{{hl1msg|byte|Flag}}&lt;br /&gt;
{{hl1msg|byte|Progress}}&lt;br /&gt;
{{hl1msg|string|Header}}&lt;br /&gt;
{{end-hl1msg}}&lt;br /&gt;
&lt;br /&gt;
= BotVoice =&lt;br /&gt;
Displays (or hides) the voice icon above a user's head and the talking icon on the right side of the screen. This is called by CZ for bots; it's not called by regular players, although you &amp;lt;i&amp;gt;can&amp;lt;/i&amp;gt; specify a regular player (non-bot) for the PlayerIndex. Status is 1 for talking, or 0 for not talking.&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl1msg|BotVoice|byte, byte}}&lt;br /&gt;
{{hl1msg|byte|Status}}&lt;br /&gt;
{{hl1msg|byte|PlayerIndex}}&lt;br /&gt;
{{end-hl1msg}}&lt;br /&gt;
&lt;br /&gt;
= Brass =&lt;br /&gt;
Creates a brass shell. Used, for example, by the AWP, after firing.&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl1msg|Brass|byte, coord, coord, coord, coord, coord, coord, coord, coord, coord, angle, short, byte, byte, byte}}&lt;br /&gt;
{{hl1msg|byte|Unknown}}&lt;br /&gt;
{{hl1msg|coord|StartX}}&lt;br /&gt;
{{hl1msg|coord|StartY}}&lt;br /&gt;
{{hl1msg|coord|StartZ}}&lt;br /&gt;
{{hl1msg|coord|VelocityX?}}&lt;br /&gt;
{{hl1msg|coord|VelocityY?}}&lt;br /&gt;
{{hl1msg|coord|VelocityZ?}}&lt;br /&gt;
{{hl1msg|coord|UnknownX}}&lt;br /&gt;
{{hl1msg|coord|UnknownY}}&lt;br /&gt;
{{hl1msg|coord|UnknownZ}}&lt;br /&gt;
{{hl1msg|angle|Life?}}&lt;br /&gt;
{{hl1msg|short|Model?}}&lt;br /&gt;
{{hl1msg|byte|Unknown}}&lt;br /&gt;
{{hl1msg|byte|Unknown}}&lt;br /&gt;
{{hl1msg|byte|Unknown}}&lt;br /&gt;
{{end-hl1msg}}&lt;br /&gt;
&lt;br /&gt;
= BuyClose =&lt;br /&gt;
Forces the buy menu to close. This is not called when the player closes the buy menu by himself; it's only called when the game forces him to do so (ie: he walks outside of the buy zone, gets killed, etcetera).&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{qnotice|This message has no arguments.}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl1msg|BuyClose}}&lt;br /&gt;
{{end-hl1msg}}&lt;br /&gt;
&lt;br /&gt;
= ClCorpse =&lt;br /&gt;
Spawns a player's corpse. ModelName is the player's model name, for example: &amp;quot;leet&amp;quot;. Delay is a delay before animation plaback, can be negative value.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{qnotice|Coord and Delay == (default units) * 128.}}&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{qnotice|In CS argument #10 is always equal to 0.}}&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*See [http://www.amxmodx.org/funcwiki.php?go=module&amp;amp;id=4#const_teams CS Team Constants] for team indeces constants list.&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl1msg|ClCorpse|string, long, long, long, coord, coord, coord, long, byte, byte, byte, byte}}&lt;br /&gt;
{{hl1msg|string|ModelName}}&lt;br /&gt;
{{hl1msg|long|CoordX}}&lt;br /&gt;
{{hl1msg|long|CoordY}}&lt;br /&gt;
{{hl1msg|long|CoordZ}}&lt;br /&gt;
{{hl1msg|coord|Angle0}}&lt;br /&gt;
{{hl1msg|coord|Angle1}}&lt;br /&gt;
{{hl1msg|coord|Angle2}}&lt;br /&gt;
{{hl1msg|long|Delay}}&lt;br /&gt;
{{hl1msg|byte|Sequence}}&lt;br /&gt;
{{hl1msg|byte|ClassID?}}&lt;br /&gt;
{{hl1msg|byte|TeamID}}&lt;br /&gt;
{{hl1msg|byte|PlayerID}}&lt;br /&gt;
{{end-hl1msg}}&lt;br /&gt;
&lt;br /&gt;
= Crosshair =&lt;br /&gt;
Draws/removes a crosshair. If Flag is set to 1 the crosshair will be drawn.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{qnotice|This crossair looks not like the regular one but like the one that is drawn in the spectator mode.}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl1msg|Crosshair|byte}}&lt;br /&gt;
{{hl1msg|byte|Flag}}&lt;br /&gt;
{{end-hl1msg}}&lt;br /&gt;
&lt;br /&gt;
= CurWeapon =&lt;br /&gt;
Updates the clip ammo number and weapon's corresponding ammo type icon on the [[HUD]].&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{qnotice|See [[CS Weapons Information]] for more information.}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl1msg|CurWeapon|byte, byte, byte}}&lt;br /&gt;
{{hl1msg|byte|IsActive}}&lt;br /&gt;
{{hl1msg|byte|WeaponID}}&lt;br /&gt;
{{hl1msg|byte|ClipAmmo}}&lt;br /&gt;
{{end-hl1msg}}&lt;br /&gt;
&lt;br /&gt;
= CZCareer =&lt;br /&gt;
Supplies certain updates to the player regarding Condition Zero singleplayer missions.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{qnotice|See the [[CZCareer]] page for more information.}}&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{qnotice|Using an invalid type has no repercussions whatsoever. Therefore, you can use this to make your own custom communications (you can send any number of arguments of any type after the first string).}}&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{qnotice|The Type argument is case-sensitive.}}&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{qnotice|This event does nothing in CS and CZ multiplayer.}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl1msg|CZCareer|string,*}}&lt;br /&gt;
{{hl1msg|string|Type}}&lt;br /&gt;
{{hl1msg|*|Parameters}}&lt;br /&gt;
{{end-hl1msg}}&lt;br /&gt;
&lt;br /&gt;
= CZCareerHUD =&lt;br /&gt;
Displays certain [[HUD]] elements regarding Condition Zero singleplayer missions.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{qnotice|See the [[CZCareerHUD]] page for more information.}}&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{qnotice|Using an invalid type has no repercussions whatsoever. Therefore, you can use this to make your own custom communications (you can send any number of arguments of any type after the first string).}}&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{qnotice|The Type argument is case-sensitive.}}&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{qnotice|This event has some limited functionality in CS and CZ multiplayer (albeit better in CZ).}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl1msg|CZCareerHUD|string,*}}&lt;br /&gt;
{{hl1msg|string|Type}}&lt;br /&gt;
{{hl1msg|*|Parameters}}&lt;br /&gt;
{{end-hl1msg}}&lt;br /&gt;
&lt;br /&gt;
= Damage =&lt;br /&gt;
Called when a player takes damage, to display the red locational indicators. The last three arguments is the origin of the damage inflictor or victim origin if inflictor isn't found. DamageType is a bitwise value usually consist of a single bit.&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl1msg|Damage|byte, byte, long, coord, coord, coord}}&lt;br /&gt;
{{hl1msg|byte|DamageSave}}&lt;br /&gt;
{{hl1msg|byte|DamageTake}}&lt;br /&gt;
{{hl1msg|long|DamageType}}&lt;br /&gt;
{{hl1msg|coord|CoordX}}&lt;br /&gt;
{{hl1msg|coord|CoordY}}&lt;br /&gt;
{{hl1msg|coord|CoordZ}}&lt;br /&gt;
{{end-hl1msg}}&lt;br /&gt;
&lt;br /&gt;
= DeathMsg =&lt;br /&gt;
Fired to all players (MSG_ALL or MSG_BROADCAST) to notify them of a death. This generates the [[HUD]] message the client sees in the upper right corner of their screen.&amp;lt;br&amp;gt;&lt;br /&gt;
Also prints the console text message &amp;quot;KillerName killed VictimName with TruncatedWeaponName&amp;quot; or &amp;quot;*** KillerName killed VictimName with a headshot from TruncatedWeaponName ***&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{qnotice|TruncatedWeaponName doesn't contain a &amp;quot;weapon_&amp;quot; prefix. See [[CS Weapons Information]] for more information.}}&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{qnotice|For grenade kill TruncatedWeaponName isn't &amp;quot;hegrenade&amp;quot; but &amp;quot;grenade&amp;quot;, in fact it's an actual classname of a throwed grenade.}}&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{qnotice|For KillerID it's not necessarily should be a PlayerID, it could be 0 if player dies from fall/acid/radiation/fire/etc damage/lack of oxygen or from touch to a &amp;quot;trigger_hurt&amp;quot; entity, in this case TruncatedWeaponName will be &amp;quot;worldspawn&amp;quot; and &amp;quot;trigger_hurt&amp;quot; respectively.}}&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{qnotice|For vehicle kills TruncatedWeaponName could be &amp;quot;vehicle&amp;quot;, &amp;quot;tank&amp;quot; et cetera.}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl1msg|DeathMsg|byte, byte, byte, string}}&lt;br /&gt;
{{hl1msg|byte|KillerID}}&lt;br /&gt;
{{hl1msg|byte|VictimID}}&lt;br /&gt;
{{hl1msg|byte|IsHeadshot}}&lt;br /&gt;
{{hl1msg|string|TruncatedWeaponName}}&lt;br /&gt;
{{end-hl1msg}}&lt;br /&gt;
&lt;br /&gt;
= FlashBat =&lt;br /&gt;
Updates the flashlight battery charge on the [[HUD]].&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl1msg|FlashBat|byte}}&lt;br /&gt;
{{hl1msg|byte|ChargePercents}}&lt;br /&gt;
{{end-hl1msg}}&lt;br /&gt;
&lt;br /&gt;
= Flashlight =&lt;br /&gt;
Updates the flashlight state and battery charge on the [[HUD]]. If Flag is set to 1 the flashlight [[HUD]] icon will be shown as active.&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl1msg|Flashlight|byte, byte}}&lt;br /&gt;
{{hl1msg|byte|Flag}}&lt;br /&gt;
{{hl1msg|byte|ChargePercents}}&lt;br /&gt;
{{end-hl1msg}}&lt;br /&gt;
&lt;br /&gt;
= Fog =&lt;br /&gt;
{{qnotice|mp_Fog 1 for fog in counter-strike}}&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{begin-hl1msg|Fog|byte, byte, byte}}&lt;br /&gt;
{{hl1msg|byte|FogValue}}&lt;br /&gt;
{{hl1msg|byte|FogValue}}&lt;br /&gt;
{{hl1msg|byte|Unknown}}&lt;br /&gt;
{{end-hl1msg}}&lt;br /&gt;
&lt;br /&gt;
= ForceCam =&lt;br /&gt;
Called whenever mp_forcecam or mp_forcechasecam are changed, with their new values passed. There is assumedly a third CVar that this tracks, but it is yet unknown. Note that this message doesn't actually change any of the spectating rules for the client.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{qnotice|Even if mp_forcechasecam is set to 2, it is sent by this message as 1.}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl1msg|ForceCam|byte, byte, byte}}&lt;br /&gt;
{{hl1msg|byte|ForcecamValue}}&lt;br /&gt;
{{hl1msg|byte|ForcechasecamValue}}&lt;br /&gt;
{{hl1msg|byte|Unknown}}&lt;br /&gt;
{{end-hl1msg}}&lt;br /&gt;
&lt;br /&gt;
= GameMode =&lt;br /&gt;
{{qnotice|No Information available for this message.}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl1msg|GameMode|byte}}&lt;br /&gt;
{{hl1msg|byte|Unknown}}&lt;br /&gt;
{{end-hl1msg}}&lt;br /&gt;
&lt;br /&gt;
= GameTitle =&lt;br /&gt;
{{qnotice|No Information available for this message.}}&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Geiger =&lt;br /&gt;
Notifies about radiation level through special sound signals. Distance is a distance to hazard area.&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl1msg|Geiger|byte}}&lt;br /&gt;
{{hl1msg|byte|Distance}}&lt;br /&gt;
{{end-hl1msg}}&lt;br /&gt;
&lt;br /&gt;
= Health =&lt;br /&gt;
Updates the number of health on the [[HUD]].&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl1msg|Health|byte}}&lt;br /&gt;
{{hl1msg|byte|Health}}&lt;br /&gt;
{{end-hl1msg}}&lt;br /&gt;
&lt;br /&gt;
= HideWeapon =&lt;br /&gt;
Hides the specified [[HUD]] elements.&amp;lt;br&amp;gt;&lt;br /&gt;
Flags:&lt;br /&gt;
   1   (1&amp;lt;&amp;lt;0)  -  crosshair, ammo, weapons list&lt;br /&gt;
   2   (1&amp;lt;&amp;lt;1)  -  flashlight, +&lt;br /&gt;
   4   (1&amp;lt;&amp;lt;2)  -  ALL&lt;br /&gt;
   8   (1&amp;lt;&amp;lt;3)  -  radar, health, armor, +&lt;br /&gt;
  16   (1&amp;lt;&amp;lt;4)  -  timer, +&lt;br /&gt;
  32   (1&amp;lt;&amp;lt;5)  -  money, +&lt;br /&gt;
  64   (1&amp;lt;&amp;lt;6)  -  crosshair&lt;br /&gt;
 128   (1&amp;lt;&amp;lt;7)  -  +&lt;br /&gt;
Symbol + mean that an additional crosshair will be drawn. That crosshair looks exactly like the one from Crosshair message.&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl1msg|HideWeapon|byte}}&lt;br /&gt;
{{hl1msg|byte|Flags}}&lt;br /&gt;
{{end-hl1msg}}&lt;br /&gt;
&lt;br /&gt;
= HLTV =&lt;br /&gt;
{{qnotice|No Information available for this message.}}&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{qnotice|On new round is fired with both arguments equal to 0.}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl1msg|HLTV|byte, byte}}&lt;br /&gt;
{{hl1msg|byte|ClientID}}&lt;br /&gt;
{{hl1msg|byte|Unknown}}&lt;br /&gt;
{{end-hl1msg}}&lt;br /&gt;
&lt;br /&gt;
= HostageK =&lt;br /&gt;
Temporarily draws a blinking red dot on the CT players' radar when a hostage is killed.&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl1msg|HostageK|byte}}&lt;br /&gt;
{{hl1msg|byte|HostageID}}&lt;br /&gt;
{{end-hl1msg}}&lt;br /&gt;
&lt;br /&gt;
= HostagePos =&lt;br /&gt;
Draws/updates the blue mark on the CT players' radar which is indicate the corresponding hostage position.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{qnotice|Is called with Flag set to 1 on player [[HUD]] full update.}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl1msg|HostagePos|byte, byte, coord, coord, coord}}&lt;br /&gt;
{{hl1msg|byte|Flag}}&lt;br /&gt;
{{hl1msg|byte|HostageID}}&lt;br /&gt;
{{hl1msg|coord|CoordX}}&lt;br /&gt;
{{hl1msg|coord|CoordY}}&lt;br /&gt;
{{hl1msg|coord|CoordZ}}&lt;br /&gt;
{{end-hl1msg}}&lt;br /&gt;
&lt;br /&gt;
= HudText =&lt;br /&gt;
{{qnotice|No Information available for this message.}}&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= HudTextArgs =&lt;br /&gt;
Prints [[HUD]] text.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{qnotice|An example of TextCode could be &amp;quot;#Hint_you_have_the_bomb&amp;quot;.}}&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{qnotice|If you have a problems with specifing the last two arguments use 1 and 0 respectively.}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl1msg|HudTextArgs|string, byte, byte}}&lt;br /&gt;
{{hl1msg|string|TextCode}}&lt;br /&gt;
{{hl1msg|byte|Unknown}}&lt;br /&gt;
{{hl1msg|byte|Unknown}}&lt;br /&gt;
{{end-hl1msg}}&lt;br /&gt;
&lt;br /&gt;
= HudTextPro =&lt;br /&gt;
{{qnotice|No Information available for this message.}}&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= InitHUD =&lt;br /&gt;
Initializes the [[HUD]].&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{qnotice|This message has no arguments.}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl1msg|InitHUD}}&lt;br /&gt;
{{end-hl1msg}}&lt;br /&gt;
&lt;br /&gt;
= ItemPickup =&lt;br /&gt;
Temporarily draws correspoding item [[HUD]] icon in the middle of the right side of the screen.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{qnotice|Draw time is depend on the ''hud_drawhistory_time'' client CVar value.}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl1msg|ItemPickup|string}}&lt;br /&gt;
{{hl1msg|string|ItemName}}&lt;br /&gt;
{{end-hl1msg}}&lt;br /&gt;
&lt;br /&gt;
= ItemStatus =&lt;br /&gt;
Notifies about carried items.&amp;lt;br&amp;gt;&lt;br /&gt;
Example of some item bits:&lt;br /&gt;
 1   (1&amp;lt;&amp;lt;0)  -  nightvision goggles&lt;br /&gt;
 2   (1&amp;lt;&amp;lt;1)  -  defusal kit&lt;br /&gt;
{{begin-hl1msg|ItemStatus|byte}}&lt;br /&gt;
{{hl1msg|byte|ItemsBitSum}}&lt;br /&gt;
{{end-hl1msg}}&lt;br /&gt;
&lt;br /&gt;
= Location =&lt;br /&gt;
{{qnotice|No Information available for this message.}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl1msg|Location|byte, string}}&lt;br /&gt;
{{hl1msg|byte|Unknown}}&lt;br /&gt;
{{hl1msg|string|Unknown}}&lt;br /&gt;
{{end-hl1msg}}&lt;br /&gt;
&lt;br /&gt;
= Money =&lt;br /&gt;
Updates the Amount of money on the [[HUD]]. If the Flag is 1, the additional new-old [[HUD]] money amount difference will be also displayed.&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl1msg|Money|long, byte}}&lt;br /&gt;
{{hl1msg|long|Amount}}&lt;br /&gt;
{{hl1msg|byte|Flag}}&lt;br /&gt;
{{end-hl1msg}}&lt;br /&gt;
&lt;br /&gt;
= MOTD =&lt;br /&gt;
Displays MOTD window.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{qnotice|Max. Text length is 60. Large MOTD is sent in multiple messages. For the message that is send a last MOTD part the Flag will be set to 1 and 0 otherwise.}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl1msg|MOTD|byte, string}}&lt;br /&gt;
{{hl1msg|byte|Flag}}&lt;br /&gt;
{{hl1msg|string|Text}}&lt;br /&gt;
{{end-hl1msg}}&lt;br /&gt;
&lt;br /&gt;
= NVGToggle =&lt;br /&gt;
Toggles night vision mode. For Flag: 1 is on, 0 is off.&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl1msg|NVGToggle|byte}}&lt;br /&gt;
{{hl1msg|byte|Flag}}&lt;br /&gt;
{{end-hl1msg}}&lt;br /&gt;
&lt;br /&gt;
= Radar =&lt;br /&gt;
Draws/updates the dot on the [[HUD]] radar which is indicate the given player position.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{qnotice|Works for teammates only.}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl1msg|Radar|byte, coord, coord, coord}}&lt;br /&gt;
{{hl1msg|byte|PlayerID}}&lt;br /&gt;
{{hl1msg|coord|CoordX}}&lt;br /&gt;
{{hl1msg|coord|CoordY}}&lt;br /&gt;
{{hl1msg|coord|CoordZ}}&lt;br /&gt;
{{end-hl1msg}}&lt;br /&gt;
&lt;br /&gt;
= ReceiveW =&lt;br /&gt;
{{qnotice|No Information available for this message.}}&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= ReloadSound =&lt;br /&gt;
{{qnotice|No Information available for this message.}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl1msg|ReloadSound|byte, byte}}&lt;br /&gt;
{{hl1msg|byte|Unknown}}&lt;br /&gt;
{{hl1msg|byte|Unknown}}&lt;br /&gt;
{{end-hl1msg}}&lt;br /&gt;
&lt;br /&gt;
= ReqState =&lt;br /&gt;
{{qnotice|No Information available for this message.}}&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{qnotice|This message has no arguments.}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl1msg|ReqState}}&lt;br /&gt;
{{end-hl1msg}}&lt;br /&gt;
&lt;br /&gt;
= ResetHUD =&lt;br /&gt;
Resets the [[HUD]].&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{qnotice|This message has no arguments.}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl1msg|ResetHUD}}&lt;br /&gt;
{{end-hl1msg}}&lt;br /&gt;
&lt;br /&gt;
= RoundTime =&lt;br /&gt;
Updates the round timer on the [[HUD]]. Time is in seconds.&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl1msg|RoundTime|short}}&lt;br /&gt;
{{hl1msg|short|Time}}&lt;br /&gt;
{{end-hl1msg}}&lt;br /&gt;
&lt;br /&gt;
= SayText =&lt;br /&gt;
Prints say [[HUD]] text. Second argument can be a predefined string or a custom one. In the last case the last two arguments isn't required.&amp;lt;br&amp;gt;&lt;br /&gt;
An examples of a predifined Counter-Strike string values: #Cstrike_Chat_AllDead, #Cstrike_Name_Change&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{qnotice|For #Cstrike_Name_Change String2 is an old name and String3 is a new name.}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl1msg|SayText|byte, string, string, string}}&lt;br /&gt;
{{hl1msg|byte|SenderID}}&lt;br /&gt;
{{hl1msg|string|String1}}&lt;br /&gt;
{{hl1msg|string|String2}}&lt;br /&gt;
{{hl1msg|string|String3}}&lt;br /&gt;
{{end-hl1msg}}&lt;br /&gt;
&lt;br /&gt;
= Scenario =&lt;br /&gt;
If Active is 0, this display will be hidden. If Active is 1, displays Sprite (valid names listed in sprites/hud.txt) to the right of the round timer with an alpha value of Alpha (100-255). If FlashRate is nonzero, then the sprite will flash from the given alpha to an alpha of 100, at a rate of FlashRate (measured in ???). This is used by CZ to display how many hostages remain unrescued, and also to display the ticking bomb when it is planted.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{qnotice|If Active is 0, don't send any other arguments afterwards. Also, you don't need to send either short if FlashRate is just going to be 0.}}&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[image:Cs_scenario_msg.jpg|frame|right|Scenario message in CS, using the following parameters: 1, d_mp5navy, 150]]&lt;br /&gt;
&lt;br /&gt;
{{qnotice|Works in both CS and CZ!}}&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{qnotice|In CZ (and possibly CS), if someone respawns after the bomb has been planted, their Scenario event will not work at all until the next round.}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl1msg|Scenario|byte, string, byte, short, short}}&lt;br /&gt;
{{hl1msg|byte|Active}}&lt;br /&gt;
{{hl1msg|string|Sprite}}&lt;br /&gt;
{{hl1msg|byte|Alpha}}&lt;br /&gt;
{{hl1msg|short|FlashRate}}&lt;br /&gt;
{{hl1msg|short|Unknown}}&lt;br /&gt;
{{end-hl1msg}}&lt;br /&gt;
&lt;br /&gt;
= ScoreAttrib =&lt;br /&gt;
Updates the scoreboard's attribute for the specified player. For the 2nd argument, 0 is nothing, (1&amp;lt;&amp;lt;0) i.e. 1 is dead, (1&amp;lt;&amp;lt;1) i.e. 2 is bomb, (1&amp;lt;&amp;lt;2) i.e. 4 is VIP.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{qnotice|Flags is a bitwise value so if VIP player is dying with the bomb the Flags will be 7 i.e. bit sum of all flags.}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl1msg|ScoreAttrib|byte, byte}}&lt;br /&gt;
{{hl1msg|byte|PlayerID}}&lt;br /&gt;
{{hl1msg|byte|Flags}}&lt;br /&gt;
{{end-hl1msg}}&lt;br /&gt;
&lt;br /&gt;
= ScoreInfo =&lt;br /&gt;
Updates the scoreboard with the given player's Frags and Deaths.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{qnotice|In CS the 4th argument is always equal to 0.}}&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*See [http://www.amxmodx.org/funcwiki.php?go=module&amp;amp;id=4#const_teams CS Team Constants] for team indeces constants list.&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl1msg|ScoreInfo|byte, short, short, short, short}}&lt;br /&gt;
{{hl1msg|byte|PlayerID}}&lt;br /&gt;
{{hl1msg|short|Frags}}&lt;br /&gt;
{{hl1msg|short|Deaths}}&lt;br /&gt;
{{hl1msg|short|ClassID?}}&lt;br /&gt;
{{hl1msg|short|TeamID}}&lt;br /&gt;
{{end-hl1msg}}&lt;br /&gt;
&lt;br /&gt;
= ScreenFade =&lt;br /&gt;
Fades the screen.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{qnotice|Duration and HoldTime is in special units. 1 second is equal to (1&amp;lt;&amp;lt;12) i.e. 4096 units.}}&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Flags (from HLSDK):&lt;br /&gt;
 FFADE_IN         0x0000 // Just here so we don't pass 0 into the function&lt;br /&gt;
 FFADE_OUT        0x0001 // Fade out (not in)&lt;br /&gt;
 FFADE_MODULATE   0x0002 // Modulate (don't blend)&lt;br /&gt;
 FFADE_STAYOUT    0x0004 // ignores the duration, stays faded out until new ScreenFade message received&lt;br /&gt;
{{begin-hl1msg|ScreenFade|short, short, short, byte, byte, byte, byte}}&lt;br /&gt;
{{hl1msg|short|Duration}}&lt;br /&gt;
{{hl1msg|short|HoldTime}}&lt;br /&gt;
{{hl1msg|short|Flags}}&lt;br /&gt;
{{hl1msg|byte|ColorR}}&lt;br /&gt;
{{hl1msg|byte|ColorG}}&lt;br /&gt;
{{hl1msg|byte|ColorB}}&lt;br /&gt;
{{hl1msg|byte|Alpha}}&lt;br /&gt;
{{end-hl1msg}}&lt;br /&gt;
&lt;br /&gt;
= ScreenShake =&lt;br /&gt;
Shakes the screen.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{qnotice|All arguments is in special units. 1 second is equal to (1&amp;lt;&amp;lt;12) i.e. 4096 units.}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl1msg|ScreenShake|short, short, short}}&lt;br /&gt;
{{hl1msg|short|Amplitude}}&lt;br /&gt;
{{hl1msg|short|Duration}}&lt;br /&gt;
{{hl1msg|short|Frequency}}&lt;br /&gt;
{{end-hl1msg}}&lt;br /&gt;
&lt;br /&gt;
= SendAudio =&lt;br /&gt;
Plays the specified audio. An example of AudioCode could be &amp;quot;%!MRAD_rounddraw&amp;quot;.&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl1msg|SendAudio|byte, string, short}}&lt;br /&gt;
{{hl1msg|byte|SenderID}}&lt;br /&gt;
{{hl1msg|string|AudioCode}}&lt;br /&gt;
{{hl1msg|short|Pitch}}&lt;br /&gt;
{{end-hl1msg}}&lt;br /&gt;
&lt;br /&gt;
= ServerName =&lt;br /&gt;
Sends a server name to a client.&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl1msg|ServerName|string}}&lt;br /&gt;
{{hl1msg|string|ServerName}}&lt;br /&gt;
{{end-hl1msg}}&lt;br /&gt;
&lt;br /&gt;
= SetFOV =&lt;br /&gt;
Sets the specified field of view.&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl1msg|SetFOV|byte}}&lt;br /&gt;
{{hl1msg|byte|Degrees}}&lt;br /&gt;
{{end-hl1msg}}&lt;br /&gt;
&lt;br /&gt;
= ShadowIdx =&lt;br /&gt;
{{qnotice|No Information available for this message.}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl1msg|ShadowIdx|long}}&lt;br /&gt;
{{hl1msg|long|Unknown}}&lt;br /&gt;
{{end-hl1msg}}&lt;br /&gt;
&lt;br /&gt;
= ShowMenu =&lt;br /&gt;
Displays a &amp;quot;menu&amp;quot; to a player (text on the left side of the screen). Acts like AMXX's show_menu (in fact, this is how AMXX shows a menu).&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{qnotice|Multipart should be 1 if your menu takes up multiple messages (i.e.: string is too big to fit into one). On the final message, Multipart should be 0.}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl1msg|ShowMenu|short, char, byte, string}}&lt;br /&gt;
{{hl1msg|short|KeysBitSum}}&lt;br /&gt;
{{hl1msg|char|Time}}&lt;br /&gt;
{{hl1msg|byte|Multipart}}&lt;br /&gt;
{{hl1msg|string|Text}}&lt;br /&gt;
{{end-hl1msg}}&lt;br /&gt;
&lt;br /&gt;
= ShowTimer =&lt;br /&gt;
Forces the round timer displaying.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{qnotice|This message has no arguments.}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl1msg|ShowTimer}}&lt;br /&gt;
{{end-hl1msg}}&lt;br /&gt;
&lt;br /&gt;
= SpecHealth =&lt;br /&gt;
{{qnotice|No Information available for this message.}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl1msg|SpecHealth|byte}}&lt;br /&gt;
{{hl1msg|byte|Health?}}&lt;br /&gt;
{{end-hl1msg}}&lt;br /&gt;
&lt;br /&gt;
= SpecHealth2 =&lt;br /&gt;
Updates the observer's screen with a name and health of the given player.&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl1msg|SpecHealth2|byte, byte}}&lt;br /&gt;
{{hl1msg|byte|Health}}&lt;br /&gt;
{{hl1msg|byte|PlayerID}}&lt;br /&gt;
{{end-hl1msg}}&lt;br /&gt;
&lt;br /&gt;
= Spectator =&lt;br /&gt;
Called when player becomes an observer/spectator.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{qnotice|On join to Spectators usually is fired twice in a row.}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl1msg|Spectator|byte, byte}}&lt;br /&gt;
{{hl1msg|byte|ClientID}}&lt;br /&gt;
{{hl1msg|byte|Unknown}}&lt;br /&gt;
{{end-hl1msg}}&lt;br /&gt;
&lt;br /&gt;
= StatusIcon =&lt;br /&gt;
Draws/removes the specified status [[HUD]] icon. For Status, 0 is Hide Icon, 1 is Show Icon, 2 is Flash Icon. Color arguments are optional and is required only if Status aren't equal to 0.&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl1msg|StatusIcon|byte, string, byte, byte, byte}}&lt;br /&gt;
{{hl1msg|byte|Status}}&lt;br /&gt;
{{hl1msg|string|SpriteName}}&lt;br /&gt;
{{hl1msg|byte|ColorR}}&lt;br /&gt;
{{hl1msg|byte|ColorG}}&lt;br /&gt;
{{hl1msg|byte|ColorB}}&lt;br /&gt;
{{end-hl1msg}}&lt;br /&gt;
&lt;br /&gt;
= StatusValue =&lt;br /&gt;
Sends/updates the status values. For the Flag 1 the Value is TeamRelation, for 2 is PlayerID, for 3 is Health. For TeamRelation, 1 is Teammate player, 2 is Non-Teammate player, 3 is Hostage. If TeamRelation is Hostage, PlayerID will be 0 or will be not sent at all.&amp;lt;br&amp;gt;&lt;br /&gt;
Usually is fired as a triple message, for example:&lt;br /&gt;
 {1,  2}  -  non-teammate player&lt;br /&gt;
 {2, 17}  -  player index is 17&lt;br /&gt;
 {3, 59}  -  player health is 59&lt;br /&gt;
{{begin-hl1msg|StatusValue|byte, short}}&lt;br /&gt;
{{hl1msg|byte|Flag}}&lt;br /&gt;
{{hl1msg|short|Value}}&lt;br /&gt;
{{end-hl1msg}}&lt;br /&gt;
&lt;br /&gt;
= StatusText =&lt;br /&gt;
Specifies the status text format.&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl1msg|StatusText|byte, string}}&lt;br /&gt;
{{hl1msg|byte|Unknown}}&lt;br /&gt;
{{hl1msg|string|Text}}&lt;br /&gt;
{{end-hl1msg}}&lt;br /&gt;
&lt;br /&gt;
= TaskTime =&lt;br /&gt;
Displays a secondary timer above the round timer. Used for Condition Zero singleplayer missions.&amp;lt;br&amp;gt;&lt;br /&gt;
If Time is -1, timer dissappears. If Time is any other negative value, it is displayed as green instead of yellow, and considered positive.&amp;lt;br&amp;gt;&lt;br /&gt;
If Active is true, timer counts down. Otherwise, it is paused.&amp;lt;br&amp;gt;If Fade is above zero, the timer will slowly fade out after that many seconds have passed (even if the timer is inactive).&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{qnotice|This event can only be used on missions that have an objective requiring a secondary timer!}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl1msg|TaskTime|short, byte, byte}}&lt;br /&gt;
{{hl1msg|short|Time}}&lt;br /&gt;
{{hl1msg|byte|Active}}&lt;br /&gt;
{{hl1msg|byte|Fade}}&lt;br /&gt;
{{end-hl1msg}}&lt;br /&gt;
&lt;br /&gt;
= TeamInfo =&lt;br /&gt;
Sets the team information for the given player.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{qnotice|In CS TeamName is either &amp;quot;UNASSIGNED&amp;quot;, &amp;quot;TERRORIST&amp;quot;, &amp;quot;CT&amp;quot; or &amp;quot;SPECTATOR&amp;quot;.}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl1msg|TeamInfo|byte, string}}&lt;br /&gt;
{{hl1msg|byte|PlayerID}}&lt;br /&gt;
{{hl1msg|string|TeamName}}&lt;br /&gt;
{{end-hl1msg}}&lt;br /&gt;
&lt;br /&gt;
= TeamScore =&lt;br /&gt;
Updates the team score on the score board.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{qnotice|In CS TeamName is either &amp;quot;TERRORIST&amp;quot; or &amp;quot;CT&amp;quot;.}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl1msg|TeamScore|string, short}}&lt;br /&gt;
{{hl1msg|string|TeamName}}&lt;br /&gt;
{{hl1msg|short|Score}}&lt;br /&gt;
{{end-hl1msg}}&lt;br /&gt;
&lt;br /&gt;
= TextMsg =&lt;br /&gt;
Prints a cutom/or predefined text message.&amp;lt;br&amp;gt;&lt;br /&gt;
There does not necessarily have to be a total of 6 arguments, there could be as little as 2. For example you can send a message with the following:&lt;br /&gt;
 Arg1: 1&lt;br /&gt;
 Arg2: #Game_join_ct&lt;br /&gt;
 Arg3: Pimp Daddy&lt;br /&gt;
{{begin-hl1msg|TextMsg|byte, string, string, string, string, string}}&lt;br /&gt;
{{hl1msg|byte|DestinationType}}&lt;br /&gt;
{{hl1msg|string|Message}}&lt;br /&gt;
{{hl1msg|string|Submsg}}&lt;br /&gt;
{{hl1msg|string|Submsg}}&lt;br /&gt;
{{hl1msg|string|Submsg}}&lt;br /&gt;
{{hl1msg|string|Submsg}}&lt;br /&gt;
{{end-hl1msg}}&lt;br /&gt;
&lt;br /&gt;
= Train =&lt;br /&gt;
Displays the speed bar used for controlling a train.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{qnotice|Speed is as follows: 0 (disable display), 1 (reverse), 2 (neutral), 3 (slow speed), 4 (medium speed), 5 (maximum speed)}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl1msg|Train|byte}}&lt;br /&gt;
{{hl1msg|byte|Speed}}&lt;br /&gt;
{{end-hl1msg}}&lt;br /&gt;
&lt;br /&gt;
= TutorClose =&lt;br /&gt;
Closes all CZ-style tutor popups.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= TutorLine =&lt;br /&gt;
{{qnotice|No Information available for this message.}}&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= TutorState =&lt;br /&gt;
{{qnotice|No Information available for this message.}}&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= TutorText =&lt;br /&gt;
Used to display a CZ-style tutor popup.&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl1msg|TutorText|string, byte, short, short, short}}&lt;br /&gt;
{{hl1msg|string|Unknown}}&lt;br /&gt;
{{hl1msg|byte|Unknown}}&lt;br /&gt;
{{hl1msg|short|Unknown}}&lt;br /&gt;
{{hl1msg|short|Unknown}}&lt;br /&gt;
{{hl1msg|short|Unknown}}&lt;br /&gt;
{{end-hl1msg}}&lt;br /&gt;
&lt;br /&gt;
= ViewMode =&lt;br /&gt;
{{qnotice|No Information available for this message (HLSDK says this switches to first-person view, but it doesn't seem to function as so).}}&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{qnotice|This message has no arguments.}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl1msg|ViewMode}}&lt;br /&gt;
{{end-hl1msg}}&lt;br /&gt;
&lt;br /&gt;
= VGUIMenu =&lt;br /&gt;
Displays a predefined VGUI menu.&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl1msg|VGUIMenu|byte, short, char, byte, string}}&lt;br /&gt;
{{hl1msg|byte|MenuID}}&lt;br /&gt;
{{hl1msg|short|KeysBitSum}}&lt;br /&gt;
{{hl1msg|char|Time?}}&lt;br /&gt;
{{hl1msg|byte|Multipart?}}&lt;br /&gt;
{{hl1msg|string|Name?}}&lt;br /&gt;
{{end-hl1msg}}&lt;br /&gt;
&lt;br /&gt;
= VoiceMask =&lt;br /&gt;
Used to tell a client who he can hear over the microphone.&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl1msg|VoiceMask|long, long}}&lt;br /&gt;
{{hl1msg|long|AudiblePlayersIndexBitSum}}&lt;br /&gt;
{{hl1msg|long|ServerBannedPlayersIndexBitSum}}&lt;br /&gt;
{{end-hl1msg}}&lt;br /&gt;
&lt;br /&gt;
= WeaponList =&lt;br /&gt;
Configures the [[HUD]] weapons list.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{qnotice|Fired on map initialization.}}&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{qnotice|SlotID starts from 0.}}&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Flags (from HLSDK):&lt;br /&gt;
 ITEM_FLAG_SELECTONEMPTY       1&lt;br /&gt;
 ITEM_FLAG_NOAUTORELOAD        2&lt;br /&gt;
 ITEM_FLAG_NOAUTOSWITCHEMPTY   4&lt;br /&gt;
 ITEM_FLAG_LIMITINWORLD        8&lt;br /&gt;
 ITEM_FLAG_EXHAUSTIBLE        16 // A player can totally exhaust their ammo supply and lose this weapon.&lt;br /&gt;
{{qnotice|See [[CS Weapons Information]] for more information.}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl1msg|WeaponList|string, byte, byte, byte, byte, byte, byte, byte, byte}}&lt;br /&gt;
{{hl1msg|string|WeaponName}}&lt;br /&gt;
{{hl1msg|byte|PrimaryAmmoID}}&lt;br /&gt;
{{hl1msg|byte|PrimaryAmmoMaxAmount}}&lt;br /&gt;
{{hl1msg|byte|SecondaryAmmoID}}&lt;br /&gt;
{{hl1msg|byte|SecondaryAmmoMaxAmount}}&lt;br /&gt;
{{hl1msg|byte|SlotID}}&lt;br /&gt;
{{hl1msg|byte|NumberInSlot}}&lt;br /&gt;
{{hl1msg|byte|WeaponID}}&lt;br /&gt;
{{hl1msg|byte|Flags}}&lt;br /&gt;
{{end-hl1msg}}&lt;br /&gt;
&lt;br /&gt;
= WeapPickup =&lt;br /&gt;
Temporarily draws correspoding weapon [[HUD]] icon in the middle of the right side of the screen.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{qnotice|Draw time is depend on the ''hud_drawhistory_time'' client CVar value.}}&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{qnotice|Is fired right before weapon is picked up (notice ''&amp;quot;before&amp;quot;'').}}&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{qnotice|See [[CS Weapons Information]] for more information.}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl1msg|WeapPickup|byte}}&lt;br /&gt;
{{hl1msg|byte|WeaponID}}&lt;br /&gt;
{{end-hl1msg}}&lt;/div&gt;</summary>
		<author><name>VEN</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.alliedmods.net/index.php?title=AMX_Mod_X_1.8.0_Changes&amp;diff=5050</id>
		<title>AMX Mod X 1.8.0 Changes</title>
		<link rel="alternate" type="text/html" href="https://wiki.alliedmods.net/index.php?title=AMX_Mod_X_1.8.0_Changes&amp;diff=5050"/>
		<updated>2007-08-28T16:14:53Z</updated>

		<summary type="html">&lt;p&gt;VEN: cs_[g|s]et_hostage_nextuser to cs_[g|s]et_hostage_nextuse (no last &amp;quot;r&amp;quot;)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;AMX Mod X 1.8 is a large release with many changes, both to the development API and user-mode features.&lt;br /&gt;
=Per-Map Features=&lt;br /&gt;
You can now have per-map prefix-based configuration files for plugins and .cfg scripts.  &lt;br /&gt;
*&amp;lt;tt&amp;gt;configs/maps/prefix_&amp;amp;lt;prefix&amp;amp;gt;.cfg&amp;lt;/tt&amp;gt; &amp;lt;i&amp;gt;(for example)&amp;lt;/i&amp;gt;&lt;br /&gt;
**&amp;lt;tt&amp;gt;configs/maps/prefix_de.cfg&amp;lt;/tt&amp;gt; will run on any de_* map.&lt;br /&gt;
*&amp;lt;tt&amp;gt;configs/maps/plugins-&amp;amp;lt;prefix&amp;amp;gt;.ini&amp;lt;/tt&amp;gt; &amp;lt;i&amp;gt;(for example)&amp;lt;/i&amp;gt;&lt;br /&gt;
**&amp;lt;tt&amp;gt;configs/maps/plugins-de.ini&amp;lt;/tt&amp;gt; will load all contained plugins on any de_* map.&lt;br /&gt;
&lt;br /&gt;
=Command Flag Changing=&lt;br /&gt;
You can now change the access flags required by commands without recompiling or editing scripts.  AMX Mod X caches all command flags in &amp;lt;tt&amp;gt;configs/cmdaccess.ini&amp;lt;/tt&amp;gt;, where they can be easily edited.&lt;br /&gt;
&lt;br /&gt;
=Ham Sandwich=&lt;br /&gt;
Ham Sandwich is a very powerful module by [[User:Sawce|sawce]] which can hook and call virtual CBaseEntity functions on a variety of mods.  For more information, see the [http://svn.alliedmods.net/viewvc.cgi/trunk/plugins/include/hamsandwich.inc?root=amxmodx&amp;amp;view=log hamsandwich.inc] file.&lt;br /&gt;
&lt;br /&gt;
=Dynamic Global Arrays=&lt;br /&gt;
Also by [[User:Sawce|sawce]], dynamic global arrays are now available in AMX Mod X.  You can read the full specs in [http://svn.alliedmods.net/viewvc.cgi/trunk/plugins/include/cellarray.inc?root=amxmodx&amp;amp;view=log cellarray.inc].  &lt;br /&gt;
&lt;br /&gt;
Additionally, the hardcoded limits of a few plugins have been lifted:&lt;br /&gt;
*Admins are now dynamic and not limited to &amp;lt;tt&amp;gt;MAX_ADMINS&amp;lt;/tt&amp;gt;.&lt;br /&gt;
*Mapchooser no longer has a predefined map limit.&lt;br /&gt;
*Maps menu no longer has a predefined map limit.&lt;br /&gt;
*imessage no longer has a predefined message limit.&lt;br /&gt;
&lt;br /&gt;
=Changelog=&lt;br /&gt;
==Overall Changes==&lt;br /&gt;
*Added a new module, Ham Sandwich, for hooking and calling virtual CBaseEntity functions in mods.&lt;br /&gt;
*Command flags are now initially dumped to disk and can be edited via &amp;lt;tt&amp;gt;configs/cmdaccess.ini&amp;lt;/tt&amp;gt;.&lt;br /&gt;
*Added {{AMBug|48738}}: Romanian translation from X-5173.&lt;br /&gt;
*Added {{AMBug|50741}} and {{AMBug|43830}}: per-map plugins files can now be prefixed based.&lt;br /&gt;
*Added {{amb|17}}: New menu rendering is now more consistent; non-consistent controls are deprecated.&lt;br /&gt;
*Added {{amb|32}}: The server console commands &amp;quot;amxx cvars&amp;quot; and &amp;quot;amxx cmds&amp;quot; can now filter by plugin.&lt;br /&gt;
*Added {{amb|122}}: Log file names now include a four-digit year.&lt;br /&gt;
*Fixed {{amb|18}}: New menus are now properly destroyed if overridden.&lt;br /&gt;
*Fixed {{amb|46}}: &amp;lt;tt&amp;gt;is_user_bot&amp;lt;/tt&amp;gt; had some false positives.&lt;br /&gt;
*Fixed {{amb|69}}: Fixed Metamod trying to reload AMX Mod X against a poorly configured clock.&lt;br /&gt;
*Fixed {{amb|207}}: New menus now display &amp;quot;0&amp;quot; instead of &amp;quot;10.&amp;quot;&lt;br /&gt;
*Fixed {{amb|208}}: New menus did not reset callback results after each call.&lt;br /&gt;
*Fixed {{amb|200}}: Dynamic/fake natives were not re-entrant.&lt;br /&gt;
*Fixed {{amb|244}}: Run-time errors blocked forwards.&lt;br /&gt;
*Fixed {{amb|305}}: Core crashed on mods that removed the standard &amp;lt;tt&amp;gt;mp_timelimit&amp;lt;/tt&amp;gt; cvar.&lt;br /&gt;
*Fixed many various internal new menu rendering and item selection bugs.&lt;br /&gt;
&lt;br /&gt;
==Scripting Changes==&lt;br /&gt;
*All include files are now #pragma semicolon safe.&lt;br /&gt;
*New menu functions are now in a separate, newly documented include file (newmenus.inc).&lt;br /&gt;
*Added natives for dynamic global arrays.&lt;br /&gt;
*Added a new, magic &amp;lt;tt&amp;gt;any&amp;lt;/tt&amp;gt; tag from [[SourceMod]].&lt;br /&gt;
*Added a &amp;lt;tt&amp;gt;charsmax&amp;lt;/tt&amp;gt; macro for safe sizeof(string)-1 usage.&lt;br /&gt;
*Added &amp;lt;tt&amp;gt;set_pcvar_string&amp;lt;/tt&amp;gt;().&lt;br /&gt;
*Added &amp;lt;tt&amp;gt;LookupLangKey&amp;lt;/tt&amp;gt;().&lt;br /&gt;
*Added &amp;lt;tt&amp;gt;SQL_QuoteString&amp;lt;/tt&amp;gt;().&lt;br /&gt;
*Added &amp;lt;tt&amp;gt;[g|s]et_pdata_cbase[_safe]&amp;lt;/tt&amp;gt;() to the Ham Sandwich module.&lt;br /&gt;
*Added &amp;lt;tt&amp;gt;geoip_code[2|3]_ex&amp;lt;/tt&amp;gt;(), which address a serious issue in the now deprecated &amp;lt;tt&amp;gt;geoip_code[2|3]&amp;lt;/tt&amp;gt;().&lt;br /&gt;
*Added &amp;lt;tt&amp;gt;lookup_sequence&amp;lt;/tt&amp;gt;(), &amp;lt;tt&amp;gt;set_controller&amp;lt;/tt&amp;gt;(), &amp;lt;tt&amp;gt;set_pev_string&amp;lt;/tt&amp;gt;(), and &amp;lt;tt&amp;gt;pev_serial&amp;lt;/tt&amp;gt;() to Fakemeta.&lt;br /&gt;
*Added &amp;lt;tt&amp;gt;ns_get_user_team&amp;lt;/tt&amp;gt;.&lt;br /&gt;
*Added a menu property to change the numbering color.&lt;br /&gt;
*Added {{amb|27}}: &amp;lt;tt&amp;gt;SQL_Rewind&amp;lt;/tt&amp;gt;().&lt;br /&gt;
*Added {{amb|37}}: &amp;lt;tt&amp;gt;cs_[g|s]et_user_submodel&amp;lt;/tt&amp;gt;().&lt;br /&gt;
*Added {{amb|38}}: &amp;lt;tt&amp;gt;cs_[g|s]et_user_lastactivity&amp;lt;/tt&amp;gt;().&lt;br /&gt;
*Added {{amb|39}}: &amp;lt;tt&amp;gt;cs_[g|s]et_hostage_lastuse&amp;lt;/tt&amp;gt;() and &amp;lt;tt&amp;gt;cs_[g|s]et_hostage_nextuse&amp;lt;/tt&amp;gt;().&lt;br /&gt;
*Added {{amb|63}}: &amp;lt;tt&amp;gt;floatmin&amp;lt;/tt&amp;gt;(), &amp;lt;tt&amp;gt;floatmax&amp;lt;/tt&amp;gt;(), and &amp;lt;tt&amp;gt;floatclamp()&amp;lt;/tt&amp;gt;.&lt;br /&gt;
*Added {{amb|76}}: Formatting functions can now use %x or %X for hexadecimal numbers.&lt;br /&gt;
*Added {{amb|92}}: &amp;lt;tt&amp;gt;create_tr2&amp;lt;/tt&amp;gt;() and &amp;lt;tt&amp;gt;free_tr2&amp;lt;/tt&amp;gt;().&lt;br /&gt;
*Added {{amb|205}}: &amp;lt;tt&amp;gt;cs_[g|s]et_c4_explode_time&amp;lt;/tt&amp;gt;().&lt;br /&gt;
*Added {{amb|216}}: &amp;lt;tt&amp;gt;SQL_MakeStdTuple&amp;lt;/tt&amp;gt;() now has a timeout parameter.&lt;br /&gt;
*Added {{amb|237}}: Fakemeta can now call &amp;quot;ServerPrint.&amp;quot;&lt;br /&gt;
*Added {{amb|242}}: &amp;lt;tt&amp;gt;cs_[g|s]et_user_hostagekills&amp;lt;/tt&amp;gt;().&lt;br /&gt;
*Added {{amb|245}}: &amp;lt;tt&amp;gt;precache_sound&amp;lt;/tt&amp;gt; now returns a precache index.&lt;br /&gt;
*Added {{amb|261}}: &amp;lt;tt&amp;gt;has_flag&amp;lt;/tt&amp;gt;() and &amp;lt;tt&amp;gt;has_all_flags&amp;lt;/tt&amp;gt;().&lt;br /&gt;
*Added {{amb|291}}: &amp;lt;tt&amp;gt;cs_[g|s]et_c4_defusing&amp;lt;/tt&amp;gt;().&lt;br /&gt;
*Added {{amb|673}}: &amp;lt;tt&amp;gt;regex_compile&amp;lt;/tt&amp;gt;() and &amp;lt;tt&amp;gt;regex_match_c&amp;lt;/tt&amp;gt; for pre-compiling expressions.&lt;br /&gt;
*Added {{AMBug|46213}}: &amp;lt;tt&amp;gt;player_menu_info&amp;lt;/tt&amp;gt;() now returns a page number.&lt;br /&gt;
*Added {{AMBug|51064}}: Some parameters to &amp;lt;tt&amp;gt;get_plugin&amp;lt;/tt&amp;gt; are now optional.&lt;br /&gt;
*Added {{AMBug|50610}}: Some parameters to &amp;lt;tt&amp;gt;get_user_weapon&amp;lt;/tt&amp;gt; are now optional.&lt;br /&gt;
*Added {{AMBug|48841}}: &amp;lt;tt&amp;gt;tfc_is_user_feigning&amp;lt;/tt&amp;gt;().&lt;br /&gt;
*Added {{AMBug|45664}}: &amp;lt;tt&amp;gt;tfc_is_team_ally&amp;lt;/tt&amp;gt;().&lt;br /&gt;
*Fixed {{AMBug|49337}}: &amp;lt;tt&amp;gt;get_pcvar_float&amp;lt;/tt&amp;gt;() malfunctioned on high numbers.&lt;br /&gt;
*Fixed {{amb|78}}: &amp;lt;tt&amp;gt;get_concmdsnum&amp;lt;/tt&amp;gt; could return an incorrect result.&lt;br /&gt;
*Fixed {{amb|85}}: Tag mismatches on &amp;lt;tt&amp;gt;ShowSyncHudMsg&amp;lt;/tt&amp;gt;().&lt;br /&gt;
*Fixed {{amb|90}}: &amp;lt;tt&amp;gt;set_native_filter&amp;lt;/tt&amp;gt;() did not work in rare cases.&lt;br /&gt;
*Fixed {{amb|107}}: &amp;lt;tt&amp;gt;socket_open&amp;lt;/tt&amp;gt;() didn't return an error by reference.&lt;br /&gt;
*Fixed {{amb|110}}: &amp;lt;tt&amp;gt;socket_change&amp;lt;/tt&amp;gt;() could return 1 on certain failures.&lt;br /&gt;
*Fixed {{amb|116}}: &amp;lt;tt&amp;gt;DispatchKeyValue&amp;lt;/tt&amp;gt;() did not work on worldspawn (entity 0).&lt;br /&gt;
*Fixed {{amb|230}}: &amp;lt;tt&amp;gt;radius_damage&amp;lt;/tt&amp;gt;() didn't kill players on all mods.&lt;br /&gt;
*Fixed {{amb|257}}: &amp;lt;tt&amp;gt;get_user_origin&amp;lt;/tt&amp;gt;() mode 4 had false positives.&lt;br /&gt;
*Fixed {{amb|343}}: &amp;lt;tt&amp;gt;TFC_ClearModel&amp;lt;/tt&amp;gt;() did not function as documented.&lt;br /&gt;
*Fixed {{amb|421}}: &amp;lt;tt&amp;gt;get_user_weapons&amp;lt;/tt&amp;gt;() could omit a weapon on Day of Defeat.&lt;br /&gt;
*Fixed {{amb|437}}: &amp;lt;tt&amp;gt;dod_set_user_kills&amp;lt;/tt&amp;gt;() and &amp;lt;tt&amp;gt;dod_set_user_score&amp;lt;/tt&amp;gt;() could mess up the scoreboard.&lt;br /&gt;
*Fixed {{amb|519}}: &amp;lt;tt&amp;gt;geoip_code[2|3]&amp;lt;/tt&amp;gt;() buffer overflowed on error.&lt;br /&gt;
*Fixed {{amb|736}}: &amp;lt;tt&amp;gt;find_entity&amp;lt;/tt&amp;gt;() was defined twice.&lt;br /&gt;
*Fixed a memory leak in &amp;lt;tt&amp;gt;SortCustom1D&amp;lt;/tt&amp;gt;().&lt;br /&gt;
*Fixed a crash bug in &amp;lt;tt&amp;gt;fwrite_blocks&amp;lt;/tt&amp;gt;().&lt;br /&gt;
&lt;br /&gt;
==Plugin Changes==&lt;br /&gt;
*There is no longer a hardcoded limit to the number of admins.&lt;br /&gt;
*There is no longer a hardcoded limit to the map list.&lt;br /&gt;
*There is no longer a hardcoded limit to the number of &amp;quot;imessages.&amp;quot;&lt;br /&gt;
*Added {{amb|34}}: There are now plugin command/cvar menus.&lt;br /&gt;
*Added {{AMBug|45044}}: amx_banmenu now prints the ban time length.&lt;br /&gt;
*Added {{AMBug|43757}}: amx_addadmin now writes a comment with the player's name.&lt;br /&gt;
*Added {{AMBug|29353}}: amx_plugins now prints paginated output.&lt;br /&gt;
*Added {{AMBug|50742}}: admin.sma now supports prefix based per-map configs.&lt;br /&gt;
*Added {{amb|28}}: statscfg.sma can now use translations.&lt;br /&gt;
*Added {{amb|30}}: &amp;lt;tt&amp;gt;csstats_rankbots&amp;lt;/tt&amp;gt; prevents bots from showing on &amp;lt;tt&amp;gt;/top15&amp;lt;/tt&amp;gt;.&lt;br /&gt;
*Added {{amb|31}}: plmenu.sma ban and slap options are now configurable.&lt;br /&gt;
*Added {{amb|42}}: Added new values for &amp;lt;tt&amp;gt;amx_show_activity&amp;lt;/tt&amp;gt;.&lt;br /&gt;
*Added {{amb|51}}: amx_vote can now take more than two options.&lt;br /&gt;
*Added {{amb|64}}: amx_voteban autodetects whether it should IP ban.&lt;br /&gt;
*Added {{amb|307}}: amx_addban now caches the last ten connections.&lt;br /&gt;
*Added {{amb|311}}: mapcycle file now ignores .bsp extensions.&lt;br /&gt;
*Added {{amb|340}}: amx_ban/amx_banip now display a reason in the activity.&lt;br /&gt;
*Added {{amb|427}}: Additional weapons to &amp;lt;tt&amp;gt;dod_[g|s]et_user_ammo&amp;lt;/tt&amp;gt;().&lt;br /&gt;
*Added {{amb|743}}: plmenu for cstrike has an option to move to spectator.&lt;br /&gt;
*Fixed {{amb|29}}: pausecfg.sma did not translate two phrases.&lt;br /&gt;
*Fixed {{amb|91}}: miscstats.sma truncated some language translations.&lt;br /&gt;
*Fixed {{amb|94}}: amx_psay sometimes sent truncated messages.&lt;br /&gt;
*Fixed {{amb|109}}: mapsmenu.sma now checks &amp;lt;tt&amp;gt;mapcyclefile&amp;lt;/tt&amp;gt; before reverting to &amp;lt;tt&amp;gt;mapcycle.txt&amp;lt;/tt&amp;gt;.&lt;br /&gt;
*Fixed {{amb|118}}: amx_help would not list &amp;lt;tt&amp;gt;ADMIN_ADMIN&amp;lt;/tt&amp;gt; commands.&lt;br /&gt;
*Fixed {{amb|130}}: Various menus did not take &amp;lt;tt&amp;gt;ADMIN_ALL&amp;lt;/tt&amp;gt; or &amp;lt;tt&amp;gt;ADMIN_ADMIN&amp;lt;/tt&amp;gt; into account.&lt;br /&gt;
*Fixed {{amb|183}}: plmenu.sma did not work on Natural Selection.&lt;br /&gt;
*Fixed {{amb|196}}: amx_modules did not handle invalid modules properly.&lt;br /&gt;
*Fixed {{amb|222}}: cl_rebuy could exploit CS weapon restrictions.  This also makes CZ bots obey restrictions.&lt;br /&gt;
*Fixed {{amb|228}}: amxmod_compat could cause &amp;lt;tt&amp;gt;set_user_hitzones&amp;lt;/tt&amp;gt;() to break.&lt;br /&gt;
*Fixed {{amb|350}}: &amp;lt;tt&amp;gt;traceline_set_float&amp;lt;/tt&amp;gt; from the AMX Mod Compat layer was broken.&lt;br /&gt;
*Fixed {{amb|467}}: &amp;lt;tt&amp;gt;conmotd.txt&amp;lt;/tt&amp;gt; is now removed.&lt;br /&gt;
*Fixed {{amb|633}}: Immune admins can now target themselves.&lt;br /&gt;
*Fixed {{amb|790}}: admin.sma parsed beginning spaces incorrectly in users.ini.&lt;br /&gt;
*Fixed a potential exploit in adminslots.sma.&lt;br /&gt;
*SQL cvars are now protected.&lt;br /&gt;
&lt;br /&gt;
==Module Changes==&lt;br /&gt;
*Fixed {{amb|108}}: IP-based stats no longer include a port when saving.&lt;br /&gt;
*Fixed {{amb|503}}: CSX did not set a META_RESULT when paused.&lt;/div&gt;</summary>
		<author><name>VEN</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.alliedmods.net/index.php?title=Talk:Ru_AMX_Mod_X_FAQ&amp;diff=4022</id>
		<title>Talk:Ru AMX Mod X FAQ</title>
		<link rel="alternate" type="text/html" href="https://wiki.alliedmods.net/index.php?title=Talk:Ru_AMX_Mod_X_FAQ&amp;diff=4022"/>
		<updated>2007-03-19T10:36:11Z</updated>

		<summary type="html">&lt;p&gt;VEN: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[User:Slogic|Slogic]]: может убрать определения и оставить только сокращения, а определение терминов реализовать используя возможности WIKI? Или даже сокращения убрать, а в процессе написания делать ссылки на описание этих слов/сокращений.&lt;br /&gt;
: &amp;quot;По-хорошему&amp;quot;, конечно, нужны отдельные страницы-определения. Насчет второго тезиса: смотря, как реализовать. Если указывать аббревиатуры на самих страницах-определяниях, это не будет достаточно полезно, т.к. это усложнит поиск значения аббревиатуры. Для каждой аббревиатуры лучше создавать отдельную страницу или страницу-редирект, которая в свою очередь направляет на страницу-определение. Т.о. поиск значения аббревиатуры значительно упрощается.&lt;br /&gt;
: --[[User:VEN|VEN]] 05:36, 19 March 2007 (CDT)&lt;/div&gt;</summary>
		<author><name>VEN</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.alliedmods.net/index.php?title=Ru_AMX_Mod_X_FAQ&amp;diff=4019</id>
		<title>Ru AMX Mod X FAQ</title>
		<link rel="alternate" type="text/html" href="https://wiki.alliedmods.net/index.php?title=Ru_AMX_Mod_X_FAQ&amp;diff=4019"/>
		<updated>2007-03-19T07:43:05Z</updated>

		<summary type="html">&lt;p&gt;VEN: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Russian]]&lt;br /&gt;
[[Category:Ru:AMX Mod X]]&lt;br /&gt;
= Общие положения, термины, сокращения и условные обозначения =&lt;br /&gt;
:* HL или HL1 - аббревиатура от [[Half-Life 1|Half-Life]] (часть первая);&lt;br /&gt;
:* Mod - &amp;quot;мод&amp;quot;, модификация - дополнение к чему-либо, как правило, расширяющее/изменяющее функциональность;&lt;br /&gt;
:* HL Engine - &amp;quot;движок&amp;quot; Half-Life - &amp;quot;центральный модуль&amp;quot;, осуществляющий выполнение базовых &amp;quot;общемодовых&amp;quot; задач;&lt;br /&gt;
:* MM - [[Metamod]] - сторонний мод особого типа, является промежуточным звеном в системе &amp;quot;HL движок - HL мод&amp;quot;;&lt;br /&gt;
:* AMXX - аббревиатура от [[AMX Mod X]] - Metamod plugin (&amp;quot;плагин&amp;quot;), своего рода Metamod мод;&lt;br /&gt;
:* Map - &amp;quot;карта&amp;quot; - определяет внешний вид территории, на которой происходит игровое действие;&lt;br /&gt;
:* World - &amp;quot;мир&amp;quot; - все пространство, которое занимает карта, а также область, находящаяся за картой;&lt;br /&gt;
:* Spawn - &amp;quot;спавн&amp;quot; - момент, когда игрок появляется в мире, обретая физическое тело;&lt;br /&gt;
:* SinglePlayer - &amp;quot;синглплеер&amp;quot; - игровой тип, когда одновременно в игре может участвовать только один игрок;&lt;br /&gt;
:* MultiPlayer - &amp;quot;мультиплеер&amp;quot; - игровой тип, когда одновременно в игре может участвовать несколько игроков;&lt;br /&gt;
:* DM - аббревиатура от Death Match - динамичный мультиплеер тип игры, когда после &amp;quot;смерти&amp;quot; игрока происходит его скорый спавн (&amp;quot;респавн&amp;quot;);&lt;br /&gt;
:* HLDM - аббревиатура от Half-Life Death Match - оригинальный HL мод DM типа;&lt;br /&gt;
:* CS - аббревиатура от [[Counter-Stirke]] - наиболее популярный HL мод;&lt;br /&gt;
:* VALVE - [[VALVe Software|корпорация, разработчик HL и CS]], также редко используется как термин, синонимичный HLDM, но подчеркивающий название директории мода (&amp;quot;valve&amp;quot;);&lt;br /&gt;
:* $MODDIR - способ условного обозначения корневой директории мода, например: ''cstrike'', ''valve'';&lt;br /&gt;
:* $MMDIR - способ условного обозначения относительного пути (относительно пути к $MODDIR) к корневой директории Metamod, по-умолчанию: ''addons/metamod'';&lt;br /&gt;
:* $AMXMODX - способ условного обозначения относительного пути (относительно пути к $MODDIR) к корневой директории AMX Mod X, по-умолчанию: ''addons/amxmodx''.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Общие вопросы =&lt;br /&gt;
== Где скачать последнюю версию AMX Mod X? ==&lt;br /&gt;
: Последнюю версию всегда можно скачать на официальном сайте AMX Mod X в [http://www.amxmodx.org/downloads.php разделе закачек].&lt;br /&gt;
&lt;br /&gt;
== А что именно качать? ==&lt;br /&gt;
: Качайте либо инсталлятор (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 мода.&lt;br /&gt;
&lt;br /&gt;
== Где искать плагины? ==&lt;br /&gt;
: Предварительно отметим, что условно AMX Mod X плагины можно разделить на следующие категории: стандартные, официально одобренные, официально отклоненные и неофициальные. Одобренные плагины можно искать [http://www.amxmodx.org/compiler.php здесь], или, используя [http://forums.alliedmods.net/search.php поисковую систему официального форума]. В поле '''Search in Forum(s)''' отметьте '''Approved Plugins''', также, зажав клавишу Ctrl, можно отметить интересующие вас секции из подраздела '''High-Traffic Plugins'''. Чтобы искать неофициальные плагины, следует также воспользоваться [http://forums.alliedmods.net/search.php поисковой системой официального форума], правда, в поле '''Search in Forum(s)''' необходимо выбрать '''Unapproved/Old Plugins'''. Если для вас не имеет значения статус плагина, и вы склонны к экспериментам, осуществляйте поиск по категории '''Plugins''', которая включает в себя одобренные, отклоненные, недавно опубликованные, вполне возможно, &amp;quot;сырые&amp;quot; плагины, а также темы-запросы, в которых могут быть &amp;quot;быстро написанные&amp;quot; плагины. Немного поработав с поисковой формой форума, вы легко освоите эту систему. Единственное возможное для некоторых неудобство - практически все описания плагинов написаны на английcком языке. Неофициальные плагины также можно попробовать искать с помощью общеизвестных поисковых систем: Google, Yandex, Rambler и др.&lt;br /&gt;
&lt;br /&gt;
== Сколько плагинов сейчас выпущено под AMX Mod X? ==&lt;br /&gt;
: &amp;quot;Тонны&amp;quot; плагинов. Но, к сожалению, качеством и надежностью б'''о'''льшая половина из них не белещет. К тому же некоторые плагины, &amp;quot;заброшены&amp;quot; авторами и не обновляются, что приводит даже к несовместимости с новыми версиями AMX Mod X.&lt;br /&gt;
&lt;br /&gt;
== Как устанавливать плагины? ==&lt;br /&gt;
: Обратитесь к [[Ru Configuring AMX Mod X|этой]] статье.&lt;br /&gt;
&lt;br /&gt;
== Как удалять плагины? ==&lt;br /&gt;
: Обратитесь к [[Ru Configuring AMX Mod X|этой]] статье.&lt;br /&gt;
&lt;br /&gt;
== Как запустить два различных сервера AMX Mod X? ==&lt;br /&gt;
: К примеру, вы хотите запустить два различных сервера из одной ''cstrike'' директории на базе различных AMX Mod X/Metamod плагинов, настроек и прочего. Это решаемо. Один из примеров для win32 системы приведен ниже:&lt;br /&gt;
:* Создать отдельную AMX Mod X директорию с необходимыми файлами, например: ''addons/amxmodx2''&lt;br /&gt;
:* В ''addons/amxmodx2/configs/core.ini'' везде изменить &amp;quot;amxmodx&amp;quot; на &amp;quot;amxmodx2&amp;quot;&lt;br /&gt;
:* Создать отдельный файл загрузки Metamod плагинов, например: ''addons/metamod/plugins2.ini''&lt;br /&gt;
:* В созданный ''plugins2.ini'' файл вписать: ''win32 addons\amxmodx2\dlls\amxmodx_mm.dll''&lt;br /&gt;
:* Создать в директории ''cstrike'' файл, например, с именем ''amxmodx2.cfg'', его содержимое должно быть следующим:&lt;br /&gt;
&amp;lt;pre&amp;gt;localinfo mm_pluginsfile &amp;quot;addons/metamod/plugins2.ini&amp;quot;&lt;br /&gt;
localinfo amxx_basedir &amp;quot;addons/amxmodx2&amp;quot;&lt;br /&gt;
localinfo amxx_cfg &amp;quot;addons/amxmodx2/configs/core.ini&amp;quot;&lt;br /&gt;
localinfo amxx_configsdir &amp;quot;addons/amxmodx2/configs&amp;quot;&lt;br /&gt;
localinfo amxx_customdir &amp;quot;addons/amxmodx2/custom&amp;quot;&lt;br /&gt;
localinfo amxx_datadir &amp;quot;addons/amxmodx2/data&amp;quot;&lt;br /&gt;
localinfo amxx_logdir &amp;quot;addons/amxmodx2/logs&amp;quot;&lt;br /&gt;
localinfo amxx_logs &amp;quot;addons/amxmodx2/logs&amp;quot;&lt;br /&gt;
localinfo amxx_modules &amp;quot;addons/amxmodx2/configs/modules.ini&amp;quot;&lt;br /&gt;
localinfo amxx_modulesdir &amp;quot;addons/amxmodx2/modules&amp;quot;&lt;br /&gt;
localinfo amxx_plugins &amp;quot;addons/amxmodx2/configs/plugins.ini&amp;quot;&lt;br /&gt;
localinfo amxx_pluginsdir &amp;quot;addons/amxmodx2/plugins&amp;quot;&lt;br /&gt;
localinfo amxx_vault &amp;quot;addons/amxmodx2/data/vault.ini&amp;quot;&lt;br /&gt;
localinfo csstats &amp;quot;addons/amxmodx2/data/csstats.dat&amp;quot;&lt;br /&gt;
localinfo csstats_score &amp;quot;addons/amxmodx2/data/csstats.amxx&amp;quot;&lt;br /&gt;
localinfo amx_basedir &amp;quot;addons/amxmodx2&amp;quot;&lt;br /&gt;
localinfo amx_configdir &amp;quot;addons/amxmodx2/configs&amp;quot;&lt;br /&gt;
localinfo amx_langdir &amp;quot;addons/amxmodx2/data/amxmod-lang&amp;quot;&lt;br /&gt;
localinfo amx_logdir &amp;quot;addons/amxmodx2/logs&amp;quot;&lt;br /&gt;
localinfo amx_modulesdir &amp;quot;addons/amxmodx2/modules&amp;quot;&lt;br /&gt;
localinfo amx_pluginsdir &amp;quot;addons/amxmodx2/plugins&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
:* Теперь второй сервер необходимо будет запускать с параметром командной строки: ''+exec amxmodx2.cfg''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Вопросы по компилированию =&lt;br /&gt;
== Что такое компиляция? ==&lt;br /&gt;
: Это процесс, который переводит текстовые файлы (*.sma), содержащие исходный код (т.е. инструкции для AMX Mod X, который их исполняет), в формат, более пригодный для исполнения.  За счет этого скорость выполнения плагинов возрастает многократно, упрощается разработка &amp;quot;движка&amp;quot;, который эти плагины исполняет, а также в некотором смысле защищается авторский код. Почему в &amp;quot;некотором смысле&amp;quot;? Потому что все AMX Mod X плагины должны публиковаться под лицензией GNU General Public License. В случае опубликования плагина лицензия обязывает также публиковать его исходный код. Откомпилированные плагины имеют расширение .amxx. Именно файлы этого типа, а не .sma, должны указываться в файле plugins.ini для последующей корректной загрузки плагина.&lt;br /&gt;
&lt;br /&gt;
== Как компилировать плагины? ==&lt;br /&gt;
: Базовую информацию вы можете найти на [[Ru Compiling Plugins (AMX Mod X)|этой]] странице.&lt;br /&gt;
&lt;br /&gt;
== Как упростить процесс компилирования? ==&lt;br /&gt;
: Можно написать стороннюю программу или скрипт, например такой, как пакетный batch файл. Например, создайте файл make.bat со следующим содержимым:&lt;br /&gt;
 @amxxpc.exe %1 -i.\include -o.\compiled\%1&lt;br /&gt;
: Чтобы с помощью него откомпилировать плагин, необходимо выполнить следующую команду:&lt;br /&gt;
 make.bat my_plugin.sma&lt;br /&gt;
: В итоге откомпилированный файл будет помещен в каталог ''compiled'' текущей директории. Если его там нет, значит в процессе компилирования возникли фатальные ошибки, которые выводятся на экран.&lt;br /&gt;
: Если вам необходимо (например, в случае ошибок) отправить кому-нибудь результат компиляции, можете перенаправить вывод информации о процессе компилирования в файл, например таким образом:&lt;br /&gt;
 make.bat my_plugin.sma &amp;gt; my_plugin.log&lt;br /&gt;
&lt;br /&gt;
== Компилятор выводит &amp;quot;max. usage is unknown, due to recursion&amp;quot; ==&lt;br /&gt;
: Ничего страшного - просто компилятор не может вычислить предполагаемый объем памяти, используемый вашим плагином.&lt;br /&gt;
&lt;br /&gt;
= Вопросы по скриптингу =&lt;br /&gt;
&lt;br /&gt;
== С чего начать? ==&lt;br /&gt;
: С со статьи [[Ru Fundamental Basics of AMX Mod X Scripting|Фундаментальные основы AMX Mod X скриптинга]].&lt;br /&gt;
&lt;br /&gt;
== А стоит ли вообще начинать? ==&lt;br /&gt;
: В зависимости от того, какую цель вы преследуете, а также от вашего желания и потенциала.&lt;/div&gt;</summary>
		<author><name>VEN</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.alliedmods.net/index.php?title=Ru_AMX_Mod_X_FAQ&amp;diff=4018</id>
		<title>Ru AMX Mod X FAQ</title>
		<link rel="alternate" type="text/html" href="https://wiki.alliedmods.net/index.php?title=Ru_AMX_Mod_X_FAQ&amp;diff=4018"/>
		<updated>2007-03-19T07:37:14Z</updated>

		<summary type="html">&lt;p&gt;VEN: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Russian]]&lt;br /&gt;
[[Category:Ru:AMX Mod X]]&lt;br /&gt;
= Общие положения, термины, сокращения и условные обозначения =&lt;br /&gt;
:* HL или HL1 - аббревиатура от [[Half-Life]] (часть первая);&lt;br /&gt;
:* Mod - &amp;quot;мод&amp;quot;, модификация - дополнение к чему-либо, как правило, расширяющее/изменяющее функциональность;&lt;br /&gt;
:* HL Engine - &amp;quot;движок&amp;quot; Half-Life - &amp;quot;центральный модуль&amp;quot;, осуществляющий выполнение базовых &amp;quot;общемодовых&amp;quot; задач;&lt;br /&gt;
:* MM - [[MetaMod]] - сторонний мод особого типа, является промежуточным звеном в системе &amp;quot;HL движок - HL мод&amp;quot;;&lt;br /&gt;
:* AMXX - аббревиатура от [[AMX Mod X]] - MetaMod plugin (&amp;quot;плагин&amp;quot;), своего рода MetaMod мод;&lt;br /&gt;
:* Map - &amp;quot;карта&amp;quot; - определяет внешний вид территории, на которой происходит игровое действие;&lt;br /&gt;
:* World - &amp;quot;мир&amp;quot; - все пространство, которое занимает карта, а также область, находящаяся за картой;&lt;br /&gt;
:* Spawn - &amp;quot;спавн&amp;quot; - момент, когда игрок появляется в мире, обретая физическое тело;&lt;br /&gt;
:* SinglePlayer - &amp;quot;синглплеер&amp;quot; - игровой тип, когда одновременно в игре может участвовать только один игрок;&lt;br /&gt;
:* MultiPlayer - &amp;quot;мультиплеер&amp;quot; - игровой тип, когда одновременно в игре может участвовать несколько игроков;&lt;br /&gt;
:* DM - аббревиатура от Death Match - динамичный мультиплеер тип игры, когда после &amp;quot;смерти&amp;quot; игрока происходит его скорый спавн (&amp;quot;респавн&amp;quot;);&lt;br /&gt;
:* HLDM - аббревиатура от Half-Life Death Match - оригинальный HL мод DM типа;&lt;br /&gt;
:* CS - аббревиатура от [[Counter-Stirke]] - наиболее популярный HL мод;&lt;br /&gt;
:* VALVE - [[VALVe Software|корпорация, разработчик HL и CS]], также редко используется как термин, синонимичный HLDM, но подчеркивающий название директории мода (&amp;quot;valve&amp;quot;);&lt;br /&gt;
:* $MODDIR - способ условного обозначения корневой директории мода, например: ''cstrike'', ''valve'';&lt;br /&gt;
:* $MMDIR - способ условного обозначения относительного пути (относительно пути к $MODDIR) к корневой директории MetaMod, по-умолчанию: ''addons/metamod'';&lt;br /&gt;
:* $AMXMODX - способ условного обозначения относительного пути (относительно пути к $MODDIR) к корневой директории AMX Mod X, по-умолчанию: ''addons/amxmodx''.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Общие вопросы =&lt;br /&gt;
== Где скачать последнюю версию AMX Mod X? ==&lt;br /&gt;
: Последнюю версию всегда можно скачать на официальном сайте AMX Mod X в [http://www.amxmodx.org/downloads.php разделе закачек].&lt;br /&gt;
&lt;br /&gt;
== А что именно качать? ==&lt;br /&gt;
: Качайте либо инсталлятор (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 мода.&lt;br /&gt;
&lt;br /&gt;
== Где искать плагины? ==&lt;br /&gt;
: Предварительно отметим, что условно AMX Mod X плагины можно разделить на следующие категории: стандартные, официально одобренные, официально отклоненные и неофициальные. Одобренные плагины можно искать [http://www.amxmodx.org/compiler.php здесь], или, используя [http://forums.alliedmods.net/search.php поисковую систему официального форума]. В поле '''Search in Forum(s)''' отметьте '''Approved Plugins''', также, зажав клавишу Ctrl, можно отметить интересующие вас секции из подраздела '''High-Traffic Plugins'''. Чтобы искать неофициальные плагины, следует также воспользоваться [http://forums.alliedmods.net/search.php поисковой системой официального форума], правда, в поле '''Search in Forum(s)''' необходимо выбрать '''Unapproved/Old Plugins'''. Если для вас не имеет значения статус плагина, и вы склонны к экспериментам, осуществляйте поиск по категории '''Plugins''', которая включает в себя одобренные, отклоненные, недавно опубликованные, вполне возможно, &amp;quot;сырые&amp;quot; плагины, а также темы-запросы, в которых могут быть &amp;quot;быстро написанные&amp;quot; плагины. Немного поработав с поисковой формой форума, вы легко освоите эту систему. Единственное возможное для некоторых неудобство - практически все описания плагинов написаны на английcком языке. Неофициальные плагины также можно попробовать искать с помощью общеизвестных поисковых систем: Google, Yandex, Rambler и др.&lt;br /&gt;
&lt;br /&gt;
== Сколько плагинов сейчас выпущено под AMX Mod X? ==&lt;br /&gt;
: &amp;quot;Тонны&amp;quot; плагинов. Но, к сожалению, качеством и надежностью б'''о'''льшая половина из них не белещет. К тому же некоторые плагины, &amp;quot;заброшены&amp;quot; авторами и не обновляются, что приводит даже к несовместимости с новыми версиями AMX Mod X.&lt;br /&gt;
&lt;br /&gt;
== Как устанавливать плагины? ==&lt;br /&gt;
: Обратитесь к [[Ru Configuring AMX Mod X|этой]] статье.&lt;br /&gt;
&lt;br /&gt;
== Как удалять плагины? ==&lt;br /&gt;
: Обратитесь к [[Ru Configuring AMX Mod X|этой]] статье.&lt;br /&gt;
&lt;br /&gt;
== Как запустить два различных сервера AMX Mod X? ==&lt;br /&gt;
: К примеру, вы хотите запустить два различных сервера из одной ''cstrike'' директории на базе различных AMX Mod X/MetaMod плагинов, настроек и прочего. Это решаемо. Один из примеров для win32 системы приведен ниже:&lt;br /&gt;
:* Создать отдельную AMX Mod X директорию с необходимыми файлами, например: ''addons/amxmodx2''&lt;br /&gt;
:* В ''addons/amxmodx2/configs/core.ini'' везде изменить &amp;quot;amxmodx&amp;quot; на &amp;quot;amxmodx2&amp;quot;&lt;br /&gt;
:* Создать отдельный файл загрузки MetaMod плагинов, например: ''addons/metamod/plugins2.ini''&lt;br /&gt;
:* В созданный ''plugins2.ini'' файл вписать: ''win32 addons\amxmodx2\dlls\amxmodx_mm.dll''&lt;br /&gt;
:* Создать в директории ''cstrike'' файл, например, с именем ''amxmodx2.cfg'', его содержимое должно быть следующим:&lt;br /&gt;
&amp;lt;pre&amp;gt;localinfo mm_pluginsfile &amp;quot;addons/metamod/plugins2.ini&amp;quot;&lt;br /&gt;
localinfo amxx_basedir &amp;quot;addons/amxmodx2&amp;quot;&lt;br /&gt;
localinfo amxx_cfg &amp;quot;addons/amxmodx2/configs/core.ini&amp;quot;&lt;br /&gt;
localinfo amxx_configsdir &amp;quot;addons/amxmodx2/configs&amp;quot;&lt;br /&gt;
localinfo amxx_customdir &amp;quot;addons/amxmodx2/custom&amp;quot;&lt;br /&gt;
localinfo amxx_datadir &amp;quot;addons/amxmodx2/data&amp;quot;&lt;br /&gt;
localinfo amxx_logdir &amp;quot;addons/amxmodx2/logs&amp;quot;&lt;br /&gt;
localinfo amxx_logs &amp;quot;addons/amxmodx2/logs&amp;quot;&lt;br /&gt;
localinfo amxx_modules &amp;quot;addons/amxmodx2/configs/modules.ini&amp;quot;&lt;br /&gt;
localinfo amxx_modulesdir &amp;quot;addons/amxmodx2/modules&amp;quot;&lt;br /&gt;
localinfo amxx_plugins &amp;quot;addons/amxmodx2/configs/plugins.ini&amp;quot;&lt;br /&gt;
localinfo amxx_pluginsdir &amp;quot;addons/amxmodx2/plugins&amp;quot;&lt;br /&gt;
localinfo amxx_vault &amp;quot;addons/amxmodx2/data/vault.ini&amp;quot;&lt;br /&gt;
localinfo csstats &amp;quot;addons/amxmodx2/data/csstats.dat&amp;quot;&lt;br /&gt;
localinfo csstats_score &amp;quot;addons/amxmodx2/data/csstats.amxx&amp;quot;&lt;br /&gt;
localinfo amx_basedir &amp;quot;addons/amxmodx2&amp;quot;&lt;br /&gt;
localinfo amx_configdir &amp;quot;addons/amxmodx2/configs&amp;quot;&lt;br /&gt;
localinfo amx_langdir &amp;quot;addons/amxmodx2/data/amxmod-lang&amp;quot;&lt;br /&gt;
localinfo amx_logdir &amp;quot;addons/amxmodx2/logs&amp;quot;&lt;br /&gt;
localinfo amx_modulesdir &amp;quot;addons/amxmodx2/modules&amp;quot;&lt;br /&gt;
localinfo amx_pluginsdir &amp;quot;addons/amxmodx2/plugins&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
:* Теперь второй сервер необходимо будет запускать с параметром командной строки: ''+exec amxmodx2.cfg''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Вопросы по компилированию =&lt;br /&gt;
== Что такое компиляция? ==&lt;br /&gt;
: Это процесс, который переводит текстовые файлы (*.sma), содержащие исходный код (т.е. инструкции для AMX Mod X, который их исполняет), в формат, более пригодный для исполнения.  За счет этого скорость выполнения плагинов возрастает многократно, упрощается разработка &amp;quot;движка&amp;quot;, который эти плагины исполняет, а также в некотором смысле защищается авторский код. Почему в &amp;quot;некотором смысле&amp;quot;? Потому что все AMX Mod X плагины должны публиковаться под лицензией GNU General Public License. В случае опубликования плагина лицензия обязывает также публиковать его исходный код. Откомпилированные плагины имеют расширение .amxx. Именно файлы этого типа, а не .sma, должны указываться в файле plugins.ini для последующей корректной загрузки плагина.&lt;br /&gt;
&lt;br /&gt;
== Как компилировать плагины? ==&lt;br /&gt;
: Базовую информацию вы можете найти на [[Ru Compiling Plugins (AMX Mod X)|этой]] странице.&lt;br /&gt;
&lt;br /&gt;
== Как упростить процесс компилирования? ==&lt;br /&gt;
: Можно написать стороннюю программу или скрипт, например такой, как пакетный batch файл. Например, создайте файл make.bat со следующим содержимым:&lt;br /&gt;
 @amxxpc.exe %1 -i.\include -o.\compiled\%1&lt;br /&gt;
: Чтобы с помощью него откомпилировать плагин, необходимо выполнить следующую команду:&lt;br /&gt;
 make.bat my_plugin.sma&lt;br /&gt;
: В итоге откомпилированный файл будет помещен в каталог ''compiled'' текущей директории. Если его там нет, значит в процессе компилирования возникли фатальные ошибки, которые выводятся на экран.&lt;br /&gt;
: Если вам необходимо (например, в случае ошибок) отправить кому-нибудь результат компиляции, можете перенаправить вывод информации о процессе компилирования в файл, например таким образом:&lt;br /&gt;
 make.bat my_plugin.sma &amp;gt; my_plugin.log&lt;br /&gt;
&lt;br /&gt;
== Компилятор выводит &amp;quot;max. usage is unknown, due to recursion&amp;quot; ==&lt;br /&gt;
: Ничего страшного - просто компилятор не может вычислить предполагаемый объем памяти, используемый вашим плагином.&lt;br /&gt;
&lt;br /&gt;
= Вопросы по скриптингу =&lt;br /&gt;
&lt;br /&gt;
== С чего начать? ==&lt;br /&gt;
: С со статьи [[Ru Fundamental Basics of AMX Mod X Scripting|Фундаментальные основы AMX Mod X скриптинга]].&lt;br /&gt;
&lt;br /&gt;
== А стоит ли вообще начинать? ==&lt;br /&gt;
: В зависимости от того, какую цель вы преследуете, а также от вашего желания и потенциала.&lt;/div&gt;</summary>
		<author><name>VEN</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.alliedmods.net/index.php?title=Ru_AMX_Mod_X_FAQ&amp;diff=4015</id>
		<title>Ru AMX Mod X FAQ</title>
		<link rel="alternate" type="text/html" href="https://wiki.alliedmods.net/index.php?title=Ru_AMX_Mod_X_FAQ&amp;diff=4015"/>
		<updated>2007-03-18T14:09:04Z</updated>

		<summary type="html">&lt;p&gt;VEN: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Russian]]&lt;br /&gt;
[[Category:Ru:AMX Mod X]]&lt;br /&gt;
= Общие положения, термины, сокращения и условные обозначения =&lt;br /&gt;
:* HL или HL1 - аббревиатура от Half-Life (часть первая);&lt;br /&gt;
:* Mod - &amp;quot;мод&amp;quot;, модификация - дополнение к чему-либо, как правило, расширяющее/изменяющее функциональность;&lt;br /&gt;
:* HL Engine - &amp;quot;движок&amp;quot; Half-Life - &amp;quot;центральный модуль&amp;quot;, осуществляющий выполнение базовых &amp;quot;общемодовых&amp;quot; задач;&lt;br /&gt;
:* MM - MetaMod - сторонний мод особого типа, является промежуточным звеном в системе &amp;quot;HL движок - HL мод&amp;quot;;&lt;br /&gt;
:* AMXX - аббревиатура от [[AMX Mod X]] - MetaMod plugin (&amp;quot;плагин&amp;quot;), своего рода MetaMod мод;&lt;br /&gt;
:* Map - &amp;quot;карта&amp;quot; - определяет внешний вид территории, на которой происходит игровое действие;&lt;br /&gt;
:* World - &amp;quot;мир&amp;quot; - все пространство, которое занимает карта, а также область, находящаяся за картой;&lt;br /&gt;
:* Spawn - &amp;quot;спавн&amp;quot; - момент, когда игрок появляется в мире, обретая физическое тело;&lt;br /&gt;
:* SinglePlayer - &amp;quot;синглплеер&amp;quot; - игровой тип, когда одновременно в игре может участвовать только один игрок;&lt;br /&gt;
:* MultiPlayer - &amp;quot;мультиплеер&amp;quot; - игровой тип, когда одновременно в игре может участвовать несколько игроков;&lt;br /&gt;
:* DM - аббревиатура от Death Match - динамичный мультиплеер тип игры, когда после &amp;quot;смерти&amp;quot; игрока происходит его скорый спавн (&amp;quot;респавн&amp;quot;);&lt;br /&gt;
:* HLDM - аббревиатура от Half-Life Death Match - оригинальный HL мод DM типа;&lt;br /&gt;
:* CS - аббревиатура от Counter-Stirke - наиболее популярный HL мод;&lt;br /&gt;
:* VALVE - кампания, разработчик HL и CS, также редко используется как термин, синонимичный HLDM, но направленный на акцентирование названия директории мода (&amp;quot;valve&amp;quot;);&lt;br /&gt;
:* $MODDIR - способ обобщенного указания названия корневой директории мода, например: ''cstrike'', ''valve'';&lt;br /&gt;
:* $MMDIR - способ обобщенного указания относительного пути (относительно пути к $MODDIR) к корневой директории MetaMod, по-умолчанию: ''addons/metamod'';&lt;br /&gt;
:* $AMXMODX - способ обобщенного указания относительного пути (относительно пути к $MODDIR) к корневой директории AMX Mod X, по-умолчанию: ''addons/amxmodx''.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Общие вопросы =&lt;br /&gt;
== Где скачать последнюю версию AMX Mod X? ==&lt;br /&gt;
: Последнюю версию всегда можно скачать на официальном сайте AMX Mod X в [http://www.amxmodx.org/downloads.php разделе закачек].&lt;br /&gt;
&lt;br /&gt;
== А что именно качать? ==&lt;br /&gt;
: Качайте либо инсталлятор (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 мода.&lt;br /&gt;
&lt;br /&gt;
== Где искать плагины? ==&lt;br /&gt;
: Предварительно отметим, что условно AMX Mod X плагины можно разделить на следующие категории: стандартные, официально одобренные, официально отклоненные и неофициальные. Одобренные плагины можно искать [http://www.amxmodx.org/compiler.php здесь], или, используя [http://forums.alliedmods.net/search.php поисковую систему официального форума]. В поле '''Search in Forum(s)''' отметьте '''Approved Plugins''', также, зажав клавишу Ctrl, можно отметить интересующие вас секции из подраздела '''High-Traffic Plugins'''. Чтобы искать неофициальные плагины, следует также воспользоваться [http://forums.alliedmods.net/search.php поисковой системой официального форума], правда, в поле '''Search in Forum(s)''' необходимо выбрать '''Unapproved/Old Plugins'''. Если для вас не имеет значения статус плагина, и вы склонны к экспериментам, осуществляйте поиск по категории '''Plugins''', которая включает в себя одобренные, отклоненные, недавно опубликованные, вполне возможно, &amp;quot;сырые&amp;quot; плагины, а также темы-запросы, в которых могут быть &amp;quot;быстро написанные&amp;quot; плагины. Немного поработав с поисковой формой форума, вы легко освоите эту систему. Единственное возможное для некоторых неудобство - практически все описания плагинов написаны на английcком языке. Неофициальные плагины также можно попробовать искать с помощью общеизвестных поисковых систем: Google, Yandex, Rambler и др.&lt;br /&gt;
&lt;br /&gt;
== Сколько плагинов сейчас выпущено под AMX Mod X? ==&lt;br /&gt;
: &amp;quot;Тонны&amp;quot; плагинов. Но, к сожалению, качеством и надежностью б'''о'''льшая половина из них не белещет. К тому же некоторые плагины, &amp;quot;заброшены&amp;quot; авторами и не обновляются, что приводит даже к несовместимости с новыми версиями AMX Mod X.&lt;br /&gt;
&lt;br /&gt;
== Как устанавливать плагины? ==&lt;br /&gt;
: Обратитесь к [[Ru Configuring AMX Mod X|этой]] статье.&lt;br /&gt;
&lt;br /&gt;
== Как удалять плагины? ==&lt;br /&gt;
: Обратитесь к [[Ru Configuring AMX Mod X|этой]] статье.&lt;br /&gt;
&lt;br /&gt;
== Как запустить два различных сервера AMX Mod X? ==&lt;br /&gt;
: К примеру, вы хотите запустить два различных сервера из одной ''cstrike'' директории на базе различных AMX Mod X/Metamod плагинов, настроек и прочего. Это решаемо. Один из примеров для win32 системы приведен ниже:&lt;br /&gt;
:* Создать отдельную AMX Mod X директорию с необходимыми файлами, например: ''addons/amxmodx2''&lt;br /&gt;
:* В ''addons/amxmodx2/configs/core.ini'' везде изменить &amp;quot;amxmodx&amp;quot; на &amp;quot;amxmodx2&amp;quot;&lt;br /&gt;
:* Создать отдельный файл загрузки MetaMod плагинов, например: ''addons/metamod/plugins2.ini''&lt;br /&gt;
:* В созданный ''plugins2.ini'' файл вписать: ''win32 addons\amxmodx2\dlls\amxmodx_mm.dll''&lt;br /&gt;
:* Создать в директории ''cstrike'' файл, например, с именем ''amxmodx2.cfg'', его содержимое должно быть следующим:&lt;br /&gt;
&amp;lt;pre&amp;gt;localinfo mm_pluginsfile &amp;quot;addons/metamod/plugins2.ini&amp;quot;&lt;br /&gt;
localinfo amxx_basedir &amp;quot;addons/amxmodx2&amp;quot;&lt;br /&gt;
localinfo amxx_cfg &amp;quot;addons/amxmodx2/configs/core.ini&amp;quot;&lt;br /&gt;
localinfo amxx_configsdir &amp;quot;addons/amxmodx2/configs&amp;quot;&lt;br /&gt;
localinfo amxx_customdir &amp;quot;addons/amxmodx2/custom&amp;quot;&lt;br /&gt;
localinfo amxx_datadir &amp;quot;addons/amxmodx2/data&amp;quot;&lt;br /&gt;
localinfo amxx_logdir &amp;quot;addons/amxmodx2/logs&amp;quot;&lt;br /&gt;
localinfo amxx_logs &amp;quot;addons/amxmodx2/logs&amp;quot;&lt;br /&gt;
localinfo amxx_modules &amp;quot;addons/amxmodx2/configs/modules.ini&amp;quot;&lt;br /&gt;
localinfo amxx_modulesdir &amp;quot;addons/amxmodx2/modules&amp;quot;&lt;br /&gt;
localinfo amxx_plugins &amp;quot;addons/amxmodx2/configs/plugins.ini&amp;quot;&lt;br /&gt;
localinfo amxx_pluginsdir &amp;quot;addons/amxmodx2/plugins&amp;quot;&lt;br /&gt;
localinfo amxx_vault &amp;quot;addons/amxmodx2/data/vault.ini&amp;quot;&lt;br /&gt;
localinfo csstats &amp;quot;addons/amxmodx2/data/csstats.dat&amp;quot;&lt;br /&gt;
localinfo csstats_score &amp;quot;addons/amxmodx2/data/csstats.amxx&amp;quot;&lt;br /&gt;
localinfo amx_basedir &amp;quot;addons/amxmodx2&amp;quot;&lt;br /&gt;
localinfo amx_configdir &amp;quot;addons/amxmodx2/configs&amp;quot;&lt;br /&gt;
localinfo amx_langdir &amp;quot;addons/amxmodx2/data/amxmod-lang&amp;quot;&lt;br /&gt;
localinfo amx_logdir &amp;quot;addons/amxmodx2/logs&amp;quot;&lt;br /&gt;
localinfo amx_modulesdir &amp;quot;addons/amxmodx2/modules&amp;quot;&lt;br /&gt;
localinfo amx_pluginsdir &amp;quot;addons/amxmodx2/plugins&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
:* Теперь второй сервер необходимо будет запускать с параметром командной строки: ''+exec amxmodx2.cfg''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Вопросы по компилированию =&lt;br /&gt;
== Что такое компиляция? ==&lt;br /&gt;
: Это процесс, который переводит текстовые файлы (*.sma), содержащие исходный код (т.е. инструкции для AMX Mod X, который их исполняет), в формат, более пригодный для исполнения.  За счет этого скорость выполнения плагинов возрастает многократно, упрощается разработка &amp;quot;движка&amp;quot;, который эти плагины исполняет, а также в некотором смысле защищается авторский код. Почему в &amp;quot;некотором смысле&amp;quot;? Потому что все AMX Mod X плагины должны публиковаться под лицензией GNU General Public License. В случае опубликования плагина лицензия обязывает также публиковать его исходный код. Откомпилированные плагины имеют расширение .amxx. Именно файлы этого типа, а не .sma, должны указываться в файле plugins.ini для последующей корректной загрузки плагина.&lt;br /&gt;
&lt;br /&gt;
== Как компилировать плагины? ==&lt;br /&gt;
: Базовую информацию вы можете найти на [[Ru Compiling Plugins (AMX Mod X)|этой]] странице.&lt;br /&gt;
&lt;br /&gt;
== Как упростить процесс компилирования? ==&lt;br /&gt;
: Можно написать стороннюю программу или скрипт, например такой, как пакетный batch файл. Например, создайте файл make.bat со следующим содержимым:&lt;br /&gt;
 @amxxpc.exe %1 -i.\include -o.\compiled\%1&lt;br /&gt;
: Чтобы с помощью него откомпилировать плагин, необходимо выполнить следующую команду:&lt;br /&gt;
 make.bat my_plugin.sma&lt;br /&gt;
: В итоге откомпилированный файл будет помещен в каталог ''compiled'' текущей директории. Если его там нет, значит в процессе компилирования возникли фатальные ошибки, которые выводятся на экран.&lt;br /&gt;
: Если вам необходимо (например, в случае ошибок) отправить кому-нибудь результат компиляции, можете перенаправить вывод информации о процессе компилирования в файл, например таким образом:&lt;br /&gt;
 make.bat my_plugin.sma &amp;gt; my_plugin.log&lt;br /&gt;
&lt;br /&gt;
== Компилятор выводит &amp;quot;max. usage is unknown, due to recursion&amp;quot; ==&lt;br /&gt;
: Ничего страшного. Просто компилятор не может вычислить предполагаемый объем памяти, используемый вашим плагином.&lt;br /&gt;
&lt;br /&gt;
= Вопросы по скриптингу =&lt;br /&gt;
&lt;br /&gt;
== С чего начать? ==&lt;br /&gt;
: С [[Ru Fundamental Basics of AMX Mod X Scripting|фундаментальных основ AMX Mod X скриптинга]].&lt;br /&gt;
&lt;br /&gt;
== А стоит ли вообще начинать? ==&lt;br /&gt;
: В зависимости от того, какую цель вы преследуете, а также от вашего желания и потенциала.&lt;/div&gt;</summary>
		<author><name>VEN</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.alliedmods.net/index.php?title=Ru_AMX_Mod_X_FAQ&amp;diff=3993</id>
		<title>Ru AMX Mod X FAQ</title>
		<link rel="alternate" type="text/html" href="https://wiki.alliedmods.net/index.php?title=Ru_AMX_Mod_X_FAQ&amp;diff=3993"/>
		<updated>2007-03-17T16:19:14Z</updated>

		<summary type="html">&lt;p&gt;VEN: added &amp;quot;2 amxx servers&amp;quot; faq entry&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Russian]]&lt;br /&gt;
[[Category:Ru:AMX Mod X]]&lt;br /&gt;
= Общие положения, термины, сокращения и условные обозначения =&lt;br /&gt;
:* HL или HL1 - аббревиатура от Half-Life (часть первая);&lt;br /&gt;
:* Mod - &amp;quot;мод&amp;quot;, модификация - дополнение к чему-либо, как правило, расширяющее/изменяющее функциональность;&lt;br /&gt;
:* HL Engine - &amp;quot;движок&amp;quot; Half-Life - &amp;quot;центральный модуль&amp;quot;, осуществляющий выполнение базовых &amp;quot;общемодовых&amp;quot; задач;&lt;br /&gt;
:* MM - MetaMod - сторонний мод особого типа, является промежуточным звеном в системе &amp;quot;HL движок - HL мод&amp;quot;;&lt;br /&gt;
:* AMXX - аббревиатура от [[AMX Mod X]] - MetaMod plugin (&amp;quot;плагин&amp;quot;), своего рода MetaMod мод;&lt;br /&gt;
:* Map - &amp;quot;карта&amp;quot; - определяет внешний вид территории, на которой происходит игровое действие;&lt;br /&gt;
:* World - &amp;quot;мир&amp;quot; - все пространство, которое занимает карта, а также область, находящаяся за картой;&lt;br /&gt;
:* Spawn - &amp;quot;спавн&amp;quot; - момент, когда игрок появляется в мире, обретая физическое тело;&lt;br /&gt;
:* SinglePlayer - &amp;quot;синглплеер&amp;quot; - игровой тип, когда одновременно в игре может участвовать только один игрок;&lt;br /&gt;
:* MultiPlayer - &amp;quot;мультиплеер&amp;quot; - игровой тип, когда одновременно в игре может участвовать несколько игроков;&lt;br /&gt;
:* DM - аббревиатура от Death Match - динамичный мультиплеер тип игры, когда после &amp;quot;смерти&amp;quot; игрока происходит его скорый спавн (&amp;quot;респавн&amp;quot;);&lt;br /&gt;
:* HLDM - аббревиатура от Half-Life Death Match - оригинальный HL мод DM типа;&lt;br /&gt;
:* CS - аббревиатура от Counter-Stirke - наиболее популярный HL мод;&lt;br /&gt;
:* VALVE - кампания, разработчик HL и CS, также редко используется как термин, синонимичный HLDM, но направленный на акцентирование названия директории мода (&amp;quot;valve&amp;quot;);&lt;br /&gt;
:* $MODDIR - способ неявного указания названия корневой директории мода, например: ''cstrike'', ''valve'';&lt;br /&gt;
:* $MMDIR - способ неявного указания относительного пути (относительно пути к $MODDIR) к корневой директории MetaMod, по-умолчанию: ''addons/metamod'';&lt;br /&gt;
:* $AMXMODX - способ неявного указания относительного пути (относительно пути к $MODDIR) к корневой директории AMX Mod X, по-умолчанию: ''addons/amxmodx''.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Общие вопросы =&lt;br /&gt;
== Где скачать последнюю версию AMX Mod X? ==&lt;br /&gt;
: Последнюю версию всегда можно скачать на официальном сайте AMX Mod X в [http://www.amxmodx.org/downloads.php разделе закачек].&lt;br /&gt;
&lt;br /&gt;
== А что именно качать? ==&lt;br /&gt;
: Качайте либо инсталлятор (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 мода.&lt;br /&gt;
&lt;br /&gt;
== Где искать плагины? ==&lt;br /&gt;
: Предварительно отметим, что условно AMX Mod X плагины можно разделить на следующие категории: стандартные, официально одобренные, официально отклоненные и неофициальные. Одобренные плагины можно искать [http://www.amxmodx.org/compiler.php здесь], или, используя [http://forums.alliedmods.net/search.php поисковую систему официального форума]. В поле '''Search in Forum(s)''' отметьте '''Approved Plugins''', также, зажав клавишу Ctrl, можно отметить интересующие вас секции из подраздела '''High-Traffic Plugins'''. Чтобы искать неофициальные плагины, следует также воспользоваться [http://forums.alliedmods.net/search.php поисковой системой официального форума], правда, в поле '''Search in Forum(s)''' необходимо выбрать '''Unapproved/Old Plugins'''. Если для вас не имеет значения статус плагина, и вы склонны к экспериментам, осуществляйте поиск по категории '''Plugins''', которая включает в себя одобренные, отклоненные, недавно опубликованные, вполне возможно, &amp;quot;сырые&amp;quot; плагины, а также темы-запросы, в которых могут быть &amp;quot;быстро написаные&amp;quot; плагины. Немного поработав с поисковой формой форума, вы легко освоите эту систему. Единственное возможное для некоторых неудобство - практически все описания плагинов написаны на английcком языке. Неофициальные плагины также можно попробовать искать с помощью общеизвестных поисковых систем: Google, Yandex, Rambler и др.&lt;br /&gt;
&lt;br /&gt;
== Сколько плагинов сейчас выпущено под AMX Mod X? ==&lt;br /&gt;
: &amp;quot;Тонны&amp;quot; плагинов. Но, к сожалению, качеством и надежностью б'''о'''льшая половина из них не белещет. К тому же некоторые плагины, &amp;quot;заброшены&amp;quot; авторами и не обновляются, что приводит даже к несовместимости с новыми версиями AMX Mod X.&lt;br /&gt;
&lt;br /&gt;
== Как устанавливать плагины? ==&lt;br /&gt;
: Обратитесь к [[Ru Configuring AMX Mod X|этой]] статье.&lt;br /&gt;
&lt;br /&gt;
== Как удалять плагины? ==&lt;br /&gt;
: Обратитесь к [[Ru Configuring AMX Mod X|этой]] статье.&lt;br /&gt;
&lt;br /&gt;
== Как запустить два различных сервера AMX Mod X? ==&lt;br /&gt;
: К примеру, вы хотите запустить два различных сервера из одной cstrike директории на базе различных AMX Mod X/Metamod плагинов, настроек и прочего - это решаемо. Один из примеров для win32 машины приведен ниже:&lt;br /&gt;
:* Создать отдельную AMX Mod X директорию с необходимыми файлами, например: addons/amxmodx2&lt;br /&gt;
:* В addons/amxmodx2/configs/core.ini везде изменить &amp;quot;amxmodx&amp;quot; на &amp;quot;amxmodx2&amp;quot;&lt;br /&gt;
:* Создать отдельный файл загрузки MetaMod плагинов, например: addons/metamod/plugins2.ini&lt;br /&gt;
:* В созданный plugins2.ini файл вписать: win32 addons\amxmodx2\dlls\amxmodx_mm.dll&lt;br /&gt;
:* Создать в директории cstrike файл, например, с именем amxmodx2.cfg, его содержимое должно быть следующим:&lt;br /&gt;
&amp;lt;pre&amp;gt;localinfo mm_pluginsfile &amp;quot;addons/metamod/plugins2.ini&amp;quot;&lt;br /&gt;
localinfo amxx_basedir &amp;quot;addons/amxmodx2&amp;quot;&lt;br /&gt;
localinfo amxx_cfg &amp;quot;addons/amxmodx2/configs/core.ini&amp;quot;&lt;br /&gt;
localinfo amxx_configsdir &amp;quot;addons/amxmodx2/configs&amp;quot;&lt;br /&gt;
localinfo amxx_customdir &amp;quot;addons/amxmodx2/custom&amp;quot;&lt;br /&gt;
localinfo amxx_datadir &amp;quot;addons/amxmodx2/data&amp;quot;&lt;br /&gt;
localinfo amxx_logdir &amp;quot;addons/amxmodx2/logs&amp;quot;&lt;br /&gt;
localinfo amxx_logs &amp;quot;addons/amxmodx2/logs&amp;quot;&lt;br /&gt;
localinfo amxx_modules &amp;quot;addons/amxmodx2/configs/modules.ini&amp;quot;&lt;br /&gt;
localinfo amxx_modulesdir &amp;quot;addons/amxmodx2/modules&amp;quot;&lt;br /&gt;
localinfo amxx_plugins &amp;quot;addons/amxmodx2/configs/plugins.ini&amp;quot;&lt;br /&gt;
localinfo amxx_pluginsdir &amp;quot;addons/amxmodx2/plugins&amp;quot;&lt;br /&gt;
localinfo amxx_vault &amp;quot;addons/amxmodx2/data/vault.ini&amp;quot;&lt;br /&gt;
localinfo csstats &amp;quot;addons/amxmodx2/data/csstats.dat&amp;quot;&lt;br /&gt;
localinfo csstats_score &amp;quot;addons/amxmodx2/data/csstats.amxx&amp;quot;&lt;br /&gt;
localinfo amx_basedir &amp;quot;addons/amxmodx2&amp;quot;&lt;br /&gt;
localinfo amx_configdir &amp;quot;addons/amxmodx2/configs&amp;quot;&lt;br /&gt;
localinfo amx_langdir &amp;quot;addons/amxmodx2/data/amxmod-lang&amp;quot;&lt;br /&gt;
localinfo amx_logdir &amp;quot;addons/amxmodx2/logs&amp;quot;&lt;br /&gt;
localinfo amx_modulesdir &amp;quot;addons/amxmodx2/modules&amp;quot;&lt;br /&gt;
localinfo amx_pluginsdir &amp;quot;addons/amxmodx2/plugins&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
:* Теперь второй сервер необходимо будет запускать с параметром командной строки: +exec amxmodx2.cfg&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Вопросы по компилированию =&lt;br /&gt;
== Что такое компиляция? ==&lt;br /&gt;
: Это процесс, который переводит текстовые файлы (*.sma), содержащие исходный код (т.е. инструкции для AMX Mod X, который их исполняет), в формат, более пригодный для исполнения.  За счет этого скорость выполнения плагинов возрастает многократно, упрощается разработка &amp;quot;движка&amp;quot;, который эти плагины исполняет, а также в некотором смысле защищается авторский код. Почему в &amp;quot;некотором смысле&amp;quot;? Потому что все AMX Mod X плагины должны публиковаться под лицензией GNU General Public License. В случае опубликования плагина лицензия обязывает также публиковать его исходный код. Откомпилированные плагины имеют расширение .amxx. Именно файлы этого типа, а не .sma, должны указываться в файле plugins.ini для последующей корректной загрузки плагина.&lt;br /&gt;
&lt;br /&gt;
== Как компилировать плагины? ==&lt;br /&gt;
: Базовую информацию вы можете найти на [[Ru Compiling Plugins (AMX Mod X)|этой]] странице.&lt;br /&gt;
&lt;br /&gt;
== Компилятор выводит &amp;quot;max. usage is unknown, due to recursion&amp;quot; ==&lt;br /&gt;
: Ничего страшного. Просто компилятор не может вычислить предполагаемый объем памяти, используемый вашим плагином.&lt;br /&gt;
&lt;br /&gt;
== Как упростить процесс компилирования? ==&lt;br /&gt;
: Можно написать стороннюю программу или скрипт, например такой, как пакетный batch файл.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Вопросы по скриптингу =&lt;br /&gt;
&lt;br /&gt;
== С чего начать? ==&lt;br /&gt;
: С [[Ru Fundamental Basics of AMX Mod X Scripting|фундаментальных основ AMX Mod X скриптинга]].&lt;br /&gt;
&lt;br /&gt;
== А стоит ли вообще начинать? ==&lt;br /&gt;
: В зависимости от того, какую цель вы преследуете, а также от вашего желания и потенциала.&lt;/div&gt;</summary>
		<author><name>VEN</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.alliedmods.net/index.php?title=Ru_AMX_Mod_X_FAQ&amp;diff=3992</id>
		<title>Ru AMX Mod X FAQ</title>
		<link rel="alternate" type="text/html" href="https://wiki.alliedmods.net/index.php?title=Ru_AMX_Mod_X_FAQ&amp;diff=3992"/>
		<updated>2007-03-17T14:15:00Z</updated>

		<summary type="html">&lt;p&gt;VEN: general improvements and additions&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Russian]]&lt;br /&gt;
[[Category:Ru:AMX Mod X]]&lt;br /&gt;
= Общие положения, термины, сокращения и условные обозначения =&lt;br /&gt;
:* HL или HL1 - аббревиатура от Half-Life (часть первая);&lt;br /&gt;
:* Mod - &amp;quot;мод&amp;quot;, модификация - дополнение к чему-либо, как правило, расширяющее/изменяющее функциональность;&lt;br /&gt;
:* HL Engine - &amp;quot;движок&amp;quot; Half-Life - &amp;quot;центральный модуль&amp;quot;, осуществляющий выполнение базовых &amp;quot;общемодовых&amp;quot; задач;&lt;br /&gt;
:* MM - MetaMod - сторонний мод особого типа, является промежуточным звеном в системе &amp;quot;HL движок - HL мод&amp;quot;;&lt;br /&gt;
:* AMXX - аббревиатура от [[AMX Mod X]] - MetaMod plugin (&amp;quot;плагин&amp;quot;), своего рода MetaMod мод;&lt;br /&gt;
:* Map - &amp;quot;карта&amp;quot; - определяет внешний вид территории, на которой происходит игровое действие;&lt;br /&gt;
:* World - &amp;quot;мир&amp;quot; - все пространство, которое занимает карта, а также область, находящаяся за картой;&lt;br /&gt;
:* Spawn - &amp;quot;спавн&amp;quot; - момент, когда игрок появляется в мире, обретая физическое тело;&lt;br /&gt;
:* SinglePlayer - &amp;quot;синглплеер&amp;quot; - игровой тип, когда одновременно в игре может участвовать только один игрок;&lt;br /&gt;
:* MultiPlayer - &amp;quot;мультиплеер&amp;quot; - игровой тип, когда одновременно в игре может участвовать несколько игроков;&lt;br /&gt;
:* DM - аббревиатура от Death Match - динамичный мультиплеер тип игры, когда после &amp;quot;смерти&amp;quot; игрока происходит его скорый спавн (&amp;quot;респавн&amp;quot;);&lt;br /&gt;
:* HLDM - аббревиатура от Half-Life Death Match - оригинальный HL мод DM типа;&lt;br /&gt;
:* CS - аббревиатура от Counter-Stirke - наиболее популярный HL мод;&lt;br /&gt;
:* VALVE - кампания, разработчик HL и CS, также редко используется как термин, синонимичный HLDM, но направленный на акцентирование названия директории мода (&amp;quot;valve&amp;quot;);&lt;br /&gt;
:* $MODDIR - способ неявного указания названия корневой директории мода, например: ''cstrike'', ''valve'';&lt;br /&gt;
:* $MMDIR - способ неявного указания относительного пути (относительно пути к $MODDIR) к корневой директории MetaMod, по-умолчанию: ''addons/metamod'';&lt;br /&gt;
:* $AMXMODX - способ неявного указания относительного пути (относительно пути к $MODDIR) к корневой директории AMX Mod X, по-умолчанию: ''addons/amxmodx''.&lt;br /&gt;
&lt;br /&gt;
= Общие вопросы =&lt;br /&gt;
== Где скачать последнюю версию AMX Mod X? ==&lt;br /&gt;
: Последнюю версию всегда можно скачать на официальном сайте AMX Mod X в [http://www.amxmodx.org/downloads.php разделе закачек].&lt;br /&gt;
&lt;br /&gt;
== А что именно качать? ==&lt;br /&gt;
: Качайте либо инсталлятор (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 мода.&lt;br /&gt;
&lt;br /&gt;
== Где искать плагины? ==&lt;br /&gt;
: Предварительно отметим, что условно AMX Mod X плагины можно разделить на следующие категории: стандартные, официально одобренные, официально отклоненные и неофициальные. Одобренные плагины можно искать [http://www.amxmodx.org/compiler.php здесь], или, используя [http://forums.alliedmods.net/search.php поисковую систему официального форума]. В поле '''Search in Forum(s)''' отметьте '''Approved Plugins''', также, зажав клавишу Ctrl, можно отметить интересующие вас секции из подраздела '''High-Traffic Plugins'''. Чтобы искать неофициальные плагины, следует также воспользоваться [http://forums.alliedmods.net/search.php поисковой системой официального форума], правда, в поле '''Search in Forum(s)''' необходимо выбрать '''Unapproved/Old Plugins'''. Если для вас не имеет значения статус плагина, и вы склонны к экспериментам, осуществляйте поиск по категории '''Plugins''', которая включает в себя одобренные, отклоненные, недавно опубликованные, вполне возможно, &amp;quot;сырые&amp;quot; плагины, а также темы-запросы, в которых могут быть &amp;quot;быстро написаные&amp;quot; плагины. Немного поработав с поисковой формой форума, вы легко освоите эту систему. Единственное возможное для некоторых неудобство - практически все описания плагинов написаны на английcком языке. Неофициальные плагины также можно попробовать искать с помощью общеизвестных поисковых систем: Google, Yandex, Rambler и др.&lt;br /&gt;
&lt;br /&gt;
== Сколько плагинов сейчас выпущено под AMX Mod X? ==&lt;br /&gt;
: &amp;quot;Тонны&amp;quot; плагинов. Но, к сожалению, качеством и надежностью б'''о'''льшая половина из них не белещет. К тому же некоторые плагины, &amp;quot;заброшены&amp;quot; авторами и не обновляются, что приводит даже к несовместимости с новыми версиями AMX Mod X.&lt;br /&gt;
&lt;br /&gt;
== Как устанавливать плагины? ==&lt;br /&gt;
: Обратитесь к [[Ru Configuring AMX Mod X|этой]] статье.&lt;br /&gt;
&lt;br /&gt;
== Как удалять плагины? ==&lt;br /&gt;
: Обратитесь к [[Ru Configuring AMX Mod X|этой]] статье.&lt;br /&gt;
&lt;br /&gt;
= Вопросы по компилированию =&lt;br /&gt;
== Что такое компиляция? ==&lt;br /&gt;
: Это процесс, который переводит текстовые файлы (*.sma), содержащие исходный код (т.е. инструкции для AMX Mod X, который их исполняет), в формат, более пригодный для исполнения.  За счет этого скорость выполнения плагинов возрастает многократно, упрощается разработка &amp;quot;движка&amp;quot;, который эти плагины исполняет, а также в некотором смысле защищается авторский код. Почему в &amp;quot;некотором смысле&amp;quot;? Потому что все AMX Mod X плагины должны публиковаться под лицензией GNU General Public License. В случае опубликования плагина лицензия обязывает также публиковать его исходный код. Откомпилированные плагины имеют расширение .amxx. Именно файлы этого типа, а не .sma, должны указываться в файле plugins.ini для последующей корректной загрузки плагина.&lt;br /&gt;
&lt;br /&gt;
== Как компилировать плагины? ==&lt;br /&gt;
: Базовую информацию вы можете найти на [[Ru Compiling Plugins (AMX Mod X)|этой]] странице.&lt;br /&gt;
&lt;br /&gt;
== Компилятор выводит &amp;quot;max. usage is unknown, due to recursion&amp;quot; ==&lt;br /&gt;
: Ничего страшного. Просто компилятор не может вычислить предполагаемый объем памяти, используемый вашим плагином.&lt;br /&gt;
&lt;br /&gt;
== Как упростить процесс компилирования? ==&lt;br /&gt;
: Можно написать стороннюю программу или скрипт, например такой, как пакетный batch файл.&lt;br /&gt;
&lt;br /&gt;
= Вопросы по скриптингу =&lt;br /&gt;
&lt;br /&gt;
== С чего начать? ==&lt;br /&gt;
: С [[Ru Fundamental Basics of AMX Mod X Scripting|фундаментальных основ AMX Mod X скриптинга]].&lt;br /&gt;
&lt;br /&gt;
== А стоит ли вообще начинать? ==&lt;br /&gt;
: В зависимости от того, какую цель вы преследуете, а также от вашего желания и потенциала.&lt;/div&gt;</summary>
		<author><name>VEN</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.alliedmods.net/index.php?title=Ru:Fundamental_Basics_of_AMX_Mod_X_Scripting&amp;diff=3945</id>
		<title>Ru:Fundamental Basics of AMX Mod X Scripting</title>
		<link rel="alternate" type="text/html" href="https://wiki.alliedmods.net/index.php?title=Ru:Fundamental_Basics_of_AMX_Mod_X_Scripting&amp;diff=3945"/>
		<updated>2007-02-22T19:50:25Z</updated>

		<summary type="html">&lt;p&gt;VEN: updated internal links; improved formatting&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Russian]]&lt;br /&gt;
[[Category:Ru:Scripting (AMX Mod X)]]&lt;br /&gt;
=Фундаментальные основы AMX Mod X скриптинга=&lt;br /&gt;
&lt;br /&gt;
Данная статья не дает готовых &amp;quot;рецептов&amp;quot; по [[AMX Mod X]] скриптингу, но раскрывает его фундаментальные основы. Это и типы данных, и прототипы функций и многое другое, без знания чего невозможно писать AMX Mod X плагины.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Введение=&lt;br /&gt;
&lt;br /&gt;
Прежде чем начинать писать AMX Mod X плагины, в первую очередь необходимо разобраться в основах [[Pawn]].&lt;br /&gt;
&amp;lt;BR&amp;gt;&amp;lt;BR&amp;gt;Pawn – это скриптовый язык, созданный компанией [http://www.compuphase.com ITB CompuPhase]. Ранее Pawn назывался Small, но с версии 3.0 языку было решено дать более характерное название. Т.к. &amp;quot;pawn&amp;quot; в переводе с английского языка означает &amp;quot;пешка&amp;quot;, можно догадаться, что основной характерной чертой данного языка является простота.&lt;br /&gt;
&amp;lt;BR&amp;gt;&amp;lt;BR&amp;gt;Если вы владеете английским языком, рекомендуется ознакомиться с полным руководством по Pawn - [http://www.compuphase.com/pawn/pawn-lang.pdf Pawn The Language].&lt;br /&gt;
&amp;lt;BR&amp;gt;&amp;lt;BR&amp;gt;Код плагина представляет собой текст (как правило, заключенный в файл типа *.sma), включающий множество элементов языка: комментарии, переменные, функции и др. Поэтому для оформления кода потребуется текстовый редактор. Из простейших можно выделить, например, Microsoft Notepad. Также существует AMXX-Studio – специализированый редактор для AMX Mod X плагинов, позволяющий максимально эффективно работать в соответствующей среде. Последняя версия данного редактора может быть найдена в секции [http://www.amxmodx.org/downloads.php downloads] официального сайта AMX Mod X.&lt;br /&gt;
&amp;lt;BR&amp;gt;&amp;lt;BR&amp;gt;Чтобы позволить AMX Mod X выполнять код, файл с кодом необходимо откомпилировать с помощью компилятора AMXXPC (AMX Mod X Pawn Compiler). Операция компилирования преобразовывает набор текстовых инструкций в последовательность инструкций абстрактной машины (от англ. abstract machine), она же AMX, а также интерпретатор (от англ. interpreter).&lt;br /&gt;
&amp;lt;BR&amp;gt;&amp;lt;BR&amp;gt;Откомпилированый код обычно помещается в файл типа *.amxx, имеющий двоичный формат. Такой файл называют AMX Mod X плагином (от англ. plugin).&lt;br /&gt;
&amp;lt;BR&amp;gt;&amp;lt;BR&amp;gt;Для ознакомления с инструкциями по компилированию и установке плагинов смотрите [[Ru Compiling Plugins (AMX Mod X)]] и [[Ru Configuring AMX Mod X]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Pawn=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Уровни кода==&lt;br /&gt;
&lt;br /&gt;
В основе любого кода лежит уровневая структура. Причиной этому является нелинейность инструкций.&lt;br /&gt;
&amp;lt;BR&amp;gt;&amp;lt;BR&amp;gt;Т.н. &amp;quot;нулевой уровень&amp;quot; или &amp;quot;глобальное пространство&amp;quot; является неотъемлемой частью любого кода. Как только вы приступаете к написанию нового кода, вы оказываетесь в его глобальном пространстве. Оно же в свою очередь будет включать в себя пространства с более низкими уровнями.&lt;br /&gt;
&amp;lt;BR&amp;gt;&amp;lt;BR&amp;gt;Обычно глобальное пространство содержит всю общую информацию, которая может потребоваться в ходе выполнения кода пространствам более низкого уровня. Примером такой информации могут служить общие константы, переменные, списки, макросы.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Комментарии==&lt;br /&gt;
&lt;br /&gt;
Комментарий – это, как правило, текст информативного характера. Например, чтобы дать описание плагину можно использовать многострочный комментарий:&amp;lt;pawn&amp;gt;/* здесь вы помещаете&lt;br /&gt;
необходимую информацию */&amp;lt;/pawn&amp;gt;Как видно из примера, многострочный комментарий ограничивается символами /* и */, отмечающими начало и конец комментария соответственно. Недопустимо открывать последующий комментарий, не закрыв при этом предыдущий.&lt;br /&gt;
&amp;lt;BR&amp;gt;Примером однострочного комментария может быть:&amp;lt;pawn&amp;gt;/* ваш комментарий */&amp;lt;/pawn&amp;gt;Хотя, можно упростить конструкцию:&amp;lt;pawn&amp;gt;// ваш комментарий&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&amp;lt;BR&amp;gt;Как видно из последнего примера, комментарий начинается с двойного симовола обратного слеша //. Заканчивается такой комментарий вместе с концом текущей строки, поэтому не требует закрывающих символов. Такие комментарии могут быть только однострочными. Не обязательно комментарий должен начинаться с новой строки. Например, /* ... */ комментарий может быть расположен непосредственно в самом коде.&lt;br /&gt;
&amp;lt;BR&amp;gt;&amp;lt;BR&amp;gt;Т.к. комментарии не считаются кодом, они исключаются из обработки. Данная особенность позволяет при необходимости исключать части кода путем комментирования, что может быть использовано, например, при отладке кода.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Типы данных==&lt;br /&gt;
&lt;br /&gt;
Технически основой всех типов данных в Pawn является т.н. &amp;quot;cell&amp;quot; – ячейка памяти, состоящая из последовательности определенного количества бит. Количество бит в такой ячейке постоянно для определенной платформы. Так для 32х битной платформы оно будет составлять 32, а для 64х битной – 64.&lt;br /&gt;
&amp;lt;BR&amp;gt;&amp;lt;BR&amp;gt;Т.к. технически все данные не имеют отличия, для обозначения их типа применяются т.н. &amp;quot;тэги&amp;quot;. Если при создании переменной тэг не указан, то переменная является целым числом:&amp;lt;pawn&amp;gt;new ivar // создана целочисленная переменная с именем &amp;quot;ivar&amp;quot;&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&amp;lt;BR&amp;gt;Если при создании переменной ей не присваивается какое-либо конкретное значение, то переменная будет равна нулю. Таким образом, вышеприведенный пример технически соответствует:&amp;lt;pawn&amp;gt;new ivar = 0&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&amp;lt;BR&amp;gt;Чтобы создать дробную переменную, необходимо использовать тэг &amp;quot;Float&amp;quot;:&amp;lt;pawn&amp;gt;new Float:fvar&amp;lt;/pawn&amp;gt;Переменная fvar также будет равна нулю, но ввиду соответствия типу данных это будет 0.0, т.е. технический аналог примера будет:&amp;lt;pawn&amp;gt;new Float:fvar = 0.0&amp;lt;/pawn&amp;gt;Таким образом, мы обеспечиваем типовое соответствие &amp;quot;левой&amp;quot; и &amp;quot;правой&amp;quot; части.&lt;br /&gt;
&amp;lt;BR&amp;gt;Одним из особых типов данных является т.н. &amp;quot;булевые&amp;quot; переменные, которые технически могут иметь только два значение, логически интерпретируемые как &amp;quot;истина&amp;quot; и &amp;quot;ложь&amp;quot; (true и false). Чтобы создать булевую переменную, необходимо использовать тэг &amp;quot;bool&amp;quot;:&amp;lt;pawn&amp;gt;new bool:bvar&amp;lt;/pawn&amp;gt;Т.к. численно false является нулем, то технический аналог примера будет выглядеть как:&amp;lt;pawn&amp;gt;new bool:bvar = false&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&amp;lt;BR&amp;gt;Примечание: чтобы запретить изменение значения переменной, необходимо использовать атрибут const, например:&amp;lt;pawn&amp;gt;new const var = 1&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&amp;lt;BR&amp;gt;Pawn также позволяет создавать массивы данных, представляющие собой набор значений определенного типа. Так примером простого массива, содержащего два целочисленных значения будет:&amp;lt;pawn&amp;gt;new array[2]&amp;lt;/pawn&amp;gt;Технически данный пример выглядит следующим образом:&amp;lt;pawn&amp;gt;new array[2] = {0, 0}&amp;lt;/pawn&amp;gt;Технические аналоги для Float и bool массивов выглядят как:&amp;lt;pawn&amp;gt;new Float:farray[2] = {0.0, 0.0}&lt;br /&gt;
new bool:barray[2] = {false, false}&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&amp;lt;BR&amp;gt;Также существует особый тип данных, называемый &amp;quot;строка&amp;quot;, технически являющийся массивом целых чисел. Каждое целое число в строковом массиве соответствует числовому ASCII коду символа. Например, код 32 соответствует пробелу. Таким образом,&amp;lt;pawn&amp;gt;new string[3] = {'h', 'i', '^0'}&amp;lt;/pawn&amp;gt;является символьным представлением строкового массива&amp;lt;pawn&amp;gt;new string[3] = &amp;quot;hi&amp;quot;&amp;lt;/pawn&amp;gt;Обратите внимание на наличие специального символа '^0'. Это обязательный элемент строки, указывающий на ее окончание (численно равен нулю).&lt;br /&gt;
&amp;lt;BR&amp;gt;Также Pawn поддерживает многоуровневые массивы, например:&amp;lt;pawn&amp;gt;new multiarray[2][2]&amp;lt;/pawn&amp;gt;Технически такой массив равен:&amp;lt;pawn&amp;gt;new multiarray[2][2] = {{0, 0}, {0, 0}}&amp;lt;/pawn&amp;gt;Максимальное количество уровней массива равно 3.&lt;br /&gt;
&amp;lt;BR&amp;gt;Для любого явно заданного массива его размер может не указываться, например:&amp;lt;pawn&amp;gt;new array[] = {1, 2, 3} // размер массива равен 3&lt;br /&gt;
new string[] = &amp;quot;hello&amp;quot; // размер массива равен 6, т.к. помимо 5 символов также включает в себя символ окончания строки '^0'&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&amp;lt;BR&amp;gt;Чтобы инициализировать все элементы массива каким-либо конкретным значением, можно использовать символ троеточия ..., например:&amp;lt;pawn&amp;gt;new bool:is_active[16] = {true, ...}&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Прекомпиляция==&lt;br /&gt;
&lt;br /&gt;
На начальной стадии компилирования Pawn компилятор обрабатывает т.н. &amp;quot;статическую&amp;quot; часть кода. К ней можно отнести директивы, глобальные константы, списки и др.&lt;br /&gt;
&amp;lt;BR&amp;gt;&amp;lt;BR&amp;gt;Директивы являются специальными инструкциями компилятора. Одна из самых широко используемых директив – это &amp;quot;include&amp;quot;. Пример ее использования может быть следующим:&amp;lt;pawn&amp;gt;#include &amp;lt;amxmodx&amp;gt;&amp;lt;/pawn&amp;gt;Директива как бы &amp;quot;влаживает&amp;quot; содержимое указанного файла в текущую позицию. В данном случае указывается файл amxmodx.inc, который обычно расположен в amxmodx\scripting\include директории, и декларирует основные AMX Mod X функции.&lt;br /&gt;
&amp;lt;BR&amp;gt;Другая директива, позволяющая конструировать т.н. &amp;quot;макросы&amp;quot;, имеет название &amp;quot;define&amp;quot;. Макрос удобен тем, что способен заменять простые блоки кода. Один из простейших макросов – это т.н. &amp;quot;макроконстанта&amp;quot;, например:&amp;lt;pawn&amp;gt;#define VALUE 1&amp;lt;/pawn&amp;gt;В названиях макросов принято использовать буквы только верхнего регистра.&lt;br /&gt;
&amp;lt;BR&amp;gt;Нетехническим аналогом вышеприведенной макроконстанты является т.н. &amp;quot;глобальная константа&amp;quot;:&amp;lt;pawn&amp;gt;stock const value = 1&amp;lt;/pawn&amp;gt;stock атрибут позволяет не включать константу в плагин, если она не используется в коде.&lt;br /&gt;
&amp;lt;BR&amp;gt;Т.н. &amp;quot;список&amp;quot; – это набор нумерованных элементов определенного типа. Например:&amp;lt;pawn&amp;gt;enum {zero, one, two} // соответствует 0, 1, 2&lt;br /&gt;
enum {elem1 = 1, elem2, elem3} // соответствует 1, 2, 3&lt;br /&gt;
enum steeps {steep1 = 10, steep2 = 20} // соответствует 10, 20&amp;lt;/pawn&amp;gt;Тип списка (в вышеприведенном примере типом списка является steeps) – необязательный атрибут, по сути является тэгом, указывающим тип элементов, поэтому следующий пример является верным:&amp;lt;pawn&amp;gt;new steeps:steep = steep2&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Функции==&lt;br /&gt;
&lt;br /&gt;
Существует несколько типов функций.&lt;br /&gt;
*т.н. &amp;quot;'''обычная'''&amp;quot; – обычно т.н. &amp;quot;вспомогательная&amp;quot; функция; может быть вызвана непосредственно только другими функциями данного плагина; не может быть вызвана непосредственно AMX Mod X либо его модулями.&lt;br /&gt;
*'''public''' – обычно функция, вызываемая непосредственно AMX Mod X либо его модулями; может быть также вызвана непосредственно другими функциями данного плагина.&lt;br /&gt;
*'''native''' – функция, имеющая т.н. &amp;quot;глобальный&amp;quot; характер; может быть вызвана AMX Mod X плагинами.&lt;br /&gt;
*'''forward''' - функция, имеющая т.н. &amp;quot;глобальный&amp;quot; характер; при наличии в плагине public функции с соответствующим именем функция будет вызываться AMX Mod X или его модулями.&lt;br /&gt;
*'''stock''' – обычно функция, состоящая в т.н. &amp;quot;библиотеке&amp;quot; функций; не включается в плагин, если не используется в коде.&lt;br /&gt;
&amp;lt;BR&amp;gt;В общем виде заголовок, а также прототип любой функции условно выглядит следующим образом (символами треуголных скобок &amp;lt;&amp;gt; ограничены обязательные элементы, символами квадратных скобок [] ограничены необязательные элементы, которые могут быть опущены в определенных случаях):&amp;lt;pawn&amp;gt;[type] [tag]:&amp;lt;name&amp;gt;([[param1], [param2], ..., [paramN]])&amp;lt;/pawn&amp;gt;, где&lt;br /&gt;
*[type] – соответствует типу функции (для обычной функции тип не указывается)&lt;br /&gt;
*[tag] – соответствует типу данных возвращаемого результата функции&lt;br /&gt;
*&amp;lt;name&amp;gt; - соответствует имени функции&lt;br /&gt;
*([...]) – соответствует набору параметров функции; количество параметров может быть от нуля (параметры отсутствуют) до N, где N – целое положительное число&lt;br /&gt;
&amp;lt;BR&amp;gt;За заголовком функции следует т.н. &amp;quot;тело&amp;quot; функции, ограниченное символами фигурных скобок {}. Таким образом, примером простейшей функции является:&amp;lt;pawn&amp;gt;function()&lt;br /&gt;
{&lt;br /&gt;
	// это пустое тело функции, имеющей имя &amp;quot;function&amp;quot;&lt;br /&gt;
}&amp;lt;/pawn&amp;gt;Технически данная функция не выполняет никаких действий, т.к. в своем теле содержит только комментарий. Обратите внимание, что комментарий как бы сдвинут вправо относительно заголовка функции. В данном случае функция инициализирует новый уровень кода. Каждый уровень кода в целях удобочитаемости принято оформлять с соответствующим отступом. Чем более низкий уровень кода, тем больший отступ он будет иметь. Обычно в качестве отступа принято использовать символ табуляции, т.к. многие редакторы позволяют задавать видимую ширину табулированого отступа.&lt;br /&gt;
&amp;lt;BR&amp;gt;Существует два способа передачи параметров функции. Т.н. &amp;quot;основной&amp;quot; способ заключается в том, что при передаче данные дублируются путем создания соответствующих копий в памяти. Т.н. способ передачи параметров &amp;quot;по ссылке&amp;quot; (от англ. by reference) состоит в том, что данные передаются &amp;quot;как есть&amp;quot;, т.е. их дублирования не осуществляется, что позволяет функции изменять оригинальные данные непосредственно.&lt;br /&gt;
&amp;lt;BR&amp;gt;&amp;lt;BR&amp;gt;Для параметров функции все типы массивов, в том числе и строковые, могут передаваться исключительно по ссылке. Передача остальных данных по умолчанию осуществляется основным способом. Чтобы произвести передачу параметра функции по ссылке, в заголовке функции перед параметром необходимо добавлять символ амперсанда &amp;amp;, например:&amp;lt;pawn&amp;gt;function(&amp;amp;Float:fparam)&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&amp;lt;BR&amp;gt;Параметры функции могут иметь значения по умолчанию, например:&amp;lt;pawn&amp;gt;function(param = 1)&amp;lt;/pawn&amp;gt;Таким образом, чтобы вызвать данную функцию с параметром по умолчанию, параметр можно не указывать:&amp;lt;pawn&amp;gt;function()&amp;lt;/pawn&amp;gt;Также в таких случаях можно использовать символ подчеркивания _:&amp;lt;pawn&amp;gt;function(_)&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&amp;lt;BR&amp;gt;Чтобы запретить функции изменение передаваемых данных, необходимо использовать атрибут const, например:&amp;lt;pawn&amp;gt;function(const array[])&amp;lt;/pawn&amp;gt;Таким образом, можно утверждать, что в данном случае целью функции не является изменение данных массива, чего нельзя утверждать о следующей функции:&amp;lt;pawn&amp;gt;swaparray(array[2])&amp;lt;/pawn&amp;gt;Исходя из названия функции, типа параметра, его размера и отсутствия запрета на изменение, можно сделать предположение о том, что данная функция меняет элементы массива местами.&lt;br /&gt;
&amp;lt;BR&amp;gt;Важным свойством функции является способность возвращать результат, значение которого имеет определенный тип, например:&amp;lt;pawn&amp;gt;bool:is_true()&lt;br /&gt;
{&lt;br /&gt;
	return true&lt;br /&gt;
}&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&amp;lt;BR&amp;gt;Чтобы указать допустимые типы параметра функции, в заголовке функции перед параметром необходимо добавлять конструкцию, которая условно выглядит как {tag1, tag2, ..., tagN}:, т.е. представляет собой набор тэгов, количество которых может быть от одного до N, где N – целое положительное число, например:&amp;lt;pawn&amp;gt;get_integer({bool, _}:value)&lt;br /&gt;
{&lt;br /&gt;
	return _:value // возвращается значение типа &amp;quot;целое число&amp;quot;&lt;br /&gt;
}&amp;lt;/pawn&amp;gt;Смысл вышеприведенной функции заключается в том, что она принимает параметр как типа &amp;quot;целое число&amp;quot;, так и булевого типа, в результате возвращая значение параметра в числовой форме.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=AMX Mod X=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Функции==&lt;br /&gt;
&lt;br /&gt;
При написании AMX Mod X плагинов важно уметь понимать назначение и принцип действия AMX Mod X функций.&lt;br /&gt;
&amp;lt;BR&amp;gt;&amp;lt;BR&amp;gt;Прототипы функций, а также используемые ими константы и списки заключены в файлы типа *.inc, т.н. &amp;quot;инклуды&amp;quot; (от англ. include), которые обычно расположены в amxmodx\scripting\include директории.&lt;br /&gt;
&amp;lt;BR&amp;gt;&amp;lt;BR&amp;gt;Иногда одни инклуды включают в себя другие. Так основные AMX Mod X функции (т.н. функции AMX Mod X &amp;quot;ядра&amp;quot;) продекларированы в файле amxmodx.inc, который также включает векторные и другие инклуды, декларирующие функции, константы и списки, также имеющие непосредственное отношение к AMX Mod X ядру.&lt;br /&gt;
&amp;lt;BR&amp;gt;&amp;lt;BR&amp;gt;Одной из основных функций AMX Mod X является forward функция plugin_init. Если в коде плагина имеется public функция plugin_init, она будет вызвана AMX Mod X после загрузки карты на сервере. Обычно в plugin_init регистрируют сам плагин, его команды, переменные и т.п.&lt;br /&gt;
&amp;lt;BR&amp;gt;&amp;lt;BR&amp;gt;Плагин регистрируют с помощью native функции register_plugin. Т.к. прототип register_plugin соответствует:&amp;lt;pawn&amp;gt;native register_plugin(const plugin_name[], const version[], const author[])&amp;lt;/pawn&amp;gt;, можно понять, что в качестве параметров функция принимает три строковых массива, соответствующих названию плагина, номеру его версии и автору плагина.&lt;br /&gt;
&amp;lt;BR&amp;gt;Итак, примером простого AMX Mod X плагина является:&amp;lt;pawn&amp;gt;#include &amp;lt;amxmodx&amp;gt;&lt;br /&gt;
&lt;br /&gt;
public plugin_init()&lt;br /&gt;
{&lt;br /&gt;
	register_plugin(&amp;quot;Test&amp;quot;, &amp;quot;0.1&amp;quot;, &amp;quot;VEN&amp;quot;)&lt;br /&gt;
}&amp;lt;/pawn&amp;gt;По сути данный плагин не выполняет каких-либо действий, но регистрирует себя в AMX Mod X с указанными данными.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Системы функционирования==&lt;br /&gt;
&lt;br /&gt;
AMX Mod X предоставляет большое количество определенных систем функционирования. Так одна из основных систем – это система контроля уровней доступа. Здесь имеют место соответствующие функции, например get_user_flags, а также константы стандартных уровней доступа типа ADMIN_*.&lt;br /&gt;
&amp;lt;BR&amp;gt;&amp;lt;BR&amp;gt;Система регистрирования и контроля консольных команд также &amp;quot;пересекается&amp;quot; с системой контроля уровней доступа и использует такие функции, как например register_concmd и cmd_access.&lt;br /&gt;
&amp;lt;BR&amp;gt;&amp;lt;BR&amp;gt;Также существует множество других систем, среди которых имеется система регистрирования и контроля серверных консольных переменных (англ.: Server CVars), клиентских меню и др.&lt;br /&gt;
&amp;lt;BR&amp;gt;&amp;lt;BR&amp;gt;Как правило, системы регистрирования используют т.н. &amp;quot;handle&amp;quot; (или &amp;quot;hook&amp;quot;) функции, которые вызываются системой в необходимый момент.&lt;br /&gt;
&amp;lt;BR&amp;gt;&amp;lt;BR&amp;gt;Так после регистрирования консольной команды &amp;quot;action&amp;quot;:&amp;lt;pawn&amp;gt;register_concmd(&amp;quot;action&amp;quot;, &amp;quot;action_handler&amp;quot;)&amp;lt;/pawn&amp;gt;при исполнении данной команды из консоли сервера или клиента система попытается найти и выполнить public функцию action_handler.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Система строкового форматирования==&lt;br /&gt;
&lt;br /&gt;
Многие AMX Mod X функции используют систему строкового форматирования. Например, это все *_print функции.&lt;br /&gt;
&amp;lt;BR&amp;gt;&amp;lt;BR&amp;gt;Такие функции принимают практически неограниченное количество параметров, которые используются при форматировании соответствующей строковой конструкции. Для наглядности рассмотрим пример:&amp;lt;pawn&amp;gt;server_print(&amp;quot;Formatted string: %d %f %s %c&amp;quot;, 1, 1.234567, &amp;quot;hello&amp;quot;, '!')&amp;lt;/pawn&amp;gt;Функция server_print отформатирует строковую конструкцию &amp;quot;Formatted string: %d %f %s %c&amp;quot;, используя переданные параметры, и выведет в серверной консоли строку:&amp;lt;pawn&amp;gt;Formatted string: 1 1.234567 hello !&amp;lt;/pawn&amp;gt;Таким образом, %d, %f, %s, %c – специальные элементы, используемые для форматирования целого числа, дробного числа, строки и символа соответственно.&lt;br /&gt;
&amp;lt;BR&amp;gt;Опасно при использовании функций, поддерживающих форматирование, передавать строковую переменную непосредственно в параметр строковой конструкции, например:&amp;lt;pawn&amp;gt;server_print(string)&amp;lt;/pawn&amp;gt;Безопасный вариант выглядит, следующим образом:&amp;lt;pawn&amp;gt;server_print(&amp;quot;%s&amp;quot;, string)&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&amp;lt;BR&amp;gt;Т.к. символ процента % является, т.н. &amp;quot;специальным символом&amp;quot;, для его форматирования в строковой конструкции необходимо использовать двойной символ процента %%, например:&amp;lt;pawn&amp;gt;server_print(&amp;quot;This is a single symbol of percent: %%&amp;quot;)&amp;lt;/pawn&amp;gt;выведет в серверной консоли:&amp;lt;pre&amp;gt;This is a single symbol of percent: %&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;BR&amp;gt;Также существует т.н. &amp;quot;контрольный символ&amp;quot; (от англ. control character), позволяющий использовать т.н. &amp;quot;специальные символы форматирования&amp;quot;. Контрольным символом по умолчанию является символ ^, который может быть изменен директивой pragma ctrlchar, например:&amp;lt;pre&amp;gt;#pragma ctrlchar '\'&amp;lt;/pre&amp;gt;изменит контрольный символ на \.&lt;br /&gt;
&amp;lt;BR&amp;gt;Примеры некоторых специальных символов форматирования приведены ниже:&lt;br /&gt;
*^t – табуляция&lt;br /&gt;
*^n – новая строка&lt;br /&gt;
*^xHH – символ, представленный в шестнадцатиричном формате, где HH – двойное число, представленное в шестнадцатиричном формате&lt;/div&gt;</summary>
		<author><name>VEN</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.alliedmods.net/index.php?title=Ru_Intro_to_AMX_Mod_X_Scripting&amp;diff=3944</id>
		<title>Ru Intro to AMX Mod X Scripting</title>
		<link rel="alternate" type="text/html" href="https://wiki.alliedmods.net/index.php?title=Ru_Intro_to_AMX_Mod_X_Scripting&amp;diff=3944"/>
		<updated>2007-02-22T19:29:58Z</updated>

		<summary type="html">&lt;p&gt;VEN: updated internal links&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Ru:Scripting (AMX Mod X)]]&lt;br /&gt;
[[Category:Russian]]&lt;br /&gt;
Просмотреть оригинал статьи (англ.): [[Intro to AMX Mod X Scripting]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Введение в AMX Mod X скриптинг=&lt;br /&gt;
Это руководство позволит разобраться в основах скриптинга [[AMX Mod X]] плагинов.&lt;br /&gt;
&lt;br /&gt;
=Обзор=&lt;br /&gt;
&lt;br /&gt;
Значит, вы хотите создать плагин? Вы должны иметь хорошее представление о том, как работает [[Pawn]], скриптинг язык, который используется для написания [[AMX Mod X]] плагинов. Поэтому в первую очередь настоятельно рекомендуется ознакомиться с фундаментальными основами [[Pawn]] и [[AMX Mod X]] скриптинга: [[Ru Fundamental Basics of AMX Mod X Scripting]]. Желательно читать данную статью, сидя за компьютером с текстовым редактором и [[Pawn]] компилятором под рукой - хорошее подспорье для эффективного обучения. Конечно же, вы не будете сразу писать большие плагины типа WC3, Matrix Mod и CSDM, но все же статья даст вам &amp;quot;толчок&amp;quot; в мир моддинга [[AMX Mod X]]. Хороший редактор с поддержкой [[Pawn]] - это AMXX-Studio, который можно найти в секции [http://www.amxmodx.org/downloads.php AMX Mod X downloads].&lt;br /&gt;
&lt;br /&gt;
Вам необходимо знать, как компилировать плагины. Обратитесь к секции [[Ru Compiling Plugins (AMX Mod X)]] для ознакомления. Также, чтобы проверить и отладить ваш плагин, вы должны знать, как устанавливать плагины. Для этого обратитесь к секции [[Ru Configuring AMX Mod X]].&lt;br /&gt;
&lt;br /&gt;
=Введение=&lt;br /&gt;
&lt;br /&gt;
AMX Mod X плагин может иметь четыре главных типа функций. Первый - &amp;quot;public&amp;quot; функция. Это означает, что функция доступна для AMX Mod X &amp;quot;движка&amp;quot;. Второй тип - &amp;quot;native&amp;quot; функция, которая располагается в модуле или в ядре AMX Mod X. Третий тип - обычные пользовательские функции, которые прописываются без каких-либо специальных атрибутов. Четвертый тип - это &amp;quot;forward&amp;quot; функция, которая вызывается каждый раз, когда происходит какое-то определенное событие (forward функция также является и public). AMX Mod X плагин должен начинаться с функции, инициализирующей плагин:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pawn&amp;gt;//Это делает возможным использование функций AMX Mod X ядра&lt;br /&gt;
//Это &amp;quot;влаживает&amp;quot; native &amp;quot;определители&amp;quot;(заголовки) из includes\amxmodx.inc&lt;br /&gt;
#include &amp;lt;amxmodx&amp;gt;&lt;br /&gt;
&lt;br /&gt;
//Объявляем три строковых переменных&lt;br /&gt;
new PLUGIN[]=&amp;quot;AMXX Demo&amp;quot;&lt;br /&gt;
new AUTHOR[]=&amp;quot;BAILOPAN&amp;quot;&lt;br /&gt;
new VERSION[]=&amp;quot;1.00&amp;quot;&lt;br /&gt;
&lt;br /&gt;
//Это public функция.&lt;br /&gt;
//Необходимо инициализировать ваш скрипт для AMX Mod X.&lt;br /&gt;
//Эта функция не содержит параметров, вызывается сразу после загрузки карты.&lt;br /&gt;
public plugin_init()&lt;br /&gt;
{&lt;br /&gt;
     //Это функция, которая &amp;quot;берет&amp;quot; три строки.&lt;br /&gt;
     //Она регистрирует ваш плагин в AMX Mod X и присваивает некоторую основную информацию.&lt;br /&gt;
     register_plugin(PLUGIN, VERSION, AUTHOR)&lt;br /&gt;
}&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Попробуйте откомпилировать скрипт, приведенный выше. Он будет очень мал, т.к. не делает ничего особенного. Однако, если вы загрузите этот скрипт и напишите &amp;quot;amxx plugins&amp;quot; в серверной консоли, вы должны увидеть новую запись в листе плагинов.&lt;br /&gt;
&lt;br /&gt;
=Создание админ-комманд=&lt;br /&gt;
&lt;br /&gt;
AMX Mod X предоставляет возможность простого добавления консольных админ-команд. Каждая команда &amp;quot;регистрируется&amp;quot; как консольная команда. При регистрировании команды вы должны указать четыре свойства: имя консольной команды; функцию, которая будет вызываться при использовании команды; уровень доступа, необходимый для использования команды; короткое описание команды.&lt;br /&gt;
&lt;br /&gt;
Для демонстрации давайте сделаем плагин, который позволит вам изменить количество жизней игрока на сервере с помощью команды &amp;quot;amx_hp&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Для начала нам понадобится сделать две вещи: первая - нам нужно зарегистрировать команду в консоли. Т.к. мы &amp;quot;привязываем&amp;quot; команду к public функции, мы должны убедиться, что функция существует.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pawn&amp;gt;#include &amp;lt;amxmodx&amp;gt;&lt;br /&gt;
#include &amp;lt;amxmisc&amp;gt; //Это содержит некоторые полезные функции&lt;br /&gt;
#include &amp;lt;fun&amp;gt;     //Это содержит функцию для изменения жизней&lt;br /&gt;
&lt;br /&gt;
new PLUGIN[]=&amp;quot;Change Health&amp;quot;&lt;br /&gt;
new AUTHOR[]=&amp;quot;BAILOPAN&amp;quot;&lt;br /&gt;
new VERSION[]=&amp;quot;1.00&amp;quot;&lt;br /&gt;
&lt;br /&gt;
public plugin_init()&lt;br /&gt;
{&lt;br /&gt;
     register_plugin(PLUGIN, VERSION, AUTHOR)&lt;br /&gt;
     register_concmd(&amp;quot;amx_hp&amp;quot;, &amp;quot;cmd_hp&amp;quot;, ADMIN_SLAY, &amp;quot;&amp;lt;target&amp;gt; &amp;quot;)&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
public cmd_hp(id, level, cid)&lt;br /&gt;
{&lt;br /&gt;
     return PLUGIN_HANDLED&lt;br /&gt;
}&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Первая новая функция - это &amp;quot;register_concmd&amp;quot;, которая берет четыре параметра. Первый - название команды, которую необходимо набрать в консоли. Второй - название public функции, которая будет контролировать команду. Третий - уровень доступа, который необходим для вашей команды. И последний - строка, описывающая, как использовать вашу команду.&lt;br /&gt;
&lt;br /&gt;
Далее мы создаем public функцию для контроля amx_hp команды. Обратите внимание, что мы даем ей три параметра. Эти параметры будут содержать специальные данные, когда команду будет использована. id будет содержать индекс(номер) игрока, который запустил команду, level будет содержать уровень доступа команды (вы должны сами осуществить проверку уровня доступа), cid будет содержать внутренний индекс(номер) команды.&lt;br /&gt;
&lt;br /&gt;
Также обратите внимание на PLUGIN_HANDLED. Существует два главных return значения. PLUGIN_CONTINUE как бы означает &amp;quot;продолжить с нормальным выполнением&amp;quot;, PLUGIN_HANDLED означает &amp;quot;блокировать дальнейшее выполнение&amp;quot;. Разница сложно уловима, но важна. К примеру, если вы делаете &amp;quot;привязку&amp;quot; к своей команде, вы не должны возвращать PLUGIN_CONTINUE. Но если вы возвращаете PLUGIN_HANDLED, при привязанной &amp;quot;say&amp;quot; команде, это полностью заблокирует say-текст. Вы должны быть внимательны с тем, что вы выбираете для возврата в различных ситуациях. Однако, многие вещи &amp;quot;безразличны&amp;quot; к возвращаемому значению. Например, таймеры(tasks), события(events) и другие вещи, с которыми вы встретитесь позже.&lt;br /&gt;
&lt;br /&gt;
Итак, как же мы убедимся, что данный пользователь - это админ, который имеет ADMIN_SLAY уровень доступа?&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pawn&amp;gt;public cmd_hp(id, level, cid)&lt;br /&gt;
{&lt;br /&gt;
     if (!cmd_access(id, level, cid, 3))&lt;br /&gt;
        return PLUGIN_HANDLED&lt;br /&gt;
     return PLUGIN_HANDLED&lt;br /&gt;
}&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
cmd_access() функция проверит информацию команды (пользователя, уровень доступа и индекс) и проверяет две вещи: что пользователь имеет доступ, и что было дано минимальное количество параметров. Мы указали три, потому что команда будет выглядеть как: amx_hp &amp;lt;target&amp;gt; &amp;lt;amount&amp;gt;, и в действительности сама команда также считается как параметр. Если cmd_access откажет, мы сразу прекращаем выполнение команды.&lt;br /&gt;
&lt;br /&gt;
Следующее, что нужно решить: мы должны взять два параметра и преобразовать их. &amp;quot;amount&amp;quot; параметр прост - мы просто конвертируем его из строки в число. Другой же параметр будет по сложнее, т.к. мы хотим иметь возможность указывать на три различных типа людей:&lt;br /&gt;
&lt;br /&gt;
* @CT или @T - (контр-террористы или террористы)&lt;br /&gt;
* @ALL - (все)&lt;br /&gt;
* &amp;lt;target&amp;gt; - частичное имя игрока&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pawn&amp;gt;public cmd_hp(id, level, cid)&lt;br /&gt;
{&lt;br /&gt;
     if (!cmd_access(id, level, cid, 3))&lt;br /&gt;
        return PLUGIN_HANDLED&lt;br /&gt;
&lt;br /&gt;
     new Arg1[24]&lt;br /&gt;
     new Arg2[4]&lt;br /&gt;
&lt;br /&gt;
     //Берем аргументы команды из консоли&lt;br /&gt;
     read_argv(1, Arg1, 23)&lt;br /&gt;
     read_argv(2, Arg2, 3)&lt;br /&gt;
&lt;br /&gt;
     //Конвертируем количество жизней из строки в число&lt;br /&gt;
     new Health = str_to_num(Arg2)&lt;br /&gt;
&lt;br /&gt;
     //Является ли первый символ @ символом?&lt;br /&gt;
     if (Arg1[0] == '@')&lt;br /&gt;
     {&lt;br /&gt;
          new Team = 0&lt;br /&gt;
          //Проверяем, какая команда была указана.&lt;br /&gt;
          //Заметьте, что мы начинаем с [1]&lt;br /&gt;
          // это означает, что @ не входит&lt;br /&gt;
          if (equali(Arg1[1], &amp;quot;CT&amp;quot;))&lt;br /&gt;
          {&lt;br /&gt;
               Team = 2&lt;br /&gt;
          } else if (equali(Arg1[1], &amp;quot;T&amp;quot;)) {&lt;br /&gt;
               Team = 1&lt;br /&gt;
          }&lt;br /&gt;
          new players[32], num&lt;br /&gt;
          //Эта функция заполнит players[32] переменную&lt;br /&gt;
          // верными индексами игроков. num будет содержать количество&lt;br /&gt;
          // игроков, которые действительны.&lt;br /&gt;
          get_players(players, num)&lt;br /&gt;
          new i&lt;br /&gt;
          for (i=0; i&amp;lt;num; i++)&lt;br /&gt;
          {&lt;br /&gt;
               if (!Team)&lt;br /&gt;
               {&lt;br /&gt;
                    //Устанавливаем количество жизней этого игрока&lt;br /&gt;
                    set_user_health(players[i], Health)&lt;br /&gt;
               } else {&lt;br /&gt;
                    if (get_user_team(players[i]) == Team)&lt;br /&gt;
                    {&lt;br /&gt;
                         set_user_health(players[i], Health)&lt;br /&gt;
                    }&lt;br /&gt;
               }&lt;br /&gt;
          }&lt;br /&gt;
     } else {&lt;br /&gt;
          //находит индекс игрока, который соответствует части указанного имени&lt;br /&gt;
          //1 означает, что игрок с &amp;quot;иммунитетом&amp;quot; не будет учтен&lt;br /&gt;
          new player = cmd_target(id, Arg1, 1)&lt;br /&gt;
          if (!player)&lt;br /&gt;
          {&lt;br /&gt;
               //это напечатает сообщение пользователю, который запускал команду&lt;br /&gt;
               //Формат для этой команды называется &amp;quot;format()&amp;quot; стиль,&lt;br /&gt;
               // где первая строка форматирует сообщение соответственно&lt;br /&gt;
               // любому количеству следующих параметров:&lt;br /&gt;
               //  %s означает строка&lt;br /&gt;
               //  %d или %i означает целое число&lt;br /&gt;
               //  %f означает дробное число&lt;br /&gt;
               // поэтому &amp;quot;Privet %s, mne %d let&amp;quot; будет требовать&lt;br /&gt;
               //  чтобы следовали параметры строки и целого числа&lt;br /&gt;
               console_print(id, &amp;quot;Izvinite, igrok %s ne mojet bit naiden ili ispol'zovan v kachestve ob'ekta!&amp;quot;, Arg1)&lt;br /&gt;
               return PLUGIN_HANDLED&lt;br /&gt;
          } else {&lt;br /&gt;
               set_user_health(player, Health)&lt;br /&gt;
          }&lt;br /&gt;
     }&lt;br /&gt;
&lt;br /&gt;
     return PLUGIN_HANDLED&lt;br /&gt;
}&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Таким образом, наша финальная версия amx_hp плагина будет выглядеть следующим образом:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pawn&amp;gt;#include &amp;lt;amxmodx&amp;gt;&lt;br /&gt;
#include &amp;lt;fun&amp;gt;&lt;br /&gt;
&lt;br /&gt;
new PLUGIN[]=&amp;quot;Change Health&amp;quot;&lt;br /&gt;
new AUTHOR[]=&amp;quot;BAILOPAN&amp;quot;&lt;br /&gt;
new VERSION[]=&amp;quot;1.00&amp;quot;&lt;br /&gt;
&lt;br /&gt;
public plugin_init()&lt;br /&gt;
{&lt;br /&gt;
     register_plugin(PLUGIN, VERSION, AUTHOR)&lt;br /&gt;
     register_concmd(&amp;quot;amx_hp&amp;quot;, &amp;quot;cmd_hp&amp;quot;, ADMIN_SLAY, &amp;quot;&amp;lt;target&amp;gt; &amp;lt;hp&amp;gt;&amp;quot;)&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
public cmd_hp(id, level, cid)&lt;br /&gt;
{&lt;br /&gt;
     if (!cmd_access(id, level, cid, 3))&lt;br /&gt;
        return PLUGIN_HANDLED&lt;br /&gt;
&lt;br /&gt;
     new Arg1[24]&lt;br /&gt;
     new Arg2[4]&lt;br /&gt;
&lt;br /&gt;
     //Берем аргументы команды из консоли&lt;br /&gt;
     read_argv(1, Arg1, 23)&lt;br /&gt;
     read_argv(2, Arg2, 3)&lt;br /&gt;
&lt;br /&gt;
     //Конвертируем количество жизней из строки в число&lt;br /&gt;
     new Health = str_to_num(Arg2)&lt;br /&gt;
&lt;br /&gt;
     //Является ли первый символ @ символом?&lt;br /&gt;
     if (Arg1[0] == '@')&lt;br /&gt;
     {&lt;br /&gt;
          new Team = 0&lt;br /&gt;
          if (equali(Arg1[1], &amp;quot;CT&amp;quot;))&lt;br /&gt;
          {&lt;br /&gt;
               Team = 2&lt;br /&gt;
          } else if (equali(Arg1[1], &amp;quot;T&amp;quot;)) {&lt;br /&gt;
               Team = 1&lt;br /&gt;
          }&lt;br /&gt;
          new players[32], num&lt;br /&gt;
          get_players(players, num)&lt;br /&gt;
          new i&lt;br /&gt;
          for (i=0; i&amp;lt;num; i++)&lt;br /&gt;
          {&lt;br /&gt;
               if (!Team)&lt;br /&gt;
               {&lt;br /&gt;
                    set_user_health(players[i], Health)&lt;br /&gt;
               } else {&lt;br /&gt;
                    if (get_user_team(players[i]) == Team)&lt;br /&gt;
                    {&lt;br /&gt;
                         set_user_health(players[i], Health)&lt;br /&gt;
                    }&lt;br /&gt;
               }&lt;br /&gt;
          }&lt;br /&gt;
     } else {&lt;br /&gt;
          new player = cmd_target(id, Arg1, 1)&lt;br /&gt;
          if (!player)&lt;br /&gt;
          {&lt;br /&gt;
               console_print(id, &amp;quot;Izvinite, igrok %s ne mojet bit naiden ili ispol'zovan v kachestve ob'ekta!&amp;quot;, Arg1)&lt;br /&gt;
               return PLUGIN_HANDLED&lt;br /&gt;
          } else {&lt;br /&gt;
               set_user_health(player, Health)&lt;br /&gt;
          }&lt;br /&gt;
     }&lt;br /&gt;
&lt;br /&gt;
     return PLUGIN_HANDLED&lt;br /&gt;
}&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Консольные переменные=&lt;br /&gt;
&lt;br /&gt;
CVar - это консольная переменная. Существуют клиентские и серверные CVar'ы. К примеру, &amp;quot;mp_startmoney&amp;quot; - Counter-Strike серверная CVar, содержащая число, указывающее, сколько денег дается игрокам, когда они заходят на сервер. Вы можете создавать свои серверные CVar'ы путем их регистрирования. Давайте создадим свою amx_startmoney CVar.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pawn&amp;gt;#include &amp;lt;amxmodx&amp;gt;&lt;br /&gt;
#include &amp;lt;cstrike&amp;gt;&lt;br /&gt;
&lt;br /&gt;
public plugin_init()&lt;br /&gt;
{&lt;br /&gt;
     register_plugin(&amp;quot;CVAR Test&amp;quot;, &amp;quot;1.0&amp;quot;, &amp;quot;BAILOPAN&amp;quot;)&lt;br /&gt;
     //регистрируем amx_startmoney CVar&lt;br /&gt;
     // и устанавливаем для нее значение по умолчанию 500&lt;br /&gt;
     register_cvar(&amp;quot;amx_startmoney&amp;quot;, &amp;quot;500&amp;quot;)&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//это вызывается, когда клиент заходит непосредственно на сервер&lt;br /&gt;
public client_putinserver(id)&lt;br /&gt;
{&lt;br /&gt;
     if (get_cvar_num(&amp;quot;amx_startmoney&amp;quot;) &amp;gt; 0)&lt;br /&gt;
     {&lt;br /&gt;
          cs_set_user_money(id, get_cvar_num(&amp;quot;amx_startmoney&amp;quot;))&lt;br /&gt;
     } else {&lt;br /&gt;
          cs_set_user_money(id, get_cvar_num(&amp;quot;mp_startmoney&amp;quot;))&lt;br /&gt;
     }&lt;br /&gt;
}&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Вы можете устанавливать дробные, целые или строковые значения как для своих CVar, так и для любых других.&lt;br /&gt;
&lt;br /&gt;
=Дополнительно=&lt;br /&gt;
&lt;br /&gt;
Чтобы узнать больше о скриптинге для AMX Mod X вам следует взглянуть на native прототипы в описаниях функий или в *.inc файлах (&amp;quot;инклудах&amp;quot;). Инклуды по большому счету придерживаются двух форматов. Они имеют название в соответствии с модулем или определенным предназначением. _const добавляется, если они содержат предопределенные числа или списки. _stocks добавляется, если они содержат &amp;quot;помогающие&amp;quot; или полезные &amp;quot;функции-обертки&amp;quot;. Помните, что stocks компилируются только, если вы используете их, поэтому без опаски можно &amp;quot;включать&amp;quot; файлы, содержащие большое количество stocks.&lt;br /&gt;
&lt;br /&gt;
Вы также можете посетить [http://amxmodx.ucoz.ru/forum/ Форум] и задать вопросы или найти больше информации.&lt;/div&gt;</summary>
		<author><name>VEN</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.alliedmods.net/index.php?title=Ru_Configuring_AMX_Mod_X&amp;diff=3943</id>
		<title>Ru Configuring AMX Mod X</title>
		<link rel="alternate" type="text/html" href="https://wiki.alliedmods.net/index.php?title=Ru_Configuring_AMX_Mod_X&amp;diff=3943"/>
		<updated>2007-02-22T19:21:25Z</updated>

		<summary type="html">&lt;p&gt;VEN: updated internal link&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Russian]]&lt;br /&gt;
[[Category:Ru:Documentation (AMX Mod X)]]&lt;br /&gt;
Данная статья переведена не полностью.&lt;br /&gt;
&lt;br /&gt;
Просмотреть оригинал статьи (англ.): [[Configuring AMX Mod X]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Плагины=&lt;br /&gt;
==Установка==&lt;br /&gt;
Иногда плагины могут иметь свои собственные инструкции, если они требуют особенной установки. Однако данная статья поможет освоить основы установки плагинов.&lt;br /&gt;
#Следуйте всем указаниям, которые дает автор плагина. Если плагин требует дополнительных шагов или специальных файлов, убедитесь, что вы имеете их в правильном месте и порядке.&lt;br /&gt;
#Если вам был предоставлен .sma файл вместо .amxx, вам следует откомпилировать плагин самим. Для более детальной информации смотрите [[Ru Compiling Plugins (AMX Mod X)]].&lt;br /&gt;
#Поместите .amxx файл в addons/amxmodx/plugins директорию.&lt;br /&gt;
#Добавьте имя плагина в addons\amxmodx\configs\plugins.ini. Например: &amp;lt;pre&amp;gt;myplugin.amxx&amp;lt;/pre&amp;gt;&lt;br /&gt;
#Смените карту или перезапустите сервер. Если при загрузке сообщается о каких-либо ошибках, смотрите [[Troubleshooting AMX Mod X#Plugins|Troubleshooting AMX Mod X]].&lt;br /&gt;
&lt;br /&gt;
==Удаление==&lt;br /&gt;
#Удалите запись из addons\amxmodx\configs\plugins.ini или добавьте в начале строки точку с запятой.&lt;br /&gt;
#Также можно удалить все файлы, связанные с отключаемым плагином.&lt;/div&gt;</summary>
		<author><name>VEN</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.alliedmods.net/index.php?title=Ru_Temp_Entity_Events_(Half-Life_1)&amp;diff=3942</id>
		<title>Ru Temp Entity Events (Half-Life 1)</title>
		<link rel="alternate" type="text/html" href="https://wiki.alliedmods.net/index.php?title=Ru_Temp_Entity_Events_(Half-Life_1)&amp;diff=3942"/>
		<updated>2007-02-22T19:09:21Z</updated>

		<summary type="html">&lt;p&gt;VEN: fixed cat.s&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Russian]]&lt;br /&gt;
[[Category:Ru:Scripting (AMX Mod X)]]&lt;br /&gt;
Temp Entity - это временные объекты на стороне клиента, которые создаются при посылке специальных сообщений сервером. Например, с помощью таких рассылок можно формировать эффекты трассирующих пуль, вызрывы, вспышки, а также мертвые тела игроков и многое другое.&lt;br /&gt;
&lt;br /&gt;
=Типы сообщений=&lt;br /&gt;
&lt;br /&gt;
Типы сообщений определяют механизм рассылки сообщений клиентам, а также адресатов. Типы описываются макроопределениями MSG_?, которые можно найти в файле const.h [[Ru:HLSDK|HLSDK]], или message_const.inc AMX Mod X [[Ru:API|API]]. Типы используются в качестве значения аргумента ''dest'' функции [http://www.amxmodx.org/funcwiki.php?go=func&amp;amp;id=262 message_begin()]:&lt;br /&gt;
&amp;lt;pawn&amp;gt;#define MSG_BROADCAST		0	&lt;br /&gt;
	// сообщение может быть доставлено всем клиентам&lt;br /&gt;
#define MSG_ONE			1&lt;br /&gt;
	// сообщение будет доставлено только одному клиенту (msg_entity)&lt;br /&gt;
#define MSG_ALL			2&lt;br /&gt;
	// сообщение будет доставлено всем клиентам&lt;br /&gt;
#define MSG_INIT		3&lt;br /&gt;
	// write to the init string(?)&lt;br /&gt;
#define MSG_PVS			4&lt;br /&gt;
	// сообщение может быть доставлено клиентам, находящимся в&lt;br /&gt;
	// в области видимости точки с координатами org&lt;br /&gt;
#define MSG_PAS			5&lt;br /&gt;
	// сообщение может быть доставлено клиентам, находящимся в&lt;br /&gt;
	// зоне слышимости от точки org&lt;br /&gt;
#define MSG_PVS_R		6&lt;br /&gt;
	// аналогично MSG_PVS с гарантией доставки сообщений&lt;br /&gt;
#define MSG_PAS_R		7&lt;br /&gt;
	// аналогично MSG_PAS с гарантией доставки сообщений&lt;br /&gt;
#define MSG_ONE_UNRELIABLE	8&lt;br /&gt;
	// аналогично MSG_ONE, но доставка сообщения НЕ гарантируется&lt;br /&gt;
#define MSG_SPEC		9&lt;br /&gt;
	// отправлка сообщения всем прокси для зрителей (HLTV?)&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= События TempEnt =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== 0: TE_BEAMPOINTS ==&lt;br /&gt;
&lt;br /&gt;
Создает луч между 2-мя точками.&lt;br /&gt;
&lt;br /&gt;
Параметры:&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;5&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background:#efefef;&amp;quot;&lt;br /&gt;
! Настройка || Диапазон || Настройки по-умолчанию || Описание&lt;br /&gt;
|-&lt;br /&gt;
|nowrap=&amp;quot;1&amp;quot;| Начало&lt;br /&gt;
|nowrap=&amp;quot;1&amp;quot;| X Y Z (координаты)&lt;br /&gt;
|Координата первого энтити или 0 0 0&lt;br /&gt;
|Начальная точка луча&lt;br /&gt;
|-&lt;br /&gt;
|nowrap=&amp;quot;1&amp;quot;| Конец&lt;br /&gt;
|nowrap=&amp;quot;1&amp;quot;| X Y Z (координаты)&lt;br /&gt;
|Координата второго энтити или 0 0 0&lt;br /&gt;
|Конечная точка луча&lt;br /&gt;
|-&lt;br /&gt;
|nowrap=&amp;quot;1&amp;quot;| Спрайт&lt;br /&gt;
|nowrap=&amp;quot;1&amp;quot;| Путь к спрайту&lt;br /&gt;
|&amp;quot;sprites/laserbeam.spr&amp;quot;&lt;br /&gt;
|Собственно, луч&lt;br /&gt;
|-&lt;br /&gt;
|nowrap=&amp;quot;1&amp;quot;| Первый кадр&lt;br /&gt;
|nowrap=&amp;quot;1&amp;quot;| 0-255&lt;br /&gt;
|0&lt;br /&gt;
|Кадр, с которого будет проигрываться спрайт&lt;br /&gt;
|-&lt;br /&gt;
|nowrap=&amp;quot;1&amp;quot;| FPS&lt;br /&gt;
|nowrap=&amp;quot;1&amp;quot;| 0-255&lt;br /&gt;
|0&lt;br /&gt;
|Частота кадров, в 0.1 (10 = 1 fps)&lt;br /&gt;
|-&lt;br /&gt;
|nowrap=&amp;quot;0&amp;quot;| Жизнь спрайта&lt;br /&gt;
|nowrap=&amp;quot;0&amp;quot;| 0-255&lt;br /&gt;
|50&lt;br /&gt;
|Промежуток времени, в течении которого видно спрайт, в 0.1 (50 = 5 секунд)&lt;br /&gt;
|-&lt;br /&gt;
|nowrap=&amp;quot;1&amp;quot;| Ширина&lt;br /&gt;
|nowrap=&amp;quot;1&amp;quot;| 0-255&lt;br /&gt;
|10&lt;br /&gt;
|Ширина луча в 0.1&lt;br /&gt;
|-&lt;br /&gt;
|nowrap=&amp;quot;1&amp;quot;| Искажение&lt;br /&gt;
|nowrap=&amp;quot;1&amp;quot;| 0-255&lt;br /&gt;
|10&lt;br /&gt;
|Амплитуда искажения, обозначает то, как сильно будет &amp;quot;ломаться&amp;quot; луч, снова в 0.1&lt;br /&gt;
|-&lt;br /&gt;
|nowrap=&amp;quot;1&amp;quot;| Цвет&lt;br /&gt;
|nowrap=&amp;quot;1&amp;quot;| R G B&lt;br /&gt;
|255 255 255&lt;br /&gt;
|Цвет луча в системе R G B&lt;br /&gt;
|-&lt;br /&gt;
|nowrap=&amp;quot;1&amp;quot;| Яркость&lt;br /&gt;
|nowrap=&amp;quot;1&amp;quot;| 0-255&lt;br /&gt;
|127&lt;br /&gt;
|Яркость луча&lt;br /&gt;
|-&lt;br /&gt;
|nowrap=&amp;quot;0&amp;quot;| Прокрутка&lt;br /&gt;
|nowrap=&amp;quot;0&amp;quot;| 0-255&lt;br /&gt;
|0&lt;br /&gt;
|Скорость прокрутки(?) луча в 0.1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Формат:&lt;br /&gt;
&amp;lt;pawn&amp;gt;#define TE_BEAMPOINTS 0&lt;br /&gt;
	// Луч между 2 точками&lt;br /&gt;
&lt;br /&gt;
message_begin(MSG_? ,SVC_TEMPENTITY)&lt;br /&gt;
write_byte(TE_BEAMPOINTS)&lt;br /&gt;
write_coord()	// Начало луча: x&lt;br /&gt;
write_coord()	// y&lt;br /&gt;
write_coord()	// z&lt;br /&gt;
write_coord()	// Конец луча: x&lt;br /&gt;
write_coord()	// y&lt;br /&gt;
write_coord()	// z&lt;br /&gt;
write_short()	// Индекс спрайта&lt;br /&gt;
write_byte()	// Начальный кадр&lt;br /&gt;
write_byte()	// FPS в 0.1&lt;br /&gt;
write_byte()	// Время существования в 0.1&lt;br /&gt;
write_byte()	// Ширина в 0.1&lt;br /&gt;
write_byte()	// Искажение в 0.1&lt;br /&gt;
write_byte()	// Красный (R)&lt;br /&gt;
write_byte()	// Зеленый (G)&lt;br /&gt;
write_byte()	// Синий (B)&lt;br /&gt;
write_byte()	// Яркость&lt;br /&gt;
write_byte()	// Скорость прокрутки в 0.1&lt;br /&gt;
message_end()&lt;br /&gt;
&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 1: TE_BEAMENTPOINT ==&lt;br /&gt;
Создает луч между энтитей и точкой.&lt;br /&gt;
&lt;br /&gt;
Настройки:&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;5&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background:#efefef;&amp;quot;&lt;br /&gt;
! Настройка || Диапазон || Настройки по-умолчанию || Описание&lt;br /&gt;
|-&lt;br /&gt;
|nowrap=&amp;quot;1&amp;quot;| Начальное энтити&lt;br /&gt;
|nowrap=&amp;quot;1&amp;quot;| ID энтити&lt;br /&gt;
|Идентификатор первичного энтити&lt;br /&gt;
|Стартовая точка луча - центр (origin) энтити&lt;br /&gt;
|-&lt;br /&gt;
|nowrap=&amp;quot;1&amp;quot;| Конец&lt;br /&gt;
|nowrap=&amp;quot;1&amp;quot;| X Y Z (координаты)&lt;br /&gt;
|Координата второго энтити или 0 0 0&lt;br /&gt;
|Конечная точка луча&lt;br /&gt;
|-&lt;br /&gt;
|nowrap=&amp;quot;1&amp;quot;| Спрайт&lt;br /&gt;
|nowrap=&amp;quot;1&amp;quot;| Путь к спрайту&lt;br /&gt;
|&amp;quot;sprites/laserbeam.spr&amp;quot;&lt;br /&gt;
|Собственно, луч&lt;br /&gt;
|-&lt;br /&gt;
|nowrap=&amp;quot;1&amp;quot;| Первый кадр&lt;br /&gt;
|nowrap=&amp;quot;1&amp;quot;| 0-255&lt;br /&gt;
|0&lt;br /&gt;
|Кадр, с которого будет проигрываться спрайт&lt;br /&gt;
|-&lt;br /&gt;
|nowrap=&amp;quot;1&amp;quot;| FPS&lt;br /&gt;
|nowrap=&amp;quot;1&amp;quot;| 0-255&lt;br /&gt;
|nowrap=&amp;quot;1&amp;quot;| 0&lt;br /&gt;
|Частота кадров, в 0.1 (10 = 1 fps)&lt;br /&gt;
|-&lt;br /&gt;
|nowrap=&amp;quot;1&amp;quot;| Жизнь спрайта&lt;br /&gt;
|nowrap=&amp;quot;1&amp;quot;| 0-255&lt;br /&gt;
|50&lt;br /&gt;
|Промежуток времени, в течении которого видно спрайт, в 0.1 (50 = 5 секунд)&lt;br /&gt;
|-&lt;br /&gt;
|nowrap=&amp;quot;1&amp;quot;| Ширина&lt;br /&gt;
|nowrap=&amp;quot;1&amp;quot;| 0-255&lt;br /&gt;
|10&lt;br /&gt;
|Ширина луча в 0.1&lt;br /&gt;
|-&lt;br /&gt;
|nowrap=&amp;quot;1&amp;quot;| Искажение&lt;br /&gt;
|nowrap=&amp;quot;1&amp;quot;| 0-255&lt;br /&gt;
|10&lt;br /&gt;
|Амплитуда искажения, обозначает то, как сильно будет &amp;quot;ломаться&amp;quot; луч, снова в 0.1&lt;br /&gt;
|-&lt;br /&gt;
|nowrap=&amp;quot;1&amp;quot;| Цвет&lt;br /&gt;
|nowrap=&amp;quot;1&amp;quot;| R G B&lt;br /&gt;
|255 255 255&lt;br /&gt;
|Цвет луча в системе R G B&lt;br /&gt;
|-&lt;br /&gt;
|nowrap=&amp;quot;1&amp;quot;| Яркость&lt;br /&gt;
|nowrap=&amp;quot;1&amp;quot;| 0-255&lt;br /&gt;
|127&lt;br /&gt;
|Яркость луча&lt;br /&gt;
|-&lt;br /&gt;
|nowrap=&amp;quot;1&amp;quot;| Прокрутка&lt;br /&gt;
|nowrap=&amp;quot;1&amp;quot;| 0-255&lt;br /&gt;
|0&lt;br /&gt;
|Скорость прокрутки(?) луча в 0.1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Формат:&lt;br /&gt;
&amp;lt;pawn&amp;gt;#define TE_BEAMENTPOINT 1&lt;br /&gt;
	// Луч между энтитей и точкой&lt;br /&gt;
&lt;br /&gt;
message_begin(MSG_ ,SVC_TEMPENTITY)&lt;br /&gt;
write_byte(TE_BEAMENTPOINT)&lt;br /&gt;
write_short()	// Начальное энтити&lt;br /&gt;
write_coord()	// Конец луча&lt;br /&gt;
write_coord()&lt;br /&gt;
write_coord()&lt;br /&gt;
write_short()	// Индекс спрайта&lt;br /&gt;
write_byte()	// Начальный кадр&lt;br /&gt;
write_byte()	// FPS в 0.1&lt;br /&gt;
write_byte()	// Время существования в 0.1&lt;br /&gt;
write_byte()	// Ширина в 0.1&lt;br /&gt;
write_byte()	// Искажение в 0.1&lt;br /&gt;
write_byte()	// Красный (R)&lt;br /&gt;
write_byte()	// Зеленый (G)&lt;br /&gt;
write_byte()	// Синий (B)&lt;br /&gt;
write_byte()	// Яркость&lt;br /&gt;
write_byte()	// Скорость прокрутки в 0.1&lt;br /&gt;
message_end()&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 2: TE_GUNSHOT ==&lt;br /&gt;
Создает частцы и звук рикошета.&lt;br /&gt;
&lt;br /&gt;
Настройки:&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;5&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background:#efefef;&amp;quot;&lt;br /&gt;
! Настройка || Диапазон || Настройки по-умолчанию || Описание&lt;br /&gt;
|-&lt;br /&gt;
|nowrap=&amp;quot;1&amp;quot;| Координата&lt;br /&gt;
|nowrap=&amp;quot;1&amp;quot;| X Y Z (координаты)&lt;br /&gt;
|Координата первого энтити или 0 0 0&lt;br /&gt;
|Точка для эффекта выстрела&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Формат:&lt;br /&gt;
&amp;lt;pawn&amp;gt;#define TE_GUNSHOT 2&lt;br /&gt;
	// Частцы и звук рикошета&lt;br /&gt;
&lt;br /&gt;
message_begin(MSG_ ,SVC_TEMPENTITY)&lt;br /&gt;
write_byte(TE_GUNSHOT)&lt;br /&gt;
write_coord()	// Координата: x&lt;br /&gt;
write_coord()	// y&lt;br /&gt;
write_coord()	// z&lt;br /&gt;
message_end()&lt;br /&gt;
&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 3: TE_EXPLOSION ==&lt;br /&gt;
&lt;br /&gt;
Creates an additive sprite, 2 dynamic lights, flickering particles, explosion sound, and moves the sprite vertically.&lt;br /&gt;
&lt;br /&gt;
Параметры:&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;5&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background:#efefef;&amp;quot;&lt;br /&gt;
! Option || Range || Default || Description&lt;br /&gt;
|-&lt;br /&gt;
|nowrap=&amp;quot;1&amp;quot;| Pos&lt;br /&gt;
|nowrap=&amp;quot;1&amp;quot;| X Y Z (coords)&lt;br /&gt;
|nowrap=&amp;quot;1&amp;quot;| Origin of primary entity, or 0 0 0&lt;br /&gt;
|Position of the explosion effect&lt;br /&gt;
|-&lt;br /&gt;
|nowrap=&amp;quot;1&amp;quot;| Sprite&lt;br /&gt;
|nowrap=&amp;quot;1&amp;quot;| sprite path&lt;br /&gt;
|nowrap=&amp;quot;1&amp;quot;| &amp;quot;sprites/zerogxplode.spr&amp;quot;&lt;br /&gt;
|The additive sprite to use in the explosion&lt;br /&gt;
|-&lt;br /&gt;
|nowrap=&amp;quot;1&amp;quot;| Scale&lt;br /&gt;
|nowrap=&amp;quot;1&amp;quot;| 0-255&lt;br /&gt;
|nowrap=&amp;quot;1&amp;quot;| 1&lt;br /&gt;
|The scale of the sprite in the explosion, in 0.1s&lt;br /&gt;
|-&lt;br /&gt;
|nowrap=&amp;quot;1&amp;quot;| FrameRate&lt;br /&gt;
|nowrap=&amp;quot;1&amp;quot;| 0-255&lt;br /&gt;
|nowrap=&amp;quot;1&amp;quot;| 0&lt;br /&gt;
|The frame rate to show the sprite at, in 0.1s (10 = 1 fps)&lt;br /&gt;
|-&lt;br /&gt;
|nowrap=&amp;quot;1&amp;quot;| Flags&lt;br /&gt;
|nowrap=&amp;quot;1&amp;quot;| 0-15&lt;br /&gt;
|nowrap=&amp;quot;1&amp;quot;| 0&lt;br /&gt;
|Sets flags for the explosion, you may also add these together:&lt;br /&gt;
*0: Default Half-Life explosion&lt;br /&gt;
*1: Sprite will be drawn opaque&lt;br /&gt;
*2: Do not render the dynamic lights&lt;br /&gt;
*4: Do not play the explosion sound&lt;br /&gt;
*8: Do not draw the particles&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Формат:&lt;br /&gt;
&amp;lt;pawn&amp;gt;#define TE_EXPLOSION 3&lt;br /&gt;
	// additive sprite, 2 dynamic lights, flickering particles, &lt;br /&gt;
	// explosion sound, move vertically 8 pps&lt;br /&gt;
&lt;br /&gt;
message_begin(MSG_ ,SVC_TEMPENTITY)&lt;br /&gt;
write_byte(TE_EXPLOSION)&lt;br /&gt;
write_coord()	// start position&lt;br /&gt;
write_coord()&lt;br /&gt;
write_coord()&lt;br /&gt;
write_short()	// sprite index&lt;br /&gt;
write_byte()	// scale in 0.1's&lt;br /&gt;
write_byte()	// framerate&lt;br /&gt;
write_byte()	// flags&lt;br /&gt;
message_end()&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 4: TE_TAREXPLOSION ==&lt;br /&gt;
Creates the Quake 'tar' explosion.&lt;br /&gt;
&lt;br /&gt;
Options:&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;5&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background:#efefef;&amp;quot;&lt;br /&gt;
! Option || Range || Default || Description&lt;br /&gt;
|-&lt;br /&gt;
|nowrap=&amp;quot;1&amp;quot;| Pos&lt;br /&gt;
|nowrap=&amp;quot;1&amp;quot;| X Y Z (coords)&lt;br /&gt;
|nowrap=&amp;quot;1&amp;quot;| Origin of primary entity, or 0 0 0&lt;br /&gt;
|Position of the effect&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Format:&lt;br /&gt;
&amp;lt;pawn&amp;gt;#define TE_TAREXPLOSION 4&lt;br /&gt;
	// Quake1 &amp;quot;tarbaby&amp;quot; explosion with sound&lt;br /&gt;
&lt;br /&gt;
message_begin(MSG_ ,SVC_TEMPENTITY)&lt;br /&gt;
write_byte(TE_TAREXPLOSION)&lt;br /&gt;
write_coord()	// start position&lt;br /&gt;
write_coord()&lt;br /&gt;
write_coord()&lt;br /&gt;
message_end()&lt;br /&gt;
&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 5: TE_SMOKE ==&lt;br /&gt;
Creates a rising alphablend sprite at 30 pps.&lt;br /&gt;
&lt;br /&gt;
Options:&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;5&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background:#efefef;&amp;quot;&lt;br /&gt;
! Option || Range || Default || Description&lt;br /&gt;
|-&lt;br /&gt;
|nowrap=&amp;quot;1&amp;quot;| Pos&lt;br /&gt;
|nowrap=&amp;quot;1&amp;quot;| X Y Z (coords)&lt;br /&gt;
|nowrap=&amp;quot;1&amp;quot;| Origin of primary entity, or 0 0 0&lt;br /&gt;
|Position of the smoke effect&lt;br /&gt;
|-&lt;br /&gt;
|nowrap=&amp;quot;1&amp;quot;| Sprite&lt;br /&gt;
|nowrap=&amp;quot;1&amp;quot;| sprite path&lt;br /&gt;
|nowrap=&amp;quot;1&amp;quot;| &amp;quot;sprites/steam1.spr&amp;quot;&lt;br /&gt;
|The alphablend sprite to use for smoke&lt;br /&gt;
|-&lt;br /&gt;
|nowrap=&amp;quot;1&amp;quot;| Scale&lt;br /&gt;
|nowrap=&amp;quot;1&amp;quot;| 0-255&lt;br /&gt;
|nowrap=&amp;quot;1&amp;quot;| 1&lt;br /&gt;
|The scale of the smoke, in 0.1s&lt;br /&gt;
|-&lt;br /&gt;
|nowrap=&amp;quot;1&amp;quot;| FrameRate&lt;br /&gt;
|nowrap=&amp;quot;1&amp;quot;| 0-255&lt;br /&gt;
|nowrap=&amp;quot;1&amp;quot;| 0&lt;br /&gt;
|The frame rate to show the sprite at&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Format:&lt;br /&gt;
&amp;lt;pawn&amp;gt;#define TE_SMOKE 5	&lt;br /&gt;
	// alphablend sprite, move vertically 30 pps&lt;br /&gt;
&lt;br /&gt;
message_begin(MSG_ ,SVC_TEMPENTITY)&lt;br /&gt;
write_byte(TE_SMOKE)&lt;br /&gt;
write_coord()	// start position&lt;br /&gt;
write_coord()&lt;br /&gt;
write_coord()&lt;br /&gt;
write_short()	// sprite index &lt;br /&gt;
write_byte()	// scale in 0.1's &lt;br /&gt;
write_byte()	// framerate &lt;br /&gt;
message_end()&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 6: TE_TRACER ==&lt;br /&gt;
Создает эффект трассирующей пули из одной точки пространства в другую.&lt;br /&gt;
&lt;br /&gt;
Параметры:&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;5&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background:#efefef;&amp;quot;&lt;br /&gt;
! Option || Range || Значение по-умолчанию || Описание&lt;br /&gt;
|-&lt;br /&gt;
|nowrap=&amp;quot;1&amp;quot;| Pos&lt;br /&gt;
|nowrap=&amp;quot;1&amp;quot;| X Y Z (координаты)&lt;br /&gt;
|nowrap=&amp;quot;1&amp;quot;| Origin of primary entity, or 0 0 0&lt;br /&gt;
|Начальная точка для эффекта&lt;br /&gt;
|-&lt;br /&gt;
|nowrap=&amp;quot;1&amp;quot;| End&lt;br /&gt;
|nowrap=&amp;quot;1&amp;quot;| X Y Z (координаты)&lt;br /&gt;
|nowrap=&amp;quot;1&amp;quot;| Origin of secondary entity, or 0 0 0&lt;br /&gt;
|Конечная точка для эффекта&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Формат:&lt;br /&gt;
&amp;lt;pawn&amp;gt;#define TE_TRACER 6&lt;br /&gt;
	// tracer effect from point to point&lt;br /&gt;
&lt;br /&gt;
message_begin(MSG_ ,SVC_TEMPENTITY)&lt;br /&gt;
write_byte(TE_TRACER)&lt;br /&gt;
write_coord()	// начальная позиция: x&lt;br /&gt;
write_coord()	// y&lt;br /&gt;
write_coord()	// z&lt;br /&gt;
write_coord()	// конечная позиция: x&lt;br /&gt;
write_coord()	// y&lt;br /&gt;
write_coord()	// z&lt;br /&gt;
message_end()&lt;br /&gt;
&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 7: TE_LIGHTNING ==&lt;br /&gt;
Simplified options for TE_BEAMPOINTS - Lightning effect.&lt;br /&gt;
&lt;br /&gt;
Options:&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;5&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background:#efefef;&amp;quot;&lt;br /&gt;
! Option || Range || Default || Description&lt;br /&gt;
|-&lt;br /&gt;
|nowrap=&amp;quot;1&amp;quot;| Pos&lt;br /&gt;
|nowrap=&amp;quot;1&amp;quot;| X Y Z (coords)&lt;br /&gt;
|nowrap=&amp;quot;1&amp;quot;| Origin of primary entity, or 0 0 0&lt;br /&gt;
|Starting point of the lightning&lt;br /&gt;
|-&lt;br /&gt;
|nowrap=&amp;quot;1&amp;quot;| End&lt;br /&gt;
|nowrap=&amp;quot;1&amp;quot;| X Y Z (coords)&lt;br /&gt;
|nowrap=&amp;quot;1&amp;quot;| Origin of secondary entity, or 0 0 0&lt;br /&gt;
|Ending point of the lightning&lt;br /&gt;
|-&lt;br /&gt;
|nowrap=&amp;quot;1&amp;quot;| Life&lt;br /&gt;
|nowrap=&amp;quot;1&amp;quot;| 0-255&lt;br /&gt;
|nowrap=&amp;quot;1&amp;quot;| 50&lt;br /&gt;
|The length of time the lightning shall remain, in 0.1s (50 = 5 seconds)&lt;br /&gt;
|-&lt;br /&gt;
|nowrap=&amp;quot;1&amp;quot;| Width&lt;br /&gt;
|nowrap=&amp;quot;1&amp;quot;| 0-255&lt;br /&gt;
|nowrap=&amp;quot;1&amp;quot;| 10&lt;br /&gt;
|The width of the lightning in 0.1s&lt;br /&gt;
|-&lt;br /&gt;
|nowrap=&amp;quot;1&amp;quot;| Noise&lt;br /&gt;
|nowrap=&amp;quot;1&amp;quot;| 0-255&lt;br /&gt;
|nowrap=&amp;quot;1&amp;quot;| 10&lt;br /&gt;
|The noise amplitude of the lightning, this controls how much it distorts, again in 0.1s&lt;br /&gt;
|-&lt;br /&gt;
|nowrap=&amp;quot;1&amp;quot;| Sprite&lt;br /&gt;
|nowrap=&amp;quot;1&amp;quot;| sprite path&lt;br /&gt;
|nowrap=&amp;quot;1&amp;quot;| &amp;quot;sprites/laserbeam.spr&amp;quot;&lt;br /&gt;
|The sprite to use in the lightning&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Format:&lt;br /&gt;
&amp;lt;pawn&amp;gt;#define TE_LIGHTNING 7&lt;br /&gt;
	// TE_BEAMPOINTS with simplified parameters&lt;br /&gt;
&lt;br /&gt;
message_begin(MSG_ ,SVC_TEMPENTITY)&lt;br /&gt;
write_byte(TE_LIGHTNING)&lt;br /&gt;
write_coord()	// start position&lt;br /&gt;
write_coord()&lt;br /&gt;
write_coord()&lt;br /&gt;
write_coord()	// end position &lt;br /&gt;
write_coord()&lt;br /&gt;
write_coord()&lt;br /&gt;
write_byte()	// life in 0.1's &lt;br /&gt;
write_byte()	// width in 0.1's &lt;br /&gt;
write_byte()	// amplitude in 0.01's &lt;br /&gt;
write_short()	// sprite model index&lt;br /&gt;
message_end()&lt;br /&gt;
&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 8: TE_BEAMENTS ==&lt;br /&gt;
Creates a beam between the primary entity and another entity.&lt;br /&gt;
&lt;br /&gt;
Options:&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;5&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background:#efefef;&amp;quot;&lt;br /&gt;
! Option || Range || Default || Description&lt;br /&gt;
|-&lt;br /&gt;
|nowrap=&amp;quot;1&amp;quot;| Start Entity&lt;br /&gt;
|nowrap=&amp;quot;1&amp;quot;| ID of Entity&lt;br /&gt;
|nowrap=&amp;quot;1&amp;quot;| Primary entity id&lt;br /&gt;
|Starting point of the beam from the id's origin&lt;br /&gt;
|-&lt;br /&gt;
|nowrap=&amp;quot;1&amp;quot;| End Entity&lt;br /&gt;
|nowrap=&amp;quot;1&amp;quot;| ID of Entity&lt;br /&gt;
|nowrap=&amp;quot;1&amp;quot;| Secondary entity id&lt;br /&gt;
|Ending point of the beam to the id's origin&lt;br /&gt;
|-&lt;br /&gt;
|nowrap=&amp;quot;1&amp;quot;| Sprite&lt;br /&gt;
|nowrap=&amp;quot;1&amp;quot;| sprite path&lt;br /&gt;
|nowrap=&amp;quot;1&amp;quot;| &amp;quot;sprites/laserbeam.spr&amp;quot;&lt;br /&gt;
|The sprite to use in the beam&lt;br /&gt;
|-&lt;br /&gt;
|nowrap=&amp;quot;1&amp;quot;| FrameStart&lt;br /&gt;
|nowrap=&amp;quot;1&amp;quot;| 0-255&lt;br /&gt;
|nowrap=&amp;quot;1&amp;quot;| 0&lt;br /&gt;
|The frame to start with in the sprite&lt;br /&gt;
|-&lt;br /&gt;
|nowrap=&amp;quot;1&amp;quot;| FrameRate&lt;br /&gt;
|nowrap=&amp;quot;1&amp;quot;| 0-255&lt;br /&gt;
|nowrap=&amp;quot;1&amp;quot;| 0&lt;br /&gt;
|The frame rate to show the sprite at, in 0.1s (10 = 1 fps)&lt;br /&gt;
|-&lt;br /&gt;
|nowrap=&amp;quot;1&amp;quot;| Life&lt;br /&gt;
|nowrap=&amp;quot;1&amp;quot;| 0-255&lt;br /&gt;
|nowrap=&amp;quot;1&amp;quot;| 50&lt;br /&gt;
|The length of time the beam shall remain, in 0.1s (50 = 5 seconds)&lt;br /&gt;
|-&lt;br /&gt;
|nowrap=&amp;quot;1&amp;quot;| Width&lt;br /&gt;
|nowrap=&amp;quot;1&amp;quot;| 0-255&lt;br /&gt;
|nowrap=&amp;quot;1&amp;quot;| 10&lt;br /&gt;
|The width of the beam in 0.1s&lt;br /&gt;
|-&lt;br /&gt;
|nowrap=&amp;quot;1&amp;quot;| Noise&lt;br /&gt;
|nowrap=&amp;quot;1&amp;quot;| 0-255&lt;br /&gt;
|nowrap=&amp;quot;1&amp;quot;| 10&lt;br /&gt;
|The noise amplitude of the beam, this controls how much the beam distorts, again in 0.1s&lt;br /&gt;
|-&lt;br /&gt;
|nowrap=&amp;quot;1&amp;quot;| Color&lt;br /&gt;
|nowrap=&amp;quot;1&amp;quot;| R G B&lt;br /&gt;
|nowrap=&amp;quot;1&amp;quot;| 255 255 255&lt;br /&gt;
|The color of the beam in the RBG triplet value&lt;br /&gt;
|-&lt;br /&gt;
|nowrap=&amp;quot;1&amp;quot;| Brightness&lt;br /&gt;
|nowrap=&amp;quot;1&amp;quot;| 0-255&lt;br /&gt;
|nowrap=&amp;quot;1&amp;quot;| 127&lt;br /&gt;
|The brightness of the beam&lt;br /&gt;
|-&lt;br /&gt;
|nowrap=&amp;quot;1&amp;quot;| Scroll&lt;br /&gt;
|nowrap=&amp;quot;1&amp;quot;| 0-255&lt;br /&gt;
|nowrap=&amp;quot;1&amp;quot;| 0&lt;br /&gt;
|The scroll speed of the beam, in 0.1s (??)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Format:&lt;br /&gt;
&amp;lt;pawn&amp;gt;#define TE_BEAMENTS 8&lt;br /&gt;
	// Create a beam between two entities&lt;br /&gt;
&lt;br /&gt;
message_begin(MSG_ ,SVC_TEMPENTITY)&lt;br /&gt;
write_byte(TE_BEAMENTS)&lt;br /&gt;
write_short()	// start entity&lt;br /&gt;
write_short()  // end entity&lt;br /&gt;
write_short()	// sprite index&lt;br /&gt;
write_byte()	// starting frame&lt;br /&gt;
write_byte()	// frame rate in 0.1's&lt;br /&gt;
write_byte()	// life in 0.1's&lt;br /&gt;
write_byte()	// line width in 0.1's&lt;br /&gt;
write_byte()	// noise amplitude in 0.01's&lt;br /&gt;
write_byte()	// red&lt;br /&gt;
write_byte()	// green&lt;br /&gt;
write_byte()	// blue&lt;br /&gt;
write_byte()	// brightness&lt;br /&gt;
write_byte()	// scroll speed in 0.1's&lt;br /&gt;
message_end()&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
TODO: add rest, I'll get this done eventually.&lt;/div&gt;</summary>
		<author><name>VEN</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.alliedmods.net/index.php?title=FTP&amp;diff=3935</id>
		<title>FTP</title>
		<link rel="alternate" type="text/html" href="https://wiki.alliedmods.net/index.php?title=FTP&amp;diff=3935"/>
		<updated>2007-02-20T12:24:37Z</updated>

		<summary type="html">&lt;p&gt;VEN: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;File transfer protocol&lt;/div&gt;</summary>
		<author><name>VEN</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.alliedmods.net/index.php?title=Half-Life_1_Engine_Messages&amp;diff=3922</id>
		<title>Half-Life 1 Engine Messages</title>
		<link rel="alternate" type="text/html" href="https://wiki.alliedmods.net/index.php?title=Half-Life_1_Engine_Messages&amp;diff=3922"/>
		<updated>2007-02-11T10:44:04Z</updated>

		<summary type="html">&lt;p&gt;VEN: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Half-Life 1]]&lt;br /&gt;
[[Category:Scripting (AMX Mod X)]]&lt;br /&gt;
 //SVC_BAD                 0&lt;br /&gt;
 SVC_NOP                   1&lt;br /&gt;
 SVC_DISCONNECT            2&lt;br /&gt;
 SVC_EVENT                 3&lt;br /&gt;
 SVC_VERSION               4&lt;br /&gt;
 SVC_SETVIEW               5&lt;br /&gt;
 SVC_SOUND                 6&lt;br /&gt;
 SVC_TIME                  7&lt;br /&gt;
 SVC_PRINT                 8&lt;br /&gt;
 SVC_STUFFTEXT             9&lt;br /&gt;
 SVC_SETANGLE              10&lt;br /&gt;
 SVC_SERVERINFO            11&lt;br /&gt;
 SVC_LIGHTSTYLE            12&lt;br /&gt;
 SVC_UPDATEUSERINFO        13&lt;br /&gt;
 SVC_DELTADESCRIPTION      14&lt;br /&gt;
 SVC_CLIENTDATA            15&lt;br /&gt;
 SVC_STOPSOUND             16&lt;br /&gt;
 SVC_PINGS                 17&lt;br /&gt;
 SVC_PARTICLE              18&lt;br /&gt;
 SVC_DAMAGE                19&lt;br /&gt;
 SVC_SPAWNSTATIC           20&lt;br /&gt;
 SVC_EVENT_RELIABLE        21&lt;br /&gt;
 SVC_SPAWNBASELINE         22&lt;br /&gt;
 SVC_TEMPENTITY            23&lt;br /&gt;
 SVC_SETPAUSE              24&lt;br /&gt;
 SVC_SIGNONNUM             25&lt;br /&gt;
 SVC_CENTERPRINT           26&lt;br /&gt;
 SVC_KILLEDMONSTER         27&lt;br /&gt;
 SVC_FOUNDSECRET           28&lt;br /&gt;
 SVC_SPAWNSTATICSOUND      29&lt;br /&gt;
 SVC_INTERMISSION          30&lt;br /&gt;
 SVC_FINALE                31&lt;br /&gt;
 SVC_CDTRACK               32&lt;br /&gt;
 SVC_RESTORE               33&lt;br /&gt;
 SVC_CUTSCENE              34&lt;br /&gt;
 SVC_WEAPONANIM            35&lt;br /&gt;
 SVC_DECALNAME             36&lt;br /&gt;
 SVC_ROOMTYPE              37&lt;br /&gt;
 SVC_ADDANGLE              38&lt;br /&gt;
 SVC_NEWUSERMSG            39&lt;br /&gt;
 SVC_PACKETENTITIES        40&lt;br /&gt;
 SVC_DELTAPACKETENTITIES   41&lt;br /&gt;
 SVC_CHOKE                 42&lt;br /&gt;
 SVC_RESOURCELIST          43&lt;br /&gt;
 SVC_NEWMOVEVARS           44&lt;br /&gt;
 SVC_RESOURCEREQUEST       45&lt;br /&gt;
 SVC_CUSTOMIZATION         46&lt;br /&gt;
 SVC_CROSSHAIRANGLE        47&lt;br /&gt;
 SVC_SOUNDFADE             48&lt;br /&gt;
 SVC_FILETXFERFAILED       49&lt;br /&gt;
 SVC_HLTV                  50&lt;br /&gt;
 SVC_DIRECTOR              51&lt;br /&gt;
 SVC_VOICEINIT             52&lt;br /&gt;
 SVC_VOICEDATA             53&lt;br /&gt;
 SVC_SENDEXTRAINFO         54&lt;br /&gt;
 SVC_TIMESCALE             55&lt;/div&gt;</summary>
		<author><name>VEN</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.alliedmods.net/index.php?title=CS_Weapons_Information&amp;diff=3921</id>
		<title>CS Weapons Information</title>
		<link rel="alternate" type="text/html" href="https://wiki.alliedmods.net/index.php?title=CS_Weapons_Information&amp;diff=3921"/>
		<updated>2007-02-11T10:39:41Z</updated>

		<summary type="html">&lt;p&gt;VEN: fixed a typo&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Scripting (AMX Mod X)]]&lt;br /&gt;
*CS weapons information has been gained using the [http://forums.alliedmods.net/showthread.php?t=47738 Weapon Info Dump] plugin.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Columns full names are: WeaponIndex, WeaponName, PlayerMaxSpeed, ClipMaxAmmo, BackPackMaxAmmo, AmmoIndex, AmmoName, WeaponCost, AmmoCost, WeaponPrimaryBuyName, WeaponSecondaryBuyName.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*See [http://www.amxmodx.org/funcwiki.php?go=module&amp;amp;id=4#const_cswp CS Weapon Constants] for weapon indeces constants list.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*See [[CS WeaponList Message Dump]] for more information including WeaponSlotIDs and WeaponNumberInSlot.&amp;lt;br&amp;gt;&lt;br /&gt;
 ID   NAME                  SPEED   CLIP   AMMO   AID   ANAME             COST   ACOST   BUYNAME   BUYNAME2   &lt;br /&gt;
  1   weapon_p228             250     13     52     9   ammo_357sig        600      50   p228      228compact &lt;br /&gt;
      weapon_shield             0      0      0     0                     2200       0   shield               &lt;br /&gt;
  3   weapon_scout            260     10     90     2   ammo_762nato      2750      80   scout                &lt;br /&gt;
  4   weapon_hegrenade        250             1    12                      300       0   hegren               &lt;br /&gt;
  5   weapon_xm1014           240      7     32     5   ammo_buckshot     3000      65   xm1014    autoshotgun&lt;br /&gt;
  6   weapon_c4               250      0      1    14                        0       0                        &lt;br /&gt;
  7   weapon_mac10            250     30    100     6   ammo_45acp        1400      25   mac10                &lt;br /&gt;
  8   weapon_aug              240     30     90     4   ammo_556nato      3500      60   aug       bullpup    &lt;br /&gt;
  9   weapon_smokegrenade     250             1    13                      300       0   sgren                &lt;br /&gt;
 10   weapon_elite            250     30    120    10   ammo_9mm           800      20   elites               &lt;br /&gt;
 11   weapon_fiveseven        250     20    100     7   ammo_57mm          750      50   fn57      fiveseven  &lt;br /&gt;
 12   weapon_ump45            250     25    100     6   ammo_45acp        1700      25   ump45                &lt;br /&gt;
 13   weapon_sg550            210     30     90     4   ammo_556nato      4200      60   sg550     krieg550   &lt;br /&gt;
 14   weapon_galil            240     35     90     4   ammo_556nato      2000      60   galil     defender   &lt;br /&gt;
 15   weapon_famas            240     25     90     4   ammo_556nato      2250      60   famas     clarion    &lt;br /&gt;
 16   weapon_usp              250     12    100     6   ammo_45acp         500      25   usp       km45       &lt;br /&gt;
 17   weapon_glock18          250     20    120    10   ammo_9mm           400      20   glock     9x19mm     &lt;br /&gt;
 18   weapon_awp              210     10     30     1   ammo_338magnum    4750     125   awp       magnum     &lt;br /&gt;
 19   weapon_mp5navy          250     30    120    10   ammo_9mm          1500      20   mp5       smg        &lt;br /&gt;
 20   weapon_m249             220    100    200     3   ammo_556natobox   5750      60   m249                 &lt;br /&gt;
 21   weapon_m3               230      8     32     5   ammo_buckshot     1700      65   m3        12gauge    &lt;br /&gt;
 22   weapon_m4a1             230     30     90     4   ammo_556nato      3100      60   m4a1                 &lt;br /&gt;
 23   weapon_tmp              250     30    120    10   ammo_9mm          1250      20   tmp       mp         &lt;br /&gt;
 24   weapon_g3sg1            210     20     90     2   ammo_762nato      5000      80   g3sg1     d3au1      &lt;br /&gt;
 25   weapon_flashbang        250             2    11                      200       0   flash                &lt;br /&gt;
 26   weapon_deagle           250      7     35     8   ammo_50ae          650      40   deagle    nighthawk  &lt;br /&gt;
 27   weapon_sg552            235     30     90     4   ammo_556nato      3500      60   sg552     krieg552   &lt;br /&gt;
 28   weapon_ak47             221     30     90     2   ammo_762nato      2500      80   ak47      cv47       &lt;br /&gt;
 29   weapon_knife            250      0      0     0                        0       0                        &lt;br /&gt;
 30   weapon_p90              245     50    100     7   ammo_57mm         2350      50   p90       c90&lt;/div&gt;</summary>
		<author><name>VEN</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.alliedmods.net/index.php?title=AMX_Mod_X_1.71_Changes&amp;diff=3920</id>
		<title>AMX Mod X 1.71 Changes</title>
		<link rel="alternate" type="text/html" href="https://wiki.alliedmods.net/index.php?title=AMX_Mod_X_1.71_Changes&amp;diff=3920"/>
		<updated>2007-02-10T10:05:07Z</updated>

		<summary type="html">&lt;p&gt;VEN: added cats.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Scripting (AMX Mod X)]]&lt;br /&gt;
[[Category:AMX Mod X]]&lt;br /&gt;
&lt;br /&gt;
AMX Mod X 1.71 is a bugfix release targeted at the few major issues found from 1.70.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Added plugin optimizer tweaking to core.ini.&lt;br /&gt;
*Added new &amp;quot;binary logging&amp;quot; feature for serious debugging.  Note that this requires a &amp;quot;Binary Logging&amp;quot; compiled version of AMX Mod X (downloaded separately).&lt;br /&gt;
*Improved HUD synchronization algorithm (both in efficiency and fluidity).&lt;br /&gt;
*Removed &amp;quot;languages.dat&amp;quot; and &amp;quot;dictionary.cache&amp;quot; file.  Language files are now parsed and cached at load in memory only. Furthermore, the files are only reparsed on changes.&lt;br /&gt;
*Menus with no pages or one page are no longer paginated.&lt;br /&gt;
*Added rmdir, getc, ungetc, and putc natives.&lt;br /&gt;
*Added arrayset native (for clearing large arrays quickly).&lt;br /&gt;
*Added &amp;quot;Skip HLTV&amp;quot; flag to get_players.&lt;br /&gt;
*Added ClientUserInfoChanged forward to Fakemeta.&lt;br /&gt;
*Added more string compatibility to Fakemeta.&lt;br /&gt;
*Added advanced keyvaluedata and traceresult manipulation to Fakemeta.&lt;br /&gt;
*Added global data retrieval to Fakemeta.&lt;br /&gt;
*Added menu_cancel native.&lt;br /&gt;
*Added HUD sync points to all stats scripts to avoid HUD overlapping.&lt;br /&gt;
*Updated GEOIP library to April.&lt;br /&gt;
*Fixed plmenu not killing players on teamswitch.&lt;br /&gt;
*Fixed adminslots not working.&lt;br /&gt;
*Fixed a bug where native handlers wouldn't work in rare cases.&lt;br /&gt;
*Fixed amxx_logging mode 2 not working.&lt;br /&gt;
*Fixed crash bug with plugin optimizer on AMD K6 processors.&lt;br /&gt;
*Fixed dir_exists not working in Windows.&lt;br /&gt;
*Fixed ExecuteForward not returning results properly.&lt;br /&gt;
*Fixed armoury entity natives on Linux (thanks AndraX2000).&lt;br /&gt;
*Fixed many weapons in TFCX not logging hit areas at all.&lt;br /&gt;
*Fixed stack corruption bugs in miscstats (cstrike).&lt;br /&gt;
*Fixed hud problems in miscstats (cstrike) by adding more HUD sync points.&lt;br /&gt;
*Fixed scrollmsg showing a &amp;quot;delayed movement&amp;quot; scroller.&lt;br /&gt;
*Fixed a bug in the &amp;quot;split&amp;quot; stock.&lt;br /&gt;
*Fixed a few (potentinal) bugs in studio and updated every 3rd party component&lt;br /&gt;
*Fixed amx_addadmin having wrong access level (thanks Twisted).&lt;/div&gt;</summary>
		<author><name>VEN</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.alliedmods.net/index.php?title=AMX_Mod_X_1.71_Changes&amp;diff=3918</id>
		<title>AMX Mod X 1.71 Changes</title>
		<link rel="alternate" type="text/html" href="https://wiki.alliedmods.net/index.php?title=AMX_Mod_X_1.71_Changes&amp;diff=3918"/>
		<updated>2007-02-10T10:03:04Z</updated>

		<summary type="html">&lt;p&gt;VEN: AMX Mod X 1.71 Scripting Changes moved to AMX Mod X 1.71 Changes&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;AMX Mod X 1.71 is a bugfix release targeted at the few major issues found from 1.70.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Added plugin optimizer tweaking to core.ini.&lt;br /&gt;
*Added new &amp;quot;binary logging&amp;quot; feature for serious debugging.  Note that this requires a &amp;quot;Binary Logging&amp;quot; compiled version of AMX Mod X (downloaded separately).&lt;br /&gt;
*Improved HUD synchronization algorithm (both in efficiency and fluidity).&lt;br /&gt;
*Removed &amp;quot;languages.dat&amp;quot; and &amp;quot;dictionary.cache&amp;quot; file.  Language files are now parsed and cached at load in memory only. Furthermore, the files are only reparsed on changes.&lt;br /&gt;
*Menus with no pages or one page are no longer paginated.&lt;br /&gt;
*Added rmdir, getc, ungetc, and putc natives.&lt;br /&gt;
*Added arrayset native (for clearing large arrays quickly).&lt;br /&gt;
*Added &amp;quot;Skip HLTV&amp;quot; flag to get_players.&lt;br /&gt;
*Added ClientUserInfoChanged forward to Fakemeta.&lt;br /&gt;
*Added more string compatibility to Fakemeta.&lt;br /&gt;
*Added advanced keyvaluedata and traceresult manipulation to Fakemeta.&lt;br /&gt;
*Added global data retrieval to Fakemeta.&lt;br /&gt;
*Added menu_cancel native.&lt;br /&gt;
*Added HUD sync points to all stats scripts to avoid HUD overlapping.&lt;br /&gt;
*Updated GEOIP library to April.&lt;br /&gt;
*Fixed plmenu not killing players on teamswitch.&lt;br /&gt;
*Fixed adminslots not working.&lt;br /&gt;
*Fixed a bug where native handlers wouldn't work in rare cases.&lt;br /&gt;
*Fixed amxx_logging mode 2 not working.&lt;br /&gt;
*Fixed crash bug with plugin optimizer on AMD K6 processors.&lt;br /&gt;
*Fixed dir_exists not working in Windows.&lt;br /&gt;
*Fixed ExecuteForward not returning results properly.&lt;br /&gt;
*Fixed armoury entity natives on Linux (thanks AndraX2000).&lt;br /&gt;
*Fixed many weapons in TFCX not logging hit areas at all.&lt;br /&gt;
*Fixed stack corruption bugs in miscstats (cstrike).&lt;br /&gt;
*Fixed hud problems in miscstats (cstrike) by adding more HUD sync points.&lt;br /&gt;
*Fixed scrollmsg showing a &amp;quot;delayed movement&amp;quot; scroller.&lt;br /&gt;
*Fixed a bug in the &amp;quot;split&amp;quot; stock.&lt;br /&gt;
*Fixed a few (potentinal) bugs in studio and updated every 3rd party component&lt;br /&gt;
*Fixed amx_addadmin having wrong access level (thanks Twisted).&lt;/div&gt;</summary>
		<author><name>VEN</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.alliedmods.net/index.php?title=AMX_Mod_X_1.71_Scripting_Changes&amp;diff=3919</id>
		<title>AMX Mod X 1.71 Scripting Changes</title>
		<link rel="alternate" type="text/html" href="https://wiki.alliedmods.net/index.php?title=AMX_Mod_X_1.71_Scripting_Changes&amp;diff=3919"/>
		<updated>2007-02-10T10:03:04Z</updated>

		<summary type="html">&lt;p&gt;VEN: AMX Mod X 1.71 Scripting Changes moved to AMX Mod X 1.71 Changes&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#redirect [[AMX Mod X 1.71 Changes]]&lt;/div&gt;</summary>
		<author><name>VEN</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.alliedmods.net/index.php?title=AMX_Mod_X_1.71_Changes&amp;diff=3917</id>
		<title>AMX Mod X 1.71 Changes</title>
		<link rel="alternate" type="text/html" href="https://wiki.alliedmods.net/index.php?title=AMX_Mod_X_1.71_Changes&amp;diff=3917"/>
		<updated>2007-02-10T10:01:06Z</updated>

		<summary type="html">&lt;p&gt;VEN: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;AMX Mod X 1.71 is a bugfix release targeted at the few major issues found from 1.70.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Added plugin optimizer tweaking to core.ini.&lt;br /&gt;
*Added new &amp;quot;binary logging&amp;quot; feature for serious debugging.  Note that this requires a &amp;quot;Binary Logging&amp;quot; compiled version of AMX Mod X (downloaded separately).&lt;br /&gt;
*Improved HUD synchronization algorithm (both in efficiency and fluidity).&lt;br /&gt;
*Removed &amp;quot;languages.dat&amp;quot; and &amp;quot;dictionary.cache&amp;quot; file.  Language files are now parsed and cached at load in memory only. Furthermore, the files are only reparsed on changes.&lt;br /&gt;
*Menus with no pages or one page are no longer paginated.&lt;br /&gt;
*Added rmdir, getc, ungetc, and putc natives.&lt;br /&gt;
*Added arrayset native (for clearing large arrays quickly).&lt;br /&gt;
*Added &amp;quot;Skip HLTV&amp;quot; flag to get_players.&lt;br /&gt;
*Added ClientUserInfoChanged forward to Fakemeta.&lt;br /&gt;
*Added more string compatibility to Fakemeta.&lt;br /&gt;
*Added advanced keyvaluedata and traceresult manipulation to Fakemeta.&lt;br /&gt;
*Added global data retrieval to Fakemeta.&lt;br /&gt;
*Added menu_cancel native.&lt;br /&gt;
*Added HUD sync points to all stats scripts to avoid HUD overlapping.&lt;br /&gt;
*Updated GEOIP library to April.&lt;br /&gt;
*Fixed plmenu not killing players on teamswitch.&lt;br /&gt;
*Fixed adminslots not working.&lt;br /&gt;
*Fixed a bug where native handlers wouldn't work in rare cases.&lt;br /&gt;
*Fixed amxx_logging mode 2 not working.&lt;br /&gt;
*Fixed crash bug with plugin optimizer on AMD K6 processors.&lt;br /&gt;
*Fixed dir_exists not working in Windows.&lt;br /&gt;
*Fixed ExecuteForward not returning results properly.&lt;br /&gt;
*Fixed armoury entity natives on Linux (thanks AndraX2000).&lt;br /&gt;
*Fixed many weapons in TFCX not logging hit areas at all.&lt;br /&gt;
*Fixed stack corruption bugs in miscstats (cstrike).&lt;br /&gt;
*Fixed hud problems in miscstats (cstrike) by adding more HUD sync points.&lt;br /&gt;
*Fixed scrollmsg showing a &amp;quot;delayed movement&amp;quot; scroller.&lt;br /&gt;
*Fixed a bug in the &amp;quot;split&amp;quot; stock.&lt;br /&gt;
*Fixed a few (potentinal) bugs in studio and updated every 3rd party component&lt;br /&gt;
*Fixed amx_addadmin having wrong access level (thanks Twisted).&lt;/div&gt;</summary>
		<author><name>VEN</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.alliedmods.net/index.php?title=Half-Life_1_Game_Events&amp;diff=3850</id>
		<title>Half-Life 1 Game Events</title>
		<link rel="alternate" type="text/html" href="https://wiki.alliedmods.net/index.php?title=Half-Life_1_Game_Events&amp;diff=3850"/>
		<updated>2007-01-22T20:25:27Z</updated>

		<summary type="html">&lt;p&gt;VEN: Huge update, ughh...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Half-Life 1]]&lt;br /&gt;
[[Category:Scripting (AMX Mod X)]]&lt;br /&gt;
&lt;br /&gt;
= Introduction =&lt;br /&gt;
&lt;br /&gt;
In [[AMX Mod X]] you are able to hook in-game messages/events with [http://www.amxmodx.org/funcwiki.php?search=register_message&amp;amp;go=search register_message] / [http://www.amxmodx.org/funcwiki.php?go=func&amp;amp;id=26 register_event]. Here are the list of messages/events and their arguments which can be read with [http://www.amxmodx.org/funcwiki.php?search=get_msg_arg_&amp;amp;go=search get_msg_arg_*] / [http://www.amxmodx.org/funcwiki.php?go=func&amp;amp;id=132 read_data].&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
*See the [[Advanced Scripting (AMX Mod X)#Events.2FMessages|Advanced Scripting]] article for more on events and messages.&amp;lt;br&amp;gt;&lt;br /&gt;
*See messages.inc and message_const.inc from amxmodx/scriptong/include folder or [http://www.amxmodx.org/funcwiki.php?go=inc&amp;amp;id=47 Messaging functions] and [http://www.amxmodx.org/funcwiki.php?go=inc&amp;amp;id=48 Message constants] for full messages control including blocking, argument alteration and much more.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= ADStop =&lt;br /&gt;
{{qnotice|No Information available for this message.}}&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{qnotice|This message has no arguments.}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl1msg|ADStop}}&lt;br /&gt;
{{end-hl1msg}}&lt;br /&gt;
&lt;br /&gt;
= AllowSpec =&lt;br /&gt;
Changes whether or not &amp;quot;SPECTATE&amp;quot; appears on the change team menu. Called whenever the allow_spectators CVar is changed, with its new value sent as the byte.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{qnotice|This changes how the change team menu appears, but spectating functionality is based off of the actual CVar value.}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl1msg|AllowSpec|byte}}&lt;br /&gt;
{{hl1msg|byte|Allowed}}&lt;br /&gt;
{{end-hl1msg}}&lt;br /&gt;
&lt;br /&gt;
= AmmoPickup =&lt;br /&gt;
Temporarily draws [[HUD]] ammo amount and correspoding ammo [[HUD]] icon in the middle of the right side of the screen.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{qnotice|Draw time is depend on the ''hud_drawhistory_time'' client CVar value.}}&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{qnotice|See [[CS Weapons Information]] for more information.}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl1msg|AmmoPickup|byte, byte}}&lt;br /&gt;
{{hl1msg|byte|AmmoID}}&lt;br /&gt;
{{hl1msg|byte|Ammount}}&lt;br /&gt;
{{end-hl1msg}}&lt;br /&gt;
&lt;br /&gt;
= AmmoX =&lt;br /&gt;
Updates the green bar indicator in the [[HUD]] weapons list. Also updates [[HUD]] backpack ammo number in the lower right corner of the screen in case the given ammo type are compatible with the current weapon.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{qnotice|See [[CS Weapons Information]] for more information.}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl1msg|AmmoX|byte, byte}}&lt;br /&gt;
{{hl1msg|byte|AmmoID}}&lt;br /&gt;
{{hl1msg|byte|Ammount}}&lt;br /&gt;
{{end-hl1msg}}&lt;br /&gt;
&lt;br /&gt;
= ArmorType =&lt;br /&gt;
Draws/removes helmet [[HUD]] icon. If flag is set to 1 the helmet [[HUD]] icon will be drawn (located right on the armor icon).&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl1msg|ArmorType|byte}}&lt;br /&gt;
{{hl1msg|byte|Flag}}&lt;br /&gt;
{{end-hl1msg}}&lt;br /&gt;
&lt;br /&gt;
= BarTime =&lt;br /&gt;
Draws a [[HUD]] progress bar which is filled from 0% to 100% for the time Duration seconds. Once the bar is fully filled it will be removed from the screen automatically.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{qnotice|Set Duration to 0 to hide the bar.}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl1msg|BarTime|short}}&lt;br /&gt;
{{hl1msg|short|Duration}}&lt;br /&gt;
{{end-hl1msg}}&lt;br /&gt;
&lt;br /&gt;
= BarTime2 =&lt;br /&gt;
The same as BarTime but StartPercents is specify how many per cents of the bar are (already) filled.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{qnotice|Display time can be calculated with this formula: ''(1 - (StartPercents / 100)) / Duration''}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl1msg|BarTime2|short, short}}&lt;br /&gt;
{{hl1msg|short|Duration}}&lt;br /&gt;
{{hl1msg|short|StartPercents}}&lt;br /&gt;
{{end-hl1msg}}&lt;br /&gt;
&lt;br /&gt;
= Battery =&lt;br /&gt;
Updates the icon and the number of armor on the [[HUD]].&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl1msg|Battery|short}}&lt;br /&gt;
{{hl1msg|short|Armor}}&lt;br /&gt;
{{end-hl1msg}}&lt;br /&gt;
&lt;br /&gt;
= BlinkAcct =&lt;br /&gt;
Makes a player's money display flash rapidly, until it flashes a total of BlinkAmt times.&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl1msg|BlinkAcct|byte}}&lt;br /&gt;
{{hl1msg|byte|BlinkAmt}}&lt;br /&gt;
{{end-hl1msg}}&lt;br /&gt;
&lt;br /&gt;
= BombDrop =&lt;br /&gt;
The first three arguments are the origin of the dropped bomb. The last argument is set to 1 if the bomb has been planted. It is 0 if the bomb was dropped due to voluntary dropping or death/disconnect. Setting the last argument 1, will also trigger the round timer to hide. It also will show the dropped bomb on the Terrorist team's radar in the location specified by the first three arguments.&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl1msg|BombDrop|coord, coord, coord, byte}}&lt;br /&gt;
{{hl1msg|coord|CoordX}}&lt;br /&gt;
{{hl1msg|coord|CoordY}}&lt;br /&gt;
{{hl1msg|coord|CoordZ}}&lt;br /&gt;
{{hl1msg|byte|Flag}}&lt;br /&gt;
{{end-hl1msg}}&lt;br /&gt;
&lt;br /&gt;
= BombPickup =&lt;br /&gt;
This message just tells the game that the bomb has been picked up. It will cause the dropped/planted bomb to disappear from the Terrorist team's radar.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{qnotice|This message has no arguments.}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl1msg|BombPickup}}&lt;br /&gt;
{{end-hl1msg}}&lt;br /&gt;
&lt;br /&gt;
= BotProgress =&lt;br /&gt;
Used by CZ's bots when learning a new map. Displays a progress bar in the middle of the screen, with some header text. The bar doesn't move, and you can't do anything while the bar is displayed. This is a different style of progress bar than from the BarTime event. This really doesn't display well in CS.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{qnotice|Flag can be 0 (update bar), 1 (create new bar), or 2 (remove bar). When using flag 0, send all arguments. When using flag 1, send only Flag and Header. When using flag 2, send only Flag.}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl1msg|BotProgress|byte, byte, string}}&lt;br /&gt;
{{hl1msg|byte|Flag}}&lt;br /&gt;
{{hl1msg|byte|Progress}}&lt;br /&gt;
{{hl1msg|string|Header}}&lt;br /&gt;
{{end-hl1msg}}&lt;br /&gt;
&lt;br /&gt;
= BotVoice =&lt;br /&gt;
Displays (or hides) the voice icon above a user's head and the talking icon on the right side of the screen. This is called by CZ for bots; it's not called by regular players, although you &amp;lt;i&amp;gt;can&amp;lt;/i&amp;gt; specify a regular player (non-bot) for the PlayerIndex. Status is 1 for talking, or 0 for not talking.&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl1msg|BotVoice|byte, byte}}&lt;br /&gt;
{{hl1msg|byte|Status}}&lt;br /&gt;
{{hl1msg|byte|PlayerIndex}}&lt;br /&gt;
{{end-hl1msg}}&lt;br /&gt;
&lt;br /&gt;
= Brass =&lt;br /&gt;
Creates a brass shell. Used, for example, by the AWP, after firing.&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl1msg|Brass|byte, coord, coord, coord, coord, coord, coord, coord, coord, coord, angle, short, byte, byte, byte}}&lt;br /&gt;
{{hl1msg|byte|Unknown}}&lt;br /&gt;
{{hl1msg|coord|StartX}}&lt;br /&gt;
{{hl1msg|coord|StartY}}&lt;br /&gt;
{{hl1msg|coord|StartZ}}&lt;br /&gt;
{{hl1msg|coord|VelocityX?}}&lt;br /&gt;
{{hl1msg|coord|VelocityY?}}&lt;br /&gt;
{{hl1msg|coord|VelocityZ?}}&lt;br /&gt;
{{hl1msg|coord|UnknownX}}&lt;br /&gt;
{{hl1msg|coord|UnknownY}}&lt;br /&gt;
{{hl1msg|coord|UnknownZ}}&lt;br /&gt;
{{hl1msg|angle|Life?}}&lt;br /&gt;
{{hl1msg|short|Model?}}&lt;br /&gt;
{{hl1msg|byte|Unknown}}&lt;br /&gt;
{{hl1msg|byte|Unknown}}&lt;br /&gt;
{{hl1msg|byte|Unknown}}&lt;br /&gt;
{{end-hl1msg}}&lt;br /&gt;
&lt;br /&gt;
= BuyClose =&lt;br /&gt;
Forces the buy menu to close. This is not called when the player closes the buy menu by himself; it's only called when the game forces him to do so (ie: he walks outside of the buy zone, gets killed, etcetera).&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{qnotice|This message has no arguments.}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl1msg|BuyClose}}&lt;br /&gt;
{{end-hl1msg}}&lt;br /&gt;
&lt;br /&gt;
= ClCorpse =&lt;br /&gt;
Spawns a player's corpse. ModelName is the player's model name, for example: &amp;quot;leet&amp;quot;. Delay is a delay before animation plaback, can be negative value.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{qnotice|Coord and Delay is in non-standard unknown format.}}&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{qnotice|In CS argument #10 is always equal to 0.}}&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*See [http://www.amxmodx.org/funcwiki.php?go=module&amp;amp;id=4#const_teams CS Team Constants] for team indeces constants list.&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl1msg|ClCorpse|string, long, long, long, coord, coord, coord, long, byte, byte, byte, byte}}&lt;br /&gt;
{{hl1msg|string|ModelName}}&lt;br /&gt;
{{hl1msg|long|CoordX}}&lt;br /&gt;
{{hl1msg|long|CoordY}}&lt;br /&gt;
{{hl1msg|long|CoordZ}}&lt;br /&gt;
{{hl1msg|coord|Angle0}}&lt;br /&gt;
{{hl1msg|coord|Angle1}}&lt;br /&gt;
{{hl1msg|coord|Angle2}}&lt;br /&gt;
{{hl1msg|long|Delay}}&lt;br /&gt;
{{hl1msg|byte|Sequence}}&lt;br /&gt;
{{hl1msg|byte|ClassID?}}&lt;br /&gt;
{{hl1msg|byte|TeamID}}&lt;br /&gt;
{{hl1msg|byte|PlayerID}}&lt;br /&gt;
{{end-hl1msg}}&lt;br /&gt;
&lt;br /&gt;
= Crosshair =&lt;br /&gt;
Draws/removes a crosshair. If Flag is set to 1 the crosshair will be drawn.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{qnotice|This crossair looks not like the regular one but like the one that is drawn in the spectator mode.}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl1msg|Crosshair|byte}}&lt;br /&gt;
{{hl1msg|byte|Flag}}&lt;br /&gt;
{{end-hl1msg}}&lt;br /&gt;
&lt;br /&gt;
= CurWeapon =&lt;br /&gt;
Updates the clip ammo number and weapon's corresponding ammo type icon on the [[HUD]].&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{qnotice|See [[CS Weapons Information]] for more information.}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl1msg|CurWeapon|byte, byte, byte}}&lt;br /&gt;
{{hl1msg|byte|IsActive}}&lt;br /&gt;
{{hl1msg|byte|WeaponID}}&lt;br /&gt;
{{hl1msg|byte|ClipAmmo}}&lt;br /&gt;
{{end-hl1msg}}&lt;br /&gt;
&lt;br /&gt;
= CZCareer =&lt;br /&gt;
Supplies certain updates to the player regarding Condition Zero singleplayer missions.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{qnotice|See the [[CZCareer]] page for more information.}}&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{qnotice|Using an invalid type has no repercussions whatsoever. Therefore, you can use this to make your own custom communications (you can send any number of arguments of any type after the first string).}}&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{qnotice|The Type argument is case-sensitive.}}&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{qnotice|This event does nothing in CS and CZ multiplayer.}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl1msg|CZCareer|string,*}}&lt;br /&gt;
{{hl1msg|string|Type}}&lt;br /&gt;
{{hl1msg|*|Parameters}}&lt;br /&gt;
{{end-hl1msg}}&lt;br /&gt;
&lt;br /&gt;
= CZCareerHUD =&lt;br /&gt;
Displays certain [[HUD]] elements regarding Condition Zero singleplayer missions.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{qnotice|See the [[CZCareerHUD]] page for more information.}}&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{qnotice|Using an invalid type has no repercussions whatsoever. Therefore, you can use this to make your own custom communications (you can send any number of arguments of any type after the first string).}}&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{qnotice|The Type argument is case-sensitive.}}&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{qnotice|This event has some limited functionality in CS and CZ multiplayer (albeit better in CZ).}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl1msg|CZCareerHUD|string,*}}&lt;br /&gt;
{{hl1msg|string|Type}}&lt;br /&gt;
{{hl1msg|*|Parameters}}&lt;br /&gt;
{{end-hl1msg}}&lt;br /&gt;
&lt;br /&gt;
= Damage =&lt;br /&gt;
Called when a player takes damage, to display the red locational indicators. The last three arguments is the origin of the damage inflictor or victim origin if inflictor isn't found. DamageType is a bitwise value usually consist of a single bit.&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl1msg|Damage|byte, byte, long, coord, coord, coord}}&lt;br /&gt;
{{hl1msg|byte|DamageSave}}&lt;br /&gt;
{{hl1msg|byte|DamageTake}}&lt;br /&gt;
{{hl1msg|long|DamageType}}&lt;br /&gt;
{{hl1msg|coord|CoordX}}&lt;br /&gt;
{{hl1msg|coord|CoordY}}&lt;br /&gt;
{{hl1msg|coord|CoordZ}}&lt;br /&gt;
{{end-hl1msg}}&lt;br /&gt;
&lt;br /&gt;
= DeathMsg =&lt;br /&gt;
Fired to all players (MSG_ALL or MSG_BROADCAST) to notify them of a death. This generates the [[HUD]] message the client sees in the upper right corner of their screen.&amp;lt;br&amp;gt;&lt;br /&gt;
Also prints the console text message &amp;quot;KillerName killed VictimName with TruncatedWeaponName&amp;quot; or &amp;quot;*** KillerName killed VictimName with a headshot from TruncatedWeaponName ***&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{qnotice|TruncatedWeaponName doesn't contain a &amp;quot;weapon_&amp;quot; prefix. See [[CS Weapons Information]] for more information.}}&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{qnotice|For grenade kill TruncatedWeaponName isn't &amp;quot;hegrenade&amp;quot; but &amp;quot;grenade&amp;quot;, in fact it's an actual classname of a throwed grenade.}}&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{qnotice|For KillerID it's not necessarily should be a PlayerID, it could be 0 if player dies from fall/acid/radiation/fire/etc damage/lack of oxygen or from touch to a &amp;quot;trigger_hurt&amp;quot; entity, in this case TruncatedWeaponName will be &amp;quot;worldspawn&amp;quot; and &amp;quot;trigger_hurt&amp;quot; respectively.}}&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{qnotice|For vehicle kills TruncatedWeaponName could be &amp;quot;vehicle&amp;quot;, &amp;quot;tank&amp;quot; et cetera.}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl1msg|DeathMsg|byte, byte, byte, string}}&lt;br /&gt;
{{hl1msg|byte|KillerID}}&lt;br /&gt;
{{hl1msg|byte|VictimID}}&lt;br /&gt;
{{hl1msg|byte|IsHeadshot}}&lt;br /&gt;
{{hl1msg|string|TruncatedWeaponName}}&lt;br /&gt;
{{end-hl1msg}}&lt;br /&gt;
&lt;br /&gt;
= FlashBat =&lt;br /&gt;
Updates the flashlight battery charge on the [[HUD]].&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl1msg|FlashBat|byte}}&lt;br /&gt;
{{hl1msg|byte|ChargePercents}}&lt;br /&gt;
{{end-hl1msg}}&lt;br /&gt;
&lt;br /&gt;
= Flashlight =&lt;br /&gt;
Updates the flashlight state and battery charge on the [[HUD]]. If Flag is set to 1 the flashlight [[HUD]] icon will be shown as active.&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl1msg|Flashlight|byte, byte}}&lt;br /&gt;
{{hl1msg|byte|Flag}}&lt;br /&gt;
{{hl1msg|byte|ChargePercents}}&lt;br /&gt;
{{end-hl1msg}}&lt;br /&gt;
&lt;br /&gt;
= Fog =&lt;br /&gt;
{{qnotice|No Information available for this message.}}&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= ForceCam =&lt;br /&gt;
Called whenever mp_forcecam or mp_forcechasecam are changed, with their new values passed. There is assumedly a third CVar that this tracks, but it is yet unknown. Note that this message doesn't actually change any of the spectating rules for the client.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{qnotice|Even if mp_forcechasecam is set to 2, it is sent by this message as 1.}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl1msg|ForceCam|byte, byte, byte}}&lt;br /&gt;
{{hl1msg|byte|ForcecamValue}}&lt;br /&gt;
{{hl1msg|byte|ForcechasecamValue}}&lt;br /&gt;
{{hl1msg|byte|Unknown}}&lt;br /&gt;
{{end-hl1msg}}&lt;br /&gt;
&lt;br /&gt;
= GameMode =&lt;br /&gt;
{{qnotice|No Information available for this message.}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl1msg|GameMode|byte}}&lt;br /&gt;
{{hl1msg|byte|Unknown}}&lt;br /&gt;
{{end-hl1msg}}&lt;br /&gt;
&lt;br /&gt;
= GameTitle =&lt;br /&gt;
{{qnotice|No Information available for this message.}}&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Geiger =&lt;br /&gt;
Notifies about radiation level through special sound signals. Distance is a distance to hazard area.&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl1msg|Geiger|byte}}&lt;br /&gt;
{{hl1msg|byte|Distance}}&lt;br /&gt;
{{end-hl1msg}}&lt;br /&gt;
&lt;br /&gt;
= Health =&lt;br /&gt;
Updates the number of health on the [[HUD]].&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl1msg|Health|byte}}&lt;br /&gt;
{{hl1msg|byte|Health}}&lt;br /&gt;
{{end-hl1msg}}&lt;br /&gt;
&lt;br /&gt;
= HideWeapon =&lt;br /&gt;
Hides the specified [[HUD]] elements.&amp;lt;br&amp;gt;&lt;br /&gt;
Flags:&lt;br /&gt;
   1   (1&amp;lt;&amp;lt;0)  -  crosshair, ammo, weapons list&lt;br /&gt;
   2   (1&amp;lt;&amp;lt;1)  -  flashlight, +&lt;br /&gt;
   4   (1&amp;lt;&amp;lt;2)  -  ALL&lt;br /&gt;
   8   (1&amp;lt;&amp;lt;3)  -  radar, health, armor, +&lt;br /&gt;
  16   (1&amp;lt;&amp;lt;4)  -  timer, +&lt;br /&gt;
  32   (1&amp;lt;&amp;lt;5)  -  money, +&lt;br /&gt;
  64   (1&amp;lt;&amp;lt;6)  -  crosshair&lt;br /&gt;
 128   (1&amp;lt;&amp;lt;7)  -  +&lt;br /&gt;
Symbol + mean that an additional crosshair will be drawn. That crosshair looks exactly like the one from Crosshair message.&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl1msg|HideWeapon|byte}}&lt;br /&gt;
{{hl1msg|byte|Flags}}&lt;br /&gt;
{{end-hl1msg}}&lt;br /&gt;
&lt;br /&gt;
= HLTV =&lt;br /&gt;
{{qnotice|No Information available for this message.}}&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{qnotice|On new round is fired with both arguments equal to 0.}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl1msg|HLTV|byte, byte}}&lt;br /&gt;
{{hl1msg|byte|ClientID}}&lt;br /&gt;
{{hl1msg|byte|Unknown}}&lt;br /&gt;
{{end-hl1msg}}&lt;br /&gt;
&lt;br /&gt;
= HostageK =&lt;br /&gt;
Temporarily draws a blinking red dot on the CT players' radar when a hostage is killed.&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl1msg|HostageK|byte}}&lt;br /&gt;
{{hl1msg|byte|HostageID}}&lt;br /&gt;
{{end-hl1msg}}&lt;br /&gt;
&lt;br /&gt;
= HostagePos =&lt;br /&gt;
Draws/updates the blue mark on the CT players' radar which is indicate the corresponding hostage position.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{qnotice|Is called with Flag set to 1 on player [[HUD]] full update.}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl1msg|HostagePos|byte, byte, coord, coord, coord}}&lt;br /&gt;
{{hl1msg|byte|Flag}}&lt;br /&gt;
{{hl1msg|byte|HostageID}}&lt;br /&gt;
{{hl1msg|coord|CoordX}}&lt;br /&gt;
{{hl1msg|coord|CoordY}}&lt;br /&gt;
{{hl1msg|coord|CoordZ}}&lt;br /&gt;
{{end-hl1msg}}&lt;br /&gt;
&lt;br /&gt;
= HudText =&lt;br /&gt;
{{qnotice|No Information available for this message.}}&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= HudTextArgs =&lt;br /&gt;
Prints [[HUD]] text.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{qnotice|An example of TextCode could be &amp;quot;#Hint_you_have_the_bomb&amp;quot;.}}&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{qnotice|If you have a problems with specifing the last two arguments use 1 and 0 respectively.}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl1msg|HudTextArgs|string, byte, byte}}&lt;br /&gt;
{{hl1msg|string|TextCode}}&lt;br /&gt;
{{hl1msg|byte|Unknown}}&lt;br /&gt;
{{hl1msg|byte|Unknown}}&lt;br /&gt;
{{end-hl1msg}}&lt;br /&gt;
&lt;br /&gt;
= HudTextPro =&lt;br /&gt;
{{qnotice|No Information available for this message.}}&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= InitHUD =&lt;br /&gt;
Initializes the [[HUD]].&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{qnotice|This message has no arguments.}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl1msg|InitHUD}}&lt;br /&gt;
{{end-hl1msg}}&lt;br /&gt;
&lt;br /&gt;
= ItemPickup =&lt;br /&gt;
Temporarily draws correspoding item [[HUD]] icon in the middle of the right side of the screen.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{qnotice|Draw time is depend on the ''hud_drawhistory_time'' client CVar value.}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl1msg|ItemPickup|string}}&lt;br /&gt;
{{hl1msg|string|ItemName}}&lt;br /&gt;
{{end-hl1msg}}&lt;br /&gt;
&lt;br /&gt;
= ItemStatus =&lt;br /&gt;
Notifies about carried items.&amp;lt;br&amp;gt;&lt;br /&gt;
Example of some item bits:&lt;br /&gt;
 1   (1&amp;lt;&amp;lt;0)  -  nightvision goggles&lt;br /&gt;
 2   (1&amp;lt;&amp;lt;1)  -  defusal kit&lt;br /&gt;
{{begin-hl1msg|ItemStatus|byte}}&lt;br /&gt;
{{hl1msg|byte|ItemsBitSum}}&lt;br /&gt;
{{end-hl1msg}}&lt;br /&gt;
&lt;br /&gt;
= Location =&lt;br /&gt;
{{qnotice|No Information available for this message.}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl1msg|Location|byte, string}}&lt;br /&gt;
{{hl1msg|byte|Unknown}}&lt;br /&gt;
{{hl1msg|string|Unknown}}&lt;br /&gt;
{{end-hl1msg}}&lt;br /&gt;
&lt;br /&gt;
= Money =&lt;br /&gt;
Updates the Amount of money on the [[HUD]]. If the Flag is 1, the additional new-old [[HUD]] money amount difference will be also displayed.&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl1msg|Money|long, byte}}&lt;br /&gt;
{{hl1msg|long|Amount}}&lt;br /&gt;
{{hl1msg|byte|Flag}}&lt;br /&gt;
{{end-hl1msg}}&lt;br /&gt;
&lt;br /&gt;
= MOTD =&lt;br /&gt;
Displays MOTD window.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{qnotice|Max. Text length is 60. Large MOTD is sent in multiple messages. For the message that is send a last MOTD part the Flag will be set to 1 and 0 otherwise.}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl1msg|MOTD|byte, string}}&lt;br /&gt;
{{hl1msg|byte|Flag}}&lt;br /&gt;
{{hl1msg|string|Text}}&lt;br /&gt;
{{end-hl1msg}}&lt;br /&gt;
&lt;br /&gt;
= NVGToggle =&lt;br /&gt;
Toggles night vision mode. For Flag: 1 is on, 0 is off.&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl1msg|NVGToggle|byte}}&lt;br /&gt;
{{hl1msg|byte|Flag}}&lt;br /&gt;
{{end-hl1msg}}&lt;br /&gt;
&lt;br /&gt;
= Radar =&lt;br /&gt;
Draws/updates the dot on the [[HUD]] radar which is indicate the given player position.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{qnotice|Works for teammates only.}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl1msg|Radar|byte, coord, coord, coord}}&lt;br /&gt;
{{hl1msg|byte|PlayerID}}&lt;br /&gt;
{{hl1msg|coord|CoordX}}&lt;br /&gt;
{{hl1msg|coord|CoordY}}&lt;br /&gt;
{{hl1msg|coord|CoordZ}}&lt;br /&gt;
{{end-hl1msg}}&lt;br /&gt;
&lt;br /&gt;
= ReceiveW =&lt;br /&gt;
{{qnotice|No Information available for this message.}}&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= ReloadSound =&lt;br /&gt;
{{qnotice|No Information available for this message.}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl1msg|ReloadSound|byte, byte}}&lt;br /&gt;
{{hl1msg|byte|Unknown}}&lt;br /&gt;
{{hl1msg|byte|Unknown}}&lt;br /&gt;
{{end-hl1msg}}&lt;br /&gt;
&lt;br /&gt;
= ReqState =&lt;br /&gt;
{{qnotice|No Information available for this message.}}&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{qnotice|This message has no arguments.}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl1msg|ReqState}}&lt;br /&gt;
{{end-hl1msg}}&lt;br /&gt;
&lt;br /&gt;
= ResetHUD =&lt;br /&gt;
Resets the [[HUD]].&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{qnotice|This message has no arguments.}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl1msg|ResetHUD}}&lt;br /&gt;
{{end-hl1msg}}&lt;br /&gt;
&lt;br /&gt;
= RoundTime =&lt;br /&gt;
Updates the round timer on the [[HUD]]. Time is in seconds.&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl1msg|RoundTime|short}}&lt;br /&gt;
{{hl1msg|short|Time}}&lt;br /&gt;
{{end-hl1msg}}&lt;br /&gt;
&lt;br /&gt;
= SayText =&lt;br /&gt;
Prints say [[HUD]] text. Second argument can be a predefined string or a custom one. In the last case the last two arguments isn't required.&amp;lt;br&amp;gt;&lt;br /&gt;
An examples of a predifined Counter-Strike string values: #Cstrike_Chat_AllDead, #Cstrike_Name_Change&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{qnotice|For #Cstrike_Name_Change String2 is an old name and String3 is a new name.}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl1msg|SayText|byte, string, string, string}}&lt;br /&gt;
{{hl1msg|byte|SenderID}}&lt;br /&gt;
{{hl1msg|string|String1}}&lt;br /&gt;
{{hl1msg|string|String2}}&lt;br /&gt;
{{hl1msg|string|String3}}&lt;br /&gt;
{{end-hl1msg}}&lt;br /&gt;
&lt;br /&gt;
= Scenario =&lt;br /&gt;
If Active is 0, this display will be hidden. If Active is 1, displays Sprite (valid names listed in sprites/hud.txt) to the right of the round timer with an alpha value of Alpha (100-255). If FlashRate is nonzero, then the sprite will flash from given the given alpha to an alpha of 100, at a rate of FlashRate (measured in ???). This is used by CZ to display how many hostages remain unrescued, and also to display the ticking bomb when it is planted.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{qnotice|If Active is 0, don't send any other arguments afterwards. Also, you don't need to send either short if FlashRate is just going to be 0.}}&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[image:Cs_scenario_msg.jpg|frame|right|Scenario message in CS, using the following parameters: 1, d_mp5navy, 150]]&lt;br /&gt;
&lt;br /&gt;
{{qnotice|Works in both CS and CZ!}}&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{qnotice|In CZ (and possibly CS), if someone respawns after the bomb has been planted, their Scenario event will not work at all until the next round.}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl1msg|Scenario|byte, string, byte, short, short}}&lt;br /&gt;
{{hl1msg|byte|Active}}&lt;br /&gt;
{{hl1msg|string|Sprite}}&lt;br /&gt;
{{hl1msg|byte|Alpha}}&lt;br /&gt;
{{hl1msg|short|FlashRate}}&lt;br /&gt;
{{hl1msg|short|Unknown}}&lt;br /&gt;
{{end-hl1msg}}&lt;br /&gt;
&lt;br /&gt;
= ScoreAttrib =&lt;br /&gt;
Updates the scoreboard's attribute for the specified player. For the 2nd argument, 0 is nothing, (1&amp;lt;&amp;lt;0) i.e. 1 is dead, (1&amp;lt;&amp;lt;1) i.e. 2 is bomb, (1&amp;lt;&amp;lt;2) i.e. 4 is VIP.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{qnotice|Flags is a bitwise value so if VIP player is dying with the bomb the Flags will be 7 i.e. bit sum of all flags.}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl1msg|ScoreAttrib|byte, byte}}&lt;br /&gt;
{{hl1msg|byte|PlayerID}}&lt;br /&gt;
{{hl1msg|byte|Flags}}&lt;br /&gt;
{{end-hl1msg}}&lt;br /&gt;
&lt;br /&gt;
= ScoreInfo =&lt;br /&gt;
Updates the scoreboard with the given player's Frags and Deaths.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{qnotice|In CS the 4th argument is always equal to 0.}}&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*See [http://www.amxmodx.org/funcwiki.php?go=module&amp;amp;id=4#const_teams CS Team Constants] for team indeces constants list.&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl1msg|ScoreInfo|byte, short, short, short, short}}&lt;br /&gt;
{{hl1msg|byte|PlayerID}}&lt;br /&gt;
{{hl1msg|short|Frags}}&lt;br /&gt;
{{hl1msg|short|Deaths}}&lt;br /&gt;
{{hl1msg|short|ClassID?}}&lt;br /&gt;
{{hl1msg|short|TeamID}}&lt;br /&gt;
{{end-hl1msg}}&lt;br /&gt;
&lt;br /&gt;
= ScreenFade =&lt;br /&gt;
Fades the screen.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{qnotice|Duration and HoldTime is in special units. 1 second is equal to (1&amp;lt;&amp;lt;12) i.e. 4096 units.}}&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Flags (from HLSDK):&lt;br /&gt;
 FFADE_IN         0x0000 // Just here so we don't pass 0 into the function&lt;br /&gt;
 FFADE_OUT        0x0001 // Fade out (not in)&lt;br /&gt;
 FFADE_MODULATE   0x0002 // Modulate (don't blend)&lt;br /&gt;
 FFADE_STAYOUT    0x0004 // ignores the duration, stays faded out until new ScreenFade message received&lt;br /&gt;
{{begin-hl1msg|ScreenFade|short, short, short, byte, byte, byte, byte}}&lt;br /&gt;
{{hl1msg|short|Duration}}&lt;br /&gt;
{{hl1msg|short|HoldTime}}&lt;br /&gt;
{{hl1msg|short|Flags}}&lt;br /&gt;
{{hl1msg|byte|ColorR}}&lt;br /&gt;
{{hl1msg|byte|ColorG}}&lt;br /&gt;
{{hl1msg|byte|ColorB}}&lt;br /&gt;
{{hl1msg|byte|Alpha}}&lt;br /&gt;
{{end-hl1msg}}&lt;br /&gt;
&lt;br /&gt;
= ScreenShake =&lt;br /&gt;
Shakes the screen.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{qnotice|All arguments is in special units. 1 second is equal to (1&amp;lt;&amp;lt;12) i.e. 4096 units.}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl1msg|ScreenShake|short, short, short}}&lt;br /&gt;
{{hl1msg|short|Amplitude}}&lt;br /&gt;
{{hl1msg|short|Duration}}&lt;br /&gt;
{{hl1msg|short|Frequency}}&lt;br /&gt;
{{end-hl1msg}}&lt;br /&gt;
&lt;br /&gt;
= SendAudio =&lt;br /&gt;
Plays the specified audio. An example of AudioCode could be &amp;quot;%!MRAD_rounddraw&amp;quot;.&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl1msg|SendAudio|byte, string, short}}&lt;br /&gt;
{{hl1msg|byte|SenderID}}&lt;br /&gt;
{{hl1msg|string|AudioCode}}&lt;br /&gt;
{{hl1msg|short|Pitch}}&lt;br /&gt;
{{end-hl1msg}}&lt;br /&gt;
&lt;br /&gt;
= ServerName =&lt;br /&gt;
Sends a server name to a client.&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl1msg|ServerName|string}}&lt;br /&gt;
{{hl1msg|string|ServerName}}&lt;br /&gt;
{{end-hl1msg}}&lt;br /&gt;
&lt;br /&gt;
= SetFOV =&lt;br /&gt;
Sets the specified field of view.&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl1msg|SetFOV|byte}}&lt;br /&gt;
{{hl1msg|byte|Degrees}}&lt;br /&gt;
{{end-hl1msg}}&lt;br /&gt;
&lt;br /&gt;
= ShadowIdx =&lt;br /&gt;
{{qnotice|No Information available for this message.}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl1msg|ShadowIdx|long}}&lt;br /&gt;
{{hl1msg|long|Unknown}}&lt;br /&gt;
{{end-hl1msg}}&lt;br /&gt;
&lt;br /&gt;
= ShowMenu =&lt;br /&gt;
Displays a &amp;quot;menu&amp;quot; to a player (text on the left side of the screen). Acts like AMXX's show_menu (in fact, this is how AMXX shows a menu).&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{qnotice|Multipart should be 1 if your menu takes up multiple messages (i.e.: string is too big to fit into one). On the final message, Multipart should be 0.}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl1msg|ShowMenu|short, char, byte, string}}&lt;br /&gt;
{{hl1msg|short|KeysBitSum}}&lt;br /&gt;
{{hl1msg|char|Time}}&lt;br /&gt;
{{hl1msg|byte|Multipart}}&lt;br /&gt;
{{hl1msg|string|Text}}&lt;br /&gt;
{{end-hl1msg}}&lt;br /&gt;
&lt;br /&gt;
= ShowTimer =&lt;br /&gt;
Forces the round timer displaying.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{qnotice|This message has no arguments.}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl1msg|ShowTimer}}&lt;br /&gt;
{{end-hl1msg}}&lt;br /&gt;
&lt;br /&gt;
= SpecHealth =&lt;br /&gt;
{{qnotice|No Information available for this message.}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl1msg|SpecHealth|byte}}&lt;br /&gt;
{{hl1msg|byte|Health?}}&lt;br /&gt;
{{end-hl1msg}}&lt;br /&gt;
&lt;br /&gt;
= SpecHealth2 =&lt;br /&gt;
Updates the observer's screen with a name and health of the given player.&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl1msg|SpecHealth2|byte, byte}}&lt;br /&gt;
{{hl1msg|byte|Health}}&lt;br /&gt;
{{hl1msg|byte|PlayerID}}&lt;br /&gt;
{{end-hl1msg}}&lt;br /&gt;
&lt;br /&gt;
= Spectator =&lt;br /&gt;
Called when player becomes an observer/spectator.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{qnotice|On join to Spectators usually is fired twice in a row.}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl1msg|Spectator|byte, byte}}&lt;br /&gt;
{{hl1msg|byte|ClientID}}&lt;br /&gt;
{{hl1msg|byte|Unknown}}&lt;br /&gt;
{{end-hl1msg}}&lt;br /&gt;
&lt;br /&gt;
= StatusIcon =&lt;br /&gt;
Draws/removes the specified status [[HUD]] icon. For Status, 0 is Hide Icon, 1 is Show Icon, 2 is Flash Icon. Color arguments are optional and is required only if Status aren't equal to 0.&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl1msg|StatusIcon|byte, string, byte, byte, byte}}&lt;br /&gt;
{{hl1msg|byte|Status}}&lt;br /&gt;
{{hl1msg|string|SpriteName}}&lt;br /&gt;
{{hl1msg|byte|ColorR}}&lt;br /&gt;
{{hl1msg|byte|ColorG}}&lt;br /&gt;
{{hl1msg|byte|ColorB}}&lt;br /&gt;
{{end-hl1msg}}&lt;br /&gt;
&lt;br /&gt;
= StatusValue =&lt;br /&gt;
Sends/updates the status values. For the Flag 1 the Value is TeamRelation, for 2 is PlayerID, for 3 is Health. For TeamRelation, 1 is Teammate player, 2 is Non-Teammate player, 3 is Hostage. If TeamRelation is Hostage, PlayerID will be 0 or will be not sent at all.&amp;lt;br&amp;gt;&lt;br /&gt;
Usually is fired as a triple message, for example:&lt;br /&gt;
 {1,  2}  -  non-teammate player&lt;br /&gt;
 {2, 17}  -  player index is 17&lt;br /&gt;
 {3, 59}  -  player health is 59&lt;br /&gt;
{{begin-hl1msg|StatusValue|byte, short}}&lt;br /&gt;
{{hl1msg|byte|Flag}}&lt;br /&gt;
{{hl1msg|short|Value}}&lt;br /&gt;
{{end-hl1msg}}&lt;br /&gt;
&lt;br /&gt;
= StatusText =&lt;br /&gt;
Specifies the status text format.&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl1msg|StatusText|byte, string}}&lt;br /&gt;
{{hl1msg|byte|Unknown}}&lt;br /&gt;
{{hl1msg|string|Text}}&lt;br /&gt;
{{end-hl1msg}}&lt;br /&gt;
&lt;br /&gt;
= TaskTime =&lt;br /&gt;
Displays a secondary timer above the round timer. Used for Condition Zero singleplayer missions.&amp;lt;br&amp;gt;&lt;br /&gt;
If Time is -1, timer dissappears. If Time is any other negative value, it is displayed as green instead of yellow, and considered positive.&amp;lt;br&amp;gt;&lt;br /&gt;
If Active is true, timer counts down. Otherwise, it is paused.&amp;lt;br&amp;gt;If Fade is above zero, the timer will slowly fade out after that many seconds have passed (even if the timer is inactive).&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{qnotice|This event can only be used on missions that have an objective requiring a secondary timer!}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl1msg|TaskTime|short, byte, byte}}&lt;br /&gt;
{{hl1msg|short|Time}}&lt;br /&gt;
{{hl1msg|byte|Active}}&lt;br /&gt;
{{hl1msg|byte|Fade}}&lt;br /&gt;
{{end-hl1msg}}&lt;br /&gt;
&lt;br /&gt;
= TeamInfo =&lt;br /&gt;
Sets the team information for the given player.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{qnotice|In CS TeamName is either &amp;quot;UNASSIGNED&amp;quot;, &amp;quot;TERRORIST&amp;quot;, &amp;quot;CT&amp;quot; or &amp;quot;SPECTATOR&amp;quot;.}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl1msg|TeamInfo|byte, string}}&lt;br /&gt;
{{hl1msg|byte|PlayerID}}&lt;br /&gt;
{{hl1msg|string|TeamName}}&lt;br /&gt;
{{end-hl1msg}}&lt;br /&gt;
&lt;br /&gt;
= TeamScore =&lt;br /&gt;
Updates the team score on the score board.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{qnotice|In CS TeamName is either &amp;quot;TERRORIST&amp;quot; or &amp;quot;CT&amp;quot;.}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl1msg|TeamScore|string, short}}&lt;br /&gt;
{{hl1msg|string|TeamName}}&lt;br /&gt;
{{hl1msg|short|Score}}&lt;br /&gt;
{{end-hl1msg}}&lt;br /&gt;
&lt;br /&gt;
= TextMsg =&lt;br /&gt;
Prints a cutom/or predefined text message.&amp;lt;br&amp;gt;&lt;br /&gt;
There does not necessarily have to be a total of 6 arguments, there could be as little as 2. For example you can send a message with the following:&lt;br /&gt;
 Arg1: 1&lt;br /&gt;
 Arg2: #Game_join_ct&lt;br /&gt;
 Arg3: Pimp Daddy&lt;br /&gt;
{{begin-hl1msg|TextMsg|byte, string, string, string, string, string}}&lt;br /&gt;
{{hl1msg|byte|DestinationType}}&lt;br /&gt;
{{hl1msg|string|Message}}&lt;br /&gt;
{{hl1msg|string|Submsg}}&lt;br /&gt;
{{hl1msg|string|Submsg}}&lt;br /&gt;
{{hl1msg|string|Submsg}}&lt;br /&gt;
{{hl1msg|string|Submsg}}&lt;br /&gt;
{{end-hl1msg}}&lt;br /&gt;
&lt;br /&gt;
= Train =&lt;br /&gt;
Displays the speed bar used for controlling a train.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{qnotice|Speed is as follows: 0 (disable display), 1 (reverse), 2 (neutral), 3 (slow speed), 4 (medium speed), 5 (maximum speed)}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl1msg|Train|byte}}&lt;br /&gt;
{{hl1msg|byte|Speed}}&lt;br /&gt;
{{end-hl1msg}}&lt;br /&gt;
&lt;br /&gt;
= TutorClose =&lt;br /&gt;
Closes all CZ-style tutor popups.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= TutorLine =&lt;br /&gt;
{{qnotice|No Information available for this message.}}&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= TutorState =&lt;br /&gt;
{{qnotice|No Information available for this message.}}&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= TutorText =&lt;br /&gt;
Used to display a CZ-style tutor popup.&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl1msg|TutorText|string, byte, short, short, short}}&lt;br /&gt;
{{hl1msg|string|Unknown}}&lt;br /&gt;
{{hl1msg|byte|Unknown}}&lt;br /&gt;
{{hl1msg|short|Unknown}}&lt;br /&gt;
{{hl1msg|short|Unknown}}&lt;br /&gt;
{{hl1msg|short|Unknown}}&lt;br /&gt;
{{end-hl1msg}}&lt;br /&gt;
&lt;br /&gt;
= ViewMode =&lt;br /&gt;
{{qnotice|No Information available for this message (HLSDK says this switches to first-person view, but it doesn't seem to function as so).}}&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{qnotice|This message has no arguments.}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl1msg|ViewMode}}&lt;br /&gt;
{{end-hl1msg}}&lt;br /&gt;
&lt;br /&gt;
= VGUIMenu =&lt;br /&gt;
Displays a predefined VGUI menu.&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl1msg|VGUIMenu|byte, short, char, byte, string}}&lt;br /&gt;
{{hl1msg|byte|MenuID}}&lt;br /&gt;
{{hl1msg|short|KeysBitSum}}&lt;br /&gt;
{{hl1msg|char|Time?}}&lt;br /&gt;
{{hl1msg|byte|Multipart?}}&lt;br /&gt;
{{hl1msg|string|Name?}}&lt;br /&gt;
{{end-hl1msg}}&lt;br /&gt;
&lt;br /&gt;
= VoiceMask =&lt;br /&gt;
Used to tell a client who he can hear over the microphone.&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl1msg|VoiceMask|long, long}}&lt;br /&gt;
{{hl1msg|long|AudiblePlayersIndexBitSum}}&lt;br /&gt;
{{hl1msg|long|ServerBannedPlayersIndexBitSum}}&lt;br /&gt;
{{end-hl1msg}}&lt;br /&gt;
&lt;br /&gt;
= WeaponList =&lt;br /&gt;
Configures the [[HUD]] weapons list.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{qnotice|Fired on map initialization.}}&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{qnotice|SlotID starts from 0.}}&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Flags (from HLSDK):&lt;br /&gt;
 ITEM_FLAG_SELECTONEMPTY       1&lt;br /&gt;
 ITEM_FLAG_NOAUTORELOAD        2&lt;br /&gt;
 ITEM_FLAG_NOAUTOSWITCHEMPTY   4&lt;br /&gt;
 ITEM_FLAG_LIMITINWORLD        8&lt;br /&gt;
 ITEM_FLAG_EXHAUSTIBLE        16 // A player can totally exhaust their ammo supply and lose this weapon.&lt;br /&gt;
{{qnotice|See [[CS Weapons Information]] for more information.}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl1msg|WeaponList|string, byte, byte, byte, byte, byte, byte, byte, byte}}&lt;br /&gt;
{{hl1msg|string|WeaponName}}&lt;br /&gt;
{{hl1msg|byte|PrimaryAmmoID}}&lt;br /&gt;
{{hl1msg|byte|PrimaryAmmoMaxAmount}}&lt;br /&gt;
{{hl1msg|byte|SecondaryAmmoID}}&lt;br /&gt;
{{hl1msg|byte|SecondaryAmmoMaxAmount}}&lt;br /&gt;
{{hl1msg|byte|SlotID}}&lt;br /&gt;
{{hl1msg|byte|NumberInSlot}}&lt;br /&gt;
{{hl1msg|byte|WeaponID}}&lt;br /&gt;
{{hl1msg|byte|Flags}}&lt;br /&gt;
{{end-hl1msg}}&lt;br /&gt;
&lt;br /&gt;
= WeapPickup =&lt;br /&gt;
Temporarily draws correspoding weapon [[HUD]] icon in the middle of the right side of the screen.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{qnotice|Draw time is depend on the ''hud_drawhistory_time'' client CVar value.}}&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{qnotice|Is fired right before weapon is picked up (notice ''&amp;quot;before&amp;quot;'').}}&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{qnotice|See [[CS Weapons Information]] for more information.}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{begin-hl1msg|WeapPickup|byte}}&lt;br /&gt;
{{hl1msg|byte|WeaponID}}&lt;br /&gt;
{{end-hl1msg}}&lt;/div&gt;</summary>
		<author><name>VEN</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.alliedmods.net/index.php?title=CS_Weapons_Information&amp;diff=3849</id>
		<title>CS Weapons Information</title>
		<link rel="alternate" type="text/html" href="https://wiki.alliedmods.net/index.php?title=CS_Weapons_Information&amp;diff=3849"/>
		<updated>2007-01-22T20:10:14Z</updated>

		<summary type="html">&lt;p&gt;VEN: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Scripting (AMX Mod X)]]&lt;br /&gt;
&lt;br /&gt;
*CS weapons information has been gained using the [http://forums.alliedmods.net/showthread.php?t=47738 Weapon Info Dump] plugin.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Columns full names are: WeaponIndex, WeaponName, PlayerMaxSpeed, ClipMaxAmmo, BackPackMaxAmmo, AmmoIndex, AmmoName, WeaponCost, AmmoCost, WeaponPrimaryBuyName, WeaponSecondayBuyName.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*See [http://www.amxmodx.org/funcwiki.php?go=module&amp;amp;id=4#const_cswp CS Weapon Constants] for weapon indeces constants list.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*See [[CS WeaponList Message Dump]] for more information including WeaponSlotIDs and WeaponNumberInSlot.&amp;lt;br&amp;gt;&lt;br /&gt;
 ID   NAME                  SPEED   CLIP   AMMO   AID   ANAME             COST   ACOST   BUYNAME   BUYNAME2   &lt;br /&gt;
  1   weapon_p228             250     13     52     9   ammo_357sig        600      50   p228      228compact &lt;br /&gt;
      weapon_shield             0      0      0     0                     2200       0   shield               &lt;br /&gt;
  3   weapon_scout            260     10     90     2   ammo_762nato      2750      80   scout                &lt;br /&gt;
  4   weapon_hegrenade        250             1    12                      300       0   hegren               &lt;br /&gt;
  5   weapon_xm1014           240      7     32     5   ammo_buckshot     3000      65   xm1014    autoshotgun&lt;br /&gt;
  6   weapon_c4               250      0      1    14                        0       0                        &lt;br /&gt;
  7   weapon_mac10            250     30    100     6   ammo_45acp        1400      25   mac10                &lt;br /&gt;
  8   weapon_aug              240     30     90     4   ammo_556nato      3500      60   aug       bullpup    &lt;br /&gt;
  9   weapon_smokegrenade     250             1    13                      300       0   sgren                &lt;br /&gt;
 10   weapon_elite            250     30    120    10   ammo_9mm           800      20   elites               &lt;br /&gt;
 11   weapon_fiveseven        250     20    100     7   ammo_57mm          750      50   fn57      fiveseven  &lt;br /&gt;
 12   weapon_ump45            250     25    100     6   ammo_45acp        1700      25   ump45                &lt;br /&gt;
 13   weapon_sg550            210     30     90     4   ammo_556nato      4200      60   sg550     krieg550   &lt;br /&gt;
 14   weapon_galil            240     35     90     4   ammo_556nato      2000      60   galil     defender   &lt;br /&gt;
 15   weapon_famas            240     25     90     4   ammo_556nato      2250      60   famas     clarion    &lt;br /&gt;
 16   weapon_usp              250     12    100     6   ammo_45acp         500      25   usp       km45       &lt;br /&gt;
 17   weapon_glock18          250     20    120    10   ammo_9mm           400      20   glock     9x19mm     &lt;br /&gt;
 18   weapon_awp              210     10     30     1   ammo_338magnum    4750     125   awp       magnum     &lt;br /&gt;
 19   weapon_mp5navy          250     30    120    10   ammo_9mm          1500      20   mp5       smg        &lt;br /&gt;
 20   weapon_m249             220    100    200     3   ammo_556natobox   5750      60   m249                 &lt;br /&gt;
 21   weapon_m3               230      8     32     5   ammo_buckshot     1700      65   m3        12gauge    &lt;br /&gt;
 22   weapon_m4a1             230     30     90     4   ammo_556nato      3100      60   m4a1                 &lt;br /&gt;
 23   weapon_tmp              250     30    120    10   ammo_9mm          1250      20   tmp       mp         &lt;br /&gt;
 24   weapon_g3sg1            210     20     90     2   ammo_762nato      5000      80   g3sg1     d3au1      &lt;br /&gt;
 25   weapon_flashbang        250             2    11                      200       0   flash                &lt;br /&gt;
 26   weapon_deagle           250      7     35     8   ammo_50ae          650      40   deagle    nighthawk  &lt;br /&gt;
 27   weapon_sg552            235     30     90     4   ammo_556nato      3500      60   sg552     krieg552   &lt;br /&gt;
 28   weapon_ak47             221     30     90     2   ammo_762nato      2500      80   ak47      cv47       &lt;br /&gt;
 29   weapon_knife            250      0      0     0                        0       0                        &lt;br /&gt;
 30   weapon_p90              245     50    100     7   ammo_57mm         2350      50   p90       c90&lt;/div&gt;</summary>
		<author><name>VEN</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.alliedmods.net/index.php?title=CS_WeaponList_Message_Dump&amp;diff=3848</id>
		<title>CS WeaponList Message Dump</title>
		<link rel="alternate" type="text/html" href="https://wiki.alliedmods.net/index.php?title=CS_WeaponList_Message_Dump&amp;diff=3848"/>
		<updated>2007-01-22T20:01:23Z</updated>

		<summary type="html">&lt;p&gt;VEN: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{qnotice|See [[CS Weapons Information]] for more information.}}&amp;lt;br&amp;gt;&lt;br /&gt;
 1   STRN  -  WeaponName&lt;br /&gt;
 2   BYTE  -  PrimaryAmmoID&lt;br /&gt;
 3   BYTE  -  PrimaryAmmoMaxAmount&lt;br /&gt;
 4   BYTE  -  SecondaryAmmoID&lt;br /&gt;
 5   BYTE  -  SecondaryAmmoMaxAmount&lt;br /&gt;
 6   BYTE  -  SlotID (0...N)&lt;br /&gt;
 7   BYTE  -  NumberInSlot (1...N)&lt;br /&gt;
 8   BYTE  -  WeaponID&lt;br /&gt;
 9   BYTE  -  Flags:   ITEM_FLAG_SELECTONEMPTY       1    (1&amp;lt;&amp;lt;0)&lt;br /&gt;
                       ITEM_FLAG_NOAUTORELOAD        2    (1&amp;lt;&amp;lt;1)&lt;br /&gt;
                       ITEM_FLAG_NOAUTOSWITCHEMPTY   4    (1&amp;lt;&amp;lt;2)&lt;br /&gt;
                       ITEM_FLAG_LIMITINWORLD        8    (1&amp;lt;&amp;lt;3)&lt;br /&gt;
                       ITEM_FLAG_EXHAUSTIBLE         16   (1&amp;lt;&amp;lt;4)   // A player can totally exhaust their ammo supply and lose this weapon&lt;br /&gt;
&lt;br /&gt;
 1   STRN   weapon_p228&lt;br /&gt;
 2   BYTE   9&lt;br /&gt;
 3   BYTE   52&lt;br /&gt;
 4   BYTE   -1&lt;br /&gt;
 5   BYTE   -1&lt;br /&gt;
 6   BYTE   1&lt;br /&gt;
 7   BYTE   3&lt;br /&gt;
 8   BYTE   1&lt;br /&gt;
 9   BYTE   0&lt;br /&gt;
&lt;br /&gt;
 1   STRN   weapon_scout&lt;br /&gt;
 2   BYTE   2&lt;br /&gt;
 3   BYTE   90&lt;br /&gt;
 4   BYTE   -1&lt;br /&gt;
 5   BYTE   -1&lt;br /&gt;
 6   BYTE   0&lt;br /&gt;
 7   BYTE   9&lt;br /&gt;
 8   BYTE   3&lt;br /&gt;
 9   BYTE   0&lt;br /&gt;
&lt;br /&gt;
 1   STRN   weapon_hegrenade&lt;br /&gt;
 2   BYTE   12&lt;br /&gt;
 3   BYTE   1&lt;br /&gt;
 4   BYTE   -1&lt;br /&gt;
 5   BYTE   -1&lt;br /&gt;
 6   BYTE   3&lt;br /&gt;
 7   BYTE   1&lt;br /&gt;
 8   BYTE   4&lt;br /&gt;
 9   BYTE   24&lt;br /&gt;
&lt;br /&gt;
 1   STRN   weapon_xm1014&lt;br /&gt;
 2   BYTE   5&lt;br /&gt;
 3   BYTE   32&lt;br /&gt;
 4   BYTE   -1&lt;br /&gt;
 5   BYTE   -1&lt;br /&gt;
 6   BYTE   0&lt;br /&gt;
 7   BYTE   12&lt;br /&gt;
 8   BYTE   5&lt;br /&gt;
 9   BYTE   0&lt;br /&gt;
&lt;br /&gt;
 1   STRN   weapon_c4&lt;br /&gt;
 2   BYTE   14&lt;br /&gt;
 3   BYTE   1&lt;br /&gt;
 4   BYTE   -1&lt;br /&gt;
 5   BYTE   -1&lt;br /&gt;
 6   BYTE   4&lt;br /&gt;
 7   BYTE   3&lt;br /&gt;
 8   BYTE   6&lt;br /&gt;
 9   BYTE   24&lt;br /&gt;
&lt;br /&gt;
 1   STRN   weapon_mac10&lt;br /&gt;
 2   BYTE   6&lt;br /&gt;
 3   BYTE   100&lt;br /&gt;
 4   BYTE   -1&lt;br /&gt;
 5   BYTE   -1&lt;br /&gt;
 6   BYTE   0&lt;br /&gt;
 7   BYTE   13&lt;br /&gt;
 8   BYTE   7&lt;br /&gt;
 9   BYTE   0&lt;br /&gt;
&lt;br /&gt;
 1   STRN   weapon_aug&lt;br /&gt;
 2   BYTE   4&lt;br /&gt;
 3   BYTE   90&lt;br /&gt;
 4   BYTE   -1&lt;br /&gt;
 5   BYTE   -1&lt;br /&gt;
 6   BYTE   0&lt;br /&gt;
 7   BYTE   14&lt;br /&gt;
 8   BYTE   8&lt;br /&gt;
 9   BYTE   0&lt;br /&gt;
&lt;br /&gt;
 1   STRN   weapon_smokegrenade&lt;br /&gt;
 2   BYTE   13&lt;br /&gt;
 3   BYTE   1&lt;br /&gt;
 4   BYTE   -1&lt;br /&gt;
 5   BYTE   -1&lt;br /&gt;
 6   BYTE   3&lt;br /&gt;
 7   BYTE   3&lt;br /&gt;
 8   BYTE   9&lt;br /&gt;
 9   BYTE   24&lt;br /&gt;
&lt;br /&gt;
 1   STRN   weapon_elite&lt;br /&gt;
 2   BYTE   10&lt;br /&gt;
 3   BYTE   120&lt;br /&gt;
 4   BYTE   -1&lt;br /&gt;
 5   BYTE   -1&lt;br /&gt;
 6   BYTE   1&lt;br /&gt;
 7   BYTE   5&lt;br /&gt;
 8   BYTE   10&lt;br /&gt;
 9   BYTE   0&lt;br /&gt;
&lt;br /&gt;
 1   STRN   weapon_fiveseven&lt;br /&gt;
 2   BYTE   7&lt;br /&gt;
 3   BYTE   100&lt;br /&gt;
 4   BYTE   -1&lt;br /&gt;
 5   BYTE   -1&lt;br /&gt;
 6   BYTE   1&lt;br /&gt;
 7   BYTE   6&lt;br /&gt;
 8   BYTE   11&lt;br /&gt;
 9   BYTE   0&lt;br /&gt;
&lt;br /&gt;
 1   STRN   weapon_ump45&lt;br /&gt;
 2   BYTE   6&lt;br /&gt;
 3   BYTE   100&lt;br /&gt;
 4   BYTE   -1&lt;br /&gt;
 5   BYTE   -1&lt;br /&gt;
 6   BYTE   0&lt;br /&gt;
 7   BYTE   15&lt;br /&gt;
 8   BYTE   12&lt;br /&gt;
 9   BYTE   0&lt;br /&gt;
&lt;br /&gt;
 1   STRN   weapon_sg550&lt;br /&gt;
 2   BYTE   4&lt;br /&gt;
 3   BYTE   90&lt;br /&gt;
 4   BYTE   -1&lt;br /&gt;
 5   BYTE   -1&lt;br /&gt;
 6   BYTE   0&lt;br /&gt;
 7   BYTE   16&lt;br /&gt;
 8   BYTE   13&lt;br /&gt;
 9   BYTE   0&lt;br /&gt;
&lt;br /&gt;
 1   STRN   weapon_galil&lt;br /&gt;
 2   BYTE   4&lt;br /&gt;
 3   BYTE   90&lt;br /&gt;
 4   BYTE   -1&lt;br /&gt;
 5   BYTE   -1&lt;br /&gt;
 6   BYTE   0&lt;br /&gt;
 7   BYTE   17&lt;br /&gt;
 8   BYTE   14&lt;br /&gt;
 9   BYTE   0&lt;br /&gt;
&lt;br /&gt;
 1   STRN   weapon_famas&lt;br /&gt;
 2   BYTE   4&lt;br /&gt;
 3   BYTE   90&lt;br /&gt;
 4   BYTE   -1&lt;br /&gt;
 5   BYTE   -1&lt;br /&gt;
 6   BYTE   0&lt;br /&gt;
 7   BYTE   18&lt;br /&gt;
 8   BYTE   15&lt;br /&gt;
 9   BYTE   0&lt;br /&gt;
&lt;br /&gt;
 1   STRN   weapon_usp&lt;br /&gt;
 2   BYTE   6&lt;br /&gt;
 3   BYTE   100&lt;br /&gt;
 4   BYTE   -1&lt;br /&gt;
 5   BYTE   -1&lt;br /&gt;
 6   BYTE   1&lt;br /&gt;
 7   BYTE   4&lt;br /&gt;
 8   BYTE   16&lt;br /&gt;
 9   BYTE   0&lt;br /&gt;
&lt;br /&gt;
 1   STRN   weapon_glock18&lt;br /&gt;
 2   BYTE   10&lt;br /&gt;
 3   BYTE   120&lt;br /&gt;
 4   BYTE   -1&lt;br /&gt;
 5   BYTE   -1&lt;br /&gt;
 6   BYTE   1&lt;br /&gt;
 7   BYTE   2&lt;br /&gt;
 8   BYTE   17&lt;br /&gt;
 9   BYTE   0&lt;br /&gt;
&lt;br /&gt;
 1   STRN   weapon_awp&lt;br /&gt;
 2   BYTE   1&lt;br /&gt;
 3   BYTE   30&lt;br /&gt;
 4   BYTE   -1&lt;br /&gt;
 5   BYTE   -1&lt;br /&gt;
 6   BYTE   0&lt;br /&gt;
 7   BYTE   2&lt;br /&gt;
 8   BYTE   18&lt;br /&gt;
 9   BYTE   0&lt;br /&gt;
&lt;br /&gt;
 1   STRN   weapon_mp5navy&lt;br /&gt;
 2   BYTE   10&lt;br /&gt;
 3   BYTE   120&lt;br /&gt;
 4   BYTE   -1&lt;br /&gt;
 5   BYTE   -1&lt;br /&gt;
 6   BYTE   0&lt;br /&gt;
 7   BYTE   7&lt;br /&gt;
 8   BYTE   19&lt;br /&gt;
 9   BYTE   0&lt;br /&gt;
&lt;br /&gt;
 1   STRN   weapon_m249&lt;br /&gt;
 2   BYTE   3&lt;br /&gt;
 3   BYTE   200&lt;br /&gt;
 4   BYTE   -1&lt;br /&gt;
 5   BYTE   -1&lt;br /&gt;
 6   BYTE   0&lt;br /&gt;
 7   BYTE   4&lt;br /&gt;
 8   BYTE   20&lt;br /&gt;
 9   BYTE   0&lt;br /&gt;
&lt;br /&gt;
 1   STRN   weapon_m3&lt;br /&gt;
 2   BYTE   5&lt;br /&gt;
 3   BYTE   32&lt;br /&gt;
 4   BYTE   -1&lt;br /&gt;
 5   BYTE   -1&lt;br /&gt;
 6   BYTE   0&lt;br /&gt;
 7   BYTE   5&lt;br /&gt;
 8   BYTE   21&lt;br /&gt;
 9   BYTE   0&lt;br /&gt;
&lt;br /&gt;
 1   STRN   weapon_m4a1&lt;br /&gt;
 2   BYTE   4&lt;br /&gt;
 3   BYTE   90&lt;br /&gt;
 4   BYTE   -1&lt;br /&gt;
 5   BYTE   -1&lt;br /&gt;
 6   BYTE   0&lt;br /&gt;
 7   BYTE   6&lt;br /&gt;
 8   BYTE   22&lt;br /&gt;
 9   BYTE   0&lt;br /&gt;
&lt;br /&gt;
 1   STRN   weapon_tmp&lt;br /&gt;
 2   BYTE   10&lt;br /&gt;
 3   BYTE   120&lt;br /&gt;
 4   BYTE   -1&lt;br /&gt;
 5   BYTE   -1&lt;br /&gt;
 6   BYTE   0&lt;br /&gt;
 7   BYTE   11&lt;br /&gt;
 8   BYTE   23&lt;br /&gt;
 9   BYTE   0&lt;br /&gt;
&lt;br /&gt;
 1   STRN   weapon_g3sg1&lt;br /&gt;
 2   BYTE   2&lt;br /&gt;
 3   BYTE   90&lt;br /&gt;
 4   BYTE   -1&lt;br /&gt;
 5   BYTE   -1&lt;br /&gt;
 6   BYTE   0&lt;br /&gt;
 7   BYTE   3&lt;br /&gt;
 8   BYTE   24&lt;br /&gt;
 9   BYTE   0&lt;br /&gt;
&lt;br /&gt;
 1   STRN   weapon_flashbang&lt;br /&gt;
 2   BYTE   11&lt;br /&gt;
 3   BYTE   2&lt;br /&gt;
 4   BYTE   -1&lt;br /&gt;
 5   BYTE   -1&lt;br /&gt;
 6   BYTE   3&lt;br /&gt;
 7   BYTE   2&lt;br /&gt;
 8   BYTE   25&lt;br /&gt;
 9   BYTE   24&lt;br /&gt;
&lt;br /&gt;
 1   STRN   weapon_deagle&lt;br /&gt;
 2   BYTE   8&lt;br /&gt;
 3   BYTE   35&lt;br /&gt;
 4   BYTE   -1&lt;br /&gt;
 5   BYTE   -1&lt;br /&gt;
 6   BYTE   1&lt;br /&gt;
 7   BYTE   1&lt;br /&gt;
 8   BYTE   26&lt;br /&gt;
 9   BYTE   0&lt;br /&gt;
&lt;br /&gt;
 1   STRN   weapon_sg552&lt;br /&gt;
 2   BYTE   4&lt;br /&gt;
 3   BYTE   90&lt;br /&gt;
 4   BYTE   -1&lt;br /&gt;
 5   BYTE   -1&lt;br /&gt;
 6   BYTE   0&lt;br /&gt;
 7   BYTE   10&lt;br /&gt;
 8   BYTE   27&lt;br /&gt;
 9   BYTE   0&lt;br /&gt;
&lt;br /&gt;
 1   STRN   weapon_ak47&lt;br /&gt;
 2   BYTE   2&lt;br /&gt;
 3   BYTE   90&lt;br /&gt;
 4   BYTE   -1&lt;br /&gt;
 5   BYTE   -1&lt;br /&gt;
 6   BYTE   0&lt;br /&gt;
 7   BYTE   1&lt;br /&gt;
 8   BYTE   28&lt;br /&gt;
 9   BYTE   0&lt;br /&gt;
&lt;br /&gt;
 1   STRN   weapon_knife&lt;br /&gt;
 2   BYTE   -1&lt;br /&gt;
 3   BYTE   -1&lt;br /&gt;
 4   BYTE   -1&lt;br /&gt;
 5   BYTE   -1&lt;br /&gt;
 6   BYTE   2&lt;br /&gt;
 7   BYTE   1&lt;br /&gt;
 8   BYTE   29&lt;br /&gt;
 9   BYTE   0&lt;br /&gt;
&lt;br /&gt;
 1   STRN   weapon_p90&lt;br /&gt;
 2   BYTE   7&lt;br /&gt;
 3   BYTE   100&lt;br /&gt;
 4   BYTE   -1&lt;br /&gt;
 5   BYTE   -1&lt;br /&gt;
 6   BYTE   0&lt;br /&gt;
 7   BYTE   8&lt;br /&gt;
 8   BYTE   30&lt;br /&gt;
 9   BYTE   0&lt;/div&gt;</summary>
		<author><name>VEN</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.alliedmods.net/index.php?title=Talk:Alternative_Language&amp;diff=3847</id>
		<title>Talk:Alternative Language</title>
		<link rel="alternate" type="text/html" href="https://wiki.alliedmods.net/index.php?title=Talk:Alternative_Language&amp;diff=3847"/>
		<updated>2007-01-22T19:56:50Z</updated>

		<summary type="html">&lt;p&gt;VEN: don't know why internal link didn't worked&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;I want to translate into Norwegian, how can I add the language to the LanguageSwitch template?&lt;br /&gt;
:The language template needs to be redone, it doesn't work when you use it on a foreign page, only on English. --[[User:CyberMind|cybermind]] 12:10, 22 January 2007 (CST)&lt;br /&gt;
::AMWiki needs to have an &amp;quot;Ru&amp;quot; namespace added (and perhaps an &amp;quot;No&amp;quot; namespace) in order for Template:LangaugeSwitch to work as desired. [http://meta.wikimedia.org/wiki/Help:Custom_namespaces Here] are MediaWiki instructions for how to add it. Also all the old Talk:Ru:blah pages will have to be moved over to Ru_talk if you decide to use that for the Ru namespace talk pages. --[[User:CyberMind|cybermind]] 12:15, 22 January 2007 (CST)&lt;br /&gt;
:::I've renamed all the Ru: pages so that when the namespace is added, the pages will not become inaccessible (I will move them to the new namespace once it is created). I also added a new template, LanguageHelpSwitch which will be used where the namespace for the English version of the page is Help: but the Russian is just Ru: (like Help:Editing vs Ru:Editing). --[[User:CyberMind|cybermind]] 12:27, 22 January 2007 (CST)&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
[http://wiki.amxmodx.org/index.php/Category:Ru:Scripting_%28AMX_Mod_X%29 Category:Ru:Scripting (AMX Mod X)] contain broken links. What is the best to do here? Should i create Category:Ru Scripting (AMX Mod X) and relink related articles here?&lt;/div&gt;</summary>
		<author><name>VEN</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.alliedmods.net/index.php?title=Talk:Alternative_Language&amp;diff=3846</id>
		<title>Talk:Alternative Language</title>
		<link rel="alternate" type="text/html" href="https://wiki.alliedmods.net/index.php?title=Talk:Alternative_Language&amp;diff=3846"/>
		<updated>2007-01-22T19:51:38Z</updated>

		<summary type="html">&lt;p&gt;VEN: about broken links in Category:Ru:Scripting&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;I want to translate into Norwegian, how can I add the language to the LanguageSwitch template?&lt;br /&gt;
:The language template needs to be redone, it doesn't work when you use it on a foreign page, only on English. --[[User:CyberMind|cybermind]] 12:10, 22 January 2007 (CST)&lt;br /&gt;
::AMWiki needs to have an &amp;quot;Ru&amp;quot; namespace added (and perhaps an &amp;quot;No&amp;quot; namespace) in order for Template:LangaugeSwitch to work as desired. [http://meta.wikimedia.org/wiki/Help:Custom_namespaces Here] are MediaWiki instructions for how to add it. Also all the old Talk:Ru:blah pages will have to be moved over to Ru_talk if you decide to use that for the Ru namespace talk pages. --[[User:CyberMind|cybermind]] 12:15, 22 January 2007 (CST)&lt;br /&gt;
:::I've renamed all the Ru: pages so that when the namespace is added, the pages will not become inaccessible (I will move them to the new namespace once it is created). I also added a new template, LanguageHelpSwitch which will be used where the namespace for the English version of the page is Help: but the Russian is just Ru: (like Help:Editing vs Ru:Editing). --[[User:CyberMind|cybermind]] 12:27, 22 January 2007 (CST)&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
[[Category:Ru:Scripting_%28AMX_Mod_X%29]] contain broken links. What is the best to do here?&lt;/div&gt;</summary>
		<author><name>VEN</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.alliedmods.net/index.php?title=Talk:Ru_Alternative_Language&amp;diff=3789</id>
		<title>Talk:Ru Alternative Language</title>
		<link rel="alternate" type="text/html" href="https://wiki.alliedmods.net/index.php?title=Talk:Ru_Alternative_Language&amp;diff=3789"/>
		<updated>2007-01-19T11:53:30Z</updated>

		<summary type="html">&lt;p&gt;VEN: indentation&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[User:Slogic|Slogic]]: Если вставить шаблон на русской странце, то шаблон не понимает, что мы создали его на русской странице и не правильно создает ссылки: должен на английскую версию, а создает опять на русскую.&lt;br /&gt;
:Да, замечал, есть такая вещь. Выход: помещать ссылку на оригинал, не используя шаблон, например:&lt;br /&gt;
:* [[Something|Просмотреть оригинал]]&lt;br /&gt;
:--[[User:VEN|VEN]] 05:52, 19 January 2007 (CST)&lt;/div&gt;</summary>
		<author><name>VEN</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.alliedmods.net/index.php?title=Talk:Ru_Alternative_Language&amp;diff=3788</id>
		<title>Talk:Ru Alternative Language</title>
		<link rel="alternate" type="text/html" href="https://wiki.alliedmods.net/index.php?title=Talk:Ru_Alternative_Language&amp;diff=3788"/>
		<updated>2007-01-19T11:52:02Z</updated>

		<summary type="html">&lt;p&gt;VEN: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[User:Slogic|Slogic]]: Если вставить шаблон на русской странце, то шаблон не понимает, что мы создали его на русской странице и не правильно создает ссылки: должен на английскую версию, а создает опять на русскую.&lt;br /&gt;
:Да, замечал, есть такая вещь. Выход: помещать ссылку на оригинал, не используя шаблон, например:&lt;br /&gt;
:* [[Something|Просмотреть оригинал]]&lt;br /&gt;
--[[User:VEN|VEN]] 05:52, 19 January 2007 (CST)&lt;/div&gt;</summary>
		<author><name>VEN</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.alliedmods.net/index.php?title=Optimizing_Plugins_(AMX_Mod_X_Scripting)&amp;diff=3766</id>
		<title>Optimizing Plugins (AMX Mod X Scripting)</title>
		<link rel="alternate" type="text/html" href="https://wiki.alliedmods.net/index.php?title=Optimizing_Plugins_(AMX_Mod_X_Scripting)&amp;diff=3766"/>
		<updated>2007-01-18T08:59:41Z</updated>

		<summary type="html">&lt;p&gt;VEN: Reverted edit of Qqqqqqq, changed back to last version by CyberMind&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
[[Admin-Mod]] and [[AMX Mod X]] became very popular because of their easy to use scripting language.  However, the words &amp;quot;scripting language&amp;quot; come with a lot of loaded preconceptions.  Most people assume that because it's scripted:&lt;br /&gt;
*You can't possibly make it any faster&lt;br /&gt;
*It's pre-compiled, so it's already quite fast&lt;br /&gt;
*Details don't matter, as it's only &amp;quot;scripting&amp;quot; anyway&lt;br /&gt;
&lt;br /&gt;
Especially, with [[Pawn]] (formerly Small), none of these are true.  The compiler, in fact, is very poor at optimizing, and you can '''greatly''' increase the speed and efficiency of your plugins by keeping a few rules in mind.  Remember - it's more important to minimize instructions than it is to minimize lines of code.&lt;br /&gt;
&lt;br /&gt;
===Terms===&lt;br /&gt;
To read this document, you will need to understand a few concepts beforehand:&lt;br /&gt;
*&amp;lt;tt&amp;gt;BRANCHING&amp;lt;/tt&amp;gt; - When the processor takes a different path of code.  For example, to call a function or to use an if statement, the processor will &amp;quot;branch&amp;quot;.  Modern processors attempt to predict pathways with &amp;quot;branch prediction&amp;quot;, but it's best to avoid branching a lot if possible.&lt;br /&gt;
*&amp;lt;tt&amp;gt;STACK ALLOCATION&amp;lt;/tt&amp;gt; - In Pawn, all local data is stored on the stack, a big chunk of continuous memory.  Whenever you create a variable on the stack, it is automatically written with zeroes.&lt;br /&gt;
*&amp;lt;tt&amp;gt;HEAP ALLOCATION&amp;lt;/tt&amp;gt; - In Pawn, temporary data that needs to be referenced by a native is stored on the heap, another area of contiguous, but less restrictive memory.&lt;br /&gt;
*&amp;lt;tt&amp;gt;DATA SECTION&amp;lt;/tt&amp;gt; - This is an area of memory built into your .amxx file.  In fact, it &amp;quot;becomes&amp;quot; the heap at load time.  All your strings and arrays are hardcoded into this area.&lt;br /&gt;
*&amp;lt;tt&amp;gt;EXPENSIVENESS&amp;lt;/tt&amp;gt; - To be &amp;quot;expensive&amp;quot; in computer science means an operation requires a lot of CPU processing.  It usually does not refer to memory size, only to processing cycles and time.  Addition is inexpensive, floating power operations are expensive.  However, both are inexpensive in comparison to writing a file.  An inexpensive operation can also be called &amp;quot;cheap&amp;quot;.&lt;br /&gt;
*&amp;lt;tt&amp;gt;BIG-OH NOTATION&amp;lt;/tt&amp;gt; - O(*) notation refers to the expensiveness of an algorithm.  If something is O(n), it occurs in linear time -- meaning that for N items, it will complete relative to N.  O(N^2) means with N items, it will complete relative to N^2.  O(1) means &amp;quot;constant time&amp;quot; - no matter what N is, it will run in the same amount of time.&lt;br /&gt;
&lt;br /&gt;
==Compiler Optimizations==&lt;br /&gt;
These optimizations have to do with changing how your code is compiled.  While the syntax may remain the same, you are not only increasing compile time, but increasing your plugin's efficiency and speed at run time.&lt;br /&gt;
&lt;br /&gt;
===Always Save Results===&lt;br /&gt;
Observe the example code snippet below:&lt;br /&gt;
&amp;lt;pawn&amp;gt;if (get_user_team(player) == TEAM_T)&lt;br /&gt;
{&lt;br /&gt;
    //...code&lt;br /&gt;
} else if (get_user_team(player) == TEAM_CT) {&lt;br /&gt;
    //...code&lt;br /&gt;
} else if (get_user_team(player) == TEAM_SPECTATOR) {&lt;br /&gt;
    //...code&lt;br /&gt;
}&amp;lt;/pawn&amp;gt;&lt;br /&gt;
This is a mild example of &amp;quot;cache your results&amp;quot;.  When the compiler generates assembly for this code, it will (in pseudo code) generate:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  CALL get_user_team&lt;br /&gt;
  COMPARE+BRANCH&lt;br /&gt;
  CALL get_user_team&lt;br /&gt;
  COMPARE+BRANCH&lt;br /&gt;
  CALL get_user_team&lt;br /&gt;
  COMPARE+BRANCH&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Notice the problem?  We have called &amp;lt;tt&amp;gt;get_user_team&amp;lt;/tt&amp;gt; an extra two times than necessary.  The result doesn't change, so we can save it.  Observe:&lt;br /&gt;
&amp;lt;pawn&amp;gt;new team = get_user_team(player)&lt;br /&gt;
if (team == TEAM_T)&lt;br /&gt;
{&lt;br /&gt;
    //...code&lt;br /&gt;
} else if (team == TEAM_CT) {&lt;br /&gt;
    //...code&lt;br /&gt;
} else if (team == TEAM_SPECTATOR) {&lt;br /&gt;
    //...code&lt;br /&gt;
}&amp;lt;/pawn&amp;gt;&lt;br /&gt;
Now, the compiler will only generate this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  CALL get_user_team&lt;br /&gt;
  COMPARE+BRANCH&lt;br /&gt;
  COMPARE+BRANCH&lt;br /&gt;
  COMPARE+BRANCH&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
If &amp;lt;tt&amp;gt;get_user_team&amp;lt;/tt&amp;gt; were an expensive operation (it's relatively cheap), we would have recalculated the entire result each branch of the &amp;lt;tt&amp;gt;if&amp;lt;/tt&amp;gt; case.&lt;br /&gt;
&lt;br /&gt;
===Switch instead of If===&lt;br /&gt;
If you can, you should use &amp;lt;tt&amp;gt;switch&amp;lt;/tt&amp;gt; cases instead of &amp;lt;tt&amp;gt;if&amp;lt;/tt&amp;gt;.  This is because for an if statement, the compiler must branch to each consecutive &amp;lt;tt&amp;gt;if&amp;lt;/tt&amp;gt; case.  Using the example from above, observe the switch version:&lt;br /&gt;
&amp;lt;pawn&amp;gt;new team = get_user_team(player)&lt;br /&gt;
switch (team)&lt;br /&gt;
{&lt;br /&gt;
  case TEAM_T:&lt;br /&gt;
     //code...&lt;br /&gt;
  case TEAM_CT:&lt;br /&gt;
     //code...&lt;br /&gt;
  case TEAM_SPECTATOR:&lt;br /&gt;
     //code...&lt;br /&gt;
}&amp;lt;/pawn&amp;gt;&lt;br /&gt;
This will generate what's called a &amp;quot;case table&amp;quot;.  Rather than worm through displaced &amp;lt;tt&amp;gt;if&amp;lt;/tt&amp;gt; tests, the compiler generates a table of possible values, which the virtual machine knows to browse through:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  CALL get_user_team&lt;br /&gt;
  COMPARE&lt;br /&gt;
  COMPARE&lt;br /&gt;
  COMPARE&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Don't Re-index Arrays===&lt;br /&gt;
A common practice in Small is to &amp;quot;save space&amp;quot; by re-indexing arrays.  There are a few myths behind this, such as saving memory, assuming the compiler does it for you, or readability.  Fact: none of these are true.  Observe the code below:&lt;br /&gt;
&amp;lt;pawn&amp;gt;new players[32], num, team&lt;br /&gt;
get_players(players, num)&lt;br /&gt;
for (new i=0; i&amp;lt;num; i++)&lt;br /&gt;
{&lt;br /&gt;
   if (!is_user_connected(players[i]))&lt;br /&gt;
      continue;&lt;br /&gt;
   team = get_user_team(players[i])&lt;br /&gt;
   set_user_frags(players[i], 0)&lt;br /&gt;
}&amp;lt;/pawn&amp;gt;&lt;br /&gt;
For this, the compiler generates code similar to:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
:LOOP_BEGIN&lt;br /&gt;
   LOAD i&lt;br /&gt;
   LOAD players&lt;br /&gt;
   CALC&lt;br /&gt;
   LOAD players[i]&lt;br /&gt;
   CALL is_user_connected&lt;br /&gt;
   LOAD i&lt;br /&gt;
   LOAD players&lt;br /&gt;
   CALC&lt;br /&gt;
   LOAD players[i]&lt;br /&gt;
   CALL get_user_team&lt;br /&gt;
   LOAD i&lt;br /&gt;
   LOAD players&lt;br /&gt;
   CALC&lt;br /&gt;
   LOAD players[i]&lt;br /&gt;
   CALL set_user_frags&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
See what happened?  The compiler does not cache array indexing.  Because we've used &amp;lt;tt&amp;gt;players[i]&amp;lt;/tt&amp;gt; each time, every instance generates 4-6 (or more) instructions which load &amp;lt;tt&amp;gt;i&amp;lt;/tt&amp;gt;, the address of &amp;lt;tt&amp;gt;players&amp;lt;/tt&amp;gt;, computes the final location, and then grabs the data out of memory.  It is much faster to do:&lt;br /&gt;
&amp;lt;pawn&amp;gt;new player&lt;br /&gt;
for (new i=0; i&amp;lt;num; i++)&lt;br /&gt;
{&lt;br /&gt;
   player = players[i]&lt;br /&gt;
   if (!is_user_connected(player))&lt;br /&gt;
      continue;&lt;br /&gt;
   team = get_user_team(player)&lt;br /&gt;
}&amp;lt;/pawn&amp;gt;&lt;br /&gt;
Not only is this more readable, but look at how much cruft we've shaved off the compiler's generated code:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
:LOOP_BEGIN&lt;br /&gt;
   LOAD i&lt;br /&gt;
   LOAD players&lt;br /&gt;
   CALC&lt;br /&gt;
   LOAD players[i]&lt;br /&gt;
   STORE player&lt;br /&gt;
   CALL is_user_connected&lt;br /&gt;
   LOAD player&lt;br /&gt;
   CALL get_user_team&lt;br /&gt;
   LOAD player&lt;br /&gt;
   CALL set_user_frags&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
In a large loop you can drastically reduce codesize in this manner.&lt;br /&gt;
&lt;br /&gt;
===Global vs Local and Variables in Loops===&lt;br /&gt;
It is important to realize that every variable in [[Pawn]] is automatically zeroed.  For global variables, they are static and permanent, thus they are zeroed when your plugin is loaded.  Variables in functions, however, must be zeroed dynamically.  This is a slow and tedious operation, and you should not only avoid relying on it when necessary, but you should keep that fact in mind when using arrays.&lt;br /&gt;
&lt;br /&gt;
[[Arrays]] in [[Pawn]] are &amp;quot;cells&amp;quot; of data.  Each cell is four or eight bytes, depending on whether your processor is 32bit or 64bit.  To create an array of 4096 cells, for example:&lt;br /&gt;
&amp;lt;pawn&amp;gt;new array[4096]&amp;lt;/pawn&amp;gt;&lt;br /&gt;
The compiler generates code to manually zero every single one of the 16,384 bytes in that location.  Normally, this isn't too bad -- but it can be absolutely deadly in a function which is called quite often.  For example, &amp;lt;tt&amp;gt;server_frame&amp;lt;/tt&amp;gt; is called on every [[server tick]] in [[AMX Mod X]].  To declare an array of that size in &amp;lt;tt&amp;gt;server_frame&amp;lt;/tt&amp;gt; is highly unnecessary.  Instead, you can take advantage of the fact that not only are globals free of charge, but &amp;lt;tt&amp;gt;server_frame&amp;lt;/tt&amp;gt; does not need to be re-entrant.  That is, you will never call &amp;lt;tt&amp;gt;server_frame&amp;lt;/tt&amp;gt; inside of &amp;lt;tt&amp;gt;server_frame&amp;lt;/tt&amp;gt;, so making the variable global will not bring up the problem of one instance of the function overwriting data from another instance of the same function.  Observe:&lt;br /&gt;
&amp;lt;pawn&amp;gt;new g_serverframe_array[4096]&lt;br /&gt;
public server_frame()&lt;br /&gt;
{&lt;br /&gt;
  //...code that uses g_serverframe_array&lt;br /&gt;
}&amp;lt;/pawn&amp;gt;&lt;br /&gt;
This will execute conseridably faster.  You can do this with smaller arrays too.&lt;br /&gt;
&lt;br /&gt;
Likewise, it is equally important to avoid declaring arrays inside of loops.  Consider the following block of code:&lt;br /&gt;
&amp;lt;pawn&amp;gt;for (new i=0; i&amp;lt;num; i++)&lt;br /&gt;
{&lt;br /&gt;
   new message[255], name[32], player&lt;br /&gt;
   player = players[i]&lt;br /&gt;
   get_user_name(player, name, 31)&lt;br /&gt;
   format(message, 254, &amp;quot;Hello, %s&amp;quot;, name)&lt;br /&gt;
}&amp;lt;/pawn&amp;gt;&lt;br /&gt;
If there are 32 players, this loop will actually resize and zero out over 1K of memory thirty two times in a row.  Not good!  However, on the other hand, it's nice that the message is zeroed out for us each time.  &amp;lt;tt&amp;gt;Tip:&amp;lt;/tt&amp;gt; you often only need to zero out the first character of a string.  This will make the entire string empty.  The code below is much more efficient:&lt;br /&gt;
&amp;lt;pawn&amp;gt;new message[255], name[32], player&lt;br /&gt;
for (new i=0; i&amp;lt;num; i++)&lt;br /&gt;
{&lt;br /&gt;
   player = players[i]&lt;br /&gt;
   name[0] = '^0'&lt;br /&gt;
   message[0] = '^0'&lt;br /&gt;
   get_user_name(player, name, 31)&lt;br /&gt;
   format(message, 254, &amp;quot;Hello, %s&amp;quot;, name)&lt;br /&gt;
}&amp;lt;/pawn&amp;gt;&lt;br /&gt;
This has the effect of safely making the string empty beforehand, as well as largely reducing a lot of run-time overhead.&lt;br /&gt;
&lt;br /&gt;
===Static vs Global===&lt;br /&gt;
An alternative to global variables is static variables, which are internally the same but easier to work with for programming.&lt;br /&gt;
&lt;br /&gt;
A variable declared with the keyword &amp;quot;static&amp;quot; instead of &amp;quot;new&amp;quot; operates in the same way a global does (it is created only once) but the variable is local to the function; this means the code is much easier to read, while drastically improving speed just like a global variable.  Example:&lt;br /&gt;
&amp;lt;pawn&amp;gt;stock SomeBigFunction()&lt;br /&gt;
{&lt;br /&gt;
   static gaben[255];&lt;br /&gt;
   format(gaben, &amp;quot;%L&amp;quot;, LANG_SERVER, &amp;quot;STUFF&amp;quot;);&lt;br /&gt;
}&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This has the same effect as declaring &amp;lt;tt&amp;gt;gaben&amp;lt;/tt&amp;gt; as global, except only &amp;lt;tt&amp;gt;SomeBigFunction&amp;lt;/tt&amp;gt; can use it.  &lt;br /&gt;
&lt;br /&gt;
{{qnotice|Be careful of re-entrancy!}}&lt;br /&gt;
When a variable is static, it has the same re-entrancy problems of a global variable.  That means, if your function might be called recursively, or twice in the same stack frame, you should not use static variables.  This is most often the case for API provided to other plugins or helper functions.  Triggered events are usually never called twice on the same execution chain.&lt;br /&gt;
&lt;br /&gt;
===Constant variables===&lt;br /&gt;
You can declare a variable &amp;quot;constant&amp;quot; by adding the &amp;quot;const&amp;quot; keyword before the variable name:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pawn&amp;gt;new const AMX_GABEN[] = &amp;quot;amx_gaben&amp;quot;&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
What this does is prevents the variable from being changed; essentially, you've locked the variable to a certain value. In this way, a constant can offer a type safe method of simplifying code, unlike a define, which is not type safe.&lt;br /&gt;
&lt;br /&gt;
In addition, constant variables are often optimized out, resulting in quicker and smaller code.&lt;br /&gt;
&lt;br /&gt;
===For Loop Comparisons===&lt;br /&gt;
A common mistake is to write code like this:&lt;br /&gt;
&amp;lt;pawn&amp;gt;new string[256] = &amp;quot;something long&amp;quot;&lt;br /&gt;
for (new i=0; i&amp;lt;strlen(string); i++)&lt;br /&gt;
   //...code&amp;lt;/pawn&amp;gt;&lt;br /&gt;
This plays off a similar principle from before: cache results.  The compiler will actually recompute your string length on each iteration of the loop.  This will have even worse effects if your string changes mid-loop.  A more sensible method is:&lt;br /&gt;
&amp;lt;pawn&amp;gt;new string[256] = &amp;quot;something long&amp;quot;&lt;br /&gt;
new len = strlen(string)&lt;br /&gt;
for (new i=0; i&amp;lt;len; i++)&lt;br /&gt;
   //...code&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Tips and Tricks==&lt;br /&gt;
===Lookup Tables===&lt;br /&gt;
Precompute what can be precomputed.  For example, say you have a mapping of weapon indices to names:&lt;br /&gt;
&amp;lt;pawn&amp;gt;if (weapon == CSW_AK47)&lt;br /&gt;
   copy(name, len, &amp;quot;weapon_ak47&amp;quot;)&amp;lt;/pawn&amp;gt;&lt;br /&gt;
Ignoring the fact that we have &amp;lt;tt&amp;gt;get_weapon_name&amp;lt;/tt&amp;gt; in [[AMX Mod X]], this is inefficient.  We could precompute this result in a table:&lt;br /&gt;
&amp;lt;pawn&amp;gt;new g_WeaponNamesTable[TOTAL_WEAPONS][] = {&lt;br /&gt;
   //..0 to CSW_AK47-1&lt;br /&gt;
   &amp;quot;weapon_ak47&amp;quot;,&lt;br /&gt;
   //..CSW_AK47+1 to TOTAL_WEAPONS-1&lt;br /&gt;
};&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Perfect Hashing===&lt;br /&gt;
:TODO: explain this&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Local Strings===&lt;br /&gt;
The [[Pawn]] compiler does not optimize the DATA section, which stores all hardcoded strings and global arrays.  If you reference the same hardcoded string 500 times in your plugin, it will appear 500 different times.  If this seems bad enough, it actually does this with all strings.  For example, the empty string (&amp;quot;&amp;quot;) appears everywhere in the include files, usually used as a default parameter to many natives.  This too is copied into the data section for each unique reference.  &lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&amp;lt;pawn&amp;gt;set_cvar_string(&amp;quot;amx_gaben&amp;quot;, get_cvar_string(&amp;quot;amx_gaben&amp;quot;) + 1)&amp;lt;/pawn&amp;gt;&lt;br /&gt;
This will create two copies of &amp;quot;amx_gaben&amp;quot; in the DATA section.  While this doesn't really hurt, it does increase the size of your plugin.  &lt;br /&gt;
&lt;br /&gt;
Similarly, this has the same problem:&lt;br /&gt;
&amp;lt;pawn&amp;gt;#define AMX_GABEN &amp;quot;amx_gaben&amp;quot;&lt;br /&gt;
set_cvar_string(AMX_GABEN, get_cvar_string(AMX_GABEN) + 1)&amp;lt;/pawn&amp;gt;&lt;br /&gt;
The only way to avoid this mess is to use global variables.  As stated earlier, they're basically free storage.&lt;br /&gt;
&amp;lt;pawn&amp;gt;new AMX_GABEN[] = &amp;quot;amx_gaben&amp;quot;&lt;br /&gt;
set_cvar_string(AMX_GABEN, get_cvar_string(AMX_GABEN) + 1)&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Again, while not necessary, this will reduce your plugin's size in memory and on disk.  If you're already using defines, you can make this switch easily.&lt;br /&gt;
&lt;br /&gt;
In order to prevent this from changing, you may want to declare it constant:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pawn&amp;gt;new const AMX_GABEN[] = &amp;quot;amx_gaben&amp;quot;&lt;br /&gt;
set_cvar_string(AMX_GABEN, get_cvar_string(AMX_GABEN) + 1)&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now it is a perfectly safe method of storage.&lt;br /&gt;
&lt;br /&gt;
==Faster Natives==&lt;br /&gt;
AMX Mod X replaces many of the old AMX Mod natives with faster versions.  Read below to discover them.&lt;br /&gt;
&lt;br /&gt;
===Cvar Pointers===&lt;br /&gt;
As of AMX Mod X 1.70, you can cache &amp;quot;cvar pointers&amp;quot;.  These are direct accesses to cvars, rather than named access.  This is a critical optimization which is dozens of times faster.  For example:&lt;br /&gt;
&amp;lt;pawn&amp;gt;new g_enabled = register_cvar(&amp;quot;csdm_enabled&amp;quot;, &amp;quot;1&amp;quot;)&lt;br /&gt;
//OR&lt;br /&gt;
new g_enabled = get_cvar_pointer(&amp;quot;csdm_enabled&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
stock SetCSDM(num)&lt;br /&gt;
   set_pcvar_num(g_enabled, num)&lt;br /&gt;
&lt;br /&gt;
stock GetCSDM()&lt;br /&gt;
   return get_pcvar_num(g_enabled)&lt;br /&gt;
&amp;lt;/pawn&amp;gt;&lt;br /&gt;
All of the cvar* functions (except for set_cvar_string) are mapped to [get|set]_pcvar_*.  You can get a cached cvar pointer with get_cvar_pointer() or register_cvar().&lt;br /&gt;
&lt;br /&gt;
===FormatEX===&lt;br /&gt;
As of AMX Mod X 1.70, there is an ultra high-speed version of format() called formatex().  It skips copy-back checking, unlike format().  formatex() cannot be used if a source input is the same as the output buffer.  For example, these are invalid:&lt;br /&gt;
&amp;lt;pawn&amp;gt;new buffer[255]&lt;br /&gt;
formatex(buffer, 254, &amp;quot;%s&amp;quot;, buffer);&lt;br /&gt;
formatex(buffer, 254, buffer);&lt;br /&gt;
formatex(buffer, 254, &amp;quot;%d %s&amp;quot;, buffer[2]);&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It should be noted that format() will behave the same as formatex() if it detects that there will be no copy-back needed.  However, formatex() does not check this, and thus is slightly faster for situations where the coder is sure of its usage.&lt;br /&gt;
&lt;br /&gt;
===File Writing===&lt;br /&gt;
As of AMX Mod X 1.70, there are new natives for file writing.  Read_file and write_file are O(n^2) functions for consecutive read/writes.  fopen(), fgets(), fputs(), and fclose() are O(n) (or better) depending on how you use them.&lt;br /&gt;
&lt;br /&gt;
[[Category:Scripting (AMX Mod X)]]&lt;/div&gt;</summary>
		<author><name>VEN</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.alliedmods.net/index.php?title=Hello&amp;diff=3765</id>
		<title>Hello</title>
		<link rel="alternate" type="text/html" href="https://wiki.alliedmods.net/index.php?title=Hello&amp;diff=3765"/>
		<updated>2007-01-18T08:57:35Z</updated>

		<summary type="html">&lt;p&gt;VEN: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is a test page.&lt;/div&gt;</summary>
		<author><name>VEN</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.alliedmods.net/index.php?title=Hello&amp;diff=3764</id>
		<title>Hello</title>
		<link rel="alternate" type="text/html" href="https://wiki.alliedmods.net/index.php?title=Hello&amp;diff=3764"/>
		<updated>2007-01-18T08:55:34Z</updated>

		<summary type="html">&lt;p&gt;VEN: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;//This is a test page.&lt;/div&gt;</summary>
		<author><name>VEN</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.alliedmods.net/index.php?title=Ru_Main_Page&amp;diff=3724</id>
		<title>Ru Main Page</title>
		<link rel="alternate" type="text/html" href="https://wiki.alliedmods.net/index.php?title=Ru_Main_Page&amp;diff=3724"/>
		<updated>2007-01-06T11:11:52Z</updated>

		<summary type="html">&lt;p&gt;VEN: fixed - messed with the Category and Lang tags order&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Russian]]&lt;br /&gt;
&lt;br /&gt;
__NOTOC__&lt;br /&gt;
Добро пожаловать в AMWiki, объединенный и совместный проект документации проектов [[AMX Mod X]], [[Metamod:Source]], и [[SourceMod]].&lt;br /&gt;
&lt;br /&gt;
С чего вам начать? Проверьте [[AMWiki:Community Portal|Страницу проекта]], чтобы увидеть краткий обзор.  Прочитайте [[Help:Contents|Помощь]] для понимания основных принципов и правил wiki.  Или если вы что-то ищите, можете воспользоваться поиском с левой стороны!&lt;br /&gt;
&lt;br /&gt;
=Основные статьи=&lt;br /&gt;
&lt;br /&gt;
==Оптимизация Плагинов==&lt;br /&gt;
[[Optimizing Plugins|Данная статья]] описывает много важных моментов, трюков и советов, а также рассказывает о том, как сделать ваши плагины более быстрыми. Пользователи, следующие этим инструкциям, получат существенный прирост производительности в своих плагинах. Для продолжения чтения статьи нажмите [[Optimizing Plugins|здесь]].&lt;br /&gt;
&lt;br /&gt;
==Изменения в скриптах AMX Mod X 1.70==&lt;br /&gt;
В [[AMX Mod X]] 1.70 были сделаны важные изменения. Авторам серьезных плагинов рекомендуется как можно быстрее ознакомиться с изменениями и новыми возможностями: [[AMX Mod X 1.70 Scripting Changes]].&lt;br /&gt;
&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;border:0px; margin-right:10%;&amp;quot;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
=Проекты=&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot; cellpadding=&amp;quot;5&amp;quot;&lt;br /&gt;
|- class=&amp;quot;t2th&amp;quot;&lt;br /&gt;
| '''AMX Mod X'''&lt;br /&gt;
|- class=&amp;quot;t2td&amp;quot;&lt;br /&gt;
|[[Image:Amxxsmall.gif|left]] [[AMX Mod X]] - мощная, расширяемая скриптами среда для [[Half-Life 1]].&lt;br /&gt;
* [[:Category:Ru:Documentation (AMX Mod X)|Документация]]&lt;br /&gt;
* [[:Category:Ru:Scripting (AMX Mod X)|Скриптинг]]&lt;br /&gt;
* [http://amxmodx.ucoz.ru Русский сайт AMX Mod X]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot; cellpadding=&amp;quot;5&amp;quot;&lt;br /&gt;
|- class=&amp;quot;t2th&amp;quot;&lt;br /&gt;
| '''Metamod:Source'''&lt;br /&gt;
|- class=&amp;quot;t2td&amp;quot;&lt;br /&gt;
|[[Image:Mms.jpg|left]][[Metamod:Source]], мощный plugin API для [[Half-Life 2]], функции перехвата интерфейсов и универсальный plugin API.&lt;br /&gt;
* [[:Category:Documentation (SourceMM)|Документация]]&lt;br /&gt;
* [[Introduction_to_SourceMM_Coding|Разработка]]&lt;br /&gt;
|}&lt;br /&gt;
|}&lt;br /&gt;
|&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
=Новости=&lt;br /&gt;
{| cellpadding=&amp;quot;6&amp;quot;&lt;br /&gt;
|- class=&amp;quot;t2th&amp;quot;&lt;br /&gt;
| AMX Mod X 1.70&lt;br /&gt;
|- class=&amp;quot;t2td&amp;quot;&lt;br /&gt;
| ''2006-03-04'': Новая версия [[AMX Mod X]] выпущена в свет. Список изменений смотрите на [http://www.amxmodx.org/ домашней странице].  Разработчикам стоит взглянуть на новые темы, [[Optimizing Plugins|статью]] по оптимизации плагинов и [[AMX Mod X 1.70 Scripting Changes|изменения]] в AMX Mod X 1.70.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| cellpadding=&amp;quot;6&amp;quot;&lt;br /&gt;
|- class=&amp;quot;t2th&amp;quot;&lt;br /&gt;
| Metamod:Source 1.2.1&lt;br /&gt;
|- class=&amp;quot;t2td&amp;quot;&lt;br /&gt;
| ''2006-02-15'': Выпущена новая версия [[Metamod:Source|SourceMM]]. Список изменений смотрите на [http://www.sourcemm.net/ домашней странице].&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| cellpadding=&amp;quot;6&amp;quot;&lt;br /&gt;
|- class=&amp;quot;t2th&amp;quot;&lt;br /&gt;
| Wiki Запущен!&lt;br /&gt;
|- class=&amp;quot;t2td&amp;quot;&lt;br /&gt;
| ''2006-01-17'': Запущен AMWiki проект! Пожалуйста, пишите любые предложения в разделе обсуждений [[Talk:Main_Page|Main Page]].&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>VEN</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.alliedmods.net/index.php?title=Ru_Main_Page&amp;diff=3723</id>
		<title>Ru Main Page</title>
		<link rel="alternate" type="text/html" href="https://wiki.alliedmods.net/index.php?title=Ru_Main_Page&amp;diff=3723"/>
		<updated>2007-01-06T10:51:15Z</updated>

		<summary type="html">&lt;p&gt;VEN: changed links to categories to corresponding language&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Russian]]&lt;br /&gt;
&lt;br /&gt;
__NOTOC__&lt;br /&gt;
Добро пожаловать в AMWiki, объединенный и совместный проект документации проектов [[AMX Mod X]], [[Metamod:Source]], и [[SourceMod]].&lt;br /&gt;
&lt;br /&gt;
С чего вам начать? Проверьте [[AMWiki:Community Portal|Страницу проекта]], чтобы увидеть краткий обзор.  Прочитайте [[Help:Contents|Помощь]] для понимания основных принципов и правил wiki.  Или если вы что-то ищите, можете воспользоваться поиском с левой стороны!&lt;br /&gt;
&lt;br /&gt;
=Основные статьи=&lt;br /&gt;
&lt;br /&gt;
==Оптимизация Плагинов==&lt;br /&gt;
[[Optimizing Plugins|Данная статья]] описывает много важных моментов, трюков и советов, а также рассказывает о том, как сделать ваши плагины более быстрыми. Пользователи, следующие этим инструкциям, получат существенный прирост производительности в своих плагинах. Для продолжения чтения статьи нажмите [[Optimizing Plugins|здесь]].&lt;br /&gt;
&lt;br /&gt;
==Изменения в скриптах AMX Mod X 1.70==&lt;br /&gt;
В [[AMX Mod X]] 1.70 были сделаны важные изменения. Авторам серьезных плагинов рекомендуется как можно быстрее ознакомиться с изменениями и новыми возможностями: [[AMX Mod X 1.70 Scripting Changes]].&lt;br /&gt;
&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;border:0px; margin-right:10%;&amp;quot;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
=Проекты=&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot; cellpadding=&amp;quot;5&amp;quot;&lt;br /&gt;
|- class=&amp;quot;t2th&amp;quot;&lt;br /&gt;
| '''AMX Mod X'''&lt;br /&gt;
|- class=&amp;quot;t2td&amp;quot;&lt;br /&gt;
|[[Image:Amxxsmall.gif|left]] [[AMX Mod X]], мощный и расширяемый скриптами движок для [[Half-Life 1]].&lt;br /&gt;
* [[:Ru:Category:Documentation (AMX Mod X)|Документация]]&lt;br /&gt;
* [[:Ru:Category:Scripting (AMX Mod X)|Скриптинг]]&lt;br /&gt;
* [http://amxmodx.ucoz.ru Русский сайт AMX Mod X]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot; cellpadding=&amp;quot;5&amp;quot;&lt;br /&gt;
|- class=&amp;quot;t2th&amp;quot;&lt;br /&gt;
| '''Metamod:Source'''&lt;br /&gt;
|- class=&amp;quot;t2td&amp;quot;&lt;br /&gt;
|[[Image:Mms.jpg|left]][[Metamod:Source]], мощный plugin API для [[Half-Life 2]], функции перехвата интерфейсов и универсальный plugin API.&lt;br /&gt;
* [[:Category:Documentation (SourceMM)|Документация]]&lt;br /&gt;
* [[Introduction_to_SourceMM_Coding|Разработка]]&lt;br /&gt;
|}&lt;br /&gt;
|}&lt;br /&gt;
|&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
=Новости=&lt;br /&gt;
{| cellpadding=&amp;quot;6&amp;quot;&lt;br /&gt;
|- class=&amp;quot;t2th&amp;quot;&lt;br /&gt;
| AMX Mod X 1.70&lt;br /&gt;
|- class=&amp;quot;t2td&amp;quot;&lt;br /&gt;
| ''2006-03-04'': Новая версия [[AMX Mod X]] выпущена в свет. Список изменений смотрите на [http://www.amxmodx.org/ домашней странице].  Разработчикам стоит взглянуть на новые темы, [[Optimizing Plugins|статью]] по оптимизации плагинов и [[AMX Mod X 1.70 Scripting Changes|изменения]] в AMX Mod X 1.70.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| cellpadding=&amp;quot;6&amp;quot;&lt;br /&gt;
|- class=&amp;quot;t2th&amp;quot;&lt;br /&gt;
| Metamod:Source 1.2.1&lt;br /&gt;
|- class=&amp;quot;t2td&amp;quot;&lt;br /&gt;
| ''2006-02-15'': Выпущена новая версия [[Metamod:Source|SourceMM]]. Список изменений смотрите на [http://www.sourcemm.net/ домашней странице].&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| cellpadding=&amp;quot;6&amp;quot;&lt;br /&gt;
|- class=&amp;quot;t2th&amp;quot;&lt;br /&gt;
| Wiki Запущен!&lt;br /&gt;
|- class=&amp;quot;t2td&amp;quot;&lt;br /&gt;
| ''2006-01-17'': Запущен AMWiki проект! Пожалуйста, пишите любые предложения в разделе обсуждений [[Talk:Main_Page|Main Page]].&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>VEN</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.alliedmods.net/index.php?title=Ru:Fundamental_Basics_of_AMX_Mod_X_Scripting&amp;diff=3720</id>
		<title>Ru:Fundamental Basics of AMX Mod X Scripting</title>
		<link rel="alternate" type="text/html" href="https://wiki.alliedmods.net/index.php?title=Ru:Fundamental_Basics_of_AMX_Mod_X_Scripting&amp;diff=3720"/>
		<updated>2007-01-04T14:57:40Z</updated>

		<summary type="html">&lt;p&gt;VEN: added AMX Mod X/Pawn internal links&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Ru:Scripting (AMX Mod X)]]&lt;br /&gt;
=Фундаментальные основы AMX Mod X скриптинга=&lt;br /&gt;
&lt;br /&gt;
Данная статья не дает готовых &amp;quot;рецептов&amp;quot; по [[AMX Mod X]] скриптингу, но раскрывает его фундаментальные основы. Это и типы данных, и прототипы функций и многое другое, без знания чего невозможно писать AMX Mod X плагины.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Введение=&lt;br /&gt;
&lt;br /&gt;
Прежде чем начинать писать AMX Mod X плагины, в первую очередь необходимо разобраться в основах [[Pawn]].&lt;br /&gt;
&amp;lt;BR&amp;gt;&amp;lt;BR&amp;gt;Pawn – это скриптовый язык, созданный компанией ITB CompuPhase. Ранее Pawn назывался Small, но с версии 3.0 языку было решено дать более характерное название. Т.к. &amp;quot;pawn&amp;quot; в переводе с английского языка означает &amp;quot;пешка&amp;quot;, можно догадаться, что основной характерной чертой данного языка является простота.&lt;br /&gt;
&amp;lt;BR&amp;gt;&amp;lt;BR&amp;gt;Если вы владеете английским языком, рекомендуется ознакомиться с полным руководством по Pawn - [http://www.compuphase.com/pawn/pawn-lang.pdf Pawn The Language].&lt;br /&gt;
&amp;lt;BR&amp;gt;&amp;lt;BR&amp;gt;Код плагина представляет собой текст (как правило, заключенный в файл типа *.sma), включающий множество элементов языка: комментарии, переменные, функции и др. Поэтому для оформления кода потребуется текстовый редактор. Из простейших можно выделить, например, Microsoft Notepad. Также существует AMXX-Studio – специализированый редактор для AMX Mod X плагинов, позволяющий максимально эффективно работать в соответствующей среде. Последняя версия данного редактора может быть найдена в секции [http://www.amxmodx.org/downloads.php downloads] официального сайта AMX Mod X.&lt;br /&gt;
&amp;lt;BR&amp;gt;&amp;lt;BR&amp;gt;Чтобы позволить AMX Mod X выполнять код, файл с кодом необходимо откомпилировать с помощью компилятора AMXXPC (AMX Mod X Pawn Compiler). Операция компилирования преобразовывает набор текстовых инструкций в последовательность инструкций абстрактной машины (от англ. abstract machine), она же AMX, а также интерпретатор (от англ. interpreter).&lt;br /&gt;
&amp;lt;BR&amp;gt;&amp;lt;BR&amp;gt;Откомпилированый код обычно помещается в файл типа *.amxx, имеющий двоичный формат. Такой файл называют AMX Mod X плагином (от англ. plugin).&lt;br /&gt;
&amp;lt;BR&amp;gt;&amp;lt;BR&amp;gt;Для ознакомления с инструкциями по компилированию и установке плагинов смотрите [[Ru:Compiling Plugins (AMX Mod X)]] и [[Ru:Configuring AMX Mod X]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Pawn=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Уровни кода==&lt;br /&gt;
&lt;br /&gt;
В основе любого кода лежит уровневая структура. Причиной этому является нелинейность инструкций.&lt;br /&gt;
&amp;lt;BR&amp;gt;&amp;lt;BR&amp;gt;Т.н. &amp;quot;нулевой уровень&amp;quot; или &amp;quot;глобальное пространство&amp;quot; является неотъемлемой частью любого кода. Как только вы приступаете к написанию нового кода, вы оказываетесь в его глобальном пространстве. Оно же в свою очередь будет включать в себя пространства с более низкими уровнями.&lt;br /&gt;
&amp;lt;BR&amp;gt;&amp;lt;BR&amp;gt;Обычно глобальное пространство содержит всю общую информацию, которая может потребоваться в ходе выполнения кода пространствам более низкого уровня. Примером такой информации могут служить общие константы, переменные, списки, макросы.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Комментарии==&lt;br /&gt;
&lt;br /&gt;
Комментарий – это, как правило, текст информативного характера. Например, чтобы дать описание плагину можно использовать многострочный комментарий:&amp;lt;pawn&amp;gt;/* здесь вы помещаете&lt;br /&gt;
необходимую информацию */&amp;lt;/pawn&amp;gt;Как видно из примера, многострочный комментарий ограничивается символами /* и */, отмечающими начало и конец комментария соответственно. Недопустимо открывать последующий комментарий, не закрыв при этом предыдущий.&lt;br /&gt;
&amp;lt;BR&amp;gt;Примером однострочного комментария может быть:&amp;lt;pawn&amp;gt;/* ваш комментарий */&amp;lt;/pawn&amp;gt;Хотя, можно упростить конструкцию:&amp;lt;pawn&amp;gt;// ваш комментарий&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&amp;lt;BR&amp;gt;Как видно из последнего примера, комментарий начинается с двойного симовола обратного слеша //. Заканчивается такой комментарий вместе с концом текущей строки, поэтому не требует закрывающих символов. Такие комментарии могут быть только однострочными. Не обязательно комментарий должен начинаться с новой строки. Например, /* ... */ комментарий может быть расположен непосредственно в самом коде.&lt;br /&gt;
&amp;lt;BR&amp;gt;&amp;lt;BR&amp;gt;Т.к. комментарии не считаются кодом, они исключаются из обработки. Данная особенность позволяет при необходимости исключать части кода путем комментирования, что может быть использовано, например, при отладке кода.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Типы данных==&lt;br /&gt;
&lt;br /&gt;
Технически основой всех типов данных в Pawn является т.н. &amp;quot;cell&amp;quot; – ячейка памяти, состоящая из последовательности определенного количества бит. Количество бит в такой ячейке постоянно для определенной платформы. Так для 32х битной платформы оно будет составлять 32, а для 64х битной – 64.&lt;br /&gt;
&amp;lt;BR&amp;gt;&amp;lt;BR&amp;gt;Т.к. технически все данные не имеют отличия, для обозначения их типа применяются т.н. &amp;quot;тэги&amp;quot;. Если при создании переменной тэг не указан, то переменная является целым числом:&amp;lt;pawn&amp;gt;new ivar // создана целочисленная переменная с именем &amp;quot;ivar&amp;quot;&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&amp;lt;BR&amp;gt;Если при создании переменной ей не присваивается какое-либо конкретное значение, то переменная будет равна нулю. Таким образом, вышеприведенный пример технически соответствует:&amp;lt;pawn&amp;gt;new ivar = 0&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&amp;lt;BR&amp;gt;Чтобы создать дробную переменную, необходимо использовать тэг &amp;quot;Float&amp;quot;:&amp;lt;pawn&amp;gt;new Float:fvar&amp;lt;/pawn&amp;gt;Переменная fvar также будет равна нулю, но ввиду соответствия типу данных это будет 0.0, т.е. технический аналог примера будет:&amp;lt;pawn&amp;gt;new Float:fvar = 0.0&amp;lt;/pawn&amp;gt;Таким образом, мы обеспечиваем типовое соответствие &amp;quot;левой&amp;quot; и &amp;quot;правой&amp;quot; части.&lt;br /&gt;
&amp;lt;BR&amp;gt;Одним из особых типов данных является т.н. &amp;quot;булевые&amp;quot; переменные, которые технически могут иметь только два значение, логически интерпретируемые как &amp;quot;истина&amp;quot; и &amp;quot;ложь&amp;quot; (true и false). Чтобы создать булевую переменную, необходимо использовать тэг &amp;quot;bool&amp;quot;:&amp;lt;pawn&amp;gt;new bool:bvar&amp;lt;/pawn&amp;gt;Т.к. численно false является нулем, то технический аналог примера будет выглядеть как:&amp;lt;pawn&amp;gt;new bool:bvar = false&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&amp;lt;BR&amp;gt;Примечание: чтобы запретить изменение значения переменной, необходимо использовать атрибут const, например:&amp;lt;pawn&amp;gt;new const var = 1&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&amp;lt;BR&amp;gt;Pawn также позволяет создавать массивы данных, представляющие собой набор значений определенного типа. Так примером простого массива, содержащего два целочисленных значения будет:&amp;lt;pawn&amp;gt;new array[2]&amp;lt;/pawn&amp;gt;Технически данный пример выглядит следующим образом:&amp;lt;pawn&amp;gt;new array[2] = {0, 0}&amp;lt;/pawn&amp;gt;Технические аналоги для Float и bool массивов выглядят как:&amp;lt;pawn&amp;gt;new Float:farray[2] = {0.0, 0.0}&lt;br /&gt;
new bool:barray[2] = {false, false}&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&amp;lt;BR&amp;gt;Также существует особый тип данных, называемый &amp;quot;строка&amp;quot;, технически являющийся массивом целых чисел. Каждое целое число в строковом массиве соответствует числовому ASCII коду символа. Например, код 32 соответствует пробелу. Таким образом,&amp;lt;pawn&amp;gt;new string[3] = {'h', 'i', '^0'}&amp;lt;/pawn&amp;gt;является символьным представлением строкового массива&amp;lt;pawn&amp;gt;new string[3] = &amp;quot;hi&amp;quot;&amp;lt;/pawn&amp;gt;Обратите внимание на наличие специального символа '^0'. Это обязательный элемент строки, указывающий на ее окончание (численно равен нулю).&lt;br /&gt;
&amp;lt;BR&amp;gt;Также Pawn поддерживает многоуровневые массивы, например:&amp;lt;pawn&amp;gt;new multiarray[2][2]&amp;lt;/pawn&amp;gt;Технически такой массив равен:&amp;lt;pawn&amp;gt;new multiarray[2][2] = {{0, 0}, {0, 0}}&amp;lt;/pawn&amp;gt;Максимальное количество уровней массива равно 3.&lt;br /&gt;
&amp;lt;BR&amp;gt;Для любого явно заданного массива его размер может не указываться, например:&amp;lt;pawn&amp;gt;new array[] = {1, 2, 3} // размер массива равен 3&lt;br /&gt;
new string[] = &amp;quot;hello&amp;quot; // размер массива равен 6, т.к. помимо 5 символов также включает в себя символ окончания строки '^0'&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&amp;lt;BR&amp;gt;Чтобы инициализировать все элементы массива каким-либо конкретным значением, можно использовать символ троеточия ..., например:&amp;lt;pawn&amp;gt;new bool:is_active[16] = {true, ...}&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Прекомпиляция==&lt;br /&gt;
&lt;br /&gt;
На начальной стадии компилирования Pawn компилятор обрабатывает т.н. &amp;quot;статическую&amp;quot; часть кода. К ней можно отнести директивы, глобальные константы, списки и др.&lt;br /&gt;
&amp;lt;BR&amp;gt;&amp;lt;BR&amp;gt;Директивы являются специальными инструкциями компилятора. Одна из самых широко используемых директив – это &amp;quot;include&amp;quot;. Пример ее использования может быть следующим:&amp;lt;pawn&amp;gt;#include &amp;lt;amxmodx&amp;gt;&amp;lt;/pawn&amp;gt;Директива как бы &amp;quot;влаживает&amp;quot; содержимое указанного файла в текущую позицию. В данном случае указывается файл amxmodx.inc, который обычно расположен в amxmodx\scripting\include директории, и декларирует основные AMX Mod X функции.&lt;br /&gt;
&amp;lt;BR&amp;gt;Другая директива, позволяющая конструировать т.н. &amp;quot;макросы&amp;quot;, имеет название &amp;quot;define&amp;quot;. Макрос удобен тем, что способен заменять простые блоки кода. Один из простейших макросов – это т.н. &amp;quot;макроконстанта&amp;quot;, например:&amp;lt;pawn&amp;gt;#define VALUE 1&amp;lt;/pawn&amp;gt;В названиях макросов принято использовать буквы только верхнего регистра.&lt;br /&gt;
&amp;lt;BR&amp;gt;Нетехническим аналогом вышеприведенной макроконстанты является т.н. &amp;quot;глобальная константа&amp;quot;:&amp;lt;pawn&amp;gt;stock const value = 1&amp;lt;/pawn&amp;gt;stock атрибут позволяет не включать константу в плагин, если она не используется в коде.&lt;br /&gt;
&amp;lt;BR&amp;gt;Т.н. &amp;quot;список&amp;quot; – это набор нумерованных элементов определенного типа. Например:&amp;lt;pawn&amp;gt;enum {zero, one, two} // соответствует 0, 1, 2&lt;br /&gt;
enum {elem1 = 1, elem2, elem3} // соответствует 1, 2, 3&lt;br /&gt;
enum steeps {steep1 = 10, steep2 = 20} // соответствует 10, 20&amp;lt;/pawn&amp;gt;Тип списка (в вышеприведенном примере типом списка является steeps) – необязательный атрибут, по сути является тэгом, указывающим тип элементов, поэтому следующий пример является верным:&amp;lt;pawn&amp;gt;new steeps:steep = steep2&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Функции==&lt;br /&gt;
&lt;br /&gt;
Существует несколько типов функций.&lt;br /&gt;
&amp;lt;BR&amp;gt;&amp;lt;BR&amp;gt;Т.н. &amp;quot;обычная&amp;quot; – обычно т.н. &amp;quot;вспомогательная&amp;quot; функция; может быть вызвана непосредственно только другими функциями данного плагина; не может быть вызвана непосредственно AMX Mod X либо его модулями.&lt;br /&gt;
&amp;lt;BR&amp;gt;&amp;lt;BR&amp;gt;public – обычно функция, вызываемая непосредственно AMX Mod X либо его модулями; может быть также вызвана непосредственно другими функциями данного плагина.&lt;br /&gt;
&amp;lt;BR&amp;gt;&amp;lt;BR&amp;gt;native – функция, имеющая т.н. &amp;quot;глобальный&amp;quot; характер; может быть вызвана AMX Mod X плагинами.&lt;br /&gt;
&amp;lt;BR&amp;gt;&amp;lt;BR&amp;gt;forward - функция, имеющая т.н. &amp;quot;глобальный&amp;quot; характер; при наличии в плагине public функции с соответствующим именем функция будет вызываться AMX Mod X или его модулями.&lt;br /&gt;
&amp;lt;BR&amp;gt;&amp;lt;BR&amp;gt;stock – обычно функция, состоящая в т.н. &amp;quot;библиотеке&amp;quot; функций; не включается в плагин, если не используется в коде.&lt;br /&gt;
&amp;lt;BR&amp;gt;&amp;lt;BR&amp;gt;В общем виде заголовок, а также прототип любой функции условно выглядит следующим образом (символами треуголных скобок &amp;lt;&amp;gt; ограничены обязательные элементы, символами квадратных скобок [] ограничены необязательные элементы, которые могут быть опущены в определенных случаях):&amp;lt;pawn&amp;gt;[type] [tag]:&amp;lt;name&amp;gt;([[param1], [param2], ..., [paramN]])&amp;lt;/pawn&amp;gt;, где&lt;br /&gt;
[type] – соответствует типу функции (для обычной функции тип не указывается).&lt;br /&gt;
&amp;lt;BR&amp;gt;[tag] – соответствует типу данных возвращаемого результата функции.&lt;br /&gt;
&amp;lt;BR&amp;gt;&amp;lt;name&amp;gt; - соответствует имени функции&lt;br /&gt;
&amp;lt;BR&amp;gt;([...]) – соответствует набору параметров функции; количество параметров может быть от нуля (параметры отсутствуют) до N, где N – целое положительное число.&lt;br /&gt;
&amp;lt;BR&amp;gt;&amp;lt;BR&amp;gt;За заголовком функции следует т.н. &amp;quot;тело&amp;quot; функции, ограниченное символами фигурных скобок {}. Таким образом, примером простейшей функции является:&amp;lt;pawn&amp;gt;function()&lt;br /&gt;
{&lt;br /&gt;
	// это пустое тело функции, имеющей имя &amp;quot;function&amp;quot;&lt;br /&gt;
}&amp;lt;/pawn&amp;gt;Технически данная функция не выполняет никаких действий, т.к. в своем теле содержит только комментарий. Обратите внимание, что комментарий как бы сдвинут вправо относительно заголовка функции. В данном случае функция инициализирует новый уровень кода. Каждый уровень кода в целях удобочитаемости принято оформлять с соответствующим отступом. Чем более низкий уровень кода, тем больший отступ он будет иметь. Обычно в качестве отступа принято использовать символ табуляции, т.к. многие редакторы позволяют задавать видимую ширину табулированого отступа.&lt;br /&gt;
&amp;lt;BR&amp;gt;Существует два способа передачи параметров функции. Т.н. &amp;quot;основной&amp;quot; способ заключается в том, что при передаче данные дублируются путем создания соответствующих копий в памяти. Т.н. способ передачи параметров &amp;quot;по ссылке&amp;quot; (от англ. by reference) состоит в том, что данные передаются &amp;quot;как есть&amp;quot;, т.е. их дублирования не осуществляется, что позволяет функции изменять оригинальные данные непосредственно.&lt;br /&gt;
&amp;lt;BR&amp;gt;&amp;lt;BR&amp;gt;Для параметров функции все типы массивов, в том числе и строковые, могут передаваться исключительно по ссылке. Передача остальных данных по умолчанию осуществляется основным способом. Чтобы произвести передачу параметра функции по ссылке, в заголовке функции перед параметром необходимо добавлять символ амперсанда &amp;amp;, например:&amp;lt;pawn&amp;gt;function(&amp;amp;Float:fparam)&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&amp;lt;BR&amp;gt;Параметры функции могут иметь значения по умолчанию, например:&amp;lt;pawn&amp;gt;function(param = 1)&amp;lt;/pawn&amp;gt;Таким образом, чтобы вызвать данную функцию с параметром по умолчанию, параметр можно не указывать:&amp;lt;pawn&amp;gt;function()&amp;lt;/pawn&amp;gt;Также в таких случаях можно использовать символ подчеркивания _:&amp;lt;pawn&amp;gt;function(_)&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&amp;lt;BR&amp;gt;Чтобы запретить функции изменение передаваемых данных, необходимо использовать атрибут const, например:&amp;lt;pawn&amp;gt;function(const array[])&amp;lt;/pawn&amp;gt;Таким образом, можно утверждать, что в данном случае целью функции не является изменение данных массива, чего нельзя утверждать о следующей функции:&amp;lt;pawn&amp;gt;swaparray(array[2])&amp;lt;/pawn&amp;gt;Исходя из названия функции, типа параметра, его размера и отсутствия запрета на изменение, можно сделать предположение о том, что данная функция меняет элементы массива местами.&lt;br /&gt;
&amp;lt;BR&amp;gt;Важным свойством функции является способность возвращать результат, значение которого имеет определенный тип, например:&amp;lt;pawn&amp;gt;bool:is_true()&lt;br /&gt;
{&lt;br /&gt;
	return true&lt;br /&gt;
}&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&amp;lt;BR&amp;gt;Чтобы указать допустимые типы параметра функции, в заголовке функции перед параметром необходимо добавлять конструкцию, которая условно выглядит как {tag1, tag2, ..., tagN}:, т.е. представляет собой набор тэгов, количество которых может быть от одного до N, где N – целое положительное число, например:&amp;lt;pawn&amp;gt;get_integer({bool, _}:value)&lt;br /&gt;
{&lt;br /&gt;
	return _:value // возвращается значение типа &amp;quot;целое число&amp;quot;&lt;br /&gt;
}&amp;lt;/pawn&amp;gt;Смысл вышеприведенной функции заключается в том, что она принимает параметр как типа &amp;quot;целое число&amp;quot;, так и булевого типа, в результате возвращая значение параметра в числовой форме.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=AMX Mod X=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Функции==&lt;br /&gt;
&lt;br /&gt;
При написании AMX Mod X плагинов важно уметь понимать назначение и принцип действия AMX Mod X функций.&lt;br /&gt;
&amp;lt;BR&amp;gt;&amp;lt;BR&amp;gt;Прототипы функций, а также используемые ими константы и списки заключены в файлы типа *.inc, т.н. &amp;quot;инклуды&amp;quot; (от англ. include), которые обычно расположены в amxmodx\scripting\include директории.&lt;br /&gt;
&amp;lt;BR&amp;gt;&amp;lt;BR&amp;gt;Иногда одни инклуды включают в себя другие. Так основные AMX Mod X функции (т.н. функции AMX Mod X &amp;quot;ядра&amp;quot;) продекларированы в файле amxmodx.inc, который также включает векторные и другие инклуды, декларирующие функции, константы и списки, также имеющие непосредственное отношение к AMX Mod X ядру.&lt;br /&gt;
&amp;lt;BR&amp;gt;&amp;lt;BR&amp;gt;Одной из основных функций AMX Mod X является forward функция plugin_init. Если в коде плагина имеется public функция plugin_init, она будет вызвана AMX Mod X после загрузки карты на сервере. Обычно в plugin_init регистрируют сам плагин, его команды, переменные и т.п.&lt;br /&gt;
&amp;lt;BR&amp;gt;&amp;lt;BR&amp;gt;Плагин регистрируют с помощью native функции register_plugin. Т.к. прототип register_plugin соответствует:&amp;lt;pawn&amp;gt;native register_plugin(const plugin_name[], const version[], const author[])&amp;lt;/pawn&amp;gt;, можно понять, что в качестве параметров функция принимает три строковых массива, соответствующих названию плагина, номеру его версии и автору плагина.&lt;br /&gt;
&amp;lt;BR&amp;gt;Итак, примером простого AMX Mod X плагина является:&amp;lt;pawn&amp;gt;#include &amp;lt;amxmodx&amp;gt;&lt;br /&gt;
public plugin_init()&lt;br /&gt;
{&lt;br /&gt;
	register_plugin(&amp;quot;Test&amp;quot;, &amp;quot;0.1&amp;quot;, &amp;quot;VEN&amp;quot;)&lt;br /&gt;
}&amp;lt;/pawn&amp;gt;По сути данный плагин не выполняет каких-либо действий, но регистрирует себя в AMX Mod X с указанными данными.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Системы функционирования==&lt;br /&gt;
&lt;br /&gt;
AMX Mod X предоставляет большое количество определенных систем функционирования. Так одна из основных систем – это система контроля уровней доступа. Здесь имеют место соответствующие функции, например get_user_flags, а также константы стандартных уровней доступа типа ADMIN_*.&lt;br /&gt;
&amp;lt;BR&amp;gt;&amp;lt;BR&amp;gt;Система регистрирования и контроля консольных команд также &amp;quot;пересекается&amp;quot; с системой контроля уровней доступа и использует такие функции, как например register_concmd и cmd_access.&lt;br /&gt;
&amp;lt;BR&amp;gt;&amp;lt;BR&amp;gt;Также существует множество других систем, среди которых имеется система регистрирования и контроля серверных консольных переменных (англ.: Server CVars), клиентских меню и др.&lt;br /&gt;
&amp;lt;BR&amp;gt;&amp;lt;BR&amp;gt;Как правило, системы регистрирования используют т.н. &amp;quot;handle&amp;quot; (или &amp;quot;hook&amp;quot;) функции, которые вызываются системой в необходимый момент.&lt;br /&gt;
&amp;lt;BR&amp;gt;&amp;lt;BR&amp;gt;Так после регистрирования консольной команды &amp;quot;action&amp;quot;:&amp;lt;pawn&amp;gt;register_concmd(&amp;quot;action&amp;quot;, &amp;quot;action_handler&amp;quot;)&amp;lt;/pawn&amp;gt;при исполнении данной команды из консоли сервера или клиента система попытается найти и выполнить public функцию action_handler.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Система строкового форматирования==&lt;br /&gt;
&lt;br /&gt;
Многие AMX Mod X функции используют систему строкового форматирования. Например, это все *_print функции.&lt;br /&gt;
&amp;lt;BR&amp;gt;&amp;lt;BR&amp;gt;Такие функции принимают практически неограниченное количество параметров, которые используются при форматировании соответствующей строковой конструкции. Для наглядности рассмотрим пример:&amp;lt;pawn&amp;gt;server_print(&amp;quot;Formatted string: %d %f %s %c&amp;quot;, 1, 1.234567, &amp;quot;hello&amp;quot;, '!')&amp;lt;/pawn&amp;gt;Функция server_print отформатирует строковую конструкцию &amp;quot;Formatted string: %d %f %s %c&amp;quot;, используя переданные параметры, и выведет в серверной консоли строку:&amp;lt;pawn&amp;gt;Formatted string: 1 1.234567 hello !&amp;lt;/pawn&amp;gt;Таким образом, %d, %f, %s, %c – специальные элементы, используемые для форматирования целого числа, дробного числа, строки и символа соответственно.&lt;br /&gt;
&amp;lt;BR&amp;gt;Опасно при использовании функций, поддерживающих форматирование, передавать строковую переменную непосредственно в параметр строковой конструкции, например:&amp;lt;pawn&amp;gt;server_print(string)&amp;lt;/pawn&amp;gt;Безопасный вариант выглядит, следующим образом:&amp;lt;pawn&amp;gt;server_print(&amp;quot;%s&amp;quot;, string)&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&amp;lt;BR&amp;gt;Т.к. символ процента % является, т.н. &amp;quot;специальным символом&amp;quot;, для его форматирования в строковой конструкции необходимо использовать двойной символ процента %%, например:&amp;lt;pawn&amp;gt; server_print(&amp;quot;This is a single symbol of percent: %%&amp;quot;)&amp;lt;/pawn&amp;gt;выведет в серверной консоли:&amp;lt;pawn&amp;gt; This is a single symbol of percent: %&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&amp;lt;BR&amp;gt;Также существует т.н. &amp;quot;контрольный символ&amp;quot; (от англ. control character), позволяющий использовать т.н. &amp;quot;специальные символы форматирования&amp;quot;. Контрольным символом по умолчанию является символ ^, который может быть изменен директивой pragma ctrlchar, например:&amp;lt;pawn&amp;gt;#pragma ctrlchar '\'&amp;lt;/pawn&amp;gt;изменит контрольный символ на \.&lt;br /&gt;
&amp;lt;BR&amp;gt;Примеры некоторых специальных символов форматирования приведены ниже:&lt;br /&gt;
&amp;lt;BR&amp;gt;^t – табуляция&lt;br /&gt;
&amp;lt;BR&amp;gt;^n – новая строка&lt;br /&gt;
&amp;lt;BR&amp;gt;^xHH – символ, представленный в шестнадцатиричном формате, где HH – двойное число, представленное в шестнадцатиричном формате&lt;/div&gt;</summary>
		<author><name>VEN</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.alliedmods.net/index.php?title=Ru:Fundamental_Basics_of_AMX_Mod_X_Scripting&amp;diff=3704</id>
		<title>Ru:Fundamental Basics of AMX Mod X Scripting</title>
		<link rel="alternate" type="text/html" href="https://wiki.alliedmods.net/index.php?title=Ru:Fundamental_Basics_of_AMX_Mod_X_Scripting&amp;diff=3704"/>
		<updated>2007-01-01T12:41:57Z</updated>

		<summary type="html">&lt;p&gt;VEN: some minor fixes&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Ru:Scripting (AMX Mod X)]]&lt;br /&gt;
=Фундаментальные основы AMX Mod X скриптинга=&lt;br /&gt;
&lt;br /&gt;
Данная статья не дает готовых &amp;quot;рецептов&amp;quot; по AMX Mod X скриптингу, но раскрывает его фундаментальные основы. Это и типы данных, и прототипы функций и многое другое, без знания чего невозможно писать AMX Mod X плагины.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Введение=&lt;br /&gt;
&lt;br /&gt;
Прежде чем начинать писать AMX Mod X плагины, в первую очередь необходимо разобраться в основах Pawn.&lt;br /&gt;
&amp;lt;BR&amp;gt;&amp;lt;BR&amp;gt;Pawn – это скриптовый язык, созданный компанией ITB CompuPhase. Ранее Pawn назывался Small, но с версии 3.0 языку было решено дать более характерное название. Т.к. &amp;quot;pawn&amp;quot; в переводе с английского языка означает &amp;quot;пешка&amp;quot;, можно догадаться, что основной характерной чертой данного языка является простота.&lt;br /&gt;
&amp;lt;BR&amp;gt;&amp;lt;BR&amp;gt;Если вы владеете английским языком, рекомендуется ознакомиться с полным руководством по Pawn - [http://www.compuphase.com/pawn/pawn-lang.pdf Pawn The Language].&lt;br /&gt;
&amp;lt;BR&amp;gt;&amp;lt;BR&amp;gt;Код плагина представляет собой текст (как правило, заключенный в файл типа *.sma), включающий множество элементов языка: комментарии, переменные, функции и др. Поэтому для оформления кода потребуется текстовый редактор. Из простейших можно выделить, например, Microsoft Notepad. Также существует AMXX-Studio – специализированый редактор для AMX Mod X плагинов, позволяющий максимально эффективно работать в соответствующей среде. Последняя версия данного редактора может быть найдена в секции [http://www.amxmodx.org/downloads.php downloads] официального сайта AMX Mod X.&lt;br /&gt;
&amp;lt;BR&amp;gt;&amp;lt;BR&amp;gt;Чтобы позволить AMX Mod X выполнять код, файл с кодом необходимо откомпилировать с помощью компилятора AMXXPC (AMX Mod X Pawn Compiler). Операция компилирования преобразовывает набор текстовых инструкций в последовательность инструкций абстрактной машины (от англ. abstract machine), она же AMX, а также интерпретатор (от англ. interpreter).&lt;br /&gt;
&amp;lt;BR&amp;gt;&amp;lt;BR&amp;gt;Откомпилированый код обычно помещается в файл типа *.amxx, имеющий двоичный формат. Такой файл называют AMX Mod X плагином (от англ. plugin).&lt;br /&gt;
&amp;lt;BR&amp;gt;&amp;lt;BR&amp;gt;Для ознакомления с инструкциями по компилированию и установке плагинов смотрите: [[Ru:Compiling Plugins (AMX Mod X)]] и [[Ru:Configuring AMX Mod X]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Pawn=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Уровни кода==&lt;br /&gt;
&lt;br /&gt;
В основе любого кода лежит уровневая структура. Причиной этому является нелинейность инструкций.&lt;br /&gt;
&amp;lt;BR&amp;gt;&amp;lt;BR&amp;gt;Т.н. &amp;quot;нулевой уровень&amp;quot; или &amp;quot;глобальное пространство&amp;quot; является неотъемлемой частью любого кода. Как только вы приступаете к написанию нового кода, вы оказываетесь в его глобальном пространстве. Оно же в свою очередь будет включать в себя пространства с более низкими уровнями.&lt;br /&gt;
&amp;lt;BR&amp;gt;&amp;lt;BR&amp;gt;Обычно глобальное пространство содержит всю общую информацию, которая может потребоваться в ходе выполнения кода пространствам более низкого уровня. Примером такой информации могут служить общие константы, переменные, списки, макросы.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Комментарии==&lt;br /&gt;
&lt;br /&gt;
Комментарий – это, как правило, текст информативного характера. Например, чтобы дать описание плагину можно использовать многострочный комментарий:&amp;lt;pawn&amp;gt;/* здесь вы помещаете&lt;br /&gt;
необходимую информацию */&amp;lt;/pawn&amp;gt;Как видно из примера, многострочный комментарий ограничивается символами /* и */, отмечающими начало и конец комментария соответственно. Недопустимо открывать последующий комментарий, не закрыв при этом предыдущий.&lt;br /&gt;
&amp;lt;BR&amp;gt;Примером однострочного комментария может быть:&amp;lt;pawn&amp;gt;/* ваш комментарий */&amp;lt;/pawn&amp;gt;Хотя, можно упростить конструкцию:&amp;lt;pawn&amp;gt;// ваш комментарий&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&amp;lt;BR&amp;gt;Как видно из последнего примера, комментарий начинается с двойного симовола обратного слеша //. Заканчивается такой комментарий вместе с концом текущей строки, поэтому не требует закрывающих символов. Такие комментарии могут быть только однострочными. Не обязательно комментарий должен начинаться с новой строки. Например, /* ... */ комментарий может быть расположен непосредственно в самом коде.&lt;br /&gt;
&amp;lt;BR&amp;gt;&amp;lt;BR&amp;gt;Т.к. комментарии не считаются кодом, они исключаются из обработки. Данная особенность позволяет при необходимости исключать части кода путем комментирования, что может быть использовано, например, при отладке кода.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Типы данных==&lt;br /&gt;
&lt;br /&gt;
Технически основой всех типов данных в Pawn является т.н. &amp;quot;cell&amp;quot; – ячейка памяти, состоящая из последовательности определенного количества бит. Количество бит в такой ячейке постоянно для определенной платформы. Так для 32х битной платформы оно будет составлять 32, а для 64х битной – 64.&lt;br /&gt;
&amp;lt;BR&amp;gt;&amp;lt;BR&amp;gt;Т.к. технически все данные не имеют отличия, для обозначения их типа применяются т.н. &amp;quot;тэги&amp;quot;. Если при создании переменной тэг не указан, то переменная является целым числом:&amp;lt;pawn&amp;gt;new ivar // создана целочисленная переменная с именем &amp;quot;ivar&amp;quot;&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&amp;lt;BR&amp;gt;Если при создании переменной ей не присваивается какое-либо конкретное значение, то переменная будет равна нулю. Таким образом, вышеприведенный пример технически соответствует:&amp;lt;pawn&amp;gt;new ivar = 0&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&amp;lt;BR&amp;gt;Чтобы создать дробную переменную, необходимо использовать тэг &amp;quot;Float&amp;quot;:&amp;lt;pawn&amp;gt;new Float:fvar&amp;lt;/pawn&amp;gt;Переменная fvar также будет равна нулю, но ввиду соответствия типу данных это будет 0.0, т.е. технический аналог примера будет:&amp;lt;pawn&amp;gt;new Float:fvar = 0.0&amp;lt;/pawn&amp;gt;Таким образом, мы обеспечиваем типовое соответствие &amp;quot;левой&amp;quot; и &amp;quot;правой&amp;quot; части.&lt;br /&gt;
&amp;lt;BR&amp;gt;Одним из особых типов данных является т.н. &amp;quot;булевые&amp;quot; переменные, которые технически могут иметь только два значение, логически интерпретируемые как &amp;quot;истина&amp;quot; и &amp;quot;ложь&amp;quot; (true и false). Чтобы создать булевую переменную, необходимо использовать тэг &amp;quot;bool&amp;quot;:&amp;lt;pawn&amp;gt;new bool:bvar&amp;lt;/pawn&amp;gt;Т.к. численно false является нулем, то технический аналог примера будет выглядеть как:&amp;lt;pawn&amp;gt;new bool:bvar = false&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&amp;lt;BR&amp;gt;Примечание: чтобы запретить изменение значения переменной, необходимо использовать атрибут const, например:&amp;lt;pawn&amp;gt;new const var = 1&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&amp;lt;BR&amp;gt;Pawn также позволяет создавать массивы данных, представляющие собой набор значений определенного типа. Так примером простого массива, содержащего два целочисленных значения будет:&amp;lt;pawn&amp;gt;new array[2]&amp;lt;/pawn&amp;gt;Технически данный пример выглядит следующим образом:&amp;lt;pawn&amp;gt;new array[2] = {0, 0}&amp;lt;/pawn&amp;gt;Технические аналоги для Float и bool массивов выглядят как:&amp;lt;pawn&amp;gt;new Float:farray[2] = {0.0, 0.0}&lt;br /&gt;
new bool:barray[2] = {false, false}&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&amp;lt;BR&amp;gt;Также существует особый тип данных, называемый &amp;quot;строка&amp;quot;, технически являющийся массивом целых чисел. Каждое целое число в строковом массиве соответствует числовому ASCII коду символа. Например, код 32 соответствует пробелу. Таким образом,&amp;lt;pawn&amp;gt;new string[3] = {'h', 'i', '^0'}&amp;lt;/pawn&amp;gt;является символьным представлением строкового массива&amp;lt;pawn&amp;gt;new string[3] = &amp;quot;hi&amp;quot;&amp;lt;/pawn&amp;gt;Обратите внимание на наличие специального символа '^0'. Это обязательный элемент строки, указывающий на ее окончание (численно равен нулю).&lt;br /&gt;
&amp;lt;BR&amp;gt;Также Pawn поддерживает многоуровневые массивы, например:&amp;lt;pawn&amp;gt;new multiarray[2][2]&amp;lt;/pawn&amp;gt;Технически такой массив равен:&amp;lt;pawn&amp;gt;new multiarray[2][2] = {{0, 0}, {0, 0}}&amp;lt;/pawn&amp;gt;Максимальное количество уровней массива равно 3.&lt;br /&gt;
&amp;lt;BR&amp;gt;Для любого явно заданного массива его размер может не указываться, например:&amp;lt;pawn&amp;gt;new array[] = {1, 2, 3} // размер массива равен 3&lt;br /&gt;
new string[] = &amp;quot;hello&amp;quot; // размер массива равен 6, т.к. помимо 5 символов также включает в себя символ окончания строки '^0'&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&amp;lt;BR&amp;gt;Чтобы инициализировать все элементы массива каким-либо конкретным значением, можно использовать символ троеточия ..., например:&amp;lt;pawn&amp;gt;new bool:is_active[16] = {true, ...}&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Прекомпиляция==&lt;br /&gt;
&lt;br /&gt;
На начальной стадии компилирования Pawn компилятор обрабатывает т.н. &amp;quot;статическую&amp;quot; часть кода. К ней можно отнести директивы, глобальные константы, списки и др.&lt;br /&gt;
&amp;lt;BR&amp;gt;&amp;lt;BR&amp;gt;Директивы являются специальными инструкциями компилятора. Одна из самых широко используемых директив – это &amp;quot;include&amp;quot;. Пример ее использования может быть следующим:&amp;lt;pawn&amp;gt;#include &amp;lt;amxmodx&amp;gt;&amp;lt;/pawn&amp;gt;Директива как бы &amp;quot;влаживает&amp;quot; содержимое указанного файла в текущую позицию. В данном случае указывается файл amxmodx.inc, который обычно расположен в amxmodx\scripting\include директории, и декларирует основные AMX Mod X функции.&lt;br /&gt;
&amp;lt;BR&amp;gt;Другая директива, позволяющая конструировать т.н. &amp;quot;макросы&amp;quot;, имеет название &amp;quot;define&amp;quot;. Макрос удобен тем, что способен заменять простые блоки кода. Один из простейших макросов – это т.н. &amp;quot;макроконстанта&amp;quot;, например:&amp;lt;pawn&amp;gt;#define VALUE 1&amp;lt;/pawn&amp;gt;В названиях макросов принято использовать буквы только верхнего регистра.&lt;br /&gt;
&amp;lt;BR&amp;gt;Нетехническим аналогом вышеприведенной макроконстанты является т.н. &amp;quot;глобальная константа&amp;quot;:&amp;lt;pawn&amp;gt;stock const value = 1&amp;lt;/pawn&amp;gt;stock атрибут позволяет не включать константу в плагин, если она не используется в коде.&lt;br /&gt;
&amp;lt;BR&amp;gt;Т.н. &amp;quot;список&amp;quot; – это набор нумерованных элементов определенного типа. Например:&amp;lt;pawn&amp;gt;enum {zero, one, two} // соответствует 0, 1, 2&lt;br /&gt;
enum {elem1 = 1, elem2, elem3} // соответствует 1, 2, 3&lt;br /&gt;
enum steeps {steep1 = 10, steep2 = 20} // соответствует 10, 20&amp;lt;/pawn&amp;gt;Тип списка (в вышеприведенном примере типом списка является steeps) – необязательный атрибут, по сути является тэгом, указывающим тип элементов, поэтому следующий пример является верным:&amp;lt;pawn&amp;gt;new steeps:steep = steep2&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Функции==&lt;br /&gt;
&lt;br /&gt;
Существует несколько типов функций.&lt;br /&gt;
&amp;lt;BR&amp;gt;&amp;lt;BR&amp;gt;Т.н. &amp;quot;обычная&amp;quot; – обычно т.н. &amp;quot;вспомогательная&amp;quot; функция; может быть вызвана непосредственно только другими функциями данного плагина; не может быть вызвана непосредственно AMX Mod X либо его модулями.&lt;br /&gt;
&amp;lt;BR&amp;gt;&amp;lt;BR&amp;gt;public – обычно функция, вызываемая непосредственно AMX Mod X либо его модулями; может быть также вызвана непосредственно другими функциями данного плагина.&lt;br /&gt;
&amp;lt;BR&amp;gt;&amp;lt;BR&amp;gt;native – функция, имеющая т.н. &amp;quot;глобальный&amp;quot; характер; может быть вызвана AMX Mod X плагинами.&lt;br /&gt;
&amp;lt;BR&amp;gt;&amp;lt;BR&amp;gt;forward - функция, имеющая т.н. &amp;quot;глобальный&amp;quot; характер; при наличии в плагине public функции с соответствующим именем функция будет вызываться AMX Mod X или его модулями.&lt;br /&gt;
&amp;lt;BR&amp;gt;&amp;lt;BR&amp;gt;stock – обычно функция, состоящая в т.н. &amp;quot;библиотеке&amp;quot; функций; не включается в плагин, если не используется в коде.&lt;br /&gt;
&amp;lt;BR&amp;gt;&amp;lt;BR&amp;gt;В общем виде заголовок, а также прототип любой функции условно выглядит следующим образом (символами треуголных скобок &amp;lt;&amp;gt; ограничены обязательные элементы, символами квадратных скобок [] ограничены необязательные элементы, которые могут быть опущены в определенных случаях):&amp;lt;pawn&amp;gt;[type] [tag]:&amp;lt;name&amp;gt;([[param1], [param2], ..., [paramN]])&amp;lt;/pawn&amp;gt;, где&lt;br /&gt;
[type] – соответствует типу функции (для обычной функции тип не указывается).&lt;br /&gt;
&amp;lt;BR&amp;gt;[tag] – соответствует типу данных возвращаемого результата функции.&lt;br /&gt;
&amp;lt;BR&amp;gt;&amp;lt;name&amp;gt; - соответствует имени функции&lt;br /&gt;
&amp;lt;BR&amp;gt;([...]) – соответствует набору параметров функции; количество параметров может быть от нуля (параметры отсутствуют) до N, где N – целое положительное число.&lt;br /&gt;
&amp;lt;BR&amp;gt;&amp;lt;BR&amp;gt;За заголовком функции следует т.н. &amp;quot;тело&amp;quot; функции, ограниченное символами фигурных скобок {}. Таким образом, примером простейшей функции является:&amp;lt;pawn&amp;gt;function()&lt;br /&gt;
{&lt;br /&gt;
	// это пустое тело функции, имеющей имя &amp;quot;function&amp;quot;&lt;br /&gt;
}&amp;lt;/pawn&amp;gt;Технически данная функция не выполняет никаких действий, т.к. в своем теле содержит только комментарий. Обратите внимание, что комментарий как бы сдвинут вправо относительно заголовка функции. В данном случае функция инициализирует новый уровень кода. Каждый уровень кода в целях удобочитаемости принято оформлять с соответствующим отступом. Чем более низкий уровень кода, тем больший отступ он будет иметь. Обычно в качестве отступа принято использовать символ табуляции, т.к. многие редакторы позволяют задавать видимую ширину табулированого отступа.&lt;br /&gt;
&amp;lt;BR&amp;gt;Существует два способа передачи параметров функции. Т.н. &amp;quot;основной&amp;quot; способ заключается в том, что при передаче данные дублируются путем создания соответствующих копий в памяти. Т.н. способ передачи параметров &amp;quot;по ссылке&amp;quot; (от англ. by reference) состоит в том, что данные передаются &amp;quot;как есть&amp;quot;, т.е. их дублирования не осуществляется, что позволяет функции изменять оригинальные данные непосредственно.&lt;br /&gt;
&amp;lt;BR&amp;gt;&amp;lt;BR&amp;gt;Для параметров функции все типы массивов, в том числе и строковые, могут передаваться исключительно по ссылке. Передача остальных данных по умолчанию осуществляется основным способом. Чтобы произвести передачу параметра функции по ссылке, в заголовке функции перед параметром необходимо добавлять символ амперсанда &amp;amp;, например:&amp;lt;pawn&amp;gt;function(&amp;amp;Float:fparam)&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&amp;lt;BR&amp;gt;Параметры функции могут иметь значения по умолчанию, например:&amp;lt;pawn&amp;gt;function(param = 1)&amp;lt;/pawn&amp;gt;Таким образом, чтобы вызвать данную функцию с параметром по умолчанию, параметр можно не указывать:&amp;lt;pawn&amp;gt;function()&amp;lt;/pawn&amp;gt;Также в таких случаях можно использовать символ подчеркивания _:&amp;lt;pawn&amp;gt;function(_)&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&amp;lt;BR&amp;gt;Чтобы запретить функции изменение передаваемых данных, необходимо использовать атрибут const, например:&amp;lt;pawn&amp;gt;function(const array[])&amp;lt;/pawn&amp;gt;Таким образом, можно утверждать, что в данном случае целью функции не является изменение данных массива, чего нельзя утверждать о следующей функции:&amp;lt;pawn&amp;gt;swaparray(array[2])&amp;lt;/pawn&amp;gt;Исходя из названия функции, типа параметра, его размера и отсутствия запрета на изменение, можно сделать предположение о том, что данная функция меняет элементы массива местами.&lt;br /&gt;
&amp;lt;BR&amp;gt;Важным свойством функции является способность возвращать результат, значение которого имеет определенный тип, например:&amp;lt;pawn&amp;gt;bool:is_true()&lt;br /&gt;
{&lt;br /&gt;
	return true&lt;br /&gt;
}&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&amp;lt;BR&amp;gt;Чтобы указать допустимые типы параметра функции, в заголовке функции перед параметром необходимо добавлять конструкцию, которая условно выглядит как {tag1, tag2, ..., tagN}:, т.е. представляет собой набор тэгов, количество которых может быть от одного до N, где N – целое положительное число, например:&amp;lt;pawn&amp;gt;get_integer({bool, _}:value)&lt;br /&gt;
{&lt;br /&gt;
	return _:value // возвращается значение типа &amp;quot;целое число&amp;quot;&lt;br /&gt;
}&amp;lt;/pawn&amp;gt;Смысл вышеприведенной функции заключается в том, что она принимает параметр как типа &amp;quot;целое число&amp;quot;, так и булевого типа, в результате возвращая значение параметра в числовой форме.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=AMX Mod X=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Функции==&lt;br /&gt;
&lt;br /&gt;
При написании AMX Mod X плагинов важно уметь понимать назначение и принцип действия AMX Mod X функций.&lt;br /&gt;
&amp;lt;BR&amp;gt;&amp;lt;BR&amp;gt;Прототипы функций, а также используемые ими константы и списки заключены в файлы типа *.inc, т.н. &amp;quot;инклуды&amp;quot; (от англ. include), которые обычно расположены в amxmodx\scripting\include директории.&lt;br /&gt;
&amp;lt;BR&amp;gt;&amp;lt;BR&amp;gt;Иногда одни инклуды включают в себя другие. Так основные AMX Mod X функции (т.н. функции AMX Mod X &amp;quot;ядра&amp;quot;) продекларированы в файле amxmodx.inc, который также включает векторные и другие инклуды, декларирующие функции, константы и списки, также имеющие непосредственное отношение к AMX Mod X ядру.&lt;br /&gt;
&amp;lt;BR&amp;gt;&amp;lt;BR&amp;gt;Одной из основных функций AMX Mod X является forward функция plugin_init. Если в коде плагина имеется public функция plugin_init, она будет вызвана AMX Mod X после загрузки карты на сервере. Обычно в plugin_init регистрируют сам плагин, его команды, переменные и т.п.&lt;br /&gt;
&amp;lt;BR&amp;gt;&amp;lt;BR&amp;gt;Плагин регистрируют с помощью native функции register_plugin. Т.к. прототип register_plugin соответствует:&amp;lt;pawn&amp;gt;native register_plugin(const plugin_name[], const version[], const author[])&amp;lt;/pawn&amp;gt;, можно понять, что в качестве параметров функция принимает три строковых массива, соответствующих названию плагина, номеру его версии и автору плагина.&lt;br /&gt;
&amp;lt;BR&amp;gt;Итак, примером простого AMX Mod X плагина является:&amp;lt;pawn&amp;gt;#include &amp;lt;amxmodx&amp;gt;&lt;br /&gt;
public plugin_init()&lt;br /&gt;
{&lt;br /&gt;
	register_plugin(&amp;quot;Test&amp;quot;, &amp;quot;0.1&amp;quot;, &amp;quot;VEN&amp;quot;)&lt;br /&gt;
}&amp;lt;/pawn&amp;gt;По сути данный плагин не выполняет каких-либо действий, но регистрирует себя в AMX Mod X с указанными данными.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Системы функционирования==&lt;br /&gt;
&lt;br /&gt;
AMX Mod X предоставляет большое количество определенных систем функционирования. Так одна из основных систем – это система контроля уровней доступа. Здесь имеют место соответствующие функции, например get_user_flags, а также константы стандартных уровней доступа типа ADMIN_*.&lt;br /&gt;
&amp;lt;BR&amp;gt;&amp;lt;BR&amp;gt;Система регистрирования и контроля консольных команд также &amp;quot;пересекается&amp;quot; с системой контроля уровней доступа и использует такие функции, как например register_concmd и cmd_access.&lt;br /&gt;
&amp;lt;BR&amp;gt;&amp;lt;BR&amp;gt;Также существует множество других систем, среди которых имеется система регистрирования и контроля серверных консольных переменных (англ.: Server CVars), клиентских меню и др.&lt;br /&gt;
&amp;lt;BR&amp;gt;&amp;lt;BR&amp;gt;Как правило, системы регистрирования используют т.н. &amp;quot;handle&amp;quot; (или &amp;quot;hook&amp;quot;) функции, которые вызываются системой в необходимый момент.&lt;br /&gt;
&amp;lt;BR&amp;gt;&amp;lt;BR&amp;gt;Так после регистрирования консольной команды &amp;quot;action&amp;quot;:&amp;lt;pawn&amp;gt;register_concmd(&amp;quot;action&amp;quot;, &amp;quot;action_handler&amp;quot;)&amp;lt;/pawn&amp;gt;при исполнении данной команды из консоли сервера или клиента система попытается найти и выполнить public функцию action_handler.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Система строкового форматирования==&lt;br /&gt;
&lt;br /&gt;
Многие AMX Mod X функции используют систему строкового форматирования. Например, это все *_print функции.&lt;br /&gt;
&amp;lt;BR&amp;gt;&amp;lt;BR&amp;gt;Такие функции принимают практически неограниченное количество параметров, которые используются при форматировании соответствующей строковой конструкции. Для наглядности рассмотрим пример:&amp;lt;pawn&amp;gt;server_print(&amp;quot;Formatted string: %d %f %s %c&amp;quot;, 1, 1.234567, &amp;quot;hello&amp;quot;, '!')&amp;lt;/pawn&amp;gt;Функция server_print отформатирует строковую конструкцию &amp;quot;Formatted string: %d %f %s %c&amp;quot;, используя переданные параметры, и выведет в серверной консоли строку:&amp;lt;pawn&amp;gt;Formatted string: 1 1.234567 hello !&amp;lt;/pawn&amp;gt;Таким образом, %d, %f, %s, %c – специальные элементы, используемые для форматирования целого числа, дробного числа, строки и символа соответственно.&lt;br /&gt;
&amp;lt;BR&amp;gt;Опасно при использовании функций, поддерживающих форматирование, передавать строковую переменную непосредственно в параметр строковой конструкции, например:&amp;lt;pawn&amp;gt;server_print(string)&amp;lt;/pawn&amp;gt;Безопасный вариант выглядит, следующим образом:&amp;lt;pawn&amp;gt;server_print(&amp;quot;%s&amp;quot;, string)&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&amp;lt;BR&amp;gt;Т.к. символ процента % является, т.н. &amp;quot;специальным символом&amp;quot;, для его форматирования в строковой конструкции необходимо использовать двойной символ процента %%, например:&amp;lt;pawn&amp;gt; server_print(&amp;quot;This is a single symbol of percent: %%&amp;quot;)&amp;lt;/pawn&amp;gt;выведет в серверной консоли:&amp;lt;pawn&amp;gt; This is a single symbol of percent: %&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&amp;lt;BR&amp;gt;Также существует т.н. &amp;quot;контрольный символ&amp;quot; (от англ. control character), позволяющий использовать т.н. &amp;quot;специальные символы форматирования&amp;quot;. Контрольным символом по умолчанию является символ ^, который может быть изменен директивой pragma ctrlchar, например:&amp;lt;pawn&amp;gt;#pragma ctrlchar '\'&amp;lt;/pawn&amp;gt;изменит контрольный символ на \.&lt;br /&gt;
&amp;lt;BR&amp;gt;Примеры некоторых специальных символов форматирования приведены ниже:&lt;br /&gt;
&amp;lt;BR&amp;gt;^t – табуляция&lt;br /&gt;
&amp;lt;BR&amp;gt;^n – новая строка&lt;br /&gt;
&amp;lt;BR&amp;gt;^xHH – символ, представленный в шестнадцатиричном формате, где HH – двойное число, представленное в шестнадцатиричном формате&lt;/div&gt;</summary>
		<author><name>VEN</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.alliedmods.net/index.php?title=Ru:Fundamental_Basics_of_AMX_Mod_X_Scripting&amp;diff=3699</id>
		<title>Ru:Fundamental Basics of AMX Mod X Scripting</title>
		<link rel="alternate" type="text/html" href="https://wiki.alliedmods.net/index.php?title=Ru:Fundamental_Basics_of_AMX_Mod_X_Scripting&amp;diff=3699"/>
		<updated>2006-12-31T22:16:30Z</updated>

		<summary type="html">&lt;p&gt;VEN: better formatting&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Ru:Scripting (AMX Mod X)]]&lt;br /&gt;
=Фундаментальные основы AMX Mod X скриптинга=&lt;br /&gt;
&lt;br /&gt;
Данная статья не дает готовых &amp;quot;рецептов&amp;quot; по скриптингу, но раскрывает фундаментальные основы AMX Mod X скриптинга. Это и типы данных, и прототипы функций и многое другое, без знания чего невозможно писать AMX Mod X плагины.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Введение=&lt;br /&gt;
&lt;br /&gt;
Прежде чем начинать писать AMX Mod X плагины, в первую очередь необходимо разобраться в основах Pawn.&lt;br /&gt;
&amp;lt;BR&amp;gt;&amp;lt;BR&amp;gt;Pawn – это скриптовый язык, созданный компанией &amp;quot;ITB CompuPhase&amp;quot;. Ранее Pawn назывался Small, но с версии 3.0 языку было решено дать более характерное название. Т.к. &amp;quot;pawn&amp;quot; в переводе с английского языка означает &amp;quot;пешка&amp;quot;, можно догадаться, что основной характерной чертой данного языка является простота.&lt;br /&gt;
&amp;lt;BR&amp;gt;&amp;lt;BR&amp;gt;Если вы владеете английским языком, рекомендуется ознакомиться с полным руководством по Pawn, [http://www.compuphase.com/pawn/pawn-lang.pdf Pawn The Language].&lt;br /&gt;
&amp;lt;BR&amp;gt;&amp;lt;BR&amp;gt;Код плагина представляет собой текст (как правило, заключенный в файл типа *.sma), включающий множество элементов языка: комментарии, переменные, функции и др. Поэтому для оформления кода потребуется текстовый редактор. Из простейших можно выделить, например, Microsoft Notepad. Также существует AMXX-Studio – специализированый редактор для AMX Mod X плагинов, позволяющий максимально эффективно работать в соответствующей среде. Последняя версия данного редактора может быть найдена в секции [http://www.amxmodx.org/downloads.php downloads] официального сайта AMX Mod X.&lt;br /&gt;
&amp;lt;BR&amp;gt;&amp;lt;BR&amp;gt;Чтобы позволить AMX Mod X выполнять код, файл с кодом необходимо откомпилировать с помощью компилятора AMXXPC (AMX Mod X Pawn Compiler). Операция компилирования преобразовывает набор текстовых инструкций в последовательность инструкций абстрактной машины (от англ. abstract machine), она же AMX, а также интерпретатор (от англ. interpreter).&lt;br /&gt;
&amp;lt;BR&amp;gt;&amp;lt;BR&amp;gt;Откомпилированый код обычно помещается в файл типа *.amxx, имеющий двоичный формат. Такой файл называют AMX Mod X плагином (от англ. plugin).&lt;br /&gt;
&amp;lt;BR&amp;gt;&amp;lt;BR&amp;gt;Для ознакомления с инструкциями по компилированию и установке плагинов смотрите: [[Ru:Compiling Plugins (AMX Mod X)]] и [[Ru:Configuring AMX Mod X]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Pawn=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Уровни кода==&lt;br /&gt;
&lt;br /&gt;
В основе любого кода лежит уровневая структура. Причиной этому является нелинейность инструкций.&lt;br /&gt;
&amp;lt;BR&amp;gt;&amp;lt;BR&amp;gt;Т.н. &amp;quot;нулевой уровень&amp;quot; или &amp;quot;глобальное пространство&amp;quot; является неотъемлемой частью любого кода. Как только вы приступаете к написанию нового кода, вы оказываетесь в его глобальном пространстве. Оно же в свою очередь будет включать в себя пространства с более низкими уровнями.&lt;br /&gt;
&amp;lt;BR&amp;gt;&amp;lt;BR&amp;gt;Обычно глобальное пространство содержит всю общую информацию, которая может потребоваться в ходе выполнения кода пространствам более низкого уровня. Примером такой информации могут служить общие константы, переменные, списки, макросы.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Комментарии==&lt;br /&gt;
&lt;br /&gt;
Комментарий – это, как правило, текст информативного характера. Например, чтобы дать описание плагину можно использовать многострочный комментарий:&amp;lt;pawn&amp;gt;/* здесь вы помещаете&lt;br /&gt;
необходимую информацию */&amp;lt;/pawn&amp;gt;Как видно из примера, многострочный комментарий ограничивается символами /* и */, отмечающими начало и конец комментария соответственно. Недопустимо открывать последующий комментарий, не закрыв при этом предыдущий.&lt;br /&gt;
&amp;lt;BR&amp;gt;Примером однострочного комментария может быть:&amp;lt;pawn&amp;gt;/* ваш комментарий */&amp;lt;/pawn&amp;gt;Хотя, можно упростить конструкцию:&amp;lt;pawn&amp;gt;// ваш комментарий&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&amp;lt;BR&amp;gt;Как видно из последнего примера, комментарий начинается с двойного симовола обратного слеша //. Заканчивается такой комментарий вместе с концом текущей строки, поэтому не требует закрывающих символов. Такие комментарии могут быть только однострочными. Не обязательно комментарий должен начинаться с новой строки. Например, /* ... */ комментарий может быть расположен непосредственно в самом коде.&lt;br /&gt;
&amp;lt;BR&amp;gt;&amp;lt;BR&amp;gt;Т.к. комментарии не считаются кодом, они исключаются из обработки. Данная особенность позволяет при необходимости исключать части кода путем комментирования, что может быть использовано, например, при отладке кода.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Типы данных==&lt;br /&gt;
&lt;br /&gt;
Технически основой всех типов данных в Pawn является т.н. &amp;quot;cell&amp;quot; – ячейка памяти, состоящая из последовательности определенного количества бит. Количество бит в такой ячейке постоянно для определенной платформы. Так для 32х битной платформы оно будет составлять 32, а для 64х битной – 64.&lt;br /&gt;
&amp;lt;BR&amp;gt;&amp;lt;BR&amp;gt;Т.к. технически все данные не имеют отличия, для обозначения их типа применяются т.н. &amp;quot;тэги&amp;quot;. Если при создании переменной тэг не указан, то переменная является целым числом:&amp;lt;pawn&amp;gt;new ivar // создана целочисленная переменная с именем &amp;quot;ivar&amp;quot;&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&amp;lt;BR&amp;gt;Если при создании переменной ей не присваивается какое-либо конкретное значение, то переменная будет равна нулю. Таким образом, вышеприведенный пример технически соответствует:&amp;lt;pawn&amp;gt;new ivar = 0&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&amp;lt;BR&amp;gt;Чтобы создать дробную переменную, необходимо использовать тэг &amp;quot;Float&amp;quot;:&amp;lt;pawn&amp;gt;new Float:fvar&amp;lt;/pawn&amp;gt;Переменная fvar также будет равна нулю, но ввиду соответствия типу данных это будет 0.0, т.е. технический аналог примера будет:&amp;lt;pawn&amp;gt;new Float:fvar = 0.0&amp;lt;/pawn&amp;gt;Таким образом, мы обеспечиваем типовое соответствие &amp;quot;левой&amp;quot; и &amp;quot;правой&amp;quot; части.&lt;br /&gt;
&amp;lt;BR&amp;gt;Одним из особых типов данных является т.н. &amp;quot;булевые&amp;quot; переменные, которые технически могут иметь только два значение, логически интерпретируемые как &amp;quot;истина&amp;quot; и &amp;quot;ложь&amp;quot; (true и false). Чтобы создать булевую переменную, необходимо использовать тэг &amp;quot;bool&amp;quot;:&amp;lt;pawn&amp;gt;new bool:bvar&amp;lt;/pawn&amp;gt;Т.к. численно false является нулем, то технический аналог примера будет выглядеть как:&amp;lt;pawn&amp;gt;new bool:bvar = false&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&amp;lt;BR&amp;gt;Примечание: чтобы запретить изменение значения переменной, необходимо использовать атрибут const, например:&amp;lt;pawn&amp;gt;new const var = 1&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&amp;lt;BR&amp;gt;Pawn также позволяет создавать массивы данных, представляющие собой набор значений определенного типа. Так примером простого массива, содержащего два целочисленных значения будет:&amp;lt;pawn&amp;gt;new array[2]&amp;lt;/pawn&amp;gt;Технически данный пример выглядит следующим образом:&amp;lt;pawn&amp;gt;new array[2] = {0, 0}&amp;lt;/pawn&amp;gt;Технические аналоги для Float и bool массивов выглядят как:&amp;lt;pawn&amp;gt;new Float:farray[2] = {0.0, 0.0}&lt;br /&gt;
new bool:barray[2] = {false, false}&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&amp;lt;BR&amp;gt;Также существует особый тип данных, называемый &amp;quot;строка&amp;quot;, технически являющийся массивом целых чисел. Каждое целое число в строковом массиве соответствует числовому ASCII коду символа. Например, код 32 соответствует пробелу. Таким образом,&amp;lt;pawn&amp;gt;new string[3] = {'h', 'i', '^0'}&amp;lt;/pawn&amp;gt;является символьным представлением строкового массива&amp;lt;pawn&amp;gt;new string[3] = &amp;quot;hi&amp;quot;&amp;lt;/pawn&amp;gt;Обратите внимание на наличие специального символа '^0'. Это обязательный элемент строки, указывающий на ее окончание (численно равен нулю).&lt;br /&gt;
&amp;lt;BR&amp;gt;Также Pawn поддерживает многоуровневые массивы, например:&amp;lt;pawn&amp;gt;new multiarray[2][2]&amp;lt;/pawn&amp;gt;Технически такой массив равен:&amp;lt;pawn&amp;gt;new multiarray[2][2] = {{0, 0}, {0, 0}}&amp;lt;/pawn&amp;gt;Максимальное количество уровней массива равно 3.&lt;br /&gt;
&amp;lt;BR&amp;gt;Для любого явно заданного массива его размер может не указываться, например:&amp;lt;pawn&amp;gt;new array[] = {1, 2, 3} // размер массива равен 3&lt;br /&gt;
new string[] = &amp;quot;hello&amp;quot; // размер массива равен 6, т.к. помимо 5 символов также включает в себя символ окончания строки '^0'&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&amp;lt;BR&amp;gt;Чтобы инициализировать все элементы массива каким-либо конкретным значением, можно использовать символ троеточия ..., например:&amp;lt;pawn&amp;gt;new bool:is_active[16] = {true, ...}&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Прекомпиляция==&lt;br /&gt;
&lt;br /&gt;
На начальной стадии компилирования Pawn компилятор обрабатывает т.н. &amp;quot;статическую&amp;quot; часть кода. К ней можно отнести директивы, глобальные константы, списки и др.&lt;br /&gt;
&amp;lt;BR&amp;gt;&amp;lt;BR&amp;gt;Директивы являются специальными инструкциями компилятора. Одна из самых широко используемых директив – это &amp;quot;include&amp;quot;. Пример ее использования может быть следующим:&amp;lt;pawn&amp;gt;#include &amp;lt;amxmodx&amp;gt;&amp;lt;/pawn&amp;gt;Директива как бы &amp;quot;влаживает&amp;quot; содержимое указанного файла в текущую позицию. В данном случае указывается файл amxmodx.inc, который обычно расположен в amxmodx\scripting\include директории, и декларирует основные AMX Mod X функции.&lt;br /&gt;
&amp;lt;BR&amp;gt;Другая директива, позволяющая конструировать т.н. &amp;quot;макросы&amp;quot;, имеет название &amp;quot;define&amp;quot;. Макрос удобен тем, что способен заменять простые блоки кода. Один из простейших макросов – это т.н. &amp;quot;макроконстанта&amp;quot;, например:&amp;lt;pawn&amp;gt;#define VALUE 1&amp;lt;/pawn&amp;gt;В названиях макросов принято использовать буквы только верхнего регистра.&lt;br /&gt;
&amp;lt;BR&amp;gt;Нетехническим аналогом вышеприведенной макроконстанты является т.н. &amp;quot;глобальная константа&amp;quot;:&amp;lt;pawn&amp;gt;stock const value = 1&amp;lt;/pawn&amp;gt;stock атрибут позволяет не включать константу в плагин, если она не используется в коде.&lt;br /&gt;
&amp;lt;BR&amp;gt;Т.н. &amp;quot;список&amp;quot; – это набор нумерованных элементов определенного типа. Например:&amp;lt;pawn&amp;gt;enum {zero, one, two} // соответствует 0, 1, 2&lt;br /&gt;
enum {elem1 = 1, elem2, elem3} // соответствует 1, 2, 3&lt;br /&gt;
enum steeps {steep1 = 10, steep2 = 20} // соответствует 10, 20&amp;lt;/pawn&amp;gt;Тип списка (в вышеприведенном примере типом списка является steeps) – необязательный атрибут, по сути является тэгом, указывающим тип элементов, поэтому следующий пример является верным:&amp;lt;pawn&amp;gt;new steeps:steep = steep2&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Функции==&lt;br /&gt;
&lt;br /&gt;
Существует несколько типов функций.&lt;br /&gt;
&amp;lt;BR&amp;gt;&amp;lt;BR&amp;gt;Т.н. &amp;quot;обычная&amp;quot; – обычно т.н. &amp;quot;вспомогательная&amp;quot; функция; может быть вызвана непосредственно только другими функциями данного плагина; не может быть вызвана непосредственно AMX Mod X либо его модулями.&lt;br /&gt;
&amp;lt;BR&amp;gt;&amp;lt;BR&amp;gt;public – обычно функция, вызываемая непосредственно AMX Mod X либо его модулями; может быть также вызвана непосредственно другими функциями данного плагина.&lt;br /&gt;
&amp;lt;BR&amp;gt;&amp;lt;BR&amp;gt;native – функция, имеющая т.н. &amp;quot;глобальный&amp;quot; характер; может быть вызвана AMX Mod X плагинами.&lt;br /&gt;
&amp;lt;BR&amp;gt;&amp;lt;BR&amp;gt;forward - функция, имеющая т.н. &amp;quot;глобальный&amp;quot; характер; при наличии в плагине public функции с соответствующим именем функция будет вызываться AMX Mod X или его модулями.&lt;br /&gt;
&amp;lt;BR&amp;gt;&amp;lt;BR&amp;gt;stock – обычно функция, состоящая в т.н. &amp;quot;библиотеке&amp;quot; функций; не включается в плагин, если не используется в коде.&lt;br /&gt;
&amp;lt;BR&amp;gt;&amp;lt;BR&amp;gt;В общем виде заголовок, а также прототип любой функции условно выглядит следующим образом (символами треуголных скобок &amp;lt;&amp;gt; ограничены обязательные элементы, символами квадратных скобок [] ограничены необязательные элементы, которые могут быть опущены в определенных случаях):&amp;lt;pawn&amp;gt;[type] [tag]:&amp;lt;name&amp;gt;([[param1], [param2], ..., [paramN]])&amp;lt;/pawn&amp;gt;, где&lt;br /&gt;
[type] – соответствует типу функции (для обычной функции тип не указывается).&lt;br /&gt;
&amp;lt;BR&amp;gt;[tag] – соответствует типу данных возвращаемого результата функции.&lt;br /&gt;
&amp;lt;BR&amp;gt;&amp;lt;name&amp;gt; - соответствует имени функции&lt;br /&gt;
&amp;lt;BR&amp;gt;([...]) – соответствует набору параметров функции; количество параметров может быть от нуля (параметры отсутствуют) до N, где N – целое положительное число.&lt;br /&gt;
&amp;lt;BR&amp;gt;&amp;lt;BR&amp;gt;За заголовком функции следует т.н. &amp;quot;тело&amp;quot; функции, ограниченное символами фигурных скобок {}. Таким образом, примером простейшей функции является:&amp;lt;pawn&amp;gt;function()&lt;br /&gt;
{&lt;br /&gt;
	// это пустое тело функции, имеющей имя &amp;quot;function&amp;quot;&lt;br /&gt;
}&amp;lt;/pawn&amp;gt;Технически данная функция не выполняет никаких действий, т.к. в своем теле содержит только комментарий. Обратите внимание, что комментарий как бы сдвинут вправо относительно заголовка функции. В данном случае функция инициализирует новый уровень кода. Каждый уровень кода в целях удобочитаемости принято оформлять с соответствующим отступом. Чем более низкий уровень кода, тем больший отступ он будет иметь. Обычно в качестве отступа принято использовать символ табуляции, т.к. многие редакторы позволяют задавать видимую ширину табулированого отступа.&lt;br /&gt;
&amp;lt;BR&amp;gt;Существует два способа передачи параметров функции. Т.н. &amp;quot;основной&amp;quot; способ заключается в том, что при передаче данные дублируются путем создания соответствующих копий в памяти. Т.н. способ передачи параметров &amp;quot;по ссылке&amp;quot; (от англ. by reference) состоит в том, что данные передаются &amp;quot;как есть&amp;quot;, т.е. их дублирования не осуществляется, что позволяет функции изменять оригинальные данные непосредственно.&lt;br /&gt;
&amp;lt;BR&amp;gt;&amp;lt;BR&amp;gt;Для параметров функции все типы массивов, в том числе и строковые, могут передаваться исключительно по ссылке. Передача остальных данных по умолчанию осуществляется основным способом. Чтобы произвести передачу параметра функции по ссылке, в заголовке функции перед параметром необходимо добавлять символ амперсанда &amp;amp;, например:&amp;lt;pawn&amp;gt;function(&amp;amp;Float:fparam)&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&amp;lt;BR&amp;gt;Параметры функции могут иметь значения по умолчанию, например:&amp;lt;pawn&amp;gt;function(param = 1)&amp;lt;/pawn&amp;gt;Таким образом, чтобы вызвать данную функцию с параметром по умолчанию, параметр можно не указывать:&amp;lt;pawn&amp;gt;function()&amp;lt;/pawn&amp;gt;Также в таких случаях можно использовать символ подчеркивания _:&amp;lt;pawn&amp;gt;function(_)&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&amp;lt;BR&amp;gt;Чтобы запретить функции изменение передаваемых данных, необходимо использовать атрибут const, например:&amp;lt;pawn&amp;gt;function(const array[])&amp;lt;/pawn&amp;gt;Таким образом, можно утверждать, что в данном случае целью функции не является изменение данных массива, чего нельзя утверждать о следующей функции:&amp;lt;pawn&amp;gt;swaparray(array[2])&amp;lt;/pawn&amp;gt;Исходя из названия функции, типа параметра, его размера и отсутствия запрета на изменение, можно сделать предположение о том, что данная функция меняет элементы массива местами.&lt;br /&gt;
&amp;lt;BR&amp;gt;Важным свойством функции является способность возвращать результат, значение которого имеет определенный тип, например:&amp;lt;pawn&amp;gt;bool:is_true()&lt;br /&gt;
{&lt;br /&gt;
	return true&lt;br /&gt;
}&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&amp;lt;BR&amp;gt;Чтобы указать допустимые типы параметра функции, в заголовке функции перед параметром необходимо добавлять конструкцию, которая условно выглядит как {tag1, tag2, ..., tagN}:, где символы фигурных скобок {} ограничивают набор тэгов, количество которых может быть от одного до N, где Т – целое положительное число, например:&amp;lt;pawn&amp;gt;get_integer({bool, _}:value)&lt;br /&gt;
{&lt;br /&gt;
	return _:value // возвращается значение типа &amp;quot;целое число&amp;quot;&lt;br /&gt;
}&amp;lt;/pawn&amp;gt;Смысл вышеприведенной функции заключается в том, что она принимает параметр как типа &amp;quot;целое число&amp;quot;, так и булевого типа, в результате возвращая значение параметра в числовой форме.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=AMX Mod X=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Функции==&lt;br /&gt;
&lt;br /&gt;
При написании AMX Mod X плагинов важно уметь понимать назначение и принцип действия AMX Mod X функций.&lt;br /&gt;
&amp;lt;BR&amp;gt;&amp;lt;BR&amp;gt;Прототипы функций, а также используемые ими константы и списки заключены в файлы типа *.inc, т.н. &amp;quot;инклуды&amp;quot; (от англ. include), которые обычно расположены в amxmodx\scripting\include директории.&lt;br /&gt;
&amp;lt;BR&amp;gt;&amp;lt;BR&amp;gt;Иногда одни инклуды включают в себя другие. Так основные AMX Mod X функции (т.н. функции AMX Mod X &amp;quot;ядра&amp;quot;) продекларированы в файле amxmodx.inc, который также включает векторные и другие инклуды, декларирующие функции, константы и списки, также имеющие непосредственное отношение к AMX Mod X ядру.&lt;br /&gt;
&amp;lt;BR&amp;gt;&amp;lt;BR&amp;gt;Одной из основных функций AMX Mod X является forward функция plugin_init. Если в коде плагина имеется public функция plugin_init, она будет вызвана AMX Mod X после загрузки карты на сервере. Обычно в plugin_init регистрируют сам плагин, его команды, переменные и т.п.&lt;br /&gt;
&amp;lt;BR&amp;gt;&amp;lt;BR&amp;gt;Плагин регистрируют с помощью native функции register_plugin. Т.к. прототип register_plugin соответствует:&amp;lt;pawn&amp;gt;native register_plugin(const plugin_name[], const version[], const author[])&amp;lt;/pawn&amp;gt;, можно понять, что в качестве параметров функция принимает три строковых массива, соответствующих названию плагина, номеру его версии и автору плагина.&lt;br /&gt;
&amp;lt;BR&amp;gt;Итак, примером простого AMX Mod X плагина является:&amp;lt;pawn&amp;gt;#include &amp;lt;amxmodx&amp;gt;&lt;br /&gt;
public plugin_init()&lt;br /&gt;
{&lt;br /&gt;
	register_plugin(&amp;quot;Test&amp;quot;, &amp;quot;0.1&amp;quot;, &amp;quot;VEN&amp;quot;)&lt;br /&gt;
}&amp;lt;/pawn&amp;gt;По сути данный плагин не выполняет каких-либо действий, но регистрирует себя в AMX Mod X с указанными данными.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Системы функционирования==&lt;br /&gt;
&lt;br /&gt;
AMX Mod X предоставляет большое количество определенных систем функционирования. Так одна из основных систем – это система контроля уровней доступа. Здесь имеют место соответствующие функции, например get_user_flags, а также константы стандартных уровней доступа типа ADMIN_*.&lt;br /&gt;
&amp;lt;BR&amp;gt;&amp;lt;BR&amp;gt;Система регистрирования и контроля консольных команд также &amp;quot;пересекается&amp;quot; с системой контроля уровней доступа и использует такие функции, как например register_concmd и cmd_access.&lt;br /&gt;
&amp;lt;BR&amp;gt;&amp;lt;BR&amp;gt;Также существует множество других систем, среди которых имеется система регистрирования и контроля серверных консольных переменных (англ.: Server CVars), клиентских меню и др.&lt;br /&gt;
&amp;lt;BR&amp;gt;&amp;lt;BR&amp;gt;Как правило, системы регистрирования используют т.н. &amp;quot;handle&amp;quot; (или &amp;quot;hook&amp;quot;) функции, которые вызываются системой в необходимый момент.&lt;br /&gt;
&amp;lt;BR&amp;gt;&amp;lt;BR&amp;gt;Так после регистрирования консольной команды &amp;quot;action&amp;quot;:&amp;lt;pawn&amp;gt;register_concmd(&amp;quot;action&amp;quot;, &amp;quot;action_handler&amp;quot;)&amp;lt;/pawn&amp;gt;при исполнении данной команды из консоли сервера или клиента система попытается найти и выполнить public функцию action_handler.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Система строкового форматирования==&lt;br /&gt;
&lt;br /&gt;
Многие AMX Mod X функции используют систему строкового форматирования. Например, это все *_print* функции.&lt;br /&gt;
&amp;lt;BR&amp;gt;&amp;lt;BR&amp;gt;Такие функции принимают практически неограниченное количество параметров, которые используются при форматировании соответствующей строковой конструкции. Для наглядности рассмотрим пример:&amp;lt;pawn&amp;gt;server_print(&amp;quot;Formatted string: %d %f %s %c&amp;quot;, 1, 1.234567, &amp;quot;hello&amp;quot;, '!')&amp;lt;/pawn&amp;gt;Функция server_print отформатирует строковую конструкцию &amp;quot;Formatted string: %d %f %s %c&amp;quot;, используя переданные параметры, и выведет в серверной консоли строку:&amp;lt;pawn&amp;gt;Formatted string: 1 1.234567 hello !&amp;lt;/pawn&amp;gt;Таким образом, %d, %f, %s, %c – специальные элементы, используемые для форматирования целого числа, дробного числа, строки и символа соответственно.&lt;br /&gt;
&amp;lt;BR&amp;gt;Опасно при использовании функций, поддерживающих форматирование, передавать строковую переменную непосредственно в параметр строковой конструкции, например:&amp;lt;pawn&amp;gt;server_print(string)&amp;lt;/pawn&amp;gt;Безопасный вариант выглядит, следующим образом:&amp;lt;pawn&amp;gt;server_print(&amp;quot;%s&amp;quot;, string)&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&amp;lt;BR&amp;gt;Т.к. символ процента % является, т.н. &amp;quot;специальным символом&amp;quot;, для его форматирования в строковой конструкции необходимо использовать двойной символ процента %%, например:&amp;lt;pawn&amp;gt; server_print(&amp;quot;This is a single symbol of percent: %%&amp;quot;)&amp;lt;/pawn&amp;gt;выведет в серверной консоли:&amp;lt;pawn&amp;gt; This is a single symbol of percent: %&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&amp;lt;BR&amp;gt;Также существует т.н. &amp;quot;контрольный символ&amp;quot; (от англ. control character), позволяющий использовать т.н. &amp;quot;специальные символы форматирования&amp;quot;. Контрольным символом по умолчанию является символ ^, который может быть изменен директивой pragma ctrlchar, например:&amp;lt;pawn&amp;gt;#pragma ctrlchar '\'&amp;lt;/pawn&amp;gt;изменит контрольный символ на \.&lt;br /&gt;
&amp;lt;BR&amp;gt;Примеры некоторых специальных символов форматирования приведены ниже:&lt;br /&gt;
&amp;lt;BR&amp;gt;^t – табуляция&lt;br /&gt;
&amp;lt;BR&amp;gt;^n – новая строка&lt;br /&gt;
&amp;lt;BR&amp;gt;^xHH – символ, представленный в шестнадцатиричном формате, где HH – двойное число, представленное в шестнадцатиричном формате&lt;/div&gt;</summary>
		<author><name>VEN</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.alliedmods.net/index.php?title=Ru_Intro_to_AMX_Mod_X_Scripting&amp;diff=3698</id>
		<title>Ru Intro to AMX Mod X Scripting</title>
		<link rel="alternate" type="text/html" href="https://wiki.alliedmods.net/index.php?title=Ru_Intro_to_AMX_Mod_X_Scripting&amp;diff=3698"/>
		<updated>2006-12-31T21:58:36Z</updated>

		<summary type="html">&lt;p&gt;VEN: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Ru:Scripting (AMX Mod X)]]&lt;br /&gt;
Просмотреть оригинал статьи (англ.): [[Intro to AMX Mod X Scripting]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Введение в AMX Mod X скриптинг=&lt;br /&gt;
Это руководство позволит разобраться в основах скриптинга [[AMX Mod X]] плагинов.&lt;br /&gt;
&lt;br /&gt;
=Обзор=&lt;br /&gt;
&lt;br /&gt;
Значит, вы хотите создать плагин? Вы должны иметь хорошее представление о том, как работает [[Pawn]], скриптинг язык, который используется для написания [[AMX Mod X]] плагинов. Поэтому в первую очередь настоятельно рекомендуется ознакомиться с фундаментальными основами [[Pawn]] и [[AMX Mod X]] скриптинга: [[Ru:Fundamental Basics of AMX Mod X Scripting]]. Желательно читать данную статью, сидя за компьютером с текстовым редактором и [[Pawn]] компилятором под рукой - хорошее подспорье для эффективного обучения. Конечно же, вы не будете сразу писать большие плагины типа WC3, Matrix Mod и CSDM, но все же статья даст вам &amp;quot;толчок&amp;quot; в мир моддинга [[AMX Mod X]]. Хороший редактор с поддержкой [[Pawn]] - это AMXX-Studio, который можно найти в секции [http://www.amxmodx.org/downloads.php AMX Mod X downloads].&lt;br /&gt;
&lt;br /&gt;
Вам необходимо знать, как компилировать плагины. Обратитесь к секции [[Ru:Compiling Plugins (AMX Mod X)]] для ознакомления. Также, чтобы проверить и отладить ваш плагин, вы должны знать, как устанавливать плагины. Для этого обратитесь к секции [[Ru:Configuring AMX Mod X]].&lt;br /&gt;
&lt;br /&gt;
=Введение=&lt;br /&gt;
&lt;br /&gt;
AMX Mod X плагин может иметь четыре главных типа функций. Первый - &amp;quot;public&amp;quot; функция. Это означает, что функция доступна для AMX Mod X &amp;quot;движка&amp;quot;. Второй тип - &amp;quot;native&amp;quot; функция, которая располагается в модуле или в ядре AMX Mod X. Третий тип - обычные пользовательские функции, которые прописываются без каких-либо специальных атрибутов. Четвертый тип - это &amp;quot;forward&amp;quot; функция, которая вызывается каждый раз, когда происходит какое-то определенное событие (forward функция также является и public). AMX Mod X плагин должен начинаться с функции, инициализирующей плагин:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pawn&amp;gt;//Это делает возможным использование функций AMX Mod X ядра&lt;br /&gt;
//Это &amp;quot;влаживает&amp;quot; native &amp;quot;определители&amp;quot;(заголовки) из includes\amxmodx.inc&lt;br /&gt;
#include &amp;lt;amxmodx&amp;gt;&lt;br /&gt;
&lt;br /&gt;
//Объявляем три строковых переменных&lt;br /&gt;
new PLUGIN[]=&amp;quot;AMXX Demo&amp;quot;&lt;br /&gt;
new AUTHOR[]=&amp;quot;BAILOPAN&amp;quot;&lt;br /&gt;
new VERSION[]=&amp;quot;1.00&amp;quot;&lt;br /&gt;
&lt;br /&gt;
//Это public функция.&lt;br /&gt;
//Необходимо инициализировать ваш скрипт для AMX Mod X.&lt;br /&gt;
//Эта функция не содержит параметров, вызывается сразу после загрузки карты.&lt;br /&gt;
public plugin_init()&lt;br /&gt;
{&lt;br /&gt;
     //Это функция, которая &amp;quot;берет&amp;quot; три строки.&lt;br /&gt;
     //Она регистрирует ваш плагин в AMX Mod X и присваивает некоторую основную информацию.&lt;br /&gt;
     register_plugin(PLUGIN, VERSION, AUTHOR)&lt;br /&gt;
}&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Попробуйте откомпилировать скрипт, приведенный выше. Он будет очень мал, т.к. не делает ничего особенного. Однако, если вы загрузите этот скрипт и напишите &amp;quot;amxx plugins&amp;quot; в серверной консоли, вы должны увидеть новую запись в листе плагинов.&lt;br /&gt;
&lt;br /&gt;
=Создание админ-комманд=&lt;br /&gt;
&lt;br /&gt;
AMX Mod X предоставляет возможность простого добавления консольных админ-команд. Каждая команда &amp;quot;регистрируется&amp;quot; как консольная команда. При регистрировании команды вы должны указать четыре свойства: имя консольной команды; функцию, которая будет вызываться при использовании команды; уровень доступа, необходимый для использования команды; короткое описание команды.&lt;br /&gt;
&lt;br /&gt;
Для демонстрации давайте сделаем плагин, который позволит вам изменить количество жизней игрока на сервере с помощью команды &amp;quot;amx_hp&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Для начала нам понадобится сделать две вещи: первая - нам нужно зарегистрировать команду в консоли. Т.к. мы &amp;quot;привязываем&amp;quot; команду к public функции, мы должны убедиться, что функция существует.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pawn&amp;gt;#include &amp;lt;amxmodx&amp;gt;&lt;br /&gt;
#include &amp;lt;amxmisc&amp;gt; //Это содержит некоторые полезные функции&lt;br /&gt;
#include &amp;lt;fun&amp;gt;     //Это содержит функцию для изменения жизней&lt;br /&gt;
&lt;br /&gt;
new PLUGIN[]=&amp;quot;Change Health&amp;quot;&lt;br /&gt;
new AUTHOR[]=&amp;quot;BAILOPAN&amp;quot;&lt;br /&gt;
new VERSION[]=&amp;quot;1.00&amp;quot;&lt;br /&gt;
&lt;br /&gt;
public plugin_init()&lt;br /&gt;
{&lt;br /&gt;
     register_plugin(PLUGIN, VERSION, AUTHOR)&lt;br /&gt;
     register_concmd(&amp;quot;amx_hp&amp;quot;, &amp;quot;cmd_hp&amp;quot;, ADMIN_SLAY, &amp;quot;&amp;lt;target&amp;gt; &amp;quot;)&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
public cmd_hp(id, level, cid)&lt;br /&gt;
{&lt;br /&gt;
     return PLUGIN_HANDLED&lt;br /&gt;
}&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Первая новая функция - это &amp;quot;register_concmd&amp;quot;, которая берет четыре параметра. Первый - название команды, которую необходимо набрать в консоли. Второй - название public функции, которая будет контролировать команду. Третий - уровень доступа, который необходим для вашей команды. И последний - строка, описывающая, как использовать вашу команду.&lt;br /&gt;
&lt;br /&gt;
Далее мы создаем public функцию для контроля amx_hp команды. Обратите внимание, что мы даем ей три параметра. Эти параметры будут содержать специальные данные, когда команду будет использована. id будет содержать индекс(номер) игрока, который запустил команду, level будет содержать уровень доступа команды (вы должны сами осуществить проверку уровня доступа), cid будет содержать внутренний индекс(номер) команды.&lt;br /&gt;
&lt;br /&gt;
Также обратите внимание на PLUGIN_HANDLED. Существует два главных return значения. PLUGIN_CONTINUE как бы означает &amp;quot;продолжить с нормальным выполнением&amp;quot;, PLUGIN_HANDLED означает &amp;quot;блокировать дальнейшее выполнение&amp;quot;. Разница сложно уловима, но важна. К примеру, если вы делаете &amp;quot;привязку&amp;quot; к своей команде, вы не должны возвращать PLUGIN_CONTINUE. Но если вы возвращаете PLUGIN_HANDLED, при привязанной &amp;quot;say&amp;quot; команде, это полностью заблокирует say-текст. Вы должны быть внимательны с тем, что вы выбираете для возврата в различных ситуациях. Однако, многие вещи &amp;quot;безразличны&amp;quot; к возвращаемому значению. Например, таймеры(tasks), события(events) и другие вещи, с которыми вы встретитесь позже.&lt;br /&gt;
&lt;br /&gt;
Итак, как же мы убедимся, что данный пользователь - это админ, который имеет ADMIN_SLAY уровень доступа?&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pawn&amp;gt;public cmd_hp(id, level, cid)&lt;br /&gt;
{&lt;br /&gt;
     if (!cmd_access(id, level, cid, 3))&lt;br /&gt;
        return PLUGIN_HANDLED&lt;br /&gt;
     return PLUGIN_HANDLED&lt;br /&gt;
}&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
cmd_access() функция проверит информацию команды (пользователя, уровень доступа и индекс) и проверяет две вещи: что пользователь имеет доступ, и что было дано минимальное количество параметров. Мы указали три, потому что команда будет выглядеть как: amx_hp &amp;lt;target&amp;gt; &amp;lt;amount&amp;gt;, и в действительности сама команда также считается как параметр. Если cmd_access откажет, мы сразу прекращаем выполнение команды.&lt;br /&gt;
&lt;br /&gt;
Следующее, что нужно решить: мы должны взять два параметра и преобразовать их. &amp;quot;amount&amp;quot; параметр прост - мы просто конвертируем его из строки в число. Другой же параметр будет по сложнее, т.к. мы хотим иметь возможность указывать на три различных типа людей:&lt;br /&gt;
&lt;br /&gt;
* @CT или @T - (контр-террористы или террористы)&lt;br /&gt;
* @ALL - (все)&lt;br /&gt;
* &amp;lt;target&amp;gt; - частичное имя игрока&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pawn&amp;gt;public cmd_hp(id, level, cid)&lt;br /&gt;
{&lt;br /&gt;
     if (!cmd_access(id, level, cid, 3))&lt;br /&gt;
        return PLUGIN_HANDLED&lt;br /&gt;
&lt;br /&gt;
     new Arg1[24]&lt;br /&gt;
     new Arg2[4]&lt;br /&gt;
&lt;br /&gt;
     //Берем аргументы команды из консоли&lt;br /&gt;
     read_argv(1, Arg1, 23)&lt;br /&gt;
     read_argv(2, Arg2, 3)&lt;br /&gt;
&lt;br /&gt;
     //Конвертируем количество жизней из строки в число&lt;br /&gt;
     new Health = str_to_num(Arg2)&lt;br /&gt;
&lt;br /&gt;
     //Является ли первый символ @ символом?&lt;br /&gt;
     if (Arg1[0] == '@')&lt;br /&gt;
     {&lt;br /&gt;
          new Team = 0&lt;br /&gt;
          //Проверяем, какая команда была указана.&lt;br /&gt;
          //Заметьте, что мы начинаем с [1]&lt;br /&gt;
          // это означает, что @ не входит&lt;br /&gt;
          if (equali(Arg1[1], &amp;quot;CT&amp;quot;))&lt;br /&gt;
          {&lt;br /&gt;
               Team = 2&lt;br /&gt;
          } else if (equali(Arg1[1], &amp;quot;T&amp;quot;)) {&lt;br /&gt;
               Team = 1&lt;br /&gt;
          }&lt;br /&gt;
          new players[32], num&lt;br /&gt;
          //Эта функция заполнит players[32] переменную&lt;br /&gt;
          // верными индексами игроков. num будет содержать количество&lt;br /&gt;
          // игроков, которые действительны.&lt;br /&gt;
          get_players(players, num)&lt;br /&gt;
          new i&lt;br /&gt;
          for (i=0; i&amp;lt;num; i++)&lt;br /&gt;
          {&lt;br /&gt;
               if (!Team)&lt;br /&gt;
               {&lt;br /&gt;
                    //Устанавливаем количество жизней этого игрока&lt;br /&gt;
                    set_user_health(players[i], Health)&lt;br /&gt;
               } else {&lt;br /&gt;
                    if (get_user_team(players[i]) == Team)&lt;br /&gt;
                    {&lt;br /&gt;
                         set_user_health(players[i], Health)&lt;br /&gt;
                    }&lt;br /&gt;
               }&lt;br /&gt;
          }&lt;br /&gt;
     } else {&lt;br /&gt;
          //находит индекс игрока, который соответствует части указанного имени&lt;br /&gt;
          //1 означает, что игрок с &amp;quot;иммунитетом&amp;quot; не будет учтен&lt;br /&gt;
          new player = cmd_target(id, Arg1, 1)&lt;br /&gt;
          if (!player)&lt;br /&gt;
          {&lt;br /&gt;
               //это напечатает сообщение пользователю, который запускал команду&lt;br /&gt;
               //Формат для этой команды называется &amp;quot;format()&amp;quot; стиль,&lt;br /&gt;
               // где первая строка форматирует сообщение соответственно&lt;br /&gt;
               // любому количеству следующих параметров:&lt;br /&gt;
               //  %s означает строка&lt;br /&gt;
               //  %d или %i означает целое число&lt;br /&gt;
               //  %f означает дробное число&lt;br /&gt;
               // поэтому &amp;quot;Privet %s, mne %d let&amp;quot; будет требовать&lt;br /&gt;
               //  чтобы следовали параметры строки и целого числа&lt;br /&gt;
               console_print(id, &amp;quot;Izvinite, igrok %s ne mojet bit naiden ili ispol'zovan v kachestve ob'ekta!&amp;quot;, Arg1)&lt;br /&gt;
               return PLUGIN_HANDLED&lt;br /&gt;
          } else {&lt;br /&gt;
               set_user_health(player, Health)&lt;br /&gt;
          }&lt;br /&gt;
     }&lt;br /&gt;
&lt;br /&gt;
     return PLUGIN_HANDLED&lt;br /&gt;
}&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Таким образом, наша финальная версия amx_hp плагина будет выглядеть следующим образом:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pawn&amp;gt;#include &amp;lt;amxmodx&amp;gt;&lt;br /&gt;
#include &amp;lt;fun&amp;gt;&lt;br /&gt;
&lt;br /&gt;
new PLUGIN[]=&amp;quot;Change Health&amp;quot;&lt;br /&gt;
new AUTHOR[]=&amp;quot;BAILOPAN&amp;quot;&lt;br /&gt;
new VERSION[]=&amp;quot;1.00&amp;quot;&lt;br /&gt;
&lt;br /&gt;
public plugin_init()&lt;br /&gt;
{&lt;br /&gt;
     register_plugin(PLUGIN, VERSION, AUTHOR)&lt;br /&gt;
     register_concmd(&amp;quot;amx_hp&amp;quot;, &amp;quot;cmd_hp&amp;quot;, ADMIN_SLAY, &amp;quot;&amp;lt;target&amp;gt; &amp;lt;hp&amp;gt;&amp;quot;)&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
public cmd_hp(id, level, cid)&lt;br /&gt;
{&lt;br /&gt;
     if (!cmd_access(id, level, cid, 3))&lt;br /&gt;
        return PLUGIN_HANDLED&lt;br /&gt;
&lt;br /&gt;
     new Arg1[24]&lt;br /&gt;
     new Arg2[4]&lt;br /&gt;
&lt;br /&gt;
     //Берем аргументы команды из консоли&lt;br /&gt;
     read_argv(1, Arg1, 23)&lt;br /&gt;
     read_argv(2, Arg2, 3)&lt;br /&gt;
&lt;br /&gt;
     //Конвертируем количество жизней из строки в число&lt;br /&gt;
     new Health = str_to_num(Arg2)&lt;br /&gt;
&lt;br /&gt;
     //Является ли первый символ @ символом?&lt;br /&gt;
     if (Arg1[0] == '@')&lt;br /&gt;
     {&lt;br /&gt;
          new Team = 0&lt;br /&gt;
          if (equali(Arg1[1], &amp;quot;CT&amp;quot;))&lt;br /&gt;
          {&lt;br /&gt;
               Team = 2&lt;br /&gt;
          } else if (equali(Arg1[1], &amp;quot;T&amp;quot;)) {&lt;br /&gt;
               Team = 1&lt;br /&gt;
          }&lt;br /&gt;
          new players[32], num&lt;br /&gt;
          get_players(players, num)&lt;br /&gt;
          new i&lt;br /&gt;
          for (i=0; i&amp;lt;num; i++)&lt;br /&gt;
          {&lt;br /&gt;
               if (!Team)&lt;br /&gt;
               {&lt;br /&gt;
                    set_user_health(players[i], Health)&lt;br /&gt;
               } else {&lt;br /&gt;
                    if (get_user_team(players[i]) == Team)&lt;br /&gt;
                    {&lt;br /&gt;
                         set_user_health(players[i], Health)&lt;br /&gt;
                    }&lt;br /&gt;
               }&lt;br /&gt;
          }&lt;br /&gt;
     } else {&lt;br /&gt;
          new player = cmd_target(id, Arg1, 1)&lt;br /&gt;
          if (!player)&lt;br /&gt;
          {&lt;br /&gt;
               console_print(id, &amp;quot;Izvinite, igrok %s ne mojet bit naiden ili ispol'zovan v kachestve ob'ekta!&amp;quot;, Arg1)&lt;br /&gt;
               return PLUGIN_HANDLED&lt;br /&gt;
          } else {&lt;br /&gt;
               set_user_health(player, Health)&lt;br /&gt;
          }&lt;br /&gt;
     }&lt;br /&gt;
&lt;br /&gt;
     return PLUGIN_HANDLED&lt;br /&gt;
}&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Консольные переменные=&lt;br /&gt;
&lt;br /&gt;
CVar - это консольная переменная. Существуют клиентские и серверные CVar'ы. К примеру, &amp;quot;mp_startmoney&amp;quot; - Counter-Strike серверная CVar, содержащая число, указывающее, сколько денег дается игрокам, когда они заходят на сервер. Вы можете создавать свои серверные CVar'ы путем их регистрирования. Давайте создадим свою amx_startmoney CVar.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pawn&amp;gt;#include &amp;lt;amxmodx&amp;gt;&lt;br /&gt;
#include &amp;lt;cstrike&amp;gt;&lt;br /&gt;
&lt;br /&gt;
public plugin_init()&lt;br /&gt;
{&lt;br /&gt;
     register_plugin(&amp;quot;CVAR Test&amp;quot;, &amp;quot;1.0&amp;quot;, &amp;quot;BAILOPAN&amp;quot;)&lt;br /&gt;
     //регистрируем amx_startmoney CVar&lt;br /&gt;
     // и устанавливаем для нее значение по умолчанию 500&lt;br /&gt;
     register_cvar(&amp;quot;amx_startmoney&amp;quot;, &amp;quot;500&amp;quot;)&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//это вызывается, когда клиент заходит непосредственно на сервер&lt;br /&gt;
public client_putinserver(id)&lt;br /&gt;
{&lt;br /&gt;
     if (get_cvar_num(&amp;quot;amx_startmoney&amp;quot;) &amp;gt; 0)&lt;br /&gt;
     {&lt;br /&gt;
          cs_set_user_money(id, get_cvar_num(&amp;quot;amx_startmoney&amp;quot;))&lt;br /&gt;
     } else {&lt;br /&gt;
          cs_set_user_money(id, get_cvar_num(&amp;quot;mp_startmoney&amp;quot;))&lt;br /&gt;
     }&lt;br /&gt;
}&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Вы можете устанавливать дробные, целые или строковые значения как для своих CVar, так и для любых других.&lt;br /&gt;
&lt;br /&gt;
=Дополнительно=&lt;br /&gt;
&lt;br /&gt;
Чтобы узнать больше о скриптинге для AMX Mod X вам следует взглянуть на native прототипы в описаниях функий или в *.inc файлах (&amp;quot;инклудах&amp;quot;). Инклуды по большому счету придерживаются двух форматов. Они имеют название в соответствии с модулем или определенным предназначением. _const добавляется, если они содержат предопределенные числа или списки. _stocks добавляется, если они содержат &amp;quot;помогающие&amp;quot; или полезные &amp;quot;функции-обертки&amp;quot;. Помните, что stocks компилируются только, если вы используете их, поэтому без опаски можно &amp;quot;включать&amp;quot; файлы, содержащие большое количество stocks.&lt;br /&gt;
&lt;br /&gt;
Вы также можете посетить [http://amxmodx.ucoz.ru/forum/ Форум] и задать вопросы или найти больше информации.&lt;/div&gt;</summary>
		<author><name>VEN</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.alliedmods.net/index.php?title=Ru:Fundamental_Basics_of_AMX_Mod_X_Scripting&amp;diff=3697</id>
		<title>Ru:Fundamental Basics of AMX Mod X Scripting</title>
		<link rel="alternate" type="text/html" href="https://wiki.alliedmods.net/index.php?title=Ru:Fundamental_Basics_of_AMX_Mod_X_Scripting&amp;diff=3697"/>
		<updated>2006-12-31T21:50:12Z</updated>

		<summary type="html">&lt;p&gt;VEN: Complete arcticle&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Ru:Scripting (AMX Mod X)]]&lt;br /&gt;
=Фундаментальные основы AMX Mod X скриптинга=&lt;br /&gt;
&lt;br /&gt;
Данная статья не дает готовых &amp;quot;рецептов&amp;quot; по скриптингу, но раскрывает фундаментальные основы AMX Mod X скриптинга. Это и типы данных, и прототипы функций и многое другое, без знания чего невозможно писать AMX Mod X плагины.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Введение=&lt;br /&gt;
&lt;br /&gt;
Прежде чем начинать писать AMX Mod X плагины, в первую очередь необходимо разобраться в основах Pawn.&lt;br /&gt;
&amp;lt;BR&amp;gt;&amp;lt;BR&amp;gt;Pawn – это скриптовый язык, созданный компанией &amp;quot;ITB CompuPhase&amp;quot;. Ранее Pawn назывался Small, но с версии 3.0 языку было решено дать более характерное название. Т.к. &amp;quot;pawn&amp;quot; в переводе с английского языка означает &amp;quot;пешка&amp;quot;, можно догадаться, что основной характерной чертой данного языка является простота.&lt;br /&gt;
&amp;lt;BR&amp;gt;&amp;lt;BR&amp;gt;Если вы владеете английским языком, рекомендуется ознакомиться с полным руководством по Pawn, [http://www.compuphase.com/pawn/pawn-lang.pdf Pawn The Language].&lt;br /&gt;
&amp;lt;BR&amp;gt;&amp;lt;BR&amp;gt;Код плагина представляет собой текст (как правило, заключенный в файл типа *.sma), включающий множество элементов языка: комментарии, переменные, функции и др. Поэтому для оформления кода потребуется текстовый редактор. Из простейших можно выделить, например, Microsoft Notepad. Также существует AMXX-Studio – специализированый редактор для AMX Mod X плагинов, позволяющий максимально эффективно работать в соответствующей среде. Последняя версия данного редактора может быть найдена в секции [http://www.amxmodx.org/downloads.php downloads] официального сайта AMX Mod X.&lt;br /&gt;
&amp;lt;BR&amp;gt;&amp;lt;BR&amp;gt;Чтобы позволить AMX Mod X выполнять код, файл с кодом необходимо откомпилировать с помощью компилятора AMXXPC (AMX Mod X Pawn Compiler). Операция компилирования преобразовывает набор текстовых инструкций в последовательность инструкций абстрактной машины (от англ. abstract machine), она же AMX, а также интерпретатор (от англ. interpreter).&lt;br /&gt;
&amp;lt;BR&amp;gt;&amp;lt;BR&amp;gt;Откомпилированый код обычно помещается в файл типа *.amxx, имеющий двоичный формат. Такой файл называют AMX Mod X плагином (от англ. plugin).&lt;br /&gt;
&amp;lt;BR&amp;gt;&amp;lt;BR&amp;gt;Для ознакомления с инструкциями по компилированию и установке плагинов смотрите: [[Ru:Compiling Plugins (AMX Mod X)]] и [[Ru:Configuring AMX Mod X]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Pawn=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Уровни кода==&lt;br /&gt;
&lt;br /&gt;
В основе любого кода лежит уровневая структура. Причиной этому является нелинейность инструкций.&lt;br /&gt;
&amp;lt;BR&amp;gt;&amp;lt;BR&amp;gt;Т.н. &amp;quot;нулевой уровень&amp;quot; или &amp;quot;глобальное пространство&amp;quot; является неотъемлемой частью любого кода. Как только вы приступаете к написанию нового кода, вы оказываетесь в его глобальном пространстве. Оно же в свою очередь будет включать в себя пространства с более низкими уровнями.&lt;br /&gt;
&amp;lt;BR&amp;gt;&amp;lt;BR&amp;gt;Обычно глобальное пространство содержит всю общую информацию, которая может потребоваться в ходе выполнения кода пространствам более низкого уровня. Примером такой информации могут служить общие константы, переменные, списки, макросы.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Комментарии==&lt;br /&gt;
&lt;br /&gt;
Комментарий – это, как правило, текст информативного характера. Например, чтобы дать описание плагину можно использовать многострочный комментарий:&amp;lt;pawn&amp;gt;/* здесь вы помещаете&lt;br /&gt;
необходимую информацию */&amp;lt;/pawn&amp;gt;Как видно из примера, многострочный комментарий ограничивается символами /* и */, отмечающими начало и конец комментария соответственно. Недопустимо открывать последующий комментарий, не закрыв при этом предыдущий.&lt;br /&gt;
&amp;lt;BR&amp;gt;&amp;lt;BR&amp;gt;Примером однострочного комментария может быть:&amp;lt;pawn&amp;gt;/* ваш комментарий */&amp;lt;/pawn&amp;gt;Хотя, можно упростить конструкцию:&amp;lt;pawn&amp;gt;// ваш комментарий&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&amp;lt;BR&amp;gt;&amp;lt;BR&amp;gt;Как видно из последнего примера, комментарий начинается с двойного симовола обратного слеша //. Заканчивается такой комментарий вместе с концом текущей строки, поэтому не требует закрывающих символов. Такие комментарии могут быть только однострочными. Не обязательно комментарий должен начинаться с новой строки. Например, /* ... */ комментарий может быть расположен непосредственно в самом коде.&lt;br /&gt;
&amp;lt;BR&amp;gt;&amp;lt;BR&amp;gt;Т.к. комментарии не считаются кодом, они исключаются из обработки. Данная особенность позволяет при необходимости исключать части кода путем комментирования, что может быть использовано, например, при отладке кода.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Типы данных==&lt;br /&gt;
&lt;br /&gt;
Технически основой всех типов данных в Pawn является т.н. &amp;quot;cell&amp;quot; – ячейка памяти, состоящая из последовательности определенного количества бит. Количество бит в такой ячейке постоянно для определенной платформы. Так для 32х битной платформы оно будет составлять 32, а для 64х битной – 64.&lt;br /&gt;
&amp;lt;BR&amp;gt;&amp;lt;BR&amp;gt;Т.к. технически все данные не имеют отличия, для обозначения их типа применяются т.н. &amp;quot;тэги&amp;quot;. Если при создании переменной тэг не указан, то переменная является целым числом:&amp;lt;pawn&amp;gt;new ivar // создана целочисленная переменная с именем &amp;quot;ivar&amp;quot;&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&amp;lt;BR&amp;gt;&amp;lt;BR&amp;gt;Если при создании переменной ей не присваивается какое-либо конкретное значение, то переменная будет равна нулю. Таким образом, вышеприведенный пример технически соответствует:&amp;lt;pawn&amp;gt;new ivar = 0&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&amp;lt;BR&amp;gt;&amp;lt;BR&amp;gt;Чтобы создать дробную переменную, необходимо использовать тэг &amp;quot;Float&amp;quot;:&amp;lt;pawn&amp;gt;new Float:fvar&amp;lt;/pawn&amp;gt;Переменная fvar также будет равна нулю, но ввиду соответствия типу данных это будет 0.0, т.е. технический аналог примера будет:&amp;lt;pawn&amp;gt;new Float:fvar = 0.0&amp;lt;/pawn&amp;gt;Таким образом, мы обеспечиваем типовое соответствие &amp;quot;левой&amp;quot; и &amp;quot;правой&amp;quot; части.&lt;br /&gt;
&amp;lt;BR&amp;gt;&amp;lt;BR&amp;gt;Одним из особых типов данных является т.н. &amp;quot;булевые&amp;quot; переменные, которые технически могут иметь только два значение, логически интерпретируемые как &amp;quot;истина&amp;quot; и &amp;quot;ложь&amp;quot; (true и false). Чтобы создать булевую переменную, необходимо использовать тэг &amp;quot;bool&amp;quot;:&amp;lt;pawn&amp;gt;new bool:bvar&amp;lt;/pawn&amp;gt;Т.к. численно false является нулем, то технический аналог примера будет выглядеть как:&amp;lt;pawn&amp;gt;new bool:bvar = false&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&amp;lt;BR&amp;gt;&amp;lt;BR&amp;gt;Примечание: чтобы запретить изменение значения переменной, необходимо использовать атрибут const, например:&amp;lt;pawn&amp;gt;new const var = 1&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&amp;lt;BR&amp;gt;&amp;lt;BR&amp;gt;Pawn также позволяет создавать массивы данных, представляющие собой набор значений определенного типа. Так примером простого массива, содержащего два целочисленных значения будет:&amp;lt;pawn&amp;gt;new array[2]&amp;lt;/pawn&amp;gt;Технически данный пример выглядит следующим образом:&amp;lt;pawn&amp;gt;new array[2] = {0, 0}&amp;lt;/pawn&amp;gt;Технические аналоги для Float и bool массивов выглядят как:&amp;lt;pawn&amp;gt;new Float:farray[2] = {0.0, 0.0}&lt;br /&gt;
new bool:barray[2] = {false, false}&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&amp;lt;BR&amp;gt;&amp;lt;BR&amp;gt;Также существует особый тип данных, называемый &amp;quot;строка&amp;quot;, технически являющийся массивом целых чисел. Каждое целое число в строковом массиве соответствует числовому ASCII коду символа. Например, код 32 соответствует пробелу. Таким образом,&amp;lt;pawn&amp;gt;new string[3] = {'h', 'i', '^0'}&amp;lt;/pawn&amp;gt;является символьным представлением строкового массива&amp;lt;pawn&amp;gt;new string[3] = &amp;quot;hi&amp;quot;&amp;lt;/pawn&amp;gt;Обратите внимание на наличие специального символа '^0'. Это обязательный элемент строки, указывающий на ее окончание (численно равен нулю).&lt;br /&gt;
&amp;lt;BR&amp;gt;&amp;lt;BR&amp;gt;Также Pawn поддерживает многоуровневые массивы, например:&amp;lt;pawn&amp;gt;new multiarray[2][2]&amp;lt;/pawn&amp;gt;Технически такой массив равен:&amp;lt;pawn&amp;gt;new multiarray[2][2] = {{0, 0}, {0, 0}}&amp;lt;/pawn&amp;gt;Максимальное количество уровней массива равно 3.&lt;br /&gt;
&amp;lt;BR&amp;gt;&amp;lt;BR&amp;gt;Для любого явно заданного массива его размер может не указываться, например:&amp;lt;pawn&amp;gt;new array[] = {1, 2, 3} // размер массива равен 3&lt;br /&gt;
new string[] = &amp;quot;hello&amp;quot; // размер массива равен 6, т.к. помимо 5 символов также включает в себя символ окончания строки '^0'&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&amp;lt;BR&amp;gt;&amp;lt;BR&amp;gt;Чтобы инициализировать все элементы массива каким-либо конкретным значением, можно использовать символ троеточия ..., например:&amp;lt;pawn&amp;gt;new bool:is_active[16] = {true, ...}&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Прекомпиляция==&lt;br /&gt;
&lt;br /&gt;
На начальной стадии компилирования Pawn компилятор обрабатывает т.н. &amp;quot;статическую&amp;quot; часть кода. К ней можно отнести директивы, глобальные константы, списки и др.&lt;br /&gt;
&amp;lt;BR&amp;gt;&amp;lt;BR&amp;gt;Директивы являются специальными инструкциями компилятора. Одна из самых широко используемых директив – это &amp;quot;include&amp;quot;. Пример ее использования может быть следующим:&amp;lt;pawn&amp;gt;#include &amp;lt;amxmodx&amp;gt;&amp;lt;/pawn&amp;gt;Директива как бы &amp;quot;влаживает&amp;quot; содержимое указанного файла в текущую позицию. В данном случае указывается файл amxmodx.inc, который обычно расположен в amxmodx\scripting\include директории, и декларирует основные AMX Mod X функции.&lt;br /&gt;
&amp;lt;BR&amp;gt;&amp;lt;BR&amp;gt;Другая директива, позволяющая конструировать т.н. &amp;quot;макросы&amp;quot;, имеет название &amp;quot;define&amp;quot;. Макрос удобен тем, что способен заменять простые блоки кода. Один из простейших макросов – это т.н. &amp;quot;макроконстанта&amp;quot;, например:&amp;lt;pawn&amp;gt;#define VALUE 1&amp;lt;/pawn&amp;gt;В названиях макросов принято использовать буквы только верхнего регистра.&lt;br /&gt;
&amp;lt;BR&amp;gt;&amp;lt;BR&amp;gt;Нетехническим аналогом вышеприведенной макроконстанты является т.н. &amp;quot;глобальная константа&amp;quot;:&amp;lt;pawn&amp;gt;stock const value = 1&amp;lt;/pawn&amp;gt;stock атрибут позволяет не включать константу в плагин, если она не используется в коде.&lt;br /&gt;
&amp;lt;BR&amp;gt;&amp;lt;BR&amp;gt;Т.н. &amp;quot;список&amp;quot; – это набор нумерованных элементов определенного типа. Например:&amp;lt;pawn&amp;gt;enum {zero, one, two} // соответствует 0, 1, 2&lt;br /&gt;
enum {elem1 = 1, elem2, elem3} // соответствует 1, 2, 3&lt;br /&gt;
enum steeps {steep1 = 10, steep2 = 20} // соответствует 10, 20&amp;lt;/pawn&amp;gt;Тип списка (в вышеприведенном примере типом списка является steeps) – необязательный атрибут, по сути является тэгом, указывающим тип элементов, поэтому следующий пример является верным:&amp;lt;pawn&amp;gt;new steeps:steep = steep2&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Функции==&lt;br /&gt;
&lt;br /&gt;
Существует несколько типов функций.&lt;br /&gt;
&amp;lt;BR&amp;gt;&amp;lt;BR&amp;gt;Т.н. &amp;quot;обычная&amp;quot; – обычно т.н. &amp;quot;вспомогательная&amp;quot; функция; может быть вызвана непосредственно только другими функциями данного плагина; не может быть вызвана непосредственно AMX Mod X либо его модулями.&lt;br /&gt;
&amp;lt;BR&amp;gt;&amp;lt;BR&amp;gt;public – обычно функция, вызываемая непосредственно AMX Mod X либо его модулями; может быть также вызвана непосредственно другими функциями данного плагина.&lt;br /&gt;
&amp;lt;BR&amp;gt;&amp;lt;BR&amp;gt;native – функция, имеющая т.н. &amp;quot;глобальный&amp;quot; характер; может быть вызвана AMX Mod X плагинами.&lt;br /&gt;
&amp;lt;BR&amp;gt;&amp;lt;BR&amp;gt;forward - функция, имеющая т.н. &amp;quot;глобальный&amp;quot; характер; при наличии в плагине public функции с соответствующим именем функция будет вызываться AMX Mod X или его модулями.&lt;br /&gt;
&amp;lt;BR&amp;gt;&amp;lt;BR&amp;gt;stock – обычно функция, состоящая в т.н. &amp;quot;библиотеке&amp;quot; функций; не включается в плагин, если не используется в коде.&lt;br /&gt;
&amp;lt;BR&amp;gt;&amp;lt;BR&amp;gt;В общем виде заголовок, а также прототип любой функции условно выглядит следующим образом (символами треуголных скобок &amp;lt;&amp;gt; ограничены обязательные элементы, символами квадратных скобок [] ограничены необязательные элементы, которые могут быть опущены в определенных случаях):&amp;lt;pawn&amp;gt;[type] [tag]:&amp;lt;name&amp;gt;([[param1], [param2], ..., [paramN]])&amp;lt;/pawn&amp;gt;, где&lt;br /&gt;
&amp;lt;BR&amp;gt;&amp;lt;BR&amp;gt;[type] – соответствует типу функции (для обычной функции тип не указывается).&lt;br /&gt;
&amp;lt;BR&amp;gt;&amp;lt;BR&amp;gt;[tag] – соответствует типу данных возвращаемого результата функции.&lt;br /&gt;
&amp;lt;BR&amp;gt;&amp;lt;BR&amp;gt;&amp;lt;name&amp;gt; - соответствует имени функции&lt;br /&gt;
&amp;lt;BR&amp;gt;&amp;lt;BR&amp;gt;([...]) – соответствует набору параметров функции; количество параметров может быть от нуля (параметры отсутствуют) до N, где N – целое положительное число.&lt;br /&gt;
&amp;lt;BR&amp;gt;&amp;lt;BR&amp;gt;За заголовком функции следует т.н. &amp;quot;тело&amp;quot; функции, ограниченное символами фигурных скобок {}. Таким образом, примером простейшей функции является:&amp;lt;pawn&amp;gt;function()&lt;br /&gt;
{&lt;br /&gt;
// это пустое тело функции, имеющей имя &amp;quot;function&amp;quot;&lt;br /&gt;
}&amp;lt;/pawn&amp;gt;Технически данная функция не выполняет никаких действий, т.к. в своем теле содержит только комментарий. Обратите внимание, что комментарий как бы сдвинут вправо относительно заголовка функции. В данном случае функция инициализирует новый уровень кода. Каждый уровень кода в целях удобочитаемости принято оформлять с соответствующим отступом. Чем более низкий уровень кода, тем больший отступ он будет иметь. Обычно в качестве отступа принято использовать символ табуляции, т.к. многие редакторы позволяют задавать видимую ширину табулированого отступа.&lt;br /&gt;
&amp;lt;BR&amp;gt;&amp;lt;BR&amp;gt;Существует два способа передачи параметров функции. Т.н. &amp;quot;основной&amp;quot; способ заключается в том, что при передаче данные дублируются путем создания соответствующих копий в памяти. Т.н. способ передачи параметров &amp;quot;по ссылке&amp;quot; (от англ. by reference) состоит в том, что данные передаются &amp;quot;как есть&amp;quot;, т.е. их дублирования не осуществляется, что позволяет функции изменять оригинальные данные непосредственно.&lt;br /&gt;
&amp;lt;BR&amp;gt;&amp;lt;BR&amp;gt;Для параметров функции все типы массивов, в том числе и строковые, могут передаваться исключительно по ссылке. Передача остальных данных по умолчанию осуществляется основным способом. Чтобы произвести передачу параметра функции по ссылке, в заголовке функции перед параметром необходимо добавлять символ амперсанда &amp;amp;, например:&amp;lt;pawn&amp;gt;function(&amp;amp;Float:fparam)&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&amp;lt;BR&amp;gt;&amp;lt;BR&amp;gt;Параметры функции могут иметь значения по умолчанию, например:&amp;lt;pawn&amp;gt;function(param = 1)&amp;lt;/pawn&amp;gt;Таким образом, чтобы вызвать данную функцию с параметром по умолчанию, параметр можно не указывать:&amp;lt;pawn&amp;gt;function()&amp;lt;/pawn&amp;gt;Также в таких случаях можно использовать символ подчеркивания _:&amp;lt;pawn&amp;gt;function(_)&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&amp;lt;BR&amp;gt;&amp;lt;BR&amp;gt;Чтобы запретить функции изменение передаваемых данных, необходимо использовать атрибут const, например:&amp;lt;pawn&amp;gt;function(const array[])&amp;lt;/pawn&amp;gt;Таким образом, можно утверждать, что в данном случае целью функции не является изменение данных массива, чего нельзя утверждать о следующей функции:&amp;lt;pawn&amp;gt;swaparray(array[2])&amp;lt;/pawn&amp;gt;Исходя из названия функции, типа параметра, его размера и отсутствия запрета на изменение, можно сделать предположение о том, что данная функция меняет элементы массива местами.&lt;br /&gt;
&amp;lt;BR&amp;gt;&amp;lt;BR&amp;gt;Важным свойством функции является способность возвращать результат, значение которого имеет определенный тип, например:&amp;lt;pawn&amp;gt;bool:is_true()&lt;br /&gt;
{&lt;br /&gt;
return true&lt;br /&gt;
}&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&amp;lt;BR&amp;gt;&amp;lt;BR&amp;gt;Чтобы указать допустимые типы параметра функции, в заголовке функции перед параметром необходимо добавлять конструкцию, которая условно выглядит как {tag1, tag2, ..., tagN}:, где символы фигурных скобок {} ограничивают набор тэгов, количество которых может быть от одного до N, где Т – целое положительное число, например:&amp;lt;pawn&amp;gt;get_integer({bool, _}:value)&lt;br /&gt;
{&lt;br /&gt;
	return _:value // возвращается значение типа &amp;quot;целое число&amp;quot;&lt;br /&gt;
}&amp;lt;/pawn&amp;gt;Смысл вышеприведенной функции заключается в том, что она принимает параметр как типа &amp;quot;целое число&amp;quot;, так и булевого типа, в результате возвращая значение параметра в числовой форме.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=AMX Mod X=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Функции==&lt;br /&gt;
&lt;br /&gt;
При написании AMX Mod X плагинов важно уметь понимать назначение и принцип действия AMX Mod X функций.&lt;br /&gt;
&amp;lt;BR&amp;gt;&amp;lt;BR&amp;gt;Прототипы функций, а также используемые ими константы и списки заключены в файлы типа *.inc, т.н. &amp;quot;инклуды&amp;quot; (от англ. include), которые обычно расположены в amxmodx\scripting\include директории.&lt;br /&gt;
&amp;lt;BR&amp;gt;&amp;lt;BR&amp;gt;Иногда одни инклуды включают в себя другие. Так основные AMX Mod X функции (т.н. функции AMX Mod X &amp;quot;ядра&amp;quot;) продекларированы в файле amxmodx.inc, который также включает векторные и другие инклуды, декларирующие функции, константы и списки, также имеющие непосредственное отношение к AMX Mod X ядру.&lt;br /&gt;
&amp;lt;BR&amp;gt;&amp;lt;BR&amp;gt;Одной из основных функций AMX Mod X является forward функция plugin_init. Если в коде плагина имеется public функция plugin_init, она будет вызвана AMX Mod X после загрузки карты на сервере. Обычно в plugin_init регистрируют сам плагин, его команды, переменные и т.п.&lt;br /&gt;
&amp;lt;BR&amp;gt;&amp;lt;BR&amp;gt;Плагин регистрируют с помощью native функции register_plugin. Т.к. прототип register_plugin соответствует:&amp;lt;pawn&amp;gt;native register_plugin(const plugin_name[], const version[], const author[])&amp;lt;/pawn&amp;gt;, можно понять, что в качестве параметров функция принимает три строковых массива, соответствующих названию плагина, номеру его версии и автору плагина.&lt;br /&gt;
&amp;lt;BR&amp;gt;&amp;lt;BR&amp;gt;Итак, примером простого AMX Mod X плагина является:&amp;lt;pawn&amp;gt;#include &amp;lt;amxmodx&amp;gt;&lt;br /&gt;
public plugin_init()&lt;br /&gt;
{&lt;br /&gt;
register_plugin(&amp;quot;Test&amp;quot;, &amp;quot;0.1&amp;quot;, &amp;quot;VEN&amp;quot;)&lt;br /&gt;
}&amp;lt;/pawn&amp;gt;По сути данный плагин не выполняет каких-либо действий, но регистрирует себя в AMX Mod X с указанными данными.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Системы функционирования==&lt;br /&gt;
&lt;br /&gt;
AMX Mod X предоставляет большое количество определенных систем функционирования. Так одна из основных систем – это система контроля уровней доступа. Здесь имеют место соответствующие функции, например get_user_flags, а также константы стандартных уровней доступа типа ADMIN_*.&lt;br /&gt;
&amp;lt;BR&amp;gt;&amp;lt;BR&amp;gt;Система регистрирования и контроля консольных команд также &amp;quot;пересекается&amp;quot; с системой контроля уровней доступа и использует такие функции, как например register_concmd и cmd_access.&lt;br /&gt;
&amp;lt;BR&amp;gt;&amp;lt;BR&amp;gt;Также существует множество других систем, среди которых имеется система регистрирования и контроля серверных консольных переменных (англ.: Server CVars), клиентских меню и др.&lt;br /&gt;
&amp;lt;BR&amp;gt;&amp;lt;BR&amp;gt;Как правило, системы регистрирования используют т.н. &amp;quot;handle&amp;quot; (или &amp;quot;hook&amp;quot;) функции, которые вызываются системой в необходимый момент.&lt;br /&gt;
&amp;lt;BR&amp;gt;&amp;lt;BR&amp;gt;Так после регистрирования консольной команды &amp;quot;action&amp;quot;:&amp;lt;pawn&amp;gt;register_concmd(&amp;quot;action&amp;quot;, &amp;quot;action_handler&amp;quot;)&amp;lt;/pawn&amp;gt;при исполнении данной команды из консоли сервера или клиента система попытается найти и выполнить public функцию action_handler.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Система строкового форматирования==&lt;br /&gt;
&lt;br /&gt;
Многие AMX Mod X функции используют систему строкового форматирования. Например, это все *_print* функции.&lt;br /&gt;
&amp;lt;BR&amp;gt;&amp;lt;BR&amp;gt;Такие функции принимают практически неограниченное количество параметров, которые используются при форматировании соответствующей строковой конструкции. Для наглядности рассмотрим пример:&amp;lt;pawn&amp;gt;server_print(&amp;quot;Formatted string: %d %f %s %c&amp;quot;, 1, 1.234567, &amp;quot;hello&amp;quot;, '!')&amp;lt;/pawn&amp;gt;Функция server_print отформатирует строковую конструкцию &amp;quot;Formatted string: %d %f %s %c&amp;quot;, используя переданные параметры, и выведет в серверной консоли строку:&amp;lt;pawn&amp;gt;Formatted string: 1 1.234567 hello !&amp;lt;/pawn&amp;gt;Таким образом, %d, %f, %s, %c – специальные элементы, используемые для форматирования целого числа, дробного числа, строки и символа соответственно.&lt;br /&gt;
&amp;lt;BR&amp;gt;&amp;lt;BR&amp;gt;Опасно при использовании функций, поддерживающих форматирование, передавать строковую переменную непосредственно в параметр строковой конструкции, например:&amp;lt;pawn&amp;gt;server_print(string)&amp;lt;/pawn&amp;gt;Безопасный вариант выглядит, следующим образом:&amp;lt;pawn&amp;gt;server_print(&amp;quot;%s&amp;quot;, string)&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&amp;lt;BR&amp;gt;&amp;lt;BR&amp;gt;Т.к. символ процента % является, т.н. &amp;quot;специальным символом&amp;quot;, для его форматирования в строковой конструкции необходимо использовать двойной символ процента %%, например:&amp;lt;pawn&amp;gt; server_print(&amp;quot;This is a single symbol of percent: %%&amp;quot;)&amp;lt;/pawn&amp;gt;выведет в серверной консоли:&amp;lt;pawn&amp;gt; This is a single symbol of percent: %&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&amp;lt;BR&amp;gt;&amp;lt;BR&amp;gt;Также существует т.н. &amp;quot;контрольный символ&amp;quot; (от англ. control character), позволяющий использовать т.н. &amp;quot;специальные символы форматирования&amp;quot;. Контрольным символом по умолчанию является символ ^, который может быть изменен директивой pragma ctrlchar, например:&amp;lt;pawn&amp;gt;#pragma ctrlchar '\'&amp;lt;/pawn&amp;gt;изменит контрольный символ на \.&lt;br /&gt;
&amp;lt;BR&amp;gt;&amp;lt;BR&amp;gt;Примеры некоторых специальных символов форматирования приведены ниже:&lt;br /&gt;
&amp;lt;BR&amp;gt;&amp;lt;BR&amp;gt;^t – табуляция&lt;br /&gt;
&amp;lt;BR&amp;gt;&amp;lt;BR&amp;gt;^n – новая строка&lt;br /&gt;
&amp;lt;BR&amp;gt;&amp;lt;BR&amp;gt;^xHH – символ, представленный в шестнадцатиричном формате, где HH – двойное число, представленное в шестнадцатиричном формате&lt;/div&gt;</summary>
		<author><name>VEN</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.alliedmods.net/index.php?title=Ru_Intro_to_AMX_Mod_X_Scripting&amp;diff=3696</id>
		<title>Ru Intro to AMX Mod X Scripting</title>
		<link rel="alternate" type="text/html" href="https://wiki.alliedmods.net/index.php?title=Ru_Intro_to_AMX_Mod_X_Scripting&amp;diff=3696"/>
		<updated>2006-12-31T16:07:36Z</updated>

		<summary type="html">&lt;p&gt;VEN: added the link to the upcoming &amp;quot;Ru:Fundamental Basics of the AMX Mod X Scripting&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Ru:Scripting (AMX Mod X)]]&lt;br /&gt;
Просмотреть оригинал статьи (англ.): [[Intro to AMX Mod X Scripting]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Введение в AMX Mod X скриптинг=&lt;br /&gt;
Это руководство позволит разобраться в основах скриптинга [[AMX Mod X]] плагинов.&lt;br /&gt;
&lt;br /&gt;
=Обзор=&lt;br /&gt;
&lt;br /&gt;
Значит, вы хотите создать плагин? Вы должны иметь хорошее представление о том, как работает [[Pawn]], скриптинг язык, который используется для написания [[AMX Mod X]] плагинов. Поэтому в первую очередь настоятельно рекомендуется ознакомиться с фундаментальными основами [[Pawn]] и [[AMX Mod X]] скриптинга: [[Ru:Fundamental Basics of the AMX Mod X Scripting]]. Желательно читать данную статью, сидя за компьютером с текстовым редактором и [[Pawn]] компилятором под рукой - хорошее подспорье для эффективного обучения. Конечно же, вы не будете сразу писать большие плагины типа WC3, Matrix Mod и CSDM, но все же статья даст вам &amp;quot;толчок&amp;quot; в мир моддинга [[AMX Mod X]]. Хороший редактор с поддержкой [[Pawn]] - это AMXX-Studio, который можно найти в секции [http://www.amxmodx.org/downloads.php AMX Mod X downloads].&lt;br /&gt;
&lt;br /&gt;
Вам необходимо знать, как компилировать плагины. Обратитесь к секции [[Ru:Compiling Plugins (AMX Mod X)]] для ознакомления. Также, чтобы проверить и отладить ваш плагин, вы должны знать, как устанавливать плагины. Для этого обратитесь к секции [[Ru:Configuring AMX Mod X]].&lt;br /&gt;
&lt;br /&gt;
=Введение=&lt;br /&gt;
&lt;br /&gt;
AMX Mod X плагин может иметь четыре главных типа функций. Первый - &amp;quot;public&amp;quot; функция. Это означает, что функция доступна для AMX Mod X &amp;quot;движка&amp;quot;. Второй тип - &amp;quot;native&amp;quot; функция, которая располагается в модуле или в ядре AMX Mod X. Третий тип - обычные пользовательские функции, которые прописываются без каких-либо специальных атрибутов. Четвертый тип - это &amp;quot;forward&amp;quot; функция, которая вызывается каждый раз, когда происходит какое-то определенное событие (forward функция также является и public). AMX Mod X плагин должен начинаться с функции, инициализирующей плагин:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pawn&amp;gt;//Это делает возможным использование функций AMX Mod X ядра&lt;br /&gt;
//Это &amp;quot;влаживает&amp;quot; native &amp;quot;определители&amp;quot;(заголовки) из includes\amxmodx.inc&lt;br /&gt;
#include &amp;lt;amxmodx&amp;gt;&lt;br /&gt;
&lt;br /&gt;
//Объявляем три строковых переменных&lt;br /&gt;
new PLUGIN[]=&amp;quot;AMXX Demo&amp;quot;&lt;br /&gt;
new AUTHOR[]=&amp;quot;BAILOPAN&amp;quot;&lt;br /&gt;
new VERSION[]=&amp;quot;1.00&amp;quot;&lt;br /&gt;
&lt;br /&gt;
//Это public функция.&lt;br /&gt;
//Необходимо инициализировать ваш скрипт для AMX Mod X.&lt;br /&gt;
//Эта функция не содержит параметров, вызывается сразу после загрузки карты.&lt;br /&gt;
public plugin_init()&lt;br /&gt;
{&lt;br /&gt;
     //Это функция, которая &amp;quot;берет&amp;quot; три строки.&lt;br /&gt;
     //Она регистрирует ваш плагин в AMX Mod X и присваивает некоторую основную информацию.&lt;br /&gt;
     register_plugin(PLUGIN, VERSION, AUTHOR)&lt;br /&gt;
}&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Попробуйте откомпилировать скрипт, приведенный выше. Он будет очень мал, т.к. не делает ничего особенного. Однако, если вы загрузите этот скрипт и напишите &amp;quot;amxx plugins&amp;quot; в серверной консоли, вы должны увидеть новую запись в листе плагинов.&lt;br /&gt;
&lt;br /&gt;
=Создание админ-комманд=&lt;br /&gt;
&lt;br /&gt;
AMX Mod X предоставляет возможность простого добавления консольных админ-команд. Каждая команда &amp;quot;регистрируется&amp;quot; как консольная команда. При регистрировании команды вы должны указать четыре свойства: имя консольной команды; функцию, которая будет вызываться при использовании команды; уровень доступа, необходимый для использования команды; короткое описание команды.&lt;br /&gt;
&lt;br /&gt;
Для демонстрации давайте сделаем плагин, который позволит вам изменить количество жизней игрока на сервере с помощью команды &amp;quot;amx_hp&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Для начала нам понадобится сделать две вещи: первая - нам нужно зарегистрировать команду в консоли. Т.к. мы &amp;quot;привязываем&amp;quot; команду к public функции, мы должны убедиться, что функция существует.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pawn&amp;gt;#include &amp;lt;amxmodx&amp;gt;&lt;br /&gt;
#include &amp;lt;amxmisc&amp;gt; //Это содержит некоторые полезные функции&lt;br /&gt;
#include &amp;lt;fun&amp;gt;     //Это содержит функцию для изменения жизней&lt;br /&gt;
&lt;br /&gt;
new PLUGIN[]=&amp;quot;Change Health&amp;quot;&lt;br /&gt;
new AUTHOR[]=&amp;quot;BAILOPAN&amp;quot;&lt;br /&gt;
new VERSION[]=&amp;quot;1.00&amp;quot;&lt;br /&gt;
&lt;br /&gt;
public plugin_init()&lt;br /&gt;
{&lt;br /&gt;
     register_plugin(PLUGIN, VERSION, AUTHOR)&lt;br /&gt;
     register_concmd(&amp;quot;amx_hp&amp;quot;, &amp;quot;cmd_hp&amp;quot;, ADMIN_SLAY, &amp;quot;&amp;lt;target&amp;gt; &amp;quot;)&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
public cmd_hp(id, level, cid)&lt;br /&gt;
{&lt;br /&gt;
     return PLUGIN_HANDLED&lt;br /&gt;
}&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Первая новая функция - это &amp;quot;register_concmd&amp;quot;, которая берет четыре параметра. Первый - название команды, которую необходимо набрать в консоли. Второй - название public функции, которая будет контролировать команду. Третий - уровень доступа, который необходим для вашей команды. И последний - строка, описывающая, как использовать вашу команду.&lt;br /&gt;
&lt;br /&gt;
Далее мы создаем public функцию для контроля amx_hp команды. Обратите внимание, что мы даем ей три параметра. Эти параметры будут содержать специальные данные, когда команду будет использована. id будет содержать индекс(номер) игрока, который запустил команду, level будет содержать уровень доступа команды (вы должны сами осуществить проверку уровня доступа), cid будет содержать внутренний индекс(номер) команды.&lt;br /&gt;
&lt;br /&gt;
Также обратите внимание на PLUGIN_HANDLED. Существует два главных return значения. PLUGIN_CONTINUE как бы означает &amp;quot;продолжить с нормальным выполнением&amp;quot;, PLUGIN_HANDLED означает &amp;quot;блокировать дальнейшее выполнение&amp;quot;. Разница сложно уловима, но важна. К примеру, если вы делаете &amp;quot;привязку&amp;quot; к своей команде, вы не должны возвращать PLUGIN_CONTINUE. Но если вы возвращаете PLUGIN_HANDLED, при привязанной &amp;quot;say&amp;quot; команде, это полностью заблокирует say-текст. Вы должны быть внимательны с тем, что вы выбираете для возврата в различных ситуациях. Однако, многие вещи &amp;quot;безразличны&amp;quot; к возвращаемому значению. Например, таймеры(tasks), события(events) и другие вещи, с которыми вы встретитесь позже.&lt;br /&gt;
&lt;br /&gt;
Итак, как же мы убедимся, что данный пользователь - это админ, который имеет ADMIN_SLAY уровень доступа?&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pawn&amp;gt;public cmd_hp(id, level, cid)&lt;br /&gt;
{&lt;br /&gt;
     if (!cmd_access(id, level, cid, 3))&lt;br /&gt;
        return PLUGIN_HANDLED&lt;br /&gt;
     return PLUGIN_HANDLED&lt;br /&gt;
}&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
cmd_access() функция проверит информацию команды (пользователя, уровень доступа и индекс) и проверяет две вещи: что пользователь имеет доступ, и что было дано минимальное количество параметров. Мы указали три, потому что команда будет выглядеть как: amx_hp &amp;lt;target&amp;gt; &amp;lt;amount&amp;gt;, и в действительности сама команда также считается как параметр. Если cmd_access откажет, мы сразу прекращаем выполнение команды.&lt;br /&gt;
&lt;br /&gt;
Следующее, что нужно решить: мы должны взять два параметра и преобразовать их. &amp;quot;amount&amp;quot; параметр прост - мы просто конвертируем его из строки в число. Другой же параметр будет по сложнее, т.к. мы хотим иметь возможность указывать на три различных типа людей:&lt;br /&gt;
&lt;br /&gt;
* @CT или @T - (контр-террористы или террористы)&lt;br /&gt;
* @ALL - (все)&lt;br /&gt;
* &amp;lt;target&amp;gt; - частичное имя игрока&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pawn&amp;gt;public cmd_hp(id, level, cid)&lt;br /&gt;
{&lt;br /&gt;
     if (!cmd_access(id, level, cid, 3))&lt;br /&gt;
        return PLUGIN_HANDLED&lt;br /&gt;
&lt;br /&gt;
     new Arg1[24]&lt;br /&gt;
     new Arg2[4]&lt;br /&gt;
&lt;br /&gt;
     //Берем аргументы команды из консоли&lt;br /&gt;
     read_argv(1, Arg1, 23)&lt;br /&gt;
     read_argv(2, Arg2, 3)&lt;br /&gt;
&lt;br /&gt;
     //Конвертируем количество жизней из строки в число&lt;br /&gt;
     new Health = str_to_num(Arg2)&lt;br /&gt;
&lt;br /&gt;
     //Является ли первый символ @ символом?&lt;br /&gt;
     if (Arg1[0] == '@')&lt;br /&gt;
     {&lt;br /&gt;
          new Team = 0&lt;br /&gt;
          //Проверяем, какая команда была указана.&lt;br /&gt;
          //Заметьте, что мы начинаем с [1]&lt;br /&gt;
          // это означает, что @ не входит&lt;br /&gt;
          if (equali(Arg1[1], &amp;quot;CT&amp;quot;))&lt;br /&gt;
          {&lt;br /&gt;
               Team = 2&lt;br /&gt;
          } else if (equali(Arg1[1], &amp;quot;T&amp;quot;)) {&lt;br /&gt;
               Team = 1&lt;br /&gt;
          }&lt;br /&gt;
          new players[32], num&lt;br /&gt;
          //Эта функция заполнит players[32] переменную&lt;br /&gt;
          // верными индексами игроков. num будет содержать количество&lt;br /&gt;
          // игроков, которые действительны.&lt;br /&gt;
          get_players(players, num)&lt;br /&gt;
          new i&lt;br /&gt;
          for (i=0; i&amp;lt;num; i++)&lt;br /&gt;
          {&lt;br /&gt;
               if (!Team)&lt;br /&gt;
               {&lt;br /&gt;
                    //Устанавливаем количество жизней этого игрока&lt;br /&gt;
                    set_user_health(players[i], Health)&lt;br /&gt;
               } else {&lt;br /&gt;
                    if (get_user_team(players[i]) == Team)&lt;br /&gt;
                    {&lt;br /&gt;
                         set_user_health(players[i], Health)&lt;br /&gt;
                    }&lt;br /&gt;
               }&lt;br /&gt;
          }&lt;br /&gt;
     } else {&lt;br /&gt;
          //находит индекс игрока, который соответствует части указанного имени&lt;br /&gt;
          //1 означает, что игрок с &amp;quot;иммунитетом&amp;quot; не будет учтен&lt;br /&gt;
          new player = cmd_target(id, Arg1, 1)&lt;br /&gt;
          if (!player)&lt;br /&gt;
          {&lt;br /&gt;
               //это напечатает сообщение пользователю, который запускал команду&lt;br /&gt;
               //Формат для этой команды называется &amp;quot;format()&amp;quot; стиль,&lt;br /&gt;
               // где первая строка форматирует сообщение соответственно&lt;br /&gt;
               // любому количеству следующих параметров:&lt;br /&gt;
               //  %s означает строка&lt;br /&gt;
               //  %d или %i означает целое число&lt;br /&gt;
               //  %f означает дробное число&lt;br /&gt;
               // поэтому &amp;quot;Privet %s, mne %d let&amp;quot; будет требовать&lt;br /&gt;
               //  чтобы следовали параметры строки и целого числа&lt;br /&gt;
               console_print(id, &amp;quot;Izvinite, igrok %s ne mojet bit naiden ili ispol'zovan v kachestve ob'ekta!&amp;quot;, Arg1)&lt;br /&gt;
               return PLUGIN_HANDLED&lt;br /&gt;
          } else {&lt;br /&gt;
               set_user_health(player, Health)&lt;br /&gt;
          }&lt;br /&gt;
     }&lt;br /&gt;
&lt;br /&gt;
     return PLUGIN_HANDLED&lt;br /&gt;
}&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Таким образом, наша финальная версия amx_hp плагина будет выглядеть следующим образом:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pawn&amp;gt;#include &amp;lt;amxmodx&amp;gt;&lt;br /&gt;
#include &amp;lt;fun&amp;gt;&lt;br /&gt;
&lt;br /&gt;
new PLUGIN[]=&amp;quot;Change Health&amp;quot;&lt;br /&gt;
new AUTHOR[]=&amp;quot;BAILOPAN&amp;quot;&lt;br /&gt;
new VERSION[]=&amp;quot;1.00&amp;quot;&lt;br /&gt;
&lt;br /&gt;
public plugin_init()&lt;br /&gt;
{&lt;br /&gt;
     register_plugin(PLUGIN, VERSION, AUTHOR)&lt;br /&gt;
     register_concmd(&amp;quot;amx_hp&amp;quot;, &amp;quot;cmd_hp&amp;quot;, ADMIN_SLAY, &amp;quot;&amp;lt;target&amp;gt; &amp;lt;hp&amp;gt;&amp;quot;)&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
public cmd_hp(id, level, cid)&lt;br /&gt;
{&lt;br /&gt;
     if (!cmd_access(id, level, cid, 3))&lt;br /&gt;
        return PLUGIN_HANDLED&lt;br /&gt;
&lt;br /&gt;
     new Arg1[24]&lt;br /&gt;
     new Arg2[4]&lt;br /&gt;
&lt;br /&gt;
     //Берем аргументы команды из консоли&lt;br /&gt;
     read_argv(1, Arg1, 23)&lt;br /&gt;
     read_argv(2, Arg2, 3)&lt;br /&gt;
&lt;br /&gt;
     //Конвертируем количество жизней из строки в число&lt;br /&gt;
     new Health = str_to_num(Arg2)&lt;br /&gt;
&lt;br /&gt;
     //Является ли первый символ @ символом?&lt;br /&gt;
     if (Arg1[0] == '@')&lt;br /&gt;
     {&lt;br /&gt;
          new Team = 0&lt;br /&gt;
          if (equali(Arg1[1], &amp;quot;CT&amp;quot;))&lt;br /&gt;
          {&lt;br /&gt;
               Team = 2&lt;br /&gt;
          } else if (equali(Arg1[1], &amp;quot;T&amp;quot;)) {&lt;br /&gt;
               Team = 1&lt;br /&gt;
          }&lt;br /&gt;
          new players[32], num&lt;br /&gt;
          get_players(players, num)&lt;br /&gt;
          new i&lt;br /&gt;
          for (i=0; i&amp;lt;num; i++)&lt;br /&gt;
          {&lt;br /&gt;
               if (!Team)&lt;br /&gt;
               {&lt;br /&gt;
                    set_user_health(players[i], Health)&lt;br /&gt;
               } else {&lt;br /&gt;
                    if (get_user_team(players[i]) == Team)&lt;br /&gt;
                    {&lt;br /&gt;
                         set_user_health(players[i], Health)&lt;br /&gt;
                    }&lt;br /&gt;
               }&lt;br /&gt;
          }&lt;br /&gt;
     } else {&lt;br /&gt;
          new player = cmd_target(id, Arg1, 1)&lt;br /&gt;
          if (!player)&lt;br /&gt;
          {&lt;br /&gt;
               console_print(id, &amp;quot;Izvinite, igrok %s ne mojet bit naiden ili ispol'zovan v kachestve ob'ekta!&amp;quot;, Arg1)&lt;br /&gt;
               return PLUGIN_HANDLED&lt;br /&gt;
          } else {&lt;br /&gt;
               set_user_health(player, Health)&lt;br /&gt;
          }&lt;br /&gt;
     }&lt;br /&gt;
&lt;br /&gt;
     return PLUGIN_HANDLED&lt;br /&gt;
}&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Консольные переменные=&lt;br /&gt;
&lt;br /&gt;
CVar - это консольная переменная. Существуют клиентские и серверные CVar'ы. К примеру, &amp;quot;mp_startmoney&amp;quot; - Counter-Strike серверная CVar, содержащая число, указывающее, сколько денег дается игрокам, когда они заходят на сервер. Вы можете создавать свои серверные CVar'ы путем их регистрирования. Давайте создадим свою amx_startmoney CVar.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pawn&amp;gt;#include &amp;lt;amxmodx&amp;gt;&lt;br /&gt;
#include &amp;lt;cstrike&amp;gt;&lt;br /&gt;
&lt;br /&gt;
public plugin_init()&lt;br /&gt;
{&lt;br /&gt;
     register_plugin(&amp;quot;CVAR Test&amp;quot;, &amp;quot;1.0&amp;quot;, &amp;quot;BAILOPAN&amp;quot;)&lt;br /&gt;
     //регистрируем amx_startmoney CVar&lt;br /&gt;
     // и устанавливаем для нее значение по умолчанию 500&lt;br /&gt;
     register_cvar(&amp;quot;amx_startmoney&amp;quot;, &amp;quot;500&amp;quot;)&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//это вызывается, когда клиент заходит непосредственно на сервер&lt;br /&gt;
public client_putinserver(id)&lt;br /&gt;
{&lt;br /&gt;
     if (get_cvar_num(&amp;quot;amx_startmoney&amp;quot;) &amp;gt; 0)&lt;br /&gt;
     {&lt;br /&gt;
          cs_set_user_money(id, get_cvar_num(&amp;quot;amx_startmoney&amp;quot;))&lt;br /&gt;
     } else {&lt;br /&gt;
          cs_set_user_money(id, get_cvar_num(&amp;quot;mp_startmoney&amp;quot;))&lt;br /&gt;
     }&lt;br /&gt;
}&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Вы можете устанавливать дробные, целые или строковые значения как для своих CVar, так и для любых других.&lt;br /&gt;
&lt;br /&gt;
=Дополнительно=&lt;br /&gt;
&lt;br /&gt;
Чтобы узнать больше о скриптинге для AMX Mod X вам следует взглянуть на native прототипы в описаниях функий или в *.inc файлах (&amp;quot;инклудах&amp;quot;). Инклуды по большому счету придерживаются двух форматов. Они имеют название в соответствии с модулем или определенным предназначением. _const добавляется, если они содержат предопределенные числа или списки. _stocks добавляется, если они содержат &amp;quot;помогающие&amp;quot; или полезные &amp;quot;функции-обертки&amp;quot;. Помните, что stocks компилируются только, если вы используете их, поэтому без опаски можно &amp;quot;включать&amp;quot; файлы, содержащие большое количество stocks.&lt;br /&gt;
&lt;br /&gt;
Вы также можете посетить [http://amxmodx.ucoz.ru/forum/ Форум] и задать вопросы или найти больше информации.&lt;/div&gt;</summary>
		<author><name>VEN</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.alliedmods.net/index.php?title=Talk:Half-Life_1_Game_Events&amp;diff=3695</id>
		<title>Talk:Half-Life 1 Game Events</title>
		<link rel="alternate" type="text/html" href="https://wiki.alliedmods.net/index.php?title=Talk:Half-Life_1_Game_Events&amp;diff=3695"/>
		<updated>2006-12-31T15:37:35Z</updated>

		<summary type="html">&lt;p&gt;VEN: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Purpose? ==&lt;br /&gt;
&lt;br /&gt;
I'm a bit confused as to the purpose of this page. It's titled as Half-Life 1 Game Events, yet it's completey missing (as is not even listed as &amp;quot;No information available&amp;quot;) some HL1 event such as Geiger, but has an incredible amount of CS-specific events.&lt;br /&gt;
&lt;br /&gt;
Should this be broken up into base HL events and then CS-specific events?&lt;br /&gt;
&lt;br /&gt;
:In fact some of the HLDM (valve) Game Mod Messages is used by other Game Mods so you can't actually split this article strictly into HLMD and CS messages. But i agree that the title are misleading.--[[User:VEN|VEN]] 09:35, 31 December 2006 (CST)&lt;/div&gt;</summary>
		<author><name>VEN</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.alliedmods.net/index.php?title=Talk:Half-Life_1_Game_Events&amp;diff=3694</id>
		<title>Talk:Half-Life 1 Game Events</title>
		<link rel="alternate" type="text/html" href="https://wiki.alliedmods.net/index.php?title=Talk:Half-Life_1_Game_Events&amp;diff=3694"/>
		<updated>2006-12-31T15:35:15Z</updated>

		<summary type="html">&lt;p&gt;VEN: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
== Purpose? ==&lt;br /&gt;
&lt;br /&gt;
I'm a bit confused as to the purpose of this page. It's titled as Half-Life 1 Game Events, yet it's completey missing (as is not even listed as &amp;quot;No information available&amp;quot;) some HL1 event such as Geiger, but has an incredible amount of CS-specific events.&lt;br /&gt;
&lt;br /&gt;
Should this be broken up into base HL events and then CS-specific events?&lt;br /&gt;
&lt;br /&gt;
In fact some of the HLDM (valve) Game Mod Messages is used by other Game Mods so you can't actually split this article strictly into HLMD and CS messages. But i agree, title misleading.--[[User:VEN|VEN]] 09:35, 31 December 2006 (CST)&lt;/div&gt;</summary>
		<author><name>VEN</name></author>
		
	</entry>
</feed>