-
Notifications
You must be signed in to change notification settings - Fork 0
/
showBkb.lua
77 lines (63 loc) · 2.39 KB
/
showBkb.lua
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
local showBkb = {}
showBkb.heroes = {}
local localPlayer = {}
local bkbImage = Renderer.LoadImage('panorama/images/items/black_king_bar_png.vtex_c')
local path = {'Custom', 'Show BKB'}
local settings = {}
local gameTimeFunction = GameRules.GetGameTime
showBkb.checkTimer = 0
showBkb.checkTimerInterval = 0.5
showBkb.enabled = Menu.AddOptionBool(path, 'Enabled', false)
showBkb.offsetX = Menu.AddOptionSlider(path, 'Offset X', -200, 200, 0)
showBkb.offsetY = Menu.AddOptionSlider(path, 'Offset Y', -200, 200, 25)
local function initVariables()
localPlayer.player = Players.GetLocal()
localPlayer.team = Entity.GetTeamNum(localPlayer.player)
showBkb.checkTimer = gameTimeFunction() + showBkb.checkTimerInterval
settings.offsetX = Menu.GetValue(showBkb.offsetX)
settings.offsetY = Menu.GetValue(showBkb.offsetY)
end
initVariables()
local function drawBkbState(id, vecPos)
local x, y, visible = Renderer.WorldToScreen(vecPos)
if not visible then return end
if showBkb.heroes[id] == nil then return end
if showBkb.heroes[id] ~= 0 then return end
Renderer.SetDrawColor(255, 255, 255)
Renderer.DrawImage(bkbImage, x + settings.offsetX, y + settings.offsetY, 25, 20)
end
local function updateBkbs()
showBkb.heroes = {}
for id, hero in pairs(Heroes.GetAll()) do
if localPlayer.team ~= Entity.GetTeamNum(hero)
and Entity.IsAlive(hero)
and NPC.HasItem(hero, 'item_black_king_bar')
and NPC.IsVisible(hero)
and (not NPC.IsIllusion(hero) or NPC.GetUnitName(hero) == 'npc_dota_hero_arc_warden' )
then
showBkb.heroes[id] = Ability.GetCooldown(NPC.GetItem(hero, 'item_black_king_bar'))
end
end
end
function showBkb.OnGameStart()
initVariables()
end
function showBkb.OnUpdate()
if not Menu.IsEnabled(showBkb.enabled) then return end
local gameTime = gameTimeFunction()
if showBkb.checkTimer < gameTime then
showBkb.checkTimer = gameTime + showBkb.checkTimerInterval
settings.offsetX = Menu.GetValue(showBkb.offsetX)
settings.offsetY = Menu.GetValue(showBkb.offsetY)
updateBkbs()
end
end
function showBkb.OnDraw()
if not Menu.IsEnabled(showBkb.enabled) then return end
for id, hero in pairs(Heroes.GetAll()) do
if localPlayer.team ~= Entity.GetTeamNum(hero) then
drawBkbState(id, Entity.GetAbsOrigin(hero))
end
end
end
return showBkb