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

Тема в разделе "Другое", создана пользователем includelow, 8 авг 2017.

  1. Cesar Ballard

    Cesar Ballard Активный участник

    Регистрация:
    9 окт 2016
    Сообщения:
    42
    Симпатии:
    1
    Что за дичь? копи пащу код, кидаю в папку отдельный ахк (с этим кодом) в конечном итоге в папке 2 файла (юдф + нужный ахк) и юдф назван как в коде в 1-ой строчке указано, но нихера не пашет. Вообще 0 реакции, а если в 32 анси открывать пишет мол ерор лайн 1 самп юдф не может быть открыт
     
  2. Vlad Horii

    Проверенный

    Регистрация:
    16 июл 2017
    Сообщения:
    311
    Симпатии:
    196
    ничего не понял шо ты написал (да я тупой и шо?)
    1) Попробуй запихнуть код в сам файл с УДФом. Отпишешь результат.
    2) УДФ у тебя точно назван SAMP-UDF-Developer.ahk и расширение точно .ahk?
     
    Cesar Ballard нравится это.
  3. Rinat_Namazov

    Rinat_Namazov В отпуске
    Проверенный

    Регистрация:
    9 авг 2015
    Сообщения:
    742
    Симпатии:
    238
    Если оба файла находятся в одной папке:
    
    #Include SAMP-UDF-037-R2.ahk
    
    Если подключенный файл находится в другой папке:
    Указываем путь
    
    #Include C:\SAMP-UDF-037-R2.ahk
    
     
    Cesar Ballard нравится это.
  4. Tanaka

    Tanaka Активный участник

    Регистрация:
    14 янв 2017
    Сообщения:
    41
    Симпатии:
    11
    3 строчка должна выглядеть так:
    
    $~Enter::
     
    Cesar Ballard нравится это.
  5. Cesar Ballard

    Cesar Ballard Активный участник

    Регистрация:
    9 окт 2016
    Сообщения:
    42
    Симпатии:
    1
    спасибо большое.

    И ещё, крч когда нажимаю энтер в 1-й строчкой сервер ругается, мол, неверная\несерверная команда, а уже второй делает то на что запрограмированно. Как то избавится 1-ой строчки можно?

    Ещё крайне признателен буду если обьясните как этим пользоватся. Если я их совмещаю в 1 (два написанных эти кода) выбивает ошибка на строке

    LineResult() {
    if (!isDialogOpen()
    ....

    по отдельности вообще скрипт не запускает
     
    #390 Cesar Ballard, 12 янв 2018
    Последнее редактирование модератором: 13 янв 2018
  6. Misha Kolashnikov

    Misha Kolashnikov Постоянный участник

    Регистрация:
    12 янв 2018
    Сообщения:
    78
    Симпатии:
    2
    Работает, но глюк в local.ini, из-за чего-то он сохраняет не тег, который я писывал для /d, а пишет DTag хотя, у меня стоит например надпись Хит, а он сохраняет не Хит, а DTag, а так работает, буду благодарен, если отпишешь, из-за чего так.

    Из-за чего может не работать?


    global TazerIn:=0
    global TazerOut:=0
    global TazerTo:=0
    global WeaponDrawn:=0
    
    UnloadGun:
    if (WeaponDrawn = 1)
    {
    if not (getPlayerWeaponId() = 24) and (TazerOut = 2)
    {
    SendChat("/me поставив пистолет на предохранитель, убрал" Female " его в кобуру")
    WeaponDrawn:=0
    TazerOut:=0
    }
    if not (getPlayerWeaponId() = 3)  and (TazerOut = 3)
    {
    SendChat("/me повесил" Female " дубинку на пояс")
    WeaponDrawn:=0
    TazerOut:=0
    }
    if not (getPlayerWeaponId() = 23)  and (TazerOut = 4)
    {
    SendChat("/me убрал" Female " taser x-26 в кобуру на поясе")
    WeaponDrawn:=0
    TazerOut:=0
    }
    if not (getPlayerWeaponId() = 25)  and (TazerOut = 5)
    {
    SendChat("/me поставив дробовик на предохранитель, повесил" Female " его на плечо")
    WeaponDrawn:=0
    TazerOut:=0
    }
    if not (getPlayerWeaponId() = 34) and (TazerOut = 6)
    {
    SendChat("/me поставив снайперскую винтовку на предохранитель, повесил" Female " его на плечо")
    WeaponDrawn:=0
    TazerOut:=0
    }
    if not (getPlayerWeaponId() = 31)  and (TazerOut = 7)
    {
    SendChat("/me поставив автомат на предохранитель, повесил" Female " его на плечо")
    WeaponDrawn:=0
    TazerOut:=0
    }
    if not (getPlayerWeaponId() = 30) and (TazerOut = 8)
    {
    SendChat("/me поставив автомат на предохранитель, повесил" Female " его на плечо")
    WeaponDrawn:=0
    TazerOut:=0
    }
    if not (getPlayerWeaponId() = 17) and (TazerOut = 9)
    {
    SendChat("/me убирает газовую гранату в нагрудный карман бронежилета")
    TazerOut:=0
    WeaponDrawn:=0
    }
    if not (getPlayerWeaponId() = 33) and (TazerOut = 10)
    {
    SendChat("/me ставит винтовку на предохранитель, вешает её на плечо")
    TazerOut:=0
    WeaponDrawn:=0
    }
    if not (getPlayerWeaponId() = 29) and (TazerOut = 11)
    {
    SendChat("/me поставив пистолет-пулемёт на предохранитель, повесил" Female " его на плечо")
    TazerOut:=0
    WeaponDrawn:=0
    }
    if not (getPlayerWeaponId() = 1) and (TazerOut = 12)
    {
    SendChat("/me снял" Female " кастет.")
    TazerOut:=0
    WeaponDrawn:=0
    }
    if not (getPlayerWeaponId() = 14) and (TazerOut = 13)
    {
    SendChat("/me убрал" Female " цветы в маленькую сумку на поясе")
    TazerOut:=0
    WeaponDrawn:=0
    }
    if not (getPlayerWeaponId() = 5) and (TazerOut = 14)
    {
    SendChat("/me убрал" Female " биту в сумку на спине")
    TazerOut:=0
    WeaponDrawn:=0
    }
    if not (getPlayerWeaponId() = 43) and (TazerOut = 15)
    {
    SendChat("/me закрыл" Female " крышечкой объектив фотоаппарата")
    TazerOut:=0
    WeaponDrawn:=0
    }
    if not (getPlayerWeaponId() = 46) and (TazerOut = 16)
    {
    SendChat("/me снял" Female " парашют")
    TazerOut:=0
    WeaponDrawn:=0
    }
    if not (getPlayerWeaponId() = 8) and (TazerOut = 17)
    {
    SendChat("/me убрал" Female " катану в чехол на поясе")
    TazerOut:=0
    WeaponDrawn:=0
    }
    Sleep 1000
    goto, UnloadGun
    }
    else
    {
    goto, TakeGun
    }
    return
    TakeGun:
    if (WeaponDrawn = 0)
    {
    if (getPlayerWeaponId() = 24)  and (TazerOut != 2)
    {
    SendChat("/me достав пистолет из кобуры, снял" Female " его с предохранителя")
    TazerOut:=2
    WeaponDrawn:=1
    }
    if (getPlayerWeaponId() = 3) and (TazerOut != 3)
    {
    SendChat("/me резким движением правой руки снял" Female " дубинку с пояса")
    TazerOut:=3
    WeaponDrawn:=1
    }
    if (getPlayerWeaponId() = 23)  and (TazerOut != 4)
    {
    SendChat("/me достав taser x-26 из кобуры, положил" Female " палец на курок")
    TazerOut:=4
    WeaponDrawn:=1
    }
    if (getPlayerWeaponId() = 25)  and (TazerOut != 5)
    {
    SendChat("/me сняв дробовик с плеча, переключил" Female " предохранитель")
    TazerOut:=5
    WeaponDrawn:=1
    }
    if (getPlayerWeaponId() = 34)  and (TazerOut != 6)
    {
    SendChat("/me сняв снайперскую винтовку с сплеча, переключил" Female " предохранитель")
    TazerOut:=6
    WeaponDrawn:=1
    }
    if (getPlayerWeaponId() = 31)  and (TazerOut != 7)
    {
    SendChat("/me сняв автомат с плеча, переключил" Female " предохранитель")
    TazerOut:=7
    WeaponDrawn:=1
    }
    if (getPlayerWeaponId() = 30)  and (TazerOut != 8)
    {
    SendChat("/me сняв автомат с плеча, переключил" Female " предохранитель")
    TazerOut:=8
    WeaponDrawn:=1
    }
    if (getPlayerWeaponId() = 17)  and (TazerOut != 9)
    {
    SendChat("/me достал" Female " из нагрудного кармана бронежилета газовую гранат")
    SendChat("/do Газовая граната в правой руке")
    TazerOut:=9
    WeaponDrawn:=1
    }
    if (getPlayerWeaponId() = 33)  and (TazerOut != 10)
    {
    SendChat("/me сняв винтовку с плеча, снял" Female " её с предохранителя")
    TazerOut:=10
    WeaponDrawn:=1
    }
    if (getPlayerWeaponId() = 29)  and (TazerOut != 11)
    {
    SendChat("/me сняв пистолет-пулемёт с плеча, снял" Female " его с предохранителя")
    TazerOut:=11
    WeaponDrawn:=1
    }
    if (getPlayerWeaponId() = 1)  and (TazerOut != 12)
    {
    SendChat("/me надел" Female " кастет на правую руку")
    TazerOut:=12
    WeaponDrawn:=1
    }
    if (getPlayerWeaponId() = 14)  and (TazerOut != 13)
    {
    SendChat("/me развернул" Female " букет цветов")
    TazerOut:=13
    WeaponDrawn:=1
    }
    if (getPlayerWeaponId() = 5)  and (TazerOut != 14)
    {
    SendChat("/me завел" Female " правую руку за спину")
    SendChat("/me достал" Female " биту из сумки на спине")
    TazerOut:=14
    WeaponDrawn:=1
    }
    if (getPlayerWeaponId() = 43)  and (TazerOut != 15)
    {
    SendChat("/me достал" Female " фотоаппарат")
    TazerOut:=15
    WeaponDrawn:=1
    }
    if (getPlayerWeaponId() = 46)  and (TazerOut != 16)
    {
    SendChat("/me одел" Female " парашют на плечи")
    TazerOut:=16
    WeaponDrawn:=1
    }
    if (getPlayerWeaponId() = 8)  and (TazerOut != 17)
    {
    SendChat("/me вытащил" Female " катану из чехла на поясе")
    TazerOut:=17
    WeaponDrawn:=1
    }
    Sleep 1000
    goto, TakeGun
    }
    else
    {
    goto, UnloadGun
    }
    return
     
    #391 Misha Kolashnikov, 13 янв 2018
    Последнее редактирование модератором: 13 янв 2018
  7. Artur_iOS

    Artur_iOS Знающий

    Регистрация:
    18 мар 2017
    Сообщения:
    206
    Симпатии:
    84
    Из-за того что ты скопировал код Годарка не понимая его.
     
  8. Misha Kolashnikov

    Misha Kolashnikov Постоянный участник

    Регистрация:
    12 янв 2018
    Сообщения:
    78
    Симпатии:
    2
    И? Я вообще спросил из-за чего он не работает, я АХК скачал, и результата 0..
     
  9. Rinat_Namazov

    Rinat_Namazov В отпуске
    Проверенный

    Регистрация:
    9 авг 2015
    Сообщения:
    742
    Симпатии:
    238
    Потому что там указано условие работающая только когда определенная переменная равна чему-то

    Попробуй заменить одну строчку на эту
    
    DTag := "[" tag "]"
    
    Вообще не сильно понял вопрос, AHK сохраняет файл в таком виде:
    
    [TEXT]
    DTag=[FBI]
    
    Какой сервер?
    Для этого нужно составить регулярку, а для его составления нужнен пример текста из диалога с учетом цветов {FFFFFF}
     
    #394 Rinat_Namazov, 13 янв 2018
    Последнее редактирование модератором: 13 янв 2018
  10. RandeVulll

    RandeVulll Участник

    Регистрация:
    7 июл 2016
    Сообщения:
    5
    Симпатии:
    0
    ARP-C Chocolat
     
  11. Rinat_Namazov

    Rinat_Namazov В отпуске
    Проверенный

    Регистрация:
    9 авг 2015
    Сообщения:
    742
    Симпатии:
    238
    Как по мне удобнее работать со строками чем извлекать статистику считав сразу весь диалог.
    
    RegExMatch(getDialogLine(24), "Бизнес:\s+(.*)", biz)
    addChatMessageEx(0xFFFFFF, "Бизнес: " biz1)
    IniWrite, %biz1%, %DIRSET%, Info, BIZ
    
     
  12. Tanaka

    Tanaka Активный участник

    Регистрация:
    14 янв 2017
    Сообщения:
    41
    Симпатии:
    11
    blockInput()/ubBlockInput()
    Но лучше юзать модифицированный КП от Тумкина, а также модицифированный UDF, вроде как,последней версии.
    
    #Include, SAMP.ahk ;---Подключение СПЕЦИАЛЬНОГО SAMP UDF.
    
    CommandProcessor := new CommandProcessor()      ;---Регистрация класса.
    CommandProcessor.SetStatusProcessor(true)       ;---Включение/отключение класса. true - включить, false - выключить.
    CommandProcessor.RegisterCommand("/ahk", "AHK") ;---Первый параметр название команды, второй - метка на которую скрипт перейдет (не функция).
    CommandProcessor.RegisterCommand("/help", "Help")
    return
    
    AHK:
    addChatMessageEx(0xFFFFFF, "Введенная команда: " TempCmd)             ;---TempCmd  - Команда, которую ты ввел.
    addChatMessageEx(0xFFFFFF, "Введенный тект после команды: " TempText) ;---TempText - текст, который ты ввел после команды.
    return
    
    Help:
    addChatMessageEx(0xFFFFFF, "Помощь")
    return
    
    #Include, CP.ahk ;---Подключение МОДИФИЦИРОВАННОГО КП by Tumkin.
    

    Пример: написал в /d "бла-бла", а в /d уже отправляется твой тэг(который ты сохранил) и текст "бла-бла"
    Про КП и UDF читай выше.
    #Include, SAMP.ahk
    
    CommandProcessor := new CommandProcessor()
    CommandProcessor.SetStatusProcessor(true)
    
    CommandProcessor.RegisterCommand("/savetag", "sTag")
    CommandProcessor.RegisterCommand("/d", "dRac")
    return
    
    sTag:
    IniWrite, % TempText, Tag.ini, Settings, tag
    return
    
    dRac:
    IniRead, iTag, Tag.ini, Settings, tag
    addChatMessageEx(0xFFFFFF, "/d " iTag " бла-бла")
    return
    
    #Include, CP.ahk
     
    #397 Tanaka, 13 янв 2018
    Последнее редактирование модератором: 16 янв 2018
    Cesar Ballard нравится это.
  13. Fartuk)

    Fartuk) Участник

    Регистрация:
    11 авг 2017
    Сообщения:
    5
    Симпатии:
    1
    
    #NoEnv
    SendMode Input
    SetWorkingDir %A_ScriptDir%
    #SingleInstance, Force
    #Include, SAMP.ahk
    F4::
    addChatMessageEx("DBA901", "{DBA901}[Текст]: Текст")
    Sleep 1000
    addChatMessageEx("DBA901", "{DBA901}[Текст]: " COL_WHITE "Текст")
    Sleep 1000
    addChatMessageEx("DBA901", "{DBA901}[Текст]: " COL_WHITE "Текст")
    Sleep 1000
    
    1Array := ["1"]
    2Array  := ["2"]
    3Array  := ["3"]
    4Array  := ["Текст"]
    5Array  := ["Текст"]
    6Array  := ["Текст"]
    7Array  := ["Текст"
    8Array  := ["Текст"]
    9Array  := ["Текст"]
    10Array  := ["Текст"]
    11Array  := ["Текст"]
    12Array  := ["Текст"]
    13Array  := ["Текст"]
    
    ~F3::
    
    
    Sleep, 100
    ShowDialog(2, "{A818FF}Текст", "Текст`nТекст`nТекст`nТекст`nТекст`n {FFA812}Текст`n {FFA812}Текст`n {FFA812}Текст`n {01A7A7}Текст`n {01A7A7}Текст`n {01A7A7}Текст`n {008A02}Текст`n {FF0000}Текст", "Закрыть")
    Line := Lineresult()
    
    if (Line != 15 && Line != 14) {
        For k, v in %Line%Array {
            SendChat(v)
            Sleep, 1500
        }
    }
    else {
        SendChat(%Line%Array[R])
    }
    Нужна помощь, интересуют 2 вопроса.
    1) Как сделать так, чтобы при выборе в диалоговом окне "Текст", открывало новое диалоговое окно "Текст1" и там уже были варианты "1,2 ,3" и так далее.
    2) Есть, к примеру, 3 варианта написания текста в чат (Текст1, Текст2, Текст3). Как сделать так, чтобы скрипт выбрал 1 вариант самостоятельно, ну как бы рандом.
    Буду очень признателен, если подскажите, всем печенек :З
     
  14. Rinat_Namazov

    Rinat_Namazov В отпуске
    Проверенный

    Регистрация:
    9 авг 2015
    Сообщения:
    742
    Симпатии:
    238
    1 вопрос не понял, появляется диалог с выбором отыгровки, но при этом рандом? Чего?
    Насчет второго можно использовать это, а можно написать функцию по типу RandomSendChat("Чебурек 1", "Чебурек 2", "Чебурек 3")
    
    Random, var, 1, 3
    If var = 1
    {
    SendChat("Чебурек номер 1")
    }
    If var = 2
    {
    SendChat("Чебурек номер 2")
    }
    If var = 3
    {
    SendChat("Чебурек номер 3")
    }
    
     
  15. Fartuk)

    Fartuk) Участник

    Регистрация:
    11 авг 2017
    Сообщения:
    5
    Симпатии:
    1
    Эти 2 вопроса друг от друга не зависят, просто нужно, чтобы при открытии одного диалогового окна, там можно было открыть новое. Типо "Список чего-то" и при выборе этой кнопки открывалось новое диалоговое окно, в котором будут варианты, которые выводятся в чат.
     
  16. Rinat_Namazov

    Rinat_Namazov В отпуске
    Проверенный

    Регистрация:
    9 авг 2015
    Сообщения:
    742
    Симпатии:
    238
    Легче всего это реализовать на этом, пример скрипта с субменю есть там же
    *ТыК*
     
  17. Fartuk)

    Fartuk) Участник

    Регистрация:
    11 авг 2017
    Сообщения:
    5
    Симпатии:
    1
    Попробовал сделать, по этому способу, вылезла ошибка, как исправить? :с 111.PNG
     
  18. Rinat_Namazov

    Rinat_Namazov В отпуске
    Проверенный

    Регистрация:
    9 авг 2015
    Сообщения:
    742
    Симпатии:
    238
    Ошибка ссылается на что что используется вызов неизвестной функции.
    Нужно скачать SAMP UDF последней версии для своего клиента: *ТыК*
     
  19. Artur_iOS

    Artur_iOS Знающий

    Регистрация:
    18 мар 2017
    Сообщения:
    206
    Симпатии:
    84
    Удивительно, как ты сам не додумался то? Элементарно все. Учи основы...
    Пример на 5 диалогов которые зависимы от 1-о
    ArraysDialog1 := [["Бинд строки 1", "Диалог 1"],["Бинд строки 2", "Диалог 1"],["Бинд строки 3", "Диалог 1"]]
    ArraysDialog2 := [["Бинд строки 1", "Диалог 2"], ["Бинд строки 2", "Диалог 2"]]
    ArraysDialog3 := [["Бинд строки 1", "Диалог 3"], ["Бинд строки 2", "Диалог 3"]]
    ArraysDialog4 := [["Бинд строки 1", "Диалог 4"], ["Бинд строки 2", "Диалог 4"], ["Бинд строки 3", "Диалог 4"]]
    ArraysDialog5 := [["Бинд строки 1", "Диалог 5"], ["Бинд строки 2", "Диалог 5"], ["Бинд строки 3", "Диалог 5"]]
    
    ~F3::
    Sleep, 100
    ShowDialog(2, "Диалог 1", "Новый диалог`nТекст`nТекст`nТекст", "Ок") ;1 диалог
    line := LineResult()
    if (line = 1) {
        showDialog(2, "Диалог 2", "text1`nНовый диалог`ntext2`nНовый диалог", "Ок") ;2 диалог
        line := LineResult()
        if (line = 1 || line = 3)  {
            for i,e in ArraysDialog2[(line = 3 ? 2:1)] { ;line = 3 ? 2:1 - если line = 3, то вернуть 2, иначе 1
                SendChat(e)
                Sleep, 2000
            }
        }else if (line = 2) {
            showDialog(2, "Диалог 4", "text1`ntext2`ntext3`nНовый диалог", "Ок") ;4 диалог
            line := LineResult()
            if (line < 4) {
                for i,e in ArraysDialog4[line] {
                    SendChat(e)
                    Sleep, 2000
                }
            }else if (line = 4) {
                showDialog(2, "Диалог 5", "text1`ntext2`ntext3", "Ок") ;5 диалог
                line := LineResult()
                for i,e in ArraysDialog5[line] {
                    SendChat(e)
                    Sleep, 2000
                }
            }
        }else if (line = 4) {
            showDialog(2, "Диалог 3", "text`ntext", "Ок") ;3 диалог
            line := LineResult()
            for i,e in ArraysDialog3[line] {
                SendChat(e)
                Sleep, 2000
            }
        }
    }else{
        for i,e in ArraysDialog1[line - 1] { ;line - 1 потому что 1-я строка пропускается
            SendChat(e)
        }
    }
    Return
    
    LineResult() {
        if (!isDialogOpen() || getDialogStyle() = 0 || getDialogStyle() = 1 || getDialogStyle() = 3)
            return false
        while (isDialogOpen())
            continue
        if(GetKeyState("Esc", "P"))
            return false
        return getDialogLineNumber()
    }
    2) Пример на почти неограниченное кол-во строк(биндов)
    !1::
    SendChatRandom([["1-й бинд 1-я строка", "1-й бинд 2-я строка"], ["2-й бинд 1-я строка", "2-й бинд 2-я строка"], ["3-й бинд 1-я строка", "3-й бинд 2-я строка", "3-й бинд 3-я строка"]])
    Return
    SendChatRandom(arraysBind) {
        Random, index, 1, arraysBind.MaxIndex()
        for i,e in arraysBind[index] {
            SendChat(e)
            Sleep, 2000
        }
    }
     
    Cesar Ballard нравится это.
  20. Fartuk)

    Fartuk) Участник

    Регистрация:
    11 авг 2017
    Сообщения:
    5
    Симпатии:
    1
    Спасибо вам большое)
     
  21. Kop_Vne_Zakona

    Kop_Vne_Zakona Новичок

    Регистрация:
    14 янв 2018
    Сообщения:
    4
    Симпатии:
    0
    Ребята,нужна помощь.
    В общем: нужен ахк код,который при вводе допустим команды /qwe автоматически с определенной задержкой писал допустим команду /asd и ближайший ID ко мне через пробел.Как то так :)
    Пример: Я ввожу команду /qwe,у меня прописывается команда /asd [ближайший ID].Через 1 минуту опять,но уже автоматически,пишет эту же команду /asd [ближайший ID(кроме того,который уже был].
    Для сампа.
     
    #406 Kop_Vne_Zakona, 14 янв 2018
    Последнее редактирование: 14 янв 2018
  22. AdamRockwell

    AdamRockwell Активный участник

    Регистрация:
    11 янв 2018
    Сообщения:
    38
    Симпатии:
    6
    Как одним скриптом закрыть другой скрипт?

    открывать я умею (run, script.ahk) , а закрыть как?

    Process, Close, scriph.ahk - не помогает.
     
  23. Rinat_Namazov

    Rinat_Namazov В отпуске
    Проверенный

    Регистрация:
    9 авг 2015
    Сообщения:
    742
    Симпатии:
    238
    Можно так, но нужно знать полный путь к другому скрипту
    
    Run % comspec " /k taskkill /f /im test.exe",, Hide
    
    Если это программа с окном
    
    WinClose, Калькулятор
    
    Если знаешь индификатор процесса
    
    Process, Close, %PID%
    
    Можно на SetTimer'e:
    
    $~NumpadEnter::
    $~Enter::
    If (isInChat() = 1 && isDialogOpen() = 0)
    {
        Sleep 250
        dwAddress := dwSAMP + 0x12D8F8
        chatInput := readString(hGTA, dwAddress, 256)
        If chatInput = /qwe
    {
    SetTimer, GWE, 60000
    }
        If chatInput = /qwes
    {
    SetTimer, GWE, OFF
    }
    }
    return
    QWE:
    SendChat("/asd " getClosestPlayerId())
    return
    
    Можно на Loop'e:
    
    $~NumpadEnter::
    $~Enter::
    If (isInChat() = 1 && isDialogOpen() = 0)
    {
        Sleep 250
        dwAddress := dwSAMP + 0x12D8F8
        chatInput := readString(hGTA, dwAddress, 256)
        If chatInput = /qwe
    {
    stat := 1
    Loop
    {
    If stat = 0
    {
    return
    }
    SendChat("/asd " getClosestPlayerId())
    Sleep 60000
    }
    }
        If chatInput = /qwes
    {
    stat := 0
    }
    }
    return
    
     
    #408 Rinat_Namazov, 14 янв 2018
    Последнее редактирование модератором: 16 янв 2018
    Cesar Ballard нравится это.
  24. _DeAs_

    _DeAs_ Участник

    Регистрация:
    15 янв 2018
    Сообщения:
    22
    Симпатии:
    1
    4 вопроса, помогите пожалуйста)

    1)[​IMG] как поставить пробел между двумя переменными text11 и text10
    2)showDialog 1 - не срабатывает на ENTER, только на SHIFT + ENTER - screen диалога upload_2018-1-15_14-56-44.png
    3)как пользоваться RegExr: Learn, Build, & Test RegEx(https://regexr.com) или же Regex101 - online regex editor and debugger(https://regex101.com) ?
    4)можно ли в диалоге "2" активировать пункт мышкой?
    ^1::
    showDialog("2", "Меню", "Наказания`nОтыгровка`nFunktion3", "Ок", "Отмена")
    return
    #If isDialogOpen() && WinActive("GTA:SA:MP")
    $Enter::
    OnDialogResponse(true)
    return
    ESC::
    OnDialogResponse(false)
    return
    #If
    OnDialogResponse(response) {
    caption := getDialogCaption()
    if (response) {
    if (caption == "Меню") {
    line := getDialogLine(getDialogIndex())
    if (line == "Наказания") {
    showDialog("2", "Под список", "Заглушки`nНаказания кпз`nРелоги", "Ок", "Отмена")
    }
    else if (line == "Отыгровка")
    {
    showDialog("1", "/я текст", "Введите отыгровку", "Ок", "Отмена")
    input, text, V, {Enter}
    SendChat("/я " text)
    }
    return
    }
    else if (caption == "Под список") {
    line := getDialogLine(getDialogIndex())
    AddChatMessage(line)
    Send, {Enter}
    }
    else if (caption == "Keybinder - Funktion2") {
    clipboardBuffer := ClipboardAll
    clipboard := ""
    Send, ^{A}
    Send, ^{X}
    sleep, 100
    dialogInput := clipboard
    clipboard := clipboardBuffer
    if (dialogInput != -1 && dialogInput != "") {
    AddChatMessage("Dialog Input: " dialogInput)
    }
    Send, {Enter}
    }
    else
    Send, {Enter}
    }
    else {
    if (caption == "Под список")
    {
    showDialog("2", "Меню", "Наказания`nОтыгровка`nFunktion3", "Ок", "Отмена")
    }
    else
    Send, {ESC}
    }
    return
    }
     
  25. Rinat_Namazov

    Rinat_Namazov В отпуске
    Проверенный

    Регистрация:
    9 авг 2015
    Сообщения:
    742
    Симпатии:
    238
    
    SendChat("/cmd " text11 " " text10)
    
    Скорее всего только у тебя.
    Сперва пойми сам принцип регулярок по урокам на ютубе.
    *ТыК*

    Зачем в конце " "?
     
  26. AdamRockwell

    AdamRockwell Активный участник

    Регистрация:
    11 янв 2018
    Сообщения:
    38
    Симпатии:
    6
    Ну капец... Ввёл Run %c omspec% /c del /q /s "script.ahk" && exit,, Hide и script.ahk бесследно исчез с моего компьютера... Я ЗАКРЫТЬ просил, а не УДАЛИТЬ

    Ладно. Хорошо хоть у меня копия была, так бы просто лишился полезного скрипта...

    Повторяю вопрос. Как ЗАКРЫТЬ ахк скрипт через другой ахк скрипт?
    Можно полную строку кода, если не сложно. Оба скрипта лежат на рабочем столе.
     
    #411 AdamRockwell, 15 янв 2018
    Последнее редактирование модератором: 15 янв 2018
  27. AnRtom

    AnRtom Участник

    Регистрация:
    15 янв 2018
    Сообщения:
    8
    Симпатии:
    0
    В общем хотелось бы узнать как сделать данную функцию.
    Функция заключается в том что-бы.
    После ввода команды /pass и ИД игрока РП отыгралось автоматически
    Что нужно добавить в данный код?
    Буду очень благодарен за помощь.
    :?:/pass ::
    SendMessage, 0x50,, 0x4190419,, A
    SendInput, {F6}/me достал паспорт"{enter}
     
    #412 AnRtom, 15 янв 2018
    Последнее редактирование модератором: 16 янв 2018
  28. AdamRockwell

    AdamRockwell Активный участник

    Регистрация:
    11 янв 2018
    Сообщения:
    38
    Симпатии:
    6
    А зачем тебе отыгровка РП после ввода команды? Логичней будет вот так:

    ?:/pass::
    SendMessage, 0x50,, 0x4190419,, A
    SendInput, {F6}/me достал паспорт{enter}
    sleep 500
    SendInput, {F6}/pass{space}
    Пишешь в чат "/pass" просто. Потом, после отыгровки, дописываешь id.
     
    #413 AdamRockwell, 15 янв 2018
    Последнее редактирование модератором: 16 янв 2018
  29. _DeAs_

    _DeAs_ Участник

    Регистрация:
    15 янв 2018
    Сообщения:
    22
    Симпатии:
    1
    Не, не только у меня, проверил. Можно как-то фиксануть?

    На всякий случай еще раз код
    ^1::
    showDialog("2", "Меню", "Наказания`nОтыгровка`nFunktion3", "Ок", "Отмена")
    return
    #If isDialogOpen() && WinActive("GTA:SA:MP")
    $Enter::
    OnDialogResponse(true)
    return
    ESC::
    OnDialogResponse(false)
    return
    #If
    OnDialogResponse(response) {
    caption := getDialogCaption()
    if (response) {
    if (caption == "Меню") {
    line := getDialogLine(getDialogIndex())
    if (line == "Наказания") {
    showDialog("2", "Под список", "Заглушки`nНаказания кпз`nРелоги", "Ок", "Отмена")
    }
    else if (line == "Отыгровка")
    {
    showDialog("1", "/я текст", "Введите отыгровку", "Ок", "Отмена")
    input, text, V, {Enter}
    SendChat("/я " text)
    }
    return
    }
    else if (caption == "Под список") {
    line := getDialogLine(getDialogIndex())
    AddChatMessage(line)
    Send, {Enter}
    }
    else if (caption == "Keybinder - Funktion2") {
    clipboardBuffer := ClipboardAll
    clipboard := ""
    Send, ^{A}
    Send, ^{X}
    sleep, 100
    dialogInput := clipboard
    clipboard := clipboardBuffer
    if (dialogInput != -1 && dialogInput != "") {
    AddChatMessage("Dialog Input: " dialogInput)
    }
    Send, {Enter}
    }
    else
    Send, {Enter}
    }
    else {
    if (caption == "Под список")
    {
    showDialog("2", "Меню", "Наказания`nОтыгровка`nFunktion3", "Ок", "Отмена")
    }
    else
    Send, {ESC}
    }
    return
    }
     
    #414 _DeAs_, 15 янв 2018
    Последнее редактирование: 15 янв 2018
  30. Rinat_Namazov

    Rinat_Namazov В отпуске
    Проверенный

    Регистрация:
    9 авг 2015
    Сообщения:
    742
    Симпатии:
    238
    Попутал
    
    Run % comspec " /k taskkill /f /im test.exe",, Hide
    
    Если хочешь чтобы при вводе "/pass [ID]" сперва была отыгровка, а потом скрипт показал паспорт то используй командный процессор.
    Либо как ниже сперва покажет паспорт, после отыгровка.
    
    $~NumpadEnter::
    $~Enter::
    If (isInChat() = 1 && isDialogOpen() = 0)
    {
        Sleep 250
        dwAddress := dwSAMP + 0x12D8F8
        chatInput := readString(hGTA, dwAddress, 256)
        If chatInput contains /pass
        {
    SendChat("/me достал паспорт из кармана")
    Sleep 1000
    SendChat("/me передал паспорт человеку напротив")
    }
    }
    
    Но только не забудь SAMP UDF подключить.

    Переделывай на этот лучше: *ТыК*
     
    #415 Rinat_Namazov, 15 янв 2018
    Последнее редактирование: 15 янв 2018
  31. AdamRockwell

    AdamRockwell Активный участник

    Регистрация:
    11 янв 2018
    Сообщения:
    38
    Симпатии:
    6
    и Ansi-32 ещё.

    Не работает.
     
    #416 AdamRockwell, 15 янв 2018
    Последнее редактирование модератором: 16 янв 2018
  32. Rinat_Namazov

    Rinat_Namazov В отпуске
    Проверенный

    Регистрация:
    9 авг 2015
    Сообщения:
    742
    Симпатии:
    238
    У меня работает, поищи тогда команды которыми можно закрывать через командную строку
    Или так попробуй
    
    Run, taskkill /f /im text.exe,, Hide
    
     
  33. _DeAs_

    _DeAs_ Участник

    Регистрация:
    15 янв 2018
    Сообщения:
    22
    Симпатии:
    1
    if chatInput contains  /gos A
    {
    addChatMessageEx(0x3399FF,"{3399FF}Test")
    addChatMessageEx(0xEEEE00,"{EEEE00}Admiral - ID445, Alpha - ID602")
    }
    вырвал один код, как сделать чтобы он полностью функционировал?
     
  34. sanreal

    sanreal Активный участник

    Регистрация:
    19 авг 2017
    Сообщения:
    45
    Симпатии:
    0
    можно ли сделать скрипт который читает чатлог самп и отправляет определенные строчки чатлога на форум?
     
  35. AnRtom

    AnRtom Участник

    Регистрация:
    15 янв 2018
    Сообщения:
    8
    Симпатии:
    0
    Кто-то то может шарит что происходит. В общем при первом вводе команды то есть /mask все отыгрывает и работает стабильно! Но при втором вводе команды, уже не прописывается 1-я строчка отыгровки и сама команда(/mask не работает)
    Вот код:
    :?:/mask::
    SendMessage, 0x50,, 0x4190419,, A
    Sendinput, {F6}/do В портфеле лежит несколько масок с изображением черепа.{Enter}
    sleep 1100
    Sendinput, {F6}/me спустив портфель с плеча открыл его и достал одну из них{Enter}
    sleep 1100
    Sendinput, {F6}/do Маска в руках.{Enter}
    sleep 1100
    Sendinput, {F6}/me резким движением натянул маску на лице{Enter}
    sleep 1100
    Sendinput, {F6}/do Маска на лице.{Enter}
     
    #420 AnRtom, 15 янв 2018
    Последнее редактирование модератором: 16 янв 2018