Вопросы по AHK-скриптингу

darksoor

Известный
674
353
Ребят,помогите дополнить сркипт.Нужно туда вписать,дополнить NickName.Скрипт ниже.

Код:
F3::
sleep 500
File=%A_MyDocuments%\GTA San Andreas User Files\CR-MP\GenerationC\chatlog.txt
FileRead,read,%file%
RegExMatch(read, "\E(.*)\Q играет уже \E(.*)\Q минут. Всего за сегодня он играет: \E(.*)\Q минут", atime)
filedelete, %File%
fileappend,, %File%
SendMessage,0x50,,0x4190419,,A
Sendinput,{F6}/a С момента последнего захода: %atime2% минут.Всего за сегодня: %atime3% минут{enter}
return

Пример команды(в чате)
CXUaY.png


Помощники... Прежде чем помогать, вчитывайтесь в текст!

Решение твоей проблемы очень простое. Регулярное выражение в твоём случае выводит три переменные:
Код:
; atime1 - NickName
; atime2 - играет уже (кол-во минут)
; atime3 - наигранно за сегодня минут

Следовательно вставь в свой код переменную atime1:
Код:
F3::
sleep 500
File=%A_MyDocuments%\GTA San Andreas User Files\CR-MP\GenerationC\chatlog.txt
FileRead,read,%file%
RegExMatch(read, "\E(.*)\Q играет уже \E(.*)\Q минут. Всего за сегодня он играет: \E(.*)\Q минут", atime)
filedelete, %File%
fileappend,, %File%
SendMessage,0x50,,0x4190419,,A
Sendinput,{F6}/a %atime1% с момента последнего захода: %atime2% минут.Всего за сегодня: %atime3% минут{enter}
return
 

Petya2282

Новичок
13
1
Спасибо,всё работает,но теперь ещё в чат пишется лишняя информация тапк сказать.А именно точное время когда я написал команду.Можно ли это как-то исправить ?
 

Вложения

  • cr-mp-187.png
    cr-mp-187.png
    9.9 KB · Просмотры: 231

darksoor

Известный
674
353
Ринат, тебе лишь бы ответить? Я не пойму этого...
UPD: Не сразу понял твою мысль, извини за наезд)

Спасибо,всё работает,но теперь ещё в чат пишется лишняя информация тапк сказать.А именно точное время когда я написал команду.Можно ли это как-то исправить ?
Легко.. Всё дело в регулярном выражении. Держи код:
Код:
F3::
sleep 500
File=%A_MyDocuments%\GTA San Andreas User Files\CR-MP\GenerationC\chatlog.txt
FileRead,read,%file%
RegExMatch(read, "\[\d+\:\d+\:\d+\] \E(.*)\Q играет уже \E(\d+)\Q минут. Всего за сегодня он играет: \E(\d+)\Q минут", atime)
filedelete, %File%
fileappend,, %File%
SendMessage,0x50,,0x4190419,,A
Sendinput,{F6}/a %atime1% с момента последнего захода: %atime2% минут. Всего за сегодня: %atime3% минут{enter}
return

И почитай документацию по RegExMatch. Как будешь понимать регулярные выражения, сразу отпадут все вопросы.
Регулярки можно проверять на regex101.

EE481efB
 

Вложения

  • Сохраненное изображение 2018-10-3_21-33-6.972.jpg
    Сохраненное изображение 2018-10-3_21-33-6.972.jpg
    117.6 KB · Просмотры: 174
Последнее редактирование:

Petya2282

Новичок
13
1
Ринат, тебе лишь бы ответить? Я не пойму этого...
UPD: Не сразу понял твою мысль, извини за наезд)


Легко.. Всё дело в регулярном выражении. Держи код:
Код:
F3::
sleep 500
File=%A_MyDocuments%\GTA San Andreas User Files\CR-MP\GenerationC\chatlog.txt
FileRead,read,%file%
RegExMatch(read, "\[\d+\:\d+\:\d+\] \E(.*)\Q играет уже \E(\d+)\Q минут. Всего за сегодня он играет: \E(\d+)\Q минут", atime)
filedelete, %File%
fileappend,, %File%
SendMessage,0x50,,0x4190419,,A
Sendinput,{F6}/a %atime1% с момента последнего захода: %atime2% минут. Всего за сегодня: %atime3% минут{enter}
return

И почитай документацию по RegExMatch. Как будешь понимать регулярные выражения, сразу отпадут все вопросы.
Регулярки можно проверять на regex101.

EE481efB
Спасибо,теперь всё работает)
 
  • Нравится
Реакции: darksoor

Cod

Участник
117
15
Как можно решить проблему?
Когда читаешь чат через память, после окончания скрипта по команде, если нажать энтер, не открыв перед этим чат, скрипт повторяться заново.
 

darksoor

Известный
674
353
Как можно решить проблему?
Когда читаешь чат через память, после окончания скрипта по команде, если нажать энтер, не открыв перед этим чат, скрипт повторяться заново.

Обнуляй переменную:
Код:
getChatLine(0, var)
; code
var := 0

А лучше предоставь код, тебе так быстрее поможем, так как у меня без обнуления все работает хорошо.
 

Cod

Участник
117
15
Обнуляй переменную:
Код:
getChatLine(0, var)
; code
var := 0

А лучше предоставь код, тебе так быстрее поможем, так как у меня без обнуления все работает хорошо.
Ты не так немного понял наверное,
C++:
$~Enter::
if (isInChat() && !isDialogOpen())
  Sleep 200
  dwAddress := dwSAMP + 0x12D8F8
  chatInput := readString(hGTA, dwAddress, 256)
  {
    if(chatInput == "/hello") {
        SendChat("Привет")
   }
}
return
Вот если после выполнения /hello, нажать энтер, "Привет" может отправиться ещё раз, без ввода команды.
 

#Rin

Известный
Всефорумный модератор
1,214
1,036
Ты не так немного понял наверное,
C++:
$~Enter::
if (isInChat() && !isDialogOpen())
  Sleep 200
  dwAddress := dwSAMP + 0x12D8F8
  chatInput := readString(hGTA, dwAddress, 256)
  {
    if(chatInput == "/hello") {
        SendChat("Привет")
   }
}
return
Вот если после выполнения /hello, нажать энтер, "Привет" может отправиться ещё раз, без ввода команды.
Стирай текст по этому адресу после обработки.
 
  • Нравится
Реакции: Cod

bh.cheat

Известный
13
0
Как в строке переместить курсор в нужное место? {Left..} не подходит, т.к. текст разной длины может быть в чате. Нужно в конкретное место поставить курсор крч.
 

Revalto

Известный
532
225
Ты не так немного понял наверное,
C++:
$~Enter::
if (isInChat() && !isDialogOpen())
  Sleep 200
  dwAddress := dwSAMP + 0x12D8F8
  chatInput := readString(hGTA, dwAddress, 256)
  {
    if(chatInput == "/hello") {
        SendChat("Привет")
   }
}
return
Вот если после выполнения /hello, нажать энтер, "Привет" может отправиться ещё раз, без ввода команды.
7E9BSXC.png

Что за фигурные кавычки от переменной?
 

#Rin

Известный
Всефорумный модератор
1,214
1,036
Как в строке переместить курсор в нужное место? {Left..} не подходит, т.к. текст разной длины может быть в чате. Нужно в конкретное место поставить курсор крч.
Вычислять длину динамический.