|
|
Модератор форума: Slon |
Форум » РЕДАКТОР - ArmA 2 Operation Arrowhead » Скрипты » Вопрос: найти не заспавненный объект. (nearEntities, nearestObjects и т.д.) |
Вопрос: найти не заспавненный объект. |
› Суббота
› 03.05.2014
› 12:14
› Сообщение #
Здравствуйте.
Возник такой вопрос, могу ли я найти на карте объект, который еще не заспавнился. Например, когда DisableAI = 1, а объект где должен заспавниться игрок (2,3 итд) еще не подключился даже? Т.е. найти объект, который еще физически отсутствует. Или эта затея нереальна?
Главное не война! Главное маневры!
|
› Суббота
› 03.05.2014
› 19:55
› Сообщение #
|
› Воскресенье
› 04.05.2014
› 03:14
› Сообщение #
Slon, да понял я :3
Просто хотелось-бы на автопилоте сдвигать спаун игроков в "за карту". Маркеры для респауна (respawn_1,2,3...,X) можно самому налепить скриптом, что работает. А вот как первый спаун игрока туда куда хочешь положить скриптом, или все-же это делать только в ручную из редактора можно? Просто у меня есть идея организовать респаун игроков по определенной "хитрой" схеме (что-бы рядом с другими), и для этих целей не очень подходит штатный способ хотя и без него не обойтись. Вариант того, как спавнить игрока из за карты я уже продумал и пилотные тесты уже проводил (не без ошибок, конечно - но сейчас суть не в этом). Задача в том, что-бы и первый спаун был рандомным, но при этом в близком радиусе к другим игрокам. Пока я использовал только respawn_1,2,3...X -100,-100 и на стороне сервера, если находится такой игрок из списка игроков, то его ставит близко с другими игроками методом спавна модельки и selectPlayer (телепорт - мелькает). И это, в принципе, почти работает - правда надо исправлять пару моментов. А вот первый спаун не работает вообще. Каждый раз все спавнятся в соответствии с тем какая по счету "должность" была в брифинге. И каждый раз такой deathmath превращается в то, что все спавнятся в одном месте и потом в этом месте война и идет... Хотелось-бы задать рандому, в общем :-) Поставить 1-ые модельки в координаты -100, -100 поймать точно в редакторе не очень получается. Или я ошибаюсь?
Главное не война! Главное маневры!
|
› Воскресенье
› 04.05.2014
› 04:35
› Сообщение #
примерно )) понял.
предлагаю вариант попроще. например 10 игроков, 10 маркеров + 1 маркер респа 1, на нём тригер с условием Player in thisList - игрок в триггере запускает файл, в файле проверка пространства у маркеров, там где пусто, туда и телепортирует. последовательность сканирования можно тасовать. можно без маркеров, но будет больше вычислений _ms = ["mk1","mk2","mk3","mk4","mk5","mk6","mk7","mk8","mk9","mk0"]; - список маркеров for "_a" from 0 to 9 do { _b = floor random 10; _n1 = _ms select _a; _ms set [_a, _ms select _b]; _ms set [_b, _n1]; }; //три попытки дали три варианта. //["mk4","mk1","mk9","mk6","mk8","mk3","mk5","mk0","mk2","mk7"] //["mk1","mk9","mk4","mk3","mk2","mk0","mk7","mk5","mk6","mk8"] //["mk2","mk6","mk9","mk5","mk7","mk8","mk3","mk4","mk1","mk0"] // проверка на дистанции 50м _mn = []; _ps = []; for "_a" from 0 to 9 do { _ps = MarkerPos (_ms select _a); _mn = _ps nearEntities 50; if (count _mn == 0) exitWith {Player setPos _ps}; }; Сообщение отредактировал Slon - Воскресенье, 04.05.2014, 05:01
|
› Воскресенье
› 04.05.2014
› 19:43
› Сообщение #
Slon, так, а вариант onPlayerConnected существует?
Типа, onPlayerConnected и его этого самого как-нибудь кто только что "Connected" послать в тот самый маркера respawn_1 так как он у меня уже есть и он там где оно мне надо надо. А дальше его уже обработает другой скрипт, который из того места по циклу забирает игроков. Вот только что-то я не понял, по поводу того какие параметры отдаются этому событию. Мне-то нужен объект, а там _id и _name (при этом _name вроде как вообще имеется в виду его "игровой ник").
Главное не война! Главное маневры!
|
› Воскресенье
› 04.05.2014
› 20:09
› Сообщение #
поставь солдат в редакторе на маркер
Сообщение отредактировал Slon - Воскресенье, 04.05.2014, 23:32
|
› Суббота
› 10.05.2014
› 20:14
› Сообщение #
Я вижу меня не совсем понимают(
Попытаюсь описать ситуацию еще раз: 1) Маркер спавнится скриптом (т.е. в редакторе его еще нет). Так, потому что скрипт в перспективе - картонезависимый. Кинул в папку с миссией и пошел... 2) Солдаты (у меня, кстати, это цивилианы) PlayerStart (не знаю как это назвать) - это роли. Которые распределяются в брифинге. И допустим 1-ый солдат будет в координатах 100:100. И он всегда там будет, если во время брифинга мы выбираем 1-ого солдата. Для первого респауна. А уже дальше только и будет рандом. А мне бы хотелось рандом сразу - рассматривал вариант убивать игрока 1-ый раз, но это как-то не гуманно))) 3) Из за карты (с маркеров respawn_1,2,3) игроки скриптом спавнятся по рандому, при некоторых условиях: а) это в радиусе от других игроков не более чем в 300 метрах (что-бы экшн был. Прицел именно - ПВП). б) спавнит в домах на buildingPosили buildingExit тем самым спасая от шальных пуль (здания все-же немного прикрывают). и это в принципе успешно работает. Так например просто бросаю такой скрипт к карте черноруссия и раскидываю playerstart например в Электрозаводске и начинается война. Все хорошо и работает, кроме одного, что война "закрепляется" за Электрозаводском. Так как PlayerStart был кинут туда, а п.3 респаун кидает рядом с другими. И вероятность "уйти" из Электро равна желанию игроков уйти из электро. А хочется рандома) Т.е. начался матч и по рандому все оказались рядом, но допустим в старом соборе... итд. Кроме того. Скрипт "не держится" за карту. Кинул в карту Утес и там тоже самое :-) Примерно вот такая цель. Но пока не придумал ничего, кроме того, что-бы 1-ый спаун игрока механически "телепортировать за карту". Но как-то не могу разобраться с переменными скриптов SQF... что-то не научился пока я отслеживать первый ли респаун у игрока или не первый... Запутался в общем))) Опыта мало в этом языке.
Главное не война! Главное маневры!
|
› Суббота
› 10.05.2014
› 20:40
› Сообщение #
Куда? Мой вариант это и предлагает Это использование стандартного респа. Как я понял стандарт тебе не нужен. Цитата маркер респа 1шт, на нём тригер с условием Player in thisList - игрок в триггере запускает файл, в файле проверка пространства у 10 маркеров, там где пусто, туда и телепортирует. тебе остаётся поставить игроков в зону тригера, и тогда он сработает при входе в игру. |
› Суббота
› 10.05.2014
› 21:12
› Сообщение #
Slon,
Итак, у меня есть 10 игроков - раскидал их в ручную на карте (без триггеров). Пытаюсь реализовать схему с минимумом манипуляций в редакторе на карте, но без этих 10 не обойтись ни как. Дальше в init.sqf у меня генерируется 10 маркеров respawn_X в координаты -100, -100. Это так для того, что-бы потом "отлавливать игроков скриптом, которые за картой". Далее на стороне "сервера" проверяем примерно так Код while {true} do { sleep 1; {if (getPos _x == [-100,-100]) then {////run respawn script;}} forEach units group player; }; Скрипт упрощенный, так как в настоящий момент я его весь перетрясаю (со скобками-ковычками накосячил(( ). Итак, когда я нахожу такого игрока (за картой в -100,-100) я его selectPlayer на созданный юнит при следующих условиях: а) этот созданный юнит спавнится рандомом в позициях строений buildingPos или buildingExit которые недалеко от другого игрока, в радиусе которого больше всего других игроков))) Да, вот такая сложная матиматика. И это все работало, пока я не накосячил со скобками... Но к этому у меня вопросов и нет - разберусь. Проблема в том, что 1-ый игрок спавнился всегда на карте в точку, которую указали в редакторе - скрипт который был сверху не работал для него, так как он живой и не на -100,-100. Как поставить в редакторе playerStart на -100,-100 точно я не знаю (возможно я и ошибаюсь как раз в этом). Ну или как его позицию "железно" перетащить в эти -100,-100... Да и рандом мне нужен именно вот такой "услвный" а не то, что предлагает арма (если мы просто накидаем respawn_X где X может быть 256 раз) - то не будет проверки условий (рядом с другими игроками внтури здания). В идеале я-бы и эти самые playerstart наспавнил-бы с удовольствием скриптом, но как это сделать не понял. Так как хочу минимизировать это клацание мышкой в нем при переносе скрипта на другую карту. Не знаком с местным "языком программирования" на должном уровне. Или это и вовсе нереализуемо... З.Ы. могу конечно скинуть рабочую Древнюю версию того, что я здесь описываю - но там реализовано далеко не все... Но концептуальная суть там показана. А текущую версию я пока что убил((( Добавлено (10.05.2014, 21:12) Цитата тебе остаётся поставить игроков в зону тригера, и тогда он сработает при входе в игру. но ведь игроки наступившие в этот триггер и после респауна будут подвержены работе этого триггера. Вот этого я бы хотел избежать тоже.
Главное не война! Главное маневры!
|
› Воскресенье
› 11.05.2014
› 01:01
› Сообщение #
|
| |||
| |||
Чат сайта |