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

spiceman

GOWNIK <3
104
35
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Код:
{$CLEO .cs}
0000:

0B34: samp register_client_command "ap" to_label @cmd
alloc 1@ 128

while true
wait 0
if 0@ == true
then
if 0C5D: samp textdraw 2221 is_exists
then
0C5A: samp textdraw 2221 get_string_to 1@
if 0C14: strcmp string1 1@ string2 "Press ~g~~k~~CONVERSATION_YES~"  
then  
wait 2000  
chatmsg "[Внимание]: Автонажатие работает. | Press Y" color 0xFF0000  
0B56: set_game_key 10 state 0x80
wait 100
0B56: set_game_key 10 state 0x0  
else
if 0C14: strcmp string1 1@ string2 "Press ~g~~k~~CONVERSATION_NO~"
then
wait 2000
chatmsg "[Внимание]: Автонажатие работает. | Press N" color 0xFF0000
0B56: set_game_key 11 state 0x80
wait 100
0B56: set_game_key 11 state 0x0
end
end
end
end
end

:cmd
if 0@ == false
then
print "~g~Actived" 1500
0@ = true
else
print "~r~Deactived" 1500
0@ = false
end
SAMP.CmdRet()
Но тогда нажимаются не нужные клавиши..
ну почему ты такой невнимательный
"Статусы -128 / 128 предназначены только для тех клавиш, которые имеют два действия(в таблице их действия указаны через /)"
тебе нужно использовать не 0x80, а 0xFF
 

Vovich

HOT
Проверенный
717
196
ну почему ты такой невнимательный
"Статусы -128 / 128 предназначены только для тех клавиш, которые имеют два действия(в таблице их действия указаны через /)"
тебе нужно использовать не 0x80, а 0xFF
К сожалению ничего не изменилось.
Стринг проходит нормально по прежнему правильно узнает какую клавишу нужно нажимать....
Но нажимает получается противоположную, так как "шкала" уменшаеться когда нажимаешь не ту клавишу.
Конечно больше всего вероятность, что я что то не правильно делаю... Но могу видео снять..
 

nSTYLE

Известный
13
0
Как изменить активация с "G" на "F2"?
Код:
// This file was decompiled using SASCM.ini published by GTAG (http://gtag.gtagaming.com/opcode-database) on 14.6.2013
{$CLEO .cs}

//-------------MAIN---------------
wait 0
thread 'VIKIN'

:VIKIN_15
wait 0
if
   Player.Defined($PLAYER_CHAR)
else_jump @VIKIN_15
if
  $ONMISSION == 0
else_jump @VIKIN_15
if and
80E1:   not player 0 pressed_key 6
   not Actor.Driving($PLAYER_ACTOR)
else_jump @VIKIN_15
if
00E1:   player 0 pressed_key 8
else_jump @VIKIN_15
if
82D8:   not actor $PLAYER_ACTOR current_weapon == 0
else_jump @VIKIN_15
04C4: store_coords_to $12453 $12454 $12455 from_actor $PLAYER_ACTOR with_offset 0.0 2.0 0.0
0470: $AMMU_SELECTED_WEAPON = actor $PLAYER_ACTOR current_weapon
041A: $12456 = actor $PLAYER_ACTOR weapon $AMMU_SELECTED_WEAPON ammo
0781: get_weapon_with_ID $AMMU_SELECTED_WEAPON model_to $AMMU_SELECTED_WEAPON_MODEL
0555: remove_weapon $AMMU_SELECTED_WEAPON from_actor $PLAYER_ACTOR
032B: $12457 = create_weapon_pickup $AMMU_SELECTED_WEAPON_MODEL type 3 ammo $12456 at $12453 $12454 $12455
wait 650
jump @VIKIN_15
 

artF

Новичок
24
0
Есть у меня ник игрока. Как с его помощью мне получить ID этого же игрока?
прогнать в цикле всех игроков и сравнить нужный ник с ником игроков, думаю..


Есть ли способ поменять позицию камеры? в идеале, хочу закрепить ее над другим игроком, ну и так же вернуть себе обзор
___________upd:
067C: attach_camera_to_char $PLAYER_ACTOR offset 0.0 2.0 -2.0 rotation 0.0 0.0 0.0 tilt 0.0 switchstyle 2

осталось разобраться с параметрами. Не пойму как вращать камерой..
 
Последнее редактирование:

hupoFF

Новичок
6
0
Код:
{$CLEO}
0000:
repeat
    wait 0
until Samp.Available()
while true
wait 0
    alloc 10@ 0x80
    0B75: samp get_chat_string 99 text_to 10@ prefix_to 6@ color_to 7@ prefix_color_to 8@
    if 0C18: 31@ = strstr string1 10@ string2 "Привет"
    then
        0af9: say_to_chat "Хуй на обед"
        wait 1337
    end
    free 10@
end

Почему никак не реагирует?
 

Woofing Giraffe

Активный
402
49
Код:
{$CLEO}
0000:
repeat
    wait 0
until Samp.Available()
while true
wait 0
    alloc 10@ 0x80
    0B75: samp get_chat_string 99 text_to 10@ prefix_to 6@ color_to 7@ prefix_color_to 8@
    if 0C18: 31@ = strstr string1 10@ string2 "Привет"
    then
        0af9: say_to_chat "Хуй на обед"
        wait 1337
    end
    free 10@
end

Почему никак не реагирует?
мб ты вводишь "Привет" с маленькой буквы? На маленькую оно не реагирует, а на большую работает.
 

Woofing Giraffe

Активный
402
49
Код:
{$CLEO}
0000:
repeat
    wait 0
until Samp.Available()
while true
wait 0
    alloc 10@ 0x80
    0B75: samp get_chat_string 99 text_to 10@ prefix_to 6@ color_to 7@ prefix_color_to 8@
    if 0C18: 31@ = strstr string1 10@ string2 "Привет"
    then
        0af9: say_to_chat "Хуй на обед"
        wait 1337
    end
    free 10@
end

Почему никак не реагирует?
Ну или если нет, то у меня вот такой вариант работает:
Код:
{$CLEO .cs}

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

:1
wait 228 
   SAMP.Available
else_jump @1
wait 0
alloc 10@ 128 
alloc 6@ 64 

while true
    wait 0
    SAMP.GetChatString(99, 10@, 6@, 0, 0)
    if 0C18: 31@ = strstr string1 10@ string2 "Привет"
    then 
        say "Хуй на обед" 
        wait 1337 
    end
end
 

Leoten

Новичок
7
0
Добрый день настоящим и остальным знатокам Cleo. Вопросов два:

1. Почему опкод 0B65: samp 1@ = player 0@ score срабатывает через раз? Вызывается он в теле клиентской команды, т. е. команда /lvl, выводящая уровень игрока на экран, при первом вызове всегда выдает 0, а при втором-третьем - уже настоящий уровень игрока. Код команды следующий:
Код:
0B35: samp 0@ = get_last_command_params
0AD4: 1@ = scan_string 0@ format "%d" 2@
if 1@ == 1
then
    if 0B23: samp is_player_connected 2@
    then
        0B65: samp 4@ = player 2@ score
        0AF8: samp add_message_to_chat "LVL = %d" color COLOR_DEBUG params 4@
    else
        0AF8: samp add_message_to_chat "Игрок под ID %d не подключен" color COLOR_RED params 2@
    end
else
    0AF8: samp add_message_to_chat "Использование: /lvl [id]" color COLOR_CAPTION
end

goto @cmdret

2. Сколько не гуглил, так и не смог понять, как обойти ограничение на 64 символа в диалоге-листбоксе и существует ли это ограничение вообще? Проще говоря, мне нужно впихнуть в листбокс примерно 20-30 строчек, каждая символов по 10-15
 
Последнее редактирование:

Vovich

HOT
Проверенный
717
196
Есть у меня ник игрока. Как с его помощью мне получить ID этого же игрока?
Код:
{$CLEO .cs}
0000:

const
RolePlay_Nick = 3
end

while true
for 0@ = 0 to 1000
  if 0B23: samp is_player_connected 0@
  then 
  0B36: samp 2@ = get_player_nickname 0@
  if 2@ == 3
  then
  say "У игрока %s - такой ID: %d" 2@ 3
 
  • Нравится
Реакции: Woofing Giraffe

Woofing Giraffe

Активный
402
49
2. Сколько не гуглил, так и не смог понять, как обойти ограничение на 64 символа в диалоге-листбоксе и существует ли это ограничение вообще? Проще говоря, мне нужно впихнуть в листбокс примерно 20-30 строчек, каждая символов по 10-15
Делай так:
Код:
0AC6: 0@ = label @label offset
0B3B: samp show_dialog id 2 caption "Пример №1" text 0@ button_1 "Да" button_2 "Нет" style 2

Потом создаешь метку:
:label
hex
"TP_To_Maria" A
"TP_To_LSPD" 00
end
A - это перенос строки (как /n в pawno).
00 - Это конец диалога. Т.е. в конце надо ставить не A.
Если тебе нужно поставить пробел:
"Пример"20"№1" A
"Пример"20"№2" 00
 
  • Нравится
Реакции: Leoten

Woofing Giraffe

Активный
402
49
Добрый день настоящим и остальным знатокам Cleo. Вопросов два:

1. Почему опкод 0B65: samp 1@ = player 0@ score срабатывает через раз? Вызывается он в теле клиентской команды, т. е. команда /lvl, выводящая уровень игрока на экран, при первом вызове всегда выдает 0, а при втором-третьем - уже настоящий уровень игрока. Код команды следующий:
Код:
0B35: samp 0@ = get_last_command_params
0AD4: 1@ = scan_string 0@ format "%d" 2@
if 1@ == 1
then
    if 0B23: samp is_player_connected 2@
    then
        0B65: samp 4@ = player 2@ score
        0AF8: samp add_message_to_chat "LVL = %d" color COLOR_DEBUG params 4@
    else
        0AF8: samp add_message_to_chat "Игрок под ID %d не подключен" color COLOR_RED params 2@
    end
else
    0AF8: samp add_message_to_chat "Использование: /lvl [id]" color COLOR_CAPTION
end

goto @cmdret
Используй локальную переменную. Т.е. не это:
Код:
0AD4: 1@ = scan_string 0@ format "%d" 2@
, а вот это:
Код:
0AD4: 1@ = scan_string 0@ format "%d" 2@s
У меня сработало.
 

Leoten

Новичок
7
0
Делай так:
Код:
0AC6: 0@ = label @label offset
0B3B: samp show_dialog id 2 caption "Пример №1" text 0@ button_1 "Да" button_2 "Нет" style 2

Потом создаешь метку:
:label
hex
"TP_To_Maria" A
"TP_To_LSPD" 00
end
A - это перенос строки (как /n в pawno).
00 - Это конец диалога. Т.е. в конце надо ставить не A.
Если тебе нужно поставить пробел:
"Пример"20"№1" A
"Пример"20"№2" 00
Спасибо, как обходить ограничение я понял. Теперь другая проблема - нужно привязать появление диалога к клиентской команде. Как не пиши обработку нажатий - все падает либо при запуске игры, либо при отображении диалога. Пробовал ставить обработку в основном цикле скрипта, но все крашится, ибо диалог еще не создан. Если ставить обработку в тело команды - зависает. Как это обойти?
Используй локальную переменную. Т.е. не это:
Код:
0AD4: 1@ = scan_string 0@ format "%d" 2@
, а вот это:
Код:
0AD4: 1@ = scan_string 0@ format "%d" 2@s
У меня сработало.
Крашит или зависает. Насколько я знаю, клео не слышало про приведение типов.
ID нормально читается, проблема именно с выдачей уровня. Первый раз выводит ноль, на второй или третий выводит уже реальный уровень.
 

san0

Известный
Друг
411
267
Спасибо, как обходить ограничение я понял. Теперь другая проблема - нужно привязать появление диалога к клиентской команде. Как не пиши обработку нажатий - все падает либо при запуске игры, либо при отображении диалога. Пробовал ставить обработку в основном цикле скрипта, но все крашится, ибо диалог еще не создан. Если ставить обработку в тело команды - зависает. Как это обойти?

Крашит или зависает. Насколько я знаю, клео не слышало про приведение типов.
ID нормально читается, проблема именно с выдачей уровня. Первый раз выводит ноль, на второй или третий выводит уже реальный уровень.
1) C диалогом кинь весь код скрипта в спойлер.
2) Проблемы с опкодом нет, но если у тебя все же не работает, что мешает сделать проверку, если не равняется нулю ?