rustext - русификация игрового текста для множества русификаторов -
ZiGGi - 19.09.2016
Описание
Плагин заменяет символы, передаваемые функциями для работы с TextDraw, Menu и GameText на те, что соответствуют русификатору. Русификатор по умолчанию - SanLtd, но вы можете каждому игроку установить собственный русификатор.
Использование
Просто скопируйте плагин в директорию
plugins/ вашего сервера и добавьте
rustext[.so] (в зависимости от платформы) к ключу
plugins в ваш
server.cfg. Если вы хотите получить дополнительный функционал, то скопируйте
rustext.inc в вашу директорию с библиотеками и добавьте
#include "rustext" в ваш скрипт.
Типы русификаторов
PHP код:
enum RussifierType {
RussifierType_Disabled = -1,
RussifierType_SanLtd = 0,
RussifierType_OneC,
RussifierType_Rush,
RussifierType_Unknown1,
RussifierType_Unknown2,
RussifierType_Unknown3,
RussifierType_MG,
RussifierType_Community,
RussifierType_Ukrainian,
RussifierType_Hungarian,
}
Версии Unknown - это русификаторы в стиле "ПОТРАЧЕНО", просто мне не удалось определить их автора или названия (один из них от Фаргуса, но непонятно какой).
Примеры
Здесь показана работа с русификатором SanLtd:
![](https://cloud.githubusercontent.com/assets/1020099/18914954/db9b4ade-8597-11e6-8d72-783cfd24fb99.png)
Здесь показана работа с украинской локализацией:
Функции
PHP код:
native SetPlayerRussifierType(playerid, RussifierType:type);
native RussifierType:GetPlayerRussifierType(playerid);
native SetDefaultRussifierType(RussifierType:type);
native RussifierType:GetDefaultRussifierType();
Пример использования
Система настройки русификатора для игрока.
PHP код:
#include <a_samp>
#include <rustext>
static
TextRusTD[RussifierType];
const
Float:TEXT_BASE_X = 150.0,
Float:TEXT_BASE_Y = 150.0,
TEXT_RUSSIFIERS_COUNT = 7; // only Russian localizations
public OnGameModeInit()
{
for (new i; i < TEXT_RUSSIFIERS_COUNT; i++) {
TextRusTD[RussifierType:i] = _:TextDrawCreate(TEXT_BASE_X,
TEXT_BASE_Y + 15.0 * i,
"Я могу прочитать этот текст, это мой русификатор");
TextDrawSetSelectable(Text:TextRusTD[RussifierType:i], 1);
TextDrawTextSize(Text:TextRusTD[RussifierType:i], 600.0, 10.0);
}
return 1;
}
public OnPlayerSpawn(playerid)
{
for (new i; i < TEXT_RUSSIFIERS_COUNT; i++) {
SetPlayerRussifierType(playerid, RussifierType:i);
TextDrawShowForPlayer(playerid, Text:TextRusTD[RussifierType:i]);
}
SelectTextDraw(playerid, 0xAA3333FF);
return 1;
}
public OnPlayerClickTextDraw(playerid, Text:clickedid)
{
for (new i; i < TEXT_RUSSIFIERS_COUNT; i++) {
if (TextRusTD[RussifierType:i] == _:clickedid) {
SetPlayerRussifierType(playerid, RussifierType:i);
CancelSelectTextDraw(playerid);
}
TextDrawHideForPlayer(playerid, Text:TextRusTD[RussifierType:i]);
}
return 0;
}
Или вы можете использовать библиотеку
russifier:
Русификаторы- Все поддерживаемые руссификаторы можно скачать здесь, названия файлов соответствуют названиям в плагине.
Скачать
Re: rustext - русификация игрового текста для множества русификаторов -
Diman777 - 20.09.2016
Ну ты крут, уже плагины научился писать, C++ стал изучать давно?
Re: rustext - русификация игрового текста для множества русификаторов -
ZiGGi - 20.09.2016
Quote:
Originally Posted by Diman777
Ну ты крут, уже плагины научился писать, C++ стал изучать давно?
|
Давно, но активным изучением не занимался, ибо мне этот язык не нравится.
Re: rustext - русификация игрового текста для множества русификаторов -
ZiGGi - 26.09.2016
rustext v1.1.0
Поддержка двух новых русификаторов:
- От MG
- Народный
Re: rustext - русификация игрового текста для множества русификаторов -
Mutha_X - 26.09.2016
А можешь прикрепить к каждому в списке поддерживаемых русификаторов провереный источник на них?
Re: rustext - русификация игрового текста для множества русификаторов -
ZiGGi - 26.09.2016
Quote:
Originally Posted by Mutha_X
А можешь прикрепить к каждому в списке поддерживаемых русификаторов провереный источник на них?
|
Русификаторы я сохранил, но некоторые нужно ещё раз проверить, как проверю - опубликую ссылку.
Re: rustext - русификация игрового текста для множества русификаторов -
ZiGGi - 26.09.2016
Quote:
Originally Posted by Mutha_X
А можешь прикрепить к каждому в списке поддерживаемых русификаторов провереный источник на них?
|
Русификаторы можно взять здесь:
https://mega.nz/#F!tVhlhDCT!FK1xFcBalTA0ySY_JsryMg
P.S. Если у вас есть ещё какой-либо русификатор - отправляйте мне, я добавлю его в плагин.
Re: rustext - русификация игрового текста для множества русификаторов -
ZiGGi - 28.09.2016
rustext v1.2.0
- Оптимизация (замена символов без поиска по массиву)
- Добавлена возможность отключить локализацию
- Добавлена поддержка украинской локализации
Re: rustext - русификация игрового текста для множества русификаторов -
Art4D - 04.10.2016
Работает только на player текстдравах? Или можно как-то для каждого игрока выводить текст global текстдрава на своем руссификаторе?
Re: rustext - русификация игрового текста для множества русификаторов -
ZiGGi - 04.10.2016
Quote:
Originally Posted by Art4D
Работает только на player текстдравах? Или можно как-то для каждого игрока выводить текст global текстдрава на своем руссификаторе?
|
Для глобальных TD используется русификатор по умолчанию, который задаётся с помощью SetDefaultRussifierType. И, естественно, глобальный TD для всех игроков одинаковый.
Re: rustext - русификация игрового текста для множества русификаторов -
Diman777 - 15.10.2016
Quote:
Originally Posted by ZiGGi
Давно, но активным изучением не занимался, ибо мне этот язык не нравится.
|
А чем именно не нравится C++? Сложностью?
Ты знаешь, что синтаксис у языка полон разнообразия, всяких ключевых слов (их запредельно много), это рай:
PHP код:
// отрывки кода с твоих исходников
extern void *pAMXFunctions;
int menuid = static_cast<int>(params[1]);
amx_Redirect(amx, "GameTextForAll", reinterpret_cast<ucell>(Natives::GameTextForAll), &Samp::addr_GameTextForAll);
int Samp::GameTextForAll(const char *string, int time, int style)
Re: rustext - русификация игрового текста для множества русификаторов -
ZiGGi - 16.10.2016
Quote:
Originally Posted by Diman777
А чем именно не нравится C++? Сложностью?
Ты знаешь, что синтаксис у языка полон разнообразия, всяких ключевых слов (их запредельно много), это рай:
PHP код:
// отрывки кода с твоих исходников
extern void *pAMXFunctions;
int menuid = static_cast<int>(params[1]);
amx_Redirect(amx, "GameTextForAll", reinterpret_cast<ucell>(Natives::GameTextForAll), &Samp::addr_GameTextForAll);
int Samp::GameTextForAll(const char *string, int time, int style)
|
Мне он не нравится по массе причин: уродливый синтаксис, опасная и неудобная работа с памятью, множество костылей и небезопасных функций, ну и много ещё чего (об этом много информации в интернете).
Re: rustext - русификация игрового текста для множества русификаторов -
Diman777 - 16.10.2016
И не смотря на это ты решил написать плагин на C++. Можно вроде и на других языках писать (дельфи, ява, питон, С#).
Re: rustext - русификация игрового текста для множества русификаторов -
ZiGGi - 17.10.2016
Quote:
Originally Posted by Diman777
И не смотря на это ты решил написать плагин на C++. Можно вроде и на других языках писать (дельфи, ява, питон, С#).
|
SDK есть только для C/C++, да и опыт разработки плагина на C++ у меня уже был благодаря FCNPC.
Re: rustext - русификация игрового текста для множества русификаторов -
ZiGGi - 03.11.2016
rustext v2.0.0
- Работа через перехват RPC (теперь текст глобальных TextDraw, Menu и GameText будет приходить игроку с установленной для него локализацией)
- Оповещение о выходе новой версии
- Добавлены функции
PHP Code:
native GetRussifierVersion(version[], const size = sizeof(version));
native GetRussifierText(RussifierType:type, string[], string_return[], const size = sizeof(string_return));
P.S. Обновил пример использования, теперь там полноценная система выбора русификатора для игрока.
Re: rustext - русификация игрового текста для множества русификаторов -
ZiGGi - 27.11.2016
rustext v2.0.1
- Исправлен крэш
- Исправлено создание enum
- Исправлен скрипт - пример
Скачать:
https://github.com/ziggi/rustext/releases
Re: rustext - русификация игрового текста для множества русификаторов -
thebatya - 10.04.2017
Quote:
Originally Posted by ZiGGi
Плагин заменяет символы, передаваемые функциями для работы с TextDraw, Menu и GameText на те, что соответствуют русификатору. Русификатор по умолчанию - SanLtd, но вы можете каждому игроку установить собственный русификатор.
|
C PlayerText не работает?
Re: rustext - русификация игрового текста для множества русификаторов -
ZiGGi - 10.04.2017
Quote:
Originally Posted by thebatya
C PlayerText не работает?
|
Работает.
Re: rustext - русификация игрового текста для множества русификаторов -
thebatya - 10.04.2017
Quote:
Originally Posted by ZiGGi
Работает.
|
в CR:MP не работало.
Пришлось, вот так сделать.
PHP Code:
stock PlayerText:Russifier_CreatePlayerTextDraw(playerid, Float:x, Float:y, text[])
{
new string[1024];
new RussifierType:type = GetPlayerRussifierType(playerid);
GetRussifierText(type, text, string, sizeof(string));
return CreatePlayerTextDraw(playerid, Float:x, Float:y, string);
}
#if defined _ALS_CreatePlayerTextDraw
#undef CreatePlayerTextDraw
#else
#define _ALS_CreatePlayerTextDraw
#endif
#define CreatePlayerTextDraw Russifier_CreatePlayerTextDraw
Re: rustext - русификация игрового текста для множества русификаторов -
ZiGGi - 10.04.2017
Quote:
Originally Posted by thebatya
в CR:MP не работало.
Пришлось, вот так сделать.
PHP Code:
stock PlayerText:Russifier_CreatePlayerTextDraw(playerid, Float:x, Float:y, text[])
{
new string[1024];
new RussifierType:type = GetPlayerRussifierType(playerid);
GetRussifierText(type, text, string, sizeof(string));
return CreatePlayerTextDraw(playerid, Float:x, Float:y, string);
}
#if defined _ALS_CreatePlayerTextDraw
#undef CreatePlayerTextDraw
#else
#define _ALS_CreatePlayerTextDraw
#endif
#define CreatePlayerTextDraw Russifier_CreatePlayerTextDraw
|
Если используется старая версия CR-MP (SA-MP 0.3e), то, возможно, вторая версия плагина с ним не будет работать. Попробуй использовать версию 1.2.0.