nostalrius吧 关注:135,357贴子:882,021
  • 2回复贴,共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
    回复
      /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
      回复