А что именно нужно, способность бота правдоподобно реагировать на цель или уходить от столкновений?
Я сам дольше всего продолбался именно с первым, и кое-как отшлифовал, работает так что если цель находится за полем зрения или сзади, делаем хаотичный маневр, походу проверяем не попал ли таргет в поле зрения. Как только таргет примерно впереди - следуем прицелом за ним и стреляем с припуском в надцать градусов. таким образом боты перестают крутиться вокру друг-друга и в то е время не летают прямо если ты сзади.. Функцию постить не буду, потому как там завязка на треть всего кода.
А по поводу второго у меня работала ф-ция, боты либо облетали либо останавливались перед друг-другом. Но возможно я ее редактировал, так что не гарантирую работоспособность, вобщем просто пример:
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
непомню что я там с ней делал, но вобсчем принцип понятен. Скан это хайднутый пивот внутри корабля