Исправил.
Ты бы сам лучше попробовал, и что бы вышло? Правильно. Ничего!global flag:=false после оглашения file_chat
Всё для того, чтобы один раз расписать и объяснить человеку.И зачем? Пусть учится пошагово делать
Зашёл в игру в чате пишет Вы не сотрудник медслужбы АХК не срабатывает.Исправил.
Ты бы сам лучше попробовал, и что бы вышло? Правильно. Ничего!
Всё для того, чтобы один раз расписать и объяснить человеку.
#NoEnv
#SingleInstance force
#UseHook on
chatlog := A_MyDocuments "\GTA San Andreas User Files\SAMP\chatlog.txt"
chatline := getFileLinesCount(chatlog)
while true
{
if !isGameRunning()
continue
Loop, Read, % chatlog
{
if (A_Index <= chatline)
continue
; chatline := A_Index
if RegExMatch(A_LoopReadLine, "Вы не работник медслужбы")
sendinput {f6}/n откат{enter}
}
chatline := getFileLinesCount(chatlog)
sleep 50
}
getFileLinesCount(filename)
{
IfNotExist % filename
return -1
Loop, Read, % filename
result := A_Index
return result
}
isGameRunning()
{
for process in ComObjGet("winmgmts:").ExecQuery("Select * from Win32_Process")
if process.Name == "gta_sa.exe"
return true
return false
}
удалять/перемещать чатлог только чтобы прочитать строку чата это 1) не всегда удобно; 2) лютый говнокодДля этого существует функция save(chatlog).
если кто-нибудь напишет в чат "Вы не работник медслужбы", то скрипт сработает, поэтому скинь строку из чатлога, чтобы более точно составить регулярку (если она тут вообще понадобится, возможно даже лучше будет использовать InStr)"Вы не работник медслужбы"
Зашёл в игру в чате пишет Вы не сотрудник медслужбы АХК не срабатывает.
Кинь строчку с чатлога.
[18:23:16] Вы не работник медслужбыпробуй этот скрипт
AutoHotKey:#NoEnv #SingleInstance force #UseHook on chatlog := A_MyDocuments "\GTA San Andreas User Files\SAMP\chatlog.txt" chatline := getFileLinesCount(chatlog) while true { if !isGameRunning() continue Loop, Read, % chatlog { if (A_Index <= chatline) continue ; chatline := A_Index if RegExMatch(A_LoopReadLine, "Вы не работник медслужбы") sendinput {f6}/n откат{enter} } chatline := getFileLinesCount(chatlog) sleep 50 } getFileLinesCount(filename) { IfNotExist % filename return -1 Loop, Read, % filename result := A_Index return result } isGameRunning() { for process in ComObjGet("winmgmts:").ExecQuery("Select * from Win32_Process") if process.Name == "gta_sa.exe" return true return false }
удалять/перемещать чатлог только чтобы прочитать строку чата это 1) не всегда удобно; 2) лютый говнокод
если кто-нибудь напишет в чат "Вы не работник медслужбы", то скрипт сработает, поэтому скинь строку из чатлога, чтобы более точно составить регулярку (если она тут вообще понадобится, возможно даже лучше будет использовать InStr)
Сработал но, несколько раз профлудил как исправить?пробуй этот скрипт
AutoHotKey:#NoEnv #SingleInstance force #UseHook on chatlog := A_MyDocuments "\GTA San Andreas User Files\SAMP\chatlog.txt" chatline := getFileLinesCount(chatlog) while true { if !isGameRunning() continue Loop, Read, % chatlog { if (A_Index <= chatline) continue ; chatline := A_Index if RegExMatch(A_LoopReadLine, "Вы не работник медслужбы") sendinput {f6}/n откат{enter} } chatline := getFileLinesCount(chatlog) sleep 50 } getFileLinesCount(filename) { IfNotExist % filename return -1 Loop, Read, % filename result := A_Index return result } isGameRunning() { for process in ComObjGet("winmgmts:").ExecQuery("Select * from Win32_Process") if process.Name == "gta_sa.exe" return true return false }
удалять/перемещать чатлог только чтобы прочитать строку чата это 1) не всегда удобно; 2) лютый говнокод
если кто-нибудь напишет в чат "Вы не работник медслужбы", то скрипт сработает, поэтому скинь строку из чатлога, чтобы более точно составить регулярку (если она тут вообще понадобится, возможно даже лучше будет использовать InStr)
нет, ты всё испортил, код должен выглядеть примерно так (не проверял)Тут такой вопрос если мне нужно сразу несколько в чате искать разделать их или вот так?
#NoEnv
#SingleInstance force
#UseHook on
chatlog := A_MyDocuments "\GTA San Andreas User Files\SAMP\chatlog.txt"
chatline := getFileLinesCount(chatlog)
while true
{
if !isGameRunning()
continue
Loop, Read, % chatlog
{
if (A_Index <= chatline)
continue
str := A_LoopReadLine
if RegExMatch(A_LoopReadLine, "^\[\d{2}:\d{2}:\d{2}] Вы не работник медслужбы") ; старый пример
{
sendmessage, 0x50,, 0x419,, A
sendinput {f6}/n откат{enter}
; здесь любой твой код для "Вы не работник медслужбы"
}
if search(str, "Игрок не лежит в больнице") ; новый пример
{
sendkeys("{f6}/n Я не могу...")
; здесь любое продолжение твоего кода для "Игрок не лежит в больнице"
}
if search(str, "Игрок еблан")
{
sendkeys("{f6}/n Извините, вы еблан{enter}")
; здесь любое продолжение твоего кода для "Игрок еблан"
}
; и так далее продолжать здесь
}
chatline := getFileLinesCount(chatlog)
sleep 50
}
getFileLinesCount(filename)
{
IfNotExist % filename
return -1
Loop, Read, % filename
result := A_Index
return result
}
isGameRunning()
{
for process in ComObjGet("winmgmts:").ExecQuery("Select * from Win32_Process")
if process.Name == "gta_sa.exe"
return true
return false
}
sendkeys(string)
{
sendmessage, 0x50,, 0x419,, A
sendinput % string
}
search(haystack, needle) {
return RegExMatch(haystack, "^\[\d{2}:\d{2}:\d{2}\] " needle)
}
флудить несколько раз он не должен был, я это проверял. что именно ты исправил я не вижуСработал но, несколько раз профлудил как исправить?
лучше помещать это в тег code, каждый пробел важен для скана, а обычным текстом 2+ сливаются в один[18:23:16] Вы не работник медслужбы
где вы \[\d{2}:\d{2}:\d{2}] ват так код перевели?нет, ты всё испортил, код должен выглядеть примерно так (не проверял)
AutoHotKey:#NoEnv #SingleInstance force #UseHook on chatlog := A_MyDocuments "\GTA San Andreas User Files\SAMP\chatlog.txt" chatline := getFileLinesCount(chatlog) while true { if !isGameRunning() continue Loop, Read, % chatlog { if (A_Index <= chatline) continue str := A_LoopReadLine if RegExMatch(A_LoopReadLine, "^\[\d{2}:\d{2}:\d{2}] Вы не работник медслужбы") ; старый пример { sendmessage, 0x50,, 0x419,, A sendinput {f6}/n откат{enter} ; здесь любой твой код для "Вы не работник медслужбы" } if search(str, "Игрок не лежит в больнице") ; новый пример { sendkeys("{f6}/n Я не могу...") ; здесь любое продолжение твоего кода для "Игрок не лежит в больнице" } if search(str, "Игрок еблан") { sendkeys("{f6}/n Извините, вы еблан{enter}") ; здесь любое продолжение твоего кода для "Игрок еблан" } ; и так далее продолжать здесь } chatline := getFileLinesCount(chatlog) sleep 50 } getFileLinesCount(filename) { IfNotExist % filename return -1 Loop, Read, % filename result := A_Index return result } isGameRunning() { for process in ComObjGet("winmgmts:").ExecQuery("Select * from Win32_Process") if process.Name == "gta_sa.exe" return true return false } sendkeys(string) { sendmessage, 0x50,, 0x419,, A sendinput % string } search(haystack, needle) { return RegExMatch(haystack, "^\[\d{2}:\d{2}:\d{2}\] " needle) }
флудить несколько раз он не должен был, я это проверял. что именно ты исправил я не вижу
лучше помещать это в тег code, каждый пробел важен для скана, а обычным текстом 2+ сливаются в один
и второй вопрос, он по очереди искать будет или нет?нет, ты всё испортил, код должен выглядеть примерно так (не проверял)
AutoHotKey:#NoEnv #SingleInstance force #UseHook on chatlog := A_MyDocuments "\GTA San Andreas User Files\SAMP\chatlog.txt" chatline := getFileLinesCount(chatlog) while true { if !isGameRunning() continue Loop, Read, % chatlog { if (A_Index <= chatline) continue str := A_LoopReadLine if RegExMatch(A_LoopReadLine, "^\[\d{2}:\d{2}:\d{2}] Вы не работник медслужбы") ; старый пример { sendmessage, 0x50,, 0x419,, A sendinput {f6}/n откат{enter} ; здесь любой твой код для "Вы не работник медслужбы" } if search(str, "Игрок не лежит в больнице") ; новый пример { sendkeys("{f6}/n Я не могу...") ; здесь любое продолжение твоего кода для "Игрок не лежит в больнице" } if search(str, "Игрок еблан") { sendkeys("{f6}/n Извините, вы еблан{enter}") ; здесь любое продолжение твоего кода для "Игрок еблан" } ; и так далее продолжать здесь } chatline := getFileLinesCount(chatlog) sleep 50 } getFileLinesCount(filename) { IfNotExist % filename return -1 Loop, Read, % filename result := A_Index return result } isGameRunning() { for process in ComObjGet("winmgmts:").ExecQuery("Select * from Win32_Process") if process.Name == "gta_sa.exe" return true return false } sendkeys(string) { sendmessage, 0x50,, 0x419,, A sendinput % string } search(haystack, needle) { return RegExMatch(haystack, "^\[\d{2}:\d{2}:\d{2}\] " needle) }
флудить несколько раз он не должен был, я это проверял. что именно ты исправил я не вижу
лучше помещать это в тег code, каждый пробел важен для скана, а обычным текстом 2+ сливаются в один
Почитай литературу про RegExMatch. Это регулярное выражение.где вы \[\d{2}:\d{2}:\d{2}] ват так код перевели?
и второй вопрос, он по очереди искать будет или нет?
Ну блин, мне нужно как-то ник сделать типо такого \[\d{2}:\d{2}:\d{2}] и отдельно деньги, можете помочь, и я отстану :)Почитай литературу про RegExMatch. Это регулярное выражение.
http://ahk-wiki.ru/regexmatch
Всё разом.
Ну блин, мне нужно как-то ник сделать типо такого \[\d{2}:\d{2}:\d{2}] и отдельно деньги, можете помочь, и я отстану :)
if search(str, "тут пиши своё про деньги")
{
;Тут ответ
}
Да это я сделал, мне нужно такой-же код \[\d{2}:\d{2}:\d{2}] как будет выгледить ник Мне нужно сделать "Вы провели курс платного лечения у пациента Admin_Admin"Да ты глаза свои разунь, у тебя же код готовый есть....
AutoHotKey:if search(str, "тут пиши своё про деньги") { ;Тут ответ }
Тебе уже расписали, все как есть. Нужно только немного подумать и сделать, как тебе необходимо.
Да это я сделал, мне нужно такой-же код \[\d{2}:\d{2}:\d{2}] как будет выгледить ник Мне нужно сделать "Вы провели курс платного лечения у пациента Admin_Admin"
Ник каждый раз будет меняться
if search(str, "Вы провели курс платного лечения у пациента (\w+_\w+)")
{
;Тут ответ
}
if (A_IsAdmin = false)
{
Run *RunAs "%A_ScriptFullPath%" ,, UseErrorLevel
}
#IfWinActive GTA:SA:MP
#NoEnv
#SingleInstance force
#UseHook on
chatlog := A_MyDocuments "\GTA San Andreas User Files\SAMP\chatlog.txt"
chatline := getFileLinesCount(chatlog)
:?:/medhelp::
SendMessage, 0x50,, 0x4190419,, A
Sleep, 100
SendInput, {F6}Здравствуйте, я Ваш лечущий врач "Ричард Эскобар", сейчас я буду Вас лечить.{Enter}
Sleep, 1500
SendInput, {F6}Сейчас я Вам выдам лекарство от головы, подождите немного, сейчас достану таблетку.{Enter}
Sleep, 1500
SendInput, {F6}/do На плече у Ричарда весит сумка, в сумке таблетки от головы.{Enter}
Sleep, 1500
SendInput, {F6}/me открывает сумку, достаёт от-туда таблетку от головы, закрывает сумку.{Enter}
Sleep, 1500
SendInput, {F6}/me передал лекарство человеку напротив, улыбается тому, что помог ещё одному человеку.{Enter}
SendInput, {F6}/medhelp{Space}
{
Loop, Read, % chatlog
{
str := A_LoopReadLine
if RegExMatch(str, "Игрок не лежит в больнице")
{
SendMessage, 0x50,, 0x4190419,, A
SendInput, {F6}Уважаемый(-ая) пациент(-ка). Я не могу выписать препарат для Вас, займите койку.{Enter}
Sleep, 1500
SendInput, {F6}/n Для того что-бы занять койку, подойдите к ней, и пропишите [ /med ].{Enter}
Sleep, 1500
SendInput, {F6}/n Если вы не займёте койку. Мне система не даст вылечить Вас.{Enter}
}
if search(str, "У пациента нет с собой столько денег")
{
SendMessage, 0x50,, 0x4190419,, A
Sendinput, {f6}/n Я не могу Вас вылечить, у Вас не хватает денег на лечение.{Enter}
}
if search(str, "Вы провели курс платного лечения у пациента [\w+_\w+]")
{
SendMessage, 0x50,, 0x4190419,, A
SendInput, {F6}Удачного Вам дня, больше не болейте.{Enter}
}
chatline := getFileLinesCount(chatlog)
sleep 50
}
}
getFileLinesCount(filename)
{
IfNotExist % filename
return -1
Loop, Read, % filename
result := A_Index
return result
}
isGameRunning()
{
for process in ComObjGet("winmgmts:").ExecQuery("Select * from Win32_Process")
if process.Name == "gta_sa.exe"
return true
return false
}
return
Посмотреть вложение 27522
Вот держите, мой код.AutoHotKey:if (A_IsAdmin = false) { Run *RunAs "%A_ScriptFullPath%" ,, UseErrorLevel } #IfWinActive GTA:SA:MP #NoEnv #SingleInstance force #UseHook on chatlog := A_MyDocuments "\GTA San Andreas User Files\SAMP\chatlog.txt" chatline := getFileLinesCount(chatlog) :?:/medhelp:: SendMessage, 0x50,, 0x4190419,, A Sleep, 100 SendInput, {F6}Здравствуйте, я Ваш лечущий врач "Ричард Эскобар", сейчас я буду Вас лечить.{Enter} Sleep, 1500 SendInput, {F6}Сейчас я Вам выдам лекарство от головы, подождите немного, сейчас достану таблетку.{Enter} Sleep, 1500 SendInput, {F6}/do На плече у Ричарда весит сумка, в сумке таблетки от головы.{Enter} Sleep, 1500 SendInput, {F6}/me открывает сумку, достаёт от-туда таблетку от головы, закрывает сумку.{Enter} Sleep, 1500 SendInput, {F6}/me передал лекарство человеку напротив, улыбается тому, что помог ещё одному человеку.{Enter} SendInput, {F6}/medhelp{Space} { Loop, Read, % chatlog { str := A_LoopReadLine if RegExMatch(str, "Игрок не лежит в больнице") { SendMessage, 0x50,, 0x4190419,, A SendInput, {F6}Уважаемый(-ая) пациент(-ка). Я не могу выписать препарат для Вас, займите койку.{Enter} Sleep, 1500 SendInput, {F6}/n Для того что-бы занять койку, подойдите к ней, и пропишите [ /med ].{Enter} Sleep, 1500 SendInput, {F6}/n Если вы не займёте койку. Мне система не даст вылечить Вас.{Enter} } if search(str, "У пациента нет с собой столько денег") { SendMessage, 0x50,, 0x4190419,, A Sendinput, {f6}/n Я не могу Вас вылечить, у Вас не хватает денег на лечение.{Enter} } if search(str, "Вы провели курс платного лечения у пациента [\w+_\w+]") { SendMessage, 0x50,, 0x4190419,, A SendInput, {F6}Удачного Вам дня, больше не болейте.{Enter} } chatline := getFileLinesCount(chatlog) sleep 50 } } getFileLinesCount(filename) { IfNotExist % filename return -1 Loop, Read, % filename result := A_Index return result } isGameRunning() { for process in ComObjGet("winmgmts:").ExecQuery("Select * from Win32_Process") if process.Name == "gta_sa.exe" return true return false } return
Где функция search()?
Исковеркал взял регулярку, которую я тебе писал.
if (A_IsAdmin = false)
{
Run *RunAs "%A_ScriptFullPath%" ,, UseErrorLevel
}
#IfWinActive GTA:SA:MP
#NoEnv
#SingleInstance force
#UseHook on
chatlog := A_MyDocuments "\GTA San Andreas User Files\SAMP\chatlog.txt"
chatline := getFileLinesCount(chatlog)
:?:/medhelp::
SendMessage, 0x50,, 0x4190419,, A
Sleep, 100
SendInput, {F6}Здравствуйте, я Ваш лечущий врач "Ричард Эскобар", сейчас я буду Вас лечить.{Enter}
Sleep, 1500
SendInput, {F6}Сейчас я Вам выдам лекарство от головы, подождите немного, сейчас достану таблетку.{Enter}
Sleep, 1500
SendInput, {F6}/do На плече у Ричарда весит сумка, в сумке таблетки от головы.{Enter}
Sleep, 1500
SendInput, {F6}/me открывает сумку, достаёт от-туда таблетку от головы, закрывает сумку.{Enter}
Sleep, 1500
SendInput, {F6}/me передал лекарство человеку напротив, улыбается тому, что помог ещё одному человеку.{Enter}
SendInput, {F6}/medhelp{Space}
return
while true
{
if !isGameRunning()
continue
Loop, Read, % chatlog
{
if (A_Index <= chatline)
continue
str := A_LoopReadLine
if RegExMatch(A_LoopReadLine, "^Игрок не лежит в больнице")
{
SendMessage, 0x50,, 0x4190419,, A
SendInput, {F6}Уважаемый(-ая) пациент(-ка). Я не могу выписать препарат для Вас, займите койку.{Enter}
Sleep, 1500
SendInput, {F6}/n Для того что-бы занять койку, подойдите к ней, и пропишите [ /med ].{Enter}
Sleep, 1500
SendInput, {F6}/n Если вы не займёте койку. Мне система не даст вылечить Вас.{Enter}
}
if search(str, "У пациента нет с собой столько денег")
{
SendMessage, 0x50,, 0x4190419,, A
Sendinput, {f6}/n Я не могу Вас вылечить, у Вас не хватает денег на лечение.{Enter}
}
if search(str, "Вы провели курс платного лечения у пациента [\w+_\w+]")
{
SendMessage, 0x50,, 0x4190419,, A
SendInput, {F6}Удачного Вам дня, больше не болейте.{Enter}
}
}
chatline := getFileLinesCount(chatlog)
sleep 50
}
getFileLinesCount(filename)
{
IfNotExist % filename
return -1
Loop, Read, % filename
result := A_Index
return result
}
isGameRunning()
{
for process in ComObjGet("winmgmts:").ExecQuery("Select * from Win32_Process")
if process.Name == "gta_sa.exe"
return true
return false
}
sendkeys(string)
{
sendmessage, 0x50,, 0x419,, A
sendinput % string
}
search(haystack, needle) {
return RegExMatch(haystack, "^\[\d{2}:\d{2}:\d{2}\] " needle)
}