[Помощь] Чтение чат лога | Соединение 2-х скриптов.
|
|
Logins007 |
Дата: Четверг, 16.08.2018, 16:44 | Сообщение # 1
|
Новичок
Сообщений: 14
Статус: Offline
|
Не находит сообщение "Вы надели бронежилет" в чат логе, в чём проблемка?
Код FileCLog:=% A_MyDocuments "\GTA San Andreas User Files\SAMP\chatlog.txt" loop { lastline := GetNewLine(FileCLog) if RegExMatch(lastline, "Вы надели бронежилет") { SendChat("/me одел бронь") } } GetNewLine(filename) { static old static new if !old { FileGetSize, old, %filename% new := old } while old = new { sleep 100 FileGetSize, new, %filename% } old := new Loop, read, %filename% if A_LoopReadLine { last := A_LoopReadLine } return last }
Сообщение отредактировал Logins007 - Воскресенье, 19.08.2018, 00:53 |
|
|
|
[CM]James17 |
Дата: Четверг, 16.08.2018, 16:56 | Сообщение # 2
|
Новичок
Сообщений: 22
Статус: Offline
|
Я думаю, лучше использовать UDF и GetChatLine(line, output) из него.
Код Loop { GetChatLine(0, chat) if chat contains Вы надели бронежилет { SendChat("/me надел бронижилет") } } return Если и это не будет работать, то следует эту строчку найти в самом чатлоге и проверить на наличие цвета, ну типо {FFFFFF}
Сообщение отредактировал [CM]James17 - Четверг, 16.08.2018, 16:59 |
|
|
|
Logins007 |
Дата: Четверг, 16.08.2018, 17:08 | Сообщение # 3
|
Новичок
Сообщений: 14
Статус: Offline
|
[CM]James17, Работает, но как сделать несколько таких? т.к есть 2 отыгровки снятия/одевания бронежилета
|
|
|
|
slavawar |
Дата: Четверг, 16.08.2018, 17:16 | Сообщение # 4
|
Проверенный
Сообщений: 172
Статус: Offline
|
Цитата Logins007 ( ) как сделать несколько таких? Все такие вместо constains используй RegExMatch Примерно формат будет такой:
Код if (RegExMatch(chat, "Вы надели бронежилет")) { Всякий код.. } else if (RegExMatch(chat, "Вы сняли бронежилет")) { Всякий код }
Не знаю как все, но лично мнение от меня. Не люблю я читать чат или брать строки функциями UDF, лично у меня они всегда работали криво. Пример проще, делаем таймер и используем FileRead, если строка нашлась делаем действие и удаляем эту строку. Есть свои минусы и плюсы. Кто-то скажет что костыль и страшно.
Мои темы: [AHK] Шифратор текста [AHK] Акцент 3 в 1 [C#] Генератор RP ников
|
|
|
|
|
Logins007 |
Дата: Четверг, 16.08.2018, 17:20 | Сообщение # 6
|
Новичок
Сообщений: 14
Статус: Offline
|
slavawar, Ноль реакции
|
|
|
|
slavawar |
Дата: Четверг, 16.08.2018, 17:41 | Сообщение # 7
|
Проверенный
Сообщений: 172
Статус: Offline
|
Logins007, держи такой пример:
Код #Persistent SetTimer, read, on File := A_MyDocuments "\GTA San Andreas User Files\SAMP\Chatlog.txt"
read: FileRead, out, % File if (RegExMatch(out, "\[.*\] Вы надели бронежилет")) { ; Всякий код delLine("\[.*\] Вы надели бронежилет") } else if (RegExMatch(out, "\[.*\] Вы сняли бронежилет")) { ; Всякий код delLine("\[.*\] Вы сняли бронежилет") } return
delLine(string) { File := A_MyDocuments "\GTA San Andreas User Files\SAMP\Chatlog.txt" FileRead, All, % File FileOpen(File, "w").Write(RegExReplace(All, "(^|\R)" . string . "|" . string . "(\R|$)")) }
Мои темы: [AHK] Шифратор текста [AHK] Акцент 3 в 1 [C#] Генератор RP ников
|
|
|
|
Logins007 |
Дата: Четверг, 16.08.2018, 18:00 | Сообщение # 8
|
Новичок
Сообщений: 14
Статус: Offline
|
slavawar, Не работает с цветом
Код if (RegExMatch(out, "\[.*\] [Информация] {FFFFFF}Вы надели бронежилет.")) { SendChat("ss") delLine("\[.*\] [Информация] {FFFFFF}Вы надели бронежилет.") } else if (RegExMatch(out, "\[.*\] [Информация] {FFFFFF}Вы успешно выкинули бронежилет.")) { SendChat("ss") delLine("\[.*\] [Информация] {FFFFFF}Вы успешно выкинули бронежилет.") } return
|
|
|
|
|
Logins007 |
Дата: Четверг, 16.08.2018, 18:49 | Сообщение # 10
|
Новичок
Сообщений: 14
Статус: Offline
|
slavawar, Спасибо помог +rep Добавлено (19.08.2018, 00:53) --------------------------------------------- В общем прошу помощи по соединению 2-х скриптов 1 - так называем сортировщик скриншотов. 2 - чтение чат лога Проблема в том, что работает 1 раз и при повторном выборе чего либо не хочет сохранять скриншот. В чём может быть проблема то?
Код #Persistent #NoEnv #IfWinActive GTA:SA:MP #Include udf.ahk
SetTimer, read, on global SampDirScrennShot := % A_MyDocuments . "\GTA San Andreas User Files\SAMP\screens" ; путь к папке скриншотов samp global MoveDirScheenShot := % A_ScriptDir . "\ScreenShots\" ; путь перемещения скриншотов global NameScreenShot := "MyScreenShot-" ; приставка скриншота global File := % A_MyDocuments . "\GTA San Andreas User Files\SAMP\Chatlog.txt"
:?:/org:: showDialog(2, "Helper","[1]Уволить игрока`n[2]Выдать выговор`n[3]Увольнительный рапорт", "ОК") Result := LineResult() if (!Result) return Gosub, dil%Result% return
dil1: SendChat("/me уволил игрока") addChatMessage("уволил игрока") return
dil2: SendChat("/me выдал выговор") addChatMessage("выдал выговор") return
dil3: SendChat("/me рапорт") addChatMessage("рапорт") return
read: FileRead, out, % File if (RegExMatch(out, "\[.*\] уволил игрока")) { LectioName := "Увал" SetTimer, ScreenTakeMove, On delLine("\[.*\] уволил игрока") }
if (RegExMatch(out, "\[.*\] выдал выговор")) { LectioName := "Выговор" SetTimer, ScreenTakeMove, On delLine("\[.*\] выдал выговор") }
if (RegExMatch(out, "\[.*\] рапорт")) { LectioName := "Рапорт" SetTimer, ScreenTakeMove, On delLine("\[.*\] рапорт") } return
delLine(string) { File := A_MyDocuments "\GTA San Andreas User Files\SAMP\Chatlog.txt" FileRead, All, % File FileOpen(File, "w").Write(RegExReplace(All, "(^|\R)" . string . "|" . string . "(\R|$)")) }
return
ScreenTakeMove: SetTimer, ScreenTakeMove, Off ; отключаем таймер во избежания мульти процессов Send {F8} ; имитирум нажатие клавиши f8 sleep 4000 ; пауза 4сек (4*1000) Line := 0 ; сбос строки с линии чата Loop { GetChatLine(Line, Chat) ; udf функция (считывание строк и чата) я хз вроде была ранше построена на основе чтения файла chatlog.txt рядом с папкой скринов IfInString, Chat, Screenshot Taken ; если в чате есть строка делаем следующее { RegExMatch(Chat, "Screenshot Taken - sa-mp-(?<index>.+).png", screen_) ; берем переменную чила скриншота и сохраняем как %screen_index% FormatTime, now_timecode, %A_Now%, dd.MM-HH.mm.ss ; создаем таймкод скрину с текущей датой на системе IfNotExist, % MoveDirScheenShot . LectioName FileCreateDir, % MoveDirScheenShot . LectioName FileMove, % SampDirScrennShot . "\sa-mp-" . screen_index . ".png", % MoveDirScheenShot . LectioName . "\" . NameScreenShot . now_timecode . ".png", 1 ;перемещаем с ключем 1 (если есть такой файл то с заменой) break ; завершаем цыкл } else Line++ ; добавляем +1 к циклу тоесть новую строку для чтения и поиска } return
LineResult() { if (!isDialogOpen() || getDialogStyle() = 0 || getDialogStyle() = 1 || getDialogStyle() = 3) return false while (isDialogOpen()) continue if(GetKeyState("Esc", "P")) return false return getDialogLineNumber() } return
|
|
|
|