mimi_rice 发表于 2015-3-25 14:05:11

DNF六点刷新疲劳值时从第一个角色开始执行

XNF六点刷新疲劳值时从第一个角色开始执行


   XNF游戏每天早上六点刷新疲劳值,如果我们想在六点的时候,不执行当前的游戏角色,重新从第一个角色开始执行呢?听起来很容易的样子……实际做起来就木有那么顺手了

选择角色登录

我们想要让脚本一个角色执行完之后执行下一个角色,首先,要记录角色的序号
1、把角色的序号写到ini文件中
ini文件内容设置(角色序号默认设置为1,第一个角色):
[角色ID]
角色=1
2、每执行完一个角色之后,角色序号加一
3、判断最后一个角色执行完成之后退出脚本


拿上面三个角色做例子。


我们第一次启动,角色序号是一,选择第一个账号登录。
1、键盘上的方向键可以选择人物,小编设置每次选择角色的时候,鼠标先点击第一个人物,然后读取当前该执行的角色序号,例如当前要执行的角色序号是2,那就按下一次右方向键,选择第二个人物,如果是3则按下两次方向键。
(方式有很多,例如,记录第一个角色的中心坐标点来遍历找到其它要执行的角色。哪种方便选哪种。{:4_116:})
w = CInt(Plugin.File.ReadINI("角色ID", "角色", "G:\test\XNF.ini")) //读取角色序号
      If w > 3 Then
            MessageBox "所有角色都执行完毕。"
            ExitScript
      End If
      MoveTo 90, 120
      LeftClick 1 //点击选择第一个角色
      Delay 1000
      If w > 1 Then判断如果不是第一个角色就按方向键选择其他角色
            For i = 1 To w - 1
                KeyPressS "Right", 1
                KeyPress 39,1//按下方向键右键进行选择角色
                Delay 1000
            Next
End If



角色登录之后


角色登录之后,开始执行任务。
1、建立一个线程,命名为主线程。主线程里写我们需要脚本执行的任务。
2、再建立一个新的线程,命名为时间监视。用来监控时间。
      *第一重判断,判断当前时间是否是早晨六点
       *是早晨六点的话,停止主线程,把ini里的角色序号重置为1
      *重新启动主线程,从第一个角色开始执行


全部代码:
//在角色选择界面启动脚本
Dim 总共角色数
总共角色数=3
hwnd= Plugin.Window.Find("地下城与勇士", 0)
Call Plugin.Window.Size(hwnd,800,600)
Call Plugin.Window.move(hwnd, 0, 0)
Call Plugin.Window.Active(hwnd)
线程ID = BeginThread(主线程)
线程ID2=BeginThread(时间监视)
Sub主线程()
    Do
      //点击第一个角色
      w = CInt(Plugin.File.ReadINI("角色ID", "角色", "G:\test\XNF.ini"))
      If w > 3 Then
            MessageBox "所有角色都执行完毕。"
            ExitScript
      End If
      TracePrint w
      MoveTo 90, 120
      LeftClick 1 //点击
      Delay 1000
      If w > 1 Then
            For i = 1 To w - 1
                KeyPressS "Right", 1
                KeyPress 39,1//按下方向键右键进行选择角色
                Delay 1000
            Next
      End If
      Call Plugin.File.WriteINI("角色ID", "角色", w + 1, "G:\test\XNF.ini")
      Moveto 395, 547
      LeftClick 1 //点击开始游戏
      Delay 8000
      KeyPress "Esc", 1 //调出游戏菜单
      Moveto 390, 410
      LeftClick 1//点击选择角色
      Delay 3000
    Loop
End Sub

Sub 时间监视()
    Do
      s = Hour(Time)//获取系统时间 小时
      m =minute(Time)//获取系统时间 分钟
      If s = 6 and m = 0 Then //如果是六点
            StopThread 线程ID //停止主线程
            Call Plugin.File.WriteINI("角色ID", "角色", 1, "G:\test\XNF.ini")
            KeyPress "Esc", 1 //调出游戏菜单
            Moveto 390, 410
            LeftClick 1//点击选择角色
            Delay 3000
      End If
      Delay 6000
    Loop
    线程ID= BeginThread(主线程)
End Sub
注意:小编的代码简单说明了下思路,许多细节的地方,童鞋们在写的过程中需要多加注意下。例如,当我们判断到当前时间是六点的时候,如果我们的角色还在做副本怎么办?



拓展思路:
如果童鞋们希望在角色把当前的任务执行完之后再从第一个角色开始,我们可以这样:

1、我们建立一个全局变量
2、时间监控线程判断到当前时间是六点的时候,全局变量的值设置为1
3、判断下当前角色的疲劳值,如果疲劳值还有,继续做任务
    (在主线程的末尾,角色任务执行完的时候,判断下全局变量,如果为1,退到角色选择界面,从第一个角色开始执行。)
4、如果疲劳值没有了则退出到角色选择界面
    (注意:这里需要做的是判断当前角色是在什么地方,然后该如何回到角色选择界面,例如,如果在副本里,就需要先退出副本然后再回到主界面)





**** Hidden Message *****

maojingxin1 发表于 2015-3-25 20:06:39

强烈支持楼主ing……

沃尔史蒂夫 发表于 2015-3-25 20:55:47

我晕看不懂

烟誮濄后… 发表于 2015-4-11 17:05:26

我只是看看这个是什么

hjwgjd 发表于 2015-5-13 05:36:14

先感谢下,楼主辛苦了!来看看一下

小战 发表于 2015-5-18 23:33:38

呼呼~不知道说些什么了,太鸡冻了

⑤颜⑥铯 发表于 2015-5-23 03:32:21

顶楼主,楼主大好人,非常好的大好人

芒果 发表于 2015-5-23 03:45:55

楼主太给力,我也来赞一个,楼主要一直给力哈

丿灬蓝天鸟 发表于 2015-5-29 00:59:45

支持楼主,绝对顶你...谢谢!

傲气の拽吖头 发表于 2015-6-2 05:21:56

好好的帖子,必须得顶起
页: [1] 2 3 4 5 6 7 8
查看完整版本: XNF六点刷新疲劳值时从第一个角色开始执行