#include <amxmodx>
new name_receiver[33], receivers[256], user_fm[33],count
static buffer[4096], buffer_off[2048]
/*
MiniRadio by Slimshady", "2.0
*/
/*
Для того, чтобы добавить свою станцию, добавьте строчку в массив ниже,
на примере других станций, в формате:
{"Название","Ссылка на потоковое вещание"},
Учтите, что если добавляете станцию в самый конец, то запятая в конце строки не нужна.
*/
new const fm_id[][][] =
{
{"",""}, /*Для удобства оставляем первую строчку пустой, удалять ее не нужно.*/
{"HIT fm", "http://cluster.quantumart.ru/broadcast/default.aspx?media=hitfm" },
{"Europa+", "http://radiogrom.com/online/moskva_fm/europa_plus_online.m3u" },
{"RECORD", "http://radio.sampo.ru/record.m3u" },
{"Maximum", "http://cluster.quantumart.ru/broadcast/default.aspx?media=maximum" },
{"Gameradio", "http://listen.fmgameradio.ru:8008/GameRadio" },
{"ENERGY", "http://radiostream.akado.ru/playlist/radio.m3u?station=nrj&stream=192" },
{"U FM", "mms://live.rfn.ru/unost/stream.asf" },
{"DFM Urban", "http://cluster.quantumart.ru/broadcast/default.aspx?media=station04" },
{"DFM Club", "http://cluster.quantumart.ru/broadcast/default.aspx?media=station01" },
{"DFM Fresh", "http://cluster.quantumart.ru/broadcast/default.aspx?media=station02" },
{"DFM Dance", "http://cluster.quantumart.ru/broadcast/default.aspx?media=station03" },
{"DFM Love", "http://cluster.quantumart.ru/broadcast/default.aspx?media=station10" },
{"RUS RADIO", "http://cluster.quantumart.ru/broadcast/default.aspx?media=rusradio" },
{"Шансон", "http://radio.sampo.ru/shanson.m3u" },
{"Дорожное", "http://radio.sampo.ru/dorozhnoe.m3u" },
{"Авторадио", "http://radio.sampo.ru/avtoradio.m3u" },
{"Montecarlo", "http://cluster.quantumart.ru/broadcast/default.aspx?media=montecarlo" },
{"Disco 90th", "http://cluster.quantumart.ru/broadcast/default.aspx?media=07" }
}
/*Функция для отображения списка слушателей.*/
public who()
{
/*Настройка цвета и позиции для сообщения.*/
set_hudmessage(127, 0, 255, 0.85, 0.31, 2, 0.04, 20.0, 0.03, 0.02, 1)
/*Если слушателей нет, то показываем это сообщение.*/
if(!name_receiver[0])
show_hudmessage(0, "Играй с музыкой! =)^nНапиши /fm в чат.")
/*Если есть, то это.*/
else
show_hudmessage(0, "Играй с музыкой! =)^nНапиши /fm в чат.^nСлушатели:^n%s", receivers)
}
public fm(id)
{
new i_Menu = menu_create("\yMiniRadio \wBy \rSLIMSHADY:\w", "radio")
new item[3], form[64]
/*Составляем пункты меню из списка станций.*/
for(new i=1; i<=count; i++)
{
num_to_str(i, item, 3)
/*Если текущая станция - проигрываемая, то указываем это.*/
if(i==user_fm[id])
{
formatex(form, charsmax(form), "\d%s (now)", fm_id[i][0])
menu_additem(i_Menu, form, item,0)
}
/*Если нет, то обычная строка.*/
else
menu_additem(i_Menu, fm_id[i][0], item)
}
/*Русификация пунктов: Back, Next, Exit.*/
menu_setprop(i_Menu, MPROP_NEXTNAME, "Далее")
menu_setprop(i_Menu, MPROP_BACKNAME, "Назад")
menu_setprop(i_Menu, MPROP_EXITNAME, "Гл. меню")
menu_setprop(i_Menu, MPROP_EXIT, MEXIT_ALL)
menu_display(id, i_Menu, 0)
return PLUGIN_HANDLED
}
public client_disconnect(id)
{
if(user_fm[id])
{
user_fm[id] = 0
hudradio();
}
}
/*Функция для пересчета слушателей и прослушиваемых станций.*/
public hudradio()
{
name_receiver[0] = '^0';
receivers[0] = '^0';
new num=get_maxplayers()
for(new id = 1; id <= num; id++)
{
if(!is_user_connected(id) || !user_fm[id])
continue;
get_user_name(id, name_receiver, 31)
formatex(receivers, 255, "%s %s (%s)^n", receivers, name_receiver, fm_id[user_fm[id]][0])
}
}
/*Основное меню плагина*/
public fm_menu(id)
{
new i_Menu
if(user_fm[id] > 0)
{
i_Menu = menu_create_format("\yMiniRadio \wBy \rSLIMSHADY^n\wВы слушаете: \y%s", "radiod", fm_id[user_fm[id]][0])
menu_additem(i_Menu, "\yОтключить" , "1", 0)
menu_additem(i_Menu, "Случайная станция", "3", 0)
menu_additem(i_Menu, "\wСписок станций", "2", 0)
}
else
{
i_Menu = menu_create("\yMiniRadio \wBy \rSLIMSHADY", "radiod")
menu_additem(i_Menu, "\yСлучайная станция", "1", 0)
menu_additem(i_Menu, "\wСписок станций", "2", 0)
}
menu_additem(i_Menu, fm_id[i][0], item)
/*Русификация пунктов: Back, Next, Exit.*/
menu_setprop(i_Menu, MPROP_NEXTNAME, "Далее")
menu_setprop(i_Menu, MPROP_BACKNAME, "Назад")
menu_setprop(i_Menu, MPROP_EXITNAME, "Выйти")
menu_setprop(i_Menu, MPROP_EXIT, MEXIT_ALL)
menu_display(id, i_Menu, 0)
return PLUGIN_HANDLED
}
public radiod(id, menu, item)
{
if (item == MENU_EXIT)
{
menu_destroy(menu)
return PLUGIN_HANDLED
}
new s_Data[6], s_Name[64], i_Access, i_Callback
menu_item_getinfo(menu, item, i_Access, s_Data, charsmax(s_Data), s_Name, charsmax(s_Name), i_Callback)
new i_Key = str_to_num(s_Data)
switch(i_Key)
{
case 1:
{
if(user_fm[id] > 0)
{
user_fm[id] = 0
hudradio();Play(id)
}
else
random_fm(id)
}
case 2:fm(id)
case 3:random_fm(id)
case 4:
{
set_hudmessage(127, 0, 255, 0.85, 0.31, 2, 0.04, 20.0, 0.03, 0.02, 1)
if(!name_receiver[0])
show_hudmessage(id, "Слушателей нет :'(")
else
show_hudmessage(id, "Слушатели:^n%s", receivers)
}
}
menu_destroy(menu)
return PLUGIN_HANDLED
}
public Play(id)
{
static motd_show[4096]
/*Если клиент предпочел выключить радио.*/
if(!user_fm[id]) show_motd(id, buffer_off, "OFF")
/*Если включил или выбрал другую станцию.*/
else
{
formatex(motd_show, charsmax(motd_show), buffer, fm_id[user_fm[id]][0], fm_id[user_fm[id]][1])
show_motd(id, motd_show, "MiniRadio By Slimshady")
}
}
public radio(id, menu, item)
{
if (item == MENU_EXIT)
{
menu_destroy(menu)
fm_menu(id)
return PLUGIN_HANDLED
}
new s_Data[6], s_Name[64], i_Access, i_Callback
menu_item_getinfo(menu, item, i_Access, s_Data, charsmax(s_Data), s_Name, charsmax(s_Name), i_Callback)
user_fm[id] = str_to_num(s_Data)
Play(id);hudradio()
menu_destroy(menu)
return PLUGIN_HANDLED
}
/*Функция для случайного выбора станции.*/
public random_fm(id)
{
new random_int = random_num(1, count);
/*Если случайное радио совпадает с текущей проигрываемой станцией, то выбираем случайное еще раз.*/
if(random_int == user_fm[id])
{
random_fm(id); return PLUGIN_HANDLED
}
user_fm[id] = random_int;
Play(id);hudradio();
return PLUGIN_HANDLED
}
public plugin_init()
{
register_plugin("MiniRadio by Slimshady", "2.0", "Slimshady")
/*Команда для вызова меню плагина.*/
register_clcmd("say /fm", "fm_menu")
/*Регистрация квара для регулировки показа информации о слушателях.*/
new cvar = register_cvar("amx_miniradio_showtime", "200.0")
/*Узнаем общее кол-во FM станций.*/
count = sizeof(fm_id)-1
/*Формируем окно включения радио*/
add(buffer, charsmax(buffer), "<meta http-equiv='Content-Type' content='text/html; charset=utf-8'><p align='center'><body bgcolor='black'>")
add(buffer, charsmax(buffer), "<big><b><font color='yellow'>MiniRadio by Slimshady v2.0</br><font color='red'>Воспроизводится: <font color='lawngreen'>%s</b></big></font><br><p align='left'>")
add(buffer, charsmax(buffer), "<font color='orange'><b>Идет буферизация... Вы можете закрыть окно.</b></font><br>")
add(buffer, charsmax(buffer), "<font color='red'>(Если воспроизведение не началось - попробуйте включить эту станцию снова.)</font><br>")
add(buffer, charsmax(buffer), "<DIV align=center><EMBED style='WIDTH: 298px; HEIGHT: 100px' height=500 type=application/x-mplayer2 pluginspage=http://www.microsoft.com/Windows/MediaPlayer/ width=500 src='%s' ShowStatusBar='1' showtracker='0'")
add(buffer, charsmax(buffer), "displaysize='0' autosize='1' showcontrols='true' Volume='10' animationatstart='0' transparentatstart='0' autostart='true'></DIV><p align='center'><font color='grey' size='1'>www.banan.ws</font></p></body>")
/*Формируем окно выключения радио.*/
add(buffer_off, charsmax(buffer_off), "<meta http-equiv='Content-Type' content='text/html; charset=utf-8'><title>play</title></head><body bgcolor='black'><p align='center'>")
add(buffer_off, charsmax(buffer_off) , "<big><b><font color='yellow'>MiniRadio by Slimshady v2.0:</br><font color='red'>Воспроизведение отключено.</font></b></big></br></br><font color='grey' size='1'>www.banan.ws</font></p></body>")
/*Таймер для показа информации о слушателях.*/
if(get_pcvar_float(cvar)>0.0)
set_task(get_pcvar_float(cvar),"who", random_num(100, 900), _, _,"b")
}
/*Функция для быстрого форматирования заголовка.*/
stock menu_create_format(const title[], const handler[], any:...)
{
new menu_title[256]
vformat(menu_title, charsmax(menu_title), title, 3)
return menu_create(menu_title, handler);
}
/*
The End. •January 2013•
*/