Czy wiesz, że... na forum możesz uzyskać pomoc nt. modowania GTA?
Strona główna forum Szukaj Rejestracja
Witaj, nieznajomy!
Poprzedni 1 2 Następny
Postów: 294 Dołączył: 2011-07-27
#
Mam problem, w moim skrypcie stosuję opcode 0AE2 którym wyszukuje pojazdy Tanker (oznaczam je zmienną 0@), a następnie do każdego znalezionego dołączam naczepę. I mam problem, bo jeżeli taka naczepa zostanie odpięta od pojazdu to na jej miejscu tworzy się nowa, a nie chcę żeby tak było. Gdy przypisuję do pojazdu do którego doczepiona została naczepa jakąś wartość w celu potwierdzenia że pojazd ten ma, lub miał już naczepę, to wtedy nie tworzy się naczepa w kolejnych znalezionych pojazdach, gdyż ta wartość odnosi się też do nich (każdy przypadkowy Tanker jest oznaczony tą samą zmienną). I tu moje pytanie jak odnieść się do jednego przypadkowego pojazdu nie odnosząc się do reszty?
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: 294 Dołączył: 2011-07-27
#
Niestety nie jest to wysoki poziom, ale uczyłem się na innych skryptach i jakoś tak mi zostało :)
Kod wygląda tak:

Kod:
//-------------MAIN---------------

0A95: enable_thread_saving 
thread 
'NONAME' 
9@ = 0 

:NONAME_20
wait 

4@ = 435 
068D: get_camera_position_to 3@ 1@ 2@ 
if 
0AE2: 0@ = random_vehicle_near_point 3@ 1@ 2@ in_radius 300.0 find_next 0 pass_wrecked 0 //IF and SET 

else_jump 
@NONAME_267 

:NONAME_77
if 
or
   Car.Model(0@) == #LINERUN
   Car.Model(0@) == #RDTRAIN
   Car.Model(0@) == #PETRO
else_jump 
@NONAME_237 
if 
and
   Car.Defined(0@)
   not 
Car.Wrecked(0@)
09D0:   car 0@ on_wheels 
else_jump 
@NONAME_237 
if 
and
   not 
9@ == 1 
87AB:   not trailer -1 attached_to_cab 0@ 
else_jump 
@NONAME_237 
Model.Load(4@)
if 
   
Model.Available(4@)
else_jump 
@NONAME_237 
6@ = Car.Create(4@, 0.0, 0.0, 0.0)
0893: put_trailer 6@ on_cab 0@ 
Model.Destroy(4@)
Car.RemoveReferences(0@)
Car.RemoveReferences(6@)
9@ = 1 

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

else_jump 
@NONAME_77 

:NONAME_267
jump 
@NONAME_20 
0A93: end_custom_thread 


Skrypt działa prawidłowo gdy nie ma wstawek ze zmienną 9@
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: 294 Dołączył: 2011-07-27
#
Wyświetla się nie cyfra, tylko litera "D", a dokładniej zdanie "VehicleCreatedBy: D" i co dalej?
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: 294 Dołączył: 2011-07-27
#
Same duże litery "VEHICLECREATEDBY"
Co ciekawe ta Twoja wstawka naprawiła mi to takie milisekundowe przycięcie podczas tworzenia pojazdu przez Car.Create (00A5), a w przypadku tego moda było to wyjątkowo wkurzające :)
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: 294 Dołączył: 2011-07-27
#
Teraz jest cyfra 1

Silent napisał(a):
A przycięcie spowodowane jest poprzez 038B, lepiej zapętlić sprawdzanie opcodem 0248, wtedy nie wymusi wczytania modeli od razu.

Ale ja nie użyłem 038B, chyba że chodzi Ci o 0247
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: 294 Dołączył: 2011-07-27
#
No dobra, skrypt powoli zaczyna się "oczyszczać", ale co z moim podstawowym pytaniem?

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

I jaki sens ma to ciągłe sprawdzanie dostępności, skoro nic się tam nie zmieni?
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: 294 Dołączył: 2011-07-27
#
Coś Ci się chyba pomyliło, no nie? :)
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: 294 Dołączył: 2011-07-27
#
No bo po odczepieniu naczepy od ciągnika, ta znowu się na nim tworzy (na tym samym ciągniku). A chcę żeby było tak, że gdy naczepa się odczepi to żeby nie tworzyła się druga na tym samym ciągniku, tylko żeby taki ciągnik jechał sam w takim przypadku.
No najlepiej zrobić to tak żeby było najlepiej :) Sam wiesz na pewno któro rozwiązanie będzie lepsze. Ja w sumie próbowałem zrobić coś podobnego do tego Twojego drugiego sposobu, z tym że zmieniałem życie pojazdu, ale jakoś mi to nie wyszło :)
Może na początek opisz tą pierwszą metodę...
Poprzedni 1 2 Następny
Zaloguj się lub zarejestruj się, żeby pisać na forum.
Created & Powered by MakG