仙境传说-按键精灵脚步研究

仙境传说是很早以前非常流行的一款网络游戏,其中的人物设置的非常可爱,尤其是一些夸张的头饰和百变的插卡系统让人回味无穷。虽然从游戏性来说仍然逃不出韩国游戏泡菜的怪圈(或者说是一款标准的泡菜游戏),但仍然是可圈可点的。

游戏中玩家要耗费大量时间进行练级,虽然现在的代理昆仑也有经验奖励的措施,比如高级经验书,高级JOB经验书,双倍经验时间区等,但是要让玩家,特别是高等级的玩家进行练级仍然是一件非常痛苦的事情。常有的事是,三转100~110的职业往往要在熔岩地图上打一个熔岩波利的怪物来进行性价比较高的练级。基本上要打1000个波利才能升一级(2~3小时),这对玩家的“摧残”是非常可怕的。因此我想通过按键精灵脚本的方法来减轻自己的负担,让我有更多精力投入到游戏更有意思的方面。

图1.令一些玩家蛋疼的刷怪时刻,多少RO玩家都是被怪劝退的

按键精灵是一个非常好用的,易上手的VB脚本工具,其中集成了许多关于模拟鼠标键盘的函数,还有一些用于识别游戏元素的函数,如找图,找色函数(比如怪物的识别)。

首先,我们必须找到游戏窗口的位置(在真正实现中我偷了个懒,因为窗口的默认打开位置是一定的,故下面代码中我用了绝对坐标)

winTitle = "仙境传说"
//=================== 获取窗口信息 ======================
//查找主窗口类名(0)或者标题("仙境传说"),返回找到的句柄RoHwnd  ,0表示忽略
RoHwnd = 0
RoHwnd = Plugin.Window.Find(0, winTitle)
If RoHwnd = 0 Then
  MsgBox "仙境传说没有找到"

End If

//MsgBox "查找到的窗口句柄为:" & RoHwnd
//EndScript
//用窗口插件得到格式为(窗口左上角起点在桌面x坐标|窗口左上角起点在桌面y坐标|窗口宽|窗口高)的字符串
Rect = Plugin.Window.GetClientRect(RoHwnd)
Call Plugin.Window.Active(RoHwnd)
//切割字符串为二维数组
XYArray = Split(Rect, "|")
//窗口左上角起点在桌面x坐标
Ux = CInt(XYArray(0))
//窗口左上角起点在桌面y坐标
Uy = CInt(XYArray(1))
//窗口宽
Uwidth = CInt(XYArray(2))
//窗口高
Uheight = CInt(XYArray(3))

//一块区域搜索的次数
SearchCount = 0
//最大搜索次数
Max = 3

//大地图中心点坐标
CenterX = (Ux + Uwidth) / 2
CenterY = (Uy + Uheight) / 2

接下来,我要让人物走动起来,并且希望他能够自动判定行进的方向(遇到不能走的地方能改变行进路线)。RO中,人物的走动是通过鼠标左键来实现的,从下图可以得知,我可以通过判断箭头所指小地图上白色小箭头(即人物的坐标)的坐标是否移动来判断我们的角色是否成功移动。

我们可以通过按键精灵的抓图找色工具来实现找到白色小箭头中的红色中心点的RGB值,可以看到是0000D6。然后利用找色函数FindColor就可以得到红点的坐标(搜索范围为小地图区域)。细心的读者可能发现,在小地图上还有两个红点(地图的出口),从而回想这样计算出来的坐标是否还要剔除这两个红点的固定坐标。经过我实验,发现这两点的RGB值不是0000D6,因此使用这个函数没有任何问题。

下面的代码可以用来获取小地图上红点的位置

//小地图坐标区域
SmallMapLeft = 511
SmallMapTop = 70
SmallMapRight = 611
SmallMapBottom = 187

MoveDirX = Array(50, -50 )
MoveDirY = Array(50,-50)
//定位小地图人物坐标(箭头最左上白色坐标中的中心红点)
FindColor SmallMapLeft, SmallMapTop, SmallMapRight, SmallMapBottom, "0000D6", PrevieousX, PrevieousY

通过设定MoveDirX,MoveDirY,我们可以是人物在这四个相对便宜量的22组合(左上,右上,左下,右下)上发生移动。若右上角小地图红点不移动则说明便宜无效,换个方向继续行进

While 1
	For i = 0 To 1
		For j = 0 To 1
		MoveTo CenterX + MoveDirX(i), CenterY + MoveDirY(j)
			Delay 500
			LeftClick 1
			Delay 500

			//若找到怪则继续搜索
 			c = FindMonster(0, 0, 0)
			FindColor SmallMapLeft, SmallMapTop, SmallMapRight, SmallMapBottom, "0000D6", ResultX, ResultY

			//若发现小地图人族坐标发生未偏移则认定移动无效
			While ResultX <> PrevieousX or ResultY <> PrevieousY
				PrevieousX = ResultX
				PrevieousY = ResultY
				MoveTo CenterX + MoveDirX(i), CenterY + MoveDirY(j)
				Delay 500
				LeftClick 1
				Delay 500
				//若找到怪则继续搜索
 				c = FindMonster(0, 0, 0)

				FindColor SmallMapLeft, SmallMapTop, SmallMapRight, SmallMapBottom, "0000D6", ResultX, ResultY
			Wend

		Next
	Next

Wend

接下来我们要解决怪物判定的问题,按键精灵提供了两个函数找色和找图。找图的方法我试了一下,没有成功。个人认为是图片搜索的效率很低,使得搜索到目标怪物的时候怪物的动作进入下一个图片,从而错失匹配。用找色的方法效率有所提升, 但仍然只有手动效率的1/3,且耗药(攻击时间设定为固定值的,很容易打完怪之后,还呆在一个地方给主动怪白打)。

//寻找画面中心,近整幅画布,若附近怪物,存在则攻击
Function FindMonster(CenterX, CenterY, Hwnd)
	//定义搜索范围为653*508
	SearchRangeX = 653
	SearchRangeY = 508
    ResultX = 0
    ResultY = 0

	isFinded = 0
	//RenewHP
	FindColor 0, 0, SearchRangeX, SearchRangeY, "96C8FE",  ResultX,  ResultY

	//若找到指定颜色,则判定这个坐标有怪,点击左键执行攻击
	If ResultX > 0 and ResultY > 0 Then
		//找到标志置位1
		isFinded = 1
		MoveTo ResultX, ResultY
		Delay 500
		LeftClick 1
		//3秒时间用来移动
		Delay 6000 

		//回血
	 	RenewHP
	End If

	FindMonster = isFinded
End Function

//按下F5,和回车,飞到随机地点
Function Fly()
		KeyPress "F5", 1
		Delay (500)
		KeyPress "enter", 1
		Delay (500)
End Function

//按下F5,和回车,飞到随机地点
Function RenewHP()
	//============喝药===================
	//判断是否要嗑药
	GetColor = GetPixelColor(22, 72)

	//按下F1喝白水,直到血条不红
	While GetColor <> "000000"
		//MsgBox "血条已红,准备嗑药"
		//先飞
		c = Fly()

		//喝水
		KeyPress "F1", 1
		Delay (500)

		GetColor = GetPixelColor(22, 72)
	Wend
End Function

果然还是我的风格,虎头蛇尾啊

时间: 2024-10-07 06:00:13

仙境传说-按键精灵脚步研究的相关文章

按键精灵出故障,无法正常充值

故障现象; 公司按键精灵,无法正常充值,浏览器无法显示支付宝页面样式,报不是安全的连接 处理过程 1,暂停按键精灵,将谷歌浏览器清理缓存 2,清理后浏览器直接无法正常显示页面样式,无法加载图片等 3,将浏览器重置默认,依然无法显示 4,卸载现有谷歌浏览器,但保留原有数据,重装后依然 5,怀疑是支付宝安全插件的问题,后百度查看相关文摘,说的是支付宝证书无法加载和密码无法输入的问题,安装了支付宝安全插件后依然这样 6,查资料无果的情况下,卸载现有谷歌浏览器并将其数据全部删除,下载谷歌55版浏览器安装

一个按键精灵后台发送消息的脚本

以前,我也用过按键精灵写过一些脚本,那时候经常用这个来挂机FB什么的. 那天,某网友问起,于是就回答了下 无非就是,抓句柄,然后相对定位坐标或者发送消息到固定窗体 代码如下: 1 //////////////////////////抓窗口句柄////////////////////////////////////////// 2 3 Dim Hwnd 4 5 Hwnd = Plugin.Window.MousePoint() 6 7 sWindow = Plugin.Window.IsWindo

原来找字也可以这样用ElseIf FindStr 手机按键精灵 跟大漠的区别

原来找字也可以这样用ElseIf FindStr(646, 1109, 776, 1261, "公告小叉", "FFFFFF-333333", 0.9, intX, intY) > 100 or intx > 0 Then         Tap intX+10, intY+10         Delay 1000 跟大漠的有什么区别?大神答:色值大漠是bgr数据模式   而手机按键精灵是rbg要转换的 大漠常用语句大全API http://xx51.

按键精灵如何调用Excel及按键精灵写入Excel数据的方法教程---入门自动操作表格

首先来建立一个新的Excel文档,在桌面上点击右键,选择[新建]-[Excel工作表],命名为[新手学员]. 现在这个新Excel文档是空白的,我们接下来会通过按键精灵的脚本来打开并写入一些数据.打开按键精灵软件,点击[新建],进入我的脚本界面,再点击进入[全部命令].在[全部命令]中选择[插件命令]-[office办公文档插件]-[打开Excel文档].在命令的下面可以看到命令的详细设置,点击[路径].在弹出窗口中选择[新手学员]的Excel文档,点击打开.可以在命令参数中看到引用的文档,点击

按键精灵获取系统时间定时点击

'==========以下是按键精灵录制的内容==========dim h,m,sRem [wait]h=Hour(time)m = Minute(time)s = Second(time)UserVar HH=0 "时"UserVar MM=0 "分"UserVar SS=0 "秒" If h = HH and m = MM and s=SS MoveTo 82, 40Delay 0LeftDown 1Delay 0LeftClick 1De

最近听说搞脚本挺爽的 弄了个按键精灵的找图找色

首先你需要下载个按键精灵的软件.如下http://www.anjian.com/ 下好后就打开按键精灵,首先新建一个空白脚本,然后找到抓取按钮. 随便找张图来找色 比如如上这张,用抓取按钮选择右键找到色素点,如#c10b2a 然后将该值放到颜色/图形命令去 在图形找色这里,还有找图功能,其实原理都差不多,都是通过周边像素点的色值来找到符合这个值得点,这样就能找到所选的数据. 当你找到你想得到的句柄(windows的某些你想要获取的窗口)时,就可以通过找色或找图去设置你自己所要的功能.

用按键精灵写的手机端按键精灵批量加群的脚本

前几天朋友想在手机上面多加几个群,可是一个个的手工操作太难受了,于是就用按键精灵帮他写了一个自动加群的代码.分享给大家. KeepScreen True Delay 2000 Dim scrWidth, scrHeight,a,x,y,i,intX,intY scrWidth = GetScreenX() scrHeight = GetScreenY() 'ShowMessage scrWidth&"--"&scrHeight TracePrint scrWidth T

C#实现按键精灵的&#39;找图&#39; &#39;找色&#39; &#39;找字&#39;的功能

背景:游戏辅助功能通常使用按键精灵编写脚本,按键精灵的最大卖点就是能够找到画面中字,图,色,这对于模拟用户鼠标操作至关重要,这能找到道具,找到血量,实现自动打怪,自动补血,自动买卖道具,博主闲来无聊,看到一款按键精灵实现的辅助,于是乎想用WPF也写一款辅助工具,实现其核心的找图找色等功能.博主测试,对于背景复杂多变的画面,找不变图的成功率达到100%,找带透明的图,比如文字,能达到90%以上.默认您已经知道一个颜色值由argb构成,每个值范围都是0~255.网上发现不少人询问过该问题,几乎没有比

按键精灵点击模板

按键精灵点击模板,可用于京东大虎,抢红包等,重新设置颜色和区域即可使用 targetColor = "0E34E5" sameValue = 0.6 //相似度 x = 0 y = 100 w = 530 h = 818 base = 100 r = 2 c = 2 For i = 0 To 16959 For j = 0 To r-1 For k = 0 To c-1 tw = w / c th = h / r tx = x + tw * k ty = y + th * j Trac