플레이어 디버프필터

1. dVal에서 디버프 위치나 크기등을 설정하고 debuff는 필터링할 플레이어 디버프id들의 집합입니다.
/run debuff={853,19503,31803,1978,56659,90811,1044,53657};dVal={-150,190,35,5};
/run function checkDebuff(unit,id) return UnitDebuff(unit,GetSpellInfo(id)) end;

2. 스킬id를 받아서 스킬id에 해당하는 그림을 찾아와서 프레임을 만듬 위와 같은 프레임
/run function mDebuff(id) f=CreateFrame("frame") f:SetSize(dVal[3],dVal[3]) f.t=f:CreateTexture(nil,"BORDER") f.t:SetAllPoints() f.t:SetTexture(GetSpellTexture(id)) return f;end;

3. 등록된 디버프 id들로 위의 함수를이용해 프레임들을 제작후 숨김..
   Act는 frame을받아서 offset위치에 val값을 참조해 숨겼던 frame을  다시 활성화.
/run dFrame={};for i=1,#debuff do dFrame[i]=mDebuff(debuff[i]);dFrame[i]:Hide();end;
/run function Act(frame, offset, val) frame:Show();frame:SetPoint("CENTER",offset+val[1],val[2]);end;

4. 디버프함수가 바뀔때마다 체크해서 해당 디버프를 Act를 이용해서 활성화
/run function Debuff(self,e,unit) if(unit=="player")then for i=1,#debuff do dFrame[i]:Hide();end;local x=dVal[1];for i=1,#debuff do if(checkDebuff(unit,debuff[i]))then Act(dFrame[i],x,dVal);x=x+dVal[3]+dVal[4];end;end;end;end;

5. 더미프레임을 생성해서 이벤트를 등록
/run f=CreateFrame("frame");
/script f:SetScript("OnEvent",Debuff) f:RegisterEvent("UNIT_AURA")
END

타겟 디버프필터
1.
/run tdebuff={1130,80354,31803,90174,56659,90811,1044,53657};dtVal={97,190,35,5};

2.
/run function mDebuff(id) f=CreateFrame("frame") f:SetSize(dVal[3],dVal[3]) f.t=f:CreateTexture(nil,"BORDER") f.t:SetAllPoints() f.t:SetTexture(GetSpellTexture(id)) return f;end;

3.
/run function Act(frame, offset, val) frame:Show();frame:SetPoint("CENTER",offset+val[1],val[2]);end;


4.
/run function tDebuff(self,e,unit) if(unit=="target")then for i=1,#tdebuff do dtF[i]:Hide();end;local x=dtVal[1];for i=1,#tdebuff do if(checkDebuff(unit,tdebuff[i]))then Act(dtF[i],x,dtVal);x=x+dtVal[3]+dtVal[4];end;end;end;end;

5.
/run dtF={};for i=1,#tdebuff do dtF[i]=mDebuff(tdebuff[i]);dtF[i]:Hide();end;f=CreateFrame("frame");
/script f:SetScript("OnEvent",tDebuff) f:RegisterEvent("UNIT_AURA")


보시면 아시겠지만... 위의 2번과 3번의 함수가 겹칩니다... 즉 타겟디버프 플레이어 디버프 두개다 쓰실때는

타겟디버프쪽의 2번과 3번은 안하셔도 됩니다. 여기서 1번의 dVal와 dtVal가 사이즈와 위치를 결정하는데

순서대로 {x좌표, y좌표, size, gap}입니다. 이전과는다르게 갯수 for문 수정할필요없이 무조건 debuff={} 안에다가

스킬아이디만 다집어넣으면 다됩니다. 스킬ID저도 찾아야하는데 이거는 저도 확인하고 등록하기 힘드네요

메즈류 스킬ID공유 부탁드립니다.



버프필터도 수정하여서 다시올립니다.

1.
/run buff={84963,31884,59578,90174,56659,90811,1044,53657};bVal={50,-20,35,5};
/run function checkBuff(unit,id) return UnitBuff(unit,GetSpellInfo(id)) end;

2.
/run function mFrame(id) f=CreateFrame("frame") f:SetSize(bVal[3],bVal[3]) f.t=f:CreateTexture(nil,"BORDER") f.t:SetAllPoints() f.t:SetTexture(GetSpellTexture(id)) return f;end;

3.
/run bFrame = {}; for i=1,#buff do bFrame[i] = mFrame(buff[i]) bFrame[i]:Hide() end ;
/run function Act(frame, offset, val) frame:Show();frame:SetPoint("CENTER",offset+val[1],val[2]);end;

4.
/run function Buff(self,e, unit) if(unit=="player")then for i=1,#buff do bFrame[i]:Hide();end;local x=bVal[1];for i=1,#buff do if(checkBuff(unit,buff[i]))then Act(bFrame[i],x,bVal) x=x+bVal[3]+bVal[4]end;end;end;end;

5.
/run f=CreateFrame("frame")
/script f:SetScript("OnEvent",Buff) f:RegisterEvent("UNIT_AURA")

==================================추 가 내 용=============================

이걸 매크로로 만들어서 스킬이름 넣어서 누르면 스킬ID찾을수 있습니다.
/run function getID(name)for i=1,99999 do if(name==GetSpellInfo(i))then DEFAULT_CHAT_FRAME:AddMessage("SpellID = " .. i);break;end;end;end;
/run getID("스킬이름");