|
|
Модератор форума: GUNNER161, Panikaha |
Форум РЕДАКТОР - ArmA 3 Скрипты Дружесственый БПЛА - доступ к камере БПЛА для игрока (нужна помощь с реализацией скрипта) |
Дружесственый БПЛА - доступ к камере БПЛА для игрока |
› Пятница
› 20.07.2018
› 19:09
› Сообщение #
Здравствуйте, пытаюсь придумать как реализовать скрипт с поддержкой союзного БПЛА, но что-то не выходит.
Суть скрипта в следующем: У меня есть объект - вражеская зенитка (enemy_pvo). Есть игрок с зарядом c4 (player). Есть беспилотник (bpla). Игрок уничтожает зенитку. Где-то на отдалении от игрока создается союзный беспилотник и начинает кружить в определенной зоне. Игрок должен иметь возможность воспользоваться камерой этого беспилотника, но не иметь возможности управлять им напрямую. Наткнулся на эта статью ССЫЛКА Но эта статья под Арму2 и в арме3 такого модуля я не нашёл. Нашёл какой-то модуль видеонаблюдения, но это совсем не то, что мне нужно. Собственно нужна помощь с реализацией скрипта. Скрипты писать я немного умею, так что если подкинете хотя бы команды для реализации или какие-то похожие примеры реализации буду очень признателен. |
› Воскресенье
› 22.07.2018
› 17:59
› Сообщение #
Himas, попробуй в скрипте showUAVfeed true/false. Может подойдет.
|
› Понедельник
› 23.07.2018
› 17:32
› Сообщение #
Если сможеш создать беспилотник и дать ему маршрут, то игрок может переключить вид командой
https://community.bistudio.com/wiki/switchCamera |
› Вторник
› 24.07.2018
› 15:51
› Сообщение #
Slon, спасибо, добавил в скрипт ещё remoteControl и всё работает, как я хотел. Но по ходу дела когда я писал скрипт у меня назрел ещё один вопрос касательно коопа. Я хочу свою миссию сделать [sp/coop]. Есть 5 юнитов стороны OPFOR. Они объединенные в одну группу. Соответственно есть 1 - игрок и 4 - игровых юнита. В сингле все понятно. Непонятно мне до конца с коопом.
Кооп миссию нужно сохранять в редакторе как мультиплеерную или синглплеерную ? В любом случае как себя будут вести скрипты в которых указана переменная player? Я так понял, что player определяется как отдельный компьютер игрока. Соответственно в coop будет больше player'ов. Значит скрипт будет запускаться для каждого игрока индивидуально на своей машине ? Или только у хоста-сервера ? Или вообще переменная будет игнорироваться ? Вот к примеру такое условие в тригерре: Код player distance leader group sold1 < 100 Как себя поведёт это условие, если игроков будет несколько ? Есть ли смысл назначать уникальную переменную для каждого юнита под контролем игрока и занести эти переменные в массив и уже этот массив использовать в условиях ? Ещё пример, действие игроку в миссии добавляю следующей командой: Код player addAction ["<t color='#FF0000'>Использовать БПЛА/Use UAV</t>", "UAV.sqf"]; Но вот на бисовской вики наткнулся на такую конструкцию: Код // create object on the server and add action to the object on every client [url=https://community.bistudio.com/wiki/if]if ([url=https://community.bistudio.com/wiki/isServer]isServer) [url=https://community.bistudio.com/wiki/then]then{ _object = "some_obj_class" [url=https://community.bistudio.com/wiki/createVehicle]createVehicle [1234, 1234, 0]; [_object, ["Greetings!", {[url=https://community.bistudio.com/wiki/hint]hint "Hello!"}]] [url=https://community.bistudio.com/wiki/remoteExec]remoteExec ["addAction"];}; Думаю из коментария всё понятно. И вот после этого я уже совсем запутался. И теперь не уверен как лучше запускать и писать скрипты, чтобы это и в SP и COOP работало нормально. Кстати вот мой скрипт на БПЛА и хочу сразу понять, будет он адекватно работать в coop ? Логика следующая: Уничтожается ЗСУ, в условие триггера проверяю: Код !alive pvo; При активации запускаю скрипт CarDestroy.sqf: Код nul = [] execVM "CarDestroy.sqf"; Сам скрипт CarDestroy.sqf: Действие "Использовать БПЛА/Use UAV" запускает скрипт UAV.sqf следующего содержания: Код player remoteControl gunner uav; gunner uav switchCamera "Internal"; nul = [] execVM "checkUAV.sqf"; checkUAV служит для проверки, если БПЛА собьют действие убирается из меню выбора: Код while {alive uav} do { }; player removeAction 0; |
› Вторник
› 24.07.2018
› 17:28
› Сообщение #
Player - это Один игрок и у каждого компа свой, остальные игроки для него не понятные боты ))
Для того чтобы скрипо реагировал на определённого бота(игрока) ему надо давать Имя. а в случае респа Имя надо дать повторно с объявлением Для всех командой https://community.bistudio.com/wiki/publicVariable например _war_name = format ["pl_%1", name Player]; \\ создаём глобальную переменную из Ника игрока While {true} do {// бесконечный цикл WaitUntil {alive Player}; // ожидаем возрождения игрока coll compile format ["%1 = Player; publicVariable %1", _war_name]; // объявление всем sleep 1; WaitUntil {!(alive Player)}; // ожидание смерти игрока. }; |
› Вторник
› 24.07.2018
› 17:30
› Сообщение #
player distance leader group sold1 < 100
Такое условие в триггере или скрипте сработает только Одного игрока. Массив хорош если нет вероятности его изменения, иначе придётся переписывать, проще тогда его создавать перед применением. Основные проблемы при создании сетевой игры я описывал тут http://arma.at.ua/forum/28-1473-1 |
› Вторник
› 24.07.2018
› 17:37
› Сообщение #
if isServer then{
_object = "some_obj_class" createVehicle [1234, 1234, 0]; [_object, ["Greetings!", {hint "Hello!"}]] remoteExec ["addAction"]; }; тут проверка isServer - запустит блок только на компе Сервере игры. есть ещё варианты, описаны тут https://community.bistudio.com/wiki/isDedicated Команда remoteExec сделана для запуска некоторых команд одновременно на всех компах использовать не просто, есть варианты проще и масштабней. |
› Вторник
› 24.07.2018
› 18:01
› Сообщение #
В триггере
!alive pvo; Запустится у всех игроков, и это строка uav = createVehicle ["rhs_pchela1t_vvs", getMarkerPos "CreateMarker", [], 0, "FLY"]; создаст Несколько БПЛА по количеству игроков, тут нужен дополнительный фильтр, БПЛА должен создать Сервер. Скрипт надо разделить на части, часть для игроков, часть для Сервера. Игроки получают экшен, сервер создаёт БПЛА первый строки до baza sideChat "Принял. общие, потом проверка if isServer then { создаётся БПЛА и маршрут для него, и объявляется переменная для всех publicVariable "uav"; }; далее продолжение скрипта sleep 2; итд ///////////////////////// В этом скрипте надо ставить паузу while {alive uav} do { sleep 1; }; player removeAction 0; цикл крутится с частотой 200 000 оборотов в секунду )) зачем так бездарно расходовать вычислительные мощности )) И для таких ожиданий есть другой цикл, помедленней: WaitUntil {sleep 1; ! alive uav}; player removeAction 0; В цикле WaitUntil - условие ставится в конце, перед закрывающей скобкой. |
| |||
| |||
Чат сайта |