From 4c38126ac300c11316d5a25d9c5c8852011c6e2f Mon Sep 17 00:00:00 2001 From: nosoop Date: Sat, 17 Nov 2018 23:09:10 -0800 Subject: [PATCH 1/3] Add translation support to SourceTV_PrintToChat --- natives.cpp | 38 ++++++++++++++++++++++++++++++++++++++ smsdk_config.h | 4 ++-- 2 files changed, 40 insertions(+), 2 deletions(-) diff --git a/natives.cpp b/natives.cpp index 8e3a671..670657b 100644 --- a/natives.cpp +++ b/natives.cpp @@ -825,8 +825,27 @@ static cell_t Native_PrintToChat(IPluginContext *pContext, const cell_t *params) char buffer[1024]; size_t len; { + +#if SOURCE_ENGINE != SE_CSGO + // There's no way to set the current translation without a client index, so we'll save / restore the language on the relay. + int iHLTVClient = hltvserver->GetHLTVServer()->GetHLTVSlot() + 1; + IGamePlayer *pHLTVClient = playerhelpers->GetGamePlayer(iHLTVClient); + + unsigned int langid = translator->GetServerLanguage(); + translator->GetLanguageByName(pClient->BaseClient()->GetUserSetting("cl_language"), &langid); + pHLTVClient->SetLanguageId(langid); + + int restoreTarget = translator->SetGlobalTarget(hltvserver->GetHLTVServer()->GetHLTVSlot() + 1); +#endif + DetectExceptions eh(pContext); len = smutils->FormatString(buffer, sizeof(buffer), pContext, params, 2); + +#if SOURCE_ENGINE != SE_CSGO + pHLTVClient->SetLanguageId(translator->GetServerLanguage()); + translator->SetGlobalTarget(restoreTarget); +#endif + if (eh.HasException()) return 0; } @@ -879,8 +898,27 @@ static cell_t Native_PrintToConsole(IPluginContext *pContext, const cell_t *para char buffer[1024]; size_t len; { + +#if SOURCE_ENGINE != SE_CSGO + // There's no way to set the current translation without a client index, so we'll save / restore the language on the relay. + int iHLTVClient = hltvserver->GetHLTVServer()->GetHLTVSlot() + 1; + IGamePlayer *pHLTVClient = playerhelpers->GetGamePlayer(iHLTVClient); + + unsigned int langid = translator->GetServerLanguage(); + translator->GetLanguageByName(pClient->BaseClient()->GetUserSetting("cl_language"), &langid); + pHLTVClient->SetLanguageId(langid); + + int restoreTarget = translator->SetGlobalTarget(hltvserver->GetHLTVServer()->GetHLTVSlot() + 1); +#endif + DetectExceptions eh(pContext); len = smutils->FormatString(buffer, sizeof(buffer), pContext, params, 2); + +#if SOURCE_ENGINE != SE_CSGO + pHLTVClient->SetLanguageId(translator->GetServerLanguage()); + translator->SetGlobalTarget(restoreTarget); +#endif + if (eh.HasException()) return 0; } diff --git a/smsdk_config.h b/smsdk_config.h index 71c5089..780997b 100644 --- a/smsdk_config.h +++ b/smsdk_config.h @@ -61,7 +61,7 @@ /** Enable interfaces you want to use here by uncommenting lines */ #define SMEXT_ENABLE_FORWARDSYS //#define SMEXT_ENABLE_HANDLESYS -//#define SMEXT_ENABLE_PLAYERHELPERS +#define SMEXT_ENABLE_PLAYERHELPERS //#define SMEXT_ENABLE_DBMANAGER #define SMEXT_ENABLE_GAMECONF //#define SMEXT_ENABLE_MEMUTILS @@ -75,7 +75,7 @@ //#define SMEXT_ENABLE_ADMINSYS //#define SMEXT_ENABLE_TEXTPARSERS //#define SMEXT_ENABLE_USERMSGS -//#define SMEXT_ENABLE_TRANSLATOR +#define SMEXT_ENABLE_TRANSLATOR //#define SMEXT_ENABLE_ROOTCONSOLEMENU #endif // _INCLUDE_SOURCEMOD_EXTENSION_CONFIG_H_ From 29f76a6737457c98343fbf1ea4c21f73ae623a41 Mon Sep 17 00:00:00 2001 From: nosoop Date: Mon, 19 Nov 2018 07:57:00 -0800 Subject: [PATCH 2/3] Lay groundwork for client language property Abstract the language getter to HLTVClientWrapper::GetLanguageId so we have the option of having native setters / getters in SourcePawn to assign language. Whether we actually do something about it, I don't know. --- hltvclientwrapper.cpp | 8 ++++++++ hltvclientwrapper.h | 1 + natives.cpp | 10 ++-------- 3 files changed, 11 insertions(+), 8 deletions(-) diff --git a/hltvclientwrapper.cpp b/hltvclientwrapper.cpp index ca2dddc..b78e108 100644 --- a/hltvclientwrapper.cpp +++ b/hltvclientwrapper.cpp @@ -27,6 +27,14 @@ const char *HLTVClientWrapper::Password() return m_Password.chars(); } +unsigned int HLTVClientWrapper::GetLanguageId() +{ + // TODO expose natives to override spectator client language and remove native ifdefs + unsigned int langid = translator->GetServerLanguage(); + translator->GetLanguageByName(m_Client->GetUserSetting("cl_language"), &langid); + return langid; +} + bool HLTVClientWrapper::IsConnected() { return m_Client && m_Client->IsConnected(); diff --git a/hltvclientwrapper.h b/hltvclientwrapper.h index 5b2e88f..bb368ab 100644 --- a/hltvclientwrapper.h +++ b/hltvclientwrapper.h @@ -46,6 +46,7 @@ public: const char *Name(); const char *Ip(); const char *Password(); + unsigned int GetLanguageId(); bool IsConnected(); IClient *BaseClient(); diff --git a/natives.cpp b/natives.cpp index 670657b..f4db463 100644 --- a/natives.cpp +++ b/natives.cpp @@ -830,10 +830,7 @@ static cell_t Native_PrintToChat(IPluginContext *pContext, const cell_t *params) // There's no way to set the current translation without a client index, so we'll save / restore the language on the relay. int iHLTVClient = hltvserver->GetHLTVServer()->GetHLTVSlot() + 1; IGamePlayer *pHLTVClient = playerhelpers->GetGamePlayer(iHLTVClient); - - unsigned int langid = translator->GetServerLanguage(); - translator->GetLanguageByName(pClient->BaseClient()->GetUserSetting("cl_language"), &langid); - pHLTVClient->SetLanguageId(langid); + pHLTVClient->SetLanguageId(pClient->GetLanguageId()); int restoreTarget = translator->SetGlobalTarget(hltvserver->GetHLTVServer()->GetHLTVSlot() + 1); #endif @@ -903,10 +900,7 @@ static cell_t Native_PrintToConsole(IPluginContext *pContext, const cell_t *para // There's no way to set the current translation without a client index, so we'll save / restore the language on the relay. int iHLTVClient = hltvserver->GetHLTVServer()->GetHLTVSlot() + 1; IGamePlayer *pHLTVClient = playerhelpers->GetGamePlayer(iHLTVClient); - - unsigned int langid = translator->GetServerLanguage(); - translator->GetLanguageByName(pClient->BaseClient()->GetUserSetting("cl_language"), &langid); - pHLTVClient->SetLanguageId(langid); + pHLTVClient->SetLanguageId(pClient->GetLanguageId()); int restoreTarget = translator->SetGlobalTarget(hltvserver->GetHLTVServer()->GetHLTVSlot() + 1); #endif From 9ad3aa29f3cebb20ee8673426c08c1f7f3c822aa Mon Sep 17 00:00:00 2001 From: nosoop Date: Wed, 21 Nov 2018 22:15:12 -0800 Subject: [PATCH 3/3] Forgot to deduplicate client bot index --- natives.cpp | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/natives.cpp b/natives.cpp index f4db463..f53e61a 100644 --- a/natives.cpp +++ b/natives.cpp @@ -828,18 +828,18 @@ static cell_t Native_PrintToChat(IPluginContext *pContext, const cell_t *params) #if SOURCE_ENGINE != SE_CSGO // There's no way to set the current translation without a client index, so we'll save / restore the language on the relay. - int iHLTVClient = hltvserver->GetHLTVServer()->GetHLTVSlot() + 1; - IGamePlayer *pHLTVClient = playerhelpers->GetGamePlayer(iHLTVClient); - pHLTVClient->SetLanguageId(pClient->GetLanguageId()); + int iHLTVRelay = hltvserver->GetHLTVServer()->GetHLTVSlot() + 1; + IGamePlayer *pHLTVRelay = playerhelpers->GetGamePlayer(iHLTVRelay); + pHLTVRelay->SetLanguageId(pClient->GetLanguageId()); - int restoreTarget = translator->SetGlobalTarget(hltvserver->GetHLTVServer()->GetHLTVSlot() + 1); + int restoreTarget = translator->SetGlobalTarget(iHLTVRelay); #endif DetectExceptions eh(pContext); len = smutils->FormatString(buffer, sizeof(buffer), pContext, params, 2); #if SOURCE_ENGINE != SE_CSGO - pHLTVClient->SetLanguageId(translator->GetServerLanguage()); + pHLTVRelay->SetLanguageId(translator->GetServerLanguage()); translator->SetGlobalTarget(restoreTarget); #endif @@ -898,18 +898,18 @@ static cell_t Native_PrintToConsole(IPluginContext *pContext, const cell_t *para #if SOURCE_ENGINE != SE_CSGO // There's no way to set the current translation without a client index, so we'll save / restore the language on the relay. - int iHLTVClient = hltvserver->GetHLTVServer()->GetHLTVSlot() + 1; - IGamePlayer *pHLTVClient = playerhelpers->GetGamePlayer(iHLTVClient); - pHLTVClient->SetLanguageId(pClient->GetLanguageId()); + int iHLTVRelay = hltvserver->GetHLTVServer()->GetHLTVSlot() + 1; + IGamePlayer *pHLTVRelay = playerhelpers->GetGamePlayer(iHLTVRelay); + pHLTVRelay->SetLanguageId(pClient->GetLanguageId()); - int restoreTarget = translator->SetGlobalTarget(hltvserver->GetHLTVServer()->GetHLTVSlot() + 1); + int restoreTarget = translator->SetGlobalTarget(iHLTVRelay); #endif DetectExceptions eh(pContext); len = smutils->FormatString(buffer, sizeof(buffer), pContext, params, 2); #if SOURCE_ENGINE != SE_CSGO - pHLTVClient->SetLanguageId(translator->GetServerLanguage()); + pHLTVRelay->SetLanguageId(translator->GetServerLanguage()); translator->SetGlobalTarget(restoreTarget); #endif