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

AI additions


Bak

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

@Bak, Приветствую. Обнаружил, что в rx_kill_wounded.ltx и rx_knife.ltx для ОП-2 и Народной солянки отсутствуют секции для группировки "Охотники" (в конфигах игры обозначены как green). 

  • Спасибо 1
Ссылка на комментарий

 

Bak, добрый вечер. Мб, стоит проверить момент с активацией артефактов? Активирую артефакт, он падает, НПС идет, чтобы взять, наклоняется и, если не успевает - его разрывает аномалия, а если успевает - безлог. Не на чистой, конечно, но не думаю что роль играет.

 

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

@Kondr48, это не баг, а фича. Отследить выкинут артефакт или активирован нельзя, поэтому НПСу стоит идти побирать их, когда он его видит более 15 секунд.

В rx_ai:530 описка, должно быть

	if npc:get_bleeding() > eating.min_b then
  • Спасибо 3
  • Полезно 1
Ссылка на комментарий

@Bak, Возникла проблема со схемой "Бой с ножом" в ОП-2, хотя думаю такое не только ОП-2 встречается.  Когда на меня кидаются НПС с ножом, то во время стрельбы по ним часто происходит вылет вот с таким логом:
 

FATAL ERROR

[error]Expression    : assertion failed
[error]Function      : xrServer::Process_event_reject
[error]File          : E:\stalker\sources\trunk\xr_3da\xrGame\xrServer_process_event_reject.cpp
[error]Line          : 12
[error]Description   : e_parent && e_entity
 

Я ловил вылет с этим логом в лабах X-10 и X-16 - на меня кидались монолитовцы с ножами, и когда я по ним попадал из своего оружия происходил данный вылет. Так же такое было и на Радаре раза два-три наверно. 

Изменено пользователем Vinozavr
  • Спасибо 2
Ссылка на комментарий

@Bak, Да проблема была именно в удалении ножа при смерти НПС. После правки в death_manager.script вылета больше не было. Думаю стоит занести это решение в ридми к аддноу т.к наверняка многие столкнулись с этой проблемой. 

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

Можно ссылку на обновление от 06.06.16 (Версия 1.931) для ТЧ 1.0006 (а то я так понял оно только на  AI Additionas  для 1.0004 версии)

Добавлено Bak,

Ты понял неправильно. Обновлению не важна версия игры.

Лучше сделать мод с 0, чем пытаться залатать багованный.

DarkSnowder.gif

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

@Bak, здравия!

Может есть смысл раскидать твой пак по соответствующим разделам форума? Многие, в разделах ЧН и ЗП, не знают о новых обновлениях пака.

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

Приветствую.

А обновление для ОП-2 кумулятивное? Т.е., предыдущие нужны для его работы, или все включено?

Добавлено Bak,

Ничего больше не нужно.

Аддон для ОП-2.09.2: Яндекс/Google/GitHub

naxac.gif

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

@alex5773, Моя версия отличается от предпоследней, что в шапке темы. К примеру, там добавлена функция проверки на безопасность стрельбы для НПС из РГ-6 или РПГ:

 

 



----------------------------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------------------------
--  by KamikaZze -- небольшая часть кода скопипастена из check_friends_on_fire_line так как идельно подходила
--  для этих целей. Надеюсь xStream не обидится 
--
--  Эта функция сделана для ликвидации ситуаций когда непись с РПГ-7 или РГ-6 ведёт себя как сумашедший шахид,
--  стреляя в упор в толпе своих же товарищей и вынося их всех под ноль в итоге,
--  вводя следующие ограничения: расстояние до цели должно быть не менее 25 метров, до ближайшего друга не
--  менее 12 метров, и от цели до ближайшего друга не менее 8 метров. В этом случае если непись по случайности
--  выстрелит себе под ноги, он подорвёт только себя, окружающие не пострадают.
--
--  В случае если условия для безопасного ведения огня не выполняются, РПГ-7 или РГ-6 просто не включается менеджером
--  в табличку доступного для стрельбы оружия, и непись достаёт другой ствол...
--
--  Помимо дистанции проверяется ещё и валидность цели - непись не будет вести огонь из РПГ-7 или РГ-6 по
--  собакам, кошкам и плотям. По псевдопсам - будет, они расцениваются как опасная цель.
--  Аналогично тушканы и крысы, так как бегают стаями.
----------------------------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------------------------
function check_if_safe_rpg7(npc)

local shooting_are_safe = true
local be = npc:best_enemy()
local friends = {}

	local function check_object(obj)
		if obj and obj.clsid and obj:alive() and npc:id() ~= obj:id() then
			if IsStalker(obj) and npc:relation(obj) ~= game_object.enemy then
				table.insert(friends,obj)
			end
		end
	end	

	for o in npc:memory_visible_objects() do
		check_object(o:object())
	end

	for o in npc:memory_sound_objects() do
		check_object(o:object())
	end

	if be then

		local npc_pos = npc:bone_position("bip01_spine")
		local be_pos = be:bone_position("bip01_spine")
		local be_dist = npc_pos:distance_to(be_pos)		

		local check_dist = 20
		local friendly_fire_dist = 20

		if #friends ~= 0 then

		for i,friend in ipairs(friends) do
			local friend_pos = friend:bone_position("bip01_spine")
			local friend_dist = npc_pos:distance_to(friend_pos)
			local ff_dist = friend_pos:distance_to(be_pos)
				if friend_dist < check_dist then check_dist = friend_dist end
				if ff_dist < friendly_fire_dist then friendly_fire_dist = ff_dist end
				if check_dist <= 15 or ff_dist <= 15 then 
					shooting_are_safe = false 
					return shooting_are_safe
				end
			end
		end
				
		if (be_dist > 25) and (check_dist > 15) and (friendly_fire_dist > 15) and valid_target(be) then
			shooting_are_safe = true 
			return shooting_are_safe
		else 
			shooting_are_safe = false  
			return shooting_are_safe
		end
	end
	return shooting_are_safe
end 

 

 

Можешь сам убедится, поискав ее в оригинальном rx_wmgr.scipt - не найдешь.

 

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

 

Сейчас, при убийстве непися а то и просто при появлении кого-то в онлайне валится с руганью на death_manager.script (и да, я качал версию, где вылет с ножом пофикшен):

 

 



FATAL ERROR

[error]Expression    : fatal error
[error]Function      : CScriptEngine::lua_error
[error]File          : E:\stalker\sources\trunk\xr_3da\xrGame\script_engine.cpp
[error]Line          : 73
[error]Description   : <no expression>
[error]Arguments     : LUA error: ...- trilogy\shoc\gamedata\scripts\death_manager.script:138: attempt to index field '?' (a nil value)


stack trace:

Scheduler tried to update object mil_stalker_0002

 

 

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

aka Stalker_AleX333
 
Мои проекты  - ЯндексДиск   |   Я на Gamer-Mods.ru

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

local function check_object(obj) 
if obj and obj.clsid and obj:alive() and npc:id() ~= obj:id() then 
if IsStalker(obj) and npc:relation(obj) ~= game_object.enemy then 
table.insert(friends,obj)
end 
end 
end 
for o in npc:memory_visible_objects() do check_object(o:object()) end 
for o in npc:memory_sound_objects() do check_object(o:object()) end

Не слишком полезно использовать локальные функции в цикле, у меня из-за этого вылетало по переполнению стека.

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

ЗЫ

Ещё бы сделать схему "охотник на больших птиц" т.е. НПС vs вертолёт, НПС стреляют на упреждения из мощного оружия типа пулемёт, из ПМ и обрезов даже не пытаются, так же из ПЗРК стреляют только по вертолётам.

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

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

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

Ссылка на комментарий
Не слишком полезно использовать локальные функции в цикле, у меня из-за этого вылетало по переполнению стека.

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

 

Ещё бы сделать схему "охотник на больших птиц" т.е. НПС vs вертолёт, НПС стреляют на упреждения из мощного оружия типа пулемёт, из ПМ и обрезов даже не пытаются, так же из ПЗРК стреляют только по вертолётам.

Да, по вертолетам было бы здорово что-нибудь сварганить.

 

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

 

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

 

З.Ы. А свой вылет по death_manager.script я пофиксил. Там в одном из конфигов была ошибка, а я копал скрипты.

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

aka Stalker_AleX333
 
Мои проекты  - ЯндексДиск   |   Я на Gamer-Mods.ru

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

@Kondr48, это та, где еще Иглу добавили? Если она, то там есть спорные моменты и "особенности" (глюки и прочее). Та же Игла требует переработки, я уже молчу про ее жуткие текстуры. И она случаем не под 4-ый патч? 

Изменено пользователем Silver Raven
  • Полезно 1

aka Stalker_AleX333
 
Мои проекты  - ЯндексДиск   |   Я на Gamer-Mods.ru

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

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

  • Нравится 2
  • Согласен 1

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

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

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

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

 

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

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

Да, все верно. Я не совсем правильно написал. НПС (снайперы) не помещены в in рестрикторы, а путь ведущий вниз, с их вышек, перегорожен этим самым рестриктором, дабы последние не "леветировали" по лестнице. 

 

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

 

В новом менеджере оружия есть такая фнкция

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

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

aka Stalker_AleX333
 
Мои проекты  - ЯндексДиск   |   Я на Gamer-Mods.ru

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

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

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

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

 

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

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

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

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

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

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

Войти

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

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

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