Forum Stalker.pl • Zobacz temat - [LUA] Chowanie detektora

[LUA] Chowanie detektora

Regulamin forum
Dział "Tworzenie Modyfikacji" służy do zadawania pytań odnośnie tworzenia modyfikacji, edytowania plików gry, oraz pisania tzw. tutoriali, czyli poradników odnośnie modyfikowania gry.
Nie zadajemy tutaj pytań odnośnie modyfikacji gotowych (nie dyskutujemy o nich!), prócz prób ich połączenia etc.


Przy cytowaniu plików *.LTX stosować tag [SYNTAX="ini"], przy cytowaniu plików *.script [SYNTAX="lua"] a przy cytowaniu plików *.xml - [SYNTAX="xml"].

[LUA] Chowanie detektora

Postprzez Plaargath w 04 Maj 2014, 00:50

Mam pytanie, bo utknąłem, żadne searche po plikach mnie nie naprowadziły na rozwiązanie.
Otóż, jak powinna brzmieć linijka, która mi ze skryptu schowa detektor?
Jak wpisuję:
Kod: [ Pobierz ] [ Ukryj ]
db.actor:activate_slot(0)
 

to chowa tylko to, co ma w prawej łapie.

EDIT:
Aha i taka, która spowoduje jego upuszczenie?
Ostatnio edytowany przez Plaargath, 04 Maj 2014, 20:44, edytowano w sumie 1 raz
Image Image

Merkantylizm, srerkantylizm.
Awatar użytkownika
Plaargath
Weteran

Posty: 653
Dołączenie: 23 Mar 2010, 15:12
Ostatnio był: 03 Kwi 2022, 22:03
Kozaki: 234

Reklamy Google

Re: [LUA] opuszczanie rąk

Postprzez Pangia w 04 Maj 2014, 12:18

Nawet jak rozmawiasz ze stalkerami, to możesz mieć wyjęty detektor i on się nie chowa. Poza tym jak sobie przełączysz na trzecioosobowy widok, to GG nie ma detektora w rękach, a jak z powrotem przełączysz do pierwszej osoby, to detektor znika z widoku (ale wciąż jest; jak użyjesz przycisku na klawie, to usłyszysz, jak się chowa).
Więc pewnie nie jest to możliwe albo nikt nie przewidział takiej potrzeby.
Proszę państwa, sto pięćdziesiąt kilometrów na godzinę w ciągu kilku sekund, wspaniały wynik. Gdyby w ten sposób można było wypie*dolić z polskiej polityki tych wszystkich śmieci z Okrągłego Stołu, Leszka Millera, byłoby… cudownie i każdemu bym ku*wa kupił po takim Ferrari, byleby w piz*u pojechali tym PROSTO do swojego ukochanego… Izraela. SYJONIŚCI Europy, jedźcie do siebie! Pozdrawiam, Zbigniew Stonoga. Nie jestem antysemitą!
Awatar użytkownika
Pangia
Monolit

Posty: 4280
Dołączenie: 27 Maj 2012, 10:49
Ostatnio był: 28 Lis 2017, 19:49
Miejscowość: Kukle Karakańskie
Ulubiona broń: TOZ34
Kozaki: 854

Re: [LUA] opuszczanie rąk

Postprzez smoq2 w 04 Maj 2014, 12:33

Możesz spróbować następującego:

Wyciągnąć funkcją local detector = db.actor:item_in_slot(x) obiekt detektoru, który trzyma gracz. Nie pamiętam czy tak dokładnie brzmi ta funkcja ani jaki nr ma slot detektora.

Usunąć detektor za pomocą funkcji release.

Ponownie stworzyć identyczny detektor w inwentarzu gracza za pomocą funkcji create.

Aktor powinien schować detektor jeżeli ma go w rękach.
ImageImage
Awatar użytkownika
smoq2
Legenda

Posty: 1502
Dołączenie: 27 Cze 2010, 02:05
Ostatnio był: 09 Paź 2019, 06:35
Miejscowość: Wrocław/Zielona Góra
Frakcja: Czyste Niebo
Ulubiona broń: Chaser 13
Kozaki: 497

Re: [LUA] opuszczanie rąk

Postprzez Plaargath w 04 Maj 2014, 18:43

@Pangia
No, nie do końca. Podchodzę do Brodacza np. z detektorem i śrubą - gadam, handluję - wszystko chowane jest. Kończę gadać - śruba wraca, detektor nie. Interesuje mnie wyłącznie widok FP.
Pangia napisał(a):Więc pewnie nie jest to możliwe

Naaah, nie ma takiej opcji. ;)

EDIT
@smoq2
Nie zauważyłem Twojego posta... Podobnie zacząłem kombinować.

EDIT2
Faktycznie, db.actor:drop_item(db.actor:item_in_slot(9)) załatwia sprawę dziurawych rączek.
Co ciekawe - po dropnięciu detektora i podniesieniu jakiegoś ponownie, pierwsze naciśnięcie klawisza powoduje dźwięk chowania detektora. Pół biedy, że drugie już go wyjmuje. :/

Natomiast taki myk:
Kod: [ Pobierz ] [ Ukryj ]
local dtctr = db.actor:item_in_slot(9)
alife():release(dtctr,true)
alife():create(dtctr, db.actor:position(), db.actor:level_vertex_id(), db.actor:game_vertex_id(), db.actor:id())

załatwia sprawę samego schowania detektora, ale wchrzania się niestety ze skutkami ubocznymi w postprocesach. Nie wiem, co ma piernik do wiatraka...
Image Image

Merkantylizm, srerkantylizm.
Awatar użytkownika
Plaargath
Weteran

Posty: 653
Dołączenie: 23 Mar 2010, 15:12
Ostatnio był: 03 Kwi 2022, 22:03
Kozaki: 234

Re: [LUA] opuszczanie rąk

Postprzez smoq2 w 05 Maj 2014, 10:49

Plaargath napisał(a):załatwia sprawę samego schowania detektora, ale wchrzania się niestety ze skutkami ubocznymi w postprocesach. Nie wiem, co ma piernik do wiatraka...


:| Co takiego się dzieje? Możesz opisać sytuację, albo screena podrzucić?
ImageImage
Awatar użytkownika
smoq2
Legenda

Posty: 1502
Dołączenie: 27 Cze 2010, 02:05
Ostatnio był: 09 Paź 2019, 06:35
Miejscowość: Wrocław/Zielona Góra
Frakcja: Czyste Niebo
Ulubiona broń: Chaser 13
Kozaki: 497

Re: [LUA] Chowanie detektora

Postprzez Plaargath w 05 Maj 2014, 16:03

Wiesz co, mam tu taką sytuację, że mam kilka różnych funkcji, które wywołują akcje takie jak te z rękami, obrażenia, manipulują stanem posiadania, dodają ppe effectory i cam effectory - takie sprawy. Wybrana spośród nich poprzez warunki w ifie funkcja leci jednorazowo, kończy się i dopóki nie ma odpowiedniego callbacka to się nie powtarza. Generalnie wszystko hula bez problemów większych. Szpas jest natomiast taki, że jak umieszczę w którejś powyższe linijki, to przy kolejnym wywołaniu (tej samej) funkcji albo nie ma effectorów wcale, albo funkcja działa jakoś nielogicznie.
Co istotne - pierwszy raz robię effectory i nie bardzo się orientuję jeszcze, co dokładnie widzę i piszę. Trudno zakładać, że to wyjdzie, dopóki nie zrozumiem tych cholerstw, a i szkoda rozkminy przy takim stopniu improwizacji. Także na ten moment potrzebuję ogarnąć dokładnie jak działają takie rzeczy:
level.add_pp_effector(string,liczba,bool)
level.add_cam_effector(string,liczba,bool)
Na razie kumam, że string to ścieżka\nazwa pliku, a boole, jak podglądam różne mody, są chyba zawsze true dla pp i false dla cam. Co do liczby - mam ujemne pojęcie, czym dokładnie jest, na razie skopiowana stąd i z owąd daje jakiś efekt, zmieniana na pałę najczęściej zapętla effectora, albo go eliminuje. Także jak widzisz, jeszcze kawałek drogi do kontroli nad tymi effectorami, a podejrzewam, że po drodze oświeci mnie, co też się dzieje teraz.
Dziś mam chwilę, więc zajrzę tu na początek. Może wiesz przypadkiem, gdzie znajdę jakieś inne przydatne tutki (nawet wyjaśnienie podstaw, co w ogóle jest w tych plikach i jak się je robi)?

EDIT
Chrzanić postprocesy. Oto, co jest kłopotem:
a) To:
Kod: [ Pobierz ] [ Ukryj ]
 local dtctr = db.actor:item_in_slot(9)
if dtctr then alife():release(dtctr,true) end

w ogóle nic nie powoduje. Zero reakcji.

b) Kiedy wywalę detektor w ten sposób:
Kod: [ Pobierz ] [ Ukryj ]
 local dtctr = db.actor:item_in_slot(9)
if (dtctr) then db.actor:drop_item(dtctr) end

pojawia się problem. Gra pozostaje, że tak powiem, w trybie wykrywania artów, który jak obserwuję, jest uzależniony od posiadania detektora w ogóle - kiedy podniosę detektor z powrotem i ląduje on w plecaku, leżące dookoła arty zaczynają znowu być widoczne. Kiedy przeniosę detektor do slota, arty dalej są widoczne, ale detektor w dłoni nie. Kiedy nacisnę klawisz detektora, jest dźwięk jego chowania, arty znikają. Kiedy znowu nacisnę klawisz, pojawia się i detektor w ręce i arty.
Wniosek: bez uchwycenia, jak SCHOWAĆ = (powiedzieć grze, że ma nie wykrywać) detektor ze skryptu, nawet jego wyrzucanie jest bez sensu.
Ponawiam zatem pierwotną prośbę o pomoc:
jak powinna brzmieć linijka, która mi ze skryptu schowa detektor lub wyłączy jego działanie?
Image Image

Merkantylizm, srerkantylizm.
Awatar użytkownika
Plaargath
Weteran

Posty: 653
Dołączenie: 23 Mar 2010, 15:12
Ostatnio był: 03 Kwi 2022, 22:03
Kozaki: 234

Re: [LUA] Chowanie detektora

Postprzez smoq2 w 06 Maj 2014, 15:30

Chyba rozumiem. Dla potwierdzenia - jeżeli usuniesz detektor za pomocą release to faktycznie znika on z rąk, natomiast wszystkie jego efekty, w tym wykrywanie artefaktów zostaje.
Zupełnie tak jakby silnik nie zarejestrował jego zniknięcia, zgadza się?

Możesz spróbować jeszcze jednej metody:

xr_effects.disable_ui(nil, nil)
xr_effects.enable_ui(nil, nil)

Tylko sprawdź czy w CoP'owym xr_effects taka funkcja występuje (ja biorę ją z CS).

Teoretycznie powinna ona "zresetować" cały UI/HUD łącznie z łapami, nawet jeżeli wrzucimy obie funkcje zaraz po sobie w jednej innej. Jeżeli nie zadziała, to spróbuj jeszcze jakoś tak zrobić, żeby xr_effects.enable_ui(nil, nil) byłą odpalana w kolejnym cyklu odświeżania skryptów.
ImageImage

Za ten post smoq2 otrzymał następujące punkty reputacji:
Positive Plaargath.
Awatar użytkownika
smoq2
Legenda

Posty: 1502
Dołączenie: 27 Cze 2010, 02:05
Ostatnio był: 09 Paź 2019, 06:35
Miejscowość: Wrocław/Zielona Góra
Frakcja: Czyste Niebo
Ulubiona broń: Chaser 13
Kozaki: 497

Re: [LUA] Chowanie detektora

Postprzez Plaargath w 07 Maj 2014, 22:20

smoq2 napisał(a):Chyba rozumiem. Dla potwierdzenia - jeżeli usuniesz detektor za pomocą release to faktycznie znika on z rąk, natomiast wszystkie jego efekty, w tym wykrywanie artefaktów zostaje.
Zupełnie tak jakby silnik nie zarejestrował jego zniknięcia, zgadza się?

Nie do końca. Release nie powoduje niczego (sam nie wierzę). Powyższy efekt powoduje db.actor:drop_item.
smoq2 napisał(a):Możesz spróbować jeszcze jednej metody:
xr_effects.disable_ui(nil, nil)
xr_effects.enable_ui(nil, nil)

Ciekawostki wychodzą... Jak daję tylko disable to - oczywiście - jest pełen disable, nawet odcina możliwość ruchu czy wyjścia do menu. Ale:
- jak dam obie pod rząd, to efekt taki sam jak przy użyciu samego level.show_weapon(false) a potem (true) - co nie dziwi, bo to tam też jest w tej funkcji z xr_effects. W sensie efektu to wygląda tak, że ręka z bronią się chowa i wyjmuje, reszta ani drgnie,
- jak dam obie rozdzielone jakimś nie za długim labiryntem, to to samo - ręka z detektorem ani drgnie,
- jak przedzielam takim szpasem:
Kod: [ Pobierz ] [ Ukryj ]
local deadline = 0
deadline = time_global() + 30000
while deadline > time_global() do end

to mi ta pętla grę wiesza. Podobnie repeat until.
- jak próbuję go zamieszać tak:
Kod: [ Pobierz ] [ Ukryj ]
function moja_funkcja()
        --cośtamcośtam
        xr_effects.disable_ui(nil, nil)
        deadline = time_global() + 30000
        function wait_start()
                if deadline > time_global() then
                        wait_bypass()
                end
        end
        xr_effects.enable_ui(nil, nil)
end
--a poniżej
function wait_bypass()
        moja_funkcja.wait_start()
end
 

to efekt ten sam - dłoń z bronią się chowa i zaraz wyjmuje, detektor ani drgnie. Ehh... mózgu już nie czuję dzisiaj. Chyba będę musiał na świeżo do tego podejść, a nie po całym dniu roboty.
Image Image

Merkantylizm, srerkantylizm.
Awatar użytkownika
Plaargath
Weteran

Posty: 653
Dołączenie: 23 Mar 2010, 15:12
Ostatnio był: 03 Kwi 2022, 22:03
Kozaki: 234


Powróć do Zew Prypeci

Kto jest na forum

Użytkownicy przeglądający to forum: svt07 oraz 2 gości