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

madrasso

Потрачен
883
324
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
М.. я понял в чём проблема. В Самом УДФ строка номер 2762. Вот на неё жалуется. Чё делать?
Проверь еще раз чтоб UDF был в одной папке и название соответствовать тому что ты указал в include

Функция isinchat дублируется

У меня не большой вопрос с chatlog, уже во всём разобрался, остался он и координаты.
Как правильнее мне запрограммировать код, который после команды, ну пускай это будет - /arrest, будет сохранять имя преступника, время и дату ареста(если возможно) в отдельном txt файле?.
Код:
$~Enter::
if (isInChat() && !isDialogOpen())
Sleep 200
dwAddress := dwSAMP + 0x12D8F8
chatInput := readString(hGTA, dwAddress, 256)
{
if(RegExMatch(chatInput, "^/arrest"))
    {
    if(RegExMatch(chatInput, "^/arrest (\d{1,3}) (.*)", info))
        {
            ArrayToSendChat(["/me сунул руку в карман за КПК, после чего схватив его рукой достал его" ,"/me нажав на кнопку разблокирования зашёл в базу данных Прав-во","/me пролистал и нашёл нужного сотрудника, после чего нажал на него и удалил из базы данных Прав-во","/uninvite " info1 " "])
        }
    else addChatMessage("{0070ba}[AHK] {bdbdbd}Используйте: {FFFFFF}/uninvite [id] [причина]")
}
}
Пример:
127 - Lerry Lacrossi
./uninvite 127 По собственному желанию
после отыгровки в txt появляются данные:
Уволенные: Lerry Lacrossi | По собственному желанию | 31.07.2018, 12:36:33​


AutoHotKey:
$~Enter::
if (isInChat() && !isDialogOpen())
{
    Sleep 200
    dwAddress := dwSAMP + 0x12D8F8
    chatInput := readString(hGTA, dwAddress, 256)
    if(RegExMatch(chatInput, "^/arrest"))
    {
        if(RegExMatch(chatInput, "^/arrest (\d{1,3}) (.*)", info))
        {
            ArrayToSendChat(["/me сунул руку в карман за КПК, после чего схватив его рукой достал его" ,"/me нажав на кнопку разблокирования зашёл в базу данных Прав-во","/me пролистал и нашёл нужного сотрудника, после чего нажал на него и удалил из базы данных Прав-во","/uninvite " info1 " "])
            nick := getPlayerNameById(info1)
            nick := RegExReplace(nick, "_", " ")
            FileAppend, Уволенные: %nick% | %info2% | %A_DD%.%A_MM%.%A_Year%`, %A_Hour%.%A_Min%.%A_Sec%, %A_ScriptDir%/test.txt
        }
        else addChatMessage("{0070ba}[AHK] {bdbdbd}Используйте: {FFFFFF}/uninvite [id] [причина]")
    }
}
return

Нужен AHK script который зажимает клавишу W ,а через 15 минут он ее отпускает и нажимает клавишу S на 15 секунд, потом клавишу S тоже отпускает. И чтоб все это было бесконечно. Заранее спасибо


AutoHotKey:
F1::
Loop,
{
    SendInput, {w down}
    Sleep, 900000
    SendInput, {w up}
    SendInput, {s down}
    Sleep, 15000
    SendInput, {s up}
}
return
 
Последнее редактирование модератором:

Andy Safino

Участник
69
4
Madrasso, братан, я благодарен тебе за Append, но пожалую добавлю условия создания txt. У меня вопрос по координатам, если шаришь. Например человек докладывает на посту.
./r [ПА] Докладывает %name% %%surname% | Пост: %post% | Состояние: код-1.
Вот именно сама переменная пост должна обозначать то местоположение человека, где он стоит.
Если на КПП то система по координатам должна определять пост - КПП и так далее.
Можешь мне помочь в этом деле, а вместо координат вписать мне где должен быть x, где y, а где z. Зарание благодарен тебе.
 

madrasso

Потрачен
883
324
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Madrasso, братан, я благодарен тебе за Append, но пожалую добавлю условия создания txt. У меня вопрос по координатам, если шаришь. Например человек докладывает на посту.
./r [ПА] Докладывает %name% %%surname% | Пост: %post% | Состояние: код-1.
Вот именно сама переменная пост должна обозначать то местоположение человека, где он стоит.
Если на КПП то система по координатам должна определять пост - КПП и так далее.
Можешь мне помочь в этом деле, а вместо координат вписать мне где должен быть x, где y, а где z. Зарание благодарен тебе.


Перед докладом делаешь проверку на нахождение игрока в указанных координатах и если он находится в этих координатах присваиваешь переменной название местонахождения, либо делаешь отдельно в функции.
AutoHotKey:
if (IsPlayerInRangeOfPoint(X, Y, Z, Тут радиус КПП))
    post := "КПП"
else if (IsPlayerInRangeOfPoint(X, Y, Z, радиус хз чего))
    post := "ХЗ"
else if (IsPlayerInRangeOfPoint(X, Y, Z, радиус хз2))
    post := "ХЗ2"
sendchat("/r [ПА] Докладывает " name " " surname " | Пост: " post " | Состояние: код-1.")
 

Andy Safino

Участник
69
4
Да , спасибо, настроил под себя уже)
Вопросы у меня исчерпываются и остался последний. Вот смотри. У меня есть АХК на проверку паспорта.
/pas [1 - предложить показать паспорт, 2 - проверка на уровень розыска.]
Я написал код на проверку строчки: "Уровень розыска"
Код:
if (isDialogOpen() = 1) ; Если диалог открыт, то
{
Dtext:=getDialogText()
RegExMatch(Dtext, "Уровень розыска:(.*)\n", out)
RegExMatch(out1, "[0-6]+", roz)
sendchat("бла бла бла")
sendchat("отыгровка....)
Можешь мне помочь в его усовершенствовании.. Мне надо отрегулировать систему так, чтобы она действовала следующим способом:
Когда ты пишешь команду - /pas 1, идёт отыгровка:
Здравствуйте, я сотрудник бла-бла-бла, бла-бла-бла.
Предъявите Ваши документы.
Тогда, когда он мне предъявил паспорт я прописую - /pas 2 и система методом " RegExMatch " определяет розыск. Если уровень розыска - 0, идёт отыгровка вернул паспорт, спасибо за предоставление. Если система нашла розыск, а именно - 1-6 уровней розыска. То идёт отыгровка следующим образом:
/me достал КПК
/me зашёл в базу данных МВД
/me нашёл фоторобот преступника
и тд.
Спасибо что помогал и помогаешь, ты лучший :*
 

madrasso

Потрачен
883
324
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Да , спасибо, настроил под себя уже)
Вопросы у меня исчерпываются и остался последний. Вот смотри. У меня есть АХК на проверку паспорта.
/pas [1 - предложить показать паспорт, 2 - проверка на уровень розыска.]
Я написал код на проверку строчки: "Уровень розыска"
Код:
if (isDialogOpen() = 1) ; Если диалог открыт, то
{
Dtext:=getDialogText()
RegExMatch(Dtext, "Уровень розыска:(.*)\n", out)
RegExMatch(out1, "[0-6]+", roz)
sendchat("бла бла бла")
sendchat("отыгровка....)
Можешь мне помочь в его усовершенствовании.. Мне надо отрегулировать систему так, чтобы она действовала следующим способом:
Когда ты пишешь команду - /pas 1, идёт отыгровка:
Здравствуйте, я сотрудник бла-бла-бла, бла-бла-бла.
Предъявите Ваши документы.
Тогда, когда он мне предъявил паспорт я прописую - /pas 2 и система методом " RegExMatch " определяет розыск. Если уровень розыска - 0, идёт отыгровка вернул паспорт, спасибо за предоставление. Если система нашла розыск, а именно - 1-6 уровней розыска. То идёт отыгровка следующим образом:
/me достал КПК
/me зашёл в базу данных МВД
/me нашёл фоторобот преступника
и тд.
Спасибо что помогал и помогаешь, ты лучший :*
Дай полный код команды, мне лень по новому писать :)
 
  • Нравится
Реакции: Andy Safino

Andy Safino

Участник
69
4
Дай полный код команды, мне лень по новому писать :)
Код:
~enter::
if (isInChat() = 1)
{
sleep, 200
dwAddress := dwSAMP + 0x12D8F8
chat := readString(hGTA, dwAddress, 256)
if (chat == "/pas") ; 
{
Dtext:=getDialogText() 
RegExMatch(Dtext, "Уровень розыска:(.*)\n", out) 
RegExMatch(out1, "[0-6]+", roz) 
sendchat("бла бла бла, отыгровка)
addChatMessage("{ffffff}Игрок в розыске!")
return
}
if (isDialogOpen() = 0) ; Если диалог закрыт, то
{
goto, back    
}
}
}
return
На самом деле это то, чему я обучился за утро, и написал. Я про сам код,может я что то не так написал и попросил помочь в этом.
По поводу отыгровки /pas, если я понял о чём ты :) :
/pas - 1
sendchat("Здравствуйте, Вас беспокоит сотрудник ЛСПД - Andy Safino.")
sendchat("Предъявите Ваши документы, уверяю Вас, это обычная проверка.)
/pas - 2 (Не в розыске)
sendchat("/me досконально изучил паспорт")
sendchat("/me передал паспорт обратно человеку на против")
sendchat("Спасибо за сотрудничество, не смею больше Вас задерживать.")
/pas - 2 (В розыске)
sendchat("/me достал КПК")
sendchat("/me зашёл в базу данных МВД")
sendchat("/me перепроверил фоторобот преступника")
sendchat("/do Лица совпадают.")
sendchat("Вы находитесь в Федеральном Розыске, просьба пройти со мной! В противном случае я буду применять силу.")
 
Последнее редактирование:

madrasso

Потрачен
883
324
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Код:
if (isDialogOpen() = 1) ; Если диалог открыт, то
{
Dtext:=getDialogText()
RegExMatch(Dtext, "Уровень розыска:(.*)\n", out)
RegExMatch(out1, "[0-6]+", roz)
sendchat("бла бла бла")
sendchat("отыгровка....)
На самом деле это то, чему я обучился за утро, и написал. Я про сам код,может я что то не так написал и попросил помочь в этом.
По поводу отыгровки /pas, если я понял о чём ты :) :
/pas - 1
sendchat("Здравствуйте, Вас беспокоит сотрудник ЛСПД - Andy Safino.")
sendchat("Предъявите Ваши документы, уверяю Вас, это обычная проверка.)
/pas - 2 (Не в розыске)
sendchat("/me досконально изучил паспорт")
sendchat("/me передал паспорт обратно человеку на против")
sendchat("Спасибо за сотрудничество, не смею больше Вас задерживать.")
/pas - 2 (В розыске)
sendchat("/me достал КПК")
sendchat("/me зашёл в базу данных МВД")
sendchat("/me перепроверил фоторобот преступника")
sendchat("/do Лица совпадают.")
sendchat("Вы находитесь в Федеральном Розыске, просьба пройти со мной! В противном случае я буду применять силу.")
ты саму команду /pas сделал?
 

Andy Safino

Участник
69
4
Да, у меня есть команда /pas, почему не /pass? Потому у команды /pass одна функция - показать паспорт, а у меня должна быть отыгровка просьбы показать.
Вот код:
Код:
~enter::
if (isInChat() = 1)
{
sleep, 200
dwAddress := dwSAMP + 0x12D8F8
chat := readString(hGTA, dwAddress, 256)
if (chat == "/pas") ;
{
Dtext:=getDialogText()
RegExMatch(Dtext, "Уровень розыска:(.*)\n", out)
RegExMatch(out1, "[0-6]+", roz)
sendchat("бла бла бла, отыгровка)
addChatMessage("{ffffff}Игрок в розыске!")
return
}
}
}
return
 

madrasso

Потрачен
883
324
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Да, у меня есть команда /pas, почему не /pass? Потому у команды /pass одна функция - показать паспорт, а у меня должна быть отыгровка просьбы показать.
Вот код:
Код:
~enter::
if (isInChat() = 1)
{
sleep, 200
dwAddress := dwSAMP + 0x12D8F8
chat := readString(hGTA, dwAddress, 256)
if (chat == "/pas") ;
{
Dtext:=getDialogText()
RegExMatch(Dtext, "Уровень розыска:(.*)\n", out)
RegExMatch(out1, "[0-6]+", roz)
sendchat("бла бла бла, отыгровка)
addChatMessage("{ffffff}Игрок в розыске!")
return
}
}
}
return
Ожидай, сделаю получше :)

Да, у меня есть команда /pas, почему не /pass? Потому у команды /pass одна функция - показать паспорт, а у меня должна быть отыгровка просьбы показать.
Вот код:
Код:
~enter::
if (isInChat() = 1)
{
sleep, 200
dwAddress := dwSAMP + 0x12D8F8
chat := readString(hGTA, dwAddress, 256)
if (chat == "/pas") ;
{
Dtext:=getDialogText()
RegExMatch(Dtext, "Уровень розыска:(.*)\n", out)
RegExMatch(out1, "[0-6]+", roz)
sendchat("бла бла бла, отыгровка)
addChatMessage("{ffffff}Игрок в розыске!")
return
}
}
}
return

Без /pas 1 и /pas 2 скрипт будет ждать пока ему покажут паспорт и сам определит розыск, че кого
AutoHotKey:
$~NumpadEnter::
$~Enter::
if (isInChat() && !isDialogOpen())
{
    Sleep 250
    dwAddress := dwSAMP + 0x12D8F8
    chatInput := readString(hGTA, dwAddress, 256)
    IfWinNotActive, GTA:SA:MP
        return
    if (chatInput == "/pas") {
        sendchat("Здравствуйте, Вас беспокоит сотрудник ЛСПД - Andy Safino.")
        Sleep, 1000
        sendchat("Предъявите Ваши документы, уверяю Вас, это обычная проверка.")
        addChatMessage("  {fa9005}|      {FFFFFF}Скрипт {fa9005}ожидает{FFFFFF}, пока игрок покажет паспорт.")
        while(!isDialogOpen())
            continue
        RegExMatch(getDialogText(), "Уровень розыска.*([0-6]+)", out)
        SendInput, {enter}
        if (out1 == 0) {
            sendchat("бла бла бла, вернул паспорт")
            sendchat("бла бла бла, вернул паспорт")
        } else if (out1 >= 1) {
            addChatMessage("  {fa9005}|      {FF0000}ВНИМАНИЕ! {FFFFFF}Игрок находится в розыске! Уровень розыска: " out1)
            sendchat("ну типо ты в розыске, бро")
        } else
            addChatMessage("  {fa9005}|      {FF0000}ОШИБКА! {FFFFFF}Не удалось определить розыск")
    }
return
 
Последнее редактирование модератором:
  • Нравится
Реакции: DeMoN3D и Andy Safino

Andreykas1421

Новичок
47
0
Возник вопрос, как сделать ограничение по рангу, к примеру Колумнист может дать выговор, а "Директор" сможет зайти в раздел "Собес" и занять/освободить новостную волну. Заранее огромное спасибо.

Код:
#SingleInstance Force
#Persistent
#NoEnv
#IfWinActive GTA:SA:MP
#Include samp.ahk

Menu, Tray, add,
Gui, Show, w300 h300, Rang
Gui, Add, DropDownList, w150  h150 vRang Choose%Rangs%, Стажер|Помощник Редакции|Колумнист|Журналист|Репортёр|Ведущий|Режисёр|Редактор|Главный Редактор|Директор|
Gui, Add, Button, x100  w100 h20 gSave, Сохранить

Save:
Gui, Submit, NoHide
Rang:

!1::
ShowDialog(2, "Меню", "Cобес`nВыдать выговор", "Ок")
Result := LineResult()
if (!Result)
   return
gosub, Lecs%Result%
return

Lecs2:
SendChat("/me дал выговор")
sleep 1850
return

Lecs1:
ShowDialog(2, "Собески", "Занять новостную волную`nОсвободить новостную волну", "Ок")
Result := LineResult()
if (!Result)
   return
gosub, Lecsic%Result%
return

Lecsic1:
SendChat("Занял волну)
sleep 1850
return


Lecsic2:
SendChat("Освободил волну")
sleep 1850
return

LineResult()
{
    if (!isDialogOpen() || getDialogStyle() = 0 || getDialogStyle() = 1 || getDialogStyle() = 3)
        return false
    while isDialogOpen()
        continue
    if GetKeyState("Esc", "P")
        return false
    return getDialogLineNumber()
}
 

madrasso

Потрачен
883
324
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Возник вопрос, как сделать ограничение по рангу, к примеру Колумнист может дать выговор, а "Директор" сможет зайти в раздел "Собес" и занять/освободить новостную волну. Заранее огромное спасибо.

Код:
#SingleInstance Force
#Persistent
#NoEnv
#IfWinActive GTA:SA:MP
#Include samp.ahk

Menu, Tray, add,
Gui, Show, w300 h300, Rang
Gui, Add, DropDownList, w150  h150 vRang Choose%Rangs%, Стажер|Помощник Редакции|Колумнист|Журналист|Репортёр|Ведущий|Режисёр|Редактор|Главный Редактор|Директор|
Gui, Add, Button, x100  w100 h20 gSave, Сохранить

Save:
Gui, Submit, NoHide
Rang:

!1::
ShowDialog(2, "Меню", "Cобес`nВыдать выговор", "Ок")
Result := LineResult()
if (!Result)
   return
gosub, Lecs%Result%
return

Lecs2:
SendChat("/me дал выговор")
sleep 1850
return

Lecs1:
ShowDialog(2, "Собески", "Занять новостную волную`nОсвободить новостную волну", "Ок")
Result := LineResult()
if (!Result)
   return
gosub, Lecsic%Result%
return

Lecsic1:
SendChat("Занял волну)
sleep 1850
return


Lecsic2:
SendChat("Освободил волну")
sleep 1850
return

LineResult()
{
    if (!isDialogOpen() || getDialogStyle() = 0 || getDialogStyle() = 1 || getDialogStyle() = 3)
        return false
    while isDialogOpen()
        continue
    if GetKeyState("Esc", "P")
        return false
    return getDialogLineNumber()
}
С помощью regexmatch выводи ранг из статистики\паспорт или где он у тебя там, и делай проверку если соответсвует, то можно открыть, а нет, то return
 

madrasso

Потрачен
883
324
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Сможешь написать начало? как это вообще выглядит

Я не умею писать часть\начало, если я пишу, то я пишу сразу готовое.

Дай мне текст того, где написан ранг ( скрин, выведи в текстовик )