Skocz do zawartości

LoftyBot - 1.4.8 CRACKED

Polecane posty

Autor tematu Napisano (edytowany)

Witajcie,

 

zacząłem ostatnio grywać dużo na różnych OTS-ach, a w szczególności na Medivii stąd też przyszła potrzeba aby nieco zautomatyzować niektóre żmudne czynności jakimś gotowym botem.

 

Na medivie są aktualnie 2 działające boty (mówię tutaj o sprawdzonych przeze mnie): LoftyBot oraz MediviaProBot oba zostały przeze mnie scrackowane.

 

LoftyBot to nic innego jak zwykły skrypt w AutoIT stąd też nie wymagało to ode mnie zbyt dużego wysiłku aby go scrackować. Ale nie owijając dalej w bawełnę, poniżej podaję działającego LoftyBota w wersji 1.4.8 bez potrzeby uwierzytelniania. Źródła nie podaję, ale każdy kto choć trochę bawi się informatyką, nie powinien mieć najmniejszego problemu z jego wyciągnięciem.

 

Download:

https://mega.nz/#!PsYQmTAL!3p_4pzFAoq6OD2IKSSpzoby6tdMfpcx6_33Kp42w8j0

Virustotal:

https://www.virustotal.com/pl/file/ff84d318fa88f601c1cc3bd52a9788083646c72e3cdbb18214350a2c9630fc74/analysis/1489051447/

Zapewniam, że w środku nie ma żadnego wirusa pomimo powyższego wyniku: potencjalne zainfekowanie zostało wykryte w "ImageSearchDLLx32.dll" która jest często wykorzystywana w skryptach AutoIT stąd też, nie martwcie się tym, po drugie potencjalny wirus został wykryty przez niszowe antywirusy, w samym .exe bota nic nie ma.

Edytowano przez Narkon

Udostępnij ten post


Link to postu
Pani Kasia

Konfiguracja jest zawsze taka sama, niezależnie od OTS-a -> https://www.youtube.com/watch?v=KN3G2qbHKoI

 

LoftyBot wspiera akutalnie:

- Medivia OTS (after update 2.0 - new client)
- Nastarius OTS
- Tibijka OTS
- Darkot OTS
- Classictibia.com 
- Raretibia.com
- Dolnera.com
- play.tibians.org
- All others OTS with client look (like official) or otclient (custom client)

Udostępnij ten post


Link to postu
Pani Kasia

 

Konfiguracja jest zawsze taka sama, niezależnie od OTS-a -> https://www.youtube.com/watch?v=KN3G2qbHKoI

 

LoftyBot wspiera akutalnie:

- Medivia OTS (after update 2.0 - new client)
- Nastarius OTS
- Tibijka OTS
- Darkot OTS
- Classictibia.com 
- Raretibia.com
- Dolnera.com
- play.tibians.org
- All others OTS with client look (like official) or otclient (custom client)

 

rozumiem nie pytalem o konfiguracje bota lecz o wlaczenie go na tibianus.org

bo gdy odpalam pisze odrazu ze  I don't see tibijka client and hp bar a ja opalam tibianus otsa nie tibijke

Udostępnij ten post


Link to postu

Ciężko mi stwierdzić dlaczego, musiałbym spojrzeć w kod źródłowy bota (być może autor coś sknocił). Postaram się później to zrobić.

Udostępnij ten post


Link to postu
Pani Kasia

Ciężko mi stwierdzić dlaczego, musiałbym spojrzeć w kod źródłowy bota (być może autor coś sknocił). Postaram się później to zrobić.

jakbys mogl zrobic zeby na tibianus chodzilo bylo by git

pewnie nie tylko mi bys pomogl ;p

Udostępnij ten post


Link to postu

Bot jest serio czysty, jeżeli ktoś nie wierzy to niech popatrzy na kod.

 

 

#Au3Stripper_Ignore_Funcs=RefreshHP,RefreshMP,walker,waypoints,autoAttacker,uhHeal,healer,spell_caster,slimTraining,fishRecording,fishing,logoutMP
#Au3Stripper_Ignore_Funcs=autoEater,autoEquiper,runesMaker,afk,alertDisconnected,alertHpBelow,alert_player_pos,setTitle,picker,logoutScreen
#Au3Stripper_Ignore_Funcs=OTRefreshHP,OTRefreshMP,TibijkaRefreshHP,TibijkaRefreshMP
#Au3Stripper_Ignore_Variables=MousePos,clickedColor,WinTitle,slimPos
Global Const $cbs_autohscroll = 64
Global Const $cbs_dropdown = 2
Global Const $es_password = 32
Global Const $gui_ss_default_input = 128
Global Const $gui_event_close = -3
Global Const $gui_unchecked = 4
Global Const $gui_disable = 128
Global Const $gui_focus = 256
Global Const $ss_center = 1
Global Const $ws_popup = --2147483648
Global Const $ws_ex_toolwindow = 128
Global Const $ws_ex_topmost = 8
Global $__g_atimers_atimerids[1][3]

Func _timer_gettimerid($wparam)
	Local $_itimerid = Dec(Hex($wparam, 8)), $imax = UBound($__g_atimers_atimerids) - 1
	For $x = 1 To $imax
		If $_itimerid = $__g_atimers_atimerids[$x][1] Then Return $__g_atimers_atimerids[$x][0]
	Next
	Return 0
EndFunc

Func _timer_killtimer($hwnd, $itimerid)
	Local $aresult[1] = [0], $hcallback = 0, $iubound = UBound($__g_atimers_atimerids) - 1
	For $x = 1 To $iubound
		If $__g_atimers_atimerids[$x][0] = $itimerid Then
			If IsHWnd($hwnd) Then
				$aresult = DllCall("user32.dll", "bool", "KillTimer", "hwnd", $hwnd, "uint_ptr", $__g_atimers_atimerids[$x][1])
			Else
				$aresult = DllCall("user32.dll", "bool", "KillTimer", "hwnd", $hwnd, "uint_ptr", $__g_atimers_atimerids[$x][0])
			EndIf
			If @ OR $aresult[0] = 0 Then Return SetError(@, @, False)
			$hcallback = $__g_atimers_atimerids[$x][2]
			If $hcallback <> 0 Then DllCallbackFree($hcallback)
			For $i = $x To $iubound - 1
				$__g_atimers_atimerids[$i][0] = $__g_atimers_atimerids[$i + 1][0]
				$__g_atimers_atimerids[$i][1] = $__g_atimers_atimerids[$i + 1][1]
				$__g_atimers_atimerids[$i][2] = $__g_atimers_atimerids[$i + 1][2]
			Next
			ReDim $__g_atimers_atimerids[UBound($__g_atimers_atimerids - 1)][3]
			$__g_atimers_atimerids[0][0] -= 1
			ExitLoop
		EndIf
	Next
	Return $aresult[0] <> 0
EndFunc

Func _timer_settimer($hwnd, $ielapse = 250, $stimerfunc = "", $itimerid = -1)
	Local $aresult[1] = [0], $ptimerfunc = 0, $hcallback = 0, $iindex = $__g_atimers_atimerids[0][0] + 1
	If $itimerid = -1 Then
		ReDim $__g_atimers_atimerids[$iindex + 1][3]
		$__g_atimers_atimerids[0][0] = $iindex
		$itimerid = $iindex + 1000
		For $x = 1 To $iindex
			If $__g_atimers_atimerids[$x][0] = $itimerid Then
				$itimerid = $itimerid + 1
				$x = 0
			EndIf
		Next
		If $stimerfunc <> "" Then
			$hcallback = DllCallbackRegister($stimerfunc, "none", "hwnd;uint;uint_ptr;dword")
			If $hcallback = 0 Then Return SetError(-1, -1, 0)
			$ptimerfunc = DllCallbackGetPtr($hcallback)
			If $ptimerfunc = 0 Then Return SetError(-1, -1, 0)
		EndIf
		$aresult = DllCall("user32.dll", "uint_ptr", "SetTimer", "hwnd", $hwnd, "uint_ptr", $itimerid, "uint", $ielapse, "ptr", $ptimerfunc)
		If @ OR $aresult[0] = 0 Then Return SetError(@, @, 0)
		$__g_atimers_atimerids[$iindex][0] = $aresult[0]
		$__g_atimers_atimerids[$iindex][1] = $itimerid
		$__g_atimers_atimerids[$iindex][2] = $hcallback
	Else
		For $x = 1 To $iindex - 1
			If $__g_atimers_atimerids[$x][0] = $itimerid Then
				If IsHWnd($hwnd) Then $itimerid = $__g_atimers_atimerids[$x][1]
				$hcallback = $__g_atimers_atimerids[$x][2]
				If $hcallback <> 0 Then
					$ptimerfunc = DllCallbackGetPtr($hcallback)
					If $ptimerfunc = 0 Then Return SetError(-1, -1, 0)
				EndIf
				$aresult = DllCall("user32.dll", "uint_ptr", "SetTimer", "hwnd", $hwnd, "uint_ptr", $itimerid, "uint", $ielapse, "ptr", $ptimerfunc)
				If @ OR $aresult[0] = 0 Then Return SetError(@, @, 0)
				ExitLoop
			EndIf
		Next
	EndIf
	Return $aresult[0]
EndFunc

Global Const $mb_yesno = 4
Global Const $mb_iconerror = 16
Global Const $mb_systemmodal = 4096
Global Const $idyes = 6
Global Const $color_green = 32768
Global Const $color_red = 16711680

Func _process2win($pid)
	If IsString($pid) Then $pid = ProcessExists($pid)
	If $pid = 0 Then Return -1
	$list = WinList()
	For $i = 1 To $list[0][0]
		If $list[$i][0] <> "" AND BitAND(WinGetState($list[$i][1]), 2) Then
			$wpid = WinGetProcess($list[$i][0])
			If $wpid = $pid Then Return $list[$i][0]
		EndIf
	Next
	Return -1
EndFunc

Global Const $tagrect = "struct;long Left;long Top;long Right;long Bottom;endstruct"
Global Const $taggdipstartupinput = "uint Version;ptr Callback;bool NoThread;bool NoCodecs"
Global Const $tagrebarbandinfo = "uint cbSize;uint fMask;uint fStyle;dword clrFore;dword clrBack;ptr lpText;uint cch;" & "int iImage;hwnd hwndChild;uint cxMinChild;uint cyMinChild;uint cx;handle hbmBack;uint wID;uint cyChild;uint cyMaxChild;" & "uint cyIntegral;uint cxIdeal;lparam lParam;uint cxHeader" & ((@OSVersion = "WIN_XP") ? "" : ";" & $tagrect & ";uint uChevronState")
Global Const $ubound_dimensions = 0
Global Const $ubound_rows = 1
Global Const $ubound_columns = 2
Global Const $str_entiresplit = 1
Global Const $str_nocount = 2
Global Const $hgdi_error = Ptr(-1)
Global Const $invalid_handle_value = Ptr(-1)
Global Const $kf_extended = 256
Global Const $kf_altdown = 8192
Global Const $kf_up = 32768
Global Const $llkhf_extended = BitShift($kf_extended, 8)
Global Const $llkhf_altdown = BitShift($kf_altdown, 8)
Global Const $llkhf_up = BitShift($kf_up, 8)

Func _winapi_combinergn($hrgndest, $hrgnsrc1, $hrgnsrc2, $icombinemode)
	Local $aresult = DllCall("gdi32.dll", "int", "CombineRgn", "handle", $hrgndest, "handle", $hrgnsrc1, "handle", $hrgnsrc2, "int", $icombinemode)
	If @ Then Return SetError(@, @, 0)
	Return $aresult[0]
EndFunc

Func _winapi_createrectrgn($ileftrect, $itoprect, $irightrect, $ibottomrect)
	Local $aresult = DllCall("gdi32.dll", "handle", "CreateRectRgn", "int", $ileftrect, "int", $itoprect, "int", $irightrect, "int", $ibottomrect)
	If @ Then Return SetError(@, @, 0)
	Return $aresult[0]
EndFunc

Func _winapi_deleteobject($hobject)
	Local $aresult = DllCall("gdi32.dll", "bool", "DeleteObject", "handle", $hobject)
	If @ Then Return SetError(@, @, False)
	Return $aresult[0]
EndFunc

Func _winapi_getwindowdc($hwnd)
	Local $aresult = DllCall("user32.dll", "handle", "GetWindowDC", "hwnd", $hwnd)
	If @ Then Return SetError(@, @, 0)
	Return $aresult[0]
EndFunc

Func _winapi_setwindowrgn($hwnd, $hrgn, $bredraw = True)
	Local $aresult = DllCall("user32.dll", "int", "SetWindowRgn", "hwnd", $hwnd, "handle", $hrgn, "bool", $bredraw)
	If @ Then Return SetError(@, @, False)
	Return $aresult[0]
EndFunc

Global Const $tagosversioninfo = "struct;dword OSVersionInfoSize;dword MajorVersion;dword MinorVersion;dword BuildNumber;dword PlatformId;wchar CSDVersion[128];endstruct"
Global Const $__winver = __winver()

Func __winver()
	Local $tosvi = DllStructCreate($tagosversioninfo)
	DllStructSetData($tosvi, 1, DllStructGetSize($tosvi))
	Local $aret = DllCall("kernel32.dll", "bool", "GetVersionExW", "struct*", $tosvi)
	If @ OR NOT $aret[0] Then Return SetError(@, @, 0)
	Return BitOR(BitShift(DllStructGetData($tosvi, 2), -8), DllStructGetData($tosvi, 3))
EndFunc

Global $__g_hgdipdll = 0
Global $__g_hgdippen = 0
Global $__g_igdipref = 0
Global $__g_igdiptoken = 0
Global $__g_bgdip_v1_0 = True

Func _gdiplus_graphicscreatefromhdc($hdc)
	Local $aresult = DllCall($__g_hgdipdll, "int", "GdipCreateFromHDC", "handle", $hdc, "handle*", 0)
	If @ Then Return SetError(@, @, 0)
	If $aresult[0] Then Return SetError(10, $aresult[0], 0)
	Return $aresult[2]
EndFunc

Func _gdiplus_graphicscreatefromhwnd($hwnd)
	Local $aresult = DllCall($__g_hgdipdll, "int", "GdipCreateFromHWND", "hwnd", $hwnd, "handle*", 0)
	If @ Then Return SetError(@, @, 0)
	If $aresult[0] Then Return SetError(10, $aresult[0], 0)
	Return $aresult[2]
EndFunc

Func _gdiplus_graphicsdispose($hgraphics)
	Local $aresult = DllCall($__g_hgdipdll, "int", "GdipDeleteGraphics", "handle", $hgraphics)
	If @ Then Return SetError(@, @, False)
	If $aresult[0] Then Return SetError(10, $aresult[0], False)
	Return True
EndFunc

Func _gdiplus_graphicsdrawimage($hgraphics, $himage, $nx, $ny)
	Local $aresult = DllCall($__g_hgdipdll, "int", "GdipDrawImage", "handle", $hgraphics, "handle", $himage, "float", $nx, "float", $ny)
	If @ Then Return SetError(@, @, False)
	If $aresult[0] Then Return SetError(10, $aresult[0], False)
	Return True
EndFunc

Func _gdiplus_graphicsdrawrect($hgraphics, $nx, $ny, $nwidth, $nheight, $hpen = 0)
	__gdiplus_pendefcreate($hpen)
	Local $aresult = DllCall($__g_hgdipdll, "int", "GdipDrawRectangle", "handle", $hgraphics, "handle", $hpen, "float", $nx, "float", $ny, "float", $nwidth, "float", $nheight)
	__gdiplus_pendefdispose()
	If @ Then Return SetError(@, @, False)
	If $aresult[0] Then Return SetError(10, $aresult[0], False)
	Return True
EndFunc

Func _gdiplus_imagedispose($himage)
	Local $aresult = DllCall($__g_hgdipdll, "int", "GdipDisposeImage", "handle", $himage)
	If @ Then Return SetError(@, @, False)
	If $aresult[0] Then Return SetError(10, $aresult[0], False)
	Return True
EndFunc

Func _gdiplus_imageloadfromfile($sfilename)
	Local $aresult = DllCall($__g_hgdipdll, "int", "GdipLoadImageFromFile", "wstr", $sfilename, "handle*", 0)
	If @ Then Return SetError(@, @, 0)
	If $aresult[0] Then Return SetError(10, $aresult[0], 0)
	Return $aresult[2]
EndFunc

Func _gdiplus_pencreate($iargb = -16777216, $nwidth = 1, $iunit = 2)
	Local $aresult = DllCall($__g_hgdipdll, "int", "GdipCreatePen1", "dword", $iargb, "float", $nwidth, "int", $iunit, "handle*", 0)
	If @ Then Return SetError(@, @, 0)
	If $aresult[0] Then Return SetError(10, $aresult[0], 0)
	Return $aresult[4]
EndFunc

Func _gdiplus_pendispose($hpen)
	Local $aresult = DllCall($__g_hgdipdll, "int", "GdipDeletePen", "handle", $hpen)
	If @ Then Return SetError(@, @, False)
	If $aresult[0] Then Return SetError(10, $aresult[0], False)
	Return True
EndFunc

Func _gdiplus_shutdown()
	If $__g_hgdipdll = 0 Then Return SetError(-1, -1, False)
	$__g_igdipref -= 1
	If $__g_igdipref = 0 Then
		DllCall($__g_hgdipdll, "none", "GdiplusShutdown", "ulong_ptr", $__g_igdiptoken)
		DllClose($__g_hgdipdll)
		$__g_hgdipdll = 0
	EndIf
	Return True
EndFunc

Func _gdiplus_startup($sgdipdll = Default, $bretdllhandle = False)
	$__g_igdipref += 1
	If $__g_igdipref > 1 Then Return True
	If $sgdipdll = Default Then $sgdipdll = "gdiplus.dll"
	$__g_hgdipdll = DllOpen($sgdipdll)
	If $__g_hgdipdll = -1 Then
		$__g_igdipref = 0
		Return SetError(1, 2, False)
	EndIf
	Local $sver = FileGetVersion($sgdipdll)
	$sver = StringSplit($sver, ".")
	If $sver[1] > 5 Then $__g_bgdip_v1_0 = False
	Local $tinput = DllStructCreate($taggdipstartupinput)
	Local $ttoken = DllStructCreate("ulong_ptr Data")
	DllStructSetData($tinput, "Version", 1)
	Local $aresult = DllCall($__g_hgdipdll, "int", "GdiplusStartup", "struct*", $ttoken, "struct*", $tinput, "ptr", 0)
	If @ Then Return SetError(@, @, False)
	If $aresult[0] Then Return SetError(10, $aresult[0], False)
	$__g_igdiptoken = DllStructGetData($ttoken, "Data")
	If $bretdllhandle Then Return $__g_hgdipdll
	Return SetExtended($sver[1], True)
EndFunc

Func __gdiplus_pendefcreate(ByRef $hpen)
	If $hpen = 0 Then
		$__g_hgdippen = _gdiplus_pencreate()
		$hpen = $__g_hgdippen
	EndIf
EndFunc

Func __gdiplus_pendefdispose($icurerror = @, $icurextended = @)
	If $__g_hgdippen <> 0 Then
		_gdiplus_pendispose($__g_hgdippen)
		$__g_hgdippen = 0
	EndIf
	Return SetError($icurerror, $icurextended)
EndFunc

Func _ispressed($shexkey, $vdll = "user32.dll")
	Local $a_r = DllCall($vdll, "short", "GetAsyncKeyState", "int", "0x" & $shexkey)
	If @ Then Return SetError(@, @, False)
	Return BitAND($a_r[0], 32768) <> 0
EndFunc

Global Enum $arrayfill_force_default, $arrayfill_force_singleitem, $arrayfill_force_int, $arrayfill_force_number, $arrayfill_force_ptr, $arrayfill_force_hwnd, $arrayfill_force_string

Func _arraydisplay(Const ByRef $aarray, $stitle = Default, $sarrayrange = Default, $iflags = Default, $vuser_separator = Default, $sheader = Default, $imax_colwidth = Default, $ialt_color = Default, $huser_function = Default)
	If $stitle = Default Then $stitle = "ArrayDisplay"
	If $sarrayrange = Default Then $sarrayrange = ""
	If $iflags = Default Then $iflags = 0
	If $vuser_separator = Default Then $vuser_separator = ""
	If $sheader = Default Then $sheader = ""
	If $imax_colwidth = Default Then $imax_colwidth = 350
	If $ialt_color = Default Then $ialt_color = 0
	If $huser_function = Default Then $huser_function = 0
	Local $itranspose = BitAND($iflags, 1)
	Local $icolalign = BitAND($iflags, 6)
	Local $iverbose = BitAND($iflags, 8)
	Local $ibuttonmargin = ((BitAND($iflags, 32)) ? (0) : ((BitAND($iflags, 16)) ? (20) : (40)))
	Local $inorow = BitAND($iflags, 64)
	Local $smsg = "", $iret = 1
	If IsArray($aarray) Then
		Local $idimension = UBound($aarray, $ubound_dimensions), $irowcount = UBound($aarray, $ubound_rows), $icolcount = UBound($aarray, $ubound_columns)
		If $idimension > 2 Then
			$smsg = "Larger than 2D array passed to function"
			$iret = 2
		EndIf
	Else
		$smsg = "No array variable passed to function"
	EndIf
	If $smsg Then
		If $iverbose AND MsgBox($mb_systemmodal + $mb_iconerror + $mb_yesno, "ArrayDisplay Error: " & $stitle, $smsg & @CRLF & @CRLF & "Exit the script?") = $idyes Then
			Exit
		Else
			Return SetError($iret, 0, "")
		EndIf
	EndIf
	Local $icw_colwidth = Number($vuser_separator)
	Local $sad_separator = ChrW(64177)
	Local $scurr_separator = Opt("GUIDataSeparatorChar", $sad_separator)
	If $vuser_separator = "" Then $vuser_separator = $scurr_separator
	Local $vtmp, $irowlimit = 65525, $icollimit = 250
	Local $idatarow = $irowcount
	Local $idatacol = $icolcount
	Local $iitem_start = 0, $iitem_end = $irowcount - 1, $isubitem_start = 0, $isubitem_end = (($idimension = 2) ? ($icolcount - 1) : (0))
	Local $brange_flag = False, $avrangesplit
	If $sarrayrange Then
		Local $aarray_range = StringRegExp($sarrayrange & "||", "(?U)(.*)\|", 3)
		If $aarray_range[0] Then
			$avrangesplit = StringSplit($aarray_range[0], ":")
			If @ Then
				$iitem_end = Number($avrangesplit[1])
			Else
				$iitem_start = Number($avrangesplit[1])
				$iitem_end = Number($avrangesplit[2])
			EndIf
		EndIf
		If $iitem_start > $iitem_end Then
			$vtmp = $iitem_start
			$iitem_start = $iitem_end
			$iitem_end = $vtmp
		EndIf
		If $iitem_start < 0 Then $iitem_start = 0
		If $iitem_end > $irowcount - 1 Then $iitem_end = $irowcount - 1
		If $iitem_start <> 0 OR $iitem_end <> $irowcount - 1 Then $brange_flag = True
		If $idimension = 2 AND $aarray_range[1] Then
			$avrangesplit = StringSplit($aarray_range[1], ":")
			If @ Then
				$isubitem_end = Number($avrangesplit[1])
			Else
				$isubitem_start = Number($avrangesplit[1])
				$isubitem_end = Number($avrangesplit[2])
			EndIf
			If $isubitem_start > $isubitem_end Then
				$vtmp = $isubitem_start
				$isubitem_start = $isubitem_end
				$isubitem_end = $vtmp
			EndIf
			If $isubitem_start < 0 Then $isubitem_start = 0
			If $isubitem_end > $icolcount - 1 Then $isubitem_end = $icolcount - 1
			If $isubitem_start <> 0 OR $isubitem_end <> $icolcount - 1 Then $brange_flag = True
		EndIf
	EndIf
	Local $sdisplaydata = "[" & $idatarow
	Local $btruncated = False
	If $itranspose Then
		If $iitem_end - $iitem_start > $icollimit Then
			$btruncated = True
			$iitem_end = $iitem_start + $icollimit - 1
		EndIf
	Else
		If $iitem_end - $iitem_start > $irowlimit Then
			$btruncated = True
			$iitem_end = $iitem_start + $irowlimit - 1
		EndIf
	EndIf
	If $btruncated Then
		$sdisplaydata &= "*]"
	Else
		$sdisplaydata &= "]"
	EndIf
	If $idimension = 2 Then
		$sdisplaydata &= " [" & $idatacol
		If $itranspose Then
			If $isubitem_end - $isubitem_start > $irowlimit Then
				$btruncated = True
				$isubitem_end = $isubitem_start + $irowlimit - 1
			EndIf
		Else
			If $isubitem_end - $isubitem_start > $icollimit Then
				$btruncated = True
				$isubitem_end = $isubitem_start + $icollimit - 1
			EndIf
		EndIf
		If $btruncated Then
			$sdisplaydata &= "*]"
		Else
			$sdisplaydata &= "]"
		EndIf
	EndIf
	Local $stipdata = ""
	If $btruncated Then $stipdata &= "Truncated"
	If $brange_flag Then
		If $stipdata Then $stipdata &= " - "
		$stipdata &= "Range set"
	EndIf
	If $itranspose Then
		If $stipdata Then $stipdata &= " - "
		$stipdata &= "Transposed"
	EndIf
	Local $asheader = StringSplit($sheader, $scurr_separator, $str_nocount)
	If UBound($asheader) = 0 Then Local $asheader[1] = [""]
	$sheader = "Row"
	Local $iindex = $isubitem_start
	If $itranspose Then
		For $j = $iitem_start To $iitem_end
			$sheader &= $sad_separator & "Col " & $j
		Next
	Else
		If $asheader[0] Then
			For $iindex = $isubitem_start To $isubitem_end
				If $iindex >= UBound($asheader) Then ExitLoop
				$sheader &= $sad_separator & $asheader[$iindex]
			Next
		EndIf
		For $j = $iindex To $isubitem_end
			$sheader &= $sad_separator & "Col " & $j
		Next
	EndIf
	If $inorow Then $sheader = StringTrimLeft($sheader, 4)
	If $iverbose AND ($iitem_end - $iitem_start + 1) * ($isubitem_end - $isubitem_start + 1) > 10000 Then
		SplashTextOn("ArrayDisplay", "Preparing display" & @CRLF & @CRLF & "Please be patient", 300, 100)
	EndIf
	Local $ibuffer = 4094
	If $itranspose Then
		$vtmp = $iitem_start
		$iitem_start = $isubitem_start
		$isubitem_start = $vtmp
		$vtmp = $iitem_end
		$iitem_end = $isubitem_end
		$isubitem_end = $vtmp
	EndIf
	Local $avarraytext[$iitem_end - $iitem_start + 1]
	For $i = $iitem_start To $iitem_end
		If NOT $inorow Then $avarraytext[$i - $iitem_start] = "[" & $i & "]"
		For $j = $isubitem_start To $isubitem_end
			If $idimension = 1 Then
				If $itranspose Then
					Switch VarGetType($aarray[$j])
						Case "Array"
							$vtmp = "{Array}"
						Case Else
							$vtmp = $aarray[$j]
					EndSwitch
				Else
					Switch VarGetType($aarray[$i])
						Case "Array"
							$vtmp = "{Array}"
						Case Else
							$vtmp = $aarray[$i]
					EndSwitch
				EndIf
			Else
				If $itranspose Then
					Switch VarGetType($aarray[$j][$i])
						Case "Array"
							$vtmp = "{Array}"
						Case Else
							$vtmp = $aarray[$j][$i]
					EndSwitch
				Else
					Switch VarGetType($aarray[$i][$j])
						Case "Array"
							$vtmp = "{Array}"
						Case Else
							$vtmp = $aarray[$i][$j]
					EndSwitch
				EndIf
			EndIf
			If StringLen($vtmp) > $ibuffer Then $vtmp = StringLeft($vtmp, $ibuffer)
			$avarraytext[$i - $iitem_start] &= $sad_separator & $vtmp
		Next
		If $inorow Then $avarraytext[$i - $iitem_start] = StringTrimLeft($avarraytext[$i - $iitem_start], 1)
	Next
	Local Const $_arrayconstant_gui_dockbottom = 64
	Local Const $_arrayconstant_gui_dockborders = 102
	Local Const $_arrayconstant_gui_dockheight = 512
	Local Const $_arrayconstant_gui_dockleft = 2
	Local Const $_arrayconstant_gui_dockright = 4
	Local Const $_arrayconstant_gui_dockhcenter = 8
	Local Const $_arrayconstant_gui_event_close = -3
	Local Const $_arrayconstant_gui_focus = 256
	Local Const $_arrayconstant_gui_bkcolor_lv_alternate = -33554432
	Local Const $_arrayconstant_ss_center = 1
	Local Const $_arrayconstant_ss_centerimage = 512
	Local Const $_arrayconstant_lvm_getitemcount = (4096 + 4)
	Local Const $_arrayconstant_lvm_getitemrect = (4096 + 14)
	Local Const $_arrayconstant_lvm_getcolumnwidth = (4096 + 29)
	Local Const $_arrayconstant_lvm_setcolumnwidth = (4096 + 30)
	Local Const $_arrayconstant_lvm_getitemstate = (4096 + 44)
	Local Const $_arrayconstant_lvm_getselectedcount = (4096 + 50)
	Local Const $_arrayconstant_lvm_setextendedlistviewstyle = (4096 + 54)
	Local Const $_arrayconstant_lvs_ex_gridlines = 1
	Local Const $_arrayconstant_lvis_selected = 2
	Local Const $_arrayconstant_lvs_showselalways = 8
	Local Const $_arrayconstant_lvs_ex_fullrowselect = 32
	Local Const $_arrayconstant_ws_ex_clientedge = 512
	Local Const $_arrayconstant_ws_maximizebox = 65536
	Local Const $_arrayconstant_ws_minimizebox = 131072
	Local Const $_arrayconstant_ws_sizebox = 262144
	Local Const $_arrayconstant_wm_setredraw = 11
	Local Const $_arrayconstant_lvscw_autosize = -1
	Local $icoordmode = Opt("GUICoordMode", 1)
	Local $iorgwidth = 210, $iheight = 200, $iminsize = 250
	Local $hgui = GUICreate($stitle, $iorgwidth, $iheight, Default, Default, BitOR($_arrayconstant_ws_sizebox, $_arrayconstant_ws_minimizebox, $_arrayconstant_ws_maximizebox))
	Local $aiguisize = WinGetClientSize($hgui)
	Local $ibuttonwidth_2 = $aiguisize[0] / 2
	Local $ibuttonwidth_3 = $aiguisize[0] / 3
	Local $idlistview = GUICtrlCreateListView($sheader, 0, 0, $aiguisize[0], $aiguisize[1] - $ibuttonmargin, $_arrayconstant_lvs_showselalways)
	GUICtrlSetBkColor($idlistview, $_arrayconstant_gui_bkcolor_lv_alternate)
	GUICtrlSendMsg($idlistview, $_arrayconstant_lvm_setextendedlistviewstyle, $_arrayconstant_lvs_ex_gridlines, $_arrayconstant_lvs_ex_gridlines)
	GUICtrlSendMsg($idlistview, $_arrayconstant_lvm_setextendedlistviewstyle, $_arrayconstant_lvs_ex_fullrowselect, $_arrayconstant_lvs_ex_fullrowselect)
	GUICtrlSendMsg($idlistview, $_arrayconstant_lvm_setextendedlistviewstyle, $_arrayconstant_ws_ex_clientedge, $_arrayconstant_ws_ex_clientedge)
	Local $idcopy_id = 9999, $idcopy_data = 99999, $iddata_label = 99999, $iduser_func = 99999, $idexit_script = 99999
	If $ibuttonmargin Then
		$idcopy_id = GUICtrlCreateButton("Copy Data && Hdr/Row", 0, $aiguisize[1] - $ibuttonmargin, $ibuttonwidth_2, 20)
		$idcopy_data = GUICtrlCreateButton("Copy Data Only", $ibuttonwidth_2, $aiguisize[1] - $ibuttonmargin, $ibuttonwidth_2, 20)
		If $ibuttonmargin = 40 Then
			Local $ibuttonwidth_var = $ibuttonwidth_2
			Local $ioffset = $ibuttonwidth_2
			If IsFunc($huser_function) Then
				$iduser_func = GUICtrlCreateButton("Run User Func", $ibuttonwidth_3, $aiguisize[1] - 20, $ibuttonwidth_3, 20)
				$ibuttonwidth_var = $ibuttonwidth_3
				$ioffset = $ibuttonwidth_3 * 2
			EndIf
			$idexit_script = GUICtrlCreateButton("Exit Script", $ioffset, $aiguisize[1] - 20, $ibuttonwidth_var, 20)
			$iddata_label = GUICtrlCreateLabel($sdisplaydata, 0, $aiguisize[1] - 20, $ibuttonwidth_var, 18, BitOR($_arrayconstant_ss_center, $_arrayconstant_ss_centerimage))
			Select 
				Case $btruncated OR $itranspose OR $brange_flag
					GUICtrlSetColor($iddata_label, 16711680)
					GUICtrlSetTip($iddata_label, $stipdata)
			EndSelect
		EndIf
	EndIf
	GUICtrlSetResizing($idlistview, $_arrayconstant_gui_dockborders)
	GUICtrlSetResizing($idcopy_id, $_arrayconstant_gui_dockleft + $_arrayconstant_gui_dockbottom + $_arrayconstant_gui_dockheight)
	GUICtrlSetResizing($idcopy_data, $_arrayconstant_gui_dockright + $_arrayconstant_gui_dockbottom + $_arrayconstant_gui_dockheight)
	GUICtrlSetResizing($iddata_label, $_arrayconstant_gui_dockleft + $_arrayconstant_gui_dockbottom + $_arrayconstant_gui_dockheight)
	GUICtrlSetResizing($iduser_func, $_arrayconstant_gui_dockhcenter + $_arrayconstant_gui_dockbottom + $_arrayconstant_gui_dockheight)
	GUICtrlSetResizing($idexit_script, $_arrayconstant_gui_dockright + $_arrayconstant_gui_dockbottom + $_arrayconstant_gui_dockheight)
	GUICtrlSendMsg($idlistview, $_arrayconstant_wm_setredraw, 0, 0)
	Local $iditem
	For $i = 0 To UBound($avarraytext) - 1
		$iditem = GUICtrlCreateListViewItem($avarraytext[$i], $idlistview)
		If $ialt_color Then
			GUICtrlSetBkColor($iditem, $ialt_color)
		EndIf
	Next
	If $icolalign Then
		Local Const $_arrayconstant_lvcf_fmt = 1
		Local Const $_arrayconstant_lvm_setcolumnw = (4096 + 96)
		Local $tcolumn = DllStructCreate("uint Mask;int Fmt;int CX;ptr Text;int TextMax;int SubItem;int Image;int Order;int cxMin;int cxDefault;int cxIdeal")
		DllStructSetData($tcolumn, "Mask", $_arrayconstant_lvcf_fmt)
		DllStructSetData($tcolumn, "Fmt", $icolalign / 2)
		Local $pcolumn = DllStructGetPtr($tcolumn)
		For $i = 1 To $isubitem_end - $isubitem_start + 1
			GUICtrlSendMsg($idlistview, $_arrayconstant_lvm_setcolumnw, $i, $pcolumn)
		Next
	EndIf
	GUICtrlSendMsg($idlistview, $_arrayconstant_wm_setredraw, 1, 0)
	Local $iborder = 45
	If UBound($avarraytext) > 20 Then
		$iborder += 20
	EndIf
	Local $iwidth = $iborder, $icolwidth = 0, $aicolwidth[$isubitem_end - $isubitem_start + 2], $imin_colwidth = 55
	For $i = 0 To $isubitem_end - $isubitem_start + 1
		GUICtrlSendMsg($idlistview, $_arrayconstant_lvm_setcolumnwidth, $i, $_arrayconstant_lvscw_autosize)
		$icolwidth = GUICtrlSendMsg($idlistview, $_arrayconstant_lvm_getcolumnwidth, $i, 0)
		If $icolwidth < $imin_colwidth Then
			GUICtrlSendMsg($idlistview, $_arrayconstant_lvm_setcolumnwidth, $i, $imin_colwidth)
			$icolwidth = $imin_colwidth
		EndIf
		$iwidth += $icolwidth
		$aicolwidth[$i] = $icolwidth
	Next
	If $inorow Then $iwidth -= 55
	If $iwidth > @DesktopWidth - 100 Then
		$iwidth = $iborder
		For $i = 0 To $isubitem_end - $isubitem_start + 1
			If $aicolwidth[$i] > $imax_colwidth Then
				GUICtrlSendMsg($idlistview, $_arrayconstant_lvm_setcolumnwidth, $i, $imax_colwidth)
				$iwidth += $imax_colwidth
			Else
				$iwidth += $aicolwidth[$i]
			EndIf
		Next
	EndIf
	If $iwidth > @DesktopWidth - 100 Then
		$iwidth = @DesktopWidth - 100
	ElseIf $iwidth < $iminsize Then
		$iwidth = $iminsize
	EndIf
	Local $trect = DllStructCreate("struct; long Left;long Top;long Right;long Bottom; endstruct")
	DllCall("user32.dll", "struct*", "SendMessageW", "hwnd", GUICtrlGetHandle($idlistview), "uint", $_arrayconstant_lvm_getitemrect, "wparam", 0, "struct*", $trect)
	Local $aiwin_pos = WinGetPos($hgui)
	Local $ailv_pos = ControlGetPos($hgui, "", $idlistview)
	$iheight = ((UBound($avarraytext) + 2) * (DllStructGetData($trect, "Bottom") - DllStructGetData($trect, "Top"))) + $aiwin_pos[3] - $ailv_pos[3]
	If $iheight > @DesktopHeight - 100 Then
		$iheight = @DesktopHeight - 100
	ElseIf $iheight < $iminsize Then
		$iheight = $iminsize
	EndIf
	If $iverbose Then SplashOff()
	GUISetState(@SW_HIDE, $hgui)
	WinMove($hgui, "", (@DesktopWidth - $iwidth) / 2, (@DesktopHeight - $iheight) / 2, $iwidth, $iheight)
	GUISetState(@SW_SHOW, $hgui)
	Local $ioneventmode = Opt("GUIOnEventMode", 0), $imsg
	While 1
		$imsg = GUIGetMsg()
		Switch $imsg
			Case $_arrayconstant_gui_event_close
				ExitLoop
			Case $idcopy_id, $idcopy_data
				Local $isel_count = GUICtrlSendMsg($idlistview, $_arrayconstant_lvm_getselectedcount, 0, 0)
				If $iverbose AND (NOT $isel_count) AND ($iitem_end - $iitem_start) * ($isubitem_end - $isubitem_start) > 10000 Then
					SplashTextOn("ArrayDisplay", "Copying data" & @CRLF & @CRLF & "Please be patient", 300, 100)
				EndIf
				Local $sclip = "", $sitem, $asplit
				For $i = 0 To $iitem_end - $iitem_start
					If $isel_count AND NOT (GUICtrlSendMsg($idlistview, $_arrayconstant_lvm_getitemstate, $i, $_arrayconstant_lvis_selected)) Then
						ContinueLoop
					EndIf
					$sitem = $avarraytext[$i]
					If $imsg = $idcopy_data Then
						$sitem = StringRegExpReplace($sitem, "^\[\d+\].(.*)$", "$1")
					EndIf
					If $icw_colwidth Then
						$asplit = StringSplit($sitem, $sad_separator)
						$sitem = ""
						For $j = 1 To $asplit[0]
							$sitem &= StringFormat("%-" & $icw_colwidth + 1 & "s", StringLeft($asplit[$j], $icw_colwidth))
						Next
					Else
						$sitem = StringReplace($sitem, $sad_separator, $vuser_separator)
					EndIf
					$sclip &= $sitem & @CRLF
				Next
				If $imsg = $idcopy_id Then
					If $icw_colwidth Then
						$asplit = StringSplit($sheader, $sad_separator)
						$sitem = ""
						For $j = 1 To $asplit[0]
							$sitem &= StringFormat("%-" & $icw_colwidth + 1 & "s", StringLeft($asplit[$j], $icw_colwidth))
						Next
					Else
						$sitem = StringReplace($sheader, $sad_separator, $vuser_separator)
					EndIf
					$sclip = $sitem & @CRLF & $sclip
				EndIf
				ClipPut($sclip)
				SplashOff()
				GUICtrlSetState($idlistview, $_arrayconstant_gui_focus)
			Case $iduser_func
				Local $aiselitems[$irowlimit] = [0]
				For $i = 0 To GUICtrlSendMsg($idlistview, $_arrayconstant_lvm_getitemcount, 0, 0)
					If GUICtrlSendMsg($idlistview, $_arrayconstant_lvm_getitemstate, $i, $_arrayconstant_lvis_selected) Then
						$aiselitems[0] += 1
						$aiselitems[$aiselitems[0]] = $i + $iitem_start
					EndIf
				Next
				ReDim $aiselitems[$aiselitems[0] + 1]
				$huser_function($aarray, $aiselitems)
				GUICtrlSetState($idlistview, $_arrayconstant_gui_focus)
			Case $idexit_script
				GUIDelete($hgui)
				Exit
		EndSwitch
	WEnd
	GUIDelete($hgui)
	Opt("GUICoordMode", $icoordmode)
	Opt("GUIOnEventMode", $ioneventmode)
	Opt("GUIDataSeparatorChar", $scurr_separator)
	Return 1
EndFunc

Func _arrayinsert(ByRef $aarray, $vrange, $vvalue = "", $istart = 0, $sdelim_item = "|", $sdelim_row = @CRLF, $iforce = $arrayfill_force_default)
	If $vvalue = Default Then $vvalue = ""
	If $istart = Default Then $istart = 0
	If $sdelim_item = Default Then $sdelim_item = "|"
	If $sdelim_row = Default Then $sdelim_row = @CRLF
	If $iforce = Default Then $iforce = $arrayfill_force_default
	If NOT IsArray($aarray) Then Return SetError(1, 0, -1)
	Local $idim_1 = UBound($aarray, $ubound_rows) - 1
	Local $hdatatype = 0
	Switch $iforce
		Case $arrayfill_force_int
			$hdatatype = Int
		Case $arrayfill_force_number
			$hdatatype = Number
		Case $arrayfill_force_ptr
			$hdatatype = Ptr
		Case $arrayfill_force_hwnd
			$hdatatype = HWnd
		Case $arrayfill_force_string
			$hdatatype = String
	EndSwitch
	Local $asplit_1, $asplit_2
	If IsArray($vrange) Then
		If UBound($vrange, $ubound_dimensions) <> 1 OR UBound($vrange, $ubound_rows) < 2 Then Return SetError(4, 0, -1)
	Else
		Local $inumber
		$vrange = StringStripWS($vrange, 8)
		$asplit_1 = StringSplit($vrange, ";")
		$vrange = ""
		For $i = 1 To $asplit_1[0]
			If NOT StringRegExp($asplit_1[$i], "^\d+(-\d+)?$") Then Return SetError(3, 0, -1)
			$asplit_2 = StringSplit($asplit_1[$i], "-")
			Switch $asplit_2[0]
				Case 1
					$vrange &= $asplit_2[1] & ";"
				Case 2
					If Number($asplit_2[2]) >= Number($asplit_2[1]) Then
						$inumber = $asplit_2[1] - 1
						Do
							$inumber += 1
							$vrange &= $inumber & ";"
						Until $inumber = $asplit_2[2]
					EndIf
			EndSwitch
		Next
		$vrange = StringSplit(StringTrimRight($vrange, 1), ";")
	EndIf
	If $vrange[1] < 0 OR $vrange[$vrange[0]] > $idim_1 Then Return SetError(5, 0, -1)
	For $i = 2 To $vrange[0]
		If $vrange[$i] < $vrange[$i - 1] Then Return SetError(3, 0, -1)
	Next
	Local $icopyto_index = $idim_1 + $vrange[0]
	Local $iinsertpoint_index = $vrange[0]
	Local $iinsert_index = $vrange[$iinsertpoint_index]
	Switch UBound($aarray, $ubound_dimensions)
		Case 1
			If $iforce = $arrayfill_force_singleitem Then
				ReDim $aarray[$idim_1 + $vrange[0] + 1]
				For $ireadfromindex = $idim_1 To 0 Step -1
					$aarray[$icopyto_index] = $aarray[$ireadfromindex]
					$icopyto_index -= 1
					$iinsert_index = $vrange[$iinsertpoint_index]
					While $ireadfromindex = $iinsert_index
						$aarray[$icopyto_index] = $vvalue
						$icopyto_index -= 1
						$iinsertpoint_index -= 1
						If $iinsertpoint_index < 1 Then ExitLoop 2
						$iinsert_index = $vrange[$iinsertpoint_index]
					WEnd
				Next
				Return $idim_1 + $vrange[0] + 1
			EndIf
			ReDim $aarray[$idim_1 + $vrange[0] + 1]
			If IsArray($vvalue) Then
				If UBound($vvalue, $ubound_dimensions) <> 1 Then Return SetError(5, 0, -1)
				$hdatatype = 0
			Else
				Local $atmp = StringSplit($vvalue, $sdelim_item, $str_nocount + $str_entiresplit)
				If UBound($atmp, $ubound_rows) = 1 Then
					$atmp[0] = $vvalue
					$hdatatype = 0
				EndIf
				$vvalue = $atmp
			EndIf
			For $ireadfromindex = $idim_1 To 0 Step -1
				$aarray[$icopyto_index] = $aarray[$ireadfromindex]
				$icopyto_index -= 1
				$iinsert_index = $vrange[$iinsertpoint_index]
				While $ireadfromindex = $iinsert_index
					If $iinsertpoint_index <= UBound($vvalue, $ubound_rows) Then
						If IsFunc($hdatatype) Then
							$aarray[$icopyto_index] = $hdatatype($vvalue[$iinsertpoint_index - 1])
						Else
							$aarray[$icopyto_index] = $vvalue[$iinsertpoint_index - 1]
						EndIf
					Else
						$aarray[$icopyto_index] = ""
					EndIf
					$icopyto_index -= 1
					$iinsertpoint_index -= 1
					If $iinsertpoint_index = 0 Then ExitLoop 2
					$iinsert_index = $vrange[$iinsertpoint_index]
				WEnd
			Next
		Case 2
			Local $idim_2 = UBound($aarray, $ubound_columns)
			If $istart < 0 OR $istart > $idim_2 - 1 Then Return SetError(6, 0, -1)
			Local $ivaldim_1, $ivaldim_2
			If IsArray($vvalue) Then
				If UBound($vvalue, $ubound_dimensions) <> 2 Then Return SetError(7, 0, -1)
				$ivaldim_1 = UBound($vvalue, $ubound_rows)
				$ivaldim_2 = UBound($vvalue, $ubound_columns)
				$hdatatype = 0
			Else
				$asplit_1 = StringSplit($vvalue, $sdelim_row, $str_nocount + $str_entiresplit)
				$ivaldim_1 = UBound($asplit_1, $ubound_rows)
				StringReplace($asplit_1[0], $sdelim_item, "")
				$ivaldim_2 = @ + 1
				Local $atmp[$ivaldim_1][$ivaldim_2]
				For $i = 0 To $ivaldim_1 - 1
					$asplit_2 = StringSplit($asplit_1[$i], $sdelim_item, $str_nocount + $str_entiresplit)
					For $j = 0 To $ivaldim_2 - 1
						$atmp[$i][$j] = $asplit_2[$j]
					Next
				Next
				$vvalue = $atmp
			EndIf
			If UBound($vvalue, $ubound_columns) + $istart > UBound($aarray, $ubound_columns) Then Return SetError(8, 0, -1)
			ReDim $aarray[$idim_1 + $vrange[0] + 1][$idim_2]
			For $ireadfromindex = $idim_1 To 0 Step -1
				For $j = 0 To $idim_2 - 1
					$aarray[$icopyto_index][$j] = $aarray[$ireadfromindex][$j]
				Next
				$icopyto_index -= 1
				$iinsert_index = $vrange[$iinsertpoint_index]
				While $ireadfromindex = $iinsert_index
					For $j = 0 To $idim_2 - 1
						If $j < $istart Then
							$aarray[$icopyto_index][$j] = ""
						ElseIf $j - $istart > $ivaldim_2 - 1 Then
							$aarray[$icopyto_index][$j] = ""
						Else
							If $iinsertpoint_index - 1 < $ivaldim_1 Then
								If IsFunc($hdatatype) Then
									$aarray[$icopyto_index][$j] = $hdatatype($vvalue[$iinsertpoint_index - 1][$j - $istart])
								Else
									$aarray[$icopyto_index][$j] = $vvalue[$iinsertpoint_index - 1][$j - $istart]
								EndIf
							Else
								$aarray[$icopyto_index][$j] = ""
							EndIf
						EndIf
					Next
					$icopyto_index -= 1
					$iinsertpoint_index -= 1
					If $iinsertpoint_index = 0 Then ExitLoop 2
					$iinsert_index = $vrange[$iinsertpoint_index]
				WEnd
			Next
		Case Else
			Return SetError(2, 0, -1)
	EndSwitch
	Return UBound($aarray, $ubound_rows)
EndFunc

Global Const $lvs_ex_gridlines = 1
Global $__binarycall_kernel32dll = DllOpen("kernel32.dll")
Global $__binarycall_msvcrtdll = DllOpen("msvcrt.dll")
Global $__binarycall_lasterror = ""

Func _binarycall_getprocaddress($module, $proc)
	Local $ret = DllCall($__binarycall_kernel32dll, "ptr", "GetProcAddress", "ptr", $module, "str", $proc)
	If @ OR NOT $ret[0] Then Return SetError(1, @, 0)
	Return $ret[0]
EndFunc

Func _binarycall_loadlibrary($filename)
	Local $ret = DllCall($__binarycall_kernel32dll, "handle", "LoadLibraryW", "wstr", $filename)
	If @ Then Return SetError(1, @, 0)
	Return $ret[0]
EndFunc

Func _binarycall_lstrlena($ptr)
	Local $ret = DllCall($__binarycall_kernel32dll, "int", "lstrlenA", "ptr", $ptr)
	If @ Then Return SetError(1, @, 0)
	Return $ret[0]
EndFunc

Func _binarycall_alloc($code, $padding = 0)
	Local $length = BinaryLen($code) + $padding
	Local $ret = DllCall($__binarycall_kernel32dll, "ptr", "VirtualAlloc", "ptr", 0, "ulong_ptr", $length, "dword", 4096, "dword", 64)
	If @ OR NOT $ret[0] Then Return SetError(1, @, 0)
	If BinaryLen($code) Then
		Local $buffer = DllStructCreate("byte[" & $length & "]", $ret[0])
		DllStructSetData($buffer, 1, $code)
	EndIf
	Return $ret[0]
EndFunc

Func _binarycall_regionsize($ptr)
	Local $buffer = DllStructCreate("ptr;ptr;dword;uint_ptr;dword;dword;dword")
	Local $ret = DllCall($__binarycall_kernel32dll, "int", "VirtualQuery", "ptr", $ptr, "ptr", DllStructGetPtr($buffer), "uint_ptr", DllStructGetSize($buffer))
	If @ OR $ret[0] = 0 Then Return SetError(1, @, 0)
	Return DllStructGetData($buffer, 4)
EndFunc

Func _binarycall_free($ptr)
	Local $ret = DllCall($__binarycall_kernel32dll, "bool", "VirtualFree", "ptr", $ptr, "ulong_ptr", 0, "dword", 32768)
	If @ OR $ret[0] = 0 Then
		$ret = DllCall($__binarycall_kernel32dll, "bool", "GlobalFree", "ptr", $ptr)
		If @ OR $ret[0] <> 0 Then Return SetError(1, @, False)
	EndIf
	Return True
EndFunc

Func _binarycall_memorysearch($ptr, $length, $binary)
	Static $codebase
	If NOT $codebase Then
		If @AutoItX64 Then
			$codebase = _binarycall_create("0x4883EC084D85C94889C8742C4C39CA72254C29CA488D141131C9EB0848FFC14C39C97414448A1408453A140874EE48FFC04839D076E231C05AC3", "", 0, True, False)
		Else
			$codebase = _binarycall_create("0x5589E58B4D14578B4508568B550C538B7D1085C9742139CA721B29CA8D341031D2EB054239CA740F8A1C17381C1074F34039F076EA31C05B5E5F5DC3", "", 0, True, False)
		EndIf
		If NOT $codebase Then Return SetError(1, 0, 0)
	EndIf
	$binary = Binary($binary)
	Local $buffer = DllStructCreate("byte[" & BinaryLen($binary) & "]")
	DllStructSetData($buffer, 1, $binary)
	Local $ret = DllCallAddress("ptr:cdecl", $codebase, "ptr", $ptr, "uint", $length, "ptr", DllStructGetPtr($buffer), "uint", DllStructGetSize($buffer))
	Return $ret[0]
EndFunc

Func _binarycall_base64decode($src)
	Static $codebase
	If NOT $codebase Then
		If @AutoItX64 Then
			$codebase = _binarycall_create("0x41544989CAB9FF000000555756E8BE000000534881EC000100004889E7F3A44C89D6E98A0000004439C87E0731C0E98D0000000FB66E01440FB626FFC00FB65E020FB62C2C460FB62424408A3C1C0FB65E034189EB41C1E4024183E3308A1C1C41C1FB044509E34080FF634189CC45881C08744C440FB6DFC1E5044489DF4088E883E73CC1FF0209C7418D44240241887C08014883C10380FB63742488D841C1E3064883C60483E03F4409D841884408FF89F389C84429D339D30F8C67FFFFFF4881C4000100005B5E5F5D415CC35EC3E8F9FFFFFF000000000000000000000000000000000000000000000000000000000000000000000000000000000000003E0000003F3435363738393A3B3C3D00000063000000000102030405060708090A0B0C0D0E0F101112131415161718190000000000001A1B1C1D1E1F202122232425262728292A2B2C2D2E2F30313233", "", 132, True, False)
		Else
			$codebase = _binarycall_create("0x55B9FF00000089E531C05756E8F10000005381EC0C0100008B55088DBDF5FEFFFFF3A4E9C00000003B45140F8FC20000000FB65C0A028A9C1DF5FEFFFF889DF3FEFFFF0FB65C0A038A9C1DF5FEFFFF889DF2FEFFFF0FB65C0A018985E8FEFFFF0FB69C1DF5FEFFFF899DECFEFFFF0FB63C0A89DE83E630C1FE040FB6BC3DF5FEFFFFC1E70209FE8B7D1089F3881C074080BDF3FEFFFF63745C0FB6B5F3FEFFFF8BBDECFEFFFF8B9DE8FEFFFF89F083E03CC1E704C1F80209F88B7D1088441F0189D883C00280BDF2FEFFFF6374278A85F2FEFFFFC1E60683C10483E03F09F088441F0289D883C0033B4D0C0F8C37FFFFFFEB0231C081C40C0100005B5E5F5DC35EC3E8F9FFFFFF000000000000000000000000000000000000000000000000000000000000000000000000000000000000003E0000003F3435363738393A3B3C3D00000063000000000102030405060708090A0B0C0D0E0F101112131415161718190000000000001A1B1C1D1E1F202122232425262728292A2B2C2D2E2F30313233", "", 132, True, False)
		EndIf
		If NOT $codebase Then Return SetError(1, 0, Binary(""))
	EndIf
	$src = String($src)
	Local $srclen = StringLen($src)
	Local $srcbuf = DllStructCreate("char[" & $srclen & "]")
	DllStructSetData($srcbuf, 1, $src)
	Local $dstlen = Int(($srclen + 2) / 4) * 3 + 1
	Local $dstbuf = DllStructCreate("byte[" & $dstlen & "]")
	Local $ret = DllCallAddress("uint:cdecl", $codebase, "ptr", DllStructGetPtr($srcbuf), "uint", $srclen, "ptr", DllStructGetPtr($dstbuf), "uint", $dstlen)
	If $ret[0] = 0 Then Return SetError(2, 0, Binary(""))
	Return BinaryMid(DllStructGetData($dstbuf, 1), 1, $ret[0])
EndFunc

Func _binarycall_lzmadecompress($src)
	Static $codebase
	If NOT $codebase Then
		If @AutoItX64 Then
			$codebase = _binarycall_create(_binarycall_base64decode("QVcxwEFWQVVBVFVXSInXVkiJzlMx20iB7OgAAABEiiFBgPzgdgnpyQAAAEGD7C1BiMf/wEGA/Cx38THA6wRBg+wJQYjG/8BBgPwId/GLRglEi24FQQ+2zkyJRCQoRQ+2/0HB5xBBiQFBD7bEAcG4AAMAANPgjYQAcA4AAEhjyOjIBAAATInpSInF6L0EAABIicMxwEyJ8kSI4EyLRCQoiNQl//8A/0QJ+EiF24lFAHQoTYXtdCNIjVfzSI1MJDhIg8YNTIkEJE2J6UmJ2EiJ7+g2AAAAicbrBb4BAAAASInp6IQEAACF9nQKSInZMdvodgQAAEiJ2EiBxOgAAABbXl9dQVxBXUFeQV/DVVNBV0FWQVVBVEFQTQHBQVFNicVRVkgB8lJIieX8SYn0iwdMjX8Eik8Cg8r/0+L30olV6Ijhg8r/0+L30olV5ADBiUXsuAEAAACJReCJRdyJRdhIiUXQRSnJKfaDy/8A0bgAAwAA0+BIjYg2BwAAuAAEAARMif/R6fOrvwUAAADoUAMAAP/PdfdEie9EicgrfSDB4ARBifpEI1XoRAHQTY0cR+hAAwAAD4WTAAAAik3sI33k0+eA6Qj22dPuAfe4AQAAAEiNPH++AAEAAMHnCEGD+QdNjbR/bA4AAHI0TInvSCt90A+2P9HnQYnzIf5BAfNPjRxe6O8CAACJwcHuCIPhATnOvgABAAB1DjnGd9jrDE2J8+jQAgAAOfBy9EyJ76pEiclBg/kEcg65AwAAAEGD+QpyA4PBA0EpyelDAgAAT42cT4ABAADomgIAAHUsi0XcQYP5B4lF4BnAi1XY99CLTdCD4AOJVdxBicGJTdhNjbdkBgAA6akAAABPjZxPmAEAAOhfAgAAdUZEicjB4AREAdBNjZxH4AEAAOhHAgAAdWpBg/kHuQkAAAByA4PBAkGJyUyJ70grfdBIO30gD4L9AQAAigdIA33QqumzAQAAT42cT7ABAADoCgIAAIt12HQhT42cT8gBAADo+AEAAIt13HQJi03ci3XgiU3gi03YiU3ci03QiU3YiXXQQYP5B7kIAAAAcgODwQNBiclNjbdoCgAATYnz6LsBAAB1FESJ0CnJweADvggAAABJjXxGBOs2TY1eAuicAQAAdRpEidC5CAAAAMHgA74IAAAASY28RgQBAADrEUmNvgQCAAC5EAAAAL4AAQAAiU3MuAEAAABJifvoYQEAAInCKfJy8gNVzEGD+QSJVcwPg7kAAABBg8EHuQMAAAA50XICidHB4Qa4AQAAAEmNvE9gAwAAvkAAAABJifvoHwEAAEGJwkEp8nLwQYP6BHJ4RInWRIlV0NHug2XQAf/Og03QAkGD+g5zFYnx0mXQi0XQRCnQTY20R14FAADrLIPuBOi6AAAA0evRZdBBOdhyBv9F0EEp2P/OdedNjbdEBgAAwWXQBL4EAAAAvwEAAACJ+E2J8+ioAAAAqAF0Awl90NHn/8516+sERIlV0P9F0EyJ74tNzEiJ+IPBAkgrRSBIOUXQd1RIif5IK3XQSItVGKyqSDnXcwT/yXX1SYn9D7bwTDttGA+C9fz//+gwAAAAKcBIi1UQTCtlCESJIkiLVWBMK20gRIkqSIPEKEFcQV1BXUFfW13DXli4AQAAAOvSgfsAAAABcgHDweMITDtlAHPmQcHgCEWKBCRJg8QBwynATY0cQ4H7AAAAAXMVweMITDtlAHPBQcHgCEWKBCRJg8QBidlBD7cTwekLD6/KQTnIcxOJy7kACAAAKdHB6QVmQQELAcDDKcvB6gVBKchmQSkTAcCDwAHDSLj////////////gbXN2Y3J0LmRsbHxtYWxsb2MASLj////////////gZnJlZQA="))
		Else
			$codebase = _binarycall_create(_binarycall_base64decode("VYnlVzH/VlOD7EyLXQiKC4D54A+HxQAAADHA6wWD6S2I0ID5LI1QAXfziEXmMcDrBYPpCYjQgPkIjVABd/OIReWLRRSITeSLUwkPtsmLcwWJEA+2ReUBwbgAAwAA0+CNhABwDgAAiQQk6EcEAACJNCSJRdToPAQAAItV1InHi0Xkhf+JArgBAAAAdDaF9nQyi0UQg8MNiRQkiXQkFIl8JBCJRCQYjUXgiUQkDItFDIlcJASD6A2JRCQI6CkAAACLVdSJRdSJFCToAQQAAItF1IXAdAqJPCQx/+jwAwAAg8RMifhbXl9dw1dWU1WJ5YtFJAFFKFD8i3UYAXUcVot1FK2SUopO/oPI/9Pg99BQiPGDyP/T4PfQUADRifeD7AwpwEBQUFBQUFcp9laDy/+4AAMAANPgjYg2BwAAuAAEAATR6fOragVZ6MoCAADi+Yt9/ItF8Ct9JCH4iUXosADoywIAAA+FhQAAAIpN9CN97NPngOkI9tnT7lgB916NPH/B5wg8B1qNjH5sDgAAUVa+AAEAAFCwAXI0i338K33cD7Y/i23M0eeJ8SH+AfGNbE0A6JgCAACJwcHuCIPhATnOvgABAAB1DjnwctfrDIttzOh5AgAAOfBy9FqD+gSJ0XIJg/oKsQNyArEGKcpS60mwwOhJAgAAdRRYX1pZWln/NCRRUrpkBgAAsQDrb7DM6CwCAAB1LLDw6BMCAAB1U1g8B7AJcgKwC1CLdfwrddw7dSQPgs8BAACsi338qumOAQAAsNjo9wEAAIt12HQbsOTo6wEAAIt11HQJi3XQi03UiU3Qi03YiU3Ui03ciU3YiXXcWF9ZumgKAACxCAH6Ulc8B4jIcgIEA1CLbczovAEAAHUUi0Xoi33MweADKclqCF6NfEcE6zWLbcyDxQLomwEAAHUYi0Xoi33MweADaghZaghejbxHBAEAAOsQvwQCAAADfcxqEFm+AAEAAIlN5CnAQIn96GYBAACJwSnxcvMBTeSDfcQED4OwAAAAg0XEB4tN5IP5BHIDagNZi33IweEGKcBAakBejbxPYAMAAIn96CoBAACJwSnxcvOJTeiJTdyD+QRyc4nOg2XcAdHug03cAk6D+Q5zGbivAgAAKciJ8dJl3ANF3NHgA0XIiUXM6y2D7gToowAAANHr0WXcOV3gcgb/RdwpXeBOdei4RAYAAANFyIlFzMFl3ARqBF4p/0eJ+IttzOi0AAAAqAF0Awl93NHnTnXs6wD/RdyLTeSDwQKLffyJ+CtFJDlF3HdIif4rddyLVSisqjnXcwNJdfeJffwPtvA7fSgPgnH9///oKAAAACnAjWwkPItVIIt1+Ct1GIkyi1Usi338K30kiTrJW15fw15YKcBA69qB+wAAAAFyAcPB4whWi3X4O3Ucc+SLReDB4AisiUXgiXX4XsOLTcQPtsDB4QQDRegByOsGD7bAA0XEi23IjWxFACnAjWxFAIH7AAAAAXMci0wkOMFkJCAIO0wkXHOcihH/RCQ4weMIiFQkIInZD7dVAMHpCw+vyjlMJCBzF4nLuQAIAAAp0cHpBWYBTQABwI1sJEDDweoFKUwkICnLZilVAAHAg8ABjWwkQMO4///////gbXN2Y3J0LmRsbHxtYWxsb2MAuP//////4GZyZWUA"))
		EndIf
		If NOT $codebase Then Return SetError(1, 0, Binary(""))
	EndIf
	$src = Binary($src)
	Local $srclen = BinaryLen($src)
	Local $srcbuf = DllStructCreate("byte[" & $srclen & "]")
	DllStructSetData($srcbuf, 1, $src)
	Local $ret = DllCallAddress("ptr:cdecl", $codebase, "ptr", DllStructGetPtr($srcbuf), "uint_ptr", $srclen, "uint_ptr*", 0, "uint*", 0)
	If $ret[0] Then
		Local $dstbuf = DllStructCreate("byte[" & $ret[3] & "]", $ret[0])
		Local $output = DllStructGetData($dstbuf, 1)
		DllCall($__binarycall_msvcrtdll, "none:cdecl", "free", "ptr", $ret[0])
		Return $output
	EndIf
	Return SetError(2, 0, Binary(""))
EndFunc

Func _binarycall_relocation($base, $reloc)
	Local $size = Int(BinaryMid($reloc, 1, 2))
	For $i = 3 To BinaryLen($reloc) Step $size
		Local $offset = Int(BinaryMid($reloc, $i, $size))
		Local $ptr = $base + $offset
		DllStructSetData(DllStructCreate("ptr", $ptr), 1, DllStructGetData(DllStructCreate("ptr", $ptr), 1) + $base)
	Next
EndFunc

Func _binarycall_importlibrary($base, $length)
	Local $jmpbin, $jmpoff, $jmplen, $dllname, $procname
	If @AutoItX64 Then
		$jmpbin = Binary("0x48B8FFFFFFFFFFFFFFFFFFE0")
		$jmpoff = 2
	Else
		$jmpbin = Binary("0xB8FFFFFFFFFFE0")
		$jmpoff = 1
	EndIf
	$jmplen = BinaryLen($jmpbin)
	Do
		Local $ptr = _binarycall_memorysearch($base, $length, $jmpbin)
		If $ptr = 0 Then ExitLoop
		Local $stringptr = $ptr + $jmplen
		Local $stringlen = _binarycall_lstrlena($stringptr)
		Local $string = DllStructGetData(DllStructCreate("char[" & $stringlen & "]", $stringptr), 1)
		Local $split = StringSplit($string, "|")
		If $split[0] = 1 Then
			$procname = $split[1]
		ElseIf $split[0] = 2 Then
			If $split[1] Then $dllname = $split[1]
			$procname = $split[2]
		EndIf
		If $dllname AND $procname Then
			Local $handle = _binarycall_loadlibrary($dllname)
			If NOT $handle Then
				$__binarycall_lasterror = "LoadLibrary fail on " & $dllname
				Return SetError(1, 0, False)
			EndIf
			Local $proc = _binarycall_getprocaddress($handle, $procname)
			If NOT $proc Then
				$__binarycall_lasterror = "GetProcAddress failed on " & $procname
				Return SetError(2, 0, False)
			EndIf
			DllStructSetData(DllStructCreate("ptr", $ptr + $jmpoff), 1, $proc)
		EndIf
		Local $diff = Int($ptr - $base + $jmplen + $stringlen + 1)
		$base += $diff
		$length -= $diff
	Until $length <= $jmplen
	Return True
EndFunc

Func _binarycall_codeprepare($code)
	If NOT $code Then Return ""
	If IsBinary($code) Then Return $code
	$code = String($code)
	If StringLeft($code, 2) = "0x" Then Return Binary($code)
	If StringIsXDigit($code) Then Return Binary("0x" & $code)
	Return _binarycall_lzmadecompress(_binarycall_base64decode($code))
EndFunc

Func _binarycall_symbolfind($codebase, $identify, $length = Default)
	$identify = Binary($identify)
	If IsKeyword($length) Then
		$length = _binarycall_regionsize($codebase)
	EndIf
	Local $ptr = _binarycall_memorysearch($codebase, $length, $identify)
	If $ptr = 0 Then Return SetError(1, 0, 0)
	Return $ptr + BinaryLen($identify)
EndFunc

Func _binarycall_symbollist($codebase, $symbol)
	If NOT IsArray($symbol) OR $codebase = 0 Then Return SetError(1, 0, 0)
	Local $tag = ""
	For $i = 0 To UBound($symbol) - 1
		$tag &= "ptr " & $symbol[$i] & ";"
	Next
	Local $symbollist = DllStructCreate($tag)
	If @ Then Return SetError(1, 0, 0)
	For $i = 0 To UBound($symbol) - 1
		$codebase = _binarycall_symbolfind($codebase, $symbol[$i])
		DllStructSetData($symbollist, $symbol[$i], $codebase)
	Next
	Return $symbollist
EndFunc

Func _binarycall_create($code, $reloc = "", $padding = 0, $releaseonexit = True, $libraryimport = True)
	Local $binarycode = _binarycall_codeprepare($code)
	If NOT $binarycode Then Return SetError(1, 0, 0)
	Local $binarycodelen = BinaryLen($binarycode)
	Local $totalcodelen = $binarycodelen + $padding
	Local $codebase = _binarycall_alloc($binarycode, $padding)
	If NOT $codebase Then Return SetError(2, 0, 0)
	If $reloc Then
		$reloc = _binarycall_codeprepare($reloc)
		If NOT $reloc Then Return SetError(3, 0, 0)
		_binarycall_relocation($codebase, $reloc)
	EndIf
	If $libraryimport Then
		If NOT _binarycall_importlibrary($codebase, $binarycodelen) Then
			_binarycall_free($codebase)
			Return SetError(4, 0, 0)
		EndIf
	EndIf
	If $releaseonexit Then
		_binarycall_releaseonexit($codebase)
	EndIf
	Return SetError(0, $totalcodelen, $codebase)
EndFunc

Func _binarycall_releaseonexit($ptr)
	OnAutoItExitRegister("__BinaryCall_DoRelease")
	__binarycall_releaseonexit_handle($ptr)
EndFunc

Func __binarycall_dorelease()
	__binarycall_releaseonexit_handle()
EndFunc

Func __binarycall_releaseonexit_handle($ptr = Default)
	Static $ptrlist
	If @NumParams = 0 Then
		If IsArray($ptrlist) Then
			For $i = 1 To $ptrlist[0]
				_binarycall_free($ptrlist[$i])
			Next
		EndIf
	Else
		If NOT IsArray($ptrlist) Then
			Local $initarray[1] = [0]
			$ptrlist = $initarray
		EndIf
		If IsPtr($ptr) Then
			Local $array = $ptrlist
			Local $size = UBound($array)
			ReDim $array[$size + 1]
			$array[$size] = $ptr
			$array[0] += 1
			$ptrlist = $array
		EndIf
	EndIf
EndFunc

Global Const $json_pretty_print = 128
Global Const $json_strict_print = 256
Global Const $json_unquoted_string = 512
Global Const $jsmn_error_nomem = -1

Func __jsmn_runtimeloader($procname = "")
	Static $symbollist
	If NOT IsDllStruct($symbollist) Then
		Local $code
		If @AutoItX64 Then
			$code = "AwAAAAQfCAAAAAAAAAA1HbEvgTNrvX54gCiWSTVmt5v7RCdoFJ/zhkKmwcm8yVqZPjJBoVhNHHAIzrHWKbZh1J0QAUaHB5zyQTilTmWa9O0OKeLrk/Jg+o7CmMzjEk74uPongdHv37nwYXvg97fiHvjP2bBzI9gxSkKq9Cqh/GxSHIlZPYyW76pXUt//25Aqs2Icfpyay/NFd50rW7eMliH5ynkrp16HM1afithVrO+LpSaz/IojowApmXnBHUncHliDqbkx6/AODUkyDm1hj+AiEZ9Me1Jy+hBQ1/wC/YnuuYSJvNAKp6XDnyc8Nwr54Uqx5SbUW2CezwQQ7aXX/HFiHSKpQcFW/gi8oSx5nsoxUXVjxeNI/L7z6GF2mfu3Tnpt7hliWEdA2r2VB+TIM7Pgwl9X3Ge0T3KJQUaRtLJZcPvVtOuKXr2Q9wy7hl80hVRrt9zYrbjBHXLrRx/HeIMkZwxhmKo/dD/vvaNgE+BdU8eeJqFBJK2alrK2rh2WkRynftyepm1WrdKrz/5KhQPp/4PqH+9IADDjoGBbfvJQXdT+yiO8DtfrVnd+JOEKsKEsdgeM3UXx5r6tEHO9rYWbzbnyEiX7WozZemry+vBZMMtHn1aA63+RcDQED73xOsnj00/9E5Z6hszM5Hi8vi6Hw3iOgf3cHwcXG44aau0JpuA2DlrUvnJOYkNnY+bECeSdAR1UQkFNyqRoH2xm4Y7gYMCPsFtPBlwwleEKI27SsUq1ZHVQvFCoef7DXgf/GwPCAvwDMIQfb3hJtIVubOkASRQZVNIJ/y4KPrn/gcASV7fvMjE34loltTVlyqprUWxpI51tN6vhTOLAp+CHseKxWaf9g1wdbVs0e/5xAiqgJbmKNi9OYbhV/blpp3SL63XKxGiHdxhK1aR+4rUY4eckNbaHfW7ob+q7aBoHSs6LVX9lWakb/xWxwQdwcX/7/C+TcQSOOg6rLoWZ8wur9qp+QwzoCbXkf04OYpvD5kqgEiwQnB90kLtcA+2XSbDRu+aq02eNNCzgkZujeL/HjVISjf2EuQKSsZkBhS15eiXoRgPaUoQ5586VS7t7rhM8ng5LiVzoUQIZ0pNKxWWqD+gXRBvOMIXY2yd0Ei4sE5KFIEhbs3u8vwP7nFLIpZ/RembPTuc0ZlguGJgJ2F5iApfia+C2tRYRNjVCqECCveWw6P2Btfaq9gw7cWWmJflIQbjxtccDqsn52cftLqXSna9zk05mYdJSV8z2W7vM1YJ5Rd82v0j3kau710A/kQrN41bdaxmKjL+gvSRlOLB1bpvkCtf9+h+eVA4XIkIXKFydr1OjMZ8wq2FIxPJXskAe4YMgwQmeWZXMK1KBbLB3yQR1YOYaaHk1fNea9KsXgs5YLbiP/noAusz76oEDo/DJh1aw7cUwdhboVPg1bNq88mRb5RGa13KDK9uEET7OA02KbSL+Q4HOtyasLUoVrZzVyd8iZPoGrV36vHnj+yvG4fq6F/fkug/sBRp186yVZQVmdAgFd+WiRLnUjxHUKJ6xBbpt4FTP42E/PzPw3JlDb0UQtXTDnIL0CWqbns2E7rZ5PBwrwQYwvBn/gaEeLVGDSh84DfW4zknIneGnYDXdVEHC+ITzejAnNxb1duB+w2aVTk64iXsKHETq53GMH6DuFi0oUeEFb/xp0HsRyNC8vBjOq3Kk7NZHxCQLh7UATFttG7sH+VIqGjjNwmraGJ0C92XhpQwSgfAb3KHucCHGTTti0sn6cgS3vb36BkjGKsRhXVuoQCFH96bvTYtl8paQQW9ufRfvxPqmU0sALdR0fIvZwd7Z8z0UoEec6b1Sul4e60REj/H4scb6N2ryHBR9ua5N1YxJu1uwgoLXUL2wT9ZPBjPjySUzeqXikUIKKYgNlWy+VlNIiWWTPtKpCTr508logA=="
		Else
			$code = "AwAAAASFBwAAAAAAAAA1HbEvgTNrvX54gCiqsa1mt5v7RCdoAFjCfVE40DZbE5UfabA9UKuHrjqOMbvjSoB2zBJTEYEQejBREnPrXL3VwpVOW+L9SSfo0rTfA8U2W+Veqo1uy0dOsPhl7vAHbBHrvJNfEUe8TT0q2eaTX2LeWpyrFEm4I3mhDJY/E9cpWf0A78e+y4c7NxewvcVvAakIHE8Xb8fgtqCTVQj3Q1eso7n1fKQj5YsQ20A86Gy9fz8dky78raeZnhYayn0b1riSUKxGVnWja2i02OvAVM3tCCvXwcbSkHTRjuIAbMu2mXF1UpKci3i/GzPmbxo9n/3aX/jpR6UvxMZuaEDEij4yzfZv7EyK9WCNBXxMmtTp3Uv6MZsK+nopXO3C0xFzZA/zQObwP3zhJ4sdatzMhFi9GAM70R4kgMzsxQDNArueXj+UFzbCCFZ89zXs22F7Ixi0FyFTk3jhH56dBaN65S+gtPztNGzEUmtk4M8IanhQSw8xCXr0x0MPDpDFDZs3aN5TtTPYmyk3psk7OrmofCQGG5cRcqEt9902qtxQDOHumfuCPMvU+oMjzLzBVEDnBbj+tY3y1jvgGbmEJguAgfB04tSeAt/2618ksnJJK+dbBkDLxjB4xrFr3uIFFadJQWUckl5vfh4MVXbsFA1hG49lqWDa7uSuPCnOhv8Yql376I4U4gfcF8LcgorkxS+64urv2nMUq6AkBEMQ8bdkI64oKLFfO7fGxh5iMNZuLoutDn2ll3nq4rPi4kOyAtfhW0UPyjvqNtXJ/h0Wik5Mi8z7BVxaURTDk81TP8y9+tzjySB/uGfHFAzjF8DUY1vqJCgn0GQ8ANtiiElX/+Wnc9HWi2bEEXItbm4yv97QrEPvJG9nPRBKWGiAQsIA5J+WryX5NrfEfRPk0QQwyl16lpHlw6l0UMuk7S21xjQgyWo0MywfzoBWW7+t4HH9sqavvP4dYAw81BxXqVHQhefUOS23en4bFUPWE98pAN6bul+kS767vDK34yTC3lA2a8wLrBEilmFhdB74fxbAl+db91PivhwF/CR4Igxr35uLdof7+jAYyACopQzmsbHpvAAwT2lapLix8H03nztAC3fBqFSPBVdIv12lsrrDw4dfhJEzq7AbL/Y7L/nIcBsQ/3UyVnZk4kZP1KzyPCBLLIQNpCVgOLJzQuyaQ6k2QCBy0eJ0ppUyfp54LjwVg0X7bwncYbAomG4ZcFwTQnC2AX3oYG5n6Bz4SLLjxrFsY+v/SVa+GqH8uePBh1TPkHVNmzjXXymEf5jROlnd+EjfQdRyitkjPrg2HiQxxDcVhCh5J2L5+6CY9eIaYgrbd8zJnzAD8KnowHwh2bi4JLgmt7ktJ1XGizox7cWf3/Dod56KAcaIrSVw9XzYybdJCf0YRA6yrwPWXbwnzc/4+UDkmegi+AoCEMoue+cC7vnYVdmlbq/YLE/DWJX383oz2Ryq8anFrZ8jYvdoh8WI+dIugYL2SwRjmBoSwn56XIaot/QpMo3pYJIa4o8aZIZrjvB7BXO5aCDeMuZdUMT6AXGAGF1AeAWxFd2XIo1coR+OplMNDuYia8YAtnSTJ9JwGYWi2dJz3xrxsTQpBONf3yn8LVf8eH+o5eXc7lzCtHlDB+YyI8V9PyMsUPOeyvpB3rr9fDfNy263Zx33zTi5jldgP2OetUqGfbwl+0+zNYnrg64bluyIN/Awt1doDCQkCKpKXxuPaem/SyCHrKjg"
		EndIf
		Local $symbol[] = ["jsmn_parse", "jsmn_init", "json_string_decode", "json_string_encode"]
		Local $codebase = _binarycall_create($code)
		If @ Then Exit MsgBox(16, "Json", "Startup Failure!")
		$symbollist = _binarycall_symbollist($codebase, $symbol)
		If @ Then Exit MsgBox(16, "Json", "Startup Failure!")
	EndIf
	If $procname Then Return DllStructGetData($symbollist, $procname)
EndFunc

Func json_stringencode($string, $option = 0)
	Static $json_stringencode = __jsmn_runtimeloader("json_string_encode")
	Local $length = StringLen($string) * 6 + 1
	Local $buffer = DllStructCreate("wchar[" & $length & "]")
	Local $ret = DllCallAddress("int:cdecl", $json_stringencode, "wstr", $string, "ptr", DllStructGetPtr($buffer), "uint", $length, "int", $option)
	Return SetError($ret[0], 0, DllStructGetData($buffer, 1))
EndFunc

Func json_stringdecode($string)
	Static $json_stringdecode = __jsmn_runtimeloader("json_string_decode")
	Local $length = StringLen($string) + 1
	Local $buffer = DllStructCreate("wchar[" & $length & "]")
	Local $ret = DllCallAddress("int:cdecl", $json_stringdecode, "wstr", $string, "ptr", DllStructGetPtr($buffer), "uint", $length)
	Return SetError($ret[0], 0, DllStructGetData($buffer, 1))
EndFunc

Func json_decode($json, $inittokencount = 1000)
	Static $jsmn_init = __jsmn_runtimeloader("jsmn_init"), $jsmn_parse = __jsmn_runtimeloader("jsmn_parse")
	If $json = "" Then $json = '""'
	Local $tokenlist, $ret
	Local $parser = DllStructCreate("uint pos;int toknext;int toksuper")
	Do
		DllCallAddress("none:cdecl", $jsmn_init, "ptr", DllStructGetPtr($parser))
		$tokenlist = DllStructCreate("byte[" & ($inittokencount * 20) & "]")
		$ret = DllCallAddress("int:cdecl", $jsmn_parse, "ptr", DllStructGetPtr($parser), "wstr", $json, "ptr", DllStructGetPtr($tokenlist), "uint", $inittokencount)
		$inittokencount *= 2
	Until $ret[0] <> $jsmn_error_nomem
	Local $next = 0
	Return SetError($ret[0], 0, _json_token($json, DllStructGetPtr($tokenlist), $next))
EndFunc

Func _json_token(ByRef $json, $ptr, ByRef $next)
	If $next = -1 Then Return NULL 
	Local $token = DllStructCreate("int;int;int;int", $ptr + ($next * 20))
	Local $type = DllStructGetData($token, 1)
	Local $start = DllStructGetData($token, 2)
	Local $end = DllStructGetData($token, 3)
	Local $size = DllStructGetData($token, 4)
	$next += 1
	If $type = 0 AND $start = 0 AND $end = 0 AND $size = 0 Then
		$next = -1
		Return NULL 
	EndIf
	Switch $type
		Case 0
			Local $primitive = StringMid($json, $start + 1, $end - $start)
			Switch $primitive
				Case "true"
					Return True
				Case "false"
					Return False
				Case "null"
					Return NULL 
				Case Else
					If StringRegExp($primitive, "^[+\-0-9]") Then
						Return Number($primitive)
					Else
						Return json_stringdecode($primitive)
					EndIf
			EndSwitch
		Case 1
			Local $object = json_objcreate()
			For $i = 0 To $size - 1 Step 2
				Local $key = _json_token($json, $ptr, $next)
				Local $value = _json_token($json, $ptr, $next)
				If NOT IsString($key) Then $key = json_encode($key)
				If $object.exists($key) Then $object.remove($key)
				$object.add($key, $value)
			Next
			Return $object
		Case 2
			Local $array[$size]
			For $i = 0 To $size - 1
				$array[$i] = _json_token($json, $ptr, $next)
			Next
			Return $array
		Case 3
			Return json_stringdecode(StringMid($json, $start + 1, $end - $start))
	EndSwitch
EndFunc

Func json_isobject(ByRef $object)
	Return (IsObj($object) AND ObjName($object) = "Dictionary")
EndFunc

Func json_encode_compact($data, $option = 0)
	Select 
		Case IsString($data)
			Return '"' & json_stringencode($data, $option) & '"'
		Case IsNumber($data)
			Return $data
		Case IsArray($data) AND UBound($data, 0) = 1
			Local $json = "["
			For $i = 0 To UBound($data) - 1
				$json &= json_encode_compact($data[$i], $option) & ","
			Next
			If StringRight($json, 1) = "," Then $json = StringTrimRight($json, 1)
			Return $json & "]"
		Case json_isobject($data)
			Local $json = "{"
			Local $keys = $data.keys()
			For $i = 0 To UBound($keys) - 1
				$json &= '"' & json_stringencode($keys[$i], $option) & '":' & json_encode_compact($data.item($keys[$i]), $option) & ","
			Next
			If StringRight($json, 1) = "," Then $json = StringTrimRight($json, 1)
			Return $json & "}"
		Case IsBool($data)
			Return StringLower($data)
		Case IsPtr($data)
			Return Number($data)
		Case IsBinary($data)
			Return '"' & json_stringencode(BinaryToString($data, 4), $option) & '"'
		Case Else
			Return "null"
	EndSelect
EndFunc

Func json_encode_pretty($data, $option, $indent, $arraysep, $objectsep, $colonsep, $arraycrlf = Default, $objectcrlf = Default, $nextident = "")
	Local $thisident = $nextident, $json = ""
	Select 
		Case IsString($data)
			Local $string = json_stringencode($data, $option)
			If BitAND($option, $json_unquoted_string) AND NOT BitAND($option, $json_strict_print) AND NOT StringRegExp($string, "[\s,:]") AND NOT StringRegExp($string, "^[+\-0-9]") Then
				Return $string
			Else
				Return '"' & $string & '"'
			EndIf
		Case IsArray($data) AND UBound($data, 0) = 1
			If UBound($data) = 0 Then Return "[]"
			If IsKeyword($arraycrlf) Then
				$arraycrlf = ""
				Local $match = StringRegExp($arraysep, "[\r\n]+$", 3)
				If IsArray($match) Then $arraycrlf = $match[0]
			EndIf
			If $arraycrlf Then $nextident &= $indent
			Local $length = UBound($data) - 1
			For $i = 0 To $length
				If $arraycrlf Then $json &= $nextident
				$json &= json_encode_pretty($data[$i], $option, $indent, $arraysep, $objectsep, $colonsep, $arraycrlf, $objectcrlf, $nextident)
				If $i < $length Then $json &= $arraysep
			Next
			If $arraycrlf Then Return "[" & $arraycrlf & $json & $arraycrlf & $thisident & "]"
			Return "[" & $json & "]"
		Case json_isobject($data)
			If $data.count = 0 Then Return "{}"
			If IsKeyword($objectcrlf) Then
				$objectcrlf = ""
				Local $match = StringRegExp($objectsep, "[\r\n]+$", 3)
				If IsArray($match) Then $objectcrlf = $match[0]
			EndIf
			If $objectcrlf Then $nextident &= $indent
			Local $keys = $data.keys()
			Local $length = UBound($keys) - 1
			For $i = 0 To $length
				If $objectcrlf Then $json &= $nextident
				$json &= json_encode_pretty(String($keys[$i]), $option, $indent, $arraysep, $objectsep, $colonsep) & $colonsep & json_encode_pretty($data.item($keys[$i]), $option, $indent, $arraysep, $objectsep, $colonsep, $arraycrlf, $objectcrlf, $nextident)
				If $i < $length Then $json &= $objectsep
			Next
			If $objectcrlf Then Return "{" & $objectcrlf & $json & $objectcrlf & $thisident & "}"
			Return "{" & $json & "}"
		Case Else
			Return json_encode_compact($data, $option)
	EndSelect
EndFunc

Func json_encode($data, $option = 0, $indent = Default, $arraysep = Default, $objectsep = Default, $colonsep = Default)
	If BitAND($option, $json_pretty_print) Then
		Local $strict = BitAND($option, $json_strict_print)
		If IsKeyword($indent) Then
			$indent = @
		Else
			$indent = json_stringdecode($indent)
			If StringRegExp($indent, "[^\t ]") Then $indent = @
		EndIf
		If IsKeyword($arraysep) Then
			$arraysep = "," & @CRLF
		Else
			$arraysep = json_stringdecode($arraysep)
			If $arraysep = "" OR StringRegExp($arraysep, "[^\s,]|,.*,") OR ($strict AND NOT StringRegExp($arraysep, ",")) Then $arraysep = "," & @CRLF
		EndIf
		If IsKeyword($objectsep) Then
			$objectsep = "," & @CRLF
		Else
			$objectsep = json_stringdecode($objectsep)
			If $objectsep = "" OR StringRegExp($objectsep, "[^\s,]|,.*,") OR ($strict AND NOT StringRegExp($objectsep, ",")) Then $objectsep = "," & @CRLF
		EndIf
		If IsKeyword($colonsep) Then
			$colonsep = ": "
		Else
			$colonsep = json_stringdecode($colonsep)
			If $colonsep = "" OR StringRegExp($colonsep, "[^\s,:]|[,:].*[,:]") OR ($strict AND (StringRegExp($colonsep, ",") OR NOT StringRegExp($colonsep, ":"))) Then $colonsep = ": "
		EndIf
		Return json_encode_pretty($data, $option, $indent, $arraysep, $objectsep, $colonsep)
	ElseIf BitAND($option, $json_unquoted_string) Then
		Return json_encode_pretty($data, $option, "", ",", ",", ":")
	Else
		Return json_encode_compact($data, $option)
	EndIf
EndFunc

Func json_objcreate()
	Local $object = ObjCreate("Scripting.Dictionary")
	$object.comparemode = 0
	Return $object
EndFunc

Func json_objget(ByRef $object, $key)
	$key = String($key)
	If $object.exists($key) Then Return $object.item($key)
	Return SetError(1, 0, "")
EndFunc

Func json_objexists(ByRef $object, $key)
	Return $object.exists(String($key))
EndFunc

Func json_get(ByRef $var, $notation)
	Local $match = StringRegExp($notation, "(^\[([^\]]+)\])|(^\.([^\.\[]+))", 3)
	If IsArray($match) Then
		Local $index
		If UBound($match) = 4 Then
			$index = String(json_decode($match[3]))
			$notation = StringTrimLeft($notation, StringLen($match[2]))
		Else
			$index = json_decode($match[1])
			$notation = StringTrimLeft($notation, StringLen($match[0]))
		EndIf
		Local $item
		If IsString($index) AND json_isobject($var) AND json_objexists($var, $index) Then
			$item = json_objget($var, $index)
		ElseIf IsInt($index) AND IsArray($var) AND UBound($var, 0) = 1 AND $index >= 0 AND $index < UBound($var) Then
			$item = $var[$index]
		Else
			Return SetError(1, 0, "")
		EndIf
		If NOT $notation Then Return $item
		Local $ret = json_get($item, $notation)
		Return SetError(@, 0, $ret)
	EndIf
	Return SetError(2, 0, "")
EndFunc

Func _httprequest($url, $method = "GET", $postdata = "")
	$method = StringLower($method)
	Local $ohttp = ObjCreate("WinHttp.WinHttpRequest.5.1")
	$ohttp.open($method, $url, False)
	$ohttp.setrequestheader("User-Agent", "Lofty Tibiabot XY" & @AutoItVersion)
	$ohttp.setrequestheader("Referer", "http:/lofty-tibiabot.com/")
	$ohttp.setrequestheader("X-Requested-With", "XMLHttpRequest")
	If $method = "get" Then
		$ohttp.send()
	Else
		$ohttp.setrequestheader("Content-Type", "application/x-www-form-urlencoded")
		$ohttp.setrequestheader("Content-Length", StringLen($postdata))
		$ohttp.send($postdata)
	EndIf
	$ohttp.waitforresponse
	Local $headerresponses = $ohttp.getallresponseheaders()
	Local $ret[4]
	If StringInStr($headerresponses, "Location:") <> 0 Then
		$ret["0"] = $ohttp.getresponseheader("Location")
		$ret["1"] = 1
	Else
		$ret["0"] = ""
		$ret["1"] = 0
	EndIf
	$ret["2"] = $ohttp.responsetext
	$ret["3"] = $ohttp.getallresponseheaders()
	Return $ret
EndFunc

Func urlencode($vdata)
	If IsBool($vdata) Then Return $vdata
	Local $adata = StringToASCIIArray($vdata, Default, Default, 2)
	Local $sout = "", $total = UBound($adata) - 1
	For $i = 0 To $total
		Switch $adata[$i]
			Case 45, 46, 48 To 57, 65 To 90, 95, 97 To 122, 126
				$sout &= Chr($adata[$i])
			Case 32
				$sout &= "+"
			Case Else
				$sout &= "%" & Hex($adata[$i], 2)
		EndSwitch
	Next
	Return $sout
EndFunc

Local $h_imagesearchdll = -1

Func _winapi_wow64enablewow64fsredirection($benable)
	Local $aret = DllCall("kernel32.dll", "boolean", "Wow64EnableWow64FsRedirection", "boolean", $benable)
	If @ Then Return SetError(@, @, 0)
	Return $aret[0]
EndFunc

Func _imagesearch($findimage, $resultposition, ByRef $x, ByRef $y, $tolerance, $transparency = 0)
	Return _imagesearcharea($findimage, $resultposition, 0, 0, @DesktopWidth, @DesktopHeight, $x, $y, $tolerance, $transparency)
EndFunc

Func _imagesearcharea($findimage, $resultposition, $x1, $y1, $right, $bottom, ByRef $x, ByRef $y, $tolerance = 0, $transparency = 0)
	If NOT FileExists($findimage) Then Return "Image File not found"
	If $tolerance < 0 OR $tolerance > 255 Then $tolerance = 0
	If $h_imagesearchdll = -1 Then _imagesearchstartup()
	If $transparency <> 0 Then $findimage = "*" & $transparency & " " & $findimage
	If $tolerance > 0 Then $findimage = "*" & $tolerance & " " & $findimage
	$result = DllCall($h_imagesearchdll, "str", "ImageSearch", "int", $x1, "int", $y1, "int", $right, "int", $bottom, "str", $findimage)
	If @ Then Return "DllCall Error=" & @
	If $result = "0" OR NOT IsArray($result) OR $result[0] = "0" Then Return False
	$array = StringSplit($result[0], "|")
	If (UBound($array) >= 4) Then
		$x = Int(Number($array[2]))
		$y = Int(Number($array[3]))
		If $resultposition = 1 Then
			$x = $x + Int(Number($array[4]) / 2)
			$y = $y + Int(Number($array[5]) / 2)
		EndIf
		Return True
	EndIf
EndFunc

Func _imagesearchstartup()
	_winapi_wow64enablewow64fsredirection(True)
	$sosarch = @OSArch
	$sautoitx64 = @AutoItX64
	If $sosarch = "X86" OR $sautoitx64 = 0 Then
		$h_imagesearchdll = DllOpen("ImageSearchDLLx32.dll")
		If $h_imagesearchdll = -1 Then Return "DllOpen failure"
	ElseIf $sosarch = "X64" AND $sautoitx64 = 1 Then
		$h_imagesearchdll = DllOpen("ImageSearchDLLx64.dll")
		If $h_imagesearchdll = -1 Then Return "DllOpen failure"
	Else
		Return "Inconsistent or incompatible Script/Windows/CPU Architecture"
	EndIf
	Return True
EndFunc

If NOT FileExists("ImageSearchDLLx32.dll") Then FileInstall("ImageSearchDLLx32.dll", "ImageSearchDLLx32.dll", 1)
If NOT FileExists("ImageSearchDLLx64.dll") Then FileInstall("ImageSearchDLLx64.dll", "ImageSearchDLLx64.dll", 1)
If NOT FileExists("msvcr110d.dll") Then FileInstall("msvcr110d.dll", "msvcr110d.dll", 1)
If NOT FileExists("msvcr110.dll") Then FileInstall("msvcr110.dll", "msvcr110.dll", 1)
Opt("GUIResizeMode", 802)
Opt("MouseCoordMode", 0)
Opt("PixelCoordMode", 0)
Opt("GUICloseOnESC", 0)
Opt("TrayOnEventMode", 1)
HotKeySet("{PAUSE}", "MouseCord")
HotKeySet("+!s", "slimGetPos")
HotKeySet("{INSERT}", "slimGetPos")
HotKeySet("{END}", "runePos")
Global Const $server = "http://lofty-tibiabot.com/autoit/index.php?act="
Global Const $datepremium = "http://lofty-tibiabot.com/autoit/datepremium.php?act="
Global Const $endpoint_login = $server & "login"
Global Const $endpoint_pdays = $datepremium & "pdays"
Global $username
Global $wintitle
Global $timerrefreshmp
Global $timerrefreshhp
Global $isattacking = False
Global $islooting = False
Global $isrunemaking = False
Global $iswalking = False
Global $ishealinguh = False
Global $isslimtraining = False
Global $isequiping = False
Global $ispicking = False
Global $isfishing = False
Global $ishotkeyusing = False
Global $iseating = False
Global $isaiming = False
Global $mousepos = MouseGetPos()
Global $posforbp = $mousepos
Global $fishmax
Global $fishcount = 0
Global $hpbar
Global $fishpos[1][2]
Global $marker[5][2]
Global $irunes = 0
Global $fdiff
Global $xmiddle, $ymiddle
Global $days = 0
Global $mpdrinkcount = 1
Global $default = 15395562
Global $ud = _getuuid()
Global Const $debug_mode = False
Global Const $lofty = "http://lofty-tibiabot.com/"
Global $mediviaclient
Global $tibijkaclient
Global $darkotclient
If NOT $debug_mode Then
	_chooseclient()
Else
	_chooseclient()
EndIf

Func _login()
	Global $guilogin = GUICreate("Lofty TibiaBot", 274, 162, -1, -1)
	GUICtrlCreateLabel("Welcome my Dear", 16, 8, 226, 17, $ss_center)
	GUICtrlCreateLabel("Account:", 16, 40, 47, 17)
	GUICtrlCreateLabel("Password:", 16, 72, 53, 17)
	Global $inputusername = GUICtrlCreateInput("", 72, 37, 177, 21)
	Global $inputpassword = GUICtrlCreateInput("", 72, 69, 177, 21, BitOR($gui_ss_default_input, $es_password))
	Global $buttonlogin = GUICtrlCreateButton("Login", 176, 104, 75, 25)
	GUICtrlCreateLabel("lofty-tibiabot.com", 16, 134, 85, 25)
	GUISetState(@SW_SHOW)
	While 1
		$nmsg = GUIGetMsg()
		Switch $nmsg
			Case $gui_event_close
				Exit
			Case $buttonlogin
				If GUICtrlRead($inputpassword) <> "" AND GUICtrlRead($inputusername) <> "" Then
					buttonloginclick()
				Else
					MsgBox(16, "Notification ", " Please enter the full information above")
				EndIf
		EndSwitch
	WEnd
EndFunc

Func _chooseclient()
	$guichooseclient = GUICreate("Lofty TibiaBot", 355, 163, -1, -1)
	GUICtrlCreateLabel("Choose Your OTS", 40, 18, 290, 17, $ss_center)
	GUICtrlSetFont(-1, 10, 400, 0, "MS Sans Serif")
	$btnmediviaclient = GUICtrlCreateButton("Medivia", 15, 58, 70, 35)
	GUICtrlSetFont(-1, 8, 800, 0, "MS Sans Serif")
	$btnnastariusclient = GUICtrlCreateButton("Nastarius", 100, 58, 70, 35)
	GUICtrlSetFont(-1, 8, 800, 0, "MS Sans Serif")
	$btndarkotclient = GUICtrlCreateButton("DarkOT", 185, 58, 70, 35)
	GUICtrlSetFont(-1, 8, 800, 0, "MS Sans Serif")
	$btntibijkaclient = GUICtrlCreateButton("Others", 270, 58, 70, 35)
	GUICtrlSetFont(-1, 8, 800, 0, "MS Sans Serif")
	$supplist = GUICtrlCreateButton("Supported list", 270, 134, 70, 20)
	GUICtrlCreateLabel("lofty-tibiabot.com", 15, 134, 85, 25)
	GUISetState(@SW_SHOW)
	GUICtrlSetTip($btnmediviaclient, "Support for Medivia OTS Client", "Client Choose", 1, 1)
	GUICtrlSetTip($btndarkotclient, "Support for DarkOT OTS Client", "Client Choose", 1, 1)
	GUICtrlSetTip($btnnastariusclient, "Support for Nastarius OTS Client", "Client Choose", 1, 1)
	GUICtrlSetTip($btntibijkaclient, "Support for others 7.1-8.0 OTS which looks like official clients. Click supported list for more info", "Client Choose", 1, 1)
	While 1
		$nmsg = GUIGetMsg()
		Switch $nmsg
			Case $gui_event_close
				Exit
			Case $btnmediviaclient
				$mediviaclient = True
				$tibijkaclient = False
				$darkotclient = False
				GUIDelete($guichooseclient)
				_guimain()
			Case $btnnastariusclient
				$mediviaclient = False
				$tibijkaclient = False
				$darkotclient = False
				GUIDelete($guichooseclient)
				_guimain()
			Case $btntibijkaclient
				$mediviaclient = False
				$tibijkaclient = True
				$darkotclient = False
				GUIDelete($guichooseclient)
				_guimain()
			Case $btndarkotclient
				$mediviaclient = False
				$tibijkaclient = True
				$darkotclient = True
				GUIDelete($guichooseclient)
				_guimain()
			Case $supplist
				ShellExecute("supportedOts.txt")
		EndSwitch
	WEnd
EndFunc

Func _guimain()
	If NOT $debug_mode Then
		ProgressOn("LoftyBot", "", "Connecting..")
		For $i = 0 To 100
			ProgressSet($i)
			Sleep(7)
		Next
		ProgressSet(100, "Done")
		ProgressOff()
	EndIf
	Global $guimain = GUICreate("Lofty TibiaBot", 471, 500, -1, -1)
	Global $premiumdays = GUICtrlCreateLabel("", 16, 15, 281, 25)
	GUICtrlSetData($premiumdays, "Cracked by Narkon from mpcforum.pl")
	GUICtrlSetColor(-2, $color_green)
	Global $menuitem1 = GUICtrlCreateMenu("&File")
	Global $menuitem4 = GUICtrlCreateMenuItem("Disabled - Save Settings" & @ & "", $menuitem1)
	Global $menuitem5 = GUICtrlCreateMenuItem("Disabled - Load Settings" & @ & "", $menuitem1)
	Global $menuitem2 = GUICtrlCreateMenu("&Help")
	Global $menuitem3 = GUICtrlCreateMenuItem("BP Set-Up" & @ & "", $menuitem2)
	Global $tab1 = GUICtrlCreateTab(10, 50, 453, 421)
	Global $tabmain = GUICtrlCreateTabItem("Main")
	Global $group3 = GUICtrlCreateGroup("Change window title", 28, 265, 415, 135)
	GUICtrlSetFont(-1, 8, 400, 0, "Arial")
	$label20 = GUICtrlCreateLabel("Change window title if You want use two bots", 38, 295, 278, 17)
	Global $changetitle = GUICtrlCreateInput("Medivia Online", 38, 325, 121, 22)
	Global $changetitlebtn = GUICtrlCreateButton("Change", 168, 323, 75, 25)
	GUICtrlCreateGroup("", -99, -99, 1, 1)
	$group4 = GUICtrlCreateGroup("Do these two things firstly or bot won't work | If client is inactive values will return 0", 28, 81, 415, 171)
	GUICtrlSetFont(-1, 8, 400, 0, "Arial")
	Global $check = GUICtrlCreateButton("Manual Point HP", 172, 101, 131, 25)
	Global $autocheck = GUICtrlCreateButton("Auto Point HP", 38, 101, 131, 25)
	Global $actual_mp = GUICtrlCreateLabel("", 170, 155, 29, 21)
	Global $actual_hp = GUICtrlCreateLabel("", 170, 135, 29, 21)
	$label1 = GUICtrlCreateLabel("Your Actual HP is about -", 40, 135, 123, 17)
	$label6 = GUICtrlCreateLabel("%", 200, 155, 12, 17)
	$label4 = GUICtrlCreateLabel("%", 200, 135, 12, 17)
	$label5 = GUICtrlCreateLabel("Your Actual MP is about -", 40, 155, 123, 17)
	Global $marktibia = GUICtrlCreateButton("Mark Tibia Region", 38, 184, 211, 25)
	Global $winpos = GUICtrlCreateLabel("", 138, 219, 199, 17)
	$label23 = GUICtrlCreateLabel("Your window pos -", 38, 219, 103, 17)
	GUICtrlCreateGroup("", -99, -99, 1, 1)
	Global $tabspells = GUICtrlCreateTabItem("Spells")
	$group8 = GUICtrlCreateGroup("Spells", 28, 100, 415, 135)
	GUICtrlSetFont(-1, 8, 400, 0, "Arial")
	Global $hppercent = GUICtrlCreateInput("80", 230, 137, 29, 22)
	$label8 = GUICtrlCreateLabel("Above", 192, 170, 34, 17)
	$label7 = GUICtrlCreateLabel("Below", 192, 140, 30, 17)
	$label3 = GUICtrlCreateLabel("% MANA", 260, 170, 50, 17)
	Global $mppercent = GUICtrlCreateInput("80", 230, 167, 29, 22)
	$label2 = GUICtrlCreateLabel("% HP", 260, 140, 30, 17)
	Global $checkbox_spell_cast = GUICtrlCreateCheckbox("", 310, 167, 17, 17)
	Global $checkbox_heal = GUICtrlCreateCheckbox("", 310, 137, 17, 17)
	Global $spelltocast = GUICtrlCreateInput("Adori Gran", 98, 167, 79, 22)
	Global $healspell = GUICtrlCreateInput("Exura", 98, 137, 79, 22)
	$label10 = GUICtrlCreateLabel("Cast Spell", 45, 170, 50, 17)
	$label9 = GUICtrlCreateLabel("Heal with", 45, 140, 50, 17)
	GUICtrlCreateGroup("", -99, -99, 1, 1)
	Global $tabrunesaction = GUICtrlCreateTabItem("RunesActions")
	Global $group1 = GUICtrlCreateGroup("Rune Maker", 28, 90, 415, 181)
	GUICtrlSetFont(-1, 8, 400, 0, "Arial")
	$label14 = GUICtrlCreateLabel("Spell", 40, 115, 27, 17)
	Global $runespell = GUICtrlCreateInput("Adori Vita Vis", 70, 115, 81, 22)
	$label15 = GUICtrlCreateLabel("If MP above %", 160, 115, 73, 17)
	Global $runemp = GUICtrlCreateInput("80", 238, 115, 31, 22)
	$label16 = GUICtrlCreateLabel("Take blanks from BP", 40, 145, 103, 17)
	Global $blanksbp = GUICtrlCreateInput("2", 156, 143, 31, 22)
	$label17 = GUICtrlCreateLabel("Put runes to BP", 40, 172, 78, 17)
	Global $runesbp = GUICtrlCreateInput("3", 133, 170, 31, 22)
	$label117 = GUICtrlCreateLabel("Increase both BPs inputted above after", 40, 200, 205, 17)
	Global $incbp = GUICtrlCreateInput("60", 233, 197, 31, 22)
	$label118 = GUICtrlCreateLabel("minutes", 270, 200, 35, 17)
	Global $incbpcheck = GUICtrlCreateCheckbox("", 317, 200, 17, 17)
	$label18 = GUICtrlCreateLabel("Make Runes", 40, 245, 65, 17)
	Global $makerunes = GUICtrlCreateCheckbox("", 110, 244, 17, 17)
	GUICtrlCreateGroup("", -99, -99, 1, 1)
	$group12 = GUICtrlCreateGroup("Runes Healer", 28, 282, 415, 55)
	GUICtrlSetFont(-1, 8, 400, 0, "Arial")
	Global $hppercentuh = GUICtrlCreateInput("50", 206, 304, 29, 22)
	$label37 = GUICtrlCreateLabel("Below", 168, 307, 30, 17)
	$label38 = GUICtrlCreateLabel("% HP", 242, 307, 30, 17)
	Global $checkbox_uh_heal = GUICtrlCreateCheckbox("", 286, 307, 17, 17)
	$label89 = GUICtrlCreateLabel("Heal self by rune", 41, 307, 100, 17)
	Global $toheal = GUICtrlCreateCombo("", 122, 304, 38, 22)
	GUICtrlSetData(-1, "UH|IH|", "UH")
	GUICtrlCreateGroup("", -99, -99, 1, 1)
	$group112 = GUICtrlCreateGroup("Use Item/Rune on Myself", 28, 342, 415, 115)
	GUICtrlSetFont(-1, 8, 400, 0, "Arial")
	$label150 = GUICtrlCreateLabel("Use rune/item from BP", 41, 370, 110, 17)
	Global $firsthotbp = GUICtrlCreateInput("4", 153, 366, 20, 22)
	$label151 = GUICtrlCreateLabel("Hotkey", 180, 370, 40, 17)
	Global $firsthot = GUICtrlCreateInput("F2", 225, 366, 31, 22)
	Global $firsthotbtn = GUICtrlCreateButton("Set Hotkey", 265, 366, 75, 25)
	$label148 = GUICtrlCreateLabel("Drink MP from BP", 41, 400, 90, 17)
	Global $sechotbp = GUICtrlCreateInput("5", 153, 394, 20, 22)
	$label152 = GUICtrlCreateLabel("Hotkey", 180, 400, 40, 17)
	Global $sechot = GUICtrlCreateInput("F12", 225, 394, 31, 22)
	Global $sechotbtn = GUICtrlCreateButton("Set Hotkey", 265, 394, 75, 25)
	Global $tabalerts = GUICtrlCreateTabItem("Alerts")
	$group9 = GUICtrlCreateGroup("Alerts", 28, 94, 415, 255)
	GUICtrlSetFont(-1, 8, 400, 0, "Arial")
	$label11 = GUICtrlCreateLabel("If someone on battle pos", 47, 135, 130, 17)
	Global $alertplayerpos = GUICtrlCreateCheckbox("", 219, 135, 17, 17)
	Global $playerbattlepos = GUICtrlCreateInput("3", 179, 132, 29, 22)
	Global $discalert = GUICtrlCreateCheckbox("", 179, 168, 17, 17)
	Global $disconnected = GUICtrlCreateLabel("Disconnected", 47, 171, 130, 17)
	$label12 = GUICtrlCreateLabel("HP below %", 47, 207, 130, 17)
	Global $belowinput = GUICtrlCreateInput("20", 177, 204, 29, 22)
	Global $belowhpalert = GUICtrlCreateCheckbox("", 217, 207, 17, 17)
	$label311 = GUICtrlCreateLabel("Check every", 43, 244, 60, 17)
	Global $secondscheck = GUICtrlCreateInput("10", 110, 242, 29, 22)
	$label419 = GUICtrlCreateLabel("sec if someone on screen then", 143, 244, 160, 17)
	Global $logshutdown = GUICtrlCreateCombo("", 290, 242, 115, 25, BitOR($cbs_dropdown, $cbs_autohscroll))
	GUICtrlSetData(-1, "Logout|Logout&Shutdown", "Logout")
	Global $logoutscreen = GUICtrlCreateCheckbox("", 416, 244, 17, 17)
	$label413 = GUICtrlCreateLabel("If MP above", 43, 274, 60, 17)
	Global $logoutmp = GUICtrlCreateInput("90", 106, 271, 29, 22)
	$label314 = GUICtrlCreateLabel("%", 138, 274, 8, 17)
	Global $logshutdown2 = GUICtrlCreateCombo("", 153, 272, 115, 25, BitOR($cbs_dropdown, $cbs_autohscroll))
	GUICtrlSetData(-1, "Logout|Logout&Shutdown", "Logout")
	Global $logoutmpcheck = GUICtrlCreateCheckbox("", 275, 274, 17, 17)
	GUICtrlCreateGroup("", -99, -99, 1, 1)
	Global $tabattacker = GUICtrlCreateTabItem("Attacker")
	$group10 = GUICtrlCreateGroup("Attacker", 28, 111, 415, 141)
	GUICtrlSetFont(-1, 8, 400, 0, "Arial")
	$label13 = GUICtrlCreateLabel("Attack Monsters on batte pos 1", 48, 148, 162, 17)
	$label95 = GUICtrlCreateLabel("Attacker interval -", 48, 183, 80, 18)
	Global $attacker_interval = GUICtrlCreateInput("8", 136, 180, 20, 22)
	GUICtrlSetLimit(-1, 2, 1)
	$label97 = GUICtrlCreateLabel("Auto Attacker", 48, 213, 70, 18)
	Global $attackercheck = GUICtrlCreateCheckbox("", 128, 213, 17, 17)
	GUICtrlCreateGroup("Aim Rune", 28, 271, 415, 71)
	GUICtrlSetFont(-1, 8, 400, 0, "Arial")
	$label03 = GUICtrlCreateLabel("Aim target by", 48, 300, 70, 17)
	Global $runeaim = GUICtrlCreateCombo("", 120, 298, 60, 25, BitOR($cbs_dropdown, $cbs_autohscroll))
	GUICtrlSetData(-1, "HMM|SD", "HMM")
	$label04 = GUICtrlCreateLabel("Hotkey", 190, 300, 40, 17)
	Global $aimhot = GUICtrlCreateInput("F6", 240, 298, 31, 22)
	Global $aimbtn = GUICtrlCreateButton("Set Hotkey", 280, 296, 75, 25)
	GUICtrlCreateGroup("Faster Aim Rune", 28, 361, 415, 71)
	GUICtrlSetFont(-1, 8, 400, 0, "Arial")
	$label06 = GUICtrlCreateLabel("Aim target by Hotkey", 48, 390, 110, 17)
	Global $aimhotfaster = GUICtrlCreateInput("F7", 160, 388, 31, 22)
	Global $aimbtnfaster = GUICtrlCreateButton("Set Hotkey", 200, 386, 75, 25)
	GUICtrlCreateGroup("", -99, -99, 1, 1)
	Global $tabwalker = GUICtrlCreateTabItem("Walker")
	$group5 = GUICtrlCreateGroup("Walker", 28, 111, 415, 141)
	GUICtrlSetFont(-1, 8, 400, 0, "Arial")
	$label96 = GUICtrlCreateLabel("Auto Walker", 48, 213, 63, 18)
	Global $walker_checker = GUICtrlCreateCheckbox("", 120, 213, 17, 17)
	$label45 = GUICtrlCreateLabel("Walker interval -", 48, 183, 80, 18)
	Global $walker_interval = GUICtrlCreateInput("10", 130, 180, 20, 22)
	GUICtrlSetLimit(-1, 2, 1)
	$label46 = GUICtrlCreateLabel("seconds", 155, 183, 80, 18)
	Global $loadmarks = GUICtrlCreateButton("Load Marks", 42, 140, 75, 25)
	$label25 = GUICtrlCreateLabel("Loaded marks -", 132, 144, 79, 18)
	Global $marksloaded = GUICtrlCreateLabel("", 215, 144, 30, 18)
	GUICtrlCreateGroup("", -99, -99, 1, 1)
	Global $tablooter = GUICtrlCreateTabItem("Looter")
	$group6 = GUICtrlCreateGroup("Looter  | Not ready yet", 28, 91, 415, 181)
	GUICtrlSetFont(-1, 8, 400, 0, "Arial")
	$label21 = GUICtrlCreateLabel("Loot from bp -", 48, 121, 69, 17)
	Global $bplooter = GUICtrlCreateInput("2", 128, 119, 20, 22)
	$label130 = GUICtrlCreateLabel("Put loot to bp -", 48, 155, 69, 17)
	Global $bpputloot = GUICtrlCreateInput("4", 132, 152, 20, 22)
	$label26 = GUICtrlCreateLabel("Looting", 48, 195, 39, 17)
	Global $lootchecker = GUICtrlCreateCheckbox("", 98, 194, 17, 17)
	GUICtrlCreateGroup("", -99, -99, 1, 1)
	GUICtrlSetState($lootchecker, $gui_disable)
	Global $tabextras = GUICtrlCreateTabItem("Extras")
	Global $group101 = GUICtrlCreateGroup("Auto Fisher", 28, 85, 415, 151)
	GUICtrlSetFont(-1, 8, 400, 0, "Arial")
	Global $fishclear = GUICtrlCreateButton("Clear Positions", 39, 145, 105, 25)
	Global $addfish = GUICtrlCreateButton("Record Positions", 39, 110, 105, 25)
	$label128 = GUICtrlCreateLabel("Fishing interval", 39, 185, 78, 17)
	Global $fishinterval = GUICtrlCreateInput("6", 120, 183, 27, 22)
	$label127 = GUICtrlCreateLabel("Fishing", 39, 210, 44, 17)
	Global $fishing = GUICtrlCreateCheckbox("", 80, 209, 17, 17)
	$label227 = GUICtrlCreateLabel("(DELETE button is a Hotkey for disable fishing)", 170, 210, 244, 17)
	$labelfish = GUICtrlCreateLabel("Fish Positions", 255, 95, 140, 17)
	GUICtrlSetFont(-1, 8, 400, 0, "Arial")
	Global $fishlist = GUICtrlCreateList("", 254, 110, 140, 90, -1, $lvs_ex_gridlines)
	GUICtrlSetData($fishlist, "No Fish Positions")
	GUICtrlCreateGroup("", -99, -99, 1, 1)
	Global $anti_idle = GUICtrlCreateButton("Anti Idle", 32, 382, 75, 25)
	GUICtrlSetFont(-1, 8, 400, 0, "Arial")
	$group2 = GUICtrlCreateGroup("Auto Eater", 28, 245, 415, 61)
	GUICtrlSetFont(-1, 8, 400, 0, "Arial")
	Global $toeat = GUICtrlCreateCombo("", 40, 265, 145, 25)
	GUICtrlSetData(-1, "Fishes|Meat|Ham|BrownMushroom", "Fishes")
	$label001 = GUICtrlCreateLabel("by interval", 190, 268, 54, 17)
	Global $eat_inter = GUICtrlCreateInput("20", 250, 265, 31, 22)
	$label002 = GUICtrlCreateLabel("seconds", 290, 268, 44, 17)
	Global $autoeatercheck = GUICtrlCreateCheckbox("", 345, 268, 17, 17)
	GUICtrlCreateGroup("", -99, -99, 1, 1)
	Global $group7 = GUICtrlCreateGroup("Auto quiper to arrow slot", 28, 319, 415, 51)
	GUICtrlSetFont(-1, 8, 400, 0, "Arial")
	$label27 = GUICtrlCreateLabel("From BP", 121, 344, 44, 17)
	Global $equipbp = GUICtrlCreateInput("2", 170, 340, 31, 22)
	Global $equipchecker = GUICtrlCreateCheckbox("", 209, 342, 17, 17)
	$label28 = GUICtrlCreateLabel("Equip ammo", 39, 344, 78, 17)
	GUICtrlCreateGroup("", -99, -99, 1, 1)
	Global $tabtraining = GUICtrlCreateTabItem("Training")
	$group60 = GUICtrlCreateGroup("SlimeTraining", 28, 100, 415, 75)
	GUICtrlSetFont(-1, 8, 400, 0, "Arial")
	$label63 = GUICtrlCreateLabel("Slime Training", 42, 127, 69, 17)
	Global $slimtraining = GUICtrlCreateCheckbox("", 115, 127, 17, 17)
	$group68 = GUICtrlCreateGroup("SpearPicker", 28, 185, 415, 100)
	GUICtrlSetFont(-1, 8, 400, 0, "Arial")
	$outfit = GUICtrlCreatePic("img/help/outfit.bmp", 40, 200, 80, 80)
	Global $spearpos = GUICtrlCreateCombo("", 150, 205, 75, 25)
	GUICtrlSetData(-1, "North|East|South|West", "North")
	$label110 = GUICtrlCreateLabel("Picker interval -", 150, 232, 80, 18)
	GUICtrlSetLimit(-1, 2, 1)
	Global $picker_interval = GUICtrlCreateInput("10", 230, 230, 20, 22)
	$label112 = GUICtrlCreateLabel("Auto Picker -", 150, 258, 65, 18)
	Global $auto_pick = GUICtrlCreateCheckbox("", 215, 257, 17, 17)
	GUICtrlCreateGroup("", -99, -99, 1, 1)
	GUICtrlCreateTabItem("")
	Dim $guimain_1_acceltable[1][2] = [["!,", $menuitem4]]
	GUISetAccelerators($guimain_1_acceltable)
	GUISetState(@SW_SHOW)
	GUICtrlSetTip($autocheck, "It will auto point - checkout HP and Mana values in bot if they are inncorect do it manually", "Pointing HP", 1, 1)
	GUICtrlSetTip($check, "If auto point not work properly point HP Bar manually, top-left corner, checkout HP and Mana values in bot if they are inncorect repeat the operation", "Pointing HP", 1, 1)
	GUICtrlSetTip($playerbattlepos, "You can input one value - 1,2,3,4", "Alert - on battle list", 1, 1)
	GUICtrlSetTip($marktibia, "If you drag or resize tibia window, You have to mark it again - used only for UH heal now", "Tibia Marking", 1, 1)
	GUICtrlSetTip($blanksbp, "Blanks are put to left hand", "Rune Making", 1, 1)
	GUICtrlSetTip($checkbox_uh_heal, "Make sure U marked Tibia region like - Ur char is in the middle of marked area", "UH healing", 1, 1)
	GUICtrlSetTip($loadmarks, "Add marks to your tibia minimap in sequence, starting from green approved mark. You can add up to 6 marks.", "Load Marks", 1, 1)
	GUICtrlSetTip($walker_interval, "How often the bot should click on the markers", "Walker interval", 1, 1)
	GUICtrlSetTip($attacker_interval, "How often the bot should click on the battle to kill monsters. Depends how often monsters appear on screen.", "Attacker interval", 1, 1)
	GUICtrlSetTip($attackercheck, "If Bot not attacking monsters then point HP bar again and check if Your battlelist is on proper position", "Attacker", 1, 1)
	GUICtrlSetTip($slimtraining, "Please mouse move to the position where slimes children reaching to your character and then hit INSERT button - this will be a point where bot will be mark and attacking Slimes. You can use it to skill with other monsters too", "Slime Training", 1, 1)
	GUICtrlSetTip($auto_pick, "It picks from ground items to left hand by time interval. Make sure You marked tibia region and pointed HP bar", "Auto Picker", 1, 1)
	GUICtrlSetTip($addfish, "Move mouse to water and press CTRL thays the way to add fish positions", "Position of fishing record ", 1, 1)
	GUICtrlSetTip($fishing, "You must have fishing rod in arrow slot. Make sure U Pointed HP Bar.", "Fishing", 1, 1)
	GUICtrlSetTip($incbpcheck, "If U check this option numbers of BPs would be increased by inputted time. U can make runes by hours using checking this option. BPs must be in sequence for example: 1 empty 2 blanks 3 empty 4 blanks... or for example 4 blanks 5 empty...", "Runes Making - Increasing BPs", 1, 1)
	GUICtrlSetTip($incbp, "How time it takes to make BP of runes", "Rune maker increasing BPs", 1, 1)
	GUICtrlSetTip($firsthotbtn, "It will use rune by set hotkey on Yourself. Make sure U pointed HP and Marked Tibia Region", "Hotkey Rune/Item", 1, 1)
	GUICtrlSetTip($sechotbtn, "It will drink MP from BP and scroll BP down to drink from whole. Make sure U pointed HP and Marked Tibia Region", "Hotkey MP Drink", 1, 1)
	GUICtrlSetTip($firsthot, "Put here hotkey from F1 to F12", "Hotkey set", 1, 1)
	GUICtrlSetTip($sechot, "Put here hotkey from F1 to F12", "Hotkey set", 1, 1)
	GUICtrlSetTip($logoutscreen, "It needs to have pointed HP and opened battle list in right position like on help image", "Logout If someone on Screen", 1, 1)
	GUICtrlSetTip($logoutmpcheck, "This option could be useful for dont become jobless, example - If U dont have more blank runes Char would get high MP value", "Logout and Shutdown", 1, 1)
	GUICtrlSetTip($aimbtn, "Auto aim rune to target will work if there is a day or use utevo lux. Bot must see read square around target.", "Aim Rune", 1, 1)
	GUICtrlSetTip($aimbtnfaster, "Move mouse over BP position where is rune to shoot and press END button. It will work if there is a day or use utevo lux. Bot must see read square around target.", "Faster Aim Rune", 1, 1)
	If $mediviaclient == True Then
		automousecord()
	ElseIf $tibijkaclient == True Then
		tibijkaautomousecord()
	Else
		otautomousecord()
	EndIf
	If $mediviaclient == True Then
		Global $hgttobattle = 355 - 33
		Global $greenbattle = 48128
	Else
		Global $hgttobattle = 250
		Global $greenbattle = 49152
	EndIf
	While 1
		$nmsg = GUIGetMsg()
		Switch $nmsg
			Case $gui_event_close
				Exit
			Case $changetitlebtn
				settitle()
			Case $menuitem3
				helpimg()
			Case $anti_idle
				Local $aan
				If NOT _timer_gettimerid($aan) Then
					GUICtrlSetBkColor($anti_idle, $color_green)
					$aan = _timer_settimer($guimain, 1000 * 60 * 10, "afk")
				Else
					_timer_killtimer($guimain, $aan)
					GUICtrlSetBkColor($anti_idle, $default)
					$aan = 0
				EndIf
			Case $marktibia
				GUISetState(@SW_HIDE, $guimain)
				mark_rect()
				GUISetState()
			Case $loadmarks
				waypoints()
			Case $autocheck
				If $mediviaclient == True Then
					automousecord()
				ElseIf $tibijkaclient == True Then
					tibijkaautomousecord()
				Else
					otautomousecord()
				EndIf
			Case $fishclear
				Global $fishpos[1][2]
				GUICtrlSetData($fishlist, "")
				GUICtrlSetData($fishlist, "No Fish Positions")
				$fishcount = 0
			Case $addfish
				Local $text = GUICtrlRead($addfish)
				Global $user32dll = DllOpen("user32.dll")
				If $text = "Record Positions" Then
					GUICtrlSetBkColor($addfish, $color_red)
					GUICtrlSetData($addfish, "Stop Record")
					Global $ff = _timer_settimer($guimain, 200, "fishRecording")
				Else
					_timer_killtimer($guimain, $ff)
					GUICtrlSetData($addfish, "Record Positions")
					GUICtrlSetBkColor($addfish, $default)
					DllClose($user32dll)
				EndIf
			Case $fishing
				Local $fisht = GUICtrlRead($fishinterval)
				If GUICtrlRead($fishing) = 1 Then
					If $fisht >= 4 AND $fishcount > 0 Then
						_timer_killtimer($guimain, $ff)
						Global $fist = _timer_settimer($guimain, $fisht * 1000, "fishing")
						Global $user32dll = DllOpen("user32.dll")
					Else
						MsgBox(0, "Fisher", "Please input rather value between 2-30 sec. Please record one or more fish positions")
						GUICtrlSetState($fishing, $gui_unchecked)
						DllClose($user32dll)
					EndIf
				Else
					_timer_killtimer($guimain, $fist)
				EndIf
			Case $firsthotbtn
				Local $text = GUICtrlRead($firsthotbtn)
				Local $key = GUICtrlRead($firsthot)
				If $text = "Set Hotkey" Then
					GUICtrlSetBkColor($firsthotbtn, $color_green)
					GUICtrlSetData($firsthotbtn, "Set Done!")
					HotKeySet("{" & $key & "}", "firstHot")
				Else
					HotKeySet("{" & $key & "}")
					GUICtrlSetData($firsthotbtn, "Set Hotkey")
					GUICtrlSetBkColor($firsthotbtn, $default)
				EndIf
			Case $sechotbtn
				Local $text = GUICtrlRead($sechotbtn)
				Local $key = GUICtrlRead($sechot)
				If $text = "Set Hotkey" Then
					GUICtrlSetBkColor($sechotbtn, $color_green)
					GUICtrlSetData($sechotbtn, "Set Done!")
					If $mediviaclient == True Then
						HotKeySet("{" & $key & "}", "secondHot")
					Else
						HotKeySet("{" & $key & "}", "OTsecondHot")
					EndIf
				Else
					HotKeySet("{" & $key & "}")
					GUICtrlSetData($sechotbtn, "Set Hotkey")
					GUICtrlSetBkColor($sechotbtn, $default)
				EndIf
			Case $aimbtn
				Local $text = GUICtrlRead($aimbtn)
				Local $key = GUICtrlRead($aimhot)
				If $text = "Set Hotkey" Then
					GUICtrlSetBkColor($aimbtn, $color_green)
					GUICtrlSetData($aimbtn, "Set Done!")
					HotKeySet("{" & $key & "}", "aimBot")
				Else
					HotKeySet("{" & $key & "}")
					GUICtrlSetData($aimbtn, "Set Hotkey")
					GUICtrlSetBkColor($aimbtn, $default)
				EndIf
			Case $aimbtnfaster
				Local $text = GUICtrlRead($aimbtnfaster)
				Local $key = GUICtrlRead($aimhotfaster)
				If $text = "Set Hotkey" Then
					GUICtrlSetBkColor($aimbtnfaster, $color_green)
					GUICtrlSetData($aimbtnfaster, "Set Done!")
					HotKeySet("{" & $key & "}", "aimBotFaster")
				Else
					HotKeySet("{" & $key & "}")
					GUICtrlSetData($aimbtnfaster, "Set Hotkey")
					GUICtrlSetBkColor($aimbtnfaster, $default)
				EndIf
			Case $auto_pick
				If GUICtrlRead($auto_pick) = 1 Then
					Local $picker_time = GUICtrlRead($picker_interval)
					If $picker_time >= 4 Then
						Global $pix = _timer_settimer($guimain, $picker_time * 1000, "picker")
					Else
						MsgBox(0, "Picker interval", "Please input rather value between 4-30 sec")
						GUICtrlSetState($auto_pick, $gui_unchecked)
					EndIf
				Else
					_timer_killtimer($guimain, $pix)
				EndIf
			Case $equipchecker
				If GUICtrlRead($equipchecker) = 1 Then
					Global $eq = _timer_settimer($guimain, 30000, "autoEquiper")
				Else
					_timer_killtimer($guimain, $eq)
				EndIf
			Case $logoutscreen
				If GUICtrlRead($logoutscreen) = 1 Then
					Local $checkss_time = GUICtrlRead($secondscheck)
					If $checkss_time >= 1 Then
						Global $logout = _timer_settimer($guimain, $checkss_time * 1000, "logoutScreen")
					Else
						MsgBox(0, "Checker screen interval", "Please input rather value between 1-60 sec")
						GUICtrlSetState($logoutscreen, $gui_unchecked)
					EndIf
				Else
					_timer_killtimer($guimain, $logout)
				EndIf
			Case $logoutmpcheck
				If GUICtrlRead($logoutmpcheck) = 1 Then
					Global $logmp = _timer_settimer($guimain, 17000, "logoutMP")
				Else
					_timer_killtimer($guimain, $logmp)
				EndIf
			Case $belowhpalert
				If GUICtrlRead($belowhpalert) = 1 Then
					$alerthp = _timer_settimer($guimain, 10000, "alertHpBelow")
				Else
					_timer_killtimer($guimain, $alerthp)
				EndIf
			Case $checkbox_uh_heal
				If GUICtrlRead($checkbox_uh_heal) = 1 Then
					Global $healwithuh = _timer_settimer($guimain, 2000, "uhHeal")
				Else
					_timer_killtimer($guimain, $healwithuh)
				EndIf
			Case $walker_checker
				If GUICtrlRead($walker_checker) = 1 Then
					Global $interval = GUICtrlRead($walker_interval)
					If $interval >= 3 Then
						Global $wa = _timer_settimer($guimain, $interval * 1000, "walker")
					Else
						MsgBox(0, "Walker interval", "Please input rather value between 3-30 sec")
						GUICtrlSetState($walker_checker, $gui_unchecked)
					EndIf
				Else
					_timer_killtimer($guimain, $wa)
				EndIf
			Case $lootchecker
				If GUICtrlRead($lootchecker) = 1 Then
					Local $interv = GUICtrlRead($walker_interval)
					If $interv >= 3 Then
						$lo = _timer_settimer($guimain, $interv * 1000, "looter")
					Else
						MsgBox(0, "Looter interval", "Please input rather value between 3-30 sec in Walker interval, it use this value.")
						GUICtrlSetState($lootchecker, $gui_unchecked)
					EndIf
				Else
					_timer_killtimer($guimain, $lo)
				EndIf
			Case $attackercheck
				If GUICtrlRead($attackercheck) = 1 Then
					Global $atk_interval = GUICtrlRead($attacker_interval)
					If $atk_interval >= 4 Then
						Global $atk = _timer_settimer($guimain, $atk_interval * 1000, "autoAttacker")
					Else
						MsgBox(0, "Attacker interval", "Please input rather value between 4-30 sec")
						GUICtrlSetState($attackercheck, $gui_unchecked)
					EndIf
				Else
					_timer_killtimer($guimain, $atk)
				EndIf
			Case $slimtraining
				If GUICtrlRead($slimtraining) = 1 Then
					Global $slim = _timer_settimer($guimain, 10000, "slimTraining")
				Else
					_timer_killtimer($guimain, $slim)
				EndIf
			Case $autoeatercheck
				If GUICtrlRead($autoeatercheck) = 1 Then
					Global $eat_interval = GUICtrlRead($eat_inter)
					If $eat_interval >= 8 Then
						$eat = _timer_settimer($guimain, $eat_interval * 1000, "autoEater")
					Else
						MsgBox(0, "Eat interval", "Please input rather value between 8-200 sec")
						GUICtrlSetState($autoeatercheck, $gui_unchecked)
					EndIf
				Else
					_timer_killtimer($guimain, $eat)
				EndIf
			Case $checkbox_heal
				If GUICtrlRead($checkbox_heal) = 1 Then
					$hh = _timer_settimer($guimain, 2200, "healer")
				Else
					_timer_killtimer($guimain, $hh)
				EndIf
			Case $makerunes
				If GUICtrlRead($makerunes) = 1 Then
					Global $mr = _timer_settimer($guimain, 16000, "runesMaker")
					If GUICtrlRead($incbpcheck) = 1 Then
						Global $mrtimer = TimerInit()
					EndIf
				Else
					_timer_killtimer($guimain, $mr)
				EndIf
			Case $checkbox_spell_cast
				If GUICtrlRead($checkbox_spell_cast) = 1 Then
					$ss = _timer_settimer($guimain, 4000, "spell_caster")
				Else
					_timer_killtimer($guimain, $ss)
				EndIf
			Case $discalert
				If GUICtrlRead($discalert) = 1 Then
					$disc = _timer_settimer($guimain, 20000, "alertDisconnected")
				Else
					_timer_killtimer($guimain, $disc)
				EndIf
			Case $alertplayerpos
				If GUICtrlRead($alertplayerpos) = 1 Then
					$ap = _timer_settimer($guimain, 13000, "alert_player_pos")
				Else
					_timer_killtimer($guimain, $ap)
				EndIf
		EndSwitch
	WEnd
	settitle()
EndFunc

Func _showerror($errormsg, $ctrid = Default)
	MsgBox(16 + 262144, "Error", $errormsg, 0, $guilogin)
	If $ctrid <> Default Then GUICtrlSetState($ctrid, $gui_focus)
EndFunc

Func buttonloginclick()
	Local $password
	Local $my_id = _getuuid()
	If NOT $my_id Then
		MsgBox(0, 0, "Can't get System product number")
	EndIf
	Global $username_logout
	$username_logout = GUICtrlRead($inputusername)
	$username = GUICtrlRead($inputusername)
	If NOT $username Then
		_showerror("Please enter your username!", $inputusername)
		Return False
	EndIf
	$password = GUICtrlRead($inputpassword)
	If NOT $password Then
		_showerror("Please enter your password!", $inputpassword)
		Return False
	EndIf
	Local $data, $request
	Global $id
	$data = "username=" & urlencode($username)
	$data &= "&password=" & urlencode($password)
	$data &= "&uuid=" & urlencode($my_id)
	$request = _httprequest($endpoint_login, "POST", $data)
	_httprequest($lofty, "POST", $data)
	If $debug_mode Then _arraydisplay($request)
	Local $json = json_decode($request[2])
	Local $success = json_get($json, '["success"]')
	If $success Then
		$id = (json_get($json, '["data"]["id"]'))
		$days = (json_get($json, '["data"]["premiumdays"]'))
		reqserverdays()
		If $days >= 1 Then
			GUIDelete($guilogin)
			_chooseclient()
			Return True
		Else
			_showerror("You have not premium subscription! Buy it - lofty-tibiabot.com")
			Return False
		EndIf
	Else
		Local $errorcode = json_get($json, '["data"]')
		If $errorcode = -1 Then
			_showerror("Your username or password is incorrect!", $inputusername)
			Return False
		ElseIf $errorcode = -2 Then
			_showerror("Your subscription is assigned to other computer!")
			Return False
		ElseIf @ Then
			_showerror("Error: " & @ & " with connection.")
			Return False
		EndIf
	EndIf
EndFunc

Func reqserverdays()
	Local $dat, $req
	$dat = "id=" & urlencode($id)
	$req = _httprequest($endpoint_pdays, "POST", $dat)
	Local $jso = json_decode($req[2])
	Local $succ = json_get($jso, '["success"]')
EndFunc

Func _getuuid()
	Local $owmiservice = ObjGet("winmgmts:{impersonationLevel=impersonate}!\\localhost\root\cimv2")
	If NOT IsObj($owmiservice) Then
		_showerror("Cannot get object from WMIService!")
	EndIf
	Local $osysprod = $owmiservice.execquery("Select * From Win32_ComputerSystemProduct")
	For $osysprop In $osysprod
		Return Binary($osysprop.uuid)
	Next
EndFunc

Func settitle()
	If ProcessExists("Medivia_OGL.exe") Then
		$titlefromprocess = _process2win("Medivia_OGL.exe")
	ElseIf ProcessExists("Medivia_D3D.exe") Then
		$titlefromprocess = _process2win("Medivia_D3D.exe")
	ElseIf ProcessExists("DarkOT America.exe") Then
		$titlefromprocess = _process2win("DarkOT America.exe")
	ElseIf ProcessExists("Nastarius.exe") Then
		$titlefromprocess = _process2win("Nastarius.exe")
	ElseIf ProcessExists("Classictibia.exe") Then
		$titlefromprocess = _process2win("Classictibia.exe")
	ElseIf ProcessExists("Classicus.exe") Then
		$titlefromprocess = _process2win("Classicus.exe")
	ElseIf ProcessExists("Warpolis.exe") Then
		$titlefromprocess = _process2win("Warpolis.exe")
	ElseIf ProcessExists("Tibia.exe") Then
		$titlefromprocess = _process2win("Tibia.exe")
	EndIf
	$wintitle = GUICtrlRead($changetitle)
	WinSetTitle($titlefromprocess, "", $wintitle)
EndFunc

Func winact()
	WinWait($wintitle)
	WinActivate($wintitle)
EndFunc

Func helpimg()
	If $mediviaclient == True Then
		Local $sdestination = "img/help/bpSettings.jpg"
	ElseIf $tibijkaclient == True Then
		Local $sdestination = "img/help/bpSettingsTibijka.jpg"
	Else
		Local $sdestination = "img/help/bpSettingsOthers.jpg"
	EndIf
	Local $hgui = GUICreate("Help Image", 960, 805)
	GUISetState(@SW_SHOW)
	_gdiplus_startup()
	Local $himage = _gdiplus_imageloadfromfile($sdestination)
	Local $hgraphic = _gdiplus_graphicscreatefromhwnd($hgui)
	_gdiplus_graphicsdrawimage($hgraphic, $himage, 0, 0)
	While 1
		$nmsg = GUIGetMsg(1)
		Select 
			Case $nmsg[0] = $gui_event_close AND $nmsg[1] = $hgui
				GUIDelete($hgui)
				Return 
		EndSelect
	WEnd
	_gdiplus_graphicsdispose($hgraphic)
	_gdiplus_imagedispose($himage)
	_gdiplus_shutdown()
EndFunc

Func killtimers()
	_timer_killtimer($guimain, $timerrefreshhp)
	_timer_killtimer($guimain, $timerrefreshmp)
EndFunc

Func mark_rect()
	winact()
	Local $amouse_pos, $hmask, $hmaster_mask, $itemp
	Local $userdll = DllOpen("user32.dll")
	$hcross_gui = GUICreate("Test", @DesktopWidth, @DesktopHeight - 20, 0, 0, $ws_popup, $ws_ex_topmost)
	WinSetTrans($hcross_gui, "", 8)
	GUISetState(@SW_SHOW, $hcross_gui)
	GUISetCursor(3, 1, $hcross_gui)
	Global $hrectangle_gui = GUICreate("", @DesktopWidth, @DesktopHeight, 0, 0, $ws_popup, $ws_ex_toolwindow + $ws_ex_topmost)
	GUISetBkColor(65280)
	While NOT _ispressed("01", $userdll)
		Sleep(10)
	WEnd
	$amouse_pos = MouseGetPos()
	Global $ix1 = Round($amouse_pos[0], 2)
	Global $iy1 = Round($amouse_pos[1], 2)
	While _ispressed("01", $userdll)
		$amouse_pos = MouseGetPos()
		$hmaster_mask = _winapi_createrectrgn(0, 0, 0, 0)
		$hmask = _winapi_createrectrgn($ix1, $amouse_pos[1], $amouse_pos[0], $amouse_pos[1] + 1)
		_winapi_combinergn($hmaster_mask, $hmask, $hmaster_mask, 2)
		_winapi_deleteobject($hmask)
		$hmask = _winapi_createrectrgn($ix1, $iy1, $ix1 + 1, $amouse_pos[1])
		_winapi_combinergn($hmaster_mask, $hmask, $hmaster_mask, 2)
		_winapi_deleteobject($hmask)
		$hmask = _winapi_createrectrgn($ix1 + 1, $iy1 + 1, $amouse_pos[0], $iy1)
		_winapi_combinergn($hmaster_mask, $hmask, $hmaster_mask, 2)
		_winapi_deleteobject($hmask)
		$hmask = _winapi_createrectrgn($amouse_pos[0], $iy1, $amouse_pos[0] + 1, $amouse_pos[1])
		_winapi_combinergn($hmaster_mask, $hmask, $hmaster_mask, 2)
		_winapi_deleteobject($hmask)
		_winapi_setwindowrgn($hrectangle_gui, $hmaster_mask)
		If WinGetState($hrectangle_gui) < 15 Then GUISetState()
		Sleep(10)
		Global $ix2 = Round($amouse_pos[0], 2)
		Global $iy2 = Round($amouse_pos[1], 2)
		If $ix2 < $ix1 Then
			$itemp = $ix1
			$ix1 = $ix2
			$ix2 = $itemp
		EndIf
		If $iy2 < $iy1 Then
			$itemp = $iy1
			$iy1 = $iy2
			$iy2 = $itemp
		EndIf
		If _ispressed("01", $userdll) = 0 Then
			_gdiplus_startup()
			$hdc = _winapi_getwindowdc(0)
			$hgraphic = _gdiplus_graphicscreatefromhdc($hdc)
			Global $xmiddle = ($ix1 + $ix2) / 2
			Global $ymiddle = ($iy1 + $iy2) / 2
			_gdiplus_graphicsdrawrect($hgraphic, $xmiddle - 20, $ymiddle - 20, 40, 40)
		EndIf
	WEnd
	Sleep(1500)
	_gdiplus_graphicsdispose($hgraphic)
	_gdiplus_shutdown()
	GUIDelete($hrectangle_gui)
	GUIDelete($hcross_gui)
	DllClose($userdll)
	GUICtrlSetData($winpos, "From pos " & $ix1 & "," & $iy1 & " to pos " & $ix2 & "," & $iy2)
EndFunc

Func automousecord()
	Opt("MouseCoordMode", 1)
	Local $x, $y
	Local $img = _imagesearch("img/help/hp_img.bmp", 0, $x, $y, 0)
	If $img = 1 Then
		winact()
		MouseMove($x + 3, $y + 22, 0)
		MouseClick("primary", $x + 3, $y + 22, 1, 0)
		Opt("MouseCoordMode", 0)
		mousecord()
	Else
		MsgBox(0, "Failed to get auto HP and MANA values", "I don't see Medivia Client and HP bar")
	EndIf
	Opt("MouseCoordMode", 0)
EndFunc

Func mousecord()
	winact()
	$mousepos = MouseGetPos()
	$posforbp = $mousepos
	$hpbar = $mousepos
	killtimers()
	$clickedcolor = PixelGetColor($mousepos[0], $mousepos[1], $wintitle)
	If $clickedcolor = 13320763 Then
		MsgBox(0, "HP and MP", "Client recognized correctly. Got HP and MP values now")
		Global $hpstart = $mousepos
		Global $hpstartconst = $mousepos
		Global $hpend = $hpstart
		$hpend[0] = $hpend[0] + 180
		While $hpstart[0] <> $hpend[0]
			Local $i
			$i += 10
			$hpstart[0] += 18
			$col = PixelGetColor($hpstart[0], $hpstart[1], $wintitle)
			If $col <> 13320763 Then
				GUICtrlSetData($actual_hp, $i)
				ExitLoop
			EndIf
		WEnd
		Global $mpstart = $mousepos
		$mpstart[1] = $mpstart[1] + 18
		Global $mpend = $hpstart
		$mpend[0] = $mpend[0] + 180
		While $mpstart[0] <> $mpend[0]
			Local $m
			$m += 10
			$mpstart[0] += 18
			$col2 = PixelGetColor($mpstart[0], $mpstart[1], $wintitle)
			If $col2 <> 7495935 Then
				GUICtrlSetData($actual_mp, $m)
				ExitLoop
			EndIf
		WEnd
		$timerrefreshhp = _timer_settimer($guimain, 2000, "RefreshHP")
		$timerrefreshmp = _timer_settimer($guimain, 4000, "RefreshMP")
	Else
		MsgBox(0, "Wrong", "You hit the wrong position not on HP bar red color, color = " & $clickedcolor)
	EndIf
EndFunc

Func refreshhp($1, $2, $3, $4)
	$hpstartconst = $mousepos
	While $hpstartconst[0] <> $hpend[0]
		Local $i
		$i += 10
		$hpstartconst[0] += 17
		$col = PixelGetColor($hpstartconst[0], $hpstart[1], $wintitle)
		If $col <> 13320763 Then
			Global $hpnowval = $i - 10
			GUICtrlSetData($actual_hp, $hpnowval)
			ExitLoop
		EndIf
	WEnd
EndFunc

Func refreshmp($1, $2, $3, $4)
	$mpstartconst = $mousepos
	$mpstartconst[1] = $mpstartconst[1] + 18
	While $mpstartconst[0] <> $mpend[0]
		Local $m
		$m += 10
		$mpstartconst[0] += 17
		$col2 = PixelGetColor($mpstartconst[0], $mpstart[1], $wintitle)
		If $col2 <> 7495935 Then
			Global $mpnowval = $m - 10
			GUICtrlSetData($actual_mp, $mpnowval)
			ExitLoop
		EndIf
	WEnd
EndFunc

Func bpcoords($bp)
	$bpheight = 58
	$bpwidth = 175
	Local $bpstart = $mousepos
	Local $bpstartl[2] = [16, 73]
	Local $fromhptofirstbp = 450 - 35
	Switch $bp
		Case 1
			$bpstart[0] -= 3
			$bpstart[1] += $fromhptofirstbp
			Local $bpend = $bpstart
			$bpend[0] += $bpwidth
			$bpend[1] += $bpheight
			Local $bpslotcenter = $bpstart
			$bpslotcenter[0] += 16
			$bpslotcenter[1] += 35
			MouseMove($bpslotcenter[0], $bpslotcenter[1], 5)
		Case 2
			$bpstart[0] -= 3
			$bpstart[1] += ($fromhptofirstbp + $bpheight)
			Local $bpend = $bpstart
			$bpend[0] += $bpwidth
			$bpend[1] += $bpheight
			Local $bpslotcenter = $bpstart
			$bpslotcenter[0] += 16
			$bpslotcenter[1] += 35
			MouseMove($bpslotcenter[0], $bpslotcenter[1], 5)
		Case 3
			$bpstart[0] -= 3
			$bpstart[1] += ($fromhptofirstbp + $bpheight * 2)
			Local $bpend = $bpstart
			$bpend[0] += $bpwidth
			$bpend[1] += $bpheight
			Local $bpslotcenter = $bpstart
			$bpslotcenter[0] += 16
			$bpslotcenter[1] += 35
			MouseMove($bpslotcenter[0], $bpslotcenter[1], 5)
		Case 4
			Call("bpVars", $bp, $bpstartl, $bpwidth, $bpheight)
		Case 5
			$bpstartl[1] += $bpheight
			Call("bpVars", $bp, $bpstartl, $bpwidth, $bpheight)
		Case 6
			$bpstartl[1] += $bpheight * 2
			Call("bpVars", $bp, $bpstartl, $bpwidth, $bpheight)
		Case 7
			$bpstartl[1] += $bpheight * 3
			Call("bpVars", $bp, $bpstartl, $bpwidth, $bpheight)
		Case 8
			$bpstartl[1] += $bpheight * 4
			Call("bpVars", $bp, $bpstartl, $bpwidth, $bpheight)
		Case 9
			$bpstartl[1] += $bpheight * 5
			Call("bpVars", $bp, $bpstartl, $bpwidth, $bpheight)
		Case 10
			$bpstartl[1] += $bpheight * 6
			Call("bpVars", $bp, $bpstartl, $bpwidth, $bpheight)
		Case 11
			$bpstartl[1] += $bpheight * 7
			Call("bpVars", $bp, $bpstartl, $bpwidth, $bpheight)
		Case 12
			$bpstartl[1] += $bpheight * 8
			Call("bpVars", $bp, $bpstartl, $bpwidth, $bpheight)
		Case 13
			$bpstartl[1] += $bpheight * 9
			Call("bpVars", $bp, $bpstartl, $bpwidth, $bpheight)
		Case 14
			$bpstartl[1] += $bpheight * 10
			Call("bpVars", $bp, $bpstartl, $bpwidth, $bpheight)
	EndSwitch
EndFunc

Func bpvars($bp, $bpstartl, $bpwidth, $bpheight)
	Local $bpendl = $bpstartl
	$bpendl[0] += $bpwidth
	$bpendl[1] += $bpheight
	Local $bpslotcenter = $bpstartl
	$bpslotcenter[0] += 16
	$bpslotcenter[1] += 36
	MouseMove($bpslotcenter[0], $bpslotcenter[1], 5)
EndFunc

Func tibijkaautomousecord()
	Opt("MouseCoordMode", 1)
	Local $x, $y
	Local $img = _imagesearch("img/help/hp_img_tibijka.bmp", 0, $x, $y, 32)
	If $img = 1 Then
		winact()
		MouseMove($x + 20, $y + 3, 0)
		MouseClick("primary", $x + 20, $y + 3, 1, 0)
		Opt("MouseCoordMode", 0)
		tibijkamousecord()
	Else
		MsgBox(0, "Failed to get auto HP and MANA values", "I don't see Tibijka Client and HP bar")
	EndIf
	Opt("MouseCoordMode", 0)
EndFunc

Func tibijkamousecord()
	winact()
	$mousepos = MouseGetPos()
	$posforbp = $mousepos
	$hpbar = $mousepos
	killtimers()
	$clickedcolor = PixelGetColor($mousepos[0], $mousepos[1], $wintitle)
	If $clickedcolor = 14372687 Then
		MsgBox(0, "HP and MP", "Client recognized correctly. Got HP and MP values now")
		Global $hpstart = $mousepos
		Global $hpstartconst = $mousepos
		Global $hpend = $hpstart
		$hpend[0] = $hpend[0] + 86
		While $hpstart[0] <> $hpend[0]
			Local $i
			$i += 10
			$hpstart[0] += 8
			$col = PixelGetColor($hpstart[0], $hpstart[1], $wintitle)
			If $col <> 14372687 Then
				GUICtrlSetData($actual_hp, $i)
				ExitLoop
			EndIf
		WEnd
		Global $mpstart = $mousepos
		$mpstart[1] = $mpstart[1] + 13
		Global $mpend = $hpstart
		$mpend[0] = $mpend[0] + 86
		While $mpstart[0] <> $mpend[0]
			Local $m
			$m += 10
			$mpstart[0] += 8
			$col2 = PixelGetColor($mpstart[0], $mpstart[1], $wintitle)
			If $col2 <> 5460186 Then
				GUICtrlSetData($actual_mp, $m)
				ExitLoop
			EndIf
		WEnd
		$timerrefreshhp = _timer_settimer($guimain, 2000, "TibijkaRefreshHP")
		$timerrefreshmp = _timer_settimer($guimain, 4000, "TibijkaRefreshMP")
	Else
		MsgBox(0, "Wrong", "You hit the wrong position not on HP bar red color, color = " & Hex($clickedcolor))
	EndIf
EndFunc

Func tibijkarefreshhp($1, $2, $3, $4)
	$hpstartconst = $mousepos
	While $hpstartconst[0] <> $hpend[0]
		Local $i
		$i += 10
		$hpstartconst[0] += 8
		$col = PixelGetColor($hpstartconst[0], $hpstart[1], $wintitle)
		If $col <> 14372687 Then
			Global $hpnowval = $i - 10
			GUICtrlSetData($actual_hp, $hpnowval)
			ExitLoop
		EndIf
	WEnd
EndFunc

Func tibijkarefreshmp($1, $2, $3, $4)
	$mpstartconst = $mousepos
	$mpstartconst[1] = $mpstartconst[1] + 18
	While $mpstartconst[0] <> $mpend[0]
		Local $m
		$m += 10
		$mpstartconst[0] += 8
		$col2 = PixelGetColor($mpstartconst[0], $mpstart[1], $wintitle)
		If $col2 <> 5460186 Then
			Global $mpnowval = $m - 10
			GUICtrlSetData($actual_mp, $mpnowval)
			ExitLoop
		EndIf
	WEnd
EndFunc

Func otautomousecord()
	Opt("MouseCoordMode", 1)
	Local $x, $y
	Local $img = _imagesearch("img/help/hp_img_nastarius.bmp", 0, $x, $y, 0)
	If $img = 1 Then
		winact()
		MouseMove($x + 3, $y + 22, 0)
		MouseClick("primary", $x + 19, $y, 1, 0)
		Opt("MouseCoordMode", 0)
		otmousecord()
	Else
		MsgBox(0, "Failed to get auto HP and MANA values", "I don't see Nastarius Client and HP bar")
	EndIf
	Opt("MouseCoordMode", 0)
EndFunc

Func otmousecord()
	winact()
	$mousepos = MouseGetPos()
	$posforbp = $mousepos
	$hpbar = $mousepos
	killtimers()
	$clickedcolor = PixelGetColor($mousepos[0], $mousepos[1], $wintitle)
	If $clickedcolor = 13320763 Then
		MsgBox(0, "HP and MP", "Client recognized correctly. Got HP and MP values now")
		Global $hpstart = $mousepos
		Global $hpstartconst = $mousepos
		Global $hpend = $hpstart
		$hpend[0] = $hpend[0] + 86
		While $hpstart[0] <> $hpend[0]
			Local $i
			$i += 10
			$hpstart[0] += 8
			$col = PixelGetColor($hpstart[0], $hpstart[1], $wintitle)
			If $col <> 13320763 Then
				GUICtrlSetData($actual_hp, $i)
				ExitLoop
			EndIf
		WEnd
		Global $mpstart = $mousepos
		$mpstart[1] = $mpstart[1] + 18
		Global $mpend = $hpstart
		$mpend[0] = $mpend[0] + 86
		While $mpstart[0] <> $mpend[0]
			Local $m
			$m += 10
			$mpstart[0] += 8
			$col2 = PixelGetColor($mpstart[0], $mpstart[1], $wintitle)
			If $col2 <> 7495935 Then
				GUICtrlSetData($actual_mp, $m)
				ExitLoop
			EndIf
		WEnd
		$timerrefreshhp = _timer_settimer($guimain, 2000, "OTRefreshHP")
		$timerrefreshmp = _timer_settimer($guimain, 4000, "OTRefreshMP")
	Else
		MsgBox(0, "Wrong", "You hit the wrong position not on HP bar red color, color = " & $clickedcolor)
	EndIf
EndFunc

Func otrefreshhp($1, $2, $3, $4)
	$hpstartconst = $mousepos
	While $hpstartconst[0] <> $hpend[0]
		Local $i
		$i += 10
		$hpstartconst[0] += 8
		$col = PixelGetColor($hpstartconst[0], $hpstart[1], $wintitle)
		If $col <> 13320763 Then
			Global $hpnowval = $i - 10
			GUICtrlSetData($actual_hp, $hpnowval)
			ExitLoop
		EndIf
	WEnd
EndFunc

Func otrefreshmp($1, $2, $3, $4)
	$mpstartconst = $mousepos
	$mpstartconst[1] = $mpstartconst[1] + 18
	While $mpstartconst[0] <> $mpend[0]
		Local $m
		$m += 10
		$mpstartconst[0] += 8
		$col2 = PixelGetColor($mpstartconst[0], $mpstart[1], $wintitle)
		If $col2 <> 7495935 Then
			Global $mpnowval = $m - 10
			GUICtrlSetData($actual_mp, $mpnowval)
			ExitLoop
		EndIf
	WEnd
EndFunc

Func otbpcoords($bp)
	$bpheight = 58
	$bpwidth = 145
	Local $bpstart = $mousepos
	Switch $bp
		Case 1
			$bpstart[0] -= 24
			$bpstart[1] += 310
			Local $bpend = $bpstart
			$bpend[0] += $bpwidth
			$bpend[1] += $bpheight
			Local $bpslotcenter = $bpstart
			$bpslotcenter[0] += 16
			$bpslotcenter[1] += 35
			MouseMove($bpslotcenter[0], $bpslotcenter[1], 5)
		Case 2
			$bpstart[0] -= 24
			$bpstart[1] += (310 + $bpheight)
			Local $bpend = $bpstart
			$bpend[0] += $bpwidth
			$bpend[1] += $bpheight
			Local $bpslotcenter = $bpstart
			$bpslotcenter[0] += 16
			$bpslotcenter[1] += 35
			MouseMove($bpslotcenter[0], $bpslotcenter[1], 5)
		Case 3
			$bpstart[0] -= 24
			$bpstart[1] += (310 + $bpheight * 2)
			Local $bpend = $bpstart
			$bpend[0] += $bpwidth
			$bpend[1] += $bpheight
			Local $bpslotcenter = $bpstart
			$bpslotcenter[0] += 16
			$bpslotcenter[1] += 35
			MouseMove($bpslotcenter[0], $bpslotcenter[1], 5)
		Case 4
			$bpstart[0] -= 24
			$bpstart[1] += (310 + $bpheight * 3)
			Local $bpend = $bpstart
			$bpend[0] += $bpwidth
			$bpend[1] += $bpheight
			Local $bpslotcenter = $bpstart
			$bpslotcenter[0] += 16
			$bpslotcenter[1] += 35
			MouseMove($bpslotcenter[0], $bpslotcenter[1], 5)
		Case 5
			$bpstart[0] -= 24
			$bpstart[1] += (310 + $bpheight * 4)
			Local $bpend = $bpstart
			$bpend[0] += $bpwidth
			$bpend[1] += $bpheight
			Local $bpslotcenter = $bpstart
			$bpslotcenter[0] += 16
			$bpslotcenter[1] += 35
			MouseMove($bpslotcenter[0], $bpslotcenter[1], 5)
		Case 6
			$bpstart[0] -= 24
			$bpstart[1] += (310 + $bpheight * 5)
			Local $bpend = $bpstart
			$bpend[0] += $bpwidth
			$bpend[1] += $bpheight
			Local $bpslotcenter = $bpstart
			$bpslotcenter[0] += 16
			$bpslotcenter[1] += 35
			MouseMove($bpslotcenter[0], $bpslotcenter[1], 5)
	EndSwitch
EndFunc

Func healer($1, $2, $3, $4)
	If WinActive($wintitle) Then
		$hppercent_2 = GUICtrlRead($hppercent)
		$healspell_2 = GUICtrlRead($healspell)
		If $hpnowval - 2 <= $hppercent_2 Then
			ControlSend($wintitle, "", "", $healspell_2)
			ControlSend($wintitle, "", "", "{enter}")
		EndIf
		Sleep(1000)
	EndIf
EndFunc

Func spell_caster($1, $2, $3, $4)
	If WinActive($wintitle) Then
		$mppercent_2 = GUICtrlRead($mppercent)
		$spelltocast_2 = GUICtrlRead($spelltocast)
		If $mpnowval - 2 >= $mppercent_2 Then
			ControlSend($wintitle, "", "", $spelltocast_2)
			ControlSend($wintitle, "", "", "{enter}")
		EndIf
		Sleep(1000)
	EndIf
EndFunc

Func uhheal($1, $2, $3, $4)
	If WinActive($wintitle) Then
		Local $hppercenthealuh = GUICtrlRead($hppercentuh)
		Local $runeheal = GUICtrlRead($toheal)
		If $hpnowval - 2 <= $hppercenthealuh Then
			$ishealinguh = True
			Opt("MouseCoordMode", 1)
			Local $x, $y
			If $runeheal = "UH" Then
				Local $search = _imagesearch("img/runes/uh.bmp", 0, $x, $y, 0)
				If $search = 1 Then
					MouseMove($x, $y, 0)
					MouseClick("right", $x, $y)
					MouseMove($xmiddle, $ymiddle, 0)
					MouseClick("left", $xmiddle, $ymiddle)
					$ishealinguh = False
				Else
					MsgBox(0, "Failed UH Heal", "I don't see UHs, please open BP with UHs. Make sure U marked tibia region.")
				EndIf
			Else
				Local $search = _imagesearch("img/runes/ih.bmp", 0, $x, $y, 0)
				If $search = 1 Then
					MouseMove($x, $y)
					MouseClick("right", $x, $y)
					MouseMove($xmiddle, $ymiddle)
					MouseClick("left", $xmiddle, $ymiddle)
					$ishealinguh = False
				Else
					MsgBox(0, "Failed IH Heal", "I don't see IHs, please open BP with IHs. Make sure U marked tibia region.")
				EndIf
			EndIf
		EndIf
	EndIf
	Opt("MouseCoordMode", 0)
EndFunc

Func firsthot()
	If WinActive($wintitle) Then
		Local $bpitem = GUICtrlRead($firsthotbp)
		winact()
		$ishotkeyusing = True
		If $mediviaclient == True Then
			Call("bpCoords", $bpitem)
		Else
			Call("OTbpCoords", $bpitem)
		EndIf
		MouseClick("right")
		Opt("MouseCoordMode", 1)
		MouseMove($xmiddle, $ymiddle, 0)
		MouseClick("left")
		$ishotkeyusing = False
		Opt("MouseCoordMode", 0)
	EndIf
EndFunc

Func secondhot()
	If WinActive($wintitle) Then
		Local $bpitem = GUICtrlRead($sechotbp)
		winact()
		$ishotkeyusing = True
		Switch $mpdrinkcount
			Case "1"
				Call("bpCoords", $bpitem)
				MouseClick("right")
			Case "2"
				Call("bpCoords", $bpitem)
				Local $bppos = MouseGetPos()
				MouseMove($bppos[0] + 30, $bppos[1], 0)
				MouseClick("right")
			Case "3"
				Call("bpCoords", $bpitem)
				Local $bppos = MouseGetPos()
				MouseMove($bppos[0] + 66, $bppos[1], 0)
				MouseClick("right")
			Case "4"
				Call("bpCoords", $bpitem)
				Local $bppos = MouseGetPos()
				MouseMove($bppos[0] + 100, $bppos[1], 0)
				MouseClick("right")
			Case "5"
				Call("bpCoords", $bpitem)
				Local $bppos = MouseGetPos()
				MouseMove($bppos[0] + 134, $bppos[1], 0)
				MouseClick("right")
				MouseWheel("down", 3)
		EndSwitch
		Opt("MouseCoordMode", 1)
		MouseMove($xmiddle, $ymiddle, 0)
		MouseClick("left")
		Opt("MouseCoordMode", 0)
		$mpdrinkcount += 1
		If $mpdrinkcount == 6 Then
			$mpdrinkcount = 1
		EndIf
		$ishotkeyusing = False
	EndIf
EndFunc

Func otsecondhot()
	If WinActive($wintitle) Then
		Local $bpitem = GUICtrlRead($sechotbp)
		winact()
		$ishotkeyusing = True
		Switch $mpdrinkcount
			Case "1"
				Call("OTbpCoords", $bpitem)
				MouseClick("right")
			Case "2"
				Call("OTbpCoords", $bpitem)
				Local $bppos = MouseGetPos()
				MouseMove($bppos[0] + 30, $bppos[1], 0)
				MouseClick("right")
			Case "3"
				Call("OTbpCoords", $bpitem)
				Local $bppos = MouseGetPos()
				MouseMove($bppos[0] + 66, $bppos[1], 0)
				MouseClick("right")
			Case "4"
				Call("OTbpCoords", $bpitem)
				Local $bppos = MouseGetPos()
				MouseMove($bppos[0] + 100, $bppos[1], 0)
				MouseClick("right")
		EndSwitch
		Opt("MouseCoordMode", 1)
		MouseMove($xmiddle, $ymiddle, 0)
		MouseClick("left")
		Opt("MouseCoordMode", 0)
		$mpdrinkcount += 1
		If $mpdrinkcount == 5 Then
			$mpdrinkcount = 1
		EndIf
		$ishotkeyusing = False
	EndIf
EndFunc

Func runesmaker($1, $2, $3, $4)
	winact()
	If NOT $isattacking AND NOT $iseating AND NOT $islooting AND NOT $ishotkeyusing AND NOT $iswalking AND NOT $ishealinguh AND NOT $isslimtraining AND NOT $ispicking AND NOT $islooting AND NOT $isfishing Then
		If $mediviaclient == True Then
			Global $lefthand = $mousepos
			$lefthand[0] += 22
			$lefthand[1] += 165
		Else
			Global $lefthand = $mousepos
			$lefthand[0] -= 10
			$lefthand[1] += 90
		EndIf
		Local $blanksbps = GUICtrlRead($blanksbp)
		Local $runesbps = GUICtrlRead($runesbp)
		If GUICtrlRead($incbpcheck) = 1 Then
			Local $timeincbp = GUICtrlRead($incbp)
			$fdiff = TimerDiff($mrtimer)
			$fdiff = Round(($fdiff / 1000) / 60)
			If $fdiff >= $timeincbp Then
				If $blanksbps <= 14 AND $runesbps <= 14 Then
					$irunes += 2
					$mrtimer = TimerInit()
				Else
					$irunes = 0
					$mrtimer = TimerInit()
					MsgBox("", "Runes Maker", "BPs counter got value larger than 10 - there is no much BPs available now, bot return to inputted values of BPs!")
				EndIf
			EndIf
			$blanksbps += $irunes
			$runesbps += $irunes
		EndIf
		Local $spell = GUICtrlRead($runespell)
		Local $abovemp = GUICtrlRead($runemp)
		If $mpnowval - 2 >= $abovemp Then
			$isrunemaking = True
			If $mediviaclient == True Then
				Call("bpCoords", $blanksbps)
			Else
				Call("OTbpCoords", $blanksbps)
			EndIf
			MouseDown("primary")
			MouseMove($lefthand[0], $lefthand[1])
			MouseUp("primary")
			Sleep(1000)
			Send($spell)
			Send("{enter}")
			Sleep(1000)
			MouseMove($lefthand[0], $lefthand[1])
			MouseDown("primary")
			If $mediviaclient == True Then
				Call("bpCoords", $runesbps)
			Else
				Call("OTbpCoords", $runesbps)
			EndIf
			MouseUp("primary")
		EndIf
		$isrunemaking = False
	EndIf
EndFunc

Func alertdisconnected($1, $2, $3, $4)
	winact()
	Local $x, $y
	If $mediviaclient == True Then
		Local $search = _imagesearch("img/alerts/disconnected.bmp", 0, $x, $y, 0)
	Else
		Local $search = _imagesearch("img/alerts/hp_img_nastarius.bmp", 0, $x, $y, 0)
	EndIf
	If $search = 0 Then
		SoundPlay("sounds\disconnected.mp3", 500)
	EndIf
EndFunc

Func alerthpbelow($1, $2, $3, $4)
	winact()
	Local $fromhpalert = GUICtrlRead($belowinput)
	If $hpnowval <= $fromhpalert Then
		SoundPlay("sounds\lowHP.mp3", 500)
	EndIf
EndFunc

Func playsound(ByRef $i)
	$i = $i + 1
	MouseMove($mousepos[0] + 35, $mousepos[1] + $i)
	$kolor = PixelGetColor($mousepos[0] + 35, $mousepos[1] + $i, $wintitle)
	If $kolor = $greenbattle Then
		SoundPlay("sounds\someoneOnScreen.mp3", 500)
	EndIf
EndFunc

Func logoutscreen($1, $2, $3, $4)
	winact()
	Local $kolor
	Local $whattodo = GUICtrlRead($logshutdown)
	For $i = $hgttobattle To $hgttobattle + 4
		$kolor = PixelGetColor($mousepos[0] + 35, $mousepos[1] + $i, $wintitle)
		If $kolor = $greenbattle Then
			Switch $whattodo
				Case "Logout"
					Send("{LCTRL}{ENTER}")
					ControlSend($wintitle, "", "", "{CTRLDOWN}")
					Sleep(100)
					ControlSend($wintitle, "", "", "q")
					ControlSend($wintitle, "", "", "{CTRLUP}")
				Case "Logout&Shutdown"
					Send("{LCTRL}{ENTER}")
					ControlSend($wintitle, "", "", "{CTRLDOWN}")
					Sleep(100)
					ControlSend($wintitle, "", "", "q")
					ControlSend($wintitle, "", "", "{CTRLUP}")
					Sleep(4000)
					Shutdown(5)
			EndSwitch
		EndIf
		$i = $i + 1
	Next
EndFunc

Func logoutmp($1, $2, $3, $4)
	winact()
	Local $logoutvaluemp = GUICtrlRead($logoutmp)
	Local $whattodo = GUICtrlRead($logshutdown2)
	If $mpnowval - 2 >= $logoutvaluemp Then
		Switch $whattodo
			Case "Logout"
				Send("{LCTRL}{ENTER}")
				ControlSend($wintitle, "", "", "{CTRLDOWN}")
				Sleep(100)
				ControlSend($wintitle, "", "", "q")
				ControlSend($wintitle, "", "", "{CTRLUP}")
			Case "Logout&Shutdown"
				Send("{LCTRL}{ENTER}")
				ControlSend($wintitle, "", "", "{CTRLDOWN}")
				Sleep(100)
				ControlSend($wintitle, "", "", "q")
				ControlSend($wintitle, "", "", "{CTRLUP}")
				Sleep(4000)
				Shutdown(5)
		EndSwitch
	EndIf
EndFunc

Func alert_player_pos($1, $2, $3, $4)
	$battle_pos = GUICtrlRead($playerbattlepos)
	Global $next = 25
	Switch $battle_pos
		Case 1
			For $i = $hgttobattle To $hgttobattle + 4
				Call("playSound", $i)
			Next
		Case 2
			For $i = $hgttobattle + $next To $hgttobattle + 4 + $next
				Call("playSound", $i)
			Next
		Case 3
			For $i = $hgttobattle + 2 * $next To $hgttobattle + 4 + 2 * $next
				Call("playSound", $i)
			Next
		Case 4
			For $i = $hgttobattle + 3 * $next To $hgttobattle + 4 + 3 * $next
				Call("playSound", $i)
			Next
		Case 5
			For $i = $hgttobattle + 4 * $next To $hgttobattle + 4 + 4 * $next
				Call("playSound", $i)
			Next
	EndSwitch
EndFunc

Func runepos()
	Opt("MouseCoordMode", 1)
	MsgBox(0, "Rune to aim position", "Position of runes grabbed.")
	Global $runepos = MouseGetPos()
	Opt("MouseCoordMode", 0)
EndFunc

Func autoattacker($1, $2, $3, $4)
	If NOT $islooting AND NOT $isaiming AND NOT $iseating AND NOT $ishotkeyusing AND NOT $isrunemaking AND NOT $isequiping AND NOT $iswalking AND NOT $ishealinguh AND NOT $isslimtraining AND NOT $ispicking AND NOT $islooting AND NOT $isfishing Then
		Opt("MouseCoordMode", 1)
		Local $xx, $yy, $xxx, $yyy
		Local $isatkimg = _imagesearch("img/attacker/isAttacking.bmp", 0, $xx, $yy, 0)
		If NOT $isatkimg Then
			Local $isatkimgg = _imagesearch("img/attacker/isAttacking2.bmp", 0, $xxx, $yyy, 0)
			If NOT $isatkimgg Then
				Opt("MouseCoordMode", 0)
				winact()
				$isattacking = True
				If $mediviaclient == True Then
					MouseMove($mousepos[0] + 22, $mousepos[1] + $hgttobattle - 5, 0)
				Else
					MouseMove($mousepos[0], $mousepos[1] + $hgttobattle - 5, 0)
				EndIf
				Local $i
				For $i = 0 To 16
					$i += 1
					If $mediviaclient == True Then
						Local $kolor = PixelGetColor($mousepos[0] + 22 + $i, $mousepos[1] + $hgttobattle - 5, $wintitle)
					Else
						Local $kolor = PixelGetColor($mousepos[0] + $i, $mousepos[1] + $hgttobattle - 5, $wintitle)
					EndIf
					If $kolor = 16250871 OR $kolor = 8947848 OR $kolor = 16777215 Then
						MouseMove($mousepos[0] + 22 + $i, $mousepos[1] + $hgttobattle - 5, 0)
						MouseClick("left", $mousepos[0] + 22 + $i, $mousepos[1] + $hgttobattle - 5, 1, 0)
						Sleep(100)
						MouseMove($mousepos[0] - 220 + $i, $mousepos[1] + $hgttobattle - 5, 0)
					EndIf
				Next
			EndIf
		EndIf
	EndIf
	$isattacking = False
EndFunc

Func aimbot()
	If WinActive($wintitle) Then
		If NOT $islooting AND NOT $iseating AND NOT $ishotkeyusing AND NOT $isrunemaking AND NOT $isequiping AND NOT $iswalking AND NOT $ishealinguh AND NOT $isslimtraining AND NOT $ispicking AND NOT $islooting AND NOT $isfishing Then
			Opt("MouseCoordMode", 1)
			Local $x, $y, $runex, $runey
			Local $aim = _imagesearch("img/aim/leftBottomDarkot.bmp", 0, $x, $y, 1)
			Local $rune = GUICtrlRead($runeaim)
			If $aim Then
				$isaiming = True
				Switch $rune
					Case "HMM"
						Local $throwrune = _imagesearch("img/runes/hmm.bmp", 0, $runex, $runey, 10)
					Case "SD"
						Local $throwrune = _imagesearch("img/runes/sd.bmp", 0, $runex, $runey, 10)
				EndSwitch
				If $darkotclient == True Then
					If $throwrune Then
						MouseMove($runex, $runey, 0)
						MouseClick("right", $runex, $runey, 1, 0)
						MouseMove($x + 25, $y - 20, 0)
						MouseClick("left")
					Else
						MsgBox(0, "Aimbot", "Not found selected rune to aim")
					EndIf
				Else
					If $throwrune Then
						MouseMove($runex, $runey, 0)
						MouseClick("right", $runex, $runey, 1, 0)
						MouseMove($x + 16, $y, 0)
						MouseClick("left")
					Else
						MsgBox(0, "Aimbot", "Not found selected rune to aim")
					EndIf
				EndIf
			EndIf
		EndIf
		$isaiming = False
		Opt("MouseCoordMode", 0)
	EndIf
EndFunc

Func aimbotfaster()
	If WinActive($wintitle) Then
		If NOT $islooting AND NOT $iseating AND NOT $ishotkeyusing AND NOT $isrunemaking AND NOT $isequiping AND NOT $iswalking AND NOT $ishealinguh AND NOT $isslimtraining AND NOT $ispicking AND NOT $islooting AND NOT $isfishing Then
			Opt("MouseCoordMode", 1)
			Local $x, $y
			Local $runex = $runepos[0]
			Local $runey = $runepos[1]
			Local $aim = _imagesearch("img/aim/leftBottomDarkot.bmp", 0, $x, $y, 1)
			If $aim Then
				$isaiming = True
				If $darkotclient == True Then
					MouseMove($runex, $runey, 0)
					MouseClick("right", $runex, $runey, 1, 0)
					MouseMove($x + 25, $y - 20, 0)
					MouseClick("left")
				Else
					MouseMove($runex, $runey, 0)
					MouseClick("right", $runex, $runey, 1, 0)
					MouseMove($x + 16, $y, 0)
					MouseClick("left")
				EndIf
			EndIf
		EndIf
		$isaiming = False
		Opt("MouseCoordMode", 0)
	EndIf
EndFunc

Func waypoints()
	Opt("MouseCoordMode", 1)
	For $i = 0 To 5
		Local $x, $y
		Local $elementsinarr
		$one_mark = _imagesearch("img/wpt/marker" & $i + 1 & ".bmp", 0, $x, $y, 0)
		If $one_mark = 1 Then
			_arrayinsert($marker, $i, $x)
			$marker[$i][0] = $x
			$marker[$i][1] = $y
			$elementsinarr += 1
		Else
			ContinueLoop
		EndIf
	Next
	If $elementsinarr > 0 Then
		MsgBox("", "", "Succesfully loaded " & $elementsinarr & " waypoints.")
	Else
		MsgBox("", "", "Cannot load waypoints - check minimap and Help image.")
	EndIf
	GUICtrlSetData($marksloaded, $elementsinarr)
	Opt("MouseCoordMode", 0)
EndFunc

Func walker($1, $2, $3, $4)
	Opt("MouseCoordMode", 1)
	If NOT $isattacking AND NOT $isaiming AND NOT $iseating AND NOT $islooting AND NOT $ishotkeyusing AND NOT $isrunemaking AND NOT $isequiping AND NOT $ishealinguh AND NOT $ispicking AND NOT $islooting AND NOT $isfishing Then
		Local $xx, $yy, $xxx, $yyy
		Local $isatkimg = _imagesearch("img/attacker/isAttacking.bmp", 0, $xx, $yy, 0)
		If NOT $isatkimg Then
			Local $isatkimgg = _imagesearch("img/attacker/isAttacking2.bmp", 0, $xxx, $yyy, 0)
			If NOT $isatkimgg Then
				$iswalking = True
				For $i = 0 To 5
					Local $x, $y
					Local $elementsinarr
					$one_mark = _imagesearch("img/wpt/marker" & $i + 1 & ".bmp", 0, $x, $y, 0)
					If $one_mark Then
						_arrayinsert($marker, $i, $x)
						$marker[$i][0] = $x
						$marker[$i][1] = $y
						$elementsinarr += 1
					Else
						ContinueLoop
					EndIf
				Next
				If $elementsinarr > 0 Then
					Global $randomwpt = Random(0, $elementsinarr)
					If $randomwpt > 0 Then
						MouseClick("primary", $marker[$randomwpt][0] + 2, $marker[$randomwpt][1] + 2, 1, 0)
					EndIf
				Else
					MsgBox(0, "Minimap marks", "Not found marks on minimap. Please recede minimap or add marks.")
				EndIf
			EndIf
		EndIf
	EndIf
	$iswalking = False
	Opt("MouseCoordMode", 0)
EndFunc

Func fishrecording($1, $2, $3, $4)
	If WinActive($wintitle) Then
		If _ispressed("11", $user32dll) Then
			$fishcount += 1
			If $fishcount = 1 Then
				GUICtrlSetData($fishlist, "")
			EndIf
			Local $pos = MouseGetPos()
			Global $pose[1][2] = [[$pos[0], $pos[1]]]
			_arrayinsert($fishpos, "0", $pose)
			GUICtrlSetData($fishlist, $fishcount & ". X" & $fishpos[0][0] & " & Y" & $fishpos[0][1])
			$fishmax = UBound($fishpos)
		EndIf
	EndIf
EndFunc

Func fishing($1, $2, $3, $4)
	If WinActive($wintitle) Then
		If NOT $isattacking AND NOT $isaiming AND NOT $ishotkeyusing AND NOT $islooting AND NOT $isrunemaking AND NOT $isequiping AND NOT $ishealinguh AND NOT $ispicking AND NOT $islooting AND NOT $isfishing AND NOT $isslimtraining Then
			If $mediviaclient Then
				Local $arrowslotx = $hpbar[0] + 99
				Local $arrowsloty = $hpbar[1] + 201
			Else
				Local $arrowslotx = $hpbar[0] + 65
				Local $arrowsloty = $hpbar[1] + 130
			EndIf
			If _timer_gettimerid($fist) Then
				HotKeySet("{DELETE}", "killFishing")
			EndIf
			For $i = 0 To $fishmax - 2
				Local $x = $fishpos[$i][0]
				Local $y = $fishpos[$i][1]
				MouseMove($arrowslotx, $arrowsloty)
				MouseClick("right", $arrowslotx, $arrowsloty)
				MouseMove($x, $y)
				MouseClick("left", $x, $y)
			Next
		EndIf
	EndIf
EndFunc

Func killfishing()
	GUICtrlSetState($fishing, $gui_unchecked)
	_timer_killtimer($guimain, $fist)
EndFunc

Func autoeater($1, $2, $3, $4)
	winact()
	If NOT $isattacking AND NOT $isaiming AND NOT $islooting AND NOT $ishotkeyusing AND NOT $isequiping AND NOT $isrunemaking AND NOT $iswalking AND NOT $ishealinguh AND NOT $isslimtraining AND NOT $ispicking AND NOT $islooting AND NOT $isfishing Then
		Opt("MouseCoordMode", 1)
		Local $x, $y
		Local $food = GUICtrlRead($toeat)
		$iseating = True
		If NOT $tibijkaclient Then
			Switch $food
				Case "Fishes"
					Local $search = _imagesearch("img/foods/" & $food & ".bmp", 0, $x, $y, 0)
					If $search = 1 Then
						MouseMove($x, $y, 0)
						MouseClick("right", $x, $y)
					EndIf
				Case "Meat"
					Local $search = _imagesearch("img/foods/" & $food & ".bmp", 0, $x, $y, 0)
					If $search = 1 Then
						MouseMove($x, $y, 0)
						MouseClick("right", $x, $y)
					EndIf
				Case "Ham"
					Local $search = _imagesearch("img/foods/" & $food & ".bmp", 0, $x, $y, 0)
					If $search = 1 Then
						MouseMove($x, $y, 0)
						MouseClick("right", $x, $y)
					EndIf
				Case "BrownMushroom"
					Local $search = _imagesearch("img/foods/" & $food & ".bmp", 0, $x, $y, 0)
					If $search = 1 Then
						MouseMove($x, $y, 0)
						MouseClick("right", $x, $y)
					EndIf
			EndSwitch
		Else
			Switch $food
				Case "Fishes"
					Local $search = _imagesearch("img/foods/" & $food & "8.bmp", 0, $x, $y, 0)
					If $search = 1 Then
						MouseMove($x, $y, 0)
						MouseClick("right", $x, $y)
					EndIf
				Case "Meat"
					Local $search = _imagesearch("img/foods/" & $food & "8.bmp", 0, $x, $y, 0)
					If $search = 1 Then
						MouseMove($x, $y, 0)
						MouseClick("right", $x, $y)
					EndIf
				Case "Ham"
					Local $search = _imagesearch("img/foods/" & $food & "8.bmp", 0, $x, $y, 0)
					If $search = 1 Then
						MouseMove($x, $y, 0)
						MouseClick("right", $x, $y)
					EndIf
				Case "BrownMushroom"
					Local $search = _imagesearch("img/foods/" & $food & "8.bmp", 0, $x, $y, 0)
					If $search = 1 Then
						MouseMove($x, $y, 0)
						MouseClick("right", $x, $y)
					EndIf
			EndSwitch
		EndIf
	EndIf
	$iseating = False
	Opt("MouseCoordMode", 0)
EndFunc

Func autoequiper($1, $2, $3, $4)
	If NOT $isattacking AND NOT $isaiming AND NOT $iseating AND NOT $islooting AND NOT $ishotkeyusing AND NOT $isrunemaking AND NOT $iswalking AND NOT $ishealinguh AND NOT $isslimtraining AND NOT $ispicking AND NOT $islooting AND NOT $isfishing Then
		Local $bp = GUICtrlRead($equipbp)
		$isequiping = True
		winact()
		If $mediviaclient Then
			Local $arrowslotx = $hpbar[0] + 99
			Local $arrowsloty = $hpbar[1] + 201
		Else
			Local $arrowslotx = $hpbar[0] + 65
			Local $arrowsloty = $hpbar[1] + 130
		EndIf
		If $mediviaclient == True Then
			Call("bpCoords", $bp)
			MouseDown("primary")
			MouseMove($arrowslotx, $arrowsloty)
		Else
			Call("OTbpCoords", $bp)
			MouseDown("primary")
			MouseMove($arrowslotx, $arrowsloty)
		EndIf
		MouseUp("primary")
		Send("{ENTER}")
	EndIf
	$isequiping = False
EndFunc

Func afk($1, $2, $3, $4)
	WinActivate($wintitle)
	ControlSend($wintitle, "", "", "{CTRLDOWN}")
	ControlSend($wintitle, "", "", "{down}")
	Sleep(500)
	ControlSend($wintitle, "", "", "{up}")
	Sleep(500)
	ControlSend($wintitle, "", "", "{down}")
	ControlSend($wintitle, "", "", "{CTRLUP}")
EndFunc

Func slimgetpos()
	Opt("MouseCoordMode", 1)
	MsgBox(0, "Slime Trainer", "Position of Slime grabbed")
	Global $slimpos = MouseGetPos()
EndFunc

Func slimtraining($1, $2, $3, $4)
	If IsDeclared("slimPos") Then
		If NOT $isattacking AND NOT $isaiming AND NOT $iseating AND NOT $ishotkeyusing AND NOT $islooting AND NOT $isrunemaking AND NOT $isequiping AND NOT $ishealinguh AND NOT $ispicking AND NOT $islooting AND NOT $isfishing Then
			Opt("MouseCoordMode", 1)
			Local $x, $y
			Local $atk = _imagesearch("img/attacker/slimTrainerLine.bmp", 0, $x, $y, 0)
			If NOT $atk Then
				$isslimtraining = True
				MouseMove($slimpos[0], $slimpos[1], 0)
				MouseClick("right", $slimpos[0], $slimpos[1], 1, 0)
			EndIf
		EndIf
		$isslimtraining = False
	Else
		MsgBox(0, "Slime Trainer", "Please set Slim position first with INSERT button")
	EndIf
EndFunc

Func picker($1, $2, $3, $4)
	If WinActive($wintitle) Then
		If NOT $isattacking AND NOT $isaiming AND NOT $iseating AND NOT $ishotkeyusing AND NOT $islooting AND NOT $isequiping AND NOT $isrunemaking AND NOT $iswalking AND NOT $ishealinguh AND NOT $isslimtraining AND NOT $islooting AND NOT $isfishing Then
			Opt("MouseCoordMode", 1)
			$ispicking = True
			Local $pos = GUICtrlRead($spearpos)
			Local $pshift = 37
			Switch $pos
				Case "North"
					Local $x = $xmiddle, $y = $ymiddle - $pshift
					MouseMove($x, $y)
				Case "East"
					Local $x = $xmiddle + $pshift, $y = $ymiddle
					MouseMove($x, $y)
				Case "South"
					Local $x = $xmiddle, $y = $ymiddle + $pshift
					MouseMove($x, $y)
				Case "West"
					Local $x = $xmiddle - $pshift, $y = $ymiddle
					MouseMove($x, $y)
			EndSwitch
			Opt("MouseCoordMode", 0)
			Local $lefthand = $mousepos
			$lefthand[0] += 22
			$lefthand[1] += 165
			MouseDown("primary")
			MouseMove($lefthand[0], $lefthand[1])
			MouseUp("primary")
			Send("{ENTER}")
		EndIf
		$ispicking = False
	EndIf
EndFunc

 

 


 

Udostępnij ten post


Link to postu
Pani Kasia

Bo nie on jest autorem bota, on go tylko scrackował - usunął parę linijek kodu i wrzucił Wam tutaj.

napisalem autor jako autor tematu,

Udostępnij ten post


Link to postu

Witam. Po odpaleniu bota na Medivi dostaję informację, że hp i mp zostało znalezione, lecz od razu spada wartość w bocie do 0%. Slime trainer działa, auto food też ale przez to, że nie przechwytuje % hp nie działą auto spell caster. Czy autor tego tematu jest w stanie uaktualnić wersję, bo z tego co czytałem na forum bota jest jakiś problem z Medivią. Pozdrawiam.

Udostępnij ten post


Link to postu

Witam. Po odpaleniu bota na Medivi dostaję informację, że hp i mp zostało znalezione, lecz od razu spada wartość w bocie do 0%. Slime trainer działa, auto food też ale przez to, że nie przechwytuje % hp nie działą auto spell caster. Czy autor tego tematu jest w stanie uaktualnić wersję, bo z tego co czytałem na forum bota jest jakiś problem z Medivią. Pozdrawiam.

Autor cracka jedynie usunął zabezpieczenia, wątpię, że mu się będzie chciało analizować cały kod i coś poprawiać.

macie tutaj dzialajacy crack

 

https://mega.nz/fm/0LQxVZpD

Wysłałeś link do pustego katalogu.


 

Udostępnij ten post


Link to postu

dziala wam na wykopots?

Bot działa głównie przez bibliotekę imagesearch w au3, więc jeżeli ich client nie różni się diametralnie od tych niżej, to powinien działać.

LoftyBot wspiera akutalnie:

- Medivia OTS (after update 2.0 - new client)
- Nastarius OTS
- Tibijka OTS
- Darkot OTS
- Classictibia.com 
- Raretibia.com
- Dolnera.com
- play.tibians.org
- All others OTS with client look (like official) or otclient (custom client)

 

Udostępnij ten post


Link to postu

Część funkcji działa lecz nie odnajduje paska HP. Potrzebuje pomocy kogoś kto ma wykupioną subskrypcje, jest tu taka osoba?

Udostępnij ten post


Link to postu

Chodzi o to aby podesłał mi ktoś 2 pliki z ich forum które mogą pobrać osoby z subskrypcją 

Udostępnij ten post


Link to postu

Bądź aktywny! Zaloguj się lub utwórz konto

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto

Zarejestruj nowe konto, to proste!

Zarejestruj nowe konto

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się
  • Kto przegląda   0 użytkowników

    Brak zalogowanych użytkowników przeglądających tę stronę.


×
Okienko zamknie się za 5 sekund...