梦想吧技术论坛's Archiver

似水年华 发表于 2007-4-22 06:09 PM

AU3-魔兽插件管理器

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

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

GUISetState(@SW_SHOW)
While 1
$msg = GuiGetMsg()
Select
Case $msg = $GUI_EVENT_CLOSE   ;;这个是右上角的退出按钮,不用说了吧
  ExitLoop
Case $msg = $CHKBOX1      ;;这两段$CHKBOX意思是当用户点击"窗口模式"与"启动后退出"两个复选框时,则将$window与$sbexit
  $WINDOW = NOT $WINDOW  ;;执行一次NOT运算,然后再将当前的状态iniwrite进配置文件,下次启动程序时再读出来
  INIWRITE ( "WOWUIM.ini", "窗口模式", "窗口模式", $WINDOW )
Case $msg = $CHKBOX2
  $SBEXIT = NOT $SBEXIT
  INIWRITE ( "WOWUIM.ini", "启动后退出", "启动后退出", $SBEXIT )
Case $msg = $deleteUI   ;;;如果用户点击删除插件按钮则清除魔兽目录下的INTERFACE目录
  IF FILEEXISTS ($GAMEPATH & "\INTERFACE") THEN
   $TEMP = DirRemove ($GAMEPATH & "\INTERFACE",1)
   IF $TEMP = 0 THEN MSGBOX (4096,"错误","删除" & $GAMEPATH & "\interface时发生错误,请检查是否对目录具有相应权限!")
  ENDIF
Case $msg = $STARTGAME  ;;如果用户点击启动游戏按钮则运行GAMESTART()函数
  GAMESTART()
Case $LOGIN = 1      ;;;如果$login =1 则直接启动魔兽本身的登录器,因为我本程序默认时LOGIN的值为0,当程序出现错误时将LOGIN设为1
  IF FILEEXISTS ($GAMEPATH & "\Launcher.EXE") THEN
   RUN ($GAMEPATH & "\Launcher.EXE")
   exit
  ELSE
   MSGBOX (4096,"错误","找不到" & $GAMEPATH & "\Launcher.EXE,请检查配置文件路径是否正确!")
   exit
  ENDIF
Case ELSE
  ;;;;;;;;;;这一段意思是如果如果用户点击相应的插件按钮则运行配置文件中配置好的那个程序,比较复杂
  FOR $X =1 TO $UI[0][0]
   IF $MSG = $BUTTON[$x][0] THEN
    IF FILEEXISTS ($BUTTON[$x][1]) THEN
     RUN ($BUTTON[$x][1])
     EXITLOOP
    ELSE
     MSGBOX (4096,"错误","找不到" & $BUTTON[$x][1])
     EXITLOOP
    ENDIF
   ENDIF
  NEXT
EndSelect
WEnd
Exit
;;;下面这个函数比较复杂,唉!!!因为我实在找不到能对文本文件中的某行进行替换的函数,简单翻了下API,如像也没有,只好把文件读到一个数组,修改
;;;相应的行的值,然后再写回去,这段我个人认为设计比较复杂,执行效率也不高,但我也是AU3新手,也就到了这个水平了,要是这段代码能优化的话,请告
;;;诉我一声.本来我自已设计了一个能对文本文件的某行进行替换的函数.但还有点小问题,不能用,所以只好先这样了.
;;;魔兽文件夹里的config.ini保存的是分区名及地址端口等信息,launcher.ini和realmlist.wtf保存你上次选择的分区信息,测试发现launcher,ini会影
;;;响到魔兽本身登录器的默认分区,realmlist.wtf不知影响些什么,WTF\config.wtf保存你的游戏的一些配置信息:如窗口模式是否最大化窗口等等,
;;;;启动WOW.exe时就会从这个文件里面读出一些信息.本来只更改config.wtf这一个文件就可以控制WOW.EXE这个程序的,但我刚开始写程序时对这几个
;;;文件都进行了操作,最好我也懒得去把他们从里面挑出来删掉了,就这样,反正只是为了学习,我本人不玩魔兽,对魔兽的了解也就这么多了,不对的地方大家见谅.
FUNC GAMESTART()
LOCAL $gxWindow = 0
LOCAL $realmlis = 0
LOCAL $WTF,$launcher
IF  $LOGIN = 0 THEN
If Not _FileReadToArray($GAMEpath & "\wtf\config.wtf",$WTF) Then
  MsgBox(4096,"错误", "读取配置文件WTF\CONFIG.WTF时发生错误!将启动魔兽自身登录器!")
  $LOGIN = 1
EndIf
If Not _FileReadToArray($GAMEpath & "\launcher.ini",$launcher) Then
  MsgBox(4096,"错误", "读取配置文件launcher.ini时发生错误!将启动魔兽自身登录器!")
  $LOGIN = 1
EndIf
IF NOT _FILECREATE ($GAMEpath & "\WTF\CONFIG.WTF") THEN
  MsgBox(4096,"错误", "创建配置文件WTF\CONFIG.WTF时发生错误!将启动魔兽自身登录器!")
  $LOGIN = 1
ENDIF
IF NOT _FILECREATE ($GAMEpath & "\launcher.ini") THEN
  MsgBox(4096,"错误", "创建配置文件launcher.ini时发生错误!将启动魔兽自身登录器!")
  $LOGIN = 1
ENDIF
ENDIF
IF $LOGIN = 0 THEN
For $x = 2 to $area[0]
  IF GUICtrlRead ($Radio[$x]) = 1 THEN    ;判断用户选择的是哪个大区
   INIWRITE ( "WOWUIM.ini", "默认大区", "默认大区",$Radio[$X] - 5 )  ;保存用户选择的大区信息
   $launcher[1] = $address[$x]
   FOR  $TEMP = 1 TO $launcher[0]
    FILEWRITEline ($GAMEpath & "\launcher.ini",$launcher[$TEMP])
   NEXT
   IF NOT _FILECREATE ($GAMEpath & "\realmlist.WTF") THEN
    MsgBox(4096,"错误", "创建配置文件realmlist.WTF时发生错误!将启动魔兽自身登录器!")
    $login = 1
    exitloop
   ENDIF
   FILEWRITE ($GAMEpath & "\realmlist.wtf",'SET realmlist "' & $address[$x] & '"' & @CRLF)
   FOR $TEMP = 1 TO $WTF[0]
    IF StringMid ($WTF[$TEMP],5,8) = "gxWindow" THEN
     $gxWindow = 1
     $WTF[$TEMP] = 'SET gxWindow "' & NOT NOT $WINDOW & '"'
    ELSE
     IF StringMid ($WTF[$TEMP],5,8) = "realmlis" THEN
      $WTF[$TEMP] = 'SET realmlist ' & $address[$x] & '"'
      $realmlis = 1
     ENDIF
    ENDIF
   FILEWRITE ($GAMEpath & "\WTF\CONFIG.WTF",$WTF[$TEMP] & @lf)
   NEXT
  ENDIF
Next
For $x = 2 to $area[0]
  IF GUICtrlRead ($Radio[$x]) = 1 THEN
   IF $gxWindow =  0 THEN FILEWRITE ($GAMEpath & "\WTF\CONFIG.WTF",'SET gxWindow "' & NOT NOT $WINDOW & '"' & @LF)
   IF $realmlis =  0 THEN FILEWRITE ($GAMEpath & "\WTF\CONFIG.WTF",'SET realmlist ' & $address[$x] & '"' & @LF)
  ENDIF
NEXT

IF FILEEXISTS ($GAMEPATH & "\WOW.EXE") THEN
  RUN ($GAMEPATH & "\WOW.EXE")
  IF $SBEXIT THEN EXIT
ELSE
  MSGBOX (4096,"错误","找不到" & $GAMEPATH & "\WOW.EXE,请检查配置文件路径是否正确!")
  exit
ENDIF
ENDIF
ENDFUNC
[/code]

页: [1]

Powered by Discuz! Archiver 7.0.0  © 2001-2009 Comsenz Inc.