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

azdsfbzxv

Новичок
73
6
Как-то так:
CLEO:
{$CLEO .cs}
0000:

while not Player.Defined($PLAYER_ACTOR)
    wait 100
end

0AA2: 30@ = load_library "kernel32.dll" // IF and SET
0AA4: 31@ = get_proc_address "GetModuleHandleA" library 30@ // IF and SET
0AA7: call_function 31@ num_params 1 pop 0 "samp.dll" 31@
0AA3: free_library 30@
if 31@ == 0
then
    0A93: end_custom_thread
end

while not SAMP.Available
    wait 100
end

while true
    wait 1000
    00A0: store_actor $PLAYER_ACTOR position_to 0@ 1@ 2@

    0AB1: call @Convert 1 0@ to 0@ // X

    1@ *= -1.0
    0AB1: call @Convert 1 1@ to 1@ // Y
    1@ -= 1 // 1..24 -> 0..23
    0AC6: 2@ = label @Chars offset // получаем адрес массива букв
    0C0C: 1@ = struct 2@ offset 1@ size 1 // выбираем букву по номеру и читаем в 1@

    0AF8: samp add_message_to_chat "%c-%d" color -1 1@ 0@ // Y-X
end

:Convert
0@ += 3000.0
0@ /= 250.0
0C0A: math 0@ = ceil 0@
0092: 0@ = float 0@ to_integer
if 0@ < 1 // Добавил пару проверок
then 0@ = 1
end
if 0@ > 24
then 0@ = 24
end
0AB2: ret 1 0@

:Chars
hex
"АБВГДЖЗИКЛМНОПРСТУФХЦЧШЯ"
end
Что означает эта часть кода?
CLEO:
0AA2: 30@ = load_library "kernel32.dll" // IF and SET
0AA4: 31@ = get_proc_address "GetModuleHandleA" library 30@ // IF and SET
0AA7: call_function 31@ num_params 1 pop 0 "samp.dll" 31@
0AA3: free_library 30@
if 31@ == 0
then
    0A93: end_custom_thread
end
И почему после компилирования, при открытии скрипта пишет: Неизвестный опкод 41C0 по адресу 348?
 

MelomanCool

Новичок
Проверенный
65
41
Что означает эта часть кода?
CLEO:
0AA2: 30@ = load_library "kernel32.dll" // IF and SET
0AA4: 31@ = get_proc_address "GetModuleHandleA" library 30@ // IF and SET
0AA7: call_function 31@ num_params 1 pop 0 "samp.dll" 31@
0AA3: free_library 30@
if 31@ == 0
then
    0A93: end_custom_thread
end
И почему после компилирования, при открытии скрипта пишет: Неизвестный опкод 41C0 по адресу 348?
Проверка на загруженность сампа, чтобы скрипт не работал в сингле, ибо будет крашить.
Насчет опкода ничего не могу сказать.
 
  • Нравится
Реакции: azdsfbzxv и Yanki

azdsfbzxv

Новичок
73
6
Вот мне надо добавить проверки на нажатые кнопки. три варианта добавить Вместо 0AF8: samp add_message_to_chat "%c-%d" color -11@0@// Y-X
CLEO:
:Noname_2
00D6: if and
0AB0:   key_pressed 16
0AB0:   key_pressed 49
004D: jump_if_false @Noname_3
0AF9: samp say_msg "/r [Взвод]: 10-34 %c-%d" 1@ 0@
0001: wait 2000 ms
0002: jump @Noname_НАЧАЛО ЦИКЛА

:Noname_3
00D6: if and
0AB0:   key_pressed 16
0AB0:   key_pressed 50
004D: jump_if_false @Noname_3
0AF9: samp say_msg "/r [Взвод]: 10-37 %c-%d" 1@ 0@
0001: wait 2000 ms
0002: jump @Noname_НАЧАЛО ЦИКЛА

:Noname_4
00D6: if and
0AB0:   key_pressed 16
0AB0:   key_pressed 51
004D: jump_if_false @Noname_НАЧАЛО ЦИКЛА
0AF9: samp say_msg "/r [Взвод]: 10-99 %c-%d" 1@ 0@
0001: wait 2000 ms
0002: jump @Noname_НАЧАЛО ЦИКЛА
Вот их надо добавить мне в скрипт.
CLEO:
{$CLEO .cs}
0000:

while not Player.Defined($PLAYER_ACTOR)
    wait 100
end

0AA2: 30@ = load_library "kernel32.dll" // IF and SET
0AA4: 31@ = get_proc_address "GetModuleHandleA" library 30@ // IF and SET
0AA7: call_function 31@ num_params 1 pop 0 "samp.dll" 31@
0AA3: free_library 30@
if 31@ == 0
then
    0A93: end_custom_thread
end

while not SAMP.Available
    wait 100
end

while true
    wait 1000
    00A0: store_actor $PLAYER_ACTOR position_to 0@ 1@ 2@
    0AB1: call @Convert 1 0@ to 0@ // X
    1@ *= -1.0
    0AB1: call @Convert 1 1@ to 1@ // Y
    1@ -= 1 // 1..24 -> 0..23
    0AC6: 2@ = label @Chars offset // получаем адрес массива букв
    0C0C: 1@ = struct 2@ offset 1@ size 1 // выбираем букву по номеру и читаем в 1@
    0AF8: samp add_message_to_chat "%c-%d" color -1 1@ 0@ // Y-X
end

:Convert
0@ += 3000.0
0@ /= 250.0
0C0A: math 0@ = ceil 0@
0092: 0@ = float 0@ to_integer
if 0@ < 1 // Добавил пару проверок
then 0@ = 1
end
if 0@ > 24
then 0@ = 24
end
0AB2: ret 1 0@

:Chars
hex
"АБВГДЖЗИКЛМНОПРСТУФХЦЧШЯ"
end
 

azdsfbzxv

Новичок
73
6
Я ничего не понял.
Помоги вставить в твой код:
CLEO:
{$CLEO .cs}
0000:

while not Player.Defined($PLAYER_ACTOR)
    wait 100
end

0AA2: 30@ = load_library "kernel32.dll" // IF and SET
0AA4: 31@ = get_proc_address "GetModuleHandleA" library 30@ // IF and SET
0AA7: call_function 31@ num_params 1 pop 0 "samp.dll" 31@
0AA3: free_library 30@
if 31@ == 0
then
    0A93: end_custom_thread
end

while not SAMP.Available
    wait 100
end

while true
    wait 1000
    00A0: store_actor $PLAYER_ACTOR position_to 0@ 1@ 2@
    0AB1: call @Convert 1 0@ to 0@ // X
    1@ *= -1.0
    0AB1: call @Convert 1 1@ to 1@ // Y
    1@ -= 1 // 1..24 -> 0..23
    0AC6: 2@ = label @Chars offset // получаем адрес массива букв
    0C0C: 1@ = struct 2@ offset 1@ size 1 // выбираем букву по номеру и читаем в 1@
    0AF8: samp add_message_to_chat "%c-%d" color -1 1@ 0@ // Y-X
end

:Convert
0@ += 3000.0
0@ /= 250.0
0C0A: math 0@ = ceil 0@
0092: 0@ = float 0@ to_integer
if 0@ < 1 // Добавил пару проверок
then 0@ = 1
end
if 0@ > 24
then 0@ = 24
end
0AB2: ret 1 0@

:Chars
hex
"АБВГДЖЗИКЛМНОПРСТУФХЦЧШЯ"
end
вместо: 0AF8: samp add_message_to_chat "%c-%d" color -11@0@
Это. то есть при нажатии определённых кнопок. Писало по разному:
CLEO:
:Noname_4
00D6: if and
0AB0:   key_pressed 16
0AB0:   key_pressed 49
004D: jump_if_false @Noname_5
0AF9: samp say_msg "/r [Взвод]: 10-34 %c-%d" 11@ 0@
0001: wait 2000 ms
0002: jump @Noname_???

:Noname_5
00D6: if and
0AB0:   key_pressed 16
0AB0:   key_pressed 50
004D: jump_if_false @Noname_6
0AF9: samp say_msg "/r [Взвод]: 10-37 %c-%d" 11@ 0@
0001: wait 2000 ms
0002: jump @Noname_???

:Noname_6
00D6: if and
0AB0:   key_pressed 16
0AB0:   key_pressed 51
004D: jump_if_false @Noname_???
0AF9: samp say_msg "/r [Взвод]: 10-99 %c-%d" 11@ 0@
0001: wait 2000 ms
0002: jump @Noname_???
 

MelomanCool

Новичок
Проверенный
65
41
Помоги вставить в твой код:
CLEO:
{$CLEO .cs}
0000:

while not Player.Defined($PLAYER_ACTOR)
    wait 100
end

0AA2: 30@ = load_library "kernel32.dll" // IF and SET
0AA4: 31@ = get_proc_address "GetModuleHandleA" library 30@ // IF and SET
0AA7: call_function 31@ num_params 1 pop 0 "samp.dll" 31@
0AA3: free_library 30@
if 31@ == 0
then
    0A93: end_custom_thread
end

while not SAMP.Available
    wait 100
end

while true
    wait 1000
    00A0: store_actor $PLAYER_ACTOR position_to 0@ 1@ 2@
    0AB1: call @Convert 1 0@ to 0@ // X
    1@ *= -1.0
    0AB1: call @Convert 1 1@ to 1@ // Y
    1@ -= 1 // 1..24 -> 0..23
    0AC6: 2@ = label @Chars offset // получаем адрес массива букв
    0C0C: 1@ = struct 2@ offset 1@ size 1 // выбираем букву по номеру и читаем в 1@
    0AF8: samp add_message_to_chat "%c-%d" color -1 1@ 0@ // Y-X
end

:Convert
0@ += 3000.0
0@ /= 250.0
0C0A: math 0@ = ceil 0@
0092: 0@ = float 0@ to_integer
if 0@ < 1 // Добавил пару проверок
then 0@ = 1
end
if 0@ > 24
then 0@ = 24
end
0AB2: ret 1 0@

:Chars
hex
"АБВГДЖЗИКЛМНОПРСТУФХЦЧШЯ"
end
вместо: 0AF8: samp add_message_to_chat "%c-%d" color -11@0@
Это. то есть при нажатии определённых кнопок. Писало по разному:
CLEO:
:Noname_4
00D6: if and
0AB0:   key_pressed 16
0AB0:   key_pressed 49
004D: jump_if_false @Noname_5
0AF9: samp say_msg "/r [Взвод]: 10-34 %c-%d" 11@ 0@
0001: wait 2000 ms
0002: jump @Noname_???

:Noname_5
00D6: if and
0AB0:   key_pressed 16
0AB0:   key_pressed 50
004D: jump_if_false @Noname_6
0AF9: samp say_msg "/r [Взвод]: 10-37 %c-%d" 11@ 0@
0001: wait 2000 ms
0002: jump @Noname_???

:Noname_6
00D6: if and
0AB0:   key_pressed 16
0AB0:   key_pressed 51
004D: jump_if_false @Noname_???
0AF9: samp say_msg "/r [Взвод]: 10-99 %c-%d" 11@ 0@
0001: wait 2000 ms
0002: jump @Noname_???
А не проще сразу написать "/r [Взвод]: 10-34" с нужным квадратом для каждой пары кнопок?
 
  • Нравится
Реакции: Yanki

azdsfbzxv

Новичок
73
6
Окей, от чего зависит квадрат? Может, проще будет его по метке на карте получать?
Твой скрипт показывает квадрат в котором я нахожусь. Пишет раз в секунду в чат. А мне надо что бы не писало постоянно в чат, а только при нажатии на кнопки писало.
Мне надо. Что бы я нажимал Shift и 1 и выдавало в чат: Требуется помощь в квадрат %c-%d
Если нажимал shift и 2 писало: Требуется эвакуация в квадрат %c-%d
Если нажата кнопка shift и 3 писало: Задание завершено в квадрате %c-%d
То есть квадрат в котором я нахожусь. Походу я тебя тен-кодами запутал. 10-34 это требуется помощь. Короче ты на них внимания не обращай
CLEO:
:Noname_4
00D6: if and
0AB0:   key_pressed 16
0AB0:   key_pressed 49
004D: jump_if_false @Noname_5
0AF9: samp say_msg "/w [Взвод]: Требуется помощ в квадрат %c-%d" 11@ 0@
0001: wait 2000 ms
0002: jump @Noname_3

:Noname_5
00D6: if and
0AB0:   key_pressed 16
0AB0:   key_pressed 50
004D: jump_if_false @Noname_6
0AF9: samp say_msg "/w [Взвод]: Требуется эвакуация в квадрат %c-%d" 11@ 0@
0001: wait 2000 ms
0002: jump @Noname_???

:Noname_6
00D6: if and
0AB0:   key_pressed 16
0AB0:   key_pressed 51
004D: jump_if_false @Noname_???
0AF9: samp say_msg "/w [Взвод]: Задание заиершено в квадрате %c-%d" 11@ 0@
0001: wait 2000 ms
0002: jump @Noname_???
 
Последнее редактирование:

MelomanCool

Новичок
Проверенный
65
41
Твой скрипт показывает квадрат в котором я нахожусь. Пишет раз в секунду в чат. А мне надо что бы не писало постоянно в чат, а только при нажатии на кнопки писало.
Мне надо. Что бы я нажимал Shift и 1 и выдавало в чат: Требуется помощь в квадрат %c-%d
Если нажимал shift и 2 писало: Требуется эвакуация в квадрат %c-%d
Если нажата кнопка shift и 3 писало: Задание завершено в квадрате %c-%d
То есть квадрат в котором я нахожусь. Походу я тебя тен-кодами запутал. 10-34 это требуется помощь. Короче ты на них внимания не обращай
Проверяй.
CLEO:
{$CLEO .cs}
0000:

while not Player.Defined($PLAYER_ACTOR)
    wait 100
end

0AA2: 30@ = load_library "kernel32.dll" // IF and SET
0AA4: 31@ = get_proc_address "GetModuleHandleA" library 30@ // IF and SET
0AA7: call_function 31@ num_params 1 pop 0 "samp.dll" 31@
0AA3: free_library 30@
if 31@ == 0
then
    0A93: end_custom_thread
end

while not SAMP.Available
    wait 100
end

while true
    wait 0
    if and
        8B21: not samp is_chat_opened
        0AB0: key_pressed 16 // shift
    then
        if 0AB0: key_pressed 49 // 1
        then
            00A0: store_actor $PLAYER_ACTOR position_to 0@ 1@ 2@
            0AB1: call @GetSquareByMapCoords 2 0@ 1@ to 0@ 1@
            0AF9: samp say_msg "/r [Взвод]: 10-34 %c-%d" 1@ 0@
            0001: wait 2000 ms
        end
        if 0AB0: key_pressed 50 // 2
        then
            00A0: store_actor $PLAYER_ACTOR position_to 0@ 1@ 2@
            0AB1: call @GetSquareByMapCoords 2 0@ 1@ to 0@ 1@
            0AF9: samp say_msg "/r [Взвод]: 10-37 %c-%d" 1@ 0@
            0001: wait 2000 ms
        end
        if 0AB0: key_pressed 51 // 3
        then
            00A0: store_actor $PLAYER_ACTOR position_to 0@ 1@ 2@
            0AB1: call @GetSquareByMapCoords 2 0@ 1@ to 0@ 1@
            0AF9: samp say_msg "/r [Взвод]: 10-99 %c-%d" 1@ 0@
            0001: wait 2000 ms
        end
    end
end

:GetSquareByMapCoords
0AB1: call @Convert 1 0@ to 0@ // X
1@ *= -1.0
0AB1: call @Convert 1 1@ to 1@ // Y
1@ -= 1
0AC6: 2@ = label @Chars offset
0C0C: 1@ = struct 2@ offset 1@ size 1
0AB2: ret 2 0@ 1@

:Convert
0@ += 3000.0
0@ /= 250.0
0C0A: math 0@ = ceil 0@
0092: 0@ = float 0@ to_integer
if 0@ < 1
then 0@ = 1
end
if 0@ > 24
then 0@ = 24
end
0AB2: ret 1 0@

:Chars
hex
"АБВГДЖЗИКЛМНОПРСТУФХЦЧШЯ"
end
 
  • Нравится
Реакции: Yanki и azdsfbzxv

azdsfbzxv

Новичок
73
6
Проверяй.
CLEO:
{$CLEO .cs}
0000:

while not Player.Defined($PLAYER_ACTOR)
    wait 100
end

0AA2: 30@ = load_library "kernel32.dll" // IF and SET
0AA4: 31@ = get_proc_address "GetModuleHandleA" library 30@ // IF and SET
0AA7: call_function 31@ num_params 1 pop 0 "samp.dll" 31@
0AA3: free_library 30@
if 31@ == 0
then
    0A93: end_custom_thread
end

while not SAMP.Available
    wait 100
end

while true
    wait 0
    if and
        8B21: not samp is_chat_opened
        0AB0: key_pressed 16 // shift
    then
        if 0AB0: key_pressed 49 // 1
        then
            00A0: store_actor $PLAYER_ACTOR position_to 0@ 1@ 2@
            0AB1: call @GetSquareByMapCoords 2 0@ 1@ to 0@ 1@
            0AF9: samp say_msg "/r [Взвод]: 10-34 %c-%d" 1@ 0@
            0001: wait 2000 ms
        end
        if 0AB0: key_pressed 50 // 2
        then
            00A0: store_actor $PLAYER_ACTOR position_to 0@ 1@ 2@
            0AB1: call @GetSquareByMapCoords 2 0@ 1@ to 0@ 1@
            0AF9: samp say_msg "/r [Взвод]: 10-37 %c-%d" 1@ 0@
            0001: wait 2000 ms
        end
        if 0AB0: key_pressed 51 // 3
        then
            00A0: store_actor $PLAYER_ACTOR position_to 0@ 1@ 2@
            0AB1: call @GetSquareByMapCoords 2 0@ 1@ to 0@ 1@
            0AF9: samp say_msg "/r [Взвод]: 10-99 %c-%d" 1@ 0@
            0001: wait 2000 ms
        end
    end
end

:GetSquareByMapCoords
0AB1: call @Convert 1 0@ to 0@ // X
1@ *= -1.0
0AB1: call @Convert 1 1@ to 1@ // Y
1@ -= 1
0AC6: 2@ = label @Chars offset
0C0C: 1@ = struct 2@ offset 1@ size 1
0AB2: ret 2 0@ 1@

:Convert
0@ += 3000.0
0@ /= 250.0
0C0A: math 0@ = ceil 0@
0092: 0@ = float 0@ to_integer
if 0@ < 1
then 0@ = 1
end
if 0@ > 24
then 0@ = 24
end
0AB2: ret 1 0@

:Chars
hex
"АБВГДЖЗИКЛМНОПРСТУФХЦЧШЯ"
end
Всё шикарно работает! Спасибо тебе большое, что помог! Я уже думал у тебя терпения на меня не хватит. Красава!
 

Yanki

Новичок
3
0
Нужно чтобы когда писал команду /fake_med
происходило следующее:
В чат пишет:{89ac7a}Вы отправили предложение о лечении.
{87ad7a}[Информация]{FFFFFF} Вы вылечили randomnick за $200

Где рандом ник мне нужно чтобы рандомно выбирало человека из таба и писало туда, чтобы я мог писать по много раз с разными никами.

Заранее спасибо, так как я уже 5 дней маюсь и не могу найти как так сделать.
 

azdsfbzxv

Новичок
73
6
Нужно чтобы когда писал команду /fake_med
происходило следующее:
В чат пишет:{89ac7a}Вы отправили предложение о лечении.
{87ad7a}[Информация]{FFFFFF} Вы вылечили randomnick за $200

Где рандом ник мне нужно чтобы рандомно выбирало человека из таба и писало туда, чтобы я мог писать по много раз с разными никами.

Заранее спасибо, так как я уже 5 дней маюсь и не могу найти как так сделать.
Поддельный отчёт будешь делать?
Ник должен быть с _ ?
Сколько должно пройти секунд между этими двумя строками?
CLEO:
{$CLEO .cs}

//-------------MAIN---------------
0000: NOP
0AC8: 2@ = allocate_memory_size 264

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

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

:Noname_44
0A8E: 0@ = 0@ + 1 // int
8039:   not  0@ == 1000
004D: jump_if_false @Noname_31
0B23:  samp is_player_connected 0@
004D: jump_if_false @Noname_44
0B20: samp 1@ = actor_handle_by_samp_player_id 0@
056D:   actor 1@ defined
0B36: samp 2@ = get_player_nickname 19@

:Noname_388
00D6: if and
0AB0:   key_pressed 49
0AB0:   key_pressed 50
8B21:   not samp is_chat_opened
004D: jump_if_false @Noname_44
0AF8: samp add_message_to_chat "{89ac7a}Вы отправили предложение о лечении." color -1
0001: wait 10000 ms
0AF8: samp add_message_to_chat "{87ad7a}[Информация]{FFFFFF} Вы вылечили %s на $200" color -1 2@
0001: wait 2000 ms
0002: jump @Noname_44
Активация на нажатие 1 и 2 одновременно. Это будешь видеть только ты. Проверь цвета нормальные?
 
Последнее редактирование:
  • Нравится
Реакции: Yanki