Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*============================================================================*\
- |* Multilingual system by White_116 *|
- |* Version: 1.0 Date: 23.12.2014 *|
- \*============================================================================*/
- #include <a_samp>
- #if defined _ML_included
- #endinput
- #endif
- #define _ML_included
- /*============================================================================*\
- |* Настройки *|
- \*============================================================================*/
- #define MAX_ML_CHARACTER 32000 //Количество символов для хранения текстов, оставляйте запас для правки текста без перекомпилирования проекта.
- #define MAX_ML_BUFFER_CHARACTER (1024*8) //Количество символов для хранения текста в буффере считанного из файла, не трогаем стек...
- stock ML_Text_Files[][] = //Расположений файлов локализации, корневая папка "scriptfiles"
- {
- "Languages/rus.lng", //Первый файл желательно делать системным (по умолчанию)
- "Languages/eng.lng"
- };
- #include "../scriptfiles/Languages/rus.lng" //Системный файл локализации (эталон структуры), обязательно должен лежать по данному пути!
- //============================================================================//
- //============================================================================//
- //============================================================================//
- stock ML_Text_Buffer[MAX_ML_CHARACTER];
- stock ML_Text_Buffer_2[MAX_ML_BUFFER_CHARACTER];
- stock ML_Text_Buffer_Len = 0;
- stock ML_Text_Char_Pos[sizeof(ML_Text_Files)+1][E_Lng];
- stock ML_Text_Player[MAX_PLAYERS char];
- //============================================================================//
- #define ML_Text(%0,%1) ML_Text_Buffer[ML_Text_Char_Pos[%0][%1]]
- #define ML_Player_Text(%0,%1) ML_Text_Buffer[ML_Text_Char_Pos[ML_Text_Player{%0}][%1]]
- //============================================================================//
- stock ML_S_Text(language, E_Lng:text, source[], len = sizeof(source))
- {
- if(-1 < language < sizeof(ML_Text_Files))
- {
- return memcpy(source, ML_Text(language, text), 0, strlen(ML_Text(language, text)) * 4, len);
- }
- return false;
- }
- //============================================================================//
- stock ML_S_Player_Text(playerid, E_Lng:text, source[], len = sizeof(source))
- {
- return memcpy(source, ML_Player_Text(playerid, text), 0, strlen(ML_Player_Text(playerid, text)) * 4, len);
- }
- //============================================================================//
- stock ML_SetPlayerLanguage(playerid, language)
- {
- if(-1 < playerid < MAX_PLAYERS)
- {
- if(-1 < language < sizeof(ML_Text_Files))
- {
- ML_Text_Player{playerid} = language;
- return true;
- }
- }
- return false;
- }
- //============================================================================//
- forward ML_Load();
- public ML_Load()
- {
- new len = 0;
- new find_pos = 0;
- ML_Text_Buffer_Len = 0;
- for(new ln = 0; ln < sizeof(ML_Text_Files); ln++)
- {
- ML_Text_Char_Pos[ln] = ML_Text_Char_Pos[sizeof(ML_Text_Files)];
- new valid_file = 0;
- new buff_len = 0;
- new File:f_lng = fopen(ML_Text_Files[ln], io_read);
- if(f_lng)
- {
- new text_count = 0;
- for(;;)
- {
- if((len = fread(f_lng, ML_Text_Buffer_2)))
- {
- if((find_pos = strfind(ML_Text_Buffer_2, ",//", true)) == -1)
- {
- continue;
- }
- valid_file = 1;
- len -= find_pos + 4;
- if( (buff_len == 0) && ((ML_Text_Buffer_Len + len) < MAX_ML_CHARACTER) )
- {
- if(text_count >= sizeof(ML_Text_Char_Pos[]))
- {
- valid_file = 2;
- continue;
- }
- memcpy(ML_Text_Buffer, ML_Text_Buffer_2[find_pos+3], ML_Text_Buffer_Len * 4, len * 4, MAX_ML_CHARACTER);
- if(len <= 1)
- {
- ML_Text_Char_Pos[ln][E_Lng:text_count++] = 0;
- }
- else
- {
- ML_Text_Char_Pos[ln][E_Lng:text_count++] = ML_Text_Buffer_Len;
- }
- ML_Text_Buffer[(ML_Text_Buffer_Len += len) - 1] = 0;
- }
- else
- {
- buff_len += len;
- }
- }
- else
- {
- if(buff_len)
- {
- printf( "\n= Файл локализации \"%s\" был загружен частично. Требуется \"#define MAX_ML_CHARACTER %d\"!\n", ML_Text_Files[ln], ML_Text_Buffer_Len + buff_len + 1);
- }
- else if(valid_file == 1)
- {
- printf( "\n= Файл локализации \"%s\" успешно загружен.\n", ML_Text_Files[ln]);
- }
- else if(valid_file == 2)
- {
- printf( "\n= Файл локализации \"%s\" был загружен частично. Найдены новые тексты - перекомпилируйте проект!\n", ML_Text_Files[ln]);
- }
- else
- {
- printf( "\n= Файл локализации \"%s\" не был загружен!\n", ML_Text_Files[ln]);
- }
- break;
- }
- }
- fclose(f_lng);
- }
- else
- {
- printf( "\n= Файл локализации \"%s\" не был найден!\n", ML_Text_Files[ln]);
- }
- }
- return;
- }
- //============================================================================//
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement