Добро пожаловать на Pro Pawn - Портал о PAWN-скриптинге.
Страница 1 из 3 1 2 3 ПоследняяПоследняя
Показано с 1 по 10 из 25
  1. #1
    Аватар для ziggi
    Проверенный

    Статус
    Оффлайн
    Регистрация
    14.05.2015
    Сообщений
    1,181
    Репутация:
    790 ±

    zlang - языковая система для каждого игрока на основе GVar

    zlang
    GitHub

    Описание
    Языковая система для каждого игрока на основе GVar.

    Требования
    - Плагин GVar
    - foreach - не обязательно, но желательно

    Библиотеки, совместимые с zlang
    - mdialog - новый вид для функций Dialog_Open, Dialog_Message и Dialog_MessageEx.

    Константы
    Константа Значение по умолчанию Можно переназначить?
    MAX_LANGS 2 Да
    LANG_VAR_OFFSET 1000 Да
    LANG_IGNORED_FIRST_SYMBOL '\0', '#', ';' Да
    MAX_LANG_VAR_STRING 64 Да
    MAX_LANG_VALUE_STRING 144 Да
    MAX_LANG_SEPARATOR_STRING 64 Да
    MAX_LANG_MVALUE_STRING MAX_LANG_VALUE_STRING * 25 Да
    MAX_LANG_CODE 2 Да
    MAX_LANG_NAME 16 Да
    MAX_LANG_FILES 5 Да
    MAX_LANG_FILENAME 256 Да
    INVALID_LANG_ID Lang:-1 Нет
    INVALID_LANG_FILE_ID -1 Нет

    Функции

    Добавить язык
    1. Lang:Lang_Add(code[], name[])


    Удалить язык
    1. Lang_Remove(Lang:lang)


    Загрузить языковой файл
    1. Lang_LoadFile(Lang:lang, filename[])


    Выгрузить языковой файл
    1. Lang_UnloadFile(Lang:lang, filename[] = "", fid = INVALID_LANG_FILE_ID)


    Перезагрузить все языковые файлы для языка
    1. Lang_Reload(Lang:lang)


    Получить язык по его коду или имени
    1. Lang:Lang_Get(code[] = "", name[] = "")


    Установить название языка
    1. Lang_SetName(Lang:lang, name[])


    Получить название языка
    1. Lang_GetName(Lang:lang, name[], const size = sizeof(name))


    Получить название языка и возвратить его
    1. Lang_ReturnName(Lang:lang)


    Установить код языка
    1. Lang_SetCode(Lang:lang, code[])


    Получить код языка
    1. Lang_GetCode(Lang:lang, code[], const size = sizeof(code))


    Получить код языка и возвратить его
    1. Lang_ReturnCode(Lang:lang)


    Получить строку языковых кодов, разделённых символов separator
    1. Lang_GetCodes(result[], const size = sizeof(result), const separator = '/', const bool:isuppercase = false)


    Получить строку языковых кодов и вернуть её
    1. Lang_ReturnCodes(const separator = '/', const bool:isuppercase = false)


    Проверить язык на валидность
    1. Lang_IsValid(Lang:lang)


    Получить количество языков
    1. Lang_GetCount()


    Установить язык игроку
    1. Lang_SetPlayerLang(playerid, Lang:lang)


    Получить язык игрока
    1. Lang:Lang_GetPlayerLang(playerid)


    Установить язык игроку по коду
    1. Lang:Lang_SetPlayerLangByCode(playerid, code[])


    Установить язык игроку по названию
    1. Lang:Lang_SetPlayerLangByName(playerid, name[])


    Установить язык по умолчанию
    1. Lang_SetDefaultLang(Lang:lang)


    Получить язык по умолчанию
    1. Lang_GetDefaultLang()


    Получить языковой текст
    1. Lang_GetText(Lang:lang, var[], text[], const size = sizeof(text), {Float, _}:...)


    Получить языковой текст для игрока
    1. Lang_GetPlayerText(playerid, var[], text[], const size = sizeof(text), {Float, _}:...)


    Получить языковой текст для языка по умлочанию
    1. Lang_GetDefaultText(var[], text[], const size = sizeof(text), {Float, _}:...)


    Удалить языковой текст
    1. Lang_RemoveText(Lang:lang, var[])


    Проверить существование языкового текста
    1. Lang_IsTextExists(Lang:lang, var[])


    Языковая функция printf с языком по умолчанию
    1. Lang_printf(var[], {Float, _}:...)


    Языковая функция printf с определённым языком
    1. Lang_printfex(Lang:lang, var[], {Float, _}:...)


    Языковая функция print с языком по умолчанию
    1. Lang_print(var[])


    Языковая функция print с определённым языком
    1. Lang_printex(Lang:lang, var[])


    Отправить языковой текст игроку
    1. Lang_SendText(playerid, var[], {Float, _}:...)


    Отправить языковой текст всем игрокам
    1. Lang_SendTextToAll(var[], {Float, _}:...)


    Отправить языковой текст всем игрокам в массиве
    1. Lang_SendTextToPlayers(players[], var[], {Float, _}:...)


    Показать языковой диалог для игрока
    1. Lang_ShowDialog(playerid, dialogid, style, var_caption[], var_info[], var_button1[], var_button2[], {Float, _}:...)


    Показать языковой GameText для игрока
    1. Lang_GameText(playerid, time, style, var[], {Float, _}:...)


    Показать языковой GameText для всех игроков
    1. Lang_GameTextForAll(time, style, var[], {Float, _}:...)


    Создаёт TextDraw игрока с языковой переменной
    1. Lang_CreatePlayerTextDraw(playerid, Float:x, Float:y, var[], {Float, _}:...)


    Устанавливает языковой текст для TextDraw игрока
    1. Lang_PlayerTextDrawSetString(playerid, PlayerText:text, var[], {Float, _}:...)


    Формат языкового файла
    Формат языкового файла представляет из себя обычный INI файл (без секций). Поддерживаются различные спецсимволы, такие как: \n, \t, \%, \s, \\, \<число>, \x<hex>.

    Переменные
    Вы можете использовать переменные в ваших текстовых файлах. Это поддерживает любой уровень вложенности.
    1. HELLO_MSG = Hello
    2. COLOR_RED = {FF0000}
    3. COLOR_GREEN = {00FF00}
    4. COLOR_WHITE = {FFFFFF}
    5. NAME_ONE = \v(COLOR_RED)Alex\v(COLOR_WHITE)
    6. NAME_TWO = \v(COLOR_GREEN)Peter\v(COLOR_WHITE)
    7. MESSAGE_HELLO = \v(COLOR_WHITE)\v(HELLO_MSG) \v(NAME_ONE) and \v(NAME_TWO)


    Пример использования
    1. #include <a_samp>
    2. #include <gvar>
    3. #include <zlang>
    4.  
    5. enum e_LANG_INFO {
    6. Lang:e_LANG_EN,
    7. Lang:e_LANG_RU,
    8. }
    9.  
    10. static
    11. gLang[e_LANG_INFO];
    12.  
    13. main() {}
    14.  
    15. {
    16. // загрузить языки
    17. gLang[e_LANG_RU] = Lang_Add("ru", "Russian");
    18. gLang[e_LANG_EN] = Lang_Add("en", "English");
    19.  
    20. Lang_LoadFile(gLang[e_LANG_RU], "ru.ini");
    21. Lang_LoadFile(gLang[e_LANG_EN], "en.ini");
    22.  
    23. // установить английский как язык по умлочанию
    24. Lang_SetDefaultLang(gLang[e_LANG_EN]);
    25. return 1;
    26. }
    27.  
    28. public OnPlayerCommandText(playerid, cmdtext[])
    29. {
    30. if (strcmp(cmdtext, "/ru", true, 3) == 0) {
    31. Lang_SetPlayerLang(playerid, gLang[e_LANG_RU]);
    32. Lang_SendText(playerid, "LANGUAGE_CHANGED");
    33. return 1;
    34. }
    35.  
    36. if (strcmp(cmdtext, "/en", true, 3) == 0) {
    37. Lang_SetPlayerLang(playerid, gLang[e_LANG_EN]);
    38. Lang_SendText(playerid, "LANGUAGE_CHANGED");
    39. return 1;
    40. }
    41.  
    42. if (strcmp(cmdtext, "/help", true, 5) == 0) {
    43. Lang_SendText(playerid, "HELLO_MSG");
    44. Lang_SendText(playerid, "COMMANDS_LIST");
    45. return 1;
    46. }
    47.  
    48. if (strcmp(cmdtext, "/help330", true, 5) == 0) {
    49. Lang_SendText(playerid, "Hello, World!");
    50. Lang_SendText(playerid, "Commands: /help, /en, /ru");
    51. return 1;
    52. }
    53.  
    54. return 0;
    55. }


    scriptfiles/en.ini:
    1. COLOR_GRAY = {CCCCCC}
    2. LANGUAGE_CHANGED = \v(COLOR_GRAY)Now you are using english language.
    3. HELLO_MSG = Hello, {00FF00}World!
    4. COMMANDS_LIST = Commands: /help, /en, /ru


    scriptfiles/ru.ini:
    1. COLOR_GRAY = {CCCCCC}
    2. LANGUAGE_CHANGED = \v(COLOR_GRAY)Теперь вы используете русский язык.
    3. HELLO_MSG = Привет, {00FF00}Мир!
    4. COMMANDS_LIST = Команды: /help, /en, /ru
    5. # in zlang 3.3.0
    6. Hello, World! = \v(HELLO_MSG)
    7. Commands: /help, /en, /ru = \v(COMMANDS_LIST)


    Скачать
    Последний раз редактировалось ziggi; 21.03.2018 в 22:41.

  2. 8 пользователя(ей) сказали cпасибо:
    BadPawn (05.09.2016) DeimoS (05.09.2016) Desulaid (05.09.2016) Geebrox (07.12.2016) Nash_Brigers (04.09.2016) Osetin (07.09.2016) vovandolg (06.09.2016) [ForD] (15.12.2016)
  3. #2
    Аватар для vasyok28
    Пользователь

    Статус
    Оффлайн
    Регистрация
    15.08.2015
    Сообщений
    106
    Репутация:
    8 ±
    Годно! Возьму себе
    upd время компиляции не увеличит сильно?
    Последний раз редактировалось vasyok28; 04.09.2016 в 23:12.

  4. #3
    Аватар для ziggi
    Проверенный

    Статус
    Оффлайн
    Регистрация
    14.05.2015
    Сообщений
    1,181
    Репутация:
    790 ±
    Цитата Сообщение от vasyok28 Посмотреть сообщение
    Годно! Возьму себе
    upd время компиляции не увеличит сильно?
    Сильно не увеличит.

  5. #4
    Аватар для vovandolg
    Пользователь

    Статус
    Оффлайн
    Регистрация
    17.11.2015
    Адрес
    Stavropol
    Сообщений
    1,369
    Репутация:
    113 ±
    Не по теме, но..
    - mdialog - новый вид для функций Dialog_Open, Dialog_Message и Dialog_MessageEx.
    Я так понял эти манёвры в коде для удобного чтения/редактирования были сделаны?
    Или в этом всё таки есть + к быстродействию?
    [Anticheat]___Invisible Fly Hack
    [Anticheat]____Weapon/Ammo Hack
    [Function]______ResetPlayerWeaponSlot
    [Function]_______FIX_SetPlayerAmmo
    [ServerMod]______TDM | Zombie Apokalypse

  6. #5
    Аватар для ziggi
    Проверенный

    Статус
    Оффлайн
    Регистрация
    14.05.2015
    Сообщений
    1,181
    Репутация:
    790 ±
    Цитата Сообщение от vovandolg Посмотреть сообщение
    Я так понял эти манёвры в коде для удобного чтения/редактирования были сделаны?
    Или в этом всё таки есть + к быстродействию?
    Цель была одна - упростить написание диалогов и расположение их по разным файлам, в стиле zcmd. Плюс к быстродействию возможен при большом количестве диалогов, но я это не тестировал и не собираюсь.

    P.S. Скоро создам отдельную тему для этой библиотеки.

  7. Пользователь сказал cпасибо:
    vovandolg (07.09.2016)
  8. #6
    Аватар для DeimoS
    Модератор?

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    Может стоит на sVar перевести?
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

    Широко известно, что идеи стоят 0.8333 цента каждая (исходя из рыночной цены 10 центов за дюжину).
    Великих идей полно, на них нет спроса.
    Воплощение идеи в законченную игру требует долгой работы,
    таланта, терпения и креативности, не говоря уж о затратах денег, времени и ресурсов.
    Предложить идею просто, воплотить – вот в чём проблема

    Steve Pavlina

  9. #7
    Аватар для ziggi
    Проверенный

    Статус
    Оффлайн
    Регистрация
    14.05.2015
    Сообщений
    1,181
    Репутация:
    790 ±
    Цитата Сообщение от DeimoS Посмотреть сообщение
    Может стоит на sVar перевести?
    Версия 1.0 - на SVar, можно использовать её (правда язык глобальный, не по игрокам). Но:
    - SVar значительно медленнее GVar
    - SVar имеет ограничение в 2000 штук (в GVar ограничения нет)
    - В SVar нельзя добавить дополнительный ключ для переменной как в GVar, что при создании языковой системы по игрокам, значительно просадит производительность

    Раньше ещё была версия на property - тот же SVar, только медленнее. Ускорить систему можно разве что изменением строковых ключей на целочисленные, но тогда будет сильная потеря в удобстве. Но, в любом случае, это значительно быстрее y_languages и других подобных библиотек.

  10. Пользователь сказал cпасибо:
    DeimoS (16.12.2016)
  11. #8
    Аватар для Витёк
    Пользователь

    Статус
    Оффлайн
    Регистрация
    26.09.2015
    Сообщений
    215
    Репутация:
    1 ±
    у меня почему-то при подключение выдаёт ошибку
    Код:
    zlang.inc(917) : error 017: undefined symbol "SERVER_VARTYPE_NONE"
    (я так понял что ты какой-то параметр забыл дописать или что)
    Разработка •  • Ч Е Р Н О Б Ы Л Ь •  • Выживание в припяти •

  12. #9
    Аватар для ziggi
    Проверенный

    Статус
    Оффлайн
    Регистрация
    14.05.2015
    Сообщений
    1,181
    Репутация:
    790 ±
    Цитата Сообщение от Витёк Посмотреть сообщение
    у меня почему-то при подключение выдаёт ошибку
    Код:
    zlang.inc(917) : error 017: undefined symbol "SERVER_VARTYPE_NONE"
    (я так понял что ты какой-то параметр забыл дописать или что)
    Я забыл поменять константу от SVar. Поправил.
    Последний раз редактировалось ziggi; 04.01.2017 в 08:03.

  13. #10
    Аватар для Витёк
    Пользователь

    Статус
    Оффлайн
    Регистрация
    26.09.2015
    Сообщений
    215
    Репутация:
    1 ±
    вопрос а как можно 2 кнопку не действовать?
    делал "" она поевляется (и там как я понял еррор) потом добавил в файл
    Код:
    CNOPCA = Ок 
    CNOPCA2 =
    в итоге
    Разработка •  • Ч Е Р Н О Б Ы Л Ь •  • Выживание в припяти •

 

 
Страница 1 из 3 1 2 3 ПоследняяПоследняя

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •