Czy wiesz, że... możesz podsyłać newsy, artykuły, pliki i zdjęcia?
Strona główna forum Szukaj Rejestracja
Witaj, nieznajomy!
Poprzedni 1 Następny
Postów: 1004 Dołączył: 2009-01-20
#
Misje na czas.

Zapewne każdy kto grał w gta zauważył że np. podczas wyścigów pojawia się zegar wskazujący ile zostało nam czasu do końca wyścigu i że jeżeli się nie zmieścimy w tym czasie to misja zostaje przerwana albo jeżeli dotrzemy do celu to zegar zostaje zatrzymany, a misja trwa dalej. W tym poradniku postaram się miarę dokładnie wytłumaczyć na prostym przykładzie jak zastosować w swojej misji taki zegar. Sama misja będzie polegać po prostu na dotarciu do celu w wyznaczonym czasie, a jeżeli postać nie zdąży dotrzeć do celu przed upływem czasu lub zginęła to misja zostanie przerwana. No to zaczynamy.

Żeby w ogóle muc wywołać zegar w grze należy użyć poniższego opcodu

Kod:
0004: $time1 =  1000  // integer values 


- powyższy opcod służy do ustawiania od ilu ma zacząć zegar odliczasz czasz. 1 sekunda to 1000 milisekund. Ale tu uwaga. Po włączeniu zegara w grze jeżeli się ustali czasz na 1000 to zacznie odliczasz czasz od 00:00 w dół. Więc żeby w grze owy zegar zaczął odliczanie od 1 sekundy to musi się do powyższego opcodu dodać drugą sekundę. W tedy w grze zacznie odliczanie tak jak powinien czyli od 00:01

Kod:
014E: set_timer_to $time1 type  1

Ten opcod służy do wywołania zegara w grze. Więc jeżeli nie da się go to on w grze się nie pojawi, a tego pierwszego opcoda będzie można sobie co najwyżej wsadzić w buty.

Kod:
$time1 == 0

Z kolei ten opcod służy do sprawdzania czy zegar zakończył odliczanie. Należy go stosować w pętli. Czyli np. ustaliło się że w grze po wejściu do samochodu zegar zaczął odliczać czasz od 2 minut w dół i gdy owy zegar dojdzie do 00:00 to w tedy zacznie działać ta pętla z tym opcodem i przerwie całe wydarzenie, które miało nastąpić w razie dotarcia do celu przed upływem czasu.

Kod:
014F: stop_timer $time1  

Ten opcod służy do przerywania odliczania. Czyli np. ogólnego czasu mamy 2:00 minuty. Natomiast do końca pozostało 1:50 sekund. I gdy się go doda do jakieś pętli np. kiedy aktor zginą to wtedy przerwie ten opcod odliczanie i zegar się wyłączy.

W zasadzie to tyle trzeba znać opcodów żeby zrobić prostą misje na czasz. Pozostałych opcodów użytych w skrypcie nie będę tłumaczył ponieważ wielokrotnie zostały już omawianie w poradnikach na naszej stronie. Poniżej obiecany przykład.

Kod:
{$CLEO .cs}
0000: NOP

:sprawdzacz
wait 0
if
Player.Defined($PLAYER_CHAR)
jf @sprawdzacz

0247: request_model #GREENWOO
038B: load_requested_models

:start
02A7: $CEL1 = create_icon_marker_and_sphere 23 at -231.2067 1051.9681 19.7344 radius 3.0

:pentla1
wait 0
if
00EC:   actor $PLAYER_ACTOR 0 near_point -231.2067 1051.9681 radius 1.0 1.0
jf @pentla1
Marker.Disable($CEL1)
0004: $time1 =  121000 // integer values  121000
014E: set_timer_to $time1 type  1
02A7: $CEL2 = create_icon_marker_and_sphere 56 at 24.5589 1181.7612 19.2718 radius 3.0
00BC: show_text_highpriority GXT 'TXT1' time 4000 flag 1
wait 4000
00BC: show_text_highpriority GXT 'TXT2' time 4000 flag 1

:pentla2
wait 0
if
$time1 == 0
jf @pentla3
014F: stop_timer $time1
00BA: show_text_styled GXT 'M_FAIL' time 5000 style 1
Marker.Disable($CEL2)
00BC: show_text_highpriority GXT 'TXT3' time 4000 flag 1
wait 4000
00BC: show_text_highpriority GXT 'TXT4' time 4000 flag 1
jump @start

:pentla3
wait 0
if
0118: actor $PLAYER_ACTOR dead
jf @pentla4
014F: stop_timer $time1
Marker.Disable($CEL2)
00BA: show_text_styled GXT 'M_FAIL' time 4000 style 1
wait 8000
00BC: show_text_highpriority GXT 'TXT7' time 4000 flag 1
jump @start

:pentla4
wait 0
if
00EC:   actor $PLAYER_ACTOR 0 near_point 24.5589 1181.7612 radius 1.0 1.0
jf @pentla2
Marker.Disable($CEL2)
014F: stop_timer $time1
01E3: show_text_1number_styled GXT 'M_PASS' number 0 time 5000 style 1
0394: play_music 1
00A5: $WOZ = create_car #GREENWOO at 37.8154 1174.2572 19.2887
0175: set_car $WOZ z_angle_to 0.0
0229: set_car $WOZ color_to 2 1
00BC: show_text_highpriority GXT 'TXT5' time 4000 flag 1
wait 4000
00BC: show_text_highpriority GXT 'TXT6' time 2000 flag 1
0A93: end_custom_thread


Po niżej daje także gotowy skompilowany plik.
http://www.przeklej.pl/plik/zegera-z-przykladem-rar-00240t84040i
Postów: 628 Dołączył: 2009-01-22
#
Właśnie nie bardzo można użyć tych opcodów w CLEO z powodu, że nie akceptują one zmiennych lokalnych. Trzeba użyć tej metody, by działało to bez żadnych błędów.

http://sannybuilder.com/forums/viewtopic.php?id=255

___________________
Moderator
http://i.imgur.com/Abvv63y
Śledź mój kanał Twitter by być na bieżąco ze wszystkimi aktualizacjami moich modów!
Postów: 1004 Dołączył: 2009-01-20
#
Masz racje. Jakoś nie mogę się przekonać do tych zmiennych lokalnych i to pewnie stąd się wzięło że nie sprawdziłem że to może tak nie działać. Ale myślę że jak ktoś piszę misję dla siebie to może z tym trialem się zapoznać. A linka do tej strony co podałeś to ja prawie nic nie rozumiem z tamtego. Czarna magia dla mnie.
Postów: 878 Dołączył: 2009-01-20
#
Widzę, że strasznie namieszali w tym CLEO. Ten tutorial i tak powinien wystarczyć do jakichś mniejszych zadań, więc umieszczę go na stronie w ten weekend, razem z innymi, które miałem udostępnić już jakiś czas temu.

___________________
Administrator
Postów: 628 Dołączył: 2009-01-22
#
@MakG

Nie oni namieszali w CLEO, tylko Rockstar namieszał tak, że te opcody crashują przy używaniu ich ze zmiennymi lokalnymi. A że Ruscy sprytni są, to znaleźli sposób na zasymulowanie tego i z lokalnymi.

___________________
Moderator
http://i.imgur.com/Abvv63y
Śledź mój kanał Twitter by być na bieżąco ze wszystkimi aktualizacjami moich modów!
Postów: 248 Dołączył: 2009-06-27
#
O tak, "Ruscy" są dobrzy, ale byli by lepsi gdyby angielsko-języczne forum na tej stronie było bardziej rozbudowane. O ile w mówionym rosyjskim nawet coś rozumiem, to cyrylicy nie ogarniam.

I przy okazji, tam gdzie możesz, używaj zmiennych lokalnych. Zamień, np. $CEL1 na 0@, a $CEL2 na 1@. Ja już się tym zaraziłem, radzę zrobić Ci to samo :-D

___________________
http://www.gta-mods.pl/public/images/userbar
Postów: 628 Dołączył: 2009-01-22
#
@Cytrus

Ja mam o tyle szczęście (?), że uczę się rosyjskiego i powolutku mogę to odczytać, parę postów też próbowałem tam u nich pisać.

A co do zmiennych lokalnych - piszę to w każdym temacie, tu już nie chciałem tego powtarzać :P

___________________
Moderator
http://i.imgur.com/Abvv63y
Śledź mój kanał Twitter by być na bieżąco ze wszystkimi aktualizacjami moich modów!
Poprzedni 1 Następny
Zaloguj się lub zarejestruj się, żeby pisać na forum.
Created & Powered by MakG