Postów:
123
Dołączył:
2010-03-31
Napisano dnia: 2010-11-14 15:44:07
Witam zacząłem pisać misje do GTA VC. Zrobiłem taką prostą Sanny Builder 3 kompiluje poprawnie, natomiast gra tuż przy końcu ładowania dostaje crash. to mój kod:
Kod:
DEFINE MISSIONS 1
DEFINE MISSION 0 AT @WELCOME
thread "Main"
var
$PLAYER_CHAR: Player
end
01F0: set_max_wanted_level_to 6
set_wb_check_to 0
00C0: set_current_time 12 0
04E4: unknown_refresh_game_renderer_at 2488.5601 -1666.84
0053: $PLAYER_CHAR = create_player #NULL at -1359.093 -933.0244 20.8931
$PLAYER_ACTOR = Actor.EmulateFromPlayer($PLAYER_CHAR)
Camera.SetBehindPlayer
set_weather 0
wait 0 ms
fade 1 0
start_mission 0
end_thread
:WELCOME
thread 'WELCOME'
0247: request_model #DELUXO
038B: load_requested_models
00A5: $WOZ = create_car #DELUXO at -1428.2954 -835.6514 14.4765
0186: $MARKER1 = create_marker_above_car $WOZ
:petla1
if
00DB:actor $PLAYER_ACTOR in_car $WOZ
jf @petla1
0164: disable_marker $MARKER1
0570: $660 = create_asset_radar_marker_with_icon 25 at -1028.6862 -854.7523 13.0852
:petla2
if
0103: actor $PLAYER_ACTOR in_sphere -1028.6862 -854.7523 13.0852 radius 3.0 3.0 3.0 sphere 0 stopped_on_foot
jf @petla2
Marker.Disable($CEL)
end_thread
Odrazu mówie że mam zaznaczone aby Sanny Builder kompilował do VC.
Postów:
628
Dołączył:
2009-01-22
Napisano dnia: 2010-11-14 16:18:34
Nie jestem pewien czy to pomoże, ale spróbuj nie zakańczać wątku 'MAIN'. W oryginalnym VC (w innych częściach też) jest on pętlą. Czyli zamiast
Kod:
wait 0 ms
fade 1 0
start_mission 0
end_thread
daj coś takiego:
Kod:
wait 0 ms
fade 1 0
start_mission 0
while true
0001: wait 1000 ms
end
Poza tym, czemu nikt tutaj nie używa zmiennych lokalnych? :/
___________________
Moderator
Postów:
1004
Dołączył:
2009-01-20
Napisano dnia: 2010-11-14 17:48:10
Po pierwsze uno. Źle zbudowany mań. Powinno być mniej więcej coś takiego jak poniżej.
Po drugie uno. Jeżeli tworzysz pętle powinieneś w niej odczekać chociaż zero sekund. Jeżeli tego nie zrobisz to spowoduje crasza gry.
Potrzecie uno. Jeżeli tworzysz markera, a potem go usuwasz to opcodowi który usuwa tego markera nadaj mu taką samą nazwę jak przy jego tworzeniu.
Kod:
DEFINE OBJECTS 0
DEFINE MISSIONS 1
DEFINE MISSION 0 AT @INITIAL
{$VERSION 2.2.0000}
//-------------MAIN---------------
thread 'MAIN'
fade 0 0
00C0: set_current_time 22 0
04E4: unknown_refresh_game_renderer_at 83.0 -849.8
Camera.SetAtPos(83.0, -849.8, 9.3)
$PLAYER_CHAR = Player.Create(#NULL, -1410.3014, -829.0389, 14.8713)
$PLAYER_ACTOR = Actor.EmulateFromPlayer($PLAYER_CHAR)
wait 1500
fade 1 1500
start_mission 0 // Initial
end_thread
:INITIAL
thread 'INITIAL'
0247: request_model #DELUXO
0247: request_model 19
038B: load_requested_models
00A5: $woz1 = create_car #DELUXO at -1407.5679 -822.3035 14.5649
0175: set_car $woz1 z_angle_to -30.0
0186: $marker1 = create_marker_above_car $woz1
:petla1
wait 0
if
00DB:actor $PLAYER_ACTOR in_car $woz1
jf @petla1
0164: disable_marker $marker1
0570: $marker2 = create_asset_radar_marker_with_icon 23 at -1402.7126 -752.8752 14.5611
:petla2
wait 0
if
0100: actor $PLAYER_ACTOR near_point_in_car -1402.7126 -752.8752 14.5611 radius 1.0 1.0 1.0 sphere 0
jf @petla2
0164: disable_marker $marker2
end_thread
I po czwarte uno. Jeżeli dopiero zaczynasz zabawę w tworzenie misji to proponuje używać nie tylko tobie ale i każdemu kto to robi programu o nazwie "D3DWindower". Powoduje on otwarcie gta w okienku. Jak gra się w tedy zatnie to będziemy mieli łatwy dostęp do pulpitu i łatwo w tedy taką grę wyłączmy nie resetując przy tym komputera.
Cytat:
Poza tym, czemu nikt tutaj nie używa zmiennych lokalnych? :/
Pewnie dlatego że nikt tego robić nie umie.
Postów:
123
Dołączył:
2010-03-31
Napisano dnia: 2010-11-14 20:36:06
Dzięki za pomoc teraz chce zrobić skrypt w cleo dla GTA VC ma to też być misja. Jednak ciągle crash:
Kod:
{$CLEO .cs}
02A7: $MISJA = create_icon_marker_and_sphere 8 at -999.2077 -896.0669 12.8867
:START
wait 0
if
0102: actor $PLAYER_CHAR stopped_near_point_on_foot -999.2077 -896.0669 12.8867 radius 1.0 1.0 2.0 sphere 0
jf @START
0247: request_model #ARMY
038B: load_requested_models
009A: $CEL = create_actor 4 #ARMY at -966.1118 -682.5354 11.3814
0187: $MARKER = create_marker_above_actor $CEL
:DEAD
wait 0
if
0118: actor $CEL dead
jf @DEAD
0164: disable_marker $MARKER
009B: destroy_actor_instantly $CEL
004E: end_thread
Postów:
1004
Dołączył:
2009-01-20
Napisano dnia: 2010-11-14 20:48:51
To:
Kod:
0247: request_model #ARMY
038B: load_requested_models
Powinno być chyba na początku skryptu czyli pod tym {$CLEO .cs}
A cha i w cleo w gta vc jak się tym bawiłem to nieco inny szablon był z takim początkiem :
Kod:
{$VERSION 2.2.0000}
{$CLEO .cs}
//-------------MAIN---------------
0000:
Czyli to co wyżej napisałem to powinno być pod tymi zerami.
Postów:
123
Dołączył:
2010-03-31
Napisano dnia: 2010-11-14 20:53:44
Postów:
628
Dołączył:
2009-01-22
Napisano dnia: 2010-11-14 21:32:11
Z-m-i-e-n-n-e l-o-k-a-l-n-e.
Kod:
0102: actor $PLAYER_CHAR stopped_near_point_on_foot -999.2077 -896.0669 12.8867 radius 1.0 1.0 2.0 sphere 0
tu sprawdzasz $PLAYER_ACTOR, nie $PLAYER_CHAR. Poza tym, CLEO chyba ma inny opcode by zakończyć wątek (0A93 dla SA, nie wiem czy i jaki dla VC).
I jeszcze - jak chcesz robić misję w CLEO i jeśli VC CLEO ma obsługę plików .cm, zastosuj się do szablonu z
TEGO poradnika.
@Subaru
Dyrektywa $VERSION i ta linijka z MAIN są całkowicie zbędne, a zwłaszcza ta druga - przecież to komentarz, ignorowany przez Sanny'ego przy kompilacji :)
A co do 0000: NOP. Potrzeba tego tylko w momencie, gdy skrypt skacze do samego swojego początku. Ten skrypt na samym początku ma tworzenie markera, więc błąd "Jump to 0 offset" nigdy nie wystąpi == 0000 jest tu zbędne.
___________________
Moderator