У
Удалённый пользователь 144706
Гость
Автор темы
Данный скрипт ищет в чате определённые слова/строки и если находит, то посылает звуковой сигнал. Также умеет работать в свёрнутом режиме. В настройках можно указать любое количество строк для поиска (Шаблон для строк: m_[number]=[string]). Cleo работает через RakNet-хуки, так что не нагружает лишний раз игру циклами проверок.
Данный скрипт я написал по заказу одного человека, который впоследствии пропал куда-то. В общем, я попытался его продать, но никто не стал покупать, так что выкладываю в паблик.
Данный скрипт я написал по заказу одного человека, который впоследствии пропал куда-то. В общем, я попытался его продать, но никто не стал покупать, так что выкладываю в паблик.
CLEO:
{$CLEO .cs}
{$NOSOURCE}
0000: NOP
const
RPC_CLIENTMESSAGE = 93
FILE_CONFIG = "CLEO/csf.ini"
SOUND_FILE = "CLEO/sound.wav"
SECTION_CONFIGS = "Settings"
SECTION_MESSAGES = "Messages"
ARRAY = 0
LENGTH = 1
end
// Ждём SAMP
repeat
wait 100
until SAMP.Available()
// --------------------------------------------------------
if or
8AAB: not file_exists FILE_CONFIG
8AAB: not file_exists SOUND_FILE
then
chatmsg "Отсутствуют важные файлы!" -1
0A93: end_custom_thread
end
gosub @ON_WINDOWED_MODE
alloc 10@ 256
1@ = 0
// Определяем количество строк
while true
0AD3: 0@v = format "m_%d" 1@
if 8AF4: not 10@ = read_string_from_ini_file FILE_CONFIG section SECTION_MESSAGES key 0@v
then
break
end
1@++
end
// Место для массива строк
0085: 3@ = 1@
3@ *= 4
alloc 5@ 3@
0AB3: var ARRAY = 5@
0AB3: var LENGTH = 1@
1@--
for 2@ = 0 to 1@
0AD3: 0@v = format "m_%d" 2@
0AF4: 10@ = read_string_from_ini_file FILE_CONFIG section SECTION_MESSAGES key 0@v
0C17: 4@ = strlen 10@
alloc 6@ 4@
0C13: strcpy destination 6@ source 10@
0085: 7@ = 2@
7@ *= 4
0C0D: struct 5@ offset 7@ size 4 = 6@
end
free 10@
// --------------------------------------------------------
// Вешаем хук и жмём на паузу
0BE3: raknet setup_incoming_rpc_hook @incoming_chat_string
0BDE: pause_thread 0
:incoming_chat_string
0BE5: raknet 0@ = get_hook_param 1
if 0@ == RPC_CLIENTMESSAGE
then
0BE5: raknet 0@ = get_hook_param 0
0BF3: raknet 0@ = bit_stream 0@ get_data_ptr
0A8D: 1@ = read_memory 0@ size 4 virtual_protect 0 // Цвет текста
0@ += 4
0A8D: 2@ = read_memory 0@ size 4 virtual_protect 0 // Длина текста
0@ += 4
0AB4: 3@ = var ARRAY
0AB4: 4@ = var LENGTH
4@ *= 4
005A: 4@ += 3@
while 001D: 4@ > 3@
0A8D: 6@ = read_memory 3@ size 4 virtual_protect 0
3@ += 4
0C18: 7@ = strstr string1 0@ string2 6@
if 8039: not 7@ == FALSE
then
// Нашлась строка
gosub @PLAY_SOUND
break
end
end
end
0BE0: raknet hook_ret TRUE
// Включить работу в свёрнутом режиме
// --------------------------------------------------------
:ON_WINDOWED_MODE
0A8C: write_memory 7634870 size 1 value 1 virtual_protect 1
0A8C: write_memory 7635034 size 1 value 1 virtual_protect 1
0C11: memset destination 7623723 value 144 size 8
0C11: memset destination 5499528 value 144 size 6
return
// --------------------------------------------------------
// Воспроизвести звук
// --------------------------------------------------------
:PLAY_SOUND
0AA2: 1@ = load_library "Winmm.dll"
if 8039: not 1@ == FALSE
then
0AA4: 2@ = get_proc_address "PlaySound" library 1@
if 8039: not 2@ == FALSE
then
0AA7: call_function 2@ num_params 3 pop 0 0x0001 0 SOUND_FILE 3@
else
chatmsg "Не удалось найти функцию PlaySound" -1
end
0AA3: free_library 1@
else
chatmsg "Не удалось найти библиотеку Winmm.dll" -1
end
return
// --------------------------------------------------------
Вложения
Последнее редактирование модератором: