Here is the script to connect to the new client. (hope it's works)
Code: Select all
If not A_IsAdmin
{
Run *RunAs "%A_ScriptFullPath%"
ExitApp
}
#SingleInstance, Force
#Persistent
#InstallMouseHook
#InstallKeybdHook
CoordMode,Mouse,Window
CoordMode,Pixel,Window
OnExit, ExitSub
Confine = True
global ColorA = 0xB36C0F
global cDist = 39
global cDist1 = 20
global Stime
ChatT = 0
tsecs = 3
ver = v5.7
TwitchStreamers := "TSM_hauntzer,tsm_svenskeren,tsm_bjergsen,tsm_doublelift,imt_huni,imt_reignover,sprattel_lol,pobelter,imt_wildturtle,imt_adrian,c9balls,c9rush,jensen,c9sneaky,hail9,bunnyfufuu,zionspartan,xmithie,lolwhoishe,stixxay,aphromoo,nrgimpact,moonlol,nrggbm,altec,konkwon,seraph,crumbzz,freezecz,hakuholol,birryyu,kireiop,shiphtur,apollo_price,kiwikid,echokfo,hard_lol,froggen,keithmcbrief,lourlo,liquiddardoch,fenixl0l,piglet,matlife_na,odoamne,jankos,yoosangwook,lolvander,kikis1205,trick_lol,perrkz,emperorkr,lolhybrid,cabochardlol,shooklol,nukeducklol,kasinglol,gamsulol,fnc_spirit,fabiantje,rekkles,klajbajk,godgilius,eikap,mrrallez,trashylol,sencux,kobbelol,airwaks,betsy_lol,tabzzhd,noxiak,smittyj1,pepiinero,vizicsacsi,l0ulex,steeelback,wunderwearisfame,yellowstarr,h2khjarnan,watdefox,nightblue3,trick2g,imaqtpie,valkrin,azoh,tsm_dyrus,nervarien,saintvicious,voyboy,scarra,IWillDominate,mushisgosu,meteos,xpecial,quaslol,krepo"
AzubuStreamers := "Amazing,sOAZ,xPeke,Niels,Mithy,Wisdom,Hipo,Crush,Edge,Guger,Soul,flawless,Sasin,Nuclear,Secret,Flame,Chaser,CoCo,Fury,Pure,Untara,Bubbling,Bdd,Kramer,MadLife,Cuvee,Ambition,Crown,CoreJJ,Wraith,Duke,Blank,Faker,Bang,Wolf,ssumday,Score,Fly_Kr,Arrow,Ignar,TrAce,Winged,Kuzan,Pilot,Chei,Mash,gate,Ninja"
YouTubeStreamers := ""
Menu, Tray, NoStandard
Menu, Tray, UseErrorLevel
Menu, Tray, Tip, League Tools %ver%
ComObjError(0)
WebRequest := ComObjCreate("WinHttp.WinHttpRequest.5.1")
IfExist C:\Riot Games\League of Legends\LeagueClient.exe
{
RiotPathF = C:\Riot Games\League of Legends\LeagueClient.exe
Menu, Tray, Icon, %RiotPathF%, 1
If !Reg || (Reg = "ERROR")
{
FileRead, regi, C:\Riot Games\League of Legends\RADS\system\system.cfg
RegExMatch(regi, "i)Region=(.*)", Region)
If Region1
Reg := Region1
else
Reg =
}
If !Loc || (Loc = "ERROR")
{
FileRead, loca, C:\Riot Games\League of Legends\RADS\system\locale.cfg
RegExMatch(loca, "i)Locale=(.*)", Locale)
If Locale1
Loc := Locale1
else
Loc =
}
}
else
{
x = 0
SelectLeague:
FileSelectFile, RiotPath, M3, C:\, Select League Launcher, *.exe
StringReplace, RiotPathF, RiotPath, `n, \
StringSplit, RiotPath, RiotPath, `n
if RiotPathF =
{
x++
If x = 3
Goto, LauncherNotFound
Goto, SelectLeague
}
Menu, Tray, Icon, %RiotPathF%, 1
If !Reg || (Reg = "ERROR")
{
FileRead, regi, %RiotPath%\RADS\system\system.cfg
RegExMatch(regi, "i)Region=(.*)", Region)
If Region1
Reg := Region1
else
Reg =
}
If !Loc || (Loc = "ERROR")
{
FileRead, loca, %RiotPath%\RADS\system\locale.cfg
RegExMatch(loca, "i)Locale=(.*)", Locale)
If Locale1
Loc := Locale1
else
Loc =
}
}
TrayTip, League Tools %ver%, League launcher found., %tsecs%
LauncherNotFound:
SplitPath, A_ScriptName,,,, ScriptName
IfNotExist %A_ScriptDir%\%ScriptName%\INI
FileCreateDir, %A_ScriptDir%\%ScriptName%\INI
IfNotExist %A_ScriptDir%\%ScriptName%\Skins
FileCreateDir, %A_ScriptDir%\%ScriptName%\Skins
IfNotExist %A_ScriptDir%\%ScriptName%\ChampIcons
FileCreateDir, %A_ScriptDir%\%ScriptName%\ChampIcons
IfExist %A_ScriptDir%\%ScriptName%\INI\%ScriptName%_config.ini
{
Loop,
{
IniRead, Login%A_Index%, %A_ScriptDir%\%ScriptName%\INI\%ScriptName%_config.ini, Login%A_Index%, Username
IniRead, Pass%A_Index%, %A_ScriptDir%\%ScriptName%\INI\%ScriptName%_config.ini, Login%A_Index%, Password
;IniRead, SumName%A_Index%, %A_ScriptDir%\%ScriptName%\INI\%ScriptName%_config.ini, Login%A_Index%, SumName
;IniRead, SumID%A_Index%, %A_ScriptDir%\%ScriptName%\INI\%ScriptName%_config.ini, Login%A_Index%, SumID
IfInString, Login%A_Index%, ERROR
{
Login%A_Index% :=
break
}
}
IniRead, Reg, %A_ScriptDir%\%ScriptName%\INI\%ScriptName%_config.ini, Region, Reg, %A_Space%
IniRead, Loc, %A_ScriptDir%\%ScriptName%\INI\%ScriptName%_config.ini, Locale, Loc, %A_Space%
IniRead, lgn, %A_ScriptDir%\%ScriptName%\INI\%ScriptName%_config.ini, DefaultLogin, lgn, 1
IniRead, QueueWaitTime, %A_ScriptDir%\%ScriptName%\INI\%ScriptName%_config.ini, QueueTime, QueueWaitTime, 500
IniRead, Toaster, %A_ScriptDir%\%ScriptName%\INI\%ScriptName%_config.ini, Toaster, Toaster, 0
}
else
{
InputBox, Login1, League Tools %ver%, This appears to be the first run of the script. Please input a username.
InputBox, Pass1, League Tools %ver%, Please input a password., HIDE
e4=
(
[Login1]
Username=%Login1%
Password=%Pass1%
[Login2]
Username=
Password=
[Login3]
Username=
Password=
[Region]
Reg=%Reg%
[Locale]
Loc=%Loc%
[DefaultLogin]
lgn=1
[QueueTime]
QueueWaitTime=300
[Toaster]
Toaster=0
)
FileAppend, %e4%, %A_ScriptDir%\%ScriptName%\INI\%ScriptName%_config.ini
}
If !Toaster
{
IfExist %A_ScriptDir%\%ScriptName%\INI\%ScriptName%_keys.ini
{
Loop,
{
IniRead, Key%A_Index%, %A_ScriptDir%\%ScriptName%\INI\%ScriptName%_keys.ini, Keys, Key%A_Index%
IfInString, Key%A_Index%, ERROR
{
Key%A_Index% :=
break
}
}
If !Key1
Key1 := "72f7888e-0a65-4f90-aeea-c08f3ae1a6bf"
}
else
{
Key1 := "72f7888e-0a65-4f90-aeea-c08f3ae1a6bf"
e5=
(
[Keys]
Key1=%Key1%
)
FileAppend, %e5%, %A_ScriptDir%\%ScriptName%\INI\%ScriptName%_keys.ini
}
If Key1
{
ChampDataURL := "https://global.api.pvp.net/api/lol/static-data/na/v1.2/champion?api_key=" key1
WebRequest.Open("GET", ChampDataURL)
ChampDataURLGet:
WebRequest.Send()
ChampData := WebRequest.ResponseText()
If ChampData
{
If InStr(ChampData, "status_code")
{
If InStr(ChampData, "403")
TrayTip, League Tools %ver%, 403 - Forbidden.
else If InStr(ChampData, "401")
TrayTip, League Tools %ver%, 404 - Unauthorized.
else If InStr(ChampData, "429")
TrayTip, League Tools %ver%, 429 - Rate Limit Exceeded.
Goto ChampDataURLGet
}
}
}
global ChampDataObj := JSON.Load(ChampData)
FreeChampURL := "https://na.api.pvp.net/api/lol/na/v1.2/champion?freeToPlay=true&api_key=" key1
WebRequest.Open("GET", FreeChampURL)
FreeChampURLGet:
WebRequest.Send()
FreeChampData := WebRequest.ResponseText()
If InStr(FreeChampData, "status_code")
{
If InStr(FreeChampData, "403")
TrayTip, League Tools %ver%, Debug: 403 - Forbidden.
else If InStr(FreeChampData, "401")
TrayTip, League Tools %ver%, Debug: 404 - Unauthorized.
else If InStr(FreeChampData, "429")
TrayTip, League Tools %ver%, Debug: 429 - Rate Limit Exceeded.
Goto FreeChampURLGet
}
else
{
FreeChampObj := JSON.Load(FreeChampData)
For k, v in FreeChampObj.champions
{
For ke, ve in ChampDataObj.data
{
If v.id = ve.id
ve.freeToPlay := true
}
}
}
}
IfExist %A_ScriptDir%\%ScriptName%\INI\%ScriptName%_hotkeys.ini
{
IniRead, Login1Key, %A_ScriptDir%\%ScriptName%\INI\%ScriptName%_hotkeys.ini, Hotkeys, Login1, F7
IniRead, Login2Key, %A_ScriptDir%\%ScriptName%\INI\%ScriptName%_hotkeys.ini, Hotkeys, Login2, F8
IniRead, Login3Key, %A_ScriptDir%\%ScriptName%\INI\%ScriptName%_hotkeys.ini, Hotkeys, Login3, F9
IniRead, ReStartQKey, %A_ScriptDir%\%ScriptName%\INI\%ScriptName%_hotkeys.ini, Hotkeys, ReStartQKey, F10
IniRead, ReloadSubKey, %A_ScriptDir%\%ScriptName%\INI\%ScriptName%_hotkeys.ini, Hotkeys, Reload, F12
}
else
{
Login1Key := "F7"
Login2Key := "F8"
Login3Key := "F9"
ReStartQKey := "F10"
ReloadSubKey := "F12"
e3=
(
[Hotkeys]
Login1=%Login1Key%
Login2=%Login2Key%
Login3=%Login3Key%
ReStartQKey=%ReStartQKey%
Reload=%ReloadSubKey%
)
FileAppend, %e3%, %A_ScriptDir%\%ScriptName%\INI\%ScriptName%_hotkeys.ini
}
If !Reg || (Reg = "ERROR")
Reg = na
else
StringLower, Reg, Reg
If !Loc || (Loc = "ERROR")
Loc = en_US
Else
{
If InStr(Loc, "_")
{
StringSplit, Loc, Loc, _
StringLower, Loc1, Loc1
StringUpper, Loc2, Loc2
Loc = %Loc1%_%Loc2%
}
Else
Loc = en_US
}
If !Toaster
Toaster := 0
If !Login1Key
Login1Key := "F7"
If !Login2Key
Login2Key := "F8"
If !Login3Key
Login3Key := "F9"
If !ReStartQKey
ReStartQKey := "F10"
If !ReloadSubKey
ReloadSubKey := "F12"
Hotkey, %Login1Key%, Login1, Off
Hotkey, %Login2Key%, Login2, Off
Hotkey, %Login3Key%, Login3, Off
Hotkey, %ReStartQKey%, ReStartQ, Off
Hotkey, %ReloadSubKey%, ReloadSub, On
If !Toaster
{
TwitchURL := "https://api.twitch.tv/kraken/streams?channel=" TwitchStreamers "&client_id=pbta8w0375tir2u2victdhoe6ip4bbk"
AzubuURL := "http://api.azubu.tv/public/channel/list?channels=" AzubuStreamers
TrayTip, League Tools %ver%, Loading Pro Streams
Gosub, StreamCheck
SetTimer, StreamCheck, 100000
}
TrayMenu:
{
If !Toaster
{
TrayTip, League Tools %ver%, Loading Champion List. This could take a moment., %tsecs%
DDver := ChampDataObj.version
;Load Champion List
ChampCount := 0
For k, v in ChampDataObj.data
ChampCount := A_Index
MenuSize = 0
For k, v in ChampDataObj.data
{
TrayTip, League Tools %ver%, Loading Champion %A_Index%/%ChampCount%
n1 := v.key
n2 := v.name
n3 := v.title
Menu, %n2%, Add, %n3%, Guides
Menu, %n2%, Disable, %n3%
Menu, %n2%, Add
If Loc = ru_RU
{
Menu, %n2%, Add, Lol-Game.ru, Guides
Menu, %n2%, Add
}
Else If Reg = ko_KR
{
Menu, %n2%, Add, lol.inven.co.kr, Guides
Menu, %n2%, Add
}
Menu, %n2%, Add, MobaFire, Guides
Menu, %n2%, Add, LOLKing, Guides
Menu, %n2%, Add, LOLNexus, Guides
Menu, %n2%, Add, SoloMid, Guides
Menu, %n2%, Add, ProBuilds, Guides
If (MenuSize > 790)
{
Menu, GuideMenu, Add, %n2%, :%n2%, +BarBreak
MenuSize = 0
}
Else
Menu, GuideMenu, Add, %n2%, :%n2%
IfNotExist, %A_ScriptDir%\%ScriptName%\ChampIcons\%n1%.png
{
urlchamp = http://ddragon.leagueoflegends.com/cdn/%DDver%/img/champion/%n1%.png
UrlDownloadToFile, %urlchamp%, %A_ScriptDir%\%ScriptName%\ChampIcons\%n1%.png
If ErrorLevel
CIconErr := 1
}
If v.freeToPlay
{
Menu, GuideMenu, Icon, %n2%, %A_ScriptDir%\%ScriptName%\ChampIcons\%n1%.png,,30
MenuSize := MenuSize + 30
}
else
{
Menu, GuideMenu, Icon, %n2%, %A_ScriptDir%\%ScriptName%\ChampIcons\%n1%.png,,20
MenuSize := MenuSize + 20
}
}
Menu, GuideMenu, Delete, Wukong
Menu, GuideMenu, Insert, Xerath, Wukong, :Wukong
Menu, GuideMenu, Icon, Wukong, %A_ScriptDir%\%ScriptName%\ChampIcons\MonkeyKing.png,,20
If CIconErr
TrayTip, League Tools %ver%, Error occurred while downloading champion icons.
;Check for sales
TrayTip, League Tools %ver%, Checking sales.
TimeCount1 := A_TickCount
SalesURL := "http://na.leagueoflegends.com/en/news/store/sales"
WebRequest.Open("GET", SalesURL)
WebRequest.Send()
SalesStr := WebRequest.ResponseText()
StringReplace, SalesStr, SalesStr, ", , All ;"
Q := 0
CheckNextSale:
Q := RegExMatch(SalesStr, "i)a href=/en/news/store/sales/champion-and-skin-sale-(.*?) title", Sdates, Q + 1000)
If Sdates1
{
StringSplit, SalesD, Sdates1, -
Date1 := "2017" SalesD1 "00000000"
Date2 := "2017" SalesD2 "00000000"
DateDay1 :=
DateDay2 :=
DateDay1 -= Date1, Seconds
DateDay2 -= Date2, Seconds
if (DateDay1 > 0 and DateDay2 < 86400)
{ ;Sales Found
RegExMatch(SalesStr, "i)a href=(/en/news/store/sales/champion-and-skin-sale-.*?) title", CurSales, Q)
CurSalesURL := "http://na.leagueoflegends.com" CurSales1
TimeTaken := (A_TickCount - TimeCount1) / 100
TrayTip, League Tools %ver%, Sales found.
WebRequest.Open("GET", CurSalesURL)
WebRequest.Send()
CurSalesStr := WebRequest.ResponseText()
StringReplace, CurSalesStr, CurSalesStr, ", , All ;"
;Load Champion Sales
TimeTaken := (A_TickCount - TimeCount1) / 100
TrayTip, League Tools %ver%, Loading Champion sales.
RegExMatch(CurSalesStr, "i)(Champion Sales.*?)</div></div>", ChampSales)
P := 1
Loop,
{
P := RegExMatch(ChampSales1, "i)/loading/(.*?)_0.jpg", ChampName, P + 1)
RegExMatch(ChampSales1, "i)777777>(.*?)</strike", ChampHiPrice, P + 1)
RegExMatch(ChampSales1, "i)strike>(.*?)</p>", ChampLoPrice, P + 1)
If !ChampName1
break
else
{
Menu, CPrice%A_Index%, Add, %ChampHiPrice1% --> %ChampLoPrice1%, Sales
Menu, CSales, Add, %ChampName1%, :CPrice%A_Index%
Menu, CSales, Icon, %ChampName1%, %A_ScriptDir%\%ScriptName%\ChampIcons\%ChampName1%.png,,20
}
}
TimeTaken := (A_TickCount - TimeCount1) / 100
TrayTip, League Tools %ver%, Champion sales loaded.
;Load Skin Sales
TimeTaken := (A_TickCount - TimeCount1) / 100
TrayTip, League Tools %ver%, Loading Skin sales.
RegExMatch(CurSalesStr, "i)(Skin Sales.*?)</div></div>", SkinSales)
P := 1
Loop,
{
P := RegExMatch(SkinSales1, "i)cboxElement href=(.*?)</h4>", SkinName, P + 1)
If !SkinName1
break
else
{
RegExMatch(SkinName1, "i)(.*?Splash.jpg)", sURL)
RegExMatch(SkinName1, "i)img src=(.*?thumb.jpg)", tURL)
RegExMatch(SkinName1, "i)<h4>(.*)", sName)
Menu, SSales, Add, %sName1%, Sales
If !(FileExist(A_ScriptDir "\" ScriptName "\Skins\" sName1 "_splash.png"))
UrlDownloadToFile, %sURL1%, %A_ScriptDir%\%ScriptName%\Skins\%sName1%_splash.png
If !(FileExist(A_ScriptDir "\" ScriptName "\Skins\" sName1 "_thumb.png"))
UrlDownloadToFile, %tURL1%, %A_ScriptDir%\%ScriptName%\Skins\%sName1%_thumb.png
If ErrorLevel
SIconErr := 1
Menu, SSales, Icon, %sName1%, %A_ScriptDir%\%ScriptName%\Skins\%sName1%_thumb.png,,20
}
TrayTip, League Tools %ver%, Loading Skin sales. %A_Index%
}
TimeTaken := (A_TickCount - TimeCount1) / 100
If CIconErr
TrayTip, League Tools %ver%, Error occurred while downloading champion icons.
else
TrayTip, League Tools %ver%, Skin sales loaded.
}
else
Goto, CheckNextSale
}
}
;Account Selection
TrayTip, League Tools %ver%, Loading accounts.
If Login1
{
If RiotPathF
{
Loop, 1000
{
If (Login%A_Index%)
{
Menu, Accounts, Add, % Login%A_Index%, Tools
If A_Index = 1
Menu, Accounts, Check, %l%
}
Else
break
}
If Login1
Hotkey, %Login1Key%, On
If Login2
Hotkey, %Login2Key%, On
If Login3
Hotkey, %Login3Key%, On
Hotkey, %RestartQKey%, On
Menu, Selections, Add, 5v5 Ranked, AutoStart
Menu, Selections, Add, 5v5 Draft, AutoStart
Menu, Selections, Add, 5v5 Blind, AutoStart
Menu, Selections, Add, 3v3 Blind, AutoStart
Menu, Selections, Add, ARAM, AutoStart
}
Else
TrayTip, League Tools %ver%, League launcher not found. League must be present to use login options., %tsecs%
}
Menu, GroupOrSolo, Add, Solo, GroupCheck
Menu, GroupOrSolo, Check, Solo
sGroup = 1
Menu, GroupOrSolo, Add, Group, GroupCheck
;Check base Menus and add if they contain data
Menu, GuideMenu, NoDefault
if !ErrorLevel
Menu, Tray, Add, Champion Guides, :GuideMenu
Menu, CSales, NoDefault
if !ErrorLevel
Menu, Tray, Add, Champion Sales, :CSales
else if !Toaster
{
Menu, NoSales, Add, No Sales, Sales
Menu, Tray, Add, Champion Sales, :NoSales
}
Menu, SSales, NoDefault
if !ErrorLevel
Menu, Tray, Add, Skin Sales, :SSales
else if !Toaster
{
Menu, NoSales, Add, No Sales, Sales
Menu, Tray, Add, Skin Sales, :NoSales
}
;Pro Streams
Menu, LStreams, NoDefault
If !ErrorLevel
Menu, Tray, Add, Pro Streams, :LStreams
;Login Items
;If Login2
Menu, Tray, Add, Select Account, :Accounts
If !ErrorLevel
Menu, Tray, Add, Login Only, LoginOnly
Menu, Selections, NoDefault
Menu, Tray, Add, Group or Solo, :GroupOrSolo
If !ErrorLevel
Menu, Tray, Add, Auto Start, :Selections
Menu, Tray, Add, ScreenEdge Off, Tools
Menu, Tray, Add
Menu, Tray, Add, Settings, SettingsSub
Menu, Tray, Add, Reload, ReloadSub
Menu, Tray, Add, Exit, ExitSub
}
TrayTip, League Tools %ver%, League Tools loaded., %tsecs%
SetTimer, UpdateCheck, -10000
return
;----------------------------------------------------------------------------------------------------------------------------------
StreamCheck:
{
If Toaster
{
SetTimer, StreamCheck, Off
return
}
WebRequest.Open("GET", TwitchURL)
WebRequest.Send()
TwitchData := WebRequest.ResponseText()
Try
TwitchDataObj := JSON.Load(TwitchData)
catch e
TrayTip, League Tools %ver%, There was a problem loading Twitch streamers.
WebRequest.Open("GET", AzubuURL)
WebRequest.Send()
AzubuData := WebRequest.ResponseText()
Try
AzubuDataObj := JSON.Load(AzubuData)
catch e
TrayTip, League Tools %ver%, There was a problem loading Azubu streamers.
Menu, TStreams, Delete
Menu, AStreams, Delete
Loop % TwitchDataObj.streams.MaxIndex()
Menu, TStreams, Add, % TwitchDataObj.streams[A_Index].channel.name, Streams
Loop % AzubuDataObj.data.MaxIndex()
{
If AzubuDataObj.data[A_Index].is_live
Menu, AStreams, Add, % AzubuDataObj.data[A_Index].user.username, Streams
}
Menu, LStreams, Add, Azubu, :AStreams
Menu, LStreams, Add, Twitch, :TStreams
}
return
UpdateCheck:
{
UpdateURL := "https://autohotkey.com/boards/viewtopic.php?f=19&t=10818"
WebRequest.Open("GET", UpdateURL, true)
WebRequest.Send()
WebRequest.WaitForResponse()
Data := WebRequest.ResponseText()
RegExMatch(Data, "i)<title>League Tools (.*?) ", Version)
If !(Version1 = ver)
Traytip, League Tools %ver%, There is an update available!, 2
else
Traytip, League Tools %ver%, Up to date., 2
}
return
GroupCheck:
{
If A_ThisMenuItem = Solo
{
Menu, GroupOrSolo, Check, Solo
Menu, GroupOrSolo, UnCheck, Group
sGroup = 1
}
else If A_ThisMenuItem = Group
{
Menu, GroupOrSolo, Check, Group
Menu, GroupOrSolo, UnCheck, Solo
sGroup = 0
}
}
return
Login(u="", p="", installloc="")
{
Run, %installloc%
WinActivate, ahk_class RCLIENT
WinWaitActive ahk_class RCLIENT
b = 0
Loop,
{
Sleep, 250
if WinExist("ahk_class RCLIENT")
{
WinActivate, ahk_class RCLIENT
WinGetPos,,, w, h, A
;MouseMove, (w*.85), (h*.27)
PixelGetColor, colorbtn, (w*.85), (h*.74)
If colorbtn = 0x28231E
break
}
}
Sleep, 100
WinActivate, ahk_class RCLIENT
WinWaitActive ahk_class RCLIENT
WinGetPos,,, w, h, A
b = 0
Sleep, 100
If !p
InputBox, p, Mot de passe, Entrez votre mot de passe. Il ne sera pas sauvegarder.
If !p
return
Sleep, 100
WinActivate, ahk_class RCLIENT
If u
{
MouseClick, Left, (w*.85), (h*.27),,0
MouseClick, Left, (w*.85), (h*.27),,0
Sleep, 100
SendRaw, %u%
}
Sleep, 100
Send {Tab}
Sleep, 100
If p
{
SendInput {Raw}%p%
}
Send {enter}
Sleep, 250
return
}
Start(type1, sGroup)
{
StartSleep := 150
Loop
{
Sleep, 500
WinActivate, ahk_class ApolloRuntimeContentWindow
WinGetPos,,, w, h, A
PixelGetColor, b_Play, (w / 2), (h * .025), RGB
ColDist := Distance(colorA, b_Play)
If ColDist < cDist1
break
}
Sleep, 2000
WinGetPos,,, w, h, A
Sleep, 250
MouseClick, left, (w / 2), (h * .025),,0
Sleep, 25
MouseClick, left, (w / 2), (h * .025),,0
Sleep, 250
MouseMove, 290, 115
MouseClick, left, 290, 115,,0
If type1 = 5v5 Ranked
{
MouseMove, (w*.42),(h*.19)
MouseClick, left, (w*.42),(h*.19),,0
Sleep, %StartSleep%
MouseMove, (w*.60),(h*.19)
MouseClick, left, (w*.60),(h*.19),,0
Sleep, %StartSleep%
MouseMove, (w*.68),(h*.19)
MouseClick, left, (w*.68),(h*.19),,0
Sleep, %StartSleep%
}
else if type1 = 5v5 Draft
{
MouseMove, (w*.42),(h*.19)
MouseClick, left, (w*.42),(h*.19),,0
Sleep, %StartSleep%
MouseMove, (w*.60),(h*.19)
MouseClick, left, (w*.60),(h*.19),,0
Sleep, %StartSleep%
MouseMove, (w*.68),(h*.24)
MouseClick, left, (w*.68),(h*.24),,0
Sleep, %StartSleep%
}
else if type1 = 5v5 Blind
{
MouseMove, (w*.42),(h*.19)
MouseClick, left, (w*.42),(h*.19),,0
Sleep, %StartSleep%
MouseMove, (w*.60),(h*.19)
MouseClick, left, (w*.60),(h*.19),,0
Sleep, %StartSleep%
MouseMove, (w*.68),(h*.32)
MouseClick, left, (w*.68),(h*.32),,0
Sleep, %StartSleep%
}
else if type1 = 3v3 Blind
{
MouseMove, (w*.42),(h*.19)
MouseClick, left, (w*.42),(h*.19),,0
Sleep, %StartSleep%
MouseMove, (w*.60),(h*.24)
MouseClick, left, (w*.60),(h*.24),,0
Sleep, %StartSleep%
MouseMove, (w*.68),(h*.19)
MouseClick, left, (w*.68),(h*.19),,0
Sleep, %StartSleep%
}
else if type1 = ARAM
{
MouseMove, (w*.42),(h*.22)
MouseClick, left, (w*.42),(h*.22),,0
Sleep, %StartSleep%
MouseMove, (w*.60),(h*.19)
MouseClick, left, (w*.60),(h*.19),,0
Sleep, %StartSleep%
MouseMove, (w*.68),(h*.19)
MouseClick, left, (w*.68),(h*.19),,0
Sleep, %StartSleep%
}
if sGroup = 1
{
MouseMove, (w*.62),(h*.88)
MouseClick, left, (w*.62),(h*.88),,0
Sleep, 100
}
else
{
MouseMove, (w*.73),(h*.88)
MouseClick, left, (w*.73),(h*.88),,0
Sleep, 100
}
}
AutoAccept(q)
{
If q < 120
q := 120
p := q - 60
colorB := "0x1E4574"
Sleep, 250
NotReady3:
Loop
{
IfWinActive, ahk_class ApolloRuntimeContentWindow
{
WinGetPos,,, mWi, mHi, A
x := (mWi * .40)
y := (mHi * .55)
If ColorCross(x, y, colorB, cDist)
{
Sleep, 400
MouseMove, %x%, %y%
Click, %x%, %y%
break
}
}
IfEqual, A_Index, p, ToolTip, Queue is taking a long time. Waiting 60s more.
IfEqual, A_Index, q, return 1
Sleep, 1000
}
Sleep, 1000
}
LoginOnly:
{
global t := A_ThisMenuItem
If !lgn
lgn = 1
Login(Login%lgn%, Pass%lgn%, RiotpathF)
}
return
AutoStart:
{
global t := A_ThisMenuItem
If !lgn
lgn = 1
Login(Login%lgn%, Pass%lgn%, RiotpathF)
Start(t, sGroup)
If !(t = "5v5 Draft")
Err := AutoAccept(QueueWaitTime)
If (Err = 1)
{
Tooltip, Queue took over %QueueWaitTime% seconds. Please adjust this.
Sleep 5000
ToolTip
}
}
return
Guides:
{
CName := A_ThisMenu
;LOLNexus
StringReplace, n, CName, ', , All
StringReplace, n, n, `., , All
StringReplace, n, n, %A_Space%, -, All
;LOLKing
StringLower, a, CName
StringReplace, a, a, %A_Space%, , All
StringReplace, a, a, `., , All
StringReplace, a, a, ', , All
;ProBuilds
StringReplace, b, CName, ', %A_Space%, All
StringReplace, b, b, `., %A_Space%, All
StringLower, b, b, T
StringReplace, b, b, %A_space%, , All
;SoloMid
StringReplace, c, CName, %A_Space%, , All
;MobaFire - Naming convention changed, non conformative new stylem - Test Guide page
IfEqual, A_ThisMenuItem, MobaFire, Run, http://www.mobafire.com/league-of-legends/%n%-guide
;case sensitive(Lowercase), no punctuation, no spaces
IfEqual, A_ThisMenuItem, LOLKing, Run, http://www.lolking.net/guides/champion/%a%
;Not case sensitive, spaces become -, no punctuation
IfEqual, A_ThisMenuItem, LOLNexus, Run, http://www.lolnexus.com/champions/%n%
;Not case sensitive, no spaces, periods left in, ' left in
IfEqual, A_ThisMenuItem, SoloMid, Run, http://www.solomid.net/guides/%c%
;Case sensitive(title), no spaces, no punctuation
IfEqual, A_ThisMenuItem, ProBuilds, Run, http://www.probuilds.net/champions/details/%b%
;Not case sensitive
IfEqual, A_ThisMenuItem, Lol-Game.ru, Run, http://lol-game.ru/guides/%CName%/
;TBD
IfEqual, A_ThisMenuItem, lol.inven.co.kr, Run, http://lol.inven.co.kr/dataninfo/champion/manualTool.php
}
return
Streams:
{
If (A_ThisMenu = "AStreams")
Run, https://www.azubu.tv/%A_ThisMenuItem%
Else If (A_ThisMenu = "TStreams")
Run, http://www.twitch.tv/%A_ThisMenuItem%
}
return
Distance(c1, c2)
{ ; function by [VxE], return value range = [0, 441.67295593006372]
return Sqrt((((c1>>16)-(c2>>16))**2)+(((c1>>8&255)-(c2>>8&255))**2)+(((c1&255)-(c1&255))**2))
}
ColorCross(x, y, col, v)
{
PixelGetColor, b, x, (y + 2), RGB
PixelGetColor, c, x, (y - 2), RGB
PixelGetColor, d, (x + 2), y, RGB
PixelGetColor, e, (x - 2), y, RGB
CDA := Distance(col, b)
CDB := Distance(col, c)
CDC := Distance(col, d)
CDD := Distance(col, e)
if (CDA < v and CDB < v and CDC < v and CDD < v)
return True
Else
return False
}
Sales:
{
If (A_ThisMenu = "SSales")
SplashImage, %A_ScriptDir%\%ScriptName%\Skins\%A_ThisMenuItem%_splash.png, M2, %A_ThisMenuItem%, , %A_ThisMenuItem%
}
return
Tools:
{
If A_ThisMenuItem = ScreenEdge Off
{
Menu, Tray, ToggleCheck, ScreenEdge Off
Menu, Tray, Rename, ScreenEdge Off, ScreenEdge On
SetTimer, ScreenEdge, 250
}
else If A_ThisMenuItem = ScreenEdge On
{
Menu, Tray, ToggleCheck, ScreenEdge On
Menu, Tray, Rename, ScreenEdge On, ScreenEdge Off
SetTimer, ScreenEdge, Off
Sleep, 100
ClipCursor(Confine)
}
else If A_ThisMenu = Accounts
{
lgn := A_ThisMenuItemPos
Loop,
{
If !(Login%A_Index%)
break
Menu, Accounts, UnCheck, % Login%A_Index%
}
Menu, Accounts, Check, % Login%lgn%
}
}
return
ScreenEdge:
If WinActive("ahk_class RiotWindowClass")
ClipCursor( Confine, 13, 13, A_screenwidth-13, A_screenheight-13)
Return
Login1:
Login(Login1, Pass1, RiotPathF)
return
Login2:
Login(Login2, Pass2, RiotPathF)
return
Login3:
Login(Login3, Pass3, RiotPathF)
return
ReStartQ:
{
If !t
return
Start(t, sGroup)
AutoAccept(QueueWaitTime)
}
return
SettingsSub:
{
IfExist %A_ScriptDir%\%ScriptName%\INI\%ScriptName%_config.ini
{
Loop,
{
IniRead, Login%A_Index%, %A_ScriptDir%\%ScriptName%\INI\%ScriptName%_config.ini, Login%A_Index%, Username
IfInString, Login%A_Index%, ERROR
{
Login%A_Index% :=
break
}
IniRead, Pass%A_Index%, %A_ScriptDir%\%ScriptName%\INI\%ScriptName%_config.ini, Login%A_Index%, Password
;IniRead, ObfPass%A_Index%, %A_ScriptDir%\%ScriptName%\INI\%ScriptName%_config.ini, Login%A_Index%, Password
;Pass%A_Index% := Obf(ObfPass%A_Index%, 0, 1234)
IniRead, SumName%A_Index%, %A_ScriptDir%\%ScriptName%\INI\%ScriptName%_config.ini, Login%A_Index%, SumName
IniRead, SumID%A_Index%, %A_ScriptDir%\%ScriptName%\INI\%ScriptName%_config.ini, Login%A_Index%, SumID
}
IniRead, Reg, %A_ScriptDir%\%ScriptName%\INI\%ScriptName%_config.ini, Region, Reg, %A_Space%
IniRead, Loc, %A_ScriptDir%\%ScriptName%\INI\%ScriptName%_config.ini, Locale, Loc, %A_Space%
IniRead, lgn, %A_ScriptDir%\%ScriptName%\INI\%ScriptName%_config.ini, DefaultLogin, lgn, 1
IniRead, QueueWaitTime, %A_ScriptDir%\%ScriptName%\INI\%ScriptName%_config.ini, QueueTime, QueueWaitTime, 500
IniRead, Toaster, %A_ScriptDir%\%ScriptName%\INI\%ScriptName%_config.ini, Toaster, Toaster, 0
}
IfExist %A_ScriptDir%\%ScriptName%\INI\%ScriptName%_hotkeys.ini
{
IniRead, Login1Key, %A_ScriptDir%\%ScriptName%\INI\%ScriptName%_hotkeys.ini, Hotkeys, Login1, F7
IniRead, Login2Key, %A_ScriptDir%\%ScriptName%\INI\%ScriptName%_hotkeys.ini, Hotkeys, Login2, F8
IniRead, Login3Key, %A_ScriptDir%\%ScriptName%\INI\%ScriptName%_hotkeys.ini, Hotkeys, Login3, F9
IniRead, ReStartQKey, %A_ScriptDir%\%ScriptName%\INI\%ScriptName%_hotkeys.ini, Hotkeys, ReStartQKey, F10
IniRead, ReloadSubKey, %A_ScriptDir%\%ScriptName%\INI\%ScriptName%_hotkeys.ini, Hotkeys, Reload, F12
}
IfExist %A_ScriptDir%\%ScriptName%\INI\%ScriptName%_keys.ini
{
Loop,
{
IniRead, Key%A_Index%, %A_ScriptDir%\%ScriptName%\INI\%ScriptName%_keys.ini, Keys, Key%A_Index%
IfInString, Key%A_Index%, ERROR
{
Key%A_Index% :=
break
}
}
If !Key1
Key1 := "72f7888e-0a65-4f90-aeea-c08f3ae1a6bf"
}
Gui, Settings: New, -SysMenu, League Tools %ver% Settings
Gui, Settings: Add, Text, x8 y8 w53 h23 +0x200, Hotkeys:
Gui, Settings: Add, Text, x32 y32 w82 h23 +0x200, Login 1
Gui, Settings: Add, Edit, x128 y32 w49 h21 vNewLoginKey1, %Login1Key%
Gui, Settings: Add, Text, x32 y56 w81 h23 +0x200, Login 2
Gui, Settings: Add, Edit, x128 y56 w49 h21 vNewLoginKey2, %Login2Key%
Gui, Settings: Add, Text, x32 y80 w81 h23 +0x200, Login 3
Gui, Settings: Add, Edit, x128 y80 w49 h21 vNewLoginKey3, %Login3Key%
Gui, Settings: Add, Text, x32 y104 w81 h23 +0x200, Restart Queue
Gui, Settings: Add, Edit, x128 y104 w49 h21 vNewRestartQueue, %ReStartQKey%
Gui, Settings: Add, Text, x32 y128 w81 h23 +0x200, Reload Script
Gui, Settings: Add, Edit, x128 y128 w49 h21 vNewReloadSubKey, %ReloadSubKey%
Gui, Settings: Add, Text, x8 y192 w88 h23 +0x200, API Call Settings:
Gui, Settings: Add, Text, x32 y216 w81 h23 +0x200, Region
Gui, Settings: Add, Edit, x128 y216 w49 h21 vNewRegion, %Reg%
Gui, Settings: Add, Text, x32 y240 w81 h23 +0x200, Locale
Gui, Settings: Add, Edit, x128 y240 w49 h21 vNewLocale, %Loc%
Gui, Settings: Add, Text, x8 y280 w81 h23 +0x200, Defaults:
Gui, Settings: Add, Text, x32 y304 w81 h23 +0x200, Default Login
Gui, Settings: Add, Edit, x128 y304 w49 h21 vNewDefLogin, %lgn%
Gui, Settings: Add, Text, x32 y328 w81 h23 +0x200, Queue Wait
Gui, Settings: Add, Edit, x128 y328 w49 h21 vNewQueueWaitTime, %QueueWaitTime%
Gui, Settings: Add, Text, x32 y352 w81 h23 +0x200, Toaster Mode
Gui, Settings: Add, Edit, x128 y352 w49 h21 vNewToasterMode, %Toaster%
Gui, Settings: Add, Text, x8 y392 w49 h25 +0x200, API Key:
Gui, Settings: Add, Edit, x72 y392 w215 h25 vNewAPIKey, %key1%
Gui, Settings: Add, Text, x200 y8 w120 h23 +0x200, Login Information:
Gui, Settings: Add, Listview, x224 y32 w249 h300 gLoginChange AltSubmit -Hdr, Auto Login Information:|Pass ;|SumName|SumID
LV_ModifyCol(2, 1)
Loop,
{
If !Login%A_Index%
break
LV_Add(, Login%A_Index%, Pass%A_Index%)
}
Gui, Settings: Add, Button, x225 y335 w60 h15 gLoginAdd, Add
Gui, Settings: Add, Button, x295 y335 w60 h15 gLoginRemove, Remove
Gui, Settings: Add, Button, x304 y392 w80 h23 gSettingsOK, &OK
Gui, Settings: Add, Button, x392 y392 w80 h23 gSettingsCancel, &Cancel
Gui, Settings: Show, w481 h424
}
return
LoginChange:
If (A_GuiEvent = "DoubleClick")
{
LoginNum := A_EventInfo
Gui +OwnDialogs
InputBox, Login%LoginNum%, League Tools %ver%, Enter new username
If ErrorLevel
return
InputBox, Pass%LoginNum%, League Tools %ver%, Enter new password, HIDE
If ErrorLevel
return
;InputBox, NewSumName, League Tools %ver%, Enter Summoner Name. This is used for
;InputBox, NewSumID, League Tools %ver%, Enter Summoner ID. Type '1' to attempt auto lookup.
If (Login%LoginNum%) && (Pass%LoginNum%)
{
ObfPass := Obf(Pass%LoginNum%, 1, 1234)
LV_Modify(LoginNum, , Login%LoginNum%, ObfPass)
}
}
If (A_GuiEvent = "Normal")
global SelectedRow := A_EventInfo
return
SettingsOK:
{
Gui, Settings: Submit
;Save hotkeys to .INI
FileDelete, %A_ScriptDir%\%ScriptName%\INI\%ScriptName%_hotkeys.ini
If !NewLoginKey1
NewLoginKey1 := "F7"
If !NewLoginKey2
NewLoginKey2 := "F8"
If !NewLoginKey3
NewLoginKey3 := "F9"
If !ReStartQKey
ReStartQKey := "F10"
If !ReloadSubKey
ReloadSubKey := "F12"
IniWrite, %NewLoginKey1%, %A_ScriptDir%\%ScriptName%\INI\%ScriptName%_hotkeys.ini, HotKeys, Login1
IniWrite, %NewLoginKey2%, %A_ScriptDir%\%ScriptName%\INI\%ScriptName%_hotkeys.ini, HotKeys, Login2
IniWrite, %NewLoginKey3%, %A_ScriptDir%\%ScriptName%\INI\%ScriptName%_hotkeys.ini, HotKeys, Login3
IniWrite, %NewRestartQueue%, %A_ScriptDir%\%ScriptName%\INI\%ScriptName%_hotkeys.ini, HotKeys, ReStartQKey
IniWrite, %NewReloadSubKey%, %A_ScriptDir%\%ScriptName%\INI\%ScriptName%_hotkeys.ini, HotKeys, Reload
FileDelete, %A_ScriptDir%\%ScriptName%\INI\%ScriptName%_config.ini
IniWrite, %NewRegion%, %A_ScriptDir%\%ScriptName%\INI\%ScriptName%_config.ini, Region, Reg
IniWrite, %NewLocale%, %A_ScriptDir%\%ScriptName%\INI\%ScriptName%_config.ini, Locale, Loc
IniWrite, %NewDefLogin%, %A_ScriptDir%\%ScriptName%\INI\%ScriptName%_config.ini, DefaultLogin, lgn
IniWrite, %NewQueueWaitTime%, %A_ScriptDir%\%ScriptName%\INI\%ScriptName%_config.ini, QueueTime, QueueWaitTime
IniWrite, %NewToasterMode%, %A_ScriptDir%\%ScriptName%\INI\%ScriptName%_config.ini, Toaster, Toaster
Loop,
{
LV_GetText(Login, A_Index, 1)
If !Login
break
LV_GetText(Pass, A_Index, 2)
IniWrite, %Login%, %A_ScriptDir%\%ScriptName%\INI\%ScriptName%_config.ini, Login%A_Index%, Username
IniWrite, %Pass%, %A_ScriptDir%\%ScriptName%\INI\%ScriptName%_config.ini, Login%A_Index%, Password
}
;FileDelete, %A_ScriptDir%\%ScriptName%\INI\%ScriptName%_keys.ini
IniWrite, %NewAPIKey%, %A_ScriptDir%\%ScriptName%\INI\%ScriptName%_keys.ini, Keys, Key1
;Reset Variables
IniRead, Reg, %A_ScriptDir%\%ScriptName%\INI\%ScriptName%_config.ini, Region, Reg, %A_Space%
IniRead, Loc, %A_ScriptDir%\%ScriptName%\INI\%ScriptName%_config.ini, Locale, Loc, %A_Space%
IniRead, lgn, %A_ScriptDir%\%ScriptName%\INI\%ScriptName%_config.ini, DefaultLogin, lgn, 1
IniRead, QueueWaitTime, %A_ScriptDir%\%ScriptName%\INI\%ScriptName%_config.ini, QueueTime, QueueWaitTime, 500
IniRead, Toaster, %A_ScriptDir%\%ScriptName%\INI\%ScriptName%_config.ini, Toaster, Toaster, 0
Loop,
{
IniRead, Login%A_Index%, %A_ScriptDir%\%ScriptName%\INI\%ScriptName%_config.ini, Login%A_Index%, Username
IniRead, Pass%A_Index%, %A_ScriptDir%\%ScriptName%\INI\%ScriptName%_config.ini, Login%A_Index%, Password
IniRead, SumName%A_Index%, %A_ScriptDir%\%ScriptName%\INI\%ScriptName%_config.ini, Login%A_Index%, SumName
IniRead, SumID%A_Index%, %A_ScriptDir%\%ScriptName%\INI\%ScriptName%_config.ini, Login%A_Index%, SumID
IfInString, Login%A_Index%, ERROR
{
Login%A_Index% :=
break
}
}
IniRead, Login1Key, %A_ScriptDir%\%ScriptName%\INI\%ScriptName%_hotkeys.ini, Hotkeys, Login1, F7
IniRead, Login2Key, %A_ScriptDir%\%ScriptName%\INI\%ScriptName%_hotkeys.ini, Hotkeys, Login2, F8
IniRead, Login3Key, %A_ScriptDir%\%ScriptName%\INI\%ScriptName%_hotkeys.ini, Hotkeys, Login3, F9
IniRead, ReStartQKey, %A_ScriptDir%\%ScriptName%\INI\%ScriptName%_hotkeys.ini, Hotkeys, ReStartQKey, F10
IniRead, ReloadSubKey, %A_ScriptDir%\%ScriptName%\INI\%ScriptName%_hotkeys.ini, Hotkeys, Reload, F12
Gui, Settings: Destroy
Menu, Accounts, Delete
Loop,
{
If Login%A_Index%
Menu, Accounts, Add, % Login%A_Index%, Tools
else
break
}
Menu, Tray, Insert, Login Only, Select Account, :Accounts
}
return
SettingsCancel:
Gui, Settings: Destroy
return
LoginAdd:
Gui +OwnDialogs
InputBox, Login, League Tools %ver%, Enter new username
InputBox, Pass, League Tools %ver%, Enter new password, HIDE
ObfPass := Obf(Pass, 1, 1234)
LV_Add(, Login, ObfPass)
return
LoginRemove:
If SelectedRow = 0
return
LV_Delete(SelectedRow)
SelectedRow := 0
return
ReloadSub:
reload
return
ClipCursor(Confine=True, x1=0 , y1=0, x2=1920, y2=1080)
{
VarSetCapacity(R,16,0), NumPut(x1,&R+0),NumPut(y1,&R+4),NumPut(x2,&R+8),NumPut(y2,&R+12)
Return Confine ? DllCall( "ClipCursor", UInt,&R ) : DllCall( "ClipCursor" )
}
ExitSub:
{
;Save hotkeys to .INI
FileDelete, %A_ScriptDir%\%ScriptName%\INI\%ScriptName%_hotkeys.ini
If !Login1Key
Login1Key := "F7"
If !Login2Key
Login2Key := "F8"
If !Login3Key
Login3Key := "F9"
If !ReStartQKey
ReStartQKey := "F10"
If !ReloadSubKey
ReloadSubKey := "F12"
IniWrite, %Login1Key%, %A_ScriptDir%\%ScriptName%\INI\%ScriptName%_hotkeys.ini, HotKeys, Login1
IniWrite, %Login2Key%, %A_ScriptDir%\%ScriptName%\INI\%ScriptName%_hotkeys.ini, HotKeys, Login2
IniWrite, %Login3Key%, %A_ScriptDir%\%ScriptName%\INI\%ScriptName%_hotkeys.ini, HotKeys, Login3
IniWrite, %ReStartQKey%, %A_ScriptDir%\%ScriptName%\INI\%ScriptName%_hotkeys.ini, HotKeys, ReStartQKey
IniWrite, %ReloadSubKey%, %A_ScriptDir%\%ScriptName%\INI\%ScriptName%_hotkeys.ini, HotKeys, Reload
FileDelete, %A_ScriptDir%\%ScriptName%\INI\%ScriptName%_config.ini
IniWrite, %Reg%, %A_ScriptDir%\%ScriptName%\INI\%ScriptName%_config.ini, Region, Reg
IniWrite, %Loc%, %A_ScriptDir%\%ScriptName%\INI\%ScriptName%_config.ini, Locale, Loc
IniWrite, %lgn%, %A_ScriptDir%\%ScriptName%\INI\%ScriptName%_config.ini, DefaultLogin, lgn
IniWrite, %QueueWaitTime%, %A_ScriptDir%\%ScriptName%\INI\%ScriptName%_config.ini, QueueTime, QueueWaitTime
IniWrite, %Toaster%, %A_ScriptDir%\%ScriptName%\INI\%ScriptName%_config.ini, Toaster, Toaster
Loop,
{
Login := Login%A_Index%
If ! Login
break
Pass := Pass%A_Index%
SumName := SumName%A_Index%
SumID := SumID%A_Index%
IniWrite, %Login%, %A_ScriptDir%\%ScriptName%\INI\%ScriptName%_config.ini, Login%A_Index%, Username
IniWrite, %Pass%, %A_ScriptDir%\%ScriptName%\INI\%ScriptName%_config.ini, Login%A_Index%, Password
;IniWrite, %SumName%, %A_ScriptDir%\%ScriptName%\INI\%ScriptName%_config.ini, Login%A_Index%, SumName
;IniWrite, %SumID%, %A_ScriptDir%\%ScriptName%\INI\%ScriptName%_config.ini, Login%A_Index%, SumID
}
;FileDelete, %A_ScriptDir%\%ScriptName%\INI\%ScriptName%_keys.ini
IniWrite, %Key1%, %A_ScriptDir%\%ScriptName%\INI\%ScriptName%_keys.ini, Keys, Key1
ExitApp
}
Obf(x,y,Seed=12345)
{
String=abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890 -=.,?':;/\!@#$`%^&*()_+|
Random, ,Seed
Loop, Parse, x
{
Pos:=InStr(String,A_LoopField,1)
Random, Offset , 1, 86
Coded.=SubStr(String, y ? (Pos+Offset)>86 ? Pos+Offset-86 : Pos+Offset : (Pos-Offset)<1 ? Pos-Offset+86 : Pos-Offset,1)
}
Return Coded
}
class JSON
{
class Load extends JSON.Functor
{
Call(self, ByRef text, reviver:="")
{
this.rev := IsObject(reviver) ? reviver : false
this.keys := this.rev ? {} : false
static quot := Chr(34), bashq := "\" . quot
, json_value := quot . "{[01234567890-tfn"
, json_value_or_array_closing := quot . "{[]01234567890-tfn"
, object_key_or_object_closing := quot . "}"
key := ""
is_key := false
root := {}
stack := [root]
next := json_value
pos := 0
while ((ch := SubStr(text, ++pos, 1)) != "") {
if InStr(" `t`r`n", ch)
continue
if !InStr(next, ch, 1)
this.ParseError(next, text, pos)
holder := stack[1]
is_array := holder.IsArray
if InStr(",:", ch) {
next := (is_key := !is_array && ch == ",") ? quot : json_value
} else if InStr("}]", ch) {
ObjRemoveAt(stack, 1)
next := stack[1]==root ? "" : stack[1].IsArray ? ",]" : ",}"
} else {
if InStr("{[", ch) {
static json_array := Func("Array").IsBuiltIn || ![].IsArray ? {IsArray: true} : 0
(ch == "{")
? ( is_key := true
, value := {}
, next := object_key_or_object_closing )
; ch == "["
: ( value := json_array ? new json_array : []
, next := json_value_or_array_closing )
ObjInsertAt(stack, 1, value)
if (this.keys)
this.keys[value] := []
} else {
if (ch == quot) {
i := pos
while (i := InStr(text, quot,, i+1)) {
value := StrReplace(SubStr(text, pos+1, i-pos-1), "\\", "\u005c")
static tail := A_AhkVersion<"2" ? 0 : -1
if (SubStr(value, tail) != "\")
break
}
if (!i)
this.ParseError("'", text, pos)
value := StrReplace(value, "\/", "/")
, value := StrReplace(value, bashq, quot)
, value := StrReplace(value, "\b", "`b")
, value := StrReplace(value, "\f", "`f")
, value := StrReplace(value, "\n", "`n")
, value := StrReplace(value, "\r", "`r")
, value := StrReplace(value, "\t", "`t")
pos := i ; update pos
i := 0
while (i := InStr(value, "\",, i+1)) {
if !(SubStr(value, i+1, 1) == "u")
this.ParseError("\", text, pos - StrLen(SubStr(value, i+1)))
uffff := Abs("0x" . SubStr(value, i+2, 4))
if (A_IsUnicode || uffff < 0x100)
value := SubStr(value, 1, i-1) . Chr(uffff) . SubStr(value, i+6)
}
if (is_key) {
key := value, next := ":"
continue
}
} else {
value := SubStr(text, pos, i := RegExMatch(text, "[\]\},\s]|$",, pos)-pos)
static number := "number", integer :="integer"
if value is %number%
{
if value is %integer%
value += 0
}
else if (value == "true" || value == "false")
value := %value% + 0
else if (value == "null")
value := ""
else
this.ParseError(next, text, pos, i)
pos += i-1
}
next := holder==root ? "" : is_array ? ",]" : ",}"
} ; If InStr("{[", ch) { ... } else
is_array? key := ObjPush(holder, value) : holder[key] := value
if (this.keys && this.keys.HasKey(holder))
this.keys[holder].Push(key)
}
} ; while ( ... )
return this.rev ? this.Walk(root, "") : root[""]
}
ParseError(expect, ByRef text, pos, len:=1)
{
static quot := Chr(34), qurly := quot . "}"
line := StrSplit(SubStr(text, 1, pos), "`n", "`r").Length()
col := pos - InStr(text, "`n",, -(StrLen(text)-pos+1))
msg := Format("{1}`n`nLine:`t{2}`nCol:`t{3}`nChar:`t{4}"
, (expect == "") ? "Extra data"
: (expect == "'") ? "Unterminated string starting at"
: (expect == "\") ? "Invalid \escape"
: (expect == ":") ? "Expecting ':' delimiter"
: (expect == quot) ? "Expecting object key enclosed in double quotes"
: (expect == qurly) ? "Expecting object key enclosed in double quotes or object closing '}'"
: (expect == ",}") ? "Expecting ',' delimiter or object closing '}'"
: (expect == ",]") ? "Expecting ',' delimiter or array closing ']'"
: InStr(expect, "]") ? "Expecting JSON value or array closing ']'"
: "Expecting JSON value(string, number, true, false, null, object or array)"
, line, col, pos)
static offset := A_AhkVersion<"2" ? -3 : -4
throw Exception(msg, offset, SubStr(text, pos, len))
}
Walk(holder, key)
{
value := holder[key]
if IsObject(value) {
for i, k in this.keys[value] {
v := this.Walk(value, k)
if (v != JSON.Undefined)
value[k] := v
else
ObjDelete(value, k)
}
}
return this.rev.Call(holder, key, value)
}
}
class Dump extends JSON.Functor
{
Call(self, value, replacer:="", space:="")
{
this.rep := IsObject(replacer) ? replacer : ""
this.gap := ""
if (space) {
static integer := "integer"
if space is %integer%
Loop, % ((n := Abs(space))>10 ? 10 : n)
this.gap .= " "
else
this.gap := SubStr(space, 1, 10)
this.indent := "`n"
}
return this.Str({"": value}, "")
}
Str(holder, key)
{
value := holder[key]
if (this.rep)
value := this.rep.Call(holder, key, ObjHasKey(holder, key) ? value : JSON.Undefined)
if IsObject(value) {
static type := A_AhkVersion<"2" ? "" : Func("Type")
if (type ? type.Call(value) == "Object" : ObjGetCapacity(value) != "") {
if (this.gap) {
stepback := this.indent
this.indent .= this.gap
}
is_array := value.IsArray
if (!is_array) {
for i in value
is_array := i == A_Index
until !is_array
}
str := ""
if (is_array) {
Loop, % value.Length() {
if (this.gap)
str .= this.indent
v := this.Str(value, A_Index)
str .= (v != "") ? v . "," : "null,"
}
} else {
colon := this.gap ? ": " : ":"
for k in value {
v := this.Str(value, k)
if (v != "") {
if (this.gap)
str .= this.indent
str .= this.Quote(k) . colon . v . ","
}
}
}
if (str != "") {
str := RTrim(str, ",")
if (this.gap)
str .= stepback
}
if (this.gap)
this.indent := stepback
return is_array ? "[" . str . "]" : "{" . str . "}"
}
} else ; is_number ? value : "value"
return ObjGetCapacity([value], 1)=="" ? value : this.Quote(value)
}
Quote(string)
{
static quot := Chr(34), bashq := "\" . quot
if (string != "") {
string := StrReplace(string, "\", "\\")
, string := StrReplace(string, quot, bashq)
, string := StrReplace(string, "`b", "\b")
, string := StrReplace(string, "`f", "\f")
, string := StrReplace(string, "`n", "\n")
, string := StrReplace(string, "`r", "\r")
, string := StrReplace(string, "`t", "\t")
static rx_escapable := A_AhkVersion<"2" ? "O)[^\x20-\x7e]" : "[^\x20-\x7e]"
while RegExMatch(string, rx_escapable, m)
string := StrReplace(string, m.Value, Format("\u{1:04x}", Ord(m.Value)))
}
return quot . string . quot
}
}
Undefined[]
{
get {
static empty := {}, vt_empty := ComObject(0, &empty, 1)
return vt_empty
}
}
class Functor
{
__Call(method, ByRef arg, args*)
{
if IsObject(method)
return (new this).Call(method, arg, args*)
else if (method == "")
return (new this).Call(arg, args*)
}
}
}