nostalrius吧 关注:135,470贴子:882,081
  • 31回复贴,共1

DEBUFF判断宏在有同职业队友情况下生效的办法

只看楼主收藏回复

以SS为例
/script local n,s,k,j,d,f={"Abomi","Sarge","Immol"},{"腐蚀术","痛苦诅咒","献祭"};for k=1,3 do f=nil;for j=1,16 do d=UnitDebuff("target",j);if d and strfind(d,n[k]) then f=1;break;end;end;if not f then CastSpellByName(s[k]);break;end;end;
类似这样的一键DOT宏在有SS队友的情况下会被干扰,因为API没有办法判断目标的DOT是否来自于你
所以战场,RAID情境下,此类宏的使用价值极低。
但是还是有办法让此类DEBUFF判断宏在有同职业队友情况下生效的
方法就是通过DOT计时插件联合判断
由于插件的DOT计时启用(Chronometer为例),是以角色使用法术的记录来确定(目标抵抗与否也会进行判断)
所以根据UnitDebuff或者IsBuffActive等API先判断目标是否含有DEBUFF,再判断插件是否启用DOT计时,就能相对完美的解决同职业队友干扰的问题
我的实现方法是调用Chronometer插件的API进行判断(集成在IsBuffActive插件里,有兴趣的自行下载)
panbaiducom/s/1_7dxOBdH1on-FYDM2fK8-g :w94o
增强版DEBUFF判断宏示例
/script local n,s,k,j,d,f={"AbominationExplosion","Requi","Sarge","LifeDrain"},{"腐蚀术","生命虹吸","痛苦诅咒","吸取生命"};for k=1,4 do f=nil;if IsChronometerActive(n[k],UnitName("target")) and IsBuffActive(s[k],"target") then f=1;end;if not f then if UnitClassification("target")~= "normal" then CastSpellByName(s[k]);break;elseif UnitHealth("target") < 20 and (k==2 or k==3) then CastSpellByName(s[4]);break;else CastSpellByName(s[k]);break;end;end;end;
重点:IsChronometerActive(n[k],UnitName("target")) and IsBuffActive(s[k],"target")
记得IsChronometerActive 第一个参数是{"AbominationExplosion","Requi","Sarge","LifeDrain"}之类的DEBUFF ID


IP属地:上海1楼2018-05-14 09:39回复
    PS:必须装Chronometer DOT监视插件,60CJ或者60ADDON搜一下就是了


    IP属地:上海2楼2018-05-14 09:45
    回复
      话说我试了一下,一直按效果是只给目标不停上腐蚀术


      IP属地:广东3楼2018-05-14 11:35
      回复(6)
        我改了依旧不显示腐蚀术

        另外我发现,60addon上的isbufftimer貌似不支持你的IsChronometerActive语句,而你发的链接那个可以
        还有无论60cj还是60addon上的Chronometer我都下载了(60addon的更新一点),而且也改了腐蚀术,依旧不显示腐蚀术的dot...要不你传一份你的Chronometer给我吧


        IP属地:广东4楼2018-05-14 14:31
        回复(2)
          还是得问个问题,我的这段:
          /script local n,s,k,j,d,f={"AbominationExplosion","Sarge","Immol","ShadowBolt"},{"腐蚀术","痛苦诅咒","献祭","暗影箭"};for k=1,4 do f=nil;if IsChronometerActive(n[k],UnitName("target")) and IsBuffActive(s[k],"target") then f=1;end;if not f then if UnitClassification("target")~= "normal" then CastSpellByName(s[k]);break;elseif UnitHealth("target") < 20 and (k==2 or k==3) then CastSpellByName(s[4]);break;else CastSpellByName(s[k]);break;end;end;end;
          应该就是腐蚀-痛苦-献祭-暗影箭,然后目标血量低于20%的时候暗影箭对吧,但是为啥按的过程中腐蚀-痛苦没问题,到了献祭依旧是一直放...暗影箭只有低于20%才放,大神你试试


          IP属地:广东5楼2018-05-14 16:15
          回复(1)
            UnitDebuff() 本生就自带返回层数和是否是自己施放的参数。


            IP属地:浙江来自Android客户端6楼2018-05-14 16:22
            回复(9)
              /script local n,s,k,j,d,f={"AbominationExplosion","Sarge","Immola","ShadowBolt"},{"腐蚀术","痛苦诅咒","献祭","暗影箭"};for k=1,4 do f=nil;if (IsChronometerActive(n[k],UnitName("target")) or k==3) and IsBuffActive(s[k],"target") then f=1;end;if not f then if UnitClassification("target")~= "normal" then CastSpellByName(s[k]);break;elseif UnitHealth("target") < 20 and (k==2 or k==3) then CastSpellByName(s[4]);break;else CastSpellByName(s[k]);break;end;end;end;


              IP属地:上海7楼2018-05-14 21:09
              回复
                大哥,太感谢了,很好用,根据自己的使用情况,想修改一下,可是怎么都有问题,所以请教一下,我需要DOT上完使用吸血技能的时候再判断一下自身的血量,如果是满的就分流,不满就吸血,你看这样修改可以么?::
                在后面修改if UnitHealth("target") < 20 and (k==2 or k==3) and UnitHealth("player") < 100 then CastSpellByName(s[4]) else CastSpellByName("生命分流");
                这样可以么?


                IP属地:四川8楼2018-05-24 11:50
                回复(2)
                  给大神跪下了


                  IP属地:湖南来自Android客户端10楼2019-11-28 11:25
                  回复
                    sarge代表痛苦诅咒,疲劳诅咒是什么代码???其他技能代码如何得知?


                    IP属地:福建11楼2024-03-21 00:24
                    回复
                      大神,我比较小白,这个宏怎么去掉痛苦诅咒?只想用腐蚀术,献祭,暗影箭,20血以下暗影箭


                      IP属地:辽宁来自iPhone客户端12楼2024-08-05 15:49
                      回复