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

Andy Safino

Участник
69
4
хотя бы скажи, что не знаешь или не хочешь, а то сижу жду всё :)
Не смотрел ещё, сейчас буду)

Вот сам скрипт:
AutoHotKey:
#NoEnv
SendMode Input
SetWorkingDir %A_ScriptDir%
#Include, SAMP.ahk ;название udf
#IfWinActive, GTA:SA:MP


o:= 0 ; количество станций
k:= 0 ; количество кругов
SetFormat, float, 0.0
z:= 0 ; зарплата
SetFormat, float, 0.0
F2:: ; Клавиша активации скрипта
Addchatmessage("{ff0000}Счётчик активирован")
way = %A_MyDocuments%\GTA San Andreas User Files\SAMP\chatlog.txt ; Путь к ЧатЛогу

FileDelete, %way%  ; Удаляем ЧатЛог
Loop
{
FileRead, file, %way%  ; Читаем ЧатЛог
IfInString, file, Станция. Ждите пассажиров ; Ищем в ЧатЛоге фразу
{
Sleep 1500 ; Задержка
o:=o+1
k:=o/6
z:=o*408.33
AddChatMessage("{ffffff}Количество станций: {35bf4d}" o)
AddChatMessage("{ffffff}Количество кругов: {35bf4d}" k)
AddChatMessage("{ffffff}Зарплата: {35bf4d}~" z "{35bf4d}$" )
FileDelete, %way%  ; Удаляем ЧатЛог
}
}
return

F3:: ; обнуление
o:=0
z:=0
Addchatmessage("{ff0000}Счётчик обнулён")
return

F11::                 ; приостановка по F11.
  If not Stop
  {
    Addchatmessage("{ff0000}Счётчик приостановился {00ff04}(F12 для включения)")
    Stop := True
    Pause
  }
Return

F12::                 ; возобновление по F12.
  If Stop
  {
    Stop := False
    Pause
    Addchatmessage("{ff0000}Счётчик возобновился {00ff04}(F11 для выключения)")
  }
return

Сама проблема у меня случилась в том, что я не знаю, как сделать точное количество кругов. Один круг равен 6 станциям. Но скрипт начинает писать Количество кругов: 1 , когда станций 3, я понимаю что он округляет, но как сделать так, чтобы он не округлял а писал 0 до того, пока станций не станет 6. То есть, мне надо чтобы он писал только тогда, когда ответ без остатка. В общем-то буду благодарен
Попробуй в переменной - k, написать не - 0/6, а [0-6]. Если не поможет, я бессилен

как читать строки с данного диалогового окна и будущи выводить определенную строчку в чат?
Что именно тебе надо из окна?
 
Последнее редактирование модератором:

madrasso

Потрачен
883
324
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Хотелось бы самому узнать.
Вопрос, как сделать активацию/деактивацию части скрипта через дилог? Например:
GunList [Отключено], При нажатии: GunList [Включено]

Ну, хотя бы так: (версия для начинающих, можно намного короче и лучше, но мне лень :))

AutoHotKey:
if (status = 1)
    status1 := "Включено"
else
    status1 := "Выключено"
if (statusq = 1)
    status2 := "Включено"
else
    status2 := "Выключено"
showdialog("2", "Название", "Ускорение: " status1 "`nОстальное: " status2, "Ок")
while (isDialogOpen()) {
} if  (getDialogIndex() = 1) {
    if (status = 1)
        status = 0
    else
        status = 1
} else if  (getDialogIndex() = 2) {
    if (statusq = 1)
        statusq = 0
    else
        statusq = 1
}
return

Кто сказал что нельзя? Вообще-то можно.
Помогите написать скрипт который, при нажатии на клавишу кикал бы тебя с сервера и писало бы в чат "Вы были кикнуты по подозрению в читерстве" просто никак не могу найти нужные опкоды​


Ну для начала юзаем:
Код:
disconnectEx() ; - Отключение от сервера
а дальше через addchatmessage добавляем "Вы были кикнуты по подозрению в читерстве"
ну и все в этом духе
 
Последнее редактирование модератором:
  • Нравится
Реакции: oPawka

Andy Safino

Участник
69
4
Ну, хотя бы так: (версия для начинающих, можно намного короче и лучше, но мне лень :))

AutoHotKey:
if (status = 1)
    status1 := "Включено"
else
    status1 := "Выключено"
if (statusq = 1)
    status2 := "Включено"
else
    status2 := "Выключено"
showdialog("2", "Название", "Ускорение: " status1 "`nОстальное: " status2, "Ок")
while (isDialogOpen()) {
} if  (getDialogIndex() = 1) {
    if (status = 1)
        status = 0
    else
        status = 1
} else if  (getDialogIndex() = 2) {
    if (statusq = 1)
        statusq = 0
    else
        statusq = 1
}
return
А куда можно прорисовать действие?
 

madrasso

Потрачен
883
324
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
А куда можно прорисовать действие?
AutoHotKey:
if (status = 1)
    status1 := "Включено"
else
    status1 := "Выключено"
if (statusq = 1)
    status2 := "Включено"
else
    status2 := "Выключено"
showdialog("2", "Название", "Ускорение: " status1 "`nОстальное: " status2, "Ок")
while (isDialogOpen()) {
} if  (getDialogIndex() = 1) {
    if (status = 1) {
        status = 0
        ; действие если включен
    } else {
        status = 1
        ; действие если выключен
    }
} else if  (getDialogIndex() = 2) {
    if (statusq = 1) {
        statusq = 0
        ; действие если включен
    } else {
        statusq = 1
        ; действие если выключен
    }
}
return
 

Andy Safino

Участник
69
4
AutoHotKey:
if (status = 1)
    status1 := "Включено"
else
    status1 := "Выключено"
if (statusq = 1)
    status2 := "Включено"
else
    status2 := "Выключено"
showdialog("2", "Название", "Ускорение: " status1 "`nОстальное: " status2, "Ок")
while (isDialogOpen()) {
} if  (getDialogIndex() = 1) {
    if (status = 1) {
        status = 0
        ; действие если включен
    } else {
        status = 1
        ; действие если выключен
    }
} else if  (getDialogIndex() = 2) {
    if (statusq = 1) {
        statusq = 0
        ; действие если включен
    } else {
        statusq = 1
        ; действие если выключен
    }
}
return
Ты мой сенсей)
 

AnRtom

Новичок
13
1
Кто может помочь фиксануть регулярку, работает некорректно. Суть - мы чекаем по /members кого нет в зоне стрима и выводим их в отдельно диалоговое окно, далее мы можем выбрать любого игрока из данного диалога и после нажатия на него, автоматически должно вести /fwarn id(выбранного игрока) За помощь буду презнателен. Код для AZRP
UDF - SAMP.ahk — RGhost — файлообменник(http://rgho.st/8gxnZCStN)

Код:
F1::
SendChat("/members")
list_player := []
for k, v in getDialogLines()
{
    if (RegExMatch(v, "^{.*}([A-z_]{4,24})\((\d{1,3})\)\s+(.*)\((\d+)\)\s+(\d)\s+(\d+)$", out_pars))
    {
  if (!isPlayerInStreamById(out_pars2, 30))
  {
   list_player.Push(v)
  }
    }
}

showDialog(4, "Проверка строя", GetText(list_player)[1], "X")
while (isDialogOpen())
    {

        While((GetKeyState("Enter", "P") or GetKeyState("LButton", "P") or (isDialogButtonSelected() = 1 and GetKeyState("LButton", "P"))))
        {
sleep, 135
     selLine := getDialogLine(getDialogLineNumber())
             if (RegExMatch(selLine, "^{.*}([A-z_]{4,24})\((\d{1,3})\)\s+(.*)\((\d+)\)\s+(\d)\s+(\d+)$", out_pars))
                SendInput, {F6}/fwarn %out_pars2%{Space}
        }
    }
Return
 
  • Нравится
Реакции: _DeAs_

madrasso

Потрачен
883
324
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Кто может помочь фиксануть регулярку, работает некорректно. Суть - мы чекаем по /members кого нет в зоне стрима и выводим их в отдельно диалоговое окно, далее мы можем выбрать любого игрока из данного диалога и после нажатия на него, автоматически должно вести /fwarn id(выбранного игрока) За помощь буду презнателен. Код для AZRP
UDF - SAMP.ahk — RGhost — файлообменник(http://rgho.st/8gxnZCStN)

Код:
F1::
SendChat("/members")
list_player := []
for k, v in getDialogLines()
{
    if (RegExMatch(v, "^{.*}([A-z_]{4,24})\((\d{1,3})\)\s+(.*)\((\d+)\)\s+(\d)\s+(\d+)$", out_pars))
    {
  if (!isPlayerInStreamById(out_pars2, 30))
  {
   list_player.Push(v)
  }
    }
}

showDialog(4, "Проверка строя", GetText(list_player)[1], "X")
while (isDialogOpen())
    {

        While((GetKeyState("Enter", "P") or GetKeyState("LButton", "P") or (isDialogButtonSelected() = 1 and GetKeyState("LButton", "P"))))
        {
sleep, 135
     selLine := getDialogLine(getDialogLineNumber())
             if (RegExMatch(selLine, "^{.*}([A-z_]{4,24})\((\d{1,3})\)\s+(.*)\((\d+)\)\s+(\d)\s+(\d+)$", out_pars))
                SendInput, {F6}/fwarn %out_pars2%{Space}
        }
    }
Return
дай строку на которую сделать регулярку
 

AnRtom

Новичок
13
1
дай строку на которую сделать регулярку
Вот как должно быть, но выводит так, и иногда вместо проверки просто показыват members
Как должно быть: 6Y1tpnxdXfk.jpg
Как получается: LWbTw5Nbb58.jpg
 

Вложения

  • 6Y1tpnxdXfk.jpg
    6Y1tpnxdXfk.jpg
    95.4 KB · Просмотры: 187
  • LWbTw5Nbb58.jpg
    LWbTw5Nbb58.jpg
    16.6 KB · Просмотры: 168
Последнее редактирование:

scrihack

Новичок
8
1
Кто поможет сделать admin-tools для самп, наказания по просьбам.
Например, написали /a /mute 228 40 caps, а ты нажал клавишу и выдалось наказание
Ну или что-то в этом роде, помогите
 
  • Нравится
Реакции: Andy Safino

Andy Safino

Участник
69
4
Посмотреть вложение 17401
теперь пустота вообще вместо цифр
Сорян тогда, мне не под силу, попробуй другие символы.

Кто поможет сделать admin-tools для самп, наказания по просьбам.
Например, написали /a /mute 228 40 caps, а ты нажал клавишу и выдалось наказание
Ну или что-то в этом роде, помогите
Код:
if(RegExMatch(chatInput, "^/warn"))
    {
    if(RegExMatch(chatInput, "^/warn (\d{1,3}) (.*)", info))
        {
             Name := getPlayerNameById(info1)
             NickName := RegExReplace(Name, "_", " ") ;Вывод ника без " _ "
             ArrayToSendChat(["/warn " info1 " " info2])
                FileAppend, Варны: %nick% | %info2% | %A_DD%.%A_MM%.%A_Year%`, %A_Hour%.%A_Min%.%A_Sec%, %A_ScriptDir%/test.txt
        }
    else addChatMessage("{0070ba}[AHK] {bdbdbd}Используйте: {FFFFFF}/warn [id] [причина]")
}
По поводу админ Тулса легче будет на lua, а так - диалоги.
Это команда для функционала, а так ты можешь к ней прибавить RegExchat и ChatLine и по ним уже тыкать)

Что тебе нужно из того окна? Какая строка?
 
Последнее редактирование модератором:

madrasso

Потрачен
883
324
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
  • Нравится
Реакции: DeMoN3D и Andy Safino

madrasso

Потрачен
883
324
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Сделайте бинд /apanel 6 пункт,на кнопку Home.Буду благодарен.
Без удф, ибо мне лень тебе объяснять че как подключать, кидать тебе удф и так-далее.
AutoHotKey:
NumpadHome::
sendinput, {f6}/apanel{enter}
sleep, 150
sendinput, {down 6}{enter}
return