Jump to content


Photo

Движение техники без вейпонтов.


  • Please log in to reply
20 replies to this topic

#1 OFFLINE   Mrandry26

Mrandry26

    Ефрейтор

  • Пользователи
  • 41 posts

Posted 19 June 2016 - 23:56

 Всем привет, прошу помочь сделать-обьяснить скрипт по движению техники без вейпонтов. Т.е.  Игрок и  остальные  юниты не связаные с ним стоят на остановке. Подьезжает автобус(любая техника), и  отьезжает только тогда, когда все перечисленные юниты(допустим u1,u2,u3 ) сядут в технику. Далее автобус следует из пункта А в пункт Б. По приезду в пунк Б все юниты выходят из него и автобус уезжает в пункт В. (Кто играл в ОФП Resistance, тот поймет о чем я)))). 

Ковырял команду \\ aa doMove (getMarkerPos "sss") \\; aa-имя техники, sss-имя маркера. Да техника ездит по маркерам. Но как сделать то, что  я описал выше

 


  • 0

#2 OFFLINE   SteelRat

SteelRat

    Полковник

  • Пользователи
  • 3241 posts
  • Откуда:РФ

Posted 20 June 2016 - 05:35

 

Но как сделать то, что  я описал выше

Путём перевода того что вы изложили, в язык понятный движку армы, это юмор, ну весёлое типа)

А теперь самое грустное, пописать придётся намного более строк содержащих много скриптовых команд, чем ваши изложенных, на моём мониторе, шесть строк. Такова реальность бытия.

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


  • 0

#3 OFFLINE   dos622

dos622

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

  • Пользователи
  • 702 posts

Posted 20 June 2016 - 13:48

Есть вариант кстати, назначать маршрут водителю автобуса через:

 

setDestination

 

только мозг водителю выключать совсем.

 

Сейчас как раз с мозгом для агента вожусь:) попробую нарисовать подобное, быстрым способом:))


  • 0

#4 OFFLINE   dos622

dos622

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

  • Пользователи
  • 702 posts

Posted 20 June 2016 - 14:48

можно кстати короче, и интереснее :)) но мне влом :)

 

Поездка по Кавале :) :

unitInCargo=false;
_ostanovka1=[3620.9,13105.4,0];
_ostanovka2=[4141.68,13821.9,0];

_MyTDZagent = createAgent ["C_man_p_fugitive_F", position player, [], 0, "CAN_COLLIDE"];

_MyTDZagent disableAI "FSM";
_MyTDZagent setBehaviour "CARELESS";
_MyTDZagent setCombatMode "RED";
_MyTDZagent setSkill 0; 


_transport = createVehicle ["B_MRAP_01_F",[3599.3,12922.7,0], [], 0, "CAN_COLLIDE"];
_transport setDir 40.115;
_MyTDZagent assignAsDriver _transport;
_MyTDZagent moveInDriver _transport; 

_MyTDZagent setDestination [_ostanovka1, "LEADER PLANNED", true];
diag_log format ["player Pos: %1",(getPosATL player)];
player setPosATL [3624.76,13110.4,0.00143242];

_MyTDZagent2 = createAgent ["C_man_p_fugitive_F", [3630.21,13105.4,0], [], 0, "CAN_COLLIDE"];
_MyTDZagent3 = createAgent ["C_man_p_fugitive_F", [3630.41,13105.4,0], [], 0, "CAN_COLLIDE"];
sleep 3;
diag_log format ["player Pos: %1",(getPosATL player)];
	while {(alive _MyTDZagent) and !unitInCargo} do{
		if (((_transport distance _ostanovka1)> 2) and ((speed _transport) == 0)) then {
			_MyTDZagent2 moveInCargo _transport;
			_MyTDZagent3 moveInCargo _transport;
			player  moveInCargo _transport;
		sleep 1;
		_MyTDZagent setDestination [_ostanovka2, "LEADER PLANNED", true];
		unitInCargo=true;
		};
	sleep 1;
	};


	while {(alive _MyTDZagent) and unitInCargo} do{
		if (((_transport distance _ostanovka2)> 2) and ((speed _transport) == 0)) then {
			_MyTDZagent2 action ["Eject", vehicle _transport];
			_pos = [4152.43,13810.5,0];
			_MyTDZagent2 setDestination [_pos, "LEADER PLANNED", true];
			sleep 1;
			_MyTDZagent3 action ["Eject", vehicle _transport];
			_MyTDZagent3 setDestination [_pos, "LEADER PLANNED", true];
			sleep 1;
			player action ["Eject", vehicle _transport];

		sleep 15;
			_MyTDZagent setDestination [_ostanovka1, "LEADER PLANNED", true];
		unitInCargo=false;
		};
	sleep 1;
	};


Edited by dos622, 20 June 2016 - 14:54.

  • 0

#5 OFFLINE   dos622

dos622

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

  • Пользователи
  • 702 posts

Posted 20 June 2016 - 15:01

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

При выгрузке повесить проверку,все ли отошли от транспорта, чтобы не задавить. ну и прочие красивости:)

еще до кучи, поставить на заданные маршруты, проверку, на присутствие посторонних объектов на дороге. ну и там по желанию либо объезды, с прокладкой маршрута, с вычислением размера транспорта, так что бы он пролазил по размерам между преградами, и не застревал в них.


  • 0

#6 OFFLINE   SteelRat

SteelRat

    Полковник

  • Пользователи
  • 3241 posts
  • Откуда:РФ

Posted 20 June 2016 - 21:40

Это намного больше чем шесть строк, как я и обещал)


  • 0

#7 OFFLINE   dos622

dos622

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

  • Пользователи
  • 702 posts

Posted 20 June 2016 - 23:45

SteelRat, да мне больше самому интересно было:) 


  • 0

#8 OFFLINE   SteelRat

SteelRat

    Полковник

  • Пользователи
  • 3241 posts
  • Откуда:РФ

Posted 21 June 2016 - 03:33

SteelRat, да мне больше самому интересно было :)

Я знаю).

Самая сложная задача подобной реализации, это доставить пассажиров до места назначения хотя бы с одной поломанной костью на каждую тушку пассажира. Не делал опытов уже давно на сколько интеллект Армы 3 в этом плане стал более интеллектуальным).


  • 0

#9 OFFLINE   dos622

dos622

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

  • Пользователи
  • 702 posts

Posted 21 June 2016 - 08:54

SteelRat,

 

если ты не заметил, я интеллект как раз отключил:) вообще, тут на днях развлекался, путем проб и ошибок, выяснил, что если агенту отключать все, а точки по маршруту следования, ставить ближе к друг другу, то он офигенно рулит:))

вопрос стоит только в том, что лучше использовать, moveTo или setDestination. doMove в данном случае, не катит совсем, точнее оно не работает:)

 
 


  • 0

#10 OFFLINE   SteelRat

SteelRat

    Полковник

  • Пользователи
  • 3241 posts
  • Откуда:РФ

Posted 21 June 2016 - 18:04

doMove

только для правильных ботов

 

для агентов сами разработчики рекомендуют

setDestination

что если агенту отключать все, а точки по маршруту следования, ставить ближе к друг другу, то он офигенно рулит :))

 

отключение тут по сути не решает, ты не можешь отключить AI, у нас нет таких инструментов. То что ты отключаешь это лишь малая часть того что под водой, так сказать.

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


  • 0

#11 OFFLINE   dos622

dos622

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

  • Пользователи
  • 702 posts

Posted 21 June 2016 - 18:28

SteelRat,

 

setDestination не совсем пацанский вариант:) ибо, пока бот не дошел до точки поставленной ему через setDestination, то ему пофиг вообще, обсалютно все, что вокруг него происходит. В то время как moveTo прерывает процесс перемещения бота от точки до точки, и дает ему новые координаты, на которые бот, после завершения последней анимации и уходит.

 
в принципе, выставлять маршрут вполне реально, сначала создав массив, потом разобрав точки в массиве по удалению друг от друга, и уже задать движение боту по этому массиву упорядоченных точек:))

  • 0

#12 OFFLINE   SteelRat

SteelRat

    Полковник

  • Пользователи
  • 3241 posts
  • Откуда:РФ

Posted 21 June 2016 - 18:42

 

setDestination не совсем пацанский вариант :) ибо, пока бот не дошел до точки поставленной ему через setDestination, то ему пофиг вообще, обсалютно все, что вокруг него происходит. В то время как moveTo прерывает процесс перемещения бота от точки до точки, и дает ему новые координаты, на которые бот, после завершения последней анимации и уходит.

 

В этом тесте я использовал поочерёдно оба варианта сначала moveTo, а следующем setDestination. Результат одинаков. Алгоритм для аи простой, в цикле с задержкой, уже не помню, по моему менее 1 сек, бот получал очередную мою новую ко\ординату, и давалась очередная команда боту переместиться на новую позицию. Результат на видео очевиден.

Что бы пофиксить подобный эффект, нужно перед выдачей нового вайпойнта выполнить команду doStop, это должно сбросить весь маршрут уже заданный боту, честно скажу не помню проверял я этот момент или нет.

 

в принципе, выставлять маршрут вполне реально, сначала создав массив, потом разобрав точки в массиве по удалению друг от друга, и уже задать движение боту по этому массиву упорядоченных точек :))

 

 

Именно об этом и была моя фраза

 

сам понимаешь какая радость прописывать для бота путь по сантиметрам


  • 0

#13 OFFLINE   dos622

dos622

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

  • Пользователи
  • 702 posts

Posted 21 June 2016 - 19:17

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

сейчас до дому доеду, попробую дома покурить:)


  • 0

#14 OFFLINE   SteelRat

SteelRat

    Полковник

  • Пользователи
  • 3241 posts
  • Откуда:РФ

Posted 21 June 2016 - 19:43

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

сейчас до дому доеду, попробую дома покурить :)

AI начнёт хоть как то шевелить мозгами, когда вы окажетесь очень рядом с ботом.


  • 0

#15 OFFLINE   SteelRat

SteelRat

    Полковник

  • Пользователи
  • 3241 posts
  • Откуда:РФ

Posted 21 June 2016 - 20:19

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

// инит логики
0 = this spawn {
	_agent = createAgent ["C_man_1", position _this, [], 0, "FORM"];
	_agent disableAI "FSM";
	
	while {alive _agent} do {
		if (_agent distance player > 3) then {
			_agent setDestination [position player, "LEADER DIRECT", true];
		};

		sleep 1;
	};
};

  • 0

#16 OFFLINE   armadillo

armadillo

    Ефрейтор

  • Пользователи
  • 34 posts
  • Откуда:Arma 2 Dayz

Posted 12 May 2019 - 11:51

Боты не хотят ездить по мостам. Хотя первоначально при выполнении setDestination или moveTo бот уверенно рулит по маршруту, но как доезжает до моста - начинает тыкаться в ограждения на мосту. Иногда пролетает. Получается нет дороги через мост? хотя первоначально марштут как то видится же.. пробовал дорогу натягивать на него в редакторе, никак

Edited by armadillo, 12 May 2019 - 12:06.

  • 0

#17 OFFLINE   SteelRat

SteelRat

    Полковник

  • Пользователи
  • 3241 posts
  • Откуда:РФ

Posted 12 May 2019 - 23:27

Ни что не меняется во вселенной)

 

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


Edited by SteelRat, 12 May 2019 - 23:33.

  • 1

#18 OFFLINE   armadillo

armadillo

    Ефрейтор

  • Пользователи
  • 34 posts
  • Откуда:Arma 2 Dayz

Posted 17 May 2019 - 01:55

Пешком бот бежит по тротуару который по две стороны дороги моста. Патч лод походу там и проложен. Понятно теперь почему доехав до моста он сворачивает и тыкается в ограждение. Завтра попробую склепать простую модельку моста с патч лодом посередине дороги ).


  • 0

#19 OFFLINE   armadillo

armadillo

    Ефрейтор

  • Пользователи
  • 34 posts
  • Откуда:Arma 2 Dayz

Posted 17 May 2019 - 22:30

Нормально все с лодами там. На карте дорога не прерывается а просто походу бульдозером утоплена в воду. Сверху ещё мост стоит. Бот пешком иногда по краю моста бежит, иногда под мост ныряет и по дну гребёт. За рулём похоже что планы бота мало отличаются. Ну и хрен с ним. Если отключить ему всю логику то анимацией можно заставить его двигаться в нужном направлении. Пока непонятно как заставить его ехать в этом состоянии за рулем
  • 0

#20 OFFLINE   SteelRat

SteelRat

    Полковник

  • Пользователи
  • 3241 posts
  • Откуда:РФ

Posted 18 May 2019 - 01:29

 

На карте дорога не прерывается а просто походу бульдозером утоплена в воду

Как вариант данная ситуация ещё более путает искусственный интеллект.

Тут логика проста, если дорога проходит через мост, то нужно прервать дорогу перед мостом, и продолжить после, ну это если не в лом и по феньшую.


  • 0




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