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

alfazlo

Потрачен
128
36
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Тут он насколько я понимаю берёт id player_actora, а нужно-то targeted player. Будет ли с ним работать или выдаст шляпу?
Я не пользовался опкодом который возвращает педа под прицелом, а сделал все через память. Вот нужное смещение CPed +0x79C = [dword] Нацеленный пешеход (CPed) Там записана структура на нацеленного педа, из структуры опкодом 0AEA: 1@ = actor_struct 1@ handle получаю хендл, а затем и id. И еще if 1@ > 0 если под прицелом никого нет то цикл продолжает считывать, если есть то значение больше 0 и идет проверка клавишь, затем опять считывание. Тот опкод которым вы пользовались похоже возввращает хендл педа который целится в указанного игрока, а не педа в которого целиться игрок
 

itsLegend

Фонд борьбы за жуков 🐞
Администратор
2,696
1,469
Тот опкод которым вы пользовались похоже возввращает хендл педа который целится в указанного игрока, а не педа в которого целиться игрок
Пф...
Всё правильно возвращал тот опкод.
Просто сервер такой, я уверен...


Попробуйте вывести ID игрока с помощью опкода 0B2B(получение ид из хендла, хендл получаем с помощью 0AD2) в чат или через say_msg.
Он вернет правильный ид.
Скорее всего, неправильное форматирование в 0AF9...

Делал тесты на ДМ сервере с данным кодом:
Код:
{$CLEO}
 
const
    SAMP_BASE = 33@
 
    TARGET = 0@
    ROT_Z = 1@
    OBJECT = 2@
    TARGET_ID = 3@
end
 
0000:
 
if
    8AF7: get_samp_base_to SAMP_BASE
then
    0A93: end_custom_thread
end
repeat
    wait 400
until 0AFA: is_samp_structures_available
 
repeat
    wait 0
    Model.Load(1318)
until Model.Available(1318)
 
while true
    wait 0
    if
        0AD2: TARGET = player $PLAYER_CHAR targeted_actor //IF and SET
    then
        if and
            not Actor.Dead(TARGET)
            Actor.Defined(TARGET)
        then
            gosub @chk_keys
            gosub @rotate_object
        else
            gosub @destroy_object
        end
    else
        gosub @destroy_object
    end
end
 
:chk_keys
wait 0
 
if
    0AB0: 75
then
    0B2B: samp TARGET_ID = get_player_id_by_actor_handle TARGET
    if
        SAMP.IsPlayerConnected(TARGET_ID)
    then
        0AF9: samp say_msg "Привет, %d!" TARGET_ID
        wait 150
    end
end
 
 
return
 
:destroy_object
wait 0
if
    Object.Exists(OBJECT)
then
    Object.Destroy(OBJECT)
end
return
 
:rotate_object
wait 0
if
    Object.Exists(OBJECT)
then
    ROT_Z += 5.0
    069B: attach_object OBJECT to_actor TARGET with_offset 0.0 0.0 1.5 rotation 0.0 0.0 ROT_Z
 
    if
        ROT_Z >= 360.0
    then
        ROT_Z = 0.0
    end
else
    Object.Create(OBJECT, 1318, 0.0, 0.0, 0.0)
end
return
 

itsLegend

Фонд борьбы за жуков 🐞
Администратор
2,696
1,469
При чем тут сервер аообще? Думай, что пишешь, это никак не зависит от сервера, вообще никак. Если тебя так терзают сомнения то зайди на обычный сервер и попробуй в цикле получать актера под прицелом, просто зацикли эту проверку и если она сработает пусть в чат выведется сообщение. Оно никогда не выведется, целься сколько хочешь.
Пожалуйста:
Код:
{$CLEO}
 
0000:
 
if
    8AF7: get_samp_base_to 33@
then
    0A93: end_custom_thread
end
repeat
    wait 400
until 0AFA: is_samp_structures_available
 
while true
    wait 0
    if
        0AD2: 0@ = player $PLAYER_CHAR targeted_actor //IF and SET
    then
        0B2B: samp 1@ = get_player_id_by_actor_handle 0@
        0AF8: samp add_message_to_chat "Ага! Handle: %d | ID: %d" color 0xFF61BB 0@ 1@
    end
end
 

Вложения

  • sa-mp-076.jpg
    sa-mp-076.jpg
    262.8 KB · Просмотры: 331

alfazlo

Потрачен
128
36
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Я вчера проверял не работал, поэтому и делал через память, сейчас тестил тоже сработал, но от сервера это зависить не может в любом случае.
 

itsLegend

Фонд борьбы за жуков 🐞
Администратор
2,696
1,469
Я вчера проверял не работал, поэтому и делал через память, сейчас тестил тоже сработал, но от сервера это зависить не может в любом случае.
Я вообще говорю про форматирование say_msg.
Может у него верхний регистр включен и сервер ищет по нику / ид.
Спасибо за терпение, всё заработало. Правда опять выскочила новая ошибка, ну её я сам смог исправить.
Я доволен как СЛОН ^^
В скриптинге я новичок, это ещё очень мягко сказано))))
С меня плюсик.
См. 3 строчку. А мы развели полторы страницы из-за того, что у него включен верхний регистр при компиляции...
 

alfazlo

Потрачен
128
36
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Я вообще говорю про форматирование say_msg.
Может у него верхний регистр включен и сервер ищет по нику / ид.

См. 3 строчку. А мы развели полторы страницы из-за того, что у него включен верхний регистр при компиляции...
Возможно :D
Дак у меня там с регистром вроде всё норм
Понятно же по ответу :D
 

Bullet0070

Новичок
14
0
100 процентов работающая версия, только что все сам проверил пробуй
Код:
{$CLEO .cs}
if 8AF7: get_samp_base_to 30@
then 0A93: end_custom_thread
end
repeat
wait 1
until 0AFA: is_samp_structures_available
0AF8: samp add_message_to_chat "ok" color 0xF7FF00
while true
wait 0
0A96: 1@ = actor $PLAYER_ACTOR struct
0C0C: 1@ = struct 1@ offset 1948 size 4
0AEA: 1@ = actor_struct 1@ handle
if 1@ > 0
then
0B2B: samp 2@ = get_player_id_by_actor_handle 1@
1@ = 0
if
0AB0: key_pressed 69
then
0AF9: samp say_msg "/su %d 5 Napad na PO" 2@
wait 200
continue
end
if 0AB0: key_pressed 70
then
0AF9: samp say_msg "/Take gunlicense %d 7" 2@
wait 200
continue
end
if 0AB0: key_pressed 71
then
0AF9: samp say_msg "/Take weapons %d" 2@
wait 200
continue
end
else continue
end
end
Спасибо, бинд заработал, ) Ура!)
 

Bullet0070

Новичок
14
0
Всё уже нормально) Скрипт отлично работает, спасибо огромное за помощь)
 

yanderu2

Новичок
37
2
Кто может написать cleo. Вот идея, набираем команду /rp и выводется все рп термины например строка.
Deatmatch-DM-Убивать всех подряд без IC причины.
и так далее
 

itsLegend

Фонд борьбы за жуков 🐞
Администратор
2,696
1,469
Кто может написать cleo. Вот идея, набираем команду /rp и выводется все рп термины например строка.
Deatmatch-DM-Убивать всех подряд без IC причины.
и так далее

Код:
{$CLEO}
 
0000: NOP
 
wait 0
0B34: samp register_client_command "rp" to_label @command
 
while true
    wait 0
end
 
:termins
hex
    7B "FFFFFF" 7D "Revenge Kill" 20 "-" 20 "убить" 20 "игрока," 20 "за" 20 "то" 20 "что" 20 "он" 20 "убил" 20 "тебя." A
    "Mеtagаming" 20 "-" 20 "использование" 20 "OOC" 20 "информации" 20 "в" 20 "IC." A
    "Powergaming" 20 "-" 20 "Воображение" 20 "из" 20 "себя" 20 "супергероя." 20 "Пример:" 20 "драка" 20 "1х3" A
    "Bunnyhopping" 20 "-" 20 "прыгать," 20 "чтобы" 20 "быстрее" 20 "передвигаться." A
    "Deathmatch" 20 "-" 20 "убивать" 20 "всех" 20 "подряд" 20 "без" 20 "IC" 20 "причины." A
    "DriveBy" 20 "-" 20 "убийство" 20 "машиной" 20 "или" 20 "с" 20 "расстрел" 20 "с" 20 "водительского" 20 "места." A
    "Spawn" 20 "Kill" 20 "-" 20 "убийство" 20 "на" 20 "респауне." A
    "Team" 20 "Kill" 20 "-" 20 "убийство" 20 "члена" 20 "своей команды," 20 "фракции." A
    "Сharacter" 20 "Kill" 20 "-" 20 "убийство" 20 "с" 20 "целью" 20 "по" 20 "RP" 20 "расстаться" 20 "с" 20 "человеком." A
    "FastReload" 20 "-" 20 "баг" 20 "с" 20 "быстрой" 20 "перезарядкой." A
    "Repeat" 20 "Kill" 20 "-" 20 "намеренное," 20 "повторное" 20 "убийство" 20 "одного" 20 "и" 20 "того" 20 "же" 20 "игрока." A
    "Willihopping" 20 "-" 20 "прыжок" 20 "с" 20 "велосипеда," 20 "мопеда," 20 "мотоцикла." A
    "Fastmoving" 20 "-" 20 "баг" 20 "с" 20 "быстрым" 20 "перемещением." 00
end
 
:command
0B35: samp 0@ = get_last_command_params
if
    0AD4: 0@ = scan_string 0@ format "%d" 1@ //IF and SET
then
    0AC6: 1@ = label @termins offset
    0B3B: samp show_dialog id 7636 caption "Термины" text 1@ button_1 "Ок" button_2 "" style 0
end
SAMP.CmdRet

В чат прописать: /rp
Необходим SAMPFUNCS 2.3 / 2.4
 

fonarik

Известный
206
3
Ребят,хочу сделать бот для кача стилей боя,но он не дерется и вообще ничего не делает кроме того,что в чат может писать " f ".Как исправить?Вот код.
Код:
{$CLEO}
wait 0
0000:
3@ = 0
thread "test"
if
0AA2: 0@ = load_library "User32.dll" // IF and SET
jf @error_load
if
0AA4: 1@ = get_proc_address "keybd_event" library 0@ // IF and SET
jf @error_event
:test_38
wait 0
if
0ADC:  test_cheat "on"
jf @test_103
0ACD: show_text_highpriority "Cleo ~g~Activated" time 1500
3@ = 1
jump @test_167
 
:test_103
if
0ADC:  test_cheat "off"
jf @test_167
0ACD: show_text_highpriority "Cleo ~r~Deactivated" time 1500
3@ = 0
jump @test_167
 
:test_167
if
  3@ == 1
jf @test_38
wait 300
0AA5: call 1@ num_params 4 pop 0 0 0 0 0x02
0AA5: call 1@ num_params 4 pop 0 0 0 0 0x46
jump @test_38
 
 
:error_event
0AA3: free_library 0@
:error_load
0A93: end_custom_thread
 

alfazlo

Потрачен
128
36
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Ребят,хочу сделать бот для кача стилей боя,но он не дерется и вообще ничего не делает кроме того,что в чат может писать " f ".Как исправить?Вот код.
Я бы посоветовал тебе просто отправлять ofoot_sync с нажатием нужных кнопок.
uint16_t sKeys; + 4
https://sampwiki.blast.hk/wiki/Keys здесь номера клавиш.
 

itsLegend

Фонд борьбы за жуков 🐞
Администратор
2,696
1,469
Я бы посоветовал тебе просто отправлять ofoot_sync с нажатием нужных кнопок.
uint16_t sKeys; + 4
https://sampwiki.blast.hk/wiki/Keys здесь номера клавиш.
Не может быть, чтобы
Код:
uint16_t sKeys; + 4
иметь оффсет +4.

Так, как
Код:
float        fPosition[3];
имеет оффсеты:
+6
+10
+14

-- UPD --
Скорее всего:
Код:
uint16_t sKeys;
struct stSAMPKeys stSampKeys;
Имеют размер по 1 байту(наверно +67 и +68 )

Код:
struct stOnFootData
{
#pragma pack( 1 )
    uint16_t    sLeftRightKeys; // [2] +0
    uint16_t    sUpDownKeys; // [2] +2
    union
    {
        uint16_t            sKeys;
        struct stSAMPKeys    stSampKeys;
    };
    float        fPosition[3];  // [4] +14
    float        fQuaternion[4]; // [4] +30
    uint8_t        byteHealth; // [1] +31
    uint8_t        byteArmor; // [1] +32
    uint8_t        byteCurrentWeapon; // [1] +33
    uint8_t        byteSpecialAction; // [1] +34
    float        fMoveSpeed[3]; // [4] +46
    float        fSurfingOffsets[3]; // [4] +58
    uint16_t    sSurfingVehicleID; // [2] +60
    int            iCurrentAnimationID; // [4] +66
};