Page 39 of 43 FirstFirst ... 29 37 38 39 40 41 ... LastLast
Results 381 to 390 of 429

Thread: API Requests

  1. #381
    Basic Member
    Join Date
    Mar 2012
    Posts
    1,863
    Also, while playing around with the jungling code and thought about how to code the Roshan attack (and how these functions might help ) I thought some might appreciate a little more control over the Aegis, by making UpdateRoshanDesire() return a table of the desire and a unit handle (similar to roaming). The unit handle would be the Aegis carrier, which could be read by a global GetAegisCarrier() (that would return the unit that is supposed to carry the Aegis, similar to roaming). Since I am doing a full takeover since it gives me more control, I am not sure how people using modes decide who should pickup the Aegis now (mainly, I don't know if the Roshan mode ends once he is dead or once the Aegis is picked up), so I don't know if this would help more or not, so it's open for discussion
    I plan to do a team wide carrier desire (based on role and then inventory space).
    Explanations on the normal, high and very high brackets in replays: here, here & here
    Why maphacks won't work in D2: here

  2. #382
    I would like one of

    a) a GetUnitToLocationDistance() that returns path-distance, not raw distance.
    b) GetNearbyTrees(vLocation, nRadius)

    Im trying to avoid hardcoding locations to stack/pull from. so the bots can approach/attempt from any starting angle/position and it looks natural
    my issue is they can just wait the wrong side of the trees

    b) would solve it by letting me work out the 'average tree position' surrounding the camp. The camp opening side is roughly the 'inverse' of this position with respect to neutral spawn location
    https://github.com/ThePianoDentist/t...dentistdotabot Lina bot which pulls small camp when 'laning' (Aim to work on pulling and stacking bots initially)
    https://github.com/ThePianoDentist/dotabots-ml-tools Parsing data from bot games

  3. #383
    Hi, I'm new and I would really like to try your API, it would be a pleasure, thank you.

  4. #384

    API REQUEST

    Hi, I'm new and I would really like to try your API, it would be a pleasure, thank you.

  5. #385
    Basic Member
    Join Date
    Mar 2012
    Posts
    1,863
    Please give us the possibility to manage our own avoidance zones. Maybe AddCustomAvoidanceZone(), DeleteCustomAvoidanceZone() and GetCustomAvoidanceZones(). The signature would be: AddCustomAvoidanceZone(zone_name, zone_info), where zone_name would be a string representing a custom name that we can use to identify the zone in the list of tables and zone_info would be a table containing the info. What the table contains should not matter since it should just be a regular table (meaning each dev can add their own info), as long as the table list provided by GetCustomAvoidanceZones() will contain the zone_info structure, which includes zone_name. AddCustomAvoidanceZone() would just add tables to an internal table similar to how other Get* functions do.

    As an example:
    Code:
    -- example to add a danger zone because of enemy wards UNTIL we get a sentry or Zeus helps to deward
    AddCustomAvoidanceZone("enemy_ward_rune_bot", {["location"] = GetHeroLastSeenInfo(enemySupportPlayerID).location, ["info"] = "enemy_ward"} );
    
    -- another example where we know the enemy is farming our jungle
    AddCustomAvoidanceZone("enemy_stealing_our_creeps", {["location"] = GetHeroLastSeenInfo(enemyID).location, ["camp"] = "small"} ); -- so the tables don't necessarily need to be similar
    
    -- check that zone
    local zones = GetCustomAvoidanceZones();
    
    for name, zone in pairs(zones) do
         if (name == "enemy_ward_rune_bot") then
             supportBot.Deward(zone.location);
         end
    end
    
    -- and after the support dewards
        DeleteCustomAvoidanceZone("enemy_ward_rune_bot");
    end
    Something along those lines. If it's harder to use a strings as table keys, maybe use normal indexes and just add the zone name in the zone info table.
    Last edited by The Nomad; 08-05-2017 at 09:47 AM.
    Explanations on the normal, high and very high brackets in replays: here, here & here
    Why maphacks won't work in D2: here

  6. #386
    Basic Member
    Join Date
    Aug 2017
    Posts
    2
    We very interested in building a bot specialized for Ability Draft. But there are a few cirtial methods missing from the API before that can happen.
    1. We need a method to draft an ability.
    2. We need to query the time until the bots next pick.
    3. We need to query which heroes or abilities are in the pool.

  7. #387
    Basic Member
    Join Date
    Mar 2012
    Posts
    1,863
    Quote Originally Posted by Webstar View Post
    We very interested in building a bot specialized for Ability Draft. But there are a few cirtial methods missing from the API before that can happen.
    1. We need a method to draft an ability.
    2. We need to query the time until the bots next pick.
    3. We need to query which heroes or abilities are in the pool.
    That as well as adding support for 1v1
    The available bot query would be useful for CM as well.
    And a function IsHeroPicked(szHeroName()) : int (or a better name ) to check who picked a hero and if it is picked (in any game mode, even CM since IsCMPickedHero() has another purpose) that takes the internal hero unit name as parameter and returns the player id (which is the player that picked it) or -1 (if nobody picked it) sort of the opposite of GetSelectedHeroName()

    Some more global event handlers (per-team, with -1 as player id, or with the player id as input, similar to other handlers) might help:
    - UnitReachedDestination() callback which should have the bot, the target location as param and the distance from the target location to the reached one (native will always be faster ) in case the intended one as target is not passable, the actual reached destination would be different; should work for attack-move and move-to-loc actions
    - UnitLevelUp() callback which should have 1 parameter: the bot that leveled up
    - BuildingTakeDamage() similar to the heroes event, but for buildings; not sure if merging them is better

    If it isn't too much trouble unit-scoped: GetMaxMovementSpeed() which should return the maximum speed the unit is capable of (considering abilities and items). This should not be 522, but, for example, if the unit is slowed (hex, purges or any other type of movement debuffs), then the current movement speed would be somewhere along the lines of 200, while the max speed would be 330 for example, because the unit has boots (sort of like what is the speed this unit is capable of, at the moment considering any buffs or items).
    Last edited by The Nomad; 08-16-2017 at 04:28 AM.
    Explanations on the normal, high and very high brackets in replays: here, here & here
    Why maphacks won't work in D2: here

  8. #388
    Basic Member
    Join Date
    Dec 2016
    Posts
    177
    it will be good if bot player can access nearby creeps from a specific creep. sth like this:
    Code:
    local creeps = GetBot():GetNearbyCreeps/LaneCreeps or ...;
    
    local nearest = creeps[1]:GetNearbyLaneCreeps( 1600 , false );
    this will be useful to manage abilities that has a chance of being aura like abilities of ogremagi.
    currently, this is impossible because GetNearby*** functions are nil for non-hero units

  9. #389
    Basic Member
    Join Date
    Sep 2017
    Posts
    56
    Thanks a ton for developing and maintaining the bot API! It offers a lot of options compared to most other moddable games.

    So, requests:
    It'd be great if the lua require() function could be fixed so that it doesn't crash the dota client when it can't parse the file. When this happens it always takes a while before everything is restarted and the issue is found (no error messages make this one a pain to debug)


    A couple of useful missing getters I found are:
    GetMissileSpeed() - Edit: Seems this one is already implemented as GetAttackProjectileSpeed(), it's not mentioned on https://developer.valvesoftware.com/..._Bot_Scripting
    GetBaseTurnRate()
    GetCurrentTurnRate()
    GetMissileSpawnPoint() -- The distance from the unit where its missiles appear
    Some of these can be hardcoded with known data, but it's a pain and is annoying to maintain. For the missile spawn point I couldn't find any data at all but it seems to differ by quite a lot. Especially missile speed is very useful as it'd give among other things a quick and easy way to see which units are ranged.

    It'd also be great to have something like:
    IsLocationFree(loc,radius)
    unit:CanStandOn(loc)
    We can check for passability of terrain, but there doesn't seem to be a way of detecting whether a unit can stand somewhere after taking unit collision into account. At least not one without iterating through all units with its massive performance hit.

    item:GetComponents() -- Edit: turns out it's already in but undocumented

    Some easier way of identifying where GeneratePath's callback came from if you're calling multiple. Because of its async nature it's a huge pain to match it to its calling player. If GetBot() could work inside of the callback, or if we could send some kind of id along with GeneratePath() that appears in the callback it'd be a lot easier.


    One addition to the console would be a massive help but I imagine it'd be technically hard, and that is to be able to go back in time in an ongoing bots vs bots match. If we spot a bot making a mistake, we could keep replaying the same section while reloading the bot scripts until the bot gets it right. Good debugging tools can speed up the process by a lot. Even just the ability to place savepoints would be a massive help.



    Edit:
    For courier management, we need a swap items between a hero and the courier to be able to get rid of old junk items. Dropping items so the courier can pick them up would be a possible alternative, but besides it being a bad idea, it seems couriers won't pick up items (and Action_MoveDirectly on couriers crashes the client)
    An item:GetOwner() function is important too since items on the courier can be anyone's
    Last edited by Siesta Guru; 09-23-2017 at 11:53 PM.

  10. #390
    Basic Member
    Join Date
    Oct 2016
    Posts
    219
    the rewinding would be such a great help, but i think would take them 3 months to write the feature in.

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •