diff --git a/OBWT.lua b/OBWT.lua index f7cd063..4ee456b 100644 --- a/OBWT.lua +++ b/OBWT.lua @@ -16,166 +16,200 @@ textures['Overpower'] = 'Ability_MeleeDamage' textures['Whirlwind'] = 'Ability_Whirlwind' textures['Bloodthirst'] = 'Spell_Nature_BloodLust' textures['Berserker Rage'] = 'Spell_Nature_AncestralGuardian' +textures['Berserking'] = 'Racial_Troll_Berserk' +textures['Throw'] = 'Ability_Throw' local function getTexture(spellName) - if textures[spellName] ~= nil then - return textures[spellName] - end - return false + if textures[spellName] ~= nil then + return textures[spellName] + end + return false end local function getSlot(spellTexture) - for i = 1, 120, 1 do - if GetActionTexture(i) ~= nil then - -- print(GetActionTexture(i)) - if(strfind(GetActionTexture(i), spellTexture)) then return i end - end - end - return 0 + for i = 1, 120, 1 do + if GetActionTexture(i) ~= nil then + -- print(GetActionTexture(i)) + if (strfind(GetActionTexture(i), spellTexture)) then + return i + end + end + end + return 0 end local function isUsable(spellName) - local spellTexture = getTexture(spellName) - if spellTexture then - local slot = getSlot(spellTexture) - local usable, _ = IsUsableAction(slot) - return usable - else - print(spellName) - return false - end + local spellTexture = getTexture(spellName) + if spellTexture then + local slot = getSlot(spellTexture) + local usable, _ = IsUsableAction(slot) + return usable + else + print(spellName) + return false + end end local function debuffIndex(spellTexture) - for i = 1, 40 do - local texturePath = UnitDebuff('target', i) - if texturePath ~= nil and strfind(texturePath, spellTexture) then return i end - end - return 0 + for i = 1, 40 do + local texturePath = UnitDebuff('target', i) + if texturePath ~= nil and strfind(texturePath, spellTexture) then + return i + end + end + return 0 end local function debuffStacks(spellName) - local spellTexture = getTexture(spellName) - if spellTexture then - local _, stacks = UnitDebuff('target', debuffIndex(spellTexture)) - if stacks == nill then return 0 else return stacks end - else - print(spellName) - return false - end + local spellTexture = getTexture(spellName) + if spellTexture then + local _, stacks = UnitDebuff('target', debuffIndex(spellTexture)) + if stacks == nill then + return 0 + else + return stacks + end + else + print(spellName) + return false + end end function onCooldown(spellName) - local spellID = 1 - local name, _ = GetSpellName(spellID, "BOOKTYPE_SPELL") - while (name) do - if spellName == name then - if GetSpellCooldown(spellID, "BOOKTYPE_SPELL") == 0 then - return false - else - return true - end - end - spellID = spellID + 1 - name, _ = GetSpellName(spellID, "BOOKTYPE_SPELL") - end + local spellID = 1 + local name, _ = GetSpellName(spellID, 'BOOKTYPE_SPELL') + while (name) do + if spellName == name then + if GetSpellCooldown(spellID, 'BOOKTYPE_SPELL') == 0 then + return false + else + return true + end + end + spellID = spellID + 1 + name, _ = GetSpellName(spellID, 'BOOKTYPE_SPELL') + end end local function cast(spellName) - CastSpellByName(spellName) + CastSpellByName(spellName) end local function panic() - if isUsable('Last Stand') and not onCooldown('Last Stand') then - cast('Last Stand') + if isUsable('Last Stand') and not onCooldown('Last Stand') then + cast('Last Stand') - elseif isUsable('Shield Wall') and not onCooldown('Shield Wall') then - cast('Shield Wall') - end + elseif isUsable('Shield Wall') and not onCooldown('Shield Wall') then + cast('Shield Wall') + end end local function tank(cmd) - local rage = UnitMana('player') - local health = UnitHealth('player') + local rage = UnitMana('player') + local health = UnitHealth('player') - if UnitExists('target') and UnitCanAttack('player','target') then - if (not PlayerFrame.inCombat) then AttackTarget() end + if UnitExists('target') and UnitCanAttack('player', 'target') then + if (not PlayerFrame.inCombat) then + AttackTarget() + end - if health < 400 then panic() end + if health < 400 then + panic() + end - if isUsable('Bloodrage') and not onCooldown('Bloodrage') and rage < 30 then - cast('Bloodrage') + if isUsable('Bloodrage') and not onCooldown('Bloodrage') and rage < 30 then + cast('Bloodrage') - elseif isUsable('Battle Shout') and not buffed('Battle Shout') then - cast('Battle Shout') + elseif isUsable('Battle Shout') and not buffed('Battle Shout') then + cast('Battle Shout') - elseif isUsable('Shield Bash') and not onCooldown('Shield Bash') then - cast('Shield Bash') + elseif isUsable('Shield Bash') and not onCooldown('Shield Bash') then + cast('Shield Bash') - elseif isUsable('Shield Slam') and not onCooldown('Shield Slam') then - cast('Shield Slam') + elseif isUsable('Shield Slam') and not onCooldown('Shield Slam') then + cast('Shield Slam') - elseif isUsable('Shield Block') and not onCooldown('Shield Block') and not buffed('Shield Block') then - cast('Shield Block') + elseif isUsable('Shield Block') and not onCooldown('Shield Block') and not buffed('Shield Block') then + cast('Shield Block') - elseif isUsable('Revange') and not onCooldown('Revange') then - cast('Revange') + elseif isUsable('Revange') and not onCooldown('Revange') then + cast('Revange') - elseif isUsable('Sunder Armor') and debuffStacks('Sunder Armor') < 5 then - cast('Sunder Armor') + elseif isUsable('Sunder Armor') and debuffStacks('Sunder Armor') < 5 then + cast('Sunder Armor') - elseif isUsable('Demoralizing Shout') and not buffed('Demoralizing Shout', 'target') then - cast('Demoralizing Shout') + elseif isUsable('Demoralizing Shout') and not buffed('Demoralizing Shout', 'target') then + cast('Demoralizing Shout') - elseif isUsable('Rend') and not buffed('Rend', 'target') and rage > 80 then - cast('Rend') + elseif isUsable('Rend') and not buffed('Rend', 'target') and rage > 80 then + cast('Rend') - elseif isUsable('Heroic Strike') and rage > 80 then - cast('Heroic Strike') - end - end + elseif isUsable('Heroic Strike') and rage > 80 then + cast('Heroic Strike') + end + end end local function dps(cmd) - local rage = UnitMana('player') - local health = UnitHealth('player') + local rage = UnitMana('player') + local health = UnitHealth('player') - if UnitExists('target') and UnitCanAttack('player','target') then - if (not PlayerFrame.inCombat) then AttackTarget() end + if UnitExists('target') and UnitCanAttack('player', 'target') then + if (not PlayerFrame.inCombat) then + AttackTarget() + end - if health < 400 then panic() end + if health < 400 then + panic() + end - if isUsable('Bloodrage') and not onCooldown('Bloodrage') and rage < 30 then - cast('Bloodrage') + if isUsable('Bloodrage') and not onCooldown('Bloodrage') and rage < 30 then + cast('Bloodrage') - elseif isUsable('Execute') and not onCooldown('Execute') and rage > 30 then - cast('Execute') + elseif isUsable('Execute') and not onCooldown('Execute') and rage > 30 then + cast('Execute') - elseif isUsable('Berserker Rage') and not onCooldown('Berserker Rage') then - cast('Berserker Rage') + elseif isUsable('Berserker Rage') and not onCooldown('Berserker Rage') then + cast('Berserker Rage') - elseif isUsable('Battle Shout') and not buffed('Battle Shout') then - cast('Battle Shout') + elseif isUsable('Battle Shout') and not buffed('Battle Shout') then + cast('Battle Shout') - - elseif isUsable('Sunder Armor') and debuffStacks('Sunder Armor') < 5 then - cast('Sunder Armor') + elseif isUsable('Sunder Armor') and debuffStacks('Sunder Armor') < 5 then + cast('Sunder Armor') - elseif isUsable('Bloodthirst') and not onCooldown('Bloodthirst') then - cast('Bloodthirst') + elseif isUsable('Bloodthirst') and not onCooldown('Bloodthirst') then + cast('Bloodthirst') - elseif isUsable('Whirlwind') and not onCooldown('Whirlwind') then - cast('Whirlwind') + elseif isUsable('Whirlwind') and not onCooldown('Whirlwind') then + cast('Whirlwind') - elseif isUsable('Heroic Strike') and rage > 80 then - cast('Heroic Strike') - end - end + elseif isUsable('Heroic Strike') and rage > 80 then + cast('Heroic Strike') + end + end +end + +local function throw(cmd) + local rage = UnitMana('player') + local health = UnitHealth('player') + + if GetUnitName('target') == nil then + TargetNearestEnemy() + end + if GetUnitName('target') ~= nil and CheckInteractDistance('target', 4) == 1 and CheckInteractDistance('target', 1) == + nil then + cast("Throw") + else + ClearTarget(); + end end function OBWT_OnLoad() - SlashCmdList["OBWT"] = tank - SlashCmdList["OBWF"] = dps - SLASH_OBWT1 = "/obwt" - SLASH_OBWF1 = "/obwf" -end \ No newline at end of file + SlashCmdList['OBWT'] = tank + SlashCmdList['OBWF'] = dps + SlashCmdList['HYPE'] = throw + SLASH_OBWT1 = '/obwt' + SLASH_OBWF1 = '/obwf' + SLASH_HYPE1 = '/obw_throw' +end