Страница 1 из 11
Форум » Мастерская » В помощь картоделу » Вопросы и ответы » Случайное стартовое расположение
Случайное стартовое расположение
Среда, 18.02.2015, 11:26
1
Руководитель RBC
Командир отряда
Очень часто хочется разнообразить миссию тем, что одна из сторон не знает точного расположение какого-то объекта или даже допустим группы противника. Чтобы играя карту из раза в раз, было всегда непонятно где же именно находиться объект или стартует группа. Есть ли у кого проверенный, работающий скрипт нечто подобного.
Нашел в сети вот такое:

Код
// Random starting location selector script
// Usage: _nil =  [this]execVM "scripts\randomStartPos.sqf";

// Define caller
_unit = _this;

// Markers for spawning
_pos = ["startingPosition_1", "startingPosition_2", "startingPosition_3", "startingPosition_4"];

// Randomly selecting the marker to used
_startPos = _pos call BIS_fnc_selectRandom;

// Move the unit or object to the marker
_unit setPos (getMarkerPos _startPos);

Но как я понимаю, это работает на сингл плеере, а если поставить на мультиплеере, то у каждого игрока этот объект будет в разных точках. Очень плохо разбираюсь в скриптах и был бы рад, если подскажут...там ведь можно что-то в начало поставить, чтобы скрипт выполнялся только один раз, только на сервере. Так?

 
Среда, 18.02.2015, 13:48
2
Пользователь
Я бы помог, но уверен, что Zealot лучше объяснит работу своего скрипта. Могу только порекомендовать скачать мою миссию BlackFlame и посмотреть, как это реализовано там.
Файлы, которые затрагивают эту часть:
selpoints.sqf - непосредственно сам скрипт Zealot'а (часть скрипта откомментирована);
init.sqf - там находятся строчки (с 7 по 19) отвечающие за присвоение указанному юниту возможности управления размещением и за отображение маркеров для сторон;
mission.sqm - можно глянуть и там, но лучше в самом редакторе - включить метки, посмотреть триггеры
Сообщение отредактировал DrSl1m - Среда, 18.02.2015, 13:49

Work it, make it, do it makes us: harder, better, faster, stronger...

I thought what I'd do was, I'd pretend I was one of those deaf-mutes.
 
Среда, 18.02.2015, 14:28
3
Руководитель RBC
Командир отряда
Спасибо, попробую
 
Среда, 18.02.2015, 15:23
4
Руководитель RBC
Командир отряда
1. Случайное положение одиночного объекта, когда точность позиционирования до метра не имеет значения. (Ящик, контейнер, техника и т.п.)
Можно расположить несколько невидимых маркеров (можно и видимых) на карте и сгруппировать их с объектом через F2 (т.е. во время редактирования миссии нажать на F2 и соединить линиями)
Тогда после запуска миссии объект случайным образом займет одну из позиций на маркерах или место где объект находится изначально.

2. Случайное положение объекта если точность позиционирования имеет значение.
Сначала нужно дать имя объекту в редакторе. Потом последовательно снимать его параметры при запусках через консоль с помощью команд:
getposWorld obj1; getDir obj1;
Получим массив позиций
[[1719.72,5638.15,5.50144],[1707.07,5642.74,5.50144]]
и массив направлений
[30,60]

теперь пишем код в init.sqf типа:

Код

if (isServer) then {
_num = [0,1] call BIS_fnc_randomInt; // индексы массива начинаются с 0
_pos = [[1719.72,5638.15,5.50144],[1707.07,5642.74,5.50144]] select _num;
_dir = [30,60] select _num;
obj1 setPosWorld _pos; obj1 setDir _pos;

};


Продолжение следует.

 
Среда, 18.02.2015, 16:18
5
Руководитель RBC
Командир отряда
3. Дать возможность одному из игроков выбрать положение объекта на фризтайме из нескольких заранее определенных позиций.
Сделал тестовую миссию с такой возможностью через специально написанный скрипт selpoints2 (до этого не публиковался) http://u.to/5h2WCg

 
Воскресенье, 08.03.2015, 14:29
6
Пользователь
Можно ли в selpoints использовать триггер, как объект для размещения?
Work it, make it, do it makes us: harder, better, faster, stronger...

I thought what I'd do was, I'd pretend I was one of those deaf-mutes.
 
Вторник, 17.03.2015, 07:34
7
Руководитель RBC
Командир отряда
Цитата DrSl1m ()
Можно ли в selpoints использовать триггер, как объект для размещения?

Если только немного модифицировать скрипт, вообще он на это не рассчитан.

 
Вторник, 17.03.2015, 12:54
8
Пользователь
Цитата Zealot ()
Если только немного модифицировать скрипт, вообще он на это не рассчитан.
Я сделал проще. Указал местоположение маркера и переместил триггер на его местоположение.

Work it, make it, do it makes us: harder, better, faster, stronger...

I thought what I'd do was, I'd pretend I was one of those deaf-mutes.
 
Понедельник, 06.04.2015, 14:52
9
Руководитель RBC
Командир отряда
4. Перемещение отряда(одного или нескольких) с техникой по маркерам с выбором места во время фриз-тайма
вот миссия-пример (с новым вариантом скрипта)
https://yadi.sk/d/yVunV6D5fo3Xj

 
Воскресенье, 19.04.2015, 10:23
Руководитель RBC
Командир отряда
Цитата
4. Перемещение отряда(одного или нескольких) с техникой по маркерам с выбором места во время фриз-тайма
вот миссия-пример (с новым вариантом скрипта)
https://yadi.sk/d/yVunV6D5fo3Xj

почему-то после конца фризтайма не пропадает значок выбрать место. В итоге получается, что в процессе игры командир может кидать своих бойцов телепортом в любую из точек.

 
Воскресенье, 19.04.2015, 11:23
Руководитель RBC
Командир отряда
Цитата Morkontar ()
почему-то после конца фризтайма не пропадает значок выбрать место. В итоге получается, что в процессе игры командир может кидать своих бойцов телепортом в любую из точек.

Значки не пропадают, остаются на всю игру. Пункт переноса отряда есть в меню только до конца фризтайма или истечении 5 мин с начала миссии, что случится позже.

 
def
Среда, 09.12.2015, 16:08
Участник сообщества
Цитата Morkontar ()
почему-то после конца фризтайма не пропадает значок выбрать место. В итоге получается, что в процессе игры командир может кидать своих бойцов телепортом в любую из точек.
Для того, чтобы телепорт был доступен только 1 раз достаточно добавить 77й строкой в скрипт teleport2.sqf:
    zlt_tlMaxTime = 0;
не элегантно, но работает.
   
Код
} foreach _objs;
    zlt_tlMaxTime = 0;
};

Чтобы удалить еще и маркеры, добавляем 93ю строчку:
    {_x deleteMarker} forEach [_selmarkers];
Код
waitUntil {time > zlt_tlMaxTime && missionnamespace getvariable ["WMT_pub_frzState",3] >=3};
{deleteMarker _x} forEach _selmarkers;
player removeAction zlt_teleMenuId;

Однако это удалит маркеры выбора только у командира телепортируемого отряда.
Чтобы удалить маркеры у всех игроков, придется встроить команду, которая заставит всех игроков удалить маркеры после телепорта, однако подобные технические решения непопулярны. 

Можно поступить иначе и показывать маркеры изначально только командиру телепортируемого отряда. Для этого нужно в инит добавить строку
    else {{_x deleteMarker} [sel1,sel2];};
   
Код
if (player == vip) then {
        [[m1, units gr1, m2, [m3,m4,m5,m6,m7], units gr2 ],["sel1","sel2"],[["p2_1","p2_2","p2_3","p2_4","p2_5"],["p1_1","p1_2","p1_3","p1_4","p1_5"]]] execvm "teleport2.sqf";
    }
    else {{_x deleteMarker} [sel1,sel2];};
};

Однако следует понимать, что это осложнит планирование миссии КСом. КСу придется заранее открыть карту в редакторе и узнать места телепорта, а затем при расстановке маркеров при планировании операции в штабе, самостоятельно указать отрядам возможные места размещения противника. Можно обойти и это ограничение, прописав блок кода телепорта в ините, обрамив его условием, проверяющим, что игра уже началась 
Код
if (!isDedicated) then {
    waitUntil {!isnull player};
    if (player == vip) then {
        [[m1, units gr1, m2, [m3,m4,m5,m6,m7], units gr2 ],["sel1","sel2"],[["p2_1","p2_2","p2_3","p2_4","p2_5"],["p1_1","p1_2","p1_3","p1_4","p1_5"]]] execvm "teleport2.sqf";
    }
    else {
      [] spawn {
         waituntil {sleep 0.1;time > 0};
         {deleteMarker _x;} forEach ["sel1","sel2"];
       };
     };
};

Пример такой миссии https://yadi.sk/d/LvYIWi6zm6zEX

Либо я бы рекомендовал просто сделать маркеры малозаметными (небольшого размера, цветом группировки и заливкой "граница"/"диагональной").

 
Четверг, 12.10.2017, 12:57
Пользователь
Версия телепорта, модернизированная самим Zealot'ом, для нескольких объектов. Применительно например для миссий на уничтожение статичных объектов. 
https://yadi.sk/d/XHPRn2023NgpLR
Сообщение отредактировал Gagarin - Четверг, 12.10.2017, 12:57

 
Форум » Мастерская » В помощь картоделу » Вопросы и ответы » Случайное стартовое расположение
Страница 1 из 11
Поиск:


Правила чата
Мини-чат
+Мини-чат
0