Вопросы по CLEO-скриптингу

azdsfbzxv

Новичок
73
6
Скрипт определяющий количество пассажиров. Иногда показывает неверное количество пассажиров.

CLEO:
{$CLEO .cs}

//-------------MAIN---------------
0000: NOP

:Noname_2
0001: wait 0 ms
0AFA:  is_samp_available
004D: jump_if_false @Noname_2

:Noname_15
0001: wait 0 ms
0A8E: 0@ = 0 + 0 // int

:Noname_28
0A8E: 0@ = 0@ + 1 // int
8039:   not  0@ == 1000
004D: jump_if_false @Noname_15
0B23:  samp is_player_connected 0@
004D: jump_if_false @Noname_28
0B20: samp 1@ = actor_handle_by_samp_player_id 0@
056D:   actor 1@ defined
004D: jump_if_false @Noname_28
00DF:   actor 1@ driving
004D: jump_if_false @Noname_28
03C0: 2@ = actor 1@ car
004D: jump_if_false @Noname_28
01E9: 3@ = car 2@ num_passengers
00D6: if and
0AB0:   key_pressed 16
0AB0:   key_pressed 49
004D: jump_if_false @Noname_235
0AF9: samp say_msg "/r [Взвод]: Начал патруль. Напарников: %i" 3@
0001: wait 5000 ms
0002: jump @Noname_28

:Noname_235
00D6: if and
0AB0:   key_pressed 16
0AB0:   key_pressed 50
004D: jump_if_false @Noname_28
0AF9: samp say_msg "/r [Взвод]: Начал сопровождение, Положение: замыкающий, напарников: %i" 3@
0001: wait 5000 ms
0002: jump @Noname_28

Я так понял, что иногда показывает количество пасажиров не в моем авто. И добавил проверку, что пассажир находится от меня в радиусе 2 метров, после определения количества пассажиров:

00F4: actor $PLAYER_ACTOR near_actor 19@ radius 2.0 2.0 sphere 0 in_car
004D: jump_if_false @Noname_28

Но игра начала крашить, как только рядом оказывалось какое то авто. В чём ошибка? Или какую другую проверку мне добавить, что бы определяло количество пассажиров именно в моём авто?
 

SR_team

like pancake
BH Team
4,720
6,372
Скрипт определяющий количество пассажиров. Иногда показывает неверное количество пассажиров.

CLEO:
{$CLEO .cs}

//-------------MAIN---------------
0000: NOP

:Noname_2
0001: wait 0 ms
0AFA:  is_samp_available
004D: jump_if_false @Noname_2

:Noname_15
0001: wait 0 ms
0A8E: 0@ = 0 + 0 // int

:Noname_28
0A8E: 0@ = 0@ + 1 // int
8039:   not  0@ == 1000
004D: jump_if_false @Noname_15
0B23:  samp is_player_connected 0@
004D: jump_if_false @Noname_28
0B20: samp 1@ = actor_handle_by_samp_player_id 0@
056D:   actor 1@ defined
004D: jump_if_false @Noname_28
00DF:   actor 1@ driving
004D: jump_if_false @Noname_28
03C0: 2@ = actor 1@ car
004D: jump_if_false @Noname_28
01E9: 3@ = car 2@ num_passengers
00D6: if and
0AB0:   key_pressed 16
0AB0:   key_pressed 49
004D: jump_if_false @Noname_235
0AF9: samp say_msg "/r [Взвод]: Начал патруль. Напарников: %i" 3@
0001: wait 5000 ms
0002: jump @Noname_28

:Noname_235
00D6: if and
0AB0:   key_pressed 16
0AB0:   key_pressed 50
004D: jump_if_false @Noname_28
0AF9: samp say_msg "/r [Взвод]: Начал сопровождение, Положение: замыкающий, напарников: %i" 3@
0001: wait 5000 ms
0002: jump @Noname_28

Я так понял, что иногда показывает количество пасажиров не в моем авто. И добавил проверку, что пассажир находится от меня в радиусе 2 метров, после определения количества пассажиров:

00F4: actor $PLAYER_ACTOR near_actor 19@ radius 2.0 2.0 sphere 0 in_car
004D: jump_if_false @Noname_28

Но игра начала крашить, как только рядом оказывалось какое то авто. В чём ошибка? Или какую другую проверку мне добавить, что бы определяло количество пассажиров именно в моём авто?
Вот тебе функция, которая считает количество пассажиров в заданном транспорте.
Использование: 0AB1: call @GetPassengers 1 _CarHandle 0@
где 0@ - хендл машины, в которой ты хочешь узнать количество пассажиров

CLEO:
:GetPassengers
0A97: 0@ = car 0@ struct
0A8E: 1@ = 0@ + 1156
000A: 0@ += 1124
4@ = 0
for 2@ = 0@ to 1@ Step 4
    0A8D: 3@ = read_memory 2@ size 4 virtual_protect 1
    if 3@ <> 0
    jf continue
    4@++
end
ret 1 4@
 
  • Нравится
Реакции: azdsfbzxv

itsLegend

Фонд борьбы за жуков 🐞
Администратор
2,696
1,460
Почему не просто?:
CLEO:
03C0: 0@ = actor $PLAYER_ACTOR car
if 0@ <> 0
then
    01E9: 1@ = car 0@ num_passengers
end
 
  • Нравится
Реакции: azdsfbzxv

azdsfbzxv

Новичок
73
6
Как узнать координаты скина на экране?
Так:
00A0: store_actor 1@ position_to 29@ 30@ 31@
Записать в переменные 29@ 30@ 31@ ( X Y Z ) координаты актера 1@
Или так:
00A0: store_actor $PLAYER_ACTOR position_to 29@ 30@ 31@
Перевести в экранные координаты:
0B55: convert_3D_coords 29@ 30@ 31@ to_screen 29@ 30@
Или координаты костей наверное.Но я ещё сам не разбирался. Вот видел в видео одного из участников этого форума:
 
  • Нравится
Реакции: Сэнд

azdsfbzxv

Новичок
73
6
Почему не просто?:
CLEO:
03C0: 0@ = actor $PLAYER_ACTOR car
if 0@ <> 0
then
    01E9: 1@ = car 0@ num_passengers
end
Спасибо большое. Пока работает стабильно
CLEO:
{$CLEO .cs}

//-------------MAIN---------------
0000: NOP

:Noname_2
0001: wait 0 ms
0AFA:  is_samp_available
004D: jump_if_false @Noname_2

:Noname_15
0001: wait 0 ms
0256:   player $PLAYER_ACTOR defined
004D: jump_if_false @Noname_15
0449:   actor $PLAYER_ACTOR in_a_car
004D: jump_if_false @Noname_15
03C0: 0@ = actor $PLAYER_ACTOR car
00D6: if
8039:   not  0@ == 0
004D: jump_if_false @Noname_15
01E9: 1@ = car 0@ num_passengers
00D6: if and
0AB0:   key_pressed 16
0AB0:   key_pressed 49
004D: jump_if_false @Noname_165
0AF9: samp say_msg "/r [Взвод]: Начал патруль ЛВа. Напарников: %i" 1@ 
0001: wait 5000 ms
0002: jump @Noname_15

:Noname_165
00D6: if and
0AB0:   key_pressed 16
0AB0:   key_pressed 50
004D: jump_if_false @Noname_15
0AF9: samp say_msg "/r [Взвод]: Начал сопровождение, положение: замыкающий, напарников: %i" 1@ 
0001: wait 5000 ms
0002: jump @Noname_15