Postów:
294
Dołączył:
2011-07-27
Napisano dnia: 2012-10-14 19:13:28
Witam, mam pytanie czy istnieje opcode którym dałoby się sprawdzić czy w danym pojeździe są włączone syreny, czy nie? W sumie znalazłem dwa opcody (0ABD i 0397), ale one chyba są do wykonywania czynności, bo jak daję je do sprawdzenia to mi crashuje grę.
Postów:
628
Dołączył:
2009-01-22
Napisano dnia: 2012-10-14 20:26:59
0ABD nie może crashować gry, chyba że używasz go źle.
___________________
Moderator
Postów:
294
Dołączył:
2011-07-27
Napisano dnia: 2012-10-15 15:34:56
Nie wiem czy dobrze go użyłem, ale wydaje mi się że tak. Napisałem taki skrypt na to że w pewnych sytuacjach graczowi nie wzrasta poziom poszukiwań. Dzieje się tak gdy gracz ma na sobie strój policjanta, porusza się pojazdem policji, lub innym pojazdem uprzywilejowanym, ale wtedy tylko jeśli jedzie na sygnale.
Skrypt wygląda następująco (znowu wygląda jak po dekompilacji, ale jeszcze nie ogarniam tego wysokiego poziomu):
Kod:
//-------------MAIN---------------
thread 'NONAME'
:NONAME_11
03C0: 0@ = actor $PLAYER_ACTOR car
if
Player.Defined($PLAYER_CHAR)
else_jump @NONAME_11
if
not Player.WantedLevel($PLAYER_CHAR) > 0
else_jump @NONAME_135
if or
Actor.DrivingPoliceVehicle($PLAYER_ACTOR)
0ABD: vehicle 0@ siren_on
0500: player $PLAYER_CHAR skin == "POLICETR" on_bodypart 17
else_jump @NONAME_172
01F0: set_max_wanted_level_to 0
jump @NONAME_11
:NONAME_135
if
0500: player $PLAYER_CHAR skin == "POLICETR" on_bodypart 17
else_jump @NONAME_172
09D4: suspend_wanted_level
jump @NONAME_11
:NONAME_172
01F0: set_max_wanted_level_to 6
jump @NONAME_11
I problem polega w tym, opcode 0ABD powoduje crash gry, bez niego wszystko działa.
Postów:
628
Dołączył:
2009-01-22
Napisano dnia: 2012-10-15 16:48:28
Jako że zastosowałeś if or, 0ABD próbuje sprawdzić syrenę nawet wtedy, gdy gracz nie jest w pojeździe. Poza tym ustawianie max WL na 6 cały czas trochę rozwali wątek fabularny.
Nie jest to ani najpiękniejszy, ani najkrótszy skrypt, ale powinien działać w porządku.
Kod:
0000: WL
while true
0001: wait 250 ms
if
0256: player 0 defined
then
if
010F: player 0 wanted_level > 0
then
if
0500: player 0 skin ==
"POLICETR" on_bodypart 17
then
09D4: suspend_wanted_level
end
else
if
0500: player 0 skin ==
"POLICETR" on_bodypart 17
then
if
0039: 1@ == 0
then
050F: get_max_wanted_level_to
1@
01F0: set_max_wanted_level_to 0
end
else
if
00DF: actor
$PLAYER_ACTOR driving
then
03C0: 0@ = actor
$PLAYER_ACTOR car
if or
056C: actor
$PLAYER_ACTOR driving_police_car
0ABD: vehicle
0@ siren_on
then
if
0039: 1@ == 0
then
050F: get_max_wanted_level_to
1@
01F0: set_max_wanted_level_to 0
end
else
if
8039: not 1@ == 0
then
01F0: set_max_wanted_level_to
1@
0006: 1@ = 0
end
end
else
if
8039: not 1@ == 0
then
01F0: set_max_wanted_level_to
1@
0006: 1@ = 0
end
end
end
end
end
end
___________________
Moderator
Postów:
294
Dołączył:
2011-07-27
Napisano dnia: 2012-10-15 17:55:45
No teraz wszystko działa bez żadnych problemów ;-) A poleciłbyś jakiś poradnik, który dobrze by wyjaśniał tworzenie konstrukcji skryptów wysokiego poziomu ?
Postów:
628
Dołączył:
2009-01-22
Napisano dnia: 2012-10-15 17:59:44
___________________
Moderator
Postów:
294
Dołączył:
2011-07-27
Napisano dnia: 2012-10-15 18:05:54
Dzięki, może uda mi się to zrozumieć, bo na razie nie jest to dla mnie za bardzo jasne ;-)
W sumie temat można zamknąć i ten poprzedni też