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

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

  1. 7jizzle

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

    Регистрация:
    23 мар 2018
    Сообщения:
    41
    Симпатии:
    1
    Смог я его запустить. 1. Пишет что активирован, но с задержкой. И в игру тоже передаёт команду. 2. В чат не пишет "привет" когда хп меньше 50.
     
  2. #darksoor

    #darksoor Знающий

    Регистрация:
    10 июл 2016
    Сообщения:
    237
    Симпатии:
    50
    У тебя какая-то проблема, код рабочий.
     
  3. Tiva

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

    Регистрация:
    6 ноя 2017
    Сообщения:
    42
    Симпатии:
    1
    Не запускается скрипт на windows 8.
    Сам скрипт рабочий.
    Еще не можно поставить ANSI
    ХЕЛП)
     
  4. George

    George Участник

    Регистрация:
    21 фев 2019
    Сообщения:
    5
    Симпатии:
    0
    Работа с базой данных. GTA:SA:MP. Дабы работа с диалогами (они здесь не будут представлены) была более приятной для пользователя, я хотел бы, чтобы имя пользователя (и другие важные данные) сохранялись локально в файле с базой данных (sql например, или что-то подобное). В SQL не смыслю, файл cookie.sql пуст. То есть вопрос здесь об использовании SQL таблиц через .ahk. Если у вас есть идеи для хранения получше, буду рад увидеть.
    #SingleInstance force
    #include %A_ScriptDir%\cookie.sql ; source .sql
    SendMode Input
    
    #IfWinActive GTA:SA:MP
    
    NumPadEnter::
    
    SendMessage, 0x50,, 0x4190419,, A
    
    SendInput tName:{space}
    Suspend On
    Hotkey, Enter, On
    Hotkey, Esc, On
    
    Input, uName, V I M, {enter}
    Send, {end}+{home}{Del}{esc}
    
    ; дальше нужно вывести uName в файл с базой данных (cookie.sql)
    
    return
    И еще (я уже повернут на диалоговых окнах), есть ли способ перехватить сообщение из окна авторизации (локально; на Arizona например)? Использую эти исходники. Я предположу, что делается это примерно так:
    #SingleInstance force
    #include %A_ScriptDir%\SAMP.ahk
    SendMode Input
    
    #IfWinActive GTA:SA:MP
    
    global gPassword := "" ; {g} - grab
    
    #If
    OnDialogResponse(response) {
        dCaption := GetDialogCaption()
        if (response) {
            if (dCaption == "Авторизация") {
                ClipboardBuffer := ClipboardAll
                Clipboard := ""
                Send, ^{A}
                Send, ^{X}
                sleep 250
                gPassword := Clipboard
                Clipboard := ClipboardBuffer
                Send, {enter}
                AddChatMessage("" gPassword)
            }
        }
        return
    }
    Сорян, я пока не сильно шарю
     

    Вложения:

    • sa-mp-001.png
      sa-mp-001.png
      Размер файла:
      1,7 МБ
      Просмотров:
      25
  5. Artem_Glade

    Artem_Glade Участник

    Регистрация:
    18 авг 2018
    Сообщения:
    8
    Симпатии:
    1
    Ребят, помогите. Как сделать, чтобы при выборе определённого профиля, переключатель(radio) переключался на тот профиль который был настроен, а если такого нет профиля в .ini то просто убирался.
     

    Вложения:

  6. Vlad11_2017

    Vlad11_2017 Новичок

    Регистрация:
    5 май 2018
    Сообщения:
    2
    Симпатии:
    0
    Мне нужен код типо код активации на mysql BD.
     
  7. _Сеня_

    _Сеня_ Участник

    Регистрация:
    6 июл 2016
    Сообщения:
    18
    Симпатии:
    1
    Помогите со скриптом, мне нужен скрипт, который по команде выдавал мут игроку, в зависимости от его уровня.
    Я сделал вот такой скрипт:
    #Include SAMP.ahk
    $~Enter::
    if (isInChat() && !isDialogOpen())
    {
        blockChatInput()
        sleep 200
        dwAddress := dwSAMP + 0x12D8F8
        chatInput := readString(hGTA, dwAddress, 512)
        writeString(hGTA, dwAddress, "")
          if (RegExMatch(chatInput, "^/cens (.*)",string))
          {
            nick := getPlayerNameById(string1) ; никнейм по ID
                    score := getPlayerScoreById(string1) ;уровень по ID
                    addChatMessageEx("{fc0000}", "[МУТ] {ff8400}У игрока " nick "[" string1 "] " score " уровень.") ;вывод уровня в чат
            if(score < 50)
            {
                SendChat("/mute " string1 " 15 цензура")
            }
            if(score >= 50 && score < 70)
            {
                SendChat("/mute " string1 " 30 цензура")
            }   
            if(score >= 70)
            {
                SendChat("/mute " string1 " 50 цензура")
            }       
        if string1 =
            {
            addChatMessageEx("{fc0000}", "[МУТ] {ff8400}Используйте: {00ff04}/cens [id]") ;Если неверно использовал команду
            return
        }
          }  
    }
    Return
    Он вроде запускается, но не работает....
    Помогите, пожалуйста!
     
  8. #darksoor

    #darksoor Знающий

    Регистрация:
    10 июл 2016
    Сообщения:
    237
    Симпатии:
    50
    В функции addChatMessageEx() не обязательно в первом параметре ставить скобки.

    
    #NoEnv
    #SingleInstance force
    #Include SAMP-UDF.ahk
    #IfWinActive GTA:SA:MP
    
    $~NumpadEnter::
    $~Enter::
    if (!isInChat()) || (isDialogOpen())
       Return
    Sleep 250
    blockChatInput()
    tempText := readString(hGTA, dwSAMP + 0x12D8F8, 256)
    tempCmd := StrSplit(tempText, " ")[1]
    unblockChatInput()
    
    if (tempCmd == "/cens")
    {
       if (RegExMatch(tempText, "^" tempCmd "\s(\d{1,3})$", string))
       {
          nick := getPlayerNameById(string1) ; никнейм по ID
          score := getPlayerScoreById(string1) ;уровень по ID
          addChatMessageEx("fc0000", "[МУТ] {ff8400}У игрока " nick "[" string1 "] " score " уровень.") ;вывод уровня в чат
          if(score < 50)
             SendChat("/mute " string1 " 15 цензура")
          if(score >= 50 && score < 70)
             SendChat("/mute " string1 " 30 цензура")
          if(score >= 70)
             SendChat("/mute " string1 " 50 цензура")
       }
       Else
             addChatMessageEx("fc0000", "[МУТ] {ff8400}Используйте: {00ff04}" tempCmd " [id]") ;Если неверно использовал команду
    }
    return
    
     
  9. swift_taylor

    swift_taylor Новичок

    Регистрация:
    14 мар 2019
    Сообщения:
    2
    Симпатии:
    0
    Добрый день.
    Прошу помочь со скриптом, который бы из чатлога сервера GTA5 "вытаскивал" промокоды и моментально их вводил в чат. Чатлог нашел. Просьба помочь с кодом.
    Вырезка из чат лога:
     [21:51:25.208] [ Info] [ClassicChat] [3] ~y~• • • • ~r~ВНИМАНИЕ! ~y~• • • • 
    [21:51:25.208] [ Info] [ClassicChat] [3] ~p~Рандом-промокод:~r~ 
    [21:51:25.208] [ Info] [ClassicChat] [3] ~w~~P~B~B~LB~R~~R~G~C~M~B~X~R~Y~Y~TX~O~~B~D~Q~U~Y~V~Q~K 
    [21:51:25.221] [ Info] [ClassicChat] [3] ~b~Активируй первым и получи ~g~$5000 
    [21:51:25.221] [ Info] [ClassicChat] [3] ~p~И второй промокод:~r~ 
    [21:51:25.221] [ Info] [ClassicChat] [3] ~w~~O~R~O~~B~J~R~A~R~MO~Q~~B~B~B~~O~Y~Y~F~B~P~R~Q~R~~Y~O~Y~SR~G~~Y~A 
    [21:51:25.221] [ Info] [ClassicChat] [3] ~b~Активируй его первым и получи ~g~$5000 
    [21:51:27.819] [Debug] [MeleeCombatStateHandler] [3] Evgeny_PWNZ changed melee combat state to True! 
    [21:51:29.959] [Debug] [MeleeCombatStateHandler] [3] Evgeny_PWNZ changed melee combat state to False! 
    [21:51:31.025] [ Info] [ClassicChat] [3] ~g~Рандом-промокод ~w~BLBGMXYTXDUVK ~g~АКТИВИРОВАН! 
    [21:51:31.025] [ Info] [ClassicChat] [3] ~g~Победитель: ~w~Flawless_MacLoude ~b~Приз: ~g~$5000 
    [21:51:31.033] [ Info] [ClassicChat] [3] ~y~Промокоды появляются примерно раз в 30-180 минут 
    [21:51:31.548] [ Info] [ClassicChat] [3] ~g~Рандом-промокод ~w~RJAMOBYFPQOSRA ~g~АКТИВИРОВАН! 
    [21:51:31.548] [ Info] [ClassicChat] [3] ~g~Победитель: ~w~Aiden_Bishop ~b~Приз: ~g~$5000 
    [21:51:31.548] [ Info] [ClassicChat] [3] ~y~Промокоды появляются примерно раз в 30-180 минут 
    Каждый день создается новый чатлог с датой в имени. Путь чатлога - C:\VMP\logs\vmp-2019-03-13.txt
     
    #2809 swift_taylor, 14 мар 2019
    Последнее редактирование: 14 мар 2019
  10. #darksoor

    #darksoor Знающий

    Регистрация:
    10 июл 2016
    Сообщения:
    237
    Симпатии:
    50
    Строку из чатлога предоставь, скажи, что из строки вывести.
    Также предоставь путь до чатлога.
     
  11. swift_taylor

    swift_taylor Новичок

    Регистрация:
    14 мар 2019
    Сообщения:
    2
    Симпатии:
    0
    Путь чатлога - C:\VMP\logs\vmp-2019-03-13.txt
    В предыдущем посте строки чатлога. Вывести нужно рандомный промокод, в первом случае это P~B~B~LB~R~~R~G~C~M~B~X~R~Y~Y~TX~O~~B~D~Q~U~Y~V~Q~K. И ввести в чат без знаков ~. Еще перепроверю чатлоги, не понимаю почему он такой длинный, возможно что-то лишнее.
    BLBGMXYTXDUVK - вот какой промокод получается из этой строки в данном случае, возможно другие знаки означают цвет букв - пока не понятно.
    P~B~B~LB~R~~R~G~C~M~B~X~R~Y~Y~TX~O~~B~D~Q~U~Y~V~Q~K =BLBGMXYTXDUVK .

    [21:51:25.221] [ Info] [ClassicChat] [3] ~p~И второй промокод:~r~
    [21:51:25.221] [ Info] [ClassicChat] [3] ~w~~O~R~O~~B~J~R~A~R~MO~Q~~B~B~B~~O~Y~Y~F~B~P~R~Q~R~~Y~O~Y~SR~G~~Y~A
    [21:51:31.548] [ Info] [ClassicChat] [3] ~g~Рандом-промокод ~w~RJAMOBYFPQOSRA ~g~АКТИВИРОВАН!



    [23:39:53.844] [ Info] [ClassicChat] [3] ~w~~B~X~Y~K~G~Q~Q~KI~R~X~Q~~Q~~Y~O~Q~E~C~O~Y~W~Y~~B~X~G~KA~Q~
    [23:39:53.868] [ Info] [ClassicChat] [3] ~b~Активируй первым и получи ~g~$2000
    [23:39:53.868] [ Info] [ClassicChat] [3] ~p~И второй промокод:~r~
    [23:39:53.875] [ Info] [ClassicChat] [3] ~w~~B~G~O~T~Q~N~C~F~C~~R~VU~B~~Q~W~B~T~O~EY~C~~Y~T~O~H~C~J
    [23:39:53.875] [ Info] [ClassicChat] [3] ~b~Активируй его первым и получи ~g~$2000

    [23:40:03.525] [ Info] [ClassicChat] [3] ~g~Рандом-промокод ~w~XKQKIXOEOWXKA ~g~АКТИВИРОВАН!
    [23:40:03.537] [ Info] [ClassicChat] [3] ~g~Победитель: ~w~Daniel_Bell ~b~Приз: ~g~$2000
    [23:40:03.537] [ Info] [ClassicChat] [3] ~y~Промокоды появляются примерно раз в 30-180 минут
    [23:40:04.866] [ Info] [ClassicChat] [3] ~g~Рандом-промокод ~w~GTNFVUWTEYTHJ ~g~АКТИВИРОВАН!

    еще один пример промокода. В чате весь промокод указан белым шрифтом.

    [19:02:54.637] [ Info] [ClassicChat] [3] ~p~Рандом-промокод:~r~
    [19:02:54.645] [ Info] [ClassicChat] [3] ~w~~Q~I~B~S~O~J~O~~Q~V~O~Q~O~~C~P~C~~G~V~R~X~P~I~G~G~G~
    [19:02:54.645] [ Info] [ClassicChat] [3] ~b~Активируй первым и получи ~g~$5000
    [19:02:54.645] [ Info] [ClassicChat] [3] ~p~И второй промокод:~r~
    [19:02:54.658] [ Info] [ClassicChat] [3] ~w~Y~P~~P~~G~G~R~F~R~~O~OE~C~~R~B~Y~L~Q~Y~Q~~G~A~P~A~P~~Q~Q
    [19:02:54.658] [ Info] [ClassicChat] [3] ~b~Активируй его первым и получи ~g~$2000
    [19:03:00.022] [ Info] [ClassicChat] [3] ~g~Рандом-промокод ~w~ISJVQPVXIG ~g~АКТИВИРОВАН!
    [19:03:03.049] [ Info] [ClassicChat] [3] ~g~Рандом-промокод ~w~YGFOEBLYAAQ ~g~АКТИВИРОВАН!
    что-то я засомневался что получится это вывести отсеяв лишние символы)
     
    #2811 swift_taylor, 14 мар 2019
    Последнее редактирование: 15 мар 2019 в 00:01
  12. _Сеня_

    _Сеня_ Участник

    Регистрация:
    6 июл 2016
    Сообщения:
    18
    Симпатии:
    1
    не знаю почему, но не работает, может быть у меня SAMP-UDF какой-то кривой?[​IMG]
     
    #2812 _Сеня_, 15 мар 2019 в 14:55
    Последнее редактирование: 15 мар 2019 в 15:16
  13. #darksoor

    #darksoor Знающий

    Регистрация:
    10 июл 2016
    Сообщения:
    237
    Симпатии:
    50
    Антивирус отключи, АХК установи в ANSI-32, попробуй заменить UDF.
     
    _Сеня_ нравится это.
  14. _Сеня_

    _Сеня_ Участник

    Регистрация:
    6 июл 2016
    Сообщения:
    18
    Симпатии:
    1
    Помогло, спасибо!
     
    #darksoor нравится это.
  15. Tiva

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

    Регистрация:
    6 ноя 2017
    Сообщения:
    42
    Симпатии:
    1
    Привет, если не сложно помоги. нужно сделать так чтобы когда ты наводил ПКМ на человека в сампе (когда будет треугольник там) и нажимал на кнопку например "X" Вылазило диалог и можно было выбрать Показать пасспорт ( с его идом) надеть оружие и т.д. Кто поможет буду очень благодарен.
    P.S. желательно распишите за что они отвечают.)
     
    #2815 Tiva, 15 мар 2019 в 22:57
    Последнее редактирование: 17 мар 2019 в 21:45
  16. dan|0

    dan|0 Новичок

    Регистрация:
    7 июн 2018
    Сообщения:
    2
    Симпатии:
    0
    Кто шарит, помогите сделать ahk для выдачи оффлайн наказаний (Для админов)
    Тобишь, после проверки форума, что-бы не сворачивать по 100 раз игру и не писать много строк в простом ahk, прошу помощи что-бы те кто хорошо шарят или те у кого уже есть такой скрипт помогли.
    Фунционал - после ввода всех ников и нарушений, нажимая на кливишу, скрипт все выдает, но может столкнуться с проблемой того, что игрок в данный момент онлайн и что-бы лично не вводить все это, он автоматичесеи выдаст ему в онайне не в ОФФЛАЙНЕ
    Для примера могу дать скрипт CZAR, он сделал для Evovle RP, а мне нужен для GTARP (CRMP)
     
  17. James Hawk

    James Hawk Знающий

    Регистрация:
    1 сен 2016
    Сообщения:
    231
    Симпатии:
    53
    Ютуб, форумы бх/см. Было бы желание - уже бы нашёл
     
  18. Tiva

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

    Регистрация:
    6 ноя 2017
    Сообщения:
    42
    Симпатии:
    1


    Нашёл ответ вот
    
    !1::
    {
      Player_id := getIdByPed(getTargetPed()) ; Get player ID
      Player_name := RegExReplace(getPlayerNameById(PId),"_"," ") ; Get player name
      My_name := RegExReplace(getUsername(), "_", " ") ; Get your name
      Player_pos := getPedCoordinates(getTargetPed()) ; Get player pos (array)
      if(Player_id == -1) {
       addChatMessage("{0070BA}[AHK]: {FF3333}Ошибка! {BDBDBD} Вы не захватили игрока.")
       return
      } else {
       ShowDialog("2", "{0070BA}Lesson", "{FFFFFF}*{DCDCDC}Захвачен: {FFFF00}" Player_name " {FFFFFF}[" Player_id "{FFFFFF}]`nПоздороваться`nСпросить документы`nПозвать игрока`nКоординаты пользователя: {BDBDBD}" Player_pos[0] Player_pos[1] Player_Pos[2], "Ok")
       NextStep := 1
       Result := LineResult()
       if(!Result)
         return
       if(Result == "2") {
           SendChat("/hi " Player_id)
           } else if (Result == "3") {
               SendChat("Здравствуйте, я Офицер полиции Лос-Сантос " My_name ", покажите ваши документы.")
           } else if (Result == "4") {
               SendChat("/s " Player_name " подойди пожалуйста к " My_name)
           } else if (Result == "5") {
               addChatMessage("Вы скопировали координаты игрока {FFFFFF}" Player_name)
               Clipboard := Player_pos[0] Player_pos[1] Player_Pos[2]
           }
       }
    }
    return
    
    LineResult() {
    if (!isDialogOpen())
    return false
    if (getDialogStyle() = 0 || getDialogStyle() = 1 || getDialogStyle() = 3)
    return false
    while (!GetKeyState("LButton", "P") && !GetKeyState("Enter", "P") && !GetKeyState("Esc", "P"))
    continue
    if (GetKeyState("Enter", "P"))
    return getDialogLineNumber()
    else if (GetKeyState("Esc", "P"))
    return false
    else {
       KeyWait, LButton
       KeyWait, LButton, D T0.25
       if (ErrorLevel)
       return LineResult()
       else
       return getDialogLineNumber()
       }
    }
    
     
  19. Magov1733

    Magov1733 Участник

    Регистрация:
    24 окт 2018
    Сообщения:
    20
    Симпатии:
    0
    Играю на ARP, как указать строку в паспорте для проверки? к примеру надо проверить паспорт игрока на уровень розыска что бы выводилось в чате "имеется N уровень розыска." и т.п.
     
  20. [BASSN.O] DEDeCD

    [BASSN.O] DEDeCD Постоянный участник

    Регистрация:
    29 апр 2017
    Сообщения:
    68
    Симпатии:
    42
    Паспорт же в чате отображается?
    Регулярным выражением из строки. Подробно как вытащить из строки нужные нам числа - https://blast.hk/threads/31713/
     
  21. Azat

    Azat Новичок

    Регистрация:
    Вчера
    Сообщения:
    3
    Симпатии:
    0
    Кто поможет сделать AHK, типо на кик NonRP ников??
     
  22. Magov1733

    Magov1733 Участник

    Регистрация:
    24 окт 2018
    Сообщения:
    20
    Симпатии:
    0
    На advance rp паспорт переделали в диалоговое окно, как вытащить информацию из строки "Уровень розыска"?
     
  23. #darksoor

    #darksoor Знающий

    Регистрация:
    10 июл 2016
    Сообщения:
    237
    Симпатии:
    50
    getDialogText() - функция выводит весь текст из диалогов.

    Ещё тебе понадобится регулярное выражение.
     
  24. xdswd

    xdswd Участник

    Регистрация:
    22 дек 2018
    Сообщения:
    8
    Симпатии:
    1
    Как сделать чтобы при действии одной кнопки работала другая.
    К примеру:
    WheelUp (колесо мыши вверх) -- UP (стрелка вверх)
     
  25. James Hawk

    James Hawk Знающий

    Регистрация:
    1 сен 2016
    Сообщения:
    231
    Симпатии:
    53
    Один из вариантов
    WheelDown::
    WheelUp::
         SendInput, {up}
    Либо, если не сработает нажатие
    SendInput, {up down}
    sleep, 20
    SendInput, {up up}
     
  26. Максим Сафонов

    Регистрация:
    26 янв 2019
    Сообщения:
    1
    Симпатии:
    0
    Как сделать так чтобы при 900+ секунд в АФК игра закрывалась?