Moved client language detection to be earlier (on connect) (bug 3714, r=psychonic).

This commit is contained in:
GoD-Tony 2011-10-15 12:07:55 -04:00
parent 7f8c4eff39
commit 4b0373408d
3 changed files with 18 additions and 17 deletions

View File

@ -412,6 +412,21 @@ bool PlayerManager::OnClientConnect(edict_t *pEntity, const char *pszName, const
int client = IndexOfEdict(pEntity);
CPlayer *pPlayer = &m_Players[client];
pPlayer->Initialize(pszName, pszAddress, pEntity);
/* Get the client's language */
if (m_QueryLang)
{
const char *name;
if (!pPlayer->IsFakeClient() && (name=engine->GetClientConVarValue(client, "cl_language")))
{
unsigned int langid;
pPlayer->m_LangId = (translator->GetLanguageByName(name, &langid)) ? langid : translator->GetServerLanguage();
} else {
pPlayer->m_LangId = translator->GetServerLanguage();
}
}
List<IClientListener *>::iterator iter;
IClientListener *pListener = NULL;
for (iter=m_hooks.begin(); iter!=m_hooks.end(); iter++)
@ -425,7 +440,6 @@ bool PlayerManager::OnClientConnect(edict_t *pEntity, const char *pszName, const
cell_t res = 1;
pPlayer->Initialize(pszName, pszAddress, pEntity);
m_clconnect->PushCell(client);
m_clconnect->PushStringEx(reject, maxrejectlen, SM_PARAM_STRING_UTF8 | SM_PARAM_STRING_COPY, SM_PARAM_COPYBACK);
m_clconnect->PushCell(maxrejectlen);
@ -547,19 +561,6 @@ void PlayerManager::OnClientPutInServer(edict_t *pEntity, const char *playername
pPlayer->m_Info = playerinfo->GetPlayerInfo(pEntity);
}
/* Get the client's language */
if (m_QueryLang)
{
const char *name;
if (!pPlayer->IsFakeClient() && (name=engine->GetClientConVarValue(client, "cl_language")))
{
unsigned int langid;
pPlayer->m_LangId = (translator->GetLanguageByName(name, &langid)) ? langid : translator->GetServerLanguage();
} else {
pPlayer->m_LangId = translator->GetServerLanguage();
}
}
pPlayer->Connect();
m_PlayerCount++;

View File

@ -108,7 +108,7 @@ static cell_t sm_SetClientLanguage(IPluginContext *pContext, const cell_t *param
{
IGamePlayer *player = playerhelpers->GetGamePlayer(params[1]);
if (!player || !player->IsInGame())
if (!player || !player->IsConnected())
{
return pContext->ThrowNativeError("Invalid client index %d", params[1]);
}

View File

@ -63,7 +63,7 @@ native SetGlobalTransTarget(client);
*
* @param client Client index.
* @return Language number client is using.
* @error Invalid client index or client not in game.
* @error Invalid client index or client not connected.
*/
native GetClientLanguage(client);
@ -100,7 +100,7 @@ native GetLanguageInfo(language, String:code[]="", codeLen=0, String:name[]="",
* @param client Client index.
* @param language Language number.
* @noreturn
* @error Invalid client index or client not in game.
* @error Invalid client index or client not connected.
*/
native SetClientLanguage(client, language);