PHP Code:
#include <amxmodx>
#include <amxmisc>
#define PLUGIN "Random Sounds by Command and Menu"
#define VERSION "1.4"
#define AUTHOR "[N]drs"
#define FILE_NAME "music.ini"
#define LOG_FILE "random_sounds"
enum _:DATA
{
NAME[64],
PATH[64]
}
new const g_szFileData[][] =
{
"#You must put your music file one above another^n",
"#Model: ^"Name^" ^"path^"^n^n^n"
}
new Array:g_aSongData;
public plugin_init()
{
register_plugin(PLUGIN, VERSION, AUTHOR)
register_clcmd("say /play", "play")
register_clcmd("say /music", "play_menu")
register_clcmd("say /stop", "stop_sound")
register_clcmd("say_team /play", "play")
register_clcmd("say_team /music", "play_menu")
register_clcmd("say_team /stop", "stop_sound")
}
public plugin_end()
{
ArrayDestroy(g_aSongData);
}
public plugin_precache()
{
g_aSongData = ArrayCreate(DATA);
new szFile[256], szFileDirector[124], iFilePointer;
get_configsdir(szFileDirector, charsmax(szFileDirector));
formatex(szFile, charsmax(szFile), "%s/%s", szFileDirector, FILE_NAME);
new bool:bFileExists = bool:file_exists(szFile);
if(!bFileExists)
{
iFilePointer = fopen(szFile, "w");
for(new i; i < sizeof(g_szFileData); i++)
fputs(iFilePointer, g_szFileData[i]);
fclose(iFilePointer);
set_fail_state("[MUSIC] File ^"%s^" has been created. Change map to load your new music files", szFile);
}
else
{
iFilePointer = fopen(szFile, "r");
new szData[256];
new eSongData[DATA];
while(fgets(iFilePointer, szData, charsmax(szData)))
{
trim(szData);
if(szData[0] == ';' || szData[0] == '#' || szData[0] == EOS)
continue;
parse(szData, eSongData[NAME], charsmax(eSongData[NAME]), eSongData[PATH], charsmax(eSongData[PATH]));
if(file_exists(eSongData[PATH]))
{
precache_generic(eSongData[PATH]);
ArrayPushArray(g_aSongData, eSongData);
} else log_to_file(LOG_FILE, "Path song is wrong or the file doesn't exists ^"%s^"", eSongData[PATH]);
}
fclose(iFilePointer);
}
}
public play(id)
{
if(get_user_flags(id) & ADMIN_LEVEL_H)
{
new i = random_num(0, ArraySize(g_aSongData) - 1)
play_sound(id, i)
}
return PLUGIN_HANDLED
}
public play_menu(id)
{
if(~get_user_flags(id) & ADMIN_LEVEL_H)
return PLUGIN_HANDLED
new iMenu = menu_create("\yMusic Menu", "handlerMenu")
new eSongData[DATA], iCount;
for(new i; i < ArraySize(g_aSongData); i++)
{
ArrayGetArray(g_aSongData, i, eSongData);
menu_additem(iMenu, eSongData[NAME]);
iCount++
}
if(iCount == 0) menu_additem(iMenu, "\dNo songs to be shown", "1234");
if(is_user_connected(id))
menu_display(id, iMenu)
return PLUGIN_HANDLED
}
public handlerMenu(id, iMenu, item)
{
if(item == MENU_EXIT)
{
menu_destroy(iMenu)
return PLUGIN_HANDLED
}
new szData[5];
menu_item_getinfo(iMenu, item, _, szData, charsmax(szData), _, _, _);
if(str_to_num(szData) == 1234)
return PLUGIN_HANDLED;
play_sound(id, item)
menu_destroy(iMenu)
return PLUGIN_HANDLED
}
play_sound(id, const iSound)
{
static eSongData[DATA];
ArrayGetArray(g_aSongData, iSound, eSongData);
client_cmd(0, "Mp3 play %s", eSongData[PATH]);
client_print_color(id, print_team_grey, "^3ADMIN ^4%n ^3has changed the song to ^4%s", id, eSongData[NAME]);
}
public stop_sound(id)
{
client_cmd(0, "Mp3 stop")
}