#NoEnv #SingleInstance, Force #Persistent Menu, Tray, Tip, % "Ответы на викторину для Pentacraft" Menu, Tray, add, Инструкция, about Menu, Tray, add, Закрыть, GuiClose Menu, Tray, NoStandard global version := 2 if (curl("POST", "https://fforest.pro/version.php", {art: "versionAns"}) > version) Download_NewVersion("https://fforest.pro/other/AnswerForPentacraft.exe", A_ScriptName) global mainPach := "" global autoSend := "" global server := ["Galaxy", "Lite", "Evo", "Trie", "Sky", "MagicRPG", "Hard", "Epsilon"] ToolTip, % "Поиск окна Pentacraft: Это не то окно." , 7, 0 SerchScreenPenta() global chatLog := new LogRead(mainPach, 0) global _timer := 600 global timer := _timer calc := ComObjCreate("ScriptControl") calc.Language := "VBScript" SetTimer, Chat, 150 SetTimer, Timer, 1000 return 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) if (autoSend) autoSender() } else if (RegExMatch(v, "\[Викторина\] Первый игрок, правильно ответивший на вопрос ниже, выиграет .* монет.") && RegExMatch(messages[k + 1], "\[CHAT\] (.*)", out_pars)) { RegExMatch(curl("GET", "https://baza-otvetov.ru/search/view/?q=" out_pars1), "U)

Вопрос: <\/span>.*<\/h3>\s+

Ответ: <\/span>(.*)<\/h3>", out) output := "| " (result ? "Ответ: " out1 : "Ответ не найден") copy(out1) if (autoSend) autoSender() } } 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) " сек." } SerchScreenPenta() { While(True) { WinGetTitle, title, A if (RegExMatch(title, "Pentacraft\s+(?.*)\s+\[.*\]\s+\[.*\]", out) && searchInArray(outServer, server)) { for Process in ComObjGet("winmgmts:").ExecQuery("Select * from Win32_Process where Name='javaw.exe'") RegExMatch(process.ExecutablePath, "(?.*)\\.*\\bin\\javaw\.exe", out) pach := outPach "\" outServer "\logs\latest.log" if (FileExist(pach)) { mainPach := pach Break } pach := outPach "\" outServer "-Shaders\logs\latest.log" if (FileExist(pach)) { mainPach := pach Break }else{ MsgBox, 0x10, Ошибка, % "Не удалось найти путь.`nОбратитесь к разработчику скрипта за помощью.`n" pach ToolTip } } } } 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 searchInArray(param, arr) { for key, value in arr if (value == param) Return True Return False } 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") } Download(url, file, callback) { static vt if !VarSetCapacity(vt) { VarSetCapacity(vt, A_PtrSize*11), nPar := "31132253353" Loop Parse, nPar NumPut(RegisterCallback("DL_Progress", "F", A_LoopField, A_Index-1), vt, A_PtrSize*(A_Index-1)) } if !(IsObject(callback) || (callback := Func(callback))) return !(ErrorLevel := 1) VarSetCapacity(bobj, A_PtrSize*2), NumPut(&callback, NumPut(&vt, bobj)), VarSetCapacity(tn, 520) if (0 = DllCall("urlmon\URLDownloadToCacheFile", "ptr", 0, "str", url, "str", tn, "uint", 260, "uint", 0x10, "ptr", &bobj)) FileCopy %tn%, %file%, 1 else ErrorLevel := 1 return !ErrorLevel } DL_Progress( pthis, nP=0, nPMax=0, nSC=0, pST=0 ) { if A_EventInfo = 6 fn := Object(NumGet(pthis+A_PtrSize)), %fn%(np, npMax) return 0 } Download_NewVersion_Progress(n, nMax) { if !nMax return width := (n*100/nMax) GuiControl,Download:, DownProgress, % width Size := DownloadSize(n) " / " DownloadSize(nMax) GuiControl,Download:Text ,DownProgressSize, % Size Sleep 10 } DownloadSize(n) { n /= 1024 if (n > 1024) return Round(n/1024, 2) " MB" return Round(n, 2) " KB" } Download_NewVersion(url_script,filename) { global wb wb.Stop() file := A_ScriptDir "\" filename "_new" Oldfile := A_ScriptDir "\" filename Sleep 10 if !Download(url_script, file, "Download_NewVersion_Progress") { msg.internet() return } FileGetSize, sizeofnew, %file% if (file > 300000) Run, %comspec% /c ping -n 4 127.0.0.1 >nul && copy /Y "%file%" "%Oldfile%" && "%Oldfile%", , hide else { msg.internet() } ExitApp } curl(method, adress, package := "", user_agent := "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.110 Safari/537.36 u01-05", error_log := 0, time_out := 0) { if (GetOSVersion() == 7) { RegWrite, REG_DWORD, HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings\WinHttp, DefaultSecureProtocols, 2560 RegWrite, REG_DWORD, HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Internet Settings\WinHttp, DefaultSecureProtocols, 2560 } if (!RegExMatch(adress, "^http[s]?:\/\/.*\..*$")) return error_log ? "Invalid URL adress (#1)" : false else if (!DllCall("Wininet.dll\InternetGetConnectedState", "Str", 0x20, "Int", 0)) return error_log ? "Not internet connection (#2)" : false try { temp_package := "" for k, v in package temp_package .= (A_Index > 1 ? "&" : (method == "POST" ? "" : "?")) k "=" (IsObject(v) ? JSON.Encode(v) : v) http := ComObjCreate("WinHttp.WinHttpRequest.5.1") http.Open(method, adress (method != "POST" ? temp_package : ""), false) http.SetRequestHeader("Referer", adress) http.SetRequestHeader("User-Agent", user_agent) http.SetRequestHeader("Content-Type", "application/x-www-form-urlencoded") http.SetRequestHeader("Pragma", "no-cache") http.SetRequestHeader("Cache-Control", "no-cache, no-store") http.SetRequestHeader("If-Modified-Since", "Sat, 1 Jan 2000 00:00:00 GMT") http.Send((method == "POST" ? temp_package : "")) http.WaitForResponse(time_out ? time_out : 0) if (!StrLen(http.ResponseText)) return error_log ? "Empty response (#3)" : false else { if (http.Status !== 200) return error_log ? http.Status "(" http.StatusText ") (#4)" : false else { ResponseText := RegExReplace(http.ResponseText, "
", "`n") ResponseText := RegExReplace(ResponseText, "", "`t") ResponseText := RegExReplace(ResponseText, "
", "`n") return ResponseText } } } catch e return error_log ? e.message "(#5)" : false } GetOSVersion() { VarSetCapacity(v,148), NumPut(148,v) DllCall("GetVersionEx", "uint", &v) os := NumGet(v,4) "." NumGet(v,8) "." SubStr("0000" NumGet(v,12), -3) if (RegExMatch(os, "^(\d+)\.(\d+)", out_pars)) { if (out_pars1 == 10) Return 10 else if (out_pars1 == 6 && out_pars2 > 1) Return 8 } Return 7 } 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") } }