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

Pakulichev

Software Developer & System Administrator
Друг
1,789
2,130
Добрый день, кто может подсказать по следующему вопросу?
Есть функция:

Код:
ChatInput()
{
if !isInChat()
return ""
While isInChat()
dwAddress := dwSAMP + 0x12D8F8
chatInput := readString(hGTA, dwAddress, 256)
return chatInput
}

Ниже идет активация по клавише Enter, после чего условия.
Вот пример:

Код:
$~Enter::
if isDialogOpen()
return
else
chatInput := StrSplit(ChatInput(), A_Space)
if (ChatInput[1] = "") or !(IsSAMPAvailable())
return
if (ChatInput[1] = "/test")
{
AddChatMessageEx("FF0000", "Красненький текст")
Return
}
if (ChatInput[1] = "/test2")
{
AddChatMessageEx("FFFF00", "Желтенький текст")
Return
}

Вопрос в следующем, почему команды работают через раз (могут и через десять)?
Может кто чего посоветует.

Какая именно команда и? для чего
Могу помочь, отпиши в личку, решим.
 
Последнее редактирование модератором:

RTD

Нестандартное звание
Модератор
391
413
Добрый день, кто может подсказать по следующему вопросу?
Есть функция:

Код:
ChatInput()
{
if !isInChat()
return ""
While isInChat()
dwAddress := dwSAMP + 0x12D8F8
chatInput := readString(hGTA, dwAddress, 256)
return chatInput
}

Ниже идет активация по клавише Enter, после чего условия.
Вот пример:

Код:
$~Enter::
if isDialogOpen()
return
else
chatInput := StrSplit(ChatInput(), A_Space)
if (ChatInput[1] = "") or !(IsSAMPAvailable())
return
if (ChatInput[1] = "/test")
{
AddChatMessageEx("FF0000", "Красненький текст")
Return
}
if (ChatInput[1] = "/test2")
{
AddChatMessageEx("FFFF00", "Желтенький текст")
Return
}

Вопрос в следующем, почему команды работают через раз (могут и через десять)?
Может кто чего посоветует.
Не усложняй себе жизнь этими нубо-функами.
AutoHotKey:
$~Enter:: 
if (isInChat() && !isDialogOpen()) {
    Sleep 200
    chatInput := readString(hGTA, dwSAMP + 0x12D8F8, 256)
    if (chatInput = "/тест") { ; Просто команда
        addChatMessageEx("FF0000", "Красненький текст")
    }else if (RegExMatch(chatInput, "^\/тест2\s(.*)", value)) { ; С параметрами
        addChatMessageEx("FFFF00", "Желтенький текст с параметром " value1)
    }
}
return
 

Dushmas

Новичок
2
0
Здравствуйте, я в AHK полный 0. Если кто может, пожалуйста, скиньте код с функцией диалогового окна (ID диалогового окна 1) . Когда я прописываю в окне ID игрока, игроку показывался мой паспорт, лицензии и т.д. Кто может пожалуйста сделать? Буду благодарен
 

RTD

Нестандартное звание
Модератор
391
413
Здравствуйте, я в AHK полный 0. Если кто может, пожалуйста, скиньте код с функцией диалогового окна (ID диалогового окна 1) . Когда я прописываю в окне ID игрока, игроку показывался мой паспорт, лицензии и т.д. Кто может пожалуйста сделать? Буду благодарен
SAMP UDF не забудь подключить
AutoHotKey:
!1::
addChatMessageEx(0xBDBDBD, "Для того что бы показать документы игроку - нацельтесь на него")
KeyWait, RButton, D
Sleep 300
id := getIdByPed(getTargetPed())
ArrayToSendChat(["/pass " id, "/lic " id, "/med " id, "/skill " id], 1500)
return
ArrayToSendChat(array, wait) {
    for i, e in array
    {
        SendChat(e)
        Sleep %wait%
    }
}
 

Pakulichev

Software Developer & System Administrator
Друг
1,789
2,130
Не усложняй себе жизнь этими нубо-функами.
AutoHotKey:
$~Enter::
if (isInChat() && !isDialogOpen()) {
    Sleep 200
    chatInput := readString(hGTA, dwSAMP + 0x12D8F8, 256)
    if (chatInput = "/тест") { ; Просто команда
        addChatMessageEx("FF0000", "Красненький текст")
    }else if (RegExMatch(chatInput, "^\/тест2\s(.*)", value)) { ; С параметрами
        addChatMessageEx("FFFF00", "Желтенький текст с параметром " value1)
    }
}
return
А если требуется больше одного параметра?
 

Pakulichev

Software Developer & System Administrator
Друг
1,789
2,130
C++:
RegExMacth(chatInput, "^\/test\s(.*)\s(.*)", value) ; value1 - первый параметр, value2 - второй параметр
Аналогично можно продолжить цепочку дальше
Спасибо.

C++:
RegExMacth(chatInput, "^\/test\s(.*)\s(.*)", value) ; value1 - первый параметр, value2 - второй параметр
Аналогично можно продолжить цепочку дальше
Не работает ваша магия. Приведу пример:
Код:
if (RegExMatch(chatInput, "^\/rto\s(.*)\s(.*)", value)) { ; value1 - должно быть ID, а value2 - сообщение.
В итоге мы всё равно в value2 получаем только последнее слово. То есть если ты ввел: /rto 228 Проверка связи, то мы получим value1 - 228, а value2 - связи.
Как решать, что делать?
 
Последнее редактирование модератором:

RTD

Нестандартное звание
Модератор
391
413
Не работает ваша магия. Приведу пример:
Код:
if (RegExMatch(chatInput, "^\/rto\s(.*)\s(.*)", value)) { ; value1 - должно быть ID, а value2 - сообщение.
В итоге мы всё равно в value2 получаем только последнее слово. То есть если ты ввел: /rto 228 Проверка связи, то мы получим value1 - 228, а value2 - связи.
Как решать, что делать?
Код:
^\/rto\s(\d+)\s(.*)
 
  • Нравится
Реакции: Cesar Ballard

ШPEK

Известный
1,476
524
Как сделать диалоговое окно с пунктами после нажатия на них чтобы выводилась отыгровка
 

Andrej_Major

Новичок
5
0
Подскажите как плюсовать даты в AHK допустим сегодня у нас 21.11.2017 к примеру текст что бы моно автоматом посчитало 2/3 дня приходите 23.11.2017
 

Dushmas

Новичок
2
0
Здравствуйте, я в ahk полный 0. Кто может, напишете пожалуйста код времени. Я имею ввиду то, например пишу" /c time" и в чат пишет через /do или /me время.
 

Tanaka

Участник
41
10
Здравствуйте, я в ahk полный 0. Кто может, напишете пожалуйста код времени. Я имею ввиду то, например пишу" /c time" и в чат пишет через /do или /me время.
не забудь подключить SAMP UDF
C++:
$~Enter::
if (isInChat() && !isDialogOpen()) {
    Sleep 200
    chatInput := readString(hGTA, dwSAMP + 0x12D8F8, 256)
    if (chatInput = "/c time") { ; Просто команда
        sendChat("/do Время на часах " A_Hour ":" A_Min ":" A_Sec)
    }
}
return
 

Tiva

Известный
76
1
Как сделать так чтобы когда я писали в чат Привет/Добрый вечер/Добрый день/Доброе утро/Здравствуйте. В ответ писал текст?