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

Dimk0

Новичок
10
1
Это совсем не то...

Это в конец:
Код:
:keyPress
// 0@ - key, 1@ - time
// Example: 0AB1: call @keyPress 2 key 0@ time 1@
 
if 0AA2: 2@ = load_library "User32.dll"
then
    if 0AA4: 2@ = get_proc_address "keybd_event" library 2@
    then
        0AA5: call 2@ num_params 4 pop 0 0 0 0 0@
        wait 1@
        0AA5: call 2@ num_params 4 pop 0 0 0x02 0 0@
    end
end
0AB2: ret 0

Это куда хочешь:
Код:
0AB1: call @keyPress 2 key 66 time 15
Зажимает клавишу B на 0,015 секунды.

Список десятичных кодов клавиш можешь узнать в справке SannyBuilder (F12 -> CLEO 3 Code Library -> Список значений кнопок для 0AB0).
Ну или в яндекс: Коды клавиш клавиатуры

Автор: MogAika.
Перевод в функцию: MelomanCool
Спасибо.
 

gcode

нестандартное звание звание звание звание звани...
Друг
789
357
Да. Я делаю бота,который сможет забирать зарплату.

Тогда обрати внимание на такой опкод ;)
Код:
0B47: samp close_current_dialog_with_button 1
Сам писал бота сначала через клавиши, а потом вот это обнаружил :)
 

Bullet0070

Новичок
14
0
Подскажие, пожалуйста, как сделать подобный скрипт: Зажимаешь ПКМ на игрока(зелёный треугольник появляется над ним), далее нажимаешь кнопку на клавиатуре, и, например я офаю у него лицензию, даю звёзды и тд и тп. То бишь зажатием ПКМ на него я "как бы копирую его id", а то на биндах иногда нет времени ид вписыать. Если сможете помочь - пожалуйста, скиньте исходный код такого скрипта, а так же названия плагинов, если они нужны для компиляции. Очень буду благодарен!
 

gcode

нестандартное звание звание звание звание звани...
Друг
789
357
Подскажие, пожалуйста, как сделать подобный скрипт: Зажимаешь ПКМ на игрока(зелёный треугольник появляется над ним), далее нажимаешь кнопку на клавиатуре, и, например я офаю у него лицензию, даю звёзды и тд и тп. То бишь зажатием ПКМ на него я "как бы копирую его id", а то на биндах иногда нет времени ид вписыать. Если сможете помочь - пожалуйста, скиньте исходный код такого скрипта, а так же названия плагинов, если они нужны для компиляции. Очень буду благодарен!

Требуется sampfuncs
Код:
:targetcmd
wait 0
if and
0AB0:  key_pressed ПКМ
0AD2: 0@ = player $PLAYER_CHAR targeted_actor //IF and SET
else_jump @targetcmd
if
0AB0:  key_pressed КЛАВИША1
then
0B2B: samp 1@ = get_player_id_by_actor_handle 0@
0AF9: samp say_msg "/КОМАНДА1 %d" 1@
end
if
0AB0:  key_pressed КЛАВИША2
then
0B2B: samp 1@ = get_player_id_by_actor_handle 0@
0AF9: samp say_msg "/КОМАНДА2 %d" 1@
end
...
if
0AB0:  key_pressed КЛАВИШАN
then
0B2B: samp 1@ = get_player_id_by_actor_handle 0@
0AF9: samp say_msg "/КОМАНДАN %d" 1@
end
jump @targetcmd
 

Bullet0070

Новичок
14
0
Спасибо огромное, ещё вопрос. При компиляции пишет: Недостаточно параметров. Ожидалось 1 параметров. И курсор направлен на строку с ПКМ.
моя строчка выглядит так:
0AB0: key_pressed KEY_AIM
В чём ошибка?
И ещё одну ошибку заметил, пишет "Неизвестный опкод 0B2B."
А тут в чём дело?)
 

itsLegend

Фонд борьбы за жуков 🐞
Администратор
2,696
1,469
Спасибо огромное, ещё вопрос. При компиляции пишет: Недостаточно параметров. Ожидалось 1 параметров. И курсор направлен на строку с ПКМ.
моя строчка выглядит так:
0AB0: key_pressed KEY_AIM
В чём ошибка?
И ещё одну ошибку заметил, пишет "Неизвестный опкод 0B2B."
А тут в чём дело?)
Подожди чуть чуть...
Всё расжую и дам другой пример :)
 

itsLegend

Фонд борьбы за жуков 🐞
Администратор
2,696
1,469
Спасибо огромное, ещё вопрос. При компиляции пишет: Недостаточно параметров. Ожидалось 1 параметров. И курсор направлен на строку с ПКМ.
моя строчка выглядит так:
0AB0: key_pressed KEY_AIM
В чём ошибка?
И ещё одну ошибку заметил, пишет "Неизвестный опкод 0B2B."
А тут в чём дело?)

Вот скрипт/пример:
Код:
{$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
            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 "текст или команда"
                    wait 150
                end
            end
 
            gosub @rotate_object
        else
            gosub @destroy_object
        end
    else
        gosub @destroy_object
    end
end
 
: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

Нужен SAMPFUNCS 2.4, по твоим словам, это "плагин, необходимый для компиляции".

В этой теме ( http://blasthack.net/threads/cleo-plugin-sampfuncs.17/ ) найдешь всё необходимое, как для GTA:SA, так и для Sanny Builder, чтобы данный скрипт работал.

Изменение активации:
Код:
0AB0: 75
0AB0: не трогаем!
75 код клавиши K(англ.)

Коды клавиш(на английской раскладке):
Код:
Backspace - 8
Tab - 9
Enter 13
Shift  - 16
Ctrl  - 17
Pause - 19
Caps Lock - 20
Esc - 27
Spacebar - 32
Page Up - 33
Page Down - 34
End - 35
Home - 36
Insert - 45
Delete - 46
0 - 48
1 - 49
2 - 50
3 - 51
4 - 52
5 - 53
6 - 54
7 - 55
8 - 56
9 - 57
A - 65
B - 66
C - 67
D - 68
E - 69
F - 70
G - 71
H - 72
I - 73
J - 74
K - 75
L - 76
M - 77
N - 78
O - 79
P - 80
Q - 81
R - 82
S - 83
T - 84
U - 85
V - 86
W - 87
X - 88
Y - 89
Z - 90
0 (numpad при NumLock ON) - 96
1 (numpad при NumLock ON)  - 97
2 (numpad при NumLock ON)  - 98
3 (numpad при NumLock ON)  - 99
4 (numpad при NumLock ON)  - 100
5 (numpad при NumLock ON)  - 101
6 (numpad при NumLock ON)  - 102
7 (numpad при NumLock ON)  - 103
8 (numpad при NumLock ON)  - 104
9 (numpad при NumLock ON)  - 105
* (numpad) - 106
+ (numpad) - 107
- (numpad) - 109
. (numpad) - 110
/ (numpad) - 111
F1 - 112
F2 - 113
F3 - 114
F4 - 115
F5 - 116
F6 - 117
F7 - 118
F8 - 119
F9 - 120
F10 - 121
F11 - 122
F12 - 123
Num Lock - 144
Scroll Lock - 145
; - 186
= - 187
, - 188
- - 189
. - 190
/ - 191
` - 192
[ - 219
\ - 220
] - 221
' - 222
 

Bullet0070

Новичок
14
0
Всё установил, по папкам куда надо раскидал.
В итоге, код получился слудующий:
Код:
{$CLEO}
 
:targetcmd
wait 0
if and
0AB0: key_pressed KEY_AIM
0AD2: 0@ = player $PLAYER_CHAR targeted_actor //IF and SET
else_jump @targetcmd
if
0AB0: key_pressed 69
then
0B2B: samp 1@ = get_player_id_by_actor_handle 0@
0AF9: samp say_msg "/su %d 5 Napad na PO" 1@
end
if
0AB0: key_pressed 70
then
0B2B: samp 1@ = get_player_id_by_actor_handle 0@
0AF9: samp say_msg "/Take gunlicense %d 7" 1@
end
...
if
0AB0: key_pressed 71
then
0B2B: samp 1@ = get_player_id_by_actor_handle 0@
0AF9: samp say_msg "/Take weapons %d" 1@
end
jump @targetcmd
При компиляции всё равно пишет то же самое =(
Приложу под спойлер скрины папки CLEO, может там чего-то накосячил.

Ссылка на картинку: http://imgdepo.ru/id/i4167127
 

itsLegend

Фонд борьбы за жуков 🐞
Администратор
2,696
1,469
Приложу под спойлер скрины папки CLEO, может там чего-то накосячил.

Ссылка на картинку: http://imgdepo.ru/id/i4167127
SASCM, opcodes и classes совсем в другие папки.
FYP написал(а):
* Для разработчиков:
Скопировать все файлы из папки "SB data", нахоящейся в архиве, в каталог по пути ".../Sanny Builder 3/data/sa"

И убери из кода:
Код:
and
0AB0: key_pressed KEY_AIM
и
Код:
...
Вообщем ни о чём.
 
  • Нравится
Реакции: Bullet0070

Bullet0070

Новичок
14
0
Спасибо за терпение, всё заработало. Правда опять выскочила новая ошибка, ну её я сам смог исправить.
Я доволен как СЛОН ^^
В скриптинге я новичок, это ещё очень мягко сказано))))
С меня плюсик.
 

alfazlo

Потрачен
128
36
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Нужно получить quanternion из матрицы и привести его к виду в котором он передается в sa:mp.
Естть следующая функция: CQuaternion__get 0x59C3E0. Я передаю в нее указатель (по смещению +20) на матрицу из структуры игрока. но не знаю что она возвращает или мне нужно передавать в качестве второго параметра указатель на выделенную память для записи вектора кватерниона, как отличить процедуру от функции? Есть люди которые в asm разбираются, помогите.
int __stdcall CQuaternion__get(RwMatrix *)
 

Bullet0070

Новичок
14
0
Ликование длилоcь не долго( Насколько я понял, этот код не присваивает значение переменной %d значение ИДа игрока. Когда в игре пробую скрипт, пишет, мол, неверный ID/ID не найден и тп. Поможете найти ошибку? Код под спойлером.
Код:
{$CLEO}
 
0000:
:targetcmd
wait 0
if
0AD2: 0@ = player $PLAYER_CHAR targeted_actor //IF and SET
else_jump @targetcmd
if
0AB0: key_pressed 69
then
0B2B: samp 1@ = get_player_id_by_actor_handle 0@
0AF9: samp say_msg "/su %d 5 Article 1.3 of the Criminal Code" 1@
wait 1000
0B2B: samp 1@ = get_player_id_by_actor_handle 0@
0AF9: samp say_msg "/take gunlicense %d 5" 1@
end
if
0AB0: key_pressed 49
then
0B2B: samp 1@ = get_player_id_by_actor_handle 0@
0AF9: samp say_msg "/take driverslicense %d 3" 1@
end
if
0AB0: key_pressed 51
then
0B2B: samp 1@ = get_player_id_by_actor_handle 0@
0AF9: samp say_msg "/su %d 6 Article 2.2 of the Criminal Code" 1@
wait 1000
0B2B: samp 1@ = get_player_id_by_actor_handle 0@
0AF9: samp say_msg "/take gunlicense %d 7" 1@
wait 1000
0B2B: samp 1@ = get_player_id_by_actor_handle 0@
0AF9: samp say_msg "/take driverslicense %d 7" 1@
wait 1000
0B2B: samp 1@ = get_player_id_by_actor_handle 0@
0AF9: samp say_msg "/take boatlicense %d 7" 1@
wait 1000
0B2B: samp 1@ = get_player_id_by_actor_handle 0@
0AF9: samp say_msg "/take flyinglicense %d 7" 1@
end
jump @targetcmd
 

itsLegend

Фонд борьбы за жуков 🐞
Администратор
2,696
1,469
Ликование длилоcь не долго( Насколько я понял, этот код не присваивает значение переменной %d значение ИДа игрока. Когда в игре пробую скрипт, пишет, мол, неверный ID/ID не найден и тп. Поможете найти ошибку? Код под спойлером.


Полностью рабочий код:
Код:
{$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