Strona główna
Witaj, nieznajomy!

Obiekty

Ten tutorial będzie wyglądał nieco inaczej niż poprzednie. Nie będzie tu całej przykładowej misji, lecz same konkretne kody operujące na obiektach.

Podstawową funkcją dotyczącą obiektów, bez której nie da rady pójść dalej jest oczywiście jego stworzenie.

Kod:
0107: $obiekt = create_object #pizzabox at 2499.2405 -1682.202 13.3649


Powyższy kod tworzy obiekt o nazwie "$obiekt", modelu "craigpackage" w miejscu o podanych współrzędnych. Tak jak w przypadku samochodów i aktorów, model obiektu trzeba załadować na początku misji.
Gdy nasz obiekt już stoi, możemy go np. obrócić lub nadać mu specjalne cechy: możliwość podnoszenia go, przesuwania.

Kod:
0177: set_object $obiekt Z_angle_to 180.0


Powyższą funkcją ustawiamy ilość stopni obrotu obiektu, w tym przypadku 180.

Kod:
0392: make_object $obiekt moveable 1


Tym kodem, umożliwiamy przesuwanie obiektu. Oczywiście wszystko zależy od ciężkości, budynku nie przesuniemy. Jak wbiegniemy przykładowo na pudełko od pizzy, zacznie się ono toczyć. Jeśli chcemy wyłączyć tą możliwość to zamiast 1 na końcu należy wpisać 0.

Kod:
08E9: set_object $obiekt liftable 1


Ta funkcja umożliwia graczowi podnoszenie obiektu. Aby go podnieść, podczas gry trzeba wcisnąć domyślnie klawisz F lub ENTER. Tak jak w poprzednim kodzie, jeśli chcemy wyłączyć możliwość podnoszenia obiektu, zamiast jedynki trzeba wpisać zero.

/public/images/articles/medium/2009-01-21-14-12-27


Kod:
070A: unknown_action_sequence $PLAYER_ACTOR $obiekt2 0.0 0.0 0.0 6 16 "NULL" "NULL" 0


Ten kod powoduje przyczepienie dowolnego obiektu (w tym przypadku $obiekt2) do ciała gracza ($PLAYER_ACTOR), oczywiście można to zastosować też na innych aktorach. Nie wszystkie obiekty są dostosowane do takiej operacji, więc nie koniecznie otrzymamy podąrzany efekt. Na przykład przy próbie przyczepienia pudełka od pizzy, będzie się ono wtapiało w ciało gracza, błąd graficzny. Poprawnie działające obiekty to na przykład butelka od piwa, papieros.

/public/images/articles/medium/2009-01-21-14-13-25


To by było na tyle jeśli chodzi o manipulację obiektami. Teraz pora na zdarzenia związane z obiektami. Poniższe funkcje należy zastosować w konstrukcji "if". Nie będę umieszczał wszystkich opcodów, tylko te najciekawsze i najbardziej przydatne.

Kod:
023B: actor $PLAYER_ACTOR colliding_with_object $obiekt


Ta funkcja sprawdza czy aktor stoi przy obiekcie na styk, czyli z nim koliduje.

Kod:
0366: object $obiekt damaged


Powyższa funkcja sprawdza czy obiekt jest uszkodzony. Funkcja działa tylko i wyłącznie z obiektami, które da się choć trochę zniszczyć. Nie możemy wykonać tej operacji np. z domem.

Kod:
03CA: object $obiekt exists


Ta funkcja sprawdza czy obiekt istnieje.

Kod:
0471: actor $PLAYER_ACTOR near_object_in_rectangle $obiekt radius 50.0 50.0 flag 0


Powyższy kod sprawdza czy aktor jest blisko obiektu w kwadracie o wymiarach 50 x 50.

Kod:
04E5: object $obiekt near_point 2830.1145 -2446.7329 19.922 radius 20.0 20.0 20.0 flag 0


Ta funkcja sprawdza czy obiekt jest blisko punktu o podanych współrzędnych w odległości 20.0 20.0 20.0.

Kod:
04E7: object $obiekt in_water


Ta funkcja jak nie trudno się domyślić służy do sprawdzenia czy obiekt jest w wodzie.

Kod:
0737: actor $PLAYER_ACTOR lifting_object $obiekt


Ta funkcja sprawdza czy aktor w tej chwili niesie obiekt.

Kod:
0833: object $obiekt photographed


Powyższa funkcja służy do sprawdzenia czy dany obiekt został sfotografowany.

Resztę tego typu funkcji znajdziesz w liście opcodów. Teraz zajmijmy się zachowaniami aktorów, które są związane z obiektami.

Kod:
0655: AS_actor $PLAYER_ACTOR look_at_object $obiekt 10000 ms


Ta funkcja powoduje że aktor zaczyna patrzeć na obiekt przez 10 sekund.

Kod:
06E2: AS_actor $PLAYER_ACTOR run_to_object $obiekt timelimit -1 stop_within_radius 1.0


Ta funkcja rozkazuje aktorowi, żeby biegł do obiektu. Można ustawić limit czasowy, w jakim ma się tam znaleźć, w powyższym przykładzie limit jest wyłączony (-1). W dalszej części kodu określa się w jakiej odległości aktor ma się zatrzymać

Kod:
07C9: AS_actor $PLAYER_ACTOR walk_to_object $obiekt then_lift_and_hold_in_hands


Po zastosowaniu tej funkcji, aktor spokojnie podchodzi do obiektu, a gdy już dojdzie to podnosi go i trzyma w rękach.

To wszystko z zachowań aktorów. Przed nami został jeszcze jeden etap, niszczenie obiektów.

Można to zrobić na dwa sposoby. Po prostu go natychmiastowo usunąć lub zrobić ładny zanik obiektu (stopniowe znikanie).

Kod:
0108: destroy_object $obiekt


Ta funkcja niszczy obiekt natychmiastowo.

Kod:
09A2: destroy_object_with_fade $obiekt


Ta natomiast, niszczy go z ładnym zanikaniem.
Dodane przez: MakG
Posting comments to this article is disabled.
Created & Powered by MakG
Wszelkie prawa zastrzeżone