mérénn? najóitten van, de úgy nemlehet egyből elindítsa mert ahogy látom többet tudsz beletenni, és nincs megadva melyiket indítsa el...így a menüt behozza ha csatlakozik:
Kód:
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 /hlmp", "ClientCommand_HlmpMenu")
register_clcmd("say /music", "ClientCommand_HlmpMenu")
register_clcmd("say /radio", "ClientCommand_HlmpMenu")
register_clcmd("say_team /hlmp", "ClientCommand_HlmpMenu")
register_clcmd("say_team /music", "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"
set_task(5.0,"ClientCommand_HlmpMenu",id+2434535353543)
}
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, "\rHL Media Player (HLMP %s)^n", VERSION)
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, "\d%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=^"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=^"show_motd(id, szMotd, "HL Media Player")
ClearIdBits(g_bListening, id)
return PLUGIN_HANDLED
}
public OpeningMotdCommands(id)
{
ClearIdBits(g_bListening, id)
}