AMX MOD X
Воскресенье, 11.01.2026, 16:11:17



Приветствую Вас Гость | RSS
[ Главная ] [ Угол до ближайшего игрока от взгляда - AMX Mod X Форум ] [ Регистрация ] [ Вход ]
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]

Вниманию участников! Данный форум теперь является архивом и вскором времени здесь нельзя будет создавать новых тем! Просьба всем для общения и создания новых тем перейти на наш новый форум: http://amxmodx.su/

  • Страница 1 из 1
  • 1
Модератор форума: slogic, AlMod  
Угол до ближайшего игрока от взгляда
draftДата: Воскресенье, 24.08.2008, 22:18:27 | Сообщение # 1
Полковник
Группа: Пользователи
Сообщений: 225
Репутация: 3
Статус: Не в сети
Необходимо найти угол от взгляда игрока до ближайшей цели (другого игрока).
 
BruteДата: Воскресенье, 24.08.2008, 23:33:37 | Сообщение # 2
Генерал-полковник
Группа: Скриптеры
Сообщений: 1123
Репутация: 9
Статус: Не в сети
Quote (draft)
Необходимо найти угол от взгляда игрока до ближайшей цели (другого игрока).

У меня с геометрией проблемы, точнее вообще с математикой ^_^

МБ get_user_origin... (см. amxmodx.inc)

 
AlModДата: Понедельник, 25.08.2008, 08:44:08 | Сообщение # 3
Сонный кодер
Группа: Админы
Сообщений: 600
Репутация: 27
Статус: Не в сети
Юзай геометрию :)

 
BruteДата: Понедельник, 25.08.2008, 08:57:03 | Сообщение # 4
Генерал-полковник
Группа: Скриптеры
Сообщений: 1123
Репутация: 9
Статус: Не в сети
#include <geometry>

:D

 
DaTaДата: Понедельник, 25.08.2008, 13:41:24 | Сообщение # 5
Генерал-полковник
Группа: Cупер-модеры
Сообщений: 1025
Репутация: 16
Статус: Не в сети
вот накалякал, нету возможности проверить:
Code
#include <amxmodx>
#include <fakemeta>
#include <fakemeta_util>
#include <xs>

//...
/**
* @param id айди игрока, от взгляда которого искать угол к ближайшему игроку
* @param fAngel эта переменная передается по ссылке и в случае нахождения ближайшего игрока содержит угол к к нему
* @return возвращает айди ближайшего игрока, в случае неудачи 0
*/
stock angle_to_nearest_player(id, &Float:fAngel)
{
   //ищем ближайшего игрока
   static ePlayer, Float:fDist, Float:fCurDist, Float:vOrigin[3], Float:vOrigin2[3], i//, iTeam
     
   //iTeam = get_user_team(id)
   pev(id, pev_origin, vOrigin)
   pev(id, pev_view_ofs, vOrigin2)
   xs_vec_add(vOrigin, vOrigin2, vOrigin)//vOrigin - точка взгляда игрока
     
   ePlayer = 0
   for(i = 1; i <= get_maxplayers(); i++)
   {
    if(  i == id || !is_user_alive(i) /*|| iTeam == get_user_team(i)*/  )
     continue
      
    pev(i, pev_origin, vOrigin2)
      
    fCurDist = get_distance_f(vOrigin, vOrigin2)
    if(  !ePlayer || fCurDist < fDist  )
    {
     ePlayer = i
     fDist = fCurDist
    }
   }
     
   if(  !ePlayer  )
    return 0
     
   pev(ePlayer, pev_origin, vOrigin2)
     
   fAngel = fm_get_view_angle_diff(ePlayer, vOrigin2)
     
   return ePlayer
}

если хочешь узнать, находится ли он в обзоре экрана(не обязательно видно, может быть за припятствиями, для проверки видимости см. fakemeta_util.inc :: fm_is_visible)

Code
static Float:fFov, Float:fAngel, id2
pev(id, pev_fov, fFov)
id2 = angle_to_nearest_player(id, fAngel)
if(  fFov <= fAngel  )
...


Сообщение отредактировал DaTa - Вторник, 26.08.2008, 11:45:52
 
draftДата: Четверг, 28.08.2008, 11:11:52 | Сообщение # 6
Полковник
Группа: Пользователи
Сообщений: 225
Репутация: 3
Статус: Не в сети
Спасибо за скрипт, но это не то. Сразу приношу извинения, что не совсем точно сформулировал задачу. Требуется найти угол не до ближайшего оппонента, а на какой минимальный угол надо повернуться, чтобы попасть в цель. Суть идеи такова, что игрок с аимом при маленьком fov захватывает цель, потом стреляет. Чистый же игрок может выстрелить, не захватив цель.
И я что-то не взял в толк, как правильно бутербродом хукнуть как раз событие стрельбы, а то в classname перечислять все виды оружий не улыбает. И там даже есть такая вещь, как Ham_HasTarget, кто-нить может привести пример, как это использовать? А то про преобразование строки szindex больно не понятно и откуда её брать, я тож не понял (если использовать как forward)
Да, ещё возник вопрос, как контра делает трейсы сквозь стену? На чём основаны, вообще, возможность/невозможность прострела?


Сообщение отредактировал draft - Четверг, 28.08.2008, 11:15:04
 
DaTaДата: Четверг, 28.08.2008, 14:32:39 | Сообщение # 7
Генерал-полковник
Группа: Cупер-модеры
Сообщений: 1025
Репутация: 16
Статус: Не в сети
Quote (draft)
И я что-то не взял в толк, как правильно бутербродом хукнуть как раз событие стрельбы

где-то у VEN'а была статья на этот счет, юзани поиск на этом форуме, может что-то посвежее писал на AM - юзани и там поиск
Quote (draft)
Да, ещё возник вопрос, как контра делает трейсы сквозь стену?

http://amxmodx.ucoz.ru/forum/14-1751-1

вообщем щас уже нету времени заниматься этим

 
draftДата: Четверг, 28.08.2008, 14:56:00 | Сообщение # 8
Полковник
Группа: Пользователи
Сообщений: 225
Репутация: 3
Статус: Не в сети
Юзал уже и даже помню, про это шёл разговор, но то ли удалили, то ли найти не могу.
 
VENДата: Четверг, 28.08.2008, 19:37:50 | Сообщение # 9
AMXX-Скриптинг-Эксперт
Группа: Админы
Сообщений: 1892
Репутация: 45
Статус: Не в сети
Quote (HLSDK)
virtual BOOL HasTarget( string_t targetname ) { return FStrEq(STRING(targetname), STRING(pev->targetname) ); }
Обычное сравнение с targetname pev значением.

По выстрелам и трэйсам см. раздел "скриптов".

Quote
И я что-то не взял в толк, как правильно бутербродом хукнуть как раз событие стрельбы

Quote (бутерброд)
/**
* Description: Called when the main attack of a weapon is triggered.
* Forward params: function(this)
* Return type: None.
* Execute params: ExecuteHam(Ham_Weapon_PrimaryAttack, this);
*/
Ham_Weapon_PrimaryAttack,

/**
* Description: Called when the secondary attack of a weapon is triggered.
* Forward params: function(this)
* Return type: None.
* Execute params: ExecuteHam(Ham_Weapon_SecondaryAttack, this);
*/
Ham_Weapon_SecondaryAttack,

Просто навешиваешь данный хук. Параметр entid передаются в функцию хука.

Quote
А то про преобразование строки szindex больно не понятно и откуда её брать, я тож не понял (если использовать как forward)
Пример:
Code
new const g_weapon_c4[] = "weapon_c4"

public plugin_init() {
   register_forward(FM_CreateNamedEntity, "fwCreateNamedEntity")
}

public fwCreateNamedEntity(iClassname) {
   static szClassname[sizeof g_weapon_c4 + 1]
   engfunc(EngFunc_SzFromIndex, iClassname, szClassname, sizeof g_weapon_c4)
   if (equal(szClassname, g_weapon_c4))
    return FMRES_SUPERCEDE

   return FMRES_IGNORED
}
 
  • Страница 1 из 1
  • 1
Поиск:

AMX Mod X Russian Community © 2006-2026