--[[ Combat Caller By Alex Brazie Automates Low-HP and Out-Of-Mana calls This was written for testing of the shared configuration module I'm writing. (But first, I need a module to configure!) ]]-- -- Modded by Arys 02-02-05 -- Changed limit sliders to move at 5% increments and range from 10%-90% -- Force a minimum cooldown of 1 second even when disabled -- These will be the values with checkboxes CombatCaller_HealthCall = true; CombatCaller_ManaCall = true; CombatCaller_Cooldown = true; -- These will be the variable variables. ;) CombatCaller_HealthRatio = .4; CombatCaller_HealthLimit = 100; CombatCaller_ManaRatio = .3; CombatCaller_ManaLimit = 150; CombatCaller_CooldownTime = 30; function CombatCaller_OnLoad() this:RegisterEvent("UNIT_HEALTH"); this:RegisterEvent("UNIT_MANA"); this:RegisterEvent("PLAYER_ENTER_COMBAT"); this:RegisterEvent("PLAYER_LEAVE_COMBAT"); this.hp = -1; this.mana = -1; this.lasthp = -1; this.lastmana = -1; this.InCombat = 0; this.IsGhost = 0; this.LastHPShout = 0; this.LastManaShout = 0; if ( UltimateUI_RegisterConfiguration ) then -- Register with the UltimateUIMaster UltimateUI_RegisterConfiguration( "UUI_COMCALLER", "SECTION", COMBATC_SEP, COMBATC_SEP_INFO ); UltimateUI_RegisterConfiguration( "UUI_COMCALLER_HEADER", "SEPARATOR", COMBATC_SEP, COMBATC_SEP_INFO ); UltimateUI_RegisterConfiguration( "UUI_COMCALLER_HEALTHSLIMIT", --CVar "BOTH", --Things to use COMBATC_HEALTH, --Simple String COMBATC_HEALTH_INFO, --Description CombatCaller_OnHealthConfigUpdate, --Callback 0, --Default Checked/Unchecked .2, --Default Value .1, --Min value .9, --Max value COMBATC_HEALTH_LIMIT, --Slider Text .05, --Slider Increment 1, --Slider state text on/off "\%", --Slider state text append 100 --Slider state text multiplier ); UltimateUI_RegisterConfiguration( "UUI_COMCALLER_MANASLIMIT", "BOTH", COMBATC_MANA, COMBATC_MANA_INFO, --Description CombatCaller_OnManaConfigUpdate, 0, .2, .1, .9, COMBATC_MANA_LIMIT, .05, 1, "\%", 100 ); UltimateUI_RegisterConfiguration( "UUI_COMCALLER_COOLDOWN", "SLIDER", COMBATC_COOL, COMBATC_COOL_INFO, --Description CombatCaller_OnCooldownUpdate, 1, 30, 1, 60, COMBATC_COOL_LIMIT, 1, 1, COMBATC_COOL_SEC, 1 ); end end function CombatCaller_OnEvent(event) if ( UnitIsDeadOrGhost("player") ) then this.IsGhost = 1; return; elseif ( this.IsGhost == 1 ) then this.hp = UnitHealth("player"); this.lasthp = this.hp; this.mana = UnitMana("player"); this.lastmana = this.mana; this.IsGhost = 0; this.InCombat = 0; return; end if (event == "PLAYER_ENTER_COMBAT") then this.InCombat = 1; elseif (event == "PLAYER_LEAVE_COMBAT") then this.InCombat = 0; end if( this.InCombat == 0 ) then return; end if ( event == "UNIT_HEALTH" ) then local ratio = UnitHealth("player")/UnitHealthMax("player"); local oldratio = this.lasthp/UnitHealthMax("player"); if ( (this.hp < this.lasthp) and (ratio < CombatCaller_HealthRatio) and (GetTime() - this.LastHPShout > CombatCaller_CooldownTime) and (oldratio > CombatCaller_HealthRatio)) then CombatCaller_ShoutLowHealth(); this.LastHPShout = GetTime(); end this.lasthp = this.hp; this.hp = UnitHealth("player"); end if ( event == "UNIT_MANA" ) then if(UnitPowerType("player") ~= 0) then this.lastmana = 0; else local ratio = UnitMana("player")/UnitManaMax("player"); local oldratio = this.lastmana/UnitManaMax("player"); if ( (this.mana < this.lastmana) and (ratio < CombatCaller_ManaRatio) and (GetTime() - this.LastManaShout > CombatCaller_CooldownTime) and (oldratio > CombatCaller_ManaRatio) ) then CombatCaller_ShoutLowMana(); this.LastManaShout = GetTime(); end this.lastmana = this.mana; this.mana = UnitMana("player"); end end end function CombatCaller_OnHealthConfigUpdate(toggle, value) if ( toggle == 0 ) then CombatCaller_HealthCall = false; else CombatCaller_HealthCall = true; CombatCaller_HealthRatio = value; end end function CombatCaller_OnManaConfigUpdate(toggle, value) if ( toggle == 0 ) then CombatCaller_ManaCall = false; else CombatCaller_ManaCall = true; CombatCaller_ManaRatio = value; end end function CombatCaller_OnCooldownUpdate(toggle, value) CombatCaller_Cooldown = true; CombatCaller_CooldownTime = value; end function CombatCaller_ShoutLowHealth() if ( CombatCaller_HealthCall and this.InCombat == 1 ) then DoEmote("HEALME"); end end function CombatCaller_ShoutLowMana() if ( CombatCaller_ManaCall and this.InCombat == 1 ) then DoEmote("OUTOFMANA"); end end function CombatCaller_TurnOff() CombatCaller_HealthCall = false; CombatCaller_ManaCall = false; end function CombatCaller_TurnOn() CombatCaller_HealthCall = true; CombatCaller_ManaCall = true; end