|
skeen@29
|
1 --
|
|
skeen@29
|
2 -- SkeenCore3BeastMasteryHunter
|
|
skeen@29
|
3 --
|
|
skeen@29
|
4 local LibSkeenCore = LibStub("LibSkeenCore");
|
|
skeen@29
|
5
|
|
skeen@29
|
6 local function Plugin_Registed()
|
|
skeen@29
|
7 -- Default saved variables
|
|
skeen@29
|
8 if SkeenBeastMasteryHunterdb == nil then
|
|
skeen@29
|
9 SkeenBeastMasteryHunterdb = {} -- fresh start
|
|
skeen@29
|
10 end
|
|
skeen@29
|
11
|
|
skeen@29
|
12 -- Load defaults
|
|
skeen@29
|
13 if SkeenBeastMasteryHunterdb.SuggestHuntersMark == nil then
|
|
skeen@29
|
14 SkeenBeastMasteryHunterdb.SuggestHuntersMark = false
|
|
skeen@29
|
15 end
|
|
skeen@29
|
16 end
|
|
skeen@29
|
17
|
|
skeen@29
|
18 local Option_Functions = {}
|
|
skeen@29
|
19
|
|
skeen@29
|
20 function Option_Functions:GetHuntersMark()
|
|
skeen@29
|
21 return SkeenBeastMasteryHunterdb.SuggestHuntersMark
|
|
skeen@29
|
22 end
|
|
skeen@29
|
23
|
|
skeen@29
|
24
|
|
skeen@29
|
25 function Option_Functions:ToggleHuntersMark()
|
|
skeen@29
|
26 SkeenBeastMasteryHunterdb.SuggestHuntersMark = not SkeenBeastMasteryHunterdb.SuggestHuntersMark
|
|
skeen@29
|
27 end
|
|
skeen@29
|
28
|
|
skeen@29
|
29
|
|
skeen@29
|
30 local function Option_Frame()
|
|
skeen@29
|
31 local panel = CreateFrame("FRAME")
|
|
skeen@29
|
32
|
|
skeen@29
|
33 local string
|
|
skeen@29
|
34 local checkbox
|
|
skeen@29
|
35
|
|
skeen@29
|
36 local y = -40
|
|
skeen@29
|
37 local string_X = 10
|
|
skeen@29
|
38 local checkbox_X = -10
|
|
skeen@29
|
39
|
|
skeen@29
|
40 string = panel:CreateFontString(nil,"OVERLAY","GameFontNormal")
|
|
skeen@29
|
41 string:SetText("Suggest Hunters Mark in Rotation")
|
|
skeen@29
|
42 string:SetPoint("TOPLEFT", string_X, y)
|
|
skeen@29
|
43
|
|
skeen@29
|
44 checkbox = CreateFrame("CheckButton", nil, panel, "OptionsCheckButtonTemplate")
|
|
skeen@29
|
45 checkbox:SetWidth(18)
|
|
skeen@29
|
46 checkbox:SetHeight(18)
|
|
skeen@31
|
47 checkbox:SetScript("OnClick", function() Option_Functions:ToggleHuntersMark() end)
|
|
skeen@29
|
48 checkbox:SetPoint("TOPRIGHT", checkbox_X, y)
|
|
skeen@31
|
49 checkbox:SetChecked(Option_Functions:GetHuntersMark())
|
|
skeen@29
|
50
|
|
skeen@29
|
51 return panel
|
|
skeen@29
|
52 end
|
|
skeen@29
|
53
|
|
skeen@29
|
54 local function Cooldowns()
|
|
skeen@29
|
55
|
|
skeen@29
|
56 -- Ability SpellID
|
|
skeen@29
|
57 local RapidFireID = 3045
|
|
skeen@29
|
58 local StampedeID = 121818
|
|
skeen@29
|
59 local ReadinessID = 23989
|
|
skeen@29
|
60 local BestialWrathID = 19574
|
|
skeen@29
|
61
|
|
skeen@29
|
62 return {RapidFireID, StampedeID, ReadinessID, BestialWrathID}
|
|
skeen@29
|
63 end
|
|
skeen@29
|
64
|
|
skeen@29
|
65 local function Rotation()
|
|
skeen@29
|
66
|
|
skeen@29
|
67 -- Hide the frame, if the target is dead, non existing or friendly.
|
|
skeen@29
|
68 if UnitName("target") == nil or UnitIsFriend("player","target") ~= nil or UnitHealth("target") == 0 then
|
|
skeen@29
|
69 return nil
|
|
skeen@29
|
70 end
|
|
skeen@29
|
71
|
|
skeen@29
|
72 --Information from;
|
|
skeen@29
|
73 --http://www.wowpedia.org/API_GetTalentInfo_(Mists)
|
|
skeen@29
|
74 local fervor_chosen = LibSkeenCore:HasChosenTalent(10)
|
|
skeen@29
|
75 local dire_beast_chosen = LibSkeenCore:HasChosenTalent(11)
|
|
skeen@29
|
76 local thrill_of_the_hunt_chosen = LibSkeenCore:HasChosenTalent(12)
|
|
skeen@29
|
77 local glaive_toss_chosen = LibSkeenCore:HasChosenTalent(16)
|
|
skeen@29
|
78 local powershot_chosen = LibSkeenCore:HasChosenTalent(17)
|
|
skeen@29
|
79 local barrage_chosen = LibSkeenCore:HasChosenTalent(18)
|
|
skeen@29
|
80
|
|
skeen@29
|
81 -- The table used for spell information (returned to the callee)
|
|
skeen@29
|
82 local spell = {}
|
|
skeen@29
|
83 spell.current = nil
|
|
skeen@29
|
84 spell.next = nil
|
|
skeen@29
|
85 spell.cd1 = nil
|
|
skeen@29
|
86 spell.cd2 = nil
|
|
skeen@29
|
87 spell.cd3 = nil
|
|
skeen@29
|
88 spell.cd4 = nil
|
|
skeen@29
|
89
|
|
skeen@29
|
90 -- Ability SpellID
|
|
skeen@29
|
91 local KillCommandID = 34026
|
|
skeen@29
|
92 local KillShotID = 53351
|
|
skeen@29
|
93 local FocusFireID = 82692
|
|
skeen@29
|
94 local FervorID = 82726
|
|
skeen@29
|
95 local DireBeastID = 120679
|
|
skeen@29
|
96 local ThrillOfTheHuntID = 109306
|
|
skeen@29
|
97 local SerpentStingID = 1978
|
|
skeen@29
|
98 local ArcaneShotID = 3044
|
|
skeen@29
|
99 local CobraShotID = 77767
|
|
skeen@29
|
100 local HuntersMarkID = 1130
|
|
skeen@29
|
101 local GlaiveTossID = 117050
|
|
skeen@29
|
102 local PowershotID = 109259
|
|
skeen@29
|
103 local BarrageID = 120360
|
|
skeen@29
|
104 local FrenzyID = 19615
|
|
skeen@29
|
105
|
|
skeen@29
|
106 local focus = UnitPower("player")
|
|
skeen@29
|
107
|
|
skeen@29
|
108 --Cooldowns
|
|
skeen@29
|
109 local kill_command_cooldown = LibSkeenCore:GetCooldown(KillCommandID) --"Kill Command"
|
|
skeen@29
|
110 local kill_shot_cooldown = LibSkeenCore:GetCooldown(KillShotID) --"Kill Shot"
|
|
skeen@29
|
111 local fervor_cooldown = LibSkeenCore:GetCooldown(FervorID) --"Fervor"
|
|
skeen@29
|
112 local dire_beast_cooldown = LibSkeenCore:GetCooldown(DireBeastID) --"Dire Beast"
|
|
skeen@29
|
113 local thrill_of_the_hunt_cooldown = LibSkeenCore:GetCooldown(ThrillOfTheHuntID) --"Fervor"
|
|
skeen@29
|
114 local glaive_toss_cooldown = LibSkeenCore:GetCooldown(GlaiveTossID) --"Glaive Toss"
|
|
skeen@29
|
115 local powershot_cooldown = LibSkeenCore:GetCooldown(PowershotID) --"Powershot"
|
|
skeen@29
|
116 local barrage_cooldown = LibSkeenCore:GetCooldown(BarrageID) --"Barrage"
|
|
skeen@29
|
117
|
|
skeen@29
|
118 --Debuff
|
|
skeen@29
|
119 local serpent_sting_duration = LibSkeenCore:GetDebuffDuration(SerpentStingID) --"Serpent Sting"
|
|
skeen@29
|
120 local HuntersMark_duration = LibSkeenCore:GetDebuffDuration(HuntersMarkID) --"Hunters Mark"
|
|
skeen@29
|
121
|
|
skeen@29
|
122 --BuffStacks
|
|
skeen@29
|
123 local frenzy_stacks = LibSkeenCore:GetBuffCount(FrenzyID)
|
|
skeen@29
|
124
|
|
skeen@29
|
125 -- Get the target's health percentage
|
|
skeen@29
|
126 local TargetsPercentOfHealth = (UnitHealth("target") / UnitHealthMax("target") * 100);
|
|
skeen@29
|
127
|
|
skeen@29
|
128 -- Apply Hunter's Mark Icon Hunter's Mark on the target.
|
|
skeen@29
|
129 if (HuntersMark_duration < 1 and Option_Functions:GetHuntersMark()) then
|
|
skeen@29
|
130 spell.current = HuntersMarkID
|
|
skeen@29
|
131 -- Cast Kill Command Icon Kill Command on cooldown.
|
|
skeen@29
|
132 elseif(kill_command_cooldown < 1) then
|
|
skeen@29
|
133 if (focus >= 40) then
|
|
skeen@29
|
134 spell.current = KillCommandID
|
|
skeen@29
|
135 else
|
|
skeen@29
|
136 spell.next = KillCommandID
|
|
skeen@29
|
137 end
|
|
skeen@29
|
138 -- Cast Kill Shot Icon Kill Shot (only available below 20% health).
|
|
skeen@29
|
139 elseif ((TargetsPercentOfHealth < 20) and (kill_shot_cooldown<1)) then
|
|
skeen@29
|
140 spell.current = KillShotID
|
|
skeen@29
|
141 -- Apply and maintain Serpent Sting Icon Serpent Sting to the target
|
|
skeen@29
|
142 -- it will be refreshed by Cobra Shot Icon Cobra Shot so it only needs to be done once, normally.
|
|
skeen@29
|
143 elseif (serpent_sting_duration < 1) then
|
|
skeen@29
|
144 if (focus >= 25) then
|
|
skeen@29
|
145 spell.current = SerpentStingID
|
|
skeen@29
|
146 else
|
|
skeen@29
|
147 spell.next = SerpentStingID
|
|
skeen@29
|
148 end
|
|
skeen@29
|
149 -- Cast your Tier 6 talent (normally Glaive Toss Icon Glaive Toss)
|
|
skeen@29
|
150 elseif (glaive_toss_chosen == true) and (glaive_toss_cooldown < 1) then
|
|
skeen@29
|
151 if (focus >= 15) then
|
|
skeen@29
|
152 spell.current = GlaiveTossID
|
|
skeen@29
|
153 else
|
|
skeen@29
|
154 spell.next = GlaiveTossID
|
|
skeen@29
|
155 end
|
|
skeen@29
|
156 elseif (powershot_chosen == true) and (powershot_cooldown < 1) and (focus >= 20) then
|
|
skeen@29
|
157 if (focus >= 20) then
|
|
skeen@29
|
158 spell.current = PowershotID
|
|
skeen@29
|
159 else
|
|
skeen@29
|
160 spell.next = PowershotID
|
|
skeen@29
|
161 end
|
|
skeen@29
|
162 elseif (barrage_chosen == true) and (barrage_cooldown < 1) then
|
|
skeen@29
|
163 if (focus >= 30) then
|
|
skeen@29
|
164 spell.current = BarrageID
|
|
skeen@29
|
165 else
|
|
skeen@29
|
166 spell.next = BarrageID
|
|
skeen@29
|
167 end
|
|
skeen@29
|
168 -- Cast your Tier 4 talent (normally Dire Beast Icon Dire Beast).
|
|
skeen@29
|
169 elseif (fervor_chosen == true) and (fervor_cooldown < 1) then
|
|
skeen@29
|
170 spell.current = FervorID
|
|
skeen@29
|
171 elseif (dire_beast_chosen == true) and (dire_beast_cooldown < 1) then
|
|
skeen@29
|
172 spell.current = DireBeastID
|
|
skeen@29
|
173 elseif (thrill_of_the_hunt_chosen == true) and (thrill_of_the_hunt_cooldown < 1) then
|
|
skeen@29
|
174 spell.current = ThrillOfTheHuntID
|
|
skeen@29
|
175 -- Cast Focus Fire Icon Focus Fire when your pet's Frenzy Icon Frenzy reaches 5 stacks (the icon will glow)
|
|
skeen@29
|
176 elseif (frenzy_stacks == 5) then
|
|
skeen@29
|
177 spell.current = FocusFireID
|
|
skeen@29
|
178 elseif (focus >= 60) then
|
|
skeen@29
|
179 spell.current = ArcaneShotID
|
|
skeen@29
|
180 else
|
|
skeen@29
|
181 spell.current = CobraShotID
|
|
skeen@29
|
182 end
|
|
skeen@29
|
183
|
|
skeen@29
|
184 return spell
|
|
skeen@29
|
185 end
|
|
skeen@29
|
186
|
|
skeen@29
|
187 local SkeenPlugin = {}
|
|
skeen@29
|
188 SkeenPlugin.Name = "Hunter: Beast Mastery"
|
|
skeen@29
|
189 SkeenPlugin.Class = "HUNTER"
|
|
skeen@29
|
190 SkeenPlugin.Spec = 1
|
|
skeen@29
|
191 SkeenPlugin.Version = "5.4.0"
|
|
skeen@29
|
192 SkeenPlugin.Rotation = Rotation
|
|
skeen@29
|
193 SkeenPlugin.Cooldowns = Cooldowns
|
|
skeen@29
|
194 SkeenPlugin.Plugin_Registed = Plugin_Registed
|
|
skeen@29
|
195 SkeenPlugin.Option_Frame = Option_Frame
|
|
skeen@29
|
196
|
|
skeen@29
|
197 local SkeenCore3 = _G["SkeenCore3"]
|
|
skeen@29
|
198 SkeenCore3:RegisterPlugin(SkeenPlugin)
|