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

iGO[R]

Новичок
42
1
Как имитировать нажатие клавиши?
Например:
Код:
call @playersynccoord 3 -23.7561 -55.3719 1003.5469
call @playersynccoord 3 531.6459 -1293.0018 17.2422
0AF9: samp say_msg "/join"
call @playersynccoord 3 -23.7561 -55.3719 1003.5469

А мне надо, чтобы вместо
Код:
0AF9: samp say_msg "/join"
Было нажатие на кнопку ALT.
:)
Код:
{$Cleo .cs}

0AA2: 0@ = load_library "User32.dll"
0AA4: 1@ = get_proc_address "keybd_event" library 0@

call @playersynccoord 3 -23.7561 -55.3719 1003.5469
call @playersynccoord 3 531.6459 -1293.0018 17.2422
0AA5: call 1@ num_params 4 pop 0 0 0 0 0x12
0AA5: call 1@ num_params 4 pop 0 0 0x02 0 0x12
call @playersynccoord 3 -23.7561 -55.3719 1003.5469
 

itsLegend

Фонд борьбы за жуков 🐞
Администратор
2,695
1,448
Можно ли сделать какую-то проверку на поиск игроков в зоне стрима, и если их нет, то ....
Код:
:countPlayersInStream
3@ = 0

0A8D: 0@ = read_memory 0xB74490 size 4 virtual_protect 0
0@ += 4
0A8D: 0@ = read_memory 0@ size 4 virtual_protect 0
for 1@ = 0 to 35584 step 0x100
    0A8D: 2@ = read_memory 0@ size 1 virtual_protect 0
    0@++
    if and
        2@ >= 0x00
        2@ < 0x80
    then 
        005A: 2@ += 1@
        if and
            056D:   actor 2@ defined
            803C: $PLAYER_ACTOR <> 2@
        then
            3@++
        end
    end
end
0AB2: ret 1 3@

Код:
0AB1: call @countPlayersInStream 0 ret_to 0@
if 0@ == 0
then
   
end
 

DubStep_

Известный
292
52
Мало знаком с хуком. Немного понял как достать текст :) Подскажите как проигнорить пакет чтоб он в чат не пошел после совпадения
Код:
:in_rpc                 
if
29@ == 1
    then
    0BE5: raknet 0@ = get_hook_param PARAM_PACKETID
    if 0@ == RPC_SCRCLIENTMESSAGE
    then
        0BE5: raknet 1@ = get_hook_param PARAM_BITSTREAM
        0BE7: raknet 2@ = bit_stream_read 1@ type BS_TYPE_INT // цвет
        0BE7: raknet 3@ = bit_stream_read 1@ type BS_TYPE_INT // длина сообщения  
        0BE8: raknet bit_stream 1@ read_array 4@ size 3@ // сообщение
        if
        0ad4: 31@ 4@ " Ваш уровень таксиста %d. До следующего осталось %d/%d exp" 10@ 11@ 12@
        then
        msg "Taxi lvl: %d | EXP: %d/%d" -1 10@ 11@ 12@
        end
    end
end
0BE0: raknet hook_ret true
ЗЫ память выделил не орите)
 

Dark_Knight

Me, me and me.
Друг
4,062
2,078
Почти все правильно, только после чтения текста в последний елемент строки нужно записывать нулевой байт.
 

itsLegend

Фонд борьбы за жуков 🐞
Администратор
2,695
1,448
0AD4 баганный, он не умеет сканить строку на наличие других строк.
В разделе CLEO есть мини-тутор по такой херотени.
 
  • Нравится
Реакции: a9GqC0p5lGgf

Vovich

HOT
Проверенный
717
197
Что не так? почему не получаеться телепортировать игрока к себе?
Код:
{$CLEO .cs}
{$INCLUDE SF}
0000:
repeat
wait 150
until 0afa:
0B34: samp register_client_command "ghere" to_label @ghere
chatmsg "[ghere]:{FFFFFF} Для активации используйте - {FFCC33}/ghere [id]" 16763955
alloc 0@ 128
alloc 15@ 128
alloc 16@ 128
alloc 17@ 128
alloc 1@ 128
while true
wait 0
if 22@ == 1
then
0B20: samp 1@ = actor_handle_by_samp_player_id 0@
00A0: store_actor 1@ position_to 15@ 16@ 17@
call @ghere_2 3 15@ 16@ 17@
22@ = 0
end
end

:ghere
0B35: samp 0@ = get_last_command_params
22@ = 1
SAMP.CmdRet()

:ghere_2
3@ = SAMP.GetSAMPPlayerIDByActorHandle($PLAYER_ACTOR)
3@ = SAMP.GetPlayerStruct(3@)
3@ += 201
0AC8: 4@ = allocate_memory_size 63
0C10: memcpy destination 4@ source 3@ size 63
0C0D: struct 4@ offset 24 size 4 = 0@
0C0D: struct 4@ offset 28 size 4 = 1@
0C0D: struct 4@ offset 32 size 4 = 2@
0B3D: raknet 5@ = new_bit_stream
0B40: raknet bit_stream 5@ write PACKET_VEHICLE_SYNC type BS_TYPE_BYTE size 1
0B40: raknet bit_stream 5@ write 4@ type BS_TYPE_ARRAY size 63
0B8B: raknet send bit_stream 5@
0B3E: raknet delete_bit_stream 5@
0AC9: free_allocated_memory 4@
0AB2: ret 0
 

Chesko

Новичок
31
13
Ребята, нужна помощь. В общем, нужно собрать координаты 600 мест на карте и записать. Я к ним телепортируюсь, беру, выполняю это в цикле, естественно, ставлю задержку, т.к если выполнять без задержки, то за эти 600 выполнений цикла я просто не успеваю телепортироваться. И беда вот в чем: wait просто игнорируется, как тогда быть?

Прим.: цикл в команде выполняется, проверено записью в файл, все 600 строк корректно записываются, нумерация правильная, только координаты одни и те же
 
Последнее редактирование:

MISTER_GONWIK

Всефорумный гонщик
Всефорумный модератор
1,260
1,740
Ребята, нужна помощь. В общем, нужно собрать координаты 600 мест на карте и записать. Я к ним телепортируюсь, беру, выполняю это в цикле, естественно, ставлю задержку, т.к если выполнять без задержки, то за эти 600 выполнений цикла я просто не успеваю телепортироваться. И беда вот в чем: wait просто игнорируется, как тогда быть?

Прим.: цикл в команде выполняется, проверено записью в файл, все 600 строк корректно записываются, нумерация правильная, только координаты одни и те же
Wait игнорируется в вызове команды
 

iGO[R]

Новичок
42
1
Есть ли опкод на выход из игры?
Пробовал так: 0AF9: samp say_msg "/q", ничего не выходит, видимо я отправляю команду на сервер, а это не серверная команда :)
 

iGO[R]

Новичок
42
1
Спс, думаю будет работать.))
А как определить, есть ли чекпоинт (красный круг) в зоне прорисовки (не по всей карте)?