comparison State.lua @ 97:5d3b7b025142

Fixed problems with stances/forms not initializing correctly
author Flick <flickerstreak@gmail.com>
date Thu, 23 Oct 2008 00:01:00 +0000
parents aa9074c92f11
children a44173c7a82c
comparison
equal deleted inserted replaced
96:aa9074c92f11 97:5d3b7b025142
275 combat = "combat", 275 combat = "combat",
276 nocombat = "nocombat", 276 nocombat = "nocombat",
277 possess = "bonusbar:5", 277 possess = "bonusbar:5",
278 } 278 }
279 279
280 -- Have to do these shenanigans instead of hardcoding the stances/forms because 280 -- Have to do these shenanigans instead of hardcoding the stances/forms because the
281 -- the ordering varies if the character is missing a form. For warriors 281 -- ordering varies if the character is missing a form. For warriors this is rarely
282 -- this is rarely a problem (c'mon, who actually skips the level 10 def stance quest?) 282 -- a problem (c'mon, who actually skips the level 10 def stance quest?) but for druids
283 -- but for druids it can be. Some people never bother to do the aquatic form quest 283 -- it can be. Some people never bother to do the aquatic form quest until well past
284 -- until well past when they get cat form, and stance 5/6 can be flight, tree, or moonkin 284 -- when they get cat form, and stance 5/6 can be flight, tree, or moonkin depending
285 -- depending on talents. 285 -- on talents.
286 function InitRules() 286 function InitRules()
287 local forms = { } 287 local forms = { }
288 -- sort by icon since it's locale-independent 288 -- sort by icon since it's locale-independent
289 for i = 1, GetNumShapeshiftForms() do 289 for i = 1, GetNumShapeshiftForms() do
290 local icon = GetShapeshiftFormInfo(i) 290 local icon, name, active = GetShapeshiftFormInfo(i)
291 -- if it's the current form, the icon is wrong (Ability_Spell_WispSplode)
292 -- so capture it from the spell info directly
293 if active then
294 local _1, _2
295 _1, _2, icon = GetSpellInfo(name)
296 end
291 forms[icon] = i; 297 forms[icon] = i;
292 end 298 end
293 -- use 9 if not found since 9 is never a valid stance/form 299 -- use 9 if not found since 9 is never a valid stance/form
294 local defensive = forms["Interface\\Icons\\Ability_Warrior_DefensiveStance"] or 9 300 local defensive = forms["Interface\\Icons\\Ability_Warrior_DefensiveStance"] or 9
295 local berserker = forms["Interface\\Icons\\Ability_Racial_Avatar"] or 9 301 local berserker = forms["Interface\\Icons\\Ability_Racial_Avatar"] or 9
429 bars = { }, 435 bars = { },
430 } 436 }
431 } 437 }
432 ) 438 )
433 439
434 InitRules() 440 self:RegisterEvent("UPDATE_SHAPESHIFT_FORMS")
435 self:RegisterEvent("PLAYER_AURAS_CHANGED")
436 441
437 ReAction:RegisterBarOptionGenerator(self, "GetBarOptions") 442 ReAction:RegisterBarOptionGenerator(self, "GetBarOptions")
438 443
439 ReAction.RegisterCallback(self, "OnCreateBar","OnRefreshBar") 444 ReAction.RegisterCallback(self, "OnCreateBar","OnRefreshBar")
440 ReAction.RegisterCallback(self, "OnDestroyBar") 445 ReAction.RegisterCallback(self, "OnDestroyBar")
442 ReAction.RegisterCallback(self, "OnEraseBar") 447 ReAction.RegisterCallback(self, "OnEraseBar")
443 ReAction.RegisterCallback(self, "OnRenameBar") 448 ReAction.RegisterCallback(self, "OnRenameBar")
444 ReAction.RegisterCallback(self, "OnConfigModeChanged") 449 ReAction.RegisterCallback(self, "OnConfigModeChanged")
445 end 450 end
446 451
447 function module:PLAYER_AURAS_CHANGED() 452 function module:OnEnable()
448 self:UnregisterEvent("PLAYER_AURAS_CHANGED") 453 self:UPDATE_SHAPESHIFT_FORMS() -- it doesn't fire on a /reloadui
449 -- on login the number of stances is 0 until this event fires during the init sequence. 454 end
450 -- however if you just reload the UI the number of stances is correct immediately 455
451 -- and this event won't fire until you gain/lose buffs/debuffs, at which point you might 456 function module:UPDATE_SHAPESHIFT_FORMS()
452 -- be in combat. 457 -- Re-parse the rules table according to the new form list.
453 if not InCombatLockdown() then 458 -- This happens both at initial login (after PLAYER_ENTERING_WORLD)
454 InitRules() 459 -- as well as when gaining new abilities.
455 for name, bar in ReAction:IterateBars() do 460 InitRules()
456 self:OnRefreshBar(nil,bar,name) 461 for name, bar in ReAction:IterateBars() do
457 end 462 self:OnRefreshBar(nil,bar,name)
458 end 463 end
459 end 464 end
460 465
461 function module:OnRefreshBar(event, bar, name) 466 function module:OnRefreshBar(event, bar, name)
462 local c = self.db.profile.bars[name] 467 local c = self.db.profile.bars[name]