Тема: SAMP | Как сделать чтение диалога и вывод из него
Как сделать что бы скрипт считывал строчку из чатлога и делал что либо?
Например пишут "Вещайте Министр Здравоохранения" и после этого проигрываеться какой либо бинд
Например та-же гос новость.
Вы не вошли. Пожалуйста, войдите или зарегистрируйтесь.
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Как сделать что бы скрипт считывал строчку из чатлога и делал что либо?
Например пишут "Вещайте Министр Здравоохранения" и после этого проигрываеться какой либо бинд
Например та-же гос новость.
Пользуйтесь поиском.
Вот такой код могу предложить, но нужеш САМП УДФ
#IfWinActive GTA:SA:MP
SendMode Input
#UseHook
#NoEnv
#SingleInstance, force
#Include SAMP.ahk
SetTimer, to, on
file = %A_MyDocuments%\GTA San Andreas User Files\SAMP\chatlog.txt
to:
Fileread, read, %file%
if (RegExMatch(read, "Вещает министр здравохранения"))
{
;code
}
filedelete, %file%
returnylepeta, лучше читать построчно.
Благодарю за кодик ![]()
ylepeta
Само АХК впринципе не запускаеться :С
лучше читать построчно.
qqlexa, "лучше" в плане чего?
MandarinKa02, в данном случае читается весь файл и удаляется файл с логами, что решается построчной проверкой без удаления.
Если построчной проверкой подразумевается использование команды FileReadLine, то готов поспорить, что это не лучше.
решается построчной проверкой без удаления.
Для одноразового использования сойдет, а если скрипт должен в режиме реального времени мониторить сообщения в чате? (путем считывания из файла)
А действительно зачем каждый раз стирать?
Можно же только проверять новые строки.
А как проверить какая новая строка по отношению к старой? Записывать в буфер последнюю строку и (спустя время, когда появятся данные)сравнивать? В таком случае придется перебрать весь считанный файл через loop,parse(или RegEx).
И опять же, а если?
скрипт должен в режиме реального времени мониторить сообщения в чате? (путем считывания из файла)
Файл с логами постепенно будет заполняться строками, будет достигать "бешенных" размеров. И вопрос: зачем каждый раз проходится по файлу и сравнивать одни и те же строки? Это минус производительности.
Считываете файл целиком, регуляркой либо InStr запоминаете позицию последнего совпадения, ищите совпадение, начиная с этой позиции.
При достижении бешенного размера стираете файл.
регуляркой либо InStr запоминаете позицию последнего совпадения, ищите совпадение, начиная с этой позиции.
К этому я и веду свои рассуждения.
Так замерьте скорости, сомневаюсь, что будет ощутимая разница.
Файл считывайте через объект file.
del
Malcev, таки да. Сильно скорость отличаться не будет, т.к. современные машины без проблем "разжуют" парсинг. Но все же, в целях улучшения производительности, настоятельно рекомендую использовать File Object.
P.S. ощутить разницу возможно только при загруженности ПК. Или же заполняем файл рандомными строками на несколько гигабайт и сравниваем. Гадать не придется: в то время, как будет проходить парсинг, FileOpen уже завершит считывание файла и обработает новые строки.
P.P.S. не обращайте на меня внимания. Программирую в сфере серверных технологий, а это дело хрупкое. Важен каждый бит, каждая вычислительная единица. ![]()
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться