Перейти к содержанию

Исправление русских имен в игре


Информация о файле

Мутатор исправляет стимовские русские крякозябренные имена

 

 

Код:

 

 

class FixSteamRusNameMut extends Mutator;
//Мутатор исправляет стимовские русские крякозябренные имена
var array<KFPlayerController> PendingPlayers;

//Отлавливаем приходящих на сервер игроков
function bool CheckReplacement(Actor Other, out byte bSuperRelevant)
{
    if(KFPlayerController(Other)!=None)
    {
        PendingPlayers[PendingPlayers.Length] = KFPlayerController(Other);
        SetTimer(0.1,false);
    }
    return true;
}

//Прошла 0.1 секунда после появления контроллера и класс PlayerReplicationInfo для этого контроллера уже заполнен
//Пора править полученное имя
function Timer()
{
    local int i;
    for(i=0;i<PendingPlayers.Length;i++)
        CheckAndFixName(PendingPlayers[i]);
    PendingPlayers.Length = 0;
}

//Тут ничего и не делается полезного. Только вызов функции и закрепление нового имени в PlayerReplicationInfo
function CheckAndFixName(KFPlayerController KFPC)
{
    local PlayerReplicationInfo PRI;
    local string playerName, fixedName;
    if(KFPC==none) return;
    PRI=KFPC.PlayerReplicationInfo;
    if(PRI==none) return;
    playerName=PRI.PlayerName;
    fixedName=ConvertSteamString(playerName);
    if(fixedName!=playerName)
        KFPC.PlayerReplicationInfo.PlayerName=fixedName;
}

//Всё ценное в этих 2х функциях. В этой, например, мы на вход получаем имя и посимвольно глядим коды
//Все крякозябренные конвертируем
function string ConvertSteamString(string msg)
{
    local int i;
    local string tmp;
    local string result;
    local int code;
    tmp=msg;
    for(i=0; i<Len(msg); i++)
    {
        code=Asc(tmp);
        if(code==1056 || code==1057)
        {
            tmp=Mid(tmp,1);
            continue;
        }
        code=FixCode(code);
        if(code>167)
            code+=848;
        if(i==0) result=Chr(code);
        else result=result$Chr(code);
        tmp=Mid(tmp,1);
    }
    return result;
}

//Перекодировка из того набора символов что передаёт стим в нужный нам
function int FixCode(int code)
{
    switch(code)
    {
        case 176:    return 224;
        case 177:    return 225;
        case 1030:    return 226;
        case 1110:    return 227;
        case 1169:    return 228;
        case 181:    return 229;
        case 8216:    return 184;
        case 182:    return 230;
        case 183:    return 231;
        case 1105:    return 232;
        case 8470:    return 233;
        case 1108:    return 234;
        case 187:    return 235;
        case 1112:    return 236;
        case 1029:    return 237;
        case 1109:    return 238;
        case 1111:    return 239;
        case 1026:    return 240;
        case 1027:    return 241;
        case 8218:    return 242;
        case 1107:    return 243;
        case 8222:    return 244;
        case 8230:    return 245;
        case 8224:    return 246;
        case 8225:    return 247;
        case 8364:    return 248;
        case 8240:    return 249;
        case 1033:    return 250;
        case 8249:    return 251;
        case 1034:    return 252;
        case 1036:    return 253;
        case 1035:    return 254;
        case 1039:    return 255;
        case 1106:    return 192;
        case 8216:    return 193;
        case 8217:    return 194;
        case 8220:    return 195;
        case 8221:    return 196;
        case 8226:    return 197;
        case 1027:    return 168;
        case 8211:    return 198;
        case 8212:    return 199;
        case 152:    return 200;
        case 8482:    return 201;
        case 1113:    return 202;
        case 8250:    return 203;
        case 1114:    return 204;
        case 1116:    return 205;
        case 1115:    return 206;
        case 1119:    return 207;
        case 160:    return 208;
        case 1038:    return 209;
        case 1118:    return 210;
        case 1032:    return 211;
        case 164:    return 212;
        case 1168:    return 213;
        case 166:    return 214;
        case 167:    return 215;
        case 1025:    return 216;
        case 169:    return 217;
        case 1028:    return 218;
        case 171:    return 219;
        case 172:    return 220;
        case 173:    return 221;
        case 174:    return 222;
        case 1031:    return 223;
    }
    return code;
}

/*
а    176        224
б    177        225
в    1030    226
г    1110    227
д    1169    228
е    181        229
ё    8216    184
ж    182        230
з    183        231
и    1105    232
й    8470    233
к    1108    234
л    187        235
м    1112    236
н    1029    237
о    1109    238
п    1111    239
р    1026    240
с    1027    241
т    8218    242
у    1107    243
ф    8222    244
х    8230    245
ц    8224    246
ч    8225    247
ш    8364    248
щ    8240    249
ъ    1033    250
ы    8249    251
ь    1034    252
э    1036    253
ю    1035    254
я    1039    255

А    1106    192
Б    8216    193
В    8217    194
Г    8220    195
Д    8221    196
Е    8226    197
Ё    1027    168
Ж    8211    198
З    8212    199
И    152        200
Й    8482    201
К    1113    202
Л    8250    203
М    1114    204
Н    1116    205
О    1115    206
П    1119    207
Р    160        208
С    1038    209
Т    1118    210
У    1032    211
Ф    164        212
Х    1168    213
Ц    166        214
Ч    167        215
Ш    1025    216
Щ    169        217
Ъ    1028    218
Ы    171        219
Ь    172        220
Э    173        221
Ю    174        222
Я    1031    223
*/


defaultproperties
{
    bAddToServerPackages=True
    GroupName="KF-FixSteamRusName"
    FriendlyName="FixSteamRusNameMut"
    Description="FixSteamRusNameMut"

 

 

Путь к мутатору:

FixSteamRusNameMut.FixSteamRusNameMut


×
×
  • Создать...