|
|
(9 intermediate revisions by 3 users not shown) |
Line 1: |
Line 1: |
− | =Кнопочные константы=
| + | #REDIRECT [[Ru:Button_constants_(AMX_Mod_X)]] |
− | | |
− | [[Button_constants_%28AMX_Mod_X%29|Просмотреть оригинал статьи (англ.)]]
| |
− | | |
− | =Использование=
| |
− | | |
− | Кнопочные константы обычно используются для того, чтобы "поймать" момент, когда entity совершает какое либо действие, такое как прыжок, передвижение или атака. Метод используется из-за того, что жвижок ХЛ не может "поймать" +/- команды, если их реализация выполнена в самом движке.
| |
− | | |
− | Например, Это будет работать:
| |
− | <pawn>register_concmd("+explode","explode");</pawn>
| |
− | | |
− | А это - нет:
| |
− | <pawn>register_concmd("+attack","hook_attack");</pawn>
| |
− | | |
− | =Константы=
| |
− | | |
− | Полный список всех констант вы можете найти [http://amxmodx.org/funcwiki.php?go=module&id=3#const_buttons здесь].
| |
− | | |
− | =Реализация=
| |
− | | |
− | Вот, например, один из вариантов, как "поймать" момент, когда игрок атакует:
| |
− | <pawn>#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
| |
− | }
| |
− | }</pawn>
| |
− | | |
− | Обратите внимание, что используется битовый оператор &, в отличии от логического оператора &&. Оператор & проверяет, содержится ли бит после оператора в бите до него, т.е. в данном случае проверяется, есть ли среди нажатых кнопок игрока кнопка IN_ATTACK.
| |
− | | |
− | Чтобы заставить энтити эмулировать нажатие кнопки, можно поступить следующим образом:
| |
− | <pawn>#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);
| |
− | }</pawn>
| |
− | | |
− | Этот пример будет выставлять флаг кнопки "атака" в положение "ВКЛ" каждый раз, когда рендерится кадр.
| |
− | | |
− | Чтобы "поймать" кнопки энтити, а потом "вычесть" какую либо кнопку, можно использовать следующий метод:
| |
− | <pawn>#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);
| |
− | }</pawn>
| |
− | | |
− | Все же поясню, что имелось в виду. Например, клиент прыгает (IN_JUMP) и атакует (IN_ATTACK) одновременно. В этом случае, функция entity_get_int(id,EV_INT_button) будет возвращать значения IN_ATTACK и IN_JUMP. Используя оператор ~ будет удаляться конкретное значение бита, в данном случае IN_ATTACK. Таким образом, функция (из примера) будет возвращать только IN_JUMP.
| |
− | | |
− | Этим можно не ограничиватся и придумать что-то свое, ведь хороший кодер тем и отличается от плохого, что может чтото придумать и реализовать.
| |
− | | |
− | [[Category:Scripting (AMX Mod X)]] | |