Napisano dnia: 2010-11-25 21:19:29
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
- 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
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.
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.
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.
Po niżej daje także gotowy skompilowany plik.
http://www.przeklej.pl/plik/zegera-z-przykladem-rar-00240t84040i
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
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