Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /* language_sql.pwn
- *
- * (c) Copyright 2015, Emilijo "Correlli" Lovrich
- *
- * Credits: - Incognito for GVar plugin,
- * - BlueG/GStylezzz for MySQL plugin,
- * - Y_Less for foreach/iterator.
- */
- #include "a_samp"
- #include "a_mysql"
- #include "foreach"
- #include "gvar"
- #define MYSQL_SERVER ("localhost")
- #define MYSQL_USERNAME ("root")
- #define MYSQL_PASSWORD ("")
- #define MYSQL_DATABASE ("smf")
- #define MYSQL_LANGUAGE_TABLE ("serverlanguages")
- #define MAX_LANGUAGE_NAME (24)
- #define MAX_KEY_NAME (24)
- #define MAX_KEY_CONTENT (128)
- #define MAX_COMMENT_CONTENT (64)
- #define LANG_ENGLISH ("English") // English.
- #define LANG_CROATIAN ("Hrvatski") // Croatian.
- //#define LANG_DBG_MSG
- new
- FALSE = 0, MySQL_Handle, PlayerLanguage[MAX_PLAYERS][MAX_LANGUAGE_NAME];
- #define SendLanguageMessageEx(%0,%1,%2,%3) \
- do \
- { \
- new \
- _string[128]; \
- if(strlen(%2) > 0) \
- { \
- format(_string, 128, "%s", GetLanguageKey(GetPlayerLanguage(%0), %2)); \
- format(_string, 128, _string, %3); \
- SendClientMessage(%0, %1, _string); \
- } \
- } \
- while(FALSE)
- #define SendLanguageMessageToAllEx(%0,%1,%2) \
- do \
- { \
- new \
- _string[128]; \
- if(strlen(%1) > 0) \
- { \
- foreach(Player, x) \
- { \
- format(_string, 128, "%s", GetLanguageKey(GetPlayerLanguage(x), %1)); \
- format(_string, 128, _string, %2); \
- SendClientMessage(x, %0, _string); \
- } \
- } \
- } \
- while(FALSE)
- #define LoadLanguage(%0) \
- LoadLanguageTexts(%0)
- stock LoadLanguageTexts(langname[])
- {
- if(strlen(langname) > MAX_LANGUAGE_NAME)
- {
- #if defined LANG_DBG_MSG
- printf("Error: Name of the language \"%s\" is too long, name limit is %i characters!", langname, MAX_LANGUAGE_NAME);
- #endif
- return false;
- }
- new
- string[128];
- format(string, 128, "SELECT `lang_key`, `content` FROM `%s_%s` WHERE `lang_name` = '%s'",
- MYSQL_DATABASE,
- MYSQL_LANGUAGE_TABLE,
- langname
- );
- mysql_function_query(MySQL_Handle, string, true, "OnLanguageLoad", "s", langname);
- return true;
- }
- forward OnLanguageLoad(langname[]);
- public OnLanguageLoad(langname[])
- {
- new
- rows, fields;
- cache_get_data(rows, fields);
- if(rows)
- {
- new
- data[MAX_KEY_CONTENT], string[50];
- for(new a = 0; a < rows; a++)
- {
- // lang_key
- cache_get_row(a, 0, data);
- format(string, 50, "%s_%s", langname, data);
- // content
- cache_get_row(a, 1, data);
- SetGVarString(string, data);
- }
- }
- return true;
- }
- stock AddLanguageKey(langname[], langkey[], content[], comment[])
- {
- if(strlen(langname) > MAX_LANGUAGE_NAME)
- {
- #if defined LANG_DBG_MSG
- printf("Error: Name of the language \"%s\" is too long, name limit is %i characters!", langname, MAX_LANGUAGE_NAME);
- #endif
- return -1;
- }
- if(strlen(langkey) > MAX_KEY_NAME)
- {
- #if defined LANG_DBG_MSG
- printf("Error: Name of the language key \"%s\" for language \"%s\" is too long, name limit is %i characters!", langkey, langname, MAX_KEY_NAME);
- #endif
- return -2;
- }
- if(strlen(content) > MAX_KEY_CONTENT)
- {
- #if defined LANG_DBG_MSG
- printf("Error: Language key content at key \"%s\" for language \"%s\" is too long, content limit is %i characters!", langkey, langname, MAX_KEY_CONTENT);
- #endif
- return -3;
- }
- if(strlen(comment) > MAX_COMMENT_CONTENT)
- {
- #if defined LANG_DBG_MSG
- printf("Error: Language key comment at key \"%s\" for language \"%s\" is too long, comment limit is %i characters!", langkey, langname, MAX_COMMENT_CONTENT);
- #endif
- return -4;
- }
- new
- string[144];
- format(string, 144, "SELECT * FROM `%s_%s` WHERE `lang_name` = '%s' AND `lang_key` = '%s'",
- MYSQL_DATABASE,
- MYSQL_LANGUAGE_TABLE,
- langname,
- langkey
- );
- mysql_function_query(MySQL_Handle, string, true, "OnLanguageKeyAdd", "ssss", langname, langkey, content, comment);
- return true;
- }
- forward OnLanguageKeyAdd(langname[], langkey[], content[], comment[]);
- public OnLanguageKeyAdd(langname[], langkey[], content[], comment[])
- {
- new
- rows, fields;
- cache_get_data(rows, fields);
- if(!rows)
- {
- new
- string[368];
- format(string, 368, "INSERT INTO `%s_%s` (`lang_name`, `lang_key`, `content`, `comment`) VALUES ('%s', '%s', '%s', '%s')",
- MYSQL_DATABASE,
- MYSQL_LANGUAGE_TABLE,
- langname,
- langkey,
- content,
- comment
- );
- mysql_function_query(MySQL_Handle, string, false, "", "");
- format(string, 50, "%s_%s", langname, langkey);
- SetGVarString(string, content);
- }
- else
- {
- #if defined LANG_DBG_MSG
- printf("Error: Language key already exists for the language: AddLanguageKey(\"%s\", \"%s\", ..., ...);", langname, langkey);
- #endif
- }
- return true;
- }
- stock GetLanguageKey(langname[], langkey[])
- {
- new
- string[MAX_KEY_CONTENT];
- format(string, 50, "%s_%s", langname, langkey);
- GetGVarString(string, string, MAX_KEY_CONTENT);
- return string;
- }
- stock SetPlayerLanguage(playerid, langname[])
- return format(PlayerLanguage[playerid], MAX_LANGUAGE_NAME, "%s", langname);
- stock GetPlayerLanguage(playerid)
- return PlayerLanguage[playerid];
- stock SendLanguageMessage(playerid, color, langkey[])
- return SendClientMessage(playerid, color, GetLanguageKey(GetPlayerLanguage(playerid), langkey));
- stock SendLanguageMessageToAll(color, langkey[])
- {
- foreach(Player, u)
- SendLanguageMessage(u, color, langkey);
- return true;
- }
- stock MySQL_ConnectToServer()
- {
- MySQL_Handle = mysql_connect(MYSQL_SERVER, MYSQL_USERNAME, MYSQL_DATABASE, MYSQL_PASSWORD);
- if(mysql_errno() != 0)
- {
- printf("MySQL: Connecting to \"%s\" database was not successful.", MYSQL_DATABASE);
- SendRconCommand("exit");
- }
- else
- {
- printf("MySQL: Successfuly connected to \"%s\" database.", MYSQL_DATABASE);
- LoadLanguages();
- }
- return true;
- }
- stock LoadLanguages()
- {
- LoadLanguage(LANG_ENGLISH);
- LoadLanguage(LANG_CROATIAN);
- return true;
- }
- main() { }
- public OnGameModeInit()
- {
- SetGameModeText("Blank Script");
- AddPlayerClass(59, 1958.3783, 1343.1572, 15.3746, 269.1425, 0, 0, 0, 0, 0, 0);
- MySQL_ConnectToServer();
- return true;
- }
- public OnPlayerConnect(playerid)
- {
- SetPlayerLanguage(playerid, LANG_ENGLISH);
- return true;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement