1 (изменено: VechnoMolodoy, 2017-08-14 22:20:07)

Тема: AHK: SAMP, написать авто ввод пароля

Здрасте, мне нужно написать скрипт который бы смотрел в чат лог - ссылка на него. %A_MyDocuments%\Gta San Andreas User Files/SAMP/chatlog.txt
И что бы при появлении строчки   

Connected. Joining the game...  

Он  проигрывал эти строчки

Sleep 15000 
SendInput, {Enter}
Sleep 100
SendInput, Тут он будет писать заданный текст в диалог. в данном случае пароль
Sleep 500 
SendInput, {Enter}

Далее ещё пара ситуаций

Что бы при появлении

 You are banned from this server. и вот этого server closed the connection.


(Они появляются по одиночке в разных ситуациях, надо что бы срабатывало и под это и под то отдельно.)

Он проигрывал эти строчки

Sleep 15000 
SendInput, {F6}Тут будет заданная команда{Enter}

И последнее
При появлении этой строчки

Wrong server password.

Он проигрывал эти строчки

Sleep 90000 
SendInput, {F6}Тут будет заданная команда{Enter}

Буду благодарен :3

2

Re: AHK: SAMP, написать авто ввод пароля

Оформи код по правилам и я тебе все дам за бесплатно .

Когда вы говорите что не можете сделать, вам всего-лишь не хватает фантазии придумать какой-нибудь костыль.

3 (изменено: VechnoMolodoy, 2017-08-14 22:13:22)

Re: AHK: SAMP, написать авто ввод пароля

belyankin12 так?

4 (изменено: belyankin12, 2017-08-14 22:13:50)

Re: AHK: SAMP, написать авто ввод пароля

Открыть правила и почитать. Заодно куча всего полезного узнаешь. Давай-давай, я уже скопировал код в поле ответа).

P.S. Не так.

Когда вы говорите что не можете сделать, вам всего-лишь не хватает фантазии придумать какой-нибудь костыль.

5 (изменено: VechnoMolodoy, 2017-08-14 22:19:13)

Re: AHK: SAMP, написать авто ввод пароля

Вроде всё посмотрев по другим темам сделал вывод что надо сделать так?

6

Re: AHK: SAMP, написать авто ввод пароля

Вот, точки модераторы заставят уже проставить. Забирай свой приз: шаблон чата сам допиши. Этот код автоматически сработает, как только нужный шаблон появится в чатлоге.


global path_log := A_MyDocuments "\GTA San Andreas User Files\SAMP\chatlog.txt"
Loop {
	log := {str:"",find:0,num:0}    ,    log.str := []
    Loop, read, %path_log%
    log.str.Insert(A_LoopReadLine)    ,log.num := A_Index
	
    loop 3
		if RegExMatch(log.str[log.num + 1 - A_Index],"\[(.*)]  Общий чат включен админом", end_oo) and (log.find:=log.num + 1 - A_Index)
	break
    sleep 100
	
	if (end_oo1 != "") {
		sendchat("/o Белочка пришла")
	}
}
Когда вы говорите что не можете сделать, вам всего-лишь не хватает фантазии придумать какой-нибудь костыль.

7

Re: AHK: SAMP, написать авто ввод пароля

belyankin12 я не понимаю слишком сложно для меня

8

Re: AHK: SAMP, написать авто ввод пароля

Ну блин, давай так: что из кода тебе не понятно. Только не надо писать "все", выдели мне строчки, которые тебе непонятны.

Когда вы говорите что не можете сделать, вам всего-лишь не хватает фантазии придумать какой-нибудь костыль.

9

Re: AHK: SAMP, написать авто ввод пароля

belyankin12

if RegExMatch(log.str[log.num + 1 - A_Index],"\[(.*)]  Общий чат включен админом", end_oo) and (log.find:=log.num + 1 - A_Index)

Как мне сюда вставить Нужные мне строчки

sendchat("/o Белочка пришла")


А вот здесь  как мне эмулировать нажатие энтера

10 (изменено: VechnoMolodoy, 2017-08-14 22:54:06)

Re: AHK: SAMP, написать авто ввод пароля

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

11 (изменено: belyankin12, 2017-08-14 23:00:34)

Re: AHK: SAMP, написать авто ввод пароля

Смотри. Все что между "" в этой команде - это твой шаблон. RegExMatch очень чувствителен к точности шаблона: один лишний либо недостающий пробел и все, не будет работать. Между кавычек тебе нужно вставить ту строчку, которую ты будешь искать. Например при подключении к серверу: Connected. Joining the game..., будет выглядеть так:

if RegExMatch(log.str[log.num + 1 - A_Index],"Connected. Joining the game...", end_oo) and (log.find:=log.num + 1 - A_Index)

end_oo - это имя выводимой RegExMatch переменной, оно может быть любым, каким ты хочешь. Если заданный тобой шаблон найден, то переменная end_oo будет содержать всю найденную строчку. При этом есть переменные end_oo1, end_oo2 и так до бесконечности, которые содержат значения заданных тобой вариантов нужного текста. Ну например, есть у нас две строчки:

Жизнь идёт хорошо
Жизнь идёт плохо

Тебе нужно найти одну из этих двух строк, но ты не знаешь наверняка какая именно из них будет в чатлоге. Что нужно делать первым делом: найти все постоянные значения в строчке, чем больше их, тем точнее будет работать команда. В нашем случае обе строчки имеют общую часть: "Жизнь идёт "(внимание на пробел в конце - он тоже постоянный и его тоже нужно учитывать). Тогда создаем шаблон:

if RegExMatch(log.str[log.num + 1 - A_Index],"Жизнь идёт (.*)", end_oo) and (log.find:=log.num + 1 - A_Index)

точка и звездочка рядом с ней, помещенные в круглые скобки, означает любая комбинация символов, повторяющаяся любое количество раз. Даже пустота, это в общем может быть все что угодно, хоть миллиард букв, хоть ничего совсем. На самом деле это один из самых нерекомендуемых приемов, но в случае с сампом он подходит, ибо сообщения в чатлоге всегда одинаковые. Так вот, так как вместо (.*) может быть все что угодно, скрипт будет искать строчку, которая начинается на "Жизнь идёт " и если она есть (не важно что будет после "Жизнь идёт ") - то end_oo не будет пустой. Представим что скрипт нашел по этому шаблону строчку "Жизнь идёт хорошо", тогда в end_oo будет помещена вся найденная строчка "Жизнь идёт хорошо", а в end_oo1 только слово "хорошо". Т.е. end_oo1 это самый первый вариант текста, end_oo2 второй вариант (если указать). Вроде бы на пальцах объяснил, по шаблонам все ясно?

Как эмулировать нажатие ентера, легко. Если заданный тобой шаблон найден, значит переменная end_oo не будет пустой. Прописываешь условие:

if (end_oo != "") { ; если переменная end_oo не пустая
	твое действие
}

Да, чатлог не нужно чистить. Этот код читает чатлог не сверху вниз, а снизу вверх. Склеивать четыре поиска нужно так:

Loop {
log := {str:"",find:0,num:0}    ,    log.str := []
    Loop, read, %path_log%
    log.str.Insert(A_LoopReadLine)    ,log.num := A_Index
	
    loop 3
		if RegExMatch(log.str[log.num + 1 - A_Index],"\[(.*)]  Общий чат включен админом", end_oo) and (log.find:=log.num + 1 - A_Index) ; шаблон 1
	break
    sleep 100
	
	if (end_oo1 != "") {
		действие если найдена строчка в шаблоне1
	}
	
    loop 3
		if RegExMatch(log.str[log.num + 1 - A_Index],"\[(.*)]  Общий чат включен админом", end_oo) and (log.find:=log.num + 1 - A_Index) ; шаблон 2
	break
    sleep 100
	
	if (end_oo1 != "") {
		действие если найдена строчка в шаблоне 2
	}

 loop 3
		if RegExMatch(log.str[log.num + 1 - A_Index],"\[(.*)]  Общий чат включен админом", end_oo) and (log.find:=log.num + 1 - A_Index) ; шаблон 3
	break
    sleep 100
	
	if (end_oo1 != "") {
		действие если найдена строчка в шаблоне 3
	}
}
Когда вы говорите что не можете сделать, вам всего-лишь не хватает фантазии придумать какой-нибудь костыль.

12

Re: AHK: SAMP, написать авто ввод пароля

Оооочень сложно для моего мозга  но за старания спасибо.

13

Re: AHK: SAMP, написать авто ввод пароля

А вот с этим вроде понял, сейчас протестирую

Loop {
log := {str:"",find:0,num:0}    ,    log.str := []
    Loop, read, %path_log%
    log.str.Insert(A_LoopReadLine)    ,log.num := A_Index
	
    loop 3
		if RegExMatch(log.str[log.num + 1 - A_Index],"\[(.*)]  Общий чат включен админом", end_oo) and (log.find:=log.num + 1 - A_Index) ; шаблон 1
	break
    sleep 100
	
	if (end_oo1 != "") {
		действие если найдена строчка в шаблоне1
	}
	
    loop 3
		if RegExMatch(log.str[log.num + 1 - A_Index],"\[(.*)]  Общий чат включен админом", end_oo) and (log.find:=log.num + 1 - A_Index) ; шаблон 2
	break
    sleep 100
	
	if (end_oo1 != "") {
		действие если найдена строчка в шаблоне 2
	}

 loop 3
		if RegExMatch(log.str[log.num + 1 - A_Index],"\[(.*)]  Общий чат включен админом", end_oo) and (log.find:=log.num + 1 - A_Index) ; шаблон 3
	break
    sleep 100
	
	if (end_oo1 != "") {
		действие если найдена строчка в шаблоне 3
	}
}

14

Re: AHK: SAMP, написать авто ввод пароля

Да ничего сложного, просто ты боишься попытаться понять. Я тоже регулярок очень боялся и заставлял моего наставника просто писать мне скрипты которые я хотел. Потом ему это надоело однажды, он позвал меня в тимспик и объяснил все на пальцах как я тебе только голосом. Это базовый инструмент для работы с сампом, у тебя сейчас есть возможность освоить его, не сдавайся, я помогу. Перечитай пару раз, что не понятно спрашивай.

Когда вы говорите что не можете сделать, вам всего-лишь не хватает фантазии придумать какой-нибудь костыль.

15

Re: AHK: SAMP, написать авто ввод пароля

Сколько смотрел, он не разу не откликался я для теста сделал что бы он писал 1 в чат. итог плачевен...

NumPad2::
global path_log := A_MyDocuments "\GTA San Andreas User Files\SAMP\chatlog.txt"
Loop {
log := {str:"",find:0,num:0}    ,    log.str := []
    Loop, read, %path_log%
    log.str.Insert(A_LoopReadLine)    ,log.num := A_Index
	
    loop 3
		if RegExMatch(log.str[log.num + 1 - A_Index],"\[(.*)]  Connected. Joining the game...", end_oo) and (log.find:=log.num + 1 - A_Index) ; шаблон 1
	break
    sleep 100
	
	if (end_oo1 != "") {
		
Sleep 20000 
SendInput, {Enter}
Sleep 100
SendInput, tutpassword
Sleep 500 
SendInput, {Enter}

	}
	
    loop 3
		if RegExMatch(log.str[log.num + 1 - A_Index],"\[(.*)]   You are banned from this server.", end_oo) and (log.find:=log.num + 1 - A_Index) ; шаблон 2
	break
    sleep 100
	
	if (end_oo1 != "") {
Sleep 3000 
SendInput, {F6}1{Enter}
	}

 loop 3
		if RegExMatch(log.str[log.num + 1 - A_Index],"\[(.*)]  server closed the connection.", end_oo) and (log.find:=log.num + 1 - A_Index) ; шаблон 3
	break
    sleep 100
	
	if (end_oo1 != "") {
Sleep 16000 
SendInput, {F6}1{Enter}
	}
 loop 3
		if RegExMatch(log.str[log.num + 1 - A_Index],"\[(.*)]  Wrong server password.", end_oo) and (log.find:=log.num + 1 - A_Index) ; шаблон 4
	break
    sleep 100
	
	if (end_oo1 != "") {
Sleep 90000 
SendInput, {F6}1{Enter}
	}
}

16 (изменено: VechnoMolodoy, 2017-08-14 23:17:49)

Re: AHK: SAMP, написать авто ввод пароля

И кажется я даже понял почему  А, нет... это не из-за этого.

17

Re: AHK: SAMP, написать авто ввод пароля

Если в строчке есть [] они должны экранироваться. Экран идёт так: \текст\. Все что между \\ будет восприниматься как текст, а не как аргументы функции. Посмотри свои шаблоны.

Когда вы говорите что не можете сделать, вам всего-лишь не хватает фантазии придумать какой-нибудь костыль.

18 (изменено: VechnoMolodoy, 2017-08-14 23:31:15)

Re: AHK: SAMP, написать авто ввод пароля

Так

	if RegExMatch(log.str[log.num + 1 - A_Index],"\[(.*)]  Wrong server password.\", end_oo) and (log.find:=log.num + 1 - A_Index) 

Или так

	if RegExMatch(log.str[log.num + 1 - A_Index],"\ Wrong server password.\", end_oo) and (log.find:=log.num + 1 - A_Index) 

Или вообще не так?:)

19 (изменено: VechnoMolodoy, 2017-08-15 00:39:13)

Re: AHK: SAMP, написать авто ввод пароля

.

20

Re: AHK: SAMP, написать авто ввод пароля

Я тут для того чтобы стало понятно хотя бы 70 процентов. Не так. Не нужно весь текст экранировать, только [], т.к. они воспринимаются в качестве аргументов функции. Так: \[(.*)\].

Когда вы говорите что не можете сделать, вам всего-лишь не хватает фантазии придумать какой-нибудь костыль.

21

Re: AHK: SAMP, написать авто ввод пароля

belyankin12 всё равно не работает, можешь написать полностью рабочий...

22

Re: AHK: SAMP, написать авто ввод пароля

Показывай код, ты думаешь для чего я все это время тебя мучал? Чтобы просто забить и дать тебе все готовое?

Когда вы говорите что не можете сделать, вам всего-лишь не хватает фантазии придумать какой-нибудь костыль.

23

Re: AHK: SAMP, написать авто ввод пароля

не чего нового кроме активации там не появилось

NumPad2::
global path_log := A_MyDocuments "\GTA San Andreas User Files\SAMP\chatlog.txt"
Loop {
log := {str:"",find:0,num:0}    ,    log.str := []
    Loop, read, %path_log%
    log.str.Insert(A_LoopReadLine)    ,log.num := A_Index
	
    loop 3
		if RegExMatch(log.str[log.num + 1 - A_Index],"\[(.*)]  Connected. Joining the game...", end_oo) and (log.find:=log.num + 1 - A_Index) ; шаблон 1
	break
    sleep 100
	
	if (end_oo1 != "") {
		
Sleep 20000 
SendInput, {Enter}
Sleep 100
SendInput, tutpassword
Sleep 500 
SendInput, {Enter}

	}
	
    loop 3
		if RegExMatch(log.str[log.num + 1 - A_Index],"\[(.*)]   You are banned from this server.", end_oo) and (log.find:=log.num + 1 - A_Index) ; шаблон 2
	break
    sleep 100
	
	if (end_oo1 != "") {
Sleep 3000 
SendInput, {F6}1{Enter}
	}

 loop 3
		if RegExMatch(log.str[log.num + 1 - A_Index],"\[(.*)]  server closed the connection.", end_oo) and (log.find:=log.num + 1 - A_Index) ; шаблон 3
	break
    sleep 100
	
	if (end_oo1 != "") {
Sleep 16000 
SendInput, {F6}1{Enter}
	}
 loop 3
		if RegExMatch(log.str[log.num + 1 - A_Index],"\[(.*)]  Wrong server password.", end_oo) and (log.find:=log.num + 1 - A_Index) ; шаблон 4
	break
    sleep 100
	
	if (end_oo1 != "") {
Sleep 90000 
SendInput, {F6}1{Enter}
	}
}

24

Re: AHK: SAMP, написать авто ввод пароля

Так: \[(.*)\]

это я для кого написал?

Когда вы говорите что не можете сделать, вам всего-лишь не хватает фантазии придумать какой-нибудь костыль.

25

Re: AHK: SAMP, написать авто ввод пароля

belyankin12  да даже с этим не работало.

26

Re: AHK: SAMP, написать авто ввод пароля

Я не вижу код, который не работает. Тот, что ты мне показал, не будет работать. Исправь его и если он не работает, покажи мне.

Когда вы говорите что не можете сделать, вам всего-лишь не хватает фантазии придумать какой-нибудь костыль.

27

Re: AHK: SAMP, написать авто ввод пароля

belyankin12

NumPad2::
global path_log := A_MyDocuments "\GTA San Andreas User Files\SAMP\chatlog.txt"
Loop {
log := {str:"",find:0,num:0}    ,    log.str := []
    Loop, read, %path_log%
    log.str.Insert(A_LoopReadLine)    ,log.num := A_Index
	
    loop 3
		if RegExMatch(log.str[log.num + 1 - A_Index],"\[(.*)\]  Connected. Joining the game...", end_oo) and (log.find:=log.num + 1 - A_Index) ; шаблон 1
	break
    sleep 100
	
	if (end_oo1 != "") {
		
Sleep 20000 
SendInput, {Enter}
Sleep 100
SendInput, tutpassword
Sleep 500 
SendInput, {Enter}

	}
	
    loop 3
		if RegExMatch(log.str[log.num + 1 - A_Index],"\[(.*)\]   You are banned from this server.", end_oo) and (log.find:=log.num + 1 - A_Index) ; шаблон 2
	break
    sleep 100
	
	if (end_oo1 != "") {
Sleep 3000 
SendInput, {F6}1{Enter}
	}

 loop 3
		if RegExMatch(log.str[log.num + 1 - A_Index],"\[(.*)\]  server closed the connection.", end_oo) and (log.find:=log.num + 1 - A_Index) ; шаблон 3
	break
    sleep 100
	
	if (end_oo1 != "") {
Sleep 16000 
SendInput, {F6}1{Enter}
	}
 loop 3
		if RegExMatch(log.str[log.num + 1 - A_Index],"\[(.*)\]  Wrong server password.", end_oo) and (log.find:=log.num + 1 - A_Index) ; шаблон 4
	break
    sleep 100
	
	if (end_oo1 != "") {
Sleep 90000 
SendInput, {F6}1{Enter}
	}
}

28

Re: AHK: SAMP, написать авто ввод пароля

Смотри какая схема. Тут всего стоит луп 3, т.е. как действует скрипт:  ты сначала запускаешь скрипт, а потом игру, а он ждет пока тебе одна из трех строчек вылезет и тогда срабатывает. Ты по такой схеме делаешь? Если нет - то попробуй именно так, если да - то увеличь loop 3 до loop 5, а ещё, скопируй три нужные строчки мне прямо из чатлога.

Когда вы говорите что не можете сделать, вам всего-лишь не хватает фантазии придумать какой-нибудь костыль.