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

Dark_Knight

Me, me and me.
Друг
4,066
2,080
Циклом пройти или через сравнение строк в хуке и получишь ид нужного тебе текстрадава. 2048 для всех игроков, 256 чисто для каждого игрока.
 

Danijr97

Известный
26
4
CLEO:
{$CLEO}
{$INCLUDE SF}

0001: wait 0 ms

while not SAMP.Available()
wait 400
end

0BE2: raknet setup_outcoming_packet_hook @out_packet // Подготавливаем хук

0BDE: pause_thread 0 // Бесконечный цикл нам не нужен, поэтому просто поставим скрипт на "паузу". Хуки, вызовы команды и т.п., что не требует постоянной обработки, будут работать в это время.

:out_packet
0BE5: raknet 0@ = get_hook_param PARAM_PACKETID // Получаем ИД пакета
if 0@ == PACKET_PLAYER_SYNC // Сравниваем
then
0BE5: raknet 1@ = get_hook_param PARAM_BITSTREAM // Получаем битстрим

0AC8: alloc 2@ 69 // sizeof(onFootData) + packetId // выделяем память для хранения данных битстрима
0BE8: raknet bit_stream 1@ read_array 2@ size 69 // записываем в выделенную память(первый байт - ид пакета, всё остальное - синхронизация игрока(68 байт))

0C0D: struct 2@ offset 15 size 4 = -90.0 // в данные битстрима установим значение -90.0. Это будет координата Z в синхронизации.

0BEA: raknet bit_stream 1@ reset_write_pointer // сбрасываем указатель записи в битстриме
0B40: raknet bit_stream 1@ write 2@ type BS_TYPE_ARRAY size 69 // записываем новые данные

0AC9: free 2@ // освобождаем, т.к. выделенная память больше не нужна, все данные уже хранятся в перезаписанном битстриме
end
0BE0: raknet hook_ret true // отправляем пакет, false - не отправлять
0C0D: struct 2@ offset 15 size 4 = -90.0
Как можно сделать, что бы -90 через определенное время заменилась на -100, -100 на -110 и.т.д?
 

4el0ve4ik

Известный
Всефорумный модератор
1,548
1,339
CLEO:
{$CLEO}
{$INCLUDE SF}

0001: wait 0 ms

while not SAMP.Available()
wait 400
end

0BE2: raknet setup_outcoming_packet_hook @out_packet // Подготавливаем хук

0BDE: pause_thread 0 // Бесконечный цикл нам не нужен, поэтому просто поставим скрипт на "паузу". Хуки, вызовы команды и т.п., что не требует постоянной обработки, будут работать в это время.

:out_packet
0BE5: raknet 0@ = get_hook_param PARAM_PACKETID // Получаем ИД пакета
if 0@ == PACKET_PLAYER_SYNC // Сравниваем
then
0BE5: raknet 1@ = get_hook_param PARAM_BITSTREAM // Получаем битстрим

0AC8: alloc 2@ 69 // sizeof(onFootData) + packetId // выделяем память для хранения данных битстрима
0BE8: raknet bit_stream 1@ read_array 2@ size 69 // записываем в выделенную память(первый байт - ид пакета, всё остальное - синхронизация игрока(68 байт))

0C0D: struct 2@ offset 15 size 4 = -90.0 // в данные битстрима установим значение -90.0. Это будет координата Z в синхронизации.

0BEA: raknet bit_stream 1@ reset_write_pointer // сбрасываем указатель записи в битстриме
0B40: raknet bit_stream 1@ write 2@ type BS_TYPE_ARRAY size 69 // записываем новые данные

0AC9: free 2@ // освобождаем, т.к. выделенная память больше не нужна, все данные уже хранятся в перезаписанном битстриме
end
0BE0: raknet hook_ret true // отправляем пакет, false - не отправлять
0C0D: struct 2@ offset 15 size 4 = -90.0
Как можно сделать, что бы -90 через определенное время заменилась на -100, -100 на -110 и.т.д?
По порядку или рандомом?
 

ShadowBroker

Известный
110
27
получаешь указатель на "[" и дальше сканируешь уже на %d текст с этого указателя
Я правильно делаю?
CLEO:
{$CLEO}

0000:

repeat
wait 400
until SAMP.Available()

alloc 0@ 64
alloc 1@ 64

:scan
wait 0
0B75: samp get_chat_string 99 text_to 0@ prefix_to 1@ color_to 2@ prefix_color_to 3@
if 0C18: 4@ = strstr string1 0@ string2 "Варианты: Nickname["
jf @scan
0C16: 5@ = strtok string1 0@ string2 "["
0AD4: 6@ = scan_string 0@ format "%d" 7@
wait 400
say "%d" 7@
goto @scan
 

hnnssy

Известный
Друг
2,684
2,750
Я правильно делаю?
CLEO:
{$CLEO}

0000:

repeat
wait 400
until SAMP.Available()

alloc 0@ 64
alloc 1@ 64

:scan
wait 0
0B75: samp get_chat_string 99 text_to 0@ prefix_to 1@ color_to 2@ prefix_color_to 3@
if 0C18: 4@ = strstr string1 0@ string2 "Варианты: Nickname["
jf @scan
0C16: 5@ = strtok string1 0@ string2 "["
0AD4: 6@ = scan_string 0@ format "%d" 7@
wait 400
say "%d" 7@
goto @scan
нет
 
  • Нравится
Реакции: ShadowBroker

wavermaa

Новичок
5
0
Почему выводит не правильные значения?


CLEO:
0BE1: raknet setup_outcoming_rpc_hook @rpc
0BDE: pause_thread 0


:rpc
wait 0
0BE5: raknet 0@ = get_hook_param 1
if
0039:   0@ == 115
then
0BF8: raknet 1@ = get_rpc_name 0@
0AF8: samp add_message_to_chat "%s" color -1 1@
0BE5: raknet 2@ = get_hook_param 0
0BE7: raknet 3@ = bit_stream_read 2@ type 0
0BE7: raknet 4@ = bit_stream_read 2@ type 2
0BE7: raknet 5@ = bit_stream_read 2@ type 4
0BE7: raknet 6@ = bit_stream_read 2@ type 3
0AF8: samp add_message_to_chat "giveTake: %d | playerID: %d | amount: %f | weaponID: %d" color -1 3@ 4@ 5@ 6@
end
0BE0: raknet hook_ret true
 

Coghweel

Новичок
76
0
0AC8: 0@ = allocate_memory_size 256
0BD7: samp get_dialog_text 0@
Благодарю, но я так и делал:

CLEO:
:AD_SENDER_CLOSE_DIALOG
if SAMP.IsDialogActive(353)
then
alloc 1@ 256
0BD7: samp get_dialog_text 1@
chatmsg "%s" 1@ // тут я проверил записалось ли что то или нет, выводит "(null)"
0AD4: 2@ = scan_string 1@ format "$%d." 23@
free 1@
SAMP.CloseDialog(0)
end
return