MrBonki

Enduring confontration and maps

Okay, so i was sitting with a british lineup, wanted to play some ruhr in enduring confontration. I get sicily. I then flew for 30 minutes died a couple of times got a couple of kills. Decide to leave. Try to find a ruhr game again. But i was put into the same sicily game? This is really annoying. And it would be nice if you could choose the map that you wanted to play on.

 

Anyone else have the same trouble?

medal

Share this post


Link to post
Share on other sites
Yeah, for a while I could only find Ruhr while playing with an American lineup. Then I started using Germans and only ever find Sicily or Stalingrad to give the Russians an easy target. I now often switch between the nations and still I'm only finding Sicily even with America. I wonder if it's on a rotation now. Sicily was a nice change of pace from Ruhr for a while and it was fun to use Italian planes on the map, but it's kinda overstayed it's welcome and gotten boring.

Share this post


Link to post
Share on other sites

It was quite "amusing" when I quit a Stalingrad T4 EC with germans, since I do not like to be practice target for Yak3Ps and it joined me there everytime I joined the Q. Because quiting a match 17 times even before spawning is not expressive enough.

Share this post


Link to post
Share on other sites

Makes sense if you leave the match, you free a spot and if noone has taken it yet, you will be returned there.

When there are none left, you are probably going to enter a battle on a different server. When all is full, a new battle is created.

 

To be able to play on a different map, pick another nation or tier.

Share this post


Link to post
Share on other sites
This is why I like HEC way more - you know what matchup you're joining. I hate the randomness of the matchmaker deciding where I go. Lately I've been in the mood to fight USSR as Germans, but I keep getting games vs. USA/Brits. I mean I enjoy that matchup too, but I like a change of pace here and there. It'd be nice to be able to choose.

Or, even better, get HEC back. Edited by *GateNomes
  • Upvote 4
medal medal

Share this post


Link to post
Share on other sites

I hate the randomness of the matchmaker deciding where I go. Lately I've been in the mood to fight USSR as Germans, but I keep getting games vs. USA/Brits. I mean I enjoy that matchup too, but I like a change of pace here and there. It'd be nice to be able to choose.


This statement is why in "Preperation for Landing at Hokkaido" is so often in non-EC modes that not even "Taking back of Guam" (or whatever it was called) has been seen for over a year.
medal medal medal

Share this post


Link to post
Share on other sites

Makes sense if you leave the match, you free a spot and if noone has taken it yet, you will be returned there.

When there are none left, you are probably going to enter a battle on a different server. When all is full, a new battle is created.

 

To be able to play on a different map, pick another nation or tier.

 

It would make sense if we were in 2004, but we are in 2016 where corporations like Google or Facebook can make your complete psychological profile just by your behavior on the internet, we have self driving cars, we have incredible AI.

 

Hell, as a computer engineering student I was able to come up with a solution for this after 5 minutes! It is solution for this exact problem, better solution would be adding prefered maps or nations instead of sending disliked maps. But that would require changes in the design of the matchmaker. Here is the code: http://pastebin.com/6sDakp6Q

/* not an actual program, just an idea I had */
 
#define QUIT_TIME 300   /* seconds after join */
#define MAX_LEAVES  /* maximum count of leaves allowed */
 
class user{
public:
    std::string userName;
    uint32_t userID;    /* 2^32 values for users is enough,
                           we do not expect half of the population to play this game */
    uint16_t mapID;     /* 65536 values to identify map is enough */
    uint16_t lastMapID;
    uint8_t leaveCount;     /* 256 values to keep track of leaves is enough */
    uint64_t joinTime;      /* same time as linux epoch */
    uint64_t leaveTime;
    ...             /* more variables for user */
};
 
 
/**
 * @brief check if user quits before certain time
 * @param pointer to user
 * @return true if user quits before QUIT_TIME
 */
bool quitAfterJoin(user *usr){
    /* if user leaves in first 5 minutes after join, time can be changed */
    if(abs(user->joinTime - user->leaveTime) < QUIT_TIME){
        /* set last map ID and return flag that user quit before certain time */
        usr->lastMapID = map.ID;
        if(usr->lastMapID == usr->mapID){
            usr->leaveCount++;
            return true;
        }
    }
    return false;
}
 
/**
 * @brief function called after user joins in the game
 * @param pointer to user
 * @return true if join is successful
 */
bool join(user *usr){
    usr->mapID = map.ID;
    ... /* etc. */
}
 
/**
* @brief overloaded function to join with preferences
* @param mapID mapID which user does not want to join
* @return true if joining was successful
*/
bool tryToJoin(uint16_t mapID){
    /* exclude map from list of possible maps */ 
    excludeMap(mapID);

    /* other operations before joining */
    ...
}

/**
* @brief default function to join without preferences
* @param mapID mapID which user does not want to join
* @return true if joining was successful
*/
bool tryToJoin(){
    /* normal joining procedure */
    ...
}

/**
 * @brief user joins Q
 * @param pointer to user
 * @return true if queueing up is successful
 */
bool queueUp(user *usr){   
    ...     /* some preparations */
    /* if user quits game before certain time, we can be sure he does not want to play
       in that game, therefore we will NOT match him in that game
    */
    try{
        if(usr->leaveCount > MAX_LEAVES){
            /* try to join excluding this certain map */
            tryToJoin(usr->lastMapID); 
        } else {
            tryToJoin();
        }  
    }
    catch{
        /* procedure that is called when Q failed */
        abortQueue();
        return false;
    }
    return true;
}

Regarding different nations, I am tired of Queueing Simulator(US/Brittish) and I do not play UFOs (Russians). Japanese do not appeal to me.

Edited by D3athCZE
  • Upvote 4

Share this post


Link to post
Share on other sites

It would make sense if we were in 2004, but we are in 2016 where corporations like Google or Facebook can make your complete psychological profile just by your behavior on the internet, we have self driving cars, we have incredible AI.

 

Hell, as a computer engineering student I was able to come up with a solution for this after 5 minutes! It is solution for this exact problem, better solution would be adding prefered maps or nations instead of sending disliked maps. But that would require changes in the design of the matchmaker. Here is the code: http://pastebin.com/6sDakp6Q

/* not an actual program, just an idea I had */
 
#define QUIT_TIME 300   /* seconds after join */
#define MAX_LEAVES  /* maximum count of leaves allowed */
 
class user{
public:
    std::string userName;
    uint32_t userID;    /* 2^32 values for users is enough,
                           we do not expect half of the population to play this game */
    uint16_t mapID;     /* 65536 values to identify map is enough */
    uint16_t lastMapID;
    uint8_t leaveCount;     /* 256 values to keep track of leaves is enough */
    uint64_t joinTime;      /* same time as linux epoch */
    uint64_t leaveTime;
    ...             /* more variables for user */
};
 
 
/**
 * @brief check if user quits before certain time
 * @param pointer to user
 * @return true if user quits before QUIT_TIME
 */
bool quitAfterJoin(user *usr){
    /* if user leaves in first 5 minutes after join, time can be changed */
    if(abs(user->joinTime - user->leaveTime) < QUIT_TIME){
        /* set last map ID and return flag that user quit before certain time */
        usr->lastMapID = map.ID;
        if(usr->lastMapID == usr->mapID){
            usr->leaveCount++;
            return true;
        }
    }
    return false;
}
 
/**
 * @brief function called after user joins in the game
 * @param pointer to user
 * @return true if join is successful
 */
bool join(user *usr){
    usr->mapID = map.ID;
    ... /* etc. */
}
 
/**
* @brief overloaded function to join with preferences
* @param mapID mapID which user does not want to join
* @return true if joining was successful
*/
bool tryToJoin(uint16_t mapID){
    /* exclude map from list of possible maps */ 
    excludeMap(mapID);

    /* other operations before joining */
    ...
}

/**
* @brief default function to join without preferences
* @param mapID mapID which user does not want to join
* @return true if joining was successful
*/
bool tryToJoin(){
    /* normal joining procedure */
    ...
}

/**
 * @brief user joins Q
 * @param pointer to user
 * @return true if queueing up is successful
 */
bool queueUp(user *usr){   
    ...     /* some preparations */
    /* if user quits game before certain time, we can be sure he does not want to play
       in that game, therefore we will NOT match him in that game
    */
    try{
        if(usr->leaveCount > MAX_LEAVES){
            /* try to join excluding this certain map */
            tryToJoin(usr->lastMapID); 
        } else {
            tryToJoin();
        }  
    }
    catch{
        /* procedure that is called when Q failed */
        abortQueue();
        return false;
    }
    return true;
}

Regarding different nations, I am tired of Queueing Simulator(US/Brittish) and I do not play UFOs (Russians). Japanese do not appeal to me.

Independent of the thread topic it's really cool to see C++ codes in a note :)  :yes:  :salute:  :good:

medal medal

Share this post


Link to post
Share on other sites

Ehem.

(1) So, basically, before I quit an amount of time less than MAX_LEAVES, it's all right to give me again the same map?

(2) So only one map I don't like is stored? So if I have map A (hate) map B (hate) map C (cool), the algorithm can basically have me alternating between map A and map B which I both hate?

 

Hint for improvements: Arrays are decidedly not work of the devil and you will need one (actually two). They can be of fixed size (life will be simpler and memory requirements are small) but you're going to want to sort them which is trivial in our case. Then you can have a proper list of what user doesn't like to avoid problem (2). So whenever a user leaves within WAIT_TIME you update the arrays, sort again if needed.

 

Whenever a user tries to join a match you use the array which has sorted list of maps they hate to try to avoid them matching on these, then after some minutes relax the priorities and try to match them again and so on. Won't solve hypothetical problem of one map being cool for EC2 but sucking for EC4 which might emerge (you could do that by keeping separate tabs for each EC although it gets a bit more complicated).

 

MM will be necessarily slowed down though which is against Gaijin priorities, though. Someone who likes map A which you detest will have slower MM and bitch and whine about it.

Edited by Cpt_Branko
medal medal medal medal

Share this post


Link to post
Share on other sites

Cpt_branko, I said it was solution to the problem of being joined 17x in the same map by adding ability of primitive prediction that was done in 5 minutes. It means that it is hotfix, not full and proper solution of the problem.

 

Better solution is giving us server browser so a player can choose from variety of servers with different maps and different nations.

 

However, I appreciate your input to the discussion since more heads know more things and we might be actually able to design a proper matchmaker.

Edited by D3athCZE
  • Upvote 1

Share this post


Link to post
Share on other sites

The 5 minute hotfix with "proper fix will be done later" is a lie. The hotfix will still be in the code 15 years later. Except now god knows how it works anymore or what it was supposed to do ;)

 

However, fundamental problem which is not easy to fix programatically is that for everyone who does not want to be matched vs La-5FNs on some Russian map there is someone who wants you to be matched with him so he can get his easy kills. MM has to prevent deadlocks resulting from players being exploitative xxxxxxxx who want everything going their way.

 

That's the tricky part of design, how to balance multiple opposing demands without pissing everyone off too much. I can't say Gaijin is best at it.

Edited by Cpt_Branko
medal medal medal medal

Share this post


Link to post
Share on other sites

  • Recently Browsing   0 members

    No registered users viewing this page.