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

CaJlaT

Овощ
Модератор
2,806
2,609
Для чего нужен RegEx? Он как RegExMatch?
RegExMatch
RegEx
Хочу вывести в AddChatMessage текст который я введу в диалог.
т.е выводится диалог с типом Input (как с паролями) и когда игрок нажмёт на Enter, то выводится введённый текст? если да, то ща скину
 
  • Нравится
Реакции: NHacker1271

Tiva

Известный
76
1

NHacker1271

Известный
156
16
RegExMatch
RegEx

т.е выводится диалог с типом Input (как с паролями) и когда игрок нажмёт на Enter, то выводится введённый текст? если да, то ща скину
Да, ты правильно меня понял.
А можно по примеру? я по нему разберусь.
допустим вот чат лог
AutoHotKey:
[18:55:22] Состояние ГС: 130/148
Мне нужно чтобы писал в /r Состояние склада (тут первое значение) на (второе
AutoHotKey:
if (RegExMatch(getChatLineEx(), "Состояние ГС: (\d+)\/(\d+)", out)) {
    SendChat("/r Состояние склада: " out1 "/" out2)
}
 

NOOBPAndA

Участник
101
12
Пацаны, как сделать вывод введённого текста?
AutoHotKey:
#SingleInstance, Force
#include samp.ahk
~$Enter::
if (isDialogOpen() && getDialogCaption() == "Заголовок") {
    ; Тут бы вывести значение введённого текста..
}
return
!1::
showDialog(1, "Заголовок", "Текст", "Закрыть!")
return

AutoHotKey:
LineResult() {

if (!isDialogOpen() || getDialogStyle() = 0 || getDialogStyle() = 1 || getDialogStyle() = 3)

return false

while (isDialogOpen())

continue

if(GetKeyState("Esc", "P"))

return false

return getDialogLineNumber()

}



:?:/cmd::

showDialog(1, "Заголовок", "Текст", "Закрыть!")

line := LineResult()

if (!line)

retern

if line = "1"

{

addChatMessage("Значение Текста")

}

return

Ты это имел введу?
 

CaJlaT

Овощ
Модератор
2,806
2,609
А можно по примеру? я по нему разберусь.
допустим вот чат лог
AutoHotKey:
[18:55:22] Состояние ГС: 130/148
Мне нужно чтобы писал в /r Состояние склада (тут первое значение) на (второе

AutoHotKey:
#NoEnv
SendMode Input
#SingleInstance force
#Include SAMP.ahk
#IfWinActive GTA:SA:MP

cl = %A_MyDocuments%\GTA San Andreas User Files\SAMP\chatlog.txt ; путь к чат логу

SetTimer, ch ,20 ; каждые 20 мс обновляет метку ch (чтение чат лога)

ch:
{
    FileRead, chatlog, % cl ; чтение чат-лога
    if (RegExMatch(chatlog, "Состояние ГС\:\s(\d{1,3})/148", string)) ; пропускает через \d (любое число), с ограничением {1,3} - от 1 до 3 чисел
    {
        if (string1 == 148) ; если на складе 148/148
        {
            FileDelete, % cl ; удаляется лог, чтобы не активировалось повторно много раз (чтобы не флудило)
            SendChat("/r Главный склад полный!")
            return
        }
        if (string1 <= 147) ; если на складе меньше чем 148
        {
            FileDelete, % cl ; удаляется лог, чтобы не активировалось повторно много раз (чтобы не флудило)
            SendChat("/r состояние главного склада: " string1 "/148)
            return
        }
    }
}
 

NHacker1271

Известный
156
16
AutoHotKey:
LineResult() {

if (!isDialogOpen() || getDialogStyle() = 0 || getDialogStyle() = 1 || getDialogStyle() = 3)

return false

while (isDialogOpen())

continue

if(GetKeyState("Esc", "P"))

return false

return getDialogLineNumber()

}



:?:/cmd::

showDialog(1, "Заголовок", "Текст", "Закрыть!")

line := LineResult()

if (!line)

retern

if line = "1"

{

addChatMessage("Значение Текста")

}

return

Ты это имел введу?
Нет. Он не выводит введённый мною текст.
 

CaJlaT

Овощ
Модератор
2,806
2,609
AutoHotKey:
LineResult() {

if (!isDialogOpen() || getDialogStyle() = 0 || getDialogStyle() = 1 || getDialogStyle() = 3)

return false

while (isDialogOpen())

continue

if(GetKeyState("Esc", "P"))

return false

return getDialogLineNumber()

}



:?:/cmd::

showDialog(1, "Заголовок", "Текст", "Закрыть!")

line := LineResult()

if (!line)

retern

if line = "1"

{

addChatMessage("Значение Текста")

}

return

Ты это имел введу?
это не то, это вывод номера выбранной строки, а ему нужен введённый текст
Нет. Он не выводит введённый мною текст.
лови, меняй под себя

AutoHotKey:
Showdialog("1", "{800080}[AHK] {F5A823}Dialog:", "{F5A823}В{66CDAA}ведите текст для его вывода в чат", "Ввод")
while (isDialogOpen())
{
    if (GetKeyState("Escape", "P") or (isDialogButtonSelected(2) = true and GetKeyState("LButton", "P")))
    {
        Gosub, metka
        return
    }
}
inputText := readString(hGTA, dwSAMP + 0x12D8F8, 256)
Gosub, metka
Return
metka:
{
    addChatMessage("{800080}[AHK] {66CDAA}Text: " inputText "")
    return
}
{
Должно работать, если нет, то я рукожоп(я рукожоп кста)
 

NOOBPAndA

Участник
101
12
Нет. Он не выводит введённый мною текст.
это не то, это вывод номера выбранной строки, а ему нужен введённый текст

лови, меняй под себя

AutoHotKey:
Showdialog("1", "{800080}[AHK] {F5A823}Dialog:", "{F5A823}В{66CDAA}ведите текст для его вывода в чат", "Ввод")
while (isDialogOpen())
{
    if (GetKeyState("Escape", "P") or (isDialogButtonSelected(2) = true and GetKeyState("LButton", "P")))
    {
        Gosub, metka
        return
    }
}
inputText := readString(hGTA, dwSAMP + 0x12D8F8, 256)
Gosub, metka
Return
metka:
{
    addChatMessage("{800080}[AHK] {66CDAA}Text: " inputText "")
    return
}
{
Должно работать, если нет, то я рукожоп(я рукожоп кста)
Если не рабит попробуй это

AutoHotKey:
F1::

{

ShowDialog("1", "Заголовок", "Текст", "Ok")

while (!GetKeyState("Enter", "P") && !GetKeyState("Esc", "P"))

continue

if (GetKeyState("Enter", "P")) {

sleep 200

txt := readString(hGTA, dwSAMP + 0x12D8F8, 256)

}

AddChatMessage("Ты ввел "txt)

return
 

Tiva

Известный
76
1
AutoHotKey:
#NoEnv
SendMode Input
#SingleInstance force
#Include SAMP.ahk
#IfWinActive GTA:SA:MP

cl = %A_MyDocuments%\GTA San Andreas User Files\SAMP\chatlog.txt ; путь к чат логу

SetTimer, ch ,20 ; каждые 20 мс обновляет метку ch (чтение чат лога)

ch:
{
    FileRead, chatlog, % cl ; чтение чат-лога
    if (RegExMatch(chatlog, "Состояние ГС\:\s(\d{1,3})/148", string)) ; пропускает через \d (любое число), с ограничением {1,3} - от 1 до 3 чисел
    {
        if (string1 == 148) ; если на складе 148/148
        {
            FileDelete, % cl ; удаляется лог, чтобы не активировалось повторно много раз (чтобы не флудило)
            SendChat("/r Главный склад полный!")
            return
        }
        if (string1 <= 147) ; если на складе меньше чем 148
        {
            FileDelete, % cl ; удаляется лог, чтобы не активировалось повторно много раз (чтобы не флудило)
            SendChat("/r состояние главного склада: " string1 "/148)
            return
        }
    }
}
Спасибо, даже больше чем я просил, лайк)
 

NHacker1271

Известный
156
16
Если не рабит попробуй это

AutoHotKey:
F1::

{

ShowDialog("1", "Заголовок", "Текст", "Ok")

while (!GetKeyState("Enter", "P") && !GetKeyState("Esc", "P"))

continue

if (GetKeyState("Enter", "P")) {

sleep 200

txt := readString(hGTA, dwSAMP + 0x12D8F8, 256)

}

AddChatMessage("Ты ввел "txt)

return
Выводит, но есть одно но: Я ввожу: qwe, а мне в чат пишет: Вы ввели - 'qw'.
 

Tiva

Известный
76
1
Код:
loop
{
lastline := GetNewLine(ChatLog)
RegExMatch(var, "\Q[\E(.*):(.*):(.*)\Q]\E (.*)Используйте(.*)/eating(.*)")
If expression != GetNewLine(ChatLog)
{
   SendChat("/eating")
}
}
Помогите, когда открыт диалог идёт флуд в чат