Система радио в Pawn

Активный
Статус
Сообщения
516
Лайки
32

8

месяц на сайте

Руководство по созданию системы радиостанций с переключением каналов и сохранением выбора.

Структура данных радиостанций

Код:
enum RadioInfo
{
    rID,
    rName[32],
    rURL[128]
}

new RadioData[][RadioInfo] = {
    {0, "Радио выключено", ""},
    {1, "Play FM", "http://example.com/playfm.pls"},
    {2, "Radio Los Santos", "http://example.com/rls.pls"},
    {3, "K-DST", "http://example.com/kdst.pls"},
    {4, "Bounce FM", "http://example.com/bounce.pls"},
    {5, "SF-UR", "http://example.com/sfur.pls"},
    {6, "Radio X", "http://example.com/radiox.pls"}
};

new PlayerRadio[MAX_PLAYERS] = {0, ...};

Переключение радио

Код:
SetPlayerRadio(playerid, radioid)
{
    if(radioid < 0 || radioid >= sizeof(RadioData))
    {
        return 0;
    }
    
    PlayerRadio[playerid] = radioid;
    
    if(radioid == 0)
    {
        StopAudioStreamForPlayer(playerid);
        SendClientMessage(playerid, -1, "Радио выключено");
    }
    else
    {
        PlayAudioStreamForPlayer(playerid, RadioData[radioid][rURL]);
        new string[128];
        format(string, sizeof(string), "Включено: %s", RadioData[radioid][rName]);
        SendClientMessage(playerid, -1, string);
    }
    
    return 1;
}

Команды управления радио

Код:
CMD:radio(playerid, params[])
{
    new string[512] = "Радиостанции:\n\n";
    
    for(new i = 0; i < sizeof(RadioData); i++)
    {
        if(i == PlayerRadio[playerid])
        {
            format(string, sizeof(string), "%s>> %s <<\n", string, RadioData[i][rName]);
        }
        else
        {
            format(string, sizeof(string), "%s%d. %s\n", string, i, RadioData[i][rName]);
        }
    }
    
    ShowPlayerDialog(playerid, DIALOG_RADIO, DIALOG_STYLE_LIST, "Радио", string, "Выбрать", "Закрыть");
    return 1;
}

CMD:radiooff(playerid, params[])
{
    SetPlayerRadio(playerid, 0);
    return 1;
}

CMD:radionext(playerid, params[])
{
    new nextRadio = PlayerRadio[playerid] + 1;
    if(nextRadio >= sizeof(RadioData))
    {
        nextRadio = 0;
    }
    SetPlayerRadio(playerid, nextRadio);
    return 1;
}

CMD:radioprev(playerid, params[])
{
    new prevRadio = PlayerRadio[playerid] - 1;
    if(prevRadio < 0)
    {
        prevRadio = sizeof(RadioData) - 1;
    }
    SetPlayerRadio(playerid, prevRadio);
    return 1;
}

Сохранение выбора радио

Код:
SavePlayerRadio(playerid)
{
    new query[256], name[MAX_PLAYER_NAME];
    GetPlayerName(playerid, name, sizeof(name));
    
    format(query, sizeof(query), "UPDATE players SET radio = %d WHERE name = '%e'", PlayerRadio[playerid], name);
    mysql_query(g_SQL, query);
    return 1;
}

LoadPlayerRadio(playerid)
{
    new query[256], name[MAX_PLAYER_NAME];
    GetPlayerName(playerid, name, sizeof(name));
    
    format(query, sizeof(query), "SELECT radio FROM players WHERE name = '%e'", name);
    mysql_query(g_SQL, query);
    mysql_store_result();
    
    if(mysql_num_rows() > 0)
    {
        PlayerRadio[playerid] = mysql_fetch_int("radio");
        if(PlayerRadio[playerid] > 0)
        {
            SetPlayerRadio(playerid, PlayerRadio[playerid]);
        }
    }
    
    mysql_free_result();
    return 1;
}

Глобальное радио для всех

Код:
new GlobalRadio = 0;

SetGlobalRadio(radioid)
{
    if(radioid < 0 || radioid >= sizeof(RadioData))
    {
        return 0;
    }
    
    GlobalRadio = radioid;
    
    for(new i = 0; i < MAX_PLAYERS; i++)
    {
        if(IsPlayerConnected(i))
        {
            SetPlayerRadio(i, radioid);
        }
    }
    
    new string[128];
    format(string, sizeof(string), "Глобальное радио установлено: %s", RadioData[radioid][rName]);
    SendClientMessageToAll(-1, string);
    
    return 1;
}

CMD:setglobalradio(playerid, params[])
{
    if(PlayerInfo[playerid][pAdmin] < 3)
    {
        SendClientMessage(playerid, -1, "У вас нет доступа");
        return 1;
    }
    
    new radioid;
    if(sscanf(params, "d", radioid))
    {
        SendClientMessage(playerid, -1, "Использование: /setglobalradio [id радио]");
        return 1;
    }
    
    SetGlobalRadio(radioid);
    return 1;
}

Отображение текущей радиостанции

Код:
ShowRadioInfo(playerid)
{
    new string[128];
    format(string, sizeof(string), "~w~Радио: ~y~%s", RadioData[PlayerRadio[playerid]][rName]);
    GameTextForPlayer(playerid, string, 3000, 1);
    return 1;
}

public OnPlayerUpdate(playerid)
{
    static lastRadioUpdate[MAX_PLAYERS];
    if(GetTickCount() - lastRadioUpdate[playerid] > 5000 && PlayerRadio[playerid] > 0)
    {
        ShowRadioInfo(playerid);
        lastRadioUpdate[playerid] = GetTickCount();
    }
    return 1;
}

Система радио добавляет атмосферу в игру и позволяет игрокам слушать музыку во время игры.
 

1 человек читают эту тему (Всего: 1, Пользователей: 0, Гостей: 1)

Сверху