Русское сообщество по скриптингу

Игнорировать несколько энтити EngFunc_TraceLine  [Решено]

Все вопросы по скриптингу для AMXX, помощь в редактировании плагинов.

Модераторы: Subb98, liFe iS GoOD

Правила форума
1. Запрещено материться и оскорблять других участников форума.
2. Запрещен флуд, оффтоп, дабл постинг во всех разделах форума, кроме раздела "Болтовня".
3. Запрещено взламывать сайт/форум или наносить любой вред проекту.
4. Запрещено рекламировать другие ресурсы.
5. Запрещено создавать темы без информативного названия. Название темы должно отображать ее смысл.

В данном разделе форума разрешено создавать темы, касающие только скриптинга для AMX Mod X.

Правила при создании новой темы:
1. При вставке кода плагина необходимо использовать тег [code=php].
2. Любые изображения должны быть загружены, как вложения к вашему сообщению.
3. При описании проблемы или запросе на помощь в редактировании плагина обязательно выкладывайте исходник sma плагина.

Игнорировать несколько энтити EngFunc_TraceLine

Сообщение hren_morjovui » 23 мар 2019, 09:11

Можно ли при помощи
Код: Выделить всё
engfunc(EngFunc_TraceLinestartendDONT_IGNORE_MONSTERSignore_ent0); 

игнорировать не одну ентити, а несколько?
"В этом мире неизбежны три вещи: смерть, налоги и гравитация."
Аватара пользователя
hren_morjovui
 
Сообщения: 258
Зарегистрирован: 29 май 2018, 09:15
Благодарил (а): 88 раз.
Поблагодарили: 22 раз.
Опыт программирования: Больше трех лет
Языки программирования: Pawn
PHP
jQuery

Re: Игнорировать несколько энтити EngFunc_TraceLine

Сообщение артист666 » 23 мар 2019, 17:57

Циклом, проверять что допустим это не игрок.
Если вы хотите чему-то научиться, пробуйте, задавайте вопросы.
Иначе компенсируйте потраченное время на ваши "проблемы".
Аватара пользователя
артист666
 
Сообщения: 2706
Зарегистрирован: 09 апр 2013, 17:46
Благодарил (а): 284 раз.
Поблагодарили: 639 раз.
Опыт программирования: Больше трех лет
Языки программирования: С, C++
Delphi
HTML, CSS, Java Script
Pawn

Re: Игнорировать несколько энтити EngFunc_TraceLine

Сообщение hren_morjovui » 23 мар 2019, 18:01

артист666 писал(а):Циклом, проверять что допустим это не игрок.

А конкретнее? Допустим 10 игроков стоят вряд и нужно узнать по трейслайну ид всех через кого он проходит?
"В этом мире неизбежны три вещи: смерть, налоги и гравитация."
Аватара пользователя
hren_morjovui
 
Сообщения: 258
Зарегистрирован: 29 май 2018, 09:15
Благодарил (а): 88 раз.
Поблагодарили: 22 раз.
Опыт программирования: Больше трех лет
Языки программирования: Pawn
PHP
jQuery

Re: Игнорировать несколько энтити EngFunc_TraceLine  [Решено]

Сообщение артист666 » 23 мар 2019, 20:52

Куда уже конкретнее?

Код: Выделить всё
#include <amxmodx>
#include <fakemeta>

public plugin_init()
{
    register_clcmd("ppfire", "functions")
}
public functions(id)
{
    static Float:start[3]; pev(id, pev_origin, start) // Координаты игрока
    static Float:end[3]; pev(id, pev_view_ofs, end) // Высота от координат до взгляда
    static Float:angle[3]; pev(id, pev_v_angle, angle) // Угол обзора игрока
    angle_vector(angle, ANGLEVECTOR_FORWARD, angle) // Перевести угол в единичный вектор
    
    
// Просто сокращение, start = start + end, end = start + angle * 9889(т.е. от точки по направлению на 9889 юнит дальше)
    end[0] = angle[0] * 9889.0 + (start[0] += end[0])
    end[1] = angle[1] * 9889.0 + (start[1] += end[1])
    end[2] = angle[2] * 9889.0 + (start[2] += end[2])
    
    static ent
; ent = id // Переменная под ид объектов
    
static name[33// Под ник
    static tr; tr = create_tr2() // Создать новый, можно и просто 0 и убрать free_tr2
    
    while
(ent) // Можно просто 1 даже поставить, т.к. условие внутри цикла
    {
        engfunc(EngFunc_TraceLine, start, end, DONT_IGNORE_MONSTERS, ent, tr) // Трейс
        ent = get_tr2(tr, TR_pHit) // Получаем ид объекта, в который упёрся трейс
        
        if
(!is_user_alive(ent)) break // Если объект мертв, значит выход. если нет, то продолжить с места объекта
        
        get_tr2
(tr, TR_vecEndPos, start) // Получить координаты конца трейса 
        
        get_user_name
(ent, name, charsmax(name)) // Получить имя игрока
        client_print(id, print_chat, "id = %i %s", ent, name) // Вывести в чат
    }
    free_tr2(tr)
}
Если вы хотите чему-то научиться, пробуйте, задавайте вопросы.
Иначе компенсируйте потраченное время на ваши "проблемы".
Аватара пользователя
артист666
 
Сообщения: 2706
Зарегистрирован: 09 апр 2013, 17:46
Благодарил (а): 284 раз.
Поблагодарили: 639 раз.
Опыт программирования: Больше трех лет
Языки программирования: С, C++
Delphi
HTML, CSS, Java Script
Pawn

Re: Игнорировать несколько энтити EngFunc_TraceLine

Сообщение hren_morjovui » 23 мар 2019, 21:41

артист666 писал(а):Куда уже конкретнее?

Код: Выделить всё
#include <amxmodx>
#include <fakemeta>

public plugin_init()
{
    register_clcmd("ppfire", "functions")
}
public functions(id)
{
    static Float:start[3]; pev(id, pev_origin, start) // Координаты игрока
    static Float:end[3]; pev(id, pev_view_ofs, end) // Высота от координат до взгляда
    static Float:angle[3]; pev(id, pev_v_angle, angle) // Угол обзора игрока
    angle_vector(angle, ANGLEVECTOR_FORWARD, angle) // Перевести угол в единичный вектор
    
    
// Просто сокращение, start = start + end, end = start + angle * 9889(т.е. от точки по направлению на 9889 юнит дальше)
    end[0] = angle[0] * 9889.0 + (start[0] += end[0])
    end[1] = angle[1] * 9889.0 + (start[1] += end[1])
    end[2] = angle[2] * 9889.0 + (start[2] += end[2])
    
    static ent
; ent = id // Переменная под ид объектов
    static name[33] // Под ник
    static tr; tr = create_tr2() // Создать новый, можно и просто 0 и убрать free_tr2
    
    while
(ent) // Можно просто 1 даже поставить, т.к. условие внутри цикла
    {
        engfunc(EngFunc_TraceLine, start, end, DONT_IGNORE_MONSTERS, ent, tr) // Трейс
        ent = get_tr2(tr, TR_pHit) // Получаем ид объекта, в который упёрся трейс
        
        if
(!is_user_alive(ent)) break // Если объект мертв, значит выход. если нет, то продолжить с места объекта
        
        get_tr2
(tr, TR_vecEndPos, start) // Получить координаты конца трейса 
        
        get_user_name
(ent, name, charsmax(name)) // Получить имя игрока
        client_print(id, print_chat, "id = %i %s", ent, name) // Вывести в чат
    }
    free_tr2(tr)
}


что-то типа того сейчас сделано, но выходит ерунда при определённых углах... просто не видит следующего игрока( по другому никак?

Добавлено спустя 37 минут 47 секунд:
Пардон, с условием перемудрил немного :crazy: Спасибо! :thumbs_up
"В этом мире неизбежны три вещи: смерть, налоги и гравитация."
Аватара пользователя
hren_morjovui
 
Сообщения: 258
Зарегистрирован: 29 май 2018, 09:15
Благодарил (а): 88 раз.
Поблагодарили: 22 раз.
Опыт программирования: Больше трех лет
Языки программирования: Pawn
PHP
jQuery


Вернуться в Скриптинг

Кто сейчас на конференции

Сейчас этот форум просматривают: Bing [Bot], nekruxa и гости: 19