This commit is contained in:
Олег Цветков 2025-08-07 18:36:30 +03:00
parent 88aa521360
commit cd09e395a0

250
OBWT.lua
View File

@ -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
SlashCmdList['OBWT'] = tank
SlashCmdList['OBWF'] = dps
SlashCmdList['HYPE'] = throw
SLASH_OBWT1 = '/obwt'
SLASH_OBWF1 = '/obwf'
SLASH_HYPE1 = '/obw_throw'
end