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

7jizzle

Участник
238
14
команда isInChat() проверяет, открыт ли чат. Юзай её в if


Специально для тебя переписал код нормально, если есть возможность, автору сего "творения" покажи, а то ну надо же из обезьян уже эволюционировать...

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

~Enter::
if IsInChat() and !IsDialogOpen()
{
    sleep 200
    chatInput := readString(hGTA, dwSAMP + 0x12D8F8, 256)
    if RegExMatch(chatInput, "i)^\/hist (\d{1,3})", var)
    {
        name := getPlayerNameById(var1)
        SendChat("/history " name)
    }
    else if RegExMatch(chatInput, "i)^\/mh\s+(\d{1,3})\s+(.{1,})$", out_pars)
    {
        Nick := RegExReplace(getPlayerNameById(out_pars1), "_", " ")
        Sendchat("/me внимательно осмотрел пациента")
        sleep 1000
        Sendchat("/todo Поставив пациенту диагноз*Я выпишу вам лекарство. Его цена: " out_pars2 "$")
        sleep 1000
        SendChat("/do Через плечо надета медицинская сумка.")
        sleep 1000
        SendChat("/me открыв сумку, достал от туда лекарство и передал его " Nick)
        sleep 500
        SendChat("/medhelp " out_pars1 " " out_pars2) ; out_pars1 - ID игрока, out_pars2 - причина
        sleep 1000
        random, x, 1, 4
        if (x = 1)
            x := SendChat("Скорее поправляйтесь.")
        else if (x = 2)
            x := SendChat("При возникновении вопросов, обращайтесь на регистратуру.")
        else if (x = 3)
            x := SendChat("Всего доброго, не болейте!")
        else if (x = 4)
            x := SendChat("Своевременно проходите медосмотр")
    }
    else if RegExMatch(chatInput, "i)^\/h\s+(\d{1,3})\s+(.{1,})$", out_pars)
    {
        Nick := RegExReplace(getPlayerNameById(out_pars1), "_", " ")
        Sendchat("/me внимательно осмотрел пациента")
        sleep 1000
        Sendchat("/todo Поставив пациенту диагноз*Я выпишу вам лекарство. Его цена: " out_pars2 "$")
        sleep 1000
        SendChat("/do Через плечо надета медицинская сумка.")
        sleep 1000
        SendChat("/me открыв сумку, достал от туда лекарство и передал его " Nick)
        sleep 500
        SendChat("/heal " out_pars1 " " out_pars2) ; out_pars1 - ID игрока, out_pars2 - причина
        sleep 1000
        random, x, 1, 4
        if (x = 1)
            x := SendChat("Скорее поправляйтесь.")
        else if (x = 2)
            x := SendChat("При возникновении вопросов, обращайтесь на регистратуру.")
        else if (x = 3)
            x := SendChat("Всего доброго, не болейте!")
        else if (x = 4)
            x := SendChat("Своевременно проходите медосмотр")
    }
    else if RegExMatch(chatInput, "i)^\/mhb\s+(\d{1,3})\s+(.{1,})$", out_pars)
    {
        Nick := RegExReplace(getPlayerNameById(out_pars1), "_", " ")
        Sendchat("/me внимательно осмотрел пациента")
        sleep 1000
        Sendchat("/todo Поставив пациенту диагноз*Я выпишу вам лекарство. Его цена: " out_pars2 "$")
        sleep 1000
        SendChat("/pay " out_pars1 " 120")
        sleep 3500
        SendChat("/do Через плечо надета медицинская сумка.")
        sleep 1000
        SendChat("/me открыв сумку, достал от туда лекарство и передал его " Nick)
        sleep 500
        SendChat("/medhelp " out_pars1 " " out_pars2) ; out_pars1 - ID игрока, out_pars2 - причина
        sleep 1000
        random, x, 1, 4
        if (x = 1)
            x := SendChat("Скорее поправляйтесь.")
        else if (x = 2)
            x := SendChat("При возникновении вопросов, обращайтесь на регистратуру.")
        else if (x = 3)
            x := SendChat("Всего доброго, не болейте!")
        else if (x = 4)
            x := SendChat("Своевременно проходите медосмотр")
    }
    else if RegExMatch(chatInput, "i)^\/cs\s+(\d{1,3})\s+(.{1,})$", out_pars)
    {
        Nick := RegExReplace(getPlayerNameById(out_pars1), "_", " ")
        SendChat("/do Кислородная маска висит над операционным столом на крючке.")
        Sleep 2000
        SendChat("/me надел кислородную маску на пациента")
        sleep 2000
        SendChat("/do На столе лежит поднос с хирургическими инструментами.")
        sleep 2000
        SendChat("/do На столе лежит спиртовой раствор.")
        sleep 2000
        SendChat("/me простерилизовал руки спиртовым раствором")
        sleep 2000
        SendChat("/me надел на руки перчатки")
        sleep 2000
        SendChat("/me взял в руки заполненный шприц с наркозом")
        sleep 2000
        SendChat("/me вколол шприц в вену пациента")
        sleep 2000
        SendChat("/me начал процесс операции по смене пола")
        sleep 2000
        SendChat("/do Прошло необходимое время для операции.")
        sleep 2000
        SendChat("/do Процесс операции закончен.")
        sleep 2000
        SendChat("/do " Nick " пришел в себя?")
        sleep 500
        SendChat("/changesex " out_pars1 " " out_pars2)
    }
}
return
А можешь мне написать, а то у меня рук не хватает...
 

Neo Romero

Новичок
17
4
Здравствуйте, можете помочь написать скрипт AHK, чтобы узнать расстояние между 2-умя IP-адресами? Нужно срочно!
 

Forfeit

Участник
69
12
Здравствуйте, можете помочь написать скрипт AHK, чтобы узнать расстояние между 2-умя IP-адресами? Нужно срочно!
Код:
if (RegExMatch(chatInput, "^/cip (.*)", string)) and (login = 1)
{
unBlockChatInput()
SendChat("/ip " string1)
chatline := GetNewLine(CL)
if (RegExMatch(chatline, "\Q] \E(.*)\Q[\E(.*)\Q]: [C-IP: \E(.*)\Q] [L-IP: \E(.*)\Q] [R-IP: \E(.*)\Q]\E", out))
{
if (IpChecker = 1)
{
HTTP := ComObjCreate("WinHTTP.WinHTTPRequest.5.1")
HTTP.Open("GET", "https://geoiptool.com/ru/?ip=" out3 "")
HTTP.Send()
Sleep, 500
Info1 := HTTP.ResponseText
RegExMatch(Info1, "Страна:.*", Info1)
Info1 := RegExReplace(Info1, "</span>", "")
Info1 := RegExReplace(Info1, "</div>.*", "")
Info1 := RegExReplace(Info1, ".*>", "")
Info1 := RegExReplace(Info1, "        ", "")
Info1 := RegExReplace(Info1, "    ", "")
Info2 := HTTP.ResponseText
RegExMatch(Info2, "Регион:.*", Info2)
Info2 := RegExReplace(Info2, "</span>", "")
Info2 := RegExReplace(Info2, "</div>.*", "")
Info2 := RegExReplace(Info2, "<span>", "")
Info2 := RegExReplace(Info2, "        ", "")
Info2 := RegExReplace(Info2, "    ", "")
Info2 := RegExReplace(Info2, ".*Регион:", "")
Info3 := HTTP.ResponseText
RegExMatch(Info3, "Город:.*", Info3)
Info3 := RegExReplace(Info3, "</span>", "")
Info3 := RegExReplace(Info3, "</div>.*", "")
Info3 := RegExReplace(Info3, "<span>", "")
Info3 := RegExReplace(Info3, "        ", "")
Info3 := RegExReplace(Info3, "    ", "")
Info3 := RegExReplace(Info3, ".*Город:", "")
Sleep, 500
SendChat("/a [Tools] Проверяю ID: " string1 " | C-IP: " out3 " | R-IP: " out5 "")
SendChat("/a [Tools] C-IP: Страна: " Info1 " | Город: " Info3 "")
HTTP := ComObjCreate("WinHTTP.WinHTTPRequest.5.1")
HTTP.Open("GET", "https://geoiptool.com/ru/?ip=" out5 "")
HTTP.Send()
Sleep, 500
Info11 := HTTP.ResponseText
RegExMatch(Info11, "Страна:.*", Info11)
Info11 := RegExReplace(Info11, "</span>", "")
Info11 := RegExReplace(Info11, "</div>.*", "")
Info11 := RegExReplace(Info11, ".*>", "")
Info11 := RegExReplace(Info11, "        ", "")
Info11 := RegExReplace(Info11, "    ", "")
Info22 := HTTP.ResponseText
RegExMatch(Info22, "Регион:.*", Info22)
Info22 := RegExReplace(Info22, "</span>", "")
Info22 := RegExReplace(Info22, "</div>.*", "")
Info22 := RegExReplace(Info22, "<span>", "")
Info22 := RegExReplace(Info22, "        ", "")
Info22 := RegExReplace(Info22, "    ", "")
Info22 := RegExReplace(Info22, ".*Регион:", "")
Info33 := HTTP.ResponseText
RegExMatch(Info33, "Город:.*", Info33)
Info33 := RegExReplace(Info33, "</span>", "")
Info33 := RegExReplace(Info33, "</div>.*", "")
Info33 := RegExReplace(Info33, "<span>", "")
Info33 := RegExReplace(Info33, "        ", "")
Info33 := RegExReplace(Info33, "    ", "")
Info33 := RegExReplace(Info33, ".*Город:", "")
Sleep, 500
SendChat("/a [Tools] R-IP: Страна: " Info11 " | Город: " Info33 "")
if(Info1 <> Info11 || Info3 <> Info33){
SendChat("/a Внимание, возможно аккаунт взломан!")
return
}
return
}
if (IpChecker = 2)
{
HTTP := ComObjCreate("WinHTTP.WinHTTPRequest.5.1")
HTTP.Open("GET", "https://ru.infobyip.com/ip-" out3 ".html")
HTTP.Send()
Sleep, 500
RegExMatch(HTTP.ResponseText, "ISP\Q</td> <td>\E(.*)\Q</td>\E", outone)
outone := RegExreplace(outone1, "</td.*", "")
RegExMatch(outone, ".*", outone)
RegExMatch(HTTP.ResponseText, "flag\Q'>\E(.*)\Q</td>\E", countryone)
countryone := RegExreplace(countryone1, "</td.*", "")
RegExMatch(countryone, ".*", countryone)
RegExMatch(HTTP.ResponseText, "Город\Q</td><td>\E(.*)\Q</td>\E", cityone)
cityone := RegExreplace(cityone1, "</td.*", "")
RegExMatch(cityone, ".*", cityone)
Sleep, 500
HTTP := ComObjCreate("WinHTTP.WinHTTPRequest.5.1")
HTTP.Open("GET", "https://ru.infobyip.com/ip-" out5 ".html")
HTTP.Send()
Sleep, 500
RegExMatch(HTTP.ResponseText, "ISP\Q</td> <td>\E(.*)\Q</td>\E", outtwo)
outtwo := RegExreplace(outtwo1, "</td.*", "")
RegExMatch(outtwo, ".*", outtwo)
RegExMatch(HTTP.ResponseText, "flag\Q'>\E(.*)\Q</td>\E", countrytwo)
countrytwo := RegExreplace(countrytwo1, "</td.*", "")
RegExMatch(countrytwo, ".*", countrytwo)
RegExMatch(HTTP.ResponseText, "Город\Q</td><td>\E(.*)\Q</td>\E", citytwo)
citytwo := RegExreplace(citytwo1, "</td.*", "")
RegExMatch(citytwo, ".*", citytwo)
Sleep, 500
SendChat("/a [Tools] Проверяю ID: " string1 " | C-IP: " out3 " | R-IP: " out5 "")
SendChat("/a [Tools] C-IP: Провайдер " outone "")
SendChat("/a [Tools] C-IP: Страна:" countryone " | Город: " cityone "")
SendChat("/a [Tools] R-IP: Провайдер: " outtwo "")
SendChat("/a [Tools] R-IP: Страна:" countrytwo " | Город: " citytwo "")
if(countryone <> countrytwo || cityone <> citytwo){
SendChat("/a Внимание, возможно аккаунт взломан!")
return
}
return
}
}
}
if (RegExMatch(chatInput, "^/setip(.*)", string)) and (login = 1)
{
unBlockChatInput()
if(string1=1 || string1=2)
{
IpChecker:=string1
IniWrite, % IpChecker, %A_WorkingDir%\configs\settings.ini, Global, IpChecker
addChatMessage("{00FF00}[Tools] {00FFFF}Вы переключили режим IP-чекера на " IpChecker)
return
}
if (RegExMatch(chatInput, "^/dist (.*) (.*)", string)) and (login = 1)
{
unBlockChatInput()
HTTP := ComObjCreate("WinHTTP.WinHTTPRequest.5.1")
HTTP.Open("GET", "http://ru.distance.to/" string1 "/" string2 "")
HTTP.Send()
RegExMatch(HTTP.ResponseText, "airline.*", out)
out := RegExreplace(out, "</span.*", "")
RegExMatch(out, "[0-9]+.*", out)
SendChat("/a [Tools] Расстояние между " string1 " и " string2 ": " out "")
return
}
}
Держи исходник моего админ скрипта, мб поможет
 

darksoor

Известный
674
353
Не работает.
Код:
Send {Space down}
Sleep 1
Send {Space up}
Sleep 5
goto run

AutoHotKey:
#IfWinActive GTA:SA:MP 
#Include SAMP.ahk 
:?:/fastrunon:: 
showGameText("FastRun:ON", 500, 1)
if (!isInChat())
{
run: 
Send {Space down} 
Sleep 1 
Send {Space up} 
Sleep 5 
goto run
}
return 

 :?:/fastrunoff:: 
showGameText("FastRun:OFF", 500, 1) 
Send {Space up} 
sleep 100 
Reload
 

Adam_Rockwell

Активный
143
25
Врятли ему кто-то скидывал, а вот копировать не каждый сможет.
Твой код, что ты написал, не является идеальным)
Я и не говорил, что он идеальный. Но с точки зрения производительности там всё сделано чётко. Пару повторяющихся элементов переместить в одну функцию можно, но просто лень, да и абсолютно это не нужно, куда до миллиметра член то мерить.
 

7jizzle

Участник
238
14
А чо ушел с РПГ Тринити?
Я не джизл.

AutoHotKey:
#IfWinActive GTA:SA:MP
#Include SAMP.ahk
:?:/fastrunon::
showGameText("FastRun:ON", 500, 1)
if (!isInChat())
{
run:
Send {Space down}
Sleep 1
Send {Space up}
Sleep 5
goto run
}
return

 :?:/fastrunoff::
showGameText("FastRun:OFF", 500, 1)
Send {Space up}
sleep 100
Reload
Пишет что он активирован но не бежит. Без if (!isInChat()) работает нормально, что за дичь?
 
Последнее редактирование:

Phoenixxx_CZAR

Известный
61
31
Я не джизл.


Пишет что он активирован но не бежит. Без if (!isInChat()) работает нормально, что за дичь?
Потому что юзаешь код говно кодера.
Ты вводишь команду и после этого оно сразу проверяет открыт ли чат, а т.к. ты вводил команду, он открыт, вот скрипт и не срабатывает.
+ goto, когда есть таймеры/циклы.
Его код при активации уйдет в цикл и все.
 

George

Новичок
5
0
Я не силен в программировании. Как мне вывести переменную uName, дабы использовать ее за пределами (например: по нажатию кнопки NumPadMult)
Код:
SendMode Input
SetWorkingDir %A_ScriptDir%
#UseHook
#NoEnv
#SingleInstance force
#include %A_ScriptDir%\SAMP.ahk

uName := ""

#If !IsInChat()
NumPadEnter::
    ShowDialog(2, "Functions", "Lectures`nName", "Okay", "Exit")
return
#If IsDialogOpen() && WinActive("GTA:SA:MP")
Enter::
    OnDialogResponse(true)
return
ESC::
    OnDialogResponse(false)
return
#If
OnDialogResponse(response) {
    caption := GetDialogCaption()
    if (response) {
        if (caption == "Functions") {
            line := GetDialogLine__(GetDialogIndex())
            if (line == "Lectures") {
                ShowDialog(2, "Lectures", "Dress-code`nSubordination", "Okay", "Exit")
            }
            else if (line == "Name") {
                ShowDialog(1, "Name", "Enter your name:", "Okay", "Exit")
            }
        } else if (caption == "Lectures") {
            line := GetDialogLine__(GetDialogIndex())
            AddChatMessage(line)
            Send, {Enter}
        } else if (caption == "Name") {
            clipboardBuffer := ClipboardAll
            clipboard := ""
            Send, ^{A}
            Send, ^{X}
            sleep, 100
            uName := clipboard
            clipboard := clipboardBuffer
            if (uName != -1 && uName != "") {
                AddChatMessage("Your name: " uName)
            }
            Send, {Enter}
        } else {
            Send, {Enter}
        }
    } else {
        if (caption == "Functions") {
            ShowDialog(2, "Functions", "Lectures`nName", "Okay", "Exit")
        }
        else {
            Send, {ESC}
        }
    }
}

NumPadMult::
AddChatMessage("uName := " uName)
return
 

hertoem

Новичок
6
0
Приветствую, помогите сделать код, чтобы всех игроков находящихся в /members прописовало команду "/i id из мемберса" весь список
 

vlaaDick228

Новичок
10
0
Привет.

Как сделать , дабы при использовании 4-го типа диалога (Интерфейс: Нажми :0) включалась определенная функция , в данном случае логгирование , и зеленый текст "Вкл" менялся на противоположное (Выкл / Вкл)

Заранее спасибо всем)