-
Notifications
You must be signed in to change notification settings - Fork 5
/
hero_selection.lua
135 lines (115 loc) · 3.41 KB
/
hero_selection.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
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
-------------------------------------------------------------------------------
--- AUTHOR: Nostrademous
--- GITHUB REPO: https://github.com/Nostrademous/Dota2-WebAI
-------------------------------------------------------------------------------
function InTable (tab, val)
if not tab then return false end
for index, value in ipairs (tab) do
if value == val then
return true
end
end
return false
end
local Pos_1_Pool = {
"npc_dota_hero_antimage"
}
local Pos_2_Pool = {
--"npc_dota_hero_invoker",
"npc_dota_hero_lina"
}
local Pos_3_Pool = {
"npc_dota_hero_viper"
}
local Pos_4_Pool = {
}
local Pos_5_Pool = {
"npc_dota_hero_crystal_maiden"
}
-- roamers, junglers
local Pos_X_Pool = {
"npc_dota_hero_bloodseeker"
}
local BotPool = {
Pos_1_Pool, -- hard carry
Pos_5_Pool, -- hard support
{unpack(Pos_4_Pool), unpack(Pos_X_Pool)}, -- semi-support, roamer, jungler
Pos_2_Pool, -- mid
Pos_3_Pool -- offlane
}
local BotPool2 = {
Pos_1_Pool, -- hard carry
Pos_5_Pool, -- hard support
{unpack(Pos_4_Pool), unpack(Pos_X_Pool)}, -- semi-support, roamer, jungler
Pos_2_Pool, -- mid
Pos_3_Pool -- offlane
}
local chosenHeroes = {}
local function HumansReady()
local numHumans = 0
local numHumansReady = 0
local IDs = GetTeamPlayers(GetTeam())
for index, id in pairs(IDs) do
if not IsPlayerBot(id) then
local humanBotName = GetSelectedHeroName(id)
numHumans = numHumans + 1
-- check bot name to see if human made selection
if humanBotName ~= "" then
numHumansReady = numHumansReady + 1
end
end
end
return numHumansReady == numHumans
end
function Think()
gs = GetGameState()
--print( "game state: ", gs )
if ( gs == GAME_STATE_HERO_SELECTION ) then
a = GetGameMode()
if ( a == GAMEMODE_AP ) then
--print ( "All Pick" )
if GameTime() < 45 and not HumansReady() then
return
end
local IDs = GetTeamPlayers(GetTeam())
for index, id in pairs(IDs) do
if IsPlayerBot(id) and IsPlayerInHeroSelectionControl(id) and GetSelectedHeroName(id) == "" then
local pool = nil
if GetTeam() == TEAM_RADIANT then
pool = BotPool
else
pool = BotPool2
end
local sizeOfPool = #pool[index]
for j = 1, sizeOfPool do
randomHero = pool[index][RandomInt(1, sizeOfPool)]
if not InTable(chosenHeroes, randomHero) then
table.insert(chosenHeroes, randomHero)
SelectHero(id, randomHero)
break
end
end
end
end
end
end
end
function UpdateLaneAssignments()
if ( GetTeam() == TEAM_RADIANT ) then
return {
[1] = LANE_BOT,
[2] = LANE_BOT,
[3] = LANE_BOT,
[4] = LANE_MID,
[5] = LANE_TOP,
}
elseif ( GetTeam() == TEAM_DIRE ) then
return {
[1] = LANE_TOP,
[2] = LANE_TOP,
[3] = LANE_TOP,
[4] = LANE_MID,
[5] = LANE_BOT,
}
end
end