sm-zombiereloaded-3/src/zr/translation.inc
richard 06771e6d15 New feature for blocking class selection. Changes in translations. See details.
Finished norwegian translation.
Fixed missing quote in english translation file.
Added cvars for blocking players from changing classes.
Minior typo fixes in log module.
Changed TranslationReplyToCommand to use the ReplyToCommand function.
2009-08-09 22:44:28 +02:00

346 lines
9.7 KiB
SourcePawn

/*
* ============================================================================
*
* Zombie:Reloaded
*
* File: translation.inc
* Type: Core
* Description: Translation parsing functions.
*
* Copyright (C) 2009 Greyscale, Richard Helgeby
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
* ============================================================================
*/
/**
* @section Max length of different message formats.
*/
#define TRANSLATION_MAX_LENGTH_CHAT 192
#define TRANSLATION_MAX_LENGTH_CONSOLE 1024
/**
* @endsection
*/
/**
* Prefix on all messages printed from the plugin.
*/
#define TRANSLATION_PHRASE_PREFIX "[ZR]"
/**
* @section Text color chars.
*/
#define TRANSLATION_TEXT_COLOR_DEFAULT "\x01"
#define TRANSLATION_TEXT_COLOR_LGREEN "\x03"
#define TRANSLATION_TEXT_COLOR_GREEN "\x04"
/**
* @endsection
*/
/**
* Load translations file here.
*/
TranslationInit()
{
// Load translations phrases used by plugin.
LoadTranslations("common.phrases.txt");
LoadTranslations("core.phrases.txt");
LoadTranslations("zombiereloaded.phrases.txt");
}
/**
* Translate a phrase in zombiereloaded.phrases.txt
*
* @param client The client index
* @param translation The translated text.
* @param maxlen Maximum length of the translated string.
* @param ... Translation formatting parameters.
*/
stock TranslationTranslatePhrase(client, String:translation[], maxlen, any:...)
{
// Set translation target to given target.
SetGlobalTransTarget(client);
// Dump translation into return string.
VFormat(translation, maxlen, "%t", 3);
}
/**
* Format the string to the plugin's style.
*
* @param text Text to format.
* @param maxlen Maximum length of the formatted text.
*/
stock TranslationPluginFormatString(String:text[], maxlen, bool:color = true)
{
if (color)
{
// Format prefix onto the string.
Format(text, maxlen, "@green%s @default%s", TRANSLATION_PHRASE_PREFIX, text);
// Replace color tokens with CS:S color chars.
ReplaceString(text, maxlen, "@default", TRANSLATION_TEXT_COLOR_DEFAULT);
ReplaceString(text, maxlen, "@lgreen", TRANSLATION_TEXT_COLOR_LGREEN);
ReplaceString(text, maxlen, "@green", TRANSLATION_TEXT_COLOR_GREEN);
return;
}
// Format prefix onto the string.
Format(text, maxlen, "%s %s", TRANSLATION_PHRASE_PREFIX, text);
}
/**
* Print chat text to client. (with style)
*
* @param client The client index.
* @param ... Translation formatting parameters.
*/
stock TranslationPrintToChat(client, any:...)
{
// Set translation target
SetGlobalTransTarget(client);
// Translate phrase.
decl String:translation[TRANSLATION_MAX_LENGTH_CHAT];
VFormat(translation, sizeof(translation), "%t", 2);
// Format string to create plugin style.
TranslationPluginFormatString(translation, sizeof(translation));
// Print translated phrase to client.
PrintToChat(client, translation);
}
/**
* Format the string to the plugin's style.
*
* @param server True to also print text to server console, false just to clients.
* @param admin True to only print text to admins, false to print to everyone.
* @param ... Translation formatting parameters.
*/
stock TranslationPrintToChatAll(bool:server, bool:admin, any:...)
{
decl String:translation[TRANSLATION_MAX_LENGTH_CHAT];
if (server)
{
// Set translation target
SetGlobalTransTarget(LANG_SERVER);
// Translate phrase.
VFormat(translation, sizeof(translation), "%t", 3);
// Format string to create plugin style.
TranslationPluginFormatString(translation, sizeof(translation), false);
// Print phrase to server.
PrintToServer(translation);
}
// x = client index.
for (new x = 1; x <= MaxClients; x++)
{
// If client isn't in-game, then stop.
if (!IsClientInGame(x))
{
continue;
}
// If client isn't an admin, and we're only printing to admins, then stop.
if (admin && !ZRIsClientAdmin(x))
{
continue;
}
// Set translation target to client.
SetGlobalTransTarget(x);
// Translate phrase.
VFormat(translation, sizeof(translation), "%t", 3);
// Format string to create plugin style.
TranslationPluginFormatString(translation, sizeof(translation));
// Print translated phrase to client.
PrintToChat(x, translation);
}
}
/**
* Print console text to client. (with style)
*
* @param client The client index.
* @param ... Translation formatting parameters.
*/
stock TranslationPrintToConsole(client, any:...)
{
// Set translation target
SetGlobalTransTarget(client);
// Translate phrase.
decl String:translation[TRANSLATION_MAX_LENGTH_CONSOLE];
VFormat(translation, sizeof(translation), "%t", 2);
// Format string to create plugin style.
TranslationPluginFormatString(translation, sizeof(translation), false);
// Print translated phrase to client.
PrintToConsole(client, translation);
}
/**
* Format the string to the plugin's style.
*
* @param server True to also print text to server console, false just to clients.
* @param ... Translation formatting parameters.
*/
stock TranslationPrintToConsoleAll(bool:server, bool:admin, any:...)
{
decl String:translation[TRANSLATION_MAX_LENGTH_CONSOLE];
if (server)
{
// Set translation target
SetGlobalTransTarget(LANG_SERVER);
// Translate phrase.
VFormat(translation, sizeof(translation), "%t", 3);
// Format string to create plugin style.
TranslationPluginFormatString(translation, sizeof(translation), false);
// Print phrase to server.
PrintToServer(translation);
}
// x = client index.
for (new x = 1; x <= MaxClients; x++)
{
// If client isn't in-game, then stop.
if (!IsClientInGame(x))
{
continue;
}
// If client isn't an admin, and we're only printing to admins, then stop.
if (admin && !ZRIsClientAdmin(x))
{
continue;
}
// Set translation target
SetGlobalTransTarget(LANG_SERVER);
// Translate phrase.
VFormat(translation, sizeof(translation), "%t", 3);
// Format string to create plugin style.
TranslationPluginFormatString(translation, sizeof(translation), false);
// Print translated phrase to client.
PrintToConsole(x, translation);
}
}
/**
* Print center text to client. (with style)
*
* @param client The client index.
* @param ... Translation formatting parameters.
*/
stock TranslationPrintCenterText(client, any:...)
{
// Set translation target
SetGlobalTransTarget(client);
// Translate phrase.
decl String:translation[TRANSLATION_MAX_LENGTH_CHAT];
VFormat(translation, sizeof(translation), "%t", 2);
// Print translated phrase to client.
PrintCenterText(client, translation);
}
/**
* Print HUD text to client. (with style)
*
* @param client The client index.
* @param ... Translation formatting parameters.
*/
stock TranslationPrintHintText(client, any:...)
{
// Set translation target
SetGlobalTransTarget(client);
// Translate phrase.
decl String:translation[TRANSLATION_MAX_LENGTH_CHAT];
VFormat(translation, sizeof(translation), "%t", 2);
// Print translated phrase to client.
PrintHintText(client, translation);
}
/**
* Print text to server. (with style)
*
* @param ... Translation formatting parameters.
*/
stock TranslationPrintToServer(any:...)
{
// Set translation target
SetGlobalTransTarget(LANG_SERVER);
// Translate phrase.
decl String:translation[TRANSLATION_MAX_LENGTH_CONSOLE];
VFormat(translation, sizeof(translation), "%t", 1);
// Format string to create plugin style.
TranslationPluginFormatString(translation, sizeof(translation), false);
// Print translated phrase to client.
PrintToServer(translation);
}
/**
* Print chat text to client. (with style)
*
* @param client The client index.
* @param ... Translation formatting parameters.
*/
stock TranslationReplyToCommand(client, any:...)
{
// Set translation target
SetGlobalTransTarget(client);
// Translate phrase.
decl String:translation[TRANSLATION_MAX_LENGTH_CONSOLE];
VFormat(translation, sizeof(translation), "%t", 2);
if (ZRIsClientValid(client))
{
// Format string to create plugin style. (color)
TranslationPluginFormatString(translation, sizeof(translation));
}
else
{
// Format string to create plugin style. (no color)
TranslationPluginFormatString(translation, sizeof(translation), false);
}
// Print translated phrase to server or client's chat/console.
ReplyToCommand(client, translation);
}