NoEnv SingleInstance Force Persistent Menu Tray Tip Ответы на викторин

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
#NoEnv
#SingleInstance, Force
#Persistent
Menu, Tray, Tip, % "Ответы на викторину для Pentacraft"
Menu, Tray, add, Инструкция, about
Menu, Tray, add, Настройки, setDirLog
Menu, Tray, add, Закрыть, GuiClose
Menu, Tray, NoStandard
global dirLogs := ""
RegRead, dirLogs, HKCU, FForest\PentaCraft, dirLogs
if (!dirLogs)
setDirLog()
global chatLog := new LogRead( dirLogs "\latest.log", 0)
_timer := 600, timer := _timer
SetTimer, Chat, 150
SetTimer, Timer, 1000
calc := ComObjCreate("ScriptControl")
calc.Language := "VBScript"
Chat:
messages := chatLog.getLastStr()
for k, v in messages
{
if (RegExMatch(v, "\[Викторина\] Первый игрок, решивший (.*) (\+|\-|\*|\/) (.*), выиграет .* монет.", chattext))
{
timer := _timer
SoundBeep
result := calc.Eval(chattext1 " " chattext2 " " chattext3)
output := "| Ответ: " result
copy(result)
}
else if (RegExMatch(v, "\[Викторина\] Первый игрок, правильно ответивший на вопрос ниже, выиграет .* монет."))
{
timer := _timer
SoundBeep
if (RegExMatch(messages[k + 1], "\[CHAT\] (.*)", out_pars))
{
if (result := GetResponse(out_pars1))
{
output := "| " (result ? "Ответ: " result : "Ответ не найден")
copy(result)
}
}
}
}
Return
GuiClose:
ExitApp
return
about:
MsgBox,, Инструкция, % "Об скрипте`nСкрипт был сделать для фарма местной валюты.`nДанный скрипт имеет 99% ответ на все вопросы викторины.`nСКРИПТ НЕ ДЛЯ ПРОДАЖИn`n`nИнструкция`n1)Запустить Ваш сервер PentaCraft.`n2)Запустить скрипт`n2.1)Если у вас путь уже установлен тогда вы молодцы :D`n2.2)При первом запуске скрипт предложит указать путь к логам`n--По умолчанию лог находится: --C:\Users\ИМЯ_ПК\Pentacraft\updates\СЕРВЕР\logs`n--Если Вы уже указали путь, и он не верный, вы можете его --изменить нажав ПКМ на иконку в трее -> Настройки.`n3)С вверху должен появится таймер, если он есть тогда вы сделали --всё верно.`n4)Как только викторина объявится в чат поступит звуковое --оповещение, и с сверху покажет возможный ответ на вопрос.`n--Так же ответ с копируется в буфер обмена, это значит что можно --открыть чат и нажать сочетание клавиш Ctrl + V`n"
return
Timer:
WinGetTitle, title, A
if (timer > 0)
timer--
WinGetPos,,, Width, Height, A
if (RegExMatch(title, "Pentacraft .* \[1.7.10\]"))
ToolTip, % "Осталось до викторины: " times(timer) " " output, 7, 0
else
ToolTip
Return
times(sec)
{
h := sec/3600 ^ 0
m := (sec-h*3600)/60 ^ 0
s := sec-h*3600-m*60
return (m < 10 ? "0" m : m) " мин. " (s < 10 ? "0" s : s) " сек."
}
setDirLog()
{
FileSelectFolder, dirLogs,, 0, Укажите путь к логу сервера Pentacraft.`t`t По умолчанию: C:\Users\ИМЯ_ПК\Pentacraft\updates\СЕРВЕР\logs
if (ErrorLevel || !dirLogs){
MsgBox, 0x10, Ошибка, Вы не выбрали папку.`nСкрипт не может продолжать работу.`nПока!
ExitApp
}
IfExist, % dirLogs "\latest.log"
{
RegWrite, REG_SZ, HKCU, FForest\PentaCraft, dirLogs, % dirLogs
RegRead, tempDirLogs, HKCU, FForest\PentaCraft, dirLogs
if (tempDirLogs != dirLogs)
{
MsgBox, 0x10, Ошибка, Проблемы с запоминанием переменной.`nПопробуйте запустить скрипт от имени Администратора.
ExitApp
}
MsgBox, 0x40, Готов к работе!, Данный путь выбранный как главный.`nЧтоб изменить путь на другой:`nНажать ПКМ на иконку в трее -> Настройки.
}
else
{
MsgBox, 0x10, Ошибка, Вы указали неверный путь к файлу latest.log.`nПопробуйте ещё раз!
setDirLog()
}
}
Copy(Text, LocaleID=0x419)
{
CF_TEXT:=1, CF_LOCALE:=16, GMEM_MOVEABLE:=2
TextLen :=StrLen(Text)
HmemText :=DllCall("GlobalAlloc", "UInt", GMEM_MOVEABLE, "UInt", TextLen+1)
HmemLocale:=DllCall("GlobalAlloc", "UInt", GMEM_MOVEABLE, "UInt", 4)
If(!HmemText || !HmemLocale)
Return
PtrText :=DllCall("GlobalLock", "UInt", HmemText)
PtrLocale :=DllCall("GlobalLock", "UInt", HmemLocale)
DllCall("msvcrt\memcpy", "UInt", PtrText, "Str", Text, "UInt", TextLen+1, "Cdecl")
NumPut(LocaleID, PtrLocale+0)
DllCall("GlobalUnlock", "UInt", HmemText)
DllCall("GlobalUnlock", "UInt", HmemLocale)
If not DllCall("OpenClipboard", "UInt", 0)
{
DllCall("GlobalFree", "UInt", HmemText)
DllCall("GlobalFree", "UInt", HmemLocale)
Return
}
DllCall("EmptyClipboard")
DllCall("SetClipboardData", "UInt", CF_TEXT, "UInt", HmemText)
DllCall("SetClipboardData", "UInt", CF_LOCALE, "UInt", HmemLocale)
DllCall("CloseClipboard")
}
GetResponse(ask)
{
WinHTTP := ComObjCreate("WinHTTP.WinHttpRequest.5.1")
WinHTTP.Open("GET", "https://baza-otvetov.ru/search/view/?q=" ask, 0)
WinHTTP.SetRequestHeader("User-Agent", "Mozilla/5.0 (Windows NT 6.1; rv:65.0) Gecko/20100101 Firefox/65.0")
WinHTTP.SetRequestHeader("Content-Type", "application/x-www-form-urlencoded")
WinHTTP.SetRequestHeader("Pragma", "no-cache")
WinHTTP.SetRequestHeader("Cache-Control", "no-cache, no-store")
WinHTTP.SetRequestHeader("If-Modified-Since", "Sat, 1 Jan 2000 00:00:00 GMT")
WinHTTP.Send()
RegExMatch(RegExReplace(WinHTTP.ResponseText, "`n"), "U)<h3><span>Вопрос: <\/span>.*<\/h3>\s+<h3><span>Ответ: <\/span>(.*)<\/h3>", out)
return out1
}
class LogRead
{
__New(LogWay)
{
this.LogWay := LogWay
this.sizeLast := 0
}
getLastStr()
{
FileGetSize, fileSize, % this.LogWay
if(fileSize <= this.sizeLast || this.sizeLast == 0)
{
this.sizeLast := fileSize
Return
}
file := FileOpen(this.LogWay, "r")
file.Seek(this.sizeLast)
fileText := file.Read()
file.Close()
this.sizeLast := fileSize
Return StrSplit(fileText, "`r`n")
}
}