timzaman / dotaservice Goto Github PK
View Code? Open in Web Editor NEWDotaService is a service to play Dota 2 through gRPC
License: Other
DotaService is a service to play Dota 2 through gRPC
License: Other
DotaServiceStub.reset takes 45~50 seconds on my host.
If there is a "pause" method, maybe i can build a resource pool of dota2 instance.
since my host is weak in IO but plenty of memory.
The example client.py script in the README.md (copied below) has a number of ambiguous and problematic aspects. Where should this script be located within the repo? Should protobuf
be replaced with protos
? Why does my IDS say Unresolved reference 'await'
?
Could we have a minimal working example? I discovered this old example, but it appears to have been removed.
from grpclib.client import Channel
from protobuf.DotaService_grpc import DotaServiceStub
from protobuf.DotaService_pb2 import Action
from protobuf.DotaService_pb2 import Config
# Connect to the DotaService.
env = DotaServiceStub(Channel('127.0.0.1', 13337))
# Get the initial observation.
observation = await env.reset(Config())
for i in range(8):
# Sample an action from the action protobuf
action = Action.MoveToLocation(x=.., y=.., z=..)
# Take an action, returning the resulting observation.
observation = await env.step(action)
Create an unit_test.py that exercises all DOTA_ACTIONS supported by gRPC to ensure they work properly.
This should cover:
https://github.com/TimZaman/dotaservice/blob/master/dotaservice/protos/dota_gcmessages_common_bot_script.proto#L500-L555
Since we are moving to multi-agent design I wanted to raise the question of how many agents do we actually want.
At start there are two possibilities:
*3) One Agent Per Hero and Per Controllable Unit (meaning summons (Nerconomicon, Warlock Ultimate, Beastmaster Hawk & Boar, etc.), illusions (Manta, Illusion Rune, Wall of Replica, Disruption, etc.), clones (Meepo), doubles (Arc Warden Ultimate) or dominated (i.e., Helm of Dominator, Enchantress, Chen, etc.) units) - typically these are controlled by the same agent that is controlling the owning Hero that caused the summon/domination to occur, but doesn't have to be.
Each approach has its pros and cons in terms of flexibility (co-play with humans, etc.), agent action synchronization (via shared world state model versus independent world models), training time, and so forth. OpenAI went with #1 above, but we do not necessarily have to, although I think I would prefer #1 above as well.
Next, there are a few other things that could be their own agents:
a) Courier - there is one courier per team - it can be controlled by any Hero Agent and even in real games it often gets abused by numerous players at once. We could make it its own agent.
b) Glyph Usage - anyone on the team can use the Glyph (when available)
c) Minimap Scan - anyone on the team can use the Minimap Scan function
*d) One Team Agent to control a), b) and c) as a single entity
Just wanted to throw this out there to think about and post your thoughts.
Can you add to the requirements.txt or add a requirements.pip specifying all other pip packages being used by the client.py and other pieces?
Your recent check in added google.cloud for example but seems I don't have the right pip package installed.
Downloading https://files.pythonhosted.org/packages/ba/b1/7c54d1950e7808df06642274e677dbcedba57f75307adf2e5ad8d39e5e0e/google_cloud-0.34.0-py2.py3-none-any.whl
Installing collected packages: google.cloud
Successfully installed google.cloud
Andrzejs-MacBook-Pro:dotaservice andrzej.gorski$ python3.7 examples/client.py
Traceback (most recent call last):
File "examples/client.py", line 10, in
from google.cloud import storage
ModuleNotFoundError: No module named 'google.cloud'
Turns out the actual pip is google-cloud-storage, a requirements.pip would have made that easier.
Other pip packages currently not mentioned include: tensorboardX, torch
I can do this but not sure if you care about specific versions or not
I was parsing dota2 replays using clarity. And I found proto files in this project useful, especially meaning of enums.
But some info is still missing, for example the meaning and range of rune types.
Thus I am curious where does this info comes from and if I can get more/latest info by my self.
I notice in the game, when I order hero to move to some destination, what DebugDrawLine draw on the map is so far away from the correct position.
the DebugDrawCircle api also not draw the circle at the correct position.
it is not the big deal, but without these api, it seems hard to debug the lua code, any suggestion?
We have a way to send Actions to the agent during game time, but we also need a way to inform the hero selection process what heroes we recommend picking.
I notice a weird thing, sometimes the head length of world state message is not equal to 4, and this trig the recv thread exit
dotaservice/dotaservice/dotaservice.py
Lines 316 to 319 in 6e91ff1
Since you mention this is your notes - my company posted a blog post on this topic a while back. I, personally, am not the guy familiar or responsible for this, but I mention it as I could reach out for help if we/you want to ever scale to that level.
https://www.twosixlabs.com/automated-docker-deployment-kubernetes-buildbot/
Traceback (most recent call last):
File "/root/dotaservice/dotaservice/dotaservice.py", line 261, in _worldstate_listener
parsed_data = await self._data_from_reader(reader)
File "/root/dotaservice/dotaservice/dotaservice.py", line 243, in _data_from_reader
parsed_data.ParseFromString(data)
google.protobuf.message.DecodeError: Error parsing message
LUARDY {"step":30,"dota_time":-88.933349609375}
(lua) looking for loadfile = bots/live_config_auto
(py) lua_config = {'step': 30, 'dota_time': -88.933349609375}
(py) lua config received= {'step': 30, 'dota_time': -88.933349609375}
(py) writing live config= {'calibration_dota_time': -89.23334503173828}
(lua) live_config = { ["calibration_dota_time"] = -89.233345031738,}
Script function 'Think' on bot npc_dota_hero_nevermore took 361.868ms
DotaService::step()
(python) action= {'actionType': 'DOTA_UNIT_ORDER_MOVE_TO_POSITION', 'moveToLocation': {'location': {'x': -6400.0, 'y': -6400.00390625, 'z': 0.0}}, 'dota_time': -89.23334503173828}
Request was cancelled
Traceback (most recent call last):
File "/root/.local/lib/python3.7/site-packages/grpclib/server.py", line 327, in request_handler
await method.func(stream)
File "/root/dotaservice/dotaservice/dotaservice.py", line 362, in step
data = await self.dota_game.worldstate_queue.get()
File "/usr/lib/python3.7/asyncio/queues.py", line 159, in get
await getter
concurrent.futures._base.CancelledError
I think this attribute should be required in proto file or really optional.
now if i don't assign this value, bot script will crash at bot_nevermore.lua:146
act_at_step = step + action.actionDelay -- TODO(tzaman) does this still work if not defined?
Making a lobby to play agianst the bot gives me troubles:
Exception on Actor::call; retrying (0/5).:
hero 0 not found in state:
team_id: 2
game_time: 78.69914245605469
dota_time: -89.20001220703125
game_state: 4
hero_pick_state: 1
time_of_day: 0.2509956657886505
glyph_cooldown: 347.899169921875
glyph_cooldown_enemy: 347
players {
player_id: 1
hero_id: 35
is_alive: true
respawn_time: 6.0
kills: 0
deaths: 0
assists: 0
team_id: 3
}
players {
player_id: 2
hero_id: 11
is_alive: true
respawn_time: 6.0
kills: 0
deaths: 0
assists: 0
team_id: 2
}
players {
player_id: 3
hero_id: 91
is_alive: true
respawn_time: 6.0
kills: 0
deaths: 0
assists: 0
team_id: 2
}
players {
player_id: 4
hero_id: 91
is_alive: true
respawn_time: 6.0
kills: 0
deaths: 0
assists: 0
team_id: 2
}
players {
player_id: 5
hero_id: 91
is_alive: true
respawn_time: 6.0
kills: 0
deaths: 0
assists: 0
team_id: 2
}
players {
player_id: 6
hero_id: 91
is_alive: true
respawn_time: 6.0
kills: 0
deaths: 0
assists: 0
team_id: 2
}
players {
player_id: 7
hero_id: 91
is_alive: true
respawn_time: 6.0
kills: 0
deaths: 0
assists: 0
team_id: 3
}
players {
player_id: 8
hero_id: 91
is_alive: true
respawn_time: 6.0
kills: 0
deaths: 0
assists: 0
team_id: 3
}
players {
player_id: 9
hero_id: 91
is_alive: true
respawn_time: 6.0
kills: 0
deaths: 0
assists: 0
team_id: 3
}
players {
player_id: 10
hero_id: 91
is_alive: true
respawn_time: 6.0
kills: 0
deaths: 0
assists: 0
team_id: 3
}
units {
handle: 41
unit_type: TOWER
name: "npc_dota_goodguys_tower3_bot"
team_id: 2
level: 3
location {
x: -3951.997802734375
y: -6112.0
z: 383.99993896484375
}
is_alive: true
player_id: -1
bounding_radius: 144
facing: 0
ground_height: 384
vision_range_daytime: 1900
vision_range_nighttime: 800
health: 2000
health_max: 2000
health_regen: 0.0
mana: 0
mana_max: 0
mana_regen: 0.0
base_movement_speed: 0
current_movement_speed: 100
anim_activity: 1500
anim_cycle: 0.600006103515625
base_damage: 152
base_damage_variance: 10
bonus_damage: 0
attack_damage: 152
attack_range: 700
attack_speed: 1.0
attack_anim_point: 0.6000000238418579
attack_acquisition_range: 700
attack_projectile_speed: 750
attacks_per_second: 1
last_attack_time: 0.0
bounty_xp: 0
bounty_gold_min: 0
bounty_gold_max: 0
is_channeling: false
is_attack_immune: false
is_blind: false
is_block_disabled: false
is_disarmed: false
is_evade_disabled: false
is_hexed: false
is_invisible: false
is_invulnerable: true
is_magic_immune: false
is_muted: false
is_nightmared: false
is_rooted: false
is_silenced: false
is_specially_deniable: false
is_stunned: false
is_unable_to_miss: false
has_scepter: false
abilities {
handle: 42
ability_id: 5351
slot: 0
caster_handle: 41
level: 1
cast_range: 0
channel_time: 0.0
cooldown_remaining: 0.0
is_activated: true
is_toggled: false
is_in_ability_phase: false
is_channeling: false
is_stolen: false
is_fully_castable: true
}
modifiers {
name: "modifier_backdoor_protection_in_base"
stack_count: 0
ability_handle: 42
ability_id: 5351
}
modifiers {
name: "modifier_invulnerable"
stack_count: 0
}
modifiers {
name: "modifier_tower_truesight_aura"
stack_count: 0
}
modifiers {
name: "modifier_tower_aura"
stack_count: 0
}
armor: 14.0
magic_resist: 0.0
}
units {
handle: 43
unit_type: TOWER
name: "npc_dota_goodguys_tower3_mid"
team_id: 2
level: 3
location {
x: -4639.9990234375
y: -4143.9990234375
z: 384.0
}
is_alive: true
player_id: -1
bounding_radius: 144
facing: 45
ground_height: 384
vision_range_daytime: 1900
vision_range_nighttime: 800
health: 2000
health_max: 2000
health_regen: 0.0
mana: 0
mana_max: 0
mana_regen: 0.0
base_movement_speed: 0
current_movement_speed: 100
anim_activity: 1500
anim_cycle: 0.600006103515625
base_damage: 152
base_damage_variance: 10
bonus_damage: 0
attack_damage: 152
attack_range: 700
attack_speed: 1.0
attack_anim_point: 0.6000000238418579
attack_acquisition_range: 700
attack_projectile_speed: 750
attacks_per_second: 1
last_attack_time: 0.0
bounty_xp: 0
bounty_gold_min: 0
bounty_gold_max: 0
is_channeling: false
is_attack_immune: false
is_blind: false
is_block_disabled: false
is_disarmed: false
is_evade_disabled: false
is_hexed: false
is_invisible: false
is_invulnerable: true
is_magic_immune: false
is_muted: false
is_nightmared: false
is_rooted: false
is_silenced: false
is_specially_deniable: false
is_stunned: false
is_unable_to_miss: false
has_scepter: false
abilities {
handle: 44
ability_id: 5351
slot: 0
caster_handle: 43
level: 1
cast_range: 0
channel_time: 0.0
cooldown_remaining: 0.0
is_activated: true
is_toggled: false
is_in_ability_phase: false
is_channeling: false
is_stolen: false
is_fully_castable: true
}
modifiers {
name: "modifier_backdoor_protection_in_base"
stack_count: 0
ability_handle: 44
ability_id: 5351
}
modifiers {
name: "modifier_invulnerable"
stack_count: 0
}
modifiers {
name: "modifier_tower_truesight_aura"
stack_count: 0
}
modifiers {
name: "modifier_tower_aura"
stack_count: 0
}
armor: 14.0
magic_resist: 0.0
}
units {
handle: 45
unit_type: TOWER
name: "npc_dota_goodguys_tower3_top"
team_id: 2
level: 3
location {
x: -6592.0
y: -3407.998046875
z: 384.0
}
is_alive: true
player_id: -1
bounding_radius: 144
facing: 90
ground_height: 384
vision_range_daytime: 1900
vision_range_nighttime: 800
health: 2000
health_max: 2000
health_regen: 0.0
mana: 0
mana_max: 0
mana_regen: 0.0
base_movement_speed: 0
current_movement_speed: 100
anim_activity: 1500
anim_cycle: 0.600006103515625
base_damage: 152
base_damage_variance: 10
bonus_damage: 0
attack_damage: 152
attack_range: 700
attack_speed: 1.0
attack_anim_point: 0.6000000238418579
attack_acquisition_range: 700
attack_projectile_speed: 750
attacks_per_second: 1
last_attack_time: 0.0
bounty_xp: 0
bounty_gold_min: 0
bounty_gold_max: 0
is_channeling: false
is_attack_immune: false
is_blind: false
is_block_disabled: false
is_disarmed: false
is_evade_disabled: false
is_hexed: false
is_invisible: false
is_invulnerable: true
is_magic_immune: false
is_muted: false
is_nightmared: false
is_rooted: false
is_silenced: false
is_specially_deniable: false
is_stunned: false
is_unable_to_miss: false
has_scepter: false
abilities {
handle: 46
ability_id: 5351
slot: 0
caster_handle: 45
level: 1
cast_range: 0
channel_time: 0.0
cooldown_remaining: 0.0
is_activated: true
is_toggled: false
is_in_ability_phase: false
is_channeling: false
is_stolen: false
is_fully_castable: true
}
modifiers {
name: "modifier_backdoor_protection_in_base"
stack_count: 0
ability_handle: 46
ability_id: 5351
}
modifiers {
name: "modifier_invulnerable"
stack_count: 0
}
modifiers {
name: "modifier_tower_truesight_aura"
stack_count: 0
}
modifiers {
name: "modifier_tower_aura"
stack_count: 0
}
armor: 14.0
magic_resist: 0.0
}
units {
handle: 47
unit_type: TOWER
name: "npc_dota_goodguys_tower2_bot"
team_id: 2
level: 2
location {
x: -103.99784088134766
y: -6320.0
z: 256.0
}
is_alive: true
player_id: -1
bounding_radius: 144
facing: 0
ground_height: 256
vision_range_daytime: 1900
vision_range_nighttime: 800
health: 1900
health_max: 1900
health_regen: 0.0
mana: 0
mana_max: 0
mana_regen: 0.0
base_movement_speed: 0
current_movement_speed: 100
anim_activity: 1500
anim_cycle: 0.600006103515625
base_damage: 152
base_damage_variance: 10
bonus_damage: 0
attack_damage: 152
attack_range: 700
attack_speed: 1.0
attack_anim_point: 0.6000000238418579
attack_acquisition_range: 700
attack_projectile_speed: 750
attacks_per_second: 1
last_attack_time: 0.0
bounty_xp: 0
bounty_gold_min: 0
bounty_gold_max: 0
is_channeling: false
is_attack_immune: false
is_blind: false
is_block_disabled: false
is_disarmed: false
is_evade_disabled: false
is_hexed: false
is_invisible: false
is_invulnerable: true
is_magic_immune: false
is_muted: false
is_nightmared: false
is_rooted: false
is_silenced: false
is_specially_deniable: false
is_stunned: false
is_unable_to_miss: false
has_scepter: false
abilities {
handle: 48
ability_id: 5350
slot: 0
caster_handle: 47
level: 1
cast_range: 0
channel_time: 0.0
cooldown_remaining: 0.0
is_activated: true
is_toggled: false
is_in_ability_phase: false
is_channeling: false
is_stolen: false
is_fully_castable: true
}
modifiers {
name: "modifier_backdoor_protection"
stack_count: 0
ability_handle: 48
ability_id: 5350
}
modifiers {
name: "modifier_invulnerable"
stack_count: 0
}
modifiers {
name: "modifier_tower_truesight_aura"
stack_count: 0
}
modifiers {
name: "modifier_tower_aura"
stack_count: 0
}
armor: 14.0
magic_resist: 0.0
}
units {
handle: 49
unit_type: TOWER
name: "npc_dota_goodguys_tower1_bot"
team_id: 2
level: 1
location {
x: 4924.00146484375
y: -6127.9990234375
z: 256.0
}
is_alive: true
player_id: -1
bounding_radius: 144
facing: 30
ground_height: 256
vision_range_daytime: 1900
vision_range_nighttime: 800
health: 1800
health_max: 1800
health_regen: 0.0
mana: 0
mana_max: 0
mana_regen: 0.0
base_movement_speed: 0
current_movement_speed: 100
anim_activity: 1500
anim_cycle: 0.600006103515625
base_damage: 110
base_damage_variance: 10
bonus_damage: 0
attack_damage: 110
attack_range: 700
attack_speed: 1.0
attack_anim_point: 0.6000000238418579
attack_acquisition_range: 700
attack_projectile_speed: 750
attacks_per_second: 1
last_attack_time: 0.0
bounty_xp: 0
bounty_gold_min: 0
bounty_gold_max: 0
is_channeling: false
is_attack_immune: false
is_blind: false
is_block_disabled: false
is_disarmed: false
is_evade_disabled: false
is_hexed: false
is_invisible: false
is_invulnerable: true
is_magic_immune: false
is_muted: false
is_nightmared: false
is_rooted: false
is_silenced: false
is_specially_deniable: false
is_stunned: false
is_unable_to_miss: false
has_scepter: false
modifiers {
name: "modifier_invulnerable"
stack_count: 0
}
modifiers {
name: "modifier_tower_truesight_aura"
stack_count: 0
}
modifiers {
name: "modifier_tower_aura"
stack_count: 0
}
armor: 12.0
magic_resist: 0.0
}
units {
handle: 50
unit_type: TOWER
name: "npc_dota_goodguys_tower2_mid"
team_id: 2
level: 2
location {
x: -3168.0009765625
y: -3024.00146484375
z: 256.0
}
is_alive: true
player_id: -1
bounding_radius: 144
facing: 45
ground_height: 256
vision_range_daytime: 1900
vision_range_nighttime: 800
health: 1900
health_max: 1900
health_regen: 0.0
mana: 0
mana_max: 0
mana_regen: 0.0
base_movement_speed: 0
current_movement_speed: 100
anim_activity: 1500
anim_cycle: 0.600006103515625
base_damage: 152
base_damage_variance: 10
bonus_damage: 0
attack_damage: 152
attack_range: 700
attack_speed: 1.0
attack_anim_point: 0.6000000238418579
attack_acquisition_range: 700
attack_projectile_speed: 750
attacks_per_second: 1
last_attack_time: 0.0
bounty_xp: 0
bounty_gold_min: 0
bounty_gold_max: 0
is_channeling: false
is_attack_immune: false
is_blind: false
is_block_disabled: false
is_disarmed: false
is_evade_disabled: false
is_hexed: false
is_invisible: false
is_invulnerable: true
is_magic_immune: false
is_muted: false
is_nightmared: false
is_rooted: false
is_silenced: false
is_specially_deniable: false
is_stunned: false
is_unable_to_miss: false
has_scepter: false
abilities {
handle: 51
ability_id: 5350
slot: 0
caster_handle: 50
level: 1
cast_range: 0
channel_time: 0.0
cooldown_remaining: 0.0
is_activated: true
is_toggled: false
is_in_ability_phase: false
is_channeling: false
is_stolen: false
is_fully_castable: true
}
modifiers {
name: "modifier_backdoor_protection"
stack_count: 0
ability_handle: 51
ability_id: 5350
}
modifiers {
name: "modifier_invulnerable"
stack_count: 0
}
modifiers {
name: "modifier_tower_truesight_aura"
stack_count: 0
}
modifiers {
name: "modifier_tower_aura"
stack_count: 0
}
armor: 14.0
magic_resist: 0.0
}
units {
handle: 52
unit_type: TOWER
name: "npc_dota_goodguys_tower2_top"
team_id: 2
level: 2
location {
x: -6160.0
y: -871.998046875
z: 256.0
}
is_alive: true
player_id: -1
bounding_radius: 144
facing: 90
ground_height: 256
vision_range_daytime: 1900
vision_range_nighttime: 800
health: 1900
health_max: 1900
health_regen: 0.0
mana: 0
mana_max: 0
mana_regen: 0.0
base_movement_speed: 0
current_movement_speed: 100
anim_activity: 1500
anim_cycle: 0.600006103515625
base_damage: 152
base_damage_variance: 10
bonus_damage: 0
attack_damage: 152
attack_range: 700
attack_speed: 1.0
attack_anim_point: 0.6000000238418579
attack_acquisition_range: 700
attack_projectile_speed: 750
attacks_per_second: 1
last_attack_time: 0.0
bounty_xp: 0
bounty_gold_min: 0
bounty_gold_max: 0
is_channeling: false
is_attack_immune: false
is_blind: false
is_block_disabled: false
is_disarmed: false
is_evade_disabled: false
is_hexed: false
is_invisible: false
is_invulnerable: true
is_magic_immune: false
is_muted: false
is_nightmared: false
is_rooted: false
is_silenced: false
is_specially_deniable: false
is_stunned: false
is_unable_to_miss: false
has_scepter: false
abilities {
handle: 53
ability_id: 5350
slot: 0
caster_handle: 52
level: 1
cast_range: 0
channel_time: 0.0
cooldown_remaining: 0.0
is_activated: true
is_toggled: false
is_in_ability_phase: false
is_channeling: false
is_stolen: false
is_fully_castable: true
}
modifiers {
name: "modifier_backdoor_protection"
stack_count: 0
ability_handle: 53
ability_id: 5350
}
modifiers {
name: "modifier_invulnerable"
stack_count: 0
}
modifiers {
name: "modifier_tower_truesight_aura"
stack_count: 0
}
modifiers {
name: "modifier_tower_aura"
stack_count: 0
}
armor: 14.0
magic_resist: 0.0
}
units {
handle: 54
unit_type: TOWER
name: "npc_dota_goodguys_tower1_top"
team_id: 2
level: 1
location {
x: -6256.0
y: 1816.001953125
z: 256.0
}
is_alive: true
player_id: -1
bounding_radius: 144
facing: 90
ground_height: 256
vision_range_daytime: 1900
vision_range_nighttime: 800
health: 1800
health_max: 1800
health_regen: 0.0
mana: 0
mana_max: 0
mana_regen: 0.0
base_movement_speed: 0
current_movement_speed: 100
anim_activity: 1500
anim_cycle: 0.600006103515625
base_damage: 110
base_damage_variance: 10
bonus_damage: 0
attack_damage: 110
attack_range: 700
attack_speed: 1.0
attack_anim_point: 0.6000000238418579
attack_acquisition_range: 700
attack_projectile_speed: 750
attacks_per_second: 1
last_attack_time: 0.0
bounty_xp: 0
bounty_gold_min: 0
bounty_gold_max: 0
is_channeling: false
is_attack_immune: false
is_blind: false
is_block_disabled: false
is_disarmed: false
is_evade_disabled: false
is_hexed: false
is_invisible: false
is_invulnerable: true
is_magic_immune: false
is_muted: false
is_nightmared: false
is_rooted: false
is_silenced: false
is_specially_deniable: false
is_stunned: false
is_unable_to_miss: false
has_scepter: false
modifiers {
name: "modifier_invulnerable"
stack_count: 0
}
modifiers {
name: "modifier_tower_truesight_aura"
stack_count: 0
}
modifiers {
name: "modifier_tower_aura"
stack_count: 0
}
armor: 12.0
magic_resist: 0.0
}
units {
handle: 55
unit_type: TOWER
name: "npc_dota_goodguys_tower4"
team_id: 2
level: 4
location {
x: -5711.99853515625
y: -4863.99853515625
z: 383.9998779296875
}
is_alive: true
player_id: -1
bounding_radius: 144
facing: 45
ground_height: 384
vision_range_daytime: 1900
vision_range_nighttime: 800
health: 2100
health_max: 2100
health_regen: 0.0
mana: 0
mana_max: 0
mana_regen: 0.0
base_movement_speed: 0
current_movement_speed: 100
anim_activity: 1500
anim_cycle: 0.600006103515625
base_damage: 152
base_damage_variance: 10
bonus_damage: 0
attack_damage: 152
attack_range: 700
attack_speed: 1.0
attack_anim_point: 0.6000000238418579
attack_acquisition_range: 700
attack_projectile_speed: 750
attacks_per_second: 1
last_attack_time: 0.0
bounty_xp: 0
bounty_gold_min: 0
bounty_gold_max: 0
is_channeling: false
is_attack_immune: false
is_blind: false
is_block_disabled: false
is_disarmed: false
is_evade_disabled: false
is_hexed: false
is_invisible: false
is_invulnerable: true
is_magic_immune: false
is_muted: false
is_nightmared: false
is_rooted: false
is_silenced: false
is_specially_deniable: false
is_stunned: false
is_unable_to_miss: false
has_scepter: false
abilities {
handle: 56
ability_id: 5351
slot: 0
caster_handle: 55
level: 1
cast_range: 0
channel_time: 0.0
cooldown_remaining: 0.0
is_activated: true
is_toggled: false
is_in_ability_phase: false
is_channeling: false
is_stolen: false
is_fully_castable: true
}
modifiers {
name: "modifier_backdoor_protection_in_base"
stack_count: 0
ability_handle: 56
ability_id: 5351
}
modifiers {
name: "modifier_invulnerable"
stack_count: 0
}
modifiers {
name: "modifier_tower_truesight_aura"
stack_count: 0
}
modifiers {
name: "modifier_tower_aura"
stack_count: 0
}
armor: 21.0
magic_resist: 0.0
}
units {
handle: 57
unit_type: BARRACKS
name: "npc_dota_goodguys_melee_rax_mid"
team_id: 2
level: 1
location {
x: -4671.99560546875
y: -4551.9990234375
z: 383.9998779296875
}
is_alive: true
player_id: -1
bounding_radius: 144
facing: 135
ground_height: 384
vision_range_daytime: 900
vision_range_nighttime: 600
health: 2200
health_max: 2200
health_regen: 5.0
mana: 0
mana_max: 0
mana_regen: 0.0
base_movement_speed: 0
current_movement_speed: 100
anim_activity: -1
anim_cycle: 0.0
base_damage: 0
base_damage_variance: 0
bonus_damage: 0
attack_damage: 0
attack_range: 0
attack_speed: 1.0
attack_anim_point: 0.0
attack_acquisition_range: 0
attack_projectile_speed: 0
attacks_per_second: -2147483648
last_attack_time: 0.0
bounty_xp: 0
bounty_gold_min: 0
bounty_gold_max: 0
is_channeling: false
is_attack_immune: false
is_blind: false
is_block_disabled: false
is_disarmed: false
is_evade_disabled: false
is_hexed: false
is_invisible: false
is_invulnerable: true
is_magic_immune: false
is_muted: false
is_nightmared: false
is_rooted: false
is_silenced: false
is_specially_deniable: false
is_stunned: false
is_unable_to_miss: false
has_scepter: false
abilities {
handle: 58
ability_id: 5351
slot: 0
caster_handle: 57
level: 1
cast_range: 0
channel_time: 0.0
cooldown_remaining: 0.0
is_activated: true
is_toggled: false
is_in_ability_phase: false
is_channeling: false
is_stolen: false
is_fully_castable: true
}
modifiers {
name: "modifier_backdoor_protection_in_base"
stack_count: 0
ability_handle: 58
ability_id: 5351
}
modifiers {
name: "modifier_invulnerable"
stack_count: 0
}
armor: 13.0
magic_resist: 0.0
}
units {
handle: 59
unit_type: BARRACKS
name: "npc_dota_goodguys_range_rax_mid"
team_id: 2
level: 1
location {
x: -5060.0
y: -4199.0
z: 383.999755859375
}
is_alive: true
player_id: -1
bounding_radius: 144
facing: 315
ground_height: 384
vision_range_daytime: 900
vision_range_nighttime: 600
health: 1300
health_max: 1300
health_regen: 0.0
mana: 0
mana_max: 0
mana_regen: 0.0
base_movement_speed: 0
current_movement_speed: 100
anim_activity: -1
anim_cycle: 0.0
base_damage: 0
base_damage_variance: 0
bonus_damage: 0
attack_damage: 0
attack_range: 0
attack_speed: 1.0
attack_anim_point: 0.0
attack_acquisition_range: 0
attack_projectile_speed: 0
attacks_per_second: -2147483648
last_attack_time: 0.0
bounty_xp: 0
bounty_gold_min: 0
bounty_gold_max: 0
is_channeling: false
is_attack_immune: false
is_blind: false
is_block_disabled: false
is_disarmed: false
is_evade_disabled: false
is_hexed: false
is_invisible: false
is_invulnerable: true
is_magic_immune: false
is_muted: false
is_nightmared: false
is_rooted: false
is_silenced: false
is_specially_deniable: false
is_stunned: false
is_unable_to_miss: false
has_scepter: false
abilities {
handle: 60
ability_id: 5351
slot: 0
caster_handle: 59
level: 1
cast_range: 0
channel_time: 0.0
cooldown_remaining: 0.0
is_activated: true
is_toggled: false
is_in_ability_phase: false
is_channeling: false
is_stolen: false
is_fully_castable: true
}
modifiers {
name: "modifier_backdoor_protection_in_base"
stack_count: 0
ability_handle: 60
ability_id: 5351
}
modifiers {
name: "modifier_invulnerable"
stack_count: 0
}
armor: 9.0
magic_resist: 0.0
}
units {
handle: 61
unit_type: BARRACKS
name: "npc_dota_goodguys_melee_rax_bot"
team_id: 2
level: 1
location {
x: -4279.99609375
y: -6360.001953125
z: 384.0
}
is_alive: true
player_id: -1
bounding_radius: 144
facing: 90
ground_height: 384
vision_range_daytime: 900
vision_range_nighttime: 600
health: 2200
health_max: 2200
health_regen: 5.0
mana: 0
mana_max: 0
mana_regen: 0.0
base_movement_speed: 0
current_movement_speed: 100
anim_activity: -1
anim_cycle: 0.0
base_damage: 0
base_damage_variance: 0
bonus_damage: 0
attack_damage: 0
attack_range: 0
attack_speed: 1.0
attack_anim_point: 0.0
attack_acquisition_range: 0
attack_projectile_speed: 0
attacks_per_second: -2147483648
last_attack_time: 0.0
bounty_xp: 0
bounty_gold_min: 0
bounty_gold_max: 0
is_channeling: false
is_attack_immune: false
is_blind: false
is_block_disabled: false
is_disarmed: false
is_evade_disabled: false
is_hexed: false
is_invisible: false
is_invulnerable: true
is_magic_immune: false
is_muted: false
is_nightmared: false
is_rooted: false
is_silenced: false
is_specially_deniable: false
is_stunned: false
is_unable_to_miss: false
has_scepter: false
abilities {
handle: 62
ability_id: 5351
slot: 0
caster_handle: 61
level: 1
cast_range: 0
channel_time: 0.0
cooldown_remaining: 0.0
is_activated: true
is_toggled: false
is_in_ability_phase: false
is_channeling: false
is_stolen: false
is_fully_castable: true
}
modifiers {
name: "modifier_backdoor_protection_in_base"
stack_count: 0
ability_handle: 62
ability_id: 5351
}
modifiers {
name: "modifier_invulnerable"
stack_count: 0
}
armor: 13.0
magic_resist: 0.0
}
units {
handle: 63
unit_type: BARRACKS
name: "npc_dota_goodguys_range_rax_bot"
team_id: 2
level: 1
location {
x: -4279.00048828125
y: -5853.0
z: 383.9998779296875
}
is_alive: true
player_id: -1
bounding_radius: 144
facing: 270
ground_height: 384
vision_range_daytime: 900
vision_range_nighttime: 600
health: 1300
health_max: 1300
health_regen: 0.0
mana: 0
mana_max: 0
mana_regen: 0.0
base_movement_speed: 0
current_movement_speed: 100
anim_activity: -1
anim_cycle: 0.0
base_damage: 0
base_damage_variance: 0
bonus_damage: 0
attack_damage: 0
attack_range: 0
attack_speed: 1.0
attack_anim_point: 0.0
attack_acquisition_range: 0
attack_projectile_speed: 0
attacks_per_second: -2147483648
last_attack_time: 0.0
bounty_xp: 0
bounty_gold_min: 0
bounty_gold_max: 0
is_channeling: false
is_attack_immune: false
is_blind: false
is_block_disabled: false
is_disarmed: false
is_evade_disabled: false
is_hexed: false
is_invisible: false
is_invulnerable: true
is_magic_immune: false
is_muted: false
is_nightmared: false
is_rooted: false
is_silenced: false
is_specially_deniable: false
is_stunned: false
is_unable_to_miss: false
has_scepter: false
abilities {
handle: 64
ability_id: 5351
slot: 0
caster_handle: 63
level: 1
cast_range: 0
channel_time: 0.0
cooldown_remaining: 0.0
is_activated: true
is_toggled: false
is_in_ability_phase: false
is_channeling: false
is_stolen: false
is_fully_castable: true
}
modifiers {
name: "modifier_backdoor_protection_in_base"
stack_count: 0
ability_handle: 64
ability_id: 5351
}
modifiers {
name: "modifier_invulnerable"
stack_count: 0
}
armor: 9.0
magic_resist: 0.0
}
units {
handle: 65
unit_type: BARRACKS
name: "npc_dota_goodguys_melee_rax_top"
team_id: 2
level: 1
location {
x: -6335.998046875
y: -3757.99609375
z: 383.9998779296875
}
is_alive: true
player_id: -1
bounding_radius: 144
facing: 180
ground_height: 384
vision_range_daytime: 900
vision_range_nighttime: 600
health: 2200
health_max: 2200
health_regen: 5.0
mana: 0
mana_max: 0
mana_regen: 0.0
base_movement_speed: 0
current_movement_speed: 100
anim_activity: -1
anim_cycle: 0.0
base_damage: 0
base_damage_variance: 0
bonus_damage: 0
attack_damage: 0
attack_range: 0
attack_speed: 1.0
attack_anim_point: 0.0
attack_acquisition_range: 0
attack_projectile_speed: 0
attacks_per_second: -2147483648
last_attack_time: 0.0
bounty_xp: 0
bounty_gold_min: 0
bounty_gold_max: 0
is_channeling: false
is_attack_immune: false
is_blind: false
is_block_disabled: false
is_disarmed: false
is_evade_disabled: false
is_hexed: false
is_invisible: false
is_invulnerable: true
is_magic_immune: false
is_muted: false
is_nightmared: false
is_rooted: false
is_silenced: false
is_specially_deniable: false
is_stunned: false
is_unable_to_miss: false
has_scepter: false
abilities {
handle: 66
ability_id: 5351
slot: 0
caster_handle: 65
level: 1
cast_range: 0
channel_time: 0.0
cooldown_remaining: 0.0
is_activated: true
is_toggled: false
is_in_ability_phase: false
is_channeling: false
is_stolen: false
is_fully_castable: true
}
modifiers {
name: "modifier_backdoor_protection_in_base"
stack_count: 0
ability_handle: 66
ability_id: 5351
}
modifiers {
name: "modifier_invulnerable"
stack_count: 0
}
armor: 13.0
magic_resist: 0.0
}
units {
handle: 67
unit_type: BARRACKS
name: "npc_dota_goodguys_range_rax_top"
team_id: 2
level: 1
location {
x: -6844.0
y: -3759.00048828125
z: 383.99993896484375
}
is_alive: true
player_id: -1
bounding_radius: 144
facing: 0
ground_height: 384
vision_range_daytime: 900
vision_range_nighttime: 600
health: 1300
health_max: 1300
health_regen: 0.0
mana: 0
mana_max: 0
mana_regen: 0.0
base_movement_speed: 0
current_movement_speed: 100
anim_activity: -1
anim_cycle: 0.0
base_damage: 0
base_damage_variance: 0
bonus_damage: 0
attack_damage: 0
attack_range: 0
attack_speed: 1.0
attack_anim_point: 0.0
attack_acquisition_range: 0
attack_projectile_speed: 0
attacks_per_second: -2147483648
last_attack_time: 0.0
bounty_xp: 0
bounty_gold_min: 0
bounty_gold_max: 0
is_channeling: false
is_attack_immune: false
is_blind: false
is_block_disabled: false
is_disarmed: false
is_evade_disabled: false
is_hexed: false
is_invisible: false
is_invulnerable: true
is_magic_immune: false
is_muted: false
is_nightmared: false
is_rooted: false
is_silenced: false
is_specially_deniable: false
is_stunned: false
is_unable_to_miss: false
has_scepter: false
abilities {
handle: 68
ability_id: 5351
slot: 0
caster_handle: 67
level: 1
cast_range: 0
channel_time: 0.0
cooldown_remaining: 0.0
is_activated: true
is_toggled: false
is_in_ability_phase: false
is_channeling: false
is_stolen: false
is_fully_castable: true
}
modifiers {
name: "modifier_backdoor_protection_in_base"
stack_count: 0
ability_handle: 68
ability_id: 5351
}
modifiers {
name: "modifier_invulnerable"
stack_count: 0
}
armor: 9.0
magic_resist: 0.0
}
units {
handle: 69
unit_type: BARRACKS
name: "npc_dota_badguys_melee_rax_bot"
team_id: 3
level: 1
location {
x: 6591.9990234375
y: 3392.016845703125
z: 383.9998779296875
}
is_alive: true
player_id: -1
bounding_radius: 144
facing: 0
ground_height: 384
vision_range_daytime: 900
vision_range_nighttime: 600
health: 2200
health_max: 2200
health_regen: 5.0
mana: 0
mana_max: 0
mana_regen: 0.0
base_movement_speed: 0
current_movement_speed: 100
anim_activity: -1
anim_cycle: 0.0
base_damage: 0
base_damage_variance: 0
bonus_damage: 0
attack_damage: 0
attack_range: 0
attack_speed: 1.0
attack_anim_point: 0.0
attack_acquisition_range: 0
attack_projectile_speed: 0
bounty_xp: 0
bounty_gold_min: 0
bounty_gold_max: 0
abilities {
handle: 70
ability_id: 5351
slot: 0
caster_handle: 69
cast_range: 0
channel_time: 0.0
is_activated: true
is_toggled: false
is_stolen: false
is_fully_castable: true
}
armor: 13.0
magic_resist: 0.0
}
units {
handle: 71
unit_type: BARRACKS
name: "npc_dota_badguys_range_rax_bot"
team_id: 3
level: 1
location {
x: 6064.0
y: 3376.0
z: 384.0
}
is_alive: true
player_id: -1
bounding_radius: 144
facing: 180
ground_height: 384
vision_range_daytime: 900
vision_range_nighttime: 600
health: 1300
health_max: 1300
health_regen: 0.0
mana: 0
mana_max: 0
mana_regen: 0.0
base_movement_speed: 0
current_movement_speed: 100
anim_activity: -1
anim_cycle: 0.0
base_damage: 0
base_damage_variance: 0
bonus_damage: 0
attack_damage: 0
attack_range: 0
attack_speed: 1.0
attack_anim_point: 0.0
attack_acquisition_range: 0
attack_projectile_speed: 0
bounty_xp: 0
bounty_gold_min: 0
bounty_gold_max: 0
abilities {
handle: 72
ability_id: 5351
slot: 0
caster_handle: 71
cast_range: 0
channel_time: 0.0
is_activated: true
is_toggled: false
is_stolen: false
is_fully_castable: true
}
armor: 9.0
magic_resist: 0.0
}
units {
handle: 73
unit_type: BARRACKS
name: "npc_dota_badguys_range_rax_mid"
team_id: 3
level: 1
location {
x: 4336.0
y: 4183.0
z: 383.999755859375
}
is_alive: true
player_id: -1
bounding_radius: 144
facing: 135
ground_height: 384
vision_range_daytime: 900
vision_range_nighttime: 600
health: 1300
health_max: 1300
health_regen: 0.0
mana: 0
mana_max: 0
mana_regen: 0.0
base_movement_speed: 0
current_movement_speed: 100
anim_activity: -1
anim_cycle: 0.0
base_damage: 0
base_damage_variance: 0
bonus_damage: 0
attack_damage: 0
attack_range: 0
attack_speed: 1.0
attack_anim_point: 0.0
attack_acquisition_range: 0
attack_projectile_speed: 0
bounty_xp: 0
bounty_gold_min: 0
bounty_gold_max: 0
abilities {
handle: 74
ability_id: 5351
slot: 0
caster_handle: 73
cast_range: 0
channel_time: 0.0
is_activated: true
is_toggled: false
is_stolen: false
is_fully_castable: true
}
armor: 9.0
magic_resist: 0.0
}
units {
handle: 75
unit_type: BARRACKS
name: "npc_dota_badguys_melee_rax_mid"
team_id: 3
level: 1
location {
x: 4702.01171875
y: 3824.0126953125
z: 383.9998779296875
}
is_alive: true
player_id: -1
bounding_radius: 144
facing: 315
ground_height: 384
vision_range_daytime: 900
vision_range_nighttime: 600
health: 2200
health_max: 2200
health_regen: 5.0
mana: 0
mana_max: 0
mana_regen: 0.0
base_movement_speed: 0
current_movement_speed: 100
anim_activity: -1
anim_cycle: 0.0
base_damage: 0
base_damage_variance: 0
bonus_damage: 0
attack_damage: 0
attack_range: 0
attack_speed: 1.0
attack_anim_point: 0.0
attack_acquisition_range: 0
attack_projectile_speed: 0
bounty_xp: 0
bounty_gold_min: 0
bounty_gold_max: 0
abilities {
handle: 76
ability_id: 5351
slot: 0
caster_handle: 75
cast_range: 0
channel_time: 0.0
is_activated: true
is_toggled: false
is_stolen: false
is_fully_castable: true
}
armor: 13.0
magic_resist: 0.0
}
units {
handle: 77
unit_type: BARRACKS
name: "npc_dota_badguys_melee_rax_top"
team_id: 3
level: 1
location {
x: 3898.0166015625
y: 5496.0009765625
z: 383.9998779296875
}
is_alive: true
player_id: -1
bounding_radius: 144
facing: 270
ground_height: 384
vision_range_daytime: 900
vision_range_nighttime: 600
health: 2200
health_max: 2200
health_regen: 5.0
mana: 0
mana_max: 0
mana_regen: 0.0
base_movement_speed: 0
current_movement_speed: 100
anim_activity: -1
anim_cycle: 0.0
base_damage: 0
base_damage_variance: 0
bonus_damage: 0
attack_damage: 0
attack_range: 0
attack_speed: 1.0
attack_anim_point: 0.0
attack_acquisition_range: 0
attack_projectile_speed: 0
bounty_xp: 0
bounty_gold_min: 0
bounty_gold_max: 0
abilities {
handle: 78
ability_id: 5351
slot: 0
caster_handle: 77
cast_range: 0
channel_time: 0.0
is_activated: true
is_toggled: false
is_stolen: false
is_fully_castable: true
}
armor: 13.0
magic_resist: 0.0
}
units {
handle: 79
unit_type: BARRACKS
name: "npc_dota_badguys_range_rax_top"
team_id: 3
level: 1
location {
x: 3894.0
y: 6025.0
z: 383.9998779296875
}
is_alive: true
player_id: -1
bounding_radius: 144
facing: 90
ground_height: 384
vision_range_daytime: 900
vision_range_nighttime: 600
health: 1300
health_max: 1300
health_regen: 0.0
mana: 0
mana_max: 0
mana_regen: 0.0
base_movement_speed: 0
current_movement_speed: 100
anim_activity: -1
anim_cycle: 0.0
base_damage: 0
base_damage_variance: 0
bonus_damage: 0
attack_damage: 0
attack_range: 0
attack_speed: 1.0
attack_anim_point: 0.0
attack_acquisition_range: 0
attack_projectile_speed: 0
bounty_xp: 0
bounty_gold_min: 0
bounty_gold_max: 0
abilities {
handle: 80
ability_id: 5351
slot: 0
caster_handle: 79
cast_range: 0
channel_time: 0.0
is_activated: true
is_toggled: false
is_stolen: false
is_fully_castable: true
}
armor: 9.0
magic_resist: 0.0
}
units {
handle: 81
unit_type: FORT
name: "npc_dota_badguys_fort"
team_id: 3
level: 1
location {
x: 5527.9970703125
y: 4999.998046875
z: 376.0
}
is_alive: true
player_id: -1
bounding_radius: 373
facing: 45
ground_height: 384
vision_range_daytime: 2600
vision_range_nighttime: 2600
health: 4500
health_max: 4500
health_regen: 12.0
mana: 0
mana_max: 0
mana_regen: 0.0
base_movement_speed: 0
current_movement_speed: 100
anim_activity: -1
anim_cycle: 0.0
base_damage: 0
base_damage_variance: 0
bonus_damage: 0
attack_damage: 0
attack_range: 0
attack_speed: 1.0
attack_anim_point: 0.0
attack_acquisition_range: 0
attack_projectile_speed: 0
bounty_xp: 0
bounty_gold_min: 0
bounty_gold_max: 0
abilities {
handle: 82
ability_id: 5351
slot: 0
caster_handle: 81
cast_range: 0
channel_time: 0.0
is_activated: true
is_toggled: false
is_stolen: false
is_fully_castable: true
}
armor: 13.0
magic_resist: 0.0
}
units {
handle: 83
unit_type: FORT
name: "npc_dota_goodguys_fort"
team_id: 2
level: 1
location {
x: -5919.9931640625
y: -5351.994140625
z: 367.9998779296875
}
is_alive: true
player_id: -1
bounding_radius: 298
facing: 345
ground_height: 384
vision_range_daytime: 2600
vision_range_nighttime: 2600
health: 4500
health_max: 4500
health_regen: 12.0
mana: 0
mana_max: 0
mana_regen: 0.0
base_movement_speed: 0
current_movement_speed: 100
anim_activity: -1
anim_cycle: 0.0
base_damage: 0
base_damage_variance: 0
bonus_damage: 0
attack_damage: 0
attack_range: 0
attack_speed: 1.0
attack_anim_point: 0.0
attack_acquisition_range: 0
attack_projectile_speed: 0
attacks_per_second: -2147483648
last_attack_time: 0.0
bounty_xp: 0
bounty_gold_min: 0
bounty_gold_max: 0
is_channeling: false
is_attack_immune: false
is_blind: false
is_block_disabled: false
is_disarmed: false
is_evade_disabled: false
is_hexed: false
is_invisible: false
is_invulnerable: true
is_magic_immune: false
is_muted: false
is_nightmared: false
is_rooted: false
is_silenced: false
is_specially_deniable: false
is_stunned: false
is_unable_to_miss: false
has_scepter: false
abilities {
handle: 84
ability_id: 5351
slot: 0
caster_handle: 83
level: 1
cast_range: 0
channel_time: 0.0
cooldown_remaining: 0.0
is_activated: true
is_toggled: false
is_in_ability_phase: false
is_channeling: false
is_stolen: false
is_fully_castable: true
}
modifiers {
name: "modifier_backdoor_protection_in_base"
stack_count: 0
ability_handle: 84
ability_id: 5351
}
modifiers {
name: "modifier_invulnerable"
stack_count: 0
}
modifiers {
name: "modifier_tower_truesight_aura"
stack_count: 0
}
armor: 13.0
magic_resist: 0.0
}
units {
handle: 85
unit_type: TOWER
name: "npc_dota_badguys_tower4"
team_id: 3
level: 4
location {
x: 4943.9990234375
y: 4776.0
z: 383.9998779296875
}
is_alive: true
player_id: -1
bounding_radius: 144
facing: 43
ground_height: 384
vision_range_daytime: 1900
vision_range_nighttime: 800
health: 2100
health_max: 2100
health_regen: 0.0
mana: 0
mana_max: 0
mana_regen: 0.0
base_movement_speed: 0
current_movement_speed: 100
anim_activity: 1500
anim_cycle: 0.600006103515625
base_damage: 152
base_damage_variance: 10
bonus_damage: 0
attack_damage: 152
attack_range: 700
attack_speed: 1.0
attack_anim_point: 0.6000000238418579
attack_acquisition_range: 700
attack_projectile_speed: 750
bounty_xp: 0
bounty_gold_min: 0
bounty_gold_max: 0
abilities {
handle: 86
ability_id: 5351
slot: 0
caster_handle: 85
cast_range: 0
channel_time: 0.0
is_activated: true
is_toggled: false
is_stolen: false
is_fully_castable: true
}
armor: 21.0
magic_resist: 0.0
}
units {
handle: 87
unit_type: TOWER
name: "npc_dota_badguys_tower2_top"
team_id: 3
level: 2
location {
x: -0.00034500000765547156
y: 6016.0
z: 256.0
}
is_alive: true
player_id: -1
bounding_radius: 144
facing: 0
ground_height: 256
vision_range_daytime: 1900
vision_range_nighttime: 800
health: 1900
health_max: 1900
health_regen: 0.0
mana: 0
mana_max: 0
mana_regen: 0.0
base_movement_speed: 0
current_movement_speed: 100
anim_activity: 1500
anim_cycle: 0.600006103515625
base_damage: 152
base_damage_variance: 10
bonus_damage: 0
attack_damage: 152
attack_range: 700
attack_speed: 1.0
attack_anim_point: 0.6000000238418579
attack_acquisition_range: 700
attack_projectile_speed: 750
bounty_xp: 0
bounty_gold_min: 0
bounty_gold_max: 0
abilities {
handle: 88
ability_id: 5350
slot: 0
caster_handle: 87
cast_range: 0
channel_time: 0.0
is_activated: true
is_toggled: false
is_stolen: false
is_fully_castable: true
}
armor: 14.0
magic_resist: 0.0
}
units {
handle: 89
unit_type: TOWER
name: "npc_dota_badguys_tower1_top"
team_id: 3
level: 1
location {
x: -4672.00048828125
y: 6016.0
z: 256.0
}
is_alive: true
player_id: -1
bounding_radius: 144
facing: 0
ground_height: 256
vision_range_daytime: 1900
vision_range_nighttime: 800
health: 1800
health_max: 1800
health_regen: 0.0
mana: 0
mana_max: 0
mana_regen: 0.0
base_movement_speed: 0
current_movement_speed: 100
anim_activity: 1500
anim_cycle: 0.600006103515625
base_damage: 110
base_damage_variance: 10
bonus_damage: 0
attack_damage: 110
attack_range: 700
attack_speed: 1.0
attack_anim_point: 0.6000000238418579
attack_acquisition_range: 700
attack_projectile_speed: 750
bounty_xp: 0
bounty_gold_min: 0
bounty_gold_max: 0
armor: 12.0
magic_resist: 0.0
}
units {
handle: 90
unit_type: TOWER
name: "npc_dota_badguys_tower2_mid"
team_id: 3
level: 2
location {
x: 2496.0
y: 2111.999755859375
z: 256.0
}
is_alive: true
player_id: -1
bounding_radius: 144
facing: 45
ground_height: 256
vision_range_daytime: 1900
vision_range_nighttime: 800
health: 1900
health_max: 1900
health_regen: 0.0
mana: 0
mana_max: 0
mana_regen: 0.0
base_movement_speed: 0
current_movement_speed: 100
anim_activity: 1500
anim_cycle: 0.600006103515625
base_damage: 152
base_damage_variance: 10
bonus_damage: 0
attack_damage: 152
attack_range: 700
attack_speed: 1.0
attack_anim_point: 0.6000000238418579
attack_acquisition_range: 700
attack_projectile_speed: 750
bounty_xp: 0
bounty_gold_min: 0
bounty_gold_max: 0
abilities {
handle: 91
ability_id: 5350
slot: 0
caster_handle: 90
cast_range: 0
channel_time: 0.0
is_activated: true
is_toggled: false
is_stolen: false
is_fully_castable: true
}
armor: 14.0
magic_resist: 0.0
}
units {
handle: 92
unit_type: TOWER
name: "npc_dota_badguys_tower1_mid"
team_id: 3
level: 1
location {
x: 523.999755859375
y: 651.9996948242188
z: 256.0
}
is_alive: true
player_id: -1
bounding_radius: 144
facing: 45
ground_height: 256
vision_range_daytime: 1900
vision_range_nighttime: 800
health: 1800
health_max: 1800
health_regen: 0.0
mana: 0
mana_max: 0
mana_regen: 0.0
base_movement_speed: 0
current_movement_speed: 100
anim_activity: 1500
anim_cycle: 0.600006103515625
base_damage: 110
base_damage_variance: 10
bonus_damage: 0
attack_damage: 110
attack_range: 700
attack_speed: 1.0
attack_anim_point: 0.6000000238418579
attack_acquisition_range: 700
attack_projectile_speed: 750
bounty_xp: 0
bounty_gold_min: 0
bounty_gold_max: 0
armor: 12.0
magic_resist: 0.0
}
units {
handle: 93
unit_type: TOWER
name: "npc_dota_badguys_tower2_bot"
team_id: 3
level: 2
location {
x: 6208.0
y: 383.99951171875
z: 256.0
}
is_alive: true
player_id: -1
bounding_radius: 144
facing: 90
ground_height: 256
vision_range_daytime: 1900
vision_range_nighttime: 800
health: 1900
health_max: 1900
health_regen: 0.0
mana: 0
mana_max: 0
mana_regen: 0.0
base_movement_speed: 0
current_movement_speed: 100
anim_activity: 1500
anim_cycle: 0.600006103515625
base_damage: 152
base_damage_variance: 10
bonus_damage: 0
attack_damage: 152
attack_range: 700
attack_speed: 1.0
attack_anim_point: 0.6000000238418579
attack_acquisition_range: 700
attack_projectile_speed: 750
bounty_xp: 0
bounty_gold_min: 0
bounty_gold_max: 0
abilities {
handle: 94
ability_id: 5350
slot: 0
caster_handle: 93
cast_range: 0
channel_time: 0.0
is_activated: true
is_toggled: false
is_stolen: false
is_fully_castable: true
}
armor: 14.0
magic_resist: 0.0
}
units {
handle: 95
unit_type: TOWER
name: "npc_dota_badguys_tower3_bot"
team_id: 3
level: 3
location {
x: 6336.0
y: 3031.99951171875
z: 383.999755859375
}
is_alive: true
player_id: -1
bounding_radius: 144
facing: 90
ground_height: 384
vision_range_daytime: 1900
vision_range_nighttime: 800
health: 2000
health_max: 2000
health_regen: 0.0
mana: 0
mana_max: 0
mana_regen: 0.0
base_movement_speed: 0
current_movement_speed: 100
anim_activity: 1500
anim_cycle: 0.600006103515625
base_damage: 152
base_damage_variance: 10
bonus_damage: 0
attack_damage: 152
attack_range: 700
attack_speed: 1.0
attack_anim_point: 0.6000000238418579
attack_acquisition_range: 700
attack_projectile_speed: 750
bounty_xp: 0
bounty_gold_min: 0
bounty_gold_max: 0
abilities {
handle: 96
ability_id: 5351
slot: 0
caster_handle: 95
cast_range: 0
channel_time: 0.0
is_activated: true
is_toggled: false
is_stolen: false
is_fully_castable: true
}
armor: 14.0
magic_resist: 0.0
}
units {
handle: 97
unit_type: TOWER
name: "npc_dota_badguys_tower3_top"
team_id: 3
level: 3
location {
x: 3551.999755859375
y: 5776.0
z: 384.0
}
is_alive: true
player_id: -1
bounding_radius: 144
facing: 0
ground_height: 384
vision_range_daytime: 1900
vision_range_nighttime: 800
health: 2000
health_max: 2000
health_regen: 0.0
mana: 0
mana_max: 0
mana_regen: 0.0
base_movement_speed: 0
current_movement_speed: 100
anim_activity: 1500
anim_cycle: 0.600006103515625
base_damage: 152
base_damage_variance: 10
bonus_damage: 0
attack_damage: 152
attack_range: 700
attack_speed: 1.0
attack_anim_point: 0.6000000238418579
attack_acquisition_range: 700
attack_projectile_speed: 750
bounty_xp: 0
bounty_gold_min: 0
bounty_gold_max: 0
abilities {
handle: 98
ability_id: 5351
slot: 0
caster_handle: 97
cast_range: 0
channel_time: 0.0
is_activated: true
is_toggled: false
is_stolen: false
is_fully_castable: true
}
armor: 14.0
magic_resist: 0.0
}
units {
handle: 99
unit_type: TOWER
name: "npc_dota_badguys_tower3_mid"
team_id: 3
level: 3
location {
x: 4272.0
y: 3759.0
z: 384.0
}
is_alive: true
player_id: -1
bounding_radius: 144
facing: 45
ground_height: 384
vision_range_daytime: 1900
vision_range_nighttime: 800
health: 2000
health_max: 2000
health_regen: 0.0
mana: 0
mana_max: 0
mana_regen: 0.0
base_movement_speed: 0
current_movement_speed: 100
anim_activity: 1500
anim_cycle: 0.600006103515625
base_damage: 152
base_damage_variance: 10
bonus_damage: 0
attack_damage: 152
attack_range: 700
attack_speed: 1.0
attack_anim_point: 0.6000000238418579
attack_acquisition_range: 700
attack_projectile_speed: 750
bounty_xp: 0
bounty_gold_min: 0
bounty_gold_max: 0
abilities {
handle: 100
ability_id: 5351
slot: 0
caster_handle: 99
cast_range: 0
channel_time: 0.0
is_activated: true
is_toggled: false
is_stolen: false
is_fully_castable: true
}
armor: 14.0
magic_resist: 0.0
}
units {
handle: 101
unit_type: TOWER
name: "npc_dota_badguys_tower4"
team_id: 3
level: 4
location {
x: 5279.99951171875
y: 4431.9990234375
z: 383.9998779296875
}
is_alive: true
player_id: -1
bounding_radius: 144
facing: 42
ground_height: 384
vision_range_daytime: 1900
vision_range_nighttime: 800
health: 2100
health_max: 2100
health_regen: 0.0
mana: 0
mana_max: 0
mana_regen: 0.0
base_movement_speed: 0
current_movement_speed: 100
anim_activity: 1500
anim_cycle: 0.600006103515625
base_damage: 152
base_damage_variance: 10
bonus_damage: 0
attack_damage: 152
attack_range: 700
attack_speed: 1.0
attack_anim_point: 0.6000000238418579
attack_acquisition_range: 700
attack_projectile_speed: 750
bounty_xp: 0
bounty_gold_min: 0
bounty_gold_max: 0
abilities {
handle: 102
ability_id: 5351
slot: 0
caster_handle: 101
cast_range: 0
channel_time: 0.0
is_activated: true
is_toggled: false
is_stolen: false
is_fully_castable: true
}
armor: 21.0
magic_resist: 0.0
}
units {
handle: 103
unit_type: TOWER
name: "npc_dota_goodguys_tower4"
team_id: 2
level: 4
location {
x: -5391.99853515625
y: -5191.99853515625
z: 383.9998779296875
}
is_alive: true
player_id: -1
bounding_radius: 144
facing: 45
ground_height: 384
vision_range_daytime: 1900
vision_range_nighttime: 800
health: 2100
health_max: 2100
health_regen: 0.0
mana: 0
mana_max: 0
mana_regen: 0.0
base_movement_speed: 0
current_movement_speed: 100
anim_activity: 1500
anim_cycle: 0.600006103515625
base_damage: 152
base_damage_variance: 10
bonus_damage: 0
attack_damage: 152
attack_range: 700
attack_speed: 1.0
attack_anim_point: 0.6000000238418579
attack_acquisition_range: 700
attack_projectile_speed: 750
attacks_per_second: 1
last_attack_time: 0.0
bounty_xp: 0
bounty_gold_min: 0
bounty_gold_max: 0
is_channeling: false
is_attack_immune: false
is_blind: false
is_block_disabled: false
is_disarmed: false
is_evade_disabled: false
is_hexed: false
is_invisible: false
is_invulnerable: true
is_magic_immune: false
is_muted: false
is_nightmared: false
is_rooted: false
is_silenced: false
is_specially_deniable: false
is_stunned: false
is_unable_to_miss: false
has_scepter: false
abilities {
handle: 104
ability_id: 5351
slot: 0
caster_handle: 103
level: 1
cast_range: 0
channel_time: 0.0
cooldown_remaining: 0.0
is_activated: true
is_toggled: false
is_in_ability_phase: false
is_channeling: false
is_stolen: false
is_fully_castable: true
}
modifiers {
name: "modifier_backdoor_protection_in_base"
stack_count: 0
ability_handle: 104
ability_id: 5351
}
modifiers {
name: "modifier_invulnerable"
stack_count: 0
}
modifiers {
name: "modifier_tower_truesight_aura"
stack_count: 0
}
modifiers {
name: "modifier_tower_aura"
stack_count: 0
}
armor: 21.0
magic_resist: 0.0
}
units {
handle: 105
unit_type: TOWER
name: "npc_dota_goodguys_tower1_mid"
team_id: 2
level: 1
location {
x: -1543.99853515625
y: -1407.998291015625
z: 255.9998779296875
}
is_alive: true
player_id: -1
bounding_radius: 144
facing: 45
ground_height: 256
vision_range_daytime: 1900
vision_range_nighttime: 800
health: 1800
health_max: 1800
health_regen: 0.0
mana: 0
mana_max: 0
mana_regen: 0.0
base_movement_speed: 0
current_movement_speed: 100
anim_activity: 1500
anim_cycle: 0.600006103515625
base_damage: 110
base_damage_variance: 10
bonus_damage: 0
attack_damage: 110
attack_range: 700
attack_speed: 1.0
attack_anim_point: 0.6000000238418579
attack_acquisition_range: 700
attack_projectile_speed: 750
attacks_per_second: 1
last_attack_time: 0.0
bounty_xp: 0
bounty_gold_min: 0
bounty_gold_max: 0
is_channeling: false
is_attack_immune: false
is_blind: false
is_block_disabled: false
is_disarmed: false
is_evade_disabled: false
is_hexed: false
is_invisible: false
is_invulnerable: true
is_magic_immune: false
is_muted: false
is_nightmared: false
is_rooted: false
is_silenced: false
is_specially_deniable: false
is_stunned: false
is_unable_to_miss: false
has_scepter: false
modifiers {
name: "modifier_invulnerable"
stack_count: 0
}
modifiers {
name: "modifier_tower_truesight_aura"
stack_count: 0
}
modifiers {
name: "modifier_tower_aura"
stack_count: 0
}
armor: 12.0
magic_resist: 0.0
}
units {
handle: 106
unit_type: BUILDING
name: "npc_dota_goodguys_fillers"
team_id: 2
level: 1
location {
x: -6589.78564453125
y: -4206.744140625
z: 368.0
}
is_alive: true
player_id: -1
bounding_radius: 96
facing: 302
ground_height: 384
vision_range_daytime: 900
vision_range_nighttime: 600
health: 1000
health_max: 1000
health_regen: 0.0
mana: 0
mana_max: 0
mana_regen: 0.0
base_movement_speed: 0
current_movement_speed: 100
anim_activity: -1
anim_cycle: 0.0
base_damage: 0
base_damage_variance: 0
bonus_damage: 0
attack_damage: 0
attack_range: 0
attack_speed: 1.0
attack_anim_point: 0.0
attack_acquisition_range: 0
attack_projectile_speed: 0
attacks_per_second: -2147483648
last_attack_time: 0.0
bounty_xp: 0
bounty_gold_min: 75
bounty_gold_max: 75
is_channeling: false
is_attack_immune: false
is_blind: false
is_block_disabled: false
is_disarmed: false
is_evade_disabled: false
is_hexed: false
is_invisible: false
is_invulnerable: true
is_magic_immune: false
is_muted: false
is_nightmared: false
is_rooted: false
is_silenced: false
is_specially_deniable: false
is_stunned: false
is_unable_to_miss: false
has_scepter: false
abilities {
handle: 107
ability_id: 5351
slot: 0
caster_handle: 106
level: 1
cast_range: 0
channel_time: 0.0
cooldown_remaining: 0.0
is_activated: true
is_toggled: false
is_in_ability_phase: false
is_channeling: false
is_stolen: false
is_fully_castable: true
}
modifiers {
name: "modifier_backdoor_protection_in_base"
stack_count: 0
ability_handle: 107
ability_id: 5351
}
modifiers {
name: "modifier_invulnerable"
stack_count: 0
}
armor: 10.0
magic_resist: 0.0
}
units {
handle: 108
unit_type: BUILDING
name: "npc_dota_goodguys_fillers"
team_id: 2
level: 1
location {
x: -5838.1474609375
y: -4292.375
z: 368.0
}
is_alive: true
player_id: -1
bounding_radius: 96
facing: 221
ground_height: 384
vision_range_daytime: 900
vision_range_nighttime: 600
health: 1000
health_max: 1000
health_regen: 0.0
mana: 0
mana_max: 0
mana_regen: 0.0
base_movement_speed: 0
current_movement_speed: 100
anim_activity: -1
anim_cycle: 0.0
base_damage: 0
base_damage_variance: 0
bonus_damage: 0
attack_damage: 0
attack_range: 0
attack_speed: 1.0
attack_anim_point: 0.0
attack_acquisition_range: 0
attack_projectile_speed: 0
attacks_per_second: -2147483648
last_attack_time: 0.0
bounty_xp: 0
bounty_gold_min: 75
bounty_gold_max: 75
is_channeling: false
is_attack_immune: false
is_blind: false
is_block_disabled: false
is_disarmed: false
is_evade_disabled: false
is_hexed: false
is_invisible: false
is_invulnerable: true
is_magic_immune: false
is_muted: false
is_nightmared: false
is_rooted: false
is_silenced: false
is_specially_deniable: false
is_stunned: false
is_unable_to_miss: false
has_scepter: false
abilities {
handle: 109
ability_id: 5351
slot: 0
caster_handle: 108
level: 1
cast_range: 0
channel_time: 0.0
cooldown_remaining: 0.0
is_activated: true
is_toggled: false
is_in_ability_phase: false
is_channeling: false
is_stolen: false
is_fully_castable: true
}
modifiers {
name: "modifier_backdoor_protection_in_base"
stack_count: 0
ability_handle: 109
ability_id: 5351
}
modifiers {
name: "modifier_invulnerable"
stack_count: 0
}
armor: 10.0
magic_resist: 0.0
}
units {
handle: 110
unit_type: BUILDING
name: "npc_dota_goodguys_fillers"
team_id: 2
level: 1
location {
x: -4752.0888671875
y: -6080.0
z: 368.0
}
is_alive: true
player_id: -1
bounding_radius: 96
facing: 304
ground_height: 384
vision_range_daytime: 900
vision_range_nighttime: 600
health: 1000
health_max: 1000
health_regen: 0.0
mana: 0
mana_max: 0
mana_regen: 0.0
base_movement_speed: 0
current_movement_speed: 100
anim_activity: -1
anim_cycle: 0.0
base_damage: 0
base_damage_variance: 0
bonus_damage: 0
attack_damage: 0
attack_range: 0
attack_speed: 1.0
attack_anim_point: 0.0
attack_acquisition_range: 0
attack_projectile_speed: 0
attacks_per_second: -2147483648
last_attack_time: 0.0
bounty_xp: 0
bounty_gold_min: 75
bounty_gold_max: 75
is_channeling: false
is_attack_immune: false
is_blind: false
is_block_disabled: false
is_disarmed: false
is_evade_disabled: false
is_hexed: false
is_invisible: false
is_invulnerable: true
is_magic_immune: false
is_muted: false
is_nightmared: false
is_rooted: false
is_silenced: false
is_specially_deniable: false
is_stunned: false
is_unable_to_miss: false
has_scepter: false
abilities {
handle: 111
ability_id: 5351
slot: 0
caster_handle: 110
level: 1
cast_range: 0
channel_time: 0.0
cooldown_remaining: 0.0
is_activated: true
is_toggled: false
is_in_ability_phase: false
is_channeling: false
is_stolen: false
is_fully_castable: true
}
modifiers {
name: "modifier_backdoor_protection_in_base"
stack_count: 0
ability_handle: 111
ability_id: 5351
}
modifiers {
name: "modifier_invulnerable"
stack_count: 0
}
armor: 10.0
magic_resist: 0.0
}
units {
handle: 112
unit_type: BUILDING
name: "npc_dota_goodguys_fillers"
team_id: 2
level: 1
location {
x: -5248.0
y: -4736.0
z: 368.0
}
is_alive: true
player_id: -1
bounding_radius: 96
facing: 303
ground_height: 384
vision_range_daytime: 900
vision_range_nighttime: 600
health: 1000
health_max: 1000
health_regen: 0.0
mana: 0
mana_max: 0
mana_regen: 0.0
base_movement_speed: 0
current_movement_speed: 100
anim_activity: -1
anim_cycle: 0.0
base_damage: 0
base_damage_variance: 0
bonus_damage: 0
attack_damage: 0
attack_range: 0
attack_speed: 1.0
attack_anim_point: 0.0
attack_acquisition_range: 0
attack_projectile_speed: 0
attacks_per_second: -2147483648
last_attack_time: 0.0
bounty_xp: 0
bounty_gold_min: 75
bounty_gold_max: 75
is_channeling: false
is_attack_immune: false
is_blind: false
is_block_disabled: false
is_disarmed: false
is_evade_disabled: false
is_hexed: false
is_invisible: false
is_invulnerable: true
is_magic_immune: false
is_muted: false
is_nightmared: false
is_rooted: false
is_silenced: false
is_specially_deniable: false
is_stunned: false
is_unable_to_miss: false
has_scepter: false
abilities {
handle: 113
ability_id: 5351
slot: 0
caster_handle: 112
level: 1
cast_range: 0
channel_time: 0.0
cooldown_remaining: 0.0
is_activated: true
is_toggled: false
is_in_ability_phase: false
is_channeling: false
is_stolen: false
is_fully_castable: true
}
modifiers {
name: "modifier_backdoor_protection_in_base"
stack_count: 0
ability_handle: 113
ability_id: 5351
}
modifiers {
name: "modifier_invulnerable"
stack_count: 0
}
armor: 10.0
magic_resist: 0.0
}
units {
handle: 114
unit_type: BUILDING
name: "npc_dota_goodguys_fillers"
team_id: 2
level: 1
location {
x: -4782.1474609375
y: -5268.375
z: 368.0
}
is_alive: true
player_id: -1
bounding_radius: 96
facing: 232
ground_height: 384
vision_range_daytime: 900
vision_range_nighttime: 600
health: 1000
health_max: 1000
health_regen: 0.0
mana: 0
mana_max: 0
mana_regen: 0.0
base_movement_speed: 0
current_movement_speed: 100
anim_activity: -1
anim_cycle: 0.0
base_damage: 0
base_damage_variance: 0
bonus_damage: 0
attack_damage: 0
attack_range: 0
attack_speed: 1.0
attack_anim_point: 0.0
attack_acquisition_range: 0
attack_projectile_speed: 0
attacks_per_second: -2147483648
last_attack_time: 0.0
bounty_xp: 0
bounty_gold_min: 75
bounty_gold_max: 75
is_channeling: false
is_attack_immune: false
is_blind: false
is_block_disabled: false
is_disarmed: false
is_evade_disabled: false
is_hexed: false
is_invisible: false
is_invulnerable: true
is_magic_immune: false
is_muted: false
is_nightmared: false
is_rooted: false
is_silenced: false
is_specially_deniable: false
is_stunned: false
is_unable_to_miss: false
has_scepter: false
abilities {
handle: 115
ability_id: 5351
slot: 0
caster_handle: 114
level: 1
cast_range: 0
channel_time: 0.0
cooldown_remaining: 0.0
is_activated: true
is_toggled: false
is_in_ability_phase: false
is_channeling: false
is_stolen: false
is_fully_castable: true
}
modifiers {
name: "modifier_backdoor_protection_in_base"
stack_count: 0
ability_handle: 115
ability_id: 5351
}
modifiers {
name: "modifier_invulnerable"
stack_count: 0
}
armor: 10.0
magic_resist: 0.0
}
units {
handle: 116
unit_type: BUILDING
name: "npc_dota_badguys_fillers"
team_id: 3
level: 1
location {
x: 6326.2216796875
y: 3798.05029296875
z: 384.0384521484375
}
is_alive: true
player_id: -1
bounding_radius: 96
facing: 244
ground_height: 384
vision_range_daytime: 900
vision_range_nighttime: 600
health: 1000
health_max: 1000
health_regen: 0.0
mana: 0
mana_max: 0
mana_regen: 0.0
base_movement_speed: 0
current_movement_speed: 100
anim_activity: -1
anim_cycle: 0.0
base_damage: 0
base_damage_variance: 0
bonus_damage: 0
attack_damage: 0
attack_range: 0
attack_speed: 1.0
attack_anim_point: 0.0
attack_acquisition_range: 0
attack_projectile_speed: 0
bounty_xp: 0
bounty_gold_min: 75
bounty_gold_max: 75
abilities {
handle: 117
ability_id: 5351
slot: 0
caster_handle: 116
cast_range: 0
channel_time: 0.0
is_activated: true
is_toggled: false
is_stolen: false
is_fully_castable: true
}
armor: 10.0
magic_resist: 0.0
}
units {
handle: 118
unit_type: BUILDING
name: "npc_dota_badguys_fillers"
team_id: 3
level: 1
location {
x: 5520.9228515625
y: 3949.039306640625
z: 384.0384521484375
}
is_alive: true
player_id: -1
bounding_radius: 96
facing: 294
ground_height: 384
vision_range_daytime: 900
vision_range_nighttime: 600
health: 1000
health_max: 1000
health_regen: 0.0
mana: 0
mana_max: 0
mana_regen: 0.0
base_movement_speed: 0
current_movement_speed: 100
anim_activity: -1
anim_cycle: 0.0
base_damage: 0
base_damage_variance: 0
bonus_damage: 0
attack_damage: 0
attack_range: 0
attack_speed: 1.0
attack_anim_point: 0.0
attack_acquisition_range: 0
attack_projectile_speed: 0
bounty_xp: 0
bounty_gold_min: 75
bounty_gold_max: 75
abilities {
handle: 119
ability_id: 5351
slot: 0
caster_handle: 118
cast_range: 0
channel_time: 0.0
is_activated: true
is_toggled: false
is_stolen: false
is_fully_castable: true
}
armor: 10.0
magic_resist: 0.0
}
units {
handle: 120
unit_type: BUILDING
name: "npc_dota_badguys_fillers"
team_id: 3
level: 1
location {
x: 4894.154296875
y: 4370.02392578125
z: 392.2940673828125
}
is_alive: true
player_id: -1
bounding_radius: 96
facing: 46
ground_height: 384
vision_range_daytime: 900
vision_range_nighttime: 600
health: 1000
health_max: 1000
health_regen: 0.0
mana: 0
mana_max: 0
mana_regen: 0.0
base_movement_speed: 0
current_movement_speed: 100
anim_activity: -1
anim_cycle: 0.0
base_damage: 0
base_damage_variance: 0
bonus_damage: 0
attack_damage: 0
attack_range: 0
attack_speed: 1.0
attack_anim_point: 0.0
attack_acquisition_range: 0
attack_projectile_speed: 0
bounty_xp: 0
bounty_gold_min: 75
bounty_gold_max: 75
abilities {
handle: 121
ability_id: 5351
slot: 0
caster_handle: 120
cast_range: 0
channel_time: 0.0
is_activated: true
is_toggled: false
is_stolen: false
is_fully_castable: true
}
armor: 10.0
magic_resist: 0.0
}
units {
handle: 122
unit_type: BUILDING
name: "npc_dota_badguys_fillers"
team_id: 3
level: 1
location {
x: 4480.923828125
y: 4989.0361328125
z: 384.0382080078125
}
is_alive: true
player_id: -1
bounding_radius: 96
facing: 120
ground_height: 384
vision_range_daytime: 900
vision_range_nighttime: 600
health: 1000
health_max: 1000
health_regen: 0.0
mana: 0
mana_max: 0
mana_regen: 0.0
base_movement_speed: 0
current_movement_speed: 100
anim_activity: -1
anim_cycle: 0.0
base_damage: 0
base_damage_variance: 0
bonus_damage: 0
attack_damage: 0
attack_range: 0
attack_speed: 1.0
attack_anim_point: 0.0
attack_acquisition_range: 0
attack_projectile_speed: 0
bounty_xp: 0
bounty_gold_min: 75
bounty_gold_max: 75
abilities {
handle: 123
ability_id: 5351
slot: 0
caster_handle: 122
cast_range: 0
channel_time: 0.0
is_activated: true
is_toggled: false
is_stolen: false
is_fully_castable: true
}
armor: 10.0
magic_resist: 0.0
}
units {
handle: 124
unit_type: BUILDING
name: "npc_dota_badguys_fillers"
team_id: 3
level: 1
location {
x: 4411.02685546875
y: 5753.46142578125
z: 384.0382080078125
}
is_alive: true
player_id: -1
bounding_radius: 96
facing: 65
ground_height: 384
vision_range_daytime: 900
vision_range_nighttime: 600
health: 1000
health_max: 1000
health_regen: 0.0
mana: 0
mana_max: 0
mana_regen: 0.0
base_movement_speed: 0
current_movement_speed: 100
anim_activity: -1
anim_cycle: 0.0
base_damage: 0
base_damage_variance: 0
bonus_damage: 0
attack_damage: 0
attack_range: 0
attack_speed: 1.0
attack_anim_point: 0.0
attack_acquisition_range: 0
attack_projectile_speed: 0
bounty_xp: 0
bounty_gold_min: 75
bounty_gold_max: 75
abilities {
handle: 125
ability_id: 5351
slot: 0
caster_handle: 124
cast_range: 0
channel_time: 0.0
is_activated: true
is_toggled: false
is_stolen: false
is_fully_castable: true
}
armor: 10.0
magic_resist: 0.0
}
units {
handle: 126
unit_type: TOWER
name: "npc_dota_badguys_tower1_bot"
team_id: 3
level: 1
location {
x: 6269.3388671875
y: -1728.74169921875
z: 256.0
}
is_alive: true
player_id: -1
bounding_radius: 144
facing: 90
ground_height: 256
vision_range_daytime: 1900
vision_range_nighttime: 800
health: 1800
health_max: 1800
health_regen: 0.0
mana: 0
mana_max: 0
mana_regen: 0.0
base_movement_speed: 0
current_movement_speed: 100
anim_activity: 1500
anim_cycle: 0.600006103515625
base_damage: 110
base_damage_variance: 10
bonus_damage: 0
attack_damage: 110
attack_range: 700
attack_speed: 1.0
attack_anim_point: 0.6000000238418579
attack_acquisition_range: 700
attack_projectile_speed: 750
bounty_xp: 0
bounty_gold_min: 0
bounty_gold_max: 0
armor: 12.0
magic_resist: 0.0
}
units {
handle: 127
unit_type: SHRINE
name: "npc_dota_goodguys_healers"
team_id: 2
level: 1
location {
x: 1317.41748046875
y: -4163.599609375
z: 387.3760070800781
}
is_alive: true
player_id: -1
bounding_radius: 96
facing: 310
ground_height: 384
vision_range_daytime: 0
vision_range_nighttime: 0
health: 1750
health_max: 1750
health_regen: 5.0
mana: 0
mana_max: 0
mana_regen: 0.0
base_movement_speed: 0
current_movement_speed: 100
anim_activity: -1
anim_cycle: 0.0
base_damage: 0
base_damage_variance: 0
bonus_damage: 0
attack_damage: 0
attack_range: 0
attack_speed: 1.0
attack_anim_point: 0.0
attack_acquisition_range: 0
attack_projectile_speed: 0
attacks_per_second: -2147483648
last_attack_time: 0.0
bounty_xp: 0
bounty_gold_min: 0
bounty_gold_max: 0
is_channeling: false
is_attack_immune: false
is_blind: false
is_block_disabled: false
is_disarmed: false
is_evade_disabled: false
is_hexed: false
is_invisible: false
is_invulnerable: true
is_magic_immune: false
is_muted: false
is_nightmared: false
is_rooted: false
is_silenced: false
is_specially_deniable: false
is_stunned: false
is_unable_to_miss: false
has_scepter: false
abilities {
handle: 128
ability_id: 5351
slot: 0
caster_handle: 127
level: 1
cast_range: 0
channel_time: 0.0
cooldown_remaining: 0.0
is_activated: true
is_toggled: false
is_in_ability_phase: false
is_channeling: false
is_stolen: false
is_fully_castable: true
}
abilities {
handle: 129
ability_id: 6226
slot: 1
caster_handle: 127
level: 1
cast_range: 0
channel_time: 0.0
cooldown_remaining: 389.2999572753906
is_activated: true
is_toggled: false
is_in_ability_phase: false
is_channeling: false
is_stolen: false
is_fully_castable: false
}
modifiers {
name: "modifier_filler_thinker"
stack_count: 0
ability_handle: 129
ability_id: 6226
}
modifiers {
name: "modifier_invulnerable"
stack_count: 0
}
armor: 17.0
magic_resist: 0.0
shrine_cooldown: 389.2999572753906
is_shrine_healing: false
}
units {
handle: 130
unit_type: SHRINE
name: "npc_dota_goodguys_healers"
team_id: 2
level: 1
location {
x: -4348.0732421875
y: 198.232177734375
z: 384.0
}
is_alive: true
player_id: -1
bounding_radius: 96
facing: 310
ground_height: 384
vision_range_daytime: 0
vision_range_nighttime: 0
health: 1750
health_max: 1750
health_regen: 5.0
mana: 0
mana_max: 0
mana_regen: 0.0
base_movement_speed: 0
current_movement_speed: 100
anim_activity: -1
anim_cycle: 0.0
base_damage: 0
base_damage_variance: 0
bonus_damage: 0
attack_damage: 0
attack_range: 0
attack_speed: 1.0
attack_anim_point: 0.0
attack_acquisition_range: 0
attack_projectile_speed: 0
attacks_per_second: -2147483648
last_attack_time: 0.0
bounty_xp: 0
bounty_gold_min: 0
bounty_gold_max: 0
is_channeling: false
is_attack_immune: false
is_blind: false
is_block_disabled: false
is_disarmed: false
is_evade_disabled: false
is_hexed: false
is_invisible: false
is_invulnerable: true
is_magic_immune: false
is_muted: false
is_nightmared: false
is_rooted: false
is_silenced: false
is_specially_deniable: false
is_stunned: false
is_unable_to_miss: false
has_scepter: false
abilities {
handle: 131
ability_id: 5351
slot: 0
caster_handle: 130
level: 1
cast_range: 0
channel_time: 0.0
cooldown_remaining: 0.0
is_activated: true
is_toggled: false
is_in_ability_phase: false
is_channeling: false
is_stolen: false
is_fully_castable: true
}
abilities {
handle: 132
ability_id: 6226
slot: 1
caster_handle: 130
level: 1
cast_range: 0
channel_time: 0.0
cooldown_remaining: 389.2999572753906
is_activated: true
is_toggled: false
is_in_ability_phase: false
is_channeling: false
is_stolen: false
is_fully_castable: false
}
modifiers {
name: "modifier_filler_thinker"
stack_count: 0
ability_handle: 132
ability_id: 6226
}
modifiers {
name: "modifier_invulnerable"
stack_count: 0
}
armor: 17.0
magic_resist: 0.0
shrine_cooldown: 389.2999572753906
is_shrine_healing: false
}
units {
handle: 133
unit_type: SHRINE
name: "npc_dota_badguys_healers"
team_id: 3
level: 1
location {
x: -1073.780517578125
y: 3826.17529296875
z: 416.0
}
is_alive: true
player_id: -1
bounding_radius: 96
facing: 0
ground_height: 384
vision_range_daytime: 0
vision_range_nighttime: 0
health: 1750
health_max: 1750
health_regen: 5.0
mana: 0
mana_max: 0
mana_regen: 0.0
base_movement_speed: 0
current_movement_speed: 100
anim_activity: -1
anim_cycle: 0.0
base_damage: 0
base_damage_variance: 0
bonus_damage: 0
attack_damage: 0
attack_range: 0
attack_speed: 1.0
attack_anim_point: 0.0
attack_acquisition_range: 0
attack_projectile_speed: 0
bounty_xp: 0
bounty_gold_min: 0
bounty_gold_max: 0
abilities {
handle: 134
ability_id: 5351
slot: 0
caster_handle: 133
cast_range: 0
channel_time: 0.0
is_activated: true
is_toggled: false
is_stolen: false
is_fully_castable: true
}
abilities {
handle: 135
ability_id: 6226
slot: 1
caster_handle: 133
cast_range: 0
channel_time: 0.0
is_activated: true
is_toggled: false
is_stolen: false
is_fully_castable: false
}
armor: 17.0
magic_resist: 0.0
shrine_cooldown: 389.2999572753906
is_shrine_healing: false
}
units {
handle: 136
unit_type: SHRINE
name: "npc_dota_badguys_healers"
team_id: 3
level: 1
location {
x: 3446.219482421875
y: 234.17523193359375
z: 385.21563720703125
}
is_alive: true
player_id: -1
bounding_radius: 96
facing: 0
ground_height: 384
vision_range_daytime: 0
vision_range_nighttime: 0
health: 1750
health_max: 1750
health_regen: 5.0
mana: 0
mana_max: 0
mana_regen: 0.0
base_movement_speed: 0
current_movement_speed: 100
anim_activity: -1
anim_cycle: 0.0
base_damage: 0
base_damage_variance: 0
bonus_damage: 0
attack_damage: 0
attack_range: 0
attack_speed: 1.0
attack_anim_point: 0.0
attack_acquisition_range: 0
attack_projectile_speed: 0
bounty_xp: 0
bounty_gold_min: 0
bounty_gold_max: 0
abilities {
handle: 137
ability_id: 5351
slot: 0
caster_handle: 136
cast_range: 0
channel_time: 0.0
is_activated: true
is_toggled: false
is_stolen: false
is_fully_castable: true
}
abilities {
handle: 138
ability_id: 6226
slot: 1
caster_handle: 136
cast_range: 0
channel_time: 0.0
is_activated: true
is_toggled: false
is_stolen: false
is_fully_castable: false
}
armor: 17.0
magic_resist: 0.0
shrine_cooldown: 389.2999572753906
is_shrine_healing: false
}
units {
handle: 139
unit_type: BUILDING
name: "npc_dota_badguys_fillers"
team_id: 3
level: 1
location {
x: 5286.2216796875
y: 3374.04833984375
z: 399.1309814453125
}
is_alive: true
player_id: -1
bounding_radius: 96
facing: 124
ground_height: 384
vision_range_daytime: 900
vision_range_nighttime: 600
health: 1000
health_max: 1000
health_regen: 0.0
mana: 0
mana_max: 0
mana_regen: 0.0
base_movement_speed: 0
current_movement_speed: 100
anim_activity: -1
anim_cycle: 0.0
base_damage: 0
base_damage_variance: 0
bonus_damage: 0
attack_damage: 0
attack_range: 0
attack_speed: 1.0
attack_anim_point: 0.0
attack_acquisition_range: 0
attack_projectile_speed: 0
bounty_xp: 0
bounty_gold_min: 75
bounty_gold_max: 75
abilities {
handle: 140
ability_id: 5351
slot: 0
caster_handle: 139
cast_range: 0
channel_time: 0.0
is_activated: true
is_toggled: false
is_stolen: false
is_fully_castable: true
}
armor: 10.0
magic_resist: 0.0
}
units {
handle: 141
unit_type: BUILDING
name: "npc_dota_badguys_fillers"
team_id: 3
level: 1
location {
x: 3783.576171875
y: 4718.4921875
z: 398.517578125
}
is_alive: true
player_id: -1
bounding_radius: 96
facing: 85
ground_height: 384
vision_range_daytime: 900
vision_range_nighttime: 600
health: 1000
health_max: 1000
health_regen: 0.0
mana: 0
mana_max: 0
mana_regen: 0.0
base_movement_speed: 0
current_movement_speed: 100
anim_activity: -1
anim_cycle: 0.0
base_damage: 0
base_damage_variance: 0
bonus_damage: 0
attack_damage: 0
attack_range: 0
attack_speed: 1.0
attack_anim_point: 0.0
attack_acquisition_range: 0
attack_projectile_speed: 0
bounty_xp: 0
bounty_gold_min: 75
bounty_gold_max: 75
abilities {
handle: 142
ability_id: 5351
slot: 0
caster_handle: 141
cast_range: 0
channel_time: 0.0
is_activated: true
is_toggled: false
is_stolen: false
is_fully_castable: true
}
armor: 10.0
magic_resist: 0.0
}
units {
handle: 143
unit_type: BUILDING
name: "npc_dota_goodguys_fillers"
team_id: 2
level: 1
location {
x: -5597.78515625
y: -3710.744140625
z: 408.0
}
is_alive: true
player_id: -1
bounding_radius: 96
facing: 302
ground_height: 384
vision_range_daytime: 900
vision_range_nighttime: 600
health: 1000
health_max: 1000
health_regen: 0.0
mana: 0
mana_max: 0
mana_regen: 0.0
base_movement_speed: 0
current_movement_speed: 100
anim_activity: -1
anim_cycle: 0.0
base_damage: 0
base_damage_variance: 0
bonus_damage: 0
attack_damage: 0
attack_range: 0
attack_speed: 1.0
attack_anim_point: 0.0
attack_acquisition_range: 0
attack_projectile_speed: 0
attacks_per_second: -2147483648
last_attack_time: 0.0
bounty_xp: 0
bounty_gold_min: 75
bounty_gold_max: 75
is_channeling: false
is_attack_immune: false
is_blind: false
is_block_disabled: false
is_disarmed: false
is_evade_disabled: false
is_hexed: false
is_invisible: false
is_invulnerable: true
is_magic_immune: false
is_muted: false
is_nightmared: false
is_rooted: false
is_silenced: false
is_specially_deniable: false
is_stunned: false
is_unable_to_miss: false
has_scepter: false
abilities {
handle: 144
ability_id: 5351
slot: 0
caster_handle: 143
level: 1
cast_range: 0
channel_time: 0.0
cooldown_remaining: 0.0
is_activated: true
is_toggled: false
is_in_ability_phase: false
is_channeling: false
is_stolen: false
is_fully_castable: true
}
modifiers {
name: "modifier_backdoor_protection_in_base"
stack_count: 0
ability_handle: 144
ability_id: 5351
}
modifiers {
name: "modifier_invulnerable"
stack_count: 0
}
armor: 10.0
magic_resist: 0.0
}
units {
handle: 145
unit_type: BUILDING
name: "npc_dota_goodguys_fillers"
team_id: 2
level: 1
location {
x: -4265.3359375
y: -5161.84765625
z: 384.0
}
is_alive: true
player_id: -1
bounding_radius: 96
facing: 313
ground_height: 384
vision_range_daytime: 900
vision_range_nighttime: 600
health: 1000
health_max: 1000
health_regen: 0.0
mana: 0
mana_max: 0
mana_regen: 0.0
base_movement_speed: 0
current_movement_speed: 100
anim_activity: -1
anim_cycle: 0.0
base_damage: 0
base_damage_variance: 0
bonus_damage: 0
attack_damage: 0
attack_range: 0
attack_speed: 1.0
attack_anim_point: 0.0
attack_acquisition_range: 0
attack_projectile_speed: 0
attacks_per_second: -2147483648
last_attack_time: 0.0
bounty_xp: 0
bounty_gold_min: 75
bounty_gold_max: 75
is_channeling: false
is_attack_immune: false
is_blind: false
is_block_disabled: false
is_disarmed: false
is_evade_disabled: false
is_hexed: false
is_invisible: false
is_invulnerable: true
is_magic_immune: false
is_muted: false
is_nightmared: false
is_rooted: false
is_silenced: false
is_specially_deniable: false
is_stunned: false
is_unable_to_miss: false
has_scepter: false
abilities {
handle: 146
ability_id: 5351
slot: 0
caster_handle: 145
level: 1
cast_range: 0
channel_time: 0.0
cooldown_remaining: 0.0
is_activated: true
is_toggled: false
is_in_ability_phase: false
is_channeling: false
is_stolen: false
is_fully_castable: true
}
modifiers {
name: "modifier_backdoor_protection_in_base"
stack_count: 0
ability_handle: 146
ability_id: 5351
}
modifiers {
name: "modifier_invulnerable"
stack_count: 0
}
armor: 10.0
magic_resist: 0.0
}
units {
handle: 147
unit_type: BUILDING
name: "dota_fountain"
team_id: 3
level: 1
location {
x: 7472.0
y: 6912.0
z: 512.0
}
is_alive: true
player_id: -1
bounding_radius: 144
facing: 143
ground_height: 512
vision_range_daytime: 1800
vision_range_nighttime: 1800
health: 500
health_max: 500
health_regen: 0.0
mana: 0
mana_max: 0
mana_regen: 0.0
base_movement_speed: 0
current_movement_speed: 100
anim_activity: -1
anim_cycle: 0.0
base_damage: 230
base_damage_variance: 10
bonus_damage: 0
attack_damage: 230
attack_range: 1200
attack_speed: 1.0
attack_anim_point: 0.0
attack_acquisition_range: 1200
attack_projectile_speed: 1400
bounty_xp: 0
bounty_gold_min: 0
bounty_gold_max: 0
armor: 0.0
magic_resist: 0.0
}
units {
handle: 148
unit_type: BUILDING
name: "dota_fountain"
team_id: 2
level: 1
location {
x: -7456.0
y: -6938.0
z: 528.0
}
is_alive: true
player_id: -1
bounding_radius: 144
facing: 65
ground_height: 512
vision_range_daytime: 1800
vision_range_nighttime: 1800
health: 500
health_max: 500
health_regen: 0.0
mana: 0
mana_max: 0
mana_regen: 0.0
base_movement_speed: 0
current_movement_speed: 100
anim_activity: -1
anim_cycle: 0.0
base_damage: 230
base_damage_variance: 10
bonus_damage: 0
attack_damage: 230
attack_range: 1200
attack_speed: 1.0
attack_anim_point: 0.0
attack_acquisition_range: 1200
attack_projectile_speed: 1400
attacks_per_second: 6
last_attack_time: 0.0
bounty_xp: 0
bounty_gold_min: 0
bounty_gold_max: 0
is_channeling: false
is_attack_immune: false
is_blind: false
is_block_disabled: false
is_disarmed: false
is_evade_disabled: false
is_hexed: false
is_invisible: false
is_invulnerable: true
is_magic_immune: false
is_muted: false
is_nightmared: false
is_rooted: false
is_silenced: false
is_specially_deniable: false
is_stunned: false
is_unable_to_miss: false
has_scepter: false
modifiers {
name: "modifier_invulnerable"
stack_count: 0
}
modifiers {
name: "modifier_fountain_aura"
stack_count: 0
}
modifiers {
name: "modifier_fountain_truesight_aura"
stack_count: 0
}
modifiers {
name: "modifier_fountain_passive"
stack_count: 0
}
armor: 0.0
magic_resist: 0.0
}
units {
handle: 149
unit_type: HERO
name: "npc_dota_hero_nevermore"
team_id: 2
level: 1
location {
x: -6700.0
y: -6700.00390625
z: 512.0
}
is_alive: true
player_id: 2
bounding_radius: 24
facing: 45
ground_height: 512
vision_range_daytime: 1800
vision_range_nighttime: 800
health: 488
health_max: 488
health_regen: 26.25
mana: 291
mana_max: 291
mana_regen: 18.35999870300293
base_movement_speed: 310
current_movement_speed: 313
anim_activity: 1534
anim_cycle: 0.7390666007995605
base_damage: 38
base_damage_variance: 3
bonus_damage: 0
attack_damage: 38
attack_range: 500
attack_speed: 1.25
attack_anim_point: 0.5
attack_acquisition_range: 800
attack_projectile_speed: 1200
attacks_per_second: 0
last_attack_time: 0.0
bounty_xp: 40
bounty_gold_min: 0
bounty_gold_max: 0
is_channeling: false
is_attack_immune: false
is_blind: false
is_block_disabled: false
is_disarmed: false
is_evade_disabled: false
is_hexed: false
is_invisible: false
is_invulnerable: false
is_magic_immune: false
is_muted: false
is_nightmared: false
is_rooted: false
is_silenced: false
is_specially_deniable: false
is_stunned: false
is_unable_to_miss: false
has_scepter: false
abilities {
handle: 150
ability_id: 5059
slot: 0
caster_handle: 149
level: 0
cast_range: 0
channel_time: 0.0
cooldown_remaining: 0.0
is_activated: true
is_toggled: false
is_in_ability_phase: false
is_channeling: false
is_stolen: false
is_fully_castable: false
}
abilities {
handle: 151
ability_id: 5060
slot: 1
caster_handle: 149
level: 0
cast_range: 0
channel_time: 0.0
cooldown_remaining: 0.0
is_activated: true
is_toggled: false
is_in_ability_phase: false
is_channeling: false
is_stolen: false
is_fully_castable: false
}
abilities {
handle: 152
ability_id: 5061
slot: 2
caster_handle: 149
level: 0
cast_range: 0
channel_time: 0.0
cooldown_remaining: 0.0
is_activated: true
is_toggled: false
is_in_ability_phase: false
is_channeling: false
is_stolen: false
is_fully_castable: false
}
abilities {
handle: 153
ability_id: 5062
slot: 3
caster_handle: 149
level: 0
cast_range: 0
channel_time: 0.0
cooldown_remaining: 0.0
is_activated: true
is_toggled: false
is_in_ability_phase: false
is_channeling: false
is_stolen: false
is_fully_castable: false
}
abilities {
handle: 154
ability_id: 5063
slot: 4
caster_handle: 149
level: 0
cast_range: 0
channel_time: 0.0
cooldown_remaining: 0.0
is_activated: true
is_toggled: false
is_in_ability_phase: false
is_channeling: false
is_stolen: false
is_fully_castable: false
}
abilities {
handle: 155
ability_id: 5064
slot: 5
caster_handle: 149
level: 0
cast_range: 0
channel_time: 0.0
cooldown_remaining: 0.0
is_activated: true
is_toggled: false
is_in_ability_phase: false
is_channeling: false
is_stolen: false
is_fully_castable: false
}
abilities {
handle: 156
ability_id: 5949
slot: 9
caster_handle: 149
level: 0
cast_range: 0
channel_time: 0.0
cooldown_remaining: 0.0
is_activated: true
is_toggled: false
is_in_ability_phase: false
is_channeling: false
is_stolen: false
is_fully_castable: false
}
abilities {
handle: 157
ability_id: 5906
slot: 10
caster_handle: 149
level: 0
cast_range: 0
channel_time: 0.0
cooldown_remaining: 0.0
is_activated: true
is_toggled: false
is_in_ability_phase: false
is_channeling: false
is_stolen: false
is_fully_castable: false
}
abilities {
handle: 158
ability_id: 6875
slot: 11
caster_handle: 149
level: 0
cast_range: 0
channel_time: 0.0
cooldown_remaining: 0.0
is_activated: true
is_toggled: false
is_in_ability_phase: false
is_channeling: false
is_stolen: false
is_fully_castable: false
}
abilities {
handle: 159
ability_id: 6141
slot: 12
caster_handle: 149
level: 0
cast_range: 0
channel_time: 0.0
cooldown_remaining: 0.0
is_activated: true
is_toggled: false
is_in_ability_phase: false
is_channeling: false
is_stolen: false
is_fully_castable: false
}
abilities {
handle: 160
ability_id: 6670
slot: 13
caster_handle: 149
level: 0
cast_range: 0
channel_time: 0.0
cooldown_remaining: 0.0
is_activated: true
is_toggled: false
is_in_ability_phase: false
is_channeling: false
is_stolen: false
is_fully_castable: false
}
abilities {
handle: 161
ability_id: 6070
slot: 14
caster_handle: 149
level: 0
cast_range: 0
channel_time: 0.0
cooldown_remaining: 0.0
is_activated: true
is_toggled: false
is_in_ability_phase: false
is_channeling: false
is_stolen: false
is_fully_castable: false
}
abilities {
handle: 162
ability_id: 6912
slot: 15
caster_handle: 149
level: 0
cast_range: 0
channel_time: 0.0
cooldown_remaining: 0.0
is_activated: true
is_toggled: false
is_in_ability_phase: false
is_channeling: false
is_stolen: false
is_fully_castable: false
}
abilities {
handle: 163
ability_id: 6445
slot: 16
caster_handle: 149
level: 0
cast_range: 0
channel_time: 0.0
cooldown_remaining: 0.0
is_activated: true
is_toggled: false
is_in_ability_phase: false
is_channeling: false
is_stolen: false
is_fully_castable: false
}
items {
handle: 164
ability_id: 46
slot: 15
caster_handle: 149
level: 1
cast_range: 0
channel_time: 3.0
cooldown_remaining: 99.20001220703125
is_activated: true
is_toggled: false
is_in_ability_phase: false
is_channeling: false
is_stolen: false
is_fully_castable: false
charges: 1
secondary_charges: 0
is_combined_locked: false
}
modifiers {
name: "modifier_fountain_aura_buff"
stack_count: 0
remaining_duration: 2.9666671752929688
}
action_type: 1
is_using_ability: false
primary_attribute: 1
is_illusion: false
respawn_time: 6.0
buyback_cost: 150
buyback_cooldown: 0.0
spell_amplification: 0.012600000016391277
armor: 3.999999761581421
magic_resist: 0.2595999836921692
evasion: 0.0
xp_needed_to_level: 230
ability_points: 1
reliable_gold: 0
unreliable_gold: 600
last_hits: 0
denies: 0
net_worth: 650
strength: 16
agility: 20
intelligence: 18
}
units {
handle: 165
unit_type: HERO
name: "npc_dota_hero_wisp"
team_id: 2
level: 1
location {
x: -6750.0
y: -6550.00390625
z: 512.0
}
is_alive: true
player_id: 3
bounding_radius: 24
facing: 45
ground_height: 512
vision_range_daytime: 1800
vision_range_nighttime: 800
health: 582
health_max: 582
health_regen: 31.225000381469727
mana: 351
mana_max: 351
mana_regen: 22.209999084472656
base_movement_speed: 280
current_movement_speed: 281
anim_activity: 1500
anim_cycle: 0.711212158203125
base_damage: 43
base_damage_variance: 4
bonus_damage: 0
attack_damage: 43
attack_range: 575
attack_speed: 1.1399999856948853
attack_anim_point: 0.15000000596046448
attack_acquisition_range: 800
attack_projectile_speed: 1200
attacks_per_second: 0
last_attack_time: 0.0
bounty_xp: 40
bounty_gold_min: 0
bounty_gold_max: 0
is_channeling: false
is_attack_immune: false
is_blind: false
is_block_disabled: false
is_disarmed: false
is_evade_disabled: false
is_hexed: false
is_invisible: false
is_invulnerable: false
is_magic_immune: false
is_muted: false
is_nightmared: false
is_rooted: false
is_silenced: false
is_specially_deniable: false
is_stunned: false
is_unable_to_miss: false
has_scepter: false
abilities {
handle: 166
ability_id: 5485
slot: 0
caster_handle: 165
level: 0
cast_range: 0
channel_time: 0.0
cooldown_remaining: 0.0
is_activated: true
is_toggled: false
is_in_ability_phase: false
is_channeling: false
is_stolen: false
is_fully_castable: false
}
abilities {
handle: 167
ability_id: 5486
slot: 1
caster_handle: 165
level: 0
cast_range: 0
channel_time: 0.0
cooldown_remaining: 0.0
is_activated: true
is_toggled: false
is_in_ability_phase: false
is_channeling: false
is_stolen: false
is_fully_castable: false
}
abilities {
handle: 168
ability_id: 5487
slot: 2
caster_handle: 165
level: 0
cast_range: 0
channel_time: 0.0
cooldown_remaining: 0.0
is_activated: true
is_toggled: false
is_in_ability_phase: false
is_channeling: false
is_stolen: false
is_fully_castable: false
}
abilities {
handle: 169
ability_id: 6251
slot: 3
caster_handle: 165
level: 0
cast_range: 0
channel_time: 0.0
cooldown_remaining: 0.0
is_activated: true
is_toggled: false
is_in_ability_phase: false
is_channeling: false
is_stolen: false
is_fully_castable: false
}
abilities {
handle: 170
ability_id: 6251
slot: 4
caster_handle: 165
level: 0
cast_range: 0
channel_time: 0.0
cooldown_remaining: 0.0
is_activated: true
is_toggled: false
is_in_ability_phase: false
is_channeling: false
is_stolen: false
is_fully_castable: false
}
abilities {
handle: 171
ability_id: 5488
slot: 5
caster_handle: 165
level: 0
cast_range: 0
channel_time: 0.0
cooldown_remaining: 0.0
is_activated: true
is_toggled: false
is_in_ability_phase: false
is_channeling: false
is_stolen: false
is_fully_castable: false
}
abilities {
handle: 172
ability_id: 5489
slot: 6
caster_handle: 165
level: 0
cast_range: 0
channel_time: 0.0
cooldown_remaining: 0.0
is_activated: true
is_toggled: false
is_in_ability_phase: false
is_channeling: false
is_stolen: false
is_fully_castable: false
}
abilities {
handle: 173
ability_id: 5490
slot: 7
caster_handle: 165
level: 0
cast_range: 0
channel_time: 0.0
cooldown_remaining: 0.0
is_activated: false
is_toggled: false
is_in_ability_phase: false
is_channeling: false
is_stolen: false
is_fully_castable: false
}
abilities {
handle: 174
ability_id: 6017
slot: 9
caster_handle: 165
level: 0
cast_range: 0
channel_time: 0.0
cooldown_remaining: 0.0
is_activated: true
is_toggled: false
is_in_ability_phase: false
is_channeling: false
is_stolen: false
is_fully_castable: false
}
abilities {
handle: 175
ability_id: 6253
slot: 10
caster_handle: 165
level: 0
cast_range: 0
channel_time: 0.0
cooldown_remaining: 0.0
is_activated: true
is_toggled: false
is_in_ability_phase: false
is_channeling: false
is_stolen: false
is_fully_castable: false
}
abilities {
handle: 176
ability_id: 6265
slot: 11
caster_handle: 165
level: 0
cast_range: 0
channel_time: 0.0
cooldown_remaining: 0.0
is_activated: true
is_toggled: false
is_in_ability_phase: false
is_channeling: false
is_stolen: false
is_fully_castable: false
}
abilities {
handle: 177
ability_id: 6924
slot: 12
caster_handle: 165
level: 0
cast_range: 0
channel_time: 0.0
cooldown_remaining: 0.0
is_activated: true
is_toggled: false
is_in_ability_phase: false
is_channeling: false
is_stolen: false
is_fully_castable: false
}
abilities {
handle: 178
ability_id: 5957
slot: 13
caster_handle: 165
level: 0
cast_range: 0
channel_time: 0.0
cooldown_remaining: 0.0
is_activated: true
is_toggled: false
is_in_ability_phase: false
is_channeling: false
is_stolen: false
is_fully_castable: false
}
abilities {
handle: 179
ability_id: 7188
slot: 14
caster_handle: 165
level: 0
cast_range: 0
channel_time: 0.0
cooldown_remaining: 0.0
is_activated: true
is_toggled: false
is_in_ability_phase: false
is_channeling: false
is_stolen: false
is_fully_castable: false
}
abilities {
handle: 180
ability_id: 7070
slot: 15
caster_handle: 165
level: 0
cast_range: 0
channel_time: 0.0
cooldown_remaining: 0.0
is_activated: true
is_toggled: false
is_in_ability_phase: false
is_channeling: false
is_stolen: false
is_fully_castable: false
}
abilities {
handle: 181
ability_id: 6808
slot: 16
caster_handle: 165
level: 0
cast_range: 0
channel_time: 0.0
cooldown_remaining: 0.0
is_activated: true
is_toggled: false
is_in_ability_phase: false
is_channeling: false
is_stolen: false
is_fully_castable: false
}
items {
handle: 182
ability_id: 46
slot: 15
caster_handle: 165
level: 1
cast_range: 0
channel_time: 3.0
cooldown_remaining: 99.30001068115234
is_activated: true
is_toggled: false
is_in_ability_phase: false
is_channeling: false
is_stolen: false
is_fully_castable: false
charges: 1
secondary_charges: 0
is_combined_locked: false
}
modifiers {
name: "modifier_wisp_tentacles"
stack_count: 0
}
modifiers {
name: "modifier_fountain_aura_buff"
stack_count: 0
remaining_duration: 2.9666671752929688
}
action_type: 1
is_using_ability: false
primary_attribute: 0
is_illusion: false
respawn_time: 6.0
buyback_cost: 150
buyback_cooldown: 0.0
spell_amplification: 0.016100000590085983
armor: 0.24000000953674316
magic_resist: 0.2627500295639038
evasion: 0.0
xp_needed_to_level: 230
ability_points: 1
reliable_gold: 0
unreliable_gold: 600
last_hits: 0
denies: 0
net_worth: 650
strength: 17
agility: 14
intelligence: 23
}
units {
handle: 1
unit_type: INVALID
name: "npc_dota_wisp_spirit"
team_id: 2
level: 1
location {
x: -38.274539947509766
y: -37.1405029296875
z: 256.0
}
is_alive: true
player_id: 3
bounding_radius: 8
facing: 224
ground_height: 256
vision_range_daytime: 0
vision_range_nighttime: 0
health: 100
health_max: 100
health_regen: 0.0
mana: 0
mana_max: 0
mana_regen: 0.0
base_movement_speed: 0
current_movement_speed: 100
anim_activity: -1
anim_cycle: 0.0
base_damage: 0
base_damage_variance: 0
bonus_damage: 0
attack_damage: 0
attack_range: 0
attack_speed: 1.0
attack_anim_point: 0.0
attack_acquisition_range: 0
attack_projectile_speed: 0
attacks_per_second: 1
last_attack_time: 0.0
bounty_xp: 12
bounty_gold_min: 1
bounty_gold_max: 1
is_channeling: false
is_attack_immune: false
is_blind: false
is_block_disabled: false
is_disarmed: false
is_evade_disabled: false
is_hexed: false
is_invisible: false
is_invulnerable: true
is_magic_immune: false
is_muted: false
is_nightmared: false
is_rooted: false
is_silenced: false
is_specially_deniable: false
is_stunned: false
is_unable_to_miss: false
has_scepter: false
modifiers {
name: "modifier_wisp_spirit_invulnerable"
stack_count: 0
ability_handle: 167
ability_id: 5486
}
modifiers {
name: "modifier_truesight"
stack_count: 0
remaining_duration: 0.46666717529296875
}
action_type: 2
is_using_ability: false
armor: 0.0
magic_resist: 0.0
}
units {
handle: 2
unit_type: INVALID
name: "npc_dota_wisp_spirit"
team_id: 2
level: 1
location {
x: -38.274539947509766
y: -37.1405029296875
z: 256.0
}
is_alive: true
player_id: 3
bounding_radius: 8
facing: 224
ground_height: 256
vision_range_daytime: 0
vision_range_nighttime: 0
health: 100
health_max: 100
health_regen: 0.0
mana: 0
mana_max: 0
mana_regen: 0.0
base_movement_speed: 0
current_movement_speed: 100
anim_activity: -1
anim_cycle: 0.0
base_damage: 0
base_damage_variance: 0
bonus_damage: 0
attack_damage: 0
attack_range: 0
attack_speed: 1.0
attack_anim_point: 0.0
attack_acquisition_range: 0
attack_projectile_speed: 0
attacks_per_second: 1
last_attack_time: 0.0
bounty_xp: 12
bounty_gold_min: 1
bounty_gold_max: 1
is_channeling: false
is_attack_immune: false
is_blind: false
is_block_disabled: false
is_disarmed: false
is_evade_disabled: false
is_hexed: false
is_invisible: false
is_invulnerable: true
is_magic_immune: false
is_muted: false
is_nightmared: false
is_rooted: false
is_silenced: false
is_specially_deniable: false
is_stunned: false
is_unable_to_miss: false
has_scepter: false
modifiers {
name: "modifier_wisp_spirit_invulnerable"
stack_count: 0
ability_handle: 167
ability_id: 5486
}
modifiers {
name: "modifier_truesight"
stack_count: 0
remaining_duration: 0.46666717529296875
}
action_type: 2
is_using_ability: false
armor: 0.0
magic_resist: 0.0
}
units {
handle: 3
unit_type: INVALID
name: "npc_dota_wisp_spirit"
team_id: 2
level: 1
location {
x: -38.274539947509766
y: -37.1405029296875
z: 256.0
}
is_alive: true
player_id: 3
bounding_radius: 8
facing: 224
ground_height: 256
vision_range_daytime: 0
vision_range_nighttime: 0
health: 100
health_max: 100
health_regen: 0.0
mana: 0
mana_max: 0
mana_regen: 0.0
base_movement_speed: 0
current_movement_speed: 100
anim_activity: -1
anim_cycle: 0.0
base_damage: 0
base_damage_variance: 0
bonus_damage: 0
attack_damage: 0
attack_range: 0
attack_speed: 1.0
attack_anim_point: 0.0
attack_acquisition_range: 0
attack_projectile_speed: 0
attacks_per_second: 1
last_attack_time: 0.0
bounty_xp: 12
bounty_gold_min: 1
bounty_gold_max: 1
is_channeling: false
is_attack_immune: false
is_blind: false
is_block_disabled: false
is_disarmed: false
is_evade_disabled: false
is_hexed: false
is_invisible: false
is_invulnerable: true
is_magic_immune: false
is_muted: false
is_nightmared: false
is_rooted: false
is_silenced: false
is_specially_deniable: false
is_stunned: false
is_unable_to_miss: false
has_scepter: false
modifiers {
name: "modifier_wisp_spirit_invulnerable"
stack_count: 0
ability_handle: 167
ability_id: 5486
}
modifiers {
name: "modifier_truesight"
stack_count: 0
remaining_duration: 0.46666717529296875
}
action_type: 2
is_using_ability: false
armor: 0.0
magic_resist: 0.0
}
units {
handle: 4
unit_type: INVALID
name: "npc_dota_wisp_spirit"
team_id: 2
level: 1
location {
x: -38.274539947509766
y: -37.1405029296875
z: 256.0
}
is_alive: true
player_id: 3
bounding_radius: 8
facing: 224
ground_height: 256
vision_range_daytime: 0
vision_range_nighttime: 0
health: 100
health_max: 100
health_regen: 0.0
mana: 0
mana_max: 0
mana_regen: 0.0
base_movement_speed: 0
current_movement_speed: 100
anim_activity: -1
anim_cycle: 0.0
base_damage: 0
base_damage_variance: 0
bonus_damage: 0
attack_damage: 0
attack_range: 0
attack_speed: 1.0
attack_anim_point: 0.0
attack_acquisition_range: 0
attack_projectile_speed: 0
attacks_per_second: 1
last_attack_time: 0.0
bounty_xp: 12
bounty_gold_min: 1
bounty_gold_max: 1
is_channeling: false
is_attack_immune: false
is_blind: false
is_block_disabled: false
is_disarmed: false
is_evade_disabled: false
is_hexed: false
is_invisible: false
is_invulnerable: true
is_magic_immune: false
is_muted: false
is_nightmared: false
is_rooted: false
is_silenced: false
is_specially_deniable: false
is_stunned: false
is_unable_to_miss: false
has_scepter: false
modifiers {
name: "modifier_wisp_spirit_invulnerable"
stack_count: 0
ability_handle: 167
ability_id: 5486
}
modifiers {
name: "modifier_truesight"
stack_count: 0
remaining_duration: 0.46666717529296875
}
action_type: 2
is_using_ability: false
armor: 0.0
magic_resist: 0.0
}
units {
handle: 5
unit_type: INVALID
name: "npc_dota_wisp_spirit"
team_id: 2
level: 1
location {
x: -38.274539947509766
y: -37.1405029296875
z: 256.0
}
is_alive: true
player_id: 3
bounding_radius: 8
facing: 224
ground_height: 256
vision_range_daytime: 0
vision_range_nighttime: 0
health: 100
health_max: 100
health_regen: 0.0
mana: 0
mana_max: 0
mana_regen: 0.0
base_movement_speed: 0
current_movement_speed: 100
anim_activity: -1
anim_cycle: 0.0
base_damage: 0
base_damage_variance: 0
bonus_damage: 0
attack_damage: 0
attack_range: 0
attack_speed: 1.0
attack_anim_point: 0.0
attack_acquisition_range: 0
attack_projectile_speed: 0
attacks_per_second: 1
last_attack_time: 0.0
bounty_xp: 12
bounty_gold_min: 1
bounty_gold_max: 1
is_channeling: false
is_attack_immune: false
is_blind: false
is_block_disabled: false
is_disarmed: false
is_evade_disabled: false
is_hexed: false
is_invisible: false
is_invulnerable: true
is_magic_immune: false
is_muted: false
is_nightmared: false
is_rooted: false
is_silenced: false
is_specially_deniable: false
is_stunned: false
is_unable_to_miss: false
has_scepter: false
modifiers {
name: "modifier_wisp_spirit_invulnerable"
stack_count: 0
ability_handle: 167
ability_id: 5486
}
modifiers {
name: "modifier_truesight"
stack_count: 0
remaining_duration: 0.46666717529296875
}
action_type: 2
is_using_ability: false
armor: 0.0
magic_resist: 0.0
}
units {
handle: 183
unit_type: HERO
name: "npc_dota_hero_wisp"
team_id: 2
level: 1
location {
x: -6900.0
y: -6425.00390625
z: 512.0
}
is_alive: true
player_id: 4
bounding_radius: 24
facing: 45
ground_height: 512
vision_range_daytime: 1800
vision_range_nighttime: 800
health: 582
health_max: 582
health_regen: 31.225000381469727
mana: 351
mana_max: 351
mana_regen: 22.209999084472656
base_movement_speed: 280
current_movement_speed: 281
anim_activity: 1500
anim_cycle: 0.6756523847579956
base_damage: 43
base_damage_variance: 4
bonus_damage: 0
attack_damage: 43
attack_range: 575
attack_speed: 1.1399999856948853
attack_anim_point: 0.15000000596046448
attack_acquisition_range: 800
attack_projectile_speed: 1200
attacks_per_second: 0
last_attack_time: 0.0
bounty_xp: 40
bounty_gold_min: 0
bounty_gold_max: 0
is_channeling: false
is_attack_immune: false
is_blind: false
is_block_disabled: false
is_disarmed: false
is_evade_disabled: false
is_hexed: false
is_invisible: false
is_invulnerable: false
is_magic_immune: false
is_muted: false
is_nightmared: false
is_rooted: false
is_silenced: false
is_specially_deniable: false
is_stunned: false
is_unable_to_miss: false
has_scepter: false
abilities {
handle: 184
ability_id: 5485
slot: 0
caster_handle: 183
level: 0
cast_range: 0
channel_time: 0.0
cooldown_remaining: 0.0
is_activated: true
is_toggled: false
is_in_ability_phase: false
is_channeling: false
is_stolen: false
is_fully_castable: false
}
abilities {
handle: 185
ability_id: 5486
slot: 1
caster_handle: 183
level: 0
cast_range: 0
channel_time: 0.0
cooldown_remaining: 0.0
is_activated: true
is_toggled: false
is_in_ability_phase: false
is_channeling: false
is_stolen: false
is_fully_castable: false
}
abilities {
handle: 186
ability_id: 5487
slot: 2
caster_handle: 183
level: 0
cast_range: 0
channel_time: 0.0
cooldown_remaining: 0.0
is_activated: true
is_toggled: false
is_in_ability_phase: false
is_channeling: false
is_stolen: false
is_fully_castable: false
}
abilities {
handle: 187
ability_id: 6251
slot: 3
caster_handle: 183
level: 0
cast_range: 0
channel_time: 0.0
cooldown_remaining: 0.0
is_activated: true
is_toggled: false
is_in_ability_phase: false
is_channeling: false
is_stolen: false
is_fully_castable: false
}
abilities {
handle: 188
ability_id: 6251
slot: 4
caster_handle: 183
level: 0
cast_range: 0
channel_time: 0.0
cooldown_remaining: 0.0
is_activated: true
is_toggled: false
is_in_ability_phase: false
is_channeling: false
is_stolen: false
is_fully_castable: false
}
abilities {
handle: 189
ability_id: 5488
slot: 5
caster_handle: 183
level: 0
cast_range: 0
channel_time: 0.0
cooldown_remaining: 0.0
is_activated: true
is_toggled: false
is_in_ability_phase: false
is_channeling: false
is_stolen: false
is_fully_castable: false
}
abilities {
handle: 190
ability_id: 5489
slot: 6
caster_handle: 183
level: 0
cast_range: 0
channel_time: 0.0
cooldown_remaining: 0.0
is_activated: true
is_toggled: false
is_in_ability_phase: false
is_channeling: false
is_stolen: false
is_fully_castable: false
}
abilities {
handle: 191
ability_id: 5490
slot: 7
caster_handle: 183
level: 0
cast_range: 0
channel_time: 0.0
cooldown_remaining: 0.0
is_activated: false
is_toggled: false
is_in_ability_phase: false
is_channeling: false
is_stolen: false
is_fully_castable: false
}
abilities {
handle: 192
ability_id: 6017
slot: 9
caster_handle: 183
level: 0
cast_range: 0
channel_time: 0.0
cooldown_remaining: 0.0
is_activated: true
is_toggled: false
is_in_ability_phase: false
is_channeling: false
is_stolen: false
is_fully_castable: false
}
abilities {
handle: 193
ability_id: 6253
slot: 10
caster_handle: 183
level: 0
cast_range: 0
channel_time: 0.0
cooldown_remaining: 0.0
is_activated: true
is_toggled: false
is_in_ability_phase: false
is_channeling: false
is_stolen: false
is_fully_castable: false
}
abilities {
handle: 194
ability_id: 6265
slot: 11
caster_handle: 183
level: 0
cast_range: 0
channel_time: 0.0
cooldown_remaining: 0.0
is_activated: true
is_toggled: false
is_in_ability_phase: false
is_channeling: false
is_stolen: false
is_fully_castable: false
}
abilities {
handle: 195
ability_id: 6924
slot: 12
caster_handle: 183
level: 0
cast_range: 0
channel_time: 0.0
cooldown_remaining: 0.0
is_activated: true
is_toggled: false
is_in_ability_phase: false
is_channeling: false
is_stolen: false
is_fully_castable: false
}
abilities {
handle: 196
ability_id: 5957
slot: 13
caster_handle: 183
level: 0
cast_range: 0
channel_time: 0.0
cooldown_remaining: 0.0
is_activated: true
is_toggled: false
is_in_ability_phase: false
is_channeling: false
is_stolen: false
is_fully_castable: false
}
abilities {
handle: 197
ability_id: 7188
slot: 14
caster_handle: 183
level: 0
cast_range: 0
channel_time: 0.0
cooldown_remaining: 0.0
is_activated: true
is_toggled: false
is_in_ability_phase: false
is_channeling: false
is_stolen: false
is_fully_castable: false
}
abilities {
handle: 198
ability_id: 7070
slot: 15
caster_handle: 183
level: 0
cast_range: 0
channel_time: 0.0
cooldown_remaining: 0.0
is_activated: true
is_toggled: false
is_in_ability_phase: false
is_channeling: false
is_stolen: false
is_fully_castable: false
}
abilities {
handle: 199
ability_id: 6808
slot: 16
caster_handle: 183
level: 0
cast_range: 0
channel_time: 0.0
cooldown_remaining: 0.0
is_activated: true
is_toggled: false
is_in_ability_phase: false
is_channeling: false
is_stolen: false
is_fully_castable: false
}
items {
handle: 200
ability_id: 46
slot: 15
caster_handle: 183
level: 1
cast_range: 0
channel_time: 3.0
cooldown_remaining: 99.30001068115234
is_activated: true
is_toggled: false
is_in_ability_phase: false
is_channeling: false
is_stolen: false
is_fully_castable: false
charges: 1
secondary_charges: 0
is_combined_locked: false
}
modifiers {
name: "modifier_wisp_tentacles"
stack_count: 0
}
modifiers {
name: "modifier_fountain_aura_buff"
stack_count: 0
remaining_duration: 2.9666671752929688
}
action_type: 1
is_using_ability: false
primary_attribute: 0
is_illusion: false
respawn_time: 6.0
buyback_cost: 150
buyback_cooldown: 0.0
spell_amplification: 0.016100000590085983
armor: 0.24000000953674316
magic_resist: 0.2627500295639038
evasion: 0.0
xp_needed_to_level: 230
ability_points: 1
reliable_gold: 0
unreliable_gold: 600
last_hits: 0
denies: 0
net_worth: 650
strength: 17
agility: 14
intelligence: 23
}
units {
handle: 6
unit_type: INVALID
name: "npc_dota_wisp_spirit"
team_id: 2
level: 1
location {
x: -36.591854095458984
y: -34.07286834716797
z: 256.0
}
is_alive: true
player_id: 4
bounding_radius: 8
facing: 222
ground_height: 256
vision_range_daytime: 0
vision_range_nighttime: 0
health: 100
health_max: 100
health_regen: 0.0
mana: 0
mana_max: 0
mana_regen: 0.0
base_movement_speed: 0
current_movement_speed: 100
anim_activity: -1
anim_cycle: 0.0
base_damage: 0
base_damage_variance: 0
bonus_damage: 0
attack_damage: 0
attack_range: 0
attack_speed: 1.0
attack_anim_point: 0.0
attack_acquisition_range: 0
attack_projectile_speed: 0
attacks_per_second: 1
last_attack_time: 0.0
bounty_xp: 12
bounty_gold_min: 1
bounty_gold_max: 1
is_channeling: false
is_attack_immune: false
is_blind: false
is_block_disabled: false
is_disarmed: false
is_evade_disabled: false
is_hexed: false
is_invisible: false
is_invulnerable: true
is_magic_immune: false
is_muted: false
is_nightmared: false
is_rooted: false
is_silenced: false
is_specially_deniable: false
is_stunned: false
is_unable_to_miss: false
has_scepter: false
modifiers {
name: "modifier_wisp_spirit_invulnerable"
stack_count: 0
ability_handle: 185
ability_id: 5486
}
modifiers {
name: "modifier_truesight"
stack_count: 0
remaining_duration: 0.46666717529296875
}
action_type: 2
is_using_ability: false
armor: 0.0
magic_resist: 0.0
}
units {
handle: 7
unit_type: INVALID
name: "npc_dota_wisp_spirit"
team_id: 2
level: 1
location {
x: -36.591854095458984
y: -34.07286834716797
z: 256.0
}
is_alive: true
player_id: 4
bounding_radius: 8
facing: 222
ground_height: 256
vision_range_daytime: 0
vision_range_nighttime: 0
health: 100
health_max: 100
health_regen: 0.0
mana: 0
mana_max: 0
mana_regen: 0.0
base_movement_speed: 0
current_movement_speed: 100
anim_activity: -1
anim_cycle: 0.0
base_damage: 0
base_damage_variance: 0
bonus_damage: 0
attack_damage: 0
attack_range: 0
attack_speed: 1.0
attack_anim_point: 0.0
attack_acquisition_range: 0
attack_projectile_speed: 0
attacks_per_second: 1
last_attack_time: 0.0
bounty_xp: 12
bounty_gold_min: 1
bounty_gold_max: 1
is_channeling: false
is_attack_immune: false
is_blind: false
is_block_disabled: false
is_disarmed: false
is_evade_disabled: false
is_hexed: false
is_invisible: false
is_invulnerable: true
is_magic_immune: false
is_muted: false
is_nightmared: false
is_rooted: false
is_silenced: false
is_specially_deniable: false
is_stunned: false
is_unable_to_miss: false
has_scepter: false
modifiers {
name: "modifier_wisp_spirit_invulnerable"
stack_count: 0
ability_handle: 185
ability_id: 5486
}
modifiers {
name: "modifier_truesight"
stack_count: 0
remaining_duration: 0.46666717529296875
}
action_type: 2
is_using_ability: false
armor: 0.0
magic_resist: 0.0
}
units {
handle: 8
unit_type: INVALID
name: "npc_dota_wisp_spirit"
team_id: 2
level: 1
location {
x: -36.591854095458984
y: -34.07286834716797
z: 256.0
}
is_alive: true
player_id: 4
bounding_radius: 8
facing: 222
ground_height: 256
vision_range_daytime: 0
vision_range_nighttime: 0
health: 100
health_max: 100
health_regen: 0.0
mana: 0
mana_max: 0
mana_regen: 0.0
base_movement_speed: 0
current_movement_speed: 100
anim_activity: -1
anim_cycle: 0.0
base_damage: 0
base_damage_variance: 0
bonus_damage: 0
attack_damage: 0
attack_range: 0
attack_speed: 1.0
attack_anim_point: 0.0
attack_acquisition_range: 0
attack_projectile_speed: 0
attacks_per_second: 1
last_attack_time: 0.0
bounty_xp: 12
bounty_gold_min: 1
bounty_gold_max: 1
is_channeling: false
is_attack_immune: false
is_blind: false
is_block_disabled: false
is_disarmed: false
is_evade_disabled: false
is_hexed: false
is_invisible: false
is_invulnerable: true
is_magic_immune: false
is_muted: false
is_nightmared: false
is_rooted: false
is_silenced: false
is_specially_deniable: false
is_stunned: false
is_unable_to_miss: false
has_scepter: false
modifiers {
name: "modifier_wisp_spirit_invulnerable"
stack_count: 0
ability_handle: 185
ability_id: 5486
}
modifiers {
name: "modifier_truesight"
stack_count: 0
remaining_duration: 0.46666717529296875
}
action_type: 2
is_using_ability: false
armor: 0.0
magic_resist: 0.0
}
units {
handle: 9
unit_type: INVALID
name: "npc_dota_wisp_spirit"
team_id: 2
level: 1
location {
x: -36.591854095458984
y: -34.07286834716797
z: 256.0
}
is_alive: true
player_id: 4
bounding_radius: 8
facing: 222
ground_height: 256
vision_range_daytime: 0
vision_range_nighttime: 0
health: 100
health_max: 100
health_regen: 0.0
mana: 0
mana_max: 0
mana_regen: 0.0
base_movement_speed: 0
current_movement_speed: 100
anim_activity: -1
anim_cycle: 0.0
base_damage: 0
base_damage_variance: 0
bonus_damage: 0
attack_damage: 0
attack_range: 0
attack_speed: 1.0
attack_anim_point: 0.0
attack_acquisition_range: 0
attack_projectile_speed: 0
attacks_per_second: 1
last_attack_time: 0.0
bounty_xp: 12
bounty_gold_min: 1
bounty_gold_max: 1
is_channeling: false
is_attack_immune: false
is_blind: false
is_block_disabled: false
is_disarmed: false
is_evade_disabled: false
is_hexed: false
is_invisible: false
is_invulnerable: true
is_magic_immune: false
is_muted: false
is_nightmared: false
is_rooted: false
is_silenced: false
is_specially_deniable: false
is_stunned: false
is_unable_to_miss: false
has_scepter: false
modifiers {
name: "modifier_wisp_spirit_invulnerable"
stack_count: 0
ability_handle: 185
ability_id: 5486
}
modifiers {
name: "modifier_truesight"
stack_count: 0
remaining_duration: 0.46666717529296875
}
action_type: 2
is_using_ability: false
armor: 0.0
magic_resist: 0.0
}
units {
handle: 10
unit_type: INVALID
name: "npc_dota_wisp_spirit"
team_id: 2
level: 1
location {
x: -36.591854095458984
y: -34.07286834716797
z: 256.0
}
is_alive: true
player_id: 4
bounding_radius: 8
facing: 222
ground_height: 256
vision_range_daytime: 0
vision_range_nighttime: 0
health: 100
health_max: 100
health_regen: 0.0
mana: 0
mana_max: 0
mana_regen: 0.0
base_movement_speed: 0
current_movement_speed: 100
anim_activity: -1
anim_cycle: 0.0
base_damage: 0
base_damage_variance: 0
bonus_damage: 0
attack_damage: 0
attack_range: 0
attack_speed: 1.0
attack_anim_point: 0.0
attack_acquisition_range: 0
attack_projectile_speed: 0
attacks_per_second: 1
last_attack_time: 0.0
bounty_xp: 12
bounty_gold_min: 1
bounty_gold_max: 1
is_channeling: false
is_attack_immune: false
is_blind: false
is_block_disabled: false
is_disarmed: false
is_evade_disabled: false
is_hexed: false
is_invisible: false
is_invulnerable: true
is_magic_immune: false
is_muted: false
is_nightmared: false
is_rooted: false
is_silenced: false
is_specially_deniable: false
is_stunned: false
is_unable_to_miss: false
has_scepter: false
modifiers {
name: "modifier_wisp_spirit_invulnerable"
stack_count: 0
ability_handle: 185
ability_id: 5486
}
modifiers {
name: "modifier_truesight"
stack_count: 0
remaining_duration: 0.46666717529296875
}
action_type: 2
is_using_ability: false
armor: 0.0
magic_resist: 0.0
}
units {
handle: 201
unit_type: HERO
name: "npc_dota_hero_wisp"
team_id: 2
level: 1
location {
x: -6950.0
y: -6275.00390625
z: 512.0
}
is_alive: true
player_id: 5
bounding_radius: 24
facing: 45
ground_height: 512
vision_range_daytime: 1800
vision_range_nighttime: 800
health: 582
health_max: 582
health_regen: 31.225000381469727
mana: 351
mana_max: 351
mana_regen: 22.209999084472656
base_movement_speed: 280
current_movement_speed: 281
anim_activity: 1500
anim_cycle: 0.640092670917511
base_damage: 43
base_damage_variance: 4
bonus_damage: 0
attack_damage: 43
attack_range: 575
attack_speed: 1.1399999856948853
attack_anim_point: 0.15000000596046448
attack_acquisition_range: 800
attack_projectile_speed: 1200
attacks_per_second: 0
last_attack_time: 0.0
bounty_xp: 40
bounty_gold_min: 0
bounty_gold_max: 0
is_channeling: false
is_attack_immune: false
is_blind: false
is_block_disabled: false
is_disarmed: false
is_evade_disabled: false
is_hexed: false
is_invisible: false
is_invulnerable: false
is_magic_immune: false
is_muted: false
is_nightmared: false
is_rooted: false
is_silenced: false
is_specially_deniable: false
is_stunned: false
is_unable_to_miss: false
has_scepter: false
abilities {
handle: 202
ability_id: 5485
slot: 0
caster_handle: 201
level: 0
cast_range: 0
channel_time: 0.0
cooldown_remaining: 0.0
is_activated: true
is_toggled: false
is_in_ability_phase: false
is_channeling: false
is_stolen: false
is_fully_castable: false
}
abilities {
handle: 203
ability_id: 5486
slot: 1
caster_handle: 201
level: 0
cast_range: 0
channel_time: 0.0
cooldown_remaining: 0.0
is_activated: true
is_toggled: false
is_in_ability_phase: false
is_channeling: false
is_stolen: false
is_fully_castable: false
}
abilities {
handle: 204
ability_id: 5487
slot: 2
caster_handle: 201
level: 0
cast_range: 0
channel_time: 0.0
cooldown_remaining: 0.0
is_activated: true
is_toggled: false
is_in_ability_phase: false
is_channeling: false
is_stolen: false
is_fully_castable: false
}
abilities {
handle: 205
ability_id: 6251
slot: 3
caster_handle: 201
level: 0
cast_range: 0
channel_time: 0.0
cooldown_remaining: 0.0
is_activated: true
is_toggled: false
is_in_ability_phase: false
is_channeling: false
is_stolen: false
is_fully_castable: false
}
abilities {
handle: 206
ability_id: 6251
slot: 4
caster_handle: 201
level: 0
cast_range: 0
channel_time: 0.0
cooldown_remaining: 0.0
is_activated: true
is_toggled: false
is_in_ability_phase: false
is_channeling: false
is_stolen: false
is_fully_castable: false
}
abilities {
handle: 207
ability_id: 5488
slot: 5
caster_handle: 201
level: 0
cast_range: 0
channel_time: 0.0
cooldown_remaining: 0.0
is_activated: true
is_toggled: false
is_in_ability_phase: false
is_channeling: false
is_stolen: false
is_fully_castable: false
}
abilities {
handle: 208
ability_id: 5489
slot: 6
caster_handle: 201
level: 0
cast_range: 0
channel_time: 0.0
cooldown_remaining: 0.0
is_activated: true
is_toggled: false
is_in_ability_phase: false
is_channeling: false
is_stolen: false
is_fully_castable: false
}
abilities {
handle: 209
ability_id: 5490
slot: 7
caster_handle: 201
level: 0
cast_range: 0
channel_time: 0.0
cooldown_remaining: 0.0
is_activated: false
is_toggled: false
is_in_ability_phase: false
is_channeling: false
is_stolen: false
is_fully_castable: false
}
abilities {
handle: 210
ability_id: 6017
slot: 9
caster_handle: 201
level: 0
cast_range: 0
channel_time: 0.0
cooldown_remaining: 0.0
is_activated: true
is_toggled: false
is_in_ability_phase: false
is_channeling: false
is_stolen: false
is_fully_castable: false
}
abilities {
handle: 211
ability_id: 6253
slot: 10
caster_handle: 201
level: 0
cast_range: 0
channel_time: 0.0
cooldown_remaining: 0.0
is_activated: true
is_toggled: false
is_in_ability_phase: false
is_channeling: false
is_stolen: false
is_fully_castable: false
}
abilities {
handle: 212
ability_id: 6265
slot: 11
caster_handle: 201
level: 0
cast_range: 0
channel_time: 0.0
cooldown_remaining: 0.0
is_activated: true
is_toggled: false
is_in_ability_phase: false
is_channeling: false
is_stolen: false
is_fully_castable: false
}
abilities {
handle: 213
ability_id: 6924
slot: 12
caster_handle: 201
level: 0
cast_range: 0
channel_time: 0.0
cooldown_remaining: 0.0
is_activated: true
is_toggled: false
is_in_ability_phase: false
is_channeling: false
is_stolen: false
is_fully_castable: false
}
abilities {
handle: 214
ability_id: 5957
slot: 13
caster_handle: 201
level: 0
cast_range: 0
channel_time: 0.0
cooldown_remaining: 0.0
is_activated: true
is_toggled: false
is_in_ability_phase: false
is_channeling: false
is_stolen: false
is_fully_castable: false
}
abilities {
handle: 215
ability_id: 7188
slot: 14
caster_handle: 201
level: 0
cast_range: 0
channel_time: 0.0
cooldown_remaining: 0.0
is_activated: true
is_toggled: false
is_in_ability_phase: false
is_channeling: false
is_stolen: false
is_fully_castable: false
}
abilities {
handle: 216
ability_id: 7070
slot: 15
caster_handle: 201
level: 0
cast_range: 0
channel_time: 0.0
cooldown_remaining: 0.0
is_activated: true
is_toggled: false
is_in_ability_phase: false
is_channeling: false
is_stolen: false
is_fully_castable: false
}
abilities {
handle: 217
ability_id: 6808
slot: 16
caster_handle: 201
level: 0
cast_range: 0
channel_time: 0.0
cooldown_remaining: 0.0
is_activated: true
is_toggled: false
is_in_ability_phase: false
is_channeling: false
is_stolen: false
is_fully_castable: false
}
items {
handle: 218
ability_id: 46
slot: 15
caster_handle: 201
level: 1
cast_range: 0
channel_time: 3.0
cooldown_remaining: 99.31002044677734
is_activated: true
is_toggled: false
is_in_ability_phase: false
is_channeling: false
is_stolen: false
is_fully_castable: false
charges: 1
secondary_charges: 0
is_combined_locked: false
}
modifiers {
name: "modifier_wisp_tentacles"
stack_count: 0
}
modifiers {
name: "modifier_fountain_aura_buff"
stack_count: 0
remaining_duration: 2.9666671752929688
}
action_type: 1
is_using_ability: false
primary_attribute: 0
is_illusion: false
respawn_time: 6.0
buyback_cost: 150
buyback_cooldown: 0.0
spell_amplification: 0.016100000590085983
armor: 0.24000000953674316
magic_resist: 0.2627500295639038
evasion: 0.0
xp_needed_to_level: 230
ability_points: 1
reliable_gold: 0
unreliable_gold: 600
last_hits: 0
denies: 0
net_worth: 650
strength: 17
agility: 14
intelligence: 23
}
units {
handle: 11
unit_type: INVALID
name: "npc_dota_wisp_spirit"
team_id: 2
level: 1
location {
x: -34.63691711425781
y: -31.272918701171875
z: 256.0
}
is_alive: true
player_id: 5
bounding_radius: 8
facing: 222
ground_height: 256
vision_range_daytime: 0
vision_range_nighttime: 0
health: 100
health_max: 100
health_regen: 0.0
mana: 0
mana_max: 0
mana_regen: 0.0
base_movement_speed: 0
current_movement_speed: 100
anim_activity: -1
anim_cycle: 0.0
base_damage: 0
base_damage_variance: 0
bonus_damage: 0
attack_damage: 0
attack_range: 0
attack_speed: 1.0
attack_anim_point: 0.0
attack_acquisition_range: 0
attack_projectile_speed: 0
attacks_per_second: 1
last_attack_time: 0.0
bounty_xp: 12
bounty_gold_min: 1
bounty_gold_max: 1
is_channeling: false
is_attack_immune: false
is_blind: false
is_block_disabled: false
is_disarmed: false
is_evade_disabled: false
is_hexed: false
is_invisible: false
is_invulnerable: true
is_magic_immune: false
is_muted: false
is_nightmared: false
is_rooted: false
is_silenced: false
is_specially_deniable: false
is_stunned: false
is_unable_to_miss: false
has_scepter: false
modifiers {
name: "modifier_wisp_spirit_invulnerable"
stack_count: 0
ability_handle: 203
ability_id: 5486
}
modifiers {
name: "modifier_truesight"
stack_count: 0
remaining_duration: 0.46666717529296875
}
action_type: 2
is_using_ability: false
armor: 0.0
magic_resist: 0.0
}
units {
handle: 12
unit_type: INVALID
name: "npc_dota_wisp_spirit"
team_id: 2
level: 1
location {
x: -34.63691711425781
y: -31.272918701171875
z: 256.0
}
is_alive: true
player_id: 5
bounding_radius: 8
facing: 222
ground_height: 256
vision_range_daytime: 0
vision_range_nighttime: 0
health: 100
health_max: 100
health_regen: 0.0
mana: 0
mana_max: 0
mana_regen: 0.0
base_movement_speed: 0
current_movement_speed: 100
anim_activity: -1
anim_cycle: 0.0
base_damage: 0
base_damage_variance: 0
bonus_damage: 0
attack_damage: 0
attack_range: 0
attack_speed: 1.0
attack_anim_point: 0.0
attack_acquisition_range: 0
attack_projectile_speed: 0
attacks_per_second: 1
last_attack_time: 0.0
bounty_xp: 12
bounty_gold_min: 1
bounty_gold_max: 1
is_channeling: false
is_attack_immune: false
is_blind: false
is_block_disabled: false
is_disarmed: false
is_evade_disabled: false
is_hexed: false
is_invisible: false
is_invulnerable: true
is_magic_immune: false
is_muted: false
is_nightmared: false
is_rooted: false
is_silenced: false
is_specially_deniable: false
is_stunned: false
is_unable_to_miss: false
has_scepter: false
modifiers {
name: "modifier_wisp_spirit_invulnerable"
stack_count: 0
ability_handle: 203
ability_id: 5486
}
modifiers {
name: "modifier_truesight"
stack_count: 0
remaining_duration: 0.46666717529296875
}
action_type: 2
is_using_ability: false
armor: 0.0
magic_resist: 0.0
}
units {
handle: 13
unit_type: INVALID
name: "npc_dota_wisp_spirit"
team_id: 2
level: 1
location {
x: -32.1628532409668
y: -29.039138793945312
z: 256.0
}
is_alive: true
player_id: 5
bounding_radius: 8
facing: 222
ground_height: 256
vision_range_daytime: 0
vision_range_nighttime: 0
health: 100
health_max: 100
health_regen: 0.0
mana: 0
mana_max: 0
mana_regen: 0.0
base_movement_speed: 0
current_movement_speed: 100
anim_activity: -1
anim_cycle: 0.0
base_damage: 0
base_damage_variance: 0
bonus_damage: 0
attack_damage: 0
attack_range: 0
attack_speed: 1.0
attack_anim_point: 0.0
attack_acquisition_range: 0
attack_projectile_speed: 0
attacks_per_second: 1
last_attack_time: 0.0
bounty_xp: 12
bounty_gold_min: 1
bounty_gold_max: 1
is_channeling: false
is_attack_immune: false
is_blind: false
is_block_disabled: false
is_disarmed: false
is_evade_disabled: false
is_hexed: false
is_invisible: false
is_invulnerable: true
is_magic_immune: false
is_muted: false
is_nightmared: false
is_rooted: false
is_silenced: false
is_specially_deniable: false
is_stunned: false
is_unable_to_miss: false
has_scepter: false
modifiers {
name: "modifier_wisp_spirit_invulnerable"
stack_count: 0
ability_handle: 203
ability_id: 5486
}
modifiers {
name: "modifier_truesight"
stack_count: 0
remaining_duration: 0.46666717529296875
}
action_type: 2
is_using_ability: false
armor: 0.0
magic_resist: 0.0
}
units {
handle: 14
unit_type: INVALID
name: "npc_dota_wisp_spirit"
team_id: 2
level: 1
location {
x: -34.63691711425781
y: -31.272918701171875
z: 256.0
}
is_alive: true
player_id: 5
bounding_radius: 8
facing: 222
ground_height: 256
vision_range_daytime: 0
vision_range_nighttime: 0
health: 100
health_max: 100
health_regen: 0.0
mana: 0
mana_max: 0
mana_regen: 0.0
base_movement_speed: 0
current_movement_speed: 100
anim_activity: -1
anim_cycle: 0.0
base_damage: 0
base_damage_variance: 0
bonus_damage: 0
attack_damage: 0
attack_range: 0
attack_speed: 1.0
attack_anim_point: 0.0
attack_acquisition_range: 0
attack_projectile_speed: 0
attacks_per_second: 1
last_attack_time: 0.0
bounty_xp: 12
bounty_gold_min: 1
bounty_gold_max: 1
is_channeling: false
is_attack_immune: false
is_blind: false
is_block_disabled: false
is_disarmed: false
is_evade_disabled: false
is_hexed: false
is_invisible: false
is_invulnerable: true
is_magic_immune: false
is_muted: false
is_nightmared: false
is_rooted: false
is_silenced: false
is_specially_deniable: false
is_stunned: false
is_unable_to_miss: false
has_scepter: false
modifiers {
name: "modifier_wisp_spirit_invulnerable"
stack_count: 0
ability_handle: 203
ability_id: 5486
}
modifiers {
name: "modifier_truesight"
stack_count: 0
remaining_duration: 0.46666717529296875
}
action_type: 2
is_using_ability: false
armor: 0.0
magic_resist: 0.0
}
units {
handle: 15
unit_type: INVALID
name: "npc_dota_wisp_spirit"
team_id: 2
level: 1
location {
x: -34.63691711425781
y: -31.272918701171875
z: 256.0
}
is_alive: true
player_id: 5
bounding_radius: 8
facing: 222
ground_height: 256
vision_range_daytime: 0
vision_range_nighttime: 0
health: 100
health_max: 100
health_regen: 0.0
mana: 0
mana_max: 0
mana_regen: 0.0
base_movement_speed: 0
current_movement_speed: 100
anim_activity: -1
anim_cycle: 0.0
base_damage: 0
base_damage_variance: 0
bonus_damage: 0
attack_damage: 0
attack_range: 0
attack_speed: 1.0
attack_anim_point: 0.0
attack_acquisition_range: 0
attack_projectile_speed: 0
attacks_per_second: 1
last_attack_time: 0.0
bounty_xp: 12
bounty_gold_min: 1
bounty_gold_max: 1
is_channeling: false
is_attack_immune: false
is_blind: false
is_block_disabled: false
is_disarmed: false
is_evade_disabled: false
is_hexed: false
is_invisible: false
is_invulnerable: true
is_magic_immune: false
is_muted: false
is_nightmared: false
is_rooted: false
is_silenced: false
is_specially_deniable: false
is_stunned: false
is_unable_to_miss: false
has_scepter: false
modifiers {
name: "modifier_wisp_spirit_invulnerable"
stack_count: 0
ability_handle: 203
ability_id: 5486
}
modifiers {
name: "modifier_truesight"
stack_count: 0
remaining_duration: 0.46666717529296875
}
action_type: 2
is_using_ability: false
armor: 0.0
magic_resist: 0.0
}
units {
handle: 219
unit_type: HERO
name: "npc_dota_hero_wisp"
team_id: 2
level: 1
location {
x: -7100.0
y: -6150.00390625
z: 512.0
}
is_alive: true
player_id: 6
bounding_radius: 24
facing: 45
ground_height: 512
vision_range_daytime: 1800
vision_range_nighttime: 800
health: 582
health_max: 582
health_regen: 31.225000381469727
mana: 351
mana_max: 351
mana_regen: 22.209999084472656
base_movement_speed: 280
current_movement_speed: 281
anim_activity: 1500
anim_cycle: 0.6045328974723816
base_damage: 43
base_damage_variance: 4
bonus_damage: 0
attack_damage: 43
attack_range: 575
attack_speed: 1.1399999856948853
attack_anim_point: 0.15000000596046448
attack_acquisition_range: 800
attack_projectile_speed: 1200
attacks_per_second: 0
last_attack_time: 0.0
bounty_xp: 40
bounty_gold_min: 0
bounty_gold_max: 0
is_channeling: false
is_attack_immune: false
is_blind: false
is_block_disabled: false
is_disarmed: false
is_evade_disabled: false
is_hexed: false
is_invisible: false
is_invulnerable: false
is_magic_immune: false
is_muted: false
is_nightmared: false
is_rooted: false
is_silenced: false
is_specially_deniable: false
is_stunned: false
is_unable_to_miss: false
has_scepter: false
abilities {
handle: 220
ability_id: 5485
slot: 0
caster_handle: 219
level: 0
cast_range: 0
channel_time: 0.0
cooldown_remaining: 0.0
is_activated: true
is_toggled: false
is_in_ability_phase: false
is_channeling: false
is_stolen: false
is_fully_castable: false
}
abilities {
handle: 221
ability_id: 5486
slot: 1
caster_handle: 219
level: 0
cast_range: 0
channel_time: 0.0
cooldown_remaining: 0.0
is_activated: true
is_toggled: false
is_in_ability_phase: false
is_channeling: false
is_stolen: false
is_fully_castable: false
}
abilities {
handle: 222
ability_id: 5487
slot: 2
caster_handle: 219
level: 0
cast_range: 0
channel_time: 0.0
cooldown_remaining: 0.0
is_activated: true
is_toggled: false
is_in_ability_phase: false
is_channeling: false
is_stolen: false
is_fully_castable: false
}
abilities {
handle: 223
ability_id: 6251
slot: 3
caster_handle: 219
level: 0
cast_range: 0
channel_time: 0.0
cooldown_remaining: 0.0
is_activated: true
is_toggled: false
is_in_ability_phase: false
is_channeling: false
is_stolen: false
is_fully_castable: false
}
abilities {
handle: 224
ability_id: 6251
slot: 4
caster_handle: 219
level: 0
cast_range: 0
channel_time: 0.0
cooldown_remaining: 0.0
is_activated: true
is_toggled: false
is_in_ability_phase: false
is_channeling: false
is_stolen: false
is_fully_castable: false
}
abilities {
handle: 225
ability_id: 5488
slot: 5
caster_handle: 219
level: 0
cast_range: 0
channel_time: 0.0
cooldown_remaining: 0.0
is_activated: true
is_toggled: false
is_in_ability_phase: false
is_channeling: false
is_stolen: false
is_fully_castable: false
}
abilities {
handle: 226
ability_id: 5489
slot: 6
caster_handle: 219
level: 0
cast_range: 0
channel_time: 0.0
cooldown_remaining: 0.0
is_activated: true
is_toggled: false
is_in_ability_phase: false
is_channeling: false
is_stolen: false
is_fully_castable: false
}
abilities {
handle: 227
ability_id: 5490
slot: 7
caster_handle: 219
level: 0
cast_range: 0
channel_time: 0.0
cooldown_remaining: 0.0
is_activated: false
is_toggled: false
is_in_ability_phase: false
is_channeling: false
is_stolen: false
is_fully_castable: false
}
abilities {
handle: 228
ability_id: 6017
slot: 9
caster_handle: 219
level: 0
cast_range: 0
channel_time: 0.0
cooldown_remaining: 0.0
is_activated: true
is_toggled: false
is_in_ability_phase: false
is_channeling: false
is_stolen: false
is_fully_castable: false
}
abilities {
handle: 229
ability_id: 6253
slot: 10
caster_handle: 219
level: 0
cast_range: 0
channel_time: 0.0
cooldown_remaining: 0.0
is_activated: true
is_toggled: false
is_in_ability_phase: false
is_channeling: false
is_stolen: false
is_fully_castable: false
}
abilities {
handle: 230
ability_id: 6265
slot: 11
caster_handle: 219
level: 0
cast_range: 0
channel_time: 0.0
cooldown_remaining: 0.0
is_activated: true
is_toggled: false
is_in_ability_phase: false
is_channeling: false
is_stolen: false
is_fully_castable: false
}
abilities {
handle: 231
ability_id: 6924
slot: 12
caster_handle: 219
level: 0
cast_range: 0
channel_time: 0.0
cooldown_remaining: 0.0
is_activated: true
is_toggled: false
is_in_ability_phase: false
is_channeling: false
is_stolen: false
is_fully_castable: false
}
abilities {
handle: 232
ability_id: 5957
slot: 13
caster_handle: 219
level: 0
cast_range: 0
channel_time: 0.0
cooldown_remaining: 0.0
is_activated: true
is_toggled: false
is_in_ability_phase: false
is_channeling: false
is_stolen: false
is_fully_castable: false
}
abilities {
handle: 233
ability_id: 7188
slot: 14
caster_handle: 219
level: 0
cast_range: 0
channel_time: 0.0
cooldown_remaining: 0.0
is_activated: true
is_toggled: false
is_in_ability_phase: false
is_channeling: false
is_stolen: false
is_fully_castable: false
}
abilities {
handle: 234
ability_id: 7070
slot: 15
caster_handle: 219
level: 0
cast_range: 0
channel_time: 0.0
cooldown_remaining: 0.0
is_activated: true
is_toggled: false
is_in_ability_phase: false
is_channeling: false
is_stolen: false
is_fully_castable: false
}
abilities {
handle: 235
ability_id: 6808
slot: 16
caster_handle: 219
level: 0
cast_range: 0
channel_time: 0.0
cooldown_remaining: 0.0
is_activated: true
is_toggled: false
is_in_ability_phase: false
is_channeling: false
is_stolen: false
is_fully_castable: false
}
items {
handle: 236
ability_id: 46
slot: 15
caster_handle: 219
level: 1
cast_range: 0
channel_time: 3.0
cooldown_remaining: 99.40000915527344
is_activated: true
is_toggled: false
is_in_ability_phase: false
is_channeling: false
is_stolen: false
is_fully_castable: false
charges: 1
secondary_charges: 0
is_combined_locked: false
}
modifiers {
name: "modifier_wisp_tentacles"
stack_count: 0
}
modifiers {
name: "modifier_fountain_aura_buff"
stack_count: 0
remaining_duration: 2.9666671752929688
}
action_type: 1
is_using_ability: false
primary_attribute: 0
is_illusion: false
respawn_time: 6.0
buyback_cost: 150
buyback_cooldown: 0.0
spell_amplification: 0.016100000590085983
armor: 0.24000000953674316
magic_resist: 0.2627500295639038
evasion: 0.0
xp_needed_to_level: 230
ability_points: 1
reliable_gold: 0
unreliable_gold: 600
last_hits: 0
denies: 0
net_worth: 650
strength: 17
agility: 14
intelligence: 23
}
units {
handle: 16
unit_type: INVALID
name: "npc_dota_wisp_spirit"
team_id: 2
level: 1
location {
x: -32.753631591796875
y: -28.37112045288086
z: 256.0
}
is_alive: true
player_id: 6
bounding_radius: 8
facing: 220
ground_height: 256
vision_range_daytime: 0
vision_range_nighttime: 0
health: 100
health_max: 100
health_regen: 0.0
mana: 0
mana_max: 0
mana_regen: 0.0
base_movement_speed: 0
current_movement_speed: 100
anim_activity: -1
anim_cycle: 0.0
base_damage: 0
base_damage_variance: 0
bonus_damage: 0
attack_damage: 0
attack_range: 0
attack_speed: 1.0
attack_anim_point: 0.0
attack_acquisition_range: 0
attack_projectile_speed: 0
attacks_per_second: 1
last_attack_time: 0.0
bounty_xp: 12
bounty_gold_min: 1
bounty_gold_max: 1
is_channeling: false
is_attack_immune: false
is_blind: false
is_block_disabled: false
is_disarmed: false
is_evade_disabled: false
is_hexed: false
is_invisible: false
is_invulnerable: true
is_magic_immune: false
is_muted: false
is_nightmared: false
is_rooted: false
is_silenced: false
is_specially_deniable: false
is_stunned: false
is_unable_to_miss: false
has_scepter: false
modifiers {
name: "modifier_wisp_spirit_invulnerable"
stack_count: 0
ability_handle: 221
ability_id: 5486
}
modifiers {
name: "modifier_truesight"
stack_count: 0
remaining_duration: 0.46666717529296875
}
action_type: 2
is_using_ability: false
armor: 0.0
magic_resist: 0.0
}
units {
handle: 17
unit_type: INVALID
name: "npc_dota_wisp_spirit"
team_id: 2
level: 1
location {
x: -32.753631591796875
y: -28.37112045288086
z: 256.0
}
is_alive: true
player_id: 6
bounding_radius: 8
facing: 220
ground_height: 256
vision_range_daytime: 0
vision_range_nighttime: 0
health: 100
health_max: 100
health_regen: 0.0
mana: 0
mana_max: 0
mana_regen: 0.0
base_movement_speed: 0
current_movement_speed: 100
anim_activity: -1
anim_cycle: 0.0
base_damage: 0
base_damage_variance: 0
bonus_damage: 0
attack_damage: 0
attack_range: 0
attack_speed: 1.0
attack_anim_point: 0.0
attack_acquisition_range: 0
attack_projectile_speed: 0
attacks_per_second: 1
last_attack_time: 0.0
bounty_xp: 12
bounty_gold_min: 1
bounty_gold_max: 1
is_channeling: false
is_attack_immune: false
is_blind: false
is_block_disabled: false
is_disarmed: false
is_evade_disabled: false
is_hexed: false
is_invisible: false
is_invulnerable: true
is_magic_immune: false
is_muted: false
is_nightmared: false
is_rooted: false
is_silenced: false
is_specially_deniable: false
is_stunned: false
is_unable_to_miss: false
has_scepter: false
modifiers {
name: "modifier_wisp_spirit_invulnerable"
stack_count: 0
ability_handle: 221
ability_id: 5486
}
modifiers {
name: "modifier_truesight"
stack_count: 0
remaining_duration: 0.46666717529296875
}
action_type: 2
is_using_ability: false
armor: 0.0
magic_resist: 0.0
}
units {
handle: 18
unit_type: INVALID
name: "npc_dota_wisp_spirit"
team_id: 2
level: 1
location {
x: -32.753631591796875
y: -28.37112045288086
z: 256.0
}
is_alive: true
player_id: 6
bounding_radius: 8
facing: 220
ground_height: 256
vision_range_daytime: 0
vision_range_nighttime: 0
health: 100
health_max: 100
health_regen: 0.0
mana: 0
mana_max: 0
mana_regen: 0.0
base_movement_speed: 0
current_movement_speed: 100
anim_activity: -1
anim_cycle: 0.0
base_damage: 0
base_damage_variance: 0
bonus_damage: 0
attack_damage: 0
attack_range: 0
attack_speed: 1.0
attack_anim_point: 0.0
attack_acquisition_range: 0
attack_projectile_speed: 0
attacks_per_second: 1
last_attack_time: 0.0
bounty_xp: 12
bounty_gold_min: 1
bounty_gold_max: 1
is_channeling: false
is_attack_immune: false
is_blind: false
is_block_disabled: false
is_disarmed: false
is_evade_disabled: false
is_hexed: false
is_invisible: false
is_invulnerable: true
is_magic_immune: false
is_muted: false
is_nightmared: false
is_rooted: false
is_silenced: false
is_specially_deniable: false
is_stunned: false
is_unable_to_miss: false
has_scepter: false
modifiers {
name: "modifier_wisp_spirit_invulnerable"
stack_count: 0
ability_handle: 221
ability_id: 5486
}
modifiers {
name: "modifier_truesight"
stack_count: 0
remaining_duration: 0.46666717529296875
}
action_type: 2
is_using_ability: false
armor: 0.0
magic_resist: 0.0
}
units {
handle: 19
unit_type: INVALID
name: "npc_dota_wisp_spirit"
team_id: 2
level: 1
location {
x: -32.753631591796875
y: -28.37112045288086
z: 256.0
}
is_alive: true
player_id: 6
bounding_radius: 8
facing: 220
ground_height: 256
vision_range_daytime: 0
vision_range_nighttime: 0
health: 100
health_max: 100
health_regen: 0.0
mana: 0
mana_max: 0
mana_regen: 0.0
base_movement_speed: 0
current_movement_speed: 100
anim_activity: -1
anim_cycle: 0.0
base_damage: 0
base_damage_variance: 0
bonus_damage: 0
attack_damage: 0
attack_range: 0
attack_speed: 1.0
attack_anim_point: 0.0
attack_acquisition_range: 0
attack_projectile_speed: 0
attacks_per_second: 1
last_attack_time: 0.0
bounty_xp: 12
bounty_gold_min: 1
bounty_gold_max: 1
is_channeling: false
is_attack_immune: false
is_blind: false
is_block_disabled: false
is_disarmed: false
is_evade_disabled: false
is_hexed: false
is_invisible: false
is_invulnerable: true
is_magic_immune: false
is_muted: false
is_nightmared: false
is_rooted: false
is_silenced: false
is_specially_deniable: false
is_stunned: false
is_unable_to_miss: false
has_scepter: false
modifiers {
name: "modifier_wisp_spirit_invulnerable"
stack_count: 0
ability_handle: 221
ability_id: 5486
}
modifiers {
name: "modifier_truesight"
stack_count: 0
remaining_duration: 0.46666717529296875
}
action_type: 2
is_using_ability: false
armor: 0.0
magic_resist: 0.0
}
units {
handle: 20
unit_type: INVALID
name: "npc_dota_wisp_spirit"
team_id: 2
level: 1
location {
x: -32.753631591796875
y: -28.37112045288086
z: 256.0
}
is_alive: true
player_id: 6
bounding_radius: 8
facing: 220
ground_height: 256
vision_range_daytime: 0
vision_range_nighttime: 0
health: 100
health_max: 100
health_regen: 0.0
mana: 0
mana_max: 0
mana_regen: 0.0
base_movement_speed: 0
current_movement_speed: 100
anim_activity: -1
anim_cycle: 0.0
base_damage: 0
base_damage_variance: 0
bonus_damage: 0
attack_damage: 0
attack_range: 0
attack_speed: 1.0
attack_anim_point: 0.0
attack_acquisition_range: 0
attack_projectile_speed: 0
attacks_per_second: 1
last_attack_time: 0.0
bounty_xp: 12
bounty_gold_min: 1
bounty_gold_max: 1
is_channeling: false
is_attack_immune: false
is_blind: false
is_block_disabled: false
is_disarmed: false
is_evade_disabled: false
is_hexed: false
is_invisible: false
is_invulnerable: true
is_magic_immune: false
is_muted: false
is_nightmared: false
is_rooted: false
is_silenced: false
is_specially_deniable: false
is_stunned: false
is_unable_to_miss: false
has_scepter: false
modifiers {
name: "modifier_wisp_spirit_invulnerable"
stack_count: 0
ability_handle: 221
ability_id: 5486
}
modifiers {
name: "modifier_truesight"
stack_count: 0
remaining_duration: 0.46666717529296875
}
action_type: 2
is_using_ability: false
armor: 0.0
magic_resist: 0.0
}
rune_infos {
type: -1
location {
x: -1712.0
y: 1184.0
z: 176.0
}
status: 0
time_since_seen: 78.69914245605469
}
rune_infos {
type: -1
location {
x: 2394.590576171875
y: -1857.83447265625
z: 192.0
}
status: 0
time_since_seen: 78.69914245605469
}
rune_infos {
type: 5
location {
x: -4328.07763671875
y: 1591.9674072265625
z: 304.0
}
status: 0
time_since_seen: 78.69914245605469
}
rune_infos {
type: 5
location {
x: 4143.92236328125
y: -1776.0325927734375
z: 304.0
}
status: 0
time_since_seen: 78.69914245605469
}
rune_infos {
type: 5
location {
x: 3686.955078125
y: -3624.810791015625
z: 304.0
}
status: 0
time_since_seen: 78.69914245605469
}
rune_infos {
type: 5
location {
x: -3072.03662109375
y: 3680.075927734375
z: 192.0
}
status: 0
time_since_seen: 78.69914245605469
}
Exception on Actor::call; retrying (1/5).:
(<Status.UNKNOWN: 2>, 'Internal Server Error')
Exception on Actor::call; retrying (2/5).:
Multiple exceptions: [Errno 61] Connect call failed ('::1', 13337), [Errno 61] Connect call failed ('127.0.0.1', 13337)
Exception on Actor::call; retrying (3/5).:
Multiple exceptions: [Errno 61] Connect call failed ('::1', 13337), [Errno 61] Connect call failed ('127.0.0.1', 13337)
Exception on Actor::call; retrying (4/5).:
Multiple exceptions: [Errno 61] Connect call failed ('::1', 13337), [Errno 61] Connect call failed ('127.0.0.1', 13337)
Traceback (most recent call last):
File "client.py", line 406, in <module>
asyncio.run(main())
File "/usr/local/Cellar/python/3.7.0/Frameworks/Python.framework/Versions/3.7/lib/python3.7/asyncio/runners.py", line 43, in run
return loop.run_until_complete(main)
File "/usr/local/Cellar/python/3.7.0/Frameworks/Python.framework/Versions/3.7/lib/python3.7/asyncio/base_events.py", line 568, in run_until_complete
return future.result()
File "client.py", line 373, in main
for rewards, log_probs in actor_output:
TypeError: cannot unpack non-iterable NoneType object
With patch 7.21 I tried to rebuild the dota2 docker container after deleting the old image and get an error. Not sure the cause:
Success! App '570' fully installed.
Updating Workshop items for App '570'.
Update state (0x3) reconfiguring, progress: 0.00 (0 / 0)
Update state (0x3) reconfiguring, progress: 0.00 (0 / 0)
contentmanifest.cpp (650) : Assertion Failed: !m_bIsFinalized
Update state (0x61) downloading, progress: 21.09 (31200656 / 147970880)
Update state (0x61) downloading, progress: 48.39 (71596542 / 147970880)
Update state (0x61) downloading, progress: 64.85 (95956964 / 147970880)
Update state (0x61) downloading, progress: 81.15 (120074212 / 147970880)
Update state (0x61) downloading, progress: 98.58 (145873728 / 147970880)
Error processing tar file(exit status 1): write /root/Steam/steamapps/common/dota 2 beta/game/dota/pak01_144.vpk: no space left on device
Command was:
docker build -t dota . -f docker/Dockerfile-dota --build-arg user=$STEAM_ID --build-arg pwd=$STEAM_PWD --build-arg guard=<CODE>
I'm surprised by the no space left on device
I have over 700GB left on my laptop's SSD Flash drive so... must be docker container issue
I am trying to get dotaservice running in docker containers, following the instructions in the docker README. I successfully built the dota image, but when I try to run the command to build the dotaservice image, I get the following error:
Step 1/9 : FROM dota:latest pull access denied for dota, repository does not exist or may require 'docker login': denied: requested access to the resource is denied
I'm admittedly pretty bad with Docker, so this may be an obvious error that I'm missing, but any help getting past it would be much appreciated!
First, really thanks to your guys work, it makes developing dota2 ai bot much much easier.
so several basic questions:
Really thanks!
I use 'HOST_MODE_GUI' to launch dota, everything goes fine except I can't see the hero, it seems the fog of war cover the map.
I have tried add launch option '-render True' or '-allvision', but not work...
This crashed both the dotaservice as well as the client. The worldstate that was sent was incomplete, probably because it was [intentionally] killed while sending the worldstate.
(python) action= {'actionType': 'DOTA_UNIT_ORDER_MOVE_TO_POSITION', 'moveToLocation': {'location': {'x': 6852.0, 'y': -5764.0, 'z': 0.0}}, 'dota_time': 109.81683349609375}
Script function 'Think' on bot npc_dota_hero_nevermore took 7.483ms
(py) worldstate @ dotatime=110.81704711914062, gamestate=5
DotaService::step()
(python) action= {'actionType': 'DOTA_UNIT_ORDER_MOVE_TO_POSITION', 'moveToLocation': {'location': {'x': 6852.0, 'y': -5764.0, 'z': 0.0}}, 'dota_time': 110.81704711914062}
Script function 'Think' on bot npc_dota_hero_nevermore took 7.549ms
(py) worldstate @ dotatime=111.8172607421875, gamestate=5
DotaService::reset()
config=
host_timescale: 10
ticks_per_observation: 30
render: false
kill: 30495: No such process
Application error
Traceback (most recent call last):
File "/usr/local/lib/python3.7/site-packages/grpclib/server.py", line 327, in request_handler
await method.func(stream)
File "/Users/tzaman/Drive/code/dotaservice/dotaservice/dotaservice.py", line 305, in reset
game_id=config.game_id,
File "/Users/tzaman/Drive/code/dotaservice/dotaservice/dotaservice.py", line 75, in __init__
self.bot_path = self._create_bot_path()
File "/Users/tzaman/Drive/code/dotaservice/dotaservice/dotaservice.py", line 129, in _create_bot_path
assert len(lua_files) == 5
AssertionError
/Users/tzaman/Library/Application Support/Steam/SteamApps/common/dota 2 beta/game/dota.sh: line 104: 30491 Killed: 9 ${STEAM_RUNTIME_PREFIX} ${GAME_DEBUGGER} "${GAMEROOT}"/${GAMEEXE} "$@"
Task exception was never retrieved
future: <Task finished coro=<DotaGame._worldstate_listener() done, defined at /Users/tzaman/Drive/code/dotaservice/dotaservice/dotaservice.py:241> exception=error('unpack requires a buffer of 4 bytes')>
Traceback (most recent call last):
File "/Users/tzaman/Drive/code/dotaservice/dotaservice/dotaservice.py", line 253, in _worldstate_listener
parsed_data = await self._data_from_reader(reader)
File "/Users/tzaman/Drive/code/dotaservice/dotaservice/dotaservice.py", line 230, in _data_from_reader
n_bytes = unpack("@I", data)[0]
struct.error: unpack requires a buffer of 4 bytes
(..)
ep=351 reward sum=21237.75
last hero loc dotatime=111.8172607421875, x=6240.0, y=-5920.0
last hero loc dotatime=111.8172607421875, x=6752.0, y=-5664.0
Traceback (most recent call last):
File "client.py", line 263, in <module>
asyncio.run(main())
File "/usr/local/Cellar/python/3.7.0/Frameworks/Python.framework/Versions/3.7/lib/python3.7/asyncio/runners.py", line 43, in run
return loop.run_until_complete(main)
File "/usr/local/Cellar/python/3.7.0/Frameworks/Python.framework/Versions/3.7/lib/python3.7/asyncio/base_events.py", line 568, in run_until_complete
return future.result()
File "client.py", line 175, in main
state = await env.reset(config)
File "/usr/local/lib/python3.7/site-packages/grpclib/client.py", line 556, in __call__
return await stream.recv_message()
File "/usr/local/lib/python3.7/site-packages/grpclib/client.py", line 304, in recv_message
await self.recv_initial_metadata()
File "/usr/local/lib/python3.7/site-packages/grpclib/client.py", line 246, in recv_initial_metadata
self._raise_for_grpc_status(headers_map, optional=True)
File "/usr/local/lib/python3.7/site-packages/grpclib/client.py", line 215, in _raise_for_grpc_status
raise GRPCError(grpc_status_enum, status_message)
grpclib.exceptions.GRPCError: (<Status.UNKNOWN: 2>, 'Internal Server Error')
Hi, @Nostrademous :
I use your fork version. It work good for my MacBook Pro. And I want to know, how to render the game? It like headless version.
it seems that the observe() can get all units in the game. But if I pass a handle in DOTA_UNIT_ORDER_ATTACK_TARGET action which is not in bot's vision, the GetBotByHandle will fail (and it should fail).
Thus I need a way to know if a unit is visible to bot.
I test the game mode = DOTA_GAMEMODE_MO and game mode = DOTA_GAMEMODE_1V1MID, but sometimes the lane creep doesn't spawn, do I miss something?
I use the observe rpc with the dire team id, all info in the returned world state is ok, except there are no enemy(radiant) lane creep info, but actually the radiant lane creep is in our sight.
do you encounter this problem?
As we train the AI to do actions we should train on general data values rather than values trained to specific hero names/IDs. What I mean, rather than training an Antimage bot and then separately on say Earthshaker, we should rather train on a hero with certain characteristics like "base move speed", "turn rate", "attack range", etc.
The learned behavior for map navigation say for a hero with same base movement speed and turn rate should be the same irregardless of what hero it actually is.
Similarly, we can do this for units and abilities/items to generalize the learning process.
I have written a python file to auto-generate JSON files for heroes
, units
, and abilities
from the Dota2 provided .txt
files. I've pushed the script in the other repo to separate it from the dotaservice.
Link: https://github.com/pydota2/pydota2/blob/master/patching/generate_json_files.py
Here is what the python file pulls from the Dota2 resource files for Antimage:
"1": {
"Name": "npc_dota_hero_antimage",
"Talents": {
"Talent_1": "special_bonus_strength_10",
"Talent_2": "special_bonus_attack_speed_20",
"Talent_3": "special_bonus_unique_antimage_3",
"Talent_4": "special_bonus_agility_15",
"Talent_5": "special_bonus_unique_antimage_5",
"Talent_6": "special_bonus_unique_antimage",
"Talent_7": "special_bonus_unique_antimage_4",
"Talent_8": "special_bonus_unique_antimage_2"
},
"ArmorPhysical": -1,
"AttackRate": 1.4,
"AttackRange": 150,
"ProjectileSpeed": 0,
"AttributeBaseStrength": 23,
"AttributeStrengthGain": 1.3,
"AttributeBaseIntelligence": 12,
"AttributeIntelligenceGain": 1.8,
"AttributeBaseAgility": 22,
"AttributeAgilityGain": 2.8,
"MovementSpeed": 310,
"MovementTurnRate": 0.5
},
Reason for this design is to allow for much faster/easier response to new Dota2 patches coming down in the future. All you need to do is run the python script and it will auto generate the data which we can use in agent training.
found DOTA_GC_TEAM in dota_shared_enums.proto, but it seems not the enum of units.team_id, since the units.team_id {good_guy:2, bad_guy:3}
"m.target = 1337 # for now just attack closest creep in lua code"
but why 1337, i am still confused
When the game ends, the server ticks stop abruptly. There is no worldstate being sent out any more. That means we need to capture this end-game signal (through a simple timeout?) and then process how the game ended, and who won, probably through the logs. Here is a typcal entry:
01/17/2019 - 07:55:01: Script function 'Think' on bot npc_dota_hero_nevermore took 22.171ms
01/17/2019 - 07:55:02: [Server] Client tried to execute invalid order (20). Unit is dead.
01/17/2019 - 07:55:02: Building: npc_dota_badguys_fort destroyed at 182.889038.
01/17/2019 - 07:55:02: [SpawnGroup] SynchronouslySpawnGroup for group 'CL: [18: dota | world_layer_dire_destruction | <none>]' took 1ms
01/17/2019 - 07:55:02: S:Gamerules: entering state 'DOTA_GAMERULES_STATE_POST_GAME'
01/17/2019 - 07:55:02: CDOTAUserMsg_PlayerMMR check: lobbyType=-1, GameEndReason=0
01/17/2019 - 07:55:02: CDOTAGCServerSystem::MatchSignOut gathering sign out stats. Duration in minutes = 3.048706
01/17/2019 - 07:55:02: Player 0 Account 0 TotalGold = 1068.000000 TotalXP = 1433.000000 nGoldPerMinute = 350 nXPPerMinute = 470
01/17/2019 - 07:55:02: Player 0 Account 0 TotalGold = 278.000000 TotalXP = 0.000000 nGoldPerMinute = 91 nXPPerMinute = 0
01/17/2019 - 07:55:02: Player 0 Account 0 TotalGold = 278.000000 TotalXP = 0.000000 nGoldPerMinute = 91 nXPPerMinute = 0
01/17/2019 - 07:55:02: Player 0 Account 0 TotalGold = 278.000000 TotalXP = 0.000000 nGoldPerMinute = 91 nXPPerMinute = 0
01/17/2019 - 07:55:02: Player 0 Account 0 TotalGold = 278.000000 TotalXP = 0.000000 nGoldPerMinute = 91 nXPPerMinute = 0
01/17/2019 - 07:55:02: Player 0 Account 0 TotalGold = 388.000000 TotalXP = 1200.000000 nGoldPerMinute = 127 nXPPerMinute = 393
01/17/2019 - 07:55:02: Player 0 Account 0 TotalGold = 278.000000 TotalXP = 0.000000 nGoldPerMinute = 91 nXPPerMinute = 0
01/17/2019 - 07:55:02: Player 0 Account 0 TotalGold = 278.000000 TotalXP = 0.000000 nGoldPerMinute = 91 nXPPerMinute = 0
01/17/2019 - 07:55:02: Player 0 Account 0 TotalGold = 278.000000 TotalXP = 0.000000 nGoldPerMinute = 91 nXPPerMinute = 0
01/17/2019 - 07:55:02: Player 0 Account 0 TotalGold = 278.000000 TotalXP = 0.000000 nGoldPerMinute = 91 nXPPerMinute = 0
01/17/2019 - 07:55:02: Match signout: duration = 182 (182.922363) good guys win = 1
01/17/2019 - 07:55:02: Match start date: Thu Jan 17 07:51:52 2019
01/17/2019 - 07:55:02: Num players on teams: Good: 5 Bad: 5
01/17/2019 - 07:55:02: Team 0 Player 0 m_unAccountID = 0 Items: 0, 0, 0, 0, 0, 0, 0, 0, 0
01/17/2019 - 07:55:02: LastHit = 3 Deny = 0 ClaimedMiss = 11 ClaimedDeny = 0 Miss = 3
01/17/2019 - 07:55:02: Level: 4 Gold: 1668 KDA: 2 / 0 / 0
01/17/2019 - 07:55:02: Actual Player Damage: 290 Actual Building Damage: 0 Actual Healing: 0
01/17/2019 - 07:55:02: Scaled Player Damage: 553 Scaled Building Damage: 0 Scaled Healing: 0
01/17/2019 - 07:55:02: XP per min: 350 Gold per min: 470 Claimed Farm: 653 Support Gold 0
01/17/2019 - 07:55:02: Team 0 Player 1 m_unAccountID = 0 Items: 0, 0, 0, 0, 0, 0, 0, 0, 0
01/17/2019 - 07:55:02: LastHit = 0 Deny = 0 ClaimedMiss = 0 ClaimedDeny = 0 Miss = 0
01/17/2019 - 07:55:02: Level: 1 Gold: 878 KDA: 0 / 0 / 0
01/17/2019 - 07:55:02: Actual Player Damage: 0 Actual Building Damage: 0 Actual Healing: 0
01/17/2019 - 07:55:02: Scaled Player Damage: 0 Scaled Building Damage: 0 Scaled Healing: 0
01/17/2019 - 07:55:02: XP per min: 91 Gold per min: 0 Claimed Farm: 0 Support Gold 0
01/17/2019 - 07:55:02: Team 0 Player 2 m_unAccountID = 0 Items: 0, 0, 0, 0, 0, 0, 0, 0, 0
01/17/2019 - 07:55:02: LastHit = 0 Deny = 0 ClaimedMiss = 0 ClaimedDeny = 0 Miss = 0
01/17/2019 - 07:55:02: Level: 1 Gold: 878 KDA: 0 / 0 / 0
01/17/2019 - 07:55:02: Actual Player Damage: 0 Actual Building Damage: 0 Actual Healing: 0
01/17/2019 - 07:55:02: Scaled Player Damage: 0 Scaled Building Damage: 0 Scaled Healing: 0
01/17/2019 - 07:55:02: XP per min: 91 Gold per min: 0 Claimed Farm: 0 Support Gold 0
01/17/2019 - 07:55:02: Team 0 Player 3 m_unAccountID = 0 Items: 0, 0, 0, 0, 0, 0, 0, 0, 0
01/17/2019 - 07:55:02: LastHit = 0 Deny = 0 ClaimedMiss = 0 ClaimedDeny = 0 Miss = 0
01/17/2019 - 07:55:02: Level: 1 Gold: 878 KDA: 0 / 0 / 0
01/17/2019 - 07:55:02: Actual Player Damage: 0 Actual Building Damage: 0 Actual Healing: 0
01/17/2019 - 07:55:02: Scaled Player Damage: 0 Scaled Building Damage: 0 Scaled Healing: 0
01/17/2019 - 07:55:02: XP per min: 91 Gold per min: 0 Claimed Farm: 0 Support Gold 0
01/17/2019 - 07:55:02: Team 0 Player 4 m_unAccountID = 0 Items: 0, 0, 0, 0, 0, 0, 0, 0, 0
01/17/2019 - 07:55:02: LastHit = 0 Deny = 0 ClaimedMiss = 0 ClaimedDeny = 0 Miss = 0
01/17/2019 - 07:55:02: Level: 1 Gold: 878 KDA: 0 / 0 / 0
01/17/2019 - 07:55:02: Actual Player Damage: 0 Actual Building Damage: 0 Actual Healing: 0
01/17/2019 - 07:55:02: Scaled Player Damage: 0 Scaled Building Damage: 0 Scaled Healing: 0
01/17/2019 - 07:55:02: XP per min: 91 Gold per min: 0 Claimed Farm: 0 Support Gold 0
01/17/2019 - 07:55:02: Team 1 Player 0 m_unAccountID = 0 Items: 0, 0, 0, 0, 0, 0, 0, 0, 0
01/17/2019 - 07:55:02: LastHit = 3 Deny = 0 ClaimedMiss = 8 ClaimedDeny = 0 Miss = 7
01/17/2019 - 07:55:02: Level: 4 Gold: 841 KDA: 0 / 2 / 0
01/17/2019 - 07:55:02: Actual Player Damage: 294 Actual Building Damage: 0 Actual Healing: 0
01/17/2019 - 07:55:02: Scaled Player Damage: 577 Scaled Building Damage: 0 Scaled Healing: 0
01/17/2019 - 07:55:02: XP per min: 127 Gold per min: 393 Claimed Farm: 759 Support Gold 0
01/17/2019 - 07:55:02: Team 1 Player 1 m_unAccountID = 0 Items: 0, 0, 0, 0, 0, 0, 0, 0, 0
01/17/2019 - 07:55:02: LastHit = 0 Deny = 0 ClaimedMiss = 0 ClaimedDeny = 0 Miss = 0
01/17/2019 - 07:55:02: Level: 1 Gold: 878 KDA: 0 / 0 / 0
01/17/2019 - 07:55:02: Actual Player Damage: 0 Actual Building Damage: 0 Actual Healing: 0
01/17/2019 - 07:55:02: Scaled Player Damage: 0 Scaled Building Damage: 0 Scaled Healing: 0
01/17/2019 - 07:55:02: XP per min: 91 Gold per min: 0 Claimed Farm: 0 Support Gold 0
01/17/2019 - 07:55:02: Team 1 Player 2 m_unAccountID = 0 Items: 0, 0, 0, 0, 0, 0, 0, 0, 0
01/17/2019 - 07:55:02: LastHit = 0 Deny = 0 ClaimedMiss = 0 ClaimedDeny = 0 Miss = 0
01/17/2019 - 07:55:02: Level: 1 Gold: 878 KDA: 0 / 0 / 0
01/17/2019 - 07:55:02: Actual Player Damage: 0 Actual Building Damage: 0 Actual Healing: 0
01/17/2019 - 07:55:02: Scaled Player Damage: 0 Scaled Building Damage: 0 Scaled Healing: 0
01/17/2019 - 07:55:02: XP per min: 91 Gold per min: 0 Claimed Farm: 0 Support Gold 0
01/17/2019 - 07:55:02: Team 1 Player 3 m_unAccountID = 0 Items: 0, 0, 0, 0, 0, 0, 0, 0, 0
01/17/2019 - 07:55:02: LastHit = 0 Deny = 0 ClaimedMiss = 0 ClaimedDeny = 0 Miss = 0
01/17/2019 - 07:55:02: Level: 1 Gold: 878 KDA: 0 / 0 / 0
01/17/2019 - 07:55:02: Actual Player Damage: 0 Actual Building Damage: 0 Actual Healing: 0
01/17/2019 - 07:55:02: Scaled Player Damage: 0 Scaled Building Damage: 0 Scaled Healing: 0
01/17/2019 - 07:55:02: XP per min: 91 Gold per min: 0 Claimed Farm: 0 Support Gold 0
01/17/2019 - 07:55:02: Team 1 Player 4 m_unAccountID = 0 Items: 0, 0, 0, 0, 0, 0, 0, 0, 0
01/17/2019 - 07:55:02: LastHit = 0 Deny = 0 ClaimedMiss = 0 ClaimedDeny = 0 Miss = 0
01/17/2019 - 07:55:02: Level: 1 Gold: 878 KDA: 0 / 0 / 0
01/17/2019 - 07:55:02: Actual Player Damage: 0 Actual Building Damage: 0 Actual Healing: 0
01/17/2019 - 07:55:02: Scaled Player Damage: 0 Scaled Building Damage: 0 Scaled Healing: 0
01/17/2019 - 07:55:02: XP per min: 91 Gold per min: 0 Claimed Farm: 0 Support Gold 0
01/17/2019 - 07:55:02: KILLEATER: Signing out with 0 adjustments
01/17/2019 - 07:55:02: KILLEATER: Message has 0 player blocks
01/17/2019 - 07:55:02: Not submitting stats. Both teams must have human players.
01/17/2019 - 07:55:02: match_id: 0
01/17/2019 - 07:55:02: region_id: 4294967295
01/17/2019 - 07:55:02: players {
01/17/2019 - 07:55:02: account_id: 107576
01/17/2019 - 07:55:02: ip: 2130706433
01/17/2019 - 07:55:02: avg_ping_ms: 0
01/17/2019 - 07:55:02: packet_loss: 0
01/17/2019 - 07:55:02: ping_deviation: 0.28598091
01/17/2019 - 07:55:02: full_resends: 0
01/17/2019 - 07:55:02: }
01/17/2019 - 07:55:02: cluster_id: 0
01/17/2019 - 07:55:02:
COMBAT SUMMARY
01/17/2019 - 07:55:02: --- Shadow Fiend ---
01/17/2019 - 07:55:02: Total Damage Done: 0
01/17/2019 - 07:55:02: - ability damage -
01/17/2019 - 07:55:02: other damage done: 0
01/17/2019 - 07:55:02: --- Sniper ---
01/17/2019 - 07:55:02: Total Damage Done: 0
01/17/2019 - 07:55:02: - ability damage -
01/17/2019 - 07:55:02: other damage done: 0
01/17/2019 - 07:55:02: --- Sniper ---
01/17/2019 - 07:55:02: Total Damage Done: 0
01/17/2019 - 07:55:02: - ability damage -
01/17/2019 - 07:55:02: other damage done: 0
01/17/2019 - 07:55:02: --- Sniper ---
01/17/2019 - 07:55:02: Total Damage Done: 0
01/17/2019 - 07:55:02: - ability damage -
01/17/2019 - 07:55:02: other damage done: 0
01/17/2019 - 07:55:02: --- Sniper ---
01/17/2019 - 07:55:02: Total Damage Done: 0
01/17/2019 - 07:55:02: - ability damage -
01/17/2019 - 07:55:02: other damage done: 0
01/17/2019 - 07:55:02: --- Shadow Fiend ---
01/17/2019 - 07:55:02: Total Damage Done: 0
01/17/2019 - 07:55:02: - ability damage -
01/17/2019 - 07:55:02: other damage done: 0
01/17/2019 - 07:55:02: --- Sniper ---
01/17/2019 - 07:55:02: Total Damage Done: 0
01/17/2019 - 07:55:02: - ability damage -
01/17/2019 - 07:55:02: other damage done: 0
01/17/2019 - 07:55:02: --- Sniper ---
01/17/2019 - 07:55:02: Total Damage Done: 0
01/17/2019 - 07:55:02: - ability damage -
01/17/2019 - 07:55:02: other damage done: 0
01/17/2019 - 07:55:02: --- Sniper ---
01/17/2019 - 07:55:02: Total Damage Done: 0
01/17/2019 - 07:55:02: - ability damage -
01/17/2019 - 07:55:02: other damage done: 0
01/17/2019 - 07:55:02: --- Sniper ---
01/17/2019 - 07:55:02: Total Damage Done: 0
01/17/2019 - 07:55:02: - ability damage -
01/17/2019 - 07:55:02: other damage done: 0
01/17/2019 - 07:55:02:
01/17/2019 - 07:55:02: C:Gamerules: entering state 'DOTA_GAMERULES_STATE_POST_GAME'
01/17/2019 - 07:55:02: [Client] CDOTA_Hud_Main::EventGameRulesStateChanged DOTA_GAMERULES_STATE_POST_GAME
01/17/2019 - 07:55:02: [Client] CDOTA_Hud_Main::CreateGameEndScreen Creating GameEnd
01/17/2019 - 07:55:05: [HostStateManager] CHostStateMgr::QueueNewRequest( Quitting, 3 )
01/17/2019 - 07:55:05: [Client] CL: Disconnecting from server: NETWORK_DISCONNECT_EXITING
01/17/2019 - 07:55:05: [NetSteamConn] Closing Steam Net Connection on socket 'client' to loopback:1, handle 10000 (1059 NETWORK_DISCONNECT_EXITING)
01/17/2019 - 07:55:05: [NetSteamConn] Disassociating NetChan client [-1] (unknown) from Steam Net Connection handle 10000
01/17/2019 - 07:55:05: [NetSteamConn] Removing Steam Net Connection for loopback:1, handle 10000
01/17/2019 - 07:55:05: [HLTV Server] SourceTV shutting down
01/17/2019 - 07:55:05: [HLTV Server] CHLTVServer::Shutdown
01/17/2019 - 07:55:05: [HLTV Server] Completed SourceTV demo "replays/auto-20190117-0751-start-dotaservice.dem", recording time 289.9
01/17/2019 - 07:55:05: [Server] CNetworkGameServerBase::SetServerState (ss_active -> ss_dead)
01/17/2019 - 07:55:05: [stringtables] CNetworkStringTableContainer::RemoveAllTables: removing 20 tables
01/17/2019 - 07:55:05: [Server] SV: Server shutting down: 59
01/17/2019 - 07:55:05: [Server] CNetworkGameServerBase::SetServerState (ss_active -> ss_dead)
01/17/2019 - 07:55:05: [Server] SV: Disconnect client 'Tim' from server(1): NETWORK_DISCONNECT_SHUTDOWN
01/17/2019 - 07:55:05: [NetSteamConn] Closing Steam Net Connection on socket 'server' to loopback:0, handle 20001 (1001 NETWORK_DISCONNECT_SHUTDOWN)
01/17/2019 - 07:55:05: [NetSteamConn] Disassociating NetChan Tim [-1] (unknown) from Steam Net Connection handle 20001
01/17/2019 - 07:55:05: [NetSteamConn] Removing Steam Net Connection for loopback:0, handle 20001
01/17/2019 - 07:55:05: [Server] SV: AsyncUnloadSpawnGroup( 18 ) -- no such group
01/17/2019 - 07:55:05: [Server] SV: AsyncUnloadSpawnGroup( 16 ) -- no such group
01/17/2019 - 07:55:05: [Client] CL: IGameSystem::LoopDeactivateAllSystems
01/17/2019 - 07:55:05: WriteSteamRemoteStorageFileAsync( "scripts/control_groups.txt" ) -> at 216.329
01/17/2019 - 07:55:05: [stringtables] CNetworkStringTableContainer::RemoveAllTables: removing 20 tables
01/17/2019 - 07:55:05: [Server] SV: IGameSystem::LoopDeactivateAllSystems
01/17/2019 - 07:55:05: [Host] HO: IGameSystem::LoopDeactivateAllSystems
01/17/2019 - 07:55:05: [stringtables] CNetworkStringTableContainer::RemoveAllTables: removing 20 tables
01/17/2019 - 07:55:06: **** Unable to localize '#GameUI_Language_Latam_Spanish' on panel 'latam'
01/17/2019 - 07:55:06: **** Unable to localize '#GameUI_Language_Vietnamese' on panel 'vietnamese'
01/17/2019 - 07:55:06: **** Unable to localize '#GameUI_Language_Latam_Spanish' on panel 'latam'
01/17/2019 - 07:55:06: **** Unable to localize '#GameUI_Language_Vietnamese' on panel 'vietnamese'
01/17/2019 - 07:55:06: [Client] CL: CGameRulesGameSystem::GameShutdown uninstalled game rules
01/17/2019 - 07:55:06: [Client] CL: CGameRules::CGameRules destructed
01/17/2019 - 07:55:06: WriteSteamRemoteStorageFileAsync( "voice_ban.dt" ) -> at 216.823
01/17/2019 - 07:55:06: [Server] SV: CGameRulesGameSystem::GameShutdown uninstalled game rules
01/17/2019 - 07:55:06: [Server] SV: CGameRules::CGameRules destructed
01/17/2019 - 07:55:06: [HostStateManager] Quitting
Hi guys,
I really curious about how some specific game modes are created in dotaservice (eg, the scripted ai vs scripted ai mode, the scripted ai vs buildin ai mode)? I go through some related code, maybe the game mode is specified in
dotaservice/dotaservice/dotaservice.py
Lines 196 to 230 in 80168b8
before come to dotaservice repo, I has googled a lot and try to find the solution to create the offline scripted ai vs scripted ai mode in lobby, but it seems current dota2 client disable the offline lobby creation and I can't get round this issue.
so I wonder how you guys slove this problem and if it is sloved by the command line paramter passed to dota2 client, where do you find the corresponding wiki/doc?
Thanks!
During a random training on K8s i saw. It reports a pre-game game state without any units. Obviously that's not a controllable situation, as there is nothing to control or act upon. So we should only push worldstates that have controllable entities.
Both reports below were seen in dockerized instances on k8s.
Traceback (most recent call last):
File "client.py", line 401, in <module>
asyncio.run(main())
File "/usr/local/Cellar/python/3.7.1/Frameworks/Python.framework/Versions/3.7/lib/python3.7/asyncio/runners.py", line 43, in run
return loop.run_until_complete(main)
File "/usr/local/Cellar/python/3.7.1/Frameworks/Python.framework/Versions/3.7/lib/python3.7/asyncio/base_events.py", line 573, in run_until_complete
return future.result()
File "client.py", line 365, in main
actor_output = await asyncio.gather(*[a() for a in actors])
File "client.py", line 297, in __call__
action = select_action(obs, step=step)
File "client.py", line 150, in select_action
unit = get_hero_unit(world_state)
File "client.py", line 209, in get_hero_unit
raise ValueError("hero {} not found in state:\n{}".format(id, state))
ValueError: hero 0 not found in state:
team_id: 2
game_time: 73.89921569824219
dota_time: -87.30003356933594
game_state: 4
hero_pick_state: 1
time_of_day: 0.0
glyph_cooldown: 341.1992492675781
glyph_cooldown_enemy: 341
players {
player_id: 0
team_id: 2
}
players {
player_id: 1
team_id: 2
}
players {
player_id: 2
team_id: 2
}
players {
player_id: 3
team_id: 2
}
players {
player_id: 4
team_id: 2
}
players {
player_id: 5
team_id: 3
}
players {
player_id: 6
team_id: 3
}
players {
player_id: 7
team_id: 3
}
players {
player_id: 8
team_id: 3
}
players {
player_id: 9
team_id: 3
}
and another one i dug up:
ValueError: hero 0 not found in state:
team_id: 2
game_time: 74.89920043945312
dota_time: -88.4000244140625
game_state: 4
hero_pick_state: 1
time_of_day: 0.0
glyph_cooldown: 343.2992248535156
glyph_cooldown_enemy: 343
players {
player_id: 0
team_id: 2
}
players {
player_id: 1
team_id: 2
}
players {
player_id: 2
team_id: 2
}
players {
player_id: 3
team_id: 2
}
players {
player_id: 4
team_id: 2
}
players {
player_id: 5
team_id: 3
}
players {
player_id: 6
team_id: 3
}
players {
player_id: 7
team_id: 3
}
players {
player_id: 8
team_id: 3
}
players {
player_id: 9
team_id: 3
}
Hi, thanks for your reading first.
Ubuntu 18.04.1.
The newest steam, Dota2 client and code up to date (10/12/2018).
python3 -m dotaservice
state = await asyncio.wait_for(env.reset(config))
When i do as 1 2 3 (whether with and without rendering), the server will blocked at
(py) worldstate @ dotatime=-89.23334503173828, gamestate=4
The last few logs are showing below:
(py) worldstate @ dotatime=-12.10013198852539, gamestate=8
Act::
Observe:: cout
Observe:: cerr
(py) worldstate @ dotatime=-12.10013198852539, gamestate=8
Act::
S:Gamerules: entering state 'DOTA_GAMERULES_STATE_WAIT_FOR_MAP_TO_LOAD'
S:Gamerules: entering state 'DOTA_GAMERULES_STATE_PRE_GAME'
m_flPreGameStartTime set to 31.13
m_flStateTransitionTime set to 121.13
Height map file (maps/prefabs/promotional_radiant_fountain.vhcg) not found, this will make ground height traces more expensive! Recompile the map to generate a height map.
Height map file (maps/prefabs/promotional_dire_fountain.vhcg) not found, this will make ground height traces more expensive! Recompile the map to generate a height map.
Observe:: cout
Observe:: cerr
(py) worldstate @ dotatime=-89.23334503173828, gamestate=4
But when i do as 2 3 4, without turn on steam client, it can work correctly. Some logs are:
(py) worldstate @ dotatime=-12.10013198852539, gamestate=8
Act::
Observe:: cout
Observe:: cerr
(py) worldstate @ dotatime=-12.10013198852539, gamestate=8
Act::
S:Gamerules: entering state 'DOTA_GAMERULES_STATE_WAIT_FOR_MAP_TO_LOAD'
S:Gamerules: entering state 'DOTA_GAMERULES_STATE_PRE_GAME'
m_flPreGameStartTime set to 31.13
m_flStateTransitionTime set to 121.13
Height map file (maps/prefabs/promotional_radiant_fountain.vhcg) not found, this will make ground height traces more expensive! Recompile the map to generate a height map.
Height map file (maps/prefabs/promotional_dire_fountain.vhcg) not found, this will make ground height traces more expensive! Recompile the map to generate a height map.
Observe:: cout
Observe:: cerr
(py) worldstate @ dotatime=-89.23334503173828, gamestate=4
(py) lua_config = {'step': 30, 'dota_time': -88.966682434082}
(py) lua config received= {'step': 30, 'dota_time': -88.966682434082}
(py) writing live config= {'calibration_dota_time': -89.23334503173828}
DotaService::step()
I compared the two logs, it seems without steam running, it can not load steam API. Can this be one reason of the block?
I doesn't know much about Steam and Dota2 APIs, and doesn't know how to debug this error.
Thanks for your helping!
Do you think it is wise to create a collaborative GCP bucket (each person will obviously have their own credentials)?
With the code as currently checked in it will try to access the 'dotaservice' bucket which none but you will have access to. Obviously easy to change but was debating the above question.
Agent:
$ tzaman@Tims-Mac-Pro dotaclient (master) $ kubectl logs dotaservice-deployment-8c499c96-2mgbd agent
2019-01-06 21:18:41,153 INFO setup_model_cb(host=rmq.default.svc.cluster.local, port=5672)
2019-01-06 21:18:41,283 INFO Received new model: version=284, size=1207326b
2019-01-06 21:18:41,287 INFO Updated weights to version 284
2019-01-06 21:18:41,288 INFO === Starting Episode 0.
2019-01-06 21:18:41,288 INFO Starting game.
2019-01-06 21:18:41,290 ERROR error on dispatch
Traceback (most recent call last):
File "/usr/lib/python3.7/asyncio/runners.py", line 43, in run
return loop.run_until_complete(main)
File "/usr/lib/python3.7/asyncio/base_events.py", line 573, in run_until_complete
return future.result()
File "agent.py", line 515, in main
await game.play()
File "agent.py", line 430, in play
response = await asyncio.wait_for(self.dota_service.reset(self.config), timeout=120)
File "/usr/lib/python3.7/asyncio/tasks.py", line 416, in wait_for
return fut.result()
File "/root/.local/lib/python3.7/site-packages/grpclib/client.py", line 588, in __call__
await stream.send_message(message, end=True)
File "/root/.local/lib/python3.7/site-packages/grpclib/client.py", line 163, in send_message
await self.send_request()
File "/root/.local/lib/python3.7/site-packages/grpclib/client.py", line 132, in send_request
protocol = await self._channel.__connect__()
File "/root/.local/lib/python3.7/site-packages/grpclib/client.py", line 477, in __connect__
self._protocol = await self._create_connection()
File "/root/.local/lib/python3.7/site-packages/grpclib/client.py", line 465, in _create_connection
ssl=self._ssl)
File "/usr/lib/python3.7/asyncio/base_events.py", line 948, in create_connection
raise exceptions[0]
File "/usr/lib/python3.7/asyncio/base_events.py", line 935, in create_connection
await self.sock_connect(sock, address)
File "/usr/lib/python3.7/asyncio/selector_events.py", line 475, in sock_connect
return await fut
File "/usr/lib/python3.7/asyncio/selector_events.py", line 505, in _sock_connect_cb
raise OSError(err, f'Connect call failed {address}')
ConnectionRefusedError: [Errno 111] Connect call failed ('127.0.0.1', 13337)
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/root/.local/lib/python3.7/site-packages/aioamqp/protocol.py", line 333, in run
yield from self.dispatch_frame()
File "/root/.local/lib/python3.7/site-packages/aioamqp/protocol.py", line 288, in dispatch_frame
yield from channel.dispatch_frame(frame)
File "/root/.local/lib/python3.7/site-packages/aioamqp/channel.py", line 111, in dispatch_frame
yield from methods[(frame.class_id, frame.method_id)](frame)
File "/root/.local/lib/python3.7/site-packages/aioamqp/channel.py", line 631, in basic_deliver
content_body_frame = yield from self.protocol.get_frame()
File "/root/.local/lib/python3.7/site-packages/aioamqp/protocol.py", line 264, in get_frame
yield from frame.read_frame()
File "/root/.local/lib/python3.7/site-packages/aioamqp/frame.py", line 462, in read_frame
payload_data = yield from self.reader.readexactly(self.frame_length)
File "/usr/lib/python3.7/asyncio/streams.py", line 679, in readexactly
await self._wait_for_data('readexactly')
File "/usr/lib/python3.7/asyncio/streams.py", line 473, in _wait_for_data
await self._waiter
concurrent.futures._base.CancelledError
Dotaservice (0.3.2):
$ tzaman@Tims-Mac-Pro dotaclient (master) $ kubectl logs dotaservice-deployment-8c499c96-2mgbd dotaservice
2019-01-06 21:18:41,932 INFO DotaService 0.3.2 serving on :13337
I look the dotaclient code, it seems right now it can only use three types of actions: move, attack and do nothing.
I want to cast the q,w,e,r skills in NeverMore, so is there a way to do that?
Determine how and where we want to separate Dire & Radiant data/logic. We could just create two instances of DotaService class (and add specifying teamID and associated port to listen on as class parameters) and create an array/tuple of tasks and make the loop run on it (https://github.com/TimZaman/dotaservice/blob/master/dotaservice/dotaservice.py#L508-L515). However, we could also make it internal to the DotaService class through better functionalization.
Separate Dire & Radiant example clients
Below error probably caused by the Hero not being present in the world state (wut?!)
x=-2406, y=-796, reward=0.0
Traceback (most recent call last):
File "client.py", line 306, in <module>
asyncio.run(main())
File "/usr/local/Cellar/python/3.7.0/Frameworks/Python.framework/Versions/3.7/lib/python3.7/asyncio/runners.py", line 43, in run
return loop.run_until_complete(main)
File "/usr/local/Cellar/python/3.7.0/Frameworks/Python.framework/Versions/3.7/lib/python3.7/asyncio/base_events.py", line 568, in run_until_complete
return future.result()
File "client.py", line 241, in main
reward = get_reward(prev_state=prev_state, state=state)
File "client.py", line 77, in get_reward
xp = get_total_xp(level=unit.level, xp_needed_to_level=unit.xp_needed_to_level)
AttributeError: 'NoneType' object has no attribute 'level'
(...)
(python) action= {'actionType': 'DOTA_UNIT_ORDER_MOVE_TO_POSITION', 'moveToLocation': {'location': {'x': -2355.25537109375, 'y': -905.2532958984375, 'z': 0.0}}, 'dota_time': -16.234458923339844}
Script function 'Think' on bot npc_dota_hero_nevermore took 9.823ms
(py) worldstate @ dotatime=-15.234474182128906, gamestate=4
DotaService::step()
(python) action= {'actionType': 'DOTA_UNIT_ORDER_MOVE_TO_POSITION', 'moveToLocation': {'location': {'x': -2105.71923828125, 'y': -1095.6365966796875, 'z': 0.0}}, 'dota_time': -15.234474182128906}
Script function 'Think' on bot npc_dota_hero_nevermore took 8.761ms
(py) worldstate @ dotatime=-14.234489440917969, gamestate=4
DotaService::step()
(python) action= {'actionType': 'DOTA_UNIT_ORDER_MOVE_TO_POSITION', 'moveToLocation': {'location': {'x': -2398.65966796875, 'y': -497.1832275390625, 'z': 0.0}}, 'dota_time': -14.234489440917969}
Script function 'Think' on bot npc_dota_hero_nevermore took 8.750ms
(py) worldstate @ dotatime=-13.234504699707031, gamestate=4
/Users/tzaman/dev/dotaservice/dotaservice/dotaservice.py:243: RuntimeWarning: Unexpected end-group tag: Not all data was converted
parsed_data.ParseFromString(data)
(py) worldstate @ dotatime=0.0, gamestate=0
Hi,
I'm trying to figure out how to hold a AI vs human game. after training, it maybe need to play with human to do the evaluation.
when I start from steam, it works fine. but because our AI rely on the world state info, so I think the launch option is necessary,
dotaservice/dotaservice/dotaservice.py
Lines 202 to 203 in 5a413e3
besides, I also want to test the AI with the buildin-AI first and then self-play, but how to use the buildin-AI? when I create the buildin-AI in HOST_MODE_GUI_MENU mode, I also got the crash in dota2 client.
does anyone knows the solution? Thanks~
In the game, there are 2,207 trees (according to the internet anyways). Each tree occupies 64 x 64 units, centered at an x,y,z location and identified by an integer.
The protobuf sent by Dota2 only updates tree events when they are destroyed.
As a result, we will have to pre-seed all the trees into the game at start I think.
Thoughts?
Ex (0.3.2):
ValueError: dota_time discrepancy in depleting initial worldstate queue.
at reset (/root/dotaservice/dotaservice/dotaservice.py:439)
at request_handler (/root/.local/lib/python3.7/site-packages/grpclib/server.py:327)
I notice the error log after launching the game
it seems needs to compile both botcpp_radiant.so and botcpp_dire.so, I use the same command except the -o option parameter to compile both libraries.
g++ -shared -o botcpp_radiant.so -fPIC botcpp_radiant.cpp dota_gcmessages_common_bot_script.pb.cc -std=c++11 -lprotobuf
I also modified the code to copy .so to bots folder
dotaservice/dotaservice/dotaservice.py
Lines 159 to 160 in 172087f
but this throws many errors and terminate the game
I also test the dotaservice without copy libraries and only copy radiant libraries, although not come to above error, the game all stuck at the map loading screen(in gui mode) and my client can not receive any normal observation.
from grpclib.client import Channel
from dotaservice.protos.DotaService_grpc import DotaServiceStub
from dotaservice.protos.DotaService_pb2 import GameConfig
from dotaservice.protos.DotaService_pb2 import Actions
from dotaservice.protos.DotaService_pb2 import ObserveConfig, Status
from dotaservice.protos.DotaService_pb2 import TEAM_RADIANT, TEAM_DIRE
import asyncio
from dotaservice.protos.dota_gcmessages_common_bot_script_pb2 import CMsgBotWorldState
from dotaservice.protos.dota_shared_enums_pb2 import DOTA_GAMEMODE_1V1MID
import time
async def game_init():
await env.reset(GameConfig(ticks_per_observation=3, host_mode=1, game_mode=DOTA_GAMEMODE_1V1MID))
print("init finish")
for i in range(1000):
response = await env.observe(ObserveConfig(team_id=TEAM_RADIANT))
if response.status != Status.Value('OK'):
print("response status %s"%str(response.status))
obs = response.world_state
dota_time = obs.dota_time
print("cur time %s" %str(dota_time))
time.sleep(1)
print("finish")
return
# Connect to the DotaService.
cur_loop = asyncio.get_event_loop()
env = DotaServiceStub(Channel('127.0.0.1', 13337, loop=cur_loop))
# Get the initial observation.
cur_loop.run_until_complete(game_init())
below is the dota console log save in bots folder
01/08/2019 - 04:43:27: WARNING: CDirWatcher not implemented
01/08/2019 - 04:43:27: ERROR: HangWatchdogInternal_BeginScope() - Hang watchdog not implemented for this platform!
01/08/2019 - 04:43:27: ERROR: HangWatchdogInternal_EndScope() - Hang watchdog not implemented for this platform!
01/08/2019 - 04:43:27: [Filesystem] ---------------
01/08/2019 - 04:43:27: [Filesystem] Path ID: File Path:
01/08/2019 - 04:43:27: [Filesystem] ADDONS "/root/Steam/steamapps/common/dota 2 beta/game/dota_addons/"
01/08/2019 - 04:43:27: [Filesystem] CONTENT "/root/Steam/steamapps/common/dota 2 beta/content/dota/"
01/08/2019 - 04:43:27: [Filesystem] CONTENT "/root/Steam/steamapps/common/dota 2 beta/content/core/"
01/08/2019 - 04:43:27: [Filesystem] CONTENTADDONS "/root/Steam/steamapps/common/dota 2 beta/content/dota_addons/"
01/08/2019 - 04:43:27: [Filesystem] CONTENTROOT "/root/Steam/steamapps/common/dota 2 beta/content/"
01/08/2019 - 04:43:27: [Filesystem] DEFAULT_WRITE_PATH "/root/Steam/steamapps/common/dota 2 beta/game/dota/pak01.vpk" (vpk) /root/Steam/steamapps/common/dota 2 beta/game/dota/pak01.vpk
01/08/2019 - 04:43:27: [Filesystem] DEFAULT_WRITE_PATH "/root/Steam/steamapps/common/dota 2 beta/game/dota/"
01/08/2019 - 04:43:27: [Filesystem] EXECUTABLE_PATH "/root/Steam/steamapps/common/dota 2 beta/game/bin/linuxsteamrt64/"
01/08/2019 - 04:43:27: [Filesystem] GAME "/root/Steam/steamapps/common/dota 2 beta/game/dota/pak01.vpk" (vpk) /root/Steam/steamapps/common/dota 2 beta/game/dota/pak01.vpk
01/08/2019 - 04:43:27: [Filesystem] GAME "/root/Steam/steamapps/common/dota 2 beta/game/core/pak01.vpk" (vpk) /root/Steam/steamapps/common/dota 2 beta/game/core/pak01.vpk
01/08/2019 - 04:43:27: [Filesystem] GAME "/root/Steam/steamapps/common/dota 2 beta/game/dota/"
01/08/2019 - 04:43:27: [Filesystem] GAME "/root/Steam/steamapps/common/dota 2 beta/game/core/"
01/08/2019 - 04:43:27: [Filesystem] GAMEBIN "/root/Steam/steamapps/common/dota 2 beta/game/dota/bin/linuxsteamrt64/"
01/08/2019 - 04:43:27: [Filesystem] GAMEBIN "/root/Steam/steamapps/common/dota 2 beta/game/dota/bin/"
01/08/2019 - 04:43:27: [Filesystem] GAMEBIN "/root/Steam/steamapps/common/dota 2 beta/game/core/bin/linuxsteamrt64/"
01/08/2019 - 04:43:27: [Filesystem] GAMEBIN "/root/Steam/steamapps/common/dota 2 beta/game/core/bin/"
01/08/2019 - 04:43:27: [Filesystem] GAMEROOT "/root/Steam/steamapps/common/dota 2 beta/game/"
01/08/2019 - 04:43:27: [Filesystem] MOD "/root/Steam/steamapps/common/dota 2 beta/game/dota/pak01.vpk" (vpk) /root/Steam/steamapps/common/dota 2 beta/game/dota/pak01.vpk
01/08/2019 - 04:43:27: [Filesystem] MOD "/root/Steam/steamapps/common/dota 2 beta/game/dota/"
01/08/2019 - 04:43:27: [Filesystem] PLATFORM "/root/Steam/steamapps/common/dota 2 beta/game/core/pak01.vpk" (vpk) /root/Steam/steamapps/common/dota 2 beta/game/core/pak01.vpk
01/08/2019 - 04:43:27: [Filesystem] PLATFORM "/root/Steam/steamapps/common/dota 2 beta/game/core/"
01/08/2019 - 04:43:27: [Filesystem] SHADER_SOURCE "/root/Steam/steamapps/common/dota 2 beta/src/shaders/dota/"
01/08/2019 - 04:43:27: [Filesystem] SHADER_SOURCE "/root/Steam/steamapps/common/dota 2 beta/src/shaders/core/"
01/08/2019 - 04:43:27: [Filesystem] SHADER_SOURCE "/root/Steam/steamapps/common/dota 2 beta/src/shaders/dota_addons/"
01/08/2019 - 04:43:27: [Filesystem] SHADER_SOURCE "/root/Steam/steamapps/common/dota 2 beta/src/shaders/dota_core/"
01/08/2019 - 04:43:27: [Filesystem] SHADER_SOURCE_MOD "/root/Steam/steamapps/common/dota 2 beta/src/shaders/dota/"
01/08/2019 - 04:43:27: [Filesystem] SHADER_SOURCE_ROOT "/root/Steam/steamapps/common/dota 2 beta/src/shaders/"
01/08/2019 - 04:43:27: [CommandLine] command line arguments:
01/08/2019 - 04:43:27: [CommandLine] -botworldstatetosocket_frames 30 -botworldstatetosocket_radiant 12120 -botworldstatetosocket_dire 12121 -con_logfile scripts/vscripts/bots/console.log -con_timestamp -console -insecure -sw -noip -nowatchdog +clientport 27006 +dota_1v1_skip_strategy 1 +dota_surrender_on_disconnect 0 +host_timescale 1 +hostname dotaservice +sv_cheats 1 +sv_hibernate_when_empty 0 +tv_delay 0 +tv_enable 1 +tv_title d98ef9c6-1329-11e9-ab64-2c4d54ecfe97 +tv_autorecord 1 +tv_transmitall 1 -dedicated -fill_with_bots +map start gamemode 11 +sv_lan 1
01/08/2019 - 04:43:27: [Networking] Network System Initialized
01/08/2019 - 04:43:27: [Networking] 10.23.112.15: enp2s0
01/08/2019 - 04:43:27: [Networking] 127.0.0.1: lo
01/08/2019 - 04:43:27: Physics Console Communications is not initialized
01/08/2019 - 04:43:27: [SplitScreen] Game supporting (4) split screen players
01/08/2019 - 04:43:28: failed to dlopen libtensorflow.so error=libtensorflow.so: cannot open shared object file: No such file or directory
01/08/2019 - 04:43:28: [Networking] CEntitySystem::BuildEntityNetworking (parallel build of server) took 250.865 msecs for 859 out of 877 classes
01/08/2019 - 04:43:29: Failed to load mutations file! scripts/battlepass/ti2018/mutations.txt
01/08/2019 - 04:43:29: [ResourceSystem] Error loading resource file "soundevents/soundevents_test.vsndevts_c" (Error: ERROR_FILEOPEN)
01/08/2019 - 04:43:29: Attempted to set unknown configuration value <unknown>!
01/08/2019 - 04:43:29: name[ 0 ] changing from 'unnamed' to 'xsj.guagua'
01/08/2019 - 04:43:29: Error in user configuration file
01/08/2019 - 04:43:29: name[ 0 ] changing from 'xsj.guagua' to 'xsj.guagua'
01/08/2019 - 04:43:29: [HostStateManager] CHostStateMgr::QueueNewRequest( Idle (console), 1 )
01/08/2019 - 04:43:29: [EngineServiceManager] SwitchToLoop console requested: id [1] addons []
01/08/2019 - 04:43:29: [HostStateManager] Idle (console)
01/08/2019 - 04:43:29: [HostStateManager] CHostStateMgr::QueueNewRequest( Loading (start), 2 )
01/08/2019 - 04:43:29: [EngineServiceManager] SwitchToLoop levelload requested: id [2] addons []
01/08/2019 - 04:43:30: [Server] SV: Level loading started for 'start'
01/08/2019 - 04:43:30: [Steam] Running SteamAPI_RunCallbacks for first time
01/08/2019 - 04:43:30: [Client] CL: CLoopModeLevelLoad::MaybeSwitchToGameLoop switching to "game" loopmode with addons ()
01/08/2019 - 04:43:30: [EngineServiceManager] SwitchToLoop game requested: id [2] addons []
01/08/2019 - 04:43:30: [Server] CNetworkGameServerBase::SetServerState (ss_dead -> ss_waitingforgamesessionmanifest)
01/08/2019 - 04:43:30: [Server] SV: maxplayers set to 64
01/08/2019 - 04:43:30: [Networking] TCP/UDP Disabled.
01/08/2019 - 04:43:30: [Networking] Network socket 'server' opened on port 27015
01/08/2019 - 04:43:30: Initializing script VM...
01/08/2019 - 04:43:30: ...done
01/08/2019 - 04:43:30: [Server] SV: Executing dedicated server config file
01/08/2019 - 04:43:30: S:Gamerules: entering state 'DOTA_GAMERULES_STATE_INIT'
01/08/2019 - 04:43:30: [Server] SV: CGameRulesGameSystem::GameInit installed game rules
01/08/2019 - 04:43:30: Radiant bot scripting using script path /root/Steam/steamapps/common/dota 2 beta/game/dota/scripts/vscripts/bots
01/08/2019 - 04:43:30: LoadScript: /root/Steam/steamapps/common/dota 2 beta/game/dota/scripts/vscripts/bots/hero_selection.lua, scope name HeroSelectionScriptScope
01/08/2019 - 04:43:30: [VScript] Decode sucessful: table: 0x002330b0
01/08/2019 - 04:43:30: LoadScript: /root/Steam/steamapps/common/dota 2 beta/game/dota/scripts/vscripts/bots/team_desires.lua, scope name TeamDesiresScriptScope
01/08/2019 - 04:43:30: LoadScript: /root/Steam/steamapps/common/dota 2 beta/game/dota/scripts/vscripts/bots/team_desires.lua not found!
01/08/2019 - 04:43:30: About to load botcpp from /root/Steam/steamapps/common/dota 2 beta/game/dota/scripts/vscripts/bots/botcpp_radiant.so
01/08/2019 - 04:43:30: Could not open botcpp: /root/Steam/steamapps/common/dota 2 beta/game/dota/scripts/vscripts/bots/botcpp_radiant.so: cannot open shared object file: No such file or directory
01/08/2019 - 04:43:30: Dire bot scripting using script path /root/Steam/steamapps/common/dota 2 beta/game/dota/scripts/vscripts/bots
01/08/2019 - 04:43:30: LoadScript: /root/Steam/steamapps/common/dota 2 beta/game/dota/scripts/vscripts/bots/hero_selection.lua, scope name HeroSelectionScriptScope
01/08/2019 - 04:43:30: [VScript] Decode sucessful: table: 0x003330b0
01/08/2019 - 04:43:30: LoadScript: /root/Steam/steamapps/common/dota 2 beta/game/dota/scripts/vscripts/bots/team_desires.lua, scope name TeamDesiresScriptScope
01/08/2019 - 04:43:30: LoadScript: /root/Steam/steamapps/common/dota 2 beta/game/dota/scripts/vscripts/bots/team_desires.lua not found!
01/08/2019 - 04:43:30: About to load botcpp from /root/Steam/steamapps/common/dota 2 beta/game/dota/scripts/vscripts/bots/botcpp_dire.so
01/08/2019 - 04:43:30: Could not open botcpp: /root/Steam/steamapps/common/dota 2 beta/game/dota/scripts/vscripts/bots/botcpp_dire.so: cannot open shared object file: No such file or directory
01/08/2019 - 04:43:30: [Server] SV: Spawn Server: start
01/08/2019 - 04:43:30: [Server] CNetworkGameServerBase::SetServerState (ss_waitingforgamesessionmanifest -> ss_loading)
01/08/2019 - 04:43:30: [Server] CNetworkGameServerBase::SetServerState (ss_dead -> ss_waitingforgamesessionmanifest)
01/08/2019 - 04:43:30: [Server] SV: maxplayers set to 64
01/08/2019 - 04:43:30: [Networking] TCP/UDP Disabled.
01/08/2019 - 04:43:30: [Networking] Network socket 'hltv' opened on port 27020
01/08/2019 - 04:43:30: [HLTV Server] Starting SourceTV server listening on port 27020.
01/08/2019 - 04:43:30: [Server] CNetworkGameServerBase::SetServerState (ss_loading -> ss_active)
01/08/2019 - 04:43:30: [Server] SV: IGameSystem::LoopActivateAllSystems
01/08/2019 - 04:43:30: [Host] HO: IGameSystem::LoopActivateAllSystems
01/08/2019 - 04:43:30: Height map file (maps/start.vhcg) not found, this will make ground height traces more expensive! Recompile the map to generate a height map.
01/08/2019 - 04:43:30: [Server] SV: 64 player server started
01/08/2019 - 04:43:30: [Server] SV: WriteInitialSpawnGroups sending 1 groups
01/08/2019 - 04:43:30: [HLTV Server] Recording SourceTV replay to replays/auto-20190108-0443-start-dotaservice.dem...
01/08/2019 - 04:43:30: [HLTV Server] playdemo replays/auto-20190108-0443-start-dotaservice.dem
01/08/2019 - 04:43:30: [HostStateManager] Loading (start)
01/08/2019 - 04:43:30: S:Gamerules: entering state 'DOTA_GAMERULES_STATE_CUSTOM_GAME_SETUP'
01/08/2019 - 04:43:30: S:Gamerules: entering state 'DOTA_GAMERULES_STATE_HERO_SELECTION'
01/08/2019 - 04:43:30: SV: Started streaming map dota spawngroup 2
01/08/2019 - 04:43:30: [Server] CDOTA_PlayerResource: Adding player SteamID 90071996842377217 to slot 0 FakeClient=1 preferred slot = -1
01/08/2019 - 04:43:30: [Server] PR:SetPlayerName 0:[I:0:0] "d98ef9c6_R0 (Bot)"
01/08/2019 - 04:43:30: [Server] CDOTA_PlayerResource: Adding player SteamID 90071996842377218 to slot 1 FakeClient=1 preferred slot = -1
01/08/2019 - 04:43:30: [Server] PR:SetPlayerName 1:[I:0:0] "d98ef9c6_R1 (Bot)"
01/08/2019 - 04:43:30: [Server] CDOTA_PlayerResource: Adding player SteamID 90071996842377219 to slot 2 FakeClient=1 preferred slot = -1
01/08/2019 - 04:43:30: [Server] PR:SetPlayerName 2:[I:0:0] "d98ef9c6_R2 (Bot)"
01/08/2019 - 04:43:30: [Server] CDOTA_PlayerResource: Adding player SteamID 90071996842377220 to slot 3 FakeClient=1 preferred slot = -1
01/08/2019 - 04:43:30: [Server] PR:SetPlayerName 3:[I:0:0] "d98ef9c6_R3 (Bot)"
01/08/2019 - 04:43:30: [Server] CDOTA_PlayerResource: Adding player SteamID 90071996842377221 to slot 4 FakeClient=1 preferred slot = -1
01/08/2019 - 04:43:30: [Server] PR:SetPlayerName 4:[I:0:0] "d98ef9c6_R4 (Bot)"
01/08/2019 - 04:43:30: [Server] CDOTA_PlayerResource: Adding player SteamID 90071996842377222 to slot 5 FakeClient=1 preferred slot = -1
01/08/2019 - 04:43:30: [Server] PR:SetPlayerName 5:[I:0:0] "d98ef9c6_D0 (Bot)"
01/08/2019 - 04:43:30: [Server] CDOTA_PlayerResource: Adding player SteamID 90071996842377223 to slot 6 FakeClient=1 preferred slot = -1
01/08/2019 - 04:43:30: [Server] PR:SetPlayerName 6:[I:0:0] "d98ef9c6_D1 (Bot)"
01/08/2019 - 04:43:30: [Server] CDOTA_PlayerResource: Adding player SteamID 90071996842377224 to slot 7 FakeClient=1 preferred slot = -1
01/08/2019 - 04:43:30: [Server] PR:SetPlayerName 7:[I:0:0] "d98ef9c6_D2 (Bot)"
01/08/2019 - 04:43:30: [Server] CDOTA_PlayerResource: Adding player SteamID 90071996842377225 to slot 8 FakeClient=1 preferred slot = -1
01/08/2019 - 04:43:30: [Server] PR:SetPlayerName 8:[I:0:0] "d98ef9c6_D3 (Bot)"
01/08/2019 - 04:43:30: [Server] CDOTA_PlayerResource: Adding player SteamID 90071996842377226 to slot 9 FakeClient=1 preferred slot = -1
01/08/2019 - 04:43:30: [Server] PR:SetPlayerName 9:[I:0:0] "d98ef9c6_D4 (Bot)"
01/08/2019 - 04:43:30: [Server] PR:SetSelectedHero 0:[I:0:0] npc_dota_hero_nevermore(11)
01/08/2019 - 04:43:30: [Server] PR:SetSelectedHero 1:[I:0:0] npc_dota_hero_sniper(35)
01/08/2019 - 04:43:30: [Server] PR:SetSelectedHero 2:[I:0:0] npc_dota_hero_sniper(35)
01/08/2019 - 04:43:30: [Server] PR:SetSelectedHero 3:[I:0:0] npc_dota_hero_sniper(35)
01/08/2019 - 04:43:30: [Server] PR:SetSelectedHero 4:[I:0:0] npc_dota_hero_sniper(35)
01/08/2019 - 04:43:30: [Server] PR:SetSelectedHero 5:[I:0:0] npc_dota_hero_nevermore(11)
01/08/2019 - 04:43:30: [Server] PR:SetSelectedHero 6:[I:0:0] npc_dota_hero_sniper(35)
01/08/2019 - 04:43:30: [Server] PR:SetSelectedHero 7:[I:0:0] npc_dota_hero_sniper(35)
01/08/2019 - 04:43:30: [Server] PR:SetSelectedHero 8:[I:0:0] npc_dota_hero_sniper(35)
01/08/2019 - 04:43:30: [Server] PR:SetSelectedHero 9:[I:0:0] npc_dota_hero_sniper(35)
01/08/2019 - 04:43:30: [HLTV Server] SourceTV broadcast active.
01/08/2019 - 04:43:30: S:Gamerules: entering state 'DOTA_GAMERULES_STATE_STRATEGY_TIME'
01/08/2019 - 04:43:30: [Server] Unable to load grid nav: file not found for world prefabs/promotional_radiant_fountain
01/08/2019 - 04:43:30: [Server] Unable to load grid nav: file not found for world prefabs/promotional_dire_fountain
01/08/2019 - 04:43:31: [Server] SV: ServerSteamID=[A:1:3874839552:11736] (90122402158435328).
01/08/2019 - 04:43:31: [Server] SV: CDOTAGCServerSystem - couldn't add listener because Steam wasn't ready
01/08/2019 - 04:43:31: [SteamNetSockets] Gameserver logged on to Steam, assigned SteamID [A:1:3874839552:11736]
01/08/2019 - 04:43:31: [Server] SV: VAC secure mode disabled.
01/08/2019 - 04:43:32: [GCClient] Received server welcome from GC.
01/08/2019 - 04:43:32: [SOCache] CMsgClientWelcome subscribed: 0 up-to-date, 0 out-of-date
01/08/2019 - 04:43:32: Version out of date (GC wants 3312, we are 3311)!
01/08/2019 - 04:43:32: Version out of date (GC wants 3312, we are 3311)!
01/08/2019 - 04:44:00: S:Gamerules: entering state 'DOTA_GAMERULES_STATE_TEAM_SHOWCASE'
01/08/2019 - 04:44:12: S:Gamerules: entering state 'DOTA_GAMERULES_STATE_WAIT_FOR_MAP_TO_LOAD'
01/08/2019 - 04:44:13: S:Gamerules: entering state 'DOTA_GAMERULES_STATE_PRE_GAME'
01/08/2019 - 04:44:13: m_flPreGameStartTime set to 31.13
01/08/2019 - 04:44:13: m_flStateTransitionTime set to 121.13
01/08/2019 - 04:44:13: Height map file (maps/prefabs/promotional_radiant_fountain.vhcg) not found, this will make ground height traces more expensive! Recompile the map to generate a height map.
01/08/2019 - 04:44:13: Height map file (maps/prefabs/promotional_dire_fountain.vhcg) not found, this will make ground height traces more expensive! Recompile the map to generate a height map.
01/08/2019 - 04:44:15: [VScript] LUARDY {"step":60,"dota_time":-87.933364868164}
01/08/2019 - 04:44:15: [VScript] (lua) looking for loadfile = bots/live_config_auto
01/08/2019 - 04:44:25: [VScript] (lua) received live_config = {
calibration_dota_time = -88.233360290527
}
01/08/2019 - 04:44:25: Script function 'Think' on bot npc_dota_hero_nevermore took 10097.265ms
01/08/2019 - 04:44:25: [VScript] LUARDY {"step":60,"dota_time":-87.86669921875}
01/08/2019 - 04:44:25: [VScript] (lua) looking for loadfile = bots/live_config_auto
01/08/2019 - 04:44:25: [VScript] (lua) received live_config = {
calibration_dota_time = -88.233360290527
}
and I redirect dotaservice's log to local file, it looks like before enter the game the world state is received normally, but after enter the game it disappear and the observe function wait 10 seconds to raise a timeout error.
2019-01-08 05:53:07,031 INFO DotaService 0.3.2 serving on :13337
2019-01-08 05:53:14,207 INFO DotaService::reset()
2019-01-08 05:53:14,207 DEBUG config=
ticks_per_observation: 30
host_mode: HOST_MODE_DEDICATED
2019-01-08 05:53:14,221 DEBUG ::reset is awaiting lua config..
2019-01-08 05:53:18,036 DEBUG demo_path_rel=replays/auto-20190108-0553-start-dotaservice.dem
2019-01-08 05:53:18,808 DEBUG Received world_state: dotatime=-29.16666603088379, gamestate=3, team=2
2019-01-08 05:53:18,809 DEBUG Received world_state: dotatime=-29.16666603088379, gamestate=3, team=3
2019-01-08 05:53:19,809 DEBUG Received world_state: dotatime=-28.166667938232422, gamestate=3, team=2
2019-01-08 05:53:19,809 DEBUG Received world_state: dotatime=-28.166667938232422, gamestate=3, team=3
2019-01-08 05:53:20,809 DEBUG Received world_state: dotatime=-27.166667938232422, gamestate=3, team=2
2019-01-08 05:53:20,809 DEBUG Received world_state: dotatime=-27.166667938232422, gamestate=3, team=3
2019-01-08 05:53:21,808 DEBUG Received world_state: dotatime=-26.166669845581055, gamestate=3, team=2
2019-01-08 05:53:21,809 DEBUG Received world_state: dotatime=-26.166669845581055, gamestate=3, team=3
2019-01-08 05:53:22,808 DEBUG Received world_state: dotatime=-25.166669845581055, gamestate=3, team=2
2019-01-08 05:53:22,809 DEBUG Received world_state: dotatime=-25.166669845581055, gamestate=3, team=3
2019-01-08 05:53:23,808 DEBUG Received world_state: dotatime=-24.166671752929688, gamestate=3, team=2
2019-01-08 05:53:23,809 DEBUG Received world_state: dotatime=-24.166671752929688, gamestate=3, team=3
2019-01-08 05:53:24,808 DEBUG Received world_state: dotatime=-23.166671752929688, gamestate=3, team=2
2019-01-08 05:53:24,809 DEBUG Received world_state: dotatime=-23.166671752929688, gamestate=3, team=3
2019-01-08 05:53:25,808 DEBUG Received world_state: dotatime=-22.16666030883789, gamestate=3, team=2
2019-01-08 05:53:25,809 DEBUG Received world_state: dotatime=-22.16666030883789, gamestate=3, team=3
2019-01-08 05:53:26,808 DEBUG Received world_state: dotatime=-21.16664695739746, gamestate=3, team=2
2019-01-08 05:53:26,809 DEBUG Received world_state: dotatime=-21.16664695739746, gamestate=3, team=3
2019-01-08 05:53:27,808 DEBUG Received world_state: dotatime=-20.16663360595703, gamestate=3, team=2
2019-01-08 05:53:27,808 DEBUG Received world_state: dotatime=-20.16663360595703, gamestate=3, team=3
2019-01-08 05:53:28,808 DEBUG Received world_state: dotatime=-19.1666202545166, gamestate=3, team=2
2019-01-08 05:53:28,808 DEBUG Received world_state: dotatime=-19.1666202545166, gamestate=3, team=3
2019-01-08 05:53:29,808 DEBUG Received world_state: dotatime=-18.166606903076172, gamestate=3, team=2
2019-01-08 05:53:29,809 DEBUG Received world_state: dotatime=-18.166606903076172, gamestate=3, team=3
2019-01-08 05:53:30,808 DEBUG Received world_state: dotatime=-17.166593551635742, gamestate=3, team=2
2019-01-08 05:53:30,809 DEBUG Received world_state: dotatime=-17.166593551635742, gamestate=3, team=3
2019-01-08 05:53:31,808 DEBUG Received world_state: dotatime=-16.166580200195312, gamestate=3, team=2
2019-01-08 05:53:31,809 DEBUG Received world_state: dotatime=-16.166580200195312, gamestate=3, team=3
2019-01-08 05:53:32,808 DEBUG Received world_state: dotatime=-15.166566848754883, gamestate=3, team=2
2019-01-08 05:53:32,809 DEBUG Received world_state: dotatime=-15.166566848754883, gamestate=3, team=3
2019-01-08 05:53:33,808 DEBUG Received world_state: dotatime=-14.166580200195312, gamestate=3, team=2
2019-01-08 05:53:33,809 DEBUG Received world_state: dotatime=-14.166580200195312, gamestate=3, team=3
2019-01-08 05:53:34,808 DEBUG Received world_state: dotatime=-13.166595458984375, gamestate=3, team=2
2019-01-08 05:53:34,809 DEBUG Received world_state: dotatime=-13.166595458984375, gamestate=3, team=3
2019-01-08 05:53:35,808 DEBUG Received world_state: dotatime=-12.166610717773438, gamestate=3, team=2
2019-01-08 05:53:35,809 DEBUG Received world_state: dotatime=-12.166610717773438, gamestate=3, team=3
2019-01-08 05:53:36,808 DEBUG Received world_state: dotatime=-11.1666259765625, gamestate=3, team=2
2019-01-08 05:53:36,808 DEBUG Received world_state: dotatime=-11.1666259765625, gamestate=3, team=3
2019-01-08 05:53:37,808 DEBUG Received world_state: dotatime=-10.166641235351562, gamestate=3, team=2
2019-01-08 05:53:37,809 DEBUG Received world_state: dotatime=-10.166641235351562, gamestate=3, team=3
2019-01-08 05:53:38,808 DEBUG Received world_state: dotatime=-9.166656494140625, gamestate=3, team=2
2019-01-08 05:53:38,808 DEBUG Received world_state: dotatime=-9.166656494140625, gamestate=3, team=3
2019-01-08 05:53:39,808 DEBUG Received world_state: dotatime=-8.166671752929688, gamestate=3, team=2
2019-01-08 05:53:39,809 DEBUG Received world_state: dotatime=-8.166671752929688, gamestate=3, team=3
2019-01-08 05:53:40,808 DEBUG Received world_state: dotatime=-7.16668701171875, gamestate=3, team=2
2019-01-08 05:53:40,808 DEBUG Received world_state: dotatime=-7.16668701171875, gamestate=3, team=3
2019-01-08 05:53:41,808 DEBUG Received world_state: dotatime=-6.1667022705078125, gamestate=3, team=2
2019-01-08 05:53:41,809 DEBUG Received world_state: dotatime=-6.1667022705078125, gamestate=3, team=3
2019-01-08 05:53:42,808 DEBUG Received world_state: dotatime=-5.166717529296875, gamestate=3, team=2
2019-01-08 05:53:42,809 DEBUG Received world_state: dotatime=-5.166717529296875, gamestate=3, team=3
2019-01-08 05:53:43,808 DEBUG Received world_state: dotatime=-4.1667327880859375, gamestate=3, team=2
2019-01-08 05:53:43,808 DEBUG Received world_state: dotatime=-4.1667327880859375, gamestate=3, team=3
2019-01-08 05:53:44,808 DEBUG Received world_state: dotatime=-3.166748046875, gamestate=3, team=2
2019-01-08 05:53:44,808 DEBUG Received world_state: dotatime=-3.166748046875, gamestate=3, team=3
2019-01-08 05:53:45,808 DEBUG Received world_state: dotatime=-2.1667633056640625, gamestate=3, team=2
2019-01-08 05:53:45,808 DEBUG Received world_state: dotatime=-2.1667633056640625, gamestate=3, team=3
2019-01-08 05:53:46,808 DEBUG Received world_state: dotatime=-1.166778564453125, gamestate=3, team=2
2019-01-08 05:53:46,808 DEBUG Received world_state: dotatime=-1.166778564453125, gamestate=3, team=3
2019-01-08 05:53:47,808 DEBUG Received world_state: dotatime=-0.1667938232421875, gamestate=3, team=2
2019-01-08 05:53:47,808 DEBUG Received world_state: dotatime=-0.1667938232421875, gamestate=3, team=3
2019-01-08 05:53:48,808 DEBUG Received world_state: dotatime=-12.10013198852539, gamestate=8, team=2
2019-01-08 05:53:48,808 DEBUG Received world_state: dotatime=-12.10013198852539, gamestate=8, team=3
2019-01-08 05:53:49,808 DEBUG Received world_state: dotatime=-12.10013198852539, gamestate=8, team=2
2019-01-08 05:53:49,808 DEBUG Received world_state: dotatime=-12.10013198852539, gamestate=8, team=3
2019-01-08 05:53:50,808 DEBUG Received world_state: dotatime=-12.10013198852539, gamestate=8, team=2
2019-01-08 05:53:50,808 DEBUG Received world_state: dotatime=-12.10013198852539, gamestate=8, team=3
2019-01-08 05:53:51,808 DEBUG Received world_state: dotatime=-12.10013198852539, gamestate=8, team=2
2019-01-08 05:53:51,809 DEBUG Received world_state: dotatime=-12.10013198852539, gamestate=8, team=3
2019-01-08 05:53:52,808 DEBUG Received world_state: dotatime=-12.10013198852539, gamestate=8, team=2
2019-01-08 05:53:52,809 DEBUG Received world_state: dotatime=-12.10013198852539, gamestate=8, team=3
2019-01-08 05:53:53,808 DEBUG Received world_state: dotatime=-12.10013198852539, gamestate=8, team=2
2019-01-08 05:53:53,808 DEBUG Received world_state: dotatime=-12.10013198852539, gamestate=8, team=3
2019-01-08 05:53:54,808 DEBUG Received world_state: dotatime=-12.10013198852539, gamestate=8, team=2
2019-01-08 05:53:54,809 DEBUG Received world_state: dotatime=-12.10013198852539, gamestate=8, team=3
2019-01-08 05:53:55,808 DEBUG Received world_state: dotatime=-12.10013198852539, gamestate=8, team=2
2019-01-08 05:53:55,809 DEBUG Received world_state: dotatime=-12.10013198852539, gamestate=8, team=3
2019-01-08 05:53:56,808 DEBUG Received world_state: dotatime=-12.10013198852539, gamestate=8, team=2
2019-01-08 05:53:56,809 DEBUG Received world_state: dotatime=-12.10013198852539, gamestate=8, team=3
2019-01-08 05:53:57,808 DEBUG Received world_state: dotatime=-12.10013198852539, gamestate=8, team=2
2019-01-08 05:53:57,809 DEBUG Received world_state: dotatime=-12.10013198852539, gamestate=8, team=3
2019-01-08 05:53:58,808 DEBUG Received world_state: dotatime=-12.10013198852539, gamestate=8, team=2
2019-01-08 05:53:58,808 DEBUG Received world_state: dotatime=-12.10013198852539, gamestate=8, team=3
2019-01-08 05:53:59,808 DEBUG Received world_state: dotatime=-12.10013198852539, gamestate=8, team=2
2019-01-08 05:53:59,809 DEBUG Received world_state: dotatime=-12.10013198852539, gamestate=8, team=3
2019-01-08 05:54:00,990 DEBUG Received world_state: dotatime=-89.23334503173828, gamestate=4, team=2
2019-01-08 05:54:00,993 DEBUG Received world_state: dotatime=-89.23334503173828, gamestate=4, team=3
2019-01-08 05:54:01,989 DEBUG Received world_state: dotatime=-88.23336029052734, gamestate=4, team=2
2019-01-08 05:54:01,992 DEBUG Received world_state: dotatime=-88.23336029052734, gamestate=4, team=3
2019-01-08 05:54:02,273 DEBUG lua_config={'step': 60, 'dota_time': -87.966697692871}
2019-01-08 05:54:02,273 DEBUG ::reset: lua config received={'step': 60, 'dota_time': -87.966697692871}
2019-01-08 05:54:12,282 DEBUG Writing live_config={'calibration_dota_time': -88.23336029052734}
2019-01-08 05:54:12,288 DEBUG DotaService::observe()
2019-01-08 05:54:12,921 DEBUG Received world_state: dotatime=-87.2333755493164, gamestate=4, team=2
2019-01-08 05:54:13,927 DEBUG DotaService::observe()
2019-01-08 05:54:24,936 DEBUG DotaService::observe()
2019-01-08 05:54:35,949 DEBUG DotaService::observe()
2019-01-08 05:54:46,961 DEBUG DotaService::observe()
2019-01-08 05:54:57,972 DEBUG DotaService::observe()
2019-01-08 05:55:08,985 DEBUG DotaService::observe()
2019-01-08 05:55:19,996 DEBUG DotaService::observe()
2019-01-08 05:55:31,008 DEBUG DotaService::observe()
2019-01-08 05:55:42,021 DEBUG DotaService::observe()
2019-01-08 05:55:53,030 DEBUG DotaService::observe()
2019-01-08 05:56:04,034 DEBUG DotaService::observe()
2019-01-08 05:56:15,047 DEBUG DotaService::observe()
2019-01-08 05:56:26,057 DEBUG DotaService::observe()
2019-01-08 05:56:37,068 DEBUG DotaService::observe()
2019-01-08 05:56:48,080 DEBUG DotaService::observe()
2019-01-08 05:56:59,093 DEBUG DotaService::observe()
any suggestions?
I'm curious about what type of action need some delay before executing this action?
dotaservice/dotaservice/lua/bot_generic.lua
Lines 70 to 78 in 6e91ff1
This Issue/Post is mostly for tracking things tried. Below compiles and doesn't crash, but doesn't take an action.
What I put in my Act()
CMsgBotWorldState_Action_MoveToLocation * mtl_pb;
CMsgBotWorldState_Vector * loc_pb;
extern "C" void Act(int team_id, CMsgBotWorldState_Actions * actions_pb) {
// Act seems to be called practically _exactly_ after Observe is called.
// Since it is called once per team, all team-decisions need to be made here. That means
// that we need to communicate all actions. Probably that means we need to return the actions
// protobuf somehow. I think returning the protobuffer itself, from this function makes
// the most sense.
// This call is fully blocking the entire game, so possible they are indeed waiting for a
// synchronous return.
cout << "Act\t" << (void*)actions_pb << endl;
//if (game_state == 4 or game_state == 5) {
if (actions_pb) {
//CMsgBotWorldState_Actions * actions_pb = new CMsgBotWorldState_Actions();
actions_pb = new CMsgBotWorldState_Actions();
mtl_pb = new CMsgBotWorldState_Action_MoveToLocation();
loc_pb = new CMsgBotWorldState_Vector();
loc_pb->set_x(0.0);
loc_pb->set_y(0.0);
loc_pb->set_z(0.0);
mtl_pb->set_allocated_location(loc_pb);
mtl_pb->add_units(test_id);
actions_pb->set_dota_time(dtime + 0.1);
actions_pb->set_extradata("EXTRA");
CMsgBotWorldState_Action * action_pb = actions_pb->add_actions();
action_pb->set_actiontype(CMsgBotWorldState_Action_Type_DOTA_UNIT_ORDER_MOVE_TO_POSITION);
action_pb->set_player(4);
action_pb->set_actionid(0);
action_pb->set_allocated_movetolocation(mtl_pb);
CMsgBotWorldState_Actions_OceanAnnotation * oa_pb = new CMsgBotWorldState_Actions_OceanAnnotation();
CMsgBotWorldState_Actions_OceanAnnotation_Hero * hero_pb = new CMsgBotWorldState_Actions_OceanAnnotation_Hero();
hero_pb->set_playerid(4);
oa_pb->add_heroes();
actions_pb->set_allocated_oceanannotation(oa_pb);
std::string s;
google::protobuf::TextFormat::PrintToString(*actions_pb, &s);
cout << "Our Message:\n" << s << endl;
}
return;
}
What I see in dotaservice:
dota_time: 43.8411026
actions {
actionType: DOTA_UNIT_ORDER_MOVE_TO_POSITION
player: 4
actionID: 0
moveToLocation {
units: 5
location {
x: 0
y: 0
z: 0
}
}
}
extraData: "EXTRA"
oceanAnnotation {
heroes {
}
}
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.