ModDota/BugTracker

2020 Custom games bugs list

Opened this issue · 14 comments

Big things

  • GameRules:SetSafeToLeave(safeToLeave: bool), does not work for games which have leaver penalties enabled. Custom Hero Chaos and Clash could of enabled leaver penalty to deal with the bots, but currently its impossible to make the game safe to leave, so when a player loses first, they either stick around and watch the game or leave and cop the penalty ban. If game makers could get the game safe to leave, we could allow players to leave when appropriate.
    Proposed solution: Make it so SetSafeToLeave works like in the original game, allowing players to leave from the games with penalties enabled without those penalties applied

  • If players form a party of 5, they can enter games which only allow 4 or lower max players anyway. Proposed solution: Disallow entering games more players than intended.

  • Custom game version is sometimes cached/not checked (?) when hosting/entering a lobby, leading to situations when after uploading a new version of custom game people in lobby can't start a game cause of different versions between some players, host and server. Proposed solution: Somehow force a version check/invalidate cache when hosting/entering a lobby?

  • Combination of lobby auto start and long loading times. When a player fails to load into a custom game (it simply takes their PC too long) and the loading screen takes too long the offending player is not removed from the lobby. If that lobby is full then the game will bring up the Accept game dialog again right away to the same players, often causing the same timeout issue, that can often repeat multiple times. Proposed solution: When timing out of the loading screen, remove players who have not loaded yet from the lobby.

Small things

  • All images with DXT5 compression look like this in the asset browser
    image

  • Model change modifier cancelling other model changes. Steps to reproduce: go into Demo hero as Lone Druid. Use True Form. Type "-createhero lone_druid". The first LD will change his model back to the original one, while still maintaining True Form. This behavior can be reproduced with most model changing heroes as well as custom Lua Modifiers.

  • A more precise timer (akin to performance.now() in browser) in panorama for rudimentary timing profiling.

  • ModifyGold no longer actually gives reliable gold even if the bReliable flag is set to true. Instead, gold is always given as unreliable gold.

  • Panorama: Entities.GetHealthThinkRegen() returns a rounded integer value, even though the value should be a float. The corresponding function for mana regen works as expected.

  • Panorama: There is no API for checking if an item is disabled because it recently was in a player's backpack, or how long until it's re-enabled.

  • SetLevel() on items doesn't work as expected, but will always show as level 1 (even though GetLevel() returns the expected value afterwards). Instead, only setting the item's base level in KV does anything at all (which is hugely impractical if you want to have items with many levels).

  • Innate melee hero block cannot be disabled or altered.

Expose to lua or add API for interacting with ability charges
Suggested functions are:

  • :SetChargable(bool value);
  • :SetCurrentCharges(int value);
  • :SetMaxCharges(int value);
  • :SetMaxChargeCooldown(int value);
  • :SetCurrentChargeCooldown(int value);
  • :GetCurrentCharges();
  • :GetMaxChargeCooldown();
  • :GetCurrentChargeCooldown();
  • :IsChargable();

Minor
bInformClient of lua modifier's :SetDuration(float flDuration, bool bInformClient) doesn't actually update modifiers HUD on clients, duration "Round Progress Bars" don't change at all

  • Allow a lobby host to ban a person/people from entering their lobby for a period of time.

Minor suggestion:

  • Add capability to scale a point_simple_obstruction to affect more than a 2x2 grid nav square space (preferably, allow non-uniform scaling) OR provide another toggle-able entity or function that allows dynamic blocking of navigation.
  • Panorama is missing GetStrength, GetAgility and GetIntellect. It already have been asked for previously, but since then that API was added to client-side Lua, so clients should already have these values
  • The existence of GameEvents.SendCustomGameEventToClient and GameEvents.SendCustomGameEventToAllClients API on the the client makes most of custom games vulnerable to event forging. A player could send an event to the other player, and the the other player has no way to know if the event actually came from server or from a malicious player.
  • DOTAScriptInventorySlot_t is outdated. Currently it's just missing names for slots 15 (tp scroll) and 16 (neutral item), but it actually appears to have no binding with the internal enum, because previously it's also been getting out of sync with actual values (i.e. DOTA_STASH_SLOT_1 actually pointed at 4th backpack slot, and all further stash slots were shifted).
  • Using any internationalization-related JS API is crashing the game, for example new Date().toLocaleDateString()
  • Errors in Panorama don't have stack traces shown in the console, even though they are actually collected, since the partial support can be enabled by this little hack: Error.prototype.toString = function() { return this.stack }

Fix the spectate button so that I can spectate a random custom game in progress, good for new players to preview games.
image

Lua API GetSoundDuration(soundname, actormodel) doesn't return a correct value, it always returns 2.0.

Add the amount of players in the lobby to this screen:

image

So that players can know before accepting if a lobby filled up with all players properly, or if the host started the game prematurely with less players than is ideal for the game in question. Especially relevant since there is now a time penalty associated with declining this prompt.

Also on the above: if the host starts the game prematurely (i.e. before the lobby is full), penalties for not accepting the above prompt should not trigger. Said penalties should only be applied when the game became ready as a result of the lobby filling up naturally and auto-starting.

The updating process for custom games is really buggy if an update was pushed to them recently (in the last ~10-15min). This is a pain for all players when an update happens, but is especially painful for developers trying to playtest their updates, since the whole process can take 15-20 minutes and a lot of trial and error sometimes.

  1. When a custom game has been recently updated, trying to play a match of it should result in downloading the relevant update. Often, this simply doesn't happen, and players become unable to enter lobbies, receiving the "custom game archives don't match" message.

  2. In the situation above, attempting to uninstall and reinstall the custom game to force an update, more often than not, does nothing. It takes several minutes for the update to "register" - players know that has happened when they get a download bar after trying the uninstall/reinstall procedure.

  3. Players often resort to uninstalling a custom game, closing dota, relaunching it, and then reinstalling the custom game. This method has a high rate of success in "forcing" the update to be detected, but is still not 100% reliable.

  4. Sometimes, players can join a lobby with different versions of the same custom game. In that situation, if the host has not updated their game, they are unable to start it (it never goes beyond the 'finding server' phase, simply returning to the lobby phase silently). If a player has not updated, the game will load, the player in question will fail to load, and all players will be kicked back to the lobby phase.

In the above scenario, even worse, all players get a 5 minute (or more) custom game penalty time.

Suggestion: add a custom game version number or hash to easily identify which version is currently installed on a player's machine.

Add ability to add spectator slots in custom lobbies (allows for casting custom games on regular mod with no delay instead of having to create an entirely new mod for this purpose alone).

Create a new option within the "PRIVATE" mod options that allows us to add/remove access to a mod (for alpha testing purposes). This must not require us to have these users on friends list as it is just not feasible if the alpha team is large.

I've marked suggestions as off-topic