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

HURACAN

Известный
42
3
Ребят, подскажите, пожалуйста, с помощью АХК можно вообще перемещаться по заданным координатам или нет? В SAMP UDF я нашел только проверку координат, но не могу найти как же двигаться по заданным координатам?
SAMP UDF:
setCoordinates(x, y, z, Interior) ; Телепорт персонажа
 

lopassss

Новичок
1
0
Как это сделать, когда вы видите текст "pranešta žinutė" nick[ID]:
сделанный в чате {f6} / mute 'id или nick' 3600 / report {enter}
 

Andy Safino

Участник
69
4
Как сложить скрипт , чтобы при отправлении команды - /add NickName, ник игрока заносился в !3:: диалог?
 

darksoor

Известный
674
353
Как сложить скрипт , чтобы при отправлении команды - /add NickName, ник игрока заносился в !3:: диалог?

Поподробнее бы.
Как я понял, попробуй сделать так: после ввода команды создать глобальную переменную:
AutoHotKey:
if (RegExMatch(chatInput, "^/add ([A-z_]+)", var)) {
   global NickName := var1
   Return
}
 

Andy Safino

Участник
69
4
Поподробнее бы.
Как я понял, попробуй сделать так: после ввода команды создать глобальную переменную:
AutoHotKey:
if (RegExMatch(chatInput, "^/add ([A-z_]+)", var)) {
   global NickName := var1
   Return
}
Поподробней: Я пишу команду /add NickName - это первая команда. Второе это сочитание клавиш допустим !3:: - это будет диалог в котором будет текст того ника, который ты ввёл в той команде. Как-то так:
Код:
if (RegExMatch(chatInput, "^/add ([A-z_]+)", var)) {
   global NickName := var1
   Return
}
!3::
showDialog(2, "Диалог", NickName, "Cancel")
return
 

darksoor

Известный
674
353
Поподробней: Я пишу команду /add NickName - это первая команда. Второе это сочитание клавиш допустим !3:: - это будет диалог в котором будет текст того ника, который ты ввёл в той команде. Как-то так:
Код:
if (RegExMatch(chatInput, "^/add ([A-z_]+)", var)) {
   global NickName := var1
   Return
}
!3::
showDialog(2, "Диалог", NickName, "Cancel")
return

AutoHotKey:
$~NumpadEnter::
$~Enter::
if (isInChat() and !isDialogOpen())
{
    sleep 250
    chatInput := readString(hGTA, dwSAMP + 0x12D8F8, 256)
    if (RegExMatch(chatInput, "^/add ([A-z_]+)", var)) 
    {
        global NickName := var1
        addChatMessageEx("{228B22}", "[AHK] {F5F5DC} Скрипт сохранил введённые данные - {FFFF00}" NickName)
        Return
    }
}
return

!3::
showDialog(2, "Диалог", NickName, "Cancel")
return
 

Andy Safino

Участник
69
4
AutoHotKey:
$~NumpadEnter::
$~Enter::
if (isInChat() and !isDialogOpen())
{
    sleep 250
    chatInput := readString(hGTA, dwSAMP + 0x12D8F8, 256)
    if (RegExMatch(chatInput, "^/add ([A-z_]+)", var))
    {
        global NickName := var1
        addChatMessageEx("{228B22}", "[AHK] {F5F5DC} Скрипт сохранил введённые данные - {FFFF00}" NickName)
        Return
    }
}
return

!3::
showDialog(2, "Диалог", NickName, "Cancel")
return
При вводе команды /adnick Andy_Safino - не выводит текст "Скрипт сохранил введённые данные" и в диалоге пусто.
 

astynk

Известный
Проверенный
742
530
Убирается пробел в конце строчки при SendInput, как устранить? Т.е. я пишу

Код:
SendInput {f6}blabla ; <-- В КОНЦЕ ПРОБЕЛ
(мне нужно именно так, без нажатия энтера)

И отправляется просто "blabla", а не "blabla "
 

darksoor

Известный
674
353
Убирается пробел в конце строчки при SendInput, как устранить? Т.е. я пишу

Код:
SendInput {f6}blabla ; <-- В КОНЦЕ ПРОБЕЛ
(мне нужно именно так, без нажатия энтера)

И отправляется просто "blabla", а не "blabla "
AutoHotKey:
SendInput,{F6}blabla{space}

Как сделать чтобы было несколько ников а не один поочерёдно?
Если хочешь, чтобы после перезапуска скрипта ники сохранялись, то сделать так:
AutoHotKey:
$~NumpadEnter::
$~Enter::
if (isInChat() and !isDialogOpen())
{
    sleep 250
    chatInput := readString(hGTA, dwSAMP + 0x12D8F8, 256)
    if (RegExMatch(chatInput, "^/add ([A-z_]+)", var))
    {
        FileAppend, %var1%`n, %A_ScriptDir%\NickName.txt
        addChatMessageEx("{228B22}", "[AHK] {F5F5DC} Скрипт сохранил введённые данные - {FFFF00}" var1)
        Return
    }
}
return

!3::
FileRead, NickName, %A_ScriptDir%\NickName.txt
showDialog(2, "Диалог", NickName, "Cancel")
return
 

Alex_Cmd

Новичок
5
0
Проблема возникла, ищу ответ уже на протяжении 3-4 дней... К сожалению, всё тщетно...
В общем, пытаюсь сделать постоянный автоматический ответ на строку в чате "Приветствуем нового игрока нашего сервера: (Nick_Name)[ID]"
Пути указывал, получился следующий код:
Код:
way = %A_MyDocuments%\GTA San Andreas User Files\SAMP\chatlog.txt

!1::
FileDelete, %way%
Loop
{
   FileRead, file, %way%
   IfInString, file, ]: Приветствуем нового игрока нашего сервера: (.*)_(.*)\[(.*)\]
   {
    RegExMatch(file, "\w*\[([0-9]*)\]: Приветствуем нового игрока нашего сервера: (.*)_(.*)\[(.*)\]", var)
    SendInput, {f6}/pm %var1%  Доброе время суток, поздравляем с регистрацией на нашем сервере.{enter}
    FileDelete, %way%
   }
}
return

Но ничего просто-напросто не подходит, прошу помочь...
 

darksoor

Известный
674
353
Проблема возникла, ищу ответ уже на протяжении 3-4 дней... К сожалению, всё тщетно...
В общем, пытаюсь сделать постоянный автоматический ответ на строку в чате "Приветствуем нового игрока нашего сервера: (Nick_Name)[ID]"
Пути указывал, получился следующий код:
Код:
way = %A_MyDocuments%\GTA San Andreas User Files\SAMP\chatlog.txt

!1::
FileDelete, %way%
Loop
{
   FileRead, file, %way%
   IfInString, file, ]: Приветствуем нового игрока нашего сервера: (.*)_(.*)\[(.*)\]
   {
    RegExMatch(file, "\w*\[([0-9]*)\]: Приветствуем нового игрока нашего сервера: (.*)_(.*)\[(.*)\]", var)
    SendInput, {f6}/pm %var1%  Доброе время суток, поздравляем с регистрацией на нашем сервере.{enter}
    FileDelete, %way%
   }
}
return

Но ничего просто-напросто не подходит, прошу помочь...
Активация/деактивация скрипта - F2. Да и есть готовый пример чтения чата. А в твоём коде ошибка такова, что в IfInString у тебя регулярка (регулярка должна быть в регулярке, тобишь в RegExMatch).
AutoHotKey:
if (A_IsAdmin = false) {
    Run *RunAs "%A_ScriptFullPath%" ,, UseErrorLevel
}
#NoEnv
#SingleInstance force
save(chatlog) {
    static logschat := A_MyDocuments "\GTA San Andreas User Files\SAMP\ChatLogs"
    static chat := A_MyDocuments "\GTA San Andreas User Files\SAMP\chatlog.txt"
    FileCreateDir, % logschat A_MM "-" A_YYYY
    FileAppend, % chatlog, % logschat A_MM "-" A_YYYY "\" A_DD "." A_MM "." A_YYYY ".txt"
    FileDelete, % chat
    return
}

global file_chat := A_MyDocuments "\GTA San Andreas User Files\SAMP\chatlog.txt"

~F2::
SS := !SS
SetTimer, Chat, % (SS ? "50" : "off")
Return

Chat() {
    FileRead, chatlog, % file_chat

    if (RegExMatch(chatlog, "Приветствуем нового игрока нашего сервера\:\s([A-z_]+)\[(\d{1,3})\]", var)) ;var1 - ник, var2 - id
    {
        save(chatlog)
        SendMessage, 0x50,, 0x4190419,, A
        SendInput, {f6}/pm %var2% Доброе время суток, поздравляем с регистрацией на нашем сервере.{enter}
        return
    }
}
 

Alex_Cmd

Новичок
5
0
Активация/деактивация скрипта - F2. Да и есть готовый пример чтения чата. А в твоём коде ошибка такова, что в IfInString у тебя регулярка (регулярка должна быть в регулярке, тобишь в RegExMatch).
AutoHotKey:
if (A_IsAdmin = false) {
    Run *RunAs "%A_ScriptFullPath%" ,, UseErrorLevel
}
#NoEnv
#SingleInstance force
save(chatlog) {
    static logschat := A_MyDocuments "\GTA San Andreas User Files\SAMP\ChatLogs"
    static chat := A_MyDocuments "\GTA San Andreas User Files\SAMP\chatlog.txt"
    FileCreateDir, % logschat A_MM "-" A_YYYY
    FileAppend, % chatlog, % logschat A_MM "-" A_YYYY "\" A_DD "." A_MM "." A_YYYY ".txt"
    FileDelete, % chat
    return
}

global file_chat := A_MyDocuments "\GTA San Andreas User Files\SAMP\chatlog.txt"

~F2::
SS := !SS
SetTimer, Chat, % (SS ? "50" : "off")
Return

Chat() {
    FileRead, chatlog, % file_chat

    if (RegExMatch(chatlog, "Приветствуем нового игрока нашего сервера\:\s([A-z_]+)\[(\d{1,3})\]", var)) ;var1 - ник, var2 - id
    {
        save(chatlog)
        SendMessage, 0x50,, 0x4190419,, A
        SendInput, {f6}/pm %var2% Доброе время суток, поздравляем с регистрацией на нашем сервере.{enter}
        return
    }
}
Увы, но не работает, просто напросто ничего не происходит, когда появляется строка. Сам скрипт активировал.