[Plugin] rustext - русификация игрового текста для множества русификаторов
#1

rustext
GitHub
Описание
Плагин заменяет символы, передаваемые функциями для работы с 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:

Здесь показана работа с украинской локализацией:


Функции
PHP код:
native SetPlayerRussifierType(playeridRussifierType: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 
iTEXT_RUSSIFIERS_COUNTi++) {
        
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.010.0);
    }
    return 
1;
}
public 
OnPlayerSpawn(playerid)
{
    for (new 
iTEXT_RUSSIFIERS_COUNTi++) {
        
SetPlayerRussifierType(playeridRussifierType:i);
        
TextDrawShowForPlayer(playeridText:TextRusTD[RussifierType:i]);
    }
    
SelectTextDraw(playerid0xAA3333FF);
    return 
1;
}
public 
OnPlayerClickTextDraw(playeridText:clickedid)
{
    for (new 
iTEXT_RUSSIFIERS_COUNTi++) {
        if (
TextRusTD[RussifierType:i] == _:clickedid) {
            
SetPlayerRussifierType(playeridRussifierType:i);
            
CancelSelectTextDraw(playerid);
        }
        
TextDrawHideForPlayer(playeridText:TextRusTD[RussifierType:i]);
    }
    return 
0;

Или вы можете использовать библиотеку russifier:



Русификаторы
  • Все поддерживаемые руссификаторы можно скачать здесь, названия файлов соответствуют названиям в плагине.
Скачать
Reply
#2

Ну ты крут, уже плагины научился писать, C++ стал изучать давно?
Reply
#3

Quote:
Originally Posted by Diman777
Посмотреть сообщение
Ну ты крут, уже плагины научился писать, C++ стал изучать давно?
Давно, но активным изучением не занимался, ибо мне этот язык не нравится.
Reply
#4

rustext v1.1.0

Поддержка двух новых русификаторов:
- От MG
- Народный
Reply
#5

А можешь прикрепить к каждому в списке поддерживаемых русификаторов провереный источник на них?
Reply
#6

Quote:
Originally Posted by Mutha_X
Посмотреть сообщение
А можешь прикрепить к каждому в списке поддерживаемых русификаторов провереный источник на них?
Русификаторы я сохранил, но некоторые нужно ещё раз проверить, как проверю - опубликую ссылку.
Reply
#7

Quote:
Originally Posted by Mutha_X
Посмотреть сообщение
А можешь прикрепить к каждому в списке поддерживаемых русификаторов провереный источник на них?
Русификаторы можно взять здесь: https://mega.nz/#F!tVhlhDCT!FK1xFcBalTA0ySY_JsryMg

P.S. Если у вас есть ещё какой-либо русификатор - отправляйте мне, я добавлю его в плагин.
Reply
#8

rustext v1.2.0

- Оптимизация (замена символов без поиска по массиву)
- Добавлена возможность отключить локализацию
- Добавлена поддержка украинской локализации
Reply
#9

Работает только на player текстдравах? Или можно как-то для каждого игрока выводить текст global текстдрава на своем руссификаторе?
Reply
#10

Quote:
Originally Posted by Art4D
View Post
Работает только на player текстдравах? Или можно как-то для каждого игрока выводить текст global текстдрава на своем руссификаторе?
Для глобальных TD используется русификатор по умолчанию, который задаётся с помощью SetDefaultRussifierType. И, естественно, глобальный TD для всех игроков одинаковый.
Reply
#11

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 *stringint timeint style
Reply
#12

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 *stringint timeint style
Мне он не нравится по массе причин: уродливый синтаксис, опасная и неудобная работа с памятью, множество костылей и небезопасных функций, ну и много ещё чего (об этом много информации в интернете).
Reply
#13

И не смотря на это ты решил написать плагин на C++. Можно вроде и на других языках писать (дельфи, ява, питон, С#).
Reply
#14

Quote:
Originally Posted by Diman777
View Post
И не смотря на это ты решил написать плагин на C++. Можно вроде и на других языках писать (дельфи, ява, питон, С#).
SDK есть только для C/C++, да и опыт разработки плагина на C++ у меня уже был благодаря FCNPC.
Reply
#15

rustext v2.0.0

- Работа через перехват RPC (теперь текст глобальных TextDraw, Menu и GameText будет приходить игроку с установленной для него локализацией)
- Оповещение о выходе новой версии
- Добавлены функции
PHP Code:
native GetRussifierVersion(version[], const size sizeof(version));
native GetRussifierText(RussifierType:typestring[], string_return[], const size sizeof(string_return)); 
P.S. Обновил пример использования, теперь там полноценная система выбора русификатора для игрока.
Reply
#16

rustext v2.0.1

- Исправлен крэш
- Исправлено создание enum
- Исправлен скрипт - пример

Скачать: https://github.com/ziggi/rustext/releases
Reply
#17

Quote:
Originally Posted by ZiGGi
View Post
Плагин заменяет символы, передаваемые функциями для работы с TextDraw, Menu и GameText на те, что соответствуют русификатору. Русификатор по умолчанию - SanLtd, но вы можете каждому игроку установить собственный русификатор.
C PlayerText не работает?
Reply
#18

Quote:
Originally Posted by thebatya
View Post
C PlayerText не работает?
Работает.
Reply
#19

Quote:
Originally Posted by ZiGGi
View Post
Работает.
в CR:MP не работало.

Пришлось, вот так сделать.
PHP Code:
stock PlayerText:Russifier_CreatePlayerTextDraw(playeridFloat:xFloat:ytext[])
{
    new 
string[1024];
    new 
RussifierType:type GetPlayerRussifierType(playerid);
    
GetRussifierText(typetextstringsizeof(string));
    return 
CreatePlayerTextDraw(playeridFloat:xFloat:ystring);
}
#if defined _ALS_CreatePlayerTextDraw
    #undef CreatePlayerTextDraw
#else
    #define _ALS_CreatePlayerTextDraw
#endif
#define CreatePlayerTextDraw Russifier_CreatePlayerTextDraw 
Reply
#20

Quote:
Originally Posted by thebatya
View Post
в CR:MP не работало.

Пришлось, вот так сделать.
PHP Code:
stock PlayerText:Russifier_CreatePlayerTextDraw(playeridFloat:xFloat:ytext[])
{
    new 
string[1024];
    new 
RussifierType:type GetPlayerRussifierType(playerid);
    
GetRussifierText(typetextstringsizeof(string));
    return 
CreatePlayerTextDraw(playeridFloat:xFloat:ystring);
}
#if defined _ALS_CreatePlayerTextDraw
    #undef CreatePlayerTextDraw
#else
    #define _ALS_CreatePlayerTextDraw
#endif
#define CreatePlayerTextDraw Russifier_CreatePlayerTextDraw 
Если используется старая версия CR-MP (SA-MP 0.3e), то, возможно, вторая версия плагина с ним не будет работать. Попробуй использовать версию 1.2.0.
Reply


Forum Jump:


Users browsing this thread: 3 Guest(s)