Gość Diegtiariow Opublikowano 7 Kwietnia 2023 Zgłoś Udostępnij Opublikowano 7 Kwietnia 2023 NAZWA: Selekcja artefaktów [CoP] TWÓRCA: AziatkaVictor OPIS: Spoiler Ogromne podziękowania dla: @Ferveks Skrypt został stworzony na podstawie notatnika z Gra Dusz: Excelsior. Dawno temu, nie mając nic do roboty, twórca postanowił zrobić mały skrypt do selekcji artefaktów na podstawie GUI. Nie było łatwo i nie można powiedzieć, że wszystko zostało zrobione, ale teraz działa. Ponieważ twórca nie będzie z niego korzystać, a nie chce go wyrzucać do kosza, to postanowił więc udostępnić. Jeśli masz pytania dotyczące działania lub czegoś innego - napisz w temacie na ap-pro lub zadaj pytanie na GitHub. Zrealizowano takie funkcje: Wydawanie receptów selekcji Szansa sukcesu selekcji Informacja o strefach selekcji. Sprawdzanie obecności w określonej strefie selekcji dla każdego artefaktu Wyświetlenie informacji o artefakcie Wyświetlenie informacji o obowiązkowych komponentach, ich braku lub posiadania Jak dodać: Spoiler Proces dodawania jest dość prosty. Najpierw musimy utworzyć obiekt, za pomocą którego możemy otworzyć okno wyboru. Rób, jak chcesz. Oto przykładowa sekcja w 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 Następnie musisz dodać wywołanie przy użyciu. W tym celu otwieramy plik scripts\bind_stalker.script, szukamy w nim funkcji actor_binder:use_inventory_item(obj). Po znalezieniu zobaczymy coś takiego: 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 Istnieje już zarejestrowane przyjmowanie antybiotyków. Do poprawnego działania należy dodać ui_art_selection.RunDialog() i alife():create(), gdyż zrobiliśmy nasz przedmiot jako booster i po użyciu znika. Analogicznie musisz dodać te linie: 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 W rezultacie otrzymujemy to: 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 Dodanie recept i struktura: Spoiler Wszystko jest konfigurowane w scripts\ui_art_selection.script. Wszystkie niezbędne informacje są tam przechowywane. Rejestracja recepty Najważniejsze, dodanie swojej własnej recepty. Wszystko jest proste. Dodajemy nowy blok i możemy określić zmienne takie jak: result - efekt selekcji items - obowiązkowe składniki image - ikonka (opcjonalnie) places - miejsca selekcji z tablicy places_table (opcjonalnie) chance - szansa selekcji (opcjonalnie) needRecipe - obowiązek posiadania informacji (opcjonalnie) recipe - nazwa informacji, jeśli needRecipe = true. Jeśli nie wskazywać, to nazwa infy powinna być result + _info. Np.: af_medusa_info (opcjonalnie) Na przykład tabela recept może wyglądać tak: 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 }, } Rejestracja obszaru selekcji Lista stref wraz z ich StoryID. Potrzebne do wskazania rodzaju strefy w recepcie selekcji, w celu sprawdzenia obecności w niej GG. local places_table = { toxic = {"StoryID_Toxic_Zone1", "StoryID_Toxic_Zone2"}, gravi = {"StoryID_Gravi_Zone"}, heat = {"StoryID_Heat_Zone"}, } SCREENY: Spoiler LINKI: Spoiler Kody źródłowe: https://github.com/AziatkaVictor/Arts-Selection Przykład dla ZP: https://github.com/AziatkaVictor/Arts-Selection/releases/tag/example ŹRÓDŁO: https://ap-pro.ru/forums/topic/4267-cop-selekciya-artefaktov/ Cytuj Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Rekomendowane odpowiedzi
Dołącz do dyskusji
Możesz dodać zawartość już teraz a zarejestrować się później. Jeśli posiadasz już konto, zaloguj się aby dodać zawartość za jego pomocą.
Uwaga: Twój wpis zanim będzie widoczny, będzie wymagał zatwierdzenia moderatora.