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

Скриптование


Svoboда

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

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

Как проверить наличие артефакта (любого) в инвентаре гг? И как сделать функцию, которая будет каждую секунду прибавлять немного радиации?

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


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

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

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


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

Как проверить характеристику бронежилетая надетого на гг в скрипте? Например, мне нужно проверить радиозащиту, и если она меньше то прибавлять гг радиацию. И сходу следующий вопрос: как сделать бесконечный таймер, по истечении которого прибавлялась бы эта радиация? (Из этого всего знаю только как прибавить радиацию)

  • Нравится 1

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


Ссылка на сообщение
17 минут назад, Zander_driver сказал(а):

 





local outfit = db.actor:item_in_slot(6) -- получаем объект комбеза, если есть
if outfit then
  local ocond = outfit:condition() -- выясняем состояние комбеза
  local ltx = system_ini()
  local osec = outfit:section() -- выясняем секцию конфига надетого комбеза
  local rdef = ltx:r_float(osec, "radiation_protection") -- читаем, на сколько этот комбез защищает от радиации
  local real_def = rdef * ocond -- вычисляем действующую защиту с учетом износа
  if real_def < 0.5 then
    db.actor.radiation = 0.1 -- например так)
  end
end

Надеюсь, пригодится для чего-нибудь :)

Бесконечный, по истечении которого... почему-то мне кажется это словосочетание, странным.

Извиняюсь, сам щас прочёл и не понял, что написал, заработался просто немного?

Я хотел сказать, один таймер, длинною, например, одну секунду, по истечении которой будет происходить функция и этот таймер будет запущен заново, и так бесконечно. Как-то так. 

А как правильно работать с этой delta? Уже долго голову ломаю, что это за переменная такая. Во многих модах её используют, а как она используется, разобраться никак не получается.

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

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


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

@Zander_driver, большое пребольшое спасибо, теперь понятно всё!

а как реализовать объединение и разъединение двух предметов в один, например, как сделано в Мизери с контейнерами артов? Мы наводим арт на контейнер и он туда кладётся. Потом нажимаем по контейнеру с артом ПКМ и у нас высвечивается окно "извлечь", нажимаем, и арт извлекается. Мне интересен именно такой способ, по большей части - как высветит это окно "извлечь".

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


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

Можно ли как-то изменить параметры параметры артефакта через скрипт? Если да, то как? И как отследить, что артефакт надет на пояс?

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


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

А можно как-то на оригинальном движке изменить вес предмета через скрипт?

И ещё вопрос: как можно реализовать объединение двух предметов при перетаскивании одного на другой, как прицел на автомат?

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


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

в news_manager есть функция send_tip, которую мы вызываем, когда хотим послать сообщение главное герою. Самая первая строка пишет тёмно-серым цветом "сообщение", за это отвечает этот кусок кода:

	local news_caption = game.translate_string("st_tip") --st_tip - "Сообщение"
	local news_text = game.translate_string(news_id)
	actor:give_game_news(news_caption, news_text, texture, timeout*1000, showtime, 0)

Я хочу изменить это "сообщение" на другой текст, с этим проблем не возникло. НО, я также хотел и цвет поменять, но он не меняется! Я думал мб в конфигах в строках сразу поменять цвет, что работало везде где я встречал, но на экран выводится также серая надпись с со всеми параметрами цвета, что я указал "\n%c[0,255,0,0]Внимание:". Как всё таки изменить цвет это строки?

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


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

как в ЗП отследить, что броня или шлем были перемещены в слот, или наоборот убраны из слота?

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


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

как перевести серверный объект в клиентский в зп?

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

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


Ссылка на сообщение
5 минут назад, Zander_driver сказал(а):

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

Ну вот я спавню актору в инвентарь предмет, и мне нужно тут же именно ему изменить condition. С серверными не работает обычный set_condition(value), тут нужен клиентский. Как мне его отловить?

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

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


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

как можно отследить, что гг использовал предмет рядом с костром (campfire)?

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


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

@AndreySol 

for i=1,65535 do
     local s = sim:object(i)
     if s then
         local obj = level.object_by_id(s.id)
         if obj  then
             local camp = o:get_campfire()
             if camp and obj:position():distance_to(db.actor:position()) < 5 then
			 	...нужные действия и куча end...
        

такой вариант кода пойдёт? Просто меня смущает огромный цикл с перебором всех симуляционных объектов... Мб его можно было бы чем-то заменить?

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


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

что есть такое "o:get_campfire()"?

это я косякнул, там obj:get_campfire()

Да, мне нужно наличие любого костра

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


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

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

1. Как скриптово активировать диалог с нужным нпс?

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 сказал(а):

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

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

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


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

@I am Dead а какая платформа? Просто на чистой зп ни в скриптах (_g.script), ни в движке нет такой функции

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


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

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