faluco@389: /** ds@653: * vim: set ts=4 : ds@1330: * ============================================================================= dvander@1231: * SourceMod ds@1947: * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. ds@1330: * ============================================================================= faluco@389: * ds@1330: * This program is free software; you can redistribute it and/or modify it under ds@1330: * the terms of the GNU General Public License, version 3.0, as published by the ds@1330: * Free Software Foundation. dvander@1231: * ds@1330: * This program is distributed in the hope that it will be useful, but WITHOUT ds@1330: * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS ds@1330: * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more ds@1330: * details. dvander@1231: * ds@1330: * You should have received a copy of the GNU General Public License along with ds@1330: * this program. If not, see . dvander@1231: * ds@1330: * As a special exception, AlliedModders LLC gives you permission to link the ds@1330: * code of this program (as well as its derivative works) to "Half-Life 2," the ds@1330: * "Source Engine," the "SourcePawn JIT," and any Game MODs that run on software ds@1330: * by the Valve Corporation. You must obey the GNU General Public License in ds@1330: * all respects for all other code used. Additionally, AlliedModders LLC grants ds@1330: * this exception to all derivative works. AlliedModders LLC defines further ds@1330: * exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007), ds@1330: * or . faluco@389: * faluco@389: * Version: $Id$ faluco@389: */ faluco@389: dvander@3004: #include "common_logic.h" dvander@591: #include "Translator.h" dvander@3004: #include dvander@3004: #include dvander@3004: #include faluco@389: faluco@389: static cell_t sm_LoadTranslations(IPluginContext *pCtx, const cell_t *params) faluco@389: { dvander@2042: char *filename, *ext; dvander@2042: char buffer[PLATFORM_MAX_PATH]; dvander@3004: IPlugin *pl = pluginsys->FindPluginByContext(pCtx->GetContext()); faluco@389: faluco@389: pCtx->LocalToString(params[1], &filename); dvander@3004: smcore.Format(buffer, sizeof(buffer), "%s", filename); faluco@389: dvander@2042: /* Make sure there is no extension */ dvander@2042: if ((ext = strstr(buffer, ".txt")) != NULL dvander@2042: || (ext = strstr(buffer, ".cfg")) != NULL) dvander@1014: { dvander@2042: /* Simple heuristic -- just see if it's at the end and terminate if so */ dvander@2043: if ((unsigned)(ext - buffer) == strlen(buffer) - 4) dvander@2042: { dvander@2042: *ext = '\0'; dvander@2042: } dvander@1014: } dvander@1014: dvander@2042: pl->GetPhrases()->AddPhraseFile(buffer); faluco@389: faluco@389: return 1; faluco@389: } dvander@396: dvander@1034: static cell_t sm_SetGlobalTransTarget(IPluginContext *pContext, const cell_t *params) dvander@1034: { dvander@3004: g_pSM->SetGlobalTarget(params[1]); dvander@1034: dvander@1034: return 1; dvander@1034: } dvander@1034: dvander@1105: static cell_t sm_GetClientLanguage(IPluginContext *pContext, const cell_t *params) dvander@1105: { dvander@3004: IGamePlayer *player = playerhelpers->GetGamePlayer(params[1]); dvander@1105: if (!player || !player->IsConnected()) dvander@1105: { dvander@1105: return pContext->ThrowNativeError("Invalid client index %d", params[1]); dvander@1105: } dvander@1105: dvander@1105: return g_Translator.GetClientLanguage(params[1]); dvander@1105: } dvander@1105: dvander@1105: static cell_t sm_GetServerLanguage(IPluginContext *pContext, const cell_t *params) dvander@1105: { dvander@1105: return g_Translator.GetServerLanguage(); dvander@1105: } dvander@1105: dvander@1105: static cell_t sm_GetLanguageCount(IPluginContext *pContext, const cell_t *params) dvander@1105: { dvander@1105: return g_Translator.GetLanguageCount(); dvander@1105: } dvander@1105: dvander@1105: static cell_t sm_GetLanguageInfo(IPluginContext *pContext, const cell_t *params) dvander@1105: { dvander@1105: const char *code; dvander@1105: const char *name; dvander@1105: dvander@1105: if (!g_Translator.GetLanguageInfo(params[1], &code, &name)) dvander@1105: { dvander@1105: return pContext->ThrowNativeError("Invalid language number %d", params[1]); dvander@1105: } dvander@1105: dvander@1105: pContext->StringToLocalUTF8(params[2], params[3], code, NULL); dvander@1105: pContext->StringToLocalUTF8(params[4], params[5], name, NULL); dvander@1105: dvander@1105: return 1; dvander@1105: } dvander@1105: GoD-Tony@3208: static cell_t sm_SetClientLanguage(IPluginContext *pContext, const cell_t *params) GoD-Tony@3208: { skamonkey@3213: IGamePlayer *player = playerhelpers->GetGamePlayer(params[1]); GoD-Tony@3208: aangione@3413: if (!player || !player->IsConnected()) GoD-Tony@3208: { GoD-Tony@3208: return pContext->ThrowNativeError("Invalid client index %d", params[1]); GoD-Tony@3208: } GoD-Tony@3208: skamonkey@3213: player->SetLanguageId(params[2]); GoD-Tony@3208: GoD-Tony@3208: return 1; GoD-Tony@3208: } GoD-Tony@3208: GoD-Tony@3208: static cell_t sm_GetLanguageByCode(IPluginContext *pContext, const cell_t *params) GoD-Tony@3208: { GoD-Tony@3208: char *code; GoD-Tony@3208: unsigned int langid; GoD-Tony@3208: GoD-Tony@3208: pContext->LocalToString(params[1], &code); GoD-Tony@3208: GoD-Tony@3208: if (g_Translator.GetLanguageByCode(code, &langid)) GoD-Tony@3208: return langid; GoD-Tony@3208: GoD-Tony@3208: return -1; GoD-Tony@3208: } GoD-Tony@3208: GoD-Tony@3208: static cell_t sm_GetLanguageByName(IPluginContext *pContext, const cell_t *params) GoD-Tony@3208: { GoD-Tony@3208: char *name; GoD-Tony@3208: unsigned int langid; GoD-Tony@3208: GoD-Tony@3208: pContext->LocalToString(params[1], &name); GoD-Tony@3208: GoD-Tony@3208: if (g_Translator.GetLanguageByName(name, &langid)) GoD-Tony@3208: return langid; GoD-Tony@3208: GoD-Tony@3208: return -1; GoD-Tony@3208: } GoD-Tony@3208: dvander@1105: REGISTER_NATIVES(langNatives) dvander@396: { dvander@396: {"LoadTranslations", sm_LoadTranslations}, dvander@1034: {"SetGlobalTransTarget", sm_SetGlobalTransTarget}, dvander@1105: {"GetClientLanguage", sm_GetClientLanguage}, dvander@1105: {"GetServerLanguage", sm_GetServerLanguage}, dvander@1105: {"GetLanguageCount", sm_GetLanguageCount}, dvander@1105: {"GetLanguageInfo", sm_GetLanguageInfo}, GoD-Tony@3208: {"SetClientLanguage", sm_SetClientLanguage}, GoD-Tony@3208: {"GetLanguageByCode", sm_GetLanguageByCode}, GoD-Tony@3208: {"GetLanguageByName", sm_GetLanguageByName}, dvander@396: {NULL, NULL}, dvander@396: };