Advertisement
Guest User

ML v1.0

a guest
Dec 24th, 2014
303
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pawn 5.85 KB | None | 0 0
  1. /*============================================================================*\
  2. |*                  Multilingual system by White_116                          *|
  3. |*              Version: 1.0            Date: 23.12.2014                      *|
  4. \*============================================================================*/
  5. #include <a_samp>
  6.  
  7. #if defined _ML_included
  8.     #endinput
  9. #endif
  10. #define _ML_included
  11. /*============================================================================*\
  12. |*                              Настройки                                    *|
  13. \*============================================================================*/
  14. #define MAX_ML_CHARACTER            32000       //Количество символов для хранения текстов, оставляйте запас для правки текста без перекомпилирования проекта.
  15. #define MAX_ML_BUFFER_CHARACTER     (1024*8)    //Количество символов для хранения текста в буффере считанного из файла, не трогаем стек...
  16.  
  17. stock ML_Text_Files[][] =                       //Расположений файлов локализации, корневая папка "scriptfiles"
  18. {
  19.     "Languages/rus.lng",                        //Первый файл желательно делать системным (по умолчанию)
  20.     "Languages/eng.lng"
  21. };
  22.  
  23. #include "../scriptfiles/Languages/rus.lng"     //Системный файл локализации (эталон структуры), обязательно должен лежать по данному пути!
  24. //============================================================================//
  25. //============================================================================//
  26. //============================================================================//
  27. stock ML_Text_Buffer[MAX_ML_CHARACTER];
  28. stock ML_Text_Buffer_2[MAX_ML_BUFFER_CHARACTER];
  29. stock ML_Text_Buffer_Len = 0;
  30. stock ML_Text_Char_Pos[sizeof(ML_Text_Files)+1][E_Lng];
  31. stock ML_Text_Player[MAX_PLAYERS char];
  32. //============================================================================//
  33. #define ML_Text(%0,%1) ML_Text_Buffer[ML_Text_Char_Pos[%0][%1]]
  34. #define ML_Player_Text(%0,%1) ML_Text_Buffer[ML_Text_Char_Pos[ML_Text_Player{%0}][%1]]
  35. //============================================================================//
  36. stock ML_S_Text(language, E_Lng:text, source[], len = sizeof(source))
  37. {
  38.     if(-1 < language < sizeof(ML_Text_Files))
  39.     {
  40.         return memcpy(source, ML_Text(language, text), 0, strlen(ML_Text(language, text)) * 4, len);
  41.     }
  42.     return false;
  43. }
  44. //============================================================================//
  45. stock ML_S_Player_Text(playerid, E_Lng:text, source[], len = sizeof(source))
  46. {
  47.     return memcpy(source, ML_Player_Text(playerid, text), 0, strlen(ML_Player_Text(playerid, text)) * 4, len);
  48. }
  49. //============================================================================//
  50. stock ML_SetPlayerLanguage(playerid, language)
  51. {
  52.     if(-1 < playerid < MAX_PLAYERS)
  53.     {
  54.         if(-1 < language < sizeof(ML_Text_Files))
  55.         {
  56.             ML_Text_Player{playerid} = language;
  57.             return true;
  58.         }
  59.     }
  60.     return false;
  61. }
  62. //============================================================================//
  63. forward ML_Load();
  64. public ML_Load()
  65. {
  66.     new len = 0;
  67.     new find_pos = 0;
  68.     ML_Text_Buffer_Len = 0;
  69.     for(new ln = 0; ln < sizeof(ML_Text_Files); ln++)
  70.     {
  71.         ML_Text_Char_Pos[ln] = ML_Text_Char_Pos[sizeof(ML_Text_Files)];
  72.         new valid_file = 0;
  73.         new buff_len = 0;
  74.         new File:f_lng = fopen(ML_Text_Files[ln], io_read);
  75.         if(f_lng)
  76.         {
  77.             new text_count = 0;
  78.             for(;;)
  79.             {
  80.                 if((len = fread(f_lng, ML_Text_Buffer_2)))
  81.                 {
  82.                     if((find_pos = strfind(ML_Text_Buffer_2, ",//", true)) == -1)
  83.                     {
  84.                         continue;
  85.                     }
  86.                     valid_file = 1;
  87.                     len -= find_pos + 4;
  88.                     if( (buff_len == 0) && ((ML_Text_Buffer_Len + len) < MAX_ML_CHARACTER) )
  89.                     {
  90.                         if(text_count >= sizeof(ML_Text_Char_Pos[]))
  91.                         {
  92.                             valid_file = 2;
  93.                             continue;
  94.                         }
  95.                    
  96.                         memcpy(ML_Text_Buffer, ML_Text_Buffer_2[find_pos+3], ML_Text_Buffer_Len * 4, len * 4, MAX_ML_CHARACTER);
  97.                         if(len <= 1)
  98.                         {
  99.                             ML_Text_Char_Pos[ln][E_Lng:text_count++] = 0;
  100.                         }
  101.                         else
  102.                         {
  103.                             ML_Text_Char_Pos[ln][E_Lng:text_count++] = ML_Text_Buffer_Len;
  104.                         }
  105.                         ML_Text_Buffer[(ML_Text_Buffer_Len += len) - 1] = 0;
  106.                     }
  107.                     else
  108.                     {
  109.                         buff_len += len;
  110.                     }
  111.                 }
  112.                 else
  113.                 {
  114.                     if(buff_len)
  115.                     {
  116.                         printf( "\n=   Файл локализации \"%s\" был загружен частично. Требуется \"#define MAX_ML_CHARACTER %d\"!\n", ML_Text_Files[ln], ML_Text_Buffer_Len + buff_len + 1);
  117.                     }
  118.                     else if(valid_file == 1)
  119.                     {
  120.                         printf( "\n=   Файл локализации \"%s\" успешно загружен.\n", ML_Text_Files[ln]);
  121.                     }
  122.                     else if(valid_file == 2)
  123.                     {
  124.                         printf( "\n=   Файл локализации \"%s\" был загружен частично. Найдены новые тексты - перекомпилируйте проект!\n", ML_Text_Files[ln]);
  125.                     }
  126.                     else
  127.                     {
  128.                         printf( "\n=   Файл локализации \"%s\" не был загружен!\n", ML_Text_Files[ln]);
  129.                     }
  130.                     break;
  131.                 }
  132.             }
  133.             fclose(f_lng);
  134.         }
  135.         else
  136.         {
  137.             printf( "\n=   Файл локализации \"%s\" не был найден!\n", ML_Text_Files[ln]);
  138.         }
  139.     }
  140.     return;
  141. }
  142. //============================================================================//
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement