Активный
- Тема Автор
- #1
Руководство по созданию системы радиостанций с переключением каналов и сохранением выбора.
Структура данных радиостанций
Переключение радио
Команды управления радио
Сохранение выбора радио
Глобальное радио для всех
Отображение текущей радиостанции
Система радио добавляет атмосферу в игру и позволяет игрокам слушать музыку во время игры.
Структура данных радиостанций
Код:
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;
}
Система радио добавляет атмосферу в игру и позволяет игрокам слушать музыку во время игры.