Перейти к контенту

AI вертолетов


Kirag

Рекомендуемые сообщения

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

Почему после того как я установил этот ai себе в игру вертиш/вертиши на Янтаре перестали тереториую утюжить? Они прост висят в воздухе в одном месте и всё.
Подскажите как это исправить?

Ссылка на комментарий

В общем я кажеца понял почему верт по своей паре шарахает, не правильно функция 

is_hostile(comm,target) работает, она даёт добро на пуск ракеты по своей пары. Я вообще не понял чего она такая сложная, скрипты монорха которые отвечают за стрельбу НПС по своим вертам я успешно исправил, на свои верты НПС да же не смотрят, по чужим стреляют или прячутся.







function is_hostile(comm,target)

if IsMonster(target) then -- мутанты враги всем
return true
end
local t_comm_number = 1
local t_comm = "actor"
if IsStalker(target) then
t_comm = target:character_community()
elseif (string.find(target:section(),"helicopter") or string.find(target:section(),"mi2")) then
-- qqq("is_hostile debug: helicopter or mi-2x")
-- if target:spawn_ini():line_exist("logic","community") then
-- t_comm = ini:r_string("logic","community")
-- qqq("is_hostile debug: line in spawn_ini found: t_comm = "..t_comm)
-- else
-- t_comm = "military"
-- qqq("is_hostile debug: line in spawn_ini NOT found: t_comm = "..t_comm)
-- end

t_comm = db.storage[target:id()].community
elseif string.find(target:name(),"btr") then
t_comm = "military"
end
--qqq("target section: "..target:section().." target community: "..t_comm)
return comm ~= t_comm

end


И ещё если у вас добавлен ми-6 то исправте строку 371 на

elseif (string.find(target:section(),"helicopter") or string.find(target:section(),"mi2") or string.find(target:section(),"mi6")) then

ещё возможно в некоторых случаях db.storage не верные данные содержит в первые моменты.  

Изменено пользователем НаноБот

...в конце концов, важен лишь, машинный код.

СТАЛКЕР только для ПК!

Ссылка на комментарий
НаноБот

То есть если у меня вертолет группировки "Долг"(comm = duty), то обычного сталкера(t_comm = stalker) вертолет будет считать своим врагом. Что-то не то. :nono:

=================

А у меня такой вопрос: я перенес схему на ЧН успешно(вроде как :) ), и возник вопрос по поводу логики: возможно ли заставить его просто висеть в воздухе? Вот кусок логики:

[logic]
active = heli_move@hide
community = stalker

[heli_move@hide]
path_move = yan_heli_wait
combat_ignore = true
combat_safe_altitude = 30
path_look = yan_heli_lookinwait
default_velocity = 50
engine_sound = true

 

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

Ссылка на комментарий

Старлей, попробуй прописать ему в логику path_way, где будет одна точка.

Ссылка на комментарий

В общем я тут заглючил, attitude altitude пишутся почти одинаково и я переводил как высота а не как отношения. Но потом разобрался и полностью понял как эта функция работает. В общем проблема в том что при первом запросе db.storage[target:id()] = nil и далее скрипт выдает групировку как актор а значит враг военым. Исправил.

function is_hostile(comm,target)
	if IsMonster(target) then -- мутанты враги всем
		return true
	end
	local t_comm_number = 1
	local t_comm = "actor"
	if IsStalker(target) then
		t_comm = target:character_community()
	elseif (string.find(target:section(),"helicopter") or string.find(target:section(),"mi2")) then
	--	qqq("is_hostile debug: helicopter or mi-2x")
		t_comm = db.storage[target:id()].community
		if t_comm == nil then  -- если пусто то смотрим комунити в файле
		if target:spawn_ini():line_exist("logic","community") then
			t_comm = ini:r_string("logic","community")
	--		qqq("is_hostile debug: line in spawn_ini found: t_comm = "..t_comm)
		else
			t_comm = "military"
	--		qqq("is_hostile debug: line in spawn_ini NOT found: t_comm = "..t_comm)
		end
		end
	elseif string.find(target:name(),"btr") then
		t_comm = "military"
	end
	--qqq("target section: "..target:section().." target community: "..t_comm)
	local hostile_treshold = tonumber(system_ini():r_string("game_relations", "attitude_neutal_threshold"))
	local comm_attitude = parse_data(system_ini():r_string("communities_relations", comm))
	local comm_list = parse_data(system_ini():r_string("game_relations", "communities"))
	for k,v in pairs (comm_list) do
		if t_comm == tostring(v) then
			t_comm_number = (k+1)/2
			break
		end
	end
	attitude = tonumber(comm_attitude[t_comm_number]) or -5000
	if t_comm == nil then -- при первом запуске, storage = nil то t_comm = nil
		t_comm = "nil" 
		attitude = 0 -- отношения устанавливаем - нейтрал
		--qqq("heli_combat.script:t_comm = nil")
	end
	--qqq("community-("..comm..")target community-("..t_comm..")attitude:-("..attitude..")hostile_treshold:-("..hostile_treshold..")time_global()-"..time_global())
	return attitude < hostile_treshold
end

 

 

Скрипт работает и при первой загрузки выдаёт правильный attitude, НО всё равно вертушки получают хит не понятно от чего, тестил как аддон к пепел-мод. При загрузки сохранения, две вертушки получают хит и это вроде не атака другой пары. В общем надо разбераться что атакует.



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

if self.ltrg == nil and self.wtrg == nil then -- оба вертолета без цели - обновление через некоторое время
				if time_global() > self.target_upd_time then
--			qqq(self.object:position().x..", "..self.object:position().y..", "..self.object:position().z)
					self.target_upd_time = time_global() + 5000
					tid1, tid2 = self:get_target() --запрашиваем цели
					self.enemy_id = tid1 --даем ведущему новую цель
					heli_target.update_pair_data(self.id, tid1, tid2) --пишем в данные пары
				end
			elseif self.ltrg == nil and self.wtrg ~= nil then -- без цели только ведущий - обновляем цели немедленно 

 

 

Меняем на...

if self.ltrg == nil and self.wtrg == nil then -- оба вертолета без цели - обновление через некоторое время
				if time_global() > self.target_upd_time then
--			qqq(self.object:position().x..", "..self.object:position().y..", "..self.object:position().z)
					self.target_upd_time = time_global() + 5000
					tid1, tid2 = self:get_target() --запрашиваем цели
					self.enemy_id = tid1 --даем ведущему новую цель
					heli_target.update_pair_data(self.id, tid1, tid2) --пишем в данные пары
				end
				if time_global() > self.last_time + 60000 then -- целей не наблюдалось х сек, то сброс сомбата
					--qqq("Время поиска врага вышло, сброс combat_type,time_global()-("..time_global()..")")
					self.combat_type = nil
					self.last_time = 0 --time_global()
				end
			elseif self.ltrg == nil and self.wtrg ~= nil then -- без цели только ведущий - обновляем цели немедленно 

 

 

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

==================

Предупреждение !!!

Такие полотна кодов - ПОД СПОЙЛЕР !!! :russian_ru: 

BFG

...в конце концов, важен лишь, машинный код.

СТАЛКЕР только для ПК!

Ссылка на комментарий

Из-за партиклов, происходит вылет в подземке Агропрома.

 

Где лог вылета? Твой пост - флуд/оффтоп!!!

Не первый уже такой пост пишешь, в других темах тоже отмечался!

Последнее китайское предупреждение!!!

Изменено пользователем Вспышка
Ссылка на комментарий

Всем привет, пытаюсь адаптировать на ОП+К+МА, я не скриптер, но вроде сделал всё правильно, при начале новой иры вылетает, и ругается на heli_combat.script :

Expression : fatal error


Function : CScriptEngine::lua_error
File : E:\stalker\patch_1_0004\xr_3da\xrGame\script_engine.cpp
Line : 73
Description :
Arguments : LUA error: ...dow of chernobyl\gamedata\scripts\heli_combat.script:821: attempt to call field 'heli_blow_up' (a nil value)

 

 

Пожалуйста подскажите что нужно сделать? 

 П.С.: если загружаю сейв(без НИ), - загружается, но проверить ни чего не успеваю, ловлю безлоговый вылет...

После попытки "прикрутить" НИ обязательна?

 

Мать: ASRock X470 Master SLI. Процессор: AMD Ryzen 9 3900X 12-Core(4200 MHz).
Память: Patriot Memory 3200 C16 Series. DDR4-3200(1600МГц), 16Гбх2(32Гб).
Видео: GeForce GTX 1060 6GB. Блок питания: CoolerMaster 750 Вт. Корпус: Zalman i3 Edge.

Химера конечно сильный хищник, а все держится дома. Чего же ты пришел к ней домой и пытаешься её убить? © Болотный Доктор

Ссылка на комментарий

Всем привет!

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

например сигнальными ракетами или по рации...

например на базе схемы напарников...

и как изменить/увеличить угол наклона ствола пулемёта чтобы вертушка могла стрелять и вблизи , а то время и угол атаки очень маленькие.. Нужно стоять либо на крыше или на горке, что бы ГГ обстреляли..

Изменено пользователем dromundus
Ссылка на комментарий

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

А то у меня они прилетают не парами , а сотнями...

eb697114ebb6a1ec53a8b4fd162271525f99c818

62288a98a7e325039e6dacc361aa731f5f99c818

db87d0d3904bc84f143bea2a904f53f95f99c818

82218b1877751d216d1ee9498adc50cd5f99c818

Ну это же уже перебор.(

  • Нравится 2
 

Мать: ASRock X470 Master SLI. Процессор: AMD Ryzen 9 3900X 12-Core(4200 MHz).
Память: Patriot Memory 3200 C16 Series. DDR4-3200(1600МГц), 16Гбх2(32Гб).
Видео: GeForce GTX 1060 6GB. Блок питания: CoolerMaster 750 Вт. Корпус: Zalman i3 Edge.

Химера конечно сильный хищник, а все держится дома. Чего же ты пришел к ней домой и пытаешься её убить? © Болотный Доктор

Ссылка на комментарий

Кстати, кто тут просил счётчик ракет, я это реализовал, эти ракеты прекрастно биндятся (при спавне ракет запускается скрипт).
Ещё не плохо было бы сделать так, чтобы ракеты запускались только по групповым целям и не прицельно, а то прям самонаводяще получается. Также переделал модель повреждения, фишка в том, что есть иммунитет важных деталей и не важных. Это сделано, чтобы нормально отрабатывала ситуация, когда стреляем очень мощным оружием, например маади грифин 30 мм (хит порядка 600-800), сбивается по-любому не менее трёх попаданий, при этом со слабым оружием так же трудно сбивается. Также хорошо научить сталкеров с вертами воевать, но мне для этого надо модель полёта пули, для баллистического вычислителя. Нпс стреляет по заднему винту, а при атаке прячется или бегает как угорелый (режим паника).

Изменено пользователем Kirgudu

...в конце концов, важен лишь, машинный код.

СТАЛКЕР только для ПК!

Ссылка на комментарий

В сталкере есть вполне рабочая схема скриптов звуков...когда на каждый звук прописывается реакция нпс....Например на чих нпс ставим реакцию смерть нпс и радиус...получается при чихании у нпс начинается паника и они начинают метаться... или если ставим реакцию на взрыв нпс прячутся по укрытиям.....Исходя из этой схемы сделал реакцию нпс на звук летящего вертолёта- взрыв....По всем правилам при приближении вертолёта на определённую дистанцию например 200м нпс должны прятаться.... но ничего не происходит.....ставил этот звук для проверки на речь всё работает....Не понятно почему схема не работает когда звук воспроизводит вертушка.....На звук включения двигателя  по такой схеме у танка нпс разбегаются и прячутся.. выключаешь двигатель все нпс возвращяются спокойненько на свои места.....Но не с вертушкой....У кого какие мысли ... может где то есть исключения в этой схеме....относительно вертушки....По идее эта схема всегда избавляла от создания кучи ненужных скриптов....

Ссылка на комментарий

"Не понятно почему схема не работает когда звук воспроизводит вертушка..."

Предполагаю, что НПС его просто не слышат)

Изменено пользователем Вспышка
Ссылка на комментарий

Вампир

Я прописал расстояние на 300 метров   а до вертушки по счётчику менеее 100

Может влияет то что звук вертушки зациклен..Но как это проверишь....

Изменено пользователем dromundus
Ссылка на комментарий

Фишки плюшки. :)

https://yadi.sk/d/qhjUJe0ubaSM5

 

РПГ-7 с управляемыми ракетами. Использования: после выстрела удерживать цель в перекрестье, при стрельбе по летящему вертолёту, ракету наводить с упреждение. Внимание: ракета взрывается только от удара, пока ракета не взорвется - нельзя нажимать ЛКМ и перезарядку, самоликвидатор ракеты на 4 секунды. При угле от ракеты и линии прицеливания ракета летит прямолинейно. НПС гранатомёт полноценно использовать не могут.


Переделанный РПГ-7 каким то Кулибиным по кличке Interdinamic. В переделанную ракету ПГ-7В добавлена система управления по радио, в сам РПГ встроена телевизионная система отслеживания полёта ракеты, при отклонении от маркерной линии прицеливания, ракета возвращается на линию прицеливания. Таким образом, оператор управляет ракетой, удерживая цель в перекрестье. Эта система сделана в единичном экземпляре, ракет так же сделано не много.


 

Кто там спрашивал про собак с двиглом в заднице. :D

Это ещё одно универсальное средство от вертушек и других опасных опасностей. :fie:

ЗЫ

Чуть не забыл, получите как обычно у Волка с 10 ракетами.

Установка: скинте содержимое папки птурк в gamedata  мода.

Изменено пользователем НаноБот
  • Нравится 2
  • Полезно 1

...в конце концов, важен лишь, машинный код.

СТАЛКЕР только для ПК!

Ссылка на комментарий

Никто не вытаскивал ПЗРК отдельно,чтоб можно было вставить в любой мод?

 

Мать: ASRock X470 Master SLI. Процессор: AMD Ryzen 9 3900X 12-Core(4200 MHz).
Память: Patriot Memory 3200 C16 Series. DDR4-3200(1600МГц), 16Гбх2(32Гб).
Видео: GeForce GTX 1060 6GB. Блок питания: CoolerMaster 750 Вт. Корпус: Zalman i3 Edge.

Химера конечно сильный хищник, а все держится дома. Чего же ты пришел к ней домой и пытаешься её убить? © Болотный Доктор

Ссылка на комментарий

Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий

Комментарии могут оставлять только зарегистрированные пользователи

Создать аккаунт

Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!

Зарегистрировать новый аккаунт

Войти

Есть аккаунт? Войти.

Войти
  • Недавно просматривали   0 пользователей

    • Ни один зарегистрированный пользователь не просматривает эту страницу.
×
×
  • Создать...