Czy wiesz, że... rejestracja trwa tylko 20 sekund?
Strona główna forum Szukaj Rejestracja
Witaj, nieznajomy!
Postów: 628 Dołączył: 2009-01-22
#
Shadow Mesh dodano w SA na PC (COL3, VC używa COL1), więc o ile dobrze wiem to nie ma takiej możliwości. Pamiętam że ktoś prosił o dodanie czegoś takiego do MVL.

___________________
Moderator
http://i.imgur.com/Abvv63y
Śledź mój kanał Twitter by być na bieżąco ze wszystkimi aktualizacjami moich modów!
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: 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: 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: 628 Dołączył: 2009-01-22
#
Chodzi o to, że nie zauważyłem co napisałeś pod skryptem (bo rzeczywiście tak było, nie zauważyłem tego)? Jeśli nie, to w czym obecnie tkwi problem, bo chyba przestałem rozumieć?

EDIT:

OK. Dobra, w porządku, widzę już o co chodzi :P

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ł?

___________________
Moderator
http://i.imgur.com/Abvv63y
Śledź mój kanał Twitter by być na bieżąco ze wszystkimi aktualizacjami moich modów!
Postów: 628 Dołączył: 2009-01-22
#
Ja napisał(a):
ta flaga 9@ wygląda na bardzo niepotrzebną - ustawiasz ją na 1 przy pierwszym pojeździe i dalej CIĄGLE jest 1. To jest przyczyną problemów.

___________________
Moderator
http://i.imgur.com/Abvv63y
Śledź mój kanał Twitter by być na bieżąco ze wszystkimi aktualizacjami moich modów!
Postów: 628 Dołączył: 2009-01-22
#
Ano, rzeczywiście, rozpędziłem się. W takim razie zamień

Kod:
Model.Load(4@) 
if 
    
Model.Available(4@) 
else_jump  
@NONAME_237 


na

Kod:
0247: load_model 4@

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


A co do 1 - OK, to oznacza że "usuwanie referencji" (ten opcode tego NIE robi, ale już określiłem to tak, jak błędnie określa to klasa) z pojazdu szukanego przez 0AE2 nie jest potrzebne i będzie tylko powodować błędy. Wywalić.

___________________
Moderator
http://i.imgur.com/Abvv63y
Śledź mój kanał Twitter by być na bieżąco ze wszystkimi aktualizacjami moich modów!
Postów: 628 Dołączył: 2009-01-22
#
To zmień w opcjach by ciągiznaków nie były konwertowane na duże litery (w moim spolszczeniu Narzędzia -> Opcje -> Formatuj [nie zauważyłem tego błędu] -> Konwertowanie znaków -> Tak jak jest).

A przycięcie spowodowane jest poprzez 038B, lepiej zapętlić sprawdzanie opcodem 0248, wtedy nie wymusi wczytania modeli od razu.

___________________
Moderator
http://i.imgur.com/Abvv63y
Śledź mój kanał Twitter by być na bieżąco ze wszystkimi aktualizacjami moich modów!
Postów: 628 Dołączył: 2009-01-22
#
Litera? A masz konwertowanie znaków ustawione na konwersję na wielkie litery* czy wyłączyłeś to?

* W grze było "VehicleCreatedBy" czy "VEHICLECREATEDBY"?

___________________
Moderator
http://i.imgur.com/Abvv63y
Śledź mój kanał Twitter by być na bieżąco ze wszystkimi aktualizacjami moich modów!
Postów: 628 Dołączył: 2009-01-22
#
Skrypt jest pisany niskopoziomowo, ale ma konstrukcję skryptu wysokiego poziomu, to dziwne :P

Skrypt jest prawie dobry, ale ta flaga 9@ wygląda na bardzo niepotrzebną - ustawiasz ją na 1 przy pierwszym pojeździe i dalej CIĄGLE jest 1. To jest przyczyną problemów. Ponadto, usunąłbym linijkę Car.RemoveReferences(0@), bo wątpię że 0AE2 oznacza pojazd jako "używany przez skrypt". Zaraz skonsultuję to z kodem źródłowym CLEO4 i zedytuję.

Edit:
Nie jestem pewien czy CLEO4.1 oznacza tak pojazd. CLEO 4.2a (nie polecam - nie pobierać, bo nie działa!) ma tą linię wyrzuconą ze skryptu, ALE 4.1 mogło ją mieć.

Jeśli chcesz być pewien, zrób test - samemu mi się nie chce go robić z wrodzonego lenistwa, ale dam Ci kod do sprawdzenia czy pojazd jest oznaczany jako używany przez skrypt. Wklej to gdzieś przy podczepianiu naczepy:

Kod:
0A97: 30@ = car 0@ struct
000A: 30@ += 0x4A4
0A8D: 31@ = read_memory 30@ size 1 virtual_protect 0
0AD1: show_formatted_text_highpriority "VehicleCreatedBy: %d" time 2000 31@
wait 
2000


Następnie sprawdź proszę, jaka cyfra się wyświetla i tu zapostuj - jeśli to 2, MARK_VEHICLE_AS_NO_LONGER_NEEDED będzie potzebne. Jeśli to inna cyfra, nie.

___________________
Moderator
http://i.imgur.com/Abvv63y
Śledź mój kanał Twitter by być na bieżąco ze wszystkimi aktualizacjami moich modów!
Postów: 628 Dołączył: 2009-01-22
#
Podaj kod, bo problem na pewno leży w nim, a nie w sposobie "odnoszenia się do pojazdów". Chyba wiem o co może chodzić, ale lepiej byłoby spojrzeć na skrypt.

___________________
Moderator
http://i.imgur.com/Abvv63y
Śledź mój kanał Twitter by być na bieżąco ze wszystkimi aktualizacjami moich modów!
Postów: 628 Dołączył: 2009-01-22
#
To zablokuj ten klawisz, wpisując mu przez CLEO wartość 0. Procedura jest taka sama jak przy hamowaniu, z tym że offset do tego klawisza to 0x20.

___________________
Moderator
http://i.imgur.com/Abvv63y
Śledź mój kanał Twitter by być na bieżąco ze wszystkimi aktualizacjami moich modów!
Postów: 628 Dołączył: 2009-01-22
#
To adresy funkcji CPad::GetPad kolejno dla EXE 1.0 i 1.01. Zwracają one wskaźnik na klasę CPad, która przechowuje informacje m.in. o wciśniętych klawiszach. Mogłem w skrypcie wbić stały adres, ale wtedy skrypt nie współpracowałby z europejskimi EXE.

___________________
Moderator
http://i.imgur.com/Abvv63y
Śledź mój kanał Twitter by być na bieżąco ze wszystkimi aktualizacjami moich modów!
Postów: 628 Dołączył: 2009-01-22
#
Weź te same wartości, co są w moim skrypcie.

___________________
Moderator
http://i.imgur.com/Abvv63y
Śledź mój kanał Twitter by być na bieżąco ze wszystkimi aktualizacjami moich modów!
Postów: 628 Dołączył: 2009-01-22
#
To jest tylko część układanki. Dokładniej, linijka którą podałeś tylko 'przygotowuje' zmienną 10@ do tego, by z jej użyciem operować padem.

Kod stricte odpowiedzialny za wciskanie klawisza to:
Kod:
0A8E: 11@ = 10@ + 6@
WRITE_MEMORY 11@ 2 9@ FALSE


Przy czym 6@ dla Ciebie powinno mieć wartość 0x1C (krzyżyk), a 9@ to liczba z przedziału 0 - 255, w zależności jak mocno chcesz wcisnąć klawisz.

___________________
Moderator
http://i.imgur.com/Abvv63y
Śledź mój kanał Twitter by być na bieżąco ze wszystkimi aktualizacjami moich modów!
Created & Powered by MakG