NAZWA: Spawnujemy drzwi z pomocą A-Life [SoC]
AUTOR: Matrix
Temat spawnu drzwi, a dokładnie mówiąc, ich logika jest dość interesująca. Można zrobić tak, aby nasze drzwi się otwierały, jeśli gracz otrzyma jakiś infoportion lub będzie miał jakiś przedmiot.
OPIS DZIAŁAŃ:
Spoiler
Dla spawnu samych drzwi, potrzebujemy rozpakowany plik all.spawn, można go rozpakować z pomocą ACDC.
Otwieramy alife_*nazwa lokacji* (bierzemy tą lokację, na której chcemy zespawnować nasze drzwi).
Wpisujemy na koniec lub na początek te linijki:
[99999] ; cse\_abstract properties section\_name = physic\_object name = home\_door position = -170.69994506836, -20.019019012451, -139.07005517550 direction = 0,0,0 ; cse\_alife\_object properties game\_vertex\_id = 55 distance = 0 level\_vertex\_id = 79321 object\_flags = 0xfffffffa custom\_data = \<\<END [logic] cfg = scripts\esc\_home\_door.ltx [collide] ignore\_static END ; cse\_visual properties visual\_name = physics\door\door\_pripyat\_01 ; cse\_ph\_skeleton properties skeleton\_name = ; cse\_alife\_object\_physic properties physic\_type = 0x3 mass = 10 fixed\_bones = link
Teraz przyjrzyjmy się bliżej.
- [99999] - numer naszego obiektu, taki, aby się nie powtarzał.
- name = home_door - nazwa naszego obiektu.
- position - pozycja obiektu.
- direction - kierunek, w który będzie rozmieszczony obiekt.
- cfg - logika drzwi.
- visual - model wizualny naszego obiektu, w naszym przypadku są to drzwi pokoju z dekoderem w Prypeci.
Współrzędne możemy wskazać inne, aby dowiedzieć się współrzędnych miejsca, gdzie chcemy postawić drzwi, wpisujemy ten skrypt do pliku ui_main_menu.script znajdującego się w gamedata\scripts.
function main\_menu:OnButton\_credits\_clicked() local text local vid local gvid local a = vector() local text a = db.actor:position() vid = db.actor:level\_vertex\_id() gvid = db.actor:game\_vertex\_id() text = "Pozycja:\\nX= "..a.x.."\\nY= "..a.y.."\\nZ= "..a.z.."\\nlevel\_vertex= "..vid.."\\ngame\_vertex\_id= "..gvid news\_manager.send\_tip(db.actor, text, nil, nil, 30000) end
Teraz, jeśli już weszliśmy do miejsca, którego współrzędne chcemy poznać, wracamy się do menu i klikamy na Creditsy/Twórców gry.
Kiedy wrócimy do gry, otrzymamy wiadomość ze współrzędnymi. Robimy zdjęcie za pomocą F12.
Zrzut ekranu będzie w miejscu, w którym masz folder zapisami gry.
Wprowadzamy współrzędne X , Y , Z , a także level_vertex_id i game_vertex_id.
Następnie możemy zebrać nasz spawn, ale nie spieszymy się jeszcze z wejściem do gry.
Zrobimy prostą logikę. Tworzymy plik esc_home_door.ltx w gamedata\config\scripts.
Jeśli chcemy, żeby drzwi otwierały się kluczem, wpisujemy do niego następujące linie:
[logic] active = ph\_door@locked1 [ph\_door@locked1] locked = true closed = true snd\_open\_start = trader\_door\_open\_start snd\_close\_start = trader\_door\_close\_start snd\_close\_stop = trader\_door\_close\_stop show\_tips = true on\_use = {=actor\_has\_item(house\_key)} ph\_door@open [ph\_door@open] locked = true closed = false snd\_open\_start = trader\_door\_open\_start snd\_close\_start = trader\_door\_close\_start snd\_close\_stop = trader\_door\_close\_stop show\_tips = false
I te linijki jeśli chcemy, żeby drzwi się otworzyły po otrzymaniu infoportion:
[logic] active = ph\_door@locked1 [ph\_door@locked1] locked = true closed = true snd\_open\_start = trader\_door\_open\_start snd\_close\_start = trader\_door\_close\_start snd\_close\_stop = trader\_door\_close\_stop show\_tips = true on\_info = {+esc\_kill\_bandits\_quest\_done} ph\_door@open [ph\_door@open] locked = true closed = false snd\_open\_start = trader\_door\_open\_start snd\_close\_start = trader\_door\_close\_start snd\_close\_stop = trader\_door\_close\_stop show\_tips = false
Jeśli chcemy otworzyć drzwi po otrzymaniu infoportion, nie musimy robić nic więcej, wystarczy przenieść skompilowany plik all.spawn do ścieżki gamedata\spawns\
Teraz, po wykonaniu zadania oczyszczenia ATP, nasze drzwi się otworzą.
W przypadku z przedmiotem, musisz dodać jego samego i wydanie/oddanie go.
Otwieramy plik items.ltx w gamedata\config\misc\
Na końcu piszemy:
[house\_key]:identity\_immunities GroupControlSection = spawn\_group discovery\_dependency = $spawn = "devices\quest\_items\house\_key" ;$prefetch = 32 class = II\_ATTCH cform = skeleton visual = equipments\item\_antirad.ogf radius = 1 quest\_item = true description = "Klucz od drzwi w wiosce nowicjuszy" inv\_name = "Klucz" inv\_name\_short = "Klucz" inv\_grid\_width = 2 inv\_grid\_height = 1 inv\_grid\_x = 18 inv\_grid\_y = 8 inv\_weight = 0 cost = 0
Ustawiamy model - w przykładzie umieszczono jako model antyrad i nóż jako ikonkę przedmiotu.
Dodajmy teraz klucz jako wyposażenie startowego, które Wilk daje na początku gry.
W tym celu otwieramy plik escape_dialog.script w gamedata\scripts\
Szukamy funkcji w pliku:
function give\_weapon\_to\_actor (trader, actor) dialogs.relocate\_item\_section(trader, "wpn\_pm", "in") dialogs.relocate\_item\_section(trader, "ammo\_9x18\_fmj", "in") dialogs.relocate\_item\_section(trader, "ammo\_9x18\_fmj", "in") dialogs.relocate\_item\_section(trader, "wpn\_knife", "in") end
Wstawiamy linię przed słowem end, w przeciwnym razie wystąpi wylot.
Linia, którą chcemy dodać:
dialogs.relocate\_item\_section(trader, "house\_key", "in")
Zapisujemy i sprawdzamy. Teraz, jeśli zrobiłeś wszystko poprawnie, będziesz miał drzwi w wiosce kotów.
Efekt końcowy:
Spoiler
ŹRÓDŁO:
https://ap-pro.ru/forums/topic/3265-spavnim-dver-s-pomoshtyu-a-life-soc/