Игрок садится в автомобиль и прописывает /radio, или что угодно на ваш выбор. Выбирает и включает радиостанцию. Все пассажиры, которые уже в машине, или которые садятся внутрь слышат эту же радиостанцию, которую слушает водитель.
Для начала создадим переменную для синхронизации радио между водителем и пассажирами. В ней будет хранится номер радиостанции.
Затем создадим массив с названиями радиостанций, жанрами и ссылками на аудиопоток.
Затем нам нужно создать переменную, которая бы хранила в себе весь список этих радиостанций в виде строки для отображения в диалоге.
Теперь нам нужно записать в эту переменную все радиостанции. Сделаем мы это 1 раз, чтобы каждый раз при вызове диалога не пересоздавать переменные. Сделаем мы это в OnGameModeInit()
Тут мы циклом прошлись по массиву, и каждую ячейку записали в строку. Далее добавляйте в удобное для вас место (по команде, по кнопке и т.д.). Не забудьте поменять ID диалога на свой.
Предпоследнее, что нам нужно сделать - это добавить действия по диалогу, для этого в OnDialogResponse() вставляем следующее, не забываем менять ID диалога
Если игрок в автомобиле и включает какую-нибудь радиостанцию, циклом подбираются игроки, которые так же находятся в одной машине с игроком. По такому же принципу работает отключение радио. Так же номер радиостанции записывается в переменную radioWave[], которая поможет нам в дальнейшей синхронизации. Данная переменная будет закреплена за конкретным автомобилем. Когда игрок выходит из автомобиля, аудиострим прекращается. Когда он садится назад, мы берем номер радиостанции из этой переменной и включаем нужный аудиострим. Тот же принцип и с пассажирами. В OnPlayerStateChange() добавляем следующий код:
На этом все. Систему вырезал со своего мода.
Для начала создадим переменную для синхронизации радио между водителем и пассажирами. В ней будет хранится номер радиостанции.
C++:
new radioWave[MAX_VEHICLES];
C++:
enum RADIOSTATIONS
{
name[24],
url[128],
genre[32]
}
new radio[][RADIOSTATIONS] = {
{ "Выключить радио", "", "" },
{ "181 Awesome 80's", "https://listen.181fm.com/181-awesome80s_128k.mp3", "Pop, 80's" },
{ "977 Hitsradio", "https://19763.live.streamtheworld.com/977_HITS.mp3", "Pop, Rock" },
{ "BigR", "https://bigrradio.cdnstream1.com/5181_128", "Pop, 70's, 80's" },
{ "2000FM", "https://bigrradio.cdnstream1.com/5104_128", "Rock, Hard-rock" },
{ "GrungeFM", "https://bigrradio.cdnstream1.com/5200_128", "Rock, Punk, Alternative" },
{ "977 Alternative", "https://19763.live.streamtheworld.com/977_ALTERN.mp3", "Alternative, Rock, Electro" },
{ "BeGoodRadio", "https://bigrradio.cdnstream1.com/5212_128 ", "Heavy-metal, Rock, 80's" },
{ "Power88", "https://ice7.securenetsystems.net/KCEP", "Hip-hop" },
{ "HotFM", "https://19493.live.streamtheworld.com/KVEGFMAAC.aac", "Hip-hop" },
{ "Miami Beach Radio", "https://streaming.radiostreamlive.com/miamibeachradio_devices", "Hip-hop, House, Pop" },
{ "Groovesalad", "https://ice3.somafm.com/groovesalad-128-mp3", "Chillout" },
{ "181 Chilled", "https://listen.181fm.com/181-chilled_128k.mp3 ", "Chillout" },
{ "Drone Zone", "https://ice.somafm.com/dronezone", "Ambient, Chillout" },
{ "Radio Paradise", "https://stream.radioparadise.com/aac-320 ", "Pop, Indie" },
{ "KCRW Music", "https://kcrw.streamguys1.com/kcrw_192k_mp3_e24_internet_radio ", "Alternative, Pop, Electro" },
{ "Indie Pop Rocks", "https://ice.somafm.com/indiepop ", "Alternative, Pop, Rock" },
{ "WFNX", "https://crystalout.surfernetwork.com:8001/WEQX_MP3 ", "Alternative, Rock" },
{ "Soma FM", "https://ice2.somafm.com/bagel-32-aac", "Indie, Rock, Alternative" },
{ "FellGood Folk", "https://edge1-b.exa.live365.net/a60822", "Country, Indie" }
};
C++:
new radiostring[600+1];
C++:
new radiosinglestring[128];
for(new i = sizeof(radio)-1; i != -1; --i)
{
format(radiosinglestring, sizeof(radiosinglestring), "\n%s\t%s", radio[i][name], radio[i][genre]);
strins(radiostring, radiosinglestring, 0);
}
strins(radiostring, "Радиостанция\tЖанр", 0);
C++:
if(GetPlayerState(playerid) == PLAYER_STATE_DRIVER) return ShowPlayerDialog(playerid, DIALOG_CAR_RADIO, DIALOG_STYLE_TABLIST_HEADERS, "Радио", radiostring,"Выбрать", "Отмена");
C++:
if(dialogid == DIALOG_CAR_DADIO)
{
if(response)
{
new playerState = GetPlayerState(playerid);
if(playerState == PLAYER_STATE_DRIVER)
{
new vehicleid = GetPlayerVehicleID(playerid);
if(listitem == 0)
{
SendClientMessage(playerid, -1, "Вы отключили радио");
for(new i = GetPlayerPoolSize(); i != -1; --i)
{
if(!IsPlayerConnected(i)) continue;
if(!IsPlayerInVehicle(i, vehicleid)) continue;
StopAudioStreamForPlayer(i);
}
}
else
{
if(radioWave[vehicleid] == 0) { SendClientMessage(playerid, -1, "Вы включили радио"); }
else { SendClientMessage(playerid, -1, "Вы сменили волну"); }
for(new i = GetPlayerPoolSize(); i != -1; --i)
{
if(!IsPlayerConnected(i)) continue;
if(!IsPlayerInVehicle(i, vehicleid)) continue;
PlayAudioStreamForPlayer(i, radio[listitem][url]);
}
}
radioWave[vehicleid] = listitem;
}
else SendClientMessage(playerid, -1, "Вы должны быть в атомобиле");
}
}
C++:
if(oldstate == PLAYER_STATE_ONFOOT && newstate == PLAYER_STATE_DRIVER || newstate == PLAYER_STATE_PASSENGER)
{
new vehicleid = GetPlayerVehicleID(playerid);
if(radioWave[vehicleid] != 0) return PlayAudioStreamForPlayer(playerid, radio[radioWave[vehicleid]][url]);
}
if(oldstate == PLAYER_STATE_DRIVER || oldstate == PLAYER_STATE_PASSENGER) // Player entered a vehicle as a driver
{
StopAudioStreamForPlayer(playerid);
}
Последнее редактирование: