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

Gabriel__

Известный
Проверенный
411
181
Как можно обойти игнор wait в командах 0B34? Пробовал и call scm function вызывать и gosub с wait, нигде wait не работает. Кроме такого:
CLEO:
0B34: "lol" @Noname
while true
    if 1@ == true
    then
    say "lol"
    wait 5000
    end
end
0BDE: 0
:Noname
1@ = true
SAMP.CmdRet()
^ Вот этот вариант в моем случае не подходит, т.к надо много таких условий, больше 30
Хороший вопрос, видимо врятли можно исправить это. Изза игнора wait нельзя использовать бесконечные циклы. Все выносят код в цикле. Скажите можно ли исправить.
 

hnnssy

Известный
Друг
2,684
2,747
Как можно обойти игнор wait в командах 0B34? Пробовал и call scm function вызывать и gosub с wait, нигде wait не работает. Кроме такого:
CLEO:
0B34: "lol" @Noname
while true
    if 1@ == true
    then
    say "lol"
    wait 5000
    end
end
0BDE: 0
:Noname
1@ = true
SAMP.CmdRet()
^ Вот этот вариант в моем случае не подходит, т.к надо много таких условий, больше 30
Либо дели тогда на несколько потоков, либо используй глобальные переменные сампфункса. Я второй метод использую.
 

Bogach

Активный
558
27
Ребят. Не знаете ли как можно быстро узнать нужные координаты экрана? Для размещения например диалога, ну или просто текста, а то наугад вписывать координаты и потом смотреть в игре и если не подошло, опять вписывать другие коорд. и проверять в игре довольно долго)
 

hnnssy

Известный
Друг
2,684
2,747
Ребят. Не знаете ли как можно быстро узнать нужные координаты экрана? Для размещения например диалога, ну или просто текста, а то наугад вписывать координаты и потом смотреть в игре и если не подошло, опять вписывать другие коорд. и проверять в игре довольно долго)
Сделай себе скрипт, который будет показывать координаты курсора и так подбирай нужные тебе.
 

DarkP1xel

Сила воли наше всё.
BH Team
3,635
4,959
Можно например вот так:

CLEO:
{$CLEO}
0B34: samp register_client_command "GetCur" to_label @GetCur

WHILE TRUE
WAIT 0
    IF 0@ == 1
    THEN 0B8D: samp set_cursor_mode 2
    REPEAT
    WAIT 0
        IF 0B8C:    samp is_cursor_active
        THEN 
            0B5E: get_cursor_pos 1@ 2@
            0AD1: show_formatted_text_highpriority "%d~N~%d" time 1000 1@ 2@
        ELSE 0B8D: samp set_cursor_mode 2
        END
    UNTIL 0@ == 0
    0B8D: samp set_cursor_mode 0
    END
END

:GetCur
0B12: 0@ = 0@ XOR 1
0B43: samp cmd_ret

Только не забывай, что разрешения у всех разные и чтобы у всех было одинаково нужно произвести ещё пару вычислений.
 
  • Нравится
Реакции: Bogach

DarkP1xel

Сила воли наше всё.
BH Team
3,635
4,959
CLEO:
{$CLEO}
0B34: samp register_client_command "Go2Mark" to_label @Go2Mark
0BDE: pause_thread 0

:Go2Mark
IF 0AB6: store_target_marker_coords_to 0@ 1@ 2@
THEN
    04E4: refresh_game_renderer_at 0@ 1@
    03CB: set_rendering_origin_at 0@ 1@ 2@
    02CE: 2@ = ground_z_at 0@ 1@ 10000.0
    00A1: put_actor $PLAYER_ACTOR at 0@ 1@ 2@
END
0B43: samp cmd_ret
 

Pawka_SS

Новичок
7
1
Либо дели тогда на несколько потоков, либо используй глобальные переменные сампфункса. Я второй метод использую.
Знаю только про глобальные функции. А что за глобальные переменные сампфункса?
Я пробовал с глобальными переменными, но тогда у меня не работает ввод в диалог, будто условие просто не выполняется
CLEO:
0B3C:  samp is_dialog_responded id 224 button 24@ list_item 0 input_text 25@
    then
        if 24@ == 1 // ???? ????? enter
        then                                        
            0C1A: 26@ = atoi 25@
            if 26@ == 1
            then
                $interior = true
            end
////
while true
   if $interior == true
       then
       0BD1: 88
       $interior = false
   end
end
 

hnnssy

Известный
Друг
2,684
2,747
Знаю только про глобальные функции. А что за глобальные переменные сампфункса?
Я пробовал с глобальными переменными, но тогда у меня не работает ввод в диалог
CLEO:
0B3C:  samp is_dialog_responded id 224 button 24@ list_item 0 input_text 25@
    then
        if 24@ == 1 // ???? ????? enter
        then                                         
            0C1A: 26@ = atoi 25@
            if 26@ == 1
            then
                $interior = true
            end
////
while true
   if $interior == true
       then
       0BD1: 88
   end
end
0BFC: set_global_var "SFGLOBAL1" = 1@
0BFD: 1@ = get_global_var "SFGLOBAL1"
 
  • Нравится
Реакции: Pawka_SS

Goldfish

Известный
106
22
подскажите плиз код создания такого экрана
fc3Hghb3eyg.jpg


раньше по забугорным сайтам лазил, помню попадался код сейчас не найти, мб кто знает как это сделать?
или как кулинг кубом такой двойной экран создать
 

Gabriel__

Известный
Проверенный
411
181
CLEO:
{$CLEO}
0B34: samp register_client_command "Go2Mark" to_label @Go2Mark
0BDE: pause_thread 0

:Go2Mark
IF 0AB6: store_target_marker_coords_to 0@ 1@ 2@
THEN
    04E4: refresh_game_renderer_at 0@ 1@
    03CB: set_rendering_origin_at 0@ 1@ 2@
    02CE: 2@ = ground_z_at 0@ 1@ 10000.0
    00A1: put_actor $PLAYER_ACTOR at 0@ 1@ 2@
END
0B43: samp cmd_ret
Зачем прогрузку мира лучше сделать так как я
Код:
0000:
repeat
wait 1000
until samp.Available()
0B34: samp register_client_command "tp" to_label @cmd

while true
wait 0
    if 15@ == 1
    then
        if 0AB6: store_target_marker_coords_to 0@ 1@ 2@ // IF and SET
        then
        Actor.PutAt($PLAYER_ACTOR,0@,1@,-100.0)
        wait 5
        Actor.PutAt($PLAYER_ACTOR,0@,1@,-100.0)
        end
        15@ = 0  
    end
 
end


:cmd
15@ = 1
samp.CmdRet()
/CODE]
 

fonarik

Известный
206
3
Ребят. Не знаете ли как можно быстро узнать нужные координаты экрана? Для размещения например диалога, ну или просто текста, а то наугад вписывать координаты и потом смотреть в игре и если не подошло, опять вписывать другие коорд. и проверять в игре довольно долго)

и не надо выходить,простой клео скрипт,который позволяет не выходя из игры подогнать координаты и размер диалога.Удачи х)
сначала писал полностью на кейвордах,потом вспомнил,что у нас они разные и поэтому немного пришлось переделать.
{$CLEO .cs}
0000:
// © Кот
repeat
wait 100
until 0afa:
0ac8: 1@ 256
0b34: "cmd" @cmd
0b80: 1@ "Dialog is set pos"
0b84: 1@ 0 /* X */ 0 /* Y */ 255 300 // координаты верхнего левого угла
0b86: 1@ true

WHILE TRUE
wait 0
if 0@ == true
then
0b84: 1@ 4@ /* X Y */ 5@ 6@ /* size */ 7@
0ad1: "New pos: %d %d /n ~g~New size: %d %d" 1500 4@ 5@ 6@ 7@
end
0@ = false
END

:cmd
0@ = true
0b35: 2@
0ad4: 3@ 2@ "%d%d%d%d" 4@ 5@ 6@ 7@
0b43:
 

Sempati

Новичок
19
0
Подскажите пожалуйста смещение в матрице( RwMatrix *matrix ) объекта, по которому находятся углы поворота.