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

Просто

Новичок
2
0
Ид это тоже число, %d вместо %s. И ид ты берешь не из своего хендла. Твой хендл - $player_actor
И после регистрации команды поставь беск. цикл или паузу
Окей, нужно не из своего хендла. Опкод тогда какой использовать, чтобы свой id узнать и всунуть его в команду?
 

Akatosh

Известный
21
0
Появилась проблема со скриптом. Нужно, чтобы на экране отрисовывалась точка(надпись с расcтоянием), которая все время указывала на определенные координаты.

Была проблема с 0B55: convert_3D_coords 1@ 2@ 3@ to_screen 4@ 5@ - он "отзеркаливал" мне координаты, давая не только где надо, но ещё и за спиной.

Тут помогла проверка if 00C2: sphere_onscreen 11@ 12@ 13@ radius 0.0
Надпись действительно больше не отзеркаливалась, но почему-то отрисовывалась только с расстояния 800м. Изменение "radius" увеличивало это расстояние, но ненамного.

Код:
{$CLEO}
0000:

0B6D: render 0@ = create_font "Arial" height 11 flags 5
0AC8: 29@ = allocate_memory_size 4
11@ = 637.3794
12@ = -1228.2651
13@ = 17.8814

:1
wait 0
if 00C2: sphere_onscreen 11@ 12@ 13@ radius 0.0
jf @1
04C4: store_coords_to 1@ 2@ 3@ from_actor $PLAYER_ACTOR with_offset 0.0 0.0 0.0
0B55: convert_3D_coords 11@ 12@ 13@ to_screen 4@ 5@
0509: 7@ = distance_between_XY 1@ 2@ and_XY 11@ 12@
008E: 25@ = float 7@ to_integer
0AD3: 29@ = format "%d m" 25@
0B6F: render font 0@ draw_text 29@ pos 4@ 5@ color -1
0AC9: free_allocated_memory 29@
jump @1

Как сделать так, чтобы точка отрисовывалась на любом расстоянии?
 

Boyenerji

Известный
97
1
Всем привет.
Объясню логику скрипта: бежим на определенные координаты и если в заданных координатах стоит игрок - останавливаем скрипт.
Скрипт действительно останавливается, но потом он не запускается. В чем может быть проблема?

Код:
CLEO:
{$CLEO}
0000:


:1
while true
wait 0
    if
    0AB0: 90  // кнопка z
    then
        0ACC: show_text_lowpriority "Suc" time 2000 //тест скрипта
        0A92: create_custom_thread "test.CS"  //
        0A93: end_custom_thread  //
        break
    end
    if and
    0AB0: 104 //Кнопка 8
    then
        repeat
        wait 0
        if or
         0AB0: 103   //если была нажата кнопка 7
         20@ == 1  //если нашли игрока за столом
        then
         break
         20@ = 0
        end
        for 15@ = 0 to 999
    if Samp.IsPlayerConnected(15@)
    then
    16@ = Samp.GetActorHandleByPlayerID(15@)
        if 056D: actor 16@ defined
        then
        //0619: enable_actor 16@ collision_detection 0
         //if 80FE: actor 16@ sphere 0 in_sphere 2171.7832 -2255.4019 13.3039 radius 0.5 0.5 1.0
         if 02CB:   actor 16@ bounding_sphere_visible
         then
         if 00FE: actor 16@ sphere 0 in_sphere 2553.6868 -1291.0055 1044.1250 radius 0.3 0.3 1.0
         then
         0ACD: show_text_highpriority "Ygy" time 1000
         20@ = 1
         end
         end     
        end
    end
end
        0AB1: call_scm_func @set_angle 2 2541.3088 -1289.0999
        0AB1: call_scm_func @get_distance 2 2541.3088 -1289.0999 0@
        //0AB1: call_scm_func @plcol 2 20@ 21@
        0B56: set_game_key 1 state -128
        0B56: set_game_key 16 state -128
        until 00ED:   actor $PLAYER_ACTOR sphere 0 near_point 2541.3088 -1289.0999 radius 0.5 0.5 on_foot
   end
end
 

itsLegend

Фонд борьбы за жуков 🐞
Администратор
2,696
1,460
Всем привет.
Объясню логику скрипта: бежим на определенные координаты и если в заданных координатах стоит игрок - останавливаем скрипт.
Скрипт действительно останавливается, но потом он не запускается. В чем может быть проблема?

Код:
CLEO:
{$CLEO}
0000:


:1
while true
wait 0
    if
    0AB0: 90  // кнопка z
    then
        0ACC: show_text_lowpriority "Suc" time 2000 //тест скрипта
        0A92: create_custom_thread "test.CS"  //
        0A93: end_custom_thread  //
        break
    end
    if and
    0AB0: 104 //Кнопка 8
    then
        repeat
        wait 0
        if or
         0AB0: 103   //если была нажата кнопка 7
         20@ == 1  //если нашли игрока за столом
        then
         break
         20@ = 0
        end
        for 15@ = 0 to 999
    if Samp.IsPlayerConnected(15@)
    then
    16@ = Samp.GetActorHandleByPlayerID(15@)
        if 056D: actor 16@ defined
        then
        //0619: enable_actor 16@ collision_detection 0
         //if 80FE: actor 16@ sphere 0 in_sphere 2171.7832 -2255.4019 13.3039 radius 0.5 0.5 1.0
         if 02CB:   actor 16@ bounding_sphere_visible
         then
         if 00FE: actor 16@ sphere 0 in_sphere 2553.6868 -1291.0055 1044.1250 radius 0.3 0.3 1.0
         then
         0ACD: show_text_highpriority "Ygy" time 1000
         20@ = 1
         end
         end    
        end
    end
end
        0AB1: call_scm_func @set_angle 2 2541.3088 -1289.0999
        0AB1: call_scm_func @get_distance 2 2541.3088 -1289.0999 0@
        //0AB1: call_scm_func @plcol 2 20@ 21@
        0B56: set_game_key 1 state -128
        0B56: set_game_key 16 state -128
        until 00ED:   actor $PLAYER_ACTOR sphere 0 near_point 2541.3088 -1289.0999 radius 0.5 0.5 on_foot
   end
end

CLEO:
         break
         20@ = 0
Тут наверно сам поймешь
 

ishi

Известный
493
110
Переменную обнулять
Я могу быть конечно не прав, но у тебя весь скрипт в одном цикле, и любой брейк его просто убивает. Что должно заново его запустить?
У тебя же нет ничего, что сработало бы, когда цикл неактивен
 

Boyenerji

Известный
97
1
Я могу быть конечно не прав, но у тебя весь скрипт в одном цикле, и любой брейк его просто убивает. Что должно заново его запустить?
У тебя же нет ничего, что сработало бы, когда цикл неактивен
У меня break только из repeat, вышел с repeat - перешёл на while. While всегда работает и ждет нажатие кнопки.
 

Boyenerji

Известный
97
1
Ребят, поч не робит?
Мне нужно ждать до тех пор, пока у бота не появится анимация 1189.

CLEO:
 23@ = SAMP.PlayerAnimationID($PLAYER_ACTOR)
        repeat
        wait 0
        until 23@ == 1189
        0ACD: show_text_highpriority "anim robit" time 1000
 

BlackKnigga

Известный
BH Team
922
445
Ребят, поч не робит?
Мне нужно ждать до тех пор, пока у бота не появится анимация 1189.

CLEO:
        23@ = SAMP.PlayerAnimationID($PLAYER_ACTOR)
        repeat
        wait 0
        until 23@ == 1189
        0ACD: show_text_highpriority "anim robit" time 1000
Анимацию надо в цикле получать


CLEO:
        repeat
        wait 0
    23@ = SAMP.PlayerAnimationID($PLAYER_ACTOR)
        until 23@ == 1189
        0ACD: show_text_highpriority "anim robit" time 1000