|
- Hwnd = Plugin.Window.MousePoint()
- Delay 1000
- Call Plugin.Window.SetText(Hwnd,"这里输入你需要的窗口名称")
- Delay 1000
- Rem begin
- Delay 2000
- a = HOUR(now)
- b = minute(now)
- If a=07 and b>=05 and b<=09
- //你需要重连的小时数,24小时制,格式HH,如上例07
- //你需要重连的最早分钟数,格式MM,如上例05
- //你需要重连的最晚分钟数,格式MM,如上例09
- Goto reconect
- Else
- End If
- //这中间可以加入你的主要代码段
- Rem reconect
- Call Plugin.Window.Active(Hwnd)
- Delay 5000
- Call Plugin.Window.Restore(Hwnd)
- Delay 8000
- MoveTo 1091, 701
- //在1920*1080分辨率下,如果你的游戏界面是以默认位置打开,这里就是游戏前台时候出现“你断线了,是否重连的【是】的位置,如果分辨率不同或者你的窗口位置移动了,你需要使用按键精灵的【抓抓】功能找到这个点的具体位置”
- Delay 3000
- LeftClick 1
- Delay 5000
- MoveTo 1173, 724
- //同上,这个是每次游戏登录时候那个烦人的公告的【取消】的位置
- Delay 3000
- LeftClick 1
- Delay 5000
- Call Plugin.Bkgnd.SendString(Hwnd, "ABCDEFG")
- //ABDCDFG这里输入你的游戏账号
- Delay 3000
- Call Plugin.Bkgnd.KeyPress(Hwnd, 9)
- Delay 3000
- Call Plugin.Bkgnd.SendString(Hwnd, "GFEDCBA")
- //GFEDCBA位置改为你的密码
- Delay 3000
- Call Plugin.Bkgnd.KeyPress(Hwnd, 13)
- Delay 3000
- MoveTo 1151, 774
- Delay 3000
- LeftClick 1
- Delay 3000
- MoveTo 1158, 782
- Delay 3000
- LeftClick 1
- Delay 3000
- Call Plugin.Window.Min(Hwnd)
- Delay 520000
- Goto begin
复制代码
大致阐述一下我的思路,介绍一下这段代码。
由于按键精灵很难通过后台方式找色、找图、判断文字,所以目前要做到断线重连功能只能将该IKING程序前台。但如果你需要挂很多号,那么大家都前台就会造成过度挤占系统资源的情况。
于是我换了一种思路——既然每天早上7:00服务器会重启(这个时间你注定会掉线),那么何不直接写一个类似“7点执行一次重新登录游戏账号的操作”这样的代码呢?
于是本代码段就出现了。
大致说一下这个代码的流程:该代码会在你设定的时间段到达的时候(比如在上方代码中,这个断线重连代码执行的时间段为早上7点05分~7点09分之间),自动跳转到代码中的“reconect”段落,执行该段落的操作(即断线重连的前台操作)。
从我冗长的代码片段大家可以看出我是代码新手,或者说我不太会用代码里的函数,所以我一般都是流水账似的代码——但这样的代码反而更容易看懂,适合新手,所以下面我就逐条来解释这段代码的每一句话的含义,有耐心的可以看看——对代码的解释顺序从上到下,上面解释过的,下面不再解释:
- Hwnd = Plugin.Window.MousePoint()
复制代码
这段的意思是,当你启动代码时候,按键精灵将绑定这个时候你鼠标所指向的窗口,而之后所有的命令都将会发送到你绑定的这个窗口,从而保证一个窗口对应一个挂机脚本。
这段的意思是,执行完它上面的语句后,等待1秒。按键精灵里的时间都是按毫秒计的,1秒=1000毫秒。
- Call Plugin.Window.SetText(Hwnd,"这里输入你需要的窗口名称")
复制代码
这段命令的作用是更改你所绑定的窗口的标题名称。他的作用在于,假设你同时开很多iKing程序,因为标题都是iKing,会不方便你在最小化后直接找到你需要激活的那个特定的角色。改了窗口标题后,找到指定角色就会非常方便
这个类似于原来ZKOK的%scene begin,作用也是一样,应该都可以理解。这就是你该段代码的标题
这里就是一个变量的赋值,意思很直接,就是“我声明,从这里开始,我代码里的【a】变量就用来代表HOUR(now)的数值”,这里Hour(now)数值是你的操作系统目前的小时时刻,接下来 b = minute(now)意思是用【b】来代表现在操作系统时间的分钟时刻。
- If a=07 and b>=05 and b<=09
复制代码
这段代码的用到的是if判断句式。IF判断句式必须是完整的格式,在按键精灵的语言里,if ... then ...else ...end if 是需要成套使用的。他们的意思在按键精灵视角来说,就是“如果在AA条件下,BB成立,那么我就执行CC操作,如果不成立的话,则执行DD操作,就这么些假设,结束”。
而单独这一段的命令的意思在按键精灵的视角来看,是“如果 现在操作系统的时间大于等于07点05分并且小于07点09分的话…”,也就是24小时制里,7点05~7点09分之间,需要判断一个我的假设的意思。
这句的直接意思就是,现在按键精灵代码转到名为"reconect"的这个段落去执行。接上面的例子,也就是说,如果(if)现在的时间是你操作系统的7点05分~7点09分之间的话,那么(then),我们就跳转(goto)到reconect段落去。
直接翻译的话,就是“否则”的意思。接上面的例子,就是如果现在的时间不在7点05~09分之间的话,我们则执行其他操作。
else 下你可以接goto到其他段落或者直接执行其他操作,如果你不设定else下方的操作,代码则继续顺延执行——这就相当于“如果条件不成立,那么我就不管了,继续该干嘛干嘛”的意思。
这句话的意思就是,从if开始的假设条件,到此为止,请回归现实,该干嘛干嘛去!
- Call Plugin.Window.Active(Hwnd)
复制代码
这段的意思是,激活我所绑定的窗口。加入这段是防止万一出现窗口非当前窗口,无法继续执行后续操作的可能。
- Call Plugin.Window.Restore(Hwnd)
复制代码
这段话的意思是,将已经最小化的绑定的窗口恢复(我们通常叫这个为“最大化”,虽然这种说法其实是不正确的)到前台来。
这是一个前台鼠标命令,就是将你的鼠标移动到整个桌面的1091,701这个位置。这个位置的意义我在代码注释里已经写了,这里不再赘述。
鼠标的左键单击操作,没什么好说的
- Call Plugin.Bkgnd.SendString(Hwnd, "ABCDEFG")
复制代码
这个是一段后台命令,即向你绑定的这个窗口文本框中输入“ABCDEFG”,这里你需要修改为自己的帐号
- Call Plugin.Bkgnd.KeyPress(Hwnd, 9)
复制代码
这个是一段后台键盘命令,他会按下9号键位。这个9号键位在按键精灵的语言里是我们键盘上的tab键,在上面的命令中,我们输入过帐号后,自然需要按tab键让文本框来到密码输入栏位。为什么这样我就没必要解释了吧哈哈
- Call Plugin.Bkgnd.KeyPress(Hwnd, 13)
复制代码
这是后台按下enter的命令,键位13是按键精灵中Enter的键位码
- Call Plugin.Window.Min(Hwnd)
复制代码
这个操作是将当前的窗口最小化——在上方,我们已经完成了全部的登陆操作,然后把这个窗口最小化,桌面就干净了。
最后代码会自动跳转到begin段去。这里根据你的需要,可以自行决定断线重连之后代码去哪个段落执行后续操作。
以上是代码部分以及代码的解释部分,下面我说一下这个代码需要注意的事项。
这个代码的核心实际上就是这个IF判断部分,因此在代码的什么位置、什么时间段让他来进行判断是很关键的
比如在本例中,我是将IF就直接放在了代码的主段落的开头,那么假设这个主段落整个执行一轮回到开头需要用时10分钟,而我的代码进行判断的时间段是早上的7点05分到7点09分(只有4分钟的判断期间),那么则很有可能出现还没执行到IF判断这里,就已经错过了7点05~7点09这个判断的时限,从而没有办法做到断线重连。
另一方面,假设为了防止上述情况出现,你将判断时间拉长,比如拉长到7点05到8点05之间都判断为“在这个时间内”,那么你可能面临的问题就是这一小时内,只要你的代码运行到IF这个位置,就会跑去执行那个断线重连的操作1次,从而降低了你的主代码效率。
因此,你的IF放在代码的那个位置,IF的判断时间区间多长,是需要你根据自己的主代码的运行时间来自行决定的。
其次,如果你挂了多个号,那么也需要考虑每一个号执行断线重连操作的时间的错峰问题。因为断线重连部分至少有2、3分钟是在执行前台操作,因此如果这个时候你的其他挂着的号也触发了断线重连,那么你的鼠标操作肯定会出问题。简单的解决办法就是每个帐号的断线重连判断期都错开几分钟就好。
这个代码昨晚我写好后挂在那执行,三个号中两个号都正常完成了断线重连,一个号不知道什么原因没完成,或者可能是完成了然后早上特别卡的时候掉线了也有可能。。。今天我再继续观察一下。
那么这个代码就这样啦。有啥问题可以在下方留言,我不一定回答哈。 |
|