返回列表 回复 发帖

AU3-魔兽插件管理器


  1. #NoTrayIcon ;;;不显示任务栏的图标
  2. ;;;;这段意思是防止重复打开程序
  3. $g_szVersion = "My Script 1.1"
  4. If WinExists($g_szVersion) Then Exit
  5. AutoItWinSetTitle($g_szVersion)
  6. ;;;本段是引用这两个文件,因为在下面会用的到.
  7. #include <GUIConstants.au3>
  8. #include <file.au3>
  9. ;;;定义变量
  10. dim $area,$Radio[11],$label,$area[11],$G_area[11],$address[11],$coord,$x,$y,$BUTTON[7][2],$GAMEpath,$TEMP,$message,$LOGIN = 0
  11. $gamepath = INIREAD ("WOWUIM.INI","游戏路径","游戏路径",@ScriptDir)
  12. If Not _FileReadToArray($GAMEpath & "\config.ini",$area) Then
  13. MsgBox(4096,"错误", "读取配置文件CONFIG.INI时发生错误!将启动魔兽自身登录器!")
  14. $LOGIN = 1
  15. gamestart()
  16. EndIf
  17. if $area[0] > 10 then
  18. Msgbox (4096,"对不起","目前本软件最多支持九个魔兽大区!")
  19. exit
  20. endif
  21. For $x = 2 to $area[0]
  22. $G_area[$x] =  StringLeft($area[$x],15 )
  23. $address[$x] = StringMid($area[$x],17, 22)
  24. Next

  25. $UI = IniReadSection("wowuim.ini", "插件地址")
  26. IF $UI = 1 THEN
  27. Msgbox (4096,"对不起","读取配置文件WOWUIM.INI时发生错误!")
  28. exit
  29. endif
  30. if $UI[0][0] > 6 then
  31. Msgbox (4096,"对不起","目前本软件最多可同时管理六个插件!")
  32. exit
  33. endif
  34. $MESSAGE = INIREAD ("WOWUIM.INI","提示信息","提示信息","")
  35. IF $MESSAGE THEN MsgBox (4144,"注意",$MESSAGE)
  36. GUICreate("魔兽世界插件管理器",230,280)
  37. GUICtrlCreateGroup("请选择大区",  6, 8, 130, 240)
  38. ;;;下面两句是读出配置文件中的两个复选框上次的状态.
  39. $WINDOW = IniRead ( "WOWUIM.ini", "窗口模式", "窗口模式", "0" )
  40. $SBEXIT = IniRead ( "WOWUIM.ini", "启动后退出", "启动后退出", "1" )
  41. ;;;在GHI上创建两个复选框并用上面两句读出的状态信息初始化
  42. $CHKBOX1  = GUICtrlCreateCheckbox ( "窗口模式", 6, 255)
  43. GUICtrlSETSTATE(-1,$WINDOW)
  44. $CHKBOX2 = GUICtrlCreateCheckbox ( "启动游戏后退出此程序", 82, 255 )
  45. GUICtrlSETSTATE(-1,$SBEXIT)
  46. ;;;在GUI上创建上面从CONFIG.ini中读出的分区信息以及相应的单选按钮
  47. For $x = 2 to $area[0]
  48. $coord = $coord + 25
  49. $Radio[$x] = GUICtrlCreateRadio ($G_area[$x],20,$coord)
  50. Next
  51. ;;;;下面一段是读取上次用户选择的大区信息,用来初始化上面一段创建的单选框的状态 ,如果出错则默认为一区
  52. $DEFAULTAREA = IniRead ( "WOWUIM.ini", "默认大区", "默认大区", "1" ) + 1
  53. IF $DEFAULTAREA > 10 OR $DEFAULTAREA < 2 THEN $DEFAULTAREA = 2
  54. GUICtrlSetState ($Radio[$DEFAULTAREA],$GUI_CHECKED)
  55. ;;;;这一段是根椐配置文件来创建各种插件的按钮
  56. $coord = 15
  57. FOR $X =1 TO $UI[0][0]
  58. $BUTTON[$x][0] = GUICtrlCreateButton($UI[$X][0], 145, $coord, 76, 22)
  59. $BUTTON[$x][1] = $UI[$X][1]
  60. $coord = $coord + 30
  61. NEXT
  62. ;;;创建"删除插件"与"开始游戏"两个按钮
  63. $deleteUI = GUICtrlCreateButton("删除插件", 145, 195, 76, 22)
  64. $startgame = GUICtrlCreateButton("开始游戏", 145, 225, 76, 22)

  65. GUISetState(@SW_SHOW)
  66. While 1
  67. $msg = GuiGetMsg()
  68. Select
  69. Case $msg = $GUI_EVENT_CLOSE   ;;这个是右上角的退出按钮,不用说了吧
  70.   ExitLoop
  71. Case $msg = $CHKBOX1      ;;这两段$CHKBOX意思是当用户点击"窗口模式"与"启动后退出"两个复选框时,则将$window与$sbexit
  72.   $WINDOW = NOT $WINDOW  ;;执行一次NOT运算,然后再将当前的状态iniwrite进配置文件,下次启动程序时再读出来
  73.   INIWRITE ( "WOWUIM.ini", "窗口模式", "窗口模式", $WINDOW )
  74. Case $msg = $CHKBOX2
  75.   $SBEXIT = NOT $SBEXIT
  76.   INIWRITE ( "WOWUIM.ini", "启动后退出", "启动后退出", $SBEXIT )
  77. Case $msg = $deleteUI   ;;;如果用户点击删除插件按钮则清除魔兽目录下的INTERFACE目录
  78.   IF FILEEXISTS ($GAMEPATH & "\INTERFACE") THEN
  79.    $TEMP = DirRemove ($GAMEPATH & "\INTERFACE",1)
  80.    IF $TEMP = 0 THEN MSGBOX (4096,"错误","删除" & $GAMEPATH & "\interface时发生错误,请检查是否对目录具有相应权限!")
  81.   ENDIF
  82. Case $msg = $STARTGAME  ;;如果用户点击启动游戏按钮则运行GAMESTART()函数
  83.   GAMESTART()
  84. Case $LOGIN = 1      ;;;如果$login =1 则直接启动魔兽本身的登录器,因为我本程序默认时LOGIN的值为0,当程序出现错误时将LOGIN设为1
  85.   IF FILEEXISTS ($GAMEPATH & "\Launcher.EXE") THEN
  86.    RUN ($GAMEPATH & "\Launcher.EXE")
  87.    exit
  88.   ELSE
  89.    MSGBOX (4096,"错误","找不到" & $GAMEPATH & "\Launcher.EXE,请检查配置文件路径是否正确!")
  90.    exit
  91.   ENDIF
  92. Case ELSE
  93.   ;;;;;;;;;;这一段意思是如果如果用户点击相应的插件按钮则运行配置文件中配置好的那个程序,比较复杂
  94.   FOR $X =1 TO $UI[0][0]
  95.    IF $MSG = $BUTTON[$x][0] THEN
  96.     IF FILEEXISTS ($BUTTON[$x][1]) THEN
  97.      RUN ($BUTTON[$x][1])
  98.      EXITLOOP
  99.     ELSE
  100.      MSGBOX (4096,"错误","找不到" & $BUTTON[$x][1])
  101.      EXITLOOP
  102.     ENDIF
  103.    ENDIF
  104.   NEXT
  105. EndSelect
  106. WEnd
  107. Exit
  108. ;;;下面这个函数比较复杂,唉!!!因为我实在找不到能对文本文件中的某行进行替换的函数,简单翻了下API,如像也没有,只好把文件读到一个数组,修改
  109. ;;;相应的行的值,然后再写回去,这段我个人认为设计比较复杂,执行效率也不高,但我也是AU3新手,也就到了这个水平了,要是这段代码能优化的话,请告
  110. ;;;诉我一声.本来我自已设计了一个能对文本文件的某行进行替换的函数.但还有点小问题,不能用,所以只好先这样了.
  111. ;;;魔兽文件夹里的config.ini保存的是分区名及地址端口等信息,launcher.ini和realmlist.wtf保存你上次选择的分区信息,测试发现launcher,ini会影
  112. ;;;响到魔兽本身登录器的默认分区,realmlist.wtf不知影响些什么,WTF\config.wtf保存你的游戏的一些配置信息:如窗口模式是否最大化窗口等等,
  113. ;;;;启动WOW.exe时就会从这个文件里面读出一些信息.本来只更改config.wtf这一个文件就可以控制WOW.EXE这个程序的,但我刚开始写程序时对这几个
  114. ;;;文件都进行了操作,最好我也懒得去把他们从里面挑出来删掉了,就这样,反正只是为了学习,我本人不玩魔兽,对魔兽的了解也就这么多了,不对的地方大家见谅.
  115. FUNC GAMESTART()
  116. LOCAL $gxWindow = 0
  117. LOCAL $realmlis = 0
  118. LOCAL $WTF,$launcher
  119. IF  $LOGIN = 0 THEN
  120. If Not _FileReadToArray($GAMEpath & "\wtf\config.wtf",$WTF) Then
  121.   MsgBox(4096,"错误", "读取配置文件WTF\CONFIG.WTF时发生错误!将启动魔兽自身登录器!")
  122.   $LOGIN = 1
  123. EndIf
  124. If Not _FileReadToArray($GAMEpath & "\launcher.ini",$launcher) Then
  125.   MsgBox(4096,"错误", "读取配置文件launcher.ini时发生错误!将启动魔兽自身登录器!")
  126.   $LOGIN = 1
  127. EndIf
  128. IF NOT _FILECREATE ($GAMEpath & "\WTF\CONFIG.WTF") THEN
  129.   MsgBox(4096,"错误", "创建配置文件WTF\CONFIG.WTF时发生错误!将启动魔兽自身登录器!")
  130.   $LOGIN = 1
  131. ENDIF
  132. IF NOT _FILECREATE ($GAMEpath & "\launcher.ini") THEN
  133.   MsgBox(4096,"错误", "创建配置文件launcher.ini时发生错误!将启动魔兽自身登录器!")
  134.   $LOGIN = 1
  135. ENDIF
  136. ENDIF
  137. IF $LOGIN = 0 THEN
  138. For $x = 2 to $area[0]
  139.   IF GUICtrlRead ($Radio[$x]) = 1 THEN    ;判断用户选择的是哪个大区
  140.    INIWRITE ( "WOWUIM.ini", "默认大区", "默认大区",$Radio[$X] - 5 )  ;保存用户选择的大区信息
  141.    $launcher[1] = $address[$x]
  142.    FOR  $TEMP = 1 TO $launcher[0]
  143.     FILEWRITEline ($GAMEpath & "\launcher.ini",$launcher[$TEMP])
  144.    NEXT
  145.    IF NOT _FILECREATE ($GAMEpath & "\realmlist.WTF") THEN
  146.     MsgBox(4096,"错误", "创建配置文件realmlist.WTF时发生错误!将启动魔兽自身登录器!")
  147.     $login = 1
  148.     exitloop
  149.    ENDIF
  150.    FILEWRITE ($GAMEpath & "\realmlist.wtf",'SET realmlist "' & $address[$x] & '"' & @CRLF)
  151.    FOR $TEMP = 1 TO $WTF[0]
  152.     IF StringMid ($WTF[$TEMP],5,8) = "gxWindow" THEN
  153.      $gxWindow = 1
  154.      $WTF[$TEMP] = 'SET gxWindow "' & NOT NOT $WINDOW & '"'
  155.     ELSE
  156.      IF StringMid ($WTF[$TEMP],5,8) = "realmlis" THEN
  157.       $WTF[$TEMP] = 'SET realmlist ' & $address[$x] & '"'
  158.       $realmlis = 1
  159.      ENDIF
  160.     ENDIF
  161.    FILEWRITE ($GAMEpath & "\WTF\CONFIG.WTF",$WTF[$TEMP] & @lf)
  162.    NEXT
  163.   ENDIF
  164. Next
  165. For $x = 2 to $area[0]
  166.   IF GUICtrlRead ($Radio[$x]) = 1 THEN
  167.    IF $gxWindow =  0 THEN FILEWRITE ($GAMEpath & "\WTF\CONFIG.WTF",'SET gxWindow "' & NOT NOT $WINDOW & '"' & @LF)
  168.    IF $realmlis =  0 THEN FILEWRITE ($GAMEpath & "\WTF\CONFIG.WTF",'SET realmlist ' & $address[$x] & '"' & @LF)
  169.   ENDIF
  170. NEXT

  171. IF FILEEXISTS ($GAMEPATH & "\WOW.EXE") THEN
  172.   RUN ($GAMEPATH & "\WOW.EXE")
  173.   IF $SBEXIT THEN EXIT
  174. ELSE
  175.   MSGBOX (4096,"错误","找不到" & $GAMEPATH & "\WOW.EXE,请检查配置文件路径是否正确!")
  176.   exit
  177. ENDIF
  178. ENDIF
  179. ENDFUNC
复制代码
感谢Baidu,Google,Dreams8给我这次机会!
还要感谢我的爸爸妈妈!
HOHO
返回列表