Nostrademous / Dota2-FullOverwrite

Work in progress for a full-overwrite Dota 2 bot framework
GNU General Public License v3.0
97 stars 42 forks source link

Know Our Enemies #197

Open Nostrademous opened 7 years ago

Nostrademous commented 7 years ago

I am thinking of writing a module to help set various global variable attributes for out bots to know about.

Things that they should watch out for, like for example, clustering when the enemy team has an enigma or lich or warlock, sticking around and waiting for Omni's Ult to expire rather than kiting/running-away while it's up, understanding of what stuns the opposition has, knowing what to do with minions like Enigma's eidolons, beastmaster boar/hawk, arc warden's double, understandings how to swap Bane's nightmare, etc. etc., etc.

I'm think of doing this in a dynamic fashion, rather than hardcoding logic for each possible hero and checking a large table.

We'll see.

Nostrademous commented 7 years ago

starting to add some variables/members to enemy_info.lua

Nostrademous commented 7 years ago

enemies have a guessed "lane" that they are in based on proximity to the lane they were last seen. -1 means unknown.

This should start getting us an overall picture of who is where and doing what.

CsharpNoobDude commented 7 years ago

Check this out, I found this file on the steam workshop.

-- generic database

local X = {}


-- ["carry"] will become more useful later in the game if they gain a significant gold advantage. -- ["durable"] has the ability to last longer in teamfights. -- ["support"] can focus less on amassing gold and items, and more on using their abilities to gain an advantage for the team. -- ["escape"] has the ability to quickly avoid death. -- ["nuker"] can quickly kill enemy heroes using high damage spells with low cooldowns. -- ["pusher"] can quickly siege and destroy towers and barracks at all points of the game. -- ["disabler"] has a guaranteed disable for one or more of their spells. -- ["initiator"] good at starting a teamfight. -- ["jungler"] can farm effectively from neutral creeps inside the jungle early in the game.

X["hero_roles"] = { ["npc_dota_hero_abaddon"] = { ['carry'] = 1, ['disabler'] = 0, ['durable'] = 2, ['escape'] = 0, ['initiator'] = 0, ['jungler'] = 0, ['nuker'] = 0, ['support'] = 2, ['pusher'] = 0 },

["npc_dota_hero_alchemist"] = {
    ['carry'] = 2,
    ['disabler'] = 1,
    ['durable'] = 2,
    ['escape'] = 0,
    ['initiator'] = 1,
    ['jungler'] = 0,
    ['nuker'] = 1,
    ['support'] = 1,
    ['pusher'] = 0
},

["npc_dota_hero_axe"] = {
    ['carry'] = 0,
    ['disabler'] = 2,
    ['durable'] = 3,
    ['escape'] = 0,
    ['initiator'] = 3,
    ['jungler'] = 2,
    ['nuker'] = 0,
    ['support'] = 0,
    ['pusher'] = 0
},

["npc_dota_hero_beastmaster"] = {
    ['carry'] = 0,
    ['disabler'] = 2,
    ['durable'] = 2,
    ['escape'] = 0,
    ['initiator'] = 2,
    ['jungler'] = 0,
    ['nuker'] = 1,
    ['support'] = 0,
    ['pusher'] = 0
},

["npc_dota_hero_brewmaster"] = {
    ['carry'] = 1,
    ['disabler'] = 2,
    ['durable'] = 2,
    ['escape'] = 0,
    ['initiator'] = 3,
    ['jungler'] = 0,
    ['nuker'] = 1,
    ['support'] = 0,
    ['pusher'] = 0
},

["npc_dota_hero_bristleback"] = {
    ['carry'] = 2,
    ['disabler'] = 0,
    ['durable'] = 3,
    ['escape'] = 0,
    ['initiator'] = 1,
    ['jungler'] = 0,
    ['nuker'] = 1,
    ['support'] = 0,
    ['pusher'] = 0
},

["npc_dota_hero_centaur"] = {
    ['carry'] = 0,
    ['disabler'] = 1,
    ['durable'] = 3,
    ['escape'] = 0,
    ['initiator'] = 3,
    ['jungler'] = 0,
    ['nuker'] = 1,
    ['support'] = 0,
    ['pusher'] = 0
},

["npc_dota_hero_chaos_knight"] = {
    ['carry'] = 3,
    ['disabler'] = 2,
    ['durable'] = 2,
    ['escape'] = 0,
    ['initiator'] = 1,
    ['jungler'] = 0,
    ['nuker'] = 0,
    ['support'] = 0,
    ['pusher'] = 2
},

["npc_dota_hero_rattletrap"] = {
    ['carry'] = 0,
    ['disabler'] = 2,
    ['durable'] = 1,
    ['escape'] = 0,
    ['initiator'] = 3,
    ['jungler'] = 0,
    ['nuker'] = 1,
    ['support'] = 0,
    ['pusher'] = 0
},

["npc_dota_hero_doom_bringer"] = {
    ['carry'] = 1,
    ['disabler'] = 2,
    ['durable'] = 2,
    ['escape'] = 0,
    ['initiator'] = 2,
    ['jungler'] = 0,
    ['nuker'] = 0,
    ['support'] = 0,
    ['pusher'] = 0
},

["npc_dota_hero_dragon_knight"] = {
    ['carry'] = 2,
    ['disabler'] = 2,
    ['durable'] = 2,
    ['escape'] = 0,
    ['initiator'] = 1,
    ['jungler'] = 0,
    ['nuker'] = 1,
    ['support'] = 0,
    ['pusher'] = 3
},

["npc_dota_hero_earth_spirit"] = {
    ['carry'] = 0,
    ['disabler'] = 1,
    ['durable'] = 1,
    ['escape'] = 2,
    ['initiator'] = 1,
    ['jungler'] = 0,
    ['nuker'] = 2,
    ['support'] = 0,
    ['pusher'] = 0
},

["npc_dota_hero_earthshaker"] = {
    ['carry'] = 0,
    ['disabler'] = 2,
    ['durable'] = 0,
    ['escape'] = 0,
    ['initiator'] = 3,
    ['jungler'] = 0,
    ['nuker'] = 1,
    ['support'] = 1,
    ['pusher'] = 0
},

["npc_dota_hero_elder_titan"] = {
    ['carry'] = 0,
    ['disabler'] = 1,
    ['durable'] = 1,
    ['escape'] = 0,
    ['initiator'] = 2,
    ['jungler'] = 0,
    ['nuker'] = 1,
    ['support'] = 0,
    ['pusher'] = 0
},

["npc_dota_hero_huskar"] = {
    ['carry'] = 2,
    ['disabler'] = 0,
    ['durable'] = 2,
    ['escape'] = 0,
    ['initiator'] = 1,
    ['jungler'] = 0,
    ['nuker'] = 0,
    ['support'] = 0,
    ['pusher'] = 0
},

["npc_dota_hero_wisp"] = {
    ['carry'] = 0,
    ['disabler'] = 0,
    ['durable'] = 0,
    ['escape'] = 2,
    ['initiator'] = 0,
    ['jungler'] = 0,
    ['nuker'] = 1,
    ['support'] = 3,
    ['pusher'] = 0
},

["npc_dota_hero_kunkka"] = {
    ['carry'] = 1,
    ['disabler'] = 1,
    ['durable'] = 1,
    ['escape'] = 0,
    ['initiator'] = 1,
    ['jungler'] = 0,
    ['nuker'] = 1,
    ['support'] = 0,
    ['pusher'] = 0
},

["npc_dota_hero_legion_commander"] = {
    ['carry'] = 1,
    ['disabler'] = 2,
    ['durable'] = 1,
    ['escape'] = 0,
    ['initiator'] = 1,
    ['jungler'] = 0,
    ['nuker'] = 1,
    ['support'] = 0,
    ['pusher'] = 0
},

["npc_dota_hero_life_stealer"] = {
    ['carry'] = 2,
    ['disabler'] = 1,
    ['durable'] = 2,
    ['escape'] = 1,
    ['initiator'] = 0,
    ['jungler'] = 1,
    ['nuker'] = 0,
    ['support'] = 0,
    ['pusher'] = 0
},

["npc_dota_hero_lycan"] = {
    ['carry'] = 2,
    ['disabler'] = 0,
    ['durable'] = 1,
    ['escape'] = 1,
    ['initiator'] = 0,
    ['jungler'] = 1,
    ['nuker'] = 0,
    ['support'] = 0,
    ['pusher'] = 3
},

["npc_dota_hero_magnataur"] = {
    ['carry'] = 0,
    ['disabler'] = 2,
    ['durable'] = 0,
    ['escape'] = 1,
    ['initiator'] = 3,
    ['jungler'] = 0,
    ['nuker'] = 1,
    ['support'] = 0,
    ['pusher'] = 0
},

["npc_dota_hero_night_stalker"] = {
    ['carry'] = 1,
    ['disabler'] = 2,
    ['durable'] = 2,
    ['escape'] = 0,
    ['initiator'] = 2,
    ['jungler'] = 0,
    ['nuker'] = 1,
    ['support'] = 0,
    ['pusher'] = 0
},

["npc_dota_hero_omniknight"] = {
    ['carry'] = 0,
    ['disabler'] = 0,
    ['durable'] = 1,
    ['escape'] = 0,
    ['initiator'] = 0,
    ['jungler'] = 0,
    ['nuker'] = 1,
    ['support'] = 2,
    ['pusher'] = 0
},

["npc_dota_hero_phoenix"] = {
    ['carry'] = 0,
    ['disabler'] = 1,
    ['durable'] = 0,
    ['escape'] = 2,
    ['initiator'] = 2,
    ['jungler'] = 0,
    ['nuker'] = 3,
    ['support'] = 1,
    ['pusher'] = 0
},

["npc_dota_hero_pudge"] = {
    ['carry'] = 0,
    ['disabler'] = 2,
    ['durable'] = 2,
    ['escape'] = 0,
    ['initiator'] = 2,
    ['jungler'] = 0,
    ['nuker'] = 1,
    ['support'] = 0,
    ['pusher'] = 0
},

["npc_dota_hero_sand_king"] = {
    ['carry'] = 0,
    ['disabler'] = 2,
    ['durable'] = 0,
    ['escape'] = 2,
    ['initiator'] = 3,
    ['jungler'] = 1,
    ['nuker'] = 2,
    ['support'] = 0,
    ['pusher'] = 0
},

["npc_dota_hero_slardar"] = {
    ['carry'] = 2,
    ['disabler'] = 1,
    ['durable'] = 2,
    ['escape'] = 1,
    ['initiator'] = 2,
    ['jungler'] = 0,
    ['nuker'] = 0,
    ['support'] = 0,
    ['pusher'] = 0
},

["npc_dota_hero_spirit_breaker"] = {
    ['carry'] = 1,
    ['disabler'] = 2,
    ['durable'] = 2,
    ['escape'] = 1,
    ['initiator'] = 2,
    ['jungler'] = 0,
    ['nuker'] = 0,
    ['support'] = 0,
    ['pusher'] = 0
},

["npc_dota_hero_sven"] = {
    ['carry'] = 2,
    ['disabler'] = 2,
    ['durable'] = 2,
    ['escape'] = 0,
    ['initiator'] = 2,
    ['jungler'] = 0,
    ['nuker'] = 1,
    ['support'] = 0,
    ['pusher'] = 0
},

["npc_dota_hero_tidehunter"] = {
    ['carry'] = 0,
    ['disabler'] = 2,
    ['durable'] = 3,
    ['escape'] = 0,
    ['initiator'] = 3,
    ['jungler'] = 0,
    ['nuker'] = 1,
    ['support'] = 0,
    ['pusher'] = 0
},

["npc_dota_hero_shredder"] = {
    ['carry'] = 0,
    ['disabler'] = 0,
    ['durable'] = 2,
    ['escape'] = 2,
    ['initiator'] = 0,
    ['jungler'] = 0,
    ['nuker'] = 3,
    ['support'] = 0,
    ['pusher'] = 0
},

["npc_dota_hero_tiny"] = {
    ['carry'] = 3,
    ['disabler'] = 1,
    ['durable'] = 2,
    ['escape'] = 0,
    ['initiator'] = 2,
    ['jungler'] = 0,
    ['nuker'] = 2,
    ['support'] = 0,
    ['pusher'] = 2
},

["npc_dota_hero_treant"] = {
    ['carry'] = 0,
    ['disabler'] = 1,
    ['durable'] = 1,
    ['escape'] = 1,
    ['initiator'] = 2,
    ['jungler'] = 0,
    ['nuker'] = 0,
    ['support'] = 3,
    ['pusher'] = 0
},

["npc_dota_hero_tusk"] = {
    ['carry'] = 0,
    ['disabler'] = 2,
    ['durable'] = 0,
    ['escape'] = 0,
    ['initiator'] = 2,
    ['jungler'] = 0,
    ['nuker'] = 1,
    ['support'] = 0,
    ['pusher'] = 0
},

["npc_dota_hero_abyssal_underlord"] = {
    ['carry'] = 0,
    ['disabler'] = 1,
    ['durable'] = 1,
    ['escape'] = 2,
    ['initiator'] = 0,
    ['jungler'] = 0,
    ['nuker'] = 1,
    ['support'] = 1,
    ['pusher'] = 0
},

["npc_dota_hero_undying"] = {
    ['carry'] = 0,
    ['disabler'] = 1,
    ['durable'] = 2,
    ['escape'] = 0,
    ['initiator'] = 0,
    ['jungler'] = 0,
    ['nuker'] = 1,
    ['support'] = 1,
    ['pusher'] = 0
},

["npc_dota_hero_skeleton_king"] = {
    ['carry'] = 2,
    ['disabler'] = 2,
    ['durable'] = 3,
    ['escape'] = 0,
    ['initiator'] = 1,
    ['jungler'] = 0,
    ['nuker'] = 0,
    ['support'] = 1,
    ['pusher'] = 0
},

["npc_dota_hero_antimage"] = {
    ['carry'] = 3,
    ['disabler'] = 0,
    ['durable'] = 0,
    ['escape'] = 3,
    ['initiator'] = 0,
    ['jungler'] = 0,
    ['nuker'] = 1,
    ['support'] = 0,
    ['pusher'] = 0
},

["npc_dota_hero_arc_warden"] = {
    ['carry'] = 3,
    ['disabler'] = 0,
    ['durable'] = 0,
    ['escape'] = 3,
    ['initiator'] = 0,
    ['jungler'] = 0,
    ['nuker'] = 1,
    ['support'] = 0,
    ['pusher'] = 0
},

["npc_dota_hero_bloodseeker"] = {
    ['carry'] = 1,
    ['disabler'] = 1,
    ['durable'] = 0,
    ['escape'] = 0,
    ['initiator'] = 1,
    ['jungler'] = 1,
    ['nuker'] = 1,
    ['support'] = 0,
    ['pusher'] = 0
},

["npc_dota_hero_bounty_hunter"] = {
    ['carry'] = 0,
    ['disabler'] = 0,
    ['durable'] = 0,
    ['escape'] = 2,
    ['initiator'] = 0,
    ['jungler'] = 0,
    ['nuker'] = 1,
    ['support'] = 0,
    ['pusher'] = 0
},

["npc_dota_hero_broodmother"] = {
    ['carry'] = 1,
    ['disabler'] = 1,
    ['durable'] = 0,
    ['escape'] = 3,
    ['initiator'] = 0,
    ['jungler'] = 0,
    ['nuker'] = 1,
    ['support'] = 0,
    ['pusher'] = 3
},

["npc_dota_hero_clinkz"] = {
    ['carry'] = 2,
    ['disabler'] = 0,
    ['durable'] = 0,
    ['escape'] = 3,
    ['initiator'] = 0,
    ['jungler'] = 0,
    ['nuker'] = 1,
    ['support'] = 0,
    ['pusher'] = 1
},

["npc_dota_hero_drow_ranger"] = {
    ['carry'] = 2,
    ['disabler'] = 1,
    ['durable'] = 0,
    ['escape'] = 0,
    ['initiator'] = 0,
    ['jungler'] = 0,
    ['nuker'] = 0,
    ['support'] = 0,
    ['pusher'] = 0
},

["npc_dota_hero_ember_spirit"] = {
    ['carry'] = 2,
    ['disabler'] = 1,
    ['durable'] = 0,
    ['escape'] = 3,
    ['initiator'] = 1,
    ['jungler'] = 0,
    ['nuker'] = 1,
    ['support'] = 0,
    ['pusher'] = 0
},

["npc_dota_hero_faceless_void"] = {
    ['carry'] = 2,
    ['disabler'] = 2,
    ['durable'] = 1,
    ['escape'] = 1,
    ['initiator'] = 3,
    ['jungler'] = 0,
    ['nuker'] = 0,
    ['support'] = 0,
    ['pusher'] = 0
},

["npc_dota_hero_gyrocopter"] = {
    ['carry'] = 3,
    ['disabler'] = 1,
    ['durable'] = 0,
    ['escape'] = 0,
    ['initiator'] = 0,
    ['jungler'] = 0,
    ['nuker'] = 1,
    ['support'] = 0,
    ['pusher'] = 0
},

["npc_dota_hero_juggernaut"] = {
    ['carry'] = 2,
    ['disabler'] = 0,
    ['durable'] = 0,
    ['escape'] = 1,
    ['initiator'] = 0,
    ['jungler'] = 0,
    ['nuker'] = 0,
    ['support'] = 0,
    ['pusher'] = 1
},

["npc_dota_hero_lone_druid"] = {
    ['carry'] = 2,
    ['disabler'] = 0,
    ['durable'] = 1,
    ['escape'] = 0,
    ['initiator'] = 0,
    ['jungler'] = 1,
    ['nuker'] = 0,
    ['support'] = 0,
    ['pusher'] = 3
},

["npc_dota_hero_luna"] = {
    ['carry'] = 2,
    ['disabler'] = 0,
    ['durable'] = 0,
    ['escape'] = 0,
    ['initiator'] = 0,
    ['jungler'] = 0,
    ['nuker'] = 2,
    ['support'] = 0,
    ['pusher'] = 0
},

["npc_dota_hero_medusa"] = {
    ['carry'] = 3,
    ['disabler'] = 1,
    ['durable'] = 1,
    ['escape'] = 0,
    ['initiator'] = 0,
    ['jungler'] = 0,
    ['nuker'] = 0,
    ['support'] = 0,
    ['pusher'] = 0
},

["npc_dota_hero_meepo"] = {
    ['carry'] = 2,
    ['disabler'] = 1,
    ['durable'] = 0,
    ['escape'] = 2,
    ['initiator'] = 1,
    ['jungler'] = 0,
    ['nuker'] = 2,
    ['support'] = 0,
    ['pusher'] = 1
},

["npc_dota_hero_mirana"] = {
    ['carry'] = 1,
    ['disabler'] = 1,
    ['durable'] = 0,
    ['escape'] = 2,
    ['initiator'] = 0,
    ['jungler'] = 0,
    ['nuker'] = 1,
    ['support'] = 1,
    ['pusher'] = 0
},

["npc_dota_hero_monkey_king"] = {
    ['carry'] = 2,
    ['disabler'] = 1,
    ['durable'] = 0,
    ['escape'] = 2,
    ['initiator'] = 1,
    ['jungler'] = 0,
    ['nuker'] = 0,
    ['support'] = 0,
    ['pusher'] = 0
},

["npc_dota_hero_morphling"] = {
    ['carry'] = 3,
    ['disabler'] = 1,
    ['durable'] = 2,
    ['escape'] = 3,
    ['initiator'] = 0,
    ['jungler'] = 0,
    ['nuker'] = 1,
    ['support'] = 0,
    ['pusher'] = 0
},

["npc_dota_hero_naga_siren"] = {
    ['carry'] = 3,
    ['disabler'] = 2,
    ['durable'] = 0,
    ['escape'] = 1,
    ['initiator'] = 1,
    ['jungler'] = 0,
    ['nuker'] = 0,
    ['support'] = 1,
    ['pusher'] = 2
},

["npc_dota_hero_nyx_assassin"] = {
    ['carry'] = 0,
    ['disabler'] = 2,
    ['durable'] = 0,
    ['escape'] = 1,
    ['initiator'] = 2,
    ['jungler'] = 0,
    ['nuker'] = 2,
    ['support'] = 0,
    ['pusher'] = 0
},

["npc_dota_hero_phantom_assassin"] = {
    ['carry'] = 3,
    ['disabler'] = 0,
    ['durable'] = 0,
    ['escape'] = 1,
    ['initiator'] = 0,
    ['jungler'] = 0,
    ['nuker'] = 0,
    ['support'] = 0,
    ['pusher'] = 0
},

["npc_dota_hero_phantom_lancer"] = {
    ['carry'] = 2,
    ['disabler'] = 0,
    ['durable'] = 0,
    ['escape'] = 2,
    ['initiator'] = 0,
    ['jungler'] = 0,
    ['nuker'] = 1,
    ['support'] = 0,
    ['pusher'] = 1
},

["npc_dota_hero_razor"] = {
    ['carry'] = 2,
    ['disabler'] = 0,
    ['durable'] = 2,
    ['escape'] = 0,
    ['initiator'] = 0,
    ['jungler'] = 0,
    ['nuker'] = 1,
    ['support'] = 0,
    ['pusher'] = 0
},

["npc_dota_hero_riki"] = {
    ['carry'] = 2,
    ['disabler'] = 1,
    ['durable'] = 0,
    ['escape'] = 2,
    ['initiator'] = 0,
    ['jungler'] = 0,
    ['nuker'] = 0,
    ['support'] = 0,
    ['pusher'] = 0
},

["npc_dota_hero_nevermore"] = {
    ['carry'] = 2,
    ['disabler'] = 0,
    ['durable'] = 0,
    ['escape'] = 0,
    ['initiator'] = 0,
    ['jungler'] = 0,
    ['nuker'] = 3,
    ['support'] = 0,
    ['pusher'] = 0
},

["npc_dota_hero_slark"] = {
    ['carry'] = 2,
    ['disabler'] = 1,
    ['durable'] = 0,
    ['escape'] = 0,
    ['initiator'] = 0,
    ['jungler'] = 0,
    ['nuker'] = 1,
    ['support'] = 0,
    ['pusher'] = 0
},

["npc_dota_hero_sniper"] = {
    ['carry'] = 2,
    ['disabler'] = 0,
    ['durable'] = 0,
    ['escape'] = 0,
    ['initiator'] = 0,
    ['jungler'] = 0,
    ['nuker'] = 1,
    ['support'] = 0,
    ['pusher'] = 0
},

["npc_dota_hero_spectre"] = {
    ['carry'] = 3,
    ['disabler'] = 0,
    ['durable'] = 1,
    ['escape'] = 1,
    ['initiator'] = 0,
    ['jungler'] = 0,
    ['nuker'] = 0,
    ['support'] = 0,
    ['pusher'] = 0
},

["npc_dota_hero_templar_assassin"] = {
    ['carry'] = 2,
    ['disabler'] = 0,
    ['durable'] = 0,
    ['escape'] = 1,
    ['initiator'] = 0,
    ['jungler'] = 0,
    ['nuker'] = 0,
    ['support'] = 0,
    ['pusher'] = 0
},

["npc_dota_hero_terrorblade"] = {
    ['carry'] = 3,
    ['disabler'] = 0,
    ['durable'] = 0,
    ['escape'] = 0,
    ['initiator'] = 0,
    ['jungler'] = 0,
    ['nuker'] = 1,
    ['support'] = 0,
    ['pusher'] = 2
},

["npc_dota_hero_troll_warlord"] = {
    ['carry'] = 3,
    ['disabler'] = 1,
    ['durable'] = 1,
    ['escape'] = 0,
    ['initiator'] = 0,
    ['jungler'] = 0,
    ['nuker'] = 0,
    ['support'] = 0,
    ['pusher'] = 1
},

["npc_dota_hero_ursa"] = {
    ['carry'] = 2,
    ['disabler'] = 1,
    ['durable'] = 1,
    ['escape'] = 0,
    ['initiator'] = 0,
    ['jungler'] = 1,
    ['nuker'] = 0,
    ['support'] = 0,
    ['pusher'] = 0
},

["npc_dota_hero_vengefulspirit"] = {
    ['carry'] = 0,
    ['disabler'] = 2,
    ['durable'] = 0,
    ['escape'] = 1,
    ['initiator'] = 2,
    ['jungler'] = 0,
    ['nuker'] = 1,
    ['support'] = 3,
    ['pusher'] = 0
},

["npc_dota_hero_venomancer"] = {
    ['carry'] = 0,
    ['disabler'] = 1,
    ['durable'] = 0,
    ['escape'] = 0,
    ['initiator'] = 1,
    ['jungler'] = 0,
    ['nuker'] = 1,
    ['support'] = 2,
    ['pusher'] = 1
},

["npc_dota_hero_viper"] = {
    ['carry'] = 1,
    ['disabler'] = 1,
    ['durable'] = 2,
    ['escape'] = 0,
    ['initiator'] = 1,
    ['jungler'] = 0,
    ['nuker'] = 0,
    ['support'] = 0,
    ['pusher'] = 0
},

["npc_dota_hero_weaver"] = {
    ['carry'] = 2,
    ['disabler'] = 0,
    ['durable'] = 0,
    ['escape'] = 3,
    ['initiator'] = 0,
    ['jungler'] = 0,
    ['nuker'] = 0,
    ['support'] = 0,
    ['pusher'] = 0
},

["npc_dota_hero_ancient_apparition"] = {
    ['carry'] = 0,
    ['disabler'] = 1,
    ['durable'] = 0,
    ['escape'] = 0,
    ['initiator'] = 0,
    ['jungler'] = 0,
    ['nuker'] = 1,
    ['support'] = 2,
    ['pusher'] = 0
},

["npc_dota_hero_bane"] = {
    ['carry'] = 0,
    ['disabler'] = 3,
    ['durable'] = 1,
    ['escape'] = 0,
    ['initiator'] = 0,
    ['jungler'] = 0,
    ['nuker'] = 1,
    ['support'] = 2,
    ['pusher'] = 0
},

["npc_dota_hero_batrider"] = {
    ['carry'] = 0,
    ['disabler'] = 2,
    ['durable'] = 0,
    ['escape'] = 1,
    ['initiator'] = 3,
    ['jungler'] = 2,
    ['nuker'] = 0,
    ['support'] = 0,
    ['pusher'] = 0
},

["npc_dota_hero_chen"] = {
    ['carry'] = 0,
    ['disabler'] = 0,
    ['durable'] = 0,
    ['escape'] = 0,
    ['initiator'] = 0,
    ['jungler'] = 3,
    ['nuker'] = 0,
    ['support'] = 2,
    ['pusher'] = 2
},

["npc_dota_hero_crystal_maiden"] = {
    ['carry'] = 0,
    ['disabler'] = 2,
    ['durable'] = 0,
    ['escape'] = 0,
    ['initiator'] = 0,
    ['jungler'] = 1,
    ['nuker'] = 2,
    ['support'] = 3,
    ['pusher'] = 0
},

["npc_dota_hero_dark_seer"] = {
    ['carry'] = 0,
    ['disabler'] = 1,
    ['durable'] = 0,
    ['escape'] = 1,
    ['initiator'] = 1,
    ['jungler'] = 1,
    ['nuker'] = 0,
    ['support'] = 0,
    ['pusher'] = 0
},

["npc_dota_hero_dazzle"] = {
    ['carry'] = 0,
    ['disabler'] = 1,
    ['durable'] = 0,
    ['escape'] = 0,
    ['initiator'] = 0,
    ['jungler'] = 0,
    ['nuker'] = 1,
    ['support'] = 3,
    ['pusher'] = 0
},

["npc_dota_hero_death_prophet"] = {
    ['carry'] = 1,
    ['disabler'] = 1,
    ['durable'] = 0,
    ['escape'] = 0,
    ['initiator'] = 0,
    ['jungler'] = 0,
    ['nuker'] = 1,
    ['support'] = 0,
    ['pusher'] = 3
},

["npc_dota_hero_disruptor"] = {
    ['carry'] = 0,
    ['disabler'] = 2,
    ['durable'] = 0,
    ['escape'] = 0,
    ['initiator'] = 1,
    ['jungler'] = 0,
    ['nuker'] = 1,
    ['support'] = 2,
    ['pusher'] = 0
},

["npc_dota_hero_enchantress"] = {
    ['carry'] = 0,
    ['disabler'] = 0,
    ['durable'] = 1,
    ['escape'] = 0,
    ['initiator'] = 0,
    ['jungler'] = 3,
    ['nuker'] = 1,
    ['support'] = 0,
    ['pusher'] = 2
},

["npc_dota_hero_enigma"] = {
    ['carry'] = 0,
    ['disabler'] = 2,
    ['durable'] = 0,
    ['escape'] = 0,
    ['initiator'] = 2,
    ['jungler'] = 3,
    ['nuker'] = 0,
    ['support'] = 0,
    ['pusher'] = 2
},

["npc_dota_hero_invoker"] = {
    ['carry'] = 1,
    ['disabler'] = 2,
    ['durable'] = 0,
    ['escape'] = 1,
    ['initiator'] = 0,
    ['jungler'] = 0,
    ['nuker'] = 3,
    ['support'] = 0,
    ['pusher'] = 1
},

["npc_dota_hero_jakiro"] = {
    ['carry'] = 0,
    ['disabler'] = 1,
    ['durable'] = 0,
    ['escape'] = 0,
    ['initiator'] = 0,
    ['jungler'] = 0,
    ['nuker'] = 2,
    ['support'] = 1,
    ['pusher'] = 2
},

["npc_dota_hero_keeper_of_the_light"] = {
    ['carry'] = 0,
    ['disabler'] = 1,
    ['durable'] = 0,
    ['escape'] = 0,
    ['initiator'] = 0,
    ['jungler'] = 1,
    ['nuker'] = 2,
    ['support'] = 3,
    ['pusher'] = 0
},

["npc_dota_hero_leshrac"] = {
    ['carry'] = 1,
    ['disabler'] = 1,
    ['durable'] = 0,
    ['escape'] = 0,
    ['initiator'] = 0,
    ['jungler'] = 0,
    ['nuker'] = 3,
    ['support'] = 1,
    ['pusher'] = 3
},

["npc_dota_hero_lich"] = {
    ['carry'] = 0,
    ['disabler'] = 0,
    ['durable'] = 0,
    ['escape'] = 0,
    ['initiator'] = 0,
    ['jungler'] = 0,
    ['nuker'] = 2,
    ['support'] = 3,
    ['pusher'] = 0
},

["npc_dota_hero_lina"] = {
    ['carry'] = 1,
    ['disabler'] = 1,
    ['durable'] = 0,
    ['escape'] = 0,
    ['initiator'] = 0,
    ['jungler'] = 0,
    ['nuker'] = 3,
    ['support'] = 1,
    ['pusher'] = 0
},

["npc_dota_hero_lion"] = {
    ['carry'] = 0,
    ['disabler'] = 3,
    ['durable'] = 0,
    ['escape'] = 0,
    ['initiator'] = 2,
    ['jungler'] = 0,
    ['nuker'] = 3,
    ['support'] = 2,
    ['pusher'] = 0
},

["npc_dota_hero_furion"] = {
    ['carry'] = 1,
    ['disabler'] = 0,
    ['durable'] = 0,
    ['escape'] = 1,
    ['initiator'] = 0,
    ['jungler'] = 3,
    ['nuker'] = 1,
    ['support'] = 0,
    ['pusher'] = 3
},

["npc_dota_hero_necrolyte"] = {
    ['carry'] = 1,
    ['disabler'] = 1,
    ['durable'] = 1,
    ['escape'] = 0,
    ['initiator'] = 0,
    ['jungler'] = 0,
    ['nuker'] = 2,
    ['support'] = 0,
    ['pusher'] = 0
},

["npc_dota_hero_ogre_magi"] = {
    ['carry'] = 0,
    ['disabler'] = 2,
    ['durable'] = 1,
    ['escape'] = 0,
    ['initiator'] = 1,
    ['jungler'] = 0,
    ['nuker'] = 2,
    ['support'] = 2,
    ['pusher'] = 0
},

["npc_dota_hero_oracle"] = {
    ['carry'] = 0,
    ['disabler'] = 2,
    ['durable'] = 0,
    ['escape'] = 1,
    ['initiator'] = 0,
    ['jungler'] = 0,
    ['nuker'] = 3,
    ['support'] = 3,
    ['pusher'] = 0
},

["npc_dota_hero_obsidian_destroyer"] = {
    ['carry'] = 2,
    ['disabler'] = 1,
    ['durable'] = 0,
    ['escape'] = 0,
    ['initiator'] = 0,
    ['jungler'] = 0,
    ['nuker'] = 2,
    ['support'] = 0,
    ['pusher'] = 0
},

["npc_dota_hero_puck"] = {
    ['carry'] = 0,
    ['disabler'] = 3,
    ['durable'] = 0,
    ['escape'] = 3,
    ['initiator'] = 3,
    ['jungler'] = 0,
    ['nuker'] = 2,
    ['support'] = 0,
    ['pusher'] = 0
},

["npc_dota_hero_pugna"] = {
    ['carry'] = 0,
    ['disabler'] = 0,
    ['durable'] = 0,
    ['escape'] = 0,
    ['initiator'] = 0,
    ['jungler'] = 0,
    ['nuker'] = 2,
    ['support'] = 0,
    ['pusher'] = 2
},

["npc_dota_hero_queenofpain"] = {
    ['carry'] = 1,
    ['disabler'] = 0,
    ['durable'] = 0,
    ['escape'] = 3,
    ['initiator'] = 0,
    ['jungler'] = 0,
    ['nuker'] = 3,
    ['support'] = 0,
    ['pusher'] = 0
},

["npc_dota_hero_rubick"] = {
    ['carry'] = 0,
    ['disabler'] = 1,
    ['durable'] = 0,
    ['escape'] = 0,
    ['initiator'] = 0,
    ['jungler'] = 0,
    ['nuker'] = 1,
    ['support'] = 2,
    ['pusher'] = 0
},

["npc_dota_hero_shadow_demon"] = {
    ['carry'] = 0,
    ['disabler'] = 2,
    ['durable'] = 0,
    ['escape'] = 0,
    ['initiator'] = 1,
    ['jungler'] = 0,
    ['nuker'] = 1,
    ['support'] = 2,
    ['pusher'] = 0
},

["npc_dota_hero_shadow_shaman"] = {
    ['carry'] = 0,
    ['disabler'] = 3,
    ['durable'] = 0,
    ['escape'] = 0,
    ['initiator'] = 1,
    ['jungler'] = 0,
    ['nuker'] = 2,
    ['support'] = 2,
    ['pusher'] = 3
},

["npc_dota_hero_silencer"] = {
    ['carry'] = 1,
    ['disabler'] = 2,
    ['durable'] = 0,
    ['escape'] = 0,
    ['initiator'] = 2,
    ['jungler'] = 0,
    ['nuker'] = 1,
    ['support'] = 1,
    ['pusher'] = 0
},

["npc_dota_hero_skywrath_mage"] = {
    ['carry'] = 0,
    ['disabler'] = 1,
    ['durable'] = 0,
    ['escape'] = 0,
    ['initiator'] = 0,
    ['jungler'] = 0,
    ['nuker'] = 3,
    ['support'] = 2,
    ['pusher'] = 0
},

["npc_dota_hero_storm_spirit"] = {
    ['carry'] = 2,
    ['disabler'] = 1,
    ['durable'] = 0,
    ['escape'] = 3,
    ['initiator'] = 1,
    ['jungler'] = 0,
    ['nuker'] = 2,
    ['support'] = 0,
    ['pusher'] = 0
},

["npc_dota_hero_techies"] = {
    ['carry'] = 0,
    ['disabler'] = 1,
    ['durable'] = 0,
    ['escape'] = 0,
    ['initiator'] = 0,
    ['jungler'] = 0,
    ['nuker'] = 3,
    ['support'] = 0,
    ['pusher'] = 0
},

["npc_dota_hero_tinker"] = {
    ['carry'] = 1,
    ['disabler'] = 0,
    ['durable'] = 0,
    ['escape'] = 0,
    ['initiator'] = 0,
    ['jungler'] = 0,
    ['nuker'] = 3,
    ['support'] = 0,
    ['pusher'] = 2
},

["npc_dota_hero_visage"] = {
    ['carry'] = 0,
    ['disabler'] = 1,
    ['durable'] = 1,
    ['escape'] = 0,
    ['initiator'] = 0,
    ['jungler'] = 0,
    ['nuker'] = 2,
    ['support'] = 1,
    ['pusher'] = 1
},

["npc_dota_hero_warlock"] = {
    ['carry'] = 0,
    ['disabler'] = 1,
    ['durable'] = 0,
    ['escape'] = 0,
    ['initiator'] = 2,
    ['jungler'] = 0,
    ['nuker'] = 0,
    ['support'] = 1,
    ['pusher'] = 0
},

["npc_dota_hero_windrunner"] = {
    ['carry'] = 1,
    ['disabler'] = 1,
    ['durable'] = 0,
    ['escape'] = 1,
    ['initiator'] = 0,
    ['jungler'] = 0,
    ['nuker'] = 1,
    ['support'] = 1,
    ['pusher'] = 0
},

["npc_dota_hero_winter_wyvern"] = {
    ['carry'] = 0,
    ['disabler'] = 2,
    ['durable'] = 0,
    ['escape'] = 0,
    ['initiator'] = 0,
    ['jungler'] = 0,
    ['nuker'] = 1,
    ['support'] = 3,
    ['pusher'] = 0
},

["npc_dota_hero_witch_doctor"] = {
    ['carry'] = 0,
    ['disabler'] = 1,
    ['durable'] = 0,
    ['escape'] = 0,
    ['initiator'] = 0,
    ['jungler'] = 0,
    ['nuker'] = 2,
    ['support'] = 3,
    ['pusher'] = 0
},

["npc_dota_hero_zuus"] = {
    ['carry'] = 0,
    ['disabler'] = 0,
    ['durable'] = 0,
    ['escape'] = 0,
    ['initiator'] = 0,
    ['jungler'] = 0,
    ['nuker'] = 3,
    ['support'] = 0,
    ['pusher'] = 0
}

}

X["phase_boots"] = { ["npc_dota_hero_abaddon"] = 1, ["npc_dota_hero_alchemist"] = 1, ["npc_dota_hero_gyrocopter"] = 1, ["npc_dota_hero_medusa"] = 1, ["npc_dota_hero_phantom_assassin"] = 1, ["npc_dota_hero_sniper"] = 1, ["npc_dota_hero_spectre"] = 1, ["npc_dota_hero_tiny"] = 1, ["npc_dota_hero_troll_warlord"] = 1, ["npc_dota_hero_alchemist"] = 1, ["npc_dota_hero_life_stealer"] = 1, ["npc_dota_hero_monkey_king"] = 1, ["npc_dota_hero_ember_spirit"] = 1, ["npc_dota_hero_juggernaut"] = 1, ["npc_dota_hero_lone_druid"] = 1, ["npc_dota_hero_razor"] = 1, ["npc_dota_hero_templar_assassin"] = 1, ["npc_dota_hero_ursa"] = 1, ["npc_dota_hero_doom_bringer"] = 1, ["npc_dota_hero_kunkka"] = 1, ["npc_dota_hero_legion_commander"] = 1, ["npc_dota_hero_night_stalker"] = 1, ["npc_dota_hero_bloodseeker"] = 1, ["npc_dota_hero_broodmother"] = 1, ["npc_dota_hero_mirana"] = 1, ["npc_dota_hero_invoker"] = 1, ["npc_dota_hero_lina"] = 1, ["npc_dota_hero_furion"] = 1, ["npc_dota_hero_windrunner"] = 1 }

function X.IsCarry(hero) return X["hero_roles"][hero]["carry"] > 0; end function X.IsDisabler(hero) return X["hero_roles"][hero]["disabler"] > 0; end function X.IsDurable(hero) return X["hero_roles"][hero]["durable"] > 0; end function X.HasEscape(hero) return X["hero_roles"][hero]["escape"] > 0; end function X.IsInitiator(hero) return X["hero_roles"][hero]["initiator"] > 0; end function X.IsJungler(hero) return X["hero_roles"][hero]["jungler"] > 0; end function X.IsNuker(hero) return X["hero_roles"][hero]["nuker"] > 0; end function X.IsSupport(hero) return X["hero_roles"][hero]["support"] > 0; end function X.IsPusher(hero) return X["hero_roles"][hero]["pusher"] > 0; end

function X.IsMelee(attackRange) return attackRange <= 320; end

function X.BetterBuyPhaseBoots(hero) return X["phase_boots"][hero] == 1; end

function X.GetRoleLevel(hero, role) return X["hero_roles"][hero][role]; end

function X.IsRemovedFromSupportPoll(hero) return hero == "npc_dota_hero_alchemist" or hero == "npc_dota_hero_naga_siren" or hero == "npc_dota_hero_skeleton_king" or hero == "npc_dota_hero_alchemist" end

function X.CanBeOfflaner(hero) return string.find(hero, "bounty_hunter") or ( X["hero_roles"][hero]["initiator"] > 0 and X["hero_roles"][hero]["disabler"] > 0 and X["hero_roles"][hero]["durable"] > 0 and X["hero_roles"][hero]["support"] == 0 ) end

function X.CanBeMidlaner(hero) return string.find(hero, "zuus") or string.find(hero, "templar_assassin") or ( X["hero_roles"][hero]["carry"] > 0 and ( X["hero_roles"][hero]["nuker"] > 1 or X["hero_roles"][hero]["pusher"] > 0 ) ) end

function X.CanBeSafeLaneCarry(hero) return X["hero_roles"][hero]["carry"] > 1 and ( ( X["hero_roles"][hero]["nuker"] < 3 and X["hero_roles"][hero]["pusher"] < 3 ) or ( X["hero_roles"][hero]["escape"] > 0 and X["hero_roles"][hero]["nuker"] < 2 ) or X["hero_roles"][hero]["nuker"] < 2 or
X["hero_roles"][hero]["jungler"] == 1 ) end

function X.CanBeSupport(hero) return not X.IsRemovedFromSupportPoll(hero) and X["hero_roles"][hero]["support"] > 0 and ( X["hero_roles"][hero]["carry"] < 2 or X["hero_roles"][hero]["nuker"] > 0 or X["hero_roles"][hero]["disabler"] > 0 ) end

function X.GetCurrentSuitableRole() local highestCarryValue; end

function X.CountValue(hero, role) local highest = 0; local TeamMember = GetTeamPlayers(GetTeam()) for i = 1, #TeamMember do

end
return highest;

end

return X

Nostrademous commented 7 years ago

We already have that information with the hero_data.lua I created written by the python script I made. The only thing they added was setting roles to "0" for those that are not defined explicitely.

And yes, this is a start, but I feel like we will need more info still, as in timers for cooldowns of "disables" for those heroes that are "disables", etc.

CsharpNoobDude commented 7 years ago

We should also check for big, game-deciding spells. Black hole, Ravage, AA Ultimate, Chaos Meteor, Kunkka boat, Refresher orb, ....