Moved client language detection to be earlier (on connect) (bug 3714, r=psychonic).
This commit is contained in:
parent
7f8c4eff39
commit
4b0373408d
@ -412,6 +412,21 @@ bool PlayerManager::OnClientConnect(edict_t *pEntity, const char *pszName, const
|
|||||||
int client = IndexOfEdict(pEntity);
|
int client = IndexOfEdict(pEntity);
|
||||||
CPlayer *pPlayer = &m_Players[client];
|
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;
|
List<IClientListener *>::iterator iter;
|
||||||
IClientListener *pListener = NULL;
|
IClientListener *pListener = NULL;
|
||||||
for (iter=m_hooks.begin(); iter!=m_hooks.end(); iter++)
|
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;
|
cell_t res = 1;
|
||||||
|
|
||||||
pPlayer->Initialize(pszName, pszAddress, pEntity);
|
|
||||||
m_clconnect->PushCell(client);
|
m_clconnect->PushCell(client);
|
||||||
m_clconnect->PushStringEx(reject, maxrejectlen, SM_PARAM_STRING_UTF8 | SM_PARAM_STRING_COPY, SM_PARAM_COPYBACK);
|
m_clconnect->PushStringEx(reject, maxrejectlen, SM_PARAM_STRING_UTF8 | SM_PARAM_STRING_COPY, SM_PARAM_COPYBACK);
|
||||||
m_clconnect->PushCell(maxrejectlen);
|
m_clconnect->PushCell(maxrejectlen);
|
||||||
@ -547,19 +561,6 @@ void PlayerManager::OnClientPutInServer(edict_t *pEntity, const char *playername
|
|||||||
pPlayer->m_Info = playerinfo->GetPlayerInfo(pEntity);
|
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();
|
pPlayer->Connect();
|
||||||
m_PlayerCount++;
|
m_PlayerCount++;
|
||||||
|
|
||||||
|
@ -108,7 +108,7 @@ static cell_t sm_SetClientLanguage(IPluginContext *pContext, const cell_t *param
|
|||||||
{
|
{
|
||||||
IGamePlayer *player = playerhelpers->GetGamePlayer(params[1]);
|
IGamePlayer *player = playerhelpers->GetGamePlayer(params[1]);
|
||||||
|
|
||||||
if (!player || !player->IsInGame())
|
if (!player || !player->IsConnected())
|
||||||
{
|
{
|
||||||
return pContext->ThrowNativeError("Invalid client index %d", params[1]);
|
return pContext->ThrowNativeError("Invalid client index %d", params[1]);
|
||||||
}
|
}
|
||||||
|
@ -63,7 +63,7 @@ native SetGlobalTransTarget(client);
|
|||||||
*
|
*
|
||||||
* @param client Client index.
|
* @param client Client index.
|
||||||
* @return Language number client is using.
|
* @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);
|
native GetClientLanguage(client);
|
||||||
|
|
||||||
@ -100,7 +100,7 @@ native GetLanguageInfo(language, String:code[]="", codeLen=0, String:name[]="",
|
|||||||
* @param client Client index.
|
* @param client Client index.
|
||||||
* @param language Language number.
|
* @param language Language number.
|
||||||
* @noreturn
|
* @noreturn
|
||||||
* @error Invalid client index or client not in game.
|
* @error Invalid client index or client not connected.
|
||||||
*/
|
*/
|
||||||
native SetClientLanguage(client, language);
|
native SetClientLanguage(client, language);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user