PDA

Просмотр полной версии : [Вопрос] Ники



Winner228
05.04.2020, 14:33
Как сделать ники без чёрточок? типо Carl Johnson, но чтобы в самп клиенте было с черточкой но на сервере без

SteveStage
05.04.2020, 15:42
stock SetRealNick(playerid)
{
new
__p_name[MAX_PLAYER_NAME+1];
GetPlayerName(playerid, __p_name, sizeof(__p_name));
for(new i = 0; i < sizeof(__p_name)-1; i++) if(__p_name[i] == '_') __p_name[i] = ' ';
SetPlayerName(playerid, __p_name);
return true;
}

После авторизации:

SetRealNick(playerid);

tnc
05.04.2020, 17:11
Не совсем правильный алгоритм. Нужно проверять, что перед и после _ - идут буквы. Nickname_Nickname_ - вполне валдиный ник.

stock SetRealNick(playerid)
{
new
__p_name[MAX_PLAYER_NAME+1];
GetPlayerName(playerid, __p_name, sizeof(__p_name));
for(new i = 0; i < sizeof(__p_name)-1; i++) if(__p_name[i] == '_') __p_name[i] = ' ';
SetPlayerName(playerid, __p_name);
return true;
}

После авторизации:

SetRealNick(playerid);

SteveStage
05.04.2020, 17:27
Не совсем правильный алгоритм. Нужно проверять, что перед и после _ - идут буквы. Nickname_Nickname_ - вполне валдиный ник.

stock SetRealNick(playerid)
{
new
__p_name[MAX_PLAYER_NAME+1];
GetPlayerName(playerid, __p_name, sizeof(__p_name));
for(new i = 0; i < sizeof(__p_name)-1; i++)
{
if(__p_name[i] == '_' && (i+1) <= (sizeof(__p_name)-1) && (i-1) != -1)
{
switch(__p_name[i-1])
{
case 'a'..'z', 'A'..'Z':
{
switch(__p_name[i+1])
{
case 'a'..'z', 'A'..'Z':
{
__p_name[i] = ' ';
}
}
}
}
}
}
SetPlayerName(playerid, __p_name);
return true;
}

execution
05.04.2020, 18:09
stock SetRPName(string[])
{
new
i = -1;
while ((i = strfind(string, "_")) != -1)
{
string[i] = ' ';
}
}

Использовать:

public OnPlayerConnect(playerid)
{
GetPlayerName(playerid, /*массив с именем*/, MAX_PLAYER_NAME);
SetRPName(/*массив с именем*/);

return 1;
}

SteveStage
05.04.2020, 18:25
stock SetRPName(const string[])
{
new
i = -1;
while ((i = strfind(string, "_")) != -1)
{
string[i] = ' ';
}
}

Использовать:

public OnPlayerConnect(playerid)
{
GetPlayerName(playerid, /*массив с именем*/, MAX_PLAYER_NAME);
SetRPName(/*массив с именем*/);

return 1;
}

Хм, что-то напоминает.


stock SetRealNick(playerid)
{
new
__p_name[MAX_PLAYER_NAME+1];
GetPlayerName(playerid, __p_name, sizeof(__p_name));
for(new i = 0; i < sizeof(__p_name)-1; i++) if(__p_name[i] == '_') __p_name[i] = ' ';
SetPlayerName(playerid, __p_name);
return true;
}

После авторизации:

SetRealNick(playerid);


Не совсем правильный алгоритм. Нужно проверять, что перед и после _ - идут буквы. Nickname_Nickname_ - вполне валдиный ник.

execution
06.04.2020, 10:16
Хм, что-то напоминает.

Ничего не напоминает.

Автор просил убрать нижнее подчёркивание в нике именно на сервере, а не в самом клиенте.

Unreal
06.04.2020, 17:38
Не совсем правильный алгоритм. Нужно проверять, что перед и после _ - идут буквы. Nickname_Nickname_ - вполне валдиный ник.

Зачем? Данный код просто удаляет _ если он есть. А за валидность ника отвечает уже другая функция