[Урок] Мультиязычность сервера - Форум Cheat-Master.ru
  • Страница 1 из 1
  • 1
Модератор форума: Phoenixxx_Czar, Getbackthere, [CM]OlegEhtler  
[Урок] Мультиязычность сервера
Амасинк Дата: Суббота, 05.09.2015, 18:29 | Сообщение # 1
Боец
Сообщений: 267
Статус: Offline
На днях нашел старый мод, решил продолжить его разработку. Примерно 2 года назад планировал открыть сервер Drift, где смогли бы играть как русско-говорящие игроки, так и англо-говорящие, но разработка прекратилась. В общем, не буду расписывать всякие речи, опишу всё кратко и ясно.

Показываю на примере диалога (можно так-же сделать и на SCM, особо много заморочек нету).

Создаём define для языков (в начало мода):

Код

#define LANG_RU                     0        // Русский язык
#define LANG_EN      1        // Английский язык


Создаём сток ShowLangDialog:

Код

stock ShowLangDialog(playerid, id, style, up[], up2[], msg[], msg2[], ok[], ok2[], cancel[], cancel2[])
{
    if(PlayerInfo[playerid][Local] == LANG_EN)
    {
     ShowPlayerDialogEx(playerid, id, style, up2, msg2, ok2, cancel2);
    }
    else
    {
     ShowPlayerDialogEx(playerid, id, style, up, msg, ok, cancel);
    }
    return 1;
}


Теперь разберём это:
При заходе на сервере мы сделаем, чтобы у нас запрашивали язык. Если английский - LANG_EN, и из диалога будут выводится данные, которые записаны под (up2, msg2, ok2, cancel2), если русский, то под (up, msg, ok, cancel). Разберём под примером.


Код

ShowLangDialog(playerid, 0000, DIALOG_STYLE_MSGBOX, "{ffffaa}О сервере", "{ffffaa}About", "{ffffff}Временно пусто", "{ffffff}Temporarily empty", "Ок", "Назад", "Ok", "Cancel");


Мы заполняем сам диалог по шаблону: Шапка на русском, Шапка на английском, Содержание на русском, содержание на английском. Далее идут 4 кнопки, которые чередуются как Русский, Англ, Русский, Англ.

Теперь мы сделаем выбор языка. Где и как - решать вам, я дам лишь наводку.
Допустим мы авторизовались, заспавнились. Вызываем паблик ShowSelectLang.

Код

public ShowSelectLang(playerid)
{
    ShowPlayerDialogEx(playerid, 1, DIALOG_STYLE_MSGBOX, "{ffffaa}Название сервера", "{ffffff}Please, select your language", "Русский", "English");
    return 1;
}


Функция диалога (если Русский - Local = 0, Если English - Local = 1)
Код

   if(dialogid == 1)  
{  
if(response) PlayerInfo[playerid][Local] = 0;  
else PlayerInfo[playerid][Local] = 1;  
SendMarkedMessage(playerid, "Хорошо! Ваш язык Русский ;)", "Ok! Your language is English ;)");  
return 1;  
}


При дисконнекте обнуляем Local.

Код
PlayerInfo[playerid][Local] = 0;


Кто чисто под копирку - функция SendMarkedMessage (служит примером вывода сообщений):

Код

stock SendMarkedMessage(playerid, msg[], msg2[])
{
    new str[512];
    if(PlayerInfo[playerid][Local] == LANG_EN)
    {
     format(str, 512, "Name: {ffffff}%s", msg2);
    }
    else
    {
     format(str, 512, "Name: {ffffff}%s", msg);
    }
    SendClientMessage(playerid, 0x77ff00aa, str);
    return 1;
}


У кого нету ShowPlayerDialogEx:

Код

stock ShowPlayerDialogEx(playerid, id, style, up[], msg[], ok[], cancel[])
{
SetPVarInt(playerid, "dialog_id", id);
ShowPlayerDialog(playerid, id, style, up, msg, ok, cancel);
return 1;
}


Возможно в коде есть ошибки в диалоге с выбором языка.


Помогаю новичкам в pawn

Сообщение отредактировал Амасинк - Воскресенье, 06.09.2015, 13:51
[CM]Kingster Дата: Суббота, 05.09.2015, 18:48 | Сообщение # 2
Боец
Сообщений: 245
Статус: Offline
Не плохо, только для готовых модов уже не очень пойдет, так как придется переписывать все диалоги )
Дал плюсик.


Пользователь Cheat - Master уже 400 дней.

Я в Контакте - vk.com/buddy_fly
Амасинк Дата: Суббота, 05.09.2015, 18:50 | Сообщение # 3
Боец
Сообщений: 267
Статус: Offline
[CM]Kingster, да, я щас сносил эти диалоги, около 2х часов потратил).
А если писать каждый диалог, думаю пару дней потратят, так что это хорошо использовать во время написания мода с 0 smile


Помогаю новичкам в pawn
Simon4ik228 Дата: Суббота, 19.09.2015, 12:44 | Сообщение # 4
Боец
Сообщений: 237
Статус: Offline
Не плохо, молодец
Амасинк Дата: Суббота, 24.10.2015, 22:25 | Сообщение # 5
Боец
Сообщений: 267
Статус: Offline
Подниму

Помогаю новичкам в pawn
  • Страница 1 из 1
  • 1
Поиск: