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

BLANCHELACHANCE

Новичок
7
0
Привет. Хочу узнать как делать такой скрипт:
В чате появляется строка например "привет", и сразу же чтобы в чат скрипт написал "ку".
Я просто на примере объяснил.
 

Revalto

Известный
532
225
Привет. Хочу узнать как делать такой скрипт:
В чате появляется строка например "привет", и сразу же чтобы в чат скрипт написал "ку".
Я просто на примере объяснил.
Чекаешь чат и отсылаешь сообщение в ответ.
 

Arthur22

Новичок
11
1
Код:
F2::
cl = %A_MyDocuments%\GTA San Andreas User Files\SAMP\chatlog.txt
Loop
{
    FileRead, clog, % cl
    if (RegExMatch(clog, "пишешь тут на что реагировать")) {
  FileDelete, % cl
  ; А тут пишешь нужные тебе действия
    }
    sleep, 1000
}
Return
Привет. Хочу узнать как делать такой скрипт:
В чате появляется строка например "привет", и сразу же чтобы в чат скрипт написал "ку".
Я просто на примере объяснил.
 

Vasyl

Новичок
1
0
Короч тут нарыл на форумнике AHK отыгровки РП рации, ток вот не могу запустить, ошибка выбивает, может в нем чет не правильно, можете помочь?
Код:
$~NumpadEnter::
$~Enter::
{
if (isInChat() && !isDialogOpen())
{
    Sleep 250
    dwAddress := dwSAMP + 0x12D8F8
    chatInput := readString(hGTA, dwAddress, 256)
    if (RegExMatch(chatInput, "^/r\s(.*)", out))
    {
        temp := Trim(out1)
        if (temp == "")
            addChatMessageEx(0xFF8CA6, "Используйте ""/r текст""")
        else
        {
            if (!RegExMatch(temp, "\(\(\s.*\s\)\)"))
                SendChat("/me сказал в рацию """ out1 """")
        }
    }
    else if RegExMatch(chatInput, "^/settag\s(.*)", out)
    {
        IniWrite, %out1%, %A_MyDocuments%\GTA San Andreas User Files\SAMP\setting.ini, Setup, Tag
        addChatMessageEx(0xFF8CA6, "Установлен новый тэг: " out1)
    }
}
return
 

Revalto

Известный
532
225
Короч тут нарыл на форумнике AHK отыгровки РП рации, ток вот не могу запустить, ошибка выбивает, может в нем чет не правильно, можете помочь?
Код:
$~NumpadEnter::
$~Enter::
{
if (isInChat() && !isDialogOpen())
{
    Sleep 250
    dwAddress := dwSAMP + 0x12D8F8
    chatInput := readString(hGTA, dwAddress, 256)
    if (RegExMatch(chatInput, "^/r\s(.*)", out))
    {
        temp := Trim(out1)
        if (temp == "")
            addChatMessageEx(0xFF8CA6, "Используйте ""/r текст""")
        else
        {
            if (!RegExMatch(temp, "\(\(\s.*\s\)\)"))
                SendChat("/me сказал в рацию """ out1 """")
        }
    }
    else if RegExMatch(chatInput, "^/settag\s(.*)", out)
    {
        IniWrite, %out1%, %A_MyDocuments%\GTA San Andreas User Files\SAMP\setting.ini, Setup, Tag
        addChatMessageEx(0xFF8CA6, "Установлен новый тэг: " out1)
    }
}
return
1. Ты не закрыл фигурную скобку которая Enter и вообще она там даже не нужна...
2. Подключи UDF
 

T1cKz

Известный
596
246
Можно ли использовать инклуд SAMPUDF в мта?
По сути, адреса-то должны использоваться одни и те же(Сингла)? Если это процесс игры один и тот же?
Например получить координаты или ещё что-то?
 

Di3

Участник
432
20
Если ты про sendinput
Можно, в конце {left кол-во символов назад} вроде бы.
Ринат) Перепиши Диалоги на ахк,чтоб не крашились

Код:
showDialog(style, caption, text, button1, button2 := "", id := 1) {
    style += 0
    style := Floor(style)
    id += 0
    id := Floor(id)
    caption := "" caption
    text := "" text
    button1 := "" button1
    button2 := "" button2
ErrorLevel := ERROR_READ_MEMORY
    if (id < 0 || id > 32767 || style < 0 || style > 5 || StrLen(caption) > 64 || StrLen(text) > 4096 || StrLen(button1) > 10 || StrLen(button2) > 10)
        return false

    if (!checkHandles())
        return false

    dwFunc := dwSAMP + FUNC_SAMP_SHOWDIALOG
    sleep 200
    dwAddress := readDWORD(hGTA, dwSAMP + SAMP_DIALOG_STRUCT_PTR)
    if (ErrorLevel || !dwAddress) {
        return false
    }

    writeString(hGTA, pParam5, caption)
    if (ErrorLevel)
        return false
    writeString(hGTA, pParam1, text)
    if (ErrorLevel)
        return false
    writeString(hGTA, pParam5 + 512, button1)
    if (ErrorLevel)
        return false
    writeString(hGTA, pParam5+StrLen(caption) + 1, button2)
    if (ErrorLevel)
        return false

    ;mov + 7 * push + call + retn
    dwLen := 5 + 7 * 5 + 5 + 1
    VarSetCapacity(injectData, dwLen, 0)

    NumPut(0xB9, injectData, 0, "UChar")                            ;0 + 1    ;mov ecx
    NumPut(dwAddress, injectData, 1, "UInt")                        ;1 + 4
    NumPut(0x68, injectData, 5, "UChar")                            ;5 + 1    ;push send
    NumPut(1, injectData, 6, "UInt")                                ;6 + 4
    NumPut(0x68, injectData, 10, "UChar")                            ;10 + 1    ;push button2
    NumPut(pParam5 + StrLen(caption) + 1, injectData, 11, "UInt")    ;11 + 4
    NumPut(0x68, injectData, 15, "UChar")                            ;15 + 1    ;push button1
    NumPut(pParam5 + 512, injectData, 16, "UInt")                    ;16 + 4
    NumPut(0x68, injectData, 20, "UChar")                            ;20 + 1    ;push text
    NumPut(pParam1, injectData, 21, "UInt")                            ;21 + 4
    NumPut(0x68, injectData, 25, "UChar")                            ;25 + 1    ;push caption
    NumPut(pParam5, injectData, 26, "UInt")                            ;26 + 4
    NumPut(0x68, injectData, 30, "UChar")                            ;30 + 1    ;push style
    NumPut(style, injectData, 31, "UInt")                            ;31 + 4
    NumPut(0x68, injectData, 35, "UChar")                            ;35 + 1    ;push id
    NumPut(id, injectData, 36, "UInt")                                ;36 + 4

    NumPut(0xE8, injectData, 40, "UChar")                            ;40 + 1 ;call
    offset := dwFunc - (pInjectFunc + 45)
    NumPut(offset, injectData, 41, "Int")                            ;41 + 4
    NumPut(0xC3, injectData, 45, "UChar")                            ;45 + 1    ;retn

    writeRaw(hGTA, pInjectFunc, &injectData, dwLen)
    if (ErrorLevel)
        return false
    hThread := createRemoteThread(hGTA, 0, 0, pInjectFunc, 0, 0, 0)
    if (ErrorLevel)
        return false

    waitForSingleObject(hThread, 0xFFFFFFFF)
        return false

    return true
}
 

#Rin

Известный
Всефорумный модератор
1,214
1,036
Можно ли использовать инклуд SAMPUDF в мта?
По сути, адреса-то должны использоваться одни и те же(Сингла)? Если это процесс игры один и тот же?
Например получить координаты или ещё что-то?
Только те что используют адреса сингла, и то не факт что все будут работать, MTA может мутировать код.
Ринат) Перепиши Диалоги на ахк,чтоб не крашились

Код:
showDialog(style, caption, text, button1, button2 := "", id := 1) {
    style += 0
    style := Floor(style)
    id += 0
    id := Floor(id)
    caption := "" caption
    text := "" text
    button1 := "" button1
    button2 := "" button2
ErrorLevel := ERROR_READ_MEMORY
    if (id < 0 || id > 32767 || style < 0 || style > 5 || StrLen(caption) > 64 || StrLen(text) > 4096 || StrLen(button1) > 10 || StrLen(button2) > 10)
        return false

    if (!checkHandles())
        return false

    dwFunc := dwSAMP + FUNC_SAMP_SHOWDIALOG
    sleep 200
    dwAddress := readDWORD(hGTA, dwSAMP + SAMP_DIALOG_STRUCT_PTR)
    if (ErrorLevel || !dwAddress) {
        return false
    }

    writeString(hGTA, pParam5, caption)
    if (ErrorLevel)
        return false
    writeString(hGTA, pParam1, text)
    if (ErrorLevel)
        return false
    writeString(hGTA, pParam5 + 512, button1)
    if (ErrorLevel)
        return false
    writeString(hGTA, pParam5+StrLen(caption) + 1, button2)
    if (ErrorLevel)
        return false

    ;mov + 7 * push + call + retn
    dwLen := 5 + 7 * 5 + 5 + 1
    VarSetCapacity(injectData, dwLen, 0)

    NumPut(0xB9, injectData, 0, "UChar")                            ;0 + 1    ;mov ecx
    NumPut(dwAddress, injectData, 1, "UInt")                        ;1 + 4
    NumPut(0x68, injectData, 5, "UChar")                            ;5 + 1    ;push send
    NumPut(1, injectData, 6, "UInt")                                ;6 + 4
    NumPut(0x68, injectData, 10, "UChar")                            ;10 + 1    ;push button2
    NumPut(pParam5 + StrLen(caption) + 1, injectData, 11, "UInt")    ;11 + 4
    NumPut(0x68, injectData, 15, "UChar")                            ;15 + 1    ;push button1
    NumPut(pParam5 + 512, injectData, 16, "UInt")                    ;16 + 4
    NumPut(0x68, injectData, 20, "UChar")                            ;20 + 1    ;push text
    NumPut(pParam1, injectData, 21, "UInt")                            ;21 + 4
    NumPut(0x68, injectData, 25, "UChar")                            ;25 + 1    ;push caption
    NumPut(pParam5, injectData, 26, "UInt")                            ;26 + 4
    NumPut(0x68, injectData, 30, "UChar")                            ;30 + 1    ;push style
    NumPut(style, injectData, 31, "UInt")                            ;31 + 4
    NumPut(0x68, injectData, 35, "UChar")                            ;35 + 1    ;push id
    NumPut(id, injectData, 36, "UInt")                                ;36 + 4

    NumPut(0xE8, injectData, 40, "UChar")                            ;40 + 1 ;call
    offset := dwFunc - (pInjectFunc + 45)
    NumPut(offset, injectData, 41, "Int")                            ;41 + 4
    NumPut(0xC3, injectData, 45, "UChar")                            ;45 + 1    ;retn

    writeRaw(hGTA, pInjectFunc, &injectData, dwLen)
    if (ErrorLevel)
        return false
    hThread := createRemoteThread(hGTA, 0, 0, pInjectFunc, 0, 0, 0)
    if (ErrorLevel)
        return false

    waitForSingleObject(hThread, 0xFFFFFFFF)
        return false

    return true
}
Что бы не крашило, ахк код должен исполняться в процессе gta_sa.exe, а функции сампа вызываться напрямую.
 

Ashynja

Новичок
11
0
Решил создать АХК что бы при нажатии F1 выскакивало окошко со всеми командами моего АХК.
Код:

Код:
#IfWinActive GTA:SA:MP
SendMode Input
#UseHook
#NoEnv
#SingleInstance, force


F1::
; showDialog(Стиль, Заголовок, Содержание, Кнопка 1, Кнопка 2)
showDialog  (0) ,"Все команды АХК", "1. /лечение - ппредложение таблетки" `n{#0000ff} 2. /рп - 10 РПшек.

Но выдает такую ошибку
upload_2018-7-15_12-27-39.png
 

Revalto

Известный
532
225
Потому что не через getChatLineEx?
Нет, использование loop уже плохой пример. А приравнивать каждый раз при нажатии клавиши в переменную путь до чат лога, тоже бред...
Решил создать АХК что бы при нажатии F1 выскакивало окошко со всеми командами моего АХК.
Код:

Код:
#IfWinActive GTA:SA:MP
SendMode Input
#UseHook
#NoEnv
#SingleInstance, force


F1::
; showDialog(Стиль, Заголовок, Содержание, Кнопка 1, Кнопка 2)
showDialog  (0) ,"Все команды АХК", "1. /лечение - ппредложение таблетки" `n{#0000ff} 2. /рп - 10 РПшек.

Но выдает такую ошибку
Посмотреть вложение 16121
Скобки закрой и ковычки..
Код:
ShowDialog(0, "Все команды АХК", "1. /лечение - ппредложение таблетки`n{#0000ff} 2. /рп - 10 РПшек.", "X")
 

XpeHoc

Новичок
1
0
Как сделать AHK скрипт так, что бы после его запуска горячей клавишей биндер ввёл часть текста и остановился до тех пор пока я не нажму определённую клавишу, что бы продолжить его. К примеру: Я спросил у человека как его имя после этого должна пойти пауза скрипта ( пока я не нажму горячую клавишу для продолжения скрипта после того как человек скажет своё имя ). Когда он сказал своё имя - я нажимаю на горячую клавишу - биндер продолжается и я начинаю оформлять документы на этого человека. Вот пример

!1::
{
SendMessage, 0x50,, 0x4190419,, A
Sleep 800 ;
Send, {F6}/me достав из кармана пиджака ручку и бланк, принялся его заполнять{enter}
Sleep 1000 ;
Send, {F6}Скажите ваше имя и фамилию.{enter}

ЧТО ДОЛЖНО БЫТЬ ЗДЕСЬ?

Sleep 800 ;
Send, {F6}/me написал имя клиента{enter}
Sleep 1000 ;
Send, {F6}/me написал наименование лицензии{enter}
Sleep 1000 ;
Send, {F6}/me поставив роспись, передал бланк и ручку покупателю{enter}
Sleep 1000 ;
Send, {F6}Распишитесь, если все указано верно.{enter}
Sleep 1000 ;
Send, {F6}/n /me расписался{enter}
Return
 

BLANCHELACHANCE

Новичок
7
0
Привет. Мне хотел сделать скрипт который будет искать в чате слова после которых выполняет какое то действие. Но выбивает ошибку когда хочу запустить скрипт.
Код скрипта
AutoHotKey:
!1::
active := !active
SetTimer, Start, % (active ? 0 : "Off")

Start:
if (RegExMatch(getChatLineEx(), "\w+\sты\sпоймал\s\w+", var)) {
    SendInput, {F8}
}
return
Ошибка
Безымянный.png