Czy wiesz, że... możesz podsyłać newsy, artykuły, pliki i zdjęcia?
GTA Vice City
Statystyki
Dzisiaj: 3188
On-Line: 9
Gości: 9
Użytkowników: 0
Sonda
Czy podobał Ci się zestaw misji "It Never Ends"?




Shoutbox
Archiwum
zapomniałem dodać że pracuję pod GTA 3
sorki za post pod postem
cholera spalił mi się laptop
powiedzcie mi czy sanny buldier będzie pracował na vista x64
Alpha,
Modsy niczego nie kopiują, modyfikacje nie są Waszego autorstwa, więc gdzie jest problem?? No napisz, wyjaśnij mi to, bo ja tu nic złego nie widzę :)
Naprawione.
Proszę o skasowanie tej pierwszej fotki z island.jpg. Ja tylko oddałem ta z Suprą a tamtej nie. Nie wiem czemu jest ona też. Dziękuję.
http://www.gta-mods.pl/pliki/651/toyota-supra-gta-2
Buttony
Witaj, nieznajomy!
Ładowanie...

Szablon misji (Custom Mission)
Przed rozpoczęciem tworzenia misji, warto sobie ustalić pewien szablon. Proponowany przeze mnie poniżej został użyty w każdej misji z oryginalnego GTA San Andreas. Do dzieła.

Kod:
{$CLEO .cm}
thread 'MISSION'
$ONMISSION = 1

:Mission
0050: gosub @Mission_Start 
if 
 0112: wasted_or_busted // mission only 
then
 0050: gosub @Mission_Failed 
end
0050: gosub @Mission_Cleanup

$ONMISSION = 0
end_thread


:Mission_Start
// kod całej misji
return

:Mission_Cleanup
// procedura kończenia misji
return

:Mission_Failed
// procedura w przypadku porażki
return

:Mission_Passed
// procedura w przypadku powodzenia
return


Cały skrypt działa w procedurze "Mission", a do pozostałych: "Mission_Cleanup", "Mission_Failed", "Mission_Passed" tylko się odwołujemy poprzez instrukcję gosub.


Teraz podstawowe pytanie: jak to działa? Otóż, kiedy zmienna globalna $ONMISSION ma wartość 1, silnik skryptowy GTA San Andreas automatycznie wykonuje sprawdzenie "w tle", czy gracz zginął lub został złapany przez policję. Jeśli którakolwiek z tych sytuacji będzie miała miejsce, to zostanie wywołana instrukcja return. To wszystko dzieje się poza naszą kontrolą, dlatego trzeba stworzyć szablon dostosowując się do podanego zachowania.


Takie automatyczne działanie silnika skryptowego zwalnia nas z ciągłego sprawdzania, czy gracz zginął bądź został aresztowany, gdyż jeśli to nastąpi, skrypt od razu przejdzie do naszego warunku if. Jeśli skrypt wyjdzie z procedury "Mission Start" bez naszej wiedzy (opisane wcześniej zachowanie), będzie to oznaczało tylko jedno - gracz zginął lub został złapany przez policję. Właśnie dlatego warunek wasted_or_busted możemy sprawdzać tylko raz.


Możemy jeszcze sami wyjść z procedury "Mission_Start" instrukcją "return", co będzie jednoznaczne z zakończeniem misji. W takim przypadku, warunek if będzie fałszywy (jeśli gracz by zginął, to procedura zostałaby opuszczana już wcześniej) i skrypt przejdzie do kolejnej procedury - "Mission_Cleanup", w której wykonujemy wszystkie niezbędne czynności przed wyjściem z całej misji (usuwanie obiektów itd.).


Do procedur "Mission_Failed" i "Mission_Passed" odwołujemy się tylko w kodzie "Mission_Start". Wiadomo kiedy - w przypadku nieudanej misji - do Mission_Failed, a gdy gracz ukończy misję - do Mission_Passed.


Mam nadzieję, że objaśniłem to w przejrzysty sposób. Jeśli nie rozumiesz jakiejkolwiek części, zapytaj na naszym forum. Poniżej znajduje się pełny przykład, razem z mini-misją, aby lepiej przybliżyć Wam takie działanie:



Kod:
{$CLEO .cm}
thread 'szablon'
$ONMISSION = 1

:Mission
0050: gosub @Mission_Start 
if 
 0112: wasted_or_busted
then
 0050: gosub @Mission_Failed 
end
0050: gosub @Mission_Cleanup

$ONMISSION = 0
end_thread


:Mission_Start
Model.Load(124)  // Mafia #1
Model.Load(356)  // M4

:LoadModels
wait 0
if and
 Model.Available(124)
 Model.Available(356)
jf @LoadModels

04BB: select_interior 0 
0860: link_actor $PLAYER_ACTOR to_interior 0

00A1: put_actor $PLAYER_ACTOR at 2515.0403 -1718.5321 18.5821

009A: 1@ = create_actor_pedtype 4 model 124 at 2497.625 -1718.5383 18.5821
 01B2: give_actor 1@ weapon 31 ammo 300
 01B9: set_actor 1@ armed_weapon_to 31
 0350: set_actor 1@ maintain_position_when_attacked 1 

05E2: AS_actor 1@ kill_actor $PLAYER_ACTOR
0187: 2@ = create_marker_above_actor 1@ 
 
:check
wait 0
if
 0118:   actor 1@ dead 
jf @check

gosub @Mission_Passed
return


return


:Mission_Cleanup
009B: destroy_actor 1@
0164: disable_marker 2@ 
00D8: mission_cleanup 
return

:Mission_Failed
00BA: show_text_styled GXT 'M_FAIL' time 5000 style 1
return

:Mission_Passed
01E3: show_text_1number_styled GXT 'M_PASS' number 5000 time 5000 style 1
0109: player $PLAYER_CHAR money += 5000
0394: play_music 1
return


Skrypt *.cm nie wczyta się automatycznie, w przeciwieństwie do *.cs, dlatego trzeba go uruchomić za pomocą skryptu *.cs:



Kod:
{$CLEO .cs}
0A94: start_custom_mission "mission"


Zakładając, że nazwa pliku misji to "mission.cm", który znajduje się w katalogu CLEO.



Specjalnie podziękowania dla użytkownika Silent, który podzielił się z nami tą metodą na naszym forum.

Dodane przez: MakG
Komentarze do tego artykułu są wyłączone.
Created & Powered by MakG
Wszelkie prawa zastrzeżone