ARTLantist 14 Опубликовано 22 Января 2021 Как вывести сообщение в верхней центральной точке, где высвечиваетсч активное задание при нажатии таб? Мне нужен именно скрипт, отвечающий жа это, хочу заменить таким типом сообщения то, которое просто приходит на пда. Нужно сделать сообщение для дозиметра. Не хочется засорять историю сообщений пда постоянными измерениями уровня радиации. Как проверить наличие артефакта (любого) в инвентаре гг? И как сделать функцию, которая будет каждую секунду прибавлять немного радиации? Поделиться этим сообщением Ссылка на сообщение
ARTLantist 14 Опубликовано 1 Февраля 2021 Не знаю, в ту ли тему я обращаюсь, поэтому заранее извините. Как сделать черный экран вначале игры и постепенно убрать его (типо гг открывает глаза). Всю катсцену сделал, всё работает идеально, но на счёт затемнения нигде не могу найти инфу Поделиться этим сообщением Ссылка на сообщение
ARTLantist 14 Опубликовано 2 Февраля 2021 Как проверить характеристику бронежилетая надетого на гг в скрипте? Например, мне нужно проверить радиозащиту, и если она меньше то прибавлять гг радиацию. И сходу следующий вопрос: как сделать бесконечный таймер, по истечении которого прибавлялась бы эта радиация? (Из этого всего знаю только как прибавить радиацию) 1 Поделиться этим сообщением Ссылка на сообщение
ARTLantist 14 Опубликовано 2 Февраля 2021 (изменено) 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? Уже долго голову ломаю, что это за переменная такая. Во многих модах её используют, а как она используется, разобраться никак не получается. Изменено 2 Февраля 2021 пользователем ARTLantist Поделиться этим сообщением Ссылка на сообщение
ARTLantist 14 Опубликовано 2 Февраля 2021 @Zander_driver, большое пребольшое спасибо, теперь понятно всё! а как реализовать объединение и разъединение двух предметов в один, например, как сделано в Мизери с контейнерами артов? Мы наводим арт на контейнер и он туда кладётся. Потом нажимаем по контейнеру с артом ПКМ и у нас высвечивается окно "извлечь", нажимаем, и арт извлекается. Мне интересен именно такой способ, по большей части - как высветит это окно "извлечь". Поделиться этим сообщением Ссылка на сообщение
ARTLantist 14 Опубликовано 8 Февраля 2021 Можно ли как-то изменить параметры параметры артефакта через скрипт? Если да, то как? И как отследить, что артефакт надет на пояс? Поделиться этим сообщением Ссылка на сообщение
ARTLantist 14 Опубликовано 14 Февраля 2021 А можно как-то на оригинальном движке изменить вес предмета через скрипт? И ещё вопрос: как можно реализовать объединение двух предметов при перетаскивании одного на другой, как прицел на автомат? Поделиться этим сообщением Ссылка на сообщение
ARTLantist 14 Опубликовано 22 Февраля 2021 в 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]Внимание:". Как всё таки изменить цвет это строки? Поделиться этим сообщением Ссылка на сообщение
ARTLantist 14 Опубликовано 11 Марта 2021 как в ЗП отследить, что броня или шлем были перемещены в слот, или наоборот убраны из слота? Поделиться этим сообщением Ссылка на сообщение
ARTLantist 14 Опубликовано 11 Марта 2021 @Zander_driver не, нет таких колбеков, буду пытаться вставить 1 Поделиться этим сообщением Ссылка на сообщение
ARTLantist 14 Опубликовано 20 Марта 2021 как перевести серверный объект в клиентский в зп? либо как, если это возможно, создать в инвентаре сразу клиентский объект, а не серверный? Поделиться этим сообщением Ссылка на сообщение
ARTLantist 14 Опубликовано 20 Марта 2021 (изменено) 5 минут назад, Zander_driver сказал(а): Если ты спавнишь что-либо в инвентарь, и тебе нужен клиентский объект того что ты заспавнил, то нужно просто несколько фреймов подождать, после спавна. И клиентский объект появится в инвентаре. Ну вот я спавню актору в инвентарь предмет, и мне нужно тут же именно ему изменить condition. С серверными не работает обычный set_condition(value), тут нужен клиентский. Как мне его отловить? Изменено 20 Марта 2021 пользователем ARTLantist Поделиться этим сообщением Ссылка на сообщение
ARTLantist 14 Опубликовано 24 Марта 2021 как можно отследить, что гг использовал предмет рядом с костром (campfire)? Поделиться этим сообщением Ссылка на сообщение
ARTLantist 14 Опубликовано 24 Марта 2021 @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... такой вариант кода пойдёт? Просто меня смущает огромный цикл с перебором всех симуляционных объектов... Мб его можно было бы чем-то заменить? Поделиться этим сообщением Ссылка на сообщение
ARTLantist 14 Опубликовано 24 Марта 2021 Только что, AndreySol сказал(а): что есть такое "o:get_campfire()"? это я косякнул, там obj:get_campfire() Да, мне нужно наличие любого костра Поделиться этим сообщением Ссылка на сообщение
ARTLantist 14 Опубликовано 24 Марта 2021 @AndreySol из него родимого) 1 Поделиться этим сообщением Ссылка на сообщение
ARTLantist 14 Опубликовано 14 Апреля 2021 Довольно простые вопросы, никогда просто этим не интересовался, но вдруг понадобилось. Натыкался давно в инете на ответы, но сейчас, по закону подлости, когда надо, не могу найти. 1. Как скриптово активировать диалог с нужным нпс? 2. Как активировать торговлю с этим нпс? (Например, после активации определённой фразы) Поделиться этим сообщением Ссылка на сообщение
ARTLantist 14 Опубликовано 15 Апреля 2021 @WinCap да, мне именно скриптовые методы нужны) Про meet и trade_enable в логике я знаю Поделиться этим сообщением Ссылка на сообщение
ARTLantist 14 Опубликовано 27 Апреля 2021 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 сказал(а): Как сделать тоже самое только для проверки предмета который находится на поясе? Добавлять в движке итератор для пояса и с его помощью проверять наличие предмета нужной секции. Иначе никак. Поделиться этим сообщением Ссылка на сообщение
ARTLantist 14 Опубликовано 27 Апреля 2021 @I am Dead а какая платформа? Просто на чистой зп ни в скриптах (_g.script), ни в движке нет такой функции Поделиться этим сообщением Ссылка на сообщение