Skocz do zawartości

Selekcja artefaktów [CoP]


Gość Diegtiariow

Rekomendowane odpowiedzi

Gość Diegtiariow

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

ss-04-06-23-20-32-46-zaton.jpgss-04-06-23-20-32-47-zaton.jpgss-04-06-23-20-32-49-zaton.jpgss-04-06-23-20-32-59-zaton.jpgss-04-06-23-20-32-45-zaton.jpgss-04-06-23-20-33-10-zaton.jpg

 

LINKI:

 

ŹRÓDŁO:

https://ap-pro.ru/forums/topic/4267-cop-selekciya-artefaktov/

Odnośnik do komentarza
Udostępnij na innych stronach

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.

Gość
Dodaj odpowiedź do tematu...

×   Wklejono zawartość z formatowaniem.   Usuń formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Odnośnik został automatycznie osadzony.   Przywróć wyświetlanie jako odnośnik

×   Przywrócono poprzednią zawartość.   Wyczyść edytor

×   Nie możesz bezpośrednio wkleić grafiki. Dodaj lub załącz grafiki z adresu URL.

×
×
  • Dodaj nową pozycję...

Powiadomienie o plikach cookie

Korzystając z tej strony, zgadzasz się na nasze Warunki użytkowania.