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

AI additions


Bak

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

@alex5773, На подобные вопросы возникает желание ответить в стиле "Не волнуйся, всё будет!"  ;)

Сложно сразу всё предусмотреть... Нужна помощь в тестировании... Человек, хорошо знакомый с игрой(ЧН)

Поделиться этим сообщением


Ссылка на сообщение

 

 

нпс (квестовые точно) отказываются переходить в схему диалога-торговли с ГГ пока не обыщут все трупы

Я не учёл этот момент, поправлю, спасибо.

Поделиться этим сообщением


Ссылка на сообщение

@Vinozavr, Видимо вылет в результате удаления ножа при смерти.

Попробуй в файле death_manager.script удалить строку

	["wpn_knife"]=true,
  • Спасибо 1
  • Полезно 2

Поделиться этим сообщением


Ссылка на сообщение

Еще, мне кажется, что схема лечения раненных не учитывает некоторые осбенности\типы логики (надеюсь я не прав). Специально тестировал: у меня на левеле несколько вышек со снайперами, АИ сетка под ними слинкована с основной частью левела, а чтоб они оттуда не сбежали я поместил их в in рестрикторы.

Схема проверяет доступность вертекса раненого. И разве ин рестрикторы это не те, в которые нельзя заходить?

Кто-нибудь знает как модифицировать схему кидания гранат xrs_grenade.script, чтобы звуковые схемы там читались так же как и в модуле "собирательство".

Переноси звуки, создавай схему озвучки в rx_script_sound.ltx и заменяй проигрывание звука в схеме на вызов rx_sound.set_sound_play

Поделиться этим сообщением


Ссылка на сообщение

 

 

А так вещь полезная, НПС часто убивают себя и своих из РПГ, т.к. не встроена в движок схема проверки на безопасную стрельбу. Я кстати работаю над РПГ-7 с реальной баллистикой сейчас.
В новом менеджере оружия есть такая фнкция

-- Итак, что нам нужно?
-- 1 Проверить дистанцию до врага +
-- 2 Проверить дистанцию от врага до друзей	+
-- 3 Наличие друзей на линии огня +
-- 4 Подходящесть цели- точно? +

-- определение валидности цели для РПГ-7 или РГ-6
local function valid_target(obj)
	local cls = obj:clsid()
	if cls == clsid.dog_s or cls == clsid.flesh_s then
	   return false
	end
	return true
end
function can_use_blaster(npc,radius)
	radius = radius+3	-- расширим потенциальный радиус поражения
	local enemy = npc:best_enemy()
	if not enemy then
		return true
	end
	local safe_radius = radius*radius
	local npc_pos,enemy_pos = npc:center(),enemy:center()
	if npc_pos:distance_to_sqr(enemy_pos) < safe_radius then
		printf("can_use_blaster[%s]:near npc",npc:character_name())
		return false
	end
	if not valid_target(enemy) then
		return false
	end
	local friends,npc_id = {},npc:id()
	for o in npc:memory_visible_objects() do
		local obj = o:object()
		if obj and obj.clsid and obj:alive() and obj:id() ~= npc_id then
			if IsStalker(obj) and npc:relation(obj) ~= game_object.enemy then
				friends[#friends+1] = obj
			end
		end
	end
	if #friends ~= 0 then
		local dir_aim = vector():sub(enemy_pos,npc_pos):normalize()
		for i=1,#friends do
			local friend = friends[i]
			local friend_pos = friend:center()
			if npc_pos:distance_to_sqr(friend_pos) < safe_radius then
				return false
			end
			local friend_dir = vector():sub(friend_pos,npc_pos)
			if vector():set(friend_dir):normalize():similar(dir_aim,0.3) == 1 then	-- проверяем наличие друга перед собой
				if vector():slide(friend_dir,dir_aim):magnitude() < radius then	-- проверяем наличие друга в потенциальной зоне поражения
					return false
				end
			end
		end
	end
    return true
end

 

Но надёжно защитить гранатомётчика от самоподрыва никакая скриптовая проверка не сможет. Лучшее решение проблемы по моему мнению является реализация дальнего взведения взрывателя, ты не думал над этим?

Поделиться этим сообщением


Ссылка на сообщение
(изменено)

@Silver Raven, проверил, такой случай не обрабатывается функцией accessible. Она проверяет нахождение точки в/вне рестриктора, но не просчитывает путь до неё. Так что снайпера будут пытаться слезть по любому поводу.

Если так, когда ждать, хотя бы примерно.

Понятия не имею, вероятно до нового года.
 

 

Изменено пользователем Bak
ролик
  • Нравится 2

Поделиться этим сообщением


Ссылка на сообщение

Обновление (Версия 1.932) для ОП-2 - архив обновлён, исправлена ошибка в (xr_help_wounded.script)

  • Спасибо 1

Поделиться этим сообщением


Ссылка на сообщение
(изменено)

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

Вот это "что-то" как раз и не работает как надо. Либо звук вообще не провоцирует создание денжера, либо денжер какого-то другого типа считается приоритетней и впоследствии успешно игнорируется скриптом. Изменено пользователем Bak
  • Полезно 1

Поделиться этим сообщением


Ссылка на сообщение

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

Если бы это было возможно, я бы сделал. Есть простое решение - запретить использование РГ-6.

 

Схема "не стрелять по своим" использует неверный алгоритм расчёта точности NPC.

Супер-точность расчета в данном случае не нужна и не имеет смысла.

 

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

Что это значит? Где проблема, и причём тут менеджер оружия?

 

 

На этот раз схема сбора предметов с земли. Как оказалось, она во многих случаях не хочет работать нормально. Совсем.

Да ну? И как это понимать? ЧТО по-твоему значит "не хочет работать нормально"? Где баги-то? 

Поделиться этим сообщением


Ссылка на сообщение
(изменено)

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

Есть настройка по схемам, по группировкам, по профилю НПС и даже по секции логики, куда тоньше-то?

"не трогать вещи ближе чем N метров от игрока" - такое не нужно, я делать не буду. 

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

Изменено пользователем Bak
  • Согласен 2

Поделиться этим сообщением


Ссылка на сообщение

Обновление версии для ОП-2 (1.932 фикс 2)

Исправлен сбор невидимых (натуральных) ножей с трупов


Подобранные ножи превращаются в активные, их можно использовать
Включено удаление из инвентаря старой фейковой аптечки (yad)

скачать

  • Спасибо 3
  • Нравится 1

Поделиться этим сообщением


Ссылка на сообщение

@Silver Raven

п1. ищи функцию npc:eat (medkit), добавляй вручную здоровье. Конкретно в xr_wounded и rx_utils

п2. Используются звуки, находящиеся по соответствующему пути. У монолита в ЗП не все звуки имеются, которых не хватает - берутся из игровых архивов. Найди там этот звук и замени его подходящим, ну или пустышкой.

п3. Так он обыскивает трупы, или с земли подбирает оружие?

Поделиться этим сообщением


Ссылка на сообщение
(изменено)

добавил так (будет ли работать?):

Нет конечно. Просто добавляй восстановление здоровья

npc:eat(medkit)
npc.health = 0.5 --добавить 50% здоровья
Если хочешь, меняй значение в зависимости от типа аптечки.

Об озвучке:

путь к звукам ни от какой группировки не зависит, а прописывается в specific_character 

<snd_config>characters_voice\human_02\stalker\</snd_config>

Я правильно понимаю назначение профилей в конфиге?

Всё верно, avail_communities лучше вообще убрать, он не нужен.

 

Подбирает оружие с земли

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

 

Вообще, хорошо бы добавить временную блокировку для логики каких-либо схем из ai-additions.

Не поверишь - уже имеется. В ai additions 2.0 больше схем это поддерживают.

 

в 1.93 только corpse_detection и help_wounded

Ты можешь использовать

[walker]
help_wounded_enabled = false
corpse_detection_enabled = false
И рекомендую прочитать cd_info.txt Изменено пользователем Bak
  • Полезно 1

Поделиться этим сообщением


Ссылка на сообщение
(изменено)

@Silver Raven,  Точнее некуда.

открой файл xr_corpse_detection.script, найди функцию add_to_binder

 

	-- Evaluators
	if excluded_communities[npc:character_community()] or excluded_npcs[npc:name()] or excluded_npcs[npc:profile_name()] or not npc:alive() then
--		manager:remove_evaluator(stalker_ids.property_items)
--		manager:add_evaluator (stalker_ids.property_items,property_evaluator_const(false))	-- движковую схему тоже выключить ?
		return
	end
Раскомментирую эти 2 строки, чтобы было

	-- Evaluators
	if excluded_communities[npc:character_community()] or excluded_npcs[npc:name()] or excluded_npcs[npc:profile_name()] or not npc:alive() then
		manager:remove_evaluator(stalker_ids.property_items)
		manager:add_evaluator (stalker_ids.property_items,property_evaluator_const(false))	-- движковую схему тоже выключить ?
		return
	end
Должен признать, твоя ситуация является следствием моего недосмотра, хорошо что ты его выявил.

 

 

Изменено пользователем Bak
  • Спасибо 1
  • Полезно 1

Поделиться этим сообщением


Ссылка на сообщение
  • Недавно просматривали   0 пользователей

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

AMK-Team.ru

×
×
  • Создать...