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

Nikey228

Новичок
1
0
Всем привет , помогите пожалуйста.
Надо код для самоудаление AHK файла при нажатии одной кнопки , и если это возможно то удаление сразу же его из корзины и последних файлов.
Еще надо что бы была менюшка скрипта , то есть после компилирования при нажатии на exe файл , открывалась менюшка с помощью которой можно было бы настроить назначение кнопок на разные скрипты в моем файле.

LAlt::
{
Тут типо мой код
}
return

Вот мне надо изменять назначение кнопок в данном случае это LALt через меню
 

TeOdooR

Новичок
24
1
На метку не отправляетесь при запуске, только в конце метки, она просто не запускаеться
Я переделал, но выполнение не стало автоматическим, т.е. выполнение бинда происходит только при зажатой клавише ctrl
Код:
!-::
PILINK:
Send, {Lctrl}
Sleep, 40
Goto, PILINK
 
Последнее редактирование:

Andy Safino

Участник
69
4
Что с кодом ребят, у меня даже когда розыск 0 отыгровки что человек будет арестован.
Код:
!1::
my_nick := getUsername()
my_nick := RegExReplace(my_nick, "_", " ")
sendchat("Добрый день, Вас беспокоит " my_nick "")
sleep 1000
sendchat("/do На груди висит жетон МВД.")
sleep 1000
sendchat("Предъявите Ваши документы, уверяю Вас, это обычная проверка.")
addChatMessage("{00CED1}[AHK] {FFFFFF}Скрипт {00CED1}ожидает{00CED1}, {FFFFFF}пока игрок покажет паспорт.")
loop
{
if (isDialogOpen() = 1)
{
var := RegExReplace(getDialogLine(10), "(.*):")
var := RegExReplace(var,"[\s+]")
if (var = 0) {
sleep 1000
sendchat("/me досконально изучил паспорт")
sleep 300
sendchat("/me сообщил диспечеру")
sleep 2000
sendchat("Спасибо за предоставление документов, можете быть свободны.")
var:=0
break
}
if (var >= 1) {
addChatMessage("{00CED1}[AHK] {FFFFFF}Игрок находится в розыске! Уровень розыска: {00CED1}" var ".")
sleep 2000
sendchat("/me получил сообщение от диспетчера о подозреваемом")
sleep 1000
sendchat("Вы находитесь в розыске и я должен Вас задержать. Пройдемте в машину!")
sleep 500
sendchat("В Ваших же интересах сделать это добровольно. В противном случае мы применим силу!")
var:=0
break
}
}
}
return
 

astynk

Известный
Проверенный
742
530
Из-за чего может не работать функция getPlayerNameById из samp udf? Всегда возвращает пустоту
Пробовал смотреть oScoreboardData, все поля заполняются верно (id, ping, score и т.д.), а вот ник нет.
 

darksoor

Известный
674
353
Что с кодом ребят, у меня даже когда розыск 0 отыгровки что человек будет арестован.
Код:
!1::
my_nick := getUsername()
my_nick := RegExReplace(my_nick, "_", " ")
sendchat("Добрый день, Вас беспокоит " my_nick "")
sleep 1000
sendchat("/do На груди висит жетон МВД.")
sleep 1000
sendchat("Предъявите Ваши документы, уверяю Вас, это обычная проверка.")
addChatMessage("{00CED1}[AHK] {FFFFFF}Скрипт {00CED1}ожидает{00CED1}, {FFFFFF}пока игрок покажет паспорт.")
loop
{
if (isDialogOpen() = 1)
{
var := RegExReplace(getDialogLine(10), "(.*):")
var := RegExReplace(var,"[\s+]")
if (var = 0) {
sleep 1000
sendchat("/me досконально изучил паспорт")
sleep 300
sendchat("/me сообщил диспечеру")
sleep 2000
sendchat("Спасибо за предоставление документов, можете быть свободны.")
var:=0
break
}
if (var >= 1) {
addChatMessage("{00CED1}[AHK] {FFFFFF}Игрок находится в розыске! Уровень розыска: {00CED1}" var ".")
sleep 2000
sendchat("/me получил сообщение от диспетчера о подозреваемом")
sleep 1000
sendchat("Вы находитесь в розыске и я должен Вас задержать. Пройдемте в машину!")
sleep 500
sendchat("В Ваших же интересах сделать это добровольно. В противном случае мы применим силу!")
var:=0
break
}
}
}
return
AutoHotKey:
!1::
my_nick := RegExReplace(getUsername(), "_", " ") ; сократил до одной строки
sendchat("Добрый день, Вас беспокоит " my_nick "")
sleep 1000
sendchat("/do На груди висит жетон МВД.")
sleep 1000
sendchat("Предъявите Ваши документы, уверяю Вас, это обычная проверка.")
addChatMessage("{00CED1}[AHK] {FFFFFF}Скрипт {00CED1}ожидает{00CED1}, {FFFFFF}пока игрок покажет паспорт.")
while (!isDialogOpen()) ; условие, если диалог закрыт, то продолжает ждать. isDialogOpen() - открыт, !isDialogOpen() - закрыт. Не нужно никаких равно 1 и прочей чуши.
Continue
Sleep, 300
RegExMatch(getDialogLine(10), "\{\w+\}Уровень розыска\:\s+\{\w+\}(\d)", var)
if (var1 == 0) ;Если в скобках, то знак сравнения двумя равно обозначается, без скобок - одним
{
sleep 1000
sendchat("/me досконально изучил паспорт")
sleep 300
sendchat("/me сообщил диспечеру")
sleep 2000
sendchat("Спасибо за предоставление документов, можете быть свободны.")
Return
}
if (var1 >= 1)
{
addChatMessage("{00CED1}[AHK] {FFFFFF}Игрок находится в розыске! Уровень розыска: {00CED1}" var1 ".")
sleep 2000
sendchat("/me получил сообщение от диспетчера о подозреваемом")
sleep 1000
sendchat("Вы находитесь в розыске и я должен Вас задержать. Пройдемте в машину!")
sleep 500
sendchat("В Ваших же интересах сделать это добровольно. В противном случае мы применим силу!")
Return
}
return

Из-за чего может не работать функция getPlayerNameById из samp udf? Всегда возвращает пустоту
Пробовал смотреть oScoreboardData, все поля заполняются верно (id, ping, score и т.д.), а вот ник нет.

Пример кода бы увидеть..
 

Andy Safino

Участник
69
4
AutoHotKey:
!1::
my_nick := RegExReplace(getUsername(), "_", " ") ; сократил до одной строки
sendchat("Добрый день, Вас беспокоит " my_nick "")
sleep 1000
sendchat("/do На груди висит жетон МВД.")
sleep 1000
sendchat("Предъявите Ваши документы, уверяю Вас, это обычная проверка.")
addChatMessage("{00CED1}[AHK] {FFFFFF}Скрипт {00CED1}ожидает{00CED1}, {FFFFFF}пока игрок покажет паспорт.")
while (!isDialogOpen()) ; условие, если диалог закрыт, то продолжает ждать. isDialogOpen() - открыт, !isDialogOpen() - закрыт. Не нужно никаких равно 1 и прочей чуши.
Continue
Sleep, 300
RegExMatch(getDialogLine(10), "\{\w+\}Уровень розыска\:\s+\{\w+\}(\d)", var)
if (var1 == 0) ;Если в скобках, то знак сравнения двумя равно обозначается, без скобок - одним
{
sleep 1000
sendchat("/me досконально изучил паспорт")
sleep 300
sendchat("/me сообщил диспечеру")
sleep 2000
sendchat("Спасибо за предоставление документов, можете быть свободны.")
Return
}
if (var1 >= 1)
{
addChatMessage("{00CED1}[AHK] {FFFFFF}Игрок находится в розыске! Уровень розыска: {00CED1}" var1 ".")
sleep 2000
sendchat("/me получил сообщение от диспетчера о подозреваемом")
sleep 1000
sendchat("Вы находитесь в розыске и я должен Вас задержать. Пройдемте в машину!")
sleep 500
sendchat("В Ваших же интересах сделать это добровольно. В противном случае мы применим силу!")
Return
}
return



Пример кода бы увидеть..
Благодарю, можешь помочь с кодом по типу "Скрипт ждёт Вашего решения: Y или N" если Y то одно действия, если N - другое. Зарание благодарю.
 

darksoor

Известный
674
353
Благодарю, можешь помочь с кодом по типу "Скрипт ждёт Вашего решения: Y или N" если Y то одно действия, если N - другое. Зарание благодарю.
AutoHotKey:
while (!GetKeyState("Y", "P") && !GetKeyState("N", "P"))
   Continue
if (GetKeyState("Y", "P"))
{
   AddChatMessage("Вы нажали Y")
}
if (GetKeyState("N", "P"))
{
   AddChatMessage("Вы нажали N")
}
 
  • Нравится
Реакции: Andy Safino

Andy Safino

Участник
69
4
AutoHotKey:
while (!GetKeyState("Y", "P") && !GetKeyState("N", "P"))
   Continue
if (GetKeyState("Y", "P"))
{
   AddChatMessage("Вы нажали Y")
}
if (GetKeyState("N", "P"))
{
   AddChatMessage("Вы нажали N")
}
Вот посмотри полный код, у меня он как то делает всё сразу:
Код:
:?:/sob::
ShowDialog(2, "Собеседования", "Приветствия/Проверка документов`nТесты", "Ок")
Result := LineResult()
if (!Result)
    return
Gosub, Sob%Result%
return
Sob1:
SendMessage, 0x50,, 0x4190419,, A
sleep 250
sendchat("Приветствую, не желаете пройти собеседования?")
addChatMessage("{00CED1}[Helper for Leaders] {FFFFFF}Скрипт {00CED1}ожидает{00CED1}, {FFFFFF}пока игрок ответит на вопрос.")
Loop
{
    If(!isDialogOpen()) {
        GetChatLine(0, out)
        If(RegExMatch(out, "Да|да|Так точно|так точно|Хотелось бы|хотелось бы|Да, я на собеседование|да, я на собеседование")) {
            sleep 250
            sendchat("Хорошо, предъявите Ваш паспорт и лицензии для ознакомления.")
            addChatMessage("{00CED1}[Helper for Leaders] {FFFFFF}Скрипт {00CED1}ожидает{00CED1}, {FFFFFF}пока игрок покажет паспорт.")
            while (!isDialogOpen())
            Continue
            Sleep, 300
            RegExMatch(getDialogLine(2), "\{\w+\}Проживания в стране (лет)\:\s+\{\w+\}(\d)", var)
            if (var1 == 1)
            {
            sleep 1000
            sendchat("/me досконально изучил паспорт")
            sleep 300
            sendchat("Сэр, к сожелению Вы нам не подходите в ряды Министерства.")
            sleep 870
            sendchat("Мало лет проживания в штате, требовательное количество - 4 года.")   
            Return
            }
            if (var1 >= 4)
            {
            sleep 1000
            sendchat("/me досконально изучил паспорт")
            sleep 1000
            sendchat("Хорошо, я просмотрел Ваши документы, всё в порядке.")
            sleep 500
            sendchat("/me вернул паспорт и лицензии человеку на против")
            return
            break
        }
    }
}
}
return
Sob2:
SendMessage, 0x50,, 0x4190419,, A
sleep 250
sendchat("Хорошо, тут разобрались, идём дальше.")
sleep 870
sendchat("/do В правой руке папка с тестами.")
sleep 870
sendchat("/me передал папку с тестами человеку на против")
sleep 870
sendchat("/n МГ СК ДБ в смс на номер 20-29")
sleep 870
sendchat("Заполняйте, я пока Вас проверю на наличие в Чёрном Списке Министерства.")
addChatMessage("{00CED1}[AHK] {FFFFFF}Проверить человека на {00CED1}Чёрный Список Министерства{00CED1}? {FFFFFF}Y - {00CED1}Да; {FFFFFF}N - {00CED1}Нет")
while (!GetKeyState("Y", "P") && !GetKeyState("N", "P"))
   Continue
if (GetKeyState("Y", "P"))
{
   AddChatMessage("{00CED1}[Helper for Leaders] - {FFFFFF}Не доработано.")
}
if (GetKeyState("N", "P"))
{
   return
}
return
 

darksoor

Известный
674
353
Вот посмотри полный код, у меня он как то делает всё сразу:
Код:
:?:/sob::
ShowDialog(2, "Собеседования", "Приветствия/Проверка документов`nТесты", "Ок")
Result := LineResult()
if (!Result)
    return
Gosub, Sob%Result%
return
Sob1:
SendMessage, 0x50,, 0x4190419,, A
sleep 250
sendchat("Приветствую, не желаете пройти собеседования?")
addChatMessage("{00CED1}[Helper for Leaders] {FFFFFF}Скрипт {00CED1}ожидает{00CED1}, {FFFFFF}пока игрок ответит на вопрос.")
Loop
{
    If(!isDialogOpen()) {
        GetChatLine(0, out)
        If(RegExMatch(out, "Да|да|Так точно|так точно|Хотелось бы|хотелось бы|Да, я на собеседование|да, я на собеседование")) {
            sleep 250
            sendchat("Хорошо, предъявите Ваш паспорт и лицензии для ознакомления.")
            addChatMessage("{00CED1}[Helper for Leaders] {FFFFFF}Скрипт {00CED1}ожидает{00CED1}, {FFFFFF}пока игрок покажет паспорт.")
            while (!isDialogOpen())
            Continue
            Sleep, 300
            RegExMatch(getDialogLine(2), "\{\w+\}Проживания в стране (лет)\:\s+\{\w+\}(\d)", var)
            if (var1 == 1)
            {
            sleep 1000
            sendchat("/me досконально изучил паспорт")
            sleep 300
            sendchat("Сэр, к сожелению Вы нам не подходите в ряды Министерства.")
            sleep 870
            sendchat("Мало лет проживания в штате, требовательное количество - 4 года.")  
            Return
            }
            if (var1 >= 4)
            {
            sleep 1000
            sendchat("/me досконально изучил паспорт")
            sleep 1000
            sendchat("Хорошо, я просмотрел Ваши документы, всё в порядке.")
            sleep 500
            sendchat("/me вернул паспорт и лицензии человеку на против")
            return
            break
        }
    }
}
}
return
Sob2:
SendMessage, 0x50,, 0x4190419,, A
sleep 250
sendchat("Хорошо, тут разобрались, идём дальше.")
sleep 870
sendchat("/do В правой руке папка с тестами.")
sleep 870
sendchat("/me передал папку с тестами человеку на против")
sleep 870
sendchat("/n МГ СК ДБ в смс на номер 20-29")
sleep 870
sendchat("Заполняйте, я пока Вас проверю на наличие в Чёрном Списке Министерства.")
addChatMessage("{00CED1}[AHK] {FFFFFF}Проверить человека на {00CED1}Чёрный Список Министерства{00CED1}? {FFFFFF}Y - {00CED1}Да; {FFFFFF}N - {00CED1}Нет")
while (!GetKeyState("Y", "P") && !GetKeyState("N", "P"))
   Continue
if (GetKeyState("Y", "P"))
{
   AddChatMessage("{00CED1}[Helper for Leaders] - {FFFFFF}Не доработано.")
}
if (GetKeyState("N", "P"))
{
   return
}
return

Где именно? Что все делает?
 

Andy Safino

Участник
69
4
Где именно? Что все делает?
Как только ввожу команду и Выбираю - Приветствие / Проверка документов, он сразу же говорит - Приветствую, не желаете пройти собеседования? и в этот же момент - Хорошо, предъявите Ваш паспорт и лицензии для ознакомления. не считывая слова описанные в контаинсе с функцией чекать надпись от человека, далее сразу же пишет что ожидает документов а когда человек показывает документы не считывая ЛВЛ игрока и если он равен 4 и больше он должен пройти дальше, а если меньше 4 то отказать, но у меня этого уже нету.
 

darksoor

Известный
674
353
Как только ввожу команду и Выбираю - Приветствие / Проверка документов, он сразу же говорит - Приветствую, не желаете пройти собеседования? и в этот же момент - Хорошо, предъявите Ваш паспорт и лицензии для ознакомления. не считывая слова описанные в контаинсе с функцией чекать надпись от человека, далее сразу же пишет что ожидает документов а когда человек показывает документы не считывая ЛВЛ игрока и если он равен 4 и больше он должен пройти дальше, а если меньше 4 то отказать, но у меня этого уже нету.

Давай бегло пробежимся по твоему коду.
1. Это просто бесполезная строчка, если ты не используешь Send/SendInput
AutoHotKey:
SendMessage, 0x50,, 0x4190419,, A

2. Цикл построен совершенно нелепо.
AutoHotKey:
Loop {
   if (RegExMatch(getChatLineEx(), "Да|да|Так точно|так точно|Хотелось бы|хотелось бы|Да, я на собеседование|да, я на собеседование", out)) { ;возможно тут будет ошибка, точно не помню уже, как использовать getChatLineEx, нет компьютера под рукой
      break
      }
}
;Дальнейший код

3. Зачем тебе считывать то, что сказал человек? Он может говорить совсем иначе, и слово "Да" может сказать совсем иной человек. Проверка эта полный бред, как по мне.

Надеюсь помог.
 

darksoor

Известный
674
353
Код:
#Include samp_udf.ahk

NumPad1::
    addChatMessage( getPlayerNameById(25) ) ; пусто
    addChatMessage( oScoreboardData[25].NAME ) ; пусто
    addChatMessage( oScoreboardData[25].PING ) ; выводит пинг, другие поля тоже работают кроме NAME
    return
AutoHotKey:
addChatMessage(getPlayerNameById(25))
Выводит все отлично, видимо где ты проверяешь, 25 ID просто не подключен.
 

RellaX

Известный
80
9
В общем, есть функция:
PHP:
lovim:
FileRead, Chatlog, %A_MyDocuments%\GTA San Andreas User Files\SAMP\chatlog.txt
if (RegExMatch(Chatlog, "`r`n\Q[" A_Hour ":" A_Min ":" A_Sec "]  Не флуди!\E"))
{
    ...
}
Return
Но я хочу, чтобы задействовались 2 строки вместе с timestamp (Типа так не рубит):
PHP:
lovim:
FileRead, Chatlog, %A_MyDocuments%\GTA San Andreas User Files\SAMP\chatlog.txt
if (RegExMatch(Chatlog, "`r`n\Q[" A_Hour ":" A_Min ":" A_Sec "]  Не флуди!\E`r`n\Q[" A_Hour ":" A_Min ":" A_Sec "]  Не флуди!\E"))
{
    ...
}
Return
Не догоняю крч, хелп