Difference between revisions of "Ru Button constants (AMX Mod X)"

From AlliedModders Wiki
Jump to: navigation, search
m (Как все это замутить?)
m (pre to pawn, changed header)
Line 1: Line 1:
* [[Button_constants_%28AMX_Mod_X%29|Оригинал]]
+
'''Кнопочные константы. [[Button_constants_%28AMX_Mod_X%29|Просмотреть оригинал статьи (англ.)]]'''
 +
 
 +
 
 +
=Использование=
  
==Использование==
 
 
Кнопочные константы обычно используются для того, чтобы "поймать" момент, когда entity совершает какое либо действие, такое как прыжок, передвижение или атака. Метод используется из-за того, что жвижок ХЛ не может "поймать" +/- команды, если их реализация выполнена в самом движке.
 
Кнопочные константы обычно используются для того, чтобы "поймать" момент, когда entity совершает какое либо действие, такое как прыжок, передвижение или атака. Метод используется из-за того, что жвижок ХЛ не может "поймать" +/- команды, если их реализация выполнена в самом движке.
  
 
Например, Это будет работать:
 
Например, Это будет работать:
<pre>
+
<pawn>register_concmd("+explode","explode");</pawn>
register_concmd("+explode","explode");
 
</pre>
 
  
 
А это - нет:
 
А это - нет:
<pre>
+
<pawn>register_concmd("+attack","hook_attack");</pawn>
register_concmd("+attack","hook_attack");
 
</pre>
 
  
==Константы==
+
=Константы=
  
 
Полный список всех констант вы можете найти [http://amxmodx.org/funcwiki.php?go=module&id=3#const_buttons здесь].
 
Полный список всех констант вы можете найти [http://amxmodx.org/funcwiki.php?go=module&id=3#const_buttons здесь].
  
==Как все это замутить?==
+
=Реализация=
 +
 
 
Вот, например, один из вариантов, как "поймать" момент, когда игрок атакует:
 
Вот, например, один из вариантов, как "поймать" момент, когда игрок атакует:
<pre>
+
<pawn>#include <amxmodx>
#include <amxmodx>
 
 
#include <engine>
 
#include <engine>
  
Line 35: Line 33:
 
// do something
 
// do something
 
}
 
}
}
+
}</pawn>
</pre>
 
  
 
Обратите внимание, что используется битовый оператор &, в отличии от логического оператора &&. Оператор & проверяет, содержится ли бит после оператора в бите до него, т.е. в данном случае проверяется, есть ли среди нажатых кнопок игрока кнопка IN_ATTACK.
 
Обратите внимание, что используется битовый оператор &, в отличии от логического оператора &&. Оператор & проверяет, содержится ли бит после оператора в бите до него, т.е. в данном случае проверяется, есть ли среди нажатых кнопок игрока кнопка IN_ATTACK.
  
 
Чтобы заставить энтити эмулировать нажатие кнопки, можно поступить следующим образом:
 
Чтобы заставить энтити эмулировать нажатие кнопки, можно поступить следующим образом:
<pre>
+
<pawn>#include <amxmodx>
#include <amxmodx>
 
 
#include <engine>
 
#include <engine>
  
Line 53: Line 49:
 
{
 
{
 
entity_set_int(id,EV_INT_button,IN_ATTACK);
 
entity_set_int(id,EV_INT_button,IN_ATTACK);
}
+
}</pawn>
</pre>
 
  
 
Этот пример будет выставлять флаг кнопки "атака" в положение "ВКЛ" каждый раз, когда рендерится кадр.
 
Этот пример будет выставлять флаг кнопки "атака" в положение "ВКЛ" каждый раз, когда рендерится кадр.
  
 
Чтобы "поймать" кнопки энтити, а потом "вычесть" какую либо кнопку, можно использовать следующий метод:
 
Чтобы "поймать" кнопки энтити, а потом "вычесть" какую либо кнопку, можно использовать следующий метод:
<pre>
+
<pawn>#include <amxmodx>
#include <amxmodx>
 
 
#include <engine>
 
#include <engine>
  
Line 71: Line 65:
 
{
 
{
 
entity_set_int(id,EV_INT_button,entity_get_int(id,EV_INT_button) & ~IN_ATTACK);
 
entity_set_int(id,EV_INT_button,entity_get_int(id,EV_INT_button) & ~IN_ATTACK);
}
+
}</pawn>
</pre>
 
  
 
Все же поясню, что имелось в виду. Например, клиент прыгает (IN_JUMP) и атакует (IN_ATTACK) одновременно. В этом случае, функция entity_get_int(id,EV_INT_button) будет возвращать значения IN_ATTACK и IN_JUMP. Используя оператор ~ будет удаляться конкретное значение бита, в данном случае IN_ATTACK. Таким образом, функция (из примера) будет возвращать только IN_JUMP.
 
Все же поясню, что имелось в виду. Например, клиент прыгает (IN_JUMP) и атакует (IN_ATTACK) одновременно. В этом случае, функция entity_get_int(id,EV_INT_button) будет возвращать значения IN_ATTACK и IN_JUMP. Используя оператор ~ будет удаляться конкретное значение бита, в данном случае IN_ATTACK. Таким образом, функция (из примера) будет возвращать только IN_JUMP.
  
 
Этим можно не ограничиватся и придумать что-то свое, ведь хороший кодер тем и отличается от плохого, что может чтото придумать и реализовать.
 
Этим можно не ограничиватся и придумать что-то свое, ведь хороший кодер тем и отличается от плохого, что может чтото придумать и реализовать.
 
''Переведено by AlMod (c) 2006''
 
  
 
[[Category:Scripting (AMX Mod X)]]
 
[[Category:Scripting (AMX Mod X)]]

Revision as of 15:26, 8 December 2006

Кнопочные константы. Просмотреть оригинал статьи (англ.)


Использование

Кнопочные константы обычно используются для того, чтобы "поймать" момент, когда entity совершает какое либо действие, такое как прыжок, передвижение или атака. Метод используется из-за того, что жвижок ХЛ не может "поймать" +/- команды, если их реализация выполнена в самом движке.

Например, Это будет работать:

register_concmd("+explode","explode");

А это - нет:

register_concmd("+attack","hook_attack");

Константы

Полный список всех констант вы можете найти здесь.

Реализация

Вот, например, один из вариантов, как "поймать" момент, когда игрок атакует:

#include <amxmodx>
#include <engine>
 
public plugin_init()
{
	register_plugin("Attack Test","1.0","Hawk552");
}
 
public client_PreThink(id)
{
	if(entity_get_int(id, EV_INT_BUTTON) & IN_ATTACK)
	{
		// do something
	}
}

Обратите внимание, что используется битовый оператор &, в отличии от логического оператора &&. Оператор & проверяет, содержится ли бит после оператора в бите до него, т.е. в данном случае проверяется, есть ли среди нажатых кнопок игрока кнопка IN_ATTACK.

Чтобы заставить энтити эмулировать нажатие кнопки, можно поступить следующим образом:

#include <amxmodx>
#include <engine>
 
public plugin_init()
{
	register_plugin("Attack Test","1.0","Hawk552");
}
 
public client_PreThink(id)
{
	entity_set_int(id,EV_INT_button,IN_ATTACK);
}

Этот пример будет выставлять флаг кнопки "атака" в положение "ВКЛ" каждый раз, когда рендерится кадр.

Чтобы "поймать" кнопки энтити, а потом "вычесть" какую либо кнопку, можно использовать следующий метод:

#include <amxmodx>
#include <engine>
 
public plugin_init()
{
	register_plugin("Attack Test","1.0","Hawk552");
}
 
public client_PreThink(id)
{
	entity_set_int(id,EV_INT_button,entity_get_int(id,EV_INT_button) & ~IN_ATTACK);
}

Все же поясню, что имелось в виду. Например, клиент прыгает (IN_JUMP) и атакует (IN_ATTACK) одновременно. В этом случае, функция entity_get_int(id,EV_INT_button) будет возвращать значения IN_ATTACK и IN_JUMP. Используя оператор ~ будет удаляться конкретное значение бита, в данном случае IN_ATTACK. Таким образом, функция (из примера) будет возвращать только IN_JUMP.

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