1
0
mirror of https://github.com/OpenTTD/OpenTTD.git synced 2025-08-19 12:39:11 +00:00

Codechange: use separate pre and post callbacks for string settings

This commit is contained in:
rubidium42
2021-05-24 09:44:20 +02:00
committed by rubidium42
parent ea9715d970
commit e2f5d9e561
8 changed files with 89 additions and 78 deletions

View File

@@ -1344,27 +1344,22 @@ bool NetworkValidateClientName()
}
/**
* Send the server our name.
* Send the server our name as callback from the setting.
* @param newname The new client name.
*/
void NetworkUpdateClientName()
void NetworkUpdateClientName(const std::string &client_name)
{
NetworkClientInfo *ci = NetworkClientInfo::GetByClientID(_network_own_client_id);
if (ci == nullptr) return;
/* There is no validation on string settings, it is actually a post change callback.
* This method is called from that post change callback. So, when the client name is
* changed via the console there is no easy way to prevent an invalid name. Though,
* we can prevent it getting sent here. */
if (!NetworkValidateClientName()) return;
/* Don't change the name if it is the same as the old name */
if (_settings_client.network.client_name.compare(ci->client_name) != 0) {
if (client_name.compare(ci->client_name) != 0) {
if (!_network_server) {
MyClient::SendSetName(_settings_client.network.client_name.c_str());
MyClient::SendSetName(client_name.c_str());
} else {
/* Copy to a temporary buffer so no #n gets added after our name in the settings when there are duplicate names. */
char temporary_name[NETWORK_CLIENT_NAME_LENGTH];
strecpy(temporary_name, _settings_client.network.client_name.c_str(), lastof(temporary_name));
strecpy(temporary_name, client_name.c_str(), lastof(temporary_name));
if (NetworkFindName(temporary_name, lastof(temporary_name))) {
NetworkTextMessage(NETWORK_ACTION_NAME_CHANGE, CC_DEFAULT, false, ci->client_name, temporary_name);
ci->client_name = temporary_name;

View File

@@ -38,7 +38,7 @@ byte NetworkSpectatorCount();
bool NetworkIsValidClientName(const std::string_view client_name);
bool NetworkValidateClientName();
bool NetworkValidateClientName(std::string &client_name);
void NetworkUpdateClientName();
void NetworkUpdateClientName(const std::string &client_name);
bool NetworkCompanyHasClients(CompanyID company);
std::string NetworkChangeCompanyPassword(CompanyID company_id, std::string password);
void NetworkReboot();