Czy wiesz, że... rejestracja trwa tylko 20 sekund?
Strona główna forum Szukaj Rejestracja
Witaj, nieznajomy!
Poprzedni 1 2 Następny
Postów: 628 Dołączył: 2009-01-22
#
Nie potrzeba, bo wymyśliłem trzecią, najlepszą. Spróbuj tego kodu, ja go (jak zwykle) nie testowałem.

Kod:
{$CLEO}
0000: TRAILER

while 
true
    0001: wait 0 ms
    4@ = #ARTICT1
    068D: get_camera_position_to 1@ 2@ 3@
    if 
0AE2: 0@ = random_vehicle_near_point 1@ 2@ 3@ in_radius 300.0 find_next 0 pass_wrecked 0 //IF and SET

    then
        
repeat
            0001: wait 0 ms // Dajmy mu chwilę czasu, niech nie przycina gry

            if 
or
                0137:   car 0@ model == #LINERUN
                0137:   car 0@ model == #RDTRAIN
                0137:   car 0@ model == #PETRO
            then
                
if 8119:   not car 0@ wrecked   // To załatwia wszystkie sprawdzenia czy pojazd istnieje itp.

                then
                    
0A97: 7@ = car 0@ struct
                    0A8E: 8@ = 7@ + 0x4A4
                    0A8E: 9@ = 7@ + 0x42F
                    0A8D: 10@ = read_memory 8@ size 1 virtual_protect 0
                    0A8D: 11@ = read_memory 9@ size 1 virtual_protect 0
                    if 
and
                        8039:   not 10@ == 2     // Dzięki temu przyczepy NIE pojawią się na ciężarówkach stworzonych przez SCM...

                        88B7:   not test 11@ bit 4   // a dzięki temu sprawdzimy, czy do tego pojazdu kiedyś doczepiono już naczepę (moja własna flaga)

                        09D0:   car 0@ on_wheels
                        87AB:    not  trailer -1 attached_to_cab 0@
                    then
                        
0247: load_model 4@

                        while  
8248:    not  model 4@ available
                            0001:  wait  0 ms
                        end

                        
00A5: 6@ = create_car 4@ at 0 0 0
                        0893: put_trailer 6@ on_cab 0@
                        01C3: remove_references_to_car 6@
                        0249: release_model 4@

                        08BD: set 11@ bit 4      // Oznaczmy, że do tego pojazdu doczepiliśmy już kiedyś naczepę

                        0A8C: write_memory 9@ size 1 value 11@ virtual_protect 0
                    end
                
end
            end
        
until 8AE2: not 0@ = random_vehicle_near_point 1@ 2@ 3@ in_radius 300.0 find_next 1 pass_wrecked 0 //IF and SET

    end
end

___________________
Moderator
http://i.imgur.com/Abvv63y
Śledź mój kanał Twitter by być na bieżąco ze wszystkimi aktualizacjami moich modów!
Postów: 294 Dołączył: 2011-07-27
#
Mam problem z tym bo przy kompilacji wychodzi błąd "A jump to zero offset found."

EDIT:
Już chyba wiem:
Kod:
0000: TRAILER
powinno być chyba pod
Kod:
{$CLEO}
a nie w tej samej linijce :)

Sprawdziłem ten Twój skrypt i niestety coś jest nie tak, bo mam crash. Prawdopodobnie podczas tworzenia drugiej naczepy, bo za każdym razem jestem w stanie zobaczyć jeden pojazd z naczepą, lub wogóle i potem gra się wyłącza.
Postów: 628 Dołączył: 2009-01-22
#
To są dwie linijki, ale forum coś źle formatuje.

Co do skryptu, rzeczywiście crashował, ale wystarczyło zamienić kolejność sprawdzeń i śmiga:

Kod:
{$CLEO}

0000: TRAILER

while 
true
    0001: wait 0 ms
    4@ = #ARTICT1
    068D: get_camera_position_to 1@ 2@ 3@
    if 
0AE2: 0@ = random_vehicle_near_point 1@ 2@ 3@ in_radius 300.0 find_next 0 pass_wrecked 1 //IF and SET

    then
        
repeat
            0001: wait 0 ms // Dajmy mu chwilę czasu, niech nie przycina gry

            if 
8119:   not car 0@ wrecked   // To załatwia wszystkie sprawdzenia czy pojazd istnieje itp.

            then
                
if or
                    
0137:   car 0@ model == #LINERUN
                    0137:   car 0@ model == #RDTRAIN
                    0137:   car 0@ model == #PETRO
                then
                    
0A97: 7@ = car 0@ struct
                    0A8E: 8@ = 7@ + 0x4A4
                    0A8E: 9@ = 7@ + 0x42F
                    0A8D: 10@ = read_memory 8@ size 1 virtual_protect 0
                    0A8D: 11@ = read_memory 9@ size 1 virtual_protect 0
                    if 
and
                        8039:   not 10@ == 2     // Dzięki temu przyczepy NIE pojawią się na ciężarówkach stworzonych przez SCM...

                        88B7:   not test 11@ bit 4   // a dzięki temu sprawdzimy, czy do tego pojazdu kiedyś doczepiono już naczepę (moja własna flaga)

                        09D0:   car 0@ on_wheels
                        87AB:    not  trailer -1 attached_to_cab 0@
                    then
                        
0247: load_model 4@

                        while  
8248:    not  model 4@ available
                            0001:  wait  0 ms
                        end

                        
00A5: 6@ = create_car 4@ at 0 0 0
                        0893: put_trailer 6@ on_cab 0@
                        01C3: remove_references_to_car 6@
                        0249: release_model 4@

                        08BD: set 11@ bit 4      // Oznaczmy, że do tego pojazdu doczepiliśmy już kiedyś naczepę

                        0A8C: write_memory 9@ size 1 value 11@ virtual_protect 0
                    end
                
end
            end
        
until 8AE2: not 0@ = random_vehicle_near_point 1@ 2@ 3@ in_radius 300.0 find_next 1 pass_wrecked 1 //IF and SET

    end
end

___________________
Moderator
http://i.imgur.com/Abvv63y
Śledź mój kanał Twitter by być na bieżąco ze wszystkimi aktualizacjami moich modów!
Postów: 294 Dołączył: 2011-07-27
#
Skrypt teraz działa, ale naczepy nie pojawiają się na wszystkich ciągnikach, mniej więcej na co drugim, co trzecim naczepy nie ma :(

I mam jeszcze takie dwa pytania:
- dlaczego w pętli
Kod:
while   8248:     not   model 4@ available
                            0001:   wait   0 ms
                        end
przed 8248 nie ma "if" ?
- i za co odpowiada końcówka w opcodzie 0AE2 (dokładnie chodzi mi o to "pass_wrecked")?
Postów: 628 Dołączył: 2009-01-22
#
Nie potrzeba tam IFa, taka jest konstrukcja pętli wysokiego poziomu. W tutorialu to nieco opisałem.

pass_wrecked pomija zniszczone pojazdy.

___________________
Moderator
http://i.imgur.com/Abvv63y
Śledź mój kanał Twitter by być na bieżąco ze wszystkimi aktualizacjami moich modów!
Postów: 294 Dołączył: 2011-07-27
#
Dobra dzięki za wszystko, teraz spróbuję dodać przyczepy do innych pojazdów np. do Traktora. W razie czego będę pytał dalej :)
Postów: 294 Dołączył: 2011-07-27
#
Silent napisał(a):
Przychodzą mi do głowy dwa pomysły - trudniejszy, ale 'poprawny' (zapisywanie informacji o tym czy naczepa została podczepiona w pamięci skryptu + hack konstruktora i destruktora), oraz łatwiejszy, ale nieco dziwny (użycie... trzeciego/czwartego koloru do tego, by przechować info czy naczepa była podpinana pod ten wóz czy nie). Którą wersję wolisz bym opisał?


Mógłbyś opisać jeszcze metodę z tym trzecim/czwartym kolorem?

EDIT
Dobra, powiem tak, dotychczasowy skrypt nie sprawdzał się za dobrze, więc napisałem nowy. Wygląda on tak:
Kod:
thread 'NONAME' 

:NONAME_11
wait 
100 
if 
   
Player.Defined($PLAYER_CHAR)
else_jump 
@NONAME_11 
068D: get_camera_position_to 1@ 2@ 3@ 
if 
0AE2: 0@ = random_vehicle_near_point 1@ 2@ 3@ in_radius 500.0 find_next 0 pass_wrecked 1 //IF and SET 

else_jump 
@NONAME_11 

:NONAME_76
if 
   
not Car.Wrecked(0@)
else_jump 
@NONAME_778 
if 
   
Car.Model(0@) == #RDTRAIN
else_jump 
@NONAME_153 
4@ = 515 
5@ = 450 
6@ = 234 
jump 
@NONAME_452 

:NONAME_153
if 
   
Car.Model(0@) == #LINERUN
else_jump 
@NONAME_203 
4@ = 403 
5@ = 435 
6@ = 234 
jump 
@NONAME_452 

:NONAME_203
if 
   
Car.Model(0@) == #PETRO
else_jump 
@NONAME_778 
4@ = 514 
5@ = 584 
6@ = 234 

:NONAME_452
wait 
0 
if 
and
09D0:   car 0@ on_wheels 
87AB:   not trailer -1 attached_to_cab 0@ 
else_jump 
@NONAME_778 
0407: store_coords_to 7@ 8@ 9@ from_car 0@ with_offset 0.0 0.0 0.0 
10@ = Car.Angle(0@)
046C: 11@ = car 0@ driver 
Model.Load(4@)
Model.Load(5@)
Model.Load(6@)
if 
and
   Model.Available(4@)
   Model.Available(5@)
   Model.Available(6@)
else_jump 
@NONAME_452 
Car.Destroy(0@)
wait 

12@ = Car.Create(4@7@8@9@)
Car.Angle(12@) = 10@
wait 

0407: store_coords_to 17@ 18@ 19@ from_car 12@ with_offset 0.0 -5.0 0.0 
0395: clear_area 1 at 17@ 18@ 19@ radius 3.0 
13@ = Car.Create(5@17@18@19@)
Car.Angle(13@) = 10@
wait 

0893: put_trailer 13@ on_cab 12@ 
Model.Destroy(4@)
Model.Destroy(5@)
if 
   
not 11@ == -1 
else_jump 
@NONAME_768 
0129: 14@ = create_actor_pedtype 24 model 6@ in_car 12@ driverseat 
Car.SetDriverBehaviour(12@, FollowRoad)
00AE: set_car 12@ traffic_behaviour_to 4 
Model.Destroy(6@)
Actor.RemoveReferences(14@)

:NONAME_768
Car.RemoveReferences(12@)
Car.RemoveReferences(13@)

:NONAME_778
8AE2:   not 0@ = random_vehicle_near_point 1@ 2@ 3@ in_radius 500.0 find_next 1 pass_wrecked 1 //IF and SET 

else_jump 
@NONAME_76 
jump 
@NONAME_11 


I mam problem bo te funkcje oznaczające że pojazd miał już kiedyś doczepioną przyczepę tu jakoś nie działają. Czy w takim przypadku powinny być użyte jakieś inne wartości w opcode 0A8E ?
Postów: 628 Dołączył: 2009-01-22
#
Przerobiłem skrypt na szybko tak, by używał tego triku z kolorami - wolałem jednak starą wersję :P

Kod:
{$CLEO}

0000: TRAILER

while 
true
    0001: wait 0 ms
    4@ = #ARTICT1
    068D: get_camera_position_to 1@ 2@ 3@
    if 
0AE2: 0@ = random_vehicle_near_point 1@ 2@ 3@ in_radius 300.0 find_next 0 pass_wrecked 1 //IF and SET

    then
        
repeat
            0001: wait 0 ms // Dajmy mu chwilę czasu, niech nie przycina gry

            if 
8119:   not car 0@ wrecked   // To załatwia wszystkie sprawdzenia czy pojazd istnieje itp.

            then
                
if or
                    
0137:   car 0@ model == #LINERUN
                    0137:   car 0@ model == #RDTRAIN
                    0137:   car 0@ model == #PETRO
                then
                    
0A97: 7@ = car 0@ struct
                    0A8E: 8@ = 7@ + 0x4A4
                    0A8D: 10@ = read_memory 8@ size 1 virtual_protect 0
0A12: get_car 0@ tertiary_color_to 9@ quaternary_color_to 11@
                    if 
and
                        8039:   not 10@ == 2     // Dzięki temu przyczepy NIE pojawią się na ciężarówkach stworzonych przez SCM...

                        8039:   not 11@ == 16
09D0:   car 0@ on_wheels
                        87AB:    not  trailer -1 attached_to_cab 0@
                    then
                        
0247: load_model 4@

                        while  
8248:    not  model 4@ available
                            0001:  wait  0 ms
                        end

                        
00A5: 6@ = create_car 4@ at 0 0 0
                        0893: put_trailer 6@ on_cab 0@
                        01C3: remove_references_to_car 6@
                        0249: release_model 4@

                        0A11: set_car 0@ tertiary_color_to 9@ quaternary_color_to 16
                    end
                
end
            end
        
until 8AE2: not 0@ = random_vehicle_near_point 1@ 2@ 3@ in_radius 300.0 find_next 1 pass_wrecked 1 //IF and SET

    end
end

___________________
Moderator
http://i.imgur.com/Abvv63y
Śledź mój kanał Twitter by być na bieżąco ze wszystkimi aktualizacjami moich modów!
Postów: 294 Dołączył: 2011-07-27
#
Napisałem nowy, bo w tym starym jak zastosowałem go do traktora to ta 'przyczepka' odpadała od niego. Tak samo działo się z pojazdami Utility Van i Tow Truck. W tym nowym już jest wszystko dobrze tylko jak dałem do niego te funkcje, które mi podałeś sprawdzające czy przyczepa została już doczepiona, to po jakiejś minucie gra mi się wyłączała.
I niestety jak dodaję tą metodę z kolorami to jest tak samo, też po minucie wyrzuca błąd :(

I mam takie dwa pytania:
- czy każdy pojazd ma cztery kolory? Może to przez to jest błąd?
- skąd bierze się te kody do 0A8E typu 0x4A4 ?
Postów: 628 Dołączył: 2009-01-22
#
artginPL napisał(a):
- czy każdy pojazd ma cztery kolory? Może to przez to jest błąd?
- skąd bierze się te kody do 0A8E typu 0x4A4 ?


1. Nie, większość ma dwa - czterech nie ma chyba żaden.
2. Dokumentacje klas z EXE, sporo jest tego na GTAForums np.

___________________
Moderator
http://i.imgur.com/Abvv63y
Śledź mój kanał Twitter by być na bieżąco ze wszystkimi aktualizacjami moich modów!
Postów: 294 Dołączył: 2011-07-27
#
Mam jeszcze takie pytanie czy istnieje opcode o działaniu podobnym jak 0209, tylko żeby losował jedną wartość z pośród dwóch nie występujących kolejno po sobie. A jeżeli nie ma takiego opcodu to w jaki sposób można by coś takiego zrobić? I ostatnie pytanie jaka jest różnica pomiędzy opcode 0209, a 0099 ?
Postów: 628 Dołączył: 2009-01-22
#
1. Nie, musisz wymyślić własny kod. Przykład na szybko:

Kod:
0209: 0@ = random_int_in_ranges 0 100
if 
0@ > 50
then 
0@ = #INFERNUS
else 
0@ = #ALPHA
end


2. Czy nie widać różnicy gołym okiem? GENERATE_RANDOM_INT nie ma przedziałów, generuje liczbę z predefiniowanego zakresu 0 - 32767. W GENERATE_RANDOM_INT_IN_RANGE podajesz zakres.

___________________
Moderator
http://i.imgur.com/Abvv63y
Śledź mój kanał Twitter by być na bieżąco ze wszystkimi aktualizacjami moich modów!
Postów: 294 Dołączył: 2011-07-27
#
Ja jeszcze wrócę do tego tematu, bo mam problem. Napisałem taki skrypt:
Kod:
thread 'NONAME' 

:NONAME_11
wait 
100 
if 
   
Player.Defined($PLAYER_CHAR)
jf 
@NONAME_11 
068D: get_camera_position_to 1@ 2@ 3@ 
if 
0AE2: 0@ = random_vehicle_near_point 1@ 2@ 3@ in_radius 500.0 find_next 0 pass_wrecked 1 //IF and SET 

jf 
@NONAME_11 

:NONAME_76
wait 

03F3: get_car 0@ primary_color_to 4@ secondary_color_to 5@ 
0A12: get_car 0@ tertiary_color_to 6@ quaternary_color_to 7@ 
if 
   
not 7@ == 16 
jf 
@NONAME_785 
if 
   
Car.Id(0@) == #RDTRAIN
jf 
@NONAME_204 
8@ = 515 
0209: 23@ = random_int_in_ranges 0 2 
if 
23@ = 0 
jf 
@NONAME_189 
9@ = 450 
jump 
@NONAME_455 

:NONAME_189
9@ = 591 
jump 
@NONAME_455 

:NONAME_204
if 
   
Car.Id(0@) == #LINERUN
jf 
@NONAME_246 
8@ = 403 
9@ = 435 
jump 
@NONAME_455 

:NONAME_246
if 
   
Car.Id(0@) == #PETRO
jf 
@NONAME_288 
8@ = 514 
9@ = 584 
jump 
@NONAME_455 

:NONAME_288
if 
   
Car.Id(0@) == #TRACTOR
jf 
@NONAME_330 
8@ = 531 
9@ = 610 
jump 
@NONAME_455 

:NONAME_330
if 
   
Car.Id(0@) == #TOWTRUCK
jf 
@NONAME_375 
8@ = 525 
0209: 9@ = random_int_in_ranges 604 606 
jump 
@NONAME_455 

:NONAME_375
if 
   
Car.Id(0@) == #UTILITY
jf 
@NONAME_417 
8@ = 552 
9@ = 611 
jump 
@NONAME_455 

:NONAME_417
if 
   
Car.Id(0@) == #BAGGAGE
jf 
@NONAME_785 
8@ = 485 
0209: 9@ = random_int_in_ranges 606 609 

:NONAME_455
wait 

16@ = 234 
if 
87AB:   not trailer -1 attached_to_cab 0@ 
jf 
@NONAME_785 
0407: store_coords_to 10@ 11@ 12@ from_car 0@ with_offset 0.0 0.0 0.0 
13@ = Car.Angle(0@)
046C: 15@ = car 0@ driver 
Model.Load(8@)
Model.Load(9@)
Model.Load(16@)
if 
and
   Model.Available(8@)
   Model.Available(9@)
   Model.Available(16@)
jf 
@NONAME_455 
Car.Destroy(0@)
wait 

17@ = Car.Create(8@10@11@12@)
Car.Angle(17@) = 13@
0229: set_car 17@ primary_color_to 4@ secondary_color_to 5@ 
0A11: set_car 17@ tertiary_color_to 6@ quaternary_color_to 16 
0407: store_coords_to 18@ 19@ 20@ from_car 17@ with_offset 0.0 -5.0 0.0 
0395: clear_area 1 at 18@ 19@ 20@ radius 3.0 
wait 

21@ = Car.Create(9@18@19@20@)
Car.Angle(21@) = 13@
0893: put_trailer 21@ on_cab 17@ 
Model.Destroy(8@)
Model.Destroy(9@)
if 
   
not 15@ == -1 
jf 
@NONAME_775 
0129: 22@ = create_actor_pedtype 24 model 16@ in_car 17@ driverseat 
Car.SetDriverBehaviour(17@, FollowRoad)
00AE: set_car 17@ traffic_behaviour_to 4 
Model.Destroy(16@)
Actor.RemoveReferences(22@)

:NONAME_775
Car.RemoveReferences(17@)
Car.RemoveReferences(21@)

:NONAME_785
8AE2:   not 0@ = random_vehicle_near_point 1@ 2@ 3@ in_radius 500.0 find_next 1 pass_wrecked 1 //IF and SET 

jf 
@NONAME_76 
jump 
@NONAME_11 


Wszystko dobrze działa, ale tylko przez jakąś minutę. Próbowałem już dziesiątki kombinacji, usuwałem mniej potrzebne linijki, zmieniałem ich kolejność, ale za każdym razem to samo - minuta i crash. Czy ktoś mógłby mi powiedzieć co może powodować taki problem?
Postów: 628 Dołączył: 2009-01-22
#
Przed pobieraniem kolorów nie sprawdzasz czy pojazd istnieje (wystarczy NOT IS_CAR_DEAD) - iterator CLEO4 POWINIEN to sprawdzać, ale jak widać nie jest nieomylny.


Jedno pytanie - po cholerę CIĄGLE dekompilujesz własne skrypty?

___________________
Moderator
http://i.imgur.com/Abvv63y
Śledź mój kanał Twitter by być na bieżąco ze wszystkimi aktualizacjami moich modów!
Postów: 294 Dołączył: 2011-07-27
#
Wstawienie tego NOT IS_CAR_DEAD pomogło. Co ciekawe miałem to wcześniej w moim skrypcie, ale usunąłem bo myślałem, że przez to skrypt będzie odrzucał pojazdy, które będą mieć chociażby 999 punktów życia (czyli delikatnie uszkodzone).

Silent napisał(a):
Jedno pytanie - po cholerę CIĄGLE dekompilujesz własne skrypty?

Nie piszę swoich skryptów wysokim poziomem, bo nie umiem :) I z tego powodu gdy chcę coś w nich zmienić to muszę dekompilować.
Poprzedni 1 2 Następny
Zaloguj się lub zarejestruj się, żeby pisać na forum.
Created & Powered by MakG