正在阅读:按键精灵冷血课堂4:如何来“过滤”强化石?按键精灵冷血课堂4:如何来“过滤”强化石?

2009-04-28 16:58 出处:PConline原创 作者:佚名 责任编辑:zhangyifei

  前面2课的内容,都是基础。没有前面2课的基础,你是无法理解这一课的内容的。

  我们先“模拟”一下在游戏里的操作:先看看是什么石头(假设是寒玉石),然后看是什么类型(生命力),接着看是什么属性(15):包裹里面是一颗生命力15增加的寒玉石。接着,跟我们预先设置的条件比较:我设置的是生命45以下(含45)自动丢店,所以,脚本自动就把它丢店。如果是一颗生命力50的寒玉,那么就不丢店了。

  以上就是脚本运行的流程,已经完全在游戏里测试通过,目前能够过滤的有全部的7种金刚石、5种寒玉石、4种混元金刚、3种冰魄寒玉、强化石。兽灵丹、玛瑙石比较少在游戏里出现,所以懒得去写了,原理一样、方法一样;热血石还在收集品种,种类实在是太多了,有朋友建议只留下货币10%、升级1%,其它的都丢店。当然了,只要学会了怎么“读取”石头属性,脚本如何写是你的事了,你想丢什么石头就丢什么石头。下面,我就以一颗“生命力15的寒玉石”为例,讲一讲脚本如何写。

  首先找到脚本中卖垃圾的地方,打开“热血江湖挂机升级1.txt”,找到:

  //获取包裹内物品情况

  VBSCall GetAllOfBag()@<FindMon.vbs>

  VBSCall GetAsaleOfBag()@<FindMon.vbs>

  //卖东西

  VBS BagN=StartSN-1

  VBS BagX=0:BagY=0

  While BagN<36

  VBS lngEmpty=1

  VBS BagX=(BagN Mod 6)*33+ScreenWidth-210

  VBS BagY=(BagN\6)*33+366

  MoveTo BagX BagY

  Delay 64

  VBSCall GetStoneOfBag()@<FindMon.vbs>     //新增加的函数

  If picBag(BagN)=1

  LeftClick 1

  Delay 320

  MoveTo CenterX+82 CenterY+150

  Delay 64

  LeftClick 1

  Delay 900

  MoveTo ScreenWidth-45 531

  最关键的是这一句:

  If picBag(BagN)=1

  在猎手的脚本里,如果等于1,表示这就是一个垃圾,应该丢店;如果等于0,表示留在包裹里,既不丢店也不存仓;如果等于2,表示存仓。

  打开FindMon.vbs文件,找到:

  '判断必须保存的物品

  For pi = StartSN - 1 To 35

  pX = (pi Mod 6) * 33 + bagLeft

  pY = (pi \ 6) * 33 + bagTop

  If picBag(pi) = 1 Then

  pXY = objFM.FindPic(pX - 5, pY, pX + 38, pY + 33, "Images\_Bag石头001.bmp", 0.9)

  If pXY > 0 Then picBag(pi) = 2

  End If

  Next

  For pi = StartSN - 1 To 35

  pX = (pi Mod 6) * 33 + bagLeft

  pY = (pi \ 6) * 33 + bagTop

  If picBag(pi) = 1 Then

  pXY = objFM.FindPic(pX - 5, pY, pX + 38, pY + 33, "Images\_Bag石头002.bmp", 0.9)

  If pXY > 0 Then picBag(pi) = 2

  End If

  Next

  说明:_Bag石头002.bmp,就是“寒玉石”的图片。原脚本的意思是:如果是“寒玉石”,就一定存仓(设置picBag(pi) = 2)。

  现在,我把picBag(pi) = 2修改成picBag(pi) = 4。“4”这个值,由函数对比寒玉的图片得到的,目的是传递给脚本,脚本发现某个格子的值等于4了,就知道这是一颗寒玉石了。

  第一步,让脚本知道包裹里某个格子里是一颗寒玉石,这个目的实现了。

  接下来,要读出是什么类型的寒玉石。看下图

  这篇帖子,本来也是属于第三课的内容,不过,由于强化的显示特点有点特殊,所以单独把它拿来写一写。

  关于把强化当垃圾来卖的设置,很早以前有朋友问过我,我由于觉得强化丢店太可惜,也就没有多想脚本的问题。后来由于设置了垃圾石头过滤的内容,发现仓库里强化太多了,有时一个晚上,可以挂近百个强化,而去卖强化又很耽误时间,花2个小时去卖强化,不如直接丢店,再把这个时间拿去挂机合算,呵呵,确实如此。于是才有了“强化丢店”的想法。

  强化的丢店,有2种方法可以实现。先回顾一下以前的方法,由于强化只有一种“外形”,所以,可以把强化的显示图片,改成“垃圾图片”,也就是先进入\datas\interface\ITEM\目录,把2000000000.d2s 文件复制一份,然后删除800000006.d2s文件,再把刚才复制的那个文件改名成800000006.d2s。这个时候你进入游戏,就会发现,原来显示的强化石的图片,现在也显示成为一串钱币的图标了。

  我在这里介绍第二种方法,不用修改图片。也就是说,你在游戏里,看见的依然是强化的图片,但是,脚本会自动把它丢店了。这个方法,其实思路还是前几课讲的思路,在FindMon.vbs文件里,本来就有判断是否是强化的功能,可能大家没注意到吧:

  '***************************************获取包裹中物品的位置*****

  Function GetAllOfBag()

  Dim pXY, pX, pY, pi, bagLeft, bagTop

  Dim HpMpColor, mColorR, mColorG, mColorB, lngBagTmp, lngBlueCount

  bagLeft = ScreenWidth - 228

  bagTop = 353

  '判断是否有东西

  ……

  '判断必须保存的物品

  For pi = StartSN - 1 To 35

  pX = (pi Mod 6) * 33 + bagLeft

  pY = (pi \ 6) * 33 + bagTop

  If picBag(pi) = 1 Then

  pXY = objFM.FindPic(pX - 5, pY, pX + 38, pY + 33, "Images\_Bag石头001.bmp", 0.9)

  If pXY > 0 Then picBag(pi) = 3

  End If

  Next

  For pi = StartSN - 1 To 35

  pX = (pi Mod 6) * 33 + bagLeft

  pY = (pi \ 6) * 33 + bagTop

  If picBag(pi) = 1 Then

  pXY = objFM.FindPic(pX - 5, pY, pX + 38, pY + 33, "Images\_Bag石头002.bmp", 0.9)

  If pXY > 0 Then picBag(pi) = 4

  End If

  Next

  For pi = StartSN - 1 To 35

  pX = (pi Mod 6) * 33 + bagLeft

  pY = (pi \ 6) * 33 + bagTop

  If picBag(pi) = 1 Then

  pXY = objFM.FindPic(pX - 5, pY, pX + 38, pY + 33, "Images\_Bag石头003.bmp", 0.9)

  If pXY > 0 Then picBag(pi) = 9

  End If

  Next

  原版的FindMon.vbs文件里,“_Bag石头003.bmp”就是强化的图片,在这里,我把它设置成等于9。原版是等于2。

  然后打开文件“_热血江湖挂机升级1.txt”:

  //获取包裹内物品情况

  VBSCall GetAllOfBag()@<FindMon.vbs>

  VBSCall GetAsaleOfBag()@<FindMon.vbs>

  //卖东西

  VBS BagN=StartSN-1

  VBS BagX=0:BagY=0

  While BagN<36

  VBS lngEmpty=1

  VBS BagX=(BagN Mod 6)*33+ScreenWidth-210

  VBS BagY=(BagN\6)*33+366

  MoveTo BagX BagY

  Delay 64

  If picBag(BagN)=1

  LeftClick 1

  Delay 320

  MoveTo CenterX+82 CenterY+150

  把:If picBag(BagN)=1

  改成:If picBag(BagN)=1 or picBag(BagN)=9就可以了。

  现在你玩游戏的时候,强化石还是显示成正常的图片,但是卖垃圾的时候,会自动丢店了。以后不想卖强化的时候,把If picBag(BagN)=1 or picBag(BagN)=9改回If picBag(BagN)=1 ,就好啦。

  这一课的内容很简单,如果你同时写了垃圾金刚等等石头的过滤函数,那么也可以在那个函数里对强化的属性进行处理,放在一个函数里处理一类事情,脚本会比较清晰。

  大家回顾一下我在第三课讲的内容,要增加一个函数

  VBSCall GetStoneOfBag()@<FindMon.vbs>

  我们先要增加一个参数,假如叫 qianghua,现在设置qianghua=0是自动存仓,qianghua=1是自动丢店(这里随你自己设置了)。

  那么GetStoneOfBag()这个函数里最主要的一句语句就是:

  If picBag(BagN) = 9 And qianghua = 1 Then picBag(BagN) = 1

  解释:如果包裹的属性是强化石头(If picBag(BagN) = 9),同时你又设置自动卖强化(qianghua=1),那么 picBag(BagN) = 1。picBag(BagN) = 1会怎么样?我这里不用再重复了吧?这样,就相当于有一个设置的“开关”了,接着把“_用户自定义设置器。hta”完善一下,那么使用的时候就很方便了。相对于修改贴图的方法,游戏显示界面会友好一些吧。

关注我们

最新资讯离线随时看 聊天吐槽赢奖品