战士宏指南(众人拾柴火焰高,集思广益贴 ^_^)
如果你想使用下面的宏,请注意两点
1,把@去掉, s c r i p t 被论坛屏蔽了。
2,冲锋,拦截,压制,破胆,还有绷带,武器,盾牌等,必须放在我指定的位置
否则你是用不了的,当然,位置也可以你自己定,只要把相应的编号改下就行
具体的编号我都给出了,宏的原理用心也能看懂
对于懒人来说,只要把技能和东西放到相应的位置就行了
如果你实在太懒,除了复制什么都不想干的话,我也没办法了。
具体的位置,1楼我说的很清楚了,如果看不懂,回贴问。
我争取贴个图给你们
先把我现在用的宏贴出来
然后慢慢解释
一,冲锋,压制,拦截,断筋
/sc@ript C=CastSpellByName;
/sc@ript U=IsUsableAction;
/sc@ript R=IsActionInRange;
/sc@ript if(U(61)==1)then C("冲锋");elseif(R(61)==1)then C("拦截");elseif(U(63)==nil)then C("断筋");elseif(GetActionCooldown(63)==0)then C("压制");else C("断筋");end
二,致死,旋风,压制,英勇打击
/sc@ript C=CastSpellByName;
/sc@ript if(GetActionCooldown(63)==0) then C("压制");end
/sc@ript if(UnitHealth("target")<20) then C("斩杀");end
/施放 致死打击
/sc@ript if(IsActionInRange(63)==1)then C("旋风斩");end
/sc@ript if(UnitMana("Player")>39) then C("英勇打击");end
拦截-处决-致死-旋风-英勇
/sc@ript C=CastSpellByName;
/sc@ript if(IsActionInRange(62)==1) then C("拦截");elseif(UnitHealth("target")<20) then C("斩杀");end
/施放 致死打击
/sc@ript if(IsActionInRange(63)==1)then C("旋风斩");end
/sc@ript if(UnitMana("Player")>39) then C("英勇打击");end
冲锋-压制-处决-致死-英勇
/sc@ript C=CastSpellByName;
/sc@ript if(IsActionInRange(61)==1) then C("冲锋");elseif(GetActionCooldown(63)==0)then C("压制");end
/sc@ript if(UnitHealth("target")<20) then C("斩杀");end
/施放 致死打击
/sc@ript if(UnitMana("Player")>39) then C("英勇打击");end
三,破胆绷带
/施放 破胆怒吼
/sc@ript SpellStopCasting();
/target 安达里克
/sc@ript if(GetActionCooldown(69)>0) then UseContainerItem(3,1);end
/sc@ript TargetLastEnemy()
四,群体攻击用的
/sc@ript G=GetActionCooldown;C=CastSpellByName;
/sc@ript F=CastShapeshiftForm;if(G(71)<2)then F(1);else F(3);end
/sc@ript if(IsUsableAction(71)==1)then C("横扫攻击");end
/施放 旋风斩
/施放 顺劈斩
/sc@ript if(UnitHealth("target")<5)then TargetNearestEnemy();end
横扫攻击要放在左下第11个键那里。
五,双手武器和盾切换
/sc@ript P=PickupInventoryItem;
/sc@ript C=PickupContainerItem;
/sc@ript P(17);if(CursorHasItem())then C(4,2);C(4,1);P(16);else C(4,1);P(16);C(4,2);P(17);end
六,使用饰物
/sc@ript UseInventoryItem(13)
七,盾牌格档,复仇,破甲,英勇打击
/sc@ript C=CastSpellByName;
/sc@ript U=IsUsableAction
/施放 盾牌格挡
/sc@ript SpellStopCasting()
/sc@ript if(U(64)==nil)then C("破甲攻击");elseif(GetActionCooldown(64)==0)then C("复仇");else C("破甲攻击");end
/sc@ript SpellStopCasting()
/施放 英勇打击(等级 8)
八,另外一个换武器的宏,这个连弓一块换,我是为了吃面包做的
/sc@ript P=PickupInventoryItem;C=PickupContainerItem;
/sc@ript P(17);if(CursorHasItem())then C(4,14);C(4,13);P(16);else C(4,13);P(16);C(4,14);P(17);end
/sc@ript UseContainerItem(4,15)
九,自动给武器上鱼饵的,也可以上磨刀石,我钓鱼为了省事
/sc@ript UseContainerItem(2,1)
/sc@ript PickupInventoryItem(16)
十,切换防御姿态,缴械
/sc@ript CastShapeshiftForm(2)
/施放 缴械
十一,守信史(呵呵)
/target 暮光预言者
/施放 冲锋(等级 3)
/施放 断筋(等级 3)
十二,从防御姿态切换到狂暴姿态释放狂暴之怒再切换回防御姿态(网友提的不错,我放这里来了)
请问楼主:
如何编写一个 在防御姿态下 切换狂暴姿态然后使用狂暴之怒最后再切换回防御姿态的宏
谢谢指教。
/sc@ript G=GetActionCooldown;
/sc@ript if(G(70)<2)then CastShapeshiftForm(3);end
/sc@ript if(IsUsableAction(70)==1)then CastSpellByName("狂暴之怒");end
/sc@ript if(G(70)>0)then CastShapeshiftForm(2);end
狂暴之怒放在第70号键位,就是左下额外技能拦的第10个。
十三,很多网友求的战斗怒吼宏,没有就补上的,这个是某位高人写的
如果有战斗怒吼就什么都不做,没有战斗怒吼就施放战斗怒吼
/sc@ript local q; local t;for i=0,15,1 do t=GetPlayerBuffTexture(i); if (t and string.find(t, "BattleShout")) then q=1; break; end; end;if not (q ==1) then CastSpellByName("战斗怒吼") end;
补充几个技巧
1,战斗姿态,鼠标滚轮想上,狂暴姿态,向下滚
找到按键设置的CTRL+F1那里,这个是切换战斗姿态,把后面的第二快截键设置为鼠标滚轮向上
然后到CTRL+F2那里,这个切换狂暴姿态,把后面的第二快捷键设置为鼠标滚轮向下
2,R键,我现在改成扔雷
3,C键,使用饰品,联盟徽记等
4,大脚的技能拦可以拖出来几个,放到屏幕中间,放一些常用的技能
一,冲锋,压制,拦截,断筋
/sc@ript C=CastSpellByName;
/sc@ript U=IsUsableAction;
/sc@ript R=IsActionInRange;
/sc@ript if(U(61)==1)then C("冲锋");elseif(R(61)==1)then C("拦截");elseif(U(63)==nil)then C("断筋");elseif(GetActionCooldown(63)==0)then C("压制");else C("断筋");end
前3行是定义语句,要不然写不下,另外也使宏更加好看和简练
冲锋是否可以用,如果能用则冲锋;
如果不能用,判断是否目标在拦截的范围以内,如果在范围内则拦截;
如果不在拦截的范围内,判断压制是否可以使用,如果不能使用则用断筋;
如果压制可以使用,判断压制的冷却是否为0,如果为0则压制,如果不为0则使用断筋。
此宏的好处何在?
首先,他节省了你的快捷键,用尽可能少的键做尽可能多的操作
其次,一个键使用冲锋和拦截,我把这个技能放在能拖出来的动作条上,不需要靠姿态切换转换
技能条就能用,很方便。
第三,冲锋或拦截后直接断筋,一键连按比较轻松
第四,断筋这个技能释放频率很高,不可避免谋欢闵粒�么�褪牵�懔��淳涂梢匝怪?br>
比你反映过来再按要快一点。比如一般来说,断筋没被打出来的时候我们都是狂按的,
打出以后还会再按几下,如果别躲闪了,有时可以在自己还没反应到的时候压制已经出去了,
第五,如果第一个压制放出去了,又出了第二个躲闪,压制还在CD中,这时候断筋如果简单的
放在压制后面,断筋就放不出来了,本来很简单的宏,为了解决这个问题,使宏的复杂程度
提升了80%,我这里用了适当的判断语句有效的解决了这个问题
二,致死,旋风,压制,英勇打击
/sc@ript C=CastSpellByName;
/sc@ript if(GetActionCooldown(63)==0) then C("压制");end
/sc@ript if(UnitHealth("target")<20) then C("斩杀");end
/施放 致死打击
/sc@ript if(IsActionInRange(63)==1)then C("旋风斩");end
/sc@ript if(UnitMana("Player")>39) then C("英勇打击");end
第一行为定义语句
第二行判断压制的CD是否为0,如果CD为0则压制,如果不能压制此行无效
第三行判断是否能处决,能则处决
第四行释放致死打击,(我为什么要用中文?用英文的话会比较不爽,呵呵)
第五行,判断敌人的距离,如果在5码内的话用旋风(利大弊大?自己衡量吧)
第六行,怒气大于39放英勇打击
另外两个宏功能基本类似,不过是接了冲锋和拦截。可以战斗姿态放一个,狂暴姿态放一个。
三,破胆绷带
/施放 破胆怒吼
/sc@ript SpellStopCasting();
/target 安达里克
/sc@ript if(GetActionCooldown(69)>0) then UseContainerItem(3,1);end
/sc@ript TargetLastEnemy()
第一行,释放战士的技能
第二行,停止当前动作
第三行,选择绷带目标,名字改成你自己
第四行,判断破胆这个技能的CD是否大于0,用处就是看看你破胆是否释放成功,
经常我按技能的同时,对手跑出范围了,结果我在那傻傻的绷带,日。现在这个问题解决了
破胆不在CD中不会绷带了。
第五行,选择最后一个敌人
四,群体攻击用的(更新了,非常好哦,显示问题解决了。)
/sc@ript G=GetActionCooldown;C=CastSpellByName;
/sc@ript F=CastShapeshiftForm;if(G(71)<2)then F(1);else F(3);end
/sc@ript if(IsUsableAction(71)==1)then C("横扫攻击");end
/施放 旋风斩
/施放 顺劈斩
/sc@ript if(UnitHealth("target")<5)then TargetNearestEnemy();end
自动判断横扫攻击的CD,当CD好了的时候自动切换到战斗姿态放横扫攻击
然后再自动切换回狂暴姿态,放旋风和顺劈
最后一行判断目标的血量,如果少于5%,则切换下一个目标
五,双手武器和盾切换
/sc@ript P=PickupInventoryItem;
/sc@ript C=PickupContainerItem;
/sc@ript P(17);if(CursorHasItem())then C(4,2);C(4,1);P(16);else C(4,1);P(16);C(4,2);P(17);end
此宏本身已经说的很明白了,单手武器放在(4,1),盾放在(4,2)
懒龙朋友帮我写的解释
第1、2步骤:定义P为拾取人物目前装备函数的别名,定义C为拾取背包物品函数的别名,纯粹是为了节省字数
第3步骤:P(17),拿起目前装备的副手物品(如果是双手武器,副手没有,这样就没有拾取到物品,如果当前是单手+盾牌,这里就拾取了盾牌)
第4步骤:判断,if (CursorHasItem()) then,检查当前有没有拾取物品()
第4.1步骤:如果第4步判断是真,就是当前拾取了盾牌
第4.1.1步骤:C(4,2),,那么将盾牌放到背包2号位置中;
第4.1.2步骤:C(4,1),拿起背包1号位置的物品——双手武器;
第4.1.3步骤:P(16),将双手武器替换掉当前主手武器;
第4.2步骤:如果第4步判断为否,就是当前没拾取到物品,那么表明当前装备是双手武器
第4.2.1步骤:C(4,1),拾取背包第1位置的物品——单手武器;
第4.2.2步骤:P(16),将单手武器装备到主手位置;
第4.2.3步骤:C(4,2),拾取背包第2号位置的物品——盾牌;
第4.2.4步骤:P(17),将盾牌装备到副手位置;
六,使用饰物
/sc@ript UseInventoryItem(13)
靠近戒指的那个饰物,就是你点一下物品自动更换的那个
为什么这个我要做个宏呢,我用C放饰物,直接点一下饰物就可以更换了
比用鼠标点反映要快
七,盾牌格档,复仇,破甲,英勇打击
/sc@ript C=CastSpellByName;
/sc@ript U=IsUsableAction
/施放 盾牌格挡
/sc@ript SpellStopCasting()
/sc@ript if(U(64)==nil)then C("破甲攻击");elseif(GetActionCooldown(64)==0)then C("复仇");else C("破甲攻击");end
/sc@ript SpellStopCasting()
/施放 英勇打击(等级 8)
前两行定义行
第三行,放盾牌格档
第四行,停止当前技能
第五行,如果复仇不能放则用破甲,如果能放看复仇的CD是否为0,为0则放复仇,不为0用破甲
第六行,停止当前动作
第七行,施放英勇打击
战士拉怪按这一个就够了
不过友情提示,虽然破甲已经有了,但是还是要单独拉出来一个键的
八,另外一个换武器的宏,这个连弓一块换,我是为了吃面包做的
/sc@ript P=PickupInventoryItem;C=PickupContainerItem;
/sc@ript P(17);if(CursorHasItem())then C(4,14);C(4,13);P(16);else C(4,13);P(16);C(4,14);P(17);end
/sc@ript UseContainerItem(4,15)
比上面那个换武器的多换一个弓,我弄了3个加精神的东西,为了吃面包能快点
公正之手8精神(血色掉的,付魔20精神)
加瑞特家族的徽记17精神(付魔9精神,不绑定的5*级蓝盾牌)
精神之XX长弓7精神(绿色AH随便买个)
一共加了61精神,30秒吃个面包的时间可以多回1000血
九,自动给武器上鱼饵的,也可以上磨刀石,我钓鱼为了省事
/sc@ript UseContainerItem(2,1)
/sc@ript PickupInventoryItem(16)
鱼饵放在(2,1)这个格子里
宏命令解析
CastSpellByName("技能名称");
施放一个技能,不打等级的话默认是放最高等级的
SpellStopCasting();
停止当前动作
if(条件判断语句) then
如果判断语句为真
IsUsableAction(技能编号);
如果能使用则返回1,不能使用则返回nil
判断一个技能是否在可以使用的状态,但是没有足够的怒气或MANA或精力,或者在CD中的时候
不包括在不能使用的范围
IsActionInRange(技能编号);
如果目标在技能范围内则返回1
GetActionCooldown(技能编号);
返回技能的冷却剩余时间
UnitHealth("target");
返回目标的生命,百分比
UnitHealth("player");
返回自己的生命,数值
UnitMana("player");
返回自己的怒气
PickupInventoryItem(身上物品编号);
用鼠标左键点击身上的某个物品
PickupContainerItem(背包编号,格子编号);
用鼠标左键点击背包里的某个物品
UseInventoryItem(身上物品编号);
用鼠标右键点击身上某个物品
UseContainerItem(背包编号,格子编号);
用鼠标右键点击背包里的某个物品
CastShapeshiftForm(姿态编号);
切换姿态,战斗姿态1,防御姿态2,狂暴姿态3
UnitAffectingCombat("player")
判断自己是否处于战斗中,是则返回1
http://www.wowwiki.com/index.php/World_of_Warcraft_API技能编号
25-36 bar on right-side of screen, far right (top to bottom)右边
37-48 bar on right-side of screen, in one column (top to bottom)貌似是右2
49-60 lower right bar (left to right)右下
61-72 lower left bar (left to right)左下
73-84 battle stance bar (left to right)战斗姿态
85-96 defensive stance bar (left to right)防御姿态
97-108 berserker stance bar (left to right)狂暴姿态
命令都很简单,如何有效组合,做出自己需要的宏就要动点脑子了
67楼的懒龙朋友翻译的一些命令
我大致翻译了一些对战士来说可能有点用的魔兽API函数,当然不全,几百条API我没这时间哈,HOHO。
第一次翻译,我90年中考英语20多分,93年高考英语不及格,大学英语考试都是抄袭过关,所以,见谅呀见谅,挖哈哈。
动作条相关函数
参数:slot——动作条快捷键的编号
GetActionCooldown(slot)——得到指定编号快捷键的冷却时间(如技能、物品)
GetActionCount(slot)——得到指定编号快捷键的数量(如绷带)
IsActionInRange(slot)——判断指定编号快捷键是否在范围内
IsAutoRepeatAction(slot)——判断指定编号快捷键是否是一个自动攻击技能(如魔杖射击)
IsCurrentAction(slot)——判断指定编号快捷键当前是否正在使用
IsUsableAction(slot)——判断指定编号快捷键当前是否可用
BUFF状态相关函数
CancelPlayerBuff(buffIndex) ——移除一个BUFF,参数buffIndex是BUFF的索引编号
GetPlayerBuff(buffId, buffFilter)——返回玩家的各种BUFF/DEBUFF的编号及状态信息
GetPlayerBuffTexture(buffIndex)——返回指定索引号BUFF的图标名称
UnitBuff("unit", index [, showCastable])——返回指定目标指定编号的BUFF信息
UnitDebuff("unit", index [, showDispellable]) ——返回指定目标指定编号的DEBUFF信息
信息相关
SendChatMessage(text,{,type} {,language} {,targetPlayer}) ——发送一段信息
参数:text——要发送的文字
type——信息类型,有"SAY", "YELL", "EMOTE", "PARTY", "AFK", "DND", "GUILD", "OFFICER", "WHISPER", "CHANNEL", "RAID"
背包、装备、物品相关
CursorHasItem——当前有没有拾取物品
UseContainerItem(bagId,slot)——使用指定背包指定位置的物品
PickupContainerItem(index,slot)——拿起、放置或替换指定背包指定位置的物品
UseInventoryItem(slotId)——使用当前装备指定位置的物品
PickupInventoryItem(slotId)——拿起、放置或替换人物当前某位置的装备
背包编号bagId解释
0-4,0是行囊,1是靠行囊的那个背包,2、3、4依次类推
人物身上装备位置slotId参数详解
0 = ammo(弹药)
1 = head(头部)
2 = neck(项链)
3 = shoulder(肩膀)
4 = shirt(衬衫)
5 = chest(胸部,这个...,不要理解错了)
6 = belt(腰带)
7 = legs(腿部)
8 = feet(鞋子)
9 = wrist(手腕)
10 = gloves(手套)
11 = finger 1(第一个戒指)
12 = finger 2(第二个戒指)
13 = trinket 1(第一个饰品)
14 = trinket 2(第二个饰品)
15 = back(披风)
16 = main hand(主手)
17 = off hand(副手)
18 = ranged(射击、圣物、魔杖)
19 = tabard(公会徽章)
20 = first bag (右边的第一个包)
21 = second bag(右边的第二个包)
22 = third bag(右边的第三个包)
23 = fourth bag (最左边的包)
如果你打开银行的话:
40 to 63 = the 24 bank slots(银行里的24个位置)
64 = first bank bag(银行的第一个包)
65 = second bank bag(银行的第二个包)
66 = third bank bag(银行的第三个包)
67 = fourth bank bag(银行的第四个包)
68 = fifth bank bag(银行的第五个包)
69 = sixth bank bag(银行的第六个包)
楼主双手武换单手加盾牌的宏解释:
/sc@ript P=PickupInventoryItem;
/sc@ript C=PickupContainerItem;
/sc@ript P(17);if(CursorHasItem())then C(4,2);C(4,1);P(16);else C(4,1);P(16);C(4,2);P(17);end
第1、2步骤:定义P为拾取人物目前装备函数的别名,定义C为拾取背包物品函数的别名,纯粹是为了节省字数
第3步骤:P(17),拿起目前装备的副手物品(如果是双手武器,副手没有,这样就没有拾取到物品,如果当前是单手+盾牌,这里就拾取了盾牌)
第4步骤:判断,if (CursorHasItem()) then,检查当前有没有拾取物品()
第4.1步骤:如果第4步判断是真,就是当前拾取了盾牌
第4.1.1步骤:C(4,2),,那么将盾牌放到背包2号位置中;
第4.1.2步骤:C(4,1),拿起背包1号位置的物品——双手武器;
第4.1.3步骤:P(16),将双手武器替换掉当前主手武器;
第4.2步骤:如果第4步判断为否,就是当前没拾取到物品,那么表明当前装备是双手武器
第4.2.1步骤:C(4,1),拾取背包第1位置的物品——单手武器;
第4.2.2步骤:P(16),将单手武器装备到主手位置;
第4.2.3步骤:C(4,2),拾取背包第2号位置的物品——盾牌;
第4.2.4步骤:P(17),将盾牌装备到副手位置;
行动相关
FollowUnit("unit")——跟随指定目标
Jump()——跳
技能相关
CastSpellByName("name")——施放指定名称的技能
GetSpellCooldown(spellID, "bookType")——得到技能冷却时间(用起来没这么简单,可参考相关插件)
GetShapeshiftFormInfo(index)——得到某个形态/姿态的信息
语句格式:icon, name, active, castable = GetShapeshiftFormInfo(index);
icon——形态/姿态图标信息
name——形态/姿态名称
name——形态/姿态是否是当前形态/姿态
castable——形态/姿态当前是否可以施放
CastShapeshiftForm(index)——进入某个形态/姿态
index参数说明
德鲁依
1 = 熊
2 = 水里的那啥来着
3 = 猫?
4 = 旅行形态
5 = 月亮形态?汗,太不了解小德了
盗贼
1 = 潜行
战士
1 = 战斗姿态
2 = 防御姿态
3 = 狂暴姿态
目标相关
AssistByName("name")——协助某个玩家攻击
AssistUnit("unit")——协助某人某NPC某宠物攻击
AttackTarget()——攻击目标(慎用,状态判断不好用这玩意会取消自己的自动攻击)
TargetLastEnemy()——将最后一个敌人作为自己的目标
TargetLastTarget()——将最后的目标做为自己的目标
TargetNearestEnemy({reverse})——将距离最近的敌人作为目标,等同TAB键
TargetNearestFriend()——将最近的队友做为目标
TargetUnit("unit")——将指定名称的单位做为目标(比如对某人有仇,混战中只扁他一个)
单位相关
AssistUnit("unit")
FollowUnit("unit")
InviteToParty("unit") ——邀请某人加入队伍(某些人刷副本的人都用这函数邀请小号等)
TargetUnit("unit")
UnitAffectingCombat("unit") ——某单位是否正在战斗状态
UnitHealth("unit")——某单位的生命值(无法得知具体生命值的单位返回为百分比)
UnitMana("unit")——某单位的魔法值/怒气值/能量值
UnitSex("unit")——某单位的性别(这条貌似没啥用,RY太多了,=.=)
关于unit参数的说明:
"player"——玩家自己
"pet"——宠物
"party1"——队伍成员1
"party4"——队伍成员4(没5哈,除你之外只有4)
"partypetN"——队伍成员的宠物(N=1,2,3,4)
"raidN"——团队成员(N=1,2,3,4....)
"raidpetN"——团队成员的宠物(N=1,2,3,4...)
"target"——你的当前目标
"mouseover"——你鼠标经过的那个家伙
"npc" or "NPC"——NPC
另外,还需要注意一点,在unit参数中允许层叠使用target,比如AssistUnit("playertargettarget")就是协助玩家目标的目标,当然你也可以这样AssistUnit("playertargettargettargettargettargettarget"),只要你弄得清,^皿^