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

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

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

Привет!Как перенести персонажа из игры на движке Source(типа css,half life,left 4 dead) в сталкер тч или чн/зп?

Ну, да поможет Вам F1, да сохранит Вас F2, во имя Control`а, Alt`а и святого Delet`а. Enter.


Подарки

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

    @Котошметик [YouTube]

    привет! Долго и упорно допривязывая, что не привяжется от иного скелета (Source) к Сталкеру. Это если кратчайшим путем, либо полная перепривязка, делается в любом удобном 3Д редакторе. Знание Фотошопа, чтобы исходники для бампа сделать. Знание СДК с настройкой моделей и текстур. https://www.youtube.com/results?search_query=Привязка+меши+НПС+к+костям+сталкера

    • Спасибо 1
    • Полезно 1

    ed_rez.gif

    c1f11b67ff360413e81b4e4dcf21eb41.jpg


    Подарки

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

    Пипл,хэлп!У меня после переноса монолитовца в тяжёлом бронекостюме из ЗП в ТЧ я словил вылет. Вот часть лога :

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

    [error]Expression    : fatal error
    [error]Function      : CSkeletonX::_Load
    [error]File          : E:\stalker\sources\trunk\xr_3da\SkeletonX.cpp
    [error]Line          : 380
    [error]Description   : <no expression>
    [error]Arguments     : Invalid vertex type in skinned model 'actors\neytral\stalker_neytral_balon_1:1'

    Я делал по этому гайду.

    Ну, да поможет Вам F1, да сохранит Вас F2, во имя Control`а, Alt`а и святого Delet`а. Enter.


    Подарки

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

    @Котошметик [YouTube], а ты его в каком СДК делал? Для ТЧ или для ЗП? Для каждой версии игры - свой СДК нужен.

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

    Пытался перенести Лесника из ЧН в ТЧ (раньше переносил НПС из ЗП в ТЧ с ЗПшными анимками - работали), перегнал модель Лесника через СДК 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
    Ссылка на комментарий
    2 минуты назад, Graff46 сказал:

    перегнал модель Лесника через СДК 0.4

    Просто перегнал или перед этим изменил скелет на ТЧ-шный? (Вопрос может быть и ответом)

    ed_rez.gif

    c1f11b67ff360413e81b4e4dcf21eb41.jpg


    Подарки

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

    @ed_rez, Не менял

     

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

    8f49c475e4b23341738125991e149aff.jpg

    Ссылка на комментарий
    17 минут назад, Graff46 сказал:

    Не менял

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

    29 минут назад, Graff46 сказал:

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

    Странно, а я помню Лесника стоящим и двигающимся у какой-то избушки. Видимо был перенос на сталкерский скелет. 

    ed_rez.gif

    c1f11b67ff360413e81b4e4dcf21eb41.jpg


    Подарки

  • 2
  • Ссылка на комментарий
    9 минут назад, ed_rez сказал:

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

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

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

    @Graff46

    тогда смысл перегонять в СДК? Дописать другие файлы настроек косточек?

    Мне, к примеру, без разницы в каком СДК компилить модель для ТЧ. Это и ввело меня в путаницу, да еще и думал про сталкерский скелет.

    ed_rez.gif

    c1f11b67ff360413e81b4e4dcf21eb41.jpg


    Подарки

  • Ссылка на комментарий
    23 часа назад, ed_rez сказал:

    тогда смысл перегонять в СДК?

    Ну как минимум - шейдер поменять.

     

    Мать: 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.

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

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

    Логику персонажа смотри. 

    http://stalkerin.gameru.net/wiki/index.php?title=Настройка_логики._Часть_1

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

    ed_rez.gif

    c1f11b67ff360413e81b4e4dcf21eb41.jpg


    Подарки

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

    ИМХО до кучи пути в спавне нужно смотреть.

    А по логике - анимки как анимки. Ничего необычного...Всё как у сталкеров))

    Изменено пользователем Змея
    Ссылка на комментарий
    В 07.01.2019 в 04:25, ed_rez сказал:

    Мне, к примеру, без разницы в каком СДК компилить модель для ТЧ.

    У тебя движек альтернативный? Или есть способ компилить НПС в 0.7 для ТЧ?

    Do what thou wilt shall be the whole of the Law.

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

    @sto1en

    тут не важно какой движок. Важны настройки текстур, а именно шейдеров. Скелет ТЧ отлично съедается СДК ЗП. Галочка HQ geometry не вызывает конфликтов в ТЧ движке. Настройки костей универсальны.

    ed_rez.gif

    c1f11b67ff360413e81b4e4dcf21eb41.jpg


    Подарки

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

    Я компилировал в 0.7 модель под ТЧ. Настройки шейдеров как в 0.4. Скелет - universal.bones подгружал. Компилирует без проблем, но в игре вылет

    CSkeletonX::_Load Invalid vertex type in skinned model '%s' , увы.

    Do what thou wilt shall be the whole of the Law.

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

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

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

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

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

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

    Войти

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

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

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

    AMK-Team.ru

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