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

BiggySmolz

Новичок
19
2
Есть наработки автоответчика админам, может кто-то знает как это проще реализовать.
Вот соответственно код:
Код:
while true
{
    Filedelete, %A_MyDocuments%\GTA San Andreas User Files\SAMP\chatlog.txt
    Fileappend, , %A_MyDocuments%\GTA San Andreas User Files\SAMP\chatlog.txt
    loop
    {
    label:
    Loop, Read, %A_MyDocuments%\GTA San Andreas User Files\SAMP\chatlog.txt
        {  
            IfInString, A_LoopReadLine, Ты тут
            {
            goto, label1
            }
            else IfInString, A_LoopReadLine, Вы тут
            {
            goto, label1
            }
            else IfInString, A_LoopReadLine, Вы здесь
            {
            goto, label1
            }
            else IfInString, A_LoopReadLine, Ты здесь
            {
            goto, label1
            }
            else IfInString, A_LoopReadLine, вы здесь
            {
            goto, label1
            }
            else IfInString, A_LoopReadLine, ты здесь
            {
            goto, label1
            }
            else IfInString, A_LoopReadLine, ты тут
            {
            goto, label1
            }
            else IfInString, A_LoopReadLine, вы тут
            {
            goto, label1
            }
        }
    goto, label
    label1:
    Filedelete, %A_MyDocuments%\GTA San Andreas User Files\SAMP\chatlog.txt
    Fileappend, , %A_MyDocuments%\GTA San Andreas User Files\SAMP\chatlog.txt
        {
        Sendinput {F6}Да, я тут, просто занят чуть чуть.{Enter}
        Sleep 1000
        }
    }
}

Строка из chatlog'a
Администратор Vasya_Pupkin[ID] для MyName_MyFamily[ID]: text...

Если кто может помочь сделать все проще подскажите пожалуйста. И еще скрипт должен искать в чат-логе слова Ты, ты, Вы, вы, тут, здесь, и если можно рандомизировать ответы, типо: Да, тут.; Тут я тут.; Да, занят просто.; И т.д.
Буду очень благодарен за помощь + комментарии к вашему скрипту для разбора
 
Последнее редактирование:

D3.Pheonix

🎹
Модератор
2,817
1,598
Гиблая затея. Любой нестандартный вопрос - и бот обосрётся )
 

#Rin

Известный
Всефорумный модератор
1,214
1,036
Быдло код какой-то у вас.

AutoHotKey:
Loop
{
 
    out = getChatLineEx() ; Получение последней строки из чатлога. 
    RegExMatch(out, "Администратор\s(.*)\sдля\s(.*):\s(.*)", outs) 
    If outs3 contains Ты тут,Вы тут,Вы здесь,Ты здесь,вы здесь,ты здесь,ты тут,вы тут ; Список вопросов от администрации. 
    {
        Random, var, 1, 5 ; Рандом список ответов.
        If (var == 1) {
            SendChat("Да, я тут, просто занят чуть чуть.")
        } else if (var == 2) {
            SendChat("Да.")
        } else if (var == 3) {
            SendChat("Да, я тут.")
        } else if (var == 4) {
            SendChat("Что?")
        } else if (var == 5) {
            SendChat("Что надо?")
        }
    }
}
 
Последнее редактирование:
  • Нравится
Реакции: eiuhuth

#Rin

Известный
Всефорумный модератор
1,214
1,036
Так вот мне и нужен скрипт который не обосреться :D По этому и прошу помощи, сам нулина в АХК и пытаюсь разобраться в этом дерьме.
Если задать нестандартный вопрос как скрипт должен ответить?

Либо почти бесконечную базу вопросов делать.
 

BiggySmolz

Новичок
19
2
Быдло код какой-то у вас.

AutoHotKey:
Loop
{
    GetChatLine(0, out) ; Получение последней строки из чатлога.
    If out contains Ты тут,Вы тут,Вы здесь,Ты здесь,вы здесь,ты здесь,ты тут,вы тут    ; Список вопросов от администрации.
    {
        Random, var, 1, 5 ; Рандом список ответов.
        If (var == 1) {
            SendChat("Да, я тут, просто занят чуть чуть.")
        } else if (var == 2) {
            SendChat("Да.")
        } else if (var == 3) {
            SendChat("Да, я тут.")
        } else if (var == 4) {
            SendChat("Что?")
        } else if (var == 5) {
            SendChat("Что надо?")
        }
    }
}

Учусь не быдлокодить, сам не рад, ну как говориться как мог так сделал. Сложно делать нормально когда не можешь найти понятной инфы, все ска как-то непонятно. :D
Спасибо большое :*
 

BiggySmolz

Новичок
19
2
Если задать нестандартный вопрос как скрипт должен ответить?

Либо почти бесконечную базу вопросов делать.
К примеру если нет вопроса из этих строк
Код:
  SendChat("Да, я тут, просто занят чуть чуть.")
то он отвечал бы тупо вопросами: ??? или же как нибудь иначе. Либо уходил в афк. Тобеж просто писал команду в чат /afk (FaceAFK.cs есть)

Быдло код какой-то у вас.

AutoHotKey:
Loop
{
    GetChatLine(0, out) ; Получение последней строки из чатлога.
    If out contains Ты тут,Вы тут,Вы здесь,Ты здесь,вы здесь,ты здесь,ты тут,вы тут    ; Список вопросов от администрации.
    {
        Random, var, 1, 5 ; Рандом список ответов.
        If (var == 1) {
            SendChat("Да, я тут, просто занят чуть чуть.")
        } else if (var == 2) {
            SendChat("Да.")
        } else if (var == 3) {
            SendChat("Да, я тут.")
        } else if (var == 4) {
            SendChat("Что?")
        } else if (var == 5) {
            SendChat("Что надо?")
        }
    }
}

Кстати Ринат, что обозначает этот код:
Код:
while true
....
return
 
Последнее редактирование модератором:

BiggySmolz

Новичок
19
2
while true - бесконечный цикл, в таком виде почти тоже самое что и Loop.
return - в данном случае не нужен.
Надеюсь что последний вопрос.
Код:
#Persistent
#IfWinActive GTA:SA:MP
#Include SAMP.ahk


while true
{
    Filedelete, %A_MyDocuments%\GTA San Andreas User Files\SAMP\chatlog.txt
    Fileappend, , %A_MyDocuments%\GTA San Andreas User Files\SAMP\chatlog.txt
    loop
    {
    label:
    Loop, Read, %A_MyDocuments%\GTA San Andreas User Files\SAMP\chatlog.txt
        {   
            IfInString, A_LoopReadLine, БАНКОВСКИЙ ЧЕК
            {
            goto, label1
            }
            else IfInString, A_LoopReadLine, Server closed the connection
            {
            goto, label2
            }
            else IfInString, A_LoopReadLine, Добро пожаловать на Advance RolePlay
            {
            goto, label3
            }
            else IfInString, A_LoopReadLine, Сервер возобновит работу в течение минуты
            {
            goto, label4
            }
        }
       
    WinMaximize, GTA:SA:MP
   
    SetTimer, CheckPayDay1, 1000
    return

    CheckPayDay1: 
    if (A_Min == 59 && A_Sec == 40 || A_Min == 29 && A_Sec == 01 || A_Min == 31 && A_Sec == 01)
        { 
            WinMaximize GTA:SA:MP
            SendInput {F6}/afk
        }

    goto, label
    label1:
    Filedelete, %A_MyDocuments%\GTA San Andreas User Files\SAMP\chatlog.txt
    Fileappend, , %A_MyDocuments%\GTA San Andreas User Files\SAMP\chatlog.txt
        {
        WinMaximize GTA:SA:MP
        sleep 100
        Send {vk57 down}
        sleep 500
        Send {vk57 up}
        Sendinput {F6}/afk{Enter}
        }
   
    goto, label
    label2:
    Filedelete, %A_MyDocuments%\GTA San Andreas User Files\SAMP\chatlog.txt
    Fileappend, , %A_MyDocuments%\GTA San Andreas User Files\SAMP\chatlog.txt
        {
            WinMaximize GTA:SA:MP
            sleep 100
            SendInput, {f6}/recon 15{Enter}
            sleep 1000
        }
   
    goto, label
    label3:
    Filedelete, %A_MyDocuments%\GTA San Andreas User Files\SAMP\chatlog.txt
    Fileappend, , %A_MyDocuments%\GTA San Andreas User Files\SAMP\chatlog.txt
    Sleep 3000
    Loop, Read, file.txt
        {
            WinMaximize GTA:SA:MP
            sleep 100
            Sendinput %A_LoopReadLine%{Enter}
            sleep 2000
            Send {vk57 down}
            sleep 500
            Send {vk57 up}
            Sendinput {F6}/afk{Enter}
        }
   
    goto, label
    label4:
    Filedelete, %A_MyDocuments%\GTA San Andreas User Files\SAMP\chatlog.txt
    Fileappend, , %A_MyDocuments%\GTA San Andreas User Files\SAMP\chatlog.txt
        {
            WinMinimize GTA:SA:MP
            sleep 100
            SendInput {F6}/recon 180{Enter}
            sleep 16000
        }
    }
}   

return

F2:: WinMinimize GTA:SA:MP
F12:: Pause
End:: Reload
Home:: ExitApp

Есть такой код, предназначен типо для анти афк. Но прикол в том что долго в афк стоять нельзя, примерно раз в пол часа он должен совершать какое либо действие. и уходить в афк. А в 59 минут 40 секунд он должен выходить из афк и ждать сообщения БАНКОВСКИЙ ЧЕК после чего сразу же уходить в афк. Но у меня проблемка есть, сворачивается игра по непонятным причинам и из-за этого есть команда "WinMinimize GTA:SA:MP". И не работает 2 таймер в скрипте. Так вот, можно это реализовать проще и понадежней ??? (Команды /recon 15-180 и /afk это команды Cleo и SAMPFUNCS скриптов)

Быдло код какой-то у вас.

AutoHotKey:
Loop
{
    GetChatLine(0, out) ; Получение последней строки из чатлога.
    If out contains Ты тут,Вы тут,Вы здесь,Ты здесь,вы здесь,ты здесь,ты тут,вы тут    ; Список вопросов от администрации.
    {
        Random, var, 1, 5 ; Рандом список ответов.
        If (var == 1) {
            SendChat("Да, я тут, просто занят чуть чуть.")
        } else if (var == 2) {
            SendChat("Да.")
        } else if (var == 3) {
            SendChat("Да, я тут.")
        } else if (var == 4) {
            SendChat("Что?")
        } else if (var == 5) {
            SendChat("Что надо?")
        }
    }
}
А, и как сделать задержку перед ответом в 1-2 секунды ???
 
Последнее редактирование модератором:

#Rin

Известный
Всефорумный модератор
1,214
1,036
А, и как сделать задержку перед ответом в 1-2 секунды ???
AutoHotKey:
Sleep 2000
SendChat("Да.")
сворачивается игра по непонятным причинам и из-за этого есть команда "WinMinimize GTA:SA:MP"
WinMinimize - сворачивает окно, ты хочешь чтобы его не сворачивало или че?
И не работает 2 таймер в скрипте.
Бред с таймерами, зачем их в цикл пихать? Да и таймер тут один.

Зачем все пихать в цикл?
Зачем колотить цикл в цикле если один справиться, да и метки внутрь циклов обычно не пихают.
 

BiggySmolz

Новичок
19
2
AutoHotKey:
Sleep 2000
SendChat("Да.")

WinMinimize - сворачивает окно, ты хочешь чтобы его не сворачивало или че?

Бред с таймерами, зачем их в цикл пихать? Да и таймер тут один.

Зачем все пихать в цикл?
Зачем колотить цикл в цикле если один справиться, да и метки внутрь циклов обычно не пихают.

WinMaximize, соре попутал. Пишу в чат протестить одно из " Ты тут,Вы тут,Вы здесь,Ты здесь,вы здесь,ты здесь,ты тут,вы тут "
0 эмоций ((

AutoHotKey:
Sleep 2000
SendChat("Да.")

WinMinimize - сворачивает окно, ты хочешь чтобы его не сворачивало или че?

Бред с таймерами, зачем их в цикл пихать? Да и таймер тут один.

Зачем все пихать в цикл?
Зачем колотить цикл в цикле если один справиться, да и метки внутрь циклов обычно не пихают.

Второго таймера нет потому что он не работал и я его удалил :D
 
Последнее редактирование модератором:

#Rin

Известный
Всефорумный модератор
1,214
1,036
WinMaximize, соре попутал. Пишу в чат протестить одно из " Ты тут,Вы тут,Вы здесь,Ты здесь,вы здесь,ты здесь,ты тут,вы тут "
0 эмоций ((
Версию SAMP и версию SAMP UDF в студию.

А также не пишите сообщениям подряд - редактируйте.
 

Adam_Rockwell

Активный
143
25
Вот глянь это. Для друга писал недавно. Рабочее.

C++:
$~vkD::
{
    if (IsInChat() && !IsDialogOpen()) 
    {
        Sleep, 170
        dwAddress := dwSAMP + 0x12D8F8
        chatInput := readString(hGTA, dwAddress, 256)
        Sleep, 30       
        if (RegExMatch(chatInput, "i)^\/un (\d{1,3}) (.*)$", value)) 
        {
            if (value1 < 1000 && strlen(value2) <= 100) 
            {
                sleep 200
                SendChat("/me достал смартфон. Открыл online-базу данных организации")
                sleep 2200
                SendChat("/me стёр личное дело сотрудника " RegExReplace(getPlayerNameById(value1),"_", " "))
                sleep 1800
                SendChat("/uninvite " value1 " " value2 " [" value1 "]")
            } 
        }
    }
}
Return
 

TopMo3

Участник
121
7
Возможно ли реализовать такую вещь.
Например:
Человек отписал в /ad, Куплю дом цена: Договорная. И я начинаю редактировать, потом пишу например слово bhome(пробел) и появляется сообщение. SF | Куплю дом. Цена: Договорная.