CAFE

잡담게시판

[애드온] ItemRack 장비교체등 활용범위 넓음

작성자파워웹의흑마법|작성시간06.08.01|조회수1,585 목록 댓글 0

 

 

 

제가 애드온에 관심이 많은지라 요것조것 쓰고 잇는데 참 편한 애드온을 공유코자 글 남깁니다.

 

이 아이템랙이란 애드온은 장비나 장신구 반지를 특정상황(이벤트), 박차, 단축키 등으로 자동으로 바꿔줄수 잇는 애드온입니다.

 

너무 많은 이벤트와 활용범위가 잇어서 제가 사용하는 이벤트 몇가지만 예를들어 알려 드리겠습니다.

 

1. 박차 : 요건 하늘아리 기본애돈인 박차기능보다 좋다고 하네요. 하늘아리 박차사용하는 사람중 일부가 말에 타고 내릴때 순간적인 멈춤현상(랙)이 있지만 요건 아이템랙은 멈춤현상이 좀 덜 하다고 합니다..ㅡ.ㅡ 전 잘 모르겠음..

 

2. 장신구(추천) : 레이드 뛰시는 분들중에 장신구가 여러개 일텐데. 저또한 잔달라, 옥쇄, 괴수의눈, 모암의눈 등 여러개의 장신구가 있습니다. 그중 잔달라, 모암의눈 이런건 사용하고 나면 쿨탐 다시 돌아오기전까지 착용하고 잇어봐야 아무런 도움이 안돼는 장신구죠. 아이템랙을 사용하면 한결 도움이 ?求求?. 아래는 제가 사용하는 예입니다.

 

장신구1(잔달라), 장신구2(모암) 착용 ---> 잔달라 사용 ----> 잔달라 효과 끝나면 괴수의눈 자동 착용 ---> 모암의눈 사용 ----> 효과 끝나면 옥쇄 자동 착용 ---> 잔달라 쿨탐 끝나기30초전돼면 자동으로 잔달라 착용 ---> 모암의눈 쿨탐 끝나기30초에 모암의눈 자동 착용

 

이게 모두 자동으로 돼지요.. 제가 손댈껀 장신구 사용을 하기위한 클릭 뿐..

 

이걸 계급장이나 기타 여러 장신구들로 응용할수 있습니다.

 

3. 자살

[공격대장]설경구쥬니어 : 다시 갑니다.

[공격대장]설경구쥬니어 : 자리 잡고 빨리 누우세요..

 

요런 경우 도적이나 냥군님들 같은 경우에는 죽척,소멸로 수리비를 아낄수 있죠

 

아이템랙에서도 기본 이벤트로 이게 가능 합니다.. 소멸후 전투가 풀린 잠깐의 사이에 장비를 다 벗음

냥군도 이와 같음..

 

4. 장비셋팅

단축키 설정하여 저항셋, 치명셋, 뎀증셋 등 설정가능.

 

후~ 지겹네 복사 신공을..

 

아래부턴 게이트에서 퍼온 이벤트 입니다.

 

1, 버프에 따라 장비 세팅을 변경할 때 쓰는 이벤트 "PLAYER_AURAS_CHANGED"
    대표적인게 박차, 물빵, 형상,  은신 등이 있습니다.

2, 변신 폼에 따른 장비 셋팅을 변경할 때 쓰이는 이벤트 "SPELLS_CHANGED"
   드루이드의 폼에 해당합니다.

3, 타겟에 따른 장비 셋팅을 변경할 때 쓰이는 이벤트 "PLAYER_TARGET_CHANGED"
   타겟의 종류에 따라 장신구 무기 투사체 등을 변경할 때 사용합니다. (언데드의 경우 여명의 룬 등,, 월드 보스의 경우 투사체를 토륨 탄환으로 변경 등)

4, 플레이어의 체력 상태 및 마나 상태에 따른 장비 변경에 쓰이는 이벤트 "UNIT_MANA" & "UNIT_HEALTH"
   마나가 낮을 때 장비를 자동으로 스왑하고 마나가 일정 수치 이상이면 다시 원복시키는 기능을 할 수 있도록 합니다.(축지 및 알로크 스왑)

   다른 형태로 죽을거 같아서 무기라도 벗고 죽자 ㅡ.ㅡ;;; 형태로도 사용 가능 합니다.. ㅡ.ㅡ;;;
   (담자우님 케릭터 죽을 때 단축키 눌러서 무기 벗지 마시고 이거 활용하세요 ㅡ.ㅡ;;;;;;;)

5, 액션바의 상태에 따라 무기 스왑을 할 경우 "ACTIONBAR_UPDATE_STATE"
   별로 쓰일 일이 없을 거 같지만 저 같은 경우 근접 및 원거리시 무기 자동 스왑에 사용중에 있습니다.

6, 지역이 변경됨에 따른 장비 교체 "ZONE_CHANGED_NEW_AREA"
   역병지대 들어가면서 스컬지석을 위해 자동으로 여명의 XX 장신구로 교체해 줄때 사용을 합니다.

7, 기타 여러가지 이벤트를 사용해서 장비를 교체할 수 있습니다. 자세한 이벤트는 http://www.wowwiki.com/Events_%28API%29 참조 
  해서 자신에게 맞는 이벤트를 찾아 적용하는 것이 좋습니다.

 

추가이벤트

ItemRack 사용 예제로 보는 이벤트 설정부문(주석 부분이 설명임)

EquipSet() 은 설정한 장비로
EquipSet("Default") 는 내가 Default 라고 저장한 장비 셋팅으로 바꾸는 부분이다.
LoadSet() 은 이전 장비로의 복귀 이다.

==================================================================================
"무두질"
<랩 61-63 짜리 몹을 무두질 하려면 무두 +5 장비들을 착용해야 가능하다. 따라서 이러한 장비들을 자동 교체하는 이벤트를 작성해보자>


["trigger"] = "UPDATE_MOUSEOVER_UNIT",
말그대로 작동 상황이다.
UPDATE_MOUSEOVER_UNIT 는 즉, 유닛에 마우스를 위에 올리는 것만으로 아래 조건문에 해당하는 지를 판별하는 부분이다.

if UnitIsDead("mouseover") and GameTooltipTextLeft3:GetText()==UNIT_SKINNABLE then
-- 위 if 문 조건은 죽어 있는 유닛에 마우스를 올린 상태에서 게임 툴팁에 무두질 이라는 부분이 있는 것을 감지하는 부분이다.
  local r,g,b = GameTooltipTextLeft3:GetTextColor()
  if r>.9 and g<.2 and b<.2 then
-- 위 라인은 무질이라는 글자가 붉은 색인지를 감지하는 부분이다.
    EquipSet()
  end
else
  LoadSet()
-- 위 상황이 아닌 경우 원래의 장비를 착용하는 부분이다.
end
--[[Equips a set when you mouseover something that can be skinned but you have insufficient skill.]]

==================================================================================

"드루이드:인간형"
드루이드 인간형 변신시 장비 셋팅을 바꿔주는 부분이다.

["trigger"] = "SPELLS_CHANGED"
주문 사용할때마다 아래 조건문의 상황에 따라 장비를 교체한다.

if not ItemRack_GetForm() and IR_FORM then EquipSet() IR_FORM=nil end --[[Equip a set when not in an animal form.]]

-- ItemRack_GetForm() 이 부분은 이미 Itemrack 자체에서 판단을 하는 부분이라서 사용자가 따로 설정하지 않아도 된다.
 

==================================================================================

"Mount"
박차 사용시 이벤트 이다.
(내가 사용하는 자동 박차는 다른 사람들과 많이 다르다.)

["trigger"] = "PLAYER_AURAS_CHANGED"
PLAYER_AURAS_CHANGED 는 플레이어의 버프가 변할때 마다 그것을 감지하여 아래 조건에 합당한지를 판별하여
장비를 교체한다.


local zone = GetRealZoneText()
-- 지역 정보를 얻는 부분이다.
local mount = (UnitIsMounted and UnitIsMounted("player") or ItemRack_PlayerMounted()) and 1 or 0
-- 플레이어가 말을 타고 있는지 아닌지에 대한 판별 부분이다. 플레이어가 마을 타면 mount=1 이 되고
-- 플레이어가 말을 타지 않으면 mount=0 이된다.
if MOUNTED~=1 and mount==1 then
-- MOUNTED는 이전부터 말을 타고 있는 상태인지를 판별하는 부분이고, mount는 이전에 말을 타지 않은 것을 나타낸다.
    EquipSet()
elseif MOUNTED==1 and mount==0 then
-- MOUNTED는 이전부터 말을 타고 있는 상태인지를 판별하는 부분이고, mount는 이전에 말을 타지 않은 것을 나타낸다.
  if zone~="검은바위 산" then
-- 검은바위산에서는 자동으로 아래의 장비로 착용하지 않는다.
      EquipSet("default")
  end
end
MOUNTED = mount
-- MOUNTED는 말을 타게 되면 1이되고 MOUNTED는 말을 타지 않으면 0이 된다.. 그러나 순환 로테이션을
-- 생각해보면 위의 MOUNTED 값과는 반대가 된다.
--[[Equips set to be worn while mounted.]]

-- MOUNTED 와 mount의 차이가 처음에는 구분하기 힘들지도 모른다.(프로그램 짜는 사람은 금방 파악하겠지만.)
-- 그러나 자세히 살펴보면 이해할 수 있다.

 ==================================================================================


"수영"
말은 수영이라고 써 놓았지만 사실 잠수일때의 이벤트 이다.

["trigger"] = "MIRROR_TIMER_START",
MIRROR_TIMER_START 는 죽은척하기, 피로도, 호흡에 관계된 타임바 이다. 이것이 나타날때
아래 조건에 따라 장비를 교체한다

local i,found
-- 함수 정의 부분이다.
for i=1,3 do
  if getglobal("MirrorTimer"..i):IsVisible() and getglobal("MirrorTimer"..i.."Text"):GetText() == BREATH_LABEL then
-- 위 조건 문은 죽은척하기, 피로도, 호흡 중에 어느 부분인지에 대한 판별 부분이다.
-- 위 BREATH_LABEL 대신에 "피로도" 혹은 "죽은척하기"를 쓰면 그 때에 적용이 된다.
    found = 1
  end
end
if found then
  EquipSet()
end
--[[Equips a set when the breath gauge appears. NOTE: This will not re-equip gear when you leave water.  There's no reliable way to know when you leave water. Also note: Won't work with eCastingBar.]]

 ==================================================================================

"전사:방어 태세"

["trigger"] = "SPELLS_CHANGED",

local _,_,isActive = GetShapeshiftFormInfo(2) if isActive and IR_FORM~="Defensive" then EquipSet() IR_FORM="Defensive" end --[[Equips set to be worn in Defensive stance.]]
--아이템랙에 기본 설정으로 들어 있는 부분으로 방어태세일경우와 아닌 경우의 장비 셋팅을 할 수 있다

==================================================================================

"전사:광폭 태세"

["trigger"] = "SPELLS_CHANGED",

local _,_,isActive = GetShapeshiftFormInfo(3) if isActive and IR_FORM~="Berserker" then EquipSet() IR_FORM="Berserker" end --[[Equips set to be worn in Berserker stance.]]
--아이템랙에 기본 설정으로 들어 있는 부분으로 광폭태세일경우와 아닌 경우의 장비 셋팅을 할 수 있다
--만일 네파리안 잡는 매인탱의 경우에는 이 부분을 쓰면 안된다. 이 경우에는 조건문으로 네파리안에 대한 설정을 하면 된다.

==================================================================================

"일반 원거리"
필드에서의 원거리 전투가 벌어졌을 경우에 대한 이벤트 설정 부분이다.

["trigger"] = "ACTIONBAR_UPDATE_STATE",
ACTIONBAR_UPDATE_STATE 는 액션바의 상태 변화를 감지하는 트리거 이다.
즉, 액션바의 쿨타임이 변하거나 액션바에 있는 스킬을 쓰거나 하는 경우에 아래 조건을 따져서 장비를 교체한다.

local in_sf,i=0
-- 함수 정의 부분
for i=1,16 do
  if string.find(UnitBuff("pet",i) or "", "MendPet$") or (UnitBuff("player",i) == "InterfaceIconsAbility_Mount_JungleTiger") then
    in_sf=1 i=25
  end
end
--위 라인은 펫 치료 중이거나, 치타상의 경우를 감지하는 부분이다.
if in_sf~=1 then
--이 조건문은 위 상황일 경우에 자동 무기 스왑을 하지 않겠다는 부분이다.
if string.find(GetInventoryItemTexture("player", 16) or "", "Staff_") then
--지팡이를 들고 있는 경우 아래의 무기 스왑을 하지 않겠다는 조건문 이다.
else
  local health=UnitHealth("target");
--타겟의 체력 감지 부분이다.
  local zone = GetRealZoneText()
--지역 감지 부분
  if zone~="화산 심장부" and zone~="검은날개 둥지" and zone~="줄구룹" and zone~="안퀴라즈" and zone~="오닉시아의 둥지" and zone~="안퀴라즈 폐허" then
--위 지역이 아닌 경우에만 사용하겠다는 의미이다.
    if UnitIsEnemy("player", "target") and  not CheckInteractDistance("target", 2) then
--대상 타겟과의 거리 감지 부분이다.
      if  health>30 then
-- 대상 타겟의 체력이 30% 이상일 경우에만 자동 스왑을 하겠다는 부분이다.
        EquipSet()
      end
    end
  end
end
end

==================================================================================


"낙하"
낙하라고 했지만 실제로는 지역을 이동 했을 때 그 지역의 정보를 읽어서 장비를 로드 하는 부분이다.

["trigger"] = "ZONE_CHANGED_NEW_AREA",
새로운 장소로 옮길때 이벤트를 발생한다.

local zone = GetRealZoneText()
if zone=="검은바위 산" then
-- 검은바위 산에 들어가면 해당 장비로 갈아 입는다.
  EquipSet()
else
  if zone~="운고로 분화구" or zone~="타나리스" then
-- 운고르 분화구나 타나리스에서는 밑에 구문을 작동하지 않는다.
    local in_sf,i=0
    for i=1,16 do
      if string.find(UnitBuff("player",i) or "", "Mount_") then
 --사용자가 말을 타고 있는 경우에 작동하지 않는다.
        in_sf=1 i=25
      end
    end
    if in_sf~=1 then
          EquipSet("default")
--새로운 장소로 이동하면 기본 장비로 갈아 입는다.
    end
  end
end

 ==================================================================================


"계급장 사용후"
-- 계급장 사용후에 다른 장신구로 자동으로 교체를 하는 이벤트 부분이다.

["trigger"] = "ITEMRACK_ITEMUSED",
아이템랙 자체 지원 트리거 이다. 아이템의 사용후에 대한 이벤트 이다.

if arg1=="얼라이언스 계급장" or arg1=="호드 계급장" then EquipSet() end --[[Equips a set when the Insignia of the Alliance/Horde has been used.]]
-- ItemRack에서 기본 지원하는 함수 부분으로 다른 장신구로 대체해 넣을 수도 있다.

 ==================================================================================


"사제:어둠의 형상"
--사제가 어둠의 형상을 켯을 경우에 대한 장비 설정 부분이다.

["trigger"] = "PLAYER_AURAS_CHANGED",
--역시 버프 감지를 이용해서 어둠의 형상을 켰는지를 확인한다.

local in_sf,i=0 for i=1,16 do if string.find(UnitBuff("player",i) or "", "Shadowform$") then in_sf=1 i=25 end end
--어둠의 형상 버프를 찾는 부분이다.
if in_sf and not IR_FORM then
  EquipSet() IR_FORM=1
elseif not in_sf and IR_FORM then
  LoadSet() IR_FORM=nil
end

==================================================================================

"계급장"
-- 계급장 사용 준비 상태가 되면 계급장으로 자동으로 교체를 하는 이벤트 부분이다.

["trigger"] = "ITEMRACK_NOTIFY",
아이템랙 자체 지원 트리거 이다. 아이템의 사용 준비된 상태에 대한 이벤트 이다.

if arg1=="얼라이언스 계급장" or arg1=="호드 계급장" then EquipSet() end --[[Equips a set when the Insignia of the Alliance/Horde finishes cooldown.]]
-- ItemRack에서 기본 지원하는 함수 부분으로 다른 장신구로 대체해 넣을 수도 있다.

==================================================================================

여기서 부터 주석으로 설명하려는데 시간이 너무 걸려서 추후 주석을 달도록 하겠습니다.
위에 예제에서 주석 단 부분을 보시고 이해가 가능하시다면 아래 부분도 해석하는데는 시간이 조금 걸릴지 몰라도 이해하는데는 큰 어려움이 없을 겁니다.
""친 부분은 예제의 제목 이벤트 부분입니다.(즉 언제 쓰이는 부분인지를 말하는 것이므로 활용이 가능하실 것 입니다.)

==================================================================================

"사제:정신력 누출 시작"

local i,found
-- 함수 정의 부분이다.
for i=1,24 do
-- 1~24번 의 루틴을 돌리는데 이유는 버프의 최대 횟수보다 더 많이 루프를 돌려서 체크를 해야 하기 때문에 이렇게 for문으로 감지를 한다.
found = found or UnitBuff("player",i)=="InterfaceIconsSpell_Shadow_Requiem"
-- 버프의 텍스쳐 중에 텍스쳐 명칭이 InterfaceIconsSpell_Shadow_Requiem 의 이름이 있는 경우에 어떻게 할지에 대한 부분이다.
end
if not IR_SPIRIT and found then
IR_SPIRIT = 1
SaveSet()
EquipSet()
end
--[[Equips a set when you leave combat with Spirit Tap. Associate a set of spirit gear to this event.]]",

 ==================================================================================


"도적:은신"

["trigger"] = "PLAYER_AURAS_CHANGED",

local _,_,isActive = GetShapeshiftFormInfo(1)
if isActive and not IR_FORM then
  EquipSet() IR_FORM=1
elseif not isActive and IR_FORM then
  LoadSet() IR_FORM=nil
end
--[[Equips set to be worn while stealthed.]]

 ==================================================================================


"마법사:환기"

["trigger"] = "SPELLCAST_STOP",


local evoc,i=0
for i=1,16 do
if UnitBuff("player",i) == "InterfaceIconsSpell_Nature_Purge" then
evoc=1 i=25
end
end
if IR_EVOC~=1 and evoc==1 then
  EquipSet()
elseif IR_EVOC==1 and evoc==0 then
  LoadSet()
end
IR_EVOC = evoc
--[[Equips a set to wear while channeling Evocation.]]

==================================================================================


"드루이드:물개 변신"

["trigger"] = "SPELLS_CHANGED",

local form=ItemRack_GetForm() if form=="물개 변신" and IR_FORM~=form then EquipSet() IR_FORM=form end --[[Equip a set when in aquatic form.]]

==================================================================================


"사제:정신력 누출 끝"

["trigger"] = "PLAYER_AURAS_CHANGED",

local i,found
if IR_SPIRIT and not UnitAffectingCombat("player") then
for i=1,24 do
found = found or UnitBuff("player",i)=="InterfaceIconsSpell_Shadow_Requiem"
end
if not found then
IR_SPIRIT = nil
LoadSet()
end
end
--[[Returns to normal gear when Spirit Tap ends. Associate the same spirit set as Spirit Tap Begin.]]

 ==================================================================================


"레이드 원거리"

["trigger"] = "ACTIONBAR_UPDATE_STATE",

local in_sf,i=0
for i=1,16 do
  if string.find(UnitBuff("pet",i) or "", "MendPet$") then
    in_sf=1 i=25
  end
end
if in_sf~=1 then
if string.find(GetInventoryItemTexture("player", 16) or "", "Staff_") then
else
  local health=UnitHealth("target");
  local zone = GetRealZoneText()
  if zone=="화산 심장부" or zone=="검은날개 둥지" or zone=="줄구룹" or zone=="안퀴라즈" or zone=="오닉시아의 둥지" or zone=="안퀴라즈 폐허" then
    if UnitIsEnemy("player", "target") and  not CheckInteractDistance("target", 2) then
      if  health>30 then
        EquipSet()
      end
    end
  end
end
end

==================================================================================


"치타의 상"

["trigger"] = "PLAYER_AURAS_CHANGED",

local f; for i=1,24 do
  f = (UnitBuff("player",i) == "InterfaceIconsAbility_Mount_JungleTiger") or f
  i = f and 25 or i
end
if not IR_ and f then
  EquipSet()
elseif IR_ and not f then
  LoadSet()
end
IR_ = f
--[[Equips a set while under 치타의 상.]]

 ==================================================================================


"언데드"

["trigger"] = "PLAYER_TARGET_CHANGED",

local T=UnitCreatureType('target')
local in_sf,i=0
for i=1,16 do
  if string.find(UnitBuff("player",i) or "", "Mount_") then
    in_sf=1 i=25
  end
end
if in_sf~=1 then
  if UnitClassification("target") ~= "WorldBoss" then
    if T == "언데드" then
      EquipSet()
    end
  end
end

==================================================================================

"마나 낮음"

["trigger"] = "UNIT_MANA",

local mana = UnitMana("player") / UnitManaMax("player")
if mana < .5 and not IR_OOM then
  SaveSet()
  EquipSet()
  IR_OOM = 1
elseif IR_OOM and mana > .75 then
  LoadSet()
  IR_OOM = nil
end
--[[Equips a set when mana is below 50% and re-equips previous gear at 75% mana. Remember: You can't swap non-weapons in combat.]]

 ==================================================================================


"근접"

["trigger"] = "ACTIONBAR_UPDATE_STATE",

local in_sf,i=0
for i=1,16 do
  if string.find(UnitBuff("pet",i) or "", "MendPet$") then
    in_sf=1 i=25
  end
end
if in_sf~=1 then
if string.find(GetInventoryItemTexture("player", 16) or "", "Staff_") then
else
  local health=UnitHealth("target");
  if UnitIsEnemy("player", "target") and  CheckInteractDistance("target", 2)  then
    if  health>30 then
      EquipSet()
    end
  end
end
end

==================================================================================

"물빵"

["trigger"] = "PLAYER_AURAS_CHANGED",  

local i,found,buff
for i=1,16 do
buff = UnitBuff("player",i)
if buff then
found = found or buff=="InterfaceIconsINV_Misc_Fork&Knife" or string.find(buff,"^InterfaceIconsINV_Drink")
end
end
if not IR_EATING and found then
IR_EATING = 1
SaveSet()
EquipSet()
elseif IR_EATING and not found then
IR_EATING = nil
LoadSet()
end
--[[Equips a set while eating or drinking.]]

==================================================================================


"죽기 직전"

["trigger"] = "UNIT_HEALTH",

local health = UnitHealth("player") / UnitHealthMax("player")
if health < .05  then
  EquipSet()
end

 

 

 

또한 이번버젼에서의 희소식은 "은행창을 열고 세트를 선택할 경우 가방 안에 있지 않고 은행 안에 있는 아이템은 가방으로 옮겨줍니다."

 

응용은 여러분의 몫입니다. 사용법을 모르시는 분들은 파워웹의흑마법으로 귓 ㄲㄲ


 

다음검색
현재 게시글 추가 기능 열기

댓글

댓글 리스트
맨위로

카페 검색

카페 검색어 입력폼