# HG changeset patch # User Wuzzy # Date 1554159819 -7200 # Node ID 7b2bd37d75031504ea78fb65e22cfd10aed22a69 # Parent 5d5d7db9f4177b829da106de70ebb5756d5e15e0 Fix inconsistencies in guest nick name generation When the setting net/nick is empty, HW generates a guest name. But there were several problems: - Team name did not match guest name - Random guest number was re-rolled multiple times, causing inconsistencies - Guest number was often too large (now capped at 99999) diff -r 5d5d7db9f417 -r 7b2bd37d7503 QTfrontend/gameuiconfig.cpp --- a/QTfrontend/gameuiconfig.cpp Tue Apr 02 00:13:25 2019 +0200 +++ b/QTfrontend/gameuiconfig.cpp Tue Apr 02 01:03:39 2019 +0200 @@ -115,7 +115,7 @@ Form->ui.pageOptions->CBDampenAudio->setChecked(value("audio/dampen", true).toBool()); Form->ui.pageOptions->SLVolume->setValue(value("audio/volume", 100).toUInt()); - QString netNick = value("net/nick", tr("Guest")+QString("%1").arg(rand())).toString(); + QString netNick = value("net/nick", getRandomNick()).toString(); Form->ui.pageOptions->editNetNick->setText(netNick); bool savePwd = value("net/savepassword",true).toBool(); Form->ui.pageOptions->CBSavePassword->setChecked(savePwd); @@ -517,6 +517,16 @@ Form->ui.pageOptions->editNetNick->setText(value("net/nick", "").toString()); } +QString GameUIConfig::getRandomNick() +{ + // Generate random nick name or pick old one if one was already generated. + QString nick; + if (cachedRandomNick.isNull()) + // "Guest" + number between 1 and 99999 + cachedRandomNick = tr("Guest") + QString("%1").arg(rand() % 99999 + 1); + return cachedRandomNick; +} + QByteArray GameUIConfig::netPasswordHash() { return QCryptographicHash::hash(Form->ui.pageOptions->editNetPassword->text().toUtf8(), QCryptographicHash::Md5).toHex(); diff -r 5d5d7db9f417 -r 7b2bd37d7503 QTfrontend/gameuiconfig.h --- a/QTfrontend/gameuiconfig.h Tue Apr 02 00:13:25 2019 +0200 +++ b/QTfrontend/gameuiconfig.h Tue Apr 02 01:03:39 2019 +0200 @@ -54,6 +54,7 @@ quint8 volume(); quint8 timerInterval(); QString netNick(); + QString getRandomNick(); QByteArray netPasswordHash(); int netPasswordLength(); void clearPasswordHash(); @@ -104,6 +105,8 @@ QList m_binds; void applyProxySettings(); + + QString cachedRandomNick; }; #endif diff -r 5d5d7db9f417 -r 7b2bd37d7503 QTfrontend/hwform.cpp --- a/QTfrontend/hwform.cpp Tue Apr 02 00:13:25 2019 +0200 +++ b/QTfrontend/hwform.cpp Tue Apr 02 01:03:39 2019 +0200 @@ -168,7 +168,7 @@ config = new GameUIConfig(this, DataManager::instance().settingsFileName()); frontendEffects = config->value("frontend/effects", true).toBool(); - playerHash = QString(QCryptographicHash::hash(config->value("net/nick",tr("Guest")+QString("%1").arg(rand())).toString().toUtf8(), QCryptographicHash::Md5).toHex()); + playerHash = QString(QCryptographicHash::hash(config->value("net/nick", config->getRandomNick()).toString().toUtf8(), QCryptographicHash::Md5).toHex()); // Icons for finished missions finishedIcon.addFile(":/res/missionFinished.png", QSize(), QIcon::Normal, QIcon::On); @@ -521,7 +521,7 @@ if(teamslist.empty()) { - QString currentNickName = config->value("net/nick",tr("Guest")+QString("%1").arg(rand())).toString(); + QString currentNickName = config->value("net/nick", config->getRandomNick()).toString(); QString teamName; int firstHumanTeam = 1; int lastHumanTeam = 2; @@ -1523,7 +1523,7 @@ if (hwnet->m_private_game == false && AskForNickAndPwd() != 0) return; - QString nickname = config->value("net/nick",tr("Guest")+QString("%1").arg(rand())).toString(); + QString nickname = config->value("net/nick", config->getRandomNick()).toString(); ui.pageRoomsList->setUser(nickname); ui.pageNetGame->setUser(nickname); @@ -1542,7 +1542,7 @@ QString password; do { - nickname = config->value("net/nick",tr("Guest")+QString("%1").arg(rand())).toString(); + nickname = config->value("net/nick", config->getRandomNick()).toString(); hash = config->passwordHash(); temphash = config->tempHash();