Czy wiesz, że... możesz podsyłać newsy, artykuły, pliki i zdjęcia?
Strona główna forum Szukaj Rejestracja
Witaj, nieznajomy!
Postów: 294 Dołączył: 2011-07-27
#
Chciałbym zrobić moda który będzie sprawiał, że gdy CJ dostanie 6 stopień poszukiwań to jeżdżące za nim czołgi będą do niego strzelać. I tu mam problem, bo nie wiem jak zrobić żeby czołg strzelał do gracza. Takiego opcodu chyba nie ma, do Hydry jest 08A2, a do czołgu nie ma. Czy ktoś wiedziałby jak zrobić coś takiego?
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ć.
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: 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: 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: 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: 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
#
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: 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: 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ę...
Postów: 294 Dołączył: 2011-07-27
#
Coś Ci się chyba pomyliło, no nie? :)
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: 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: 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: 294 Dołączył: 2011-07-27
#
Wyświetla się nie cyfra, tylko litera "D", a dokładniej zdanie "VehicleCreatedBy: D" i co dalej?
Created & Powered by MakG