Квази-интеллект
Немного усложним поведение ботов - чтобы игра не была такой "пресной".
Сделаем из бота агр-моба (см LA2).
Сценарий следующий:
Бот шатается по уровню туда-сюда, пока мимо него не промчится игрок. Как только происходит это событие, бот переключается на игрока (со всеми последствиями). В случае если игрок отрывается на безопасное расстояние от преследователя - бот переходи снова к мироному шатанию по уровню.
|
Нам понадобиться ещё одно поле в типе бота - хендл пивота-вейпоинта.
Type bot
Field entity
Field time
Field Survivability
Field point
End Type
Правим функцию создания бота:
b\point=CreatePivot()
PositionEntity b\point,x,y,z
Return True
Ну и теперь програмим квази-интеллект:
Function update_bot()
Rdist#=15
v#=0.01
For a.bot=Each bot
;=
If a\time=0 a\time=MilliSecs()
new_time=MilliSecs()
delta_t=new_time-a\time
a\time=new_time
;=
If EntityDistance(user,a\entity)<Rdist#
PointEntity a\entity,user
Else
If EntityDistance(a\entity,a\point)<2
PositionEntity a\point,EntityX(a\point)+Rnd(-40,40),EntityY(a\point),EntityZ(a\point)+Rnd(-40,40)
EndIf
PointEntity a\entity,a\point
EndIf
;===========
MoveEntity a\entity,0,0,v#*delta_t
TranslateEntity user,0,-G#*delta_t,0
Next
End Function
Rdist# отвечает за расстояние, на котором бот переключается на игрока.
Рассмотрим подробнее:
If EntityDistance(user,a\entity)<Rdist#
Если расстояние до игрока меньше критического - время действовать.
PointEntity a\entity,user
"наводка" на игрока.
Если же игрока рядом нет, то
If EntityDistance(a\entity,a\point)<2
Бот подошёл к контрольной тчке достаточно близко - пора её сменить
PositionEntity a\point,EntityX(a\point)+Rnd(-40,40),EntityY(a\point),EntityZ(a\point)+Rnd(-40,40)
в любом случае - наводим бота на точку:
PointEntity a\entity,a\point
А дальше - дело техники