안녕하세여 술사는 갓 만렙찍은 딜러만하던 유저입니다.
복술이 흔히 사용하는 '원시 해일의 핵' 전설을 저도 만들었습니다.

발동 조건 필터도 그지같고 발동됐는지 필터하는 방법도 그지같더라구요.
(발동됐을때 '원시 해일의 핵' 키워드 없음. 
 '성난 해일'이 특정조건으로 가까운 아군에 복사. 우선 순위는 아직도 모르겠음. 복사가 실행되는 범위또한 모름
 발동조건 충족시 버프 따로 존재하지 않음)

그래서 그냥 만들었습니다.

작성자는 위크오라를 쓰지 않습니다. 왜요? 그냥요.. 

버그리포트 및 수정사항 문의 -> 댓글 혹은 '아즈호드-코딩하기싫어요' 우편


사용하던 중 문제가 발생하거나 버그 리포트를 해주실 때 보셔야 하는 조건 파트


1. 맵 이동 및 로딩이 끝나면 성난 해일의 카운팅은 0이 됩니다.

2. 성난 해일이 시전되면 카운팅을 합니다.

- 카운팅 0. 인터페이스를 숨깁니다.

- 카운팅 1. 성난 해일 아이콘을 띄웁니다.


- 카운팅 2. 2중첩임을 알리기 위해 2중첩 텍스트를 띄웁니다.

- 카운팅 3 이상.  원시 해일의 핵의 발동 준비를 알립니다. 강조 및 아이콘 변경


3. 나의 성난 해일이 시전됐다면 0.3초안에 주 대상이 아닌 대상에 성난 해일이 시전됐는지 체크합니다. 

시전됐다면 카운팅을 1로 바꿉니다. 복사된 성난 해일도 다음 전설 발동 카운팅에 포함되더군요.

* 이상하게도 가끔 카운팅이 3이 아닌데도 성난해일이 복사되는 경우가 가끔 있습니다. 자료 분석이 모자라기에 해당 상황의 조건을 정확히 아시는분은 알려주시면 감사하겠습니다.

* 성난 해일이 복사되지 않는다면 (범위 내에 복사 대상이 없는 등) 카운팅이 초기화되지 않습니다.

* 맵 이동 및 로딩 완료시 카운팅을 0으로 수정하도록 짰으나 성난 해일의 카운팅또한 초기화되는진 모릅니다. 그냥 그럴 것 같아서 일단 넣었습니다. 맵 이동 후 1회 사이클에 한하여 오동작 할 수 있다는 뜻입니다. 


위 과정을 반복하는 애드온입니다.


개인 사용 목적으로 만들었기에 위치가 고정입니다. 소스코드를 일부 변경하셔야 위치변경가능.

source.lua 파일 내의 해당 부분을 수정하시면 됩니다. 

--PTC 텍스쳐 선언 
local PTC_T = PTC:CreateTexture(nil,"BACKGROUND")
PTC_T:SetAllPoints(PTC)
PTC:SetPoint("CENTER",-270,80)

부분의 SetPoint 좌표가 프레임의 위치를 변경시키는 명령어입니다. 
저는 "CENTER" 를 기준으로 맞추었으나 LEFT, RIGHT, TOP, BOTTOM 등 명령어도 사용이 가능합니다.

SetPoint("기준점", X, Y) 입니다. 
X축 기준 양수가 오른쪽입니다.
Y축 기준 양수가 위쪽입니다.

자신이 편한 위치로 이동시키면 됩니다. 메모장으로 열립니다. 
저장 후 게임 채팅창에 /reload 입력하시면 접속종료 없이 갱신됩니다.



소스코드 보기

-- 전역변수 선언

count = 0

healcount = 0

RunTF = false

local time, subevent, sourceGUID, destGUID, spellId, time2,subevent2, sourceGUID2, destGUID2, spellId2


--아이콘 설정

local _, _, ic = GetSpellInfo(335889) --원시 해일의 핵

local _, _, ic2 = GetSpellInfo(61295) -- 성난 해일


--PTC 선언

local PTC = CreateFrame("Frame",nil,UIParent)

PTC:SetFrameStrata("BACKGROUND")

PTC:SetWidth(35)

PTC:SetHeight(35)


--PTC 텍스쳐 선언 

local PTC_T = PTC:CreateTexture(nil,"BACKGROUND")

PTC_T:SetAllPoints(PTC)

PTC:SetPoint("CENTER",-270,80)


--PTC 폰트 선언

PTC.num = PTC:CreateFontString(nil)

PTC.num:SetFont(STANDARD_TEXT_FONT,16,"OUTLINE")

PTC.num:SetPoint("BOTTOMRIGHT", -2, 2)

PTC:Show()


--PTC 횟수 카운팅

local counting = CreateFrame("Frame")

counting:RegisterEvent("UNIT_SPELLCAST_SUCCEEDED")

counting:SetScript("OnEvent", function(self,event,...)

if UnitName(select(1,...))==UnitName("player") and select(3,...)==61295 then

count = count + 1

elseif UnitName(select(1,...))==UnitName("player") and select(3,...)==326059 then

count = count + 1

end


--PTC 횟수별 아이콘 관리

if count == 0 then

PTC:Hide()

elseif count == 1 then

PTC.num:SetText()

PTC_T:SetTexture(ic2)

PTC:Show()

ActionButton_HideOverlayGlow (PTC)

elseif 1 < count and count < 3 then

PTC.num:SetText(count)

elseif 2 < count then

PTC.num:SetText()

PTC_T:SetTexture(ic)

ActionButton_ShowOverlayGlow (PTC)

end

end)


--전투로그 감지 프레임 선언

local Clog = CreateFrame("Frame")

local Clog2 = CreateFrame("Frame")

local ENTERWORLD = CreateFrame("Frame")

Clog:RegisterEvent("COMBAT_LOG_EVENT_UNFILTERED")

Clog2:RegisterEvent("COMBAT_LOG_EVENT_UNFILTERED")

ENTERWORLD:RegisterEvent("PLAYER_ENTERING_WORLD")


--동시에 시전된 복사 성해인지 확인

local function TF()

if RunTF==ture then

time2,subevent2, _, sourceGUID2, _, _, _, destGUID2, _, _, _, spellId2 = CombatLogGetCurrentEventInfo()

if time + 0.3 > time2 and subevent2 == "SPELL_HEAL" then

if spellId2 == 61295 and destGUID ~= destGUID2  then

PTC.num:SetText()

PTC_T:SetTexture(ic2)

PTC:Show()

ActionButton_HideOverlayGlow (PTC)

count = 1

end

end

if time ~= time2 then

RunTF = false

end

end

end


--기본 성해인지 확인

Clog:SetScript("OnEvent", function(self,event,...)

if RunTF == false then

time, subevent, _, sourceGUID, _, _, _, destGUID, _, _, _, spellId = CombatLogGetCurrentEventInfo()

end

if subevent == "SPELL_HEAL" and sourceGUID == UnitGUID("player") then

if spellId == 61295 then

RunTF = ture

end

end

end)


Clog2:SetScript("OnEvent", TF)


ENTERWORLD:SetScript("OnEvent", function(self,event,...)

if event == "PLAYER_ENTERING_WORLD" then

count = 0

PTC:Hide()

end

end)




lua 소스로 이루어진 매우 짧은 파일입니다.
lua 언어를 사용해본적이 없고 코딩또한 아직 배우는 단계입니다. 변수명/함수명/동작방식 등 조언해주시면 감사하겠습니다. 



* 배포및 수정은 자유이나 toc파일의 제작자 이름은 변경 불가합니다.

도움받은 페이지



-----

특성변경시 초기화 추가
태고의 파도 시전시에도 카운팅하게 설계했기에 정술일경우에도 태고의파도를 시전하면 카운팅이 되는 문제 확인. 카운팅에  GetSpecialization() == 3(복술) 항목 추가하여 복술일때만 표시할 수 있도록 수정