Смотри. Все что между "" в этой команде - это твой шаблон. 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
}
}
Когда вы говорите что не можете сделать, вам всего-лишь не хватает фантазии придумать какой-нибудь костыль.