Перейти к содержимому


Фотография

Как расставить солдат по вышкам без помощи модуля?


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 3

#1 OFFLINE   blade

blade

    Ефрейтор

  • Пользователи
  • 53 сообщений

Отправлено 09 January 2016 - 13:55

  Столкнулся с такой проблемой когда начал делать карту под мод RHS, а специальные модули к сожалению заселяют вышки только солдатами стандартных фракций. Десяток человек я бы смог расставить вручную, но нужно заселить все базы Алтиса, а это сотни человек.
  Можно как-нибудь заселить базы не выравнивая каждого солдата вручную?


  • 0

#2 OFFLINE   TankiSD

TankiSD

    Ст. Прапорщик

  • Пользователи
  • 680 сообщений

Отправлено 09 January 2016 - 15:41

В инит командиру

[this, 1014851, 3] execvm "moveinBUILDpos.sqf";

this - можно заменить на имя юнита

1014851 - id здания

3 - с какой позиции начать расставлять

 

Сам скрипт moveinBUILDpos.sqf

_group = group leader (_this select 0);
_house = if ( count _this > 1 )
  then {getposasl (leader _group) nearestobject (_this select 1)}
  else {nearestbuilding leader _group};
_bpos = if ( count _this > 2 ) then {_this select 2} else {0};
{
  _pos = _house buildingpos _bpos;
  if ( str _pos == "[0,0,0]" ) exitwith {};
  _x setposatl _pos; // расставит по позициям
  _x setdir random 360; // рандомно развернёт их в разные стороны
  _bpos = _bpos + 1; // прибавит значение для позиции, чтобы не поставилось два бойца на одно место
  _bpos = _bpos + random 3; // можно сделать так, т.е. верхняя строка тогда не нужна
  dostop _x; // остановит бойцов на позициях
  _x setnitpos "UP"; // установит положение бойцов: сидя, лёжа, стоя 
[_x] join grpnull; // не обязательно, но я отсоединяю от командира иногда, чтобы бойцы оставались на позиции
// можно добавлять поведение бойцов, агрессию, setskill и т.д. и т.п.
} foreach units _group;  

===========

 

Полный скрипт с созданием бойцов, который использую я для сингла.

_side = createCenter east;
_grpINFunitUSA=[getmarkerPos "crPirgUSA",east, (configfile >> "CfgGroups" >> "West" >> "Guerilla" >> "Infantry" >> "IRG_InfSquad")] call BIS_fnc_spawnGroup;
_leader = leader _grpINFunitUSA;
_mark = markerPos "log";
{
_x setSkill 1;
_x setSkill ["aimingAccuracy", 0.003];
dostop _x;
_x forcespeed 0;
_x setunitpos "UP";
 } forEach units _grpINFunitUSA;
[_leader, 1014851, 3] execvm "crinf\moveinBUILDpos.sqf";

waitUntil {sleep 5;(tmsq distance _mark < 70)}; // если игрок подходит к зданию, то заставляем ботов выходить из здания. А т.к. ИИ медленно всё это делает, то будет более менее реалистично

{
_x setSkill 1;
_x setSkill ["aimingAccuracy", 0.008];
_x doFollow _leader;
_x forcespeed 5;
_x setunitpos "auto";
 } forEach units _grpINFunitUSA;

_leader move getpos tmsq;

Я так делаю.
Другие могут посоветовать что-то другое. 


Сообщение отредактировал TankiSD: 09 January 2016 - 15:41

  • 0

#3 OFFLINE   blade

blade

    Ефрейтор

  • Пользователи
  • 53 сообщений

Отправлено 09 January 2016 - 16:57

TankiSD
Создал скрипт,
выбрал одну из двух строчек ( _bpos = _bpos + 1; ) вторую удалил,
поставил отряд около вышки,
в инит командиру вписал  [this, 929892, 3] execvm "moveinBUILDpos.sqf", на что выскочила ошибка "тип script, ожидается ничего"
дописал  0 = [this, 929892, 3] execvm "moveinBUILDpos.sqf"

Но ничего не происходит =\

 


Сообщение отредактировал blade: 09 January 2016 - 17:14

  • 0

#4 OFFLINE   TankiSD

TankiSD

    Ст. Прапорщик

  • Пользователи
  • 680 сообщений

Отправлено 09 January 2016 - 20:27

Если вышка, то начни с единички. 
Весь отряд может туда не поместиться. 

И да, этот скрипт не раскинет по всем вышкам солдат.

И да, можешь запустить скрипт так

 
call {execVM "moveinBUILDpos.sqf"};
 
и да, скрипт 
_group = group leader (_this select 0);
_house = if ( count _this > 1 )
  then {getposasl (leader _group) nearestobject (_this select 1)}
  else {nearestbuilding leader _group};
_bpos = if ( count _this > 2 ) then {_this select 2} else {0};
{
  _pos = _house buildingpos _bpos;
  if ( str _pos == "[0,0,0]" ) exitwith {};
  _x setposatl _pos;
  _x setdir random 360;
  _bpos = _bpos + 1;
} foreach units _group;  

Должен лежать отдельно.

Попробуй это, для начала, а дальше сам поймёшь.

План действий.

 

Создаёшь в папке с миссией файл moveinBUILDpos.sqf с писаниной выше. 

Заходишь в игру, загружаешь свою миссию, ставишь бойцов, командиру в инит пишешь

 

as= [this, 1014851, 1] execvm "moveinBUILDpos.sqf";

 

Запускаешь миссию, радуешься.

 

Ах да, лучше запускать такие файлы через init.sqf либо через триггер, ибо АрмА может не прочитать скрипт.

 

Т.е. лучше поставить триггер и там прописать 

 

 
as= [InfCom1, 1014851, 1] execvm "moveinBUILDpos.sqf";

 

где InfCom1 это имя командира группы. 

 

И затем активируй тригер. 

Если что, можешь задержку на секунду поставить. 

 

К слову, твоя идея, напихать бойцов по всем базам, приведёт к диким лагам на всём серваке\миссии. 

 

Лучше сделать так. 
Боец подходит к базе, спавнятся юниты, боец отходит от базы, юниты пропадают. 
Это если сингл.

 

==========

 

вот тебе тест миссия в общем. Думаю понятен принцип. 

Прикрепленные файлы


Сообщение отредактировал TankiSD: 09 January 2016 - 20:34

  • 0




Яндекс.Метрика