Skip to content

Instantly share code, notes, and snippets.

@maestrith
Created June 28, 2014 17:12
Show Gist options
  • Save maestrith/a7674a47fbcb5f3b419e to your computer and use it in GitHub Desktop.
Save maestrith/a7674a47fbcb5f3b419e to your computer and use it in GitHub Desktop.
Posted using AHK Studio
addgame(){
addgame:
InputBox,profile,New Game,New Game Title?,,200,150,,,,,WASD
if ErrorLevel||profile=""
return
if settings.ssn("//Profile[@name='" profile "']")
Return m("Profile Already Exists")
default:=Default(),def:=default.ssn("//*"),main:=settings.ssn("//*")
main.appendchild(def),def.SetAttribute("name",profile)
LV_Add("Select Vis Focus",profile)
SetTimer,selectopen,On
return
}
change_profile(){
selectopen:
SetTimer,selectopen,Off
open:=1
cp:
if !LV_GetNext()
Return
if (A_EventInfo=46||A_EventInfo=8){
MsgBox,262449,Are you sure?,Can not be undone!
IfMsgBox,Cancel
return
LV_GetText(profile,LV_GetNext())
if rem:=settings.ssn("//Profile[@name='" profile "']"){
LV_Delete(LV_GetNext())
rem.ParentNode.RemoveChild(rem)
LV_Modify(1,"Select Vis Focus")
}
return
}
if (A_GuiEvent="Normal"||open=1||A_EventInfo=40||A_EventInfo=38){
GuiControl,1:-Redraw,SysTreeView321
TV_Delete(),xx:=new xml("xbox")
LV_GetText(profile,LV_GetNext()),open:=0
if !root:=settings.ssn("//Profile[@name='" profile "']")
return
master:=all:=root,all:=sn(all,"descendant::*"),main:=tt.Add("Main")
while,aa:=all.item[A_Index]{
if (ssn(aa,"@U").nodename=""&&aa.ParentNode.nodename="Main")
root:=tt.Add(aa.nodename,main,0,StrSplit(aa.text," ").1,ssn(aa,"@checked").text)
if (ssn(aa,"@U")&&aa.ParentNode.nodename="Main"){
att:=sn(aa,"@*")
top:=tt.Add(aa.nodename,main,1)
while,aa:=att.item[A_Index-1]
TV_Modify(tt.Add(aa.nodename,top,1,StrSplit(aa.text," ").1),"Vis")
}
if (aa.ParentNode.nodename!="Main"&&aa.parentnode.nodename!="Mouse"&&aa.nodename!="Mouse"&&aa.xml){
if (ssn(aa,"@U")){
att:=sn(aa,"@*")
lasttop:=tt.Add(aa.nodename,root,1)
while,aa:=att.item[A_Index-1]
TV_Modify(tt.Add(aa.nodename,lasttop,1,StrSplit(aa.text," ").1),"Vis")
}
else
tt.Add(aa.nodename,root,1,StrSplit(aa.text," ").1)
}
}
mouse:=sn(master,"Mouse/*"),stick:=0
keyset:={controller:1,invert:-1},root:=tt.Add("Mouse")
while,mm:=mouse.item[A_Index-1]{
TV_Modify(tt.Add(mm.nodename,root,0,StrSplit(mm.text," ").1,ssn(mm,"@checked").text),"Vis")
if ssn(mm,"@checked").text
stick+=A_Index
if key:=mm.text{
if A_Index=1
keyset.l:=key
if A_Index=2
keyset.r:=key
}
}
loop,2
xx.Transform()
GuiControl,1:+Redraw,SysTreeView321
xbx.Add(master),keyset.stick:=stick,xbox.main.Mouse(keyset)
debug(xx)
}
Return
}
Class treeviewhandle{
__New(hwnd){
this.hwnd:=hwnd
}
Add(name,parent=0,hidecheck=1,value="",checked=""){
Gui,1:TreeView,% this.hwnd
checked:=checked?"Check":""
tv:=TV_Add(xbox.user(name) _:=value? " = " value:"",parent,checked)
if hidecheck
hidecheck(tv)
root:=parent?xx.ssn("//*[@tv='" parent "']"):xx.ssn("//*"),check:=checked?1:0
att:=hidecheck?{tv:tv}:{tv:tv,checked:check}
xx.under({node:name,under:root,att:att}).text:=value
return tv
}
}
class xbox{
static mousekeys:={LButton:"left",RButton:"right",WheelDown:"WheelDown",WheelUp:"WheelUp"},Buttons:={Up:1,Down:2,Left:4,Right:8,Start:16,Back:32,LeftThumb:64,RightThumb:128,LeftShoulder:256,RightShoulder:512,A:0x1000,B:0x2000,X:0x4000,Y:0x8000}
,axis:={LThumb:[8,10],RThumb:[12,14]},axisdirection:={lthumb:[["L","R"],["D","U"]],rthumb:[["L","R"],["D","U"]]}
,old:=["LThumbX","LThumbY"]
,triggers:={LTrigger:6,RTrigger:7},mode:="",keys:=[]
,dead:={lthumb:50,rthumb:50,ltrigger:50,rtrigger:50},axisdir:={U:1,D:1,L:1,R:1}
__New(count=1){
static
dll:=InStr(A_OSVersion,8)?"Xinput1_4":"Xinput1_3",this.library:=DllCall("LoadLibrary","str",dll),this.ctrl:=[],VarSetCapacity(move,28),this.count:=count,main:=this,this.move:=&move,VarSetCapacity(State,16)
main.ctrl:=[]
NumPut(0,move,8),NumPut(0,move,12),NumPut(0x0001,move,16)
if !(this.library){
m("Error loading the DLL")
ExitApp
}
for a,b in {xGetState:"XInputGetState",xBattery:"XInputGetBatteryInformation",xSetState:"XInputSetState",xinputid:"XInputGetKeystroke"}
this[a]:=DllCall("GetProcAddress","ptr",this.library,"astr",b)
SetTimer,getstate,30
xbox.mode:="edit_keys",xbox.main:=this
Return this
getstate:
do:=xbox.mode,keys:=[]
Loop,% main.count{
DllCall(main.xGetState,"uint",A_Index-1,uptr,&State),index:=A_Index,count:=1
for a,b in xbox.axis{
for c,d in b{
value:=Floor(NumGet(state,d,"short")/32767*100)
direction:=a _:=c=1?"X":"Y"
main.ctrl[Index,direction]:=value
if (Abs(value)>xbox.dead[a]){
vv:=value<0?1:2
if (xbox.mode="edit_keys")
keys[a]:=xbox.axisdirection[a,A_Index,vv]
Else{
direction:=xbox.axisdirection[a,A_Index,vv],key:=xbox.associate(a,direction)
if key
keys[direction a]:={direction:direction,key:key}
}
}
}
}
buttons:=NumGet(State,4),total:=1
for a,b in main.Buttons{
if buttons&b
keys[a]:=xbox.associate(a)
}
for a,b in xbox.triggers{
if (NumGet(State,b,"uchar")>xbox.dead[a])
keys[a]:=xbox.associate(a)
}
%do%(keys)
if main.mousectrl[A_Index]
main.xmouse(A_Index)
}
Return
}
associate(c,d=1){
static axis:={thumbx:["Left","Right"],thumby:["Down","Up"]},lasttv
if InStr(this.mode,"edit")
Return c
if !c
Return
Return d!=1?xx.ssn("//" c "/" d).text:StrSplit(xx.ssn("//Main/" c).text," ").1
}
user(info=""){
static user:={LThumbX:"Left Analog X",LThumbY:"Left Analog Y",RThumbX:"Right Analog X"
,RThumbY:"Right Analog Y",LeftShoulder:"Left Shoulder",LeftThumb:"Left Thumb"
,RightShoulder:"Right Shoulder",RightThumb:"Right Thumb",ltrigger:"Left Trigger"
,rtrigger:"Right Trigger",las:"Left Analog Stick",ras:"Right Analog Stick",LButton:"Left Mouse Button",RButton:"Right Mouse Button",U:"Up",D:"Down",L:"Left",R:"Right"
,lthumb:"Left Analog Stick",rthumb:"Right Analog Stick"}
Return _:=user[info]?user[info]:info
}
Add(value){
/*
this.current:=[]
sn:=sn(value,"//*")
while,ssn:=sn.item[A_Index-1]{
;m(ssn.xml)
}
;xbox.keys[value]:=1
*/
}
modeset(x){
xbox.mode:=x=1?"getstate":x=0?"edit_keys":""
}
xinput(controller){
VarSetCapacity(input,12)
DllCall(this.xinputid,uint,controller,int,0,uptr,&input)
if number:=NumGet(input,0,"uint")&0xff=6
m(number&0xff,NumGet(input,4,"uint"))
}
Battery(Controller){
VarSetCapacity(batt,4),DllCall(this.xBattery,"uint",Controller,"uint",0,"uptr",&batt)
Return NumGet(batt,1)
}
Vibrate(Controller=0,large=0,small=0){
DllCall(this.xSetState,"uint",controller,"uint*",large|small<<16)
}
Mouse(info){
this.mousectrl[info.controller]:=info
}
Send(key,state){
if (key="")
Return
if this.mousekeys[key]{
if InStr(key,"wheel")&&state="Down"
MouseClick,% this.mousekeys[key]
Else if !InStr(key,"wheel")
MouseClick,% this.mousekeys[key],,,,,%state%
}
else{
StringLower,key,key
ControlSend,,{%key% %state%},A
}
}
xMouse(controller){
static toggle:=[],axis:={1:["LThumbX","LThumbY"],2:["RThumbX","RThumbY"],3:["LThumbX","LThumbY","RThumbX","RThumbY"]},lx,ly
main:=this.ctrl[controller],ctrl:=this.mousectrl[controller],dd:=[]
for a,b in axis[ctrl.stick]
if (Abs(main[b])>35)
dd[SubStr(b,0,1)]:={value:main[b],which:SubStr(b,1,1)}
offsetx:=dd.x.value,offsety:=dd.y.value
stick:=dd.x.which?dd.x.which:dd.y.which?dd.y.which:""
if (xbox.mode="edit_keys")
Return
if (ctrl[stick]&&(toggle[ctrl[stick]]!=1)){
key:=ctrl[stick],this.Send(key,"Down"),toggle[ctrl[stick]]:=1
Sleep,2
}
if (ctrl[stick]=""&&toggle.prev)
this.Send(toggle.prev,"up"),toggle[toggle.prev]:=""
toggle.prev:=ctrl[stick]
if (Abs(offsetx)>10||Abs(offsety)>10){
movex:=Floor(offsetx/7),movey:=(Floor(offsety/7)*ctrl.invert)
NumPut(movex,this.move,4),NumPut(movey,this.move,8)
Loop,5
{
DllCall("User32\SendInput",uint,1,uptr,this.move,uint,28)
sleep,1
}
}
lx:=offsetx,ly:=offsety
}
}
class xml{
keep:=[]
__New(param*){
if !FileExist(A_ScriptDir "\lib")
FileCreateDir,%A_ScriptDir%\lib
root:=param.1,file:=param.2
file:=file?file:root ".xml"
temp:=ComObjCreate("MSXML2.DOMDocument"),temp.setProperty("SelectionLanguage","XPath")
this.xml:=temp
ifexist %file%
temp.load(file),this.xml:=temp
else
this.xml:=this.CreateElement(temp,root)
this.file:=file
xml.keep[root]:=this
}
CreateElement(doc,root){
return doc.AppendChild(this.xml.CreateElement(root)).parentnode
}
add(info){
path:=info.path,p:="/",dup:=this.ssn("//" path)?1:0
if next:=this.ssn("//" path)?this.ssn("//" path):this.ssn("//*")
Loop,Parse,path,/
last:=A_LoopField,p.="/" last,next:=this.ssn(p)?this.ssn(p):next.appendchild(this.xml.CreateElement(last))
if (info.dup&&dup)
next:=next.parentnode.appendchild(this.xml.CreateElement(last))
for a,b in info.att
next.SetAttribute(a,b)
if info.text!=""
next.text:=info.text
return next
}
under(info){
new:=info.under.appendchild(this.xml.createelement(info.node))
for a,b in info.att
new.SetAttribute(a,b)
new.text:=info.text
return new
}
ssn(node){
return this.xml.SelectSingleNode(node)
}
sn(node){
return this.xml.SelectNodes(node)
}
__Get(x=""){
return this.xml.xml
}
Get(path,Default){
return value:=this.ssn(path).text!=""?this.ssn(path).text:Default
}
transform(){
static
if !IsObject(xsl){
xsl:=ComObjCreate("MSXML2.DOMDocument")
style=
(
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes" encoding="UTF-8"/>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
<xsl:for-each select="@*">
<xsl:text></xsl:text>
</xsl:for-each>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
)
xsl.loadXML(style),style:=null
}
this.xml.transformNodeToObject(xsl,this.xml)
}
save(x*){
if x.1=1
this.Transform()
filename:=this.file?this.file:x.1.1
file:=fileopen(filename,"rw")
file.seek(0)
file.write(this[])
file.length(file.position)
}
remove(rem){
if !IsObject(rem)
rem:=this.ssn(rem)
rem.ParentNode.RemoveChild(rem)
}
ea(path){
list:=[]
if nodes:=path.nodename
nodes:=path.SelectNodes("@*")
else if path.text
nodes:=this.sn("//*[text()='" path.text "']/@*")
else if !IsObject(path)
nodes:=this.sn(path "/@*")
else
for a,b in path
nodes:=this.sn("//*[@" a "='" b "']/@*")
while,n:=nodes.item(A_Index-1)
list[n.nodename]:=n.text
return list
}
}
sn(node,path){
return node.selectnodes(path)
}
ssn(node,path){
return node.selectsinglenode(path)
}
debug(info){
Return
if !hwnd(2){
Gui,2:+hwndhwnd
hwnd(2,hwnd)
Gui,2:Add,Edit,w500 h500 -Wrap
Gui,2:Show,% "x" A_ScreenWidth-530 " y0 NA",Debug
}
info.Transform()
Gui,2:Default
GuiControl,2:-Redraw,Edit1
ControlSetText,Edit1,% info[],% hwnd([2])
GuiControl,2:+Redraw,Edit1
Gui,1:Default
}
default(){
defaultbuttons:={x:"F",a:"Space",y:1,b:2,back:"Escape",start:"Enter",LTrigger:"LButton",RTrigger:"RButton"}
defaultaxis:={LThumb:[{U:"W"},{L:"A"},{D:"S"},{R:"D"}],RThumb:[{U:""},{L:""},{D:""},{R:""}]}
temp:=new xml("Profile")
root:=temp.Add({path:"Main"})
for a,b in defaultaxis{
top:=temp.under({under:root,node:a})
for c,d in b
for e,f in d
top.SetAttribute(e,f)
}
for a,b in [xbox.buttons,xbox.triggers]
for c in b
temp.under({under:root,node:c,att:{checked:0}}).text:=defaultbuttons[c]
mouse:=temp.Add({path:"Mouse"})
for a,b in ["las","ras"]
top:=temp.under({under:mouse,node:b,att:{checked:0}})
Loop,2
temp.Transform()
return temp
}
Edit_Keys(info){
list:=[]
for a,b in info
main:=xx.ssn("//Main/" a),ea:=xx.ea(main),TV_Get(ea.tv,"C")?top:=main:list.1:=[a,b]
if !list.1.1
return
if IsObject(top){
if (next:=ssn(top,list.1.1))
if xbox.axisdir[list.1.2]{
if (tv:=ssn(next,list.1.2 "/@tv").text)
Show(tv)
}Else
Show(ssn(next,"@tv").text)
}Else if (main:=xx.ssn("//Main/" list.1.1)){
if xbox.axisdir[list.1.2]{
if tv:=ssn(main,list.1.2 "/@tv").text
Show(tv)
}Else
Show(ssn(main,"@tv").text)
}
}
export(){
export:
LV_GetText(profile,LV_GetNext())
main:=settings.ssn("//Profile[@name='" profile "']")
clone:=main.clonenode(1)
save:=new xml("Settings",profile ".xml")
main:=save.ssn("*")
main.appendchild(clone)
save.save(1)
return
}
getstate(info){
static keystate:=[]
list:=[]
for a,b in info{
a:=InStr(a,"lthumb")||InStr(a,"rthumb")?SubStr(a,2):a
main:=xx.ssn("//Main/" a),ea:=xx.ea(main),TV_Get(ea.tv,"C")?top:=main:list.Insert([a,b])
}
if IsObject(top){
newinfo:=[]
for a,b in list{
if !b.1
Continue
find:=IsObject(b.2)?b.2.direction:b.1
key:=ssn(top,"descendant::" find).text
newinfo[b.1]:=key
}
info:=newinfo
}
for a,b in keystate{
b:=b.key?b.key:b
if (info[a]!=b&&info[a].key!=b)
xbox.Send(b,"Up"),keystate.remove(a)
}
for a,b in info{
b:=b.key?b.key:b
if (keystate[a]!=b)
xbox.Send(b,"Down")
keystate[a]:=b
}
}
gui(){
static hotkey
Gui,+hwndhwnd
hwnd(1,hwnd)
Gui,Margin,5,5
Gui,Add,ListView,w155 h520 gcp AltSubmit -Multi,Profiles
Gui,Add,TreeView,x+5 w240 h520 gselect hwndhwnd Checked AltSubmit
Gui,Add,Hotkey,xm vhotkey w195 ghotkey
Gui,Add,Edit,x+5 ghkedit w200
Gui,Add,Button,xm w400 gaddgame Default,Add Profile
Gui,Add,Radio,xm gswitchstate Checked,Edit
Gui,Add,Radio,x+5 gswitchstate,Run
Gui,Add,Button,xm gexport,Export Script
Gui,Add,Button,x+5 gimport,Import Script
Gui,Show,,XBox Setup
xbx:=new xbox(),xbx.modeset(0)
list:=settings.sn("//Profile")
while,ll:=list.item[A_Index-1]
LV_Add("",ssn(ll,"@name").text)
LV_Modify(1,"Select Vis Focus")
tt:=new treeviewhandle(hwnd)
SetTimer,selectopen,On
Return
Hotkey:
Gui,Submit,Nohide
node:=xx.ssn("//*[@tv='" TV_GetSelection() "']")
selection:=node.nodename
if selection in Main,Lthumb,Rthumb,Mouse
return
mirror(node,hotkey)
debug(xx)
return
hkedit:
ControlGetText,value,Edit1
GuiControl,,msctls_hotkey321,%value%
Goto Hotkey
Return
switchstate:
if A_GuiControl=edit
xbx.modeset(0)
Else{
SetTimer,selectopen,On
xbx.modeset(1)
}
return
}
hidecheck(list){
VarSetCapacity(tvitem,28)
if IsObject(list){
for index,id in list{
info:=A_PtrSize=4?{0:8,4:id,12:0xf000}:{0:8,8:id,20:0xf000}
for offset,value in info
NumPut(value,tvitem,offset)
SendMessage,4415,0,&tvitem,SysTreeView321,% hwnd([1])
}
}Else{
info:=A_PtrSize=4?{0:8,4:list,12:0xf000}:{0:8,8:list,20:0xf000}
for offset,value in info
NumPut(value,tvitem,offset)
SendMessage,4415,0,&tvitem,SysTreeView321,% hwnd([1])
}
}
hwnd(win,hwnd=""){
static window:=[]
if (win.rem){
Gui,% win.rem ":Destroy"
window.remove[win.rem]
}
if IsObject(win)
return "ahk_id" window[win.1]
if !hwnd
return window[win]
window[win]:=hwnd
}
import(){
import:
return
}
mirror(node,hotkey="0000"){
LV_GetText(profile,LV_GetNext())
ancestor:=sn(node,"ancestor-or-self::*"),main:=settings.ssn("//Profile[@name='" profile "']")
name:=node.nodename
if name in lthumb,rthumb,main,mouse
return
while,aa:=ancestor.item[A_Index]{
main:=ssn(main,"@" aa.nodename "|" aa.nodename)
if check:=ssn(aa,"@checked")
main.SetAttribute("checked",check.text)
}
if (hotkey!="0000"){
main.text:=hotkey
value:=hotkey?" = " hotkey:""
TV_Modify(TV_GetSelection(),"",xbox.user(node.nodename) value)
}
}
m(x*){
for a,b in x
list.=b "`n"
msgbox %list%
}
t(x*){
for a,b in x
list.=b "`n"
tooltip %list%
}
save(tv,value=""){
/*
if !LV_GetNext()
return m("Select a profile")
main:=xx.ssn("//*[@tv='" tv "']"),LV_GetText(profile,LV_GetNext()),pro:=settings.ssn("//Profile[@name='" profile "']")
if xbox.axis[main.ParentNode.nodename]
ssn(pro,"//" main.ParentNode.nodename).SetAttribute(main.nodename,value)
Else{
ea:=xml.ea(main)
for a,b in ea
m(a,b,pro.xml)
for a,b in {value:ea.value,checked:ea.checked}
ssn(pro,"//" ea.name).SetAttribute(a,b)
}
*/
}
Select(){
select:
tv:=A_EventInfo>1000?A_EventInfo:TV_GetSelection()
if (A_GuiEvent!="Normal"&&A_GuiEvent!="K"&&A_GuiEvent!="S")
Return
value:=xx.ssn("//*[@tv='" tv "']"),open:=0,LV_GetText(profile,LV_GetNext())
if (A_GuiEvent="K"&&A_EventInfo=32){
ea:=xml.ea(value)
if ea.checked=""
hidecheck(TV_GetSelection())
}
update:=xx.ssn("//*[@tv='" tv "']")
checked:=TV_Get(tv,"C")?1:0
if (ssn(update,"@checked").nodename)
update.SetAttribute("checked",checked),mirror(update)
if (checked){
if (TV_GetChild(tv)=0&&update.ParentNode.nodename!="Mouse"){
MsgBox,289,Add Alt Keys,Are you sure?
IfMsgBox,Cancel
Return
top:=settings.ssn("//Profile[@name='" profile "']/Main/" update.nodename)
default:=Default()
list:=Default.sn("//Main/*")
while,ll:=list.item[A_Index-1]
if (ll.nodename!=top.nodename)
top.appendchild(ll)
SetTimer,selectopen,On
}
}
debug(xx)
GuiControl,1:,msctls_hotkey321,% xx.ssn("//*[@tv='" tv "']").text
Return
}
show(tv){
static lasttv
if (tv=lasttv)
return
GuiControl,-Redraw,SysTreeView321
next:=0
while,next:=TV_GetNext(next,"F")
TV_Modify(next,"-Expand -bold")
TV_Modify(tv,"Select bold")
GuiControl,+Redraw,SysTreeView321
TV_GetText(value,TV_GetChild(tv))
GuiControl,,msctls_hotkey321,%value%
ControlFocus,msctls_hotkey321,% hwnd([1])
lasttv:=tv
}
#Persistent
#SingleInstance,Force
SetMouseDelay, -1
xx:=new xml("xbox"),settings:=new xml("Settings")
global profile:=[],xx,settings,tt,xbx
Gui()
OnExit,GuiClose
return
GuiClose:
settings.save(1)
ExitApp
return
#Include D:\Projects\My Scripts\Guild Wars 2\AddGame.ahk
#Include D:\Projects\My Scripts\Guild Wars 2\change profile.ahk
#Include D:\Projects\My Scripts\Guild Wars 2\Class tt.ahk
#Include D:\Projects\My Scripts\Guild Wars 2\Class xbox.ahk
#Include D:\Projects\My Scripts\Guild Wars 2\Class xml.ahk
#Include D:\Projects\My Scripts\Guild Wars 2\debug.ahk
#Include D:\Projects\My Scripts\Guild Wars 2\default.ahk
#Include D:\Projects\My Scripts\Guild Wars 2\Edit Keys.ahk
#Include D:\Projects\My Scripts\Guild Wars 2\getstate.ahk
#Include D:\Projects\My Scripts\Guild Wars 2\gui.ahk
#Include D:\Projects\My Scripts\Guild Wars 2\hidecheck.ahk
#Include D:\Projects\My Scripts\Guild Wars 2\hwnd.ahk
#Include D:\Projects\My Scripts\Guild Wars 2\mirror.ahk
#Include D:\Projects\My Scripts\Guild Wars 2\Msgbox.ahk
#Include D:\Projects\My Scripts\Guild Wars 2\save.ahk
#Include D:\Projects\My Scripts\Guild Wars 2\select.ahk
#Include D:\Projects\My Scripts\Guild Wars 2\show.ahk
#Include D:\Projects\My Scripts\Guild Wars 2\export.ahk
#Include D:\Projects\My Scripts\Guild Wars 2\import.ahk
#Include AddGame.ahk
#Include change profile.ahk
#Include Class tt.ahk
#Include Class xbox.ahk
#Include Class xml.ahk
#Include debug.ahk
#Include default.ahk
#Include Edit Keys.ahk
#Include getstate.ahk
#Include gui.ahk
#Include hidecheck.ahk
#Include hwnd.ahk
#Include mirror.ahk
#Include Msgbox.ahk
#Include save.ahk
#Include select.ahk
#Include show.ahk
#Include export.ahk
#Include import.ahk
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment