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

hnnssy

Известный
Друг
2,684
2,754
Ты это моему скрипту скажи. За 5 секунд определил кто мне в ПМ написал.
У меня в скрипте идёт схожий принцип. При получении ПМ определяет отправителя и заменяет строку чата на новую. Всё происходит моментально, само ПМ не успеваю углядеть даже.
 

Dark_Knight

Me, me and me.
Друг
4,070
2,086
У меня в скрипте идёт схожий принцип. При получении ПМ определяет отправителя и заменяет строку чата на новую. Всё происходит моментально, само ПМ не успеваю углядеть даже.

У меня больше времени уходит. Спасибо фипу что помог. Его способ намного быстрее.
 

san0

Известный
Друг
411
267
как получить содержание диалога в переменную?
Нужно указывать, для какого типа диалогов.
Для старых
Код:
0B3C:  samp is_dialog_responded id 1@ button 2@ list_item 3@ input_text 4@
Где 4@ - содержание диалога, как ты сказал

Для новых надо

Код:
0B89: dialog 1@ get_control 2@ text_to 3@
2@ ид елемента
3@ - текст
 

itsLegend

Фонд борьбы за жуков 🐞
Администратор
2,696
1,463
Мне не локальный диалог нужен,а от сервера
Код:
:GetDlgText
0@ = SAMP.Base()
0@ += 0x212A40 // DialogClient
0A8D: 0@ = read_memory 0@ size 4 virtual_protect 0
0@ += 0x34 // *dlg_text
0A8D: 1@ = read_memory 0@ size 4 virtual_protect 0
 
0AC8: 2@ 1024
memset 2@ 0 1024
0C13: strcpy destination 2@ source 1@
ret 1 2@

По идее, без выделения памяти, должен возвращать указатель, но...
Используй так:
Код:
call @GetDlgText 0 text_to 0@
0@++ // делаем что-нибудь с диалогом, в данном случае "удаляем" 1 символ с начала строки.
0AC9: 0@ // очищаем выделенную память
 
  • Нравится
Реакции: fonarik

hnnssy

Известный
Друг
2,684
2,754
Код:
:GetDlgText
0@ = SAMP.Base()
0@ += 0x212A40 // DialogClient
0A8D: 0@ = read_memory 0@ size 4 virtual_protect 0
0@ += 0x34 // *dlg_text
0A8D: 1@ = read_memory 0@ size 4 virtual_protect 0
 
0AC8: 2@ 1024
memset 2@ 0 1024
0C13: strcpy destination 2@ source 1@
ret 1 2@

По идее, без выделения памяти, должен возвращать указатель, но...
Используй так:
Код:
call @GetDlgText 0 text_to 0@
0@++ // делаем что-нибудь с диалогом, в данном случае "удаляем" 1 символ с начала строки.
0AC9: 0@ // очищаем выделенную память
Сохраняется не весь текст, а если применить к "большому"диалогу, то вовсе крашит.
 

itsLegend

Фонд борьбы за жуков 🐞
Администратор
2,696
1,463
Сохраняется не весь текст, а если применить к "большому"диалогу, то вовсе крашит.

Сохраняет все.
Конечно, если копировать текст с большим кол-вом символов больше, чем 1024, то будет крашить. Измени 1024 на 2048

Я привел пример, можете вообще удалить выделение памяти и сделать возвращение указателя, будет легче.
 
  • Нравится
Реакции: fonarik

PoccoJI

Новичок
135
10
Как сделать так, что бы вводишь команду /testdialog и диалог появляется еще раз вводишь и он пропадает
Помогите
 

san0

Известный
Друг
411
267
Как сделать так, что бы вводишь команду /testdialog и диалог появляется еще раз вводишь и он пропадает
Помогите
Так трудно же пройтись по форуму / посмтореть уже готовые сурсы

0B34: samp register_client_command "tdialog" to_label @lesson


Код:
:lesson
if
0B87: samp dialog 29@ is_visible
then
0B86: samp dialog 29@ set_visible false
0B5D: samp toggle_cursor false
0AF8: samp add_message_to_chat "Диалог с идом 29@ {00FF00} видим, сы сделали его невидимым" color 0x61269E
else
0B86: samp dialog 29@ set_visible true
0B5D: samp toggle_cursor true
0AF8: samp add_message_to_chat "Диалог с идом 29@ {FF0000}НЕ  видим, но мы сдулали его видимым" color 0x61269E
end
Samp.CmdRet()
 

fiendshadow

3LFhocV726q7pKWWky2vv3W38Dm9sGJV86
Проверенный
455
122
Как отправлять "фейк" координаты с ног,сколько ищу,не могу найти ( вроде SCM-функа была )
 

hnnssy

Известный
Друг
2,684
2,754
Как отправлять "фейк" координаты с ног,сколько ищу,не могу найти ( вроде SCM-функа была )
0AB1: call_scm_func @SendOnfootFakePosition 3 Pos_x 1@ Pos_y 2@ Pos_z 3@ Функция:
Код:
:SendOnfootFakePosition
3@ = SAMP.GetSAMPPlayerIDByActorHandle($PLAYER_ACTOR) // Получаем ид нашего игрока
3@ = SAMP.GetPlayerStruct(3@) // Получаем указатель на локальную структуру
3@ += 55 // Прибавляем смещение на структуру, в которой храниться текущая onfoot data.
0AC8: 4@ = allocate_memory_size 68 // Выделяем память, равную размеру пакета.
0C10: memcpy destination 4@ source 3@ size 68 // Копируем информацию onfoot, чтобы потом изменить только позиции.
0C0D: struct 4@ offset 6 size 4 = 0@ // Изменяем позиции игрока по оси X. Размер 4, так как тип float имеет 4 байта.
0C0D: struct 4@ offset 10 size 4 = 1@ // Offset будет 10, так как 6 + 4 = 10
0C0D: struct 4@ offset 14 size 4 = 2@ // 10 + 4 = 14
0B3D: raknet 5@ = new_bit_stream // Создаем битстрим.
0B40: raknet bit_stream 5@ write PACKET_PLAYER_SYNC type BS_TYPE_BYTE size 1 // Вписываем в битстрим название пакета.
0B40: raknet bit_stream 5@ write 4@ type BS_TYPE_ARRAY size 68 // Вписываем туда переменную, в которой onfoot data, с измененными позициями.
0B8B: raknet send bit_stream 5@ // Отправляем битстрим в котором содержится пакет.
0B3E: raknet delete_bit_stream 5@ // Удаляем битстрим.
0AC9: free_allocated_memory 4@ // Освобождаем память.
0ab2: 0 // Заканчиваем Call функцию.
 

fiendshadow

3LFhocV726q7pKWWky2vv3W38Dm9sGJV86
Проверенный
455
122
0AB1: call_scm_func @SendOnfootFakePosition 3 Pos_x 1@ Pos_y 2@ Pos_z 3@ Функция:
Код:
:SendOnfootFakePosition
3@ = SAMP.GetSAMPPlayerIDByActorHandle($PLAYER_ACTOR) // Получаем ид нашего игрока
3@ = SAMP.GetPlayerStruct(3@) // Получаем указатель на локальную структуру
3@ += 55 // Прибавляем смещение на структуру, в которой храниться текущая onfoot data.
0AC8: 4@ = allocate_memory_size 68 // Выделяем память, равную размеру пакета.
0C10: memcpy destination 4@ source 3@ size 68 // Копируем информацию onfoot, чтобы потом изменить только позиции.
0C0D: struct 4@ offset 6 size 4 = 0@ // Изменяем позиции игрока по оси X. Размер 4, так как тип float имеет 4 байта.
0C0D: struct 4@ offset 10 size 4 = 1@ // Offset будет 10, так как 6 + 4 = 10
0C0D: struct 4@ offset 14 size 4 = 2@ // 10 + 4 = 14
0B3D: raknet 5@ = new_bit_stream // Создаем битстрим.
0B40: raknet bit_stream 5@ write PACKET_PLAYER_SYNC type BS_TYPE_BYTE size 1 // Вписываем в битстрим название пакета.
0B40: raknet bit_stream 5@ write 4@ type BS_TYPE_ARRAY size 68 // Вписываем туда переменную, в которой onfoot data, с измененными позициями.
0B8B: raknet send bit_stream 5@ // Отправляем битстрим в котором содержится пакет.
0B3E: raknet delete_bit_stream 5@ // Удаляем битстрим.
0AC9: free_allocated_memory 4@ // Освобождаем память.
0ab2: 0 // Заканчиваем Call функцию.

Низкий поклон,за такой быстрый ответ :)
 

fiendshadow

3LFhocV726q7pKWWky2vv3W38Dm9sGJV86
Проверенный
455
122
Что тут не так,прописываю команду,но ничего не происходит ( метка :noname_1337 ( самый конец ) ),а нет,происходит,игрока и камеру фризит,при этом обновляет зону стрима каждые пол секунды,т.е будто все лагает.