Показать сообщение отдельно
Старый 17.04.2008, 23:44   #11
FrankH
Разработчик
 
Регистрация: 09.12.2007
Сообщений: 376
Написано 83 полезных сообщений
(для 122 пользователей)
Ответ: Бот-самолёт

А что именно нужно, способность бота правдоподобно реагировать на цель или уходить от столкновений?
Я сам дольше всего продолбался именно с первым, и кое-как отшлифовал, работает так что если цель находится за полем зрения или сзади, делаем хаотичный маневр, походу проверяем не попал ли таргет в поле зрения. Как только таргет примерно впереди - следуем прицелом за ним и стреляем с припуском в надцать градусов. таким образом боты перестают крутиться вокру друг-друга и в то е время не летают прямо если ты сзади.. Функцию постить не буду, потому как там завязка на треть всего кода.
А по поводу второго у меня работала ф-ция, боты либо облетали либо останавливались перед друг-другом. Но возможно я ее редактировал, так что не гарантирую работоспособность, вобщем просто пример:
Function Scan(ou,tu);+
    u.Unit=Object.Unit(EntityName(ou))
    d=20;+u\mass Shr 1;*.5
    
    Touch1= EntityPick (u\scan,d);:RotateEntity u\scan,0,0,0
    If tu And u\speed#>1 PointEntity u\scan,tu:Touch2= EntityPick (u\scan,d)
    If (Touch1 Or Touch2)  Then
        RotateEntity u\scan,-15,0,0,0
        ;если ПОМЕХА ВВЕРХУ тогда поворачиваем сканер ВНИЗ на 15
        If EntityPick(u\scan,d) Then
            RotateEntity u\scan,15,0,0,0
            ;если ПОМЕХА ВНИЗУ тогда поворачиваем сканер ВВЕРХ-ВЛЕВО на 15-15
            If EntityPick(u\scan,d) Then
                RotateEntity u\scan,-15,-15,0,0
                ;если ПОМЕХА ВВЕРХ-ВЛЕВО тогда поворачиваем сканер ВНИЗ-ВПРАВО на 15-15
                If EntityPick(u\scan,d) Then
                    RotateEntity u\scan,15,15,0,0
                    ;если ПОМЕХА ВЕЗДЕ тогда ОСТАНАВЛИВАЕМ ДВИГАТЕЛЬ
                    If EntityPick(u\scan,d) Then
                        RotateEntity u\scan,0,0,0,0
                        i = 5
                    Else
                        RotateEntity u\scan,0,0,0,0
                        i = 4
                    EndIf
                Else
                    RotateEntity u\scan,0,0,0,0
                    i = 3
                EndIf
            Else
                RotateEntity u\scan,0,0,0,0
                i = 2
            EndIf
        Else
            RotateEntity u\scan,0,0,0,0
            i = 1
        EndIf
        i = 1
    Else
        RotateEntity u\scan,0,0,0,0
        i = 0
    EndIf
    Return i
    
;    u.Unit_humans=Object.Unit_humans(EntityName(t))
;    If  (u\state=9) Then Return 1 Else Return 2
End Function
непомню что я там с ней делал, но вобсчем принцип понятен. Скан это хайднутый пивот внутри корабля
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Blitzerg (18.04.2008)