Исходник Spectate Detector

  • Автор темы Удалённый пользователь 144706
  • Дата начала
Статус
В этой теме нельзя размещать новые ответы.
У

Удалённый пользователь 144706

Гость
Автор темы
Примечание:
Внимание! Из топовых проектов скрипт работает только на Diamond RP, так как только там присутствует функция получения FPS игрока. (на DRP больше не работает, пофиксили)

Про "непропадающую надпись SPECTATE":
На самом деле, надпись пропадёт, если с момента последнего RPC_35 пройдёт минута.

Дополнительно:
Для тех, у кого нет SB или, просто, тех кто не хочет компилить скрипт, я приложу готовый файл.

А теперь к описанию работы скрипта:
Принцип прост. В некоторых pwn модах разрабы включают функцию отслеживания FPS игрока. FPS игрока не храниться ни в одной переменной samp-сервера, поэтому изощрённые разрабы вычисляют FPS через функции SetDrunkLevel и GetDrunkLevel. То есть, уровень опьянения падает на количество равное FPS игрока. По разнице друнк-левелов они и определяют FPS. Да, и указывают друнк-левел равный 2000, потому что если указать больше, то камеру начнёт трясти и тут даже скрипт не нужен, чтобы догадаться, что за вами следят. Ну дык вот, народ, к чему я веду. Когда они вызывают SetDrunkLevel на клиент отправляется RPC с номером 35, он так и называется SetPlayerDrunkLevel. Так вот, когда приходит этот RPC, это означает, что за игроком следит админ, иначе накуя серверу ваш FPS. Когда RPC не приходит, это значит что за вами не следят. Я сделал через текстдрав, вы можете переделывать как угодно. Вот исходник:

CLEO:
{$CLEO .cs}
{$NOSOURCE}
0000: NOP

const
// --- Vars ---
SPECTATE_STATUS = 0 // Наблюдают ли сейчас за игроком
LAST_TIME = 1       // Время последнего RPC_SCRSETPLAYERDRUNKLEVEL
// --- ID RPC ---
RPC_SCRSETPLAYERDRUNKLEVEL = 35 // [ID RPC] Если админ начинает следить, присылается этот RPC
DRUNK_LEVEL = 2000 // Параметр, который устанавливают моды, чтобы определить FPS
// --- ID TextDraw ---
ID_TEXTDRAW_STATUS = 431 // ID текстдрава, сообщающего о слежке
end

03A4: name_thread 'SD_MAIN'

// Ждём запуск SAMP
repeat
    wait 100
until SAMP.Available()

// Обнуляем статус слежки
0AB3: var SPECTATE_STATUS = FALSE

// Выводим информацию о скрипте
0C3A: 1@ = string "{5e0fa3}[SpectateDetector]{ffe0a5} Автор:{7db302} Mor" pointer
chatmsg 1@ 0xffffe0a5

0BE3: raknet setup_incoming_rpc_hook @SPECTATE_DETECTOR

:MAIN_CYCLE
wait 100

0AB4: 0@ = var SPECTATE_STATUS
if 0@ == TRUE
then
    0AB4: 1@ = var LAST_TIME
    01BD: 2@ = current_time_in_ms
    0062: 2@ -= 1@
    if 04B5: 2@ >= 60000    // Если прошла минута с последнего RPC, то слежка прекратилась
    then
        // Слежка прекратилась...
        0C5E: samp textdraw ID_TEXTDRAW_STATUS delete
        0AB3: var SPECTATE_STATUS = FALSE
    end
end

jump @MAIN_CYCLE

:SPECTATE_DETECTOR
 
    0BE5: raknet 25@ = get_hook_param 1
    if 25@ == RPC_SCRSETPLAYERDRUNKLEVEL
    then
        0BE5: raknet 26@ = get_hook_param 0
        0BF3: raknet 26@ = bit_stream 26@ get_data_ptr
        0A8D: 27@ = read_memory 26@ size 4 virtual_protect 0
        if 27@ == DRUNK_LEVEL
        then
            0BFA: push_vars
    
            0AB4: 3@ = var SPECTATE_STATUS
            if 04A4: 3@ == TRUE
            then
                // Пришёл ещё пакет...
        
                // Обновить время последнего RPC_SCRSETPLAYERDRUNKLEVEL
                01BD: 4@ = current_time_in_ms
                0AB3: var LAST_TIME = 4@
        
                else if 0039: 3@ == FALSE
                then
                    // Слежка началась...
                    0AB3: var SPECTATE_STATUS = TRUE
            
                    01BD: 4@ = current_time_in_ms
                    0AB3: var LAST_TIME = 4@
            
                    // Создать текстдрав
                    0C48: samp textdraw ID_TEXTDRAW_STATUS create "~r~SPECTATE" pos 130.0 150.0
                    0C4A: samp textdraw ID_TEXTDRAW_STATUS set_align 2
                    0C4B: samp textdraw ID_TEXTDRAW_STATUS set_proportional TRUE
                    0C4C: samp textdraw ID_TEXTDRAW_STATUS set_style 2
                    0C4E: samp textdraw ID_TEXTDRAW_STATUS set_outline 1 color 0xff000000
                    0C52: samp textdraw ID_TEXTDRAW_STATUS set_letter_size 1.0 1.0 color -1
                end
            end
    
            0BFB: pop_vars
        end
    end
 
    0BE0: raknet hook_ret TRUE
 

Вложения

  • SpectateDetector.cs
    17.6 KB · Просмотры: 2,118
Последнее редактирование модератором:

sаnеk

Всефорумный sanek
Друг
2,111
2,093
чото не работает
0u-_LptavOk.jpg
 

SR_team

like pancake
BH Team
4,803
6,475
иначе накуя серверу ваш FPS.
Я видел серверы с FPS над головой, еще видел серверы с ограничением по фпс (типа кик за меньше 40 или больше 100). На моем сервере так же выводится фпс над головой и сбоку на экране.
 
У

Удалённый пользователь 144706

Гость
Автор темы
Я видел серверы с FPS над головой, еще видел серверы с ограничением по фпс (типа кик за меньше 40 или больше 100). На моем сервере так же выводится фпс над головой и сбоку на экране.
Экзотические серверы какие-то... на крупных серверах, типа diamond rp или advance FPS над головой не выводиться.
 
  • Нравится
Реакции: Assala

sаnеk

Всефорумный sanek
Друг
2,111
2,093
Я видел серверы с FPS над головой, еще видел серверы с ограничением по фпс (типа кик за меньше 40 или больше 100). На моем сервере так же выводится фпс над головой и сбоку на экране.
у тебя есть система слежки? го проверим
 

yxTbl

Фуфел
335
248
А почему я скомпилировать не могу?
Неизвестная команда SAMP.Available().
 

ЯedЯuM

Malware Maker
242
302
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Проверил арп - нихера.
sa-mp-074.png
 
У

Удалённый пользователь 144706

Гость
Автор темы
Бля, ну я играл на diamond'е. Под него и писал скрипт. Возможно и на адвансе нет отображения FPS игрока. Если есть, то нужно подкорректировать значение DRUNK_LEVEL в скрипте. Может pwn мод адванса устанавливает не 2000, а меньше.
 

ЯedЯuM

Malware Maker
242
302
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Бля, ну я играл на diamond'е. Под него и писал скрипт. Возможно и на адвансе нет отображения FPS игрока. Если есть, то нужно подкорректировать значение DRUNK_LEVEL в скрипте. Может pwn мод адванса устанавливает не 2000, а меньше.
Дорабатывать под крупные проекты я так понял у тебя нет желания? Или всё же потом опубликуешь заточеные под парочку проектов.
 
У

Удалённый пользователь 144706

Гость
Автор темы
Дорабатывать под крупные проекты я так понял у тебя нет желания? Или всё же потом опубликуешь заточеные под парочку проектов.
Если надо, то буду дорабатывать. Сейчас проверю адванс
 

ЯedЯuM

Malware Maker
242
302
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Если надо, то буду дорабатывать. Сейчас проверю адванс
Было бы великолепно увидеть заточеную версию хотя бы под парочку топовых рп проектов.
Да и для любителей порвать очко на монсере и ревике - не помешало бы знать когда стоит потушить аим.
Буду благодарен если всё таки проделаешь подобную работу, да и наверное не я один.
 

Callow

Известный
62
62
Если это рабочий скрипт, то цены тебе не будет ))

Кстате, задумка интересная. Попробую реализовать на луа, и проверить на diamond rp.
 
Статус
В этой теме нельзя размещать новые ответы.