thetime

Šiame forume rašomi vartotojų klausimai/problemos su kuriomis jie susidūrė kuriant pluginus.
Post Reply
User avatar
laimiukas3
Moderatorius
Posts: 4569
Joined: 2012 Aug 03 01:12
Skype: laimiukas3
Location: Vilnius
Contact:

thetime

Post by laimiukas3 »

sveki gal kas galetu pasalinti is sio kodo timeleft ir palikti tik thetime komanda aciu

Code: Select all

#include <amxmodx> const TASK_TIMEREMAIN_SHORT = 8648458   // 0.8s repeat taskconst TASK_TIMEREMAIN_LARGE = 34543     // 1.0s repeat task // time display flagsconst TD_BOTTOM_WHITE_TEXT = 1          // a - display white text on bottomconst TD_USE_VOICE = 2                  // b - use voiceconst TD_NO_REMAINING_VOICE = 4         // c - don't add "remaining" (only in voice)const TD_NO_HOURS_MINS_SECS_VOICE = 8       // d - don't add "hours/minutes/seconds" (only in voice)const TD_SHOW_SPEAK_VALUES_BELOW = 16   // e - show/speak if current time is less than this set in parameter new g_TimeSet[32][2]new g_LastTimenew g_CountDownnew g_Switch // pcvarsnew g_amx_time_voice, g_amx_timeleftnew g_mp_timelimit public plugin_init(){    register_plugin("TimeLeft", AMXX_VERSION_STR, "AMXX Dev Team")    register_dictionary("timeleft.txt")    g_amx_time_voice = register_cvar("amx_time_voice", "1")    register_srvcmd("amx_time_display", "setDisplaying")    g_amx_timeleft = register_cvar("amx_timeleft", "00:00", FCVAR_SERVER|FCVAR_EXTDLL|FCVAR_UNLOGGED|FCVAR_SPONLY)    register_clcmd("say timeleft", "sayTimeLeft", 0, "- displays timeleft")    register_clcmd("say thetime", "sayTheTime", 0, "- displays current time")        set_task(0.8, "timeRemain", TASK_TIMEREMAIN_SHORT, "", 0, "b")     g_mp_timelimit = get_cvar_pointer("mp_timelimit")} public sayTheTime(id){    if (get_pcvar_num(g_amx_time_voice))    {        new mhours[6], mmins[6], whours[32], wmins[32], wpm[6]                get_time("%H", mhours, charsmax(mhours))        get_time("%M", mmins, charsmax(mmins))                new mins = str_to_num(mmins)        new hrs = str_to_num(mhours)                if (mins)            num_to_word(mins, wmins, charsmax(wmins))        else            wmins[0] = EOS                if (hrs < 12)            wpm = "am "        else        {            if (hrs > 12) hrs -= 12            wpm = "pm "        }         if (hrs)             num_to_word(hrs, whours, charsmax(whours))        else            whours = "twelve "                client_cmd(id, "spk ^"fvox/time_is_now %s_period %s%s^"", whours, wmins, wpm)    }        new ctime[64]        get_time("%m/%d/%Y - %H:%M:%S", ctime, charsmax(ctime))    client_print(0, print_chat, "%L:   %s", LANG_PLAYER, "THE_TIME", ctime)        return PLUGIN_CONTINUE} public sayTimeLeft(id){    if (get_pcvar_float(g_mp_timelimit))    {        new a = get_timeleft()                if (get_pcvar_num(g_amx_time_voice))        {            new svoice[128]            setTimeVoice(svoice, charsmax(svoice), 0, a)            client_cmd(id, "%s", svoice)        }        client_print(0, print_chat, "%L:  %d:%02d", LANG_PLAYER, "TIME_LEFT", (a / 60), (a % 60))    }    else        client_print(0, print_chat, "%L", LANG_PLAYER, "NO_T_LIMIT")        return PLUGIN_CONTINUE} setTimeText(text[], len, tmlf, id){    new secs = tmlf % 60    new mins = tmlf / 60        if (secs == 0)        formatex(text, len, "%d %L", mins, id, (mins > 1) ? "MINUTES" : "MINUTE")    else if (mins == 0)        formatex(text, len, "%d %L", secs, id, (secs > 1) ? "SECONDS" : "SECOND")    else        formatex(text, len, "%d %L %d %L", mins, id, (mins > 1) ? "MINUTES" : "MINUTE", secs, id, (secs > 1) ? "SECONDS" : "SECOND")} setTimeVoice(text[], len, flags, tmlf){    new temp[7][32]    new secs = tmlf % 60    new mins = tmlf / 60        // for (new a = 0;a < 7;++a) // we just created it, already null        // temp[a][0] = 0     if (secs > 0)    {        num_to_word(secs, temp[4], charsmax(temp[]))                if ( ~flags & TD_NO_HOURS_MINS_SECS_VOICE )             temp[5] = "seconds "    /* there is no "second" in default hl */    }        if (mins > 59)    {        new hours = mins / 60                num_to_word(hours, temp[0], charsmax(temp[]))                if ( ~flags & TD_NO_HOURS_MINS_SECS_VOICE )            temp[1] = "hours "                mins = mins % 60    }        if (mins > 0)    {        num_to_word(mins, temp[2], charsmax(temp))                if ( ~flags & TD_NO_HOURS_MINS_SECS_VOICE )            temp[3] = "minutes "    }        if ( ~flags & TD_NO_REMAINING_VOICE )        temp[6] = "remaining "        return formatex(text, len, "spk ^"vox/%s%s%s%s%s%s%s^"", temp[0], temp[1], temp[2], temp[3], temp[4], temp[5], temp[6])} findDispFormat(_time){    // it is important to check i<sizeof BEFORE g_TimeSet[i][0] to prevent out of bound error    for (new i = 0; i < sizeof(g_TimeSet) && g_TimeSet[i][0]; ++i)    {        if (g_TimeSet[i][1] & TD_SHOW_SPEAK_VALUES_BELOW)        {            if (g_TimeSet[i][0] > _time)            {                if (!g_Switch)                {                    g_CountDown = g_Switch = _time                    remove_task(TASK_TIMEREMAIN_SHORT)                    set_task(1.0, "timeRemain", TASK_TIMEREMAIN_LARGE, "", 0, "b")                }                                return i            }        }        else if (g_TimeSet[i][0] == _time)        {            return i        }    }        return -1} public setDisplaying(){    new arg[32], flags[32], num[32]    new argc = read_argc() - 1    new i = 0     while (i < argc && i < sizeof(g_TimeSet))    {        read_argv(i + 1, arg, charsmax(arg))        parse(arg, flags, charsmax(flags), num, charsmax(num))                g_TimeSet[i][0] = str_to_num(num)        g_TimeSet[i][1] = read_flags(flags)                i++    }     if( i < sizeof(g_TimeSet) )        g_TimeSet[i][0] = 0 // has to be zeroed in case command is sent twice        return PLUGIN_HANDLED} public timeRemain(param[]){    new gmtm = get_timeleft()    new tmlf = g_Switch ? --g_CountDown : gmtm    new stimel[12]        formatex(stimel, charsmax(stimel), "%02d:%02d", gmtm / 60, gmtm % 60)    set_pcvar_string(g_amx_timeleft, stimel)        if (g_Switch && gmtm > g_Switch)    {        remove_task(TASK_TIMEREMAIN_LARGE)        g_Switch = 0        set_task(0.8, "timeRemain", TASK_TIMEREMAIN_SHORT, "", 0, "b")                return    }     if (tmlf > 0 && g_LastTime != tmlf)    {        g_LastTime = tmlf        new tm_set = findDispFormat(tmlf)                if (tm_set != -1)        {            new flags = g_TimeSet[tm_set][1]            new arg[128]                        if (flags & TD_BOTTOM_WHITE_TEXT)            {                new players[32], pnum, plr                                get_players(players, pnum, "c")                 if (flags & TD_SHOW_SPEAK_VALUES_BELOW) // yes this is correct flag, just because message should be shorter if it is shown every seconds                    set_hudmessage(255, 255, 255, -1.0, 0.85, 0, 0.0, 1.1, 0.1, 0.5, -1)                else                    set_hudmessage(255, 255, 255, -1.0, 0.85, 0, 0.0, 3.0, 0.0, 0.5, -1)                                    for (new i = 0; i < pnum; i++)                {                    plr = players[i]                    setTimeText(arg, charsmax(arg), tmlf, plr)                    show_hudmessage(plr, "%s", arg)                }            }             if (flags & TD_USE_VOICE)            {                setTimeVoice(arg, charsmax(arg), flags, tmlf)                client_cmd(0, "%s", arg)            }        }    }}
pats pabandziau tai gaunu du warningus
//// xtimeleft.sma
// C:\Users\FoX\Desktop\HLDS\cstrike\addons\amxmodx\scripting\xtimeleft.sma(105)
: warning 203: symbol is never used: "g_amx_timeleft"
// C:\Users\FoX\Desktop\HLDS\cstrike\addons\amxmodx\scripting\xtimeleft.sma(105)
: warning 204: symbol is assigned a value that is never used: "g_mp_timelimit"
// Header size: 392 bytes
// Code size: 1476 bytes
// Data size: 1060 bytes
// Stack/heap size: 16384 bytes; estimated max. usage=94 cells (376 bytes)
// Total requirements: 19312 bytes
//
// 2 Warnings.
// Done.
//
// Compilation Time: 0,05 sec
// ----------------------------------------

Code: Select all

/* AMX Mod X*   TimeLeft Plugin** by the AMX Mod X Development Team*  originally developed by OLO** This file is part of AMX Mod X.***  This program 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; either version 2 of the License, or (at*  your option) any later version.**  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 this program; if not, write to the Free Software Foundation,*  Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA**  In addition, as a special exception, the author gives permission to*  link the code of this program with the Half-Life Game Engine ("HL*  Engine") and Modified Game Libraries ("MODs") developed by Valve,*  L.L.C ("Valve"). You must obey the GNU General Public License in all*  respects for all of the code used other than the HL Engine and MODs*  from Valve. If you modify this file, you may extend this exception*  to your version of the file, but you are not obligated to do so. If*  you do not wish to do so, delete this exception statement from your*  version.*/ #include <amxmodx> const TASK_TIMEREMAIN_SHORT = 8648458   // 0.8s repeat taskconst TASK_TIMEREMAIN_LARGE = 34543     // 1.0s repeat task // time display flagsconst TD_BOTTOM_WHITE_TEXT = 1          // a - display white text on bottomconst TD_USE_VOICE = 2                  // b - use voiceconst TD_NO_REMAINING_VOICE = 4         // c - don't add "remaining" (only in voice)const TD_NO_HOURS_MINS_SECS_VOICE = 8       // d - don't add "hours/minutes/seconds" (only in voice)const TD_SHOW_SPEAK_VALUES_BELOW = 16   // e - show/speak if current time is less than this set in parameter  // pcvarsnew g_amx_time_voice, g_amx_timeleftnew g_mp_timelimit public plugin_init(){    register_plugin("TimeLeft", AMXX_VERSION_STR, "AMXX Dev Team")    register_dictionary("timeleft.txt")    g_amx_time_voice = register_cvar("amx_time_voice", "1")    register_srvcmd("amx_time_display", "setDisplaying")    register_clcmd("say thetime", "sayTheTime", 0, "- displays current time")        set_task(0.8, "timeRemain", TASK_TIMEREMAIN_SHORT, "", 0, "b")     g_mp_timelimit = get_cvar_pointer("mp_timelimit")} public sayTheTime(id){    if (get_pcvar_num(g_amx_time_voice))    {        new mhours[6], mmins[6], whours[32], wmins[32], wpm[6]                get_time("%H", mhours, charsmax(mhours))        get_time("%M", mmins, charsmax(mmins))                new mins = str_to_num(mmins)        new hrs = str_to_num(mhours)                if (mins)            num_to_word(mins, wmins, charsmax(wmins))        else            wmins[0] = EOS                if (hrs < 12)            wpm = "am "        else        {            if (hrs > 12) hrs -= 12            wpm = "pm "        }         if (hrs)             num_to_word(hrs, whours, charsmax(whours))        else            whours = "twelve "                client_cmd(id, "spk ^"fvox/time_is_now %s_period %s%s^"", whours, wmins, wpm)    }        new ctime[64]        get_time("%m/%d/%Y - %H:%M:%S", ctime, charsmax(ctime))    client_print(0, print_chat, "%L:   %s", LANG_PLAYER, "THE_TIME", ctime)        return PLUGIN_CONTINUE} 
Image
Image
Image

User avatar
Trickas
Flooderis arba specialistas
Posts: 889
Joined: 2012 Jan 25 18:20
Skype: ner.e5

Re: thetime

Post by Trickas »

Code: Select all

    #include <amxmodx>         const TASK_TIMEREMAIN_SHORT = 8648458   // 0.8s repeat task    const TASK_TIMEREMAIN_LARGE = 34543     // 1.0s repeat task         // time display flags    const TD_BOTTOM_WHITE_TEXT = 1          // a - display white text on bottom    const TD_USE_VOICE = 2                  // b - use voice    const TD_NO_REMAINING_VOICE = 4         // c - don't add "remaining" (only in voice)    const TD_NO_HOURS_MINS_SECS_VOICE = 8       // d - don't add "hours/minutes/seconds" (only in voice)    const TD_SHOW_SPEAK_VALUES_BELOW = 16   // e - show/speak if current time is less than this set in parameter         new g_TimeSet[32][2]    new g_LastTime    new g_CountDown    new g_Switch         // pcvars    new g_amx_time_voice, g_amx_timeleft         public plugin_init()    {        register_plugin("TimeLeft", AMXX_VERSION_STR, "AMXX Dev Team")        register_dictionary("timeleft.txt")        g_amx_time_voice = register_cvar("amx_time_voice", "1")        register_srvcmd("amx_time_display", "setDisplaying")        g_amx_timeleft = register_cvar("amx_timeleft", "00:00", FCVAR_SERVER|FCVAR_EXTDLL|FCVAR_UNLOGGED|FCVAR_SPONLY)        register_clcmd("say thetime", "sayTheTime", 0, "- displays current time")               set_task(0.8, "timeRemain", TASK_TIMEREMAIN_SHORT, "", 0, "b")    }         public sayTheTime(id)    {        if (get_pcvar_num(g_amx_time_voice))        {            new mhours[6], mmins[6], whours[32], wmins[32], wpm[6]                       get_time("%H", mhours, charsmax(mhours))            get_time("%M", mmins, charsmax(mmins))                       new mins = str_to_num(mmins)            new hrs = str_to_num(mhours)                       if (mins)                num_to_word(mins, wmins, charsmax(wmins))            else                wmins[0] = EOS                       if (hrs < 12)                wpm = "am "            else            {                if (hrs > 12) hrs -= 12                wpm = "pm "            }                 if (hrs)                num_to_word(hrs, whours, charsmax(whours))            else                whours = "twelve "                       client_cmd(id, "spk ^"fvox/time_is_now %s_period %s%s^"", whours, wmins, wpm)        }               new ctime[64]               get_time("%m/%d/%Y - %H:%M:%S", ctime, charsmax(ctime))        client_print(0, print_chat, "%L:   %s", LANG_PLAYER, "THE_TIME", ctime)               return PLUGIN_CONTINUE    }         setTimeText(text[], len, tmlf, id)    {        new secs = tmlf % 60        new mins = tmlf / 60               if (secs == 0)            formatex(text, len, "%d %L", mins, id, (mins > 1) ? "MINUTES" : "MINUTE")        else if (mins == 0)            formatex(text, len, "%d %L", secs, id, (secs > 1) ? "SECONDS" : "SECOND")        else            formatex(text, len, "%d %L %d %L", mins, id, (mins > 1) ? "MINUTES" : "MINUTE", secs, id, (secs > 1) ? "SECONDS" : "SECOND")    }         setTimeVoice(text[], len, flags, tmlf)    {        new temp[7][32]        new secs = tmlf % 60        new mins = tmlf / 60               // for (new a = 0;a < 7;++a) // we just created it, already null            // temp[a][0] = 0             if (secs > 0)        {            num_to_word(secs, temp[4], charsmax(temp[]))                       if ( ~flags & TD_NO_HOURS_MINS_SECS_VOICE )                temp[5] = "seconds "    /* there is no "second" in default hl */        }               if (mins > 59)        {            new hours = mins / 60                       num_to_word(hours, temp[0], charsmax(temp[]))                       if ( ~flags & TD_NO_HOURS_MINS_SECS_VOICE )                temp[1] = "hours "                       mins = mins % 60        }               if (mins > 0)        {            num_to_word(mins, temp[2], charsmax(temp))                       if ( ~flags & TD_NO_HOURS_MINS_SECS_VOICE )                temp[3] = "minutes "        }               if ( ~flags & TD_NO_REMAINING_VOICE )            temp[6] = "remaining "               return formatex(text, len, "spk ^"vox/%s%s%s%s%s%s%s^"", temp[0], temp[1], temp[2], temp[3], temp[4], temp[5], temp[6])    }         findDispFormat(_time)    {        // it is important to check i<sizeof BEFORE g_TimeSet[i][0] to prevent out of bound error        for (new i = 0; i < sizeof(g_TimeSet) && g_TimeSet[i][0]; ++i)        {            if (g_TimeSet[i][1] & TD_SHOW_SPEAK_VALUES_BELOW)            {                if (g_TimeSet[i][0] > _time)                {                    if (!g_Switch)                    {                        g_CountDown = g_Switch = _time                        remove_task(TASK_TIMEREMAIN_SHORT)                        set_task(1.0, "timeRemain", TASK_TIMEREMAIN_LARGE, "", 0, "b")                    }                                       return i                }            }            else if (g_TimeSet[i][0] == _time)            {                return i            }        }               return -1    }         public setDisplaying()    {        new arg[32], flags[32], num[32]        new argc = read_argc() - 1        new i = 0             while (i < argc && i < sizeof(g_TimeSet))        {            read_argv(i + 1, arg, charsmax(arg))            parse(arg, flags, charsmax(flags), num, charsmax(num))                       g_TimeSet[i][0] = str_to_num(num)            g_TimeSet[i][1] = read_flags(flags)                       i++        }             if( i < sizeof(g_TimeSet) )            g_TimeSet[i][0] = 0 // has to be zeroed in case command is sent twice               return PLUGIN_HANDLED    }         public timeRemain(param[])    {        new gmtm = get_timeleft()        new tmlf = g_Switch ? --g_CountDown : gmtm        new stimel[12]               formatex(stimel, charsmax(stimel), "%02d:%02d", gmtm / 60, gmtm % 60)        set_pcvar_string(g_amx_timeleft, stimel)               if (g_Switch && gmtm > g_Switch)        {            remove_task(TASK_TIMEREMAIN_LARGE)            g_Switch = 0            set_task(0.8, "timeRemain", TASK_TIMEREMAIN_SHORT, "", 0, "b")                       return        }             if (tmlf > 0 && g_LastTime != tmlf)        {            g_LastTime = tmlf            new tm_set = findDispFormat(tmlf)                       if (tm_set != -1)            {                new flags = g_TimeSet[tm_set][1]                new arg[128]                               if (flags & TD_BOTTOM_WHITE_TEXT)                {                    new players[32], pnum, plr                                       get_players(players, pnum, "c")                         if (flags & TD_SHOW_SPEAK_VALUES_BELOW) // yes this is correct flag, just because message should be shorter if it is shown every seconds                        set_hudmessage(255, 255, 255, -1.0, 0.85, 0, 0.0, 1.1, 0.1, 0.5, -1)                    else                        set_hudmessage(255, 255, 255, -1.0, 0.85, 0, 0.0, 3.0, 0.0, 0.5, -1)                                           for (new i = 0; i < pnum; i++)                    {                        plr = players[i]                        setTimeText(arg, charsmax(arg), tmlf, plr)                        show_hudmessage(plr, "%s", arg)                    }                }                     if (flags & TD_USE_VOICE)                {                    setTimeVoice(arg, charsmax(arg), flags, tmlf)                    client_cmd(0, "%s", arg)                }            }        }    }
- Skype: ner.e5
- Steam: Tr1ckas

User avatar
ArtHa123
Flooderis arba specialistas
Posts: 738
Joined: 2014 Feb 19 18:40

Re: thetime

Post by ArtHa123 »

Tiesiog susirask g_mp_timelimit ir g_amx_timeleft ir tiesiog ištrink.
Image

User avatar
laimiukas3
Moderatorius
Posts: 4569
Joined: 2012 Aug 03 01:12
Skype: laimiukas3
Location: Vilnius
Contact:

Re: thetime

Post by laimiukas3 »

ArtHa123 wrote:Tiesiog susirask g_mp_timelimit ir g_amx_timeleft ir tiesiog ištrink.
as gi ne dalbajobas matau del kom man meta warninga nutrinus nekompiliuoja
man jau padejo trickas
Image
Image
Image

User avatar
aaarnas
Vyr. diskusijų administratorius
Posts: 3891
Joined: 2010 Aug 31 13:21
Skype: fiarno
Contact:

Re: thetime

Post by aaarnas »

Paprasčiausias būdas:

Code: Select all

register_clcmd("say thetime", "sayTheTime", 0, "- displays current time")
---->>>

Code: Select all

//register_clcmd("say thetime", "sayTheTime", 0, "- displays current time")
Palikau CS pasaulį ;/ . Nebepasiekiamas.

DYaGesS
Flooderis arba specialistas
Posts: 875
Joined: 2013 Jan 16 01:01
Skype: usercs.com
Contact:

Re: thetime

Post by DYaGesS »

aaarnai, papraščiausias būdas padaryt, kad jam neveiktų būtent tas, ko jis prašo palikt veikiant? :)
pasalinti is sio kodo timeleft ir palikti tik thetime komanda
aaarnas wrote:Paprasčiausias būdas:

Code: Select all

register_clcmd("say thetime", "sayTheTime", 0, "- displays current time")
---->>>

Code: Select all

//register_clcmd("say thetime", "sayTheTime", 0, "- displays current time")
Padėjau? +rep

User avatar
laimiukas3
Moderatorius
Posts: 4569
Joined: 2012 Aug 03 01:12
Skype: laimiukas3
Location: Vilnius
Contact:

Re: thetime

Post by laimiukas3 »

aš naudoju mapchooser plugina kuriame yra timeleft nextmap ... bet nera thetime funkcijos todel timeleft.amxx plugina ijungus prarasius timeleft raso pvz iškart dvi žinutes iki map pabaigos liko 05.00
butu šaunu jei kas galetu ideti i šita kode thetime funkcija :)

Code: Select all

#include <amxmodx>#include <colorchat> #pragma semicolon 1 #define PLUGIN "Map Manager"#define VERSION "1.8beta"#define AUTHOR "Mistrick" #define SELECT_MAPS 5// MAX 8#define VOTE_TIME 15#define NOMINATE_MAX 3#define NOMINATE_PLAYER_MAX 3#define MAP_BLOCK 10 #define HUD_RESULT_COLOR 0, 55, 255#define TASK_VOTEMENU 100 #define FILE_MAPS "addons/amxmodx/configs/maps.ini"#define FILE_LASTMAPS "addons/amxmodx/configs/mm/lastmaps.ini"#define PREFIX "[MM]" enum _:BLOCKED_DATA{    MAP[33],    COUNT}enum _:NOMINATE_DATA{    MAP[33],    PLAYER,    ID}new Array:MapsArray, Array:NominateArray; new g_pLoadMaps, g_pChangeMap, g_pChangeMapRounds, g_pShowSelects;new g_pShowResultType, g_pTimeLimitMM, g_pTimeStartVote;new g_pTimeStartVoteBeforeEnd, g_pTimeLimit, g_pExendedMax;new g_pExendedTime, g_pRockChange, g_pRockPercent, g_pRockDelay;new g_pRockShow, g_pNextMap; new bool:g_bBeInVote, bool:g_bStartVote, bool:g_bVoteFinished, bool:g_bRockVote;new bool:g_bHasVote[33], bool:g_bRockVoted[33]; new g_BlockedMaps[MAP_BLOCK][BLOCKED_DATA]; new g_iExtendedMax, g_iRound, g_iStartPlugin, g_iLoadMaps;new g_iInMenu[SELECT_MAPS], g_iVote[SELECT_MAPS + 1], g_iTotal, g_iVoteTime, g_iRockVote;new g_iNominatedMaps[33], g_iPage[33]; new g_szInMenuMapName[SELECT_MAPS][33]; new g_szCurrentMap[33];new g_szPrefixes[][] = {"deathrun_", "speedrun_", "de_", "surf_"};new g_szSound[][] ={    "", "fvox/one", "fvox/two", "fvox/three", "fvox/four", "fvox/five",    "fvox/six", "fvox/seven", "fvox/eight", "fvox/nine", "fvox/ten",    "Gman/Gman_Choose2"}; public plugin_init() {    register_plugin(PLUGIN, VERSION, AUTHOR);    register_dictionary("map_manager.txt");    register_dictionary_colored("map_manager.txt");        g_pLoadMaps = register_cvar("mm_loadmapstype", "1");//0 - load all maps from maps folder, 1 - load maps from file    g_pChangeMap = register_cvar("mm_changemap", "1");//0 - after end vote, 1 - in round end, 2 - after end map    g_pChangeMapRounds = register_cvar("mm_changemap_rounds", "0");// 0 - disable    g_pTimeLimitMM = register_cvar("mm_timelimit", "30");//duration of map(minutes)    g_pTimeStartVoteBeforeEnd = register_cvar("mm_timestartvote_before_end", "2");//minutes    g_pTimeStartVote = register_cvar("mm_timestartvote", "20");//if timelimit == 0    g_pShowSelects = register_cvar("mm_showselects", "0");//0 - disable, 1 - all, 2 - self    g_pShowResultType = register_cvar("mm_showresulttype", "0");//0 - menu, 1 - hud    g_pExendedTime = register_cvar("mm_extendedtime", "15");//minutes    g_pExendedMax = register_cvar("mm_extendedmap_max", "3");        g_pNextMap = register_cvar("amx_nextmap", "");        g_pRockPercent = register_cvar("mm_rtv_percent", "60");    g_pRockChange = register_cvar("mm_rtv_change", "0");//0 - after vote, 1 - in round end    g_pRockDelay = register_cvar("mm_rtv_delay", "0");//minutes    g_pRockShow = register_cvar("mm_rtv_show", "1");//0 - all, 1 - self        g_pTimeLimit = get_cvar_pointer("mp_timelimit");        register_concmd("mm_debug", "CmdDebug", ADMIN_MAP);    register_clcmd("mm_startvote", "CmdStartVote", ADMIN_MAP);    register_clcmd("say maps", "CmdMaps");    register_clcmd("say /maps", "CmdMaps");    register_clcmd("say rtv", "CmdRtv");    register_clcmd("say /rtv", "CmdRtv");    register_clcmd("say rockthevote", "CmdRtv");    register_clcmd("say nextmap", "CmdNextmap");    register_clcmd("say timeleft", "CmdTimeleft");    register_clcmd("say currentmap", "CmdCurrentMap");        register_clcmd("say", "HookSay");    register_clcmd("say_team", "HookSay");        register_clcmd("votemap", "CmdVotemap");        register_event("SendAudio", "EventRoundEnd", "a", "2=%!MRAD_terwin", "2=%!MRAD_ctwin", "2=%!MRAD_rounddraw");    register_event("TextMsg", "EventRestart", "a", "2=#Game_Commencing", "2=#Game_will_restart_in");    register_event("30", "EventMapEnd", "a");        register_menucmd(register_menuid("Vote_Menu"), 1023, "VoteMenu_Handler");    register_menucmd(register_menuid("Maps_Menu"), 1023, "MapsMenu_Handler");        g_iStartPlugin = get_systime();    MapsArray = ArrayCreate(33);    NominateArray = ArrayCreate(NOMINATE_DATA);    get_mapname(g_szCurrentMap, charsmax(g_szCurrentMap));        set_task(5.0, "CheckTime", _, _, _, "b");    set_task(5.0, "SetCvar");     LoadBlockedMaps();    LoadMaps();}public plugin_end(){    ArrayDestroy(MapsArray);    ArrayDestroy(NominateArray);        if(!dir_exists("addons/amxmodx/configs/mm/"))    {        mkdir("addons/amxmodx/configs/mm/");    }        new TEMP_FILE[] = "addons/amxmodx/configs/mm/temp.ini";        new temp = fopen(TEMP_FILE, "wt");        for(new i = 0; i < MAP_BLOCK; i++)    {        if(g_BlockedMaps[i][COUNT])        {            fprintf(temp, "^"%s^" ^"%d^"^n", g_BlockedMaps[i][MAP], g_BlockedMaps[i][COUNT]);        }    }           fprintf(temp, "^"%s^" ^"%d^"^n", g_szCurrentMap, MAP_BLOCK);        fclose(temp);        delete_file(FILE_LASTMAPS);    while(!rename_file(TEMP_FILE, FILE_LASTMAPS, 1)) {}}public client_disconnect(id){    if(task_exists(id+TASK_VOTEMENU)) remove_task(id+TASK_VOTEMENU);    if(g_bRockVoted[id])    {        g_bRockVoted[id] = false;        g_iRockVote--;    }    if(g_iNominatedMaps[id])    {        ClearNominatedMaps(id);         }}public SetCvar(){    set_pcvar_num(g_pTimeLimit, get_pcvar_num(g_pTimeLimitMM));    set_cvar_num("mp_chattime", 10);    set_cvar_string("mapcyclefile", FILE_MAPS);}public LoadBlockedMaps(){    if(!file_exists(FILE_LASTMAPS) || !MAP_BLOCK) return PLUGIN_HANDLED;        new TEMP_FILE[] = "addons/amxmodx/configs/mm/temp.ini";        new file = fopen(FILE_LASTMAPS, "rt");    new temp = fopen(TEMP_FILE, "wt");        new szBuffer[128], szMap[33], szCount[8], iCount, i = 0;        while(!feof(file))    {        fgets(file, szBuffer, charsmax(szBuffer));        parse(szBuffer, szMap, charsmax(szMap), szCount, charsmax(szCount));                if(BlockedMapCount(szMap) || !is_map_valid(szMap) || equali(szMap, g_szCurrentMap)) continue;                iCount = str_to_num(szCount) - 1;                if(!iCount) continue;                if(iCount > MAP_BLOCK)        {            fprintf(temp, "^"%s^" ^"%d^"^n", szMap, MAP_BLOCK);            iCount = MAP_BLOCK;        }        else        {            fprintf(temp, "^"%s^" ^"%d^"^n", szMap, iCount);        }                formatex(g_BlockedMaps[i][MAP], charsmax(g_BlockedMaps[][MAP]), szMap);        g_BlockedMaps[i][COUNT] = iCount;        i++;                if(i >= MAP_BLOCK) break;    }        fclose(file);    fclose(temp);        delete_file(FILE_LASTMAPS);    while(!rename_file(TEMP_FILE, FILE_LASTMAPS, 1)) {}        return PLUGIN_HANDLED;}public LoadMaps(){    g_iLoadMaps = 0;        if(file_exists(FILE_MAPS) && get_pcvar_num(g_pLoadMaps))    {               new szMapName[33];                        new f = fopen(FILE_MAPS, "rt");                while(!feof(f))        {            fgets(f, szMapName, charsmax(szMapName));            trim(szMapName);            remove_quotes(szMapName);                        if(!szMapName[0] || szMapName[0] == ';' || szMapName[0] == '/' && szMapName[1] == '/'                || !ValidMap(szMapName) || InArray(szMapName) || equali(szMapName, g_szCurrentMap))                continue;                            g_iLoadMaps++;                        ArrayPushString(MapsArray, szMapName);        }    }    else    {        new dir, len, szFileName[64];        new DirName[] = "maps";        dir = open_dir(DirName, szFileName, charsmax(szFileName));         if(dir)        {            while(next_file(dir, szFileName, charsmax(szFileName)))            {                len = strlen(szFileName) - 4;                                if(len < 0) continue;                                if(equali(szFileName[len], ".bsp") && !equali(szFileName, g_szCurrentMap))                {                    szFileName[len] = '^0';                                        g_iLoadMaps++;                                        ArrayPushString(MapsArray, szFileName);                }            }            close_dir(dir);        }    }        if(g_iLoadMaps - BlockedCount() <= 0)    {        ClearBlockedMaps();    }        new szMap[33];      do    {        ArrayGetString(MapsArray, random_num(0, g_iLoadMaps - 1), szMap, charsmax(szMap));    }    while(BlockedMapCount(szMap));        set_pcvar_string(g_pNextMap, szMap);    }public CheckTime(){    if(!g_iLoadMaps || g_bVoteFinished || g_bBeInVote) return PLUGIN_HANDLED;        static TimeLimit;    TimeLimit = get_pcvar_num(g_pTimeLimit);    if(TimeLimit > 2)    {        if(get_systime() - g_iStartPlugin >= (TimeLimit - get_pcvar_num(g_pTimeStartVoteBeforeEnd)) * 60)        {            StartVote(0);        }    }    else if(TimeLimit == 0)    {        if(get_systime() - g_iStartPlugin >= get_pcvar_num(g_pTimeStartVote) * 60)        {            StartVote(0);        }    }    else if(!g_bStartVote)    {        g_bStartVote = true;        set_task(20.0, "StartVote", 0);    }        return PLUGIN_HANDLED;}public EventRoundEnd(){    g_iRound++;    new iCvar = get_pcvar_num(g_pChangeMapRounds);    if(iCvar && g_iRound >= iCvar)    {        StartVote(0);    }    if(g_bVoteFinished && get_pcvar_num(g_pChangeMap) == 1        || g_bVoteFinished && g_bRockVote && get_pcvar_num(g_pRockChange) == 1)    {        set_task(5.0, "ChangeLevel");    }}public EventRestart(){    g_iRound = 0;}public EventMapEnd(){    set_task(5.0, "ChangeLevel");}public CmdDebug(id, flag){    if(~get_user_flags(id) & flag) return PLUGIN_HANDLED;        new szMapName[64], iMax = ArraySize(NominateArray);    console_print(id, "MapList");    for(new i = 0; i < g_iLoadMaps; i++)    {        ArrayGetString(MapsArray, i, szMapName, charsmax(szMapName));        console_print(id, "%d - %s", i+1, szMapName);    }    console_print(id, "^nNominatedMaps");    for(new i = 0, Data[NOMINATE_DATA]; i < iMax; i++)    {        ArrayGetArray(NominateArray, i, Data);        console_print(id, "%d - %s", i+1, Data[MAP]);    }    console_print(id, "^nBlockedMaps");    for(new i = 0; i < MAP_BLOCK; i++)    {        if(g_BlockedMaps[i][COUNT])        {            console_print(id, "%s - %d", g_BlockedMaps[i][MAP], g_BlockedMaps[i][COUNT]);        }    }    return PLUGIN_HANDLED;}public CmdVotemap(id){    return PLUGIN_HANDLED;}public CmdStartVote(id, flag){    if(~get_user_flags(id) & flag) return PLUGIN_HANDLED;        StartVote(id);        return PLUGIN_HANDLED;}public CmdMaps(id){    ShowMapsMenu(id, g_iPage[id] = 0);}public ShowMapsMenu(id, iPage){    if(iPage < 0) return PLUGIN_HANDLED;        new iMax = ArraySize(MapsArray);    new i = min(iPage * 8, iMax);    new iStart = i - (i % 8);    new iEnd = min(iStart + 8, iMax);        iPage = iStart / 8;    g_iPage[id] = iPage;        new szMenu[512], iLen = 0, iLen_Max = charsmax(szMenu), szMapName[32];        iLen = formatex(szMenu, iLen_Max, "\y%L \w[%d/%d]^n", id, "MM_LISTMAP", iPage + 1, ((iMax - 1) / 8) + 1);        new Keys, Item, iBlock;        for (i = iStart; i < iEnd; i++)    {        ArrayGetString(MapsArray, i, szMapName, charsmax(szMapName));        iBlock = BlockedMapCount(szMapName);                if(iBlock)        {            iLen += formatex(szMenu[iLen], iLen_Max - iLen, "^n\r%d.\d %s[\r%d\d]", ++Item, szMapName, iBlock);        }        else if(IsNominated(szMapName))        {            iLen += formatex(szMenu[iLen], iLen_Max - iLen, "^n\r%d.\d %s[\y%L\d]", ++Item, szMapName, id, "MM_MENU_NOMINATED");        }        else        {            Keys |= (1 << Item);            iLen += formatex(szMenu[iLen], iLen_Max - iLen, "^n\r%d.\w %s", ++Item, szMapName);        }    }    while(Item <= 8)    {        Item++;        iLen += formatex(szMenu[iLen], iLen_Max - iLen, "^n");    }    if (iEnd < iMax)    {        Keys |= (1 << 8)|(1 << 9);              formatex(szMenu[iLen], iLen_Max - iLen, "^n\r9.\w %L^n\r0.\w %L", id, "MM_MENU_NEXT", id, iPage ? "MM_MENU_BACK" : "MM_MENU_EXIT");    }    else    {        Keys |= (1 << 9);        formatex(szMenu[iLen], iLen_Max - iLen, "^n^n\r0.\w %L", id, iPage ? "MM_MENU_BACK" : "MM_MENU_EXIT");    }    show_menu(id, Keys, szMenu, -1, "Maps_Menu");    return PLUGIN_HANDLED;}public MapsMenu_Handler(id, key){    switch (key)    {        case 8: ShowMapsMenu(id, ++g_iPage[id]);        case 9: ShowMapsMenu(id, --g_iPage[id]);        default:        {                       new szMapName[33];            ArrayGetString(MapsArray, key + g_iPage[id] * 8, szMapName, charsmax(szMapName));            NominateMap(id, szMapName);        }    }}public CmdRtv(id){    if(g_bVoteFinished || g_bBeInVote) return PLUGIN_HANDLED;        if(get_systime() - g_iStartPlugin < get_pcvar_num(g_pRockDelay) * 60)    {        new szMin[16], iMin = 1 + (get_pcvar_num(g_pRockDelay) * 60 - (get_systime() - g_iStartPlugin)) / 60;        get_ending(iMin, "MM_MIN1", "MM_MIN2", "MM_MIN3", szMin, charsmax(szMin));        client_print_color(id, DontChange, "^4%s^1 %L %d %L.", PREFIX, id, "MM_RTV_CANT", iMin, id, szMin);        return PLUGIN_HANDLED;    }        if(!g_bRockVoted[id])    {        g_bRockVoted[id] = true;        g_iRockVote++;                new iVote = floatround(get_playersnum() * get_pcvar_num(g_pRockPercent) / 100.0, floatround_ceil) - g_iRockVote;                if(iVote > 0)        {            new szVote[16];            get_ending(iVote, "MM_VOTE1", "MM_VOTE2", "MM_VOTE3", szVote, charsmax(szVote));                        switch(get_pcvar_num(g_pRockShow))            {                case 0:                {                    new szName[33];                    get_user_name(id, szName, charsmax(szName));                    client_print_color(0, DontChange, "^4%s^3 %s^1 %L %d %L.", PREFIX, szName, LANG_PLAYER, "MM_RTV_VOTE1", iVote, LANG_PLAYER, szVote);                }                case 1: client_print_color(id, DontChange, "^4%s^1 %L %d %L.", PREFIX, id, "MM_RTV_VOTE2", iVote, id, szVote);            }        }        else        {            client_print_color(0, DontChange, "^4%s^1 %L.", PREFIX, LANG_PLAYER, "MM_RTV_START");        }                if(floatround(g_iRockVote * 100.0 / get_playersnum()) >= get_pcvar_num(g_pRockPercent))        {            g_bRockVote = true;            StartVote(0);        }    }    else    {        new iVote = floatround(get_playersnum() * get_pcvar_num(g_pRockPercent) / 100.0, floatround_ceil) - g_iRockVote;        new szVote[16];        get_ending(iVote, "MM_VOTE1", "MM_VOTE2", "MM_VOTE3", szVote, charsmax(szVote));        client_print_color(id, DontChange, "^4%s^1 %L %d %L.", PREFIX, id, "MM_RTV_VOTED", iVote, id, szVote);    }        return PLUGIN_HANDLED;}public CmdNextmap(id){    new szMap[33];    get_pcvar_string(g_pNextMap, szMap, charsmax(szMap));    client_print_color(0, BLUE, "^4%s^1 %L ^3%s^1.", PREFIX, LANG_PLAYER, "MM_NEXTMAP", szMap);}public CmdTimeleft(id){    if (get_pcvar_float(g_pTimeLimit))    {        new a = get_timeleft();         client_print_color(0, DontChange, "^4%s^1 %L %d:%02d", PREFIX, LANG_PLAYER, "MM_TIME_LEFT", (a / 60), (a % 60));    }    else    {        client_print_color(0, DontChange, "^4%s^1 %L.", LANG_PLAYER, "MM_NO_T_LIMIT");    }}public CmdCurrentMap(id){    client_print_color(0, BLUE, "^4%s^1 %L^3 %s^1.", PREFIX, LANG_PLAYER, "MM_CURRENT_MAP", g_szCurrentMap);}public HookSay(id){    new szText[33];    read_args(szText, charsmax(szText));    remove_quotes(szText);    trim(szText);    if(InArray(szText))    {        NominateMap(id, szText);    }    else    {        for(new i = 0; i < sizeof(g_szPrefixes); i++)        {            format(szText, charsmax(szText), "%s%s", g_szPrefixes[i], szText);            if(InArray(szText))            {                NominateMap(id, szText);                break;            }        }    }}public NominateMap(id, map[33]){    if(g_bVoteFinished || equali(map, g_szCurrentMap))    {        return PLUGIN_HANDLED;    }    if(g_bBeInVote)    {        client_print_color(id, DontChange, "^4%s^1 %L.", PREFIX, id, "MM_NOMINATE_IN_VOTE");        return PLUGIN_HANDLED;    }    if(g_iNominatedMaps[id] == NOMINATE_PLAYER_MAX)    {        client_print_color(id, DontChange, "^4%s^1 %L.", PREFIX, id, "MM_NOMINATE_CANT");        return PLUGIN_HANDLED;    }    if(BlockedMapCount(map))    {        client_print_color(id, DontChange, "^4%s^1 %L.", PREFIX, id, "MM_NOMINATE_MAP_BLOCKED");        return PLUGIN_HANDLED;    }    if(IsNominated(map))    {        client_print_color(id, DontChange, "^4%s^1 %L.", PREFIX, id, "MM_NOMINATED");        return PLUGIN_HANDLED;    }           new szMap[33], i;    for(i = 0; i < g_iLoadMaps; i++)    {        ArrayGetString(MapsArray, i, szMap, charsmax(szMap));        if(equali(map, szMap))        {            break;        }    }            new Data[NOMINATE_DATA];    Data[MAP] = map;    Data[PLAYER] = id;    Data[ID] = i;    ArrayPushArray(NominateArray, Data);        g_iNominatedMaps[id]++;    new szName[33];    get_user_name(id, szName, charsmax(szName));    client_print_color(0, BLUE, "^4%s^3 %s^1 %L^3 %s^1.", PREFIX, szName, id, "MM_NOMINATE_VOTED", map);        return PLUGIN_HANDLED;}public StartVote(id){    if(!g_iLoadMaps)    {        if(id) client_print_color(id, DontChange, "^4%s^1 %L.", PREFIX, id, "MM_DONT_HAVE_VALIDMAP");        return PLUGIN_HANDLED;    }    if(g_bBeInVote)    {        if(id) client_print_color(id, DontChange, "^4%s^1 %L.", PREFIX, id, "MM_IN_VOTE");        return PLUGIN_HANDLED;    }        g_bBeInVote = true;        arrayset(g_iVote, 0, SELECT_MAPS + 1);    arrayset(g_iInMenu, -1, SELECT_MAPS);    arrayset(g_bHasVote, false, 33);    g_iTotal = 0;            new Num,  NomInMenu = 0, Data[NOMINATE_DATA];    new iMax = 8, Limits[2];        Limits[0] = SELECT_MAPS;    Limits[1] = g_iLoadMaps - BlockedCount();        for(new i = 0; i < sizeof(Limits); i++)    {        if(iMax > Limits[i]) iMax = Limits[i];    }        new NomMax, NomNum = ArraySize(NominateArray);    NomMax = NomNum > NOMINATE_MAX ? NOMINATE_MAX : NomNum;        for(new i = 0; i < iMax; i++)    {                if(NomInMenu < NomMax)        {            Num = random_num(0, ArraySize(NominateArray) - 1);                        ArrayGetArray(NominateArray, Num, Data);                        formatex(g_szInMenuMapName[i], 32, Data[MAP]);            g_iInMenu[i] = Data[ID];            NomInMenu++;                        ArrayDeleteItem(NominateArray, Num);            g_iNominatedMaps[Data[PLAYER]]--;        }        else        {            Num = random_num(0, g_iLoadMaps - 1);                        while(InMenu(Num) || IsBlocked(Num))            {                Num = random_num(0, g_iLoadMaps - 1);            }                        g_iInMenu[i] = Num;            ArrayGetString(MapsArray, Num, g_szInMenuMapName[i], 32);        }           }            set_task(1.0, "SoundTimer", 1111, _, _, "a", 10);    set_task(11.0, "ShowMenu", 1112);        return PLUGIN_HANDLED;}public SoundTimer(){    static Timer;    if(Timer == 0) Timer = 10;        new szSec[16];    get_ending(Timer, "MM_SEC1", "MM_SEC2", "MM_SEC3", szSec, charsmax(szSec));        set_hudmessage(50, 255, 50, -1.0, 0.8, 0, 0.0, 1.0, 0.0, 0.0, 1);    show_hudmessage(0, "%L %d %L!", LANG_PLAYER, "MM_VOTE_IN", Timer, LANG_PLAYER, szSec);        client_cmd(0, "spk %s", g_szSound[Timer]);    Timer--;}public ShowMenu(){    new Players[32], pNum;    get_players(Players, pNum, "ch");        g_iVoteTime = VOTE_TIME;        set_task(1.0, "Timer", 999, _, _, "a", VOTE_TIME+1);        for(new i = 0; i < pNum; i++)    {        VoteMenu(i + TASK_VOTEMENU);        set_task(1.0, "VoteMenu", Players[i] + TASK_VOTEMENU, _, _, "a", VOTE_TIME+1);    }        client_cmd(0, "spk %s", g_szSound[11]);}public VoteMenu(id){    id -= TASK_VOTEMENU;            if(g_iVoteTime == 0)    {        show_menu(id, 0, "^n", 1);                if(task_exists(id+TASK_VOTEMENU)) remove_task(id+TASK_VOTEMENU);        return PLUGIN_HANDLED;    }        new szMenu[512], len = 0;        len = formatex(szMenu[len], charsmax(szMenu) - len, "\y%L:^n^n", id, "MM_CHOOSE_MAP");        new Key, percent, i, iMax = MapsInMenu();        for(i = 0; i < iMax; i++)    {               percent = 0;        if(g_iTotal)        {            percent = floatround(g_iVote[i]*100.0/g_iTotal);        }                if(!g_bHasVote[id])        {            len += formatex(szMenu[len], charsmax(szMenu) - len, "\r%d.\w %s\d[\r%d%%\d]^n", i + 1, g_szInMenuMapName[i], percent);             Key |= (1 << i);                }        else        {            len += formatex(szMenu[len], charsmax(szMenu) - len, "\d%s[\r%d%%\d]^n", g_szInMenuMapName[i], percent);        }           }        if(!g_bRockVote && get_pcvar_num(g_pTimeLimitMM) != 0 && g_iExtendedMax < get_pcvar_num(g_pExendedMax))    {        percent = 0;        if(g_iTotal)        {            percent = floatround(g_iVote[i]*100.0/g_iTotal);        }                if(!g_bHasVote[id])        {            len += formatex(szMenu[len], charsmax(szMenu) - len, "^n\r%d.\w %s\d[\r%d%%\d]\y[%L]^n", i + 1, g_szCurrentMap, percent, id, "MM_EXTEND");              Key |= (1 << i);                }        else        {            len += formatex(szMenu[len], charsmax(szMenu) - len, "^n\d%s[\r%d%%\d]\y[%L]^n", g_szCurrentMap, percent, id, "MM_EXTEND");        }    }        new szSec[16];    get_ending(g_iVoteTime, "MM_SEC1", "MM_SEC2", "MM_SEC3", szSec, charsmax(szSec));    len += formatex(szMenu[len], charsmax(szMenu) - len, "^n\d%L \r%d\d %L", id, "MM_REMAINED",g_iVoteTime, id, szSec);        if(!Key) Key |= (1 << 9);        if(get_pcvar_num(g_pShowResultType) == 1 && g_bHasVote[id])    {        while(replace(szMenu, charsmax(szMenu), "\r", "")){}        while(replace(szMenu, charsmax(szMenu), "\d", "")){}        while(replace(szMenu, charsmax(szMenu), "\w", "")){}        while(replace(szMenu, charsmax(szMenu), "\y", "")){}                set_hudmessage(HUD_RESULT_COLOR, 0.02, -1.0, 0, 6.0, 1.0, 0.1, 0.2, 4);        show_hudmessage(id, szMenu);    }    else    {        show_menu(id, Key, szMenu, -1, "Vote_Menu");    }        return PLUGIN_HANDLED;}public VoteMenu_Handler(id, key){    if(g_bHasVote[id])    {        VoteMenu(id+TASK_VOTEMENU);        return PLUGIN_HANDLED;    }        g_iVote[key]++;    g_iTotal++;        g_bHasVote[id] = true;        new iCvar = get_pcvar_num(g_pShowSelects);    if(iCvar)    {        new szName[32];        get_user_name(id, szName, charsmax(szName));        if(key == MapsInMenu())        {            switch(iCvar)            {                case 1: client_print_color(0, DontChange, "^4%s^1 ^3%s^1 %L.", PREFIX, szName, LANG_PLAYER, "MM_VOTE_EXTENDED1");                case 2: client_print_color(id, DontChange, "^4%s^1 %L.", PREFIX, id, "MM_VOTE_EXTENDED2");            }        }        else        {            switch(iCvar)            {                case 1: client_print_color(0, DontChange, "^4%s^3 %s^1 %L^3 %s^1.", PREFIX, szName, LANG_PLAYER, "MM_VOTED1",g_szInMenuMapName[key]);                case 2: client_print_color(id, DontChange, "^4%s^1 %L^3 %s^1.", PREFIX, id, "MM_VOTED2", g_szInMenuMapName[key]);            }        }    }        VoteMenu(id+TASK_VOTEMENU);    return PLUGIN_HANDLED;}       public Timer(){    g_iVoteTime--;        if(g_iVoteTime == 0)    {        show_menu(0, 0, "^n", 1);        FinishVote();        if(task_exists(999)) remove_task(999);    }}public FinishVote(){    new MaxVote = 0, iInMenu = MapsInMenu();    new iMax = g_bRockVote ? iInMenu : iInMenu + 1;    for(new i = 1; i < iMax ; i++)    {        switch(random_num(0, 1))        {            case 0: if(g_iVote[MaxVote] < g_iVote[i]) MaxVote = i;            case 1: if(g_iVote[MaxVote] <= g_iVote[i]) MaxVote = i;        }    }        g_bBeInVote = false;    g_bVoteFinished = true;    g_bStartVote = false;        if(!g_iTotal || (MaxVote != iInMenu))    {        if(g_iTotal)        {            client_print_color(0, BLUE, "^4%s^1 %L^3 %s^1.", PREFIX, LANG_PLAYER, "MM_NEXTMAP", g_szInMenuMapName[MaxVote]);        }        else        {            MaxVote = random_num(0, iInMenu - 1);            client_print_color(0, BLUE, "^4%s^1 %L^3 %s^1.", PREFIX, LANG_PLAYER, "MM_VOTE_NOBODY", g_szInMenuMapName[MaxVote]);        }            set_pcvar_string(g_pNextMap, g_szInMenuMapName[MaxVote]);                if(g_bRockVote && get_pcvar_num(g_pRockChange) == 0 || get_pcvar_num(g_pChangeMap) == 0)        {            client_print_color(0, DontChange, "^4%s^1 %L.", PREFIX, LANG_PLAYER, "MM_VOTE_MAPCHANGE1");            set_task(10.0, "ChangeLevel");        }        else if(g_bRockVote && get_pcvar_num(g_pRockChange) == 1 || get_pcvar_num(g_pChangeMap) == 1)        {            client_print_color(0, DontChange, "^4%s^1 %L.", PREFIX, LANG_PLAYER, "MM_VOTE_MAPCHANGE2");        }    }    else    {        g_bVoteFinished = false;        g_iExtendedMax++;        new szMin[16], iMin = get_pcvar_num(g_pExendedTime);        get_ending(iMin, "MM_MIN1", "MM_MIN2", "MM_MIN3", szMin, charsmax(szMin));        client_print_color(0, DontChange, "^4%s^1 %L^3 %d^1 %L.", PREFIX, LANG_PLAYER, "MM_VOTE_EXTEND", iMin, LANG_PLAYER, szMin);        set_cvar_num("mp_timelimit", get_pcvar_num(g_pTimeLimit) + iMin);    }}public ChangeLevel(){    new szMap[33];    get_pcvar_string(g_pNextMap, szMap, charsmax(szMap));    server_cmd("changelevel %s", szMap);}stock bool:ValidMap(mapname[]){    if(is_map_valid(mapname))    {        return true;    }        new len = strlen(mapname) - 4;        if(len < 0)    {        return false;    }    if(equali(mapname[len], ".bsp"))    {        mapname[len] = '^0';                if(is_map_valid(mapname))        {            return true;        }    }        return false;}stock bool:InMenu(Num){    for(new i = 0; i < SELECT_MAPS && i < 8; i++)    {        if(Num == g_iInMenu[i])        {            return true;        }    }    return false;}stock MapsInMenu(){    new map;    for(new i = 0; i < SELECT_MAPS; i++)    {        if(g_iInMenu[i] != -1)        {            map++;        }    }    return map;}stock bool:IsNominated(map[]){    new Data[NOMINATE_DATA], iMax = ArraySize(NominateArray);    for(new i = 0; i < iMax; i++)    {        ArrayGetArray(NominateArray, i, Data);        if(equali(Data[MAP], map))        {            return true;        }    }               return false;}stock ClearNominatedMaps(id){    new Data[NOMINATE_DATA];    for(new i = 0; i < ArraySize(NominateArray); i++)    {        ArrayGetArray(NominateArray, i, Data);        if(Data[PLAYER] == id)        {            ArrayDeleteItem(NominateArray, i);              i--;            g_iNominatedMaps[id]--;                                         if(!g_iNominatedMaps[id]) break;        }    }}stock ClearBlockedMaps(){    for(new i = 0; i < MAP_BLOCK; i++)    {        g_BlockedMaps[i][MAP] = "";        g_BlockedMaps[i][COUNT] = 0;    }    delete_file(FILE_LASTMAPS);}stock bool:InArray(map[]){    new szMap[33], iMax = ArraySize(MapsArray);    for(new i = 0; i < iMax; i++)    {        ArrayGetString(MapsArray, i, szMap, charsmax(szMap));        if(equali(szMap, map))        {            return true;        }    }    return false;}stock BlockedCount(){    new Count = 0;    for(new i = 0; i < MAP_BLOCK; i++)    {        if(g_BlockedMaps[i][COUNT]) Count++;    }    return Count;}stock BlockedMapCount(szMap[]){    for(new i = 0; i < MAP_BLOCK; i++)    {        if(equali(g_BlockedMaps[i][MAP], szMap)) return g_BlockedMaps[i][COUNT];    }    return 0;}stock bool:IsBlocked(num){    new szMap[33];    ArrayGetString(MapsArray, num, szMap, charsmax(szMap));        for(new i = 0; i < MAP_BLOCK; i++)    {        if(equali(g_BlockedMaps[i][MAP], szMap)) return true;    }    return false;}stock get_ending(num, const a[], const b[], const c[], output[], lenght){    new num100 = num % 100, num10 = num % 10;    if(num100 >=5 && num100 <= 20 || num10 == 0 || num10 >= 5 && num10 <= 9) format(output, lenght, "%s", a);    else if(num10 == 1) format(output, lenght, "%s", b);    else if(num10 >= 2 && num10 <= 4) format(output, lenght, "%s", c);}
Image
Image
Image

Post Reply

Who is online

Users browsing this forum: Bing [Bot], Google [Bot] and 1 guest