Правила форума Гаранты форума
Размещение рекламы AMX-X компилятор

Здравствуйте, гость Вход | Регистрация

Наши новости:

14-дек
24-апр
10-апр
11-апр

> Полезные ссылки

[Заказ] Радио на сервер

Статус пользователя Templar
сообщение 6.5.2015, 12:39
Сообщение #1
Иконка группы

Стаж: 18 лет

Сообщений: 2680
Благодарностей: 978
Полезность: 860

Меценат Меценат

Добрый день.

Кто в силе написать простое радио для сервера с одной радио станцией.

1. Открывается меню командой /radio
2. В меню Включить/Выключить и Слушатели
3. Работа на steam/non-steam клиентах
4. Вывод в чат сколько слушает человек в чате.
5. Показывается кто подключился на радио в чате.
5.1 Игрок Player подключился к радио - как то так...

Все Т3 написано буквально за 2 минуты, самое главное реализовать с 1 по 3 пункты.
О цене договоримся кто возьмется за это дело.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   Цитировать сообщение
progamer
сообщение 6.5.2015, 13:53
Сообщение #2
Стаж: 11 лет

Сообщений: 352
Благодарностей: 23
Полезность: < 0

Всё создано давно.

Код:
/*	Formatright © 2009, ConnorMcLeod

Half Life Media Player is free software;
you can redistribute it and/or modify it under the terms of the
GNU General Public License as published by the Free Software Foundation.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with Half Life Media Player; if not, write to the
Free Software Foundation, Inc., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA.
*/

#include <amxmodx>
#include <nvault>

#define VERSION "3.1.1"

#define NVAULT_MAX_DAYS_SAVE 15
#define MAX_RECONNECT_TIME 300 // in seconds (take in account that players could download a new map)
#define DEFAULT_VOLUME 40

#define A_DAY_IN_SECONDS 86400 // 60 * 60 * 24

#define GROUP_MAX_LENGTH 64

#define RADIO_MAX_LENGTH 64
#define URL_MAX_LENGTH 192

#define MAX_PLAYERS 32
#define AUTHID_LENGTH 22

#define SetIdBits(%1,%2) %1 |= 1<<(%2 & 31)
#define ClearIdBits(%1,%2) %1 &= ~( 1<<(%2 & 31) )
#define GetIdBits(%1,%2) %1 & 1<<(%2 & 31)

enum _:Radios
{
RadioName[RADIO_MAX_LENGTH],
RadioUrl[URL_MAX_LENGTH]
}

enum _:Group
{
GroupName[GROUP_MAX_LENGTH],
Array:GroupArrayOffset
}

enum _:MenuSettings
{
mGroups,
mRadios,
mConfig
}

new Array:g_aGroups

new g_iGroupsCount

new g_bRepeat, g_bListening

new g_iMenuOption[MAX_PLAYERS+1]
new g_iMenuPosition[MAX_PLAYERS+1]
new g_iVolume[MAX_PLAYERS+1] = {DEFAULT_VOLUME, ...}
new g_szAuthid[MAX_PLAYERS+1][AUTHID_LENGTH]
new g_PlayerGroup[MAX_PLAYERS+1][Group]

new g_pCvarShowAll, g_pCvarNoMotd

new gmsgMOTD
new g_iMotdRegistered
new g_iNvault

public plugin_init()
{
register_plugin("Half Life Media Player", VERSION, "ConnorMcLeod")
register_dictionary("common.txt")
register_dictionary("hlmp.txt")

g_pCvarShowAll = register_cvar("hlmp_show_all", "1")
g_pCvarNoMotd = register_cvar("hlmp_no_motd", "1")

register_menucmd(register_menuid("HLMP"), 0x3FF, "HlmpMenuAction")

register_clcmd("hlmp_menu", "ClientCommand_HlmpMenu")
register_clcmd("say /radio", "ClientCommand_HlmpMenu")
register_clcmd("say_team /radio", "ClientCommand_HlmpMenu")

register_clcmd("say /stop", "ClientCommand_StopMusic")
register_clcmd("say_team /stop", "ClientCommand_StopMusic")

Read_ConfigFile()
Read_OpeningMotdCommandsFile()

g_iNvault = nvault_open("hlmp")
nvault_prune(g_iNvault, 0, get_systime(-(A_DAY_IN_SECONDS * NVAULT_MAX_DAYS_SAVE)) )

gmsgMOTD = get_user_msgid("MOTD")
}

Read_ConfigFile()
{
new szConfigFile[64]
get_localinfo("amxx_configsdir", szConfigFile, charsmax(szConfigFile))
format(szConfigFile, charsmax(szConfigFile), "%s/mediafiles.ini", szConfigFile)

new iFile = fopen(szConfigFile, "rt")

if(!iFile)
{
return
}

g_aGroups = ArrayCreate(Group)

new iGroup
new szText[Radios+16], RadioDatas[Radios], GroupDatas[Group]
new Array:aRadiosDatas

while(!feof(iFile))
{
fgets(iFile, szText, charsmax(szText))
trim( szText )

if(!szText[0] || szText[0] == '#' || szText[0] == ';' || (szText[0] == '/' && szText[1] == '/'))
{
continue
}

if( szText[0] == '[' )
{
iGroup++
aRadiosDatas = ArrayCreate( Radios )

strtok(szText[1], GroupDatas[GroupName], charsmax(GroupDatas[GroupName]), RadioDatas, 1, ']', 0)
GroupDatas[GroupArrayOffset] = _:aRadiosDatas

ArrayPushArray(g_aGroups, GroupDatas)
}
else if( iGroup )
{
parse( szText,
RadioDatas[RadioName], charsmax(RadioDatas[RadioName]),
RadioDatas[RadioUrl], charsmax(RadioDatas[RadioUrl]) )

ArrayPushString(aRadiosDatas, RadioDatas)
}
}
fclose(iFile)

g_iGroupsCount = ArraySize(g_aGroups)
}

Read_OpeningMotdCommandsFile()
{
new szConfigFile[64]
get_localinfo("amxx_configsdir", szConfigFile, charsmax(szConfigFile))
format(szConfigFile, charsmax(szConfigFile), "%s/hlmp_motd.ini", szConfigFile)
new iFile = fopen(szConfigFile, "rt")
if( iFile )
{
new szText[64], szCommand[32]
while(!feof(iFile))
{
fgets(iFile, szText, charsmax(szText))
trim( szText )
if(!szText[0] || szText[0] == '#' || szText[0] == ';' || (szText[0] == '/' && szText[1] == '/'))
{
continue
}
parse(szText, szCommand, charsmax(szCommand))
register_clcmd(szCommand, "OpeningMotdCommands")
}
}
}

public plugin_end()
{
new TempGroup[Group], iSize = ArraySize(g_aGroups)

for(new i; i<iSize; i++)
{
ArrayGetArray(g_aGroups, i, TempGroup)
ArrayDestroy(TempGroup[GroupArrayOffset])
}

ArrayDestroy(g_aGroups)

nvault_close(g_iNvault)
}

public client_connect(id)
{
g_szAuthid[id] = "C"
}

public client_authorized( id )
{
if( g_szAuthid[id][0] == 'P' )
{
get_user_authid(id, g_szAuthid[id], AUTHID_LENGTH-1)
GetPlayerSettings(id)
}
else
{
get_user_authid(id, g_szAuthid[id], AUTHID_LENGTH-1)
}
}

public client_putinserver(id)
{
g_iMenuOption[id] = mGroups
g_PlayerGroup[id][GroupName][0] = 0
g_PlayerGroup[id][GroupArrayOffset] = 0

if( g_szAuthid[id][0] == 'C' )
{
g_szAuthid[id] = "P"
return
}

static szSettings[8], szVolume[4], szRepeat[2], szListening[2], iVolume, iDisconnectTime
nvault_lookup(g_iNvault, g_szAuthid[id], szSettings, charsmax(szSettings), iDisconnectTime)
parse(szSettings, szVolume, charsmax(szVolume), szRepeat, charsmax(szRepeat), szListening, charsmax(szListening))

if( (iVolume = str_to_num(szVolume)) )
{
g_iVolume[id] = min(iVolume, 100)
}
else
{
g_iVolume[id] = DEFAULT_VOLUME
}

if( str_to_num(szRepeat) )
{
SetIdBits(g_bRepeat, id)
}
else
{
ClearIdBits(g_bRepeat, id)
}

if( get_systime() - iDisconnectTime < MAX_RECONNECT_TIME
&& str_to_num(szListening) == 1
&& get_pcvar_num(g_pCvarNoMotd) )
{
SetIdBits(g_bListening, id)
g_iMotdRegistered = register_message(gmsgMOTD, "Message_MOTD")
}
else
{
ClearIdBits(g_bListening, id)
}
}

GetPlayerSettings(id)
{
new szSettings[8], szVolume[4], szRepeat[2], iVolume
nvault_get(g_iNvault, g_szAuthid[id], szSettings, charsmax(szSettings))
parse(szSettings, szVolume, charsmax(szVolume), szRepeat, charsmax(szRepeat))

if( (iVolume = str_to_num(szVolume)) )
{
g_iVolume[id] = min(iVolume, 100)
}
else
{
g_iVolume[id] = DEFAULT_VOLUME
}

if( str_to_num(szRepeat) )
{
SetIdBits(g_bRepeat, id)
}
else
{
ClearIdBits(g_bRepeat, id)
}

ClearIdBits(g_bListening, id)
}

public client_disconnect( id )
{
static szSettings[8]
formatex(szSettings, charsmax(szSettings), "%d %d %d",
g_iVolume[id],
_:!!(GetIdBits(g_bRepeat, id)),
_:!!(GetIdBits(g_bListening, id)))
nvault_set(g_iNvault, g_szAuthid[id], szSettings)

g_szAuthid[id] = "D"
}

public Message_MOTD(iMsgId, iDest, id)
{
if( GetIdBits(g_bListening, id) )
{
if( get_msg_arg_int(1) )
{
unregister_message(gmsgMOTD, g_iMotdRegistered)
}
return PLUGIN_HANDLED
}
return PLUGIN_CONTINUE
}

public ClientCommand_HlmpMenu(id)
{
DisplayMenu(id, g_iMenuPosition[id] = 0)
}

DisplayMenu(id, iPos = 0)
{
new szMenu[1024], n
new iKeys = MENU_KEY_6|MENU_KEY_7|MENU_KEY_0

n = formatex(szMenu[n], charsmax(szMenu)-n, "\rRadio^n^n")

switch( g_iMenuOption[id] )
{
case mGroups:
{
new iStart = iPos * 5
new iStop = min(iStart + 5 , g_iGroupsCount)
new aGroup[Group]

n += formatex(szMenu[n], charsmax(szMenu)-n, "\w%L^n", id, "HLMP_GROUPS")

for(new i=iStart, j; i<iStop; i++)
{
iKeys |= (1<<j)
ArrayGetArray(g_aGroups, i, aGroup)
n += formatex(szMenu[n], charsmax(szMenu)-n, "\w%d. \r%s^n", ++j, aGroup[GroupName])
}
iPos = iStop - iStart
if( iPos < 5 )
{
for(new i; i < 5-iPos; i++)
{
n += formatex(szMenu[n], charsmax(szMenu)-n, "^n")
}
}

if( g_PlayerGroup[id][GroupName][0] )
{
n += formatex(szMenu[n], charsmax(szMenu)-n, "\w6. \y%s^n", g_PlayerGroup[id][GroupName])
}
else
{
n += formatex(szMenu[n], charsmax(szMenu)-n, "\w6. \y%L^n", id, "HLMP_CONFIG")
}
n += formatex(szMenu[n], charsmax(szMenu)-n, "\w7. \y%L^n\w", id, "HLMP_STOPMUSIC")

if( iStart )
{
iKeys |= MENU_KEY_8
n += formatex(szMenu[n], charsmax(szMenu)-n, "8. %L^n", id, "BACK")
}
else
{
n += formatex(szMenu[n], charsmax(szMenu)-n, "^n")
}

if( iStop < g_iGroupsCount )
{
iKeys |= MENU_KEY_9
n += formatex(szMenu[n], charsmax(szMenu)-n, "9. %L^n", id, "MORE")
}
else
{
n += formatex(szMenu[n], charsmax(szMenu)-n, "^n")
}
}
case mRadios:
{
new Array:aRadios = g_PlayerGroup[id][GroupArrayOffset]
new aCurRadio[Radios]
new iRadiosNum = ArraySize(aRadios)

new iStart = iPos * 5
new iStop = min(iStart + 5 , iRadiosNum)

n += formatex(szMenu[n], charsmax(szMenu)-n, "\d%s^n", g_PlayerGroup[id][GroupName])

for(new i=iStart, j; i<iStop; i++)
{
iKeys |= (1<<j)
ArrayGetArray(aRadios, i, aCurRadio)
n += formatex(szMenu[n], charsmax(szMenu)-n, "\w%d. \r%s^n", ++j, aCurRadio[RadioName])
}
iPos = iStop - iStart
if( iPos < 5 )
{
for(new i; i< 5 - iPos; i++)
{
n += formatex(szMenu[n], charsmax(szMenu)-n, "^n")
}
}

n += formatex(szMenu[n], charsmax(szMenu)-n, "\w6. \y%L^n", id, "HLMP_CONFIG")
n += formatex(szMenu[n], charsmax(szMenu)-n, "\w7. \y%L^n\w", id, "HLMP_STOPMUSIC")

if( iStart )
{
iKeys |= MENU_KEY_8
n += formatex(szMenu[n], charsmax(szMenu)-n, "8. %L^n", id, "BACK")
}
else
{
n += formatex(szMenu[n], charsmax(szMenu)-n, "^n")
}

if( iStop < iRadiosNum )
{
iKeys |= MENU_KEY_9
n += formatex(szMenu[n], charsmax(szMenu)-n, "9. %L^n", id, "MORE")
}
else
{
n += formatex(szMenu[n], charsmax(szMenu)-n, "^n")
}

}
case mConfig:
{
iKeys |= MENU_KEY_1|MENU_KEY_2|MENU_KEY_3|MENU_KEY_4|MENU_KEY_6|MENU_KEY_7

n += formatex(szMenu[n], charsmax(szMenu)-n, "\d%L^n", id, "HLMP_CONFIG")

n += formatex(szMenu[n], charsmax(szMenu)-n, "\w1. \y%L\R%L^n", id, "HLMP_REPEAT", id, GetIdBits(g_bRepeat, id) ? "ON" : "OFF")
n += formatex(szMenu[n], charsmax(szMenu)-n, "\w2. \y%L +\R%d^n", id, "HLMP_VOLUME", g_iVolume[id])
n += formatex(szMenu[n], charsmax(szMenu)-n, "\w3. \y%L -^n", id, "HLMP_VOLUME")
n += formatex(szMenu[n], charsmax(szMenu)-n, "\w4. \y%L^n^n", id, "HLMP_ABOUT")

n += formatex(szMenu[n], charsmax(szMenu)-n, "\w6. \yGroups^n")
n += formatex(szMenu[n], charsmax(szMenu)-n, "\w7. \y%L^n^n^n", id, "HLMP_STOPMUSIC")
}
}

n += formatex(szMenu[n], charsmax(szMenu)-n, "\w0. %L", id, "EXIT")

show_menu(id, iKeys, szMenu, 30, "HLMP")

return PLUGIN_HANDLED
}

public HlmpMenuAction(id, iKey)
{
switch( g_iMenuOption[id] )
{
case mGroups:
{
switch( iKey )
{
case 0..4:
{
ArrayGetArray(g_aGroups, g_iMenuPosition[id]*5 + iKey, g_PlayerGroup[id])

g_iMenuOption[id] = mRadios
DisplayMenu(id, g_iMenuPosition[id] = 0)
}
case 5:
{
if( g_PlayerGroup[id][GroupArrayOffset] )
{
g_iMenuOption[id] = mRadios
DisplayMenu(id, g_iMenuPosition[id])
}
else
{
g_iMenuOption[id] = mConfig
DisplayMenu(id, g_iMenuPosition[id] = 0)
}
}
case 6:
{
ClientCommand_StopMusic(id)
}
case 7:
{
if( --g_iMenuPosition[id] < 0 )
{
g_iMenuPosition[id] = 0
}
DisplayMenu(id, g_iMenuPosition[id])
}
case 8:
{
if( ++g_iMenuPosition[id] >= g_iGroupsCount / 5 )
{
g_iMenuPosition[id] = g_iGroupsCount / 5
}
DisplayMenu(id, g_iMenuPosition[id])
}
case 9:
{
return PLUGIN_HANDLED
}
}
}
case mRadios:
{
switch( iKey )
{
case 0..4:
{
PlayMusic(id, g_PlayerGroup[id][GroupArrayOffset], g_iMenuPosition[id]*5 + iKey)
}
case 5:
{
g_iMenuOption[id] = mConfig
DisplayMenu(id, g_iMenuPosition[id] = 0)
}
case 6:
{
ClientCommand_StopMusic(id)
}
case 7:
{
if( --g_iMenuPosition[id] < 0 )
{
g_iMenuPosition[id] = 0
}
DisplayMenu(id, g_iMenuPosition[id])
}
case 8:
{
new iSize = ArraySize(g_PlayerGroup[id][GroupArrayOffset])
if( ++g_iMenuPosition[id] >= iSize / 5 )
{
g_iMenuPosition[id] = iSize / 5
}
DisplayMenu(id, g_iMenuPosition[id])
}
case 9:
{
return PLUGIN_HANDLED
}
}
}
case mConfig:
{
switch( iKey )
{
case 0:
{
if( GetIdBits(g_bRepeat, id) )
{
ClearIdBits(g_bRepeat, id)
}
else
{
SetIdBits(g_bRepeat, id)
}
client_print(id, print_chat, "%L", id, "HLMP_CONFIGMENUTIP")
DisplayMenu(id)
}
case 1:
{
if( (g_iVolume[id] += 5) > 100)
{
g_iVolume[id] = 100
}
client_print(id, print_chat, "%L", id, "HLMP_CONFIGMENUTIP")
DisplayMenu(id)
}
case 2:
{
if( (g_iVolume[id] -= 5) < 0)
{
g_iVolume[id] = 0
}
client_print(id, print_chat, "%L", id, "HLMP_CONFIGMENUTIP")
DisplayMenu(id)
}
case 3:
{
client_print(id, print_chat, "HL Media Player %s by ConnorMcLeod, download link in console.", VERSION)
client_print(id, print_center, "HL Media Player %s by ConnorMcLeod", VERSION)
client_print(id, print_console, "http://forums.alliedmods.net/showthread.php?p=833070#post833070")
}
case 5:
{
g_iMenuOption[id] = mGroups
DisplayMenu(id, g_iMenuPosition[id] = 0)
}
case 6:
{
ClientCommand_StopMusic(id)
}
case 9:
{
return PLUGIN_HANDLED
}
default:
{
DisplayMenu(id)
}
}
}
}
return PLUGIN_HANDLED
}

PlayMusic(id, Array:aGroup, iRadio)
{
new Radio[Radios]
ArrayGetArray(aGroup, iRadio, Radio)

if( get_pcvar_num(g_pCvarShowAll) )
{
new szName[32]
get_user_name(id, szName, charsmax(szName))
client_print(0, print_chat, "%L", LANG_PLAYER, "HLMP_LISTENING", szName, Radio[RadioName])
}

new szMotd[1024], n

n = formatex(szMotd[n], charsmax(szMotd)-n, "<html><head><meta http-equiv=^"content-type^" content=^"text/html; charset=UTF-8^"></head><body bgcolor=^"#000000^" align=^"center^"><span style=^"color: #FFB000; font-size: 9pt^">Now playing: %s <br>", Radio[RadioName])
n += formatex(szMotd[n], charsmax(szMotd)-n, "<object classid=CLSID:6BF52A52-394A-11d3-B153-00C04F79FAA6 codebase=http://www.microsoft.com/ntserver/netshow/download/en/nsmp2inf.cab#Version=5,1,51,415 type=application/x-oleobject name=msplayer width=256 height=65 align=^"middle^" id=msplayer>")
n += formatex(szMotd[n], charsmax(szMotd)-n, "<param name=^"enableContextMenu^" value=^"0^"><param name=^"stretchToFit^" value=^"1^">")
if(GetIdBits(g_bRepeat, id))
{
n += formatex(szMotd[n], charsmax(szMotd)-n, "<param name=^"AutoRewind^" value=^"1^">")
}
n += formatex(szMotd[n], charsmax(szMotd)-n, "<param name=^"Volume^" value=^"%d^">", g_iVolume[id])
n += formatex(szMotd[n], charsmax(szMotd)-n, "<param name=^"AutoStart^" value=^"1^"><param name=^"URL^" value=^"%s^">", Radio[RadioUrl])
n += formatex(szMotd[n], charsmax(szMotd)-n, "<param name=^"uiMode^" value=^"full^"><param name=^"width^" value=^"256^"><param name=^"height^" value=^"65^">")
n += formatex(szMotd[n], charsmax(szMotd)-n, "<param name=^"TransparentAtStart^" value=^"1^"></object><br>^"%L^"</span>", id, "HLMP_CLOSEWINDOW")
n += formatex(szMotd[n], charsmax(szMotd)-n, "</body></html>")

show_motd(id, szMotd, "HL Media Player")

SetIdBits(g_bListening, id)
}

public ClientCommand_StopMusic(id)
{
new szMotd[256]
formatex(szMotd, charsmax(szMotd), "<html><head><meta http-equiv=^"content-type^" content=^"text/html; charset=UTF-8^"></head><body bgcolor=^"#000000^" align=^"center^"><span style=^"color: #FFB000; font-size: 9pt^">^"%L^"</span></body></html>", id, "HLMP_CLOSEWINDOW")
show_motd(id, szMotd, "HL Media Player")
ClearIdBits(g_bListening, id)
return PLUGIN_HANDLED
}

public OpeningMotdCommands(id)
{
ClearIdBits(g_bListening, id)
}
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Altaj
сообщение 6.5.2015, 14:10
Сообщение #3


Стаж: 12 лет
Город: Барнаул

Сообщений: 456
Благодарностей: 442
Полезность: 565

Не вижу. В какой строке прописать свое радио?
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя San4aus
сообщение 6.5.2015, 14:39
Сообщение #4
Стаж: 15 лет

Сообщений: 383
Благодарностей: 237
Полезность: 612

Цитата(Altaj @ 6.5.2015, 15:10) *
Не вижу. В какой строке прописать свое радио?

mediafiles.ini нужно создать и туда вписать.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Immunity
сообщение 6.5.2015, 14:41
Сообщение #5
Стаж: 11 лет

Сообщений: 444
Благодарностей: 119
Полезность: 139

Miniradio By SLIMSHADY 2.5
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Templar
сообщение 6.5.2015, 17:13
Сообщение #6
Иконка группы

Стаж: 18 лет

Сообщений: 2680
Благодарностей: 978
Полезность: 860

Меценат Меценат

Immunity, не один не второй не работает на стиме...
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
progamer
сообщение 10.5.2015, 9:20
Сообщение #7
Стаж: 11 лет

Сообщений: 352
Благодарностей: 23
Полезность: < 0

Цитата(Templar @ 6.5.2015, 18:13) *
Immunity, не один не второй не работает на стиме...

На всех версиях до 6ХХХ работает без проблем.
Главное что работает на самой ходовой 4554.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
progamer
сообщение 10.5.2015, 19:24
Сообщение #8
Стаж: 11 лет

Сообщений: 352
Благодарностей: 23
Полезность: < 0

кстати выкладывали новый код мотд окна чтобы работало на стиме,
но только под другую версию
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
  Ответить в данную темуНачать новую тему
 
0 пользователей и 1 гостей читают эту тему: