Инфо из amxmodx.inc:
/* If player doesn't hit at anything function returns 0.0,
* in other case the distance between hit point and player is returned.
* If player is aiming at another player then the id and part of body are set. */
native Float:get_user_aiming(index,&id,&body,dist=9999);
Синтаксис:
Float: get_user_aiming ( index, &id, &body, [ distance = 9999 ] )
- index - id игрока ( кто направляет оружие)
- &id - id на кого направили
- &body - на какую часть тела
- distance - максимальная дистанция для проверки ( допустим поставили 100, а игрок в 150 юнитах, то функция не сработает)
Тип функции:
Native
Пример:
/* Plugin generated by AMXX-Studio */
#include <amxmodx>
#include <amxmisc>
#include <fakemeta>
#include <cstrike>
#define PLUGIN "[amxmodx.inc] get_user_aiming "
#define VERSION "1.0"
#define AUTHOR "Admin"
public plugin_init() {
register_plugin(PLUGIN, VERSION, AUTHOR)
register_forward(FM_PlayerPreThink, "fwdPlayerPreThink", 0)
}
public fwdPlayerPreThink(id){
new target, body
new Float:dist = get_user_aiming(id, target, body, 9999)
if( 0 < target <= get_maxplayers()) {
new CsTeams:team = cs_get_user_team(id)
new CsTeams:targetTeam = cs_get_user_team(target)
new sName[32]
get_user_name(target, sName, 31)
new sMessage[64]
if( targetTeam == team )
{
formatex(sMessage, 63, "Friend: %s^nHealth: %i, dist:%.2f", sName, get_user_health(target),dist)
}
else
{
formatex(sMessage, 63, "Enemy: %s", sName)
}
if( targetTeam == CS_TEAM_CT )
{
set_hudmessage(0, 63, 127, -1.0, -1.0, 0, 0.0, 0.1, 0.0, 0.0, -1)
}
else if( targetTeam == CS_TEAM_T )
{
set_hudmessage(127, 0, 0, -1.0, -1.0, 0, 0.0, 0.1, 0.0, 0.0, -1)
}
show_hudmessage(id, "%s", sMessage)
if(body == 1){
set_pev(id, pev_button,IN_ATTACK)
}
}
}
Описание:
Честно говоря придумывать пример было лениво и я подглядел его в палгине hns, но немного его дополнил дистанцией и при наводке в голову автоматически будет произведен выстрел.
Теперь подробнее о коде.
Регистрируются две новые переменные для id второго игрока и в какую часть тела прицелились.
Затем регистрируется дробная переменная и в нее же получается дистанция с помощью функции get_user_aiming, сама же функция записывает в перменне оставшиеся данные.
new target, body
new Float:dist = get_user_aiming(id, target, body, 9999)
Вот собственно и вся работа функции, дальше лишь обработка данных и формирование различных вариантов сообщения враг/друг и тому подобное.
Ах да, еще добавил ради шутки строки:
if(body == 1){
set_pev(id, pev_button,IN_ATTACK)
}
В них говориться о том что, если мы нацелились в голову, то перевести состояние кнопки атаки игрока в положение включено, то есть выстрелить за игрока. ( на сколько правильный метод не знаю, просто что пришло в 2 часа ночи на ум. то и слепил) Может быть вы придумаете что то более оригинальное.
Допустим чел заходит с аимом = аим настроен на head
В скрипте сделать подсчёт сколько раз он навёл только на голову врагу (например у нас 10 раз максимум мона наводить в голову) и сервер банит читера!
(чёто мне кажется я бруд несу)