<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.alliedmods.net/index.php?action=history&amp;feed=atom&amp;title=Ru%3AButton_constants_%28AMX_Mod_X%29</id>
	<title>Ru:Button constants (AMX Mod X) - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.alliedmods.net/index.php?action=history&amp;feed=atom&amp;title=Ru%3AButton_constants_%28AMX_Mod_X%29"/>
	<link rel="alternate" type="text/html" href="https://wiki.alliedmods.net/index.php?title=Ru:Button_constants_(AMX_Mod_X)&amp;action=history"/>
	<updated>2026-05-10T08:27:21Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.31.6</generator>
	<entry>
		<id>https://wiki.alliedmods.net/index.php?title=Ru:Button_constants_(AMX_Mod_X)&amp;diff=6378&amp;oldid=prev</id>
		<title>Simon Logic: New page: Category:Russian Category:Ru:Scripting (AMX Mod X) =Кнопочные константы=  Просмотреть оригинал статьи (англ.): [[Button constants (AM...</title>
		<link rel="alternate" type="text/html" href="https://wiki.alliedmods.net/index.php?title=Ru:Button_constants_(AMX_Mod_X)&amp;diff=6378&amp;oldid=prev"/>
		<updated>2008-11-06T10:24:48Z</updated>

		<summary type="html">&lt;p&gt;New page: &lt;a href=&quot;/Category:Russian&quot; title=&quot;Category:Russian&quot;&gt;Category:Russian&lt;/a&gt; &lt;a href=&quot;/Category:Ru:Scripting_(AMX_Mod_X)&quot; title=&quot;Category:Ru:Scripting (AMX Mod X)&quot;&gt;Category:Ru:Scripting (AMX Mod X)&lt;/a&gt; =Кнопочные константы=  Просмотреть оригинал статьи (англ.): [[Button constants (AM...&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;[[Category:Russian]]&lt;br /&gt;
[[Category:Ru:Scripting (AMX Mod X)]]&lt;br /&gt;
=Кнопочные константы=&lt;br /&gt;
&lt;br /&gt;
Просмотреть оригинал статьи (англ.): [[Button constants (AMX Mod X)]]&lt;br /&gt;
&lt;br /&gt;
=Использование=&lt;br /&gt;
&lt;br /&gt;
Кнопочные константы обычно используются для того, чтобы &amp;quot;поймать&amp;quot; момент, когда игрок пытается совершить какое-либо действие, нажимая на кнопки, &amp;quot;привязанные&amp;quot; к таким командам, как +attack, +use и так далее с помощью команды [[cmd_bind|bind]]. Метод используется потому, что HL &amp;quot;движок&amp;quot;  не может &amp;quot;поймать&amp;quot; +/-команды стандартным регистрированием, если их реализация выполнена в самом движке.&lt;br /&gt;
&lt;br /&gt;
Например, это будет работать:&lt;br /&gt;
&amp;lt;pawn&amp;gt;register_concmd(&amp;quot;+explode&amp;quot;,&amp;quot;explode&amp;quot;);&amp;lt;/pawn&amp;gt;&lt;br /&gt;
А это - нет:&lt;br /&gt;
&amp;lt;pawn&amp;gt;register_concmd(&amp;quot;+attack&amp;quot;,&amp;quot;hook_attack&amp;quot;);&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Константы=&lt;br /&gt;
&lt;br /&gt;
Полный список всех констант вы можете найти [http://amxmodx.org/funcwiki.php?go=module&amp;amp;id=3#const_buttons здесь].&lt;br /&gt;
&lt;br /&gt;
=Реализация=&lt;br /&gt;
&lt;br /&gt;
Вот, например, один из вариантов, как определить, нажимает ли игрок кнопку атаки или нет:&amp;lt;pawn&amp;gt;#include &amp;lt;amxmodx&amp;gt;&lt;br /&gt;
#include &amp;lt;engine&amp;gt;&lt;br /&gt;
&lt;br /&gt;
public plugin_init()&lt;br /&gt;
{&lt;br /&gt;
	register_plugin(&amp;quot;Attack Test&amp;quot;,&amp;quot;1.0&amp;quot;,&amp;quot;Hawk552&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
public client_PreThink(id)&lt;br /&gt;
{&lt;br /&gt;
	if(entity_get_int(id, EV_INT_BUTTON) &amp;amp; IN_ATTACK)&lt;br /&gt;
	{&lt;br /&gt;
		// do something&lt;br /&gt;
	}&lt;br /&gt;
}&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Обратите внимание, что используется битовый оператор &amp;amp;, в отличии от логического оператора &amp;amp;&amp;amp;. Оператор &amp;amp; проверяет, содержится ли бит после оператора в бите до него, т.е. в данном случае проверяется, есть ли среди нажатых кнопок игрока кнопка IN_ATTACK.&lt;br /&gt;
&lt;br /&gt;
Чтобы заставить игрока эмулировать нажатие кнопки, можно поступить следующим образом:&amp;lt;pawn&amp;gt;#include &amp;lt;amxmodx&amp;gt;&lt;br /&gt;
#include &amp;lt;engine&amp;gt;&lt;br /&gt;
&lt;br /&gt;
public plugin_init()&lt;br /&gt;
{&lt;br /&gt;
	register_plugin(&amp;quot;Attack Test&amp;quot;,&amp;quot;1.0&amp;quot;,&amp;quot;Hawk552&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
public client_PreThink(id)&lt;br /&gt;
{&lt;br /&gt;
	entity_set_int(id,EV_INT_button,entity_get_int(id,EV_INT_button) | IN_ATTACK);&lt;br /&gt;
}&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Этот пример будет выставлять флаг кнопки &amp;quot;атака&amp;quot; в положение &amp;quot;ВКЛ&amp;quot; каждый раз, когда рендерится entity игрока. Т.е. мы получаем все кнопки, нажатые в данный момент, и как бы прибавляем кнопку атаки.&lt;br /&gt;
&lt;br /&gt;
Чтобы &amp;quot;поймать&amp;quot; кнопки игрока, а потом &amp;quot;вычесть&amp;quot; какую либо кнопку, можно использовать следующий метод:&amp;lt;pawn&amp;gt;#include &amp;lt;amxmodx&amp;gt;&lt;br /&gt;
#include &amp;lt;engine&amp;gt;&lt;br /&gt;
&lt;br /&gt;
public plugin_init()&lt;br /&gt;
{&lt;br /&gt;
	register_plugin(&amp;quot;Attack Test&amp;quot;,&amp;quot;1.0&amp;quot;,&amp;quot;Hawk552&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
public client_PreThink(id)&lt;br /&gt;
{&lt;br /&gt;
	entity_set_int(id,EV_INT_button,entity_get_int(id,EV_INT_button) &amp;amp; ~IN_ATTACK);&lt;br /&gt;
}&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Например, клиент прыгает (IN_JUMP) и атакует (IN_ATTACK) одновременно, функция entity_get_int(id,EV_INT_button) будет возвращать бит сумму IN_ATTACK и IN_JUMP. Используя конструкцию &amp;amp; ~БИТ мы как бы удаляем конкретное значение бита, в данном случае IN_ATTACK. Таким образом, в итоге получим только IN_JUMP.&lt;br /&gt;
&lt;br /&gt;
=Замечания=&lt;br /&gt;
&lt;br /&gt;
Важно понимать, что нажатие какой-либо кнопки не всегда означает, что в это время происходит конкретное действие. Например, если выстрелить из пистолета и не отпускать кнопку атаки - пуля вылетит, атака закончится и не возобновится, т.к. пистолет не является автоматическим оружием, но, т.к. кнопка все еще будет нажата, то, используя вышеприведенный метод, мы получим активное состояние кнопки IN_ATTACK, хотя атаки как таковой в данный момент не осуществляется.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Более наглядный пример с прыжком. Представьте, что вы прыгнули и, не отпуская кнопки прыжка, опустились на землю. Второго прыжка не произойдет, т.к. для этого нужно отпустить кнопку и нажать ее снова. Таким образом, нажатая кнопка прыжка не говорит о том, что в данный момент вы находитесь в состоянии прыжка. Как уже было отмечено, это относится и к другим кнопкам. Поэтому, в подавляющем большинстве случаев вы не должны делать проверку на наличие нажатой кнопки, если хотите определить, совершает ли игрок соответствующее действие или нет, для этого существуют другие методы.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
По большому счету метод, описанный в данной статье, может быть эффективен только для блокировки или эмуляции атаки, хотя для этого есть еще более эффективные методы. Описанный метод не может быть применим к блокировке подавляющего большинства кнопок: для этого существуют другие методы ''(TODO: указать здесь ссылку на эти методы)''.&lt;/div&gt;</summary>
		<author><name>Simon Logic</name></author>
		
	</entry>
</feed>