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)

相关推荐

  • 必要商城的东西靠谱吗(必要商城的东西靠谱吗知乎)

    除了淘宝、天猫、京东、苏宁以外,还有一家低调潜行的C2M电商平台——必要商城,上线2年,一直以口碑传播为主,网易严选曾花大价钱买下“必要商城”的相关关键词蹭流量。究竟是怎样的存在,又如何靠活动拉动订单量的呢?   前情提要 刚刚翻了翻自己在必要的订单,真是可怕,短短5个月,在必要完成的订单额度竟达1600元,这可能是我在天猫和京东所达不到的速度,虽…

    2021-12-26 投稿
  • 左边一个王字旁右边一个深的右边

      王字旁也可以称作“玉字旁”,因为它是由“玉”字演化而来的,只是在应用中减省掉一点,形如“王”字。书写时需要注意以下几个方面: 一、王字旁的形态 王字旁一般整体窄长,笔画左伸右缩。 两条横画倾斜角度一致,大致平行,但在长短、粗细和起笔方式上会略有差异。 提画往往稍长于横画,且倾斜的幅度也更大。 竖画一般垂直向下,不偏斜;其左侧笔画较长,右侧笔画收…

    2022-05-12 投稿
  • ChatGPT最新成品账号(CHATGPT小号购买平台)

    近期,ChatGPT可以说是火爆全球,大家都在争相体验AI带来的智能便利。 亲自尝试了ChatGPT后发现它实在是一款万能神器,无论是写诗作赋、撰写文章、编写代码,甚至是处理Excel公式,短视频脚本它都能轻松解决! 现在大家都在想办法使用ChatGPT来简化工作! 要想用上它,目前最大的问题就是拥有ChatGPT的账号,但是目前ChatGPT不支持中国用户…

    2023-03-02
  • 什么套餐流量多又便宜移动的(联通什么流量套餐便宜)

    不知道黑粉们还记得之前黑马发布的一篇文章吗? 文章说到了移动的8元套餐重出江湖, 下边的小伙伴纷纷留言自己要换套餐, 也有小伙伴尽心尽力的安利着各种各样的优惠套餐。 不过多数小伙伴面对这些种类繁多的套餐, 实在不知该如何选择。 今天, 黑马就要从流量和资费两个方面入手, 帮助你找到最适合的卡! 除了平时我们见过的互联网套餐之外, 在这里,你可能还会看见黑马推…

    2023-05-30 投稿
  • 天猫企业店铺入驻需要多少钱,天猫企业店铺注册流程

    《天猫企业店铺入驻费用相关探讨》 一、入驻前期的基础费用 在考虑天猫企业店铺入驻费用时,首先要关注的可能是一些基础的开支。 一般来说,需要准备一定的保证金。 这个保证金的金额也许会因不同的类目而有所差异,比如服饰类可能需要5万到10万左右的保证金,而家居类或许会在10万到20万之间。 我觉得这就好像是给天猫平台交的一个“押金”,以确保商家在经营过程中能够遵守…

    投稿 2025-06-09
  • 应用商店优化,如何优化并快速提高Google Play 排名

    如何优化并快速提高Google Play 排名呢?本文作者将与您分享Google Play应用商店搜索排名算法的13个重要因素。 8. 评分及评论 面对不了解的应用或游戏,很多用户都会通过评分和评论来决定是否下载。因此获得更多的正面评论是促进用户增长重要的一环。 在Google Play中,评分的重要性更显而易见。除了在商店详情页中展示评分及评论,Googl…

    2023-02-03
  • 灯笼蕴含着哪些民族文化意义,挂灯笼的寓意和象征

    春节挂灯笼是为了“过年”,营造一种喜庆的氛围,可以烘托新年的气氛。这一习俗源于2000多年前的西汉时期,每年的农历正月十五元宵节时,人们都挂起象征团圆意义的红灯笼,后来灯笼就成了中国人喜庆的象征。红灯笼在民间有着重要意义,被认为是一种比较传统的艺术品。且灯笼还寓意着新年红红火火,来年幸福安康万事如意。 春节是我国传统的民间节日,春节象征着团聚喜庆,在过年时各…

    2022-03-23 投稿
  • 多多买菜代收点(多多买菜代收点怎么投诉)

    一张多多买菜做代收点业务的宣传图片,让快递行业一时间炸开了锅。近日,记者调查获悉,目前拼多多旗下的社区团购多多买菜正在试运营代收业务。据多位驿站老板透露,该业务系统不仅能入库生鲜,还能收发快递。几乎是同一时间,菜鸟驿站立即下发最后通牒,禁止驿站入库多多买菜订单,否则永久清退。平台剑拔弩张之下,局内人关心的依旧是生意,即项目到底赚不赚钱?拼多多在打什么算盘? …

    投稿 2023-04-12
  • 暗黑三玩什么职业好(暗黑3最好玩的职业)

    《 暗黑破坏神 》系列游戏的经典程度自然不需要多说,大家没玩过应该也听说过。   它把《 龙与地下城 》的欧美经典奇幻设定和 Roguelike 游戏玩法以及暗黑阴森的哥特式艺术风格完美结合在了一起,还对于后来 RPG 游戏的许多设定奠定了基础( 比如左红右蓝的设定 )。 不瞒各位,小发可是个老涅法雷姆了,小学时候就偷偷去黑网吧( 这个不建议学习 …

    2021-12-25 投稿
  • 流量卡10元包月(流量卡10位数)

    作者:NGA-尤里尤斯 0.免费十连的基本情况: 年底的免费十连从12月21日开始,截止至1月31日,最多140连。 从12月21日开始不登录可以攒免费十连。 一旦登陆之后就不能攒免费十连了,必须抽掉,否则会永久丢失。 1.免费十连期间的池子情况: 12月21日更新的圣诞咲恋(确定圣诞咲恋是常驻,期间有3星2倍)。 12月31日更新的新年限定(可能是fes和…

    2023-05-25
  • 最受欢迎的小游戏(热门游戏排行榜)

    电子游戏最大的用户就是青少年,而青少年往往也都是中小学生,也都是05后,再加上现在的智能手机发达,和移动游戏发达,所以接触的游戏也多数为手机游戏,那么本期就来盘点一下,现在中小学最爱玩的五款手游。 第一位、《王者荣耀》   与电脑游戏《英雄联盟》,也就是“LOL”,相同玩法的RPG策略游戏。 多数玩家都对此游戏极其沉迷,因为游戏当中的竞技性强,挑战…

    2021-11-12 投稿
  • 波士顿矩阵四种类型(波士顿矩阵四个象限的特点)

      众所周知,无论是一个国家还是一个企业,在制定决策策略的时候,都不会询问每一个人的意见,对于国家而言,通常会收集各行各业代表的意见;对于企业而言,则是会选择一些有代表性的人员来进行意见调研。 同理,当我们需要对大量数据进行分析时,是否一定要纳入很多变量来构建模型呢?比如逻辑回归模型可纳入的变量个数是比较少的,那么当变量个数成千上万时,还可以来构建…

    2021-12-06 投稿