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

Forus

Известный
54
12
В командах работают условия?
PHP:
0B34: samp register_client_command "weapons" to_label @weapons
:weapons
say "/buyweapons"
wait 150
if
0B4C:  samp is_dialog_active 63
then
0B49: samp set_current_dialog_list_item 1
wait 50
0B47: samp close_current_dialog_with_button 1
end
SAMP.CmdRet
Как я понял,ты прописываешь команду /weapons, у тебя прописывается автоматом СЕРВЕРНАЯ команда /buyweapons,и дальше условие,типа если активен диалог,то выделяем 1 строку(вроде как 1 строка выделяется автоматом при открытии диалога подобного типа,поэтому можно эту строчку убрать),и закрываем диалог нажав кнопку true .
По сути всё должно работать,но зачем проверка на диалог?Она конечно не мешает,просто и не нужна то особо ..Если отправляешь команду серверу,то диалог как бы появится в любом случае.
Ну в целом я бы сделал так :
Код:
0B34: samp register_client_command "weapons" to_label @weapons
:weapons
say "/buyweapons" // отправляем серверу /buyweapons
wait 250
0B47: samp close_current_dialog_with_button 1 // закрываем диалог нажав кнопку true
end
SAMP.CmdRet
P.S Но если сервер конченный,то тогда конечно,ставь проверку,ибо отзыв от команды может идти и 500 и 1000мс.

------------------------------------------
Как отправить фейковые пакеты о попадании пуль ?
Код:
Пример отправки синхронизации пули в игрока.Вызов функции: 0AB1: call @SendFakeBulletShot 1 HitID 1@ Функция:

:SendFakeBulletShot
0B20: samp 9@ = actor_handle_by_samp_player_id 0@ // Получаем хендл игрока
Actor.StorePos($PLAYER_ACTOR, 10@ 11@ 12@) // Находим наши координаты
Actor.StorePos(9@, 13@ 14@ 15@) // Находим координаты игрока

0AC8: 5@ = allocate_memory_size 39 // Выделяем память для bitstream
0C0D: struct 5@ offset 0 size 1 = 1 //type - тип пули. 0 - попадает в воздух. 1 - в игрока. 2 - в машину. 3 - в объект.
0C0D: struct 5@ offset 1 size 2 = 0@ //id - id того, в зависимости, что вы написали выше (игрока, машины, объекта). Если type = 0, то id = 0.

//Позиции XYZ, откуда мы стреляем.
0C0D: struct 5@ offset 3 size 4 = 10@
0C0D: struct 5@ offset 7 size 4 = 11@
0C0D: struct 5@ offset 11 size 4 = 12@

//Позиции XYZ, куда попадает пуля. Если вы стреляете в объект, игрока или машину, то независимо, от того,
//что вы здесь написали, пуля попадет в тело, с смещением от центра тела, которое будет указано ниже.
0C0D: struct 5@ offset 15 size 4 = 13@
0C0D: struct 5@ offset 19 size 4 = 14@
0C0D: struct 5@ offset 23 size 4 = 15@

//Если вы стреляете в игрока, объект или машину, то это смещение от центра тела.
//То есть, координаты 0 0 0 это середина тела, а координаты 0.0 0.0 0.5, координаты головы игрока, и тд.
//Если стреляете в воздух, то ставьте их всегда 0 0 0.
0C0D: struct 5@ offset 27 size 4 = 0.0
0C0D: struct 5@ offset 31 size 4 = 0.0
0C0D: struct 5@ offset 35 size 4 = 0.0

0B3D: raknet 6@ = new_bit_stream
0B40: raknet bit_stream 6@ write 224 type BS_TYPE_BYTE size 1
0B40: raknet bit_stream 6@ write 5@ type BS_TYPE_ARRAY size 39
0B8B: raknet send bit_stream 6@
0B3E: raknet delete_bit_stream 6@
0AC9: free_allocated_memory 5@
0AB2: ret 0
 
Последнее редактирование:

next23012

Новичок
59
6
Почему при открытом диалоге 63 (серверный) ничего не происходит?
PHP:
while true
    wait 0
    if 0B4C:  samp is_dialog_active 63
    then
    0B49: samp set_current_dialog_list_item 1
    wait 100
    0B47: samp close_current_dialog_with_button 1
end
 

:notCoder:

Новичок
19
0
Почему этот скрипт не работает на 0.3.7? Прописываю команду и 0 эмоций p.s. скрипт не мой, нашел на просторах интернета
CLEO:
{$CLEO .cs}

//-------------MAIN---------------
03A4: name_thread "ackid"
0662: printstring "BY MISTER_GONWIK"
0662: printstring "FOR BlastHack.Net"
03F0: enable_text_draw 1
0000: NOP

:ackid_56
8AFA:   not is_samp_available
004D: jump_if_false @ackid_76
0001: wait 100 ms
0002: jump @ackid_56

:ackid_76
0AF7: samp 0@ = get_base
0AF8: samp add_message_to_chat "AdminsChecker: {FFFFFF}by {0081FF}voditel_autobusa." color 16729344 
0AF8: samp add_message_to_chat "AdminsChecker: {0081FF}/ac{FFFFFF} - [включить чекер] | {0081FF}/acr{FFFFFF} - [перезагрузить список админов]." color 16729344 
0B63: samp unregister_client_command "acr"
0B63: samp unregister_client_command "ac"
0B34: samp register_client_command "ac" to_label @ackid_715
0B34: samp register_client_command "acr" to_label @ackid_727
0006: 22@ = 0
0050: gosub @ackid_819
0050: gosub @ackid_921

:ackid_319
0001: wait 0 ms
00D6: if
0039:   22@ == 1
004D: jump_if_false @ackid_708
0AB1: call_scm_func @ackid_1141 0 
0007: 15@ = 10.0
0007: 18@ = 10.0
0007: 16@ = 420.0
0007: 19@ = 434.0
0006: 4@ = 0

:ackid_398
00D6: if
0B23:  samp is_player_connected 4@
004D: jump_if_false @ackid_686
0B36: samp 2@ = get_player_nickname 4@
0AD3: 3@ = format " %s " 2@ 
0C18: 12@ = strstr string1 10@ string2 3@
00D6: if
8039:   not  12@ == 0
004D: jump_if_false @ackid_686
0B65: samp 20@ = player 4@ score
00D6: if
8019:   not  20@ > 0
004D: jump_if_false @ackid_528
0AB1: call_scm_func @ackid_1276 7 18@ 19@ 255 0 0 225 4@ 
0002: jump @ackid_559

:ackid_528
0AB1: call_scm_func @ackid_1276 7 18@ 19@ 255 255 255 225 4@ 

:ackid_559
000B: 18@ += 24.0
0B20: samp 21@ = actor_handle_by_samp_player_id 4@
00D6: if
056D:   actor 21@ defined
004D: jump_if_false @ackid_686
00D6: if
0B5C:  samp is_player 4@ paused
004D: jump_if_false @ackid_646
0AB1: call_scm_func @ackid_1276 7 15@ 16@ 0 129 255 225 4@ 
0002: jump @ackid_676

:ackid_646
0AB1: call_scm_func @ackid_1276 7 15@ 16@ 239 129 0 225 4@ 

:ackid_676
000B: 15@ += 24.0

:ackid_686
000A: 4@ += 1
0019:   4@ > 999
004D: jump_if_false @ackid_398

:ackid_708
0002: jump @ackid_319

:ackid_715
0B12: 22@ = 22@ XOR 1
0B43: samp cmd_ret

:ackid_727
0050: gosub @ackid_882
0050: gosub @ackid_819
0050: gosub @ackid_921
0AF8: samp add_message_to_chat "AdminsChecker: {FFFFFF}список админов успешно перезагружен." color 16729344 
0B43: samp cmd_ret

:ackid_819
0AC8: 1@ = allocate_memory_size 30
0AC8: 12@ = allocate_memory_size 30
0AC8: 2@ = allocate_memory_size 24
0AC8: 3@ = allocate_memory_size 24
0AC8: 10@ = allocate_memory_size 7200
0AC8: 9@ = allocate_memory_size 64
0C11: memset destination 10@ value 0 size 7200
0085: 13@ = 10@ // (int)
0051: return

:ackid_882
0AC9: free_allocated_memory 1@
0AC9: free_allocated_memory 12@
0AC9: free_allocated_memory 2@
0AC9: free_allocated_memory 3@
0AC9: free_allocated_memory 10@
0AC9: free_allocated_memory 9@
0006: 13@ = 0
0051: return

:ackid_921
00D6: if
0AAB:   file_exists "CLEO\admins.txt"
004D: jump_if_false @ackid_1137
0A9A: 30@ = openfile "CLEO\admins.txt" mode "rt" // IF and SET
0A8C: write_memory 10@ size 1 value 32 virtual_protect 1
000A: 10@ += 1

:ackid_995
0001: wait 0 ms
00D6: if
0AD7: read_string_from_file 30@ to 1@ size 24 // IF and SET
004D: jump_if_false @ackid_1070
0C17: 7@ = strlen 1@
0AB1: call_scm_func @ackid_1200 2 1@ 7@ 
0C10: memcpy destination 10@ source 1@ size 7@
005A: 10@ += 7@ // (int)
000A: 8@ += 1

:ackid_1070
0AB1: call_scm_func @ackid_1344 3 1@ 0 24 
0AD6:   end_of_file 30@ reached
004D: jump_if_false @ackid_995
0A8C: write_memory 10@ size 1 value 32 virtual_protect 1
0A9B: closefile 30@
0085: 10@ = 13@ // (int)
000E: 8@ -= 1
0002: jump @ackid_1139

:ackid_1137
0A93: end_custom_thread

:ackid_1139
0051: return

:ackid_1141
0AF7: samp 0@ = get_base
0A8E: 1@ = 0@ + 32016 // int
0A8E: 2@ = 0@ + 2173568 // int
0A8D: 2@ = read_memory 2@ size 4 virtual_protect 0
0AA6: call_method 1@ struct 2@ num_params 0 pop 0 
0AB2: ret 0

:ackid_1200
000E: 1@ -= 1
005A: 0@ += 1@ // (int)
0A8D: 2@ = read_memory 0@ size 1 virtual_protect 0
00D6: if
0039:   2@ == 10
004D: jump_if_false @ackid_1256
0A8C: write_memory 0@ size 1 value 32 virtual_protect 0

:ackid_1256
0062: 0@ -= 1@ // (int)
000A: 1@ += 1
0AB2: ret 0

:ackid_1276
0340: set_text_draw_RGBA 2@ 3@ 4@ 5@
0349: set_text_draw_font 3
081C: draw_text_outline 1 RGBA 0 0 0 255
033F: set_text_draw_letter_size 0.35 1.27
045A: draw_text_1number 0@ 1@ GXT 'NUMBER' number 6@
0AB2: ret 0

:ackid_1344
000E: 2@ -= 1
0006: 3@ = 0

:ackid_1358
0A8C: write_memory 0@ size 1 value 1@ virtual_protect 0
000A: 0@ += 1
000A: 3@ += 1
001D:   3@ > 2@ // (int)
004D: jump_if_false @ackid_1358
0AB2: ret 0
000E: 2@ -= 1
0006: 3@ = 0

:ackid_1418
0A8D: 4@ = read_memory 1@ size 1 virtual_protect 0
0A8C: write_memory 0@ size 1 value 4@ virtual_protect 0
000A: 1@ += 1
000A: 0@ += 1
000A: 3@ += 1
001D:   3@ > 2@ // (int)
004D: jump_if_false @ackid_1418
0AB2: ret 0
 

:notCoder:

Новичок
19
0
потому что тут должно быть MISTER_GONWIK, и потому что не обновлены оффсеты на 0.3.7
я не приписывал свое имя, водитель автобуса уже был там приписан, могу даже ссылку дать откуда качал, чужие копирайты не нарушаю:buba:
 

AWRage

Активный
642
141
Крашит когда ввожу /setweather :c

CLEO:
{$CLEO}
0000: 'AW_Rage'

repeat
wait 400
until samp.available
0B34: samp register_client_command "setweather" to_label @SetWeather
0BDE: pause_thread 0

:SetWeather
0B35: 0@ = get_last_command_params
0C17: 1@ = strlen 0@
if 1@ > 0
then
  0C1A: 0@ = atoi 0@
  0BAC: 1@ = get_server_settings_ptr
  005C: 1@ += 46 // оффсет погоды, или как это называется, я не знаю точно :)
  0A8C: write_memory 1@ size 1 value 0@ virtual_protect 1
else
  0AF8: samp add_message_to_chat "/setweather" color 0xFFFFFF
end
 

hnnssy

Известный
Друг
2,684
2,749
Крашит когда ввожу /setweather :c

CLEO:
{$CLEO}
0000: 'AW_Rage'

repeat
wait 400
until samp.available
0B34: samp register_client_command "setweather" to_label @SetWeather
0BDE: pause_thread 0

:SetWeather
0B35: 0@ = get_last_command_params
0C17: 1@ = strlen 0@
if 1@ > 0
then
  0C1A: 0@ = atoi 0@
  0BAC: 1@ = get_server_settings_ptr
  005C: 1@ += 46
  0A8C: write_memory 1@ size 1 value 0@ virtual_protect 1
else
  0AF8: samp add_message_to_chat "/setweather" color 0xFFFFFF
end
cmd_ret
 
  • Нравится
Реакции: Lightkiller и AWRage

Woofing Giraffe

Активный
402
49
Крашит когда ввожу /setweather :c

CLEO:
{$CLEO}
0000: 'AW_Rage'

repeat
wait 400
until samp.available
0B34: samp register_client_command "setweather" to_label @SetWeather
0BDE: pause_thread 0

:SetWeather
0B35: 0@ = get_last_command_params
0C17: 1@ = strlen 0@
if 1@ > 0
then
  0C1A: 0@ = atoi 0@
  0BAC: 1@ = get_server_settings_ptr
  005C: 1@ += 46 // оффсет погоды, или как это называется, я не знаю точно :)
  0A8C: write_memory 1@ size 1 value 0@ virtual_protect 1
else
  0AF8: samp add_message_to_chat "/setweather" color 0xFFFFFF
end
Код:
:SetWeather
SAMP.IsCommandTyped(0@)
if and
0AD4: 0@ = scan_string 0@ format "%d" 2@ // ID погоды
2@ > 0
then
  0A8C: write_memory 0xC81320  size 2 value 2@ virtual_protect 1
else
  0AF8: samp add_message_to_chat "/setweather" color 0xFFFFFF
end
cmdret
 
  • Нравится
Реакции: Lightkiller и AWRage

Xample

Новичок
89
1
Пожскажите как реализовать ускорение на велосипеде, (но не эмуляцию нажатия клавиши W ) может можно через опкод 0B56: set_game_key 0@ state 1@ ? но незнаю что там прописать, чтобы вообще хотябы велик ехал вперёд (без W)


Вроде разобрался за ускорение отвечает 0B56: set_game_key 16 state 128 а можно ли так зделать чтобы держа клавишу W тыкался опкод "0B56: set_game_key 16 state 128" (при удержании шифта всё норм, актёр начинает ускорятся на велике, а когда ставлю кнопку W то едит как обычно, получается что она перекрывает действие опкода, а мне нужна именно W)
 
Последнее редактирование:

AWRage

Активный
642
141
Когда пишу /setweather 1, крашит самп, в чем проблема?
Код:
{$CLEO}
0000: 'AW_Rage'

repeat
wait 400
until samp.available
0B34: samp register_client_command "setweather" to_label @SetWeather
0BDE: pause_thread 0

:SetWeather
0B35: 0@ = get_last_command_params
0C17: 1@ = strlen 0@
if 1@ > 0
then
  0C1A: 0@ = atoi 0@
  0BAC: 1@ = get_server_settings_ptr
  005C: 1@ += 46
  0A8C: write_memory 1@ size 1 value 0@ virtual_protect 1
else
  0AF8: samp add_message_to_chat "/setweather" color 0xFFFFFF
end
0B43: samp cmd_ret
 

itsLegend

Фонд борьбы за жуков 🐞
Администратор
2,696
1,460
Когда пишу /setweather 1, крашит самп, в чем проблема?
005C предназначен для прибавления значения глобальной переменной к локальной.
Можно использовать опкоды SF с префиксом struct

Пожскажите как реализовать ускорение на велосипеде, (но не эмуляцию нажатия клавиши W ) может можно через опкод 0B56: set_game_key 0@ state 1@ ? но незнаю что там прописать, чтобы вообще хотябы велик ехал вперёд (без W)


Вроде разобрался за ускорение отвечает 0B56: set_game_key 16 state 128 а можно ли так зделать чтобы держа клавишу W тыкался опкод "0B56: set_game_key 16 state 128" (при удержании шифта всё норм, актёр начинает ускорятся на велике, а когда ставлю кнопку W то едит как обычно, получается что она перекрывает действие опкода, а мне нужна именно W)
0B56 записывает в память игры определенное значение, оно потом очищается => используй опкод с задержкой, к примеру, в 100 ms.
 
Последнее редактирование:
  • Нравится
Реакции: Lightkiller

SR_team

like pancake
BH Team
4,720
6,371
Раскритикую тебя немножко.
Ты нигде в коде не задействуешь содержимое инклуда, так смысл его подключать?
Это клео и число переменных ограничено, в вызовах команд в отличие от SCM вызовов используются переменные из основного цикла, по этому если дальше не обрабатываешь параметры команды можно юзать одну и ту же переменную на процитированном мной выше участке.
player.Defined($PLAYER_ACTOR)
Это лишняя проверка