Правила форума Гаранты форума
Размещение рекламы AMX-X компилятор

Здравствуйте, гость Вход | Регистрация

Наши новости:

14-дек
24-апр
10-апр
11-апр

Условие выбора жертвы NPC

Статус пользователя maer
сообщение 28.12.2015, 21:20
Сообщение #1
Стаж: 10 лет

Сообщений: 2
Благодарностей: 1
Полезность: 0

добрый вечер!!!
интересует помощь скриптеров в допиливании плагина. одна часть плагина сделана.
нужно сделать чтобы npc выбирал рандомного игрока в поле видимости, бежал за ним и когда совсем близко с игроком то начинал его атаковать.
после того как уничтожил игрока или игрок пропал из поля видимости, то набирал другого игрока. ну и само собой чтобы угол поворота angles соответствовал куда он топает.
// с геометрией туго sorry.gif

есть кто может помощь это организовать на бесплатной/платной основе?

Отредактировал: Bloo, - 28.12.2015, 21:30
Причина: Выдано устное предупреждение!
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   Цитировать сообщение
Статус пользователя Bloo
сообщение 28.12.2015, 21:30
Сообщение #2


Стаж: 12 лет

Сообщений: 15547
Благодарностей: 6971
Полезность: 1206

maer, исходника не будет?
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя maer
сообщение 28.12.2015, 21:36
Сообщение #3
Стаж: 10 лет

Сообщений: 2
Благодарностей: 1
Полезность: 0

Цитата(Bloo @ 28.12.2015, 21:25) *
maer, исходника не будет?

Ну то что описал это у меня как раз таки и встало дело. или вообще не ходит нпц или ходит но криво в разные стороны. Так что считаю что надо функцию синка полностью переделывать...вот с ней помощь и нужна на платной или бесп основе.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Bloo
сообщение 28.12.2015, 21:37
Сообщение #4


Стаж: 12 лет

Сообщений: 15547
Благодарностей: 6971
Полезность: 1206

maer, ну хоть что есть показать.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Glaster
сообщение 15.11.2021, 4:38
Сообщение #5


Стаж: 5 лет 6 месяцев
Город: Иркутск

Сообщений: 7
Благодарностей: 3
Полезность: 0

maer,

Вот функция на поиск ближайшей жертвы

Код
public FindClosesEnemy(entid)
{
    new Float:Dist
    new Float:maxdistance=4000.0
    new indexid=0    
    for(new i=1;i<=get_maxplayers();i++){
        if(is_user_alive(i) && is_valid_ent(i) && can_see_fm(entid, i))
        {
            Dist = entity_range(entid, i)
            if(Dist <= maxdistance)
            {
                maxdistance=Dist
                indexid=i
                
                return indexid
            }
        }    
    }    
    return 0
}



Вот код на проверку, видна ли жертва

Код
public bool:can_see_fm(entindex1, entindex2)
{
    if (!entindex1 || !entindex2)
        return false

    if (pev_valid(entindex1) && pev_valid(entindex1))
    {
        new flags = pev(entindex1, pev_flags)
        if (flags & EF_NODRAW || flags & FL_NOTARGET)
        {
            return false
        }

        new Float:lookerOrig[3]
        new Float:targetBaseOrig[3]
        new Float:targetOrig[3]
        new Float:temp[3]

        pev(entindex1, pev_origin, lookerOrig)
        pev(entindex1, pev_view_ofs, temp)
        lookerOrig[0] += temp[0]
        lookerOrig[1] += temp[1]
        lookerOrig[2] += temp[2]

        pev(entindex2, pev_origin, targetBaseOrig)
        pev(entindex2, pev_view_ofs, temp)
        targetOrig[0] = targetBaseOrig [0] + temp[0]
        targetOrig[1] = targetBaseOrig [1] + temp[1]
        targetOrig[2] = targetBaseOrig [2] + temp[2]

        engfunc(EngFunc_TraceLine, lookerOrig, targetOrig, 0, entindex1, 0) //  checks the had of seen player
        if (get_tr2(0, TraceResult:TR_InOpen) && get_tr2(0, TraceResult:TR_InWater))
        {
            return false
        }
        else
        {
            new Float:flFraction
            get_tr2(0, TraceResult:TR_flFraction, flFraction)
            if (flFraction == 1.0 || (get_tr2(0, TraceResult:TR_pHit) == entindex2))
            {
                return true
            }
            else
            {
                targetOrig[0] = targetBaseOrig [0]
                targetOrig[1] = targetBaseOrig [1]
                targetOrig[2] = targetBaseOrig [2]
                engfunc(EngFunc_TraceLine, lookerOrig, targetOrig, 0, entindex1, 0) //  checks the body of seen player
                get_tr2(0, TraceResult:TR_flFraction, flFraction)
                if (flFraction == 1.0 || (get_tr2(0, TraceResult:TR_pHit) == entindex2))
                {
                    return true
                }
                else
                {
                    targetOrig[0] = targetBaseOrig [0]
                    targetOrig[1] = targetBaseOrig [1]
                    targetOrig[2] = targetBaseOrig [2] - 17.0
                    engfunc(EngFunc_TraceLine, lookerOrig, targetOrig, 0, entindex1, 0) //  checks the legs of seen player
                    get_tr2(0, TraceResult:TR_flFraction, flFraction)
                    if (flFraction == 1.0 || (get_tr2(0, TraceResult:TR_pHit) == entindex2))
                    {
                        return true
                    }
                }
            }
        }
    }
    return false
}



Куда это дело вставлять, думаю, разберёшься)
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя ThePhoenix
сообщение 15.11.2021, 21:15
Сообщение #6


Стаж: 11 лет

Сообщений: 2723
Благодарностей: 533
Полезность: 40

Glaster, накурился малясь? Зачем некропостишь?
Цитата
последние сообщение: 28.12.2015, 22:37


ps.gif Лучше через Ham ;)

Отредактировал: ThePhoenix, - 15.11.2021, 21:16
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
  Ответить в данную темуНачать новую тему
 
0 пользователей и 1 гостей читают эту тему: