Иногда для клипов, да и не только, требуется построить отряд в шеренгу или в колонну, а может быть и в две или три шеренги либо колонны. Расставлять их в ручную на карте всегда утомительно да и не всегда они встают как надо...
Вот Вам три скрипта:
1. ПЕРВЫЙ
Расставляет солдат в отряде в одну шеренгу.
_officer = _this select 0
_distancia = _this select 1
?(_distancia <0.6)or (_distancia > 4.5):hintc "Ошибка в условии, дистанция должна быть не меньше 0,6 метра и не больше 4,5 метра!"; goto "end"
;определяем координаты и направление взгляда офицера
_officerpos = GetPos _officer
_posx = _officerpos select 0
_posy = _officerpos select 1
_posz = _officerpos select 2
_dir = getdir _officer
;определяем количество солдат в группе офицера
_soldat = units _officer
_a = 0
_b = count _soldat
#vstroi
;Исключаем офицера из выстраиваемой группы
_a=_a+1
;Моментально выстраиваем солдат справа от офицера с указанной дистанцией.
;Если заменить + на - и наоборот, то солдаты построятся слева от офицера
_posx=_posx+(_distancia*cos _dir)
_posy=_posy-(_distancia*sin _dir)
(_soldat select _a) setpos [_posx,_posy,_posz]
(_soldat select _a) setdir _dir
;Что бы солдаты отдавали честь, активировать следующую строчку:
;(_soldat select _a) Switchmove "EffectStandSalute"
;Здесь можно поставить маленькую задержку ~0.0001 , Но стоит ли?
;Проверка, оставшихся солдат в группе, не вставших в строй
?(_b>_a):goto "vstroi"
#end
exit
; ВНИМАНИЕ! Скрипт запускается строкой [имя офицера, дистанция] exec "stroi.sqs"
; ВНИМАНИЕ! Если поставить дистанцию меньше 0,6 метра то строй нарушится- солдаты начнут "кучковаться"
; ВНИМАНИЕ! Если поставить дистанцию больше 4,5 метра то строй нарушится- солдаты пойдут к офицеру.
2. ВТОРОЙ
Расставляет солдат в отряде в одну колонну.
_officer = _this select 0
_distancia = _this select 1
?(_distancia <0.7)or (_distancia > 6.6):hintc "Ошибка в условии, дистанция должна быть не меньше 0,6 метра и не больше 4,5 метра!"; goto "end"
;определяем координаты и направление взгляда офицера
_officerpos = GetPos _officer
_posx = _officerpos select 0
_posy = _officerpos select 1
_posz = _officerpos select 2
_dir = getdir _officer
;определяем угол необходимый для постройки солдат в колону
_dir2=90-_dir
;определяем количество солдат в группе офицера
_soldat = units _officer
_a = 0
_b = count _soldat
#vstroi
;Исключаем офицера из выстраиваемой группы
_a=_a+1
;Моментально выстраиваем солдат сзади офицера с указанной дистанцией.
;Если заменить - на + , то солдаты построятся перед офицером
_posx=_posx-(_distancia*cos _dir2)
_posy=_posy-(_distancia*sin _dir2)
(_soldat select _a) setpos [_posx,_posy,_posz]
(_soldat select _a) setdir _dir
;Что бы солдаты отдавали честь, активировать следующую строчку:
;(_soldat select _a) Switchmove "EffectStandSalute"
;Здесь можно поставить маленькую задержку ~0.0001 , Но стоит ли?
;Проверяем, оставшихся солдат в группе, не вставших в строй
?(_b>_a):goto "vstroi"
#end
exit
; ВНИМАНИЕ! Скрипт запускается строкой [имя офицера, дистанция] exec "stroi.sqs"
; ВНИМАНИЕ! Если поставить дистанцию меньше 0,7 метра то строй нарушится- солдаты начнут "кучковаться"
; ВНИМАНИЕ! Если поставить дистанцию больше 6,6 метра то строй нарушится- солдаты пойдут к офицеру.
2. ТРЕТИЙ-Универсальный.
Расставляет солдат в отряде в шеренги и колонны.
_officer = _this select 0
_distancia = _this select 1
_shirenga = _this select 2
?(_shirenga <1):hintc "Ошибка в условии, шеренг должно быть как минимум одна!"; goto "end"
?(_distancia <0.6)or (_distancia > 4.5):hintc "Ошибка в условии, дистанция должна быть не меньше 0,6 метров и не больше 4,5 метров!"; goto "end"
;определяем количество солдат в группе офицера
_soldat = units _officer
_a = 0
_b = count _soldat
;определяем количество колонн в построении
_c = _b/_shirenga
;определяем координаты и направление взгляда офицера
_officerpos = GetPos _officer
_posx = _officerpos select 0
_posy = _officerpos select 1
_posz = _officerpos select 2
_dir = getdir _officer
;определяем угол необходимый для постройки солдат в колону
_dir2=90-_dir
#start
_posx2 = _posx
_posy2 = _posy
_shirenga2 = _shirenga
#kolonna
?(_b==_a): goto "end"
?(_shirenga2 <2):goto "shirenga"
_shirenga2 = _shirenga2 -1
;Исключаем офицера из выстраиваемой группы
_a=_a+1
;Моментально выстраиваем солдат в колонны.
_posx=_posx-(_distancia*cos _dir2)
_posy=_posy-(_distancia*sin _dir2)
(_soldat select _a) setpos [_posx,_posy,_posz]
(_soldat select _a) setdir _dir
(_soldat select _a) SetBehaviour "safe"
?(_shirenga2 >1):goto "kolonna"
#shirenga
;Моментально выстраиваем солдат в шеренги.
_a=_a+1
_posx2=_posx2+(_distancia*cos _dir)
_posy2=_posy2-(_distancia*sin _dir)
(_soldat select _a) setpos [_posx2,_posy2,_posz]
(_soldat select _a) setdir _dir
(_soldat select _a) SetBehaviour "safe"
?(_b==_a): goto "end"
?(_c ==_b):goto "shirenga"
_c=_c-1
_posx = _posx2
_posy = _posy2
goto "start"
#end
exit
; ВНИМАНИЕ! Скрипт запускается строкой [имя офицера, дистанция,кол-во шеренг] exec "stroi.sqs"
; ВНИМАНИЕ! Если поставить дистанцию меньше 0,6 метров то строй может нарушится- солдаты начнут "кучковаться"
; ВНИМАНИЕ! Если поставить дистанцию больше 1 метра то строй может нарушится- солдаты пойдут к офицеру.