AziatkaVictor 3 928 Опубликовано 6 апреля, 2023 Автор: AziatkaVictorИсходники: GitHubПример для ЗП: GitHub Огромная благодарность @Ferveks. Данный скрипт был основан на его блокноте из Игра Душ: Эксельсиор. Давным-давно, от нечего делать, я решил сделать небольшой скрипт, для селекции артефактов, основанный на GUI. Это было не легко и в итоге я не могу утверждать, что сделал все до конца, но теперь оно работает. Так как я использовать это не буду, а как-то выкидывать на помойку не хочется, то просто выложу это сюда. При наличии вопросов о работе или еще о чем-то - пишите сюда в тему или задавайте вопрос на GitHub. Постараюсь ответить. Реализован такой функционал: Выдача рецептов селекции Шанс успеха селекции Информация о зонах селекции. Проверка нахождения в определённой зоне селекции, относительно каждого артефакта Вывод информации об артефакте Вывод информации о необходимых компонентах, их наличии или отсутствии Спойлер Спойлер Процесс добавления достаточно прост. Для начала необходимо создать объект, используя который, мы сможем открывать диалог селекции. Делайте на своё усмотрение, но вот пример секции, который я создал в configs\misc\items.ltx: [art_selection]:booster $spawn = "devices\art_selection" visual = dynamics\devices\dev_aptechka\dev_aptechka_low.ogf inv_name = st_art_selection inv_name_short = st_art_selection description = st_art_selection_descr inv_weight = 0.5 inv_grid_width = 1 inv_grid_height = 1 inv_grid_x = 6 inv_grid_y = 14 cost = 2500 boost_time = 0 boost_health_restore = 0 boost_radiation_restore = 0 boost_bleeding_restore = 0 use_sound = interface\inv_medkit Далее нужно добавить вызов при использовании. Для этого мы открываем файл scripts\bind_stalker.script, ищем в нём функцию actor_binder:use_inventory_item(obj). После того как нашли, мы увидим что-то такое: function actor_binder:use_inventory_item(obj) if(obj) then local s_obj = alife():object(obj:id()) if(s_obj) and (s_obj:section_name()=="drug_anabiotic") then xr_effects.disable_ui_only(db.actor, nil) level.add_cam_effector("camera_effects\\surge_02.anm", 10, false, "bind_stalker.anabiotic_callback") level.add_pp_effector("surge_fade.ppe", 11, false) give_info("anabiotic_in_process") _G.mus_vol = get_console():get_float("snd_volume_music") _G.amb_vol = get_console():get_float("snd_volume_eff") get_console():execute("snd_volume_music 0") get_console():execute("snd_volume_eff 0") end end end Тут уже зарегистрирован приём анабиотика. Для корректной работы нужно добавить ui_art_selection.RunDialog() и alife():create(), так как мы сделали наш предмет как booster и после использования он пропадает. По аналогии необходимо добавить эти строки: if(s_obj) and (s_obj:section_name() == "art_selection") then ui_art_selection.RunDialog() alife():create("art_selection", db.actor:position(), db.actor:level_vertex_id(), db.actor:game_vertex_id(), db.actor:id()) end В итоге получаем это: function actor_binder:use_inventory_item(obj) if(obj) then local s_obj = alife():object(obj:id()) if(s_obj) and (s_obj:section_name()=="drug_anabiotic") then xr_effects.disable_ui_only(db.actor, nil) level.add_cam_effector("camera_effects\\surge_02.anm", 10, false, "bind_stalker.anabiotic_callback") level.add_pp_effector("surge_fade.ppe", 11, false) give_info("anabiotic_in_process") _G.mus_vol = get_console():get_float("snd_volume_music") _G.amb_vol = get_console():get_float("snd_volume_eff") get_console():execute("snd_volume_music 0") get_console():execute("snd_volume_eff 0") end if(s_obj) and (s_obj:section_name() == "art_selection") then ui_art_selection.RunDialog() alife():create("art_selection", db.actor:position(), db.actor:level_vertex_id(), db.actor:game_vertex_id(), db.actor:id()) end end end Спойлер Все настраивается в scripts\ui_art_selection.script. Там хранится вся нужная информация. Регистарция рецепта Самое важное, добавление своего рецепта. Сделано всё просто. Добавляем новый блок, и можем указать такие переменные как: result - результат селекции items - необходимые ингредиенты image - иконка (опционально) places - места селкции из таблицы places_table (опционально) chance - шанс селекции (опционально) needRecipe - необходимость в наличии инфо (опционально) recipe - название инфо, если needRecipe = true. Если не указать, то название инфо должно быть result + _info. Например: af_medusa_info (опционально) Например, таблица рецептов может выглядеть так: local selection_table = { { result = "af_medusa", items = {"wpn_pm_actor"}, image = "ui_art_selection_items_1", chance = 80, }, { result = "af_mincer_meat", items = {"af_fireball", "af_electra_moonlight", "af_dummy_dummy", "af_eye"}, places = places_table.toxic, needRecipe = true }, } Регистрация зоны селекции Перечень зон, со своими StoryID. Нужен для указания типа зоны в рецепте селекции, ради проверки на нахождение ГГ в неё. local places_table = { toxic = {"StoryID_Toxic_Zone1", "StoryID_Toxic_Zone2"}, gravi = {"StoryID_Gravi_Zone"}, heat = {"StoryID_Heat_Zone"}, } 6 2 1 1 1 Как оформить тему Правила форума Вопросы по сайту Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Mawrak 637 Опубликовано 6 апреля, 2023 Селекция это типа варка/крафт? Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
AziatkaVictor 3 928 Опубликовано 6 апреля, 2023 Mawrak именно так Как оформить тему Правила форума Вопросы по сайту Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Supremeee 508 Опубликовано 7 апреля, 2023 Эй-йоу, Мистер Уайт! Я сварил Мет! (плёнка) 1 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Витька Kolkison 96 Опубликовано 8 апреля, 2023 пока квесты и сюжет прохожу sgm2/2 , а селекцию после пробовать буду, имба думаю YouTube Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
AziatkaVictor 3 928 Опубликовано 8 апреля, 2023 Витька Kolkison хотел бы предупредить, это не полноценный мод, а лишь наработки (думаю, это заметно по "дизайну" интерфейса). Увы, но полноценно этим пользоваться, без дополнительного вмешательства, проблематично. Я не настраивал места селекции на локациях ЗП, а так же не настраивал рецепты должным образом. Это лишь небольшая демонстрация для тех, кто думает, стоит ли брать такое себе в проект. Как оформить тему Правила форума Вопросы по сайту Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Витька Kolkison 96 Опубликовано 8 апреля, 2023 (изменено) AziatkaVictor SGM 2.2 + Gunslinger Mod там уже вшита своя какая-то селекция ) я не пробовал ещё 123 или это твоя и есть? Изменено 8 апреля, 2023 пользователем Витька Kolkison YouTube Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
AziatkaVictor 3 928 Опубликовано 8 апреля, 2023 Витька Kolkison нет конечно) 1 Как оформить тему Правила форума Вопросы по сайту Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
SoDizzari 51 Опубликовано 4 июля, 2023 В 08.04.2023 в 20:19, AziatkaVictor сказал: Витька Kolkison нет конечно) Как создать вот эту зону StoryId_Toxic_Zone чтобы зашёл туда и доступна селекция? Защитим мир от заразы - Зоны Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
AziatkaVictor 3 928 Опубликовано 4 июля, 2023 SoDizzari просто создай рестриктор в СДК, настрой, какого размера он должен быть, и укажи у него story_id. Потом идёшь в этот конфиг и указываешь там story_id этого рестриктора. Это фича работает на основе функции xr_conditions.actor_in_zone. Как оформить тему Правила форума Вопросы по сайту Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
SoDizzari 51 Опубликовано 4 июля, 2023 Только что, AziatkaVictor сказал: SoDizzari просто создай рестриктор в СДК, настрой, какого размера он должен быть, и укажи у него story_id. Потом идёшь в этот конфиг и указываешь там story_id этого рестриктора. Это фича работает на основе функции xr_conditions.actor_in_zone. Типо назвать рестриктор: Toxic_Zone и в логике прописать: [story_objext] story id = Toxic_Zone и всё? Защитим мир от заразы - Зоны Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
AziatkaVictor 3 928 Опубликовано 4 июля, 2023 SoDizzari называть можешь как хочешь, главное чтобы в custom data было написано: [story_object] story_id = restr_story_id А так, да. Как оформить тему Правила форума Вопросы по сайту Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
SoDizzari 51 Опубликовано 4 июля, 2023 (изменено) 2 часа назад, AziatkaVictor сказал: SoDizzari называть можешь как хочешь, главное чтобы в custom data было написано: [story_object] story_id = restr_story_id А так, да. Сделал как ты сказал, но Рестриктор должен быть назван также как и стори айди! Спасибо за помощь :) Изменено 4 июля, 2023 пользователем SoDizzari 1 Защитим мир от заразы - Зоны Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты