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

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

    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
    Сообщений
    102
    Репутация:
    8 ±
    Годно! Возьму себе
    upd время компиляции не увеличит сильно?
    Последний раз редактировалось vasyok28; 04.09.2016 в 23:12.

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

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

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

    Статус
    Оффлайн
    Регистрация
    17.11.2015
    Адрес
    Stavropol
    Сообщений
    1,367
    Репутация:
    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,104
    Репутация:
    739 ±
    Цитата Сообщение от vovandolg Посмотреть сообщение
    Я так понял эти манёвры в коде для удобного чтения/редактирования были сделаны?
    Или в этом всё таки есть + к быстродействию?
    Цель была одна - упростить написание диалогов и расположение их по разным файлам, в стиле zcmd. Плюс к быстродействию возможен при большом количестве диалогов, но я это не тестировал и не собираюсь.

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

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

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    4,310
    Репутация:
    1612 ±
    Может стоит на sVar перевести?
    Связаться со мной можно в личных сообщениях этой группы

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

    Steve Pavlina

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

    Статус
    Оффлайн
    Регистрация
    14.05.2015
    Сообщений
    1,104
    Репутация:
    739 ±
    Цитата Сообщение от 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,104
    Репутация:
    739 ±
    Цитата Сообщение от Витёк Посмотреть сообщение
    у меня почему-то при подключение выдаёт ошибку
    Код:
    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 из 2 12 ПоследняяПоследняя

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

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

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

Ваши права

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