Strona główna
Witaj, nieznajomy!

Pojazdy

Ten oto tutotial będzie przedstawiał funkckcje pojazdów.
Zacznijmy od misji , nie potrzebnie będę pisał Main ...

Kod:
:Misja2
thread 
'MISJA2'

Player.CanMove($PLAYER_CHAR) = False

Model.Load(#ADMIRAL)
06E9: load_car_component #wheel_sr1
038B: load_requested_models


Tak więc procedure podpisujemy jako 'MISJA2' po czym
nie pozwalamy graczowi dokonać ruchu i ładujemy Admirala + jego nowe koła.

Kod:
:Misja2_Sprawdz_Modele
wait 
10
if
Model.Available(#ADMIRAL)
06EA: car_component #wheel_sr1 available
jf 
@Misja2_Sprawdz_Modele


Teraz sprawdzamy czy modele (Admiral + jego koła) zostały poprawnie załadowane do pamięci.

Kod:
0395: clear_area 1 at 2059.0435 -1693.9142 13.2728 radius 50.0
$Auto = Car.Create(#ADMIRAL, 2059.0435, -1693.9142, 13.2728)
Car.Angle($Auto) = 269.8438
0229: set_car $Auto primary_color_to 0 secondary_color_to 0
06E7: $Auto_Nowe_Kola = add_car_component #wheel_sr1 to_car $Auto
036A: put_actor $PLAYER_ACTOR in_car $Auto


Nastepnie czyścimy środowisko w którym stworzymy gracza, poczym tworzymy admirala pod adresem $Auto.
Ustawiamy jego stopień obrotu, i nadajemy mu czarny kolor.
Następna funkcja ma za zadanie podmienić standardową część wozu na inną, my załadowaliśmy koła (#wheel_sr1),
więc jesteśmy w stanie zmienić tylko je. I na samym końcu wrzucamy gracza do naszego Admirala.

Camera.SetPosition(2071.2261, -1689.3611, 16.0756, 0.0, 0.0, 0.0)
Camera.OnVehicle($Auto, 15, 2)
02A3: enable_widescreen 1

Ustawiamy pozycje kamery, kierujemy ją na Admirala i włączamy tryb 'kinowy'.

Kod:
wait 3000
fade 
1 1500
gosub 
@Misja2_Sprawdz_Fadowanie
wait 
3000
Car.DriveTo($Auto, 2075.1343, -1694.1357, 13.1931)
Car.SetMaxSpeed($Auto, 10.0)


Czekamy 3 sekundy po czym rozjasniamy ekran i spoglądamy do funkcji która odczeka dopóki ekran się nie rozjasni.
Czekamy następne 3 sekundy i dochodzimy do całkiem nowej funkcji Car.DriveTo.
Funkcja ta jest odpowiedzialna za to aby nasz wóz zaczą sam jechać w dane miejsce.
Następna nowa funkcja to Car.SetMaxSpeed, która ustali z jaką szybkością ma auto jechać do celu.

Kod:
:Misja2_Sprawdz_Czy_Auto_Dojechalo
wait 
10
if
not Actor.Dead($PLAYER_ACTOR)
jf 
@Misja2_Jezeli_Gracz_Zginie
if
00EE: actor $PLAYER_ACTOR 0 near_point 2075.1343 -1694.1357 radius 2.5 2.5 in_car
jf 
@Misja2_Sprawdz_Czy_Auto_Dojechalo


2 punkty kontrolne, pierwszy odpowiedzialny za sprawdzenie czy gracz
nie zginą, a drugi za sprawdzenie czy auto gracza dojechało na miejsce.

Kod:
wait 2000
Camera.Restore()
02A3: enable_widescreen 0
036A: put_actor $PLAYER_ACTOR in_car $Auto


Czekamy 2 sekundy, resetujemy kamerę z auta na gracza i wyłączamy 'kinową' kamerę.
Na końcu wrzuca ponownie gracza do auta, aby umożliwić kontrolę nad pojazdem graczowi.

Kod:
018A: $PunktNaMapie = create_checkpoint_at 2460.9873 -1660.7134 13.0235
03BC: $Kolko = create_sphere_at 2460.9873 -1660.7134 13.0235 radius 3.0
Player.CanMove($PLAYER_CHAR) = True // Umożliw ruch gracza


Robimy punkt na mapie gdzie ma gracz jechać, robimy czerwony znacznik i pozwalamy mu się swobodnie ruszać.

Kod:
:Misja2_Sprawdz_Czy_Gracz_Dojechal_Na_Miejsce
wait 
10
if
not Actor.Dead($PLAYER_ACTOR)
jf 
@Misja2_Jezeli_Gracz_Zginie
if
not Car.Wrecked($Auto)
jf 
@Misja2_Nie_Powiodla_Sie_Auto_Zniszczone
if
Actor.InCar($PLAYER_ACTOR$Auto)
jf 
@Misja2_Wyslij_Gracza_Do_Auta
if
00EE: actor $PLAYER_ACTOR 0 near_point 2460.9873 -1660.7134 radius 2.5 2.5 in_car
jf 
@Misja2_Sprawdz_Czy_Gracz_Dojechal_Na_Miejsce


Tutaj napotykamy już bardziej zaawansowane kontrole...
Pierwsza ma za zadanie sprawdzić czy gracz nie zginą, jeżeli zginą znaczy że misja się nie powiodła.
Druga kontrola ma za zadanie sprawdzić czy Admiral nie został zniszczony, przejdzie do następnego
punktu kontroli jeżeli auto NIE zostanie zniszczone, jeśli zostanie zniszczone misja się nie powiedzie...
Trzeci punkt kontroli sprawdza czy gracz jest w samochodzie, jeśli NIE, skoczy do procedury która go upomni o powrót.
I ostatni punkt sprawdza czy gracz dotarł na miejsce.

Kod:
Player.CanMove($PLAYER_CHAR) = False
Car.Health($Auto) = 1000
Marker.Disable($PunktNaMapie)
03BD: destroy_sphere $Kolko


Uniemożliwiamy ruch gracza i naprawiamy silnik Admirala, aby przypadkiem nie zniszczył się podczas cutscenki.
Następnie usuwamy punkt docelowy i znacznik z mapy, ponieważ gracz już osiągnął cel.

Kod:
fade 0 1500
gosub 
@Misja2_Sprawdz_Fadowanie


Znane nam juz przyciemnianie ekranu + kontrola czy juz sie przyciemnil.

Kod:
0395: clear_area 1 at 2460.9873 -1660.7134 13.0235 radius 100.0
Car.PutAt($Auto, 2460.9873, -1660.7134, 13.0235)
Car.Angle($Auto) = 269.895


Czyścimy okolice Groove, po czym wrzucamy Admirala w miejsce gdzie miał dojechać gracz, w przypadku gdyby auto podczas przyciemniania znalazło się w zlym miejscu.
I na samym końcu ustawiamy jego kierunek ....

Kod:
Camera.SetPosition(2509.3801, -1682.1654, 13.5469, 0.0, 0.0, 0.0)
Camera.OnVehicle($Auto, 15, 2)
02A3: enable_widescreen 1


Ustawiamy pozycje kamery (znane już nam komendy), kierujemy na auto i włączamy kamerę 'kinowa'.

Kod:
wait 1000
fade 
1 1500


Czekamy sekundę po czym rozjaśniamy ekran (W tym przypadku nie czekamy aż się rozjasni ...)

Kod:
Car.DriveTo($Auto, 2499.6548, -1683.4374, 13.1195)
Car.SetMaxSpeed($Auto, 10.0)


Ponownie znane nam funkcje, wysyłamy Admirala pod dom mamy CJa z predkością 10 KMh.

Kod:
:Misja2_Sprawdz_Czy_CJ_jest_pod_domem
wait 
10
if
not Actor.Dead($PLAYER_ACTOR)
jf 
@Misja2_Jezeli_Gracz_Zginie
if
not Car.Wrecked($Auto)
jf 
@Misja2_Nie_Powiodla_Sie_Auto_Zniszczone
if
00EE: actor $PLAYER_ACTOR 0 near_point 2499.6548 -1683.4374 radius 2.5 2.5 in_car
jf 
@Misja2_Sprawdz_Czy_CJ_jest_pod_domem


Ponownie sprawdzamy to co przy dojeździe na miejsce tylko tym razem podczas cutscenki i z innymi coordsami ...

Kod:
wait 3000
02D4: car $Auto turn_off_engine
wait 
2000
0633: AS_actor $PLAYER_ACTOR exit_car


Po dojechaniu Admirala pod dom, czekamy 3 sek po czym wyłączamy silnik samochodu.
Po wyłączeniu silnika czekamy 2 sekundy i gracz ma wysiąść z samochodu.

Kod:
:Misja2_Sprawdz_Czy_CJ_Wysiadl_Z_Auta_Podczas_Cutsceny
wait 
10
if
not Actor.InCar($PLAYER_ACTOR)
jf 
@Misja2_Sprawdz_Czy_CJ_Wysiadl_Z_Auta_Podczas_Cutsceny


Sprawdzamy czy gracz opuscił samochód (jeśli nie sprawdza tak długo, aż go opuści).

Kod:
wait 2000
fade 
0 1500
gosub 
@Misja2_Sprawdz_Fadowanie


Po opuszczeniu auta, czekamy 2 sekundy i przyciemniamy obraz wraz ze sprawdzeniem czy skończył przyciemnianie.

Kod:
02A3: enable_widescreen 0
0395: clear_area 1 at 2495.415 -1688.572 13.8899 radius 5.0
Actor.PutAt($PLAYER_ACTOR, 2495.415, -1688.572, 13.8899)
Actor.Angle($PLAYER_ACTOR) = 1.2117
Camera.Restore_WithJumpCut()
Camera.SetBehindPlayer()
gosub 
@Misja2_Zniszcz_Modele
Player.ClearWantedLevel($PLAYER_CHAR)
wait 
1000


Włączamy 'kinową' kamerę, czyscimy schody do domu mamy CJa i wrzucamy na nie gracza.
Obracamy go aby patrzył na ulice i resetujemy kamerę.
Idziemy do procedury, która zniszczy wszystko co zostało w misji stworzone.
Jak na koniec misji to czyścimy poziom Wanted Level graczowi i czekamy sekunde.

Kod:
fade 1 1500
gosub 
@Misja2_Sprawdz_Fadowanie


Rozjaśniamy ekran i sprawdzamy czy się rozjasnił.

Kod:
01E3: show_text_1number_styled GXT 'M_PASS' number 100 time 5000 style 1
0109: player $PLAYER_CHAR money += 100
0394: play_music 1
Player.CanMove($PLAYER_CHAR) = True
jump @Misja_2_Zakonczenie


Wyświetlamy text 'Mission Passed', dodajemy 100$ do konta gracza i odtwarzamy melodię zakończenia misji.
Na samym końcu umożliwiamy ruch gracza i robimy skok do nagłówka, który wyjdzie z misji.

Kod:
:Misja2_Jezeli_Gracz_Zginie
00BA: show_text_styled GXT 'M_FAIL' time 5000 style 1
gosub 
@Misja2_Zniszcz_Modele
jump 
@Misja_2_Zakonczenie


Jest to procedura, którą musimy stworzyć, ponieważ jak gracz zginie zostaje ona wywołana.
W procedurze wyświetlamy text 'Mission Failed' zaglądamy do procedury która zniszczy wszystko
co zostało stworzone w misji. Na sam koniec skaczemy do procedury która wyjdzie z misji.

Kod:
:Misja2_Nie_Powiodla_Sie_Auto_Zniszczone
00BA: show_text_styled GXT 'M_FAIL' time 5000 style 1
gosub 
@Misja2_Zniszcz_Modele
jump 
@Misja_2_Zakonczenie


Procedura do której skoczy gdy stworzony Admiral zostanie zniszczony.
W środku ujżymy to samo co w procedurze wyzej.

Kod:
:Misja2_Wyslij_Gracza_Do_Auta
$Strzalka = Marker.CreateAboveCar($Auto)
Marker.Disable($PunktNaMapie)
03BD: destroy_sphere $Kolko


Procedura, która zostanie wywołana gdy gracz podczas docierania do celu wyjdzie z auta.
Sworzymy wtedy strzałkę nad Admiralem i zniszczymy docelowy Punkt na mapie oraz jego znacznik.

Kod:
:Misja2_Wyslij_Gracza_Do_Auta_Sprawdz_Czy_Gracz_W_Aucie
wait 
10
if
not Actor.Dead($PLAYER_ACTOR)
jf 
@Misja2_Jezeli_Gracz_Zginie
if
not Car.Wrecked($Auto)
jf 
@Misja2_Nie_Powiodla_Sie_Auto_Zniszczone
if
Actor.InCar($PLAYER_ACTOR$Auto)
jf 
@Misja2_Wyslij_Gracza_Do_Auta_Sprawdz_Czy_Gracz_W_Aucie


Sprawdzamy czy gracz nie zginą, czy jego auto nie zostało zniszczone i czy wrócił spowrotem do auta.

Kod:
Marker.Disable($Strzalka)
018A: $PunktNaMapie = create_checkpoint_at 2460.9873 -1660.7134 13.0235
03BC: $Kolko = create_sphere_at 2460.9873 -1660.7134 13.0235 radius 3.0
jump 
@Misja2_Sprawdz_Czy_Gracz_Dojechal_Na_Miejsce


Po powrocie do auta niszczymy stworzoną nad nim strzałkę i tworzymy ponownie znacznik i punkt docelowy na mapie.
Na końcu skaczemy spowrotem do procedury, z ktorej wywołano powyższą procedurę.

Kod:
:Misja2_Zniszcz_Modele
Car.Destroy($Auto)
0249: release_model #ADMIRAL
0249: release_model #wheel_sr1
Marker.Disable($PunktNaMapie)
03BD: destroy_sphere $Kolko
return


I oto procedura, którą wywoływaliśmy wiele razy.
Niszczy ona Admirala następnie usuwa jego i jego koła z pamięci.
Niszczy punkt docelowy na mapie i znacznik.
Na koniec wraca z kąd została wywołana.

Kod:
:Misja2_Sprawdz_Fadowanie
wait 
10
if
816B: not fading
jf 
@Misja2_Sprawdz_Fadowanie
return


Procedura, która była najczęściej wywoływana, sprawdza czy obraz jest w trakcie przyciemniania lub rozjasniania.
Sprawdza cały czas, dopóki obraz nie będzie rozjasniony lub przyciemniony.
Wtedy wraca do procedury, z której ją wywołano

Kod:
:Misja_2_Zakonczenie
end_thread


I na sam koniec wychodzi z misji.
Autor: Mordecki
Dodane przez: MakG
Posting comments to this article is disabled.
Created & Powered by MakG
Wszelkie prawa zastrzeżone