- 12
- 11
Фейк клиент samp базируемый на python с имеющимся API
GitHub проекта
python:
is_connected() -- проверить подключение к серверу
connect() -- подключиться к серверу
disconnect() -- отключиться от сервера
reconnect(delay = 30.0) -- переподключиться с указанной задержкой
getservername() -- получить название сервера
getserveraddress() -- получить адрес сервера
setserveraddress(ip, port) -- изменить адрес сервера
SetConnectionProfile(nickname, server, server_ip, server_port, metadata) -- установить параметры подключения
python:
sendchat(message) -- отправить сообщение в чат или команду
SendDialogResponse(dialog_id, response, list_item, text) -- ответить на диалог
SendKey(keys) -- установить состояние клавиш
sendClickTextdraw(textdraw_id) -- нажать TextDraw
SendPickup(pickup_id) -- отправить взятие пикапа
SendDeathNotification(reason, killer_id) -- отправить уведомление о смерти
SendPacket(payload, reliability, ordering_channel, priority) -- отправить пакет
sendscoresandpings() -- запросить обновление очков и пинга игроков
python:
getbotid() -- получить ID бота
getbotnick() -- получить ник бота
setbotname(nickname) -- изменить ник бота
getbotscore() -- получить очки бота
getbotping() -- получить пинг бота
getbothealth() -- получить HP бота
setbothealth(health) -- установить HP бота
getbotarmour() -- получить броню бота
setbotarmour(armour) -- установить броню бота
getbotskin() -- получить скин бота
getbotmoney() -- получить деньги бота
getbotposition() -- получить позицию бота
setbotposition(x, y, z) -- установить позицию бота
getbotrotation() -- получить угол бота
setbotrotation(rotation) -- установить угол бота
getbotinterior() -- получить интерьер бота
GetAnimation() -- получить ID анимации и флаги
SetAnimation(animation, animation_flags) -- установить анимацию
getbotsyncstate() -- получить текущее состояние синхронизации
python:
getplayerscore(player_id) -- получить очки игрока
getplayerping(player_id) -- получить пинг игрока
getallplayers() -- получить список игроков на сервере
python:
setbotvehicle(vehicle_id, seat_id = 0, switch_state_after = 3.0) -- посадить бота в транспорт; vehicle_id = 0 для выхода
getbotvehicle() -- получить информацию о текущем транспорте
setbotvehiclehealth(health) -- установить HP транспорта
getallvehicles() -- получить весь загруженный транспорт в зоне стрима
getvehicle(vehicle_id) -- получить транспорт по ID
python:
getallpickups() -- получить все загруженные пикапы
getpickup(pickup_id) -- получить пикап по ID
getall3dtextlabels() -- получить все загруженные 3D Text Label
get3dtextlabel(label_id) -- получить 3D Text Label по ID
python:
MoveToCoord(x, y, z, ...) -- начать движение к координатам
StopMoveToCoord(movement_id, reason, reset_velocity) -- остановить движение
getbottargetposition() -- получить текущую цель движения
python:
ProxyConnect(proxy_address, timeout = 5.0, reconnect = False) -- настроить прокси
ProxyDisconnect(reconnect = False) -- отключить прокси
ProxyChange(proxy_address, timeout = 5.0, reconnect = True) -- заменить прокси
ProxyIsConnected() -- проверить подключение через прокси
ProxyIsConfigured() -- проверить, настроен ли прокси
ProxyInfo() -- получить информацию о прокси
ProxyTCPRequest(target_host, target_port, payload, timeout = 5.0, recv_size = 4096) -- выполнить TCP-запрос через прокси
python:
Autopickup(enabled = 1) -- включить или выключить автоматический подбор пикапов
Для подключения события нужно в начале скрипта сделать импорт:
Регистрация обработчика события:
Пример обработки событий:
python:
from logic.events import emitter
python:
@emitter.on("имя_события")
def my_handler(bot, ...аргументы события...):
...
python:
from logic.events import emitter
@emitter.on("onspawn")
def on_spawn(bot):
bot.sendchat("Hello from pyRakSAMP bot!")
@emitter.on("onShowChat")
def on_show_chat(bot, message, parsed, packet):
print(f"[CHAT] {message}")
python:
onBotCreated -- бот создан
onBotStopping -- бот останавливается
onRequestConnect -- отправлен запрос на подключение
onOpenConnectionReplyTimeout -- сервер не ответил на запрос подключения
onHandshakeFailed -- ошибка этапа handshake
onStateReset -- состояние сессии сброшено
onconnect -- подключение к серверу завершено
disconnect -- соединение с сервером потеряно
onSpawn -- бот заспавнился
onConnectionRejected -- сервер отклонил подключение
onKick -- сервер отклонил подключение/кикнул бота
onSendPacket(packet_id, payload) -- отправлен пакет
onReceivePacket(packet_id, payload) -- получен пакет
onSendRPC(rpc_id, payload) -- отправлен RPC
onReceiveRPC(rpc_id, payload) -- получен RPC
onShowDialog(...) -- сервер показал диалог
OnShowTextDraw(...) -- сервер показал TextDraw
onShowChat(...) -- получено сообщение чата
onVehicleStreamIn(...) -- транспорт добавлен в stream
onPlayerStreamIn(...) -- игрок добавлен в stream
onSetMapIcon(...) -- сервер установил Map Icon
onCreate3DTextLabel(...) -- создан 3D Text Label
onPutPlayerInVehicle(...) -- бот посажен в транспорт
onPlayerEnterVehicle(...) -- игрок входит в транспорт
onProxyConnect(...) -- прокси подключён
onProxyDisconnect(...) -- прокси отключён
onProxyError(...) -- ошибка прокси
onProxyChange(...) -- прокси изменён
OnCoordMoveStart(...) -- началось движение к координатам
OnCoordMovePhaseChange(...) -- изменена фаза движения
OnCoordMoveEnd(...) -- движение к координатам завершено
OnSetPlayerHealth(health) -- установлено хп боту
OnSetPlayerArmour(armour) -- установлена броня боту
mode -- режим движения: auto, walk или vehicle
coord_delay -- задержка между пакетами синхронизации во время движения
accel_time -- время разгона
accel_inertia_time -- время работы инерции при разгоне и торможении
accel_inertia_strength -- сила инерции
brake_time -- время торможения
completion_distance -- расстояние до точки, при котором движение считается завершённым
randomization -- случайное изменение параметров движения в заданном процентном диапазоне
movement_direction_control -- управление направлением движения и поворотом
movement_keys_mode -- управление состоянием клавиш во время движения
stop_on_dialog -- остановить движение при открытии диалога
mode определяет, для какого типа движения используются параметры. Например, при mode="vehicle" настройки движения применяются только к движению в транспорте и не используются для пешего движения.
coord_delay -- задержка между пакетами синхронизации во время движения
accel_time -- время разгона
accel_inertia_time -- время работы инерции при разгоне и торможении
accel_inertia_strength -- сила инерции
brake_time -- время торможения
completion_distance -- расстояние до точки, при котором движение считается завершённым
randomization -- случайное изменение параметров движения в заданном процентном диапазоне
movement_direction_control -- управление направлением движения и поворотом
movement_keys_mode -- управление состоянием клавиш во время движения
stop_on_dialog -- остановить движение при открытии диалога
mode определяет, для какого типа движения используются параметры. Например, при mode="vehicle" настройки движения применяются только к движению в транспорте и не используются для пешего движения.
Для работы с пакетами используется:
Основные методы чтения:
Пример парсинга серверного пакета auth_key:
python:
from core.bitstream import BitStream
bs = BitStream(data)
python:
read_bit() -- прочитать 1 бит
read_bits(count) -- прочитать указанное количество бит
read_uint8() / read_uint16() / read_uint32() -- unsigned integer
read_int8() / read_int16() / read_int32() -- signed integer
read_bool() -- прочитать boolean
read_bytes(count) -- прочитать указанное количество байт
read_string(length) -- прочитать строку заданной длины
read_cstring() -- прочитать строку до \0
read_float() -- прочитать float
read_compressed(size, unsigned=True) -- прочитать сжатое число
read_compressed_string() -- прочитать сжатую строку
python:
from logic.events import emitter
from core.bitstream import BitStream
@emitter.on("onReceivePacket")
def on_send_packet(bot, packet_id, payload):
if packet_id != 12:
return
bs = BitStream(payload)
key_length = bs.read_uint8()
key = bs.read_bytes(key_length).decode("ascii", errors="ignore")
print(f"Auth key: {key}")
Основные методы записи:
Пример:
python:
write_bit(bit) -- записать 1 бит
write_bits(value, count) -- записать указанное количество бит
write_uint8(value) / write_uint16(value) / write_uint32(value)
write_int8(value) / write_int16(value) / write_int32(value)
write_bool(value) -- записать boolean
write_bytes(data) -- записать байты
write_float(value) -- записать float
write_compressed(value, size, unsigned=True) -- записать сжатое число
python:
from core.bitstream import BitStream
bs = BitStream()
bs.write_uint8(5)
bs.write_bytes(b"hello")
payload = bs.get_bytes()
Для запуска проекта:
Запустить start.bat
или
Из корневой папки проекта выполнить:
Требуется Python 3.10 или выше.
Дополнительные библиотеки устанавливать не требуется
Запустить start.bat
или
Из корневой папки проекта выполнить:
Bash:
python main.py
Дополнительные библиотеки устанавливать не требуется
Проект находится на стадии бета-тестирования и ещё не является финальной версией.
Текущая версия представляет собой рабочую основу проекта. В будущем планируется дальнейшая оптимизация, добавление новых API и возможностей.
Финальный вид проекта может значительно отличаться от текущей версии.
Текущая версия представляет собой рабочую основу проекта. В будущем планируется дальнейшая оптимизация, добавление новых API и возможностей.
Финальный вид проекта может значительно отличаться от текущей версии.
GitHub проекта
Вложения
Последнее редактирование:

, да да