Ru Button constants (AMX Mod X)

From AlliedModders Wiki
Revision as of 13:31, 8 December 2006 by Slogic (talk | contribs) (Как все это замутить?)
Jump to: navigation, search

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

Кнопочные константы обычно используются для того, чтобы "поймать" момент, когда 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