< 魔兽世界百科 >
您尚未注册/登录
搜索帮助
搜索提示已开启 输入搜索关键词时将自动出现其他玩家的同类搜索词 开启搜索提示 搜索关键词时仍按普通搜索提交框方式输入 什么是智能搜索提示
职业技能 (1199)专业技能 (423)
武器 (2209)防具 (15620)药品 (0)任务道具 (1677)材料 (0)其它 (10399)
商人NPC (981)任务NPC (952)怪物 (7220)其他NPC (10639)
1-10级11-20级21-30级31-40级41-50级50级以上
全部地图 (10091)
WOW动态 (267)WOW学院 (778)职业研究 (26603)副本心得 (1315)天赋交流 (559)任务攻略 (1845)专业技能心得 (740)战场PVP (803)宏与插件交流 (222)
游戏百科 > 魔兽世界 > WOW手册 > 宏与插件交流 > 百科资料
资源苗 基于游戏百科共建计划 - 了解 | 加入
在魔兽世界中已有97,134项百科条目,如果你有任何可以分享的请
关于背包物品使用整理类的宏的制作
好东西!投票支持(10)
匿名投票,确认投票给dailytoy
资料版本 1.0,更新时间:2005年8月21日 来源地址

作者:猪小小

由于游戏提供的函数无法直接由物品名称调用该物品,所以通常简单的使用物品宏是比较麻烦的,一定要把使用的物品放在背包内特定的位置;或则大多术士都需要的问题,能随时监视自己的灵魂碎片(当然,有插件可以做到这一点)。

以下我写写关于如何制作这类宏:

首先,我们要在背包里找到自己需要的东西,必须用循环里遍历这些包。由于放的位置有2个参数,1个是包的编号,一个是包内槽位的编号,

所以我们需要一个循环嵌套来搜索:

以下假设我们身上都是16格的包:
for bag=0,4,1 do       --包的编号为从右到左,0,1,2,3,4
  for cw=1,16,1 do     --槽位的编号为上到下,左到右 1,2,3,4,5......16
  ..............     --这里我们可以写如判断物品是否为我们需要的东西的语句
  end             --表示内循环结束          
end               --外循环结束


或者用其他方式做这个循环:
While循环:while 条件 do … end

Repeat循环:repeat … until 条件


然后,要处理的是物品的判断:
我们有两个函数可以使用
GetContainerItemLink() 和 GetContainerItemInfo()
这两个函数使用的变量都是2个,一个是包的编号,一个是槽位的编号,但他们的返回值不同

GetContainerItemLink()是返回一个带着物品名字的连接,如果你用聊天函数把返回值说出来就可以看到,说出来的不光是物品的名称,还是

一个可以连接到物品详细内容窗口的连接。

比如,你的包里4,1的位置放了一块熊肉,那么用/script SendChatMessage(GetContainerItemLink(4,1),"SAY")后,就可以看到自己说“[熊

肉]”,而且用鼠标点一下说的内容,还可以弹出一个描写这块肉的窗口。

但要注意,直接用"[熊肉]"这样字符串来判断这个物品是不行的,例如:

if GetContainerItemLink(4,1)=="[熊肉]" then ..... end
这个判断是无效的。

正确的方法是,先把要做判断的物品的赋一个变量,再用变量做出判断:

rou=GetContainerItemLink(4,1)       --把物品连接值赋给rou

if GetContainerItemLink(4,1)==rou then ..... end   --现在就可以正常判断物品了

最后要注意的是,这个函数无法对术士的灵魂碎片做出正确的判断,意思就是,虽然灵魂碎片用这个函数显示出来是一样的,但这个函数却认

为所有的灵魂碎片都是不同的东西,即你把这个灵魂碎片的连接赋给一个变量后,这个变量就只能判断这个灵魂碎片,其他的灵魂碎片就无法

作出判断,奇怪把。所以要判断灵魂碎片,就必须用到第二个函数GetContainerItemInfo()

GetContainerItemInfo()的返回值非常多,几乎所有的物品信息都可以返回,但我们这里判断只用它返回的第一个值。
我们可以先用聊天函数来看看第一个返回值是什么样子的:
/script
a=GetContainerItemInfo(4,1)
SendChatMessage(a,"SAY")

可以看到,返回值相当长的英文,但物品的关键字是在后面。

这样,我们就有2种方法来使用这个函数来判断物品。

1、和前一个函数的方法一样,用变量存储值后再判断,前提是要把判断的物品放在特定的位置赋一下值。
2、只使用特定物品,把物品的判断关键字写在函数里,然后用string.find()来判断他。
例子:某物品的关键字是bd
if string.find(GetContainerItemInfo(4,1),bd) then .....end --判断包1,4位置是否存在关键字为bd物品。


接着要处理的是物品的使用和交换。
使用特定背包位置的物品函数:UseContainerItem(index,slot)
这个好理解,不用多解释了把。

拾取/放下物品的函数:PickupContainerItem(index,slot)
这个函数有意思,你鼠标上没抓着东西的时候就是帮你拿起特定位置的物品,有的话就变成放下物品到特定的位置并交换拿起该位置的物品。

所以要完成2个物品在包内的交换要使用3次这个函数:
PickupContainerItem(4,1) --拿起4,1位置的物品
PickupContainerItem(1,4) --放在1,4位置并拿起1,4位置的物品
PickupContainerItem(4,1) --把1,4位置的物品放在4,1位置


好拉,把以上几点组合后宏就基本完成了:

下面的例子是关于灵魂碎片的整理,把前4个包的灵魂碎片全放到最后一个包内:


/script
  bag=0 cw=1 sc=1   --定义好变量,bag是包的编号,cw表示查找包的槽位,sc指向最后一个包内的槽位
  for bag=0,3,1 do --从0号包开始,到3号包结束,最后一个包不搜索。
  for cw=1,16,1 do   --这里假设所有的包都是16个槽位的,如果没那么多槽位的包也可以用。
  if GetContainerItemLink(bag,cw)~=nil --判断这个槽位是否是空的,是空就直接跳到下一个槽位
    then
    if string.find(GetContainerItemInfo(bag,cw),"Gem") --判断这个槽位里是否是灵魂碎片,Gem为灵魂碎片的关键字
    then
      while string.find(GetContainerItemInfo(4,sc),"Gem") do sc=sc+1 end
            --这是一个小循环,用于判断最后一个包里原来是否已经有灵魂碎片,有的话就指向包的下一个槽位
      PickupContainerItem(bag,cw)
      PickupContainerItem(4,sc)
      PickupContainerItem(bag,cw)     --这3句控制灵魂碎片和最后一个包内物品的交换
      sc=sc+1   --重要,不能忘记这个,每放置好一个碎片后就要把最后一个包的
              槽位指针指向下一个槽位,上面的小循环是无法判断刚刚放好的碎片的。
    end
  end
  end
  end   -循环结束

完了么,当然不行。。。因为宏的限制是255个字。所以要简化我们的宏。

最长的内容估计就是函数了,就先从简化函数开始:

建立以下宏:


/script function P(c,d) PickupContainerItem(c,d) end
/script function I(e,f) if GetContainerItemInfo(e,f) then return string.find(GetContainerItemInfo(e,f),"Gem") else return nil end end

原来的宏就变成了:

/script
  bag=0 cw=1 sc=1  
  for bag=0,3,1 do
  for cw=1,16,1 do
  if G(bag,cw)~=nil
    then
    if I(bag,cw)
    then
      while I(4,sc) do sc=sc+1 end
      P(bag,cw)
      P(4,sc)
      P(bag,cw)    
      sc=sc+1  
    end          
  end
  end
  end

多余的变量定义和过长的变量都可以更改:


/script
  s=1  
  for g=0,3 do
  for w=1,16 do
  if G(g,w)
    then
    if I(g,w)
    then
      while I(4,s) do s=s+1 end
      P(g,w)
      P(4,s)
      P(g,w)    
      s=s+1  
    end          
  end
  end
  end

现在写的下了吧。呵呵,至于使用物品的宏我虽然已经写好了,但没有测试过,等测试没问题后再放出来把。有兴趣的朋友也可以自己写写。

但要注意一点,使用物品的宏只要找到物品就可以马上跳出循环,所以用Repeat循环做比较合适。


暂时没有补充内容 您可以第一个补充内容


引用百科资源:多种方式引用本页 | 浏览引用了本页的网站/网页(1384)
关闭
百科引用链使您能方便地在其他网页插入本资源的引用链接,让优秀的百科资源通过引用链对更多玩家造成帮助。
越多的玩家通过您的引用链访问百科将为您带来更多的百科威望!

引用本页地址(点击复制到粘贴板) 粘贴到你想引用的网页。
HTML形式的传播:

论坛形式的传播:

关闭
本页有下列读者,字体越大、颜色越深的玩家阅读本页的次数越多。
*如果您的玩家名称未刊载于此,因为只有百科成员才能记录阅读体验。
在魔兽世界中已有97,134项百科条目,如果你有任何可以分享的请

本页由 dailytoy 创建,希望能用你我的开放思维帮助下得到不断完善。
共有 0 条评论 浏览全部评论
匿名发表,您可以马上注册/登录成为百科玩家后用属于自己个性名称发表。

《关于背包物品使用整理类的宏的制作》的任何感想和见解请发于此。

请和我们一起建造全球最大的人工游戏百科
在本目录提交一笔资料 - 我们的计划 - 成为目录编辑
搜游的搜索内容将在 游戏百科共建计划 的基础上不断完善与加强。
当前目录下还没有目录编辑负责管理。
 

想把自己的网站也加上搜索功能?来这里获得免费的魔兽世界搜索条

搜游大全 - 免责声明 - 投放广告 - 商务合作

© 2005 - 2007 搜友游戏百科 SOUYO.com