dnf外挂教程(dnf脚本制作教程)

最近刷了一段时间提灯与地下城这个游戏,太肝了,毛都干没了,于是想制作一个替我刷图的脚本,说干就干,总结下思路。

总思路是 识别当前地图 –> 与地图中可以交互的点交互 —>识别当前地图。

当然这种是比较简单的思路,后期可以拓展。

准备

思路是使用opencv识别人物,道具和怪物等元素,但是考虑到怪物种类不一而足,素材收集也非一日之功,于是转换思路,从小地图入手,小地图的图标是种类固定的,像这样:

使用golang gocv制作提灯与地下城的自动刷图脚本,解放双手
buff

使用golang gocv制作提灯与地下城的自动刷图脚本,解放双手
怪物

使用golang gocv制作提灯与地下城的自动刷图脚本,解放双手
出口

使用golang gocv制作提灯与地下城的自动刷图脚本,解放双手
青蛙

使用golang gocv制作提灯与地下城的自动刷图脚本,解放双手
宝石

使用golang gocv制作提灯与地下城的自动刷图脚本,解放双手
金币

这里注意,采集到的图标需要和手机或者模拟器的图标一一对应。小地图的图片可以通过adb screencap命令获取或者minicap也是可以的。

首先观察小地图的长框可以发现是275 x 275,进一步观察可以发现分为11*11的格子,然而上面两格比较容易匹配出错,所以我们可以用一个11×9的整数数组来表示地图分布:

使用golang gocv制作提灯与地下城的自动刷图脚本,解放双手
地图等分

func GetDevidedCentralPoint(piecesX ,piecesY int,src gocv.Mat)[][]int{

	//formed up a vector of (11-2)*11

  //use line to devide the map picture into 9x11 pieces

	width:=src.Cols()

	height:=src.Rows()

	lgr.Debug("width:%v height:%v",width,height)

	WPP:=width/piecesY

	HPP:=height/piecesX

	res:=make([][]int,piecesX)

	green := color.RGBA{0, 255, 0, 0}

	for i:=0;i<piecesX;i++{

		resInY:=make([]int,piecesY)

		

		for j:=0;j<piecesY;j++{

			Img,err:=src.ToImage()

			if err!=nil{

				lgr.Debug("Transform to image failed,err:",err)

			}else{

				colour:=Img.At(WPP*j+WPP/2,HPP*i+HPP/2)

				pt:=image.Point{WPP*j+WPP/2,HPP*i+HPP/2}

				str:=fmt.Sprintf("%v",j)

				gocv.PutText(&src,str,pt,gocv.FontHersheySimplex,0.5,green,1)

				r,g,b,_:=colour.RGBA()

				

				if (uint8(r)>20 && uint8(g)>20 && uint8(b)>20){

					//lgr.Debug("current point(%v,[%d,%v,%v]) color is : %v",pt,uint8(r),uint8(g),uint8(b),colour)

					//gocv.Circle(&src,pt,2,green,1)

					resInY[j]=1

					

				}else{

					resInY[j]=0

				}

				

			}

			

			}

			res[i]=resInY

	}

	return res

}

然后再分别匹配上面收集的图标,匹配到就将地图数组中对应的位置改为相应的数字,定义如下:


使用golang gocv制作提灯与地下城的自动刷图脚本,解放双手

 

/*-1 for store, 0 for unknow status, 1 for path, 2 for hero,3 for exit,4 for gold,5 for pet ,6 for enermys ,7 for iron box,8 for red box,9 for buff , 13 for frog,-2 for goldbox,-3 for temple, */

const heroImg= "./asset/hero.jpg"

const enermyImg= "./asset/enermy.jpg"

const exitImg= "./asset/exit.jpg"

const goldImg= "./asset/gold.jpg"

const gemImg= "./asset/gem.jpg"

const redboxImg= "./asset/redbox.jpg"

const templeImg= "./asset/temple.jpg"

const IronboxImg= "./asset/Ironbox.jpg"

const buffImg= "./asset/buff.jpg"

const petImg= "./asset/pet.jpg"

const pet1Img= "./asset/pet1.jpg"

const pet2Img= "./asset/pet2.jpg"

const pet3Img= "./asset/pet3.jpg"

const frogImg= "./asset/frog.jpg"

const selectorImg= "./asset/selector.jpg"

const storeImg= "./asset/store.jpg"

const goldboxImg= "./asset/goldbox.jpg"

const canceImg= "./asset/cancel.jpg"

const piecesX=9

const piecesY=11

然后,将采集到的地图元素与当前地图一一匹配,使用的方法是之前提过的gocv.MatchTemplate()方法,然后使用gocv.MinMaxLoc()得到可信度和对应的坐标,代码如下:

func MatchTarget(imgTempl,imgSrc ,imgSrc1 gocv.Mat,type_ int ,res [][]int){  

    

    result:=gocv.NewMat()

    defer result.Close()

    m :=gocv.NewMat()

    

    blue := color.RGBA{0, 0, 255, 0}

    gocv.MatchTemplate(imgTempl,imgSrc,&result,gocv.TmCcoeffNormed,m)

    //gocv.MatchTemplate(imgTempl,imgSrc,&result,1,m)

    m.Close()

    minValue,maxConfidence,_,maxLoc :=gocv.MinMaxLoc(result)

    if maxConfidence < 0.9 {

        lgr.Debug("Max confidence of %f is too low. MatchTemplate could not find template in scene.", maxConfidence)

        return

    }

	

    width:=imgSrc.Cols()

	height:=imgSrc.Rows()

	

	WPP:=width/piecesY

	HPP:=height/piecesX

	

	

    for {

        //lgr.Debug("The most possible location is : %v,value is : %v",maxLoc,maxConfidence)

        rect:=image.Rect(maxLoc.X,maxLoc.Y,maxLoc.X+imgTempl.Cols(),maxLoc.Y+imgTempl.Rows())

		indx:=(maxLoc.X+imgTempl.Cols()/2)/WPP

		indy:=(maxLoc.Y+imgTempl.Rows()/2)/HPP

        pt:=image.Pt(indy,indx)

        lgr.Debug("x:%v ,y:%v  %v,type:%v",indy,indx,maxLoc,type_)

        if type_==2{

            HeroPosition=pt

        }

		res[indy][indx]=type_

        if type_==3{

			ExitPosition=pt

            Dtm:=time.Since(starttime)

            wtm:=time.Duration(10)*time.Minute

            kc:=40

            if killedCnt<kc&&Dtm<wtm&&!IsFirstFloor{

                res[indy][indx]=0

            }

        }

        if type_==-1{

            IsFirstFloor=true

        }

        gocv.Rectangle(&imgSrc1, rect, blue, 1)

        //lgr.Debug("outer result adress:%v",result)

        maxLoc,maxConfidence=GetNextMaxLoc(result,maxLoc,minValue,imgTempl.Cols(),imgTempl.Rows())

		

        if maxConfidence<0.9{

            break

        }

    

    }

    

   

  }

  

func GetNextMaxLoc(result gocv.Mat,maxLoc image.Point,minValue float32,templateW,templateH int)(image.Point,float32){

    startX:=maxLoc.X-templateW

    startY:=maxLoc.Y-templateH

    endX :=maxLoc.X + templateW

    endY :=maxLoc.Y + templateH

    //lgr.Debug("Inner result adress:%v",result)

    

    if startX<0 || startY <0 {

        startX = 0

        startY = 0

    }

    if endX >result.Cols()-1 || endY > result.Rows()-1{

        endX=result.Cols()-1

        endY=result.Rows()-1

    }

    

    for y:=startY;y<endY;y++{

        for x:=startX;x<endX;x++{

            //ret:=result.GetFloatAt(y,x)

            //lgr.Debug("Get point (%v,%v) to %v",x,y,ret)

        

            result.SetFloatAt(y,x,minValue)

            //ret:=result.GetFloatAt(y,x)

            //lgr.Debug("set point (%v,%v) to %v",x,y,ret)

        }

    }

    

    _,maxConfidence,_,maxLoc :=gocv.MinMaxLoc(result)

    lgr.Debug("the point %v is max confidence point %v",maxLoc,maxConfidence)

    return maxLoc,maxConfidence

}

对每一个地图元素,调用MatchTarget 方法来刷新当前地图数组[][]rest,最后就得到了当前的地图元素。

然后就是寻路的算法,我自己使用的是A*算法,大家有兴趣的可以自己去实现一下.

本文来自投稿,不代表展天博客立场,如若转载,请注明出处:https://www.me900.com/14724.html

(0)

相关推荐

  • 抖音个人号和企业号怎么分开(抖音企业号和个人号区别)

    随着抖音平台用户数量与日俱增,日活数据达上亿,抖音也掌握了流量密码,从一开始泛的娱乐逐步走向商业化,自从抖音开通了企业号,陆陆续续有许多企业将抖音作为品牌企业营销重要阵地。那么抖音视频企业号与个人号有什么区别吗?下面就跟随小编一起来了解一下吧~ 1、企业号开通后可以直接发布60秒长视频,个人抖音号需要30个粉丝以上。 2、注册账号时,企业号昵称需要包含企业关…

    2022-05-26
  • 公司网站怎么建立,如何使用领英做外贸

    B2B公司一直在寻找与竞争对手区分的方法。越来越多的公司使用社交媒体渠道与目标受众联系,其中一个备受欢迎的渠道是领英。 这个专业的社交网站已成为人们寻找工作和建立关系的场所。因此,不足为奇的是,超过一半(52%)的B2B营销人员表示,领英在客户获取策略中至关重要。 但如果您尚未将领英纳入您的营销组合中,那么现在可能是时候开始了。在此,我们将介绍什么是领英公司…

    2023-06-30 投稿
  • 如何快速增长淘气值,增长淘气值最快的方法

    淘宝淘气值为什么会下降?淘气值是淘宝官方根据用户的各种行为而计算的一个数值,每个月会更新一个,浮动是很正常的,那淘气值下降怎么回事呢? 淘宝淘气值下降原因 1、在淘气值计算周期内购物次数比以往少; 2、恶意评价,违反淘宝规则; 3、蚂蚁花呗,价款逾期,购物信誉降低。 淘宝淘气值多久更新一次时间介绍 淘宝的淘气值一个月更新一次。 每月8号,淘宝官方会根据会员在…

    2022-03-21
  • 辰欣药业主打产品(辰欣药业属于什么档次)

    新京报讯 7月11日,辰欣药业发表公告,缬沙坦氢氯噻嗪片、富马酸丙酚替诺福韦片收到国家药监局核准签发的《药品注册证书》,获批上市。 缬沙坦氢氯噻嗪片最早由瑞士诺华制药(Novartis Pharma Schweiz AG)开发,于1998年获**食药监局(FDA)批准上市,商品名为Diovan Hct。2004年,缬沙坦氢氯噻嗪片由诺华进口至中国,商品名为复…

    投稿 2023-07-06
  • 网上怎么在附近找工作(58同城上找工作靠谱吗可信吗)

    过完年,回归岗位的打工者早就恢复工作状态,但一些人员内心躁动、无法平静,那就是准备找工作的人群。 年后是找工作的高峰期,也是跳槽的高峰期,年后全国范围内都会出现大量招聘信息,推出相对优质的岗位,增加了就业人员的选择空间。 应届毕业生要面临找实习工作,有些待业人员也已经远赴大城市寻找工作机会,想跳槽的在岗人员也进入了找工作的大军。那么,如何在短时间内找到适合又…

    2021-12-30 投稿
  • 大门对大门贴对联风水,大门贴对联有什么讲究

    现在的年轻人啥也不讲究了,贴春联也瞎贴。有人腊月二十八、腊月二十九就已经贴好了春联,有人连门口的“出门见喜”四个字的春联都不贴了,还有人看也不看,春联两边都贴反了。专家实在不理解现在的年轻人的作为,非常鄙视这种行为。其实,春联真的不能瞎贴,贴春联讲究很多! 01、贴春联时间讲究 今天是腊月三十,也就是一年一度的除夕,大家庆祝新年的活动从今天开始,笔者这边的习…

    2022-03-22 投稿
  • 记事本文件,记事本文件太大打不开

    《记事本文件:从基础到进阶的探索》 一、什么是记事本文件? 也许在很多人的电脑中,记事本文件是一个再熟悉不过的存在。它就像是一个简单的文本编辑器,能够记录各种文字信息。我觉得它就像是一个默默工作的小秘书,随时准备为我们记录下生活中的点滴想法、工作中的重要事项或者学习中的知识点。 我们可以打开记事本文件,就像打开一扇通往文字世界的门。在这个门后,我们可以自由地…

    投稿 2025-10-13
  • dnf2017夏日礼包,dnf手游礼包领取

    110新版本开放之后,在这个以日常白图为核心的版本,肝度相当高,勇士们的体验和评价各异,好在韩服再次迎来改版,降低了疲劳度。而在爆肝一个月后,国服也终于迎来了清爽的夏日版本,同时伴随着新龙袍的诞生,副本亦做了一些调整,配合活动帮助奶系职业成长。炎炎夏日,畅爽游戏,勇士们注意养肝护身。7.14版本更新活动一览   活动内容 1、每日运势播报 活动时间…

    2023-06-27 投稿
  • 天然燕窝一斤多少钱,燕窝的价位是多少合适

    今天我们来讨论一下燕窝、虫草、鹿茸、人参之类的对人体有没有好处。我们就以燕窝为例。现在市场上很大一部分所谓的燕窝,根本就不是什么金丝燕的燕窝,而是用树脂、明胶做出来的。假设现在全部市场上的燕窝都是金丝燕吐出来的,那么它有没有营养价值呢? 燕窝 我们明确一下营养价值的概念,即碳水化合物,脂肪,蛋白质,矿物质,维生素五类。一种食物有没有营养价值,就看它包含这五种…

    2023-06-26
  • 徐州旅游资讯网(美食大集合满足你的味蕾)

    老有外地朋友跟我讲后悔来徐州了!来了老想来!徐州好吃的东西真是太多了!万万没想到,我的城市成为了热门旅游城市!平日里爱吃的私藏店铺竟然都被打卡啦! 作为热情好客的徐州人秉着一点私心都没有的心态 (不可能)把美食攻略都给大家整理好啦! 坐着地铁的打卡攻略都在这里!徐州好吃的不止烧烤、地锅鸡和米线! 说的小编口水都要流下来啦!来徐州,一次怎么能够!我要大声向全世…

    2023-06-11
  • 征途2新手礼包,征途2国战经典视频

    狂欢双11,来《征途2》今日17时开启的“热血大国战”新区,不用剁手,大量好物免费送,全民0元抢好礼;“苏瑾、大飞、天罡、唐三”四位指挥邀您入驻新区,全面引爆新区热战,激情争夺666元点卡好礼。2022双11,《征途2》等你来“热血大国战”! ■豪礼0元送:御赐金牌、点卡、名将兵器·金龙偃日刀、花好月圆神印、荣耀十件套、15星封星石、非绑银子统统免费可得! …

    2023-06-04
  • 找代加工项目,找代加工项目不交押金只赚加工费

    说起小本生意,多数人都会想到开个小门店,要不就是摆个摊,或者是做一些小型的路边小吃等等,虽然这些行业的需求量比较大,但是就目前的形式来看,这种类型的生意在大多数地区都已经很饱和了,所以综合来看,做成功的几率并不大。 既然说到这,本期文章将继续为大家分享几个在大部分地区,相对比较冷门暴利的行业供大家参考,虽然不体面,但是干成功的几率和适合干的人群都是比较大。 …

    2022-04-24 投稿