1

Тема: SAMP | Как сделать чтение диалога и вывод из него

Как сделать что бы скрипт считывал строчку из чатлога и делал что либо?
Например пишут "Вещайте Министр Здравоохранения" и после этого проигрываеться какой либо бинд
Например та-же гос новость.

2

Re: SAMP | Как сделать чтение диалога и вывод из него

Пользуйтесь поиском.

3

Re: SAMP | Как сделать чтение диалога и вывод из него

Вот такой код могу предложить, но нужеш САМП УДФ

#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%
return

4 (изменено: qqlexa, 2018-08-21 13:33:35)

Re: SAMP | Как сделать чтение диалога и вывод из него

ylepeta,  лучше читать построчно.

5

Re: SAMP | Как сделать чтение диалога и вывод из него

Благодарю за кодик

6

Re: SAMP | Как сделать чтение диалога и вывод из него

ylepeta
Само АХК впринципе не запускаеться :С

7 (изменено: MandarinKa02, 2018-08-22 01:51:27)

Re: SAMP | Как сделать чтение диалога и вывод из него

qqlexa пишет:

лучше читать построчно.

qqlexa, "лучше" в плане чего?

8

Re: SAMP | Как сделать чтение диалога и вывод из него

MandarinKa02, в данном случае читается весь файл и удаляется файл с логами, что решается построчной проверкой без удаления.

9

Re: SAMP | Как сделать чтение диалога и вывод из него

Если построчной проверкой подразумевается использование команды FileReadLine, то готов поспорить, что это не лучше.

qqlexa пишет:

решается построчной проверкой без удаления.

Для одноразового использования сойдет, а если скрипт должен в режиме реального времени мониторить сообщения в чате? (путем считывания из файла)

10

Re: SAMP | Как сделать чтение диалога и вывод из него

А действительно зачем каждый раз стирать?
Можно же только проверять новые строки.

11 (изменено: MandarinKa02, 2018-08-22 18:21:14)

Re: SAMP | Как сделать чтение диалога и вывод из него

А как проверить какая новая строка по отношению к старой? Записывать в буфер последнюю строку и (спустя время, когда появятся данные)сравнивать? В таком случае придется перебрать весь считанный файл через loop,parse(или RegEx).
И опять же, а если?

скрипт должен в режиме реального времени мониторить сообщения в чате? (путем считывания из файла)

Файл с логами постепенно будет заполняться строками, будет достигать "бешенных" размеров. И вопрос: зачем каждый раз проходится по файлу и сравнивать одни и те же строки? Это минус производительности.

12 (изменено: Malcev, 2018-08-22 18:34:42)

Re: SAMP | Как сделать чтение диалога и вывод из него

Считываете файл целиком, регуляркой либо InStr запоминаете позицию последнего совпадения, ищите совпадение, начиная с этой позиции.
При достижении бешенного размера стираете файл.

13

Re: SAMP | Как сделать чтение диалога и вывод из него

Malcev пишет:

регуляркой либо InStr запоминаете позицию последнего совпадения, ищите совпадение, начиная с этой позиции.

К этому я и веду свои рассуждения.

14

Re: SAMP | Как сделать чтение диалога и вывод из него

Так замерьте скорости, сомневаюсь, что будет ощутимая разница.
Файл считывайте через объект file.

15 (изменено: Phoenixxx_Czar, 2019-07-08 01:32:25)

Re: SAMP | Как сделать чтение диалога и вывод из него

del

Win10: LTSC (21H2); AHK: ANSI (v1.1.36.02)

16 (изменено: MandarinKa02, 2018-08-23 01:30:03)

Re: SAMP | Как сделать чтение диалога и вывод из него

Malcev, таки да. Сильно скорость отличаться не будет, т.к. современные машины без проблем "разжуют" парсинг. Но все же, в целях улучшения производительности, настоятельно рекомендую использовать File Object.

P.S. ощутить разницу возможно только при загруженности ПК. Или же заполняем файл рандомными строками на несколько гигабайт и сравниваем. Гадать не придется: в то время, как будет проходить парсинг, FileOpen уже завершит считывание файла и обработает новые строки.


P.P.S. не обращайте на меня внимания. Программирую в сфере серверных технологий, а это дело хрупкое. Важен каждый бит, каждая вычислительная единица.