1 (изменено: ThisIsStart, 2018-01-29 11:32:11)

Тема: SA:MP Безопасный автовход и своя команда

Прошу помощи и объяснение как правильно сделать
1) Безопасный автовход, я где-то читал(или мне сказали) что если не писать пароль, а скопировать и вставить пароль, то стиллер отправит пустую строку. Конечно стиллера у меня нет, однако если появится, то будет неприятно. Возможно ли как-то сделать чтобы AHK реагировал на строку в чате

[11:57:09]  Добро пожаловать на Samp Role Play

и через секунду вводил пароль в окно. Я могу сделать чтобы открывался чат, туда писался пароль, копировался с помощью Ctrl+Home и Ctrl+V и вставлял в окно, а после копировал(чтобы пароль не остался в буфере) что то другое типа "123". Но проблема в том что после того чат открывается, то окно ввода пароля становиться неактивным и нужно нажать курсором по окну. В интернете функции копирования чего-то в буфер я не нашёл. Может вы подскажите? Наверно можно как-то записать пароль в переменную и ввести сразу после входа, насколько я помню изначально после входа окно ввода пароля активно. Научите меня работать с переменными, и использовать их.
P.S. Ну или хоть ссылку киньте где это все подробно написано(На русском), возможно я плохо искал.

2) Не раз видел в биндерах что можно делать свои команды, и после ввода их в чат, происходит активация. То есть можно ввести

/privet

и персонаж поздоровается с ближайшим игроком. Я пытался сделать с помощью

:?:/hi::

, но не получается, ничего не происходит. Возможно мой samp.udf на это не рассчитан. Прикладываю код(нерабочий) и samp.udf(скачал с che*t-ma*t*r.ru и там много ненужного, но главное что работал)

:?:/ку::
SendMessage, 0x50,, 0x4190419,, A \\ Переключение раскладки для правильного отображения(Антивопросики)
SendInput, {F6}Здравия желаю т.{Space}
return

P.S. Объясните мне пожалуйста конкретнее про базовые вещи AHK, переменные, if, loop. По каким формам их делать и какие условия.
Заранее благодарю

Post's attachments

samp.ahk 220.24 kb, file has never been downloaded. 

You don't have the permssions to download the attachments of this post.

2 (изменено: Phoenixxx_Czar, 2018-01-29 19:29:56)

Re: SA:MP Безопасный автовход и своя команда

На счет атни-стиллера:
Мне кажется не пройдет ибо опять же как мне кажется, клео ловит именно закрытие диалога и только тогда берет из памяти текст который вводил. Так что это не подойдет.
На счет команд:
Лучше использовать какой-то Командный процессор (КП).
На счет твоего /ку:
Функция getClosestPlayerId() - возвращает ид ближайшего игрока.
Теперь решение:

SendChat("Здравия желаю т. " RegExReplace(GetPlayerNameById(getClosestPlayerId()), "_", " "))
Мое вк: https://vk.com/perbuy_czar

3

Re: SA:MP Безопасный автовход и своя команда

Само приветствия и функцию написать допустим я смогу. Проблема в том то что не работает, активации на

/ку /hi

/ и тому подобное не происходит. Возможно проблема в samp.udf, если у вас работает, можете скинуть?

4

Re: SA:MP Безопасный автовход и своя команда

ThisIsStart, отпишись мне в вк, скину удф и пример работы с командами.

Мое вк: https://vk.com/perbuy_czar

5 (изменено: ThisIsStart, 2018-01-31 14:41:24)

Re: SA:MP Безопасный автовход и своя команда

Всё же автовход будет мне полезен. Написал скрипт, но собрал его из других скриптов(из "костылей" как я понял)


#include %A_ScriptDir%\samp.ahk
#IfWinActive GTA:SA:MP

global chatlog := A_MyDocuments "\GTA San Andreas User Files\SAMP\chatlog.txt"
Clipboard = password ; запись в буфер пароль

log := {str:"",find:0,num:0}    ,    log.str := []

        Loop, read, %path_log%
        log.str.Insert(A_LoopReadLine)    ,log.num := A_Index

		loop 
	    if RegExMatch(     log.str[log.num + 1 - A_Index]
            ,"\[(.*)\]  Добро пожаловать на Samp Role Play (.*)" ; на что должен реагировать
            , connected) and (log.find:=log.num + 1 - A_Index)
                break
if (connected != "") {
Sleep 1000
SendInput, ^{vk56} ; небольшая задержка и ввод пароля
}
Clipboard = bufer ; запись в буфер чего-то другого

Этот код не работает(не удивительно конечно). Прошу показать мне как правильно делать. А точнее расскажите что значат аргументы(параметры) в функциях

log := {str:"",find:0,num:0}    ,    log.str := []

и

log.str.Insert(A_LoopReadLine)    ,log.num := A_Index

И здесь, также хочу узнать для чего нужна масса скобок со знаком * внутри в этой части(ну и те же параметры)

if RegExMatch(     log.str[log.num + 1 - A_Index]
            ,"\[(.*)\]  Добро пожаловать на Samp Role Play (.*)" ; на что должен реагировать
            , connected) and (log.find:=log.num + 1 - A_Index)

Я не прошу готовый код, просто поясните мне что есть что в этом коде.
p.s. Всё что я находил это только готовые коды, без объяснений и комментарий. Собственно из них и собрал этот
p.s.s. Вторая проблема также активна

6

Re: SA:MP Безопасный автовход и своя команда

В общем перелазил и вроде понял все аргументы, однако ничего так и не получилось. Прошу научите, дайте мне шаблон по которому я смогу искать нужные мне данные, и если они есть, либо выводить их(присваивать переменной), либо делать какую-то другую задачу. Я понял поиска строки есть RegExMatch, но у меня не получалось, возможно потому что нужная мне фраза "Добро пожаловать на Samp Role Play" окрашена(Прикладываю скриншот).
https://i.imgur.com/m3pz5dG.png
p.s. Надеюсь эту тему ещё кто-то смотрит, и мне помогут

7 (изменено: 234783g, 2018-02-01 06:56:24)

Re: SA:MP Безопасный автовход и своя команда

Сделал всё проще.

#IfWinActive GTA:SA:MP
#SingleInstance Force 
#SingleInstance
#NoEnv
#Include, samp-udf.ahk

F1::
Nikname:=getUsername()
Iniread,password,%A_ScriptDir%/Password.ini,%Nikname%,passwordread
1:
if(isDialogOpen() && RegExMatch(getDialogText(), "Добро пожаловать на"))
{
SendMessage, 0x50,, 0x4190419,, A
SendInput,%password%{enter}
}
Else
{
goto 1
}
return

Как выглядит ini file

[НИК]
passwordread=ПАРОЛЬ

Но для этого тебе нужно иметь samp-udf. Пароль может считываться с ини файла, достаточно удобно, когда ты перезаходишь на разные аккаунты, с разным ником и паролем, ну или можешь просто удалить строчку Iniread,password,%A_ScriptDir%/Password.ini,%Nikname%,passwordread, а на место %password% просто вписать свой пароль.

8 (изменено: ThisIsStart, 2018-02-01 13:45:13)

Re: SA:MP Безопасный автовход и своя команда

Всё работает. Спасибо

9 (изменено: ThisIsStart, 2018-02-01 13:45:23)

Re: SA:MP Безопасный автовход и своя команда

Выкладываю код.
Вход по нажатию клавиши:


#IfWinActive GTA:SA:MP
#SingleInstance Force 
#SingleInstance
#NoEnv
#Include, samp.ahk ; подключение udf

F1::
Nikname:=getUsername()
Iniread,password,%A_ScriptDir%/Password.ini,%Nikname%,passwordread
1:
if(isDialogOpen() && RegExMatch(getDialogText(), "Добро пожаловать на"))
{
SendMessage, 0x50,, 0x4190419,, A
SendInput,%password%{enter}
}
Else
{
goto 1
}
return

Автоматический вход(Цикл, после ввода пароля цикл завершается, и проверки не будет. При повторном подключении нужно перезапускать скрипт):


#IfWinActive GTA:SA:MP
#SingleInstance Force 
#SingleInstance
#NoEnv
#Include, samp.ahk ; подключение udf

loop
{
Nikname:=getUsername()
Iniread,password,%A_ScriptDir%/Password.ini,%Nikname%,passwordread
if(isDialogOpen() && RegExMatch(getDialogText(), "Добро пожаловать на"))
{
SendMessage, 0x50,, 0x4190419,, A
SendInput,%password%{enter}
break
}
}
return

Параметры ini файла(по умолчанию должен лежать в папке со скриптом):


[Ivan_Ivanov]
passwordread=ivan777