core/smn_lang.cpp
author David Anderson <dvander@alliedmods.net>
Sat Jul 14 01:04:15 2007 +0000 (2007-07-14)
changeset 1105 ce907ba50921
parent 1034 5ac2c40f13de
child 1231 17badaf66ce4
permissions -rw-r--r--
added request amb588 - language info embellishment
faluco@389
     1
/**
ds@653
     2
 * vim: set ts=4 :
faluco@389
     3
 * ===============================================================
faluco@389
     4
 * SourceMod (C)2004-2007 AlliedModders LLC.  All rights reserved.
faluco@389
     5
 * ===============================================================
faluco@389
     6
 *
faluco@389
     7
 * This file is not open source and may not be copied without explicit
faluco@389
     8
 * written permission of AlliedModders LLC.  This file may not be redistributed 
faluco@389
     9
 * in whole or significant part.
faluco@389
    10
 * For information, see LICENSE.txt or http://www.sourcemod.net/license.php
faluco@389
    11
 *
faluco@389
    12
 * Version: $Id$
faluco@389
    13
 */
faluco@389
    14
faluco@389
    15
#include "PluginSys.h"
dvander@591
    16
#include "Translator.h"
dvander@1014
    17
#include "LibrarySys.h"
dvander@1014
    18
#include "sm_stringutil.h"
dvander@1105
    19
#include "PlayerManager.h"
faluco@389
    20
faluco@389
    21
static cell_t sm_LoadTranslations(IPluginContext *pCtx, const cell_t *params)
faluco@389
    22
{
faluco@389
    23
	char *filename;
faluco@389
    24
	unsigned int index;
faluco@389
    25
	CPlugin *pl = (CPlugin *)g_PluginSys.FindPluginByContext(pCtx->GetContext());
faluco@389
    26
faluco@389
    27
	pCtx->LocalToString(params[1], &filename);
faluco@389
    28
dvander@1014
    29
	/* Check if there is no extension */
dvander@1014
    30
	const char *ext = g_LibSys.GetFileExtension(filename);
dvander@1014
    31
	if (!ext || (strcmp(ext, "cfg") && strcmp(ext, "txt")))
dvander@1014
    32
	{
dvander@1014
    33
		/* Append one */
dvander@1014
    34
		static char new_file[PLATFORM_MAX_PATH];
dvander@1014
    35
		UTIL_Format(new_file, sizeof(new_file), "%s.txt", filename);
dvander@1014
    36
		filename = new_file;
dvander@1014
    37
	}
dvander@1014
    38
faluco@389
    39
	index = g_Translator.FindOrAddPhraseFile(filename);
faluco@389
    40
	pl->AddLangFile(index);
faluco@389
    41
faluco@389
    42
	return 1;
faluco@389
    43
}
dvander@396
    44
dvander@1034
    45
static cell_t sm_SetGlobalTransTarget(IPluginContext *pContext, const cell_t *params)
dvander@1034
    46
{
dvander@1034
    47
	g_SourceMod.SetGlobalTarget(params[1]);
dvander@1034
    48
dvander@1034
    49
	return 1;
dvander@1034
    50
}
dvander@1034
    51
dvander@1105
    52
static cell_t sm_GetClientLanguage(IPluginContext *pContext, const cell_t *params)
dvander@1105
    53
{
dvander@1105
    54
	CPlayer *player = g_Players.GetPlayerByIndex(params[1]);
dvander@1105
    55
	if (!player || !player->IsConnected())
dvander@1105
    56
	{
dvander@1105
    57
		return pContext->ThrowNativeError("Invalid client index %d", params[1]);
dvander@1105
    58
	}
dvander@1105
    59
dvander@1105
    60
	return g_Translator.GetClientLanguage(params[1]);
dvander@1105
    61
}
dvander@1105
    62
dvander@1105
    63
static cell_t sm_GetServerLanguage(IPluginContext *pContext, const cell_t *params)
dvander@1105
    64
{
dvander@1105
    65
	return g_Translator.GetServerLanguage();
dvander@1105
    66
}
dvander@1105
    67
dvander@1105
    68
static cell_t sm_GetLanguageCount(IPluginContext *pContext, const cell_t *params)
dvander@1105
    69
{
dvander@1105
    70
	return g_Translator.GetLanguageCount();
dvander@1105
    71
}
dvander@1105
    72
dvander@1105
    73
static cell_t sm_GetLanguageInfo(IPluginContext *pContext, const cell_t *params)
dvander@1105
    74
{
dvander@1105
    75
	const char *code;
dvander@1105
    76
	const char *name;
dvander@1105
    77
dvander@1105
    78
	if (!g_Translator.GetLanguageInfo(params[1], &code, &name))
dvander@1105
    79
	{
dvander@1105
    80
		return pContext->ThrowNativeError("Invalid language number %d", params[1]);
dvander@1105
    81
	}
dvander@1105
    82
dvander@1105
    83
	pContext->StringToLocalUTF8(params[2], params[3], code, NULL);
dvander@1105
    84
	pContext->StringToLocalUTF8(params[4], params[5], name, NULL);
dvander@1105
    85
dvander@1105
    86
	return 1;
dvander@1105
    87
}
dvander@1105
    88
dvander@1105
    89
REGISTER_NATIVES(langNatives)
dvander@396
    90
{
dvander@396
    91
	{"LoadTranslations",			sm_LoadTranslations},
dvander@1034
    92
	{"SetGlobalTransTarget",		sm_SetGlobalTransTarget},
dvander@1105
    93
	{"GetClientLanguage",			sm_GetClientLanguage},
dvander@1105
    94
	{"GetServerLanguage",			sm_GetServerLanguage},
dvander@1105
    95
	{"GetLanguageCount",			sm_GetLanguageCount},
dvander@1105
    96
	{"GetLanguageInfo",				sm_GetLanguageInfo},
dvander@396
    97
	{NULL,							NULL},
dvander@396
    98
};