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


Фотография

Постановка группы на позицию.


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

#1 OFFLINE   pixel

pixel

    Прапорщик

  • Пользователи
  • 500 сообщений
  • Откуда:Россия.

Отправлено 30 September 2016 - 15:47

Всем доброго времени суток. Вопрос следующий нужно, чтобы после инструктажа группа во главе с игроком появилась в определённом месте. И каждый игрок на определённой точке.

Делал так: 

igrok_1 setPos (position igrok_1_Pos);
igrok_2 setPos (position igrok_2_Pos);
igrok_3 setPos (position igrok_3_Pos);
igrok_4 setPos (position igrok_4_Pos);
igrok_5 setPos (position igrok_5_Pos);
igrok_6 setPos (position igrok_6_Pos);
igrok_7 setPos (position igrok_7_Pos);
 
Но обнаружил, что при игре в кооп при отсутствии одного из игроков например игрок_5 дальнейший код не срабатывает. И всё летит в тартарары!)
Как сделать так, чтобы группа пусть и не полная появлялась на указанных мной точках. (То есть у каждого бота своя позиция)
 
Предполагаю, что как то так: 
[_x, Random_Animation_SIT, "ASIS"] call BIS_fnc_ambientAnim;
} forEach units igrok_1;

Но какую команду вставить,  я не знаю помогите кто знает. Заранее спасибо!


Сообщение отредактировал pixel: 30 September 2016 - 15:48

  • 0

#2 OFFLINE   Schatten

Schatten

    Капитан

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

Отправлено 03 October 2016 - 12:07

Попробуй этот код:

for "_i" from 1 to 7 do {
	_varName = "igrok_" + (str _i);

	if (call (compile (format ["!(isNull %1)", _varName]))) then {
		call (compile (format ["%1 setPos (position %1_Pos); true", _varName]));
	};
};

А если игрок igrok_1 всегда будет, то этот:

{
	call (compile (format ["%1 setPos (position %1_Pos); true", vehicleVarName _x]));
}
forEach (units igrok_1);

Сообщение отредактировал Schatten: 03 October 2016 - 12:31

  • 0

#3 OFFLINE   vlad333000

vlad333000

    Полковник

  • Пользователи
  • 3224 сообщений
  • Откуда:Кострома

Отправлено 03 October 2016 - 12:27

pixel, если вам трудно раставить игроков в 3D редакторе, то в инит каждому игроку:
this setVariable ["TAG_startPos", <position>];
В init.sqf
player setPos (player getVariable "TAG_startPos");
Schatten, переменные эти находятся в пространстве имен "mission", поэтому их можно получить через:
missionNamespace getVariable [_varName, _defValue]
UPD: вот еще вариант:
private _positions = [<position>, <position>, ...];
for "_i" from 0 to (count _positions - 1) do
{
   (missionNamespace getVariable ["igrok_" + str _i, objNull]) setPos (_positions select _i);
}

Сообщение отредактировал vlad333000: 03 October 2016 - 12:43

  • 0

#4 OFFLINE   Schatten

Schatten

    Капитан

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

Отправлено 03 October 2016 - 12:34

Schatten, переменные эти находятся в пространстве имен "mission", поэтому их можно получить через:

missionNamespace getVariable [_varName, _defValue]

Т. е. так что ли работать не будет:
igrok_1 setPos _pos;
?
А так будет:
(missionNamespace getVariable "igrok_1") setPos _pos;
?

Сообщение отредактировал Schatten: 03 October 2016 - 12:34

  • 0

#5 OFFLINE   vlad333000

vlad333000

    Полковник

  • Пользователи
  • 3224 сообщений
  • Откуда:Кострома

Отправлено 03 October 2016 - 12:38

Schatten, ну прям так нет - у тебя не определено значение по-умолчанию и поэтому все равно может возникнуть неопределенная переменная, нужно добавить второй параметр, например objNull, как я выше написал в обновленном варианте, арма не будет ругатся на "нулевой" объект

PS Правда сломается если кто-нибудь запишет в эту переменную что-то другое отличное от объекта :)

Сообщение отредактировал vlad333000: 03 October 2016 - 12:41

  • 0

#6 OFFLINE   Schatten

Schatten

    Капитан

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

Отправлено 03 October 2016 - 12:44

Schatten, ну прям так нет - у тебя не определено значение по-умолчанию и поэтому все равно может возникнуть неопределенная переменная, нужно добавить второй параметр, например objNull

Не в этом дело.

igrok_1 setPos _pos;
(missionNamespace getVariable "igrok_1") setPos _pos;

Разве первый вариант работать не будет?


  • 0

#7 OFFLINE   vlad333000

vlad333000

    Полковник

  • Пользователи
  • 3224 сообщений
  • Откуда:Кострома

Отправлено 03 October 2016 - 12:51

Schatten, только если переменная будет определена
У автора возникла проблема ошибки при отсутствии игроков, вы решили через call compile format... организовать проверку на определенность переменной, я вам написал, что это можно сократить до просто:
missionNamespace getVariable [имя_переменной, значение_по_умолчанию_если_не_определено]
Имя переменной в редакторе, в параметрах объекта, аналогично примерно такой штуке (Это не работоспособный скрипт, написанный для примера)
this setVehicleVarName varName
varName = this
Эта штука выполняется в стандартном прострнастве - misssionNamespace, следовательно через

Пожалуйста Войдите или Зарегистрируйтесь чтобы увидеть скрытое содержание

эту переменную varName можно получить и в случае ее неопределенности получить значение по умолчанию

Сообщение отредактировал vlad333000: 03 October 2016 - 13:02

  • 0




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