Obsługa zdarzenia przy zdobyciu Przedmiotu (get item event) 2294 8

O temacie

Autor nergosu

Zaczęty 23.04.2019 roku

Wyświetleń 2294

Odpowiedzi 8

nergosu

nergosu

Użytkownicy
posty6
Propsy1
Profesjabrak
  • Użytkownicy
Dzień dobry, forum czytam od dawna szukając pomocy i często znajduję rozwiązanie, ale na jedno nie mogę znaleźć.
Mianowicie chcę obsłużyć zdarzenie zdobycia przedmiotu, a najlepiej mieć do tego klase/funkcje, która by takie coś przechwytywała i sprawdzała co się dzieję z itemami.
Moduję dopiero od wczoraj więc przepraszam za nieprawidłowe przekazywanie parametrów, C_INFO to chyba postacie (?), no a C_ITEM to item :V.
Przykładowo:
Podnoszę przedmiot X/Klikam przycisk akcji zabierając komuś przedmiot X
 - wywołał się event/callback/funkcja (nie wiem jak tu się z tym obnosić) np
NPC_Got_Item(C_INFO, C_ITEM)
{
    //Tutaj możemy się bawić kodem np. dodać log do misji, że coś zdobyliśmy, albo zmienić porę dnia przykładowo podnosimy przeklętą runę to się robi burza i noc :V;
}
Upuszczam item I/LUB tracę go z ekwipunku
NPC_Lost_Item(C_INFO, C_ITEM)
{
    //Tutaj możemy się bawić kodem np. dodać log do misji, że coś zdobyliśmy, albo zmienić porę dnia przykładowo podnosimy przeklętą runę to się robi burza i noc :V;
}
Co do używania przedmiotów to mamy on_state[0], o ile przedmiot jest "używalny".

Może jest jakieś miejsce gdzie się takie zdarzenia wywołują, ale nie pamiętam aby w grze coś takiego było, szukałem czegoś na wzór ZS_DEAD, ale nie znalazlem a szukam już z pół dnia.
Możemy zejść na niższy poziom programowania o ile to konieczne.

TL;DR
Gdzie można/nie można wywołać zdarzenia gdy zdobywamy item do ekwipnuku/pozbywamy się go.

No bo przecież gdzieś jest to zapisane, że gdy klikniemy [przycisk akcji] w eq [target] to nam przenosi go do eq [this].
 

Drakonter

Drakonter

Użytkownicy
undefined
posty104
Propsy94
ProfesjaNierób
  • Użytkownicy
  • undefined
Bez użycia pakietów skryptowych tego nie zrobisz. A jak chcesz użyć pakietów to już jest taki skrypt. Wstawił go Milky-Way na WoGa

PS: C_INFO to klasa dialogów, do postaci jest C_NPC
 
29.08.2023 - goodbye cruel world

nergosu

nergosu

Użytkownicy
posty6
Propsy1
Profesjabrak
  • Użytkownicy
Bez użycia pakietów skryptowych tego nie zrobisz. A jak chcesz użyć pakietów to już jest taki skrypt. Wstawił go Milky-Way na WoGa

PS: C_INFO to klasa dialogów, do postaci jest C_NPC
Bardzo dziękuje za odsyłacz.
Niemniej jednak mam jeszcze kilka pytań.

Nie wiem czy powinienem tutaj wklejać ten kod ;x

Tam jest funkcja z tego ikara, czy to bedzie skomplikowane wdrożyć taką jedną funkcje? Bede musiał sciagac jakies dodatkowe rzeczy implementowac etc etc? Innymi słowy, jak się za to zabrać (odsyłacze mogą być ;f)

W których miejscach wywoływać te rzeczy?
Tam widziałem dalej, że w startupie dodawał, i w .src
ale coś mu nie trybiło chyba za bardzo.

Jeżeli nikomu się nie chce mnie poprowadzić przez ten jeden skrypcik, to proszę o odsyłacze, które mi w tym pomogą i można zamknąć temat jako rozwiązany :V

@Edit: Zapomniałem dodać, że chodzi o G2:NK
 

Drakonter

Drakonter

Użytkownicy
undefined
posty104
Propsy94
ProfesjaNierób
  • Użytkownicy
  • undefined
 
29.08.2023 - goodbye cruel world

Nestarion

Nestarion

Użytkownicy
posty32
Propsy26
Profesjabrak
  • Użytkownicy
Można to jeszcze zrobić bez Ikarusa, aczkolwiek ten sposób byłby dość toporny i raczej niezalecany do większej liczby przedmiotów. Mianowicie można by użyć tick tocka. Tutoriale są na forum, ale w skrócie jest to triggerscript vob, który wstawiony w świecie gry triggeruje funkcję, a ona z kolei triggeruje voba i tak to się kręci... Tam mógłbyś dodać warunek, że jeśli gracz ma jakiś przedmiot to coś się wywoła.
 

nergosu

nergosu

Użytkownicy
posty6
Propsy1
Profesjabrak
  • Użytkownicy
Dziękuję Drakonter za pomoc.
Tobie również Nestarion, ale podejście wydaje się mało optymalne.
Przestudiuję pisma ikariusa :D, dzięki temu będę miał nowe możliwości.
Imo, rozwiązane.
 

nergosu

nergosu

Użytkownicy
posty6
Propsy1
Profesjabrak
  • Użytkownicy
Dobra, poskładałem wszystko do kupy, napisałem osobny plik z tymi 2 funkcjami z pierwszego linku.
Podpiąłem do gothic.src, oraz w headerze lego(nie wiem czy to konieczne).
Co teraz zrobić aby to podnoszenie itemów faktycznie działało? :O
Czy gdzieś trzeba wywoływać tą funkcję z hooka voba??

I jeszcze pytanie gdzie jest lista adresów do danych rzeczy? Może być w dowolnym systemie liczbowym.

Jeżeli dodam w startup.d konkretniej w INIT_NewWorld() z tą metodą tworzenia nowego stringa i wywołuję tą pierwszą funkcję Hook, to mam Access Violation i Crash. Podczas wchodzenia do gry (świata).
 

Drakonter

Drakonter

Użytkownicy
undefined
posty104
Propsy94
ProfesjaNierób
  • Użytkownicy
  • undefined
Wywołujesz funkcje Hook_oCNpc__DoTakeVob() w Init_Global w pliku Story\Startup.d

Tutaj masz listę adresów, pochodzi z pakietu AST. Wszystko jest w HEXie, więc trzeba przekonwertować przed użyciem.
 
29.08.2023 - goodbye cruel world

nergosu

nergosu

Użytkownicy
posty6
Propsy1
Profesjabrak
  • Użytkownicy
Wow, udało się.
Teraz mogę wykorzystać potencjał pakietów skryptowych.
 


0 użytkowników i 1 Gość przegląda ten wątek.
0 użytkowników
Do góry