<<<Назад <<<

Вы мечтали покататься на танках?

Думаю многие хотели бы покататься на танках и пр., а также покатать солдатиков и т.п., но не внутри, а на броне. Я вот тут написал скрипт, который позволяет поставить солдата (и не только) на танк (и не только).
Скрипт позволяет поставить солдата на танк, а танк можно пустить кататься и все будет ОК.
Использование: [sold, tank, [0, -1.5, 2]] exec "LinkObjects.sqs"

Выкладываю демочку: сидите на холмике и смотрите в биноколь
В архивчике имеется более менее подробное руководство по использованию скрипта и рассмотрены ньюансы его работы (enjoy)

скрипт "LinkObjects.sqs"

;Инициализируем массив
_i=count LinkedObjectsArray
? (format["%1", _i]==""): LinkedObjectsArray=[]

;Предустанавливаем значения
_Dir=0
_DirType=0
_LifeType=0
_DisableAI=false
_Delay=0.01

_count=count _this
;0 - Кого
_Man=_this select 0
;Расцепим предыдущую связь сразу (если есть)
[_Man] exec "UnLinkObjects.sqs"

;1 - С кем
_Tank=_this select 1

;2 - относительные координаты
_dx=(_this select 2) select 0
_dy=(_this select 2) select 1
_dz=(_this select 2) select 2

;3 - Направление, если нет, то 0
? _count<4: goto "Start"
_Dir=_this select 3

;4 - Тип направления, если нет, то 0
;типы: 0 - по желанию _Man
; 1 - всегда относительно _Tank
; 2 - всегда по заданному глобально
? _count<5: goto "Start"
_DirType=_this select 4

;5 - Тип жизни _Man, если нет, то 0
;типы: 0 - может умереть, после смерти может упасть
; 1 - может умереть, после смерти останется висеть
; 2 - всегда живой
? _count<6: goto "Start"
_LifeType=_this select 5

;6 - Отключить интеллект, если нет, то false
? _count<7: goto "Start"
_DisableAI=_this select 6

;7 - Интервал, если нет, то 0.01
? _count<8: goto "Start"
_Delay=_this select 7

#Start
;Необходимая пауза, чтобы надежно расцепить
~_Delay
;Добавим _Man в LinkedObjectsArray
_i=count LinkedObjectsArray
LinkedObjectsArray resize (_i+1)
LinkedObjectsArray set [_i, _Man]

_OldDamage=getDammage _Man
doStop _Man
? (_DisableAI): _Man disableAI "MOVE"
_r=sqrt(_dx*_dx+_dy*_dy)
? (_dy==0): _dy=0.001
_ra=(_dx atan2 _dy)-90

? (_DirType==0): _Man setDir ((getDir _Tank)+_Dir)
? (_DirType==1): _Man setDir ((getDir _Tank)+_Dir)
? (_DirType==2): _Man setDir _Dir

#Loop
;Проверка необходимости дальнейшего сцепления
? !(_Man in LinkedObjectsArray): goto "End"

;Установка позиции
_TD=-((getDir _Tank)+_ra)
ddx=(cos _TD)*_r
ddy=(sin _TD)*_r
_Man setPos [(getPos _Tank select 0)+ddx, (getPos _Tank select 1)+ddy,(getPos _Tank select 2)+_dz]

;Установка направления
? (_DirType==0): _Man setDir (getDir _Man)
? (_DirType==1): _Man setDir ((getDir _Tank)+_Dir)
? (_DirType==2): _Man setDir _Dir

;Проверка жизни
? ((!alive _Man)&&(_LifeType==0)): [_Man] exec "UnLinkObjects.sqs"; goto "End"
? (_LifeType==2): _Man setDammage _OldDamage

;Проверка необходимости дальнейшего сцепления
? !(_Man in LinkedObjectsArray): goto "End"

~_Delay

;Проверка необходимости дальнейшего сцепления
? !(_Man in LinkedObjectsArray): goto "End"

goto "Loop"

#End

exit


Пример находится в папке "ПРИМЕРЫ" под названием - "Вы мечтали покататься на танках?"

<<<Назад <<<