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

7jizzle

Участник
238
14
Подключи SAMP-UDF:
создаёшь рядом со своим скриптом файлик SAMP-UDF.ahk, после переходишь в тему копируешь в данный файл код.
Он у меня подключен всегда, я все скрипты в папке с samp udf создаю.
Ты лучше не мучайся, я сам сделаю. Мне просто нужно было понять правильно я делаю, какие у меня ошибки. Потому что в ахк не силён.
 

darksoor

Известный
674
353
Он у меня подключен всегда, я все скрипты в папке с samp udf создаю.
Ты лучше не мучайся, я сам сделаю. Мне просто нужно было понять правильно я делаю, какие у меня ошибки. Потому что в ахк не силён.
У тебя SAMP-UDF старой версии видимо.
Данная ошибка вызвана тем, что скрипт не может при запуске найти функцию, которая используется в коде.
 

darksoor

Известный
674
353
Для него нужна новая версия ахк? Меня крашит в сампе.
Крашит, значит не ту версию скинул. Если у тебя версия клиента SAMP 0.3.7 R2, то качай соответствующую.
Там больше функций. И это не версия AHK, а всего-лишь инклуд для работы с памятью игры.
 

Kev1H

Новичок
19
0
Можете, подсказать. Как в диалоге добавить выбор мышкой, а не только на стрелочки. Чтобы клацая по строке, она открывалась.
 

7jizzle

Участник
238
14
Крашит, значит не ту версию скинул. Если у тебя версия клиента SAMP 0.3.7 R2, то качай соответствующую.
Там больше функций. И это не версия AHK, а всего-лишь инклуд для работы с памятью игры.
Я захожу с самым новым инклуидом(версию инклуида перепроверил), в самп. Как только я ввожу команду у меня вылетает самп.
 

darksoor

Известный
674
353
Я захожу с самым новым инклуидом(версию инклуида перепроверил), в самп. Как только я ввожу команду у меня вылетает самп.
АХК установи в модификации Ansi-32, отключи антивирус. Перепроверь версию своего клиента (в названии окна клиента можно увидеть версию).
 

7jizzle

Участник
238
14
АХК установи в модификации Ansi-32, отключи антивирус. Перепроверь версию своего клиента (в названии окна клиента можно увидеть версию).
У меня и так ansi-32, антивирус винды отключен, версия клиента проверена.
 

George

Новичок
5
0
Диалоговые окна. Помогите настроить адекватный сценарий нажатия кнопки "Выбор" (кликом мыши; дабы не срабатывал обычный сброс). Также, при вводе своего имени нужно, чтобы я сразу мог переходить на диалоговое окно с функциями. Брал пример с SAMPTest.ahk. Расширенная версия SAMP.ahk.
Код:
SendMode Input
SetWorkingDir %A_ScriptDir%
#UseHook
#NoEnv
#SingleInstance force
#include %A_ScriptDir%\SAMP.ahk

global uName := ""

NumPadEnter::

SendMessage, 0x50,, 0x4190419,, A

#If !IsInChat()

if (uName != "" && uName != -1) {
    ShowDialog(2, "Функции", "Лекции`nИмя {00FF7F}[" uName "]", "Выбор", "Отмена")
} else {
    ShowDialog(1, "Имя", "Введите свое имя:", "Выбор", "Отмена")
}
return

#If IsDialogOpen() && WinActive("GTA:SA:MP")
Enter::
    OnDialogResponse(true)
return

Esc::
    OnDialogResponse(false)
return

#If
OnDialogResponse(response) {
    caption := GetDialogCaption()
    if (response) {
        if (caption == "Функции") {
            line := GetDialogLine__(GetDialogIndex())
            if (line == "Лекции") {
                ShowDialog(2, "Лекции", "Дресс-код`nСубординация", "Выбор", "Отмена")
            } else {
                ShowDialog(1, "Имя", "Введите свое имя:", "Выбор", "Отмена")
            }
        } else if (caption == "Лекции") {
            line := GetDialogLine__(GetDialogIndex())
            AddChatMessage("line := " line " + " uName)
            Send, {enter}
        } else if (caption == "Имя") {
            ClipboardBuffer := ClipboardAll
            Clipboard := ""
            Send, ^{A}
            Send, ^{X}
            sleep 250
            if (Clipboard != "" && Clipboard != -1) {
                uName := Clipboard
                Clipboard := ClipboardBuffer
                AddChatMessage("uName := " uName)
            }
            Send, {enter}
        } else {
            Send, {enter}
        }
    } else {
        if (caption == "Лекции") {
            ShowDialog(2, "Функции", "Лекции`nИмя {00FF7F}[" uName "]", "Выбор", "Отмена")
        } else {
            Send, {esc}
        }
    }
    return
}
https://cdn1.imggmi.com/uploads/2019/2/24/469cd9ebdd6c30be70338cf17fb5f878-full.png
https://cdn1.imggmi.com/uploads/2019/2/24/b906dd250d366527eff8146885956b78-full.png
 
Последнее редактирование:

Cod

Участник
117
15
Я не силен в программировании. Как мне вывести переменную 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
Для начала, создай глобальную переменную
C++:
global uName
Потом можешь просто присваивать ей значение, в любом месте кода.
Код:
uName := Hello World
Потом можешь её использовать в любом месте кода.


Я не силен в программировании. Как мне вывести переменную 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
Для начала, создай глобальную переменную
C++:
global uName
Потом можешь просто присваивать ей значение, в любом месте кода.
Код:
uName := Hello World
Потом можешь её использовать в любом месте кода.


Я не силен в программировании. Как мне вывести переменную 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
Для начала, создай глобальную переменную
C++:
global uName
Потом можешь просто присваивать ей значение, в любом месте кода.
Код:
uName := Hello World
Потом можешь её использовать в любом месте кода.
 

qwerrtyydkjfklsd

Новичок
9
0
Привет, помогите разобраться.Что здесь не так?
Dd6FO.png

Код:

#Include Samp.ahk
n:=0
number:
Loop
{
GetChatLine(0, OutPutFinder)
IfInString, OutPutFinder, Администратор Nick_Keyn
{
IfInString, OutPutFinder, ответил игроку
{
n:=n+1
addchatmessage("Счётчик репорта - " n)
goto, number
}
}
GetChatLine(Line, ByRef Output, timestamp=0, color=0){
chatindex := 0
FileRead, file, %A_MyDocuments%\GTA San Andreas User Files\SAMP\chatlog.txt
loop, Parse, file, `n, `r
{
if(A_LoopField)
chatindex := A_Index
}
loop, Parse, file, `n, `r
{
if(A_Index = chatindex - line){
output := A_LoopField
break
}
}
file := ""
if(!timestamp)
output := RegExReplace(output, "U)^\[\d{2}:\d{2}:\d{2}\]")
if(!color)
output := RegExReplace(output, "Ui)\{[a-f0-9]{6}\}")
return
}

Нужно, чтобы ахк выводило в фейк чат кол-во отвеченного репорта