Difference between revisions of "Ru Button constants (AMX Mod X)"
m (→Константы) |
m (→Как все это замутить?) |
||
Line 31: | Line 31: | ||
public client_PreThink(id) | public client_PreThink(id) | ||
{ | { | ||
− | if(entity_get_int(id,EV_INT_BUTTON) & IN_ATTACK) | + | if(entity_get_int(id, EV_INT_BUTTON) & IN_ATTACK) |
{ | { | ||
// do something | // do something | ||
Line 38: | Line 38: | ||
</pre> | </pre> | ||
− | Обратите внимание, что используется оператор & , в отличии от оператора &&. Оператор & проверяет, содержится ли бит после оператора в бите до него, т.е. в данном случае проверяется, есть ли среди нажатых кнопок игрока кнопка IN_ATTACK | + | Обратите внимание, что используется битовый оператор &, в отличии от логического оператора &&. Оператор & проверяет, содержится ли бит после оператора в бите до него, т.е. в данном случае проверяется, есть ли среди нажатых кнопок игрока кнопка IN_ATTACK. |
− | Чтобы заставить энтити эмулировать нажатие кнопки можно поступить следующим образом: | + | Чтобы заставить энтити эмулировать нажатие кнопки, можно поступить следующим образом: |
<pre> | <pre> | ||
#include <amxmodx> | #include <amxmodx> | ||
Line 56: | Line 56: | ||
</pre> | </pre> | ||
− | Этот пример будет | + | Этот пример будет выставлять флаг кнопки "атака" в положение "ВКЛ" каждый раз, когда рендерится кадр. |
Чтобы "поймать" кнопки энтити, а потом "вычесть" какую либо кнопку, можно использовать следующий метод: | Чтобы "поймать" кнопки энтити, а потом "вычесть" какую либо кнопку, можно использовать следующий метод: | ||
Line 74: | Line 74: | ||
</pre> | </pre> | ||
− | Все же поясню, что имелось | + | Все же поясню, что имелось в виду. Например, клиент прыгает (IN_JUMP) и атакует (IN_ATTACK) одновременно. В этом случае, функция entity_get_int(id,EV_INT_button) будет возвращать значения IN_ATTACK и IN_JUMP. Используя оператор ~ будет удаляться конкретное значение бита, в данном случае IN_ATTACK. Таким образом, функция (из примера) будет возвращать только IN_JUMP. |
Этим можно не ограничиватся и придумать что-то свое, ведь хороший кодер тем и отличается от плохого, что может чтото придумать и реализовать. | Этим можно не ограничиватся и придумать что-то свое, ведь хороший кодер тем и отличается от плохого, что может чтото придумать и реализовать. |
Revision as of 13:31, 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.
Этим можно не ограничиватся и придумать что-то свое, ведь хороший кодер тем и отличается от плохого, что может чтото придумать и реализовать.
Переведено by AlMod (c) 2006