最新 v6c 下載地址.
http://www.fs2you.com/files/d9c7f919-0089-11dd-8481-00142218fc6e/
基本上
/if xxx
/cast xxx
/end
可以做任何东西.
例如术士可以判断盗贼是否上了披风再缠绕. 否则跳过.
贴一个防御姿势的傻瓜宏
/startattack
/click ButtonOneHand
/skipif not IF_CSPELL()
/cast 盾擊
/cast 復仇
/cast [combat:addpb] 盾牌格擋
/cast [combat:addpb] 戰鬥怒吼
/cast [combat:addtb] 挫志怒吼
/cast [combat:addtb] 撕裂
/if UnitMana("player")>50
/cast 英勇打擊
/elseif IF_XUEXING()
/cast 血性狂暴
/end
这个宏的大概意思是,
如果对方正在施法, 就用盾击打断.
否则就按情况自动使用复仇,盾牌格擋等技能.
BUFF/DEBUFF的技能不会重复使用.
如果怒气太多就用英勇.
如果不够怒气就用血性狂暴
关于Macro的功能 , 在打包的文件里, 有一个说明文件. 可以参考一下.
另外说明一下, 它不能为你实现一些更智能的东西 , 例如你不能
/script CastSpellByName(CalcBestSpell())
你能做的, 永远只是 /cast 一个固定的名称.
/if UnitCastingInfo("target") or UnitChannelInfo("target")
/cast 法术反制
/end
如果对方在释放法术或使用通道法术,反制它.
至于 /if 这样的macro, 是利用UI里的一个bug.
我们无法去改变macro的内容.
但是却可以让其中某些语句 执行/或者不执行. 达到一些智能的效果.
某些判断的步骤比较多,写在macro里太长,所以单独写成一个函数.
ChatEdit_HandleChatType这里可以返回一个值用于判断是否执行macro的某line.
提示到这里已经足够了.
本身技能就有距离限制而被忽略,所以这样写也可以:
/if UnitChannelInfo("player") or UnitCastingInfo("player")
/stopmacro
/end
/cast 精神鞭笞
/cast 心灵震爆
如果对方在 精神鞭笞 的范围,就不使用心灵爆震.
因为判断距离需要判断多种技能. 这个而且和职业相关. 所以我就不做那样的东西了.
可以使用 /ifcast xxx 来判断是否某个技能在距离内, 荣誉判断距离:
例如:
/ifcast 断筋
/cast [harm:1tb] 断筋
/else
/cast 刺耳怒吼
/end
这样就差不多了.
因为判断10码的确不容易.
其实可以使用破胆的距离来做判断.
不过现在我的插件还没提供直接的支持.
/cast [harm:1tb] 断筋
的意思是说, 如果目标没有 断筋 这个BUFF/DEBUFF 才施放 断筋
因为通常BUFF/DEBUFF的图标差异很大,不会混乱.
所以 tb 指目标的 BUFF/DEBUFF , 这个对于术士也许更加有用.
而pb指玩家自己的 BUFF
例如
/cast [combat:1pb] 命令之吼
/cast 援护
/skipif not IF_CSPELL()
/cast 盾击
/if UnitHealth("player")<5000
/cast 极效治疗石
/cast 超级治疗药水
/cast 破釜沉舟
/cast 13
/cast 14
做了个援护盾击保命宏
默认援护,目标施法就盾击
血少于5000各种东西全开
因为很多怪物施法需要判断类型
有的可以盾反有的不能打断
所以我把盾击单列出来了
需要的可以整合到一键拉怪里
还有一键boss
/startattack
/cast [combat:1pb] 命令怒吼
/cast [combat:1tb] 挫志怒吼
/cast [combat:1tb] 雷霆一击
/cast 盾牌猛击
/cast 复仇
/cast 毁灭打击
/cast 盾牌格挡
/if UnitMana("Player")>50
/cast 英勇打击
可以按需求调整比如盾猛复仇弄到吼前
方便开局拉好仇恨而不至于吼玩dps OT
感谢楼主插件~
如果觉得250个字不够写, 还可以分开来写.
写完后放在右下角的那些按钮. 然后在 主宏 下调用:
/click MultiBarBottomRightButton10
/click MultiBarBottomRightButton11
/click MultiBarBottomRightButton12
修正一下, 应该是 "player" 因为暴怒是自己的BUFF ??
/skipif (UnitHasSpellEffect("player","暴怒") or 0) > 3
/cast 暴怒
现在UnitHasSpellEffect返回的是BUFF/DEBUFF的剩余时间.
这个话的意思就是说, 如果有BUFF,并且剩余时间大于3秒 , 那么就会跳过下一条语句, 不执行/cast 暴怒
/cast [flying:0pb] XXXX 这个也许更通用.不在飞行坐骑的时候..
目前我测试过的最好的断筋版本. (请把繁体改成简体,确保名字正确)
/if (UnitHasSpellEffect("target","斷筋") or 0)<2 and AM_InRange("破膽怒吼")
/ifcast 斷筋
/cast 斷筋
/else
/cast [harm:1tb] 刺耳怒吼
/end
/end
/if GetComboPoints()>=5
/cast 冷血
/cast 剔骨
/end
要判断特殊情况的 , 请自行去查找相关的函数 , 用
/if xxx(yyy)
/cast zzz
/end
来实现.
不知道楼主还在不在,我提2点意见
1.AutoMacro.lua 函数:UnitHasSpellEffect, Line 94
这里用for 1 to 16来判断unit的buff以及debuff,但是就我所知,blz从资料片开始已经将debuff的数量从16调整到了40,所以这样5人副本是不大会有问题,但是raid中会由于debuff超过16个而导致判断不到的情况
2.AutoMacro.lua 函数:UnitHasSpellEffect, Line 100
这里用 timeLeft~=nil来确定该buff/debuff是否由玩家释放以实现多个术士对同一目标上同一种debuff,这很好,但是在下认为保留仅仅判断Unit身上是否有某种debuff而不在乎是否是由玩家释放的函数也很重要.
考虑这样一种情况,以搓志或者雷霆为例,战士a天赋强化而战士b未强化,那么战士b的宏会认为目标始终没有被上搓志和雷霆而不断使用.浪费的同时影响其他技能的释放.
...好吧,我是一个熊坦,我的挫志无法覆盖战士的挫志.所以我的宏如下
/skipif UnitHasSpellEffect("target","挫志怒吼")
/cast [harm:1tb] 挫志咆哮
今天的raid中我和战士并排拉小怪,结果他挫志之后我就开始挫志不停......
最后感谢楼主分享,在下获益良多
函数IF_CSPELL(spell)不是这样用的
看AutoMacro.lua, Line.485 & Line.487
这里的spell参数指的是你用于打断施法的法术
加这个参数可以判断你的spell法术是否可以使用( return IsSpellCastable(spell) )
For example:
/if IF_CSPELL("冰霜震击")
/cast 冰霜震击
/elseif IF_CSPELL("地震") ---sorry 我不是萨满不知道具体技能名字
/cast 地震
/end
效果是若对方在施法且冰震cd到且魔法够,则释放冰震,否则如果地震cd到且魔法够,则释放地震
貌似萨满2种震击共CD?我不了解萨满,这个例子主要是说明IF_CSPELL(spell)的用法
当然,我不是楼主,以上只是我读代码所了解到的部分,仅供参考
用 Berserker Rage 来解一堆恐惧状态和瘫痪状态的宏
/ifcast (Fear) or (Intimidating Shout) or (Psychic Scream) or (Sap) or (Fear) or (Repetance) or (Gouge)
/cast [noflying:1pb] Berserker Rage
/end
承上,也可以用饰品来解万恶的吹风,死缠,龟羊猪
本来想做侦查对手咏唱的咒语,不过最后貌似不太可能,放弃。
也就是说人家可以用炉石来骗你使出中断技。
v06c的更新:
修正了 /elseif 的錯誤.
v6b的更新说明: (主要是修正BUG..以后也是..)
再次修正UnitHasSpellEffect的问题,
例如术士的DOT宏:
/startattack
/cast [:tb] 腐蝕術
/skipif UnitHasSpellEffect("target","詛咒")
/cast [:tb] 痛苦詛咒
/cast [:tb] 生命虹吸
现在 /s /p /ra /rw 等说话语句可以包含在/if /else /end里了.
例如术士的恐惧放逐宏:
/if UnitIsPlayer("target")
/cast 恐懼術(等級 1)
/elseif UnitCreatureType("target")=="惡魔"
/cast 放逐術
/s 正在放逐 -> %T <-
/else
/cast 恐懼術(等級 3)
/end
v6:
修正可能由空格引起的不能运作的问题.
现在不需要特意加上[harm:1tb]这样的写法了. 新写法为
/cast [:tb] 法术
如此类推
增加了对 [target=mouseover]或[targettarget]或其他unit的支持.
增加了PBX,TBX的判断. 通常情况下PB,TB是判断自己的法术. 而PBX,TBX则也判断不属于自己的法术.
增加了FB,FBX的判断. 在不指定target的情况,如果目标不是友方,则判断自身BUFF来施法. 例如
/cast [:fb] 回春术
增加了对怒气/能量的支持: 例如
/cast [:r45] 英勇打击
(当怒气大于等于45时)
增加了对生命百分比的支持: 例如
/cast [:l20] 破釜沉舟
(当生命小于等于20%时)
增加了/doif指令. 用于去掉/end来节省字数. 例如
/doif IF_CSPELL()
/cast 盾击
现在UnitHasSpellEffect可以根据BUFF/DEBUFF的名字或图标路径了.
例如
/if UnitHasSpellEffect("player","CheatDeath")
/cast 极强效治疗石
/end
一些举例:
/cast [target=mouseover,:tb] 野性印记
这样你可以很容易用鼠标帮团队里的人加上BUFF. 有加上BUFF的则跳过.
凡是更多的判斷都可以用WOW內置的函數完成.
這個可以吋WOWWIKI上的資料.
我不會提供這種細節上的幫助. SORRY.
貌似v6里添加了判断冷却的函数..还是从v5的IsSpellCastable()拿出来的- -
谢搂主:)
请问,如果我想测试 API 的一些返回值, 如果调用你的
function message(msg)
__Print(msg)
end
如何让这个宏 正常运作? (目前无效...直接说了这句话...)
message(UnitClass("player"))
效果应该是返回玩家的 职业
用 /script message(UnitClass("player"))
这里讲解一下给所有队友加BUFF的方案:
/targetfriend
/cast [:fbx] 偵測隱形
这个意思是, 不断地找到最近的隊友.
如果隊友沒有這個BUFF,則加上.
只要在戰場開始的時候一直按.
哪么就可以最快地幫所有人加上自己有的BUFF了
tb,tbx,pb,pbx,fb,fbx這裡的 x 的意思是, 忽略不是自己加的.
例如术士的DOT就不适宜加x,
而唯一的BUFF/DEBUFF就应该加x
- 本文固定链接: https://www.fengshen.cn/2008/03/automacro/etcofwind/
- 转载请注明: fengshen 发表于 Dream of Wind | 一梦风神

管理员能不能给我一个帐号?谢谢。
我的邮箱:xjtufans@163.com
正是我想要的。谢谢分享.
非常感谢。