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

madrasso

Потрачен
883
324
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Всем привет. Писал я значит авто-ответ для админки и у меня появилась такая проблема, а именно скрипт не может увидеть ID игрока задающего вопрос в репорт. Например:
Maksim_Lol[48]: Привет
и место /pm 48 Здравствуйте пишется /pm Здравствуйте.
Пытался очень долго решить эту проблему, но в итоге ничего не получилось. Надеюсь хоть тут мне помогут. Сам скрипт и код от него прикреплю ниже.
FileCLog:=% A_MyDocuments "\GTA San Andreas User Files\SAMP\chatlog.txt"

loop
{

lastline := GetNewLine(FileCLog)

If lastline contains привет,здрав,здаров
{
RegExMatch(stroka, ".*\[(.*)]", idigroka)
Sendinput {F6}/sms %idigroka% Здравствуйте{ENTER}
}

}

GetNewLine(filename)
{ ;функция чтения последней строки, если файл изменен каждыее 100 мс
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
}

Sendinput {F6}/sms %idigroka% Здравствуйте{ENTER}

В idigroka у тебя полная строка совпадающая с регуляркой.

Код:
Sendinput {F6}/sms %idigroka% Здравствуйте{ENTER}
на
Код:
Sendinput {F6}/sms %idigroka1% Здравствуйте{ENTER}
 

Revalto

Известный
532
225
Sendinput {F6}/sms %idigroka% Здравствуйте{ENTER}

В idigroka у тебя полная строка совпадающая с регуляркой.

Код:
Sendinput {F6}/sms %idigroka% Здравствуйте{ENTER}
на
Код:
Sendinput {F6}/sms %idigroka1% Здравствуйте{ENTER}
С использованием UDF (Лучший вариант!)
Код:
SendChat("/sms " idigroka " Здравствуйте!")


Помогите пожалуйста, мне надо написать диалог для SA:MP уже все перепробовал, ничего не получается, захожу в игру, жму нужные кнопки и ни фига!
Вот мой код:

#Include UDF.ahk
NumPad5::
ShowDialog("2", "Пример", "Пример стиля диалога номер 2`n", "Окей")
Return

Мой UDF.ahk - UDF.ahk
Пожалуйста помогите, очень поможете!
Убедитесь, что ваш AHK - ANSI32 и UDF совпадает с версией SA:MP!


Вот у меня возник вопрос. Как изменить размер диалогового окна? Не помещается всё,хоть шрифт меняй в SAMP'e,но нет. Наверное, можно же как-то поменять кодом размеры окна?
Нельзя менять размер диалога, он сам фиксируется от размеров текста в 1 строку...


Всем привет. Писал я значит авто-ответ для админки и у меня появилась такая проблема, а именно скрипт не может увидеть ID игрока задающего вопрос в репорт. Например:
Maksim_Lol[48]: Привет
и место /pm 48 Здравствуйте пишется /pm Здравствуйте.
Пытался очень долго решить эту проблему, но в итоге ничего не получилось. Надеюсь хоть тут мне помогут. Сам скрипт и код от него прикреплю ниже.
FileCLog:=% A_MyDocuments "\GTA San Andreas User Files\SAMP\chatlog.txt"

loop
{

lastline := GetNewLine(FileCLog)

If lastline contains привет,здрав,здаров
{
RegExMatch(stroka, ".*\[(.*)]", idigroka)
Sendinput {F6}/sms %idigroka% Здравствуйте{ENTER}
}

}

GetNewLine(filename)
{ ;функция чтения последней строки, если файл изменен каждыее 100 мс
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
}
Пример:
Код:
global file_chat := A_MyDocuments "/GTA San Andreas User Files/SAMP/chatlog.txt"
SetTimer, Chat, 50

Chat:
FileRead, chatlog, % file_chat

if (RegExMatch(chatlog, ".* Отправил .{3,24}\[\d+\] \(тел\. (\d+)\)", chattext))
{
    save(chatlog)
    addChatMessage(chattext1)
}
Return

как в addChatMessageEx вывести локальное время и дату?
Код:
addChatMessageEx("FFFFFF", A_Hour":"A_Min":"A_Sec)

Как сделать акцента? к примеру, я пишу в чат что либо, и добавляется
[Русский акцент]: Привет.
Блокируй чат, потом обрабатывай сообщение и отправляй его через SendChat, пример можно взять у CMDProc by Tumkin


Ребзя, можно сделать ахк скрипт который будет показывать клисты в /members на evolve rp?
Можно
 

Andreykas1421

Новичок
47
0
Код:
ShowDialog(2, "Panel", "Выбрать", "Назад")
Result := LineResult()
if (!Result)
   return
gosub, Names%Result%
return
Как сделать что бы кнопка назад, возвращала в меню.
 

Revalto

Известный
532
225
Код:
ShowDialog(2, "Panel", "Выбрать", "Назад")
Result := LineResult()
if (!Result)
   return
gosub, Names%Result%
return
Как сделать что бы кнопка назад, возвращала в меню.
Использовать нормальный функционал для диалога и вроде есть функция в UDF по проверки нажатия клавишь в диалоге
 

Lamberto_Serafino

Новичок
4
0
Пытался я написать скрипт в ахк,чтобы сохранялся ид,который вписал и вписывался в команду. Вот что у меня вышло ( Читал разные статьи и пытался собрать сам из кусочков. Вот что получилось,естественно... не работет. ) Как написать правильный скрипт?

:?:/cuf::
SendMessage, 0x50,, 0x4190419,, A
sleep 500
SendInput {F6}/cuf{space}
input, id, V, {enter}
sleep 500
SendInput {F6}/me достал с пояса наручники,затем надел наручники на нарушителя{Enter}
sleep 2500
SendInput {F6}/cuff [ID]{Enter}
 

madrasso

Потрачен
883
324
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Пытался я написать скрипт в ахк,чтобы сохранялся ид,который вписал и вписывался в команду. Вот что у меня вышло ( Читал разные статьи и пытался собрать сам из кусочков. Вот что получилось,естественно... не работет. ) Как написать правильный скрипт?

:?:/cuf::
SendMessage, 0x50,, 0x4190419,, A
sleep 500
SendInput {F6}/cuf{space}
input, id, V, {enter}
sleep 500
SendInput {F6}/me достал с пояса наручники,затем надел наручники на нарушителя{Enter}
sleep 2500
SendInput {F6}/cuff %id%{Enter}

samp-udf: samp-udf.ahk(https://drive.google.com/file/d/1MTh07vgYtFBBpK1CkhDRakvzxxvt-DN6/view?usp=sharing)
Для работы скрипта, подключите samp-udf, по ссылке выше, в начало кода дописав:
AutoHotKey:
#include samp-udf.ahk

Код:
AutoHotKey:
$~NumpadEnter::
$~Enter::
if (isInChat() = 1 && isDialogOpen() == 0)
{
    Sleep 250
    blockChatInput()
    dwAddress := dwSAMP + 0x12D8F8
    chatInput := readString(hGTA, dwAddress, 256)
    IfWinNotActive, GTA:SA:MP
        return
    if RegExMatch(chatInput, "/cuf (.*)", id) {
        unBlockChatInput()
        Sleep, 200
        sendchat("/me достал с пояса наручники,затем надел наручники на нарушителя")
        sleep 2500
        sendchat("/cuff %id1%")
    } else
        unBlockChatInput()
return
 
  • Нравится
Реакции: Lamberto_Serafino

dmitri4

Известный
452
79
Как сделать, что бы при убийстве человека, в чат отправлялся текст
В принципе можно по таргету проверять хп игрока и потом сли оно <0 то пишет в чат, хотя.... Бредовая идея, мне кажется есть и другие способы
 

Lamberto_Serafino

Новичок
4
0
samp-udf: samp-udf.ahk(https://drive.google.com/file/d/1MTh07vgYtFBBpK1CkhDRakvzxxvt-DN6/view?usp=sharing)
Для работы скрипта, подключите samp-udf, по ссылке выше, в начало кода дописав:
AutoHotKey:
#include samp-udf.ahk

Код:
AutoHotKey:
$~NumpadEnter::
$~Enter::
if (isInChat() = 1 && isDialogOpen() == 0)
{
    Sleep 250
    blockChatInput()
    dwAddress := dwSAMP + 0x12D8F8
    chatInput := readString(hGTA, dwAddress, 256)
    IfWinNotActive, GTA:SA:MP
        return
    if RegExMatch(chatInput, "/cuf (.*)", id) {
        unBlockChatInput()
        Sleep, 200
        sendchat("/me достал с пояса наручники,затем надел наручники на нарушителя")
        sleep 2500
        sendchat("/cuff %id1%")
    } else
        unBlockChatInput()
return
Вот что пишет за ошибку: Erorr at line 2762 in #include file
Line Text:isInChat()
Error:Duplicate Function defintion.
В папку файл УДФ перемещён. В чём проблема?
 

dmitri4

Известный
452
79
Вот что пишет за ошибку: Erorr at line 2762 in #include file
Line Text:isInChat()
Error:Duplicate Function defintion.
В папку файл УДФ перемещён. В чём проблема?
Проверь еще раз чтоб UDF был в одной папке и название соответствовать тому что ты указал в include
 

Lamberto_Serafino

Новичок
4
0
Проверь еще раз чтоб UDF был в одной папке и название соответствовать тому что ты указал в include
Всё правильно. Даже переместил их совсем в другую папку,но так же..

Всё правильно. Даже переместил их совсем в другую папку,но так же..
М.. я понял в чём проблема. В Самом УДФ строка номер 2762. Вот на неё жалуется. Чё делать?
 
Последнее редактирование модератором:

SpoksLV

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

Andy Safino

Участник
69
4
У меня не большой вопрос с 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​
 
Последнее редактирование:

RellaX

Известный
80
9
У меня не большой вопрос с 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​
Записывай в переменные ник игрока по его иду и добавляй /uninvite в regexmatch или записывай последние строки с увольнением
FileAppend -Autohotkey(http://ahk-wiki.ru/fileappend)
FileAppend, Уволенные: *Тут переменная ника* | *Переменная причины* | %A_DD%/%A_MM%/%A_Year% %A_Hour%/%A_Min%/%A_Sec%`n, C:\Мои документы\Test.txt
 
  • Нравится
Реакции: Andy Safino