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

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

class ChatLog
{
	__New(cl_dir)
	{
		this.chatlog_dir 		:= cl_dir
		FileGetSize, fileSize, % cl_dir
		this.chatlog_LastSize	:= fileSize
	}

	getNewLines()
	{
		chatlog_arrayLines := []

		FileGetSize, fileSize, % this.chatlog_dir
		chatlog_NowSize := fileSize

		if (chatlog_NowSize = this.chatlog_LastSize)
			return chatlog_arrayLines

		if (chatlog_NowSize < this.chatlog_LastSize)
		{
			this.chatlog_LastSize := chatlog_NowSize
			return chatlog_arrayLines
		}

		chatlog_file := FileOpen(this.chatlog_dir, "r")
		chatlog_file.Seek(this.chatlog_LastSize)
		chatlog_NewText := chatlog_file.Read()
		chatlog_file.Close()

		Loop, Parse, % chatlog_NewText, % "`n`r"
			if (A_LoopField != "")
				chatlog_arrayLines.Push(A_LoopField)

		this.chatlog_LastSize := chatlog_NowSize
		return chatlog_arrayLines
	}
}
Мое вк: https://vk.com/perbuy_czar

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

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

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

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


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