Advertisement
Guest User

Untitled

a guest
Jan 18th, 2014
94
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 15.59 KB | None | 0 0
  1. -- Volan Boss Mod for King Boss Mods
  2. -- Written by Noshei
  3. -- Copyright 2013
  4. --
  5.  
  6. KBMSLRDIGVN_Settings = nil
  7. chKBMSLRDIGVN_Settings = nil
  8.  
  9. -- Link Mods
  10. local AddonData = Inspect.Addon.Detail("KingMolinator")
  11. local KBM = AddonData.data
  12. if not KBM.BossMod then
  13. return
  14. end
  15. local IG = KBM.BossMod["RInfinity_Gate"]
  16.  
  17. local VOL = {
  18. Enabled = true,
  19. Directory = IG.Directory,
  20. File = "Volan.lua",
  21. Instance = IG.Name,
  22. InstanceObj = IG,
  23. HasPhases = true,
  24. Lang = {},
  25. ID = "SLIGVolan",
  26. Object = "VOL",
  27. Enrage = 10 * 60 + 30,
  28. FirstSpine = false,
  29. SpineCount = 0,
  30. OutbreakCount = 0,
  31. ExtinctionCount = 0,
  32. OblivionCount = 0,
  33. }
  34.  
  35. KBM.RegisterMod(VOL.ID, VOL)
  36.  
  37. -- Main Unit Dictionary
  38. VOL.Lang.Unit = {}
  39. VOL.Lang.Unit.Volan = KBM.Language:Add("Volan")
  40. VOL.Lang.Unit.VolanLL = KBM.Language:Add("Volan's Left Leg")
  41. VOL.Lang.Unit.VolanRL = KBM.Language:Add("Volan's Right Leg")
  42.  
  43. -- Ability Dictionary
  44. VOL.Lang.Ability = {}
  45. VOL.Lang.Ability.Energy = KBM.Language:Add("Energy Beam")
  46. VOL.Lang.Ability.Spine = KBM.Language:Add("Spine Shatter")
  47. VOL.Lang.Ability.Outbreak = KBM.Language:Add("Outbreak")
  48. VOL.Lang.Ability.Extinction = KBM.Language:Add("Extinction")
  49. VOL.Lang.Ability.Oblivion = KBM.Language:Add("Eve of Oblivion")
  50.  
  51. -- Description Dictionary
  52. VOL.Lang.Main = {}
  53.  
  54. -- Debuff Dictionary
  55. VOL.Lang.Debuff = {}
  56. VOL.Lang.Debuff.Outbreak = KBM.Language:Add("Outbreak")
  57.  
  58. -- Notify Dictionary
  59. VOL.Lang.Notify = {}
  60. VOL.Lang.Notify.Crystal = KBM.Language:Add("Volan propels a burst of energy towards (%a*).")
  61. VOL.Lang.Notify.Spine = KBM.Language:Add("Your cities will fall.")
  62. VOL.Lang.Notify.Outbreak = KBM.Language:Add("Your lands will burn.")
  63. VOL.Lang.Notify.Extinction = KBM.Language:Add("Extinction awaits you.")
  64. VOL.Lang.Notify.Oblivion = KBM.Language:Add("Witness true power.")
  65. VOL.Lang.Notify.Exhausted = KBM.Language:Add('Volan shouts, "Resistance only delays the inevitable."')
  66. VOL.Lang.Notify.PhaseTwo = KBM.Language:Add('Volan bellows, "My soul burns with hatred. I will only be free from my torment when no life remains on this accursed world."')
  67.  
  68. -- Messages Dictionary
  69. VOL.Lang.Messages = {}
  70. VOL.Lang.Messages.CrystalRun = KBM.Language:Add("Run to Crystal!")
  71. VOL.Lang.Messages.Extinction = KBM.Language:Add("Spread Out!")
  72. VOL.Lang.Messages.OblivionDamage = KBM.Language:Add("Eve of Oblivion Hits Raid!")
  73. VOL.Lang.Messages.ExhaustedStart = KBM.Language:Add("Start DPS Burn!")
  74. VOL.Lang.Messages.ExhaustedEnd = KBM.Language:Add("End of Exhausted!")
  75.  
  76. VOL.Descript = VOL.Lang.Unit.Volan[KBM.Lang]
  77.  
  78. -- Assign Boss to Language Specific Dictionary
  79. VOL.Volan = {
  80. Mod = VOL,
  81. Level = "??",
  82. Active = false,
  83. Name = VOL.Lang.Unit.Volan[KBM.Lang],
  84. Dead = false,
  85. Available = false,
  86. Menu = {},
  87. UTID = "U676084BA1D5160F3",
  88. UnitID = nil,
  89. TimeOut = 5,
  90. Castbar = nil,
  91. TimersRef = {},
  92. AlertsRef = {},
  93. MechRef = {},
  94. Triggers = {},
  95. Settings = {
  96. CastBar = KBM.Defaults.Castbar(),
  97. TimersRef = {
  98. Enabled = true,
  99. Energy = KBM.Defaults.TimerObj.Create("blue"),
  100. Extinction1 = KBM.Defaults.TimerObj.Create("red"),
  101. Extinction2 = KBM.Defaults.TimerObj.Create("red"),
  102. Outbreak1 = KBM.Defaults.TimerObj.Create("dark_green"),
  103. Outbreak2 = KBM.Defaults.TimerObj.Create("dark_green"),
  104. Outbreak3 = KBM.Defaults.TimerObj.Create("dark_green"),
  105. Outbreak4 = KBM.Defaults.TimerObj.Create("dark_green"),
  106. Outbreak5 = KBM.Defaults.TimerObj.Create("dark_green"),
  107. Spine1 = KBM.Defaults.TimerObj.Create("yellow"),
  108. Spine2 = KBM.Defaults.TimerObj.Create("yellow"),
  109. Spine3 = KBM.Defaults.TimerObj.Create("yellow"),
  110. Oblivion1 = KBM.Defaults.TimerObj.Create("cyan"),
  111. Oblivion2 = KBM.Defaults.TimerObj.Create("cyan"),
  112. OblivionDamage = KBM.Defaults.TimerObj.Create("red"),
  113. ExhaustedStart = KBM.Defaults.TimerObj.Create("purple"),
  114. ExhaustedEnd = KBM.Defaults.TimerObj.Create("purple"),
  115. },
  116. AlertsRef = {
  117. Enabled = true,
  118. Outbreak = KBM.Defaults.AlertObj.Create("dark_green"),
  119. Crystal = KBM.Defaults.AlertObj.Create("blue"),
  120. Extinction = KBM.Defaults.AlertObj.Create("red"),
  121. },
  122. MechRef = {
  123. Enabled = true,
  124. Outbreak = KBM.Defaults.MechObj.Create("dark_green"),
  125. Crystal = KBM.Defaults.MechObj.Create("blue"),
  126. },
  127. }
  128. }
  129.  
  130. VOL.VolanLL = {
  131. Mod = VOL,
  132. Level = "??",
  133. Active = false,
  134. Name = VOL.Lang.Unit.VolanLL[KBM.Lang],
  135. Dead = false,
  136. Available = false,
  137. Menu = {},
  138. UTID = "U47623A846423F2F7",
  139. UnitID = nil,
  140. TimeOut = 5,
  141. Castbar = nil,
  142. -- TimersRef = {},
  143. -- AlertsRef = {},
  144. -- MechRef = {},
  145. Triggers = {},
  146. Settings = {
  147. CastBar = KBM.Defaults.Castbar(),
  148. -- TimersRef = {
  149. -- Enabled = true,
  150. -- },
  151. -- AlertsRef = {
  152. -- Enabled = true,
  153. -- Disruptor = KBM.Defaults.AlertObj.Create("yellow"),
  154. -- Distortion = KBM.Defaults.AlertObj.Create("red"),
  155. -- },
  156. -- MechRef = {
  157. -- Enabled = true,
  158. -- Decay = KBM.Defaults.MechObj.Create("cyan"),
  159. -- Distortion = KBM.Defaults.MechObj.Create("red"),
  160. -- },
  161. }
  162. }
  163.  
  164. VOL.VolanRL = {
  165. Mod = VOL,
  166. Level = "??",
  167. Active = false,
  168. Name = VOL.Lang.Unit.VolanRL[KBM.Lang],
  169. Dead = false,
  170. Available = false,
  171. Menu = {},
  172. UTID = "U17B096BE7903E180",
  173. UnitID = nil,
  174. TimeOut = 5,
  175. Castbar = nil,
  176. -- TimersRef = {},
  177. -- AlertsRef = {},
  178. -- MechRef = {},
  179. Triggers = {},
  180. Settings = {
  181. CastBar = KBM.Defaults.Castbar(),
  182. -- TimersRef = {
  183. -- Enabled = true,
  184. -- },
  185. -- AlertsRef = {
  186. -- Enabled = true,
  187. -- Disruptor = KBM.Defaults.AlertObj.Create("yellow"),
  188. -- Distortion = KBM.Defaults.AlertObj.Create("red"),
  189. -- },
  190. -- MechRef = {
  191. -- Enabled = true,
  192. -- Decay = KBM.Defaults.MechObj.Create("cyan"),
  193. -- Distortion = KBM.Defaults.MechObj.Create("red"),
  194. -- },
  195. }
  196. }
  197.  
  198. function VOL:AddBosses(KBM_Boss)
  199. self.MenuName = self.Descript
  200. self.Bosses = {
  201. [self.Volan.Name] = self.Volan,
  202. [self.VolanLL.Name] = self.VolanLL,
  203. [self.VolanRL.Name] = self.VolanRL,
  204. }
  205. end
  206.  
  207. function VOL:InitVars()
  208. self.Settings = {
  209. Enabled = true,
  210. EncTimer = KBM.Defaults.EncTimer(),
  211. PhaseMon = KBM.Defaults.PhaseMon(),
  212. MechSpy = KBM.Defaults.MechSpy(),
  213. Volan = {
  214. CastBar = self.Volan.Settings.CastBar,
  215. AlertsRef = self.Volan.Settings.AlertsRef,
  216. TimersRef = self.Volan.Settings.TimersRef,
  217. MechRef = self.Volan.Settings.MechRef,
  218. },
  219. MechTimer = KBM.Defaults.MechTimer(),
  220. Alerts = KBM.Defaults.Alerts(),
  221. }
  222. KBMSLRDIGVN_Settings = self.Settings
  223. chKBMSLRDIGVN_Settings = self.Settings
  224.  
  225. end
  226.  
  227. function VOL:SwapSettings(bool)
  228.  
  229. if bool then
  230. KBMSLRDIGVN_Settings = self.Settings
  231. self.Settings = chKBMSLRDIGVN_Settings
  232. else
  233. chKBMSLRDIGVN_Settings = self.Settings
  234. self.Settings = KBMSLRDIGVN_Settings
  235. end
  236.  
  237. end
  238.  
  239. function VOL:LoadVars()
  240. if KBM.Options.Character then
  241. KBM.LoadTable(chKBMSLRDIGVN_Settings, self.Settings)
  242. else
  243. KBM.LoadTable(KBMSLRDIGVN_Settings, self.Settings)
  244. end
  245.  
  246. if KBM.Options.Character then
  247. chKBMSLRDIGVN_Settings = self.Settings
  248. else
  249. KBMSLRDIGVN_Settings = self.Settings
  250. end
  251.  
  252. self.Settings.Enabled = true
  253. end
  254.  
  255. function VOL:SaveVars()
  256. self.Enabled = true
  257. if KBM.Options.Character then
  258. chKBMSLRDIGVN_Settings = self.Settings
  259. else
  260. KBMSLRDIGVN_Settings = self.Settings
  261. end
  262. end
  263.  
  264. function VOL.PhaseTwo()
  265. if VOL.Phase == 1 then
  266. VOL.Phase = 2
  267. VOL.PhaseObj.Objectives:Remove()
  268. VOL.PhaseObj.Objectives:AddPercent(VOL.Volan, 0, 100)
  269. VOL.PhaseObj:SetPhase(KBM.Language.Options.Final[KBM.Lang])
  270. VOL.FirstSpine = false
  271. VOL.SpineCount = 0
  272. VOL.OutbreakCount = 0
  273. VOL.ExtinctionCount = 0
  274. VOL.OblivionCount = 0
  275. end
  276. end
  277.  
  278. function VOL:Castbar(units)
  279. end
  280.  
  281. function VOL:RemoveUnits(UnitID)
  282. if self.Volan.UnitID == UnitID then
  283. self.Volan.Available = false
  284. return true
  285. end
  286. return false
  287. end
  288.  
  289. function VOL:Death(UnitID)
  290. if self.Volan.UnitID == UnitID then
  291. self.Volan.Dead = true
  292. return true
  293. end
  294. return false
  295. end
  296.  
  297. function VOL:UnitHPCheck(uDetails, unitID)
  298. if uDetails and unitID then
  299. local BossObj = self.UTID[uDetails.type]
  300. if not BossObj then
  301. BossObj = self.Bosses[uDetails.name]
  302. end
  303. if BossObj then
  304. if not self.EncounterRunning then
  305. self.EncounterRunning = true
  306. self.StartTime = Inspect.Time.Real()
  307. self.HeldTime = self.StartTime
  308. self.TimeElapsed = 0
  309. BossObj.Dead = false
  310. BossObj.Casting = false
  311. if BossObj.CastBar then
  312. BossObj.CastBar:Create(unitID)
  313. end
  314. self.PhaseObj:Start(self.StartTime)
  315. self.PhaseObj:SetPhase("1")
  316. --self.PhaseObj.Objectives:AddPercent(self.Volan, 0, 100)
  317. self.PhaseObj.Objectives:AddPercent(self.VolanLL, 0, 100)
  318. self.PhaseObj.Objectives:AddPercent(self.VolanRL, 0, 100)
  319. self.Phase = 1
  320. self.FirstSpine = false
  321. self.SpineCount = 0
  322. self.OutbreakCount = 0
  323. self.ExtinctionCount = 0
  324. self.OblivionCount = 0
  325. else
  326. BossObj.Dead = false
  327. BossObj.Casting = false
  328. if BossObj.UnitID ~= unitID then
  329. BossObj.CastBar:Remove()
  330. BossObj.CastBar:Create(unitID)
  331. end
  332. end
  333. if BossObj.UnitID ~= unitID then print(string.format("Boss UnitID for %s is now %s", BossObj.Name, unitID)) end
  334. BossObj.UnitID = unitID
  335. BossObj.Available = true
  336. return BossObj
  337. end
  338. end
  339. end
  340.  
  341. function VOL:Reset()
  342. self.EncounterRunning = false
  343. for BossName, BossObj in pairs(self.Bosses) do
  344. BossObj.Available = false
  345. BossObj.UnitID = nil
  346. BossObj.Dead = false
  347. BossObj.Casting = false
  348. if BossObj.CastBar then
  349. BossObj.CastBar:Remove()
  350. end
  351. end
  352. self.PhaseObj:End(Inspect.Time.Real())
  353. end
  354.  
  355. function VOL.ExtinctionTrigger()
  356. if VOL.Phase == 1 then
  357. if VOL.OutbreakCount == 1 then
  358. KBM.MechTimer:AddStart(VOL.Volan.TimersRef.Outbreak2)
  359. else
  360. KBM.MechTimer:AddStart(VOL.Volan.TimersRef.Outbreak3)
  361. end
  362. VOL.OutbreakCount = VOL.OutbreakCount + 1
  363. elseif VOL.Phase == 2 then
  364. if VOL.OutbreakCount == 0 then
  365. KBM.MechTimer:AddStart(VOL.Volan.TimersRef.Outbreak4)
  366. VOL.OutbreakCount = VOL.OutbreakCount + 1
  367. else
  368. KBM.MechTimer:AddStart(VOL.Volan.TimersRef.Oblivion2)
  369. end
  370. end
  371. end
  372.  
  373. function VOL.OutbreakTrigger()
  374. if VOL.Phase == 1 then
  375. if VOL.SpineCount == 0 then
  376. KBM.MechTimer:AddStart(VOL.Volan.TimersRef.Spine1)
  377. elseif VOL.SpineCount == 1 then
  378. KBM.MechTimer:AddStart(VOL.Volan.TimersRef.Spine2)
  379. else
  380. KBM.MechTimer:AddStart(VOL.Volan.TimersRef.Spine3)
  381. end
  382. VOL.SpineCount = VOL.SpineCount + 1
  383. elseif VOL.Phase == 2 then
  384. if VOL.OblivionCount == 0 then
  385. KBM.MechTimer:AddStart(VOL.Volan.TimersRef.Oblivion1)
  386. VOL.OblivionCount = VOL.OblivionCount + 1
  387. else
  388. KBM.MechTimer:AddStart(VOL.Volan.TimersRef.Extinction2)
  389. end
  390. end
  391. end
  392.  
  393. function VOL.SpineTrigger()
  394. if VOL.Phase == 1 then
  395. if VOL.FirstSpine then
  396. KBM.MechTimer:AddStart(VOL.Volan.TimersRef.Extinction1)
  397. else
  398. KBM.MechTimer:AddStart(VOL.Volan.TimersRef.Outbreak1)
  399. VOL.OutbreakCount = VOL.OutbreakCount + 1
  400. VOL.FirstSpine = true
  401. end
  402. end
  403. end
  404.  
  405. function VOL:Timer()
  406. end
  407.  
  408. function VOL:DefineMenu()
  409. self.Menu = IG.Menu:CreateEncounter(self.Volan, self.Enabled)
  410. end
  411.  
  412. function VOL:Start()
  413. -- Create Timers
  414. self.Volan.TimersRef.Energy = KBM.MechTimer:Add(self.Lang.Ability.Energy[KBM.Lang], 25, false)
  415. self.Volan.TimersRef.Extinction1 = KBM.MechTimer:Add(self.Lang.Ability.Extinction[KBM.Lang], 28, false)
  416. self.Volan.TimersRef.Extinction2 = KBM.MechTimer:Add(self.Lang.Ability.Extinction[KBM.Lang], 44, false)
  417. self.Volan.TimersRef.Outbreak1 = KBM.MechTimer:Add(self.Lang.Ability.Outbreak[KBM.Lang], 25, false)
  418. self.Volan.TimersRef.Outbreak2 = KBM.MechTimer:Add(self.Lang.Ability.Outbreak[KBM.Lang], 28, false)
  419. self.Volan.TimersRef.Outbreak3 = KBM.MechTimer:Add(self.Lang.Ability.Outbreak[KBM.Lang], 34, false)
  420. self.Volan.TimersRef.Outbreak4 = KBM.MechTimer:Add(self.Lang.Ability.Outbreak[KBM.Lang], 24, false)
  421. self.Volan.TimersRef.Outbreak5 = KBM.MechTimer:Add(self.Lang.Ability.Outbreak[KBM.Lang], 23, false)
  422. self.Volan.TimersRef.Spine1 = KBM.MechTimer:Add(self.Lang.Ability.Spine[KBM.Lang], 36, false)
  423. self.Volan.TimersRef.Spine2 = KBM.MechTimer:Add(self.Lang.Ability.Spine[KBM.Lang], 10, false)
  424. self.Volan.TimersRef.Spine3 = KBM.MechTimer:Add(self.Lang.Ability.Spine[KBM.Lang], 12, false)
  425. self.Volan.TimersRef.Oblivion1 = KBM.MechTimer:Add(self.Lang.Ability.Oblivion[KBM.Lang], 31, false)
  426. self.Volan.TimersRef.Oblivion2 = KBM.MechTimer:Add(self.Lang.Ability.Oblivion[KBM.Lang], 13, false)
  427. self.Volan.TimersRef.OblivionDamage = KBM.MechTimer:Add(self.Lang.Messages.OblivionDamage[KBM.Lang], 12, false)
  428. self.Volan.TimersRef.ExhaustedStart = KBM.MechTimer:Add(self.Lang.Messages.ExhaustedStart[KBM.Lang], 19, false)
  429. self.Volan.TimersRef.ExhaustedEnd = KBM.MechTimer:Add(self.Lang.Messages.ExhaustedEnd[KBM.Lang], 20, false)
  430. KBM.Defaults.TimerObj.Assign(self.Volan)
  431.  
  432. -- Create Alerts
  433. self.Volan.AlertsRef.Outbreak = KBM.Alert:Create(self.Lang.Debuff.Outbreak[KBM.Lang], nil, true, true, "dark_green")
  434. self.Volan.AlertsRef.Crystal = KBM.Alert:Create(self.Lang.Messages.CrystalRun[KBM.Lang], 6, false, true, "blue")
  435. self.Volan.AlertsRef.Extinction = KBM.Alert:Create(self.Lang.Messages.Extinction[KBM.Lang], 14, false, true, "red")
  436. KBM.Defaults.AlertObj.Assign(self.Volan)
  437.  
  438. -- Create Mechanic Spies
  439. self.Volan.MechRef.Outbreak = KBM.MechSpy:Add(self.Lang.Debuff.Outbreak[KBM.Lang], nil, "playerDebuff", self.Volan)
  440. self.Volan.MechRef.Crystal = KBM.MechSpy:Add(self.Lang.Messages.CrystalRun[KBM.Lang], 6, "mechanic", self.Volan)
  441. KBM.Defaults.MechObj.Assign(self.Volan)
  442.  
  443. -- Assign Alerts and Timers for Triggers
  444. self.Volan.Triggers.Crystal = KBM.Trigger:Create(self.Lang.Notify.Crystal[KBM.Lang], "notify", self.Volan)
  445. self.Volan.Triggers.Crystal:AddTimer(self.Volan.TimersRef.Energy)
  446. self.Volan.Triggers.Crystal:AddSpy(self.Volan.MechRef.Crystal)
  447. self.Volan.Triggers.Crystal:AddAlert(self.Volan.AlertsRef.Crystal, true)
  448.  
  449. self.Volan.Triggers.OutbreakBuff = KBM.Trigger:Create(self.Lang.Debuff.Outbreak[KBM.Lang], "playerDebuff", self.Volan)
  450. self.Volan.Triggers.OutbreakBuff:AddSpy(self.Volan.MechRef.Outbreak)
  451. self.Volan.Triggers.OutbreakRem = KBM.Trigger:Create(self.Lang.Debuff.Outbreak[KBM.Lang], "playerBuffRemove", self.Volan)
  452. self.Volan.Triggers.OutbreakRem:AddStop(self.Volan.MechRef.Outbreak)
  453.  
  454.  
  455.  
  456. self.Volan.Triggers.Extinction = KBM.Trigger:Create(self.Lang.Notify.Extinction[KBM.Lang], "notify", self.Volan)
  457. self.Volan.Triggers.Extinction:AddAlert(self.Volan.AlertsRef.Extinction, false)
  458. self.Volan.Triggers.Extinction:AddPhase(self.ExtinctionTrigger)
  459.  
  460. self.Volan.Triggers.Outbreak = KBM.Trigger:Create(self.Lang.Notify.Outbreak[KBM.Lang], "notify", self.Volan)
  461. self.Volan.Triggers.Outbreak:AddPhase(self.OutbreakTrigger)
  462.  
  463. self.Volan.Triggers.Spine = KBM.Trigger:Create(self.Lang.Notify.Spine[KBM.Lang], "notify", self.Volan)
  464. self.Volan.Triggers.Spine:AddPhase(self.SpineTrigger)
  465.  
  466. self.Volan.Triggers.Oblivion = KBM.Trigger:Create(self.Lang.Notify.Oblivion[KBM.Lang], "notify", self.Volan)
  467. self.Volan.Triggers.Oblivion:AddTimer(self.Volan.TimersRef.OblivionDamage)
  468. self.Volan.Triggers.Oblivion:AddTimer(self.Volan.TimersRef.ExhaustedStart)
  469.  
  470. self.Volan.Triggers.Exhausted = KBM.Trigger:Create(self.Lang.Notify.Exhausted[KBM.Lang], "notify", self.Volan)
  471. self.Volan.Triggers.Exhausted:AddTimer(self.Volan.TimersRef.ExhaustedEnd)
  472. self.Volan.Triggers.Exhausted:AddTimer(self.Volan.TimersRef.Outbreak5)
  473.  
  474. self.Volan.Triggers.PhaseTwo = KBM.Trigger:Create(self.Lang.Notify.PhaseTwo[KBM.Lang], "notify", self.Volan)
  475. self.Volan.Triggers.PhaseTwo:AddPhase(self.PhaseTwo)
  476.  
  477.  
  478.  
  479. self.Volan.CastBar = KBM.Castbar:Add(self, self.Volan)
  480. self.VolanLL.CastBar = KBM.Castbar:Add(self, self.VolanLL)
  481. self.VolanRL.CastBar = KBM.Castbar:Add(self, self.VolanRL)
  482. self.PhaseObj = KBM.PhaseMonitor.Phase:Create(1)
  483. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement