• 按键公众号 :
按键精灵电脑版
立即下载

软件版本:2014.06
软件大小:22.9M
更新时间:2021-12-03

按键精灵安卓版
立即下载

软件版本:3.7.2
软件大小:46.2M
更新时间:2023-05-10

按键精灵iOS版
立即下载

软件版本:1.8.0
软件大小:29.2M
更新时间:2023-03-21

按键手机助手
立即下载

软件版本:3.8.0
软件大小:262M
更新时间:2023-05-30

快捷导航

登录 后使用快捷导航
没有帐号? 注册

返回列表 12345678» / 21
发新话题 回复该主题

[技术交流] 【院刊】-【201409期】DNF遍历背包卖物 [复制链接]

1#

DNF遍历背包卖物

单重循环遍历背包思路提供者:[backcolor=rgb(229, 237, 242)]wbxxxbw
游戏挂机一段时间,号子上的背包满了怎么办?我们需要清理背包,该分解的分解该卖的卖。
 清理背包第一步:遍历背包
     第二步:判断背包格里是否有物品
     第三步:判断物品的名称等级
     第四步:执行清包操作。

 具体该怎么操作呢?我们一起来学习下。

第一步:单重循环搞定背包遍历


您所在的用户组无法下载或查看附件
[attach]162918[/attach]



以dnf游戏为例,小编的号,背包格数是 8*4 总共32格



单重循环遍历大致思路:
1、取第一格背包的中心点坐标。
2、获取一格背包的宽度和高度是多少。
3、 遍历公式:第二格背包中心x坐标=背包第一格中心X坐标 + (2 mod 背包总列数) * 每格宽
第二格背包中心y坐标=背包第一格中心Y坐标 + (2\ 背包总列数) * 每格高
注意:为什么x坐标添加的每隔宽用 mod取余呢? 因为背包横向走的时候,x坐标是在变化,而背包竖向走的时候,也就是从第一行最后一格跳转到第二行第一格的时候,x坐标是不变的。如图:

您所在的用户组无法下载或查看附件



单重循环遍历背包代码:
  1. Call 横向自上往下背包遍历(1, 32, 8, 489, 277, 30, 30)//调用背包遍历
  2. Sub 横向自上往下背包遍历(开始格数,结束格数,背包总列数,背包第一格中心X坐标,背包第一格中心Y坐标,每格宽,每格高)
  3. For i = 开始格数-1 To 结束格数-1 //因为数组下标是0起始,所以这里开始格数要减去1
  4. MoveTo 背包第一格中心X坐标 + (i mod 背包总列数) * 每格宽, 背包第一格中心Y坐标 + (i \ 背包总列数) * 每格高
  5. TracePrint (背包第一格中心X坐标 + (i mod 背包总列数) * 每格宽)&","&(背包第一格中心Y坐标 + (i \ 背包总列数) * 每格高)
  6. Delay 500
  7. //移动到这格后,这里写你在这格要做的事情的代码
  8. Next
  9. End Sub
复制代码



第二步:判断当前背包格子里是否有物品



您所在的用户组无法下载或查看附件
您所在的用户组无法下载或查看附件


我们观察上面两张图,如果格子里没有物品,鼠标移动上去之后是没有物品属性显示的。所以,装备两个字可以看见。如果格子里有物品,那么装备两个字就会被遮挡。(游戏里不变的参照物是很多的,童鞋们也可以取其他的参照物来代替装备两个字)

好了,我们发现这个特点之后,就可以进行判断,找到装备两个字就说明格子里没有物品,反之则有物品。
小编使用的是,大漠插件来找字。
首先,建立一个字库。DNF游戏的字体是系统字体,小编的系统是宋体9号字。

您所在的用户组无法下载或查看附件



然后,按照图里的步骤建立好字库以后,将字库文件添加到按键精灵附件中。


判断当前背包是否有物品代码:
  1. Call 横向自上往下背包遍历(1, 32, 8, 489, 277, 30, 30)//调用背包遍历
  2. Sub 横向自上往下背包遍历(开始格数,结束格数,背包总列数,背包第一格中心X坐标,背包第一格中心Y坐标,每格宽,每格高)
  3. For i = 开始格数-1 To 结束格数-1//因为数组下标是0起始,所以这里开始格数要减去1
  4. j=j+1//记录当前遍历到的格数
  5. MoveTo 背包第一格中心X坐标 + (i mod 背包总列数) * 每格宽, 背包第一格中心Y坐标 + (i \ 背包总列数) * 每格高
  6. TracePrint (背包第一格中心X坐标 + (i mod 背包总列数) * 每格宽)&","&(背包第一格中心Y坐标 + (i \ 背包总列数) * 每格高)
  7. Delay 500
  8. w = dm.Ocr(478, 238, 511,253,"ffffb8",1.0)
  9. If w= "装备" Then //找装备字眼,如果没有找到,说明背包格子里有东西
  10. TracePrint "第"& j & "格没物品"
  11. Else
  12. TracePrint "第" & j & "格有物品"
  13. End If

  14. Next
  15. End Sub
复制代码


第三步,判断物品名称

要如何判断物品名称呢?遍历背包的时候,发现格子里有物品的时候,我们开始判断物品的名称。但是,这些物品的属性窗口并不是固定显示在一个地方的


您所在的用户组无法下载或查看附件
您所在的用户组无法下载或查看附件


细心的童鞋很快就能发现,这里的物品属性框有两种,一种显示的是当前物品的信息,一种显示的是角色现在穿戴物的物品属性。
而且,“穿戴中的物品"这几个字是没有变化的

您所在的用户组无法下载或查看附件



判断物品名称大致思路:
1、用大漠插件找字,找“穿戴中的物品” 这几个字,找到之后记录它的坐标值。所以这里不使用dm.ocr找字,使用dm.FindStr来找字。
拓展知识:dm.ocr找字,是在你不知道要找什么字的情况下,通过定义查找范围和字体颜色去找字,返回值就是找到的文字。
dm.FindStr找字,是你知道你要找什么字,然后定义查找范围和字体颜色去找字,返回值是文字所在的坐标。

2、通过“穿戴中的物品”这几个字所在的坐标,计算物品名称的出现的范围。
3、用dm.ocr找字在获取到的物品名称范围内进行找字。
4、找到之后,可以继续查找物品的其他属性,耐久属性等等,来判断出售分解还是其他,由于种类很多,小编就不写这类代码了。


注意:如果身上并没有穿戴装备,那么物品属性就只会显示当前物品属性,“穿戴中的物品”这几个字无法找到,这样的情况可以在代码里继续做判断,找不到“穿戴中的物品”时,可以去找物品重量后面的单位KG(为什么前面不找KG呢?因为当有两个物品属性窗口的时候,当前物品属性窗口和穿戴中的物品属性窗口中都有KG字样,有两个的话,就无法确定位置。)

全部代码:
  1. call register()
  2. PutAttachment "G:\test", "DNF.txt" //释放字库文件到G:\test文件夹里
  3. dm_ret = dm.SetDict(0, "G:\test\DNF.txt") //加载字库文件
  4. hwnd= Plugin.Window.Find("地下城与勇士", 0)
  5. Call Plugin.Window.Size(hwnd,800,600)
  6. Call Plugin.Window.move(hwnd, 0, 0)
  7. Call Plugin.Window.Active(hwnd)
  8. Delay 1000
  9. KeyPress "I", 1
  10. Call 横向自上往下背包遍历(1, 32, 8, 489, 277, 30, 30)//调用背包遍历
  11. Sub 横向自上往下背包遍历(开始格数,结束格数,背包总列数,背包第一格中心X坐标,背包第一格中心Y坐标,每格宽,每格高)
  12. For i = 开始格数 - 1 To 结束格数 - 1
  13. j=i+1
  14. MoveTo 背包第一格中心X坐标 + (i mod 背包总列数) * 每格宽, 背包第一格中心Y坐标 + (i \ 背包总列数) * 每格高
  15. TracePrint (背包第一格中心X坐标 + (i mod 背包总列数) * 每格宽)&","&(背包第一格中心Y坐标 + (i \ 背包总列数) * 每格高)
  16. Delay 500
  17. w = dm.Ocr(478, 238, 511,253,"ffffb8",1.0)
  18. If w= "装备" Then //找装备字眼,如果没有找到,说明背包格子里有东西
  19. TracePrint "第"& j & "格没物品"
  20. Else
  21. TracePrint "第" & j & "格有物品"

  22. dm_ret = dm.FindStr(423, 22, 771, 342, "穿戴中的物品", "e8cda4", 1.0, intX, intY)//查找穿戴中的物品,找到之后获取它的坐标,以它的坐标为基点去找当前物品的名称。
  23. If intX >= 0 and intY >= 0 Then
  24. s = dm.Ocr( intX-300,intY,intX-60,intY+50, "68d5ed|b36bff", 1.0)//蓝色装备和粉色装备都找
  25. MessageBox s
  26. End if
  27. End If
  28. Next
  29. End Sub
  30. Sub register() //注册大漠
  31. Set ws = createobject("Wscript.Shell")
  32. ws.run "regsvr32 atl.dll /s"
  33. Set ws = nothing
  34. PutAttachment "G:\test", "dm.dll"
  35. PutAttachment ".\Plugin" ,"RegDll.dll"
  36. call Plugin.RegDll.Reg ( "G:\test\dm.dll")
  37. Set dm = createobject("dm.dmsoft")
  38. ver = dm.ver()
  39. If len(ver) = 0 Then
  40. MessageBox "插件注册失败,检查系统是否禁用了vbs脚本权限"
  41. EndScript
  42. End If
  43. End Sub
复制代码

DNF遍历背包.Q:
您所在的用户组无法下载或查看附件




本文由按键学院提供技术支持


按键学院实战班(入驻最终幻想)火热招生


按键学院基础视频抢先观看


    已有2评分我要评分查看所有评分

    本主题由 超级版主 瑞祥幽冥狼 于 2023/10/14 9:56:02 执行 审核帖子 操作
    <strong>按键学院交流群(开放中):376122403<br />
    <br />
    <a href="http://bbs.anjian.com/thread-548439-1-1.html" target="_blank">按键学院开班<strong> <font color="Red">【安卓导师】+【实战导师】招聘导师</font></strong>啦~~<font color="Red"><strong>待遇特别好,有钱,就是任性。</strong> </font></a><br />
    <br />
    <br />
    <a href="http://bbs.anjian.com/t
    2#

    学习一下

    3#

    很厉害的样子

    4#

    卡萨帝的风呼呼

    5#

    遍历背包

    6#

    单重循环搞定背包遍历

    7#

    你太牛逼了

    8#

    是是是

    9#

    1212111111111111

    10#

    哈哈

    11#

    看看再说

    12#


    13#

    的,你,了,她,图,

    14#

    dsadasads

    15#

    学海无涯苦作舟

    16#

    谢谢

    17#

    RE:【院刊】-【201409期】DNF遍历背包卖物修改

    18#

    学习学习

    其实我不过就是一个谁都不会懂的小丑。只会独自承受结局的悲哀!
    19#

    学习时间到了

    20#

    12312312312

    发新话题 回复该主题