core/smn_lang.cpp
author Michael McKoy <ferret99gt@gmail.com>
Wed Aug 08 23:45:24 2007 +0000 (2007-08-08)
changeset 1284 ac293d8351a3
parent 1231 17badaf66ce4
child 1330 ab94316bb52b
permissions -rw-r--r--
Import of baseplugins.sp
     1 /**
     2  * vim: set ts=4 :
     3  * ================================================================
     4  * SourceMod
     5  * Copyright (C) 2004-2007 AlliedModders LLC.  All rights reserved.
     6  * ================================================================
     7  *
     8  * This program is free software; you can redistribute it and/or 
     9  * modify it under the terms of the GNU General Public License, 
    10  * version 3.0, as published by the Free Software Foundation.
    11  * 
    12  * This program is distributed in the hope that it will be useful,
    13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
    14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    15  * GNU General Public License for more details.
    16  *
    17  * You should have received a copy of the GNU General Public License
    18  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
    19  *
    20  * As a special exception, AlliedModders LLC gives you permission to 
    21  * link the code of this program (as well as its derivative works) to 
    22  * "Half-Life 2," the "Source Engine," the "SourcePawn JIT," and any 
    23  * Game MODs that run on software by the Valve Corporation.  You must 
    24  * obey the GNU General Public License in all respects for all other 
    25  * code used. Additionally, AlliedModders LLC grants this exception 
    26  * to all derivative works. AlliedModders LLC defines further 
    27  * exceptions, found in LICENSE.txt (as of this writing, version 
    28  * JULY-31-2007), or <http://www.sourcemod.net/license.php>.
    29  *
    30  * Version: $Id$
    31  */
    32 
    33 #include "PluginSys.h"
    34 #include "Translator.h"
    35 #include "LibrarySys.h"
    36 #include "sm_stringutil.h"
    37 #include "PlayerManager.h"
    38 
    39 static cell_t sm_LoadTranslations(IPluginContext *pCtx, const cell_t *params)
    40 {
    41 	char *filename;
    42 	unsigned int index;
    43 	CPlugin *pl = (CPlugin *)g_PluginSys.FindPluginByContext(pCtx->GetContext());
    44 
    45 	pCtx->LocalToString(params[1], &filename);
    46 
    47 	/* Check if there is no extension */
    48 	const char *ext = g_LibSys.GetFileExtension(filename);
    49 	if (!ext || (strcmp(ext, "cfg") && strcmp(ext, "txt")))
    50 	{
    51 		/* Append one */
    52 		static char new_file[PLATFORM_MAX_PATH];
    53 		UTIL_Format(new_file, sizeof(new_file), "%s.txt", filename);
    54 		filename = new_file;
    55 	}
    56 
    57 	index = g_Translator.FindOrAddPhraseFile(filename);
    58 	pl->AddLangFile(index);
    59 
    60 	return 1;
    61 }
    62 
    63 static cell_t sm_SetGlobalTransTarget(IPluginContext *pContext, const cell_t *params)
    64 {
    65 	g_SourceMod.SetGlobalTarget(params[1]);
    66 
    67 	return 1;
    68 }
    69 
    70 static cell_t sm_GetClientLanguage(IPluginContext *pContext, const cell_t *params)
    71 {
    72 	CPlayer *player = g_Players.GetPlayerByIndex(params[1]);
    73 	if (!player || !player->IsConnected())
    74 	{
    75 		return pContext->ThrowNativeError("Invalid client index %d", params[1]);
    76 	}
    77 
    78 	return g_Translator.GetClientLanguage(params[1]);
    79 }
    80 
    81 static cell_t sm_GetServerLanguage(IPluginContext *pContext, const cell_t *params)
    82 {
    83 	return g_Translator.GetServerLanguage();
    84 }
    85 
    86 static cell_t sm_GetLanguageCount(IPluginContext *pContext, const cell_t *params)
    87 {
    88 	return g_Translator.GetLanguageCount();
    89 }
    90 
    91 static cell_t sm_GetLanguageInfo(IPluginContext *pContext, const cell_t *params)
    92 {
    93 	const char *code;
    94 	const char *name;
    95 
    96 	if (!g_Translator.GetLanguageInfo(params[1], &code, &name))
    97 	{
    98 		return pContext->ThrowNativeError("Invalid language number %d", params[1]);
    99 	}
   100 
   101 	pContext->StringToLocalUTF8(params[2], params[3], code, NULL);
   102 	pContext->StringToLocalUTF8(params[4], params[5], name, NULL);
   103 
   104 	return 1;
   105 }
   106 
   107 REGISTER_NATIVES(langNatives)
   108 {
   109 	{"LoadTranslations",			sm_LoadTranslations},
   110 	{"SetGlobalTransTarget",		sm_SetGlobalTransTarget},
   111 	{"GetClientLanguage",			sm_GetClientLanguage},
   112 	{"GetServerLanguage",			sm_GetServerLanguage},
   113 	{"GetLanguageCount",			sm_GetLanguageCount},
   114 	{"GetLanguageInfo",				sm_GetLanguageInfo},
   115 	{NULL,							NULL},
   116 };