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

From AlliedModders Wiki
Jump to: navigation, search
(→‎Как все это замутить?)
(redirect)
 
(15 intermediate revisions by 3 users not shown)
Line 1: Line 1:
−
* [[Button_constants_%28AMX_Mod_X%29|Оригинал]]
+
#REDIRECT [[Ru:Button_constants_(AMX_Mod_X)]]
−
 
 
−
==Использование==
 
−
Кнопочные константы обычно используются для того, чтобы "поймать" момент, когда entity совершает какое либо действие, такое как прыжки, передвижение или атака. Метод используется из-за того, что жвижок ХЛ не может "поймать" +/- команды
 
−
 
 
−
Например, Это будет работать:
 
−
<pre>
 
−
register_concmd("+explode","explode");
 
−
</pre>
 
−
 
 
−
А это - нет:
 
−
<pre>
 
−
register_concmd("+attack","hook_attack");
 
−
</pre>
 
−
 
 
−
==Константы==
 
−
 
 
−
Полный список всех констант вы можете найти здесь:
 
−
http://amxmodx.org/funcwiki.php?go=module&id=3#const_buttons
 
−
 
 
−
==Как все это замутить?==
 
−
Вот, например, один из вариантов, как "поймать" момент, когда игрок атакует:
 
−
<pre>
 
−
#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
 
−
}
 
−
}
 
−
</pre>
 
−
 
 
−
Обратите внимание, что используется оператор & , в отличии от оператора &&. Оператор & проверяет, содержится ли бит после оператора в бите до него, т.е. в данном случае проверяется, есть ли среди нажатых кнопок игрока кнопка IN_ATTACK
 
−
 
 
−
Чтобы заставить энтити эмулировать нажатие кнопки можно поступить следующим образом:
 
−
<pre>
 
−
#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);
 
−
}
 
−
</pre>
 
−
 
 
−
Этот пример будет ставить флаг кнопки атаки в положение "ВКЛ" каждый раз, когда рендерится кадр.
 
−
 
 
−
Чтобы "поймать" кнопки энтити, а потом "вычесть" какую либо кнопку, можно использовать следующий метод:
 
−
<pre>
 
−
#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);
 
−
}
 
−
</pre>
 
−
 
 
−
Все же поясню, что имелось ввиду. Например, клиент прыгает (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)]]
 

Latest revision as of 05:25, 6 November 2008