diff --git a/datasrc/network.py b/datasrc/network.py index 06f1551d..fe7961c4 100644 --- a/datasrc/network.py +++ b/datasrc/network.py @@ -653,6 +653,7 @@ NetIntAny("m_ColorSkin"), NetIntAny("m_BloodColor"), NetIntRange("m_IsBot", 0, 1), + NetIntRange("m_Language", 0, 999), ]), NetMessage("Cl_ChangeInfo", [ @@ -671,6 +672,7 @@ NetIntAny("m_ColorSkin"), NetIntAny("m_BloodColor"), NetIntRange("m_IsBot", 0, 1), + NetIntRange("m_Language", 0, 999), ]), NetMessage("Cl_Kill", []), diff --git a/src/game/client/components/menus_settings.cpp b/src/game/client/components/menus_settings.cpp index 72588d69..ee45b2c3 100644 --- a/src/game/client/components/menus_settings.cpp +++ b/src/game/client/components/menus_settings.cpp @@ -2161,6 +2161,7 @@ void CMenus::RenderLanguageSelection(CUIRect MainView) if(OldSelected != s_SelectedLanguage) { str_copy(g_Config.m_ClLanguagefile, s_Languages[s_SelectedLanguage].m_FileName, sizeof(g_Config.m_ClLanguagefile)); + g_Config.m_ClLanguagecode = s_Languages[s_SelectedLanguage].m_CountryCode; g_Localization.Load(s_Languages[s_SelectedLanguage].m_FileName, Storage(), Console()); } } diff --git a/src/game/client/gameclient.cpp b/src/game/client/gameclient.cpp index a76b1748..9f2f17c7 100644 --- a/src/game/client/gameclient.cpp +++ b/src/game/client/gameclient.cpp @@ -1688,6 +1688,7 @@ void CGameClient::SendInfo(bool Start) Msg.m_ColorTopper = g_Config.m_PlayerColorTopper; Msg.m_ColorSkin = g_Config.m_PlayerColorSkin; Msg.m_BloodColor = g_Config.m_PlayerBloodColor; + Msg.m_Language = g_Config.m_ClLanguagecode; Client()->SendPackMsg(&Msg, MSGFLAG_VITAL); } else @@ -1707,6 +1708,7 @@ void CGameClient::SendInfo(bool Start) Msg.m_ColorTopper = g_Config.m_PlayerColorTopper; Msg.m_ColorSkin = g_Config.m_PlayerColorSkin; Msg.m_BloodColor = g_Config.m_PlayerBloodColor; + Msg.m_Language = g_Config.m_ClLanguagecode; Client()->SendPackMsg(&Msg, MSGFLAG_VITAL); // activate timer to resend the info if it gets filtered diff --git a/src/game/server/gamecontext.cpp b/src/game/server/gamecontext.cpp index cee79df4..f2993a52 100644 --- a/src/game/server/gamecontext.cpp +++ b/src/game/server/gamecontext.cpp @@ -2361,7 +2361,6 @@ void CGameContext::OnMessage(int MsgID, CUnpacker *pUnpacker, int ClientID) Server()->SetClientClan(ClientID, pMsg->m_pClan); Server()->SetClientCountry(ClientID, pMsg->m_Country); - str_copy(pPlayer->m_aLanguage, Localization()->GetLanguageCode(pMsg->m_Country), sizeof(pPlayer->m_aLanguage)); str_copy(pPlayer->m_TeeInfos.m_TopperName, pMsg->m_pTopper, sizeof(pPlayer->m_TeeInfos.m_TopperName)); str_copy(pPlayer->m_TeeInfos.m_EyeName, pMsg->m_pEye, sizeof(pPlayer->m_TeeInfos.m_EyeName)); str_copy(pPlayer->m_TeeInfos.m_HeadName, pMsg->m_pHead, sizeof(pPlayer->m_TeeInfos.m_HeadName)); @@ -2373,6 +2372,11 @@ void CGameContext::OnMessage(int MsgID, CUnpacker *pUnpacker, int ClientID) pPlayer->m_TeeInfos.m_ColorTopper = pMsg->m_ColorTopper; pPlayer->m_TeeInfos.m_BloodColor = pMsg->m_BloodColor; pPlayer->m_TeeInfos.m_ColorSkin = pMsg->m_ColorSkin; + + str_copy(pPlayer->m_aLanguage, Localization()->GetLanguageCode(pMsg->m_Country), sizeof(pPlayer->m_aLanguage)); + if(pMsg->m_Language) + str_copy(pPlayer->m_aLanguage, Localization()->GetLanguageCode(pMsg->m_Language), sizeof(pPlayer->m_aLanguage)); + m_pController->OnPlayerInfoChange(pPlayer); } else if (MsgID == NETMSGTYPE_CL_EMOTICON && !m_World.m_Paused) @@ -2453,7 +2457,6 @@ void CGameContext::OnMessage(int MsgID, CUnpacker *pUnpacker, int ClientID) Server()->SetClientName(ClientID, pMsg->m_pName); Server()->SetClientClan(ClientID, pMsg->m_pClan); Server()->SetClientCountry(ClientID, pMsg->m_Country); - str_copy(pPlayer->m_aLanguage, Localization()->GetLanguageCode(pMsg->m_Country), sizeof(pPlayer->m_aLanguage)); str_copy(pPlayer->m_TeeInfos.m_TopperName, pMsg->m_pTopper, sizeof(pPlayer->m_TeeInfos.m_TopperName)); str_copy(pPlayer->m_TeeInfos.m_EyeName, pMsg->m_pEye, sizeof(pPlayer->m_TeeInfos.m_EyeName)); str_copy(pPlayer->m_TeeInfos.m_HeadName, pMsg->m_pHead, sizeof(pPlayer->m_TeeInfos.m_HeadName)); @@ -2465,6 +2468,11 @@ void CGameContext::OnMessage(int MsgID, CUnpacker *pUnpacker, int ClientID) pPlayer->m_TeeInfos.m_ColorTopper = pMsg->m_ColorTopper; pPlayer->m_TeeInfos.m_ColorSkin = pMsg->m_ColorSkin; pPlayer->m_TeeInfos.m_BloodColor = pMsg->m_BloodColor; + + str_copy(pPlayer->m_aLanguage, Localization()->GetLanguageCode(pMsg->m_Country), sizeof(pPlayer->m_aLanguage)); + if(pMsg->m_Language) + str_copy(pPlayer->m_aLanguage, Localization()->GetLanguageCode(pMsg->m_Language), sizeof(pPlayer->m_aLanguage)); + m_pController->OnPlayerInfoChange(pPlayer); // send vote options diff --git a/src/game/variables.h b/src/game/variables.h index 55fc5a98..9aae3a08 100644 --- a/src/game/variables.h +++ b/src/game/variables.h @@ -38,6 +38,7 @@ MACRO_CONFIG_INT(ClMotdTime, cl_motd_time, 10, 0, 100, CFGFLAG_CLIENT|CFGFLAG_SA MACRO_CONFIG_STR(ClVersionServer, cl_version_server, 100, "version.ninslash.com", CFGFLAG_CLIENT|CFGFLAG_SAVE, "Server to use to check for new versions") MACRO_CONFIG_STR(ClLanguagefile, cl_languagefile, 255, "", CFGFLAG_CLIENT|CFGFLAG_SAVE, "What language file to use") +MACRO_CONFIG_INT(ClLanguagecode, cl_languagecode, 0, 0, 999, CFGFLAG_CLIENT|CFGFLAG_SAVE, "Language code sent to the server") MACRO_CONFIG_INT(PlayerColorBody, player_color_body, 0, 0, 0xFFFFFF, CFGFLAG_CLIENT|CFGFLAG_SAVE, "Player body color") MACRO_CONFIG_INT(PlayerColorFeet, player_color_feet, 0, 0, 0xFFFFFF, CFGFLAG_CLIENT|CFGFLAG_SAVE, "Player feet color")