Доступ к готовым решениям

Переход в группу "Пользователь"

300.00
Одноразовый платёж
Быстрый переход в группу "Пользователи", без надобности написания постов и ожидания.

Покупка дает возможность:
Быть полноправным участником форума
Нормальное копирование кода
Создавать темы
Скачивать файлы
Доступ к архиву Pawno-Info

Урок Преобразуем символ в ник

OKStyle

Адвокат по делам семейным
Administrator
Wiki Team
Регистрация
4 Мар 2011
Сообщения
7,094
Лучшие ответы
226
Репутация
2,455
Награды
11

Составили код замены идентификаторов на ники (например: привет, @0" меняется на "привет, [ACF]OKStyle"). Полгода назад допилили на заказ, решил показать. На скрине недоработанная версия. Представленная срабатывает на все 100.

Update: в новых версиях SA-MP, начиная с 0.3.7, поменяли или испортили механизм получения размера text. Поэтому код пришлось переделать:

PHP:
public OnPlayerText(playerid, text[])
{
    new PlayerName[MAX_PLAYER_NAME], message[144];
    strcat(message, text);
    for(new i = strfind(message, "@", true), a, tmp[4]; i != -1; i = strfind(message, "@", true, i + 1))
    {
        ++i;
        while(48 <= message[i] <= 57 && a != 4) tmp[a++] = message[i++];
        if(tmp[0] == EOS) continue;
        GetPlayerName(strval(tmp), PlayerName, sizeof(PlayerName));
        strdel(message, i - a - 1, i);
        strins(message, PlayerName, i - a - 1, 144);
        a = 0;
    }
    SendPlayerMessageToAll(playerid, message);
    return 0;
}
PHP:
public OnPlayerText(playerid, text[])
{
    new PlayerName[MAX_PLAYER_NAME];
    for(new i = strfind(text, "@", true), a = 0, tmp[4]; i != -1; i = strfind(text, "@", true, i))
    {
        ++i, a = 0;
        while(48 <= text[i] <= 57 && a != 4) tmp[a++] = text[i++];
        if(tmp[0] == EOS) continue;
        GetPlayerName(strval(tmp), PlayerName, sizeof(PlayerName));
        strdel(text, i - a - 1, i);
        strins(text, PlayerName, i - a - 1, 128);
    }
    GetPlayerName(playerid, PlayerName, sizeof(PlayerName));
    format(text, 128, "%s: {FFFFF}%s", PlayerName, text);
    SendClientMessageToAll(GetPlayerColor(playerid), text);
    return 0;
}
 
Последнее редактирование:
Сверху Снизу