Advertisement
Guest User

language_sql

a guest
Nov 18th, 2015
253
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pawn 6.22 KB | None | 0 0
  1. /*  language_sql.pwn
  2.  *
  3.  *  (c) Copyright 2015, Emilijo "Correlli" Lovrich
  4.  *
  5.  *  Credits: - Incognito for GVar plugin,
  6.  *           - BlueG/GStylezzz for MySQL plugin,
  7.  *           - Y_Less for foreach/iterator.
  8. */
  9.  
  10. #include "a_samp"
  11. #include "a_mysql"
  12. #include "foreach"
  13. #include "gvar"
  14.  
  15. #define MYSQL_SERVER                                                            ("localhost")
  16. #define MYSQL_USERNAME                                                          ("root")
  17. #define MYSQL_PASSWORD                                                          ("")
  18. #define MYSQL_DATABASE                                                          ("smf")
  19. #define MYSQL_LANGUAGE_TABLE                                                    ("serverlanguages")
  20.  
  21. #define MAX_LANGUAGE_NAME                                                       (24)
  22. #define MAX_KEY_NAME                                                            (24)
  23. #define MAX_KEY_CONTENT                                                         (128)
  24. #define MAX_COMMENT_CONTENT                                                     (64)
  25.  
  26. #define LANG_ENGLISH                                                            ("English")     // English.
  27. #define LANG_CROATIAN                                                           ("Hrvatski")    // Croatian.
  28.  
  29. //#define LANG_DBG_MSG
  30.  
  31. new
  32.         FALSE = 0, MySQL_Handle, PlayerLanguage[MAX_PLAYERS][MAX_LANGUAGE_NAME];
  33.  
  34. #define SendLanguageMessageEx(%0,%1,%2,%3) \
  35. do \
  36. { \
  37.     new \
  38.             _string[128]; \
  39.     if(strlen(%2) > 0) \
  40.     { \
  41.         format(_string, 128, "%s", GetLanguageKey(GetPlayerLanguage(%0), %2)); \
  42.         format(_string, 128, _string, %3); \
  43.         SendClientMessage(%0, %1, _string); \
  44.     } \
  45. } \
  46. while(FALSE)
  47.  
  48. #define SendLanguageMessageToAllEx(%0,%1,%2) \
  49. do \
  50. { \
  51.     new \
  52.             _string[128]; \
  53.     if(strlen(%1) > 0) \
  54.     { \
  55.         foreach(Player, x) \
  56.         { \
  57.             format(_string, 128, "%s", GetLanguageKey(GetPlayerLanguage(x), %1)); \
  58.             format(_string, 128, _string, %2); \
  59.             SendClientMessage(x, %0, _string); \
  60.         } \
  61.     } \
  62. } \
  63. while(FALSE)
  64.  
  65. #define LoadLanguage(%0) \
  66.     LoadLanguageTexts(%0)
  67.  
  68. stock LoadLanguageTexts(langname[])
  69. {
  70.     if(strlen(langname) > MAX_LANGUAGE_NAME)
  71.     {
  72.         #if defined LANG_DBG_MSG
  73.             printf("Error: Name of the language \"%s\" is too long, name limit is %i characters!", langname, MAX_LANGUAGE_NAME);
  74.         #endif
  75.         return false;
  76.     }
  77.     new
  78.             string[128];
  79.     format(string, 128, "SELECT `lang_key`, `content` FROM `%s_%s` WHERE `lang_name` = '%s'",
  80.         MYSQL_DATABASE,
  81.         MYSQL_LANGUAGE_TABLE,
  82.         langname
  83.     );
  84.     mysql_function_query(MySQL_Handle, string, true, "OnLanguageLoad", "s", langname);
  85.     return true;
  86. }
  87.  
  88. forward OnLanguageLoad(langname[]);
  89. public OnLanguageLoad(langname[])
  90. {
  91.     new
  92.             rows, fields;
  93.     cache_get_data(rows, fields);
  94.     if(rows)
  95.     {
  96.         new
  97.                 data[MAX_KEY_CONTENT], string[50];
  98.         for(new a = 0; a < rows; a++)
  99.         {
  100.             // lang_key
  101.             cache_get_row(a, 0, data);
  102.             format(string, 50, "%s_%s", langname, data);
  103.             // content
  104.             cache_get_row(a, 1, data);
  105.             SetGVarString(string, data);
  106.         }
  107.     }
  108.     return true;
  109. }
  110.  
  111. stock AddLanguageKey(langname[], langkey[], content[], comment[])
  112. {
  113.     if(strlen(langname) > MAX_LANGUAGE_NAME)
  114.     {
  115.         #if defined LANG_DBG_MSG
  116.             printf("Error: Name of the language \"%s\" is too long, name limit is %i characters!", langname, MAX_LANGUAGE_NAME);
  117.         #endif
  118.         return -1;
  119.     }
  120.     if(strlen(langkey) > MAX_KEY_NAME)
  121.     {
  122.         #if defined LANG_DBG_MSG
  123.             printf("Error: Name of the language key \"%s\" for language \"%s\" is too long, name limit is %i characters!", langkey, langname, MAX_KEY_NAME);
  124.         #endif
  125.         return -2;
  126.     }
  127.     if(strlen(content) > MAX_KEY_CONTENT)
  128.     {
  129.         #if defined LANG_DBG_MSG
  130.             printf("Error: Language key content at key \"%s\" for language \"%s\" is too long, content limit is %i characters!", langkey, langname, MAX_KEY_CONTENT);
  131.         #endif
  132.         return -3;
  133.     }
  134.     if(strlen(comment) > MAX_COMMENT_CONTENT)
  135.     {
  136.         #if defined LANG_DBG_MSG
  137.             printf("Error: Language key comment at key \"%s\" for language \"%s\" is too long, comment limit is %i characters!", langkey, langname, MAX_COMMENT_CONTENT);
  138.         #endif
  139.         return -4;
  140.     }
  141.     new
  142.             string[144];
  143.     format(string, 144, "SELECT * FROM `%s_%s` WHERE `lang_name` = '%s' AND `lang_key` = '%s'",
  144.         MYSQL_DATABASE,
  145.         MYSQL_LANGUAGE_TABLE,
  146.         langname,
  147.         langkey
  148.     );
  149.     mysql_function_query(MySQL_Handle, string, true, "OnLanguageKeyAdd", "ssss", langname, langkey, content, comment);
  150.     return true;
  151. }
  152.  
  153. forward OnLanguageKeyAdd(langname[], langkey[], content[], comment[]);
  154. public OnLanguageKeyAdd(langname[], langkey[], content[], comment[])
  155. {
  156.     new
  157.             rows, fields;
  158.     cache_get_data(rows, fields);
  159.     if(!rows)
  160.     {
  161.         new
  162.                 string[368];
  163.         format(string, 368, "INSERT INTO `%s_%s` (`lang_name`, `lang_key`, `content`, `comment`) VALUES ('%s', '%s', '%s', '%s')",
  164.             MYSQL_DATABASE,
  165.             MYSQL_LANGUAGE_TABLE,
  166.             langname,
  167.             langkey,
  168.             content,
  169.             comment
  170.         );
  171.         mysql_function_query(MySQL_Handle, string, false, "", "");
  172.         format(string, 50, "%s_%s", langname, langkey);
  173.         SetGVarString(string, content);
  174.     }
  175.     else
  176.     {
  177.         #if defined LANG_DBG_MSG
  178.             printf("Error: Language key already exists for the language: AddLanguageKey(\"%s\", \"%s\", ..., ...);", langname, langkey);
  179.         #endif
  180.     }
  181.     return true;
  182. }
  183.  
  184. stock GetLanguageKey(langname[], langkey[])
  185. {
  186.     new
  187.             string[MAX_KEY_CONTENT];
  188.     format(string, 50, "%s_%s", langname, langkey);
  189.     GetGVarString(string, string, MAX_KEY_CONTENT);
  190.     return string;
  191. }
  192.  
  193. stock SetPlayerLanguage(playerid, langname[])
  194.     return format(PlayerLanguage[playerid], MAX_LANGUAGE_NAME, "%s", langname);
  195.  
  196. stock GetPlayerLanguage(playerid)
  197.     return PlayerLanguage[playerid];
  198.  
  199. stock SendLanguageMessage(playerid, color, langkey[])
  200.     return SendClientMessage(playerid, color, GetLanguageKey(GetPlayerLanguage(playerid), langkey));
  201.  
  202. stock SendLanguageMessageToAll(color, langkey[])
  203. {
  204.     foreach(Player, u)
  205.         SendLanguageMessage(u, color, langkey);
  206.     return true;
  207. }
  208.  
  209. stock MySQL_ConnectToServer()
  210. {
  211.     MySQL_Handle = mysql_connect(MYSQL_SERVER, MYSQL_USERNAME, MYSQL_DATABASE, MYSQL_PASSWORD);
  212.     if(mysql_errno() != 0)
  213.     {
  214.         printf("MySQL: Connecting to \"%s\" database was not successful.", MYSQL_DATABASE);
  215.         SendRconCommand("exit");
  216.     }
  217.     else
  218.     {
  219.         printf("MySQL: Successfuly connected to \"%s\" database.", MYSQL_DATABASE);
  220.         LoadLanguages();
  221.     }
  222.     return true;
  223. }
  224.  
  225. stock LoadLanguages()
  226. {
  227.     LoadLanguage(LANG_ENGLISH);
  228.     LoadLanguage(LANG_CROATIAN);
  229.     return true;
  230. }
  231.  
  232. main() { }
  233.  
  234. public OnGameModeInit()
  235. {
  236.     SetGameModeText("Blank Script");
  237.  
  238.     AddPlayerClass(59, 1958.3783, 1343.1572, 15.3746, 269.1425, 0, 0, 0, 0, 0, 0);
  239.  
  240.     MySQL_ConnectToServer();
  241.     return true;
  242. }
  243.  
  244. public OnPlayerConnect(playerid)
  245. {
  246.     SetPlayerLanguage(playerid, LANG_ENGLISH);
  247.     return true;
  248. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement