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

ImPasha

Software Developer & System Administrator
Друг
1,788
2,141
Как сделать так чтобы когда я писали в чат Привет/Добрый вечер/Добрый день/Доброе утро/Здравствуйте. В ответ писал текст?
Код:
Loop
{
clog := getChatLineEx()
if clog contains Здравствуйте
{
SendChat("Ку-ку")
}
}
Cамый простой из всех кодов на планете.
 
Последнее редактирование:

ImPasha

Software Developer & System Administrator
Друг
1,788
2,141
Здравствуйте, подскажите как сделать чекер онлайна человека после чего вывод этой информации в HUD по средствам SAMP-UDF?

Например, нам нужно проверить онлайн ли человек Jhon_Marker, после чего в HUD вывести: Jhon Marker: Онлайн/Оффлайн.

Заранее спасибо.
 

RTD

Потужно
Модератор
399
470
Код:
while(true) {
Loop
{
tochat = %A_MyDocuments%\GTA San Andreas User Files\SAMP\chatlog.txt
FileRead, chatlog, %tochat%
IfInString, chatlog, Доброе утро
{
SendChat("Здравствуйте")
FileDelete, %tochat%
}
IfInString, chatlog, Добрый день
{
SendChat("Здравствуйте")
FileDelete, %tochat%
}
IfInString, chatlog, Добрый вечер
{
SendChat("Здравствуйте")
FileDelete, %tochat%
}
IfInString, chatlog, Привет
{
SendChat("Здравствуйте")
FileDelete, %tochat%
}
}
}
Cамый простой из всех кодов на планете.

Абсолютный быдло-код! Цикл в цикле, ужас полнейший, никакой оптимизации.

Для SAMP R1 с помощью UDF
AutoHotKey:
Loop {
   lastline := getChatLineEx()
   if lastline contains привет
      SendChat("Привет!") 
}
Не зависимо от версии клиента
AutoHotKey:
global FileCLog := A_MyDocuments "\GTA San Andreas User Files\SAMP\chatlog.txt"
Loop {
   lastline := GetNewLine(FileCLog)
   if lastline contains привет
      SendInput, {F6}Привет!{Enter}
}
GetNewLine(filename) {
    static old
    static new
    if !old
    {
        FileGetSize, old, %filename%
        new := old
    }
    while old = new
    {
        sleep 100
        FileGetSize, new, %filename%
    }
    old := new
    Loop, read, %filename%
    if A_LoopReadLine
        last := A_LoopReadLine
    return last
}
 

Tiva

Известный
76
1
Как сделать чтобы уводило /time потом /pass мой ид и после этого делал скрин?

Как сделать диалоговое окно с пунктами после нажатия на них чтобы выводилась отыгровка
F2:: ;Клавиша
Showdialog("1", "{FFFAFA}Выберите пункт", "Первая строчка`nВторая строчка", "Клавиша") ; Сам диалог
input, text, V, {Enter}
Keywait, Enter, D
sleep 300

if (text = 1) { ; Там где text = Цифра которою будешь уводить в диалоге
addChatMessage("Текст или отыгровка")
sleep 2000
addChatMessage("Текст или отыгровка")
} else if (text = 2) {
addChatMessage("Текст или отыгровка")
} else {
addChatMessage("Ошибка") ; Текст при не праввельном воде
}
return
 
Последнее редактирование модератором:

monolith04

Известный
71
6
Почему у меня вылетает игра при вводе команды после которой выводится диалоговое окно в игре? Помогите пожалуйста! Так во всех ahk-скриптах :(
 

Tiva

Известный
76
1
Код:
!NumPad6::
Showdialog("1", "{FFFAFA}Выберите пункт", "{FFFAFA}[1] - Паспорт`n[2] - Мед. карта`n[3] - Лицензии`n[4] - Скилы`n[5] - Статистика`n[6] - namestore`n{FF0000} Автор: Andrey Gray", "Ok")
input, text, V, {Enter}
Keywait, Enter, D
sleep 300

if (text = 1) {
ID := getId()
AddChatMessage("/time")
Sleep 2000
SendChat(" /pass " ID " ")
Sleep 1
SendInput, {F8}
} else if (text = 2) {
ID := getId()
AddChatMessage("/time")
Sleep 2000
SendChat(" /med " ID " ")
Sleep 1
SendInput, {F8}
} else if (text = 3) {
ID := getId()
AddChatMessage("/time")
Sleep 2000
SendChat(" /lic " ID " ")
Sleep 1
SendInput, {F8}
} else if (text = 4) {
ID := getId()
AddChatMessage("/time")
Sleep 2000
SendChat(" /skill " ID " ")
Sleep 1
SendInput, {F8}
} else if (text = 5) {
AddChatMessage("/time")
Sleep 2000
SendChat("/stats")
Sleep 1
SendInput, {F8}
} else if (text = 6) {
ID := getId()
AddChatMessage("/time")
Sleep 2000
SendChat(" /namestore " ID " ")
Sleep 1
SendInput, {F8}
} else {
addChatMessage("{008000}[AHK]: {AFEEEE}Ошибка. Выберите пункт с помощью цифр.")
}
return

Как сделать диалог после чего в этом диалоге наживаешь на текст и еще диалог и потом опять диалог или отыгровка?
 
Последнее редактирование модератором:

Revalto

Известный
531
225
!NumPad6::
Showdialog("1", "{FFFAFA}Выберите пункт", "{FFFAFA}[1] - Паспорт`n[2] - Мед. карта`n[3] - Лицензии`n[4] - Скилы`n[5] - Статистика`n[6] - namestore`n{FF0000} Автор: Andrey Gray", "Ok")
input, text, V, {Enter}
Keywait, Enter, D
sleep 300

if (text = 1) {
ID := getId()
AddChatMessage("/time")
Sleep 2000
SendChat(" /pass " ID " ")
Sleep 1
SendInput, {F8}
} else if (text = 2) {
ID := getId()
AddChatMessage("/time")
Sleep 2000
SendChat(" /med " ID " ")
Sleep 1
SendInput, {F8}
} else if (text = 3) {
ID := getId()
AddChatMessage("/time")
Sleep 2000
SendChat(" /lic " ID " ")
Sleep 1
SendInput, {F8}
} else if (text = 4) {
ID := getId()
AddChatMessage("/time")
Sleep 2000
SendChat(" /skill " ID " ")
Sleep 1
SendInput, {F8}
} else if (text = 5) {
AddChatMessage("/time")
Sleep 2000
SendChat("/stats")
Sleep 1
SendInput, {F8}
} else if (text = 6) {
ID := getId()
AddChatMessage("/time")
Sleep 2000
SendChat(" /namestore " ID " ")
Sleep 1
SendInput, {F8}
} else {
addChatMessage("{008000}[AHK]: {AFEEEE}Ошибка. Выберите пункт с помощью цифр.")
}
return

Незнаю ли я правильно тебя понял, но вот:
Код:
#include SAMPUDF.ahk
#IfWinActive GTA:SA:MP

$~LButton::
$~Enter::
if(isDialogOpen())
{
    if(GetKeyState("LButton", "P"))
    {
        Sleep, isDialogButtonSelected(1) ? 150 : 50
        if(isDialogOpen() || isDialogButtonSelected(2))
        return
    }
    index := getDialogLineNumber()
    dlg := getDialogID()
    if(dlg == 9998)
    {
        if (index = 1)
        {
            ID := getId()
            AddChatMessage("/time")
            Sleep 2000
            SendChat(" /pass " ID " ")
            Sleep 1
            SendInput, {F8}
        }
        if (index = 2)
        {
            ID := getId()
            AddChatMessage("/time")
            Sleep 2000
            SendChat(" /med " ID " ")
            Sleep 1
            SendInput, {F8}
        }
        if (index = 3)
        {
            ID := getId()
            AddChatMessage("/time")
            Sleep 2000
            SendChat(" /lic " ID " ")
            Sleep 1
            SendInput, {F8}
        }
        if (index = 4)
        {
            ID := getId()
            AddChatMessage("/time")
            Sleep 2000
            SendChat(" /skill " ID " ")
            Sleep 1
            SendInput, {F8}
        }
        if (index = 5)
        {
            AddChatMessage("/time")
            Sleep 2000
            SendChat("/stats")
            Sleep 1
            SendInput, {F8}
        }
        if (index = 6)
        {
            ID := getId()
            AddChatMessage("/time")
            Sleep 2000
            SendChat(" /namestore " ID " ")
            Sleep 1
            SendInput, {F8}
        }
    }
}
return

!NumPad6::
Showdialog("2", "{FFFAFA}Выберите пункт", "{FFFAFA}[1] - Паспорт`n[2] - Мед. карта`n[3] - Лицензии`n[4] - Скилы`n[5] - Статистика`n[6] - namestore`n{FF0000} Автор: Andrey Gray", "Ok", "Отмена", 9998)
return
 
  • Нравится
Реакции: Cesar Ballard

Teez

Известный
76
2
меня интересует нажатие кнопки во время определения определённой фразы в чатлоге. Например: В чатлоге Привет и ты пишешь привет либо нажимаешь клавишу мне нужен код далее подправлю под то что мне нужно. Заранее спасибо
 

Вадимус

Известный
1
0
как сделать так что бы не на кнопку было,а на команду? Например я хочу принять игрока,вместо того что бы нажимать на кнопку,я прописал бы /invite и отыгровка
 

Tiva

Известный
76
1
как сделать так что бы не на кнопку было,а на команду? Например я хочу принять игрока,вместо того что бы нажимать на кнопку,я прописал бы /invite и отыгровка
Код:
:?:/команда::
SendChat("/do На поясе висит сумка.") ; Отыгровка
Sleep 2000 ; задержка
SendChat("/me достал ручку и блокнот для штрафов из сумки")
Sleep 2000
SendChat("/me написал что-то на листке")
Sleep 2000
SendChat("/me вырвал листок из блокнота")
Sleep 2000
SendInput {F6}/ticket ид FPA |  x.x КТБ{space} ;space чтобы мог увести ид игрока
 

ImPasha

Software Developer & System Administrator
Друг
1,788
2,141
Как исправить вылет SAMP при создании диалога? Заранее спасибо.
 

Teez

Известный
76
2
как сделать так что бы не на кнопку было,а на команду? Например я хочу принять игрока,вместо того что бы нажимать на кнопку,я прописал бы /invite и отыгровка
Код:
:?:/invite::
SendInput, {F6}/me та ша камапуля{Enter} ; Отыгровка
sleep, 2100
SendInput, {F6}/me та ша камапуля{Enter} ; Отыгровка
sleep, 2100
SendInput, {F6}/me та ша камапуля{Enter} ; Отыгровка
sleep, 2100
SendInput, {F6}/me та ша камапуля{Enter} ; Отыгровка
sleep, 2100
SendInput, {F6}/me та ша камапуля{Enter} ; Отыгровка
sleep, 2100
SendInput, {F6}/me та ша камапуля{Enter} ; Отыгровка
sleep, 2100
SendInput, {F6}/inv{Space}
return
или тебе не это надо?
 
Последнее редактирование: