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

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

Здравствуйте. Хотел бы задать вопросец(платформа CoP) :

Поставил мод на анимированные медикаменты. 

Решил я добавить использование эффектов камеры при приеме медикаментов. 

Естественно, прописывать такое для каждого из предметов - глупо, потому я попробовал просто добавить проверку на параметра,но столкнулся с проблемой, что анимации срабатывает лишь раз, а потом все предметы используются так, как в ванильноме ЗП. 

Вопрос: есть ли функция для проверки использования не именно отдельного предмета, а просто?

 

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

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

Подхожу к тайнику, открываю его, вопрос: как узнать ID именно этого рюкзака, который сейчас открыт?

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

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

Есть такая функция из xr_codition.script

 

-- true если у актора одет шлем указанной секции
function actor_wear_helmet(actor, npc, p)
    return p[1] ~= nil and actor:object( p[1] ) ~= nil and actor:item_in_slot(10) ~= nil and actor:item_in_slot(10):section() == p[1]
end

 

Как сделать тоже самое только для проверки предмета который находится на поясе?

 

P.S почему то не получается с телефона поместить под спойлер.


Подарки

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

    @Biblia Блин, я сейчас не у компьютера поэтому не могу наизусть пример написать. Тем более в интернета полно уроков на эту тему.


    Подарки

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

    @I am Dead я гугли, но везде, увы, только проверки на наличие предмета и тому подобное, что мне сейчас не надо (

    В ютубе пока не смотрел, ибо нет возможности. 

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

    @Biblia Пример можешь поглядеть в новом арсенале 6, там есть скрипт на озвучивание подбираемого предмета по его классу( самое первое что пришло где можно подглядеть пример использования).

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

    Подарки

  • 2
  • Ссылка на комментарий
    25.04.2021 в 23:16, Biblia сказал(а):

    Естественно, прописывать такое для каждого из предметов - глупо

    С чего ты это взял?) Даже в таком сложном в функциональном плане моде, как Dead Air, сделано для каждого предмета отдельно. 

    Вот:

    Скрытый текст
    
    outfit = {
    		[0] = "actor_effects.use_weapon(0)",
    		[1] = "xr_effects.disable_ui_lite_with_imput(db.actor, nil)",
    		[2] = "xr_effects.play_inv_repair_sewing_kit()",
    		[378] = "actor_effects.use_helmet(0)",
    		[379] = "xr_effects.disable_nv(db.actor, nil)",
    		[380] = "xr_effects.disable_ui_inventory(db.actor, nil)",
    		[550] = "level.add_cam_effector('camera_effects\\\\item_use_fast.anm', 8063, false,'')",
    		[2900] = "level.add_pp_effector('surge_fade.ppe', 8023, false)",
    		[3020] = "level.add_cam_effector('camera_effects\\\\item_use_slow.anm', 8064, false,'')",
    		
    		
    		[6000] = "level.remove_pp_effector(8023)",
    		[7001] = "xr_effects.enable_ui_lite(db.actor, nil)",
    		[7002] = "actor_effects.use_helmet(1)",
    		[7003] = "xr_effects.enable_nv_and_imput(db.actor, nil)",
    		[7004] = "actor_effects.use_weapon(1)"
    	},
    	
    	helm = {
    		[0] = "actor_effects.use_weapon(0)",
    		[1] = "xr_effects.disable_ui_lite_with_imput(db.actor, nil)",
    		[2] = "xr_effects.disable_nv(db.actor, nil)",
    		[3] = "actor_effects.use_helmet(0)",
    		[4] = "xr_effects.disable_nv(db.actor, nil)",
    		
    		
    		[5] = "level.add_cam_effector('camera_effects\\\\item_use_fast.anm', 8053, false,'')",
    	--	[6] = "xr_effects.play_inv_repair_sewing_kit()",
    		[7] = "level.add_cam_effector('camera_effects\\\\item_use_slow.anm', 8054, false,'')",
    		[380] = "xr_effects.disable_ui_inventory(db.actor, nil)",
    		
    		
    		[1700] = "actor_effects.use_helmet(1)",
    		[1701] = "xr_effects.enable_ui_lite(db.actor, nil)",
    		[2500] = "xr_effects.enable_imput(db.actor, nil)",
    		[2503] = "actor_effects.use_weapon(1)"
    	},
    
    	gun_oil_dummy = {
    		[0] = "actor_effects.use_weapon(0)",
    		[1] = "xr_effects.disable_ui_lite_with_imput(db.actor, nil)",
    --		[378] = "actor_effects.use_helmet(0)",
    --		[379] = "xr_effects.disable_nv(db.actor, nil)",
    		[550] = "level.add_cam_effector('camera_effects\\\\item_use.anm', 8053, false,'')",
    		[1040] = "xr_effects.disable_ui_inventory(db.actor, nil)",
    		[1460] = "xr_effects.play_inv_repair_spray_oil()",
    		[4351] = "xr_effects.enable_ui_lite(db.actor, nil)",
    --		[5450] = "actor_effects.use_helmet(1)",
    		[6050] = "xr_effects.enable_imput(db.actor, nil)",
    		[6650] = "actor_effects.use_weapon(1)"
    	},
    	gun_oil_2_dummy = {
    		[0] = "actor_effects.use_weapon(0)",
    		[1] = "xr_effects.disable_ui_lite_with_imput(db.actor, nil)",
    --		[378] = "actor_effects.use_helmet(0)",
    --		[379] = "xr_effects.disable_nv(db.actor, nil)",
    		[550] = "level.add_cam_effector('camera_effects\\\\item_use.anm', 8053, false,'')",
    		[1040] = "xr_effects.disable_ui_inventory(db.actor, nil)",
    		[1460] = "xr_effects.play_inv_repair_spray_oil()",
    		[4351] = "xr_effects.enable_ui_lite(db.actor, nil)",
    --		[5450] = "actor_effects.use_helmet(1)",
    		[6050] = "xr_effects.enable_imput(db.actor, nil)",
    		[6650] = "actor_effects.use_weapon(1)"
    	},	
    	cleaning_kit_p_dummy = {
    		[0] = "actor_effects.use_weapon(0)",
    		[1] = "xr_effects.disable_ui_lite_with_imput(db.actor, nil)",
    --		[378] = "actor_effects.use_helmet(0)",
    --		[379] = "xr_effects.disable_nv(db.actor, nil)",
    		[550] = "level.add_cam_effector('camera_effects\\\\item_use_fast.anm', 8063, false,'')",
    		[1040] = "xr_effects.disable_ui_inventory(db.actor, nil)",
    		[1460] = "xr_effects.play_inv_repair_brushes()",
    		[3020] = "level.add_cam_effector('camera_effects\\\\item_use.anm', 8064, false,'')",
    		[7681] = "xr_effects.enable_ui_lite(db.actor, nil)",
    --		[8480] = "actor_effects.use_helmet(1)",
    		[9080] = "xr_effects.enable_imput(db.actor, nil)",
    		[9680] = "actor_effects.use_weapon(1)"
    	},
    	cleaning_kit_p_2_dummy = {
    		[0] = "actor_effects.use_weapon(0)",
    		[1] = "xr_effects.disable_ui_lite_with_imput(db.actor, nil)",
    --		[378] = "actor_effects.use_helmet(0)",
    --		[379] = "xr_effects.disable_nv(db.actor, nil)",
    		[550] = "level.add_cam_effector('camera_effects\\\\item_use_fast.anm', 8063, false,'')",
    		[1040] = "xr_effects.disable_ui_inventory(db.actor, nil)",
    		[1460] = "xr_effects.play_inv_repair_brushes()",
    		[3020] = "level.add_cam_effector('camera_effects\\\\item_use.anm', 8064, false,'')",
    		[7681] = "xr_effects.enable_ui_lite(db.actor, nil)",
    --		[8480] = "actor_effects.use_helmet(1)",
    		[9080] = "xr_effects.enable_imput(db.actor, nil)",
    		[9680] = "actor_effects.use_weapon(1)"
    	},
    	cleaning_kit_p_3_dummy = {
    		[0] = "actor_effects.use_weapon(0)",
    		[1] = "xr_effects.disable_ui_lite_with_imput(db.actor, nil)",
    --		[378] = "actor_effects.use_helmet(0)",
    --		[379] = "xr_effects.disable_nv(db.actor, nil)",
    		[550] = "level.add_cam_effector('camera_effects\\\\item_use_fast.anm', 8063, false,'')",
    		[1040] = "xr_effects.disable_ui_inventory(db.actor, nil)",
    		[1460] = "xr_effects.play_inv_repair_brushes()",
    		[3020] = "level.add_cam_effector('camera_effects\\\\item_use.anm', 8064, false,'')",
    		[7681] = "xr_effects.enable_ui_lite(db.actor, nil)",
    --		[8480] = "actor_effects.use_helmet(1)",
    		[9080] = "xr_effects.enable_imput(db.actor, nil)",
    		[9680] = "actor_effects.use_weapon(1)"
    	},
    --И далее для всех-всех-всех предметов, которые используют анимации

     

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

    Скрытый текст
    
    function use_item_stack(s_obj,obj)
    
    -- DRUGS USE
    	-- caffeine x5
    	if(s_obj)and(s_obj:section_name()=="caffeine_5")then
        	alife():create("caffeine_4", db.actor:position(), db.actor:level_vertex_id(), db.actor:game_vertex_id(), db.actor:id())
    		local sleep_ch = system_ini():r_float(s_obj:section_name(), "eat_sleep")
    		ui_sleep_dialog.set_sleep(sleep_ch)
        	items_animation.drugs_anims()
    	end
    	if(s_obj)and(s_obj:section_name()=="caffeine_4")then
        	alife():create("caffeine_3", db.actor:position(), db.actor:level_vertex_id(), db.actor:game_vertex_id(), db.actor:id())
    		local sleep_ch = system_ini():r_float(s_obj:section_name(), "eat_sleep")
    		ui_sleep_dialog.set_sleep(sleep_ch)
        	items_animation.drugs_anims()
    	end
    	if(s_obj)and(s_obj:section_name()=="caffeine_3")then
        	alife():create("caffeine_2", db.actor:position(), db.actor:level_vertex_id(), db.actor:game_vertex_id(), db.actor:id())
    		local sleep_ch = system_ini():r_float(s_obj:section_name(), "eat_sleep")
    		ui_sleep_dialog.set_sleep(sleep_ch)
        	items_animation.drugs_anims()
    	end
    	if(s_obj)and(s_obj:section_name()=="caffeine_2")then
        	alife():create("caffeine", db.actor:position(), db.actor:level_vertex_id(), db.actor:game_vertex_id(), db.actor:id())
    		local sleep_ch = system_ini():r_float(s_obj:section_name(), "eat_sleep")
    		ui_sleep_dialog.set_sleep(sleep_ch)
        	items_animation.drugs_anims()
    	end
    	if(s_obj)and(s_obj:section_name()=="caffeine")then
    		local sleep_ch = system_ini():r_float(s_obj:section_name(), "eat_sleep")
    		ui_sleep_dialog.set_sleep(sleep_ch)
    		items_animation.drugs_anims()
    	end
    			-- DRUGS
    		-- drug_charcoal x5
    	if(s_obj)and(s_obj:section_name()=="drug_charcoal_5")then
        	alife():create("drug_charcoal_4", db.actor:position(), db.actor:level_vertex_id(), db.actor:game_vertex_id(), db.actor:id())
        	items_animation.drugs_anims()
    	end
    	if(s_obj)and(s_obj:section_name()=="drug_charcoal_4")then
        	alife():create("drug_charcoal_3", db.actor:position(), db.actor:level_vertex_id(), db.actor:game_vertex_id(), db.actor:id())
        	items_animation.drugs_anims()
    	end
    	if(s_obj)and(s_obj:section_name()=="drug_charcoal_3")then
        	alife():create("drug_charcoal_2", db.actor:position(), db.actor:level_vertex_id(), db.actor:game_vertex_id(), db.actor:id())
        	items_animation.drugs_anims()
    	end
    	if(s_obj)and(s_obj:section_name()=="drug_charcoal_2")then
        	alife():create("drug_charcoal", db.actor:position(), db.actor:level_vertex_id(), db.actor:game_vertex_id(), db.actor:id())
        	items_animation.drugs_anims()
    	end
    	if(s_obj)and(s_obj:section_name()=="drug_charcoal")then
    		items_animation.drugs_anims()
    	end
    		-- drug_coagulant x5
    	if(s_obj)and(s_obj:section_name()=="drug_coagulant_5")then
        	alife():create("drug_coagulant_4", db.actor:position(), db.actor:level_vertex_id(), db.actor:game_vertex_id(), db.actor:id())
    		items_animation.drugs_anims()
    	end

    и т.д. для всех предметов.

    Насколько я понял, у тебя в конфигах указывается тип используемого предмета. Так в чём, собственно проблема? В колбеке на использование предмета делаешь ссылку на функцию, в которой проверяешь, чему эта секция равна, и запускаешь анимку в зависимости от результата:

    -- в конфиге:
    [kolbasa]:booster, food_base
    $spawn 				= "food and drugs\kolbasa"
    visual				= dynamics\devices\dev_kolbasa\dev_kolbasa.ogf
    description			= st_kolbasa_descr
    
    inv_name			= st_kolbasa
    inv_name_short			= st_kolbasa
    inv_weight			= 0.4
    
    inv_grid_width		= 1
    inv_grid_height		= 1
    inv_grid_x			= 35
    inv_grid_y			= 18
    cost				= 960
    
    attach_angle_offset		= 0.440521, 1.378287, -0.644026
    attach_position_offset	= 0.104196, -0.010821, 0.076969
    attach_bone_name		= bip01_r_hand
    auto_attach				= false
    
    eat_satiety				= 0.646
    eat_radiation				= 0.0
    eat_alcohol				= 0.100
    eat_health			= -0.05
    
    use_sound			= interface\inv_eat_paperwrap
    anim_type 			= food --тип анимации
    
    --в скрипте:
    	local anim_type = ini:r_string(obj:section(), "anim_type")
    	if anim_type == "food" then
    		--запускаешь камеру и всё, что нужно
    	elseif anim_type == "drug" then
    	...
    	end

     

    И в дополнение, запускать функцию на проверку типа анимации предмета надо из bind_stalker.script таким образом:

    --функция:
    
    function actor_binder:use_inventory_item(obj)
    	--в конце её, перед последним end, пишешь:
    	items_manager.use_item_stack(obj) -- твоя функция (я вставил свою для примера)
    end

     

    26.04.2021 в 07:33, I am Dead сказал(а):

    Как сделать тоже самое только для проверки предмета который находится на поясе?

    Добавлять в движке итератор для пояса и с его помощью проверять наличие предмета нужной секции. Иначе никак.

    Ссылка на комментарий
    49 минут назад, ARTLantist сказал(а):

    Добавлять в движке итератор для пояса и с его помощью проверять наличие предмета нужной секции. Иначе никак.

    Подсказали функцию которая замечательно работает.

     

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

    function actor_has_item_on_belt(actor, npc, p)
        local obj = actor:object(p[1])
        return obj and actor:is_on_belt(obj)
    end

     

    • Полезно 2

    Подарки

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

    @I am Dead так у тебя ОГСР? Тогда другое дело. Там и итератор тебе сразу есть, и эти проверки - is_on_belt, is_on_ruck и куча всего другого.

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

    @ARTLantist Тогда вопрос уже другой, как эту функцию переделать под огср.

     

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

    -- переносим все вещи из ящика с указанным story_id
    function transfer_from_box(box_sid)
        local box = level_object_by_sid(box_sid)
        if box then
            box:iterate_inventory_box(function(item) box:transfer_item(item, db.actor) end)
        end
    end

     

    С такой функцией у меня идет ругань на iterate_inventory_box так как в движке его нету, происходит вылет.

     

    Изменено пользователем I am Dead

    Подарки

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

    Рнебята пытаюсь прикрутить гуи окно с двумя кнопками к функции обыска монстров.

    function generic_object_binder:use_callback(obj, who)
    	if self.use_flag == nil and self.object:section()~="m_trader" then
    		self.object:set_nonscript_usable(false)
    		self.use_flag = true
    	end
    	--------------------------
    	--------------------------
    	--------------------------
    	NewUI4.main()
    	--self:mutanter_use(obj,who)
    	   
    end

    Разделил функцию на две. Где self:mutanter_use(obj,who) это все действия по обыску трупов. NewUI4.main() это собственно окно с двумя кнопками. Если вызываю из окна при нажатии кнопки скрипт валиться из за отсутствия переменных. Если функцию без окна запускаю все работает. Вызываю собственно так.

    function NewUI4:button1_button_clicked()
    	 bind_monster.generic_object_binder:mutanter_use()
    	 --bind_monster.generic_object_binder:mutanter_use(obj,who)
    	 self:Hide()
    end

     

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

    @Stalkersof Попробуй так сделать:

     

    Скрытый текст
    
    function generic_object_binder:use_callback(obj, who)
    	if self.use_flag == nil and self.object:section()~="m_trader" then
    		self.object:set_nonscript_usable(false)
    		self.use_flag = true
    	end
    	--------------------------
    	--------------------------
    	--------------------------
        level.start_stop_menu(NewUI4.main(), true)
    	--self:mutanter_use(obj,who)
    	   
    end

     


    Подарки

  • 2
  • Ссылка на комментарий
    44 минуты назад, I am Dead сказал(а):

    @Stalkersof Попробуй так сделать:

     

      Показать
    
    
    
    function generic_object_binder:use_callback(obj, who)
    	if self.use_flag == nil and self.object:section()~="m_trader" then
    		self.object:set_nonscript_usable(false)
    		self.use_flag = true
    	end
    	--------------------------
    	--------------------------
    	--------------------------
        level.start_stop_menu(NewUI4.main(), true)
    	--self:mutanter_use(obj,who)
    	   
    end

     

    Не а не получается. NewUI4.main() это скрипт и функция в нем. Окно появляется и кнопки и все. 

    function main()
    	local hud = NewUI4(get_hud())
    	level.start_stop_menu(hud, true) 
    end

    Попытаюсь еще раз объяснить проблему функция self:mutanter_use(obj,who) вызываемая непосредственно в скрипте. Прекрасно работает. Комментирую ее и пытаюсь вызвать при нажатии кнопки вылет. Либо не корректные параметры либо отсутствие параметров. Т.е вот это (obj,who)я не могу передать из другого скрипта.

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

    @Stalkersof заведомо безнадёжная идея делать так, как сделано у тебя. При смерти мутанта в биндере он отлавливается и все действия относятся к нему, а когда ты хочешь заупустить из другой функции что-то из биндера монстров, ты уже теряешь этого монстра. Используй логические переменные и пересылай их в свой скрипт с ГУИ окном, там после нажатия кнопки делай true и в апдейте биндера монстров отлавливай момент, когда эта переменная true, выполняй нужные действия.

    • Нравится 1
    Ссылка на комментарий
    2 минуты назад, ARTLantist сказал(а):

    @Stalkersof заведомо безнадёжная идея делать так, как сделано у тебя. При смерти мутанта в биндере он отлавливается и все действия относятся к нему, а когда ты хочешь заупустить из другой функции что-то из биндера монстров, ты уже теряешь этого монстра. Используй логические переменные и пересылай их в свой скрипт с ГУИ окном, там после нажатия кнопки делай true и в апдейте биндера монстров отлавливай момент, когда эта переменная true, выполняй нужные действия.

    Вроде с переменными тоже пробовал. Хорошо еще раз попробую.

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

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

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

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

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

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

    Войти

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

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

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

    AMK-Team.ru

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