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

Andreykas1421

Новичок
47
0
В общем прошу помощи по соединению 2-х скриптов
1 - так называем сортировщик скриншотов.
2 - чтение чат лога
Проблема в том, что работает 1 раз и при повторном выборе чего либо не хочет сохранять скриншот. В чём может быть проблема то?

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

SetTimer, read, on
global SampDirScrennShot := % A_MyDocuments . "\GTA San Andreas User Files\SAMP\screens" ; путь к папке скриншотов samp
global MoveDirScheenShot := % A_ScriptDir . "\ScreenShots\" ; путь перемещения скриншотов
global NameScreenShot := "MyScreenShot-" ; приставка скриншота
global File := % A_MyDocuments . "\GTA San Andreas User Files\SAMP\Chatlog.txt"

:?:/org::
showDialog(2, "Helper","[1]Уволить игрока`n[2]Выдать выговор`n[3]Увольнительный рапорт", "ОК")
Result := LineResult()
if (!Result)
return
Gosub, dil%Result%
return

dil1:
SendChat("/me уволил игрока")
addChatMessage("уволил игрока")
return

dil2:
SendChat("/me выдал выговор")
addChatMessage("выдал выговор")
return

dil3:
SendChat("/me рапорт")
addChatMessage("рапорт")
return

read:
FileRead, out, % File
if (RegExMatch(out, "\[.*\] уволил игрока")) {
LectioName := "Увал"
SetTimer, ScreenTakeMove, On
    delLine("\[.*\] уволил игрока")
}

if (RegExMatch(out, "\[.*\] выдал выговор")) {
LectioName := "Выговор"
SetTimer, ScreenTakeMove, On
    delLine("\[.*\] выдал выговор")
}

if (RegExMatch(out, "\[.*\] рапорт")) {
LectioName := "Рапорт"
SetTimer, ScreenTakeMove, On
    delLine("\[.*\] рапорт")
}
return

delLine(string) {
    File := A_MyDocuments "\GTA San Andreas User Files\SAMP\Chatlog.txt"
    FileRead, All, % File
    FileOpen(File, "w").Write(RegExReplace(All, "(^|\R)" . string . "|" . string . "(\R|$)"))
}

return

ScreenTakeMove:
SetTimer, ScreenTakeMove, Off ; отключаем таймер во избежания мульти процессов
Send {F8} ; имитирум нажатие клавиши f8
sleep 4000 ; пауза 4сек (4*1000)
Line := 0 ; сбос строки с линии чата
Loop
{
    GetChatLine(Line, Chat) ; udf функция (считывание строк и чата) я хз вроде была ранше построена на основе чтения файла chatlog.txt рядом с папкой скринов
    IfInString, Chat, Screenshot Taken ; если в чате есть строка делаем следующее
    {
        RegExMatch(Chat, "Screenshot Taken - sa-mp-(?<index>.+).png", screen_) ; берем переменную чила скриншота и сохраняем как %screen_index%
        FormatTime, now_timecode, %A_Now%, dd.MM-HH.mm.ss ; создаем таймкод скрину с текущей датой на системе
        IfNotExist, % MoveDirScheenShot . LectioName
          FileCreateDir, % MoveDirScheenShot . LectioName
        FileMove, % SampDirScrennShot . "\sa-mp-" . screen_index . ".png", % MoveDirScheenShot . LectioName . "\" . NameScreenShot . now_timecode . ".png", 1 ;перемещаем с ключем 1 (если есть такой файл то с заменой)
        break ; завершаем цыкл
    }
    else
        Line++ ; добавляем +1 к циклу тоесть новую строку для чтения и поиска
}
return

LineResult() {
if (!isDialogOpen() || getDialogStyle() = 0 || getDialogStyle() = 1 || getDialogStyle() = 3)
return false
while (isDialogOpen())
continue
if(GetKeyState("Esc", "P"))
return false
return getDialogLineNumber()
}
return
 

Revalto

Известный
532
225
В общем прошу помощи по соединению 2-х скриптов
1 - так называем сортировщик скриншотов.
2 - чтение чат лога
Проблема в том, что работает 1 раз и при повторном выборе чего либо не хочет сохранять скриншот. В чём может быть проблема то?

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

SetTimer, read, on
global SampDirScrennShot := % A_MyDocuments . "\GTA San Andreas User Files\SAMP\screens" ; путь к папке скриншотов samp
global MoveDirScheenShot := % A_ScriptDir . "\ScreenShots\" ; путь перемещения скриншотов
global NameScreenShot := "MyScreenShot-" ; приставка скриншота
global File := % A_MyDocuments . "\GTA San Andreas User Files\SAMP\Chatlog.txt"

:?:/org::
showDialog(2, "Helper","[1]Уволить игрока`n[2]Выдать выговор`n[3]Увольнительный рапорт", "ОК")
Result := LineResult()
if (!Result)
return
Gosub, dil%Result%
return

dil1:
SendChat("/me уволил игрока")
addChatMessage("уволил игрока")
return

dil2:
SendChat("/me выдал выговор")
addChatMessage("выдал выговор")
return

dil3:
SendChat("/me рапорт")
addChatMessage("рапорт")
return

read:
FileRead, out, % File
if (RegExMatch(out, "\[.*\] уволил игрока")) {
LectioName := "Увал"
SetTimer, ScreenTakeMove, On
    delLine("\[.*\] уволил игрока")
}

if (RegExMatch(out, "\[.*\] выдал выговор")) {
LectioName := "Выговор"
SetTimer, ScreenTakeMove, On
    delLine("\[.*\] выдал выговор")
}

if (RegExMatch(out, "\[.*\] рапорт")) {
LectioName := "Рапорт"
SetTimer, ScreenTakeMove, On
    delLine("\[.*\] рапорт")
}
return

delLine(string) {
    File := A_MyDocuments "\GTA San Andreas User Files\SAMP\Chatlog.txt"
    FileRead, All, % File
    FileOpen(File, "w").Write(RegExReplace(All, "(^|\R)" . string . "|" . string . "(\R|$)"))
}

return

ScreenTakeMove:
SetTimer, ScreenTakeMove, Off ; отключаем таймер во избежания мульти процессов
Send {F8} ; имитирум нажатие клавиши f8
sleep 4000 ; пауза 4сек (4*1000)
Line := 0 ; сбос строки с линии чата
Loop
{
    GetChatLine(Line, Chat) ; udf функция (считывание строк и чата) я хз вроде была ранше построена на основе чтения файла chatlog.txt рядом с папкой скринов
    IfInString, Chat, Screenshot Taken ; если в чате есть строка делаем следующее
    {
        RegExMatch(Chat, "Screenshot Taken - sa-mp-(?<index>.+).png", screen_) ; берем переменную чила скриншота и сохраняем как %screen_index%
        FormatTime, now_timecode, %A_Now%, dd.MM-HH.mm.ss ; создаем таймкод скрину с текущей датой на системе
        IfNotExist, % MoveDirScheenShot . LectioName
          FileCreateDir, % MoveDirScheenShot . LectioName
        FileMove, % SampDirScrennShot . "\sa-mp-" . screen_index . ".png", % MoveDirScheenShot . LectioName . "\" . NameScreenShot . now_timecode . ".png", 1 ;перемещаем с ключем 1 (если есть такой файл то с заменой)
        break ; завершаем цыкл
    }
    else
        Line++ ; добавляем +1 к циклу тоесть новую строку для чтения и поиска
}
return

LineResult() {
if (!isDialogOpen() || getDialogStyle() = 0 || getDialogStyle() = 1 || getDialogStyle() = 3)
return false
while (isDialogOpen())
continue
if(GetKeyState("Esc", "P"))
return false
return getDialogLineNumber()
}
return
Криво соединил, жди мб перепишу
 

Carlos Reyes

Новичок
14
0
Пытаюсь сделать автоответчик, помогите, а то нимагу уже)
Код:
#include SAMPUDF.ahk
#IfWinActive GTA:SA:MP
chatlog := A_MyDocuments "\GTA San Andreas User Files\SAMP\chatlog.txt"
Loop {
    if (!active)
        Continue
    FileRead, chat, %chatlog%
    if (RegExMatch(chat, ".* Отправитель: (\d+)", number)) {
        SendChat("/sms " number1 "[автоответчик] я сейчас занят, напишите позже")
        FileDelete, %chatlog%
    }
}
!5:: ; Активация/ Деактивация
active := !active
addChatMessageEx("FFFFFF", "Автоответчик " (active ? "включен":"выключен"))
Return
При запуске выдаёт ошибку "Call to nonexistent function." и... "Specifically: SendChat("/sms"/number1"[автоответчик] я сейчас занят, напишите позже")"
 

Revalto

Известный
532
225
Буду очень признателен тебе за помощь. Второй день просто уже мучаюсь с этим..
Код:
global file_chat := A_MyDocuments "/GTA San Andreas User Files/SAMP/chatlog.txt" ; путь к чат логу
global SampDirScrennShot := % A_MyDocuments . "\GTA San Andreas User Files\SAMP\screens" ; путь к папке скриншотов samp
global MoveDirScheenShot := % A_ScriptDir . "\ScreenShots\" ; путь перемещения скриншотов
global NameScreenShot := "MyScreenShot-" ; приставка скриншота

SetTimer, Chat, 50

Chat:
FileRead, chatlog, % file_chat

if (RegExMatch(chatlog, "\[.*\] уволил игрока", chattext))
{
    LectioName := "Увал"
    SetTimer, ScreenTakeMove, 50
    save(chatlog) ; Функцию возьми с доп функций UDF
}
if (RegExMatch(chatlog, "\[.*\] выдал выговор", chattext))
{
    LectioName := "Выговор"
    SetTimer, ScreenTakeMove, 50
    save(chatlog) ; Функцию возьми с доп функций UDF
}
if (RegExMatch(chatlog, "\[.*\] рапорт", chattext))
{
    LectioName := "Увал"
    SetTimer, ScreenTakeMove, 50
    save(chatlog) ; Функцию возьми с доп функций UDF
}
Return

ScreenTakeMove:
SetTimer, ScreenTakeMove, Off ; отключаем таймер во избежания мульти процессов
Send {F8} ; имитирум нажатие клавиши f8
sleep 4000 ; пауза 4сек (4*1000)
Line := 0 ; сбос строки с линии чата
Loop
{
    GetChatLine(Line, Chat) ; udf функция (считывание строк и чата) я хз вроде была ранше построена на основе чтения файла chatlog.txt рядом с папкой скринов
    IfInString, Chat, Screenshot Taken ; если в чате есть строка делаем следующее
    {
        RegExMatch(Chat, "Screenshot Taken - sa-mp-(?<index>.+).png", screen_) ; берем переменную чила скриншота и сохраняем как %screen_index%
        FormatTime, now_timecode, %A_Now%, dd.MM-HH.mm.ss ; создаем таймкод скрину с текущей датой на системе
        IfNotExist, % MoveDirScheenShot . LectioName
        FileCreateDir, % MoveDirScheenShot . LectioName
        FileMove, % SampDirScrennShot . "\sa-mp-" . screen_index . ".png", % MoveDirScheenShot . LectioName . "\" . NameScreenShot . now_timecode . ".png", 1 ;перемещаем с ключем 1 (если есть такой файл то с заменой)
        break ; завершаем цыкл
    }
    else
        Line++ ; добавляем +1 к циклу тоесть новую строку для чтения и поиска
}
return
 
  • Нравится
Реакции: AnimeLore

AnimeLore

Новичок
9
0
Код:
:?:/погоня::
ray := getPlayerZone()
ts := getTargetVehicleModelNameById(getId()) ; getId() - твой ID
cts := getTargetVehicleColor1ById(getId()) ; getId() - твой ID

SendChat("/r " ts " | " cts " | " ray)
return
Нее, там в моем коде есть диалог, в который нужно ввести ID игрока. Типа, найти вывести название машины у определенного игрока. Или я тупой и ты это и написал -_-
 

Revalto

Известный
532
225
Нее, там в моем коде есть диалог, в который нужно ввести ID игрока. Типа, найти вывести название машины у определенного игрока. Или я тупой и ты это и написал -_-
Просто подставь переменную с ID игрока вместо getId() и все
 
  • Нравится
Реакции: AnimeLore

DeMoN3D

Известный
366
77
Допустим:
PHP:
!1::
SendChat("Добрый день что у вас болит?")
Sleep 5000
SendChat("/me открыл сумку")
Sleep 3000
SendChat("достал аспирин")
Sleep 2800
SendChat("передал больному")
Sleep 2900
SendChat("/heal{SPASE} 100{SPACE}
return
И мне надо что бы при каждом входе в игру в чат писали что активация alt+1
можно сделать как ответили выше (тот код проверяет включён ли самп), а можно сделать просто добавлением локального текста в чат( я для себя таким пользуюсь).
AutoHotKey:
sleep 2000 ; Задержка 2 секунды после запуска скрипта, для себя ставил.
AddChatMessageEx("FF0000", "Чтобы активировать скрипт нажмите Alt+1")
!1::
; и тут продолжение твоего кода
 

DeMoN3D

Известный
366
77
Пытаюсь сделать автоответчик, помогите, а то нимагу уже)
Код:
#include SAMPUDF.ahk
#IfWinActive GTA:SA:MP
chatlog := A_MyDocuments "\GTA San Andreas User Files\SAMP\chatlog.txt"
Loop {
    if (!active)
        Continue
    FileRead, chat, %chatlog%
    if (RegExMatch(chat, ".* Отправитель: (\d+)", number)) {
        SendChat("/sms " number1 "[автоответчик] я сейчас занят, напишите позже")
        FileDelete, %chatlog%
    }
}
!5:: ; Активация/ Деактивация
active := !active
addChatMessageEx("FFFFFF", "Автоответчик " (active ? "включен":"выключен"))
Return
При запуске выдаёт ошибку "Call to nonexistent function." и... "Specifically: SendChat("/sms"/number1"[автоответчик] я сейчас занят, напишите позже")"


upload_2018-8-19_23-0-40.png


видишь как должно быть и какая у тебя ошибка? исправь и всё заработает
 

Carlos Reyes

Новичок
14
0
Посмотреть вложение 17919

видишь как должно быть и какая у тебя ошибка? исправь и всё заработает
Не помогло, да и это, наверное, я случайно поставил "/", когда писал ошибку.

Кто знает готовый автоответчик, скиньте, пожалуйста. А то у меня ничего не получилось :(
 
Последнее редактирование модератором:

Andy Safino

Участник
69
4
Посмотреть вложение 17919

видишь как должно быть и какая у тебя ошибка? исправь и всё заработает
К чему тут как должно быть, порядок не важен, в конце кода у тебя символы - ")", попробуй ""), и сделай так чтобы слова без переменной имели красный оттенок
 

DeMoN3D

Известный
366
77
К чему тут как должно быть, порядок не важен, в конце кода у тебя символы - ")", попробуй ""), и сделай так чтобы слова без переменной имели красный оттенок
его ")" это цитата ошибки, присмотрись. А насчёт кода, у меня всё прекрасно работает, скинул точь-в-точь