PDA

Просмотр полной версии : Биндер на Python (SAMP)


donaks.
21.08.2020, 21:43
Чекал я бласт хак и наткнулся на запрос сделать биндер на питоне. Без понятия зачем это ему было нужно. Через пару десятков минут он был готов. Хз зачем это надо, но пусть это будет здесь. Работает не хуже ахк, только нужно подгрузить библиотеки.

Для работы нужна библиотека keyboard (

pip install keyboard

) и еще pywin32, чтобы бинды не срабатывали, когда самп свернут (

pip install pywin32

).


keyboard.add_hotkey("1", fun)

- при нажатии на единичку, выполнится функция fun (бинд на клавишу).


keypress(key)

- нажимает на клавишу key (зажимает и через 100 миллисекунд отжимает).


is_samp_active()

- возвращает True, если окно сампа активно.


send_to_chat(message)

- отправляет строку message в чат, если окно сампа активно.


send_messages_to_chat(messages_list, delay)

- отправляет список строк messages_list в чат с задержкой delay в секундах (по умолчанию = 0)

Обязательно в конце нужно прописать бесконечный цикл. Либо же

keyboard.wait()

, чтобы скрипт не прекратил работу.

Если скрипт запущен в консоли, остановить его можно сочетанием клавиш Ctrl+C.

Python:






from
time
import
sleep
import
keyboard
from
win32gui
import
GetWindowText
,
GetForegroundWindow
def
keypress
(
key
)
:
keyboard
.
press
(
key
)
sleep
(
0.1
)
keyboard
.
release
(
key
)
def
is_samp_active
(
)
:
return
GetWindowText
(
GetForegroundWindow
(
)
)
==
"GTA:SA:MP"
def
send_to_chat
(
message
)
:
if
is_samp_active
(
)
:
keypress
(
"F6"
)
keyboard
.
write
(
message
)
keypress
(
'Enter'
)
def
send_messages_to_chat
(
messages_list
,
delay
=
0
)
:
for
message
in
messages_list
:
send_to_chat
(
message
)
sleep
(
delay
)
keyboard
.
add_hotkey
(
"Ctrl + 1"
,
lambda
:
send_to_chat
(
"/me упал, отжался."
)
)
keyboard
.
add_hotkey
(
"Ctrl + 2"
,
lambda
:
send_messages_to_chat
(
[
"Приветствую, меня зовут Даниил."
,
"Чем могу быть полезен?"
]
,
2
)
)
while
True
:
pass

Lil Xean
21.08.2020, 21:44
зачем адреса памяти если есть эмуляция нажатия f6?

donaks.
21.08.2020, 21:55
О да моя госпожа 🙂, зачем адреса памяти если есть эмуляция нажатия f6?


Работает он по аналогии с AHK. За адреса памяти не шарю.

Rei
21.08.2020, 23:00
Зачем вот, например, для проверки на самп отдельная функция?

kin4stat
22.08.2020, 00:20
Зачем вот, например, для проверки на самп отдельная функция?


Зачем вот, например, для работы со штукатуркой шпатель? Зачем вот, например, для готовки нужны сковороды и кастрюли? Зачем вот например для стирки стиральная машина? Зачем вот, например, для мойки посуды посудомоечная Машина?

Удобно, проще и быстрее потому что. Не?

Rei
22.08.2020, 01:35
Зачем вот, например, для работы со штукатуркой шпатель? Зачем вот, например, для готовки нужны сковороды и кастрюли? Зачем вот например для стирки стиральная машина? Зачем вот, например, для мойки посуды посудомоечная Машина?

Удобно, проще и быстрее потому что. Не?


Удобно, проще и быстрее одну строчку, использующуюся 1 раз, совать в отдельную функцию?

Про сравнения твои охуительные я вообще молчу

donaks.
22.08.2020, 02:10
Удобно, проще и быстрее одну строчку, использующуюся 1 раз, совать в отдельную функцию?
Про сравнения твои охуительные я вообще молчу


Может мне весь код сжать в одно лямбда выражение?)

winten
22.08.2020, 02:14
Может мне весь код сжать в одно лямбда выражение?)


Он про то, что у тебя код, который один раз используется зачем то вынесен в отдельную функцию

kin4stat
22.08.2020, 09:07
Кстати если есть коллбэк на кнопки то можно и без while True вроде



Удобно, проще и быстрее одну строчку, использующуюся 1 раз, совать в отдельную функцию?
Про сравнения твои охуительные я вообще молчу


Вдруг потом пригодится лол. На питоне нет инлайн функций к сожалению

donaks.
22.08.2020, 10:08
Он про то, что у тебя код, который один раз используется зачем то вынесен в отдельную функцию


И что? Сделано для удобства и понимания. Когда посмотришь на имя функции сразу понимаешь что она делает. Если код придется расширять или переписывать данная функция пригодится. И код более высокоуровневый получается.

Issaychik
22.08.2020, 11:45
Вам лишь бы обосрать. Сделайте лучше если не так тем более бесплатно!

donaks.
22.08.2020, 12:58
Вам лишь бы обосрать. Сделайте лучше если не так тем более бесплатно!


Без критики никуда).

clrn1w
24.08.2020, 14:37
Вам лишь бы обосрать. Сделайте лучше если не так тем более бесплатно!


Прикол в том, что будет эмуляция текста во все окна. Лучше было бы использовать адреса памяти(можно найти в инете)



Кстати если есть коллбэк на кнопки то можно и без while True вроде

Вдруг потом пригодится лол. На питоне нет инлайн функций к сожалению


есть лямбда если что

kin4stat
24.08.2020, 18:29
Прикол в том, что будет эмуляция текста во все окна. Лучше было бы использовать адреса памяти(можно найти в инете)

есть лямбда если что


Лямбда это не внедрение кода в место вызова, держу в курсе

clrn1w
25.08.2020, 11:22
Лямбда это не внедрение кода в место вызова, держу в курсе


лямбда это безымянная фукнция, она бы подошла для твоей задачи

donaks.
25.08.2020, 23:02
Прикол в том, что будет эмуляция текста во все окна.


Эмуляция будет происходить когда самп будет активным окном.

Yatochk1
06.09.2022, 21:59
А как его запускать ?