#include <amxmodx>
         
        new const PLUGIN[] = "Funny Sounds";
        new const VERSION[] = "1.0";
        new const AUTHOR[] = "mforce";
         
         
        new const PREFIX[] = ".:DarK*_*Knight:.";
         
        #define IMMUN ADMIN_KICK            //Adminoknak nincs időlimit
        //#define ACCESS_FLAG             ADMIN_KICK          // - Type // before # if you want it for all players.
        #define TIME_BETWEEN_SOUNDS     30                  // - in seconds
         
        new Array:musicname, Array:musicpath;
        new g_aSize;
        new g_iTimeExpired[33], bool:g_iSwitchOff[33];
         
        public plugin_init() {
            register_plugin(PLUGIN, VERSION, AUTHOR);
           
            register_clcmd("say", "sayhandler");
            register_clcmd("say_team", "sayhandler");
            register_clcmd("say /sounds", "sound_switchoff");
            register_clcmd("say /soundlist", "musicmenu");
            set_task(300.0, "toswitchoff", 0, .flags="b")
        }
         
        public toswitchoff() {
            ChatColor(0, "^4[%s]^1 %L ^3/sounds", PREFIX, LANG_SERVER, "A chathangok ki - vagy bekapcsolásához, írd be:");
        }
         
        public plugin_precache() {
            musicname = ArrayCreate(32);
            musicpath = ArrayCreate(64);
           
            new sBuffer[256], sFile[64], sSoundName[32], sSoundPath[64], pFile;
         
            get_localinfo("amxx_configsdir", sFile, charsmax(sFile));
            format(sFile, charsmax(sFile), "%s/funny_sounds.ini", sFile);
         
            pFile = fopen(sFile, "rt");
         
            if(pFile) {    
                while(!feof(pFile)) {
                    fgets(pFile, sBuffer, charsmax(sBuffer));
                    trim(sBuffer);
                    if(sBuffer[0] == ';' || sBuffer[0] == ' ') continue;
         
                    parse(sBuffer, sSoundName, charsmax(sSoundName), sSoundPath, charsmax(sSoundPath));
         
                    if(containi(sSoundPath, ".mp3") != -1 || containi(sSoundPath, ".wav") != -1) {
                        precache_sound(sSoundPath);
                        ArrayPushString(musicname, sSoundName);
                        ArrayPushString(musicpath, sSoundPath);
                    }
                }
                fclose(pFile);
                g_aSize = ArraySize(musicname);
            }
            else write_file(sFile, ";^"anything^" ^"any_dir/anything.mp3^"^n");
        }
         
        public sayhandler(id) {
            #if defined ACCESS_FLAG
            if(~get_user_flags(id) & ACCESS_FLAG) return;
            #endif
         
            new message[190]; read_args(message, charsmax(message));
            remove_quotes(message);
            new sSoundName[32];
           
            for(new i; i<g_aSize; i++) {
                ArrayGetString(musicname, i, sSoundName, charsmax(sSoundName));
                if(equali(message, sSoundName)) {
                    expirecheck(id, i);
                }
            }
        }
         
        /*expirecheck(id, item) {
            new usrtime = get_user_time(id);
               
            if(usrtime >= g_iTimeExpired[id]) {
                playsound(item);
                g_iTimeExpired[id] = (usrtime + Másodpercet);
            }
            else
                ColorChat(id, NORMAL, "^4[%s]^1 %L", PREFIX, LANG_SERVER, "várnod kell" , (g_iTimeExpired[id] - usrtime));
        }*/
         
        expirecheck(id, item) {
            new usrtime = get_user_time(id);
               
            if(usrtime >= g_iTimeExpired[id]) {
                playsound(item);
                g_iTimeExpired[id] = (usrtime + TIME_BETWEEN_SOUNDS);
            }
            #if defined IMMUN
            else if(get_user_flags(id) & IMMUN)
            {
                playsound(item);
            }
            #endif
            else
                ChatColor(id, "^4[%s]^1 %L", PREFIX, LANG_SERVER, "Még várnod kell másodpercet, mielőtt újra hangot játszanál le" , (g_iTimeExpired[id] - usrtime));
        }
         
        playsound(item) {
            new szSound[64]; ArrayGetString(musicpath, item, szSound, charsmax(szSound));
            new makesound[128];
            if(containi(szSound, ".mp3") != -1)
                formatex(makesound, charsmax(makesound), "mp3 play ^"sound/%s^"", szSound);
            else
                formatex(makesound, charsmax(makesound), "spk ^"%s^"", szSound);
         
         
            new players[32], num, tempid;
            get_players(players, num, "c");
            for(new i; i<num; i++) {
                tempid = players[i];
                if(!g_iSwitchOff[tempid])
                    client_cmd(tempid, "%s", makesound);
            }
        }
         
        public sound_switchoff(id) {
            switch(g_iSwitchOff[id]) {
                case false: {
                    g_iSwitchOff[id] = true;
                    client_cmd(id, "setinfo _funnysoundsoff 1");
                    ChatColor(id, "^4[%s]^3 %L", PREFIX, LANG_SERVER, "Kikapcsoltad a chathangok lejátszását");
                }
                case true: {
                    g_iSwitchOff[id] = false;
                    client_cmd(id, "setinfo _funnysoundsoff 0");
                    ChatColor(id, "^4[%s]^3 %L", PREFIX, LANG_SERVER, "Bekapcsoltad a chathangok lejátszását");
                }
            }
        }
         
        public client_putinserver(id) {
            if(is_user_sounds_off(id))
                g_iSwitchOff[id] = true;
        }
         
        public client_disconnected(id) {
            g_iTimeExpired[id] = 0;
            g_iSwitchOff[id] = false;
        }
         
        public plugin_end() {
            ArrayDestroy(musicname);
            ArrayDestroy(musicpath);
        }
         
        stock bool:is_user_sounds_off(id) {
            new switcher[8];
            get_user_info(id, "_funnysoundsoff", switcher, charsmax(switcher));
            if(equal(switcher, "1")) return true;
            return false;
        }
         
        public musicmenu(id) {
            #if defined ACCESS_FLAG
            if(~get_user_flags(id) & ACCESS_FLAG) return;
            #endif
           
            new s_MenuName[128]; formatex(s_MenuName, charsmax(s_MenuName), "%s^nby \r%s \y", PLUGIN, AUTHOR);
            new menu = menu_create(s_MenuName, "musicmenu_h");
            new sSoundName[32];
            for(new i; i<g_aSize;i++) {
                ArrayGetString(musicname, i, sSoundName, charsmax(sSoundName));
                menu_additem(menu, sSoundName, "", 0)
            }
            menu_setprop(menu, MPROP_EXIT, MEXIT_ALL);
            menu_setprop(menu, MPROP_BACKNAME, "Vissza");
            menu_setprop(menu, MPROP_NEXTNAME, "Következő");
            menu_setprop(menu, MPROP_EXITNAME, "Kilépés");
            menu_display(id, menu, 0);
        }
         
        public musicmenu_h(id, menu, item) {
            if(item == MENU_EXIT) {
                menu_destroy(menu);
                return PLUGIN_HANDLED;
            }
           
            expirecheck(id, item);
           
            menu_destroy(menu);
            return PLUGIN_HANDLED;
        }
         
        stock ChatColor(const id, const szMessage[], any:...) {
                static pnum, players[32], szMsg[190], IdMsg;
                vformat(szMsg, charsmax(szMsg), szMessage, 3);
               
                if(!IdMsg) IdMsg = get_user_msgid("SayText");
               
                if(id) {
                        if(!is_user_connected(id)) return;
                        players[0] = id;
                        pnum = 1;
                }
                else get_players(players, pnum, "ch");
               
                for(new i; i < pnum; i++) {
                        message_begin(MSG_ONE, IdMsg, .player = players[i]);
                        write_byte(players[i]);
                        write_string(szMsg);
                        message_end();
                }
        }