Ticket #3388: t3388_fix_initial_playerlist.diff

File t3388_fix_initial_playerlist.diff, 2.6 KB (added by elexis, 9 years ago)
  • binaries/data/mods/public/gui/lobby/lobby.js

     
    4444    mapTypeFilter.list_data = [""].concat(g_mapTypes);
    4545
    4646    Engine.LobbySetPlayerPresence("available");
    4747    Engine.SendGetGameList();
    4848    Engine.SendGetBoardList();
    49     updatePlayerList();
    5049    updateSubject(Engine.LobbyGetRoomSubject());
    5150
    5251    resetFilters();
    5352}
    5453
     
    762761                    updateLeaderboard();
    763762                    updatePlayerList();
    764763                    // Disable the 'host' button
    765764                    Engine.GetGUIObjectByName("hostButton").enabled = false;
    766765                }
    767                 else if (message.text == "connected")
    768                 {
    769                     Engine.GetGUIObjectByName("hostButton").enabled = true;
    770                 }
     766                // else if (message.text == "connected") // currently we don't attempt to rejoin
    771767                break;
    772768            case "error":
    773769                addChatMessage({ "from": "system", "text": text, "color": "150 0 0" });
    774770                break;
    775771            case "internal":
    776772                switch (message.text)
    777773                {
     774                case "join-completed":
     775                    updatePlayerList();
     776                    break;
    778777                case "gamelist updated":
    779778                    updateGameList();
    780779                    break;
    781780                case "boardlist updated":
    782781                    updateLeaderboard();
  • source/lobby/XmppClient.cpp

     
    801801        DbgXMPP(nick << " left the room");
    802802        m_PlayerMap.erase(nick);
    803803    }
    804804    else
    805805    {
    806         /* During the initialization process, we recieve join messages for everyone
    807          * currently in the room. We don't want to display these, so we filter them
    808          * out. We will always be the last to join during initialization.
    809          */
    810         if (!m_initialLoadComplete)
     806        // Send user join/leave events after we joined
     807        if (m_initialLoadComplete)
    811808        {
    812             if (m_mucRoom->nick().to_string() == nick)
    813                 m_initialLoadComplete = true;
     809            if (m_PlayerMap.find(nick) == m_PlayerMap.end())
     810                CreateSimpleMessage("muc", nick, "join");
     811            else
     812                CreateSimpleMessage("muc", nick, "presence");
     813        }
     814        else if (m_mucRoom->nick().to_string() == nick)
     815        {
     816            m_initialLoadComplete = true;
     817            CreateSimpleMessage("system", "join-completed", "internal");
    814818        }
    815         else if (m_PlayerMap.find(nick) == m_PlayerMap.end())
    816             CreateSimpleMessage("muc", nick, "join");
    817         else
    818             CreateSimpleMessage("muc", nick, "presence");
    819819
    820820        DbgXMPP(nick << " is in the room, presence : " << (int)presenceType);
    821821        m_PlayerMap[nick].resize(3);
    822822        m_PlayerMap[nick][0] = presenceString;
    823823        m_PlayerMap[nick][2] = roleString;