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

Hatiko

Известный
Проверенный
1,512
627
Уж извиняюсь, что часто обращаюсь, но так такого, что я не в совершенстве знаю ahk. В чём суть вопроса: в UDF.ahk нашёл опкод isDialogButtonSelected(Button id) , но не совсем понял как его использовать, много раз пробовал, но ничего особо не работало. Помогите, пожалуйста, на данном примере так, чтобы при нажатии на "Ок" отправлялось одно сообщение, а при "отмена" отправлялось другое сообщение:
!1::
showDialog("0", "Шапка диалога", "Текст диалога", "Ок", "Отмена")
return

И ещё, подскажите, как создавать окно с кодом на форуме, да бы не писать как я выше.
 

asdzxcjqwe

¯\_(ツ)_/¯
Друг
621
709
функцию, а не опкод

как создавать окно с кодом на форуме
теги code

чтобы при нажатии на "Ок" отправлялось одно сообщение, а при "отмена" отправлялось другое сообщение
Примеры использования уже были, один из примеров: (использовать samp-udf последней версии)
PHP:
$~LButton::
$~Enter::
    if(!isDialogOpen())
        return
    if(GetKeyState("LButton", "P"))
    {
        Sleep, isDialogButtonSelected(1) ? 150 : 50
        if(isDialogOpen() || isDialogButtonSelected(2))
            return
    }
    title := getDialogCaption()
    index := getDialogIndex()
    id := getDialogId()
    if(title == "Первое меню") ; либо title, либо id, на своё усмотрение
    {
        SCM(CWHITE, "Выбран " index " пункт")
    }
    else if(title == "Второе меню")
    {
        cmenu%index% := !cmenu%index%
        if(!GetKeyState("LButton", "P"))
            Sleep, 150
        showDialog(4, "Второе меню", "Godmode`t" (cmenu1 ? enb : dis) "" nl "Carshot`t" (cmenu2 ? enb : dis) "" nl "Airbrake`t" (cmenu3 ? enb : dis), "Выбрать", "Закрыть")
    }
return

^1::
    showDialog(2, "Первое меню", "Пункт 1`nПункт 2`nПункт 3`nПункт 4`nПункт 5`nПункт 6`nПункт 7`nПункт 8`nПункт 9", "Выбрать", "Закрыть")
return

^2::
    enb := "{00FF00}Enabled", dis := "{FF0000}Disabled", nl := "`n{FFFFFF}"
    showDialog(4, "Второе меню", "Godmode`t" (cmenu1 ? enb : dis) "" nl "Carshot`t" (cmenu2 ? enb : dis) "" nl "Airbrake`t" (cmenu3 ? enb : dis), "Выбрать", "Закрыть")
return
 

denzwdw[fwfa

Новичок
53
4
не работает простая команда.Подскажите в чем проблема?
Код:
if chatInput contains /rn
    {
        RegExMatch(chatInput, "i)^/rn (.*)", p)
        if p =
        {
        addChatMessage("{ADFF2F}[AHK] Введите /rn [Текст]")
            return
        }
        sendChatMessage("/r (( "    p1    " ))")
    }
    if chatInput contains /fn
    {
        RegExMatch(chatInput, "i)^/fn (.*)", p)
        if p =
        {
        addChatMessage("{ADFF2F}[AHK] Введите /fn [Текст]")
            return
        }
        sendChatMessage("/f (( "    p1    " ))")
    }
 

RTD

Потужно
Модератор
399
470
не работает простая команда.Подскажите в чем проблема?
Код:
if chatInput contains /rn
    {
        RegExMatch(chatInput, "i)^/rn (.*)", p)
        if p =
        {
        addChatMessage("{ADFF2F}[AHK] Введите /rn [Текст]")
            return
        }
        sendChatMessage("/r (( "    p1    " ))")
    }
    if chatInput contains /fn
    {
        RegExMatch(chatInput, "i)^/fn (.*)", p)
        if p =
        {
        addChatMessage("{ADFF2F}[AHK] Введите /fn [Текст]")
            return
        }
        sendChatMessage("/f (( "    p1    " ))")
    }
Код:
$~vkD::
if (IsInChat() && !IsDialogOpen()) {
    Sleep, 200
    chatInput := readString(hGTA, dwSAMP + 0x12D8F8, 256)
    if (RegExMatch(chatInput, "^\/(r|f)n\s(.*)$", value) {
        SendChat("/" value1 " " value2)
    }
}
return
UDF - http://rebres.ru/AutoHotKey/SAMP-UDF-Developer.ahk
Кодировка АХК - Ansi-32bit
 

denzwdw[fwfa

Новичок
53
4
90f86739ac37.png

Код:
$~vkD::
if (IsInChat() && !IsDialogOpen()) {
    Sleep, 200
    chatInput := readString(hGTA, dwSAMP + 0x12D8F8, 256)
    if (RegExMatch(chatInput, "^\/(r|f)n\s(.*)$", value) {
        SendChat("/" value1 " " value2)
    }
}
return
UDF - http://rebres.ru/AutoHotKey/SAMP-UDF-Developer.ahk
Кодировка АХК - Ansi-32bit
 

dmitri4

Известный
452
78
Буду краток, есть ahk:
Код:
~RButton & vk52::
rankid:=getIdByPed(getTargetPed())
if rankid < 0 
{ 
targcheck=1 
Sleep, 300 
ShowDialog("1", "ID персонажа","Введите ID персонажа вручную`n", "Закрыть")
 Input, targid, V, {Enter} 
Sleep, 300 
}
if(rankid!=-1)
{
ranknick:=getPlayerNameById(rankid)
}
Loop, read, %A_MyDocuments%\GTA San Andreas User Files\SAMP\chatlog.txt
{
Stroka := RegExMatch(A_LoopReadLine, ".*\[..:..:..\]\s" ranknick "\[" rankid "\]\s(.*)\[.*\].*")
if(Stroka==1)
NashloStroky:=A_LoopReadLine
}
RegExMatch(NashloStroky, ".*\[..:..:..\]\s" ranknick "\[" rankid "\]\s(.*)\[.*\].*", rank)
if(rank1!="")
{
addChatMessage("{a2b600}" ranknick " — " rank1 )
sleep 1000
}
Return
Но так как я криворукий то у меня не получается изменить RegExMatch под данный чатлог:
Код:
[22:43:04]  [111] Nick_Nick  ранг: 1 [Рядовой]
P.S. Между временем и id 2 пробела
 

RTD

Потужно
Модератор
399
470
Буду краток, есть ahk:
Код:
~RButton & vk52::
rankid:=getIdByPed(getTargetPed())
if rankid < 0
{
targcheck=1
Sleep, 300
ShowDialog("1", "ID персонажа","Введите ID персонажа вручную`n", "Закрыть")
 Input, targid, V, {Enter}
Sleep, 300
}
if(rankid!=-1)
{
ranknick:=getPlayerNameById(rankid)
}
Loop, read, %A_MyDocuments%\GTA San Andreas User Files\SAMP\chatlog.txt
{
Stroka := RegExMatch(A_LoopReadLine, ".*\[..:..:..\]\s" ranknick "\[" rankid "\]\s(.*)\[.*\].*")
if(Stroka==1)
NashloStroky:=A_LoopReadLine
}
RegExMatch(NashloStroky, ".*\[..:..:..\]\s" ranknick "\[" rankid "\]\s(.*)\[.*\].*", rank)
if(rank1!="")
{
addChatMessage("{a2b600}" ranknick " — " rank1 )
sleep 1000
}
Return
Но так как я криворукий то у меня не получается изменить RegExMatch под данный чатлог:
Код:
[22:43:04]  [111] Nick_Nick  ранг: 1 [Рядовой]
P.S. Между временем и id 2 пробела
Ты строку с чатлога нормально скопируй, судя по регулярке она не такая... И напиши что ты хочешь достать из строки
 

Maksvelini

Известный
27
1
Захотелось мне сделать ahk помощника для работа в сми для arizona rp все по быстрому накидал, а в итоге нажатие кнопки альт для открытия списка объявлений не регистрируется. Скорее всего это из-за того что я использую win xp
Вот какие методы решения пробовал:
1. добавить кнопку активации в настройках игры и прописать в ахк.
при нажатии с клавиатуры, срабатывает открытие того диалога, но через ахк нет.
2. пробовал резные использовать разные активации и их комбинации.
send sendplay sendinput | alt lalt !
Я так понимаю нужно или писать через клео, сф луа полностью или через костыли с ахк
Можно попробовать методом подбора найти ид диалога сервера и открывать его по ид. (если я правильно понимаю как это работает)
Или найти нормальный способ отправки нажатия через какие то пакеты или как то, что бы сервер засчитал нажатие.
 

RTD

Потужно
Модератор
399
470
Скорее всего это из-за того что я использую win xp
Так причем тут win xp к АХК и к САМПу в целом? Есть рабочий код который работает везде, а есть говнецо которое нигде не работает.
Без кода тебе врятли помогут.

Как сделать в графическом дизайне примерно так
Google -> AHK GUI
 

Maksvelini

Известный
27
1
Так причем тут win xp к АХК и к САМПу в целом? Есть рабочий код который работает везде, а есть говнецо которое нигде не работает.
Без кода тебе врятли помогут.
Дело не в коде, пишешь send/sendplay/sendinput, alt/lalt/! но оно не активирует https://i.imgur.com/0d48kbt.png
Даже когда биндишь в настройках другую клавишу, то она все равно не активирует эту парашу, в отличии от обычного нажатия клавиши.
 

RTD

Потужно
Модератор
399
470
Дело не в коде, пишешь send/sendplay/sendinput, alt/lalt/! но оно не активирует https://i.imgur.com/0d48kbt.png
Даже когда биндишь в настройках другую клавишу, то она все равно не активирует эту парашу, в отличии от обычного нажатия клавиши.
Так дело же в коде или я тебя не правильно понял?
Код:
SendInput, {Alt down}
Sleep 100
SendInput, {Alt up}
 

Maksvelini

Известный
27
1
Так дело же в коде или я тебя не правильно понял?
Код:
SendInput, {Alt down}
Sleep 100
SendInput, {Alt up}
Да, дело было в коде) и теперь я допер почему. Ты меня правильно понял. Огромное спасибо. Какой же я нуб)

И еще хотелось бы написать такую штуку, но с моими знания надо долго обучатся и уроки смотреть что бы такое сделать))
Нужна такая штука которая может по нажатию XButton2:: подсчитать количество символов в "окне ввода диалога" и что бы выводило просто в тот же диалог текстом, то есть просто SendInput, [Symbol_Count], если после проверки теряется тригер курсора ввода текста на окне ввода диалога, то можно просто SendInput, {F6}(Symbol_Count). Ну а если совсем шаришь в ahk то можно textdraw'ом в сампе на 2-3 секунды, мне было бы даже просто интересно как сделать testdraw через ahk. Буду очень благодарен если это не сложна штука. Если долго делать, то не стоит.

Такой лол. По сути когда ты зажимаешь клавишу на клаве она нажимает клавишу и сразу отжимает и потом винда понимает что клавиша все еще нажата и после задержки установленной в винде она начинает эмулировать много нажатий тоже с задержкой... мдэ лол ))
 
Последнее редактирование:

Lenow

Новичок
16
4
Ребята помогите мне чтобы написать диалог что нужно?