Jump to content

Selekcja artefaktów [CoP]


Wojownik
 Share

Recommended Posts

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/

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use.

Comunity