Софт PyRakSamp

Sahiro

Новичок
Автор темы
12
12
Фейк клиент samp базируемый на python с имеющимся API

1787001388970.png

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" настройки движения применяются только к движению в транспорте и не используются для пешего движения.
Для работы с пакетами используется:
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() -- прочитать сжатую строку
Пример парсинга серверного пакета auth_key:
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
или
Из корневой папки проекта выполнить:
Bash:
python main.py
Требуется Python 3.10 или выше.
Дополнительные библиотеки устанавливать не требуется
Проект находится на стадии бета-тестирования и ещё не является финальной версией.
Текущая версия представляет собой рабочую основу проекта. В будущем планируется дальнейшая оптимизация, добавление новых API и возможностей.
Финальный вид проекта может значительно отличаться от текущей версии.


GitHub проекта
 

Вложения

  • pyRakSamp.zip
    223.7 KB · Просмотры: 49
Последнее редактирование:

Sahiro

Новичок
Автор темы
12
12
185.169.134.3 - это сервер аризоны, у тебя не зайдет и с обычного сампа на него без пропинговки
напрягай нейросеть

[17:36:49] [WARN] No OPEN_CONNECTION_REPLY after 5 requests | server=185.169.134.3:7777
[17:36:49] [*] Handshake failed | stage=open_connection_reply | reason=no reply after 5 requests | server=185.169.134.3:7777
[17:36:49] [*] Initial handshake failed; waiting for script recovery
[17:36:54] [*] Stopping bot...
[17:36:54] [*] Runtime state reset | reason=user request | counter=1
[17:36:54] [*] Disconnected | reason=user request
[17:36:54] [*] EVENT State reset: reason=user request, counter=1
 

Sahiro

Новичок
Автор темы
12
12
А че не репозиторием, чтобы открытый исходный код можно было легче поддерживать и контрибьютить?
Репозиторий 100 процентов будет, но чуть позже. Пока что проект в статусе беты, сейчас буду заниматься его докруткой и добавлением новых фич, а со временем обязательно залью на гитхаб.