游客您好
第三方账号登陆

60年代盗贼宏教学及收集

职业攻略-盗贼 wowclassic 2019-6-23 15:50 2379人浏览 0人回复
摘要

一直看各种宏的教学,没有一片足够清晰严格的。在这些教学里,函数的变量和作用都没有说明,宏的语法也没有说明,这样对玩家自己改进宏十分不利。那些写宏教程的也很奇怪,难道都不屑于说明语法么?或者就是直接从国 ...

一直看各种宏的教学,没有一片足够清晰严格的。

在这些教学里,函数的变量和作用都没有说明,宏的语法也没有说明,这样对玩家自己改进宏十分不利。
那些写宏教程的也很奇怪,难道都不屑于说明语法么?或者就是直接从国外网站照样copy过来的?
恩,对大多数人可能不管黑猫白猫复制下来能用的宏就万事ok了...但我个人不喜欢不求甚解的态度,
而且看见过的多数拿出来分享给别人用的宏,用计算机专业的标准衡量,代码往往冗余,这就意味着
效率的损失,也就意味着片刻的延时,或许片刻就是生死的分界线....
这篇宏的经验文章写给那些想多了解一些宏的知识的玩家,
如果不想自己动手写宏的玩家不用往下看。


1,宏的基本常识
宏是一个脚本,发送到服务器端执行。这个脚本由一组命令序列构成,长度不超过255个字符。
序列中的每一个命令,由一个/ 开头,例如/say /script 等等。
/script 后面跟随脚本特有的语句和函数。

你可以罗列多个/script命令在一个脚本里,也可以在一个/script命令中写多个函数,这都可以。
因为宏就是依次执行所有的命令,所以不需要在宏的最后添加end 标记,或在命令之间加; 
事实上,end标记 是if语句的组成部分,你在写if语句时才用到end关键字。命令和命令之间用
换行或; 隔开都可以,我喜欢用换行..呵呵,省掉不必要的; 代码也清楚些

常用的if语句语法如下:

/script if [条件表达式] then [命令序列] end
or
/script if [条件表达式] then [命令序列1] else [命令序列2] end

这里条件表达式不需要在外面套括号,和C,java的习惯不同,应该是为了减少不必要的字符数,
毕竟WOW宏有长度限制。

条件表达式 中 相等用 == , 否定用not, 不等于可以写 not (A == B), 
暴雪没有提供!= 作为不等于,很奇怪。 例子:
if sword == GetInventoryItemLink("player", 16) then ....
if not (sword == GetInventoryItemLink("player", 16)) then ....

注1,这里的sword是全局变量。每一个全局变量的生命周期是一次登陆中从声明变量到退出魔兽,
通常在每次登陆后额外运行一个设定宏来设定我们所需要的全局变量。

注2,GetInventoryItemLink()是一个取装备link的函数,
GetInventoryItemLink("player", number)是从人物身上取装备的link,number代表人物装备画面的不同槽, 头部,颈部,依次递增,于是16代表主手武器,17代表副手武器
GetInventoryItemLink("player", 16) 就代表了主手武器的link

2,盗贼专用宏的编制思路,
其实用宏就是为了切换武器,既不放弃匕首的背刺和伏击,也能用高攻的单手剑,达成两全其美的效果。

一般有两种风格的切换宏,
1,主手剑副手匕首,用背刺,伏击时把匕首换到主手。用其他技能时把剑换到主手。
2,主手剑副手剑,背包里放一把匕首,用背刺,伏击时,把背包里的匕首换到主手。用其他技能时把剑换回来。

前一种方案的切换武器的宏如下:

PickupInventoryItem(16) PickupInventoryItem(17)

还记得吧,16代表主手武器,17代表副手武器。
PickupInventoryItem就是相当于打开人物装备面板(Inventory, 按C)
做点击数字对应位置的动作。这个宏很简单,
就是先点击主手武器,然后鼠标上应该有主手武器,然后点击副手武器,
这时候两把武器就会交换。瞬间执行的效果当然就是瞬间交换,但这个宏有能够感觉得到的明显延时,
因为PickupInventoryItem这个函数执行比较慢。推荐用下一个方案。

后一种方案的切换武器的宏如下:
PickupContainerItem(0, 1) PickupInventoryItem(16) PickupContainerItem(0, 1)

PickupContainerItem是从背包里取装备,第一个参数指背包,第2个参数指背包里的槽位,
这里的约定是0代表主背囊,然后从右向左,依次是1,2,3,4
背包里槽位从上到下,从左往右排序,注意!从1开始。这和一般从0开始的习惯有点不同。

因此PickupContainerItem(0, 1) 就是点取我主背包上数第一排左数第一格的物品。
然后PickupInventoryItem(16) 放到主手位置,
然后把原先主手位置的物品PickupContainerItem(0, 1)放到背包里。完成一次武器交换。

这个切换动作明显比前一个更快。推荐使用,而且副手因此可以保持用高DPS的剑,有助于提高攻击效率么,当然,你爱在副手保持什么武器都可以,呵呵。

现在我们有了一个基本的切换宏,但每次用技能都手工切换很难忍,我们继续实践很多人想到过的,
为特定技能写不同的宏,保证不同技能使用合适的武器。

基本思路是用全局变量记录主手使用的剑,在用不同技能时判断主手位武器是剑或否,看情况切换。

全局变量的设置宏:
/script setglobal("sword", GetInventoryItemLink("player", 16))
/script SendChatMessage("主手剑"..sword, "say", this.language,"")

第二句命令把你的主手武器说出来,让自己能够看见。如果碰巧是匕首在主手(例如上次断线不巧等等),就切换一次,重新运行设置宏。保证sword变量对应自己的主手剑。

先用邪恶攻击举例:我们要保证每次邪恶攻击都使用高攻击的剑,所以先判断主手武器,如果需要切换就切换,然后执行邪恶攻击。

/script if not (sword == GetInventoryItemLink("player", 16)) then PickupContainerItem(0, 1) PickupInventoryItem(16) PickupContainerItem(0, 1) end
/script CastSpellByName("邪恶攻击(等级 5)")

但类似写背刺的宏会有问题,背刺的有效性判断在宏执行之前,
这就使得流传的一些背刺宏需要连按两下,第一下只能完成切换,第二下才能背刺,这很是不方便。

因此,我的思路是在凿击之后直接切换武器,因为凿击通常接着就要背刺。这样背刺就可以直接进行了。而且背刺后应该换回剑继续,因为背刺的60能量开销使得它在绝大多数情况不能连续进行,除了某些升主动天赋的贼...

凿击宏如下:
/script CastSpellByName("凿击(等级 3)")
/script if ( sword == GetInventoryItemLink("player", 16) ) then PickupContainerItem(0, 1) PickupInventoryItem(16) PickupContainerItem(0, 1) end

背刺宏如下:
/script CastSpellByName("背刺(等级 5)");
/script PickupContainerItem(0, 1) PickupInventoryItem(16) PickupContainerItem(0, 1)

如果敌人已经晕了,而我在他背后,例如偷袭之后,
那么这个宏连按两下,也可以起到第一下切换,第二下背刺的效果。
通常偷袭后是连续邪恶攻击攒点还是背刺伤害 要视情况而定,所以偷袭的宏后面我没有加固定切换的
代码。

大体上就是这样,以上的宏解说希望对各位贼友有帮助,其他各个技能的宏如果觉得必要应该可以
自己写出来了,呵呵,自己写一写就会彻底掌握了。当然不能就此精通,
题目的言过其实,就是搞笑而已。呵呵




======================宏收集================================


MACRO 19 "潜行" Ability_Ambush.blp
/施放 潜行
/script if(notdagger()) then lefttoright() end
END

MACRO 24 "背刺" Ability_BackStab.blp
/script if(isdag()) then CastSpellByName("背刺") else lefttoright() end
END

MACRO 26 "邪恶攻击" Spell_Shadow_RitualOfSacrifice.blp
/script if(notdagger()) then CastSpellByName("邪恶攻击") else lefttoright() end
END

MACRO 29 "消失" Ability_Vanish.blp
/施放 消失
/script if(notdagger()) then lefttoright() end
END

MACRO 44 "初始" Spell_Shadow_ScourgeBuild.blp
/script function isdag() GameTooltip:SetInventoryItem("player", 16) GameTooltip:Hide() return (GameTooltipTextRight2:GetText()=="匕首" or GameTooltipTextRight3:GetText()=="匕首" or GameTooltipTextRight4:GetText()=="匕首") end;

/script function notdagger() return isdag()==false end;
/script function lefttoright() PickupInventoryItem(16) PickupInventoryItem(17) end;
/script function change(bag,slot) PickupContainerItem(bag, slot) PickupInventoryItem(16) end
END

这里我使用了函数作为判断方法来取代了以前的判断语句,基本上拷贝上去就可以用了。

名字为“初始”的宏是刚进入游戏时就要运行的,很重要。我使用了SuperMacro插件,所以写的长了点,你们使用时请将红色部分和蓝色部分做成两个宏并在游戏开始时依次使用(先红色后蓝色)

I. 函数部分说明     
  isdag()如果主手武器是匕首,返回true,否则返回false。
  notdagger()如果主手武器是匕首,返回false,否则返回true。
  lefttoright() 切换武器函数                   左右手互换
  change(bag, slot) 切换武器函数                 把放在包中的武器放到主手位置
                bag ----------------所在包
                slot ----------------所在格
              例子 change(0,1) 把第一个包的第一个格内武器取到主手

II. 需要的修改
    我提供了两个切换武器函数,请根据自己的情况在上面的宏中做修改,两个取其一。
  也许我想得太简单了,有些人也问到了,我把只换主手武器的宏放在下面了(取第一个包第一格,记得把上面的初始宏也加上)

MACRO 19 "潜行" Ability_Ambush.blp
/施放 潜行
/script if(notdagger()) then change(0,1) end
END

MACRO 24 "背刺" Ability_BackStab.blp
/script if(isdag()) then CastSpellByName("背刺") else change(0,1) end
END

MACRO 26 "邪恶攻击" Spell_Shadow_RitualOfSacrifice.blp
/script if(notdagger()) then CastSpellByName("邪恶攻击") else change(0,1) end
END

MACRO 29 "消失" Ability_Vanish.blp
/施放 消失
/script if(notdagger()) then change(0,1) end
END

III.注意
  上面的宏都经过了测试,但是直接从网页上copy的话,一些语句由于显示尔被加上了回车,造成使用错误,请注意一下。
  
 ====================================================
 
 MACRO 9 "非冤布毒术1" Spell_Arcane_PortalUnderCity.blp
/script UseContainerItem(0,9); PickupInventoryItem(16); 
END

MACRO 10 "非冤布毒术2" Spell_Arcane_PortalDarnassus.blp
/script UseContainerItem(0, 10);PickupInventoryItem(17);
END

MACRO 19 "潜行" Ability_Ambush.blp
/施放 潜行(等级 3)
/script GameTooltip:SetInventoryItem("player", GetInventorySlotInfo("MainHandSlot")); if(GameTooltipTextRight3:GetText()~="匕首") then PickupInventoryItem(16) PickupInventoryItem(17); end
END

MACRO 24 "背刺" Ability_BackStab.blp
/script GameTooltip:SetInventoryItem("player", GetInventorySlotInfo("MainHandSlot")); if(GameTooltipTextRight3:GetText()=="匕首") then CastSpellByName("背刺(等级 5)") else PickupInventoryItem(16) PickupInventoryItem(17); end
END

MACRO 26 "邪恶攻击" Spell_Shadow_RitualOfSacrifice.blp
/script GameTooltip:SetInventoryItem("player", GetInventorySlotInfo("MainHandSlot")); if(GameTooltipTextRight3:GetText()~="匕首") then CastSpellByName("邪恶攻击(等级 6)") else PickupInventoryItem(16) PickupInventoryItem(17); end
END

MACRO 29 "消失" Ability_Vanish.blp
/施放 消失(等级 1)
/script GameTooltip:SetInventoryItem("player", GetInventorySlotInfo("MainHandSlot")); if(GameTooltipTextRight3:GetText()~="匕首") then PickupInventoryItem(16) PickupInventoryItem(17); end
END

MACRO 35 "绷带" Spell_Holy_HolyBolt.blp
/script UseContainerItem(0, 5)
/script TargetUnit("player")
END

MACRO 36 "目标信息" Ability_CheapShot.blp
/script if UnitClassification("target")=="elite" then SendChatMessage("".. UnitLevel("target") .. "+ " .. UnitName("target"), "party") else SendChatMessage("" .. UnitLevel("target") .. " " .. UnitName("target"), "party"); end
END

上面是我以前使用的一些宏(现在也在用,改了技能等级而已,^-^)
论坛上很多新人在问宏的使用,但是很多文章都没有说清楚,只是给出宏而已,很多时候都要根据自己的具体情况来修改,如果不明白自己需要修改的地方的话,新手很难使用。说实话,有时候都觉得被问的有些烦了。另外上面的宏是我将非盗贼的都删掉了,所以如果要使用,请拷贝蓝字部分。(注意,copy的话,每行后面会默认加一个回车,造成语句出错,如果看到下一行没有/script开头的话,那么请在这行末尾Del一下)

然后针对一些主要的来做说明,首先说明一点,我喜欢所有的背包物品都在自己应该的位置,所以使用的宏都是取定背包位置的。后面我会添加其他的一些使用。不过超过255字节的宏此处不做介绍了。没有测试过的一些宏也不做说明。

=====================================================

1。绷带
/script UseContainerItem(0, 5)
/script TargetUnit("player")
第一句,这里使用UseContainerItem(bag, slot)语句来做调用。
UseContainerItem 使用背包物品

bag         第几个背包
          5个背包按照排列位置编号如下:

          [4][3][2][1][0]

slot         一个背包中的格子编号
          6格包的格子编号如下:

          _____[1][2]
          [3][4][5][6]

          16格包的格子编号如下:

            [ 1][ 2][ 3][ 4]
            [ 5][ 6][ 7][ 8]
            [ 9][10][11][12]
            [13][14][15][16]

            其他格数以此类推。
  所以第一句指明使用第一个背包的第5个格子中的物品。你最好将绷带放在指定的位置,并保证该格子总是有绷带存在,这样使用不会因为遗忘出现问题。

第二句TargetUnit("unit"), 选中所写的目标
  这里unit指定为player,player指玩家自己。虽然宏是并发执行,但实际上它还是从第一条开始执行的,所以如果你的目标可以被治疗,那么你会治疗他,如果不是,则目标选择到自己,治疗自己。这个宏因为使用时选中自己,所以不会取消连击点,但使用后不会自动选择先前的目标。

另外的宏:
/script p="player";t="target";if(not UnitCanAttack(t, p))then ot=UnitName(t);TargetUnit(p);else ot=nil;end;
UseContainerItem(0, 5);if(SpellIsTargeting()) then SpellTargetUnit(p); end if(ot) then TargetByName(ot);end
这个宏在使用结束后,会自动选择先前的目标,也不会取消连击点。说明如下
p="player";t="target"; 指定两个变量,p代表自己, t 代表目标(没有为空)
if(not UnitCanAttack(t, p)) 
UnitCanAttack(t, p)判断自己与目标是否能够互相攻击,同时用not取得相反值,也就是可以的话为false,不可以为true
如果为true,ot=UnitName(t);TargetUnit(p); ot指定为先前目标,并将自己作为目标
如果为false,ot=nil 则ot指定为空,此时目标仍为先前目标。
UseContainerItem(0, 5); 使用绷带
if(SpellIsTargeting()) 这条语句判断是否现在使用绷带还处于选择目标状态,即鼠标形状为选择使用目标,如果是返回true,否则false
如果是true, SpellTargetUnit(p) 也就是没有选择目标或者目标无法治疗,那么治疗自己。
if(ot) then TargetByName(ot);end 这条语句判断如果ot存在,那么选择ot,其实ot一般指自己同盟,就是可以被你治疗的人,因此,如果你觉得不想再选中盟友,那么可以去掉这条语句,不过不建议如此

=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​

2。非冤布毒术(mud中来的名字)
/script UseContainerItem(0,9); PickupInventoryItem(16);
/script UseContainerItem(0,10); PickupInventoryItem(17);
毒药放在第一个包的9,10位置,第一个付到主手武器,第二个付到副手武器,也许要问我为什么不做到一起,如果要写到一起的话,需要使用延迟插件,不过这里不准备提及,这篇文章提供的宏都是针对原始版本的,不需要任何插件支持。
这里只对一个宏做出说明,说明过的语句不再重复
PickupInventoryItem(16); 这条语句选择主手武器。
PickupInventoryItem(index)   相当于鼠标选择动作,明显,整条宏动作就是右键使用物品,然后左键选中武器。index表示身上各个装备位置的索引。
1   = 头部
2   = 颈部
3   = 肩部
4   = 衬衫
5   = 胸部
6   = 腰部
7   = 腿部
8   = 脚部
9   = 手腕
10 = 手套
11 = 指环1
12 = 指环2
13 = 饰品1
14 = 饰品2
15 = 披风
16 = 主手
17 = 副手
18 = 远程

=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​

3。目标信息
/script if UnitClassification("target")=="elite" then SendChatMessage("".. UnitLevel("target") .. "+ " .. UnitName("target"), "party") else SendChatMessage("" .. UnitLevel("target") .. " " .. UnitName("target"), "party"); end
这个宏在PARTY频道中发出当前目标的一些相关信息。"+"代表精英。效果如下:
[Party]Hank:50 Stormwind Guard
[Party]Hank:43+ King Bangalash

下面是一个目标信息的相关函数列表:
UnitName 目标名字
UnitLevel 目标等级
UnitClass 目标职业
UnitClassification 目标种类(精英。。)
UnitCreatureFamily 生物所属(猫。。)
UnitCreatureType 生物种类(动物,类人)
UnitRace 种族(兽人。。)

这里要说的不是这个宏,而是宏里面信息的发送用法
SendChatMessage(msg, system, language, channel) 发送信息

msg 发送的信息
system 发送的命令 如"SAY", "WHISPER", "EMOTE", "CHANNEL", "PARTY", "GUILD", "YELL", "RAID" 
language 发送的语言 如Common, Darnassian, Dwarvish, Taurahe, Orcish, Gutterspeak, Demonic ... 
channel 频道

后面的几个参数可以省略,即使用前回设置
这里注意一点,字符串的连接使用 “..” 符号来连接,有基础的看下上面的语句就能知道,比如我要写闷棍目标 那么就是 
SendChatMessage("闷棍"..UnitName("target"), "party")

另外的用法,一个简单的例子
/p 闷棍>>> %t <<< 
/施放 闷棍(等级 ?)
第一个就是说话的语句,%t指代目标,然后使用技能。

=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​

4。武器切换问题
首先先给出几个武器切换的宏,不带条件判断,请根据自己的情况修改放置武器的位置。
/script UseContainerItem (0,1)
/script PickupInventoryItem (16)
/script PickupContainerItem(0,1);PickupInventoryItem(16)
这两个都是取用背包武器的宏。备用武器放在第一个位置,可以保证不会变动,算是推荐的位置。
这个宏其实与使用毒药的宏一样,只是因为武器不能使用,所以变成替换了。这里指定的更换位置为16,即主手,副手改成17就可以了,如果仔细读了上面的东西,就应该能够明白。
/script PickupInventoryItem(16);PickupInventoryItem(17)
切换主手武器和副手武器

这里的几个宏都有个缺陷,当鼠标上有个物品时,会出现错误。不过为了后面加入了判断使用后,不超过255字节,所以使用这几个宏,请注意这个问题。


现在来具体看我们的判断宏
/script GameTooltip:SetInventoryItem("player", GetInventorySlotInfo("MainHandSlot")); if(GameTooltipTextRight3:GetText()~="匕首") then CastSpellByName("邪恶攻击(等级 6)") else PickupInventoryItem(16) PickupInventoryItem(17); end
这个宏的作用在于判断主手如果不是匕首,使用邪恶攻击,否则做武器变换,武器变换请根据前面说明自己修改,后面不做说明。
GameTooltip:SetInventoryItem(unit, GetInventorySlotInfo(slot)); 
这条命条用来获取指定单位的指定物品栏(身上)的东西的工具条,并赋给变量GameTooltip。
unit   目标       这里我们使用"player",指自己
slot   物品索引     这里我们使用"MainHandSlot",指主手,相关如下
                    头部 = "HeadSlot"
                    颈部 = "NeckSlot" 
                    肩部 = "ShoulderSlot"
                    背部 = "BackSlot"
                    胸部 = "ChestSlot" 
                    衬衫 = "ShirtSlot"
                    手腕 = "WristSlot"
                    手套 = "HandsSlot"
                    腿部 = "LegSlot"
                    脚部 = "FeetSlot"
                    指环1 = "Finger0Slot"
                    指环2 = "Finger1Slot"
                    饰品1 = "Trinket0Slot" 
                    饰品2 = "Trinket1Slot"
                    主手 = "MainHandSlot"
                    副手 = "SecondaryHandSlot"
                    远程 = "RangedSlot"
if(GameTooltipTextRight3:GetText()~="匕首") 
GameTooltipTextRight3表示图片上的第三行右边位置的文字。这里着重指出3这个字,因为对第二幅图而言,要改成4才能取得武器种类。 ~= 表示不等于 比较对象为"匕首"。

这里我们使用"匕首"作为比较值,因为使用的其他武器可能是剑,锤,而决定技能使用的只是是否匕首而已。

这里还要着重提到的是在武器类型的下面紧跟的说明是武器速度,也是有左右字段的。这点后面提到用法。

=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​

正常情况下,这种宏的使用是没有问题的,但是当你有一把唯一的武器时,这些都将成为错误
首先唯一的武器第三行右边是没有说明的。GameTooltipTextRightX:GetText()在取得空值时,会使宏无法继续使用。
I. 如果唯一性质的武器是匕首,那么只要把所有的技能使用宏中的3改成4就可以了,因为如果当前武器是匕首,那么取得武器类型匕首,如果当前武器不是匕首,则取得的是武器速度(普通武器),或者武器类型(唯一武器)
II. 如果唯一性质的武器不是匕首,那么请把所有的技能使用宏中的3改成4,"匕首"改成这把武器的类型,= 号改成 ~=, ~= 号改成 =


5。 技能使用(补充)

盗贼的技能使用宏有两种情况,一种是需要判定是否使用的(当然这不是绝对,不过出于一些原因,我们会希望做个判断使用技能),一种是不需要判定的(如潜行等,出于一些原因,我们需要接着做些动作)。这里针对盗贼的情况,基本上都是伴随武器切换动作。

I. 不需要判定技能
/施放 潜行(等级 3)
/script GameTooltip:SetInventoryItem("player", GetInventorySlotInfo("MainHandSlot")); if(GameTooltipTextRight3:GetText()~="匕首") then PickupInventoryItem(16) PickupInventoryItem(17); end

潜行时使用的技能只有伏击有要求为匕首,而且其他技能与武器伤害无关,所以潜行经常伴随着武器切换,并且确保武器能换到匕首。所以施放潜行后(并发执行也有先后,只是时间间隔极短而以),我们使用
/script GameTooltip:SetInventoryItem("player", GetInventorySlotInfo("MainHandSlot")); if(GameTooltipTextRight3:GetText()~="匕首") then PickupInventoryItem(16) PickupInventoryItem(17); end
这个判断语句大部分已经说明过了,这里只是判断主手如果不是匕首,那么做武器切换,是的话,没有写执行语句,也就是主手为匕首的情况,不做操作。

II.需要判定的
/script GameTooltip:SetInventoryItem("player", GetInventorySlotInfo("MainHandSlot")); if(GameTooltipTextRight3:GetText()=="匕首") then CastSpellByName("背刺(等级 5)") else PickupInventoryItem(16) PickupInventoryItem(17); end

这个宏没用直接使用技能,而是在判断主手是匕首的情况下,使用技能,这里使用函数
CastSpellByName(name)

name   就是你把鼠标放到技能上看到名字。上面我用了"背刺(等级 5)"

跟技能使用相关的函数很多,不过盗贼牵涉的很少,其他就不做介绍了

如果不是匕首,则作武器切换。





路过

雷人

握手

鲜花

鸡蛋
广告位 更多+
Powered by Discuz!  ©2001-2013 Comsenz Inc.