ZeroK-RTS / Zero-K-Infrastructure

Website, lobby launcher and server, steam deployment, .NET based tools and other vital parts of Zero-K infrastructure
GNU General Public License v3.0
53 stars 52 forks source link

Consider per-player bans for MM maps #1552

Open GoogleFrog opened 7 years ago

GoogleFrog commented 7 years ago

Many players dislike particular maps. We could allow players to each nominate a few maps to ban a few maps (this is a feature common in other games). I'd try letting players ban two maps. This request is a bit pie-in-the-sky but would generate good data.

Banned maps would be removed from the 1v1 map pool when deciding what to play for a 1v1. For larger games you can't remove all the maps because you might end up with none, or a very limited set. Here is a rule I propose:

ZKLS would tell chobby each players ban list upon joining. Players could send a ban list to ZKLS, possibly get a response (not sure if required).

DeinFreund commented 7 years ago

In the long run this would also help us choose maps for the pool.

Licho1 commented 7 years ago

I think i would rather make some more generic and useful solution. Like rating match on the debriefing, and players and map .. and then reuse these data..

DeinFreund commented 7 years ago

That's better for choosing what maps to unfeature, but I'd still go for this feature. It's not uncommon for other games to allow map choosing/banning in MM. Players being able to play on maps they like can only improve their experience. If this leads to monoculture we should improve our map pool.

Anarchid commented 7 years ago

Rating map can be collapsed into like/dislike, with dislikes used to weight map selection for the player. Map's global "karma" could also be used as a weight factor.

If a player dislikes the maps sparingly, then the weighting should more or less match the ban list behaviour in the OP (but perhaps with some opportunity for opponent/teammate/global karma to override it if their like/dislike is more intense).

Having just one disliked map is hating it with 100% intensity.

sprunk commented 6 years ago

IMO protocol:

public class QueueBanList {
    public AutohostMode QueueType; // 1v1, teams etc
    public List<string> Maps; // names
}

[Message(Origin.Client)]
public class MatchMakerBanList {
    public List<QueueBanList> QueueBans;
}

[Message(Origin.Server)]
public class MatchMakerBanListResponse {
    public enum {
       OK = 0,
       NoSuchMapInThisQueue, // either because map does not exist at all, or eg trying to ban chicken nuggets from 1v1
       NoSuchQueue,
       TooManyMapsSpecified, // see below for how clients learn the max
    } Status;
}

And add to Welcome:

public List<QueueBanList> MyMapBans;
public Map<AutohostMode, unsigned> MaxQueueBans; // so client knows how many he can ban