копирка Topic is solved

Помощь в написании скриптов
Vladik2304
Posts: 24
Joined: 20 Jan 2022, 15:58

копирка

Post by Vladik2304 » 22 Jan 2022, 16:03

-----
Last edited by Vladik2304 on 23 Jan 2022, 17:53, edited 1 time in total.

Vladik2304
Posts: 24
Joined: 20 Jan 2022, 15:58

Re: копирка

Post by Vladik2304 » 22 Jan 2022, 16:07

Я немного отредактировал просьбу о помощи @mcl

mcl
Posts: 355
Joined: 04 May 2018, 16:35

Re: копирка

Post by mcl » 22 Jan 2022, 16:46

Vladik2304 wrote: Мне надо чтобы код копировал id игрока которому даётся ответ(в примере это id 25) и ответ администратора и выводил мне в чат
Насколько я понял из предыдущих вопросов, вы для этой цели читаете файл с чат-логом − хотелось бы увидеть несколько строк из него (судя по регулярке, в начале строк там ещё будут метки времени).
И, если не трудно, для вашего примера − полную команду ответа, которую нужно набрать.
github://oGDIp - GDI+ wrapper for AHK v1.1

Vladik2304
Posts: 24
Joined: 20 Jan 2022, 15:58

Re: копирка

Post by Vladik2304 » 22 Jan 2022, 17:56

------
Last edited by Vladik2304 on 23 Jan 2022, 17:53, edited 1 time in total.

mcl
Posts: 355
Joined: 04 May 2018, 16:35

Re: копирка

Post by mcl » 23 Jan 2022, 00:33

Vladik2304 wrote: И мне надо скопировать id(в данном случае 25) и ответ админа(в данном случае слежу | Приятной Вам игры)
Кажется, должно работать. По Alt+2 читается чат-лог, и копии всех сообщений администраторов отправляются от вашего имени.

Code: Select all

!2::
	chatlogfile = %A_MyDocuments%\RADMIR CRMP User Files\SAMP\chatlog.txt
	FileRead, chattext, *P65001 %chatlogfile%  ; 65001 - кодировка UTF-8

	; Проходимся по каждой строке чат-лога
	Loop, Parse, chattext, `n, `r
	{
		; Если сообщение не от администратора - пропускаем
		If (InStr(A_LoopField, "Администратор") != 12)
			Continue
		
		; Соответствие шаблону:    [ Время ] Администратор (username) [userid] для (username) [userid]   : Текст
		RegexMatch(A_LoopField, "^\[[\d:]+\] Администратор ([^\[\]]+)\[(\d+)\] для ([^\[\]]+)\[(\d+)\]\s*: (.+?)$"
		, chatmatch)
		
		; Если строка не соответствовала шаблону - пропускаем её
		If (chatmatch1 == "")
			Continue
		
		; Теперь переменные chatmatch содержат:
		; chatmatch1 - имя написавшего админа
		; chatmatch2 - id  написавшего админа
		; chatmatch3 - имя игрока-адресата
		; chatmatch4 - id  игрока-адресата
		; chatmatch5 - текст сообщения
		
		; Если вы администратор - впишите здесь свой id, или сделайте схожую проверку на имя,
		; иначе скрипт станет копировать ваши же ответы и уйдёт в бесконечный цикл.
		If (chatmatch2 == 9999)
			Continue
		
		SendMessage, 0x50,, 0x4190419,, A
		SendInput, {F6}
		SendText, /t %chatmatch4% %chatmatch5%
		SendInput, {Enter}
	}
	
	; Удаляем файл с чат-логом, чтобы в следующий раз получить только свежие сообщения
	FileDelete, %chatlogfile%
	Return
github://oGDIp - GDI+ wrapper for AHK v1.1

Vladik2304
Posts: 24
Joined: 20 Jan 2022, 15:58

Re: копирка

Post by Vladik2304 » 23 Jan 2022, 07:04

@mcl
Код не работает. При нажатии на Alt+2 абсолютно ничего не выводит и не отображается. Я пытался разобраться, но эффекта 0, помогите, пожалуйста

Vladik2304
Posts: 24
Joined: 20 Jan 2022, 15:58

Re: копирка

Post by Vladik2304 » 23 Jan 2022, 07:28

Чат лог он читает и удаляет, но не более
@mcl

mcl
Posts: 355
Joined: 04 May 2018, 16:35

Re: копирка  Topic is solved

Post by mcl » 23 Jan 2022, 15:08

Возможно, моё предположение о кодировке файла чат-лога было неверным − из-за этого все русские буквы скрипт видит как кракозябры и слово «Администратор» не находит.
Попробуйте удалить в третьей строке *P65001.
Другое решение − убрать проверку в строках 9−10 и переписать регулярное выражение в 13-й строке без русских букв:

Code: Select all

	...
	Loop, Parse, chattext, `n, `r
	{
		; Соответствие шаблону:    [ Время ] Администратор (username) [userid] для (username) [userid]   : Текст
		RegexMatch(A_LoopField, "^\[[\d:]+\] .+? ([^\[\]]+)\[(\d+)\] .+? ([^\[\]]+)\[(\d+)\]\s*: (.+?)$", chatmatch)
		
	...
github://oGDIp - GDI+ wrapper for AHK v1.1

Post Reply

Return to “Помощь”