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

Leoten

Новичок
7
0
1) C диалогом кинь весь код скрипта в спойлер.
2) Проблемы с опкодом нет, но если у тебя все же не работает, что мешает сделать проверку, если не равняется нулю ?
А что мне даст эта проверка? Я итак вижу, что лвл не определился. Спасибо отладочным выводам.
Код:
{$CLEO}
{$INCLUDE SF}

const
    DIALOG_STYLE_MSGBOX = 0     //Текст
    DIALOG_STYLE_INPUT = 1      //Ввод текста
    DIALOG_STYLE_LIST = 2       //Список
    DIALOG_STYLE_PASSWORD = 3   //Ввод пароля
 
    COLOR_CAPTION = 0xFFDEAD     // Цвет заголовков
    COLOR_TEXT    = 0xE6E6FA     // Цвет текста
    COLOR_DEBUG   = 0xFAEBD7     // Цвет текста отладочной информации
    COLOR_GREEN   = 0x006400 
    COLOR_RED     = 0xB22222  
end

//----ФЛАГ ОТЛАДКИ
33@ = false
//----------------

0B34: samp register_client_command "lvl" to_label @LVL          // Тестовая команда для проверки уровня игрока

while true
    wait 0
end

:LVL

0B35: samp 0@ = get_last_command_params
0AD4: 1@ = scan_string 0@ format "%d" 2@
if 33@ == true
    0AF8: samp add_message_to_chat "CMD LVL, ID: %d" color COLOR_DEBUG params 2@

if 1@ == 1
then
    if 0B23: samp is_player_connected 2@
    then
        0B65: samp 4@ = player 2@ score
        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

0B43: samp cmd_ret
То, что закомменчено, пытался пихать и в основной цикл, и отдельной меткой - результат один. Падает или зависает.
Код:
{$CLEO}
{$INCLUDE SF}

const
    DIALOG_STYLE_MSGBOX = 0     //Òåêñò
    DIALOG_STYLE_INPUT = 1      //Ââîä òåêñòà
    DIALOG_STYLE_LIST = 2       //Ñïèñîê
    DIALOG_STYLE_PASSWORD = 3   //Ââîä ïàðîëÿ
   
    COLOR_CAPTION = 0xFFDEAD     // Öâåò çàãîëîâêîâ
    COLOR_TEXT    = 0xE6E6FA     // Öâåò òåêñòà 
    COLOR_DEBUG   = 0xFAEBD7     // Öâåò òåêñòà îòëàäî÷íîé èíôîðìàöèè
    COLOR_GREEN   = 0x006400     // Çåëåíûé öâåò
    COLOR_RED     = 0xB22222     // Êðàñíûé öâåò
end

0B34: samp register_client_command "tlist" to_label @AHELP  //Ñïðàâêà ïî êîìàíäàì ñêðèïòà

repeat
    wait 400
until 0AFA:  is_samp_available

while true
    wait 0
end

:ahelp

0AC6: 0@ = label @list offset
0B3B: samp show_dialog id 17 caption "Ïîìîùü ïî ñêðèïòó" text 0@ button_1 "Âûáðàòü" button_2 "Óõàäè" style DIALOG_STYLE_LIST

0B43: samp cmd_ret

/*               

:cycle

while true
    if
        0B3C: samp is_dialog_responded id 17 button 1@ list_item 3@ input_text 0
    then
        if
            1@ == 1
        then
            if 
                3@ == 1
            then
                0AF8: samp add_message_to_chat "Ïåðâûé ýëåìåíòèê" color COLOR_DEBUG params 2@
            end
           
            if
                3@ == 2
            then
                0AF8: samp add_message_to_chat "Âòîðîé ýëåìåíòèê" color COLOR_DEBUG params 2@
            end
        else
            0B43: samp cmd_ret
    end
end
*/
:list
hex
"Îáúåêò" 20 "1" A
"Îáúåêò" 20 "2" A
"Îáúåêò" 20 "3" A
"Îáúåêò" 20 "4" A
"Îáúåêò" 20 "5" A
"Îáúåêò" 20 "2" A
"Îáúåêò" 20 "1" A
"Îáúåêò" 20 "2" A
"Îáúåêò" 20 "1" A
"Îáúåêò" 20 "2" A
"Îáúåêò" 20 "1" A
"Îáúåêò" 20 "2" A
"Îáúåêò" 20 "1" A
"Îáúåêò" 20 "2" A
"Îáúåêò" 20 "3" 00
end
 

san0

Известный
Друг
411
267
А что мне даст эта проверка? Я итак вижу, что лвл не определился. Спасибо отладочным выводам.
Код:
{$CLEO}
{$INCLUDE SF}

const
    DIALOG_STYLE_MSGBOX = 0     //Текст
    DIALOG_STYLE_INPUT = 1      //Ввод текста
    DIALOG_STYLE_LIST = 2       //Список
    DIALOG_STYLE_PASSWORD = 3   //Ввод пароля

    COLOR_CAPTION = 0xFFDEAD     // Цвет заголовков
    COLOR_TEXT    = 0xE6E6FA     // Цвет текста
    COLOR_DEBUG   = 0xFAEBD7     // Цвет текста отладочной информации
    COLOR_GREEN   = 0x006400
    COLOR_RED     = 0xB22222
end

//----ФЛАГ ОТЛАДКИ
33@ = false
//----------------

0B34: samp register_client_command "lvl" to_label @LVL          // Тестовая команда для проверки уровня игрока

while true
    wait 0
end

:LVL

0B35: samp 0@ = get_last_command_params
0AD4: 1@ = scan_string 0@ format "%d" 2@
if 33@ == true
    0AF8: samp add_message_to_chat "CMD LVL, ID: %d" color COLOR_DEBUG params 2@

if 1@ == 1
then
    if 0B23: samp is_player_connected 2@
    then
        0B65: samp 4@ = player 2@ score
        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

0B43: samp cmd_ret
То, что закомменчено, пытался пихать и в основной цикл, и отдельной меткой - результат один. Падает или зависает.

В следующий раз обратись за справкой в вики https://www.blast.hk/wiki/tutorials:local_dialogs

Код:
{$CLEO}
{$INCLUDE SF}

0000: NOP

const 
    COLOR_CAPTION = 0xFFDEAD     // Цвет заголовков
    COLOR_TEXT    = 0xE6E6FA     // Цвет текста
    COLOR_DEBUG   = 0xFAEBD7     // Цвет текста отладочной информации
    COLOR_GREEN   = 0x006400     // Зеленый цвет
    COLOR_RED     = 0xB22222     // Красный цвет
    DIALOG_ID     = 17           // id диалога
end

repeat
    wait 200
until 0AFA:  is_samp_available     // проверка, что структуры сампа доступны

0B34: samp register_client_command "tlist" to_label @ahelp // лишь потом регистрация команды. SAMP > SAMP CMD, верно ?

// основной цикл скрипта
          
while true
    wait 0
    if 0B3C: samp is_dialog_responded id DIALOG_ID button 1@ list_item 3@ input_text 0
    then
        if 1@ == 1
        then
            // система счисления начинается с нуля
            if 3@ == 0
            then
                0AF8: samp add_message_to_chat "Первый элементик" color COLOR_DEBUG params
            end         
            if 3@ == 1
            then
                0AF8: samp add_message_to_chat "Второй элементик" color COLOR_DEBUG params
            end
            //  и т.д
        else
            0AF8: samp add_message_to_chat "УХАДИ" color COLOR_DEBUG params
        end
    end
end

// метка, которые приводятся в действие, если ввести команду

:ahelp
0AC6: 0@ = label @list offset
0B3B: samp show_dialog id DIALOG_ID caption "Помощь по скрипту" text 0@ button_1 "Выбрать" button_2 "Ухади" style DIALOG_STYLE_LIST
0B43: samp cmd_ret

// метка, которые приводятся в действие, если ее использовать с 0AC6:
:list
hex
"Объект" 20 "1" A
"Объект" 20 "2" A
"Объект" 20 "3" A
"Объект" 20 "4" A
"Объект" 20 "5" A
"Объект" 20 "2" A
"Объект" 20 "1" A
"Объект" 20 "2" A
"Объект" 20 "1" A
"Объект" 20 "2" A
"Объект" 20 "1" A
"Объект" 20 "2" A
"Объект" 20 "1" A
"Объект" 20 "2" A
"Объект" 20 "3" 00
end

Код:
{$CLEO}
{$INCLUDE SF}

const
    DIALOG_STYLE_MSGBOX = 0     //?????
    DIALOG_STYLE_INPUT = 1      //???? ??????
    DIALOG_STYLE_LIST = 2       //??????
    DIALOG_STYLE_PASSWORD = 3   //???? ??????
    COLOR_CAPTION = 0xFFDEAD     // ???? ??????????
    COLOR_TEXT    = 0xE6E6FA     // ???? ??????
    COLOR_DEBUG   = 0xFAEBD7     // ???? ?????? ?????????? ??????????
    COLOR_GREEN   = 0x006400
    COLOR_RED     = 0xB22222
end

0B34: samp register_client_command "lvl" to_label @LVL          // ???????? ??????? ??? ???????? ?????? ??????

while true
    wait 0
end

:LVL
0B35: samp 0@ = get_last_command_params
if 0AD4: 0@ = scan_string 0@ format "%d" 1@
then
    if 0B23: samp is_player_connected 1@
    then
        0B65: samp 2@ = player 1@ score
        if 2@ > 0 
        then
            0AF8: samp add_message_to_chat "Score id %d = %d" color COLOR_DEBUG params 1@ 2@
        end
    else
        0AF8: samp add_message_to_chat "ID %d not connected" color COLOR_RED params 1@
    end
else
    0AF8: samp add_message_to_chat "use /lvl [id]" color COLOR_CAPTION
end
0B43: samp cmd_ret
Всегда опкод нормально возвращал лвл игрока, у меня работает хорошо, пробуй на другом сервере / папку клео почистить и т.д
 
  • Нравится
Реакции: Leoten

itsLegend

Фонд борьбы за жуков 🐞
Администратор
2,695
1,448
Перед получением LVL'а необходимо вызывать RPC_UPDATESCORESPINGSIPS. В СФ это должно срабатывать, вроде.
 

Leoten

Новичок
7
0
В следующий раз обратись за справкой в вики https://www.blast.hk/wiki/tutorials:local_dialogs
Всегда опкод нормально возвращал лвл игрока, у меня работает хорошо, пробуй на другом сервере / папку клео почистить и т.д
Если бы справка покрывала мою проблему, я бы не создавал акк на форуме и не лез в эту тему)
Код вырывал из большого скрипта, регистрация команды стояла после проверки доступности структур сампа. Хз, но почему-то падало. Попробую найти десять отличий своего кода от твоего.

Большое тебе человеческое спасибо :)
А с лвлом хз... Может дело действительно в сервере. Попробую на локальном погонять.
 

hupoFF

Новичок
6
0
Ну или если нет, то у меня вот такой вариант работает:
Код:
{$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

Походу я рукожоп... У меня чего то не реагирует никак>:o
 

[Nexus]

Известный
41
2
Код:
:rheal
for 0@ = 0 to 999
wait 0
if samp.IsPlayerConnected(0@)
then 0B20: samp 1@ = actor_handle_by_samp_player_id 0@
if 056D: 1@
then
0af9: "/sethp %d 160" 0@
end
end
end
samp.cmdret

Как сделать именно в радиусе а не в зоне стрима. Например: /rheal 10 т.е. даст 160 хп в радиусе 10 метров.
 

Dark_Knight

Me, me and me.
Друг
4,062
2,077
Код:
:rheal
for 0@ = 0 to 999
wait 0
if samp.IsPlayerConnected(0@)
then 0B20: samp 1@ = actor_handle_by_samp_player_id 0@
if 056D: 1@
then
0af9: "/sethp %d 160" 0@
end
end
end
samp.cmdret

Как сделать именно в радиусе а не в зоне стрима. Например: /rheal 10 т.е. даст 160 хп в радиусе 10 метров.
Лошара. В командах циклы не работают.
 

woksonal

Известный
Проверенный
268
154
Код:
:rheal
for 0@ = 0 to 999
wait 0
if samp.IsPlayerConnected(0@)
then 0B20: samp 1@ = actor_handle_by_samp_player_id 0@
if 056D: 1@
then
0af9: "/sethp %d 160" 0@
end
end
end
samp.cmdret

Как сделать именно в радиусе а не в зоне стрима. Например: /rheal 10 т.е. даст 160 хп в радиусе 10 метров.

Под себя переделай
 

Вложения

  • slap.cs
    643 байт · Просмотры: 17

TheOne6839

Новичок
2
0
Кто может, помогите пожалуйста, напишите мне скрипт для включения этих нопов
netPatch[] = "Spawn" "outcoming RPC" 52 &0 0
netPatch[] = "SetPlayerCameraLookAt" "incoming RPC" 158 &0 0
netPatch[] = "ResetPlayerWeapons" "incoming RPC" 21 &0 0
Заранее Спасибо.
 

itsLegend

Фонд борьбы за жуков 🐞
Администратор
2,695
1,448
Код:
0B86: dialog 0@ set_visible 0
jump @Core
Раз уж на то пошло, то в этом месте нужно уничтожать диалог, а не прятать его.

0AF8: samp add_message_to_chat "Автор: KYRLYK" color -1 params 2@ - зачем?

* У тебя два одинаковых события, но ты всё равно пишешь для них отдельное условие, когда можно объединить в одно:
Код:
if 1@ == EVENT_BUTTON_CLICKED
then 
    if 2@ == 1
    then
        // ...
    end

    if 2@ == 3
    then
        // ...
    end
end