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

eduard8702

Новичок
3
0
Помогите пожалуйста, мне надо сделать, чтобы скрипт работал при вводе команды и отключался при вводе команды. Чтобы при вводе команды он работал без конца, делал один и тот же цикл всё время, пока не ввести команду для отключения скрипта. Помогите, очень нужно
CLEO:
{$CLEO .cs}
if not 0@ = SAMP.Base()
then 0A93: end_custom_thread
end
while not SAMP.Available()
wait 100
end
0B34: samp register_client_command "rfpp" to_label @rfpp
0BDE: pause_thread 0

:rfpp
if call @is_racecp_active 0
then
call @get_racecp_pos 0 X 1@ Y 2@ Z 3@
0AD1: show_formatted_text_highpriority "%f %f %f" time 1448 1@ 2@ 3@
if Actor.Driving($PLAYER_ACTOR)
then
call @incar 3 X 1@ Y 2@ Z 3@
else
call @onfoot 3 X 1@ Y 2@ Z 3@
jump @is_racecp_active
end
else
0AD1: show_formatted_text_highpriority "Not Active" time 1448
end
samp.CmdRet()
:onfoot
0B2B: samp 9@ = get_player_id_by_actor_handle $PLAYER_ACTOR
0AC8: 10@ = allocate_memory_size 68
0BBA: samp store_player 9@ onfoot_data 10@
0C0D: struct 10@ offset 6 size 4 = 0@
0C0D: struct 10@ offset 10 size 4 = 1@
0C0D: struct 10@ offset 14 size 4 = 2@
0BC0: samp send_onfoot_data 10@
0AC9: free_allocated_memory 10@
0AB2: ret 0
:incar
0B2B: samp 13@ = get_player_id_by_actor_handle $PLAYER_ACTOR
0AC8: 14@ = allocate_memory_size 63
0BBB: samp store_player 13@ incar_data 14@
0C0D: struct 14@ offset 24 size 4 = 0@
0C0D: struct 14@ offset 28 size 4 = 1@
0C0D: struct 14@ offset 32 size 4 = 2@
0C0D: struct 14@ offset 36 size 4 = 0.0
0C0D: struct 14@ offset 40 size 4 = 0.0
0C0D: struct 14@ offset 44 size 4 = 0.0
0BC1: samp send_incar_data 14@
0AC9: free_allocated_memory 14@
0AB2: ret 0
:is_racecp_active
if 0AA2: 0@ = loadlib "samp.dll"
then 0A8E: 1@ = 0@ + 0x21A10C
0A8D: 1@ = readMem 1@ sz 4 vp 0
1@ += 0x49
0A8D: 1@ = readMem 1@ sz 4 vp 0
if 1@ == true
then 0485: return_true
else 059A: return_false
end
0AA3: freelib 0@
end
0AB2: ret 0
:get_racecp_pos
if 0AA2: 0@ = loadlib "samp.dll"
then 0A8E: 1@ = 0@ + 0x21A10C
0A8D: 1@ = readMem 1@ sz 4 vp 0
1@ += 0x2C
0A8D: 2@ = readMem 1@ sz 4 vp 0
1@ += 0x4
0A8D: 3@ = readMem 1@ sz 4 vp 0
1@ += 0x4
0A8D: 4@ = readMem 1@ sz 4 vp 0
0AA3: freelib 0@
end
0AB2: ret 3 2@ 3@ 4@
 
Последнее редактирование модератором:
1,417
1,029
@eduard8702
CLEO:
{$CLEO}

repeat
wait 0
until 0AFA:

0B34: samp register_client_command "rfpp" to_label @rfpp

WHILE TRUE
wait 0
    IF 30@ == 1
    THEN
        if call @is_racecp_active 0
        then
            call @get_racecp_pos 0 X 1@ Y 2@ Z 3@
            0AD1: show_formatted_text_highpriority "%f %f %f" time 1448 1@ 2@ 3@
            if Actor.Driving($PLAYER_ACTOR)
            then
                call @incar 3 X 1@ Y 2@ Z 3@
            else
                call @onfoot 3 X 1@ Y 2@ Z 3@
            END
        END
    END
END

:rfpp
0B12: 30@ = 30@ XOR 1
IF 30@ == 1
THEN
    printf "~g~On" 700
ELSE
    printf "~r~Off" 700
END
samp.CmdRet()

:onfoot
0B2B: samp 9@ = get_player_id_by_actor_handle $PLAYER_ACTOR
0AC8: 10@ = allocate_memory_size 68
0BBA: samp store_player 9@ onfoot_data 10@
0C0D: struct 10@ offset 6 size 4 = 0@
0C0D: struct 10@ offset 10 size 4 = 1@
0C0D: struct 10@ offset 14 size 4 = 2@
0BC0: samp send_onfoot_data 10@
0AC9: free_allocated_memory 10@
0AB2: ret 0

:incar
0B2B: samp 13@ = get_player_id_by_actor_handle $PLAYER_ACTOR
0AC8: 14@ = allocate_memory_size 63
0BBB: samp store_player 13@ incar_data 14@
0C0D: struct 14@ offset 24 size 4 = 0@
0C0D: struct 14@ offset 28 size 4 = 1@
0C0D: struct 14@ offset 32 size 4 = 2@
0C0D: struct 14@ offset 36 size 4 = 0.0
0C0D: struct 14@ offset 40 size 4 = 0.0
0C0D: struct 14@ offset 44 size 4 = 0.0
0BC1: samp send_incar_data 14@
0AC9: free_allocated_memory 14@
0AB2: ret 0

:is_racecp_active
if 0AA2: 0@ = loadlib "samp.dll"
then 0A8E: 1@ = 0@ + 0x21A10C
0A8D: 1@ = readMem 1@ sz 4 vp 0
1@ += 0x49
0A8D: 1@ = readMem 1@ sz 4 vp 0
if 1@ == true
then 0485: return_true
else 059A: return_false
end
0AA3: freelib 0@
end
0AB2: ret 0

:get_racecp_pos
if 0AA2: 0@ = loadlib "samp.dll"
then 0A8E: 1@ = 0@ + 0x21A10C
0A8D: 1@ = readMem 1@ sz 4 vp 0
1@ += 0x2C
0A8D: 2@ = readMem 1@ sz 4 vp 0
1@ += 0x4
0A8D: 3@ = readMem 1@ sz 4 vp 0
1@ += 0x4
0A8D: 4@ = readMem 1@ sz 4 vp 0
0AA3: freelib 0@
end
0AB2: ret 3 2@ 3@ 4@
 

MrCat

Новичок
28
0
Имею код, нужно сделать так, чтобы он автоматически нажимал enter, после ввода команды, возможно ли это сделать?
CLEO:
:Noname_231
alloc 0@ 128
alloc 1@ 128
wait 0
SAMP.GetChatString(99, 0@, 0, 0, 0)
strstr 1@ 0@ "/accept medic."
else_jump @Noname_31
wait 300
say /accept medic"
free 0@
free 1@
jump @Noname_15
 

D3.Pheonix

🎹
Модератор
2,817
1,598
Как сделать так, чтобы прописав команду "/test x y" запись шла в ини файл. X и Y это не числа, а слова
Чтобы ини файл выглядел вот так:
[TEST1]
ab=x
ab=y
[TEST2]
ab=x
ab=y
[TEST3]
ab=x
ab=y
[TEST4]
ab=x
ab=y
[TEST5]
ab=x
ab=y
[TEST6]
ab=x
ab=y
Как то так, только он не будет считать [test1] [test2] и т.д. ВСё будет [TEST]
CLEO:
{$CLEO}
0000:
repeat
wait 0
until SAMP.Available()
0B34: "test" @test
0BDE: 0

:test
0B35: samp 0@ = get_last_command_params
alloc 2@ 156
alloc 1@ 156
0AA5: call 0x8220AD num_params 4 pop 4 params 2@ 1@ "%s %s" 0@
0AA7: call_function 0x8220AD num_params 4 pop 4 2@ 1@ "%s %s" 0@ 7@
if
7@ == 2
jf @ret
0A9A: 4@ = openfile "Cleo\Config.ini" mode "at"
0AD9: write_formatted_text "[TEST]%cab=%s%cab=%s%c%c" in_file 4@ 0x0A 1@ 0x0A 2@ 0x0A 0x0A
File.Close(4@)

:ret
free 1@
free 2@
SAMP.CmdRet()
 
Последнее редактирование:

p1cador

cerf
Проверенный
220
359
Имею код, нужно сделать так, чтобы он автоматически нажимал enter
CLEO:
0AB1: call_scm_func @emul 2 0xD 1

:emul
if
0AA2: 2@ = load_library "User32.dll"
jf @emul_1
if
0AA4: 2@ = get_proc_address "keybd_event" library 2@
jf @emul_1
0AA5: call 2@ num_params 4 pop 0 0 0 0 0@
wait 1@
0AA5: call 2@ num_params 4 pop 0 0 2 0 0@
:emul_1
ret 0
 

D3.Pheonix

🎹
Модератор
2,817
1,598
Спасибо. А каким опкодом можно очистить этот файл?
Удаляешь файл, если введешь опять /test ...., он создастся вновь
CLEO:
0B00: delete_file "Cleo\Config.ini"

/clear
CLEO:
{$CLEO}
0000:

repeat
wait 0
until SAMP.Available()
0B34: "test" @test
0B34: "clear" @clear
0BDE: 0

:test
0B35: samp 0@ = get_last_command_params
alloc 2@ 156
alloc 1@ 156
0AA5: call 0x8220AD num_params 4 pop 4 params 2@ 1@ "%s %s" 0@
0AA7: call_function 0x8220AD num_params 4 pop 4 2@ 1@ "%s %s" 0@ 7@
if
7@ == 2
jf @ret
0A9A: 4@ = openfile "Cleo\Config.ini" mode "at"
0AD9: write_formatted_text "[TEST]%cab=%s%cab=%s%c%c" in_file 4@ 0x0A 1@ 0x0A 2@ 0x0A 0x0A
File.Close(4@)

:ret
free 1@
free 2@
SAMP.CmdRet()

:clear
0AAB:   file_exists "Cleo\Config.ini"
jf @clear_ret
0B00: delete_file "Cleo\Config.ini"

:clear_ret
samp.CmdRet()
 
Последнее редактирование:

Andrewsolomon

Новичок
14
0
Как отправить пакет данных на сервер о том, что я якобы нахожусь в авто определенной модели (например Инфернус), надо именно чтобы сервак думал что я нахожусь в этом авто
Оооочень надо:)
Заранее спасибо
 

jenekbueno

Известный
157
69
Как отправить пакет данных на сервер о том, что я якобы нахожусь в авто определенной модели (например Инфернус), надо именно чтобы сервак думал что я нахожусь в этом авто
Оооочень надо:)
Заранее спасибо
нопишь плеер сунк, потом создаешь битстрим, заполняешь инкар дату и примерно раз в 50 мс отправляешь её
 

san0

Известный
Друг
411
267
указатели
0x58EE87 hpX 0x58EE68 hpY
0x58DD0F starsX 0x58DDFC starsY
Возможно по названют машины получить её type I'd ?
только это ресурсоёмко
CLEO:
:getModelIDbyVehicleName
const
    pRequiredName = 0@
    pModelInfoPtr = 1@
    i             = 2@
    tmp           = 3@
   
    FIRST_VEHICLE_CBASE_MODEL_INFO_PTR = 0xA9B708
    MAX_VEHICLE_MODELS_COUNT     = 211
    szGameName_offset            = 0x32
    sizeof_pointer               = 0x4
end
0006: pModelInfoPtr = FIRST_VEHICLE_CBASE_MODEL_INFO_PTR

for i = 0 to MAX_VEHICLE_MODELS_COUNT
    0A8D: tmp = read_memory pModelInfoPtr size 0x4 virtual_protect false
    000A: tmp += szGameName_offset
   
    if 0C14: strcmp string1 tmp string2 pRequiredName
    then
        000A: i += 400  
        return_true
        ret 1 i                                             
    end
   
    pModelInfoPtr += sizeof_pointer
end
return_false
ret 1 0
 
  • Нравится
Реакции: MAHEKEH и LaRossa

DarkP1xel

Сила воли наше всё.
BH Team
3,635
4,962
указатели
0x58EE87 hpX 0x58EE68 hpY
0x58DD0F starsX 0x58DDFC starsY

только это ресурсоёмко
CLEO:
:getModelIDbyVehicleName
const
    pRequiredName = 0@
    pModelInfoPtr = 1@
    i             = 2@
    tmp           = 3@
 
    FIRST_VEHICLE_CBASE_MODEL_INFO_PTR = 0xA9B708
    MAX_VEHICLE_MODELS_COUNT     = 211
    szGameName_offset            = 0x32
    sizeof_pointer               = 0x4
end
0006: pModelInfoPtr = FIRST_VEHICLE_CBASE_MODEL_INFO_PTR

for i = 0 to MAX_VEHICLE_MODELS_COUNT
    0A8D: tmp = read_memory pModelInfoPtr size 0x4 virtual_protect false
    000A: tmp += szGameName_offset
 
    if 0C14: strcmp string1 tmp string2 pRequiredName
    then
        000A: i += 400
        return_true
        ret 1 i                                           
    end
 
    pModelInfoPtr += sizeof_pointer
end
return_false
ret 1 0
Лучше хукать эти участки и изменять в них X, Y.
C++:
RenderHealthBar(int playerId, int x, int y) // 0x589270
RenderBreathBar(int playerId, int x, int y) // 0x589190
RenderArmorBar(int playerId, int x, int y) // 0x5890A0
DrawWeaponIcon(CPed* ped, int x, int y, float alpha) // 0x58D7D0
DrawAmmo(CPed* ped, int x, int y, float alpha) // 0x5893B0
plugin-sdk/CHud.cpp at master · DK22Pac/plugin-sdk · GitHub(https://github.com/DK22Pac/plugin-sdk/blob/master/plugin_sa/game_sa/CHud.cpp)
 

romanblinov2013

RB_PRO
Проверенный
212
196
Доброй ночи, уважаемые. Я много чекал форум, но годный ответ на свой вопрос не нашёл.
Поэтому пишу напрямую!
Если ли способ узнать, что я юзаю колёсико вверх/вниз.

Тобеж:
Код:
Если (Я юзаю колёсико вверх/вниз) {
// some code
}
 

D3.Pheonix

🎹
Модератор
2,817
1,598
Можешь сразу весь код, а то не догоняю чет.
Доброй ночи, уважаемые. Я много чекал форум, но годный ответ на свой вопрос не нашёл.
Поэтому пишу напрямую!
Если ли способ узнать, что я юзаю колёсико вверх/вниз.

Тобеж:
Код:
Если (Я юзаю колёсико вверх/вниз) {
// some code
}
Тоже искал, слышал лишь что кейворов нет для скрола(
Мб есть функа какая-то ?
 

kawa operand

перерывпятьминут
602
333
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
CLEO:
while true
wait 0
    if 00E1:   player 0 pressed_key 5
    then // вверх
    end
    if 00E1:   player 0 pressed_key 7
    then // вниз
    end
end
 

san0

Известный
Друг
411
267
Лучше хукать эти участки и изменять в них X, Y.
Соглашусь, инвертированные координаты и подобное не тянут на серьёзность, я бы тоже так сделал, только:
1) Для того, чтоб использовать не константное значение(уже полноценный скрипт) -
прийдется писать функцию для поиска переменной из потока cleo либо записывать значения
в неиспользуемый участок памяти gta.
2) Опять же, это все в hex end. И это никак не похоже на встроенный(inline) ассемблер VS (mov eax, [any_global_var])
3) Небольшая, но совместимость: Interface Editor, например, не использует хуки и в других модах все еще можно получать значения или редактировать
Например, давний инклуд CLEO - Цифровые HP\AP. 160hp bar(https://blast.hk/threads/19230/#post-168150)
4) Зачем давать игре считать все корректировки(например, > 100 хп), проверять существование кооперативаного игрока и т.д, если мы это перезапишем?
Сразу установить лишь один хук 0x58FBD6 и нарисовать все самому
 
  • Нравится
Реакции: eiuhuth