Нет эмоций; есть гармония.
Нет неведения; есть знание.
Нет страстей; есть покой.
Нет смерти; есть Великая Сила.
Кодекс джедаев
Майкл Ривз, "Тёмный мститель"





Сколько глобус ни крути, там Fess-Style не найти...
Сайт Fess'a » Передвижной HQ - Форум
[ Новые сообщения · Участники · Правила форума · Поиск ]
  • Страница 1 из 1
  • 1
Форум » Форум Редакторов » Редактор ARMA » Передвижной HQ (Мобильный штаб)
Передвижной HQ
ShatenДата: Среда, 19.03.2014, 14:44 | Сообщение # 1

Сообщений: 17
Статус:
Замучился искать по всему интернету, нигде не нашел толкового скрипта Командно Штабной Машины (КШМ, бурж.: HQ), пришлось ваять самому.
Итак, самый простой вариант, спасибо Fess'у за радиомаяк (см. интересности), который и лег в основу.
Ставим Машку, называем ее kshmeast (или иначе), пишем ей в инит :

["respawn_east",kshmeast] exec "mayakeast.sqs"; "respawn_east" setMarkerAlpha 0;

Создаем в папке с миссией mayakeast.sqs, в нем пишем:

_marker = _this select 0 
_obj = _this select 1 
#loop 
_marker setMarkerPos getpos _obj 
~1 
goto "loop"

Все, блин, наш респ лазает за Машкой по всей карте !  happy
Пояснение: респ уже должен быть сделан. 
"respawn_east" setMarkerAlpha 0; - делает маркер невидимым, актуально в ПвП, что бы не демаскировать КШМ на карте маркером респа.

Добавлено (19.03.2014, 13:49)
---------------------------------------------
Далее вариант два, посложнее.
Ставим Машку, называем ее kshmeast1 (или иначе),
ставим Машку, называем ее kshmeast2 (или иначе),
ставим Машку, называем ее kshmeast3 (или иначе),
ставим Машку, называем ее kshmeast4 (или иначе), пишем им в инит : 

["respeast1",kshmeast1] exec "mayakeast1.sqs"; "respawn_east" setMarkerAlpha 0; 
["respeast2",kshmeast2] exec "mayakeast2.sqs";
["respeast3",kshmeast3] exec "mayakeast3.sqs";
["respeast4",kshmeast4] exec "mayakeast4.sqs";

Каждой машине свою строчку, разумеется.
Создаем в папке с миссией mayakeast1.sqs,
создаем в папке с миссией mayakeast2.sqs,
создаем в папке с миссией mayakeast3.sqs,
создаем в папке с миссией mayakeast4.sqs, в них пишем: 

_marker = _this select 0  
_obj = _this select 1  
#loop  
_marker setMarkerPos getpos _obj  
~1  
goto "loop"

Тут везде одинаково.

На карте ставим маркеры (пустые, те что самые первые) respeast1,respeast2,respeast3,respeast4, baseeast.
Ставим триггеры, пять штук:
Радио Альфа, многократно, размер 0/0, текст: Развернуть КШМ1
Условие: Alive kshmeast1
Активация: "respawn_east" setMarkerPos getMarkerpos "respeast1";

Радио Браво, многократно, размер 0/0, текст: Развернуть КШМ2
Условие: Alive kshmeast2
Активация: "respawn_east" setMarkerPos getMarkerpos "respeast2";

Радио Дельта, многократно, размер 0/0, текст: Развернуть КШМ3
Условие: Alive kshmeast3
Активация: "respawn_east" setMarkerPos getMarkerpos "respeast3";

Радио Чарли, многократно, размер 0/0, текст: Развернуть КШМ4
Условие: Alive kshmeast4
Активация: "respawn_east" setMarkerPos getMarkerpos "respeast4";

Нет, многократно, размер 0/0
Условие: not alive kshmeast1 and not alive kshmeast2 and not alive kshmeast3 and not alive kshmeast4 
Активация: "respawn_east" setMarkerPos getMarkerpos "base";

Теперь у нас четыре Машки! Машка разворачивается радиокомандой, при этом респ переносится на нее и с ней ездит по карте, пока не перенесешь на другую. При уничтожении всех КШМ, респ автоматом уезжает на базу (маркер base).
Маркеры  respeast1,respeast2,respeast3,respeast4 и baseeast можно заменить с пустых на иконки (флажок, например), тогда на карте будет видно положение каждой машины.
Пятый триггер можно так же сделать на радиоактивации, убрав условие (поставить this), тогда можно еще и на базу респ нести. 
В активации триггеров недурно было бы вписать: hint "Развернут КШМ 1" , но в ПвП это сообщение будет выдаваться всем (врагам тоже).

Добавлено (19.03.2014, 14:27)
---------------------------------------------
Вариант три, пока сырой, но вроде работает.
Ставим Машку, называем ее kshmeast, в инит пишем:

["respeast",kshmeast] exec "mayakeast.sqs"; "respawn_east" setMarkerAlpha 0; redopen=true;

Создаем в папке с миссией mayakeast.sqs, в нем пишем:  

_marker = _this select 0   
_obj = _this select 1   
#loop   
_marker setMarkerPos getpos _obj   
~1   
goto "loop"

Создаем Shtabeast.sqs, в нем:

eastfuelsliv = true;publicVariable "eastfuelsliv";
eastfuelnaliv = false;publicVariable "eastfuelnaliv";
eastset = true;publicVariable "eastset";
"respawn_east" setMarkerPos getMarkerpos "respeast";
redopen=false;publicVariable "redopen";
player removeAction acteast;
~60
redclose=true;publicVariable "redclose";

Создаем Shtabeast2.sqs, в нем:

"respawn_east" setMarkerPos getMarkerpos "baseeast";
redclose=false;publicVariable "redclose";
player removeAction acteast2;
eastset = false;publicVariable "eastset";
~60
eastfuelsliv = false;publicVariable "eastfuelsliv";
eastfuelnaliv = true;publicVariable "eastfuelnaliv";
redopen=true;publicVariable "redopen";
deleteVehicle neteast1;
deleteVehicle neteast2;

Создаем Setka1east.sqs, в нем:

neteast1 = "Land_CamoNet_EAST_EP1" createVehicle getpos kshmeast;
neteast1 attachTo [kshmeast, [0,1.2,-1.5]];
~0.01
neteast1 setDir ((getDir kshmeast) +90);
eastset = false;publicVariable "eastset";
player removeAction acteastsetka2;  playe

Создаем Setka2east.sqs, в нем:

neteast2 = "Land_CamoNet_EAST" createVehicle getpos kshmeast;
neteast2 attachTo [kshmeast, [0,1.2,-1.5]];
~0.01
neteast2 setDir ((getDir kshmeast) +90);
eastset = false;publicVariable "eastset";
player removeAction acteastsetka2;  player removeAction acteastsetka1;

В игре создаем восемь триггеров:
Нет, многократно, размеры 0.
Условие: player distance kshmeast > 5
Активация: player removeAction acteast2;

Нет, многократно, размеры 0.
Условие: player distance kshmeast > 5
Активация: player removeAction acteast;  player removeAction acteastsetka2;  player removeAction acteastsetka1;

Нет, многократно, размеры 0.
Условие: player distance kshmeast < 5 and redclose
Активация: if (redclose) then {acteast2 = player addaction ["Cвернуть штаб","Shtabeast2.sqs"]};

Нет, многократно, размеры 0.
Условие: player distance kshmeast < 5 and redopen
Активация: if (redopen) then {acteast = player addaction ["Развернуть штаб","Shtabeast.sqs"]};

Нет, многократно, размеры 0.
Условие: eastfuelnaliv
Активация: kshmeast setFuel 1;

Нет, многократно, размеры 0.
Условие: eastfuelsliv
Активация: kshmeast setFuel 0;

Нет, многократно, размеры 0.
Условие: player distance kshmeast < 5 and eastset
Активация: if (isServer) then {acteastsetka1 = player addaction ["Накрыть сетью. Пустыня","Setka1east.sqs"]}; if (isServer) then {acteastsetka2 = player addaction ["Накрыть сетью. Лес","Setka2east.sqs"]};

Нет, многократно, размеры 0.
Условие: not alive kshmeast
Активация: "respawn_east" setMarkerPos getMarkerpos "base";

На карте нужны маркеры base, respeast b respawn_east, разумеется.
Все? Вроде, все. Надеюсь, ничего не забыл, не напутал.

Как работает:
Подходишь к Машке, появляется пункт в меню "Развернуть штаб". Жмешь- респ переносится на Машку, появляется меню "Накрыть сетью лес\пустыня", сливается топливо (можно водителя просто заблокировать, но сначала его надо высадить, что бы не замуровать) и минуту Машка недоступна, потом можно свернуть штаб, подождать еще минуту и ехать. Респ при этом вернется на базу.
Для Стороны синих заменить east на west, red на blue. Везде. С особой тщательностью.
Делалось для мультиплеера, но протестить основательно не удалось. Возможны ошибки, да что возможно, есть они наверняка. В скриптах я разбираюсь как балерина в танковом газотурбинном двигателе, но пришлось разбираться.

Добавлено (19.03.2014, 14:33)
---------------------------------------------
Врет (19.03.2014, 7.30) !
Было бы великолепно, если кто-нибудь оптимизирует и сожмет- поправит то что я нагородил. Наверняка, можно все это проще сделать.
А если у бисов такая функция есть и включается одной кнопкой, то вообще замечательно.

Добавлено (19.03.2014, 14:44)
---------------------------------------------
Опять врет (19.03.2014, 7.42) !  biggrin
Ах, да!  ArmA 2 CO (c ACE модом, если что) у меня.

 
FessДата: Среда, 19.03.2014, 18:33 | Сообщение # 2

Добрый админ
Сообщений: 2339
Статус:
Уважаемый Shaten, ну понаписал...))) В А3 добавили отдельный модуль "Точка возрождения", так вот там, например, предусмотрена возможность синхронизации модуля с транспортом, что позволяет легко прикрепить респавн к технике.

Ну а в А2, там да... чтобы сделать подвижный респавн, надо скриптить. Кстати, ты бы сделал проверку, которая при уничтожении техники выключает цикл [и удаляет HQ]. Чего процессор впустую гонять smile
 
ShatenДата: Среда, 19.03.2014, 22:06 | Сообщение # 3

Сообщений: 17
Статус:
Да я бы сделал, но не умею  biggrin
if (stop) then {exit}; и в триггере stop=true так, или я чушь несу?
Впрочем, мне это не обязательно, т.к. в наших играх уничтожение КШМ практически равно провалу задания. В планах вообще отказаться от возрождения, но пока не выходит.
А вот если кому надо, тот, думаю, допилит скрипт под себя.
 
FessДата: Четверг, 20.03.2014, 15:37 | Сообщение # 4

Добрый админ
Сообщений: 2339
Статус:
Уважаемый Shaten, ну типа так smile

Код
_marker = _this select 0
_obj = _this select 1
#loop
_marker setMarkerPos getpos _obj
?!alive _obj : goto "end"
~1
goto "loop"
#end
deleteMarker _marker

И еще вот здесь можно упростить

Цитата Shaten ()
Далее вариант два, посложнее.
Ставим Машку, называем ее kshmeast1 (или иначе),
ставим Машку, называем ее kshmeast2 (или иначе),
ставим Машку, называем ее kshmeast3 (или иначе),
ставим Машку, называем ее kshmeast4 (или иначе), пишем им в инит :

["respeast1",kshmeast1] exec "mayakeast1.sqs";
["respeast2",kshmeast2] exec "mayakeast2.sqs";
["respeast3",kshmeast3] exec "mayakeast3.sqs";
["respeast4",kshmeast4] exec "mayakeast4.sqs";

Вместо kshmeast1..4 можно просто писать this
Плюс нет необходимости создавать четыре отдельных скрипта (ведь они одинаковые), можешь просто один скрипт вызвать четыре раза.

Код
["respeast1", this] exec "mayakeast1.sqs";
...
["respeast4", this] exec "mayakeast1.sqs";
 
ShatenДата: Четверг, 20.03.2014, 18:43 | Сообщение # 5

Сообщений: 17
Статус:
Век живи, век учись. Про вызов одного скрипта четыре раза я не подумал.
А строчка

Код
#end   
deleteMarker _marker
завершает цикл? А как она узнает когда это сделать?
Или ей условие надо поставить?


Сообщение отредактировал Shaten - Четверг, 20.03.2014, 18:45
 
FessДата: Пятница, 21.03.2014, 15:01 | Сообщение # 6

Добрый админ
Сообщений: 2339
Статус:
Цитата Shaten ()
А строчка
Код
#end     
deleteMarker _marker
завершает цикл? А как она узнает когда это сделать?
Или ей условие надо поставить?

Ну вот же условие, смотри внимательно)

Код
?!alive _obj : goto "end"
 
ShatenДата: Пятница, 21.03.2014, 17:34 | Сообщение # 7

Сообщений: 17
Статус:
Ааа, вон оно как !
 
Форум » Форум Редакторов » Редактор ARMA » Передвижной HQ (Мобильный штаб)
  • Страница 1 из 1
  • 1
Поиск: