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

Создание и настройка моделей NPC


Senator

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

Не подскажете максимальное и рекомендованное ограничение по полигонам на модель НПС в ТЧ?

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


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

[ТЧ 1.0006] Пропадает звук шагов если ГГ принимает визуал монолитовца в эко костюме (stalker_mo_nauchniy.ogf), на других (некоторых) визуалах звук шагов есть. Я пробовал менять профили костей, переносил *.bones с рабочего визуала, правил материалы, шейдеры, кости, шейпы - звук так и не появился. Также приписывал костюму другой визуал - звук был... Подскажите в чем проблема отсутствия звука шагов на определённом визуале ГГ?

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


Ссылка на сообщение
19 минут назад, ed_rez сказал:

это пробовал

Да, я нашёл те посты через поисковик, и первым делом сделал #include "models\capture\stalker_hero_captures.ltx", но не помогло. На рабочем визуале (где был звук) был другой файл включён, я и его присоединял, толку не было, возможно не в этом дело. Я старался не рабочий визуал полностью привести к рабочему в AE но не получается, неужели дело в геометрии?

 

Изменено пользователем Graff46
Ошибки исправлял

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


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

Что бы корректно работал звук шагов ГГ в ТЧ нужно, чтобы в дефолтном визуале ГГ (который прописан в actor.ltx и олл.спавне) не были установлены critical_hit_grup_*'ы !

Скрытый текст

519e914c5750c14f2d2634f809ea4347.jpg

 

Изменено пользователем Graff46
Ошибки исправлял
  • Спасибо 1
  • Нравится 1
  • Полезно 1

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


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

На этом фоне у меня возник интерес, за что отвечают  critical_hit_grup_*'ы?

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

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


Ссылка на сообщение
Только что, TIGER_VLAD сказал:

Естественно. Моделям актора эти анимации не нужны.

Хорошо бы нашим специалистам по ковырянию движка обрисовать проблему, возможно получится сделать так, что бы при "одевании" ГГ в модель, движок просто бы не учитывал critical_hit_grup, а не выдавал фокусы с потерей звука шагов.

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

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


Ссылка на сообщение
Только что, TIGER_VLAD сказал:

Также еще звук может пропадать если в user data не указать правильный инклуд .

У меня в дефолтной модели сейчас вот это #include "models\capture\plasch_mask_damage_no.ltx" и звук работает. 

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


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

Быстро глянул файлы в папке models\capture\ многие файлы одинаковой структуры, только разные ключи, но есть и сильно отличающиеся.

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


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

Пытался перенести Лесника из ЧН в ТЧ (раньше переносил НПС из ЗП в ТЧ с ЗПшными анимками - работали), перегнал модель Лесника через СДК 0.4, анимки все в омф файле (от ЧН), в СДК анимки на НПС работают. Добавил анимки в mob_trader.script

Скрытый текст

----------------------------------------------------------------------------------------------------
-- mob_trader
----------------------------------------------------------------------------------------------------
global_animations = {
	desk_idle				= {"idle","idle_1","palci","zatylok"},
	desk_talk				= {"idle","idle_1"},
	desk_to_chair_hack		= {"idle_spinka"},
	desk_to_listen			= {"idle_chitaet"},
	desk_to_diagonal		= {"perehod_0"},
	
	chair_hack_idle			= {"idle_2","idle_2_def_0"},
	chair_hack_talk			= {"idle_2_talk_0","idle_2_talk_1","idle_2_talk_2","idle_2_talk_3"},
	chair_hack_to_diagonal	= {"idle_2_to_idle_0"},
	chair_hack_to_desk		= {"spinka_idle"},
	
	compute_idle				= {"idle_1_spec_think_0","idle_1_spec_think_1"},
	compute_idle_to_diagonal	= {"idle_1_to_idle_0"},
	
	diagonal_idle			= {"idle_0_def_0","idle_0_spec_click_0","idle_0_spec_scratch_0"},
	diagonal_idle_short		= {"idle_0_def_0"},
	diagonal_talk			= {"idle_0_talk_0","idle_0_talk_1","idle_0_talk_2","idle_0_talk_3"},
	diagonal_to_chair_hack	= {"idle_0_to_idle_2"},
	diagonal_to_compute		= {"idle_0_to_idle_1"},
	diagonal_to_desk		= {"perehod_1"},
		
	first_phrase			= {"vstuplenie"},
	
	listen_idle				= {"chitaet"},
	listen_to_desk			= {"chitaet_idle"},
	
	hello				= {"hello"},

	forester_sit                 = {"sit"},
    forester_beard                = {"beard_in","beard","beard_out"},
    forester_reaction        = {"reaction_in","reaction","reaction_out"},
    forester_see                = {"see_in","see","see_out"},
    forester_talk_1                = {"sit_talk_1_in","sit_talk_1","sit_talk_1_out"},
    forester_talk_2                = {"sit_talk_2_in","sit_talk_2","sit_talk_2_out"},
    forester_talk_3                = {"sit_talk_3_in","sit_talk_3","sit_talk_3_out"}	
}

head_animations = {
	normal			= {"talk_0","talk_1","talk_4"}, 
	angry			= {"talk_3","talk_2","talk_1"},
	good			= {"talk_glad_0"},
	first_phrase	= {"vstuplenie_head"},
	forester_talk_1    		= {"sit_talk_1_in","sit_talk_1","sit_talk_1_out"},
	forester_talk_2    = {"sit_talk_2_in","sit_talk_2","sit_talk_2_out"},
	forester_talk_3    = {"sit_talk_3_in","sit_talk_3","sit_talk_3_out"},
	forester_reaction        = {"reaction_in","reaction","reaction_out"}
}

----------------------------------------------------------------------------------------------------
function on_start_tutorial_item_1()
	if db.trader == nil then return end
	
	db.trader:external_sound_start("characters_voice\\scenario\\trader\\trader_tutorial_pda_12")
end

function on_stop_tutorial_item()
	if db.trader == nil then return end
	db.trader:external_sound_stop()
end
----------------------------------------------------------------------------------------------------

class "mob_trader"

function mob_trader:__init(obj, storage)
	self.object = obj
	self.st		= storage
end

function mob_trader:reset_scheme()
	trader_obj = self.object

	self.st.signals = {}
	
	self.object:set_callback(callback.trader_global_anim_request, self.on_global_anim_request, self )
	self.object:set_callback(callback.trader_head_anim_request, self.on_head_anim_request, self )
	self.object:set_callback(callback.trader_sound_end, self.on_sound_end, self )

	-- start global animation
	self.object:set_trader_global_anim(self:select_global_animation())
	
	-- start sound and head animation
	if (self.st.sound_phrase) then 
		local snd = mob_sound.pick_sound_from_set(self.object, self.st.sound_phrase, {})
		self.object:set_trader_sound(snd, self:select_head_animation());
	end
	
	if self.st.anim_head == nil then
		self.st.anim_head = "normal"
	end
	
	db.trader = self.object
end

function mob_trader:update(delta)
	if xr_logic.try_switch_to_another_section(self.object, self.st, db.actor) then
		return
	end
end

---------------------------------------------------------------------------------------------------------------------
function mob_trader:select_global_animation()
	local anim_set = global_animations[self.st.anim_global]
    local r = math.random(1, table.getn(anim_set))
	return anim_set[r]
end

function mob_trader:select_head_animation()
	-- random select 
	local anim_set = head_animations[self.st.anim_head]
    local r = math.random(1, table.getn(anim_set))
	return anim_set[r]	
end

---------------------------------------------------------------------------------------------------------------------

function mob_trader:on_global_anim_request()
	self.st.signals["animation_end"] = true	
	
	if (not self.st.play_once) then
		self.object:set_trader_global_anim(self:select_global_animation())
	end
end

function mob_trader:on_head_anim_request()
	if self.st.anim_head == nil then return end
		
	self.object:set_trader_head_anim(self:select_head_animation());
end

function mob_trader:on_sound_end()
	self.st.signals["sound_phrase_end"] = true	
end
---------------------------------------------------------------------------------------------------------------------
function mob_trader:deactivate()
	self.object:set_callback(callback.trader_global_anim_request, nil )
	self.object:set_callback(callback.trader_head_anim_request, nil )
	self.object:set_callback(callback.trader_sound_end, nil )
	self.st.signals = {}
	db.trader		= nil
end

---------------------------------------------------------------------------------------------------------------------
function add_to_binder(npc, ini, scheme, section, storage)
	printf("DEBUG: add_to_binder: npc:name()='%s', scheme='%s', section='%s'", npc:name(), scheme, section)

	local new_action = mob_trader(npc, storage)

	-- Зарегистрировать все actions, в которых должен быть вызван метод reset_scheme при изменении настроек схемы:
	xr_logic.subscribe_action_for_events(npc, storage, new_action)
end

function set_scheme(npc, ini, scheme, section, gulag_name)
	local st	= xr_logic.assign_storage_and_bind(npc, ini, scheme, section)
	st.logic	= xr_logic.cfg_get_switch_conditions(ini, section, npc)

	st.anim_global    = utils.cfg_get_string(ini, section, "anim_global", npc, true,  "")
	st.can_talk		  = utils.cfg_get_bool(ini,   section, "can_talk",    npc, false, true)
	st.tip_text		  = utils.cfg_get_string(ini, section, "tip_text",    npc, false, "", "character_use")
	if st.tip_text == nil then
		st.tip_text = ""
	end
	npc:set_tip_text(st.tip_text)
	
	if (ini:line_exist( section, "sound_phrase")) then
		st.anim_head	= utils.cfg_get_string(ini, section, "anim_head", npc, false, "")
		st.sound_phrase	= utils.cfg_get_string(ini, section, "sound_phrase", npc, false, "")
	else
		st.anim_head	= nil
		st.sound_phrase	= nil
	end
	
	
	--' check if play once animation
	st.play_once = false
	if (ini:line_exist( section, "on_signal")) then
		local str = utils.cfg_get_string(ini, section, "on_signal", npc, false, "")
		local par = utils.parse_params(str)
		if par[1] == "animation_end" then
			st.play_once = true
		end
	end

	if st.can_talk == true then
		npc:enable_talk()
	else
		npc:disable_talk()
	end
	
end

 

Спавню в игре и получаю вылет!

Скрытый текст

Expression    : motion_ID.valid()
Function      : CKinematicsAnimated::ID_Cycle
File          : E:\stalker\sources\trunk\xr_3da\SkeletonAnimated.cpp
Line          : 136
Description   : ! MODEL: can't find cycle:
Arguments     : sit

Но анимация "sit" есть в омф и в СДК играет! Пробовал другие анимки - тоже такой вылет.

Внимание! Лесник не НПС, а моб (как Сидорович в ТЧ).

Подскажите в чем кроется ошибка?

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

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


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

@ed_rez, Не менял

 

@ed_rez, Моя не внимательность меня погубит! Спавнил Лесника, а скин Сидора был, хотя в секции менял, а как через нет-пакет сменил, так сразу!

8f49c475e4b23341738125991e149aff.jpg

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


Ссылка на сообщение
9 минут назад, ed_rez сказал:

Тогда это объясняет:

Зачем менять скелет, если я омф из ЧН использую  (родную)?

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


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

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