Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- if (A_PtrSize != 8)
- {
- MsgBox, You are not running 64-bit version of Autohotkey L, reinstall correct version. Script will now terminate.
- ExitApp
- }
- if not A_IsAdmin
- {
- Run *RunAs "%A_ScriptFullPath%"
- ExitApp
- }
- class _ClassMemory
- {
- static baseAddress, hProcess, PID, currentProgram
- , insertNullTerminator := True
- , readStringLastError := False
- , isTarget64bit := False
- , ptrType := "UInt"
- , aTypeSize := { "UChar": 1, "Char": 1
- , "UShort": 2, "Short": 2
- , "UInt": 4, "Int": 4
- , "UFloat": 4, "Float": 4
- , "Int64": 8, "Double": 8}
- , aRights := { "PROCESS_ALL_ACCESS": 0x001F0FFF
- , "PROCESS_CREATE_PROCESS": 0x0080
- , "PROCESS_CREATE_THREAD": 0x0002
- , "PROCESS_DUP_HANDLE": 0x0040
- , "PROCESS_QUERY_INFORMATION": 0x0400
- , "PROCESS_QUERY_LIMITED_INFORMATION": 0x1000
- , "PROCESS_SET_INFORMATION": 0x0200
- , "PROCESS_SET_QUOTA": 0x0100
- , "PROCESS_SUSPEND_RESUME": 0x0800
- , "PROCESS_TERMINATE": 0x0001
- , "PROCESS_VM_OPERATION": 0x0008
- , "PROCESS_VM_READ": 0x0010
- , "PROCESS_VM_WRITE": 0x0020}
- __new(program, dwDesiredAccess := "", byRef handle := "", windowMatchMode := 3)
- {
- if this.PID := handle := this.findPID(program, windowMatchMode)
- {
- if dwDesiredAccess is not integer
- dwDesiredAccess := this.aRights.PROCESS_QUERY_INFORMATION | this.aRights.PROCESS_VM_OPERATION | this.aRights.PROCESS_VM_READ | this.aRights.PROCESS_VM_WRITE
- if this.hProcess := handle := this.OpenProcess(this.PID, dwDesiredAccess)
- {
- this.readStringLastError := False
- this.currentProgram := program
- if this.isTarget64bit := this.isTargetProcess64Bit(this.PID, this.hProcess, dwDesiredAccess)
- this.ptrType := "Int64"
- else this.ptrType := "UInt"
- if (A_PtrSize != 4 || !this.isTarget64bit)
- this.BaseAddress := this.getModuleBaseAddress()
- if this.BaseAddress < 0 || !this.BaseAddress
- this.BaseAddress := this.getProcessBaseAddress(program, windowMatchMode)
- return this
- }
- }
- return
- }
- __delete()
- {
- this.closeHandle(this.hProcess)
- return
- }
- version()
- {
- return 2.6
- }
- findPID(program, windowMatchMode := "3")
- {
- if windowMatchMode
- {
- mode := A_TitleMatchMode
- StringReplace, windowMatchMode, windowMatchMode, 0x
- SetTitleMatchMode, %windowMatchMode%
- }
- WinGet, pid, pid, %program%
- if windowMatchMode
- SetTitleMatchMode, %mode%
- return pid ? pid : 0
- }
- openProcess(PID, dwDesiredAccess)
- {
- return DllCall("OpenProcess", "UInt", dwDesiredAccess, "Int", False, "UInt", PID, "Ptr")
- }
- closeHandle(hProcess)
- {
- return DllCall("CloseHandle", "Ptr", hProcess)
- }
- read(address, type := "UInt", aOffsets*)
- {
- if !this.aTypeSize.hasKey(type)
- return "", ErrorLevel := -2
- if DllCall("ReadProcessMemory", "Ptr", this.hProcess, "Ptr", aOffsets.maxIndex() ? this.getAddressFromOffsets(address, aOffsets*) : address, type "*", result, "Ptr", this.aTypeSize[type], "Ptr",0)
- return result
- return
- }
- readRaw(address, byRef buffer, bytes := 4, aOffsets*)
- {
- VarSetCapacity(buffer, bytes)
- return DllCall("ReadProcessMemory", "Ptr", this.hProcess, "Ptr", aOffsets.maxIndex() ? this.getAddressFromOffsets(address, aOffsets*) : address, "Ptr", &buffer, "Ptr", bytes, "Ptr", 0)
- }
- readString(address, sizeBytes := 0, encoding := "UTF-8", aOffsets*)
- {
- bufferSize := VarSetCapacity(buffer, sizeBytes ? sizeBytes : 100, 0)
- this.ReadStringLastError := False
- if aOffsets.maxIndex()
- address := this.getAddressFromOffsets(address, aOffsets*)
- if !sizeBytes
- {
- if (encoding = "utf-16" || encoding = "cp1200")
- encodingSize := 2, charType := "UShort", loopCount := 2
- else encodingSize := 1, charType := "Char", loopCount := 4
- Loop
- {
- if !DllCall("ReadProcessMemory", "Ptr", this.hProcess, "Ptr", address + ((outterIndex := A_index) - 1) * 4, "Ptr", &buffer, "Ptr", 4, "Ptr", 0) || ErrorLevel
- return "", this.ReadStringLastError := True
- else loop, %loopCount%
- {
- if NumGet(buffer, (A_Index - 1) * encodingSize, charType) = 0
- {
- if (bufferSize < sizeBytes := outterIndex * 4 - (4 - A_Index * encodingSize))
- VarSetCapacity(buffer, sizeBytes)
- break, 2
- }
- }
- }
- }
- if DllCall("ReadProcessMemory", "Ptr", this.hProcess, "Ptr", address, "Ptr", &buffer, "Ptr", sizeBytes, "Ptr", 0)
- return StrGet(&buffer,, encoding)
- return "", this.ReadStringLastError := True
- }
- writeString(address, string, encoding := "utf-8", aOffsets*)
- {
- encodingSize := (encoding = "utf-16" || encoding = "cp1200") ? 2 : 1
- requiredSize := StrPut(string, encoding) * encodingSize - (this.insertNullTerminator ? 0 : encodingSize)
- VarSetCapacity(buffer, requiredSize)
- StrPut(string, &buffer, StrLen(string) + (this.insertNullTerminator ? 1 : 0), encoding)
- return DllCall("WriteProcessMemory", "Ptr", this.hProcess, "Ptr", aOffsets.maxIndex() ? this.getAddressFromOffsets(address, aOffsets*) : address, "Ptr", &buffer, "Ptr", requiredSize, "Ptr", 0)
- }
- write(address, value, type := "Uint", aOffsets*)
- {
- if !this.aTypeSize.hasKey(type)
- return "", ErrorLevel := -2
- return DllCall("WriteProcessMemory", "Ptr", this.hProcess, "Ptr", aOffsets.maxIndex() ? this.getAddressFromOffsets(address, aOffsets*) : address, type "*", value, "Ptr", this.aTypeSize[type], "Ptr", 0)
- }
- writeRaw(address, pBuffer, sizeBytes, aOffsets*)
- {
- return DllCall("WriteProcessMemory", "Ptr", this.hProcess, "Ptr", aOffsets.maxIndex() ? this.getAddressFromOffsets(address, aOffsets*) : address, "Ptr", pBuffer, "Ptr", sizeBytes, "Ptr", 0)
- }
- pointer(address, finalType := "UInt", offsets*)
- {
- For index, offset in offsets
- address := this.Read(address, this.ptrType) + offset
- Return this.Read(address, finalType)
- }
- getAddressFromOffsets(address, aOffsets*)
- {
- return aOffsets.Remove() + this.pointer(address, this.ptrType, aOffsets*)
- }
- getProcessBaseAddress(windowTitle, windowMatchMode := "3")
- {
- if (windowMatchMode && A_TitleMatchMode != windowMatchMode)
- {
- mode := A_TitleMatchMode
- StringReplace, windowMatchMode, windowMatchMode, 0x
- SetTitleMatchMode, %windowMatchMode%
- }
- WinGet, hWnd, ID, %WindowTitle%
- if mode
- SetTitleMatchMode, %mode%
- if !hWnd
- return
- return DllCall(A_PtrSize = 4
- ? "GetWindowLong"
- : "GetWindowLongPtr"
- , "Ptr", hWnd, "Int", -6, A_Is64bitOS ? "Int64" : "UInt")
- }
- getModuleBaseAddress(module := "", byRef aModuleInfo := "")
- {
- if (A_PtrSize = 4 && this.IsTarget64bit)
- return -4
- if (module = "")
- mainExeFullPath := this.GetModuleFileNameEx()
- if !moduleCount := this.EnumProcessModulesEx(lphModule)
- return -3
- loop % moduleCount
- {
- moduleFullPath := this.GetModuleFileNameEx(hModule := numget(lphModule, (A_index - 1) * A_PtrSize))
- SplitPath, moduleFullPath, fileName
- if (module = "" && mainExeFullPath = moduleFullPath) || (module != "" && module = filename)
- return this.GetModuleInformation(hModule, aModuleInfo) ? aModuleInfo.lpBaseOfDll : -5
- }
- return -1
- }
- setSeDebugPrivilege(enable := True)
- {
- h := DllCall("OpenProcess", "UInt", 0x0400, "Int", false, "UInt", DllCall("GetCurrentProcessId"), "Ptr")
- DllCall("Advapi32.dll\OpenProcessToken", "Ptr", h, "UInt", 32, "PtrP", t)
- VarSetCapacity(ti, 16, 0)
- NumPut(1, ti, 0, "UInt")
- DllCall("Advapi32.dll\LookupPrivilegeValue", "Ptr", 0, "Str", "SeDebugPrivilege", "Int64P", luid)
- NumPut(luid, ti, 4, "Int64")
- if enable
- NumPut(2, ti, 12, "UInt")
- r := DllCall("Advapi32.dll\AdjustTokenPrivileges", "Ptr", t, "Int", false, "Ptr", &ti, "UInt", 0, "Ptr", 0, "Ptr", 0)
- DllCall("CloseHandle", "Ptr", t)
- DllCall("CloseHandle", "Ptr", h)
- return r
- }
- isTargetProcess64Bit(PID, hProcess := "", currentHandleAccess := "")
- {
- if !A_Is64bitOS
- return False
- else if !hProcess || !(currentHandleAccess & (this.aRights.PROCESS_QUERY_INFORMATION | this.aRights.PROCESS_QUERY_LIMITED_INFORMATION))
- closeHandle := hProcess := this.openProcess(PID, this.aRights.PROCESS_QUERY_INFORMATION)
- if (hProcess && DllCall("IsWow64Process", "Ptr", hProcess, "Int*", Wow64Process))
- result := !Wow64Process
- return result, closeHandle ? this.CloseHandle(hProcess) : ""
- }
- suspend()
- {
- return DllCall("ntdll\NtSuspendProcess", "Ptr", this.hProcess)
- }
- resume()
- {
- return DllCall("ntdll\NtResumeProcess", "Ptr", this.hProcess)
- }
- getModules(byRef aModules, useFileNameAsKey := False)
- {
- if (A_PtrSize = 4 && this.IsTarget64bit)
- return -4
- aModules := []
- if !moduleCount := this.EnumProcessModulesEx(lphModule)
- return -3
- loop % moduleCount
- {
- this.GetModuleInformation(hModule := numget(lphModule, (A_index - 1) * A_PtrSize), aModuleInfo)
- aModuleInfo.Name := this.GetModuleFileNameEx(hModule)
- filePath := aModuleInfo.Name
- SplitPath, filePath, fileName
- aModuleInfo.fileName := fileName
- if useFileNameAsKey
- aModules[fileName] := aModuleInfo
- else aModules.insert(aModuleInfo)
- }
- return moduleCount
- }
- getEndAddressOfLastModule(byRef aModuleInfo := "")
- {
- if !moduleCount := this.EnumProcessModulesEx(lphModule)
- return -3
- hModule := numget(lphModule, (moduleCount - 1) * A_PtrSize)
- if this.GetModuleInformation(hModule, aModuleInfo)
- return aModuleInfo.lpBaseOfDll + aModuleInfo.SizeOfImage
- return -5
- }
- GetModuleFileNameEx(hModule := 0)
- {
- VarSetCapacity(lpFilename, 2048 * (A_IsUnicode ? 2 : 1))
- DllCall("psapi\GetModuleFileNameEx"
- , "Ptr", this.hProcess
- , "Ptr", hModule
- , "Str", lpFilename
- , "Uint", 2048 / (A_IsUnicode ? 2 : 1))
- return lpFilename
- }
- EnumProcessModulesEx(byRef lphModule, dwFilterFlag := 0x03)
- {
- size := VarSetCapacity(lphModule, 4)
- loop
- {
- DllCall("psapi\EnumProcessModulesEx"
- , "Ptr", this.hProcess
- , "Ptr", &lphModule
- , "Uint", size
- , "Uint*", reqSize
- , "Uint", dwFilterFlag)
- if ErrorLevel
- return 0
- else if (size >= reqSize)
- break
- else size := VarSetCapacity(lphModule, reqSize)
- }
- return reqSize // A_PtrSize
- }
- GetModuleInformation(hModule, byRef aModuleInfo)
- {
- VarSetCapacity(MODULEINFO, A_PtrSize * 3), aModuleInfo := []
- return DllCall("psapi\GetModuleInformation"
- , "Ptr", this.hProcess
- , "Ptr", hModule
- , "Ptr", &MODULEINFO
- , "UInt", A_PtrSize * 3)
- , aModuleInfo := { lpBaseOfDll: numget(MODULEINFO, 0, "Ptr")
- , SizeOfImage: numget(MODULEINFO, A_PtrSize, "UInt")
- , EntryPoint: numget(MODULEINFO, A_PtrSize * 2, "Ptr") }
- }
- hexStringToPattern(hexString)
- {
- AOBPattern := []
- hexString := RegExReplace(hexString, "(\s|0x)")
- StringReplace, hexString, hexString, ?, ?, UseErrorLevel
- wildCardCount := ErrorLevel
- if !length := StrLen(hexString)
- return -1
- else if RegExMatch(hexString, "[^0-9a-fA-F?]")
- return -2
- else if Mod(wildCardCount, 2)
- return -3
- else if Mod(length, 2)
- return -4
- loop, % length/2
- {
- value := "0x" SubStr(hexString, 1 + 2 * (A_index-1), 2)
- AOBPattern.Insert(value + 0 = "" ? "?" : value)
- }
- return AOBPattern
- }
- stringToPattern(string, encoding := "UTF-8", insertNullTerminator := False)
- {
- if !length := StrLen(string)
- return -1
- AOBPattern := []
- encodingSize := (encoding = "utf-16" || encoding = "cp1200") ? 2 : 1
- requiredSize := StrPut(string, encoding) * encodingSize - (insertNullTerminator ? 0 : encodingSize)
- VarSetCapacity(buffer, requiredSize)
- StrPut(string, &buffer, length + (insertNullTerminator ? 1 : 0), encoding)
- loop, % requiredSize
- AOBPattern.Insert(NumGet(buffer, A_Index-1, "UChar"))
- return AOBPattern
- }
- modulePatternScan(module := "", aAOBPattern*)
- {
- MEM_COMMIT := 0x1000, MEM_MAPPED := 0x40000, MEM_PRIVATE := 0x20000
- , PAGE_NOACCESS := 0x01, PAGE_GUARD := 0x100
- if (result := this.getModuleBaseAddress(module, aModuleInfo)) <= 0
- return "", ErrorLevel := result
- if !patternSize := this.getNeedleFromAOBPattern(patternMask, AOBBuffer, aAOBPattern*)
- return -10
- if (result := this.PatternScan(aModuleInfo.lpBaseOfDll, aModuleInfo.SizeOfImage, patternMask, AOBBuffer)) >= 0
- return result
- address := aModuleInfo.lpBaseOfDll
- endAddress := address + aModuleInfo.SizeOfImage
- loop
- {
- if !this.VirtualQueryEx(address, aRegion)
- return -9
- if (aRegion.State = MEM_COMMIT
- && !(aRegion.Protect & (PAGE_NOACCESS | PAGE_GUARD)) ; can't read these areas
- && aRegion.RegionSize >= patternSize
- && (result := this.PatternScan(address, aRegion.RegionSize, patternMask, AOBBuffer)) > 0)
- return result
- } until (address += aRegion.RegionSize) >= endAddress
- return 0
- }
- addressPatternScan(startAddress, sizeOfRegionBytes, aAOBPattern*)
- {
- if !this.getNeedleFromAOBPattern(patternMask, AOBBuffer, aAOBPattern*)
- return -10
- return this.PatternScan(startAddress, sizeOfRegionBytes, patternMask, AOBBuffer)
- }
- processPatternScan(startAddress := 0, endAddress := 0x7FFFFFFF, aAOBPattern*)
- {
- address := startAddress
- MEM_COMMIT := 0x1000, MEM_MAPPED := 0x40000, MEM_PRIVATE := 0x20000
- PAGE_NOACCESS := 0x01, PAGE_GUARD := 0x100
- if !patternSize := this.getNeedleFromAOBPattern(patternMask, AOBBuffer, aAOBPattern*)
- return -10
- while address <= endAddress
- {
- if !this.VirtualQueryEx(address, aInfo)
- return -1
- if A_Index = 1
- aInfo.RegionSize -= address - aInfo.BaseAddress
- if (aInfo.State = MEM_COMMIT)
- && !(aInfo.Protect & (PAGE_NOACCESS | PAGE_GUARD))
- && aInfo.RegionSize >= patternSize
- && (result := this.PatternScan(address, aInfo.RegionSize, patternMask, AOBBuffer))
- {
- if result < 0
- return -2
- else if (result + patternSize - 1 <= endAddress)
- return result
- else return 0
- }
- address += aInfo.RegionSize
- }
- return 0
- }
- rawPatternScan(byRef buffer, sizeOfBufferBytes := "", startOffset := 0, aAOBPattern*)
- {
- if !this.getNeedleFromAOBPattern(patternMask, AOBBuffer, aAOBPattern*)
- return -10
- if (sizeOfBufferBytes + 0 = "" || sizeOfBufferBytes <= 0)
- sizeOfBufferBytes := VarSetCapacity(buffer)
- if (startOffset + 0 = "" || startOffset < 0)
- startOffset := 0
- return this.bufferScanForMaskedPattern(&buffer, sizeOfBufferBytes, patternMask, &AOBBuffer, startOffset)
- }
- getNeedleFromAOBPattern(byRef patternMask, byRef needleBuffer, aAOBPattern*)
- {
- patternMask := "", VarSetCapacity(needleBuffer, aAOBPattern.MaxIndex())
- for i, v in aAOBPattern
- patternMask .= (v + 0 = "" ? "?" : "x"), NumPut(round(v), needleBuffer, A_Index - 1, "UChar")
- return round(aAOBPattern.MaxIndex())
- }
- VirtualQueryEx(address, byRef aInfo)
- {
- if (aInfo.__Class != "_ClassMemory._MEMORY_BASIC_INFORMATION")
- aInfo := new this._MEMORY_BASIC_INFORMATION()
- return aInfo.SizeOfStructure = DLLCall("VirtualQueryEx"
- , "Ptr", this.hProcess
- , "Ptr", address
- , "Ptr", aInfo.pStructure
- , "Ptr", aInfo.SizeOfStructure
- , "Ptr")
- }
- patternScan(startAddress, sizeOfRegionBytes, byRef patternMask, byRef needleBuffer)
- {
- if !this.readRaw(startAddress, buffer, sizeOfRegionBytes)
- return -1
- if (offset := this.bufferScanForMaskedPattern(&buffer, sizeOfRegionBytes, patternMask, &needleBuffer)) >= 0
- return startAddress + offset
- else return 0
- }
- bufferScanForMaskedPattern(hayStackAddress, sizeOfHayStackBytes, byRef patternMask, needleAddress, startOffset := 0)
- {
- static p
- if !p
- {
- if A_PtrSize = 4
- p := this.MCode("1,x86:8B44240853558B6C24182BC5568B74242489442414573BF0773E8B7C241CBB010000008B4424242BF82BD8EB038D49008B54241403D68A0C073A0A740580383F750B8D0C033BCD74174240EBE98B442424463B74241876D85F5E5D83C8FF5BC35F8BC65E5D5BC3")
- else
- p := this.MCode("1,x64:48895C2408488974241048897C2418448B5424308BF2498BD8412BF1488BF9443BD6774A4C8B5C24280F1F800000000033C90F1F400066660F1F840000000000448BC18D4101418D4AFF03C80FB60C3941380C18740743803C183F7509413BC1741F8BC8EBDA41FFC2443BD676C283C8FF488B5C2408488B742410488B7C2418C3488B5C2408488B742410488B7C2418418BC2C3")
- }
- if (needleSize := StrLen(patternMask)) + startOffset > sizeOfHayStackBytes
- return -1
- if (sizeOfHayStackBytes > 0)
- return DllCall(p, "Ptr", hayStackAddress, "UInt", sizeOfHayStackBytes, "Ptr", needleAddress, "UInt", needleSize, "AStr", patternMask, "UInt", startOffset, "cdecl int")
- return -2
- }
- MCode(mcode)
- {
- static e := {1:4, 2:1}, c := (A_PtrSize=8) ? "x64" : "x86"
- if !regexmatch(mcode, "^([0-9]+),(" c ":|.*?," c ":)([^,]+)", m)
- return
- if !DllCall("crypt32\CryptStringToBinary", "str", m3, "uint", 0, "uint", e[m1], "ptr", 0, "uint*", s, "ptr", 0, "ptr", 0)
- return
- p := DllCall("GlobalAlloc", "uint", 0, "ptr", s, "ptr")
- DllCall("VirtualProtect", "ptr", p, "ptr", s, "uint", 0x40, "uint*", op)
- if DllCall("crypt32\CryptStringToBinary", "str", m3, "uint", 0, "uint", e[m1], "ptr", p, "uint*", s, "ptr", 0, "ptr", 0)
- return p
- DllCall("GlobalFree", "ptr", p)
- return
- }
- class _MEMORY_BASIC_INFORMATION
- {
- __new()
- {
- if !this.pStructure := DllCall("GlobalAlloc", "UInt", 0, "Ptr", this.SizeOfStructure := A_PtrSize = 8 ? 48 : 28, "Ptr")
- return ""
- return this
- }
- __Delete()
- {
- DllCall("GlobalFree", "Ptr", this.pStructure)
- }
- __get(key)
- {
- static aLookUp := A_PtrSize = 8
- ? { "BaseAddress": {"Offset": 0, "Type": "Int64"}
- , "AllocationBase": {"Offset": 8, "Type": "Int64"}
- , "AllocationProtect": {"Offset": 16, "Type": "UInt"}
- , "RegionSize": {"Offset": 24, "Type": "Int64"}
- , "State": {"Offset": 32, "Type": "UInt"}
- , "Protect": {"Offset": 36, "Type": "UInt"}
- , "Type": {"Offset": 40, "Type": "UInt"} }
- : { "BaseAddress": {"Offset": 0, "Type": "UInt"}
- , "AllocationBase": {"Offset": 4, "Type": "UInt"}
- , "AllocationProtect": {"Offset": 8, "Type": "UInt"}
- , "RegionSize": {"Offset": 12, "Type": "UInt"}
- , "State": {"Offset": 16, "Type": "UInt"}
- , "Protect": {"Offset": 20, "Type": "UInt"}
- , "Type": {"Offset": 24, "Type": "UInt"} }
- if aLookUp.HasKey(key)
- return numget(this.pStructure+0, aLookUp[key].Offset, aLookUp[key].Type)
- }
- __set(key, value)
- {
- static aLookUp := A_PtrSize = 8
- ? { "BaseAddress": {"Offset": 0, "Type": "Int64"}
- , "AllocationBase": {"Offset": 8, "Type": "Int64"}
- , "AllocationProtect": {"Offset": 16, "Type": "UInt"}
- , "RegionSize": {"Offset": 24, "Type": "Int64"}
- , "State": {"Offset": 32, "Type": "UInt"}
- , "Protect": {"Offset": 36, "Type": "UInt"}
- , "Type": {"Offset": 40, "Type": "UInt"} }
- : { "BaseAddress": {"Offset": 0, "Type": "UInt"}
- , "AllocationBase": {"Offset": 4, "Type": "UInt"}
- , "AllocationProtect": {"Offset": 8, "Type": "UInt"}
- , "RegionSize": {"Offset": 12, "Type": "UInt"}
- , "State": {"Offset": 16, "Type": "UInt"}
- , "Protect": {"Offset": 20, "Type": "UInt"}
- , "Type": {"Offset": 24, "Type": "UInt"} }
- if aLookUp.HasKey(key)
- {
- NumPut(value, this.pStructure+0, aLookUp[key].Offset, aLookUp[key].Type)
- return value
- }
- }
- Ptr()
- {
- return this.pStructure
- }
- sizeOf()
- {
- return this.SizeOfStructure
- }
- }
- }
- ; Хуйня для работы с памятью кончилась, теперь сам скрипт.
- IfNotExist, User.ini
- {
- defaultIni .= "[variables]`n"
- defaultIni .= "BF_Key=RButton`n"
- defaultIni .= "SpamFlaskKey1=Q`n"
- defaultIni .= "SpamFlaskChek1=1`n"
- defaultIni .= "SpamFlaskChek2=1`n"
- defaultIni .= "SpamFlaskChek3=1`n"
- defaultIni .= "SpamFlaskChek4=1`n"
- defaultIni .= "SpamFlaskChek5=1`n"
- defaultIni .= "CorruptedBloodChek=1`n"
- defaultIni .= "CorruptedBloodCharges=1`n"
- defaultIni .= "CorruptedBloodFlaskChek1=1`n"
- defaultIni .= "CorruptedBloodFlaskChek2=1`n"
- defaultIni .= "CorruptedBloodFlaskChek3=1`n"
- defaultIni .= "CorruptedBloodFlaskChek4=1`n"
- defaultIni .= "CorruptedBloodFlaskChek5=1`n"
- defaultIni .= "FrozenAilmentsChek=1`n"
- defaultIni .= "ShockAilmentsChek=1`n"
- defaultIni .= "BurningAilmentsChek=1`n"
- defaultIni .= "AilmentFlaskChek1=1`n"
- defaultIni .= "AilmentFlaskChek2=1`n"
- defaultIni .= "AilmentFlaskChek3=1`n"
- defaultIni .= "AilmentFlaskChek4=1`n"
- defaultIni .= "AilmentFlaskChek5=1`n"
- defaultIni .= "LowhpLevel=50`n"
- FileAppend, %defaultIni%, User.ini, UTF-16
- }
- readFromFile()
- global BF_Key
- global SpamFlaskKey1
- global SpamFlaskKey2
- global SpamFlaskChek1
- global SpamFlaskChek2
- global SpamFlaskChek3
- global SpamFlaskChek4
- global SpamFlaskChek5
- global CorruptedBloodChek
- global CorruptedBloodCharges
- global CorruptedBloodFlaskChek1
- global CorruptedBloodFlaskChek2
- global CorruptedBloodFlaskChek3
- global CorruptedBloodFlaskChek4
- global CorruptedBloodFlaskChek5
- global FrozenAilmentsChek
- global ShockAilmentsChek
- global BurningAilmentsChek
- global AilmentFlaskChek1
- global AilmentFlaskChek2
- global AilmentFlaskChek3
- global AilmentFlaskChek4
- global AilmentFlaskChek5
- global LowhpLevel
- SetBatchLines, -1
- SetFormat, IntegerFast, dec
- ProcessExist(Name){
- Process,Exist,%Name%
- return Errorlevel
- }
- If ProcessExist("PathOfExile_x64Steam.exe")
- {
- cliexe:= "PathOfExile_x64Steam.exe"
- }
- Else If ProcessExist("PathOfExile_x64.exe")
- {
- cliexe:= "PathOfExile_x64.exe"
- }
- global cliexe
- basePtrPattern:=[0x40, 0x53, 0x48, 0x83, 0xEC, 0x50, 0x48, 0xC7, 0x44, 0x24, 0x20, 0xFE, 0xFF, 0xFF, 0xFF, 0xC7, 0x44, 0x24, 0x60, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x05]
- global poe := new _ClassMemory("ahk_exe " . cliexe, "", hProcessCopy)
- PatternIsAt:=poe.modulePatternScan(cliexe, basePtrPattern*)-poe.BaseAddress
- baseMgrPtr:=poe.read(poe.BaseAddress+PatternIsAt+0x1A, "UInt")+PatternIsAt+0x1E
- global testBase:=poe.read(poe.BaseAddress+baseMgrPtr, "Int64", 0x8, 0xf8)
- global testBase1:=poe.read(testBase+0x38, "Int64")
- global frameBase:=poe.read(poe.BaseAddress+baseMgrPtr, "Int64", 0x8, 0xf8, 0x38)
- global IngameState:=frameBase
- readPlayerStats(byRef PlayerStats){
- if(cliexe == "PathOfExile_x64Steam.exe"){
- InGameData:=poe.read(IngameState+0x160+0x28, "Int64")
- serverData:=poe.read(IngameState+0x168+0x28, "Int64")
- }
- if(cliexe == "PathOfExile_x64.exe"){
- InGameData:=poe.read(IngameState+0x160, "Int64")
- serverData:=poe.read(IngameState+0x168, "Int64")
- }
- inGameNumber:=poe.read(serverData+0x39C8, "Char")
- global isProperInGame:=inGameNumber*100/100
- if(isProperInGame > 2)
- {
- LocalPlayer:=poe.read(InGameData+0x180, "Int64")
- LPLifeComponent:=poe.read(LocalPlayer+0x8, "Int64", 0x18)
- poe.readRaw(LPLifeComponent, LifeStructure, 0xB8)
- FlaskBase:=poe.read(serverData,"Int64")+0x240+0x948+0xA00+0x20
- BuffListStart:=poe.read(LPLifeComponent+0xD8, "Int64")
- BuffListEnd:=poe.read(LPLifeComponent+0xE0, "Int64")
- global BuffAmount:=((BuffListEnd-BuffListStart)/8)
- PlayerStats.BuffAmount:=((BuffListEnd-BuffListStart)/8)
- Loop, %BuffAmount%
- {
- BuffBasePtr:=poe.read(BuffListStart+((A_Index-1)*8), "Int64", 8)
- BuffNamePtr:=poe.read(BuffBasePtr+8, "Int64", 0)
- BuffNameStr:=poe.readString(BuffNamePtr, length:=0, encoding := "utf-16")
- PlayerStats.BuffName[A_Index]:=BuffNameStr
- BuffCharges:=poe.read(BuffBasePtr+0x28)
- PlayerStats.BuffCharges[A_Index]:=BuffCharges
- BuffTimer:=poe.read(BuffBasePtr+0x14, "Float")
- PlayerStats.BuffTimer[A_Index]:=BuffTimer
- }
- curHP:=NumGet(LifeStructure, 0x54, "UInt")
- curCI:=NumGet(LifeStructure, 0xB4, "UInt")
- maxCI:=NumGet(LifeStructure, 0xB0, "UInt")
- resHP:=NumGet(LifeStructure, 0x60, "Uint")
- maxHP:=NumGet(LifeStructure, 0x50, "UInt")
- curMana:=NumGet(LifeStructure, 0x84, "UInt")
- resMana:=NumGet(LifeStructure, 0x90, "Uint")
- maxMana:=NumGet(LifeStructure, 0x80, "UInt")
- if(maxHP>0 and curHP>0)
- {
- PlayerStats.hpres:=resHP*100/100
- PlayerStats.hp:=(curHP*100)/100/maxHP*100
- PlayerStats.ci:=(curCI*100)/100/maxCI*100
- PlayerStats.mp:=(curMana*100)/100/maxMana*100
- }
- else
- {
- PlayerStats.hp:=0
- PlayerStats.ci:=0
- PlayerStats.mp:=0
- }
- }
- }
- RandSleep(x,y) {
- Random, rand, %x%, %y%
- Sleep, %rand%
- }
- dropDownTable = Q|W|E|R|T|RButton
- Gui Add, Button, x333 y2 w70 h20 gupdateEverything, Сохранить
- Gui Add, Tab2, vTab x4 y2 w400 h396 -wrap, Фласки|Абилки
- Gui, Tab, 1
- yset:=30
- Gui Add, GroupBox, x7 y%yset% w190 h75, Прожать все фласки:
- yset+=17
- Gui Add, Hotkey, vSpamFlaskKey1 x15 y%yset% w80 h21, %SpamFlaskKey1%
- yset+=17
- Gui Add, Text, x15 y%yset%, Фласки для использования:
- yset+=17
- xset:=7
- Gui Add, Checkbox, Right x%xset% y%yset% vSpamFlaskChek1 Checked%SpamFlaskChek1%, 1
- xset+=30
- Gui Add, Checkbox, Right x%xset% y%yset% vSpamFlaskChek2 Checked%SpamFlaskChek2%, 2
- xset+=30
- Gui Add, Checkbox, Right x%xset% y%yset% vSpamFlaskChek3 Checked%SpamFlaskChek3%, 3
- xset+=30
- Gui Add, Checkbox, Right x%xset% y%yset% vSpamFlaskChek4 Checked%SpamFlaskChek4%, 4
- xset+=30
- Gui Add, Checkbox, Right x%xset% y%yset% vSpamFlaskChek5 Checked%SpamFlaskChek5%, 5
- yset+=30
- Gui Add, GroupBox, x7 y%yset% w190 h120, Блиды/Порченая кровь:
- yset+=17
- Gui Add, Checkbox, x15 y%yset% vCorruptedBloodChek Checked%CorruptedBloodChek%, Снимать автоматически
- yset+=17
- Gui, Add, Text, x15 y%yset%, Cтаков для снятия порченой крови:
- yset+=17
- Gui, Add, Slider, x7 y%yset% w160 h25 gGuiUpdate Range1-20 vCorruptedBloodCharges +ToolTip, %CorruptedBloodCharges%
- Gui, Add, Text, x165 y%yset% w20 vCorruptedBloodChargesUpdate, %CorruptedBloodCharges%
- yset+=26
- Gui Add, Text, x15 y%yset%, Фласки для использования:
- yset+=20
- xset:=7
- Gui Add, Checkbox, Right x%xset% y%yset% vCorruptedBloodFlaskChek1 Checked%CorruptedBloodFlaskChek1%, 1
- xset+=30
- Gui Add, Checkbox, Right x%xset% y%yset% vCorruptedBloodFlaskChek2 Checked%CorruptedBloodFlaskChek2%, 2
- xset+=30
- Gui Add, Checkbox, Right x%xset% y%yset% vCorruptedBloodFlaskChek3 Checked%CorruptedBloodFlaskChek3%, 3
- xset+=30
- Gui Add, Checkbox, Right x%xset% y%yset% vCorruptedBloodFlaskChek4 Checked%CorruptedBloodFlaskChek4%, 4
- xset+=30
- Gui Add, Checkbox, Right x%xset% y%yset% vCorruptedBloodFlaskChek5 Checked%CorruptedBloodFlaskChek5%, 5
- yset+=26
- Gui Add, GroupBox, x7 y%yset% w190 h120, Аилменты:
- yset+=17
- Gui Add, Checkbox, x15 y%yset% vFrozenAilmentsChek Checked%FrozenAilmentsChek%, Снимать Заморозку/Frozen
- yset+=17
- Gui Add, Checkbox, x15 y%yset% vShockAilmentsChek Checked%ShockAilmentsChek%, Снимать Шок/Shock
- yset+=17
- Gui Add, Checkbox, x15 y%yset% vBurningAilmentsChek Checked%BurningAilmentsChek%, Снимать Горение/Burning
- yset+=17
- Gui Add, Text, x15 y%yset%, Фласки для использования:
- yset+=20
- xset:=7
- Gui Add, Checkbox, Right x%xset% y%yset% vAilmentFlaskChek1 Checked%AilmentFlaskChek1%, 1
- xset+=30
- Gui Add, Checkbox, Right x%xset% y%yset% vAilmentFlaskChek2 Checked%AilmentFlaskChek2%, 2
- xset+=30
- Gui Add, Checkbox, Right x%xset% y%yset% vAilmentFlaskChek3 Checked%AilmentFlaskChek3%, 3
- xset+=30
- Gui Add, Checkbox, Right x%xset% y%yset% vAilmentFlaskChek4 Checked%AilmentFlaskChek4%, 4
- xset+=30
- Gui Add, Checkbox, Right x%xset% y%yset% vAilmentFlaskChek5 Checked%AilmentFlaskChek5%, 5
- yset:=30
- Gui Add, GroupBox, x205 y%yset% w190 h90, Фласки лоу хп/ес:
- yset+=17
- Gui Add, Text, x215 y%yset%, Минимум ХП/ЕС:
- yset+=17
- Gui, Add, Slider, x205 y%yset% w160 h25 gGuiUpdate Range1-100 vLowhpLevel +ToolTip, %LowhpLevel%
- Gui, Add, Text, x365 y%yset% w20 vLowhpLevelUpdate, %LowhpLevel%
- Gui, Tab, 2
- yset:=30
- Gui Add, GroupBox, x7 y%yset% w130 h45, BladeFlurry Key
- yset+=15
- Gui Add, ComboBox, vBF_Key x15 y%yset% w100 h120, %dropDownTable%
- Menu, Tray, Add, Настройки POEShrek, showgui
- Gui, Show,, Settings
- IfExist, User.ini
- {
- Iniread, BF_Key, User.ini, variables, BF_Key
- BF_Key_var := BF_Key
- GuiControl, ChooseString, BF_Key, %BF_Key_var%
- }
- ;DEBUG GUI
- Gui, 2:Add, GroupBox, x5 y0 w300 h300 , Статистика
- ypos := 25
- Gui, 2:Add, Text, x15 y%ypos% w155, Мана
- Gui, 2:Add, Edit, Disabled vMaxMANAvar x140 y%ypos% w150, nope
- ypos := 25
- Gui, 2:Add, Text, x15 y%ypos% w155, Buff Amount
- Gui, 2:Add, Edit, Disabled vBuffAmountvar x140 y%ypos% w150, nope
- ypos += 25
- Loop, 8
- {
- Gui, 2:Add, Text, x15 y%ypos% w155, Buff %A_Index% Название
- Gui, 2:Add, Edit, Disabled vBuff%A_Index%Namevar x140 y%ypos% w150, nope
- ypos += 25
- Gui, 2:Add, Text, x15 y%ypos% w155, Buff %A_Index% Заряды
- Gui, 2:Add, Edit, Disabled vBuff%A_Index%Chargesvar x140 y%ypos% w150, nope
- ypos += 25
- Gui, 2:Add, Text, x15 y%ypos% w155, Buff %A_Index% Время
- Gui, 2:Add, Edit, Disabled vBuff%A_Index%Timervar x140 y%ypos% w150, nope
- ypos += 25
- }
- ;Gui, 2:Show,,DEBUG
- PlayerStats:=Object()
- BF_timer:=0
- Flask_timer:=0
- Loop
- {
- readPlayerStats(PlayerStats)
- IfWinActive, Path of Exile ahk_class POEWindowClass
- {
- PlayerHP:=PlayerStats.hp
- PlayerMP:=PlayerStats.mp
- PlayerCI:=PlayerStats.ci
- if (GetKeyState(SpamFlaskKey1, "P") and A_TickCount - Flask_timer > 500)
- {
- FlaskSpam()
- Sleep, 4000
- }
- loop, %BuffAmount%
- {
- BuffTimer:=PlayerStats.BuffTimer[A_Index]
- BuffCharges:=PlayerStats.BuffCharges[A_Index]
- If (InStr(playerstats.BuffName[A_Index], "puncture") and A_TickCount - Flask_timer > 500)
- {
- if (A_TickCount - Flask_timer > 500)
- {
- ;FIX
- if CorruptedBloodFlaskChek1
- {
- Sendinput, {1 Down}
- Sendinput, {1 Up}
- }
- RandSleep(0,100)
- if CorruptedBloodFlaskChek2
- {
- Sendinput, {2 Down}
- Sendinput, {2 Up}
- }
- RandSleep(0,100)
- if CorruptedBloodFlaskChek3
- {
- Sendinput, {3 Down}
- Sendinput, {3 Up}
- }
- RandSleep(0,100)
- if CorruptedBloodFlaskChek4
- {
- Sendinput, {4 Down}
- Sendinput, {4 Up}
- }
- RandSleep(0,100)
- if CorruptedBloodFlaskChek5
- {
- Sendinput, {5 Down}
- Sendinput, {5 Up}
- }
- RandSleep(0,100)
- Flask_timer := A_TickCount
- }
- continue
- }
- }
- loop, %BuffAmount%
- {
- BuffTimer:=PlayerStats.BuffTimer[A_Index]
- BuffCharges:=PlayerStats.BuffCharges[A_Index]
- If (CorruptedBloodChek and InStr(playerstats.BuffName[A_Index], "corrupted_blood"))
- {
- if (BuffCharges>=%CorruptedBloodCharges% and A_TickCount - Flask_timer > 500)
- {
- ;FIX
- if CorruptedBloodFlaskChek1
- {
- Sendinput, {1 Down}
- Sendinput, {1 Up}
- RandSleep(0,100)
- }
- RandSleep(0,100)
- if CorruptedBloodFlaskChek2
- {
- Sendinput, {2 Down}
- Sendinput, {2 Up}
- }
- RandSleep(0,100)
- if CorruptedBloodFlaskChek3
- {
- Sendinput, {3 Down}
- Sendinput, {3 Up}
- }
- RandSleep(0,100)
- if CorruptedBloodFlaskChek4
- {
- Sendinput, {4 Down}
- Sendinput, {4 Up}
- }
- RandSleep(0,100)
- if CorruptedBloodFlaskChek5
- {
- Sendinput, {5 Down}
- Sendinput, {5 Up}
- }
- Flask_timer := A_TickCount
- }
- continue
- }
- }
- ;AILMENTS
- loop, %BuffAmount%
- {
- BuffTimer:=PlayerStats.BuffTimer[A_Index]
- BuffCharges:=PlayerStats.BuffCharges[A_Index]
- If (FrozenAilmentsChek and InStr(playerstats.BuffName[A_Index], "frozen")) || (BurningAilmentsChek and InStr(playerstats.BuffName[A_Index], "ignited")) || (ShockAilmentsChek and InStr(playerstats.BuffName[A_Index], "shocked"))
- {
- if (BuffCharges>=%CorruptedBloodCharges% and A_TickCount - Flask_timer > 500)
- {
- ;FIX
- if AilmentsFlaskChek1
- {
- Sendinput, {1 Down}
- Sendinput, {1 Up}
- RandSleep(0,100)
- }
- RandSleep(0,100)
- if AilmentsFlaskChek2
- {
- Sendinput, {2 Down}
- Sendinput, {2 Up}
- }
- RandSleep(0,100)
- if AilmentsFlaskChek3
- {
- Sendinput, {3 Down}
- Sendinput, {3 Up}
- }
- RandSleep(0,100)
- if AilmentsFlaskChek4
- {
- Sendinput, {4 Down}
- Sendinput, {4 Up}
- }
- RandSleep(0,100)
- if AilmentsFlaskChek5
- {
- Sendinput, {5 Down}
- Sendinput, {5 Up}
- }
- Flask_timer := A_TickCount
- }
- continue
- }
- }
- loop, %BuffAmount%
- {
- BuffTimer:=PlayerStats.BuffTimer[A_Index]
- BuffCharges:=PlayerStats.BuffCharges[A_Index]
- If InStr(playerstats.BuffName[A_Index], "charged_attack")
- {
- if(BuffCharges>=6 and A_TickCount - BF_timer > 500)
- {
- BFRelease()
- BF_timer := A_TickCount
- }
- continue
- }
- }
- }
- IfWinExist, DEBUG
- {
- MaxMANAvalue:=PlayerStats.mp
- GuiControl,2: , MaxMANAvar , %MaxMANAvalue%
- BuffAmountvalue:=%BuffAmount%
- GuiControl,2: , BuffAmountvar , %BuffAmountvalue%
- Loop, %BuffAmount%
- {
- BuffName%A_Index%value:=PlayerStats.BuffName[A_Index]
- value:=BuffName%A_Index%value
- GuiControl,2: , Buff%A_Index%Namevar , %value%
- BuffCharges%A_Index%value:=PlayerStats.BuffCharges[A_Index]
- value:=BuffCharges%A_Index%value
- GuiControl,2: , Buff%A_Index%Chargesvar , %value%
- BuffTimer%A_Index%value:=PlayerStats.BuffTimer[A_Index]
- value:=BuffTimer%A_Index%value
- If (value=2139095040)
- {
- GuiControl,2: , Buff%A_Index%Timervar , Infinite
- }
- Else
- {
- GuiControl,2: , Buff%A_Index%Timervar , %value%
- }
- Sleep, 1
- }
- }
- }
- FlaskSpam()
- {
- if SpamFlaskChek1
- {
- Sendinput, {RButton Down}
- Sendinput, {RButton Up}
- }
- RandSleep(0,100)
- if SpamFlaskChek1
- {
- Sendinput, {1 Down}
- Sendinput, {1 Up}
- }
- RandSleep(0,100)
- if SpamFlaskChek2
- {
- Sendinput, {2 Down}
- Sendinput, {2 Up}
- }
- RandSleep(0,100)
- if SpamFlaskChek3
- {
- Sendinput, {3 Down}
- Sendinput, {3 Up}
- }
- RandSleep(0,100)
- if SpamFlaskChek4
- {
- Sendinput, {4 Down}
- Sendinput, {4 Up}
- }
- RandSleep(0,100)
- if SpamFlaskChek5
- {
- Sendinput, {5 Down}
- Sendinput, {5 Up}
- }
- }
- BFRelease()
- {
- if not BF_Key == "RButton"
- {
- if GetKeyState(%BF_Key%, "P")
- {
- Sendinput, {%BF_Key% Up}
- RandSleep(0,100)
- Sendinput, {%BF_Key% Down}
- }
- else
- {
- Sendinput, {%BF_Key% Up}
- RandSleep(0,100)
- }
- }
- else
- {
- if GetKeyState("RButton", "P")
- {
- Sendinput, {RButton Up}
- RandSleep(0,100)
- Sendinput, {RButton Down}
- }
- else
- {
- Sendinput, {RButton Up}
- RandSleep(0,100)
- }
- }
- }
- readFromFile(){
- global
- IniRead, BF_Key, User.ini, variables, BF_Key %A_Space%
- IniRead, SpamFlaskKey1, User.ini, variables, SpamFlaskKey1 %A_Space%
- IniRead, SpamFlaskKey2, User.ini, variables, SpamFlaskKey2 %A_Space%
- IniRead, SpamFlaskChek1, User.ini, variables, SpamFlaskChek1 %A_Space%
- IniRead, SpamFlaskChek2, User.ini, variables, SpamFlaskChek2 %A_Space%
- IniRead, SpamFlaskChek3, User.ini, variables, SpamFlaskChek3 %A_Space%
- IniRead, SpamFlaskChek4, User.ini, variables, SpamFlaskChek4 %A_Space%
- IniRead, SpamFlaskChek5, User.ini, variables, SpamFlaskChek5 %A_Space%
- IniRead, CorruptedBloodChek, User.ini, variables, CorruptedBloodChek %A_Space%
- IniRead, CorruptedBloodCharges, User.ini, variables, CorruptedBloodCharges %A_Space%
- IniRead, CorruptedBloodFlaskChek1, User.ini, variables, CorruptedBloodFlaskChek1 %A_Space%
- IniRead, CorruptedBloodFlaskChek2, User.ini, variables, CorruptedBloodFlaskChek2 %A_Space%
- IniRead, CorruptedBloodFlaskChek3, User.ini, variables, CorruptedBloodFlaskChek3 %A_Space%
- IniRead, CorruptedBloodFlaskChek4, User.ini, variables, CorruptedBloodFlaskChek4 %A_Space%
- IniRead, CorruptedBloodFlaskChek5, User.ini, variables, CorruptedBloodFlaskChek5 %A_Space%
- IniRead, FrozenAilmentsChek, User.ini, variables, FrozenAilmentsChek %A_Space%
- IniRead, ShockAilmentsChek, User.ini, variables, ShockAilmentsChek %A_Space%
- IniRead, BurningAilmentsChek, User.ini, variables, BurningAilmentsChek %A_Space%
- IniRead, AilmentFlaskChek1, User.ini, variables, AilmentFlaskChek1 %A_Space%
- IniRead, AilmentFlaskChek2, User.ini, variables, AilmentFlaskChek2 %A_Space%
- IniRead, AilmentFlaskChek3, User.ini, variables, AilmentFlaskChek3 %A_Space%
- IniRead, AilmentFlaskChek4, User.ini, variables, AilmentFlaskChek4 %A_Space%
- IniRead, AilmentFlaskChek5, User.ini, variables, AilmentFlaskChek5 %A_Space%
- IniRead, LowhpLevel, User.ini, variables, LowhpLevel %A_Space%
- Return
- }
- submit(){
- updateEverything:
- global
- Gui, Submit
- IniWrite, %BF_Key%, User.ini, variables, BF_Key %A_Space%
- IniWrite, %SpamFlaskKey1%, User.ini, variables, SpamFlaskKey1 %A_Space%
- IniWrite, %SpamFlaskChek1%, User.ini, variables, SpamFlaskChek1 %A_Space%
- IniWrite, %SpamFlaskChek2%, User.ini, variables, SpamFlaskChek2 %A_Space%
- IniWrite, %SpamFlaskChek3%, User.ini, variables, SpamFlaskChek3 %A_Space%
- IniWrite, %SpamFlaskChek4%, User.ini, variables, SpamFlaskChek4 %A_Space%
- IniWrite, %SpamFlaskChek5%, User.ini, variables, SpamFlaskChek5 %A_Space%
- IniWrite, %CorruptedBloodChek%, User.ini, variables, CorruptedBloodChek %A_Space%
- IniWrite, %CorruptedBloodCharges%, User.ini, variables, CorruptedBloodCharges %A_Space%
- IniWrite, %CorruptedBloodFlaskChek1%, User.ini, variables, CorruptedBloodFlaskChek1 %A_Space%
- IniWrite, %CorruptedBloodFlaskChek2%, User.ini, variables, CorruptedBloodFlaskChek2 %A_Space%
- IniWrite, %CorruptedBloodFlaskChek3%, User.ini, variables, CorruptedBloodFlaskChek3 %A_Space%
- IniWrite, %CorruptedBloodFlaskChek4%, User.ini, variables, CorruptedBloodFlaskChek4 %A_Space%
- IniWrite, %CorruptedBloodFlaskChek5%, User.ini, variables, CorruptedBloodFlaskChek5 %A_Space%
- IniWrite, %FrozenAilmentsChek%, User.ini, variables, FrozenAilmentsChek %A_Space%
- IniWrite, %ShockAilmentsChek%, User.ini, variables, ShockAilmentsChek %A_Space%
- IniWrite, %BurningAilmentsChek%, User.ini, variables, BurningAilmentsChek %A_Space%
- IniWrite, %AilmentFlaskChek1%, User.ini, variables, AilmentFlaskChek1 %A_Space%
- IniWrite, %AilmentFlaskChek2%, User.ini, variables, AilmentFlaskChek2 %A_Space%
- IniWrite, %AilmentFlaskChek3%, User.ini, variables, AilmentFlaskChek3 %A_Space%
- IniWrite, %AilmentFlaskChek4%, User.ini, variables, AilmentFlaskChek4 %A_Space%
- IniWrite, %AilmentFlaskChek5%, User.ini, variables, AilmentFlaskChek5 %A_Space%
- IniWrite, %LowhpLevel%, User.ini, variables, LowhpLevel %A_Space%
- readFromFile()
- Gui, 1:Show,, Settings
- return
- showgui:
- Gui, 1:Show,, Settings
- return
- showgui2:
- Gui, 2:Show,, DEBUG
- return
- GuiUpdate:
- Gui, Submit, NoHide
- GuiControl, , CorruptedBloodChargesUpdate, %CorruptedBloodCharges%
- GuiControl, , LowhpLevelUpdate, %LowhpLevel%
- return
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement