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

index

Известный
126
82
Приветствую всех, у меня проблема с моим ахк скриптом: хочу чтобы все три команды задействовались, а в итоге задействуется только одна, когда пишешь все три. Опубликовал без SAMP.UDF
Код:
SendMessage, 0x50,, 0x4190419,,

:?:/piarv::

addChatMessage("{FFFFFF}Пиар в {00BFFF}/vr{FFFFFF} включён! | Разработчик: {8A2BE2}Marcus {FF0000}Devil ")

while(true){

addChatMessage("{ADFF2F}Скрипт начинает пиар")

sleep 1000

SendChat("/vr Идет набор в Семью с Галочкой/Брендом/Все улучшения. При себе иметь 200к или Титан вип. Звоните - 3365355!")

sleep 1000

addChatMessage("{ADFF2F}Скрипт удачно пропиарил бар! Ожидайте дальнейшего пиара")


sleep 170000

addChatMessage("{FF0000}Внимание, через 10 секунд сработает скрипт!")

sleep 12000


}

return


:?:/piarf::

addChatMessage("{FFFFFF}Пиар в {DC143C}/fam{FFFFFF} включён! | Разработчик: {8A2BE2}Marcus {FF0000}Devil ")

while(true){


addChatMessage("{ADFF2F}Скрипт начинает пиар")

sleep 1000

SendChat("/fam Открылся Бар на Санта-Марии (/финдибиз 51). Играйте в Орёл и Решку. Ставки до 600.000$!")

sleep 1000

addChatMessage("{ADFF2F}Скрипт удачно пропиарил бар! Ожидайте дальнейшего пиара")


sleep 60000

}

return

:?:/piara::

addChatMessage("{FFFFFF}Пиар в {228B22}/ad{FFFFFF} включён! | Разработчик: {8A2BE2}Marcus {FF0000}Devil ")

while(true){


addChatMessage("{ADFF2F}Скрипт начинает пиар")

sleep 1000

SendChat("/ad 1 В баре 51 на Пляже Санта Мария проходят игры в орёл и решка ставки до 600.000!")

sleep 1000

addChatMessage("{ADFF2F}Скрипт удачно разместил объявление о пиаре! Ожидайте дальнейшего пиара")


sleep 120000


}

return


:?:/piarhelp::

addChatMessage("{FF8C00}PiarHelper | Версия - 1.2 (Beta)")

addChatMessage("{FFFFFF}Разработчик скрипта: {8A2BE2}Marcus {FF0000}Devil")

addChatMessage("{00FA9A}/piarv{FFFFFF} - Пиар в {00BFFF}/vr{FFFFFF} чат")

addChatMessage("{00FA9A}/piarf{FFFFFF} - Пиар в {DC143C}/fam{FFFFFF} чат")

addChatMessage("{00FA9A}/piara{FFFFFF} - Пиар в {228B22}/ad{FFFFFF} чат")

return

F11::

addChatMessage("{FFFFFF}Скрипт {FF0000}остановил {FFFFFF}работу! Для дальнейшей работы нужно свернуть игру и в панели задач перезапустить его")

pause
Потому что использовать Sleep с большими значениями и бесконечные циклы в ahk - неверное решение, т.к. ahk однопоточный, а Sleep, накладывающийся друг на друга в разных потоках (ахк'шных псевдопотоках, если точнее) работает некорректно. Присмотрись к SetTimer.
 
  • Нравится
Реакции: degrando

|DEVIL|

Известный
359
273
Потому что использовать Sleep с большими значениями и бесконечные циклы в ahk - неверное решение, т.к. ahk однопоточный, а Sleep, накладывающийся друг на друга в разных потоках (ахк'шных псевдопотоках, если точнее) работает некорректно. Присмотрись к SetTimer.
Спасибо за помощь
Потому что использовать Sleep с большими значениями и бесконечные циклы в ahk - неверное решение, т.к. ahk однопоточный, а Sleep, накладывающийся друг на друга в разных потоках (ахк'шных псевдопотоках, если точнее) работает некорректно. Присмотрись к SetTimer.
Можешь пожалуйста скинуть пример какой-нибудь связанный с моим случаем? Ото я разобраться не могу в тех которые на русскоязычном
 
Последнее редактирование:

index

Известный
126
82
Можешь пожалуйста скинуть пример какой-нибудь связанный с моим случаем? Ото я разобраться не могу в тех которые на русскоязычном
AutoHotKey:
f1 := Func("SendChat").bind("/vr Идет набор в Семью с Галочкой/Брендом/Все улучшения. При себе иметь 200к или Титан вип. Звоните - 3365355!")
f2 := Func("SendChat").bind("/fam Открылся Бар на Санта-Марии (/финдибиз 51). Играйте в Орёл и Решку. Ставки до 600.000$!")
f3 := Func("SendChat").bind("/ad 1 В баре 51 на Пляже Санта Мария проходят игры в орёл и решка ставки до 600.000!")


:?:/piarv::
SetTimer % f1, % (f1_tog := !f1_tog) ? 182000 : "Off"
; Примечание: в случае включения первый запуск функции будет через 182000. Если нужен запуск сразу - достаточно использовать:
f1.call()
return

:?:/piarf::
SetTimer % f2, % (f2_tog := !f2_tog) ? 182000 : "Off"
return

:?:/piara::
SetTimer % f3, % (f3_tog := !f3_tog) ? 182000 : "Off"
return

F11::pause,, 1
 
Последнее редактирование:
  • Нравится
Реакции: degrando и |DEVIL|

|DEVIL|

Известный
359
273
AutoHotKey:
f1 := Func("SendChat").bind("/vr Идет набор в Семью с Галочкой/Брендом/Все улучшения. При себе иметь 200к или Титан вип. Звоните - 3365355!")
f2 := Func("SendChat").bind("/fam Открылся Бар на Санта-Марии (/финдибиз 51). Играйте в Орёл и Решку. Ставки до 600.000$!")
f3 := Func("SendChat").bind("/ad 1 В баре 51 на Пляже Санта Мария проходят игры в орёл и решка ставки до 600.000!")

:?:/piarv::
SetTimer % f1, % (f1_tog := !f1_tog) ? 182000 : "Off"
return

:?:/piarf::
SetTimer % f2, % (f2_tog := !f2_tog) ? 182000 : "Off"
return

:?:/piara::
SetTimer % f3, % (f3_tog := !f3_tog) ? 182000 : "Off"
return

F11::pause,, 1
Спасибо, ты даже не представляешь как ты помог)
 

degrando

Известный
362
127
AutoHotKey:
f1 := Func("SendChat").bind("/vr Идет набор в Семью с Галочкой/Брендом/Все улучшения. При себе иметь 200к или Титан вип. Звоните - 3365355!")
f2 := Func("SendChat").bind("/fam Открылся Бар на Санта-Марии (/финдибиз 51). Играйте в Орёл и Решку. Ставки до 600.000$!")
f3 := Func("SendChat").bind("/ad 1 В баре 51 на Пляже Санта Мария проходят игры в орёл и решка ставки до 600.000!")

:?:/piarv::
SetTimer % f1, % (f1_tog := !f1_tog) ? 182000 : "Off"
return

:?:/piarf::
SetTimer % f2, % (f2_tog := !f2_tog) ? 182000 : "Off"
return

:?:/piara::
SetTimer % f3, % (f3_tog := !f3_tog) ? 182000 : "Off"
return

F11::pause,, 1
AHK 2.0?
 

index

Известный
126
82
Это v1. В v2 убрали процент-пробельную нотацию (% ), теперь ahk'шные функции используются как обычные. Так же в v2 первый аргумент SetTimer'a может быть rvalue, тогда как в v1 - это имя метки/функции или переменная, содержащая Func/BoundFunc-object (lvalue).
 

degrando

Известный
362
127
Это v1. В v2 убрали процент-пробельную нотацию (% ), теперь ahk'шные функции используются как обычные. Так же в v2 первый аргумент SetTimer'a может быть rvalue, тогда как в v1 - это имя метки/функции или переменная, содержащая Func/BoundFunc-object (lvalue).
Пиздец ты умный)
 
  • Ха-ха
Реакции: index
AutoHotKey:
f1 := Func("SendChat").bind("/vr Идет набор в Семью с Галочкой/Брендом/Все улучшения. При себе иметь 200к или Титан вип. Звоните - 3365355!")
f2 := Func("SendChat").bind("/fam Открылся Бар на Санта-Марии (/финдибиз 51). Играйте в Орёл и Решку. Ставки до 600.000$!")
f3 := Func("SendChat").bind("/ad 1 В баре 51 на Пляже Санта Мария проходят игры в орёл и решка ставки до 600.000!")


:?:/piarv::
SetTimer % f1, % (f1_tog := !f1_tog) ? 182000 : "Off"
; Примечание: в случае включения первый запуск функции будет через 182000. Если нужен запуск сразу - достаточно использовать:
f1.call()
return

:?:/piarf::
SetTimer % f2, % (f2_tog := !f2_tog) ? 182000 : "Off"
return

:?:/piara::
SetTimer % f3, % (f3_tog := !f3_tog) ? 182000 : "Off"
return

F11::pause,, 1
@Использовать динамический вызов функции
@Не использовать командный препроцессор на UDF
@2019 век
 
  • Ха-ха
  • Вау
Реакции: meowprd и index

клешь рояль

Известный
1,255
551
взял основу от сюда https://blast.hk/threads/31713/
и чуть переделал под майн, но не работает. Должен показывать msg box но нечего не происходит.
AutoHotKey:
ChatLog = C:\Users\Ivan\AppData\Roaming\.vimeworld\minigames\logs\latest.txt

loop
{
lastline := GetNewLine(ChatLog)
var = беру
RegExMatch(var, "беру", var)
MsgBox % var1

If expression !=
{
   MsgBox % var1
}
}

GetNewLine(filename)
{
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
}

!end::ExitApp
end::Reload
 

meowprd

Тот самый Котовский
Проверенный
1,280
712
взял основу от сюда https://blast.hk/threads/31713/
и чуть переделал под майн, но не работает. Должен показывать msg box но нечего не происходит.
AutoHotKey:
ChatLog = C:\Users\Ivan\AppData\Roaming\.vimeworld\minigames\logs\latest.txt

loop
{
lastline := GetNewLine(ChatLog)
var = беру
RegExMatch(var, "беру", var)
MsgBox % var1

If expression !=
{
   MsgBox % var1
}
}

GetNewLine(filename)
{
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
}

!end::ExitApp
end::Reload

Что ты хочешь вывести? var1 у тебя будет пустая, ибо ты не так используешь RegExMatch

Строку дай, которая нужна и что нужно найти
 
  • Нравится
Реакции: клешь рояль

клешь рояль

Известный
1,255
551
Что ты хочешь вывести? var1 у тебя будет пустая, ибо ты не так используешь RegExMatch

Строку дай, которая нужна и что нужно найти
строка [16:25:47] [Client thread/INFO]: [CHAT] Королевский зомби был повержен! Нападавшие получили ценные сокровища!
надо получить время 16:25 и прибавить 20 и сохранить где то или вывести, и так ещё 3 босса ( но надеюсь я это сам смогу )
 

meowprd

Тот самый Котовский
Проверенный
1,280
712
строка [16:25:47] [Client thread/INFO]: [CHAT] Королевский зомби был повержен! Нападавшие получили ценные сокровища!
надо получить время 16:25 и прибавить 20 и сохранить где то или вывести, и так ещё 3 босса ( но надеюсь я это сам смогу )

прибавить 20 к минутам или к секундам?
 
  • Нравится
Реакции: клешь рояль

meowprd

Тот самый Котовский
Проверенный
1,280
712
AutoHotKey:
#SingleInstance force
#Persistent
#UseHook

SetTimer, Update, 50


ChatLog = C:\Users\Ivan\AppData\Roaming\.vimeworld\minigames\logs\latest.txt

Update:
lastline := GetNewLine(ChatLog)
if(RegExMatch(lastline, "\[([0-9]*):([0-9]*):[0-9]*\] \[Client thread\/INFO\]: \[CHAT\] Королевский зомби был повержен!.*", var))
{
    hour := var1
    minute := var2
    
    minute += 20
    if(minute > 59)
    {
        hour++
        minute := minute-60
        hour := format("{:02d}", hour)
        minute := format("{:02d}", minute)
    }
    msgbox, Founded time in chatlog: %var1%:%var2%`nNew time: %hour%:%minute%
}
return


GetNewLine(filename)
{
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
}

!end::ExitApp
end::Reload

Обязательно проверь работоспособность.