果子林的猫窝

Just another WordPress.com site

AutoMacro的小bug

with 15 comments

昨天用了AutoMacro以后兴奋许久,在这个插件的支持下,德鲁伊终于也能做出抽筋宏了。

做治疗宏的时候十分顺利,可是在写平衡D的输出宏时出现了个问题。

在判断平衡D的PVP四件套装效果:艾露恩之怒 时UnitHasSpellEffect这个函数始终返回空值,查看代码时发现,作者是通过参数给出的Buff名称来获取SpellId,然后通过SpellId得到这个Buff的图标,与当前目标身上的图标进行比较,以此判断是否存在这个Buff,这里就出现了问题,由于艾露恩之怒不是可施放的法术,所以无法获得SpellId,因此函数在判断这类Buff时会直接返回空值,而不进行后续的判断。

我修改了下这个函数判断宏的方式,使之通过Buff名称来判断,这样任何Buff都不会漏掉了:

function UnitHasSpellEffect(unit,spell)
    if not UnitExists(unit) then
        return nil
    end
    local i=0
    for i=1,16 do
        local name, rank, iconTexture, count, duration, timeLeft = UnitBuff(unit, i);
        if name~=nil and timeLeft~=nil then
            if name==spell then
                return timeLeft
            end
        end
        local name, rank, iconTexture, count, debuffType, duration, timeLeft = UnitDebuff(unit, i);
        if name~=nil and timeLeft~=nil then
            if name==spell then
                return timeLeft
            end
        end
    end
    return nil
end

于是以下的星火术瞬发宏也可以使用了

/if UnitHasSpellEffect("player","艾露恩之怒")
/cast 星火术
/else
/if
/cast 愤怒
/end

出艾露恩之怒时施放星火,平时愤怒

Written by alzzl

2008/04/09 在 05:15

发表在 魔兽世界

15条回应

Subscribe to comments with RSS.

  1. 虚心请教一个宏:  如果自然迅捷可以使用,使用(自然迅捷+治疗之触),如果自然迅捷在CD中,则使用愈合. 
        我试过用通过身上是否有自然迅捷这个BUFF来释放,也试过用castsequence reset来写,都没有成功,=.=
        多谢指教拉

    兆允

    2008/06/06 at 06:09

  2. /if not AM_InCD("自然迅捷")/cast 自然迅捷/cast 治疗之触/else/cast 愈合/endif
     
    判断“自然迅捷”是否在cd就可以了
    当自然迅捷可用则瞬发大触,否则丢大叶子,可正确显示自然迅捷的冷却时间
     
    以上理论可用 afk中 未测试过

    果子林

    2008/06/11 at 14:03

  3. 测试可用.十分,非常,相当的感谢啊!哪些所谓的大论坛没的一个人知道,楼主真乃人才也!

    兆允

    2008/06/20 at 02:16

  4. 在我还不知道automacro的时候,有一次,我在练级,因为我玩儿魔兽不久,看到有个人一下放了3个技能,他当时说我卡了,现在看来是因为automacro,不过为什么我最多只能在放一个吟唱的技能之后带一个瞬发技能?
     
    他的是怎么写的可以变成3个技能这样的?   求教!!

    Yp

    2008/07/05 at 07:30

  5. 我是个tkss我想在solo宏的最后加上一个怪物血小于?%或者数值就使用吸取灵魂,可是怎么写都不对。
     
    在这之前有一个吸取生命,如何能让他不再重复吸取生命,而吸取灵魂呢?

    Yp

    2008/07/05 at 09:58

  6. /if UnitHealth("target")<?/stopcasting/cast 吸取灵魂 /else/cast 另一个法术/end
     
    差不多是这个样子,注意UnitHealth这个函数,当目标为非队友单位时返回当前生命值的百分比,否则返回具体生命值。当目标的生命小于?%时,先打断施法(吸取生命)然后施放吸取灵魂当目标的生命大于?%时,施放另一个法术
     
    一下子放3个技能是不可能的,再强大的插件也受wow施法机制的限制,1.5秒施法冷却(近战技能位1.0秒)是不可能抵消的,除非施放的法术不触发公共冷却时间,如小d的自然迅捷,否则连续施放2个技能都困难. 在一个需要施法时间的法术后追加顺发法术是可能的,因为gcd是在施法初始时开始计算,无法术加速情况下,施法时间最短的法术位1.5秒 正好与gcd相抵消

    果子林

    2008/07/06 at 16:25

  7. 有个问题 ,打断技能后,他不向下执行吸取灵魂,而是不停的打断我的暗影箭,我的宏是这样的,您看下应该怎样改。
    还有/if UnitHealth("target")<50 这个,您的意思是如果目标是非队友就返回百分比,我写50是当小于50%的时候去打断当前技能执行后面的技能吗? 可是为什么,小于50%之后好像并没有打断,而是在怪快要死的时候才开始打断,而且不停的打断,并不执行吸取灵魂。
     
    /doif UnitHasSpellEffect("player","Twilight") /cast 暗影箭 /cast [:tb] 痛苦无常/cast [:tb] 生命虹吸/cast [:tb] 献祭/cast [:tb] 腐蚀术 /cast [:tb] 痛苦诅咒 /click ActionButton6 /cast 暗影箭/if UnitHealth("target")<50/stopcasting/cast 吸取灵魂 /else/cast 吸取生命/end

    Yp

    2008/07/08 at 08:46

  8. 您如果需要6号键的话,这个宏在这里。
     
    /if UnitMana("player")<5000/if UnitHealth("player")>5000/cast 生命分流 /elseif UnitMana("pet")>1500 /cast 黑暗契约 /elseif UnitHealth("player")>UnitMana("player") /cast 生命分流 /end /end

    Yp

    2008/07/08 at 08:48

  9. 刚才向前翻看您以前的日志,忽然发现我找了好久没找到的东西魔兽世界宏代码编写指南
    您文中提到2.0之后的宏可以去看原作者的文章,但是我英文实在是不ok 还有您提到的另两篇翻译在哪里?能否提供?

    Yp

    2008/07/08 at 09:15

  10. 不明白你具体要怎么做,看你给出的代码应该是,身上有Twilight效果时直接暗影箭,然后上一套debuff,再按照魔法分流,接下来这一段很奇怪/cast 暗影箭/if UnitHealth("target")<50/stopcasting/cast 吸取灵魂 /else/cast 吸取生命/end暗影箭和生命吸取的关系是什么,由于有1.5s的gcd因此在宏中任意一个法术都将结束这个宏的运行,执行到暗影箭后由于触发gcd整个宏就结束了,因此后面的命令,除了打断施法,其他的都无法执行到。至于为什么当怪血很少的情况下才会执行到打断的语句我也不太清楚,你可以单独测试下UnitHealth这个函数,可能某个版本改了。要让宏里的每个法术都有机会执行,必须要注意,任何触发gcd的语句必须在判断中建议将这个暗影箭放到下面的判断中,这个判断中已经确定了灵魂吸取的施放条件,你只要再确定何时吸血何时暗影箭就行了那个宏代码指南我只翻译了开头一部分,由于这类的翻译文章很多,所以就没有继续翻译,尽管我认为Cogwheel的教程是最棒的。nga里这类翻译很多,你可以去搜索下

    果子林

    2008/07/08 at 11:06

  11. /if UnitHealth("target")<50/stopcasting/cast 吸取灵魂
    /if UnitHealth("player")<60
    /cast 吸取生命 /else
    /cast 暗影箭/end
    你看这样改可不可行?

    Yp

    2008/07/10 at 10:52

  12. 改过之后超过255了,晕。应该怎么精简一下?
     
    把后面的也作成一个子宏?来自动监测?

    Yp

    2008/07/10 at 11:00

  13. 我下载到这样一个东西,不知道怎么样使用

    WoW PPather 1-70 Anthrax 4.0 Task File
     
    看上去象是个挂机用的。
    1-70 Alliance 4.0.psc
    1-70 Horde 4.0.psc
    Keys.xml
     
    这是解压后,根文件夹下的几个文件,文件夹我就不写了,这个东西应该如何使用??
     
    是不是还需要什么软件??  网上觅踪而不过。

    Yp

    2008/07/10 at 16:56

  14. 这个是魔兽滑翔机挂机用的,http://bbs.52glider.cn/
     
    这个能发给我一份吗。

    2008/11/03 at 19:17

  15. 这个不是你所说的滑翔机里用的脚本这个宏利用的框架漏洞已在2.4版中被blz修复了

    果子林

    2008/11/04 at 16:21


留下评论