AlliedModders

AlliedModders (https://forums.alliedmods.net/index.php)
-   Scripting Help (https://forums.alliedmods.net/forumdisplay.php?f=11)
-   -   Help with plugin (https://forums.alliedmods.net/showthread.php?t=184521)

valascus 05-06-2012 04:59

Help with plugin
 
Fixed, thanks

:D

quark 05-06-2012 05:30

Re: Help with plugin
 
p1mp and valascus?!

What? *O*

kiki33hun 05-06-2012 05:40

Re: Help with plugin
 
+1 error:

Invalid author

valascus 05-06-2012 05:55

Re: Help with plugin
 
and valascus because i edited very things

dreamiing 05-07-2012 06:58

Re: Help with plugin
 
What I laughed to see this plugin ...

Valascus add me on steam: hgdreamiing

mottzi 05-07-2012 07:41

Re: Help with plugin
 
This should fix the Indention-Errors:
Code:

//* Plugin generated by AMXX-Studio */

#include <amxmodx>
#include <amxmisc>
#include <fun>
#include <cstrike>
#include <hamsandwich>
#include <fakemeta>
#include <csx>
#include <nvault>


#define PLUGIN "Auto-Mix"
#define VERSION "1.0"
#define AUTHOR "p1mp"

#pragma dynamic 20480
#define PREFIX "[Route-Games]"
#define MAXSLOTS 32

enum Color {
        YELLOW = 1,
        GREEN,
        TEAM_COLOR,
        GREY,
        RED,
        BLUE
}
new TeamName[][] = {
       
        "",
        "TERRORIST",
        "CT",
        "SPECTATOR"
       
}
#define TASK_TUT 1111

enum
{
RED = 1,
BLUE,
YELLOW,
GREEN
}

new g_MsgTutor,g_MsgTutClose
new authid[33][32]

//New Cvars
new g_CvarCName,g_CvarMsg,g_CvarMsg2,g_MsgTime,g_MsgTime2

new kill_points, death_points, time_points;
new def_points, boom_points;
new head_points, knife_points, nade_points, tk_points, skill_points;
new TeamInfo,SayText,MaxSlots;
new points[32], vote_choices[3]
new bool:IsConnected[MAXSLOTS + 1];

new gPlayersLeft
new gMaxPlayers
new gPug_ini_file[64]
new gCptT
new gCptCT
new g_iScore[2]
new g_iLastTeamScore[2]
new gNotRdy[400] = "Nao esta pronto:^n"
new bool:g_bIsReady[33]
new Float:gTypedCommand[33]
new g_LeftKills[33]
new g_LeftVotes[33]
new g_iTimeLeft[33]
new g_KillsAce[33]
new bool:g_IsStarted
new bool:g_AfterRdy
new bool:g_ToDisplay
new bool:g_KnifeRound
new bool:g_MapChanged
new bool:g_Twon
new bool:g_VoteProg
new bool:g_bStop
new bool:g_bStop2
new bool:g_Restart
new g_pVote
new g_AppBind
new g_MsgSync
new g_MsgSync3
new g_MsgSync2
new g_MsgSync4
new g_MsgSync5
new g_MsgSync6
new g_MsgSync7
new g_MsgSync8
new g_szTeamName[2]
new g_iTeam
new g_iAltScore
new g_iScoreOffset
new g_CustomGame
new g_bVotes[2]
new g_Menu
new g_PlayersMenu
new g_abMenu
new g_switchmenu
new g_switchVotes[2]
new bool:g_bDidScore
new bool:g_bFFoff
new bool:g_bFFTKStop
new bool:g_bDidVoteFF
new bool:g_bSecondHalf
new bool:g_bCpt
new g_NotBalanced
new g_DidWaitEnough

/* Cvars */

new cvar_FFvote
new cvar_KnifeRound
new cvar_pLeft
new cvar_DetectTK
new cvar_mp_friendlyfire
new cvar_mp_freezetime
new cvar_mp_roundtime
new cvar_mp_buytime
new cvar_sv_restart
new cvar_sv_password
new cvar_humans_join_team

/* Cvars */

/* Mute menu */

#define MAX_PLAYERS 32

new bool:g_mute[MAX_PLAYERS+1][MAX_PLAYERS+1]
new g_menuposition[MAX_PLAYERS+1]
new g_menuplayers[MAX_PLAYERS+1][32]
new g_playersnum[MAX_PLAYERS+1]
new cvar_alltalk
new g_maxclients

/* Mute menu */

/* AFK Kicker */

#define MIN_AFK_TIME 30 // I use this incase stupid admins accidentally set mp_afktime to something silly.
#define WARNING_TIME 15 // Start warning the user this many seconds before they are about to be kicked.
#define CHECK_FREQ 5 // This is also the warning message frequency.

new g_oldangles[33][3]
new g_afktime[33]
new bool:g_spawned[33] = {true, ...}

/* AFK Kicker */

/* Map & Votes variables */
new g_gVoteMenu;
new g_gVotes[5];
new g_rVoteMenu;
new g_rVotes[3];
new g_fVoteMenu;
new g_fVotes[2];
new g_Maps_Ini_File[64]
new g_MapsCounter
new g_MapsAvailable[30][20]
new g_MapsChosen[4][20]
new g_DoneMaps
new g_ChangeMapTo
new g_LeftBans[24][124]
new g_LeftBansIPs[24][64]
new g_RoundsLeft[24] = {-1, ...}
/* Map & Votes variables */

enum {
T_WIN = 0,
CT_WIN = 1
}


public plugin_init() {
register_plugin(PLUGIN, VERSION, AUTHOR)

cvar_FFvote = register_cvar("pug_ffvote", "1", FCVAR_ARCHIVE|FCVAR_SERVER)
cvar_KnifeRound = register_cvar("pug_kniferound", "1", FCVAR_ARCHIVE|FCVAR_SERVER)
cvar_pLeft = register_cvar("pug_players", "10", FCVAR_ARCHIVE|FCVAR_SERVER)
cvar_DetectTK = register_cvar("pug_detecttk", "1", FCVAR_ARCHIVE|FCVAR_SERVER)
register_cvar("mutemenu", "1", FCVAR_SPONLY|FCVAR_SERVER)

register_forward(FM_Voice_SetClientListening, "fwd_voice_setclientlistening")
register_menucmd(register_menuid("mute menu"), 1023, "action_mutemenu")

cvar_alltalk = get_cvar_pointer("sv_alltalk")
g_maxclients = global_get(glb_maxClients)
register_cvar("afk_version", "1.0b", FCVAR_SERVER|FCVAR_EXTDLL|FCVAR_SPONLY)

register_cvar("mp_afktime", "40") // Kick people AFK longer than this time
register_cvar("mp_afkminplayers", "0") // Only kick AFKs when there is atleast this many players on the server
set_task(float(CHECK_FREQ),"checkPlayers",_,_,_,"b")
register_event("ResetHUD", "playerSpawned", "be")

g_MsgSync = CreateHudSyncObj()
g_MsgSync3 = CreateHudSyncObj()
g_MsgSync4 = CreateHudSyncObj()
g_MsgSync5 = CreateHudSyncObj()
g_MsgSync6 = CreateHudSyncObj()
g_MsgSync7 = CreateHudSyncObj()
g_MsgSync8 = CreateHudSyncObj()
g_MsgSync2 = CreateHudSyncObj()

cvar_mp_friendlyfire = get_cvar_pointer("mp_friendlyfire")
cvar_mp_freezetime = get_cvar_pointer("mp_freezetime")
cvar_mp_roundtime = get_cvar_pointer("mp_roundtime")
cvar_mp_buytime = get_cvar_pointer("mp_buytime")
cvar_sv_restart = get_cvar_pointer("sv_restart")
cvar_sv_password = get_cvar_pointer("sv_password")
cvar_humans_join_team = get_cvar_pointer("humans_join_team")

gPlayersLeft = get_pcvar_num(cvar_pLeft)

get_configsdir(gPug_ini_file, 63);
format(gPug_ini_file, 63, "%s/pug.ini", gPug_ini_file);
gMaxPlayers = get_maxplayers()

kill_points = register_cvar("PS_kill_points", "3");
death_points = register_cvar("PS_death_points", "1");

def_points = register_cvar("PS_defusion_points", "4");
boom_points = register_cvar("PS_boom_points", "4");

time_points = register_cvar("PS_time_points", "10");
head_points = register_cvar("PS_head_points", "4");

knife_points = register_cvar("PS_knife_points", "4");
nade_points = register_cvar("PS_nade_points", "4");

tk_points = register_cvar("PS_tk_points", "5");

register_clcmd("say !pontos", "show_points");
register_clcmd("say .pontos", "show_points");
register_clcmd("say pontos", "show_points");
register_clcmd("say /skill", "show_points");

register_clcmd("say_team !skill", "show_points");
register_clcmd("say_team skill", "show_points");
register_clcmd("say_team .skill", "show_points");
register_clcmd("say_team /skill", "show_points");

TeamInfo = get_user_msgid("TeamInfo");
SayText = get_user_msgid("SayText");
MaxSlots = get_maxplayers();

register_clcmd("say !rr", "Restart")
register_clcmd("say !restart", "RestartS")
register_clcmd("say !add", "Prepare")
register_clcmd("say add", "Prepare")
register_clcmd("say .add", "Prepare")
register_clcmd("say !sair", "unPrepare")
register_clcmd("say !credito", "credits")
register_clcmd("say !creditos", "credits")
register_clcmd("say !cmd", "cmds")
register_clcmd("say !cmds", "cmds")
register_clcmd("say !comandos", "cmds")
register_clcmd("say !menu", "player")
register_clcmd("pmenu", "player")
register_clcmd("chooseteam", "handled")
register_clcmd("jointeam", "handled")
register_clcmd("say !voteban", "voteban")
register_clcmd("say_team !voteban", "voteban")
register_clcmd("say !score", "showscore")
register_clcmd("say_team !score", "showscore")
register_clcmd("buy", "blockbuy")
register_clcmd("say", "clcmd_say")
register_clcmd("say_team", "clcmd_say")
register_logevent("round_end", 2, "1=Round_End")
register_event("TeamScore", "Event_TeamScore", "a")
register_event("DeathMsg", "Event_DeathMsg_Knife", "a", "1>0")
register_event("CurWeapon", "Event_CurWeapon_NotKnife", "be", "1=1", "2!29")
register_forward(FM_ClientUserInfoChanged, "infochanged")
register_forward(FM_GetGameDescription, "Change" );
g_MsgTutor = get_user_msgid("TutorText");
g_MsgTutClose = get_user_msgid("TutorClose");

//Cvars
g_CvarMsg = register_cvar("amx_notice_1","Vai ja a: www.Route-Games.com");
g_CvarMsg2 = register_cvar("amx_notice_2","Inovação , Simplicidade , Qualidade.");

//Cvar Community Name
g_CvarCName = register_cvar("amx_n_cname","Route-Games");

//Cvar Time
g_MsgTime = register_cvar("amx_n_time_1","150.0");
g_MsgTime2 = register_cvar("amx_n_time_2","250.0");

//Task
set_task(get_pcvar_float(g_MsgTime),"CmdMsg");
set_task(get_pcvar_float(g_MsgTime2),"CmdMsg2");
}
public CmdWelcomeMessage(id)
{

new Cname[200],targetname[32],authid[33]
get_user_name(id,targetname,31)
get_user_authid(id,authid,32)
get_pcvar_string(g_CvarCName, Cname, charsmax(Cname))

new Text[192]

formatex(Text,191,"Juntou-se %s (%s)^nBem-Vindo à Comunidade %s^nTu tens: %d Pontos^n^n Servidor configurado por Valascus ",targetname, authid, Cname ,points[id])

MsgWelcome(id,Text,BLUE,12.0)

}
public Change() {
forward_return(FMV_STRING, "[Route-Games] Auto-Mix");
return FMRES_SUPERCEDE;
}


public blockbuy(id)
{
        if (g_bCpt)
        {
                client_print(id, print_chat, "%s Tu nao podes comprar armas durante a escolha da equipa.", PREFIX)
        }       
        else if (g_KnifeRound)
        {
                client_print(id, print_chat, "%s Tu nao podes comprar armas durante a ronda de faca.", PREFIX)
        }
       
        return PLUGIN_CONTINUE
}

public Event_CurWeapon_NotKnife(id) {
        if ( g_Restart || !g_KnifeRound )
                return
       
        if( !user_has_weapon(id, CSW_KNIFE ) )
                give_item(id, "weapon_knife")
        engclient_cmd(id, "weapon_knife")
}

public Restart(id) {
       
        if (is_user_admin(id))
                server_cmd("sv_restart 1")
        else
                client_print(id, print_chat, "%s Tu nao es um admin!", PREFIX)
}

public RestartS(id) {
       
        if (is_user_admin(id))
                server_cmd("restart")
       
        else
                client_print(id, print_chat, "%s Tu nao es um admin!", PREFIX)
}

public showscore(id) {
       
        if (g_IsStarted)
        {
                CrashAttempt(id)
               
                if (g_Twon)
                {
                        if (g_bSecondHalf)
                                client_print(0, print_chat, "Score: (Equipa-A) %d - %d (Equipa-B)", g_iScore[0], g_iScore[1])
                       
                        else
                                client_print(0, print_chat, "Score: (Equipa-A) %d - %d (Equipa-B)", g_iScore[1], g_iScore[0])
                }
               
                else
                {
                        if (g_bSecondHalf)
                                client_print(0, print_chat, "Score: (Team-A) %d - %d (Team-B)", g_iScore[1], g_iScore[0])
                        else
                                client_print(0, print_chat, "Score: (Team-A) %d - %d (Team-B)", g_iScore[0], g_iScore[1])
                }
        }
       
        else
        {
                client_print(id, print_chat, "%s Ainda nao comecou um jogo!", PREFIX)
        }
        return PLUGIN_CONTINUE
}

public Event_DeathMsg_Knife()
{
        if ( g_Restart || !g_IsStarted )
                return
       
        new attacker = read_data(1)
       
        if( attacker > gMaxPlayers )
                return
       
        new victim = read_data(2)
       
        if( victim != attacker && cs_get_user_team(attacker) != cs_get_user_team(victim))
        {
                new weap[7]
               
                if( read_data(4, weap, charsmax(weap)) == 5 && equal(weap, "knife") )
                {
                        new nameA[32]
                        new nameV[32]
                       
                        get_user_name(attacker, nameA, 31)
                        get_user_name(victim, nameV, 31)
                       
                        set_hudmessage(255, 255, 255, 0.04, 0.63, 0, 6.0, 12.0)
                        ShowSyncHudMsg(0, g_MsgSync5, "%s Ronda da FACA %s!", nameA, nameV)
                }
                g_KillsAce[attacker]++
        }
}



public client_damage(attacker, victim, damage, wpnindex, hitplace, TA) {
        if (!get_pcvar_num(cvar_DetectTK))
                return PLUGIN_CONTINUE
       
        if (attacker == victim)
        {
                damage = 0
        }
       
        if (g_IsStarted)
        {
                if (TA == 1)
                {
                        g_LeftKills[attacker] += damage
                       
                       
                        if (g_LeftKills[attacker] >= 100)
                        {
                                new nameofp[50]
                               
                                get_user_name(attacker, nameofp, 49)
                               
                                server_cmd("amx_banip #%d 10 ^"%s Tu foste avisado! (Team-Kill)^"", get_user_userid(attacker), PREFIX)
                                set_hudmessage(255, 0, 0, 0.32, 0.70, 0, 6.0, 12.0)
                                show_hudmessage(0, "%s is Banido por TK!", nameofp)
                                client_print(0, print_chat, "%s Friendlyfire foi desativado temporariamente. Se atacares a tua equipa podes levar ban!", PREFIX)
                                set_pcvar_num(cvar_mp_friendlyfire, 0)
                               
                                new players[32], pnum, tempid;
                               
                                get_players(players, pnum, "ch")
                               
                                for (new i ; i<pnum ; i++)
                                {
                                        tempid = players[i]
                                        g_LeftKills[tempid] = 0
                                }
                               
                                new taskId = scanForTaskID()
                               
                                set_task(100.0, "TurnItBackOn", taskId)
                                return PLUGIN_HANDLED
                        }
                       
                       
                        if (g_LeftKills[attacker] - damage > 40)
                                return PLUGIN_HANDLED
                       
                        else
                        {
                               
                                if (g_LeftKills[attacker] < 40)
                                {
                                        client_print(attacker, print_chat, "%s Atencao! Atacar os teus companheiros de equipa pode dar te ban.", PREFIX)
                                }
                               
                                if (g_LeftKills[attacker] >= 40)
                                {
                                        new nameofp[50]
                                       
                                        get_user_name(attacker, nameofp, 49)
                                       
                                        new pplayers[32], ppnum, ptempid;
                                       
                                        get_players(pplayers, ppnum, "ch");
                                       
                                        for( new i; i<ppnum; i++ )
                                        {
                                                ptempid = pplayers[i]
                                               
                                                if (ptempid != attacker)
                                                {
                                                        client_print(ptempid, print_chat ,"%s Se %s atacou um jogador da propria equipa faz !voteban", PREFIX, nameofp)
                                                        set_hudmessage(255, 0, 0, 0.32, 0.70, 0, 6.0, 12.0)
                                                        show_hudmessage(ptempid, "E %s irritante?! Escreve !voteban", nameofp)
                                                        client_print(ptempid, print_chat, "%s Friendlyfire agora estara DESLIGADO ate a proxima ronda.", PREFIX)
                                                       
                                                }
                                        }
                                       
                                        set_pcvar_num(cvar_mp_friendlyfire, 0)
                                        g_bFFTKStop = true
                                }
                        }
                }
        }
       
        return PLUGIN_CONTINUE
}

public save_points(id)
{
        new valut = nvault_open("points")
       
        if(valut == INVALID_HANDLE)
                set_fail_state("nValut returned invalid handle")
       
        new key[62], value[10], ip[33]
       
        //get_user_ip(id, ip, 32, 1);
        get_user_authid(id, ip, 32);
       
        format(key, 61,"%s-points", ip)
        format(value, 9,"%d", points[id])
       
        nvault_set(valut, key, value)
        nvault_close(valut)
       
        return PLUGIN_CONTINUE;
}
public load_points(id)
{
        new valut = nvault_open("points")
       
        if(valut == INVALID_HANDLE)
                set_fail_state("nValut returned invalid handle")
       
        new key[100], ip[33]
       
        //get_user_ip(id, ip, 32, 1);
        get_user_authid(id, ip, 32);
       
        formatex(key, 99,"%s-points", ip)
       
        points[id] = nvault_get(valut, key)
        nvault_close(valut)
       
        points_in_name(id)
       
        return PLUGIN_CONTINUE;
}
public show_points(id)
{
        client_printc(id, "!g[Route-Games] !nTu tens %d skillpoints!", points[id])
}
public give_time_points(id)
{
        if(cs_get_user_team(id) != CS_TEAM_SPECTATOR)
        {
                points[id] += get_pcvar_num(time_points)
        }
}

public infochanged(id, buffer) {
        if (g_IsStarted || g_KnifeRound)
        {
                if( is_user_connected(id) )
                {
                        new name[32]
                        new val[32]
                       
                        get_user_name(id, name, 31)
                        engfunc(EngFunc_InfoKeyValue, buffer, "name", val, 31)
                       
                        new posA = contain(name, "(Equipa-A)")
                        new posB = contain(name, "(Equipa-B)")
                       
                        if (g_bSecondHalf)
                        {
                                if (cs_get_user_team(id) == CS_TEAM_T)
                                {
                                        if (posB == 0)
                                        {
                                                engfunc(EngFunc_SetClientKeyValue, id, buffer, "name", name)
                                                return FMRES_SUPERCEDE
                                        }
                                }
                               
                                else if (cs_get_user_team(id) == CS_TEAM_CT)
                                {
                                        if (posA == 0)
                                        {
                                                engfunc(EngFunc_SetClientKeyValue, id, buffer, "name", name)
                                                return FMRES_SUPERCEDE
                                        }
                                }
                        }
                       
                        else
                        {
                                if (cs_get_user_team(id) == CS_TEAM_T)
                                {
                                        if (posA == 0)
                                        {
                                                engfunc(EngFunc_SetClientKeyValue, id, buffer, "name", name)
                                                return FMRES_SUPERCEDE
                                        }
                                       
                                }
                               
                                else if (cs_get_user_team(id) == CS_TEAM_CT)
                                {
                                        if (posB == 0)
                                        {
                                                engfunc(EngFunc_SetClientKeyValue, id, buffer, "name", name)
                                                return FMRES_SUPERCEDE
                                        }
                                       
                                }
                        }
                       
                        if (((contain(val, "(Equipa-A)") == 0) && (contain(name, "(Equipa-A") == -1)) || ((contain(val, "(Equipa-B)") == 0) && (contain(name, "(Equipa-B") == -1)))
                        {
                                return FMRES_IGNORED
                        }
                       
                        if (((contain(val, "(Equipa-B)") == 0) && (contain(name, "(Equipa-A") == 0)) || ((contain(val, "(Equipa-A)") == 0) && (contain(name, "(Equipa-B") == 0)))
                        {
                                return FMRES_IGNORED
                        }
                       
                        if (equal(val, name))
                        {
                                return FMRES_IGNORED
                        }
                       
                        engfunc(EngFunc_SetClientKeyValue, id, buffer, "name", name)
                        return FMRES_SUPERCEDE
                }
        }
       
        return FMRES_IGNORED
}


public TurnItBackOn() {
        set_pcvar_num(cvar_mp_friendlyfire, 1)
        client_print(0, print_chat, "%s Friendlyfire esta ligado novamente! AVISO: TK pode dar BAN!!!", PREFIX)
        return PLUGIN_HANDLED
}

public voteban(id) {
       
        if (g_LeftVotes[id] >= 1)
        {
                client_print(id, print_chat, "%s Tu nao podes votar mais neste jogo", PREFIX)
                return PLUGIN_HANDLED
        }
       
        else if (g_VoteProg)
        {
                client_print(id, print_chat, "%s Já existe uma votacao em curso!", PREFIX)
                return PLUGIN_HANDLED
        }
       
        g_Menu = menu_create("Escolha um jogador para votar para banir: ", "voteban_menu");
        new players[32], pnum, tempid;
        new szName[32], szTempid[10];
        new added
       
        get_players(players, pnum, "ch");
       
        for( new i; i<pnum; i++ )
        {
                tempid = players[i];
               
                if (g_LeftKills[tempid] >= 40)
                {
                        get_user_name(tempid, szName, 31);
                        num_to_str(tempid, szTempid, 9);
                        menu_additem(g_Menu, szName, szTempid, 0);
                        added++
                }
        }
       
        for ( new i ; i < sizeof(g_LeftBans) ; i++ )
        {
                if ( g_LeftBans[i][0] && g_RoundsLeft[i] != -1 )
                {
                        num_to_str(i+32, szTempid, 9)
                        menu_additem(g_Menu, g_LeftBans[i], szTempid, 0)
                        added++
                }
        }
       
        if ( !added )
        {
                client_print(id, print_chat, "%s Sem jogadores detectados como desrespeitador!", PREFIX)
                return PLUGIN_HANDLED
        }
       
        menu_display(id, g_Menu);
        return PLUGIN_HANDLED;
}

public voteban_menu(id, menu, item) {
        if( item == MENU_EXIT )
        {
                menu_destroy(menu);
                return PLUGIN_HANDLED;
        }
       
        else if (g_VoteProg)
        {
                client_print(id, print_chat, "%s Já existe uma votacao em curso!", PREFIX)
                return PLUGIN_HANDLED
        }
       
        g_LeftVotes[id]++
        new data[6], iName[64];
        new access, callback;
        menu_item_getinfo(menu, item, access, data,5, iName, 63, callback);
       
        new tempid = str_to_num(data);
        new name[50]
       
        if ( tempid < 32 && !is_user_connected(tempid) )
                return PLUGIN_HANDLED
       
        get_user_name(tempid, name, 49)
       
        votebanonplayer(tempid)
       
        menu_destroy(menu);
        return PLUGIN_HANDLED
}

public votebanonplayer(id) {
        g_VoteProg = true
        new nameofplayer[52]
        new banline[128] = "Ban "
       
        if ( id >= 32 )
        {
                id -= 32
                add(banline, 127, g_LeftBans[id])
                id += 32
        }
       
        else
        {
                get_user_name(id, nameofplayer, 51)
                add(banline, 127, nameofplayer)
        }
        add(banline, 127, "?")
       
        g_abMenu = menu_create(banline, "votebanonplayer_menu");
        menu_additem(g_abMenu, "Sim", "0", 0)
        menu_additem(g_abMenu, "Nao", "1", 0)
       
        new pplayers[32], ppnum, ptempid;
       
        if ( id < 32 )
        {
                switch( cs_get_user_team(id) )
                {
                        case CS_TEAM_CT: get_players(pplayers, ppnum, "che", "CT");
                                case CS_TEAM_T: get_players(pplayers, ppnum, "che", "TERRORIST");
                        }
        }
       
        else
                get_players(pplayers, ppnum, "ch");
       
       
        for( new i; i<ppnum; i++ )
        {
                ptempid = pplayers[i]
               
                if (ptempid != id)
                {
                       
                        menu_display(ptempid, g_abMenu, 0)
                }
        }
       
       
        set_task(7.0, "EndBanVote", id)
       
        return PLUGIN_HANDLED
}

public EndBanVote(id) {
        g_VoteProg = false
        show_menu(0, 0, "^n", 1);
        if(g_bVotes[0] >= g_bVotes[1])
        {
                client_print(0, print_chat, "%s Voto de ban realizado com sucesso.", PREFIX)
                set_hudmessage(255, 0, 0, 0.32, 0.70, 0, 6.0, 12.0)
               
                if ( id < 32 )
                {
                        server_cmd("amx_banip #%d 5 ^"%s Votado para ser banido por abuso.^"", get_user_userid(id), PREFIX)
                       
                        new nameofp[50]
                       
                        get_user_name(id, nameofp, 49)
                        ShowSyncHudMsg(0, g_MsgSync6, "%s foi votado para ser Banido!", nameofp)
                }
               
                else
                {
                        server_cmd("amx_banip ^"%s^" 15", g_LeftBansIPs[id-32])
                        ShowSyncHudMsg(0, g_MsgSync6, "%s foi votado para ser Banido!", g_LeftBans[id-32])
                        copy(g_LeftBans[id-32], charsmax(g_LeftBans[][]), "")
                        copy(g_LeftBansIPs[id-32], charsmax(g_LeftBansIPs[][]), "")
                        g_RoundsLeft[id-32] = -1
                }
               
               
               
                g_bVotes[0] = 0
                g_bVotes[1] = 0
                return PLUGIN_HANDLED
        }
       
        else
        {
                client_print(0, print_chat, "%s Voto de ban falhado.", PREFIX)
               
                if ( id >= 32 )
                {
                        copy(g_LeftBans[id-32], charsmax(g_LeftBans[][]), "")
                        copy(g_LeftBansIPs[id-32], charsmax(g_LeftBansIPs[][]), "")
                        g_RoundsLeft[id-32] = -1
                }
               
                else
                {
                        g_bVotes[0] = 0
                        g_bVotes[1] = 0
                        g_LeftKills[id] = 0
                }
                return PLUGIN_HANDLED
        }
       
        return PLUGIN_HANDLED
}

public votebanonplayer_menu(id, menu, item) {
        if( item == MENU_EXIT )
        {
                menu_display(id, g_abMenu);
                return PLUGIN_HANDLED;
        }
       
        new data[6], szName[64];
        new access, callback;
        menu_item_getinfo(menu, item, access, data,charsmax(data), szName,charsmax(szName), callback);
       
        new voteid = str_to_num(data);
        g_bVotes[voteid]++;
        return PLUGIN_HANDLED;
}

public handled(id) {
        if (g_IsStarted || g_AfterRdy || g_KnifeRound)
        {
                client_print(id, print_console, "%s Tu nao podes mudar as equipas!", PREFIX)
                client_print(id, print_chat, "%s Tu nao podes mudar as equipas!", PREFIX)
                return PLUGIN_HANDLED
        }
        return PLUGIN_CONTINUE
}

public plugin_cfg() {
        SetCheckFilled()
        server_cmd("exec practice.cfg")
        DisplayCommands()
        set_pcvar_string(cvar_humans_join_team, "")
        get_configsdir(gPug_ini_file, 63);
        format(gPug_ini_file, 63, "%s/pug.ini", gPug_ini_file);
       
        if (!file_exists(gPug_ini_file))
        {
                client_print(0, print_chat, "%s ERRO! Pug.ini ficheiro nao encontrado.", PREFIX)
                return PLUGIN_HANDLED
        }
       
        if (get_pug_state() == 0)
        {
                new taskId = scanForTaskID()
                set_task(10.0, "ShowLeft", taskId)
                return PLUGIN_HANDLED
        }
       
        else if (get_pug_state() == 1)
        {
                g_ToDisplay = true
                g_MapChanged = true
                new taskId = scanForTaskID()
                set_task(20.0, "TeamsVote", taskId)
        }
       
        return PLUGIN_CONTINUE
}

public SetCheckFilled() {
        new taskId = scanForTaskID()
        set_task(5.0, "CheckFilled", taskId)
}

public CheckFilled() {
        if (get_playersnum() >= get_pcvar_num(cvar_pLeft))
        {
                new rnd = random_num(99, 9999)
                new pass[10]
               
                num_to_str(rnd, pass, 9)
               
                set_pcvar_string(cvar_sv_password, pass)
                client_print(0, print_chat, "%s O Server esta agora com password [Protegido]", PREFIX)
               
                new tokick = get_playersnum() - get_pcvar_num(cvar_pLeft)
               
                for (new kick; kick<tokick ; kick++)
                {
                        new playeract = random(get_pcvar_num(cvar_pLeft))
                       
                        while (!is_user_connected(playeract))
                        {
                                playeract = random(get_pcvar_num(cvar_pLeft))
                        }
                       
                        server_cmd("kick %d %s O Server esta cheio!", get_user_userid(playeract), PREFIX)
                }
               
        }
       
        return PLUGIN_CONTINUE
}


public DisplayCommands() {
        client_printc(0, "!g%s !nFaz !t!Cmds !npara os comandos, ou carrega !tN !npara mostrar o menu do jogador.", PREFIX)
        client_printc(0, "!g%s !nTu tambem podes escrever !mute para silenciar um jogador.", PREFIX)
        new taskId = scanForTaskID()
        set_task(50.0, "DisplayCommands", taskId)
}

public round_end() {
        if ( g_Restart )
                return PLUGIN_HANDLED
       
        TKRoundsLeft()
       
        if ( g_bFFTKStop )
        {
                g_bFFTKStop = false
                set_pcvar_num(cvar_mp_friendlyfire, 1)
                client_printc(0, "!g%s !nFriendlyfire esta agora activado.", PREFIX)
        }
       
        if (g_KnifeRound)
        {
                new Players[32], pNum, ptn, pctn;
                get_players(Players, pNum, "ch")
                for ( new i ; i < pNum ; i++ ) {
                        new tempid = Players[i]
                        if ( !is_user_alive(tempid) )
                                continue;
                        else if ( cs_get_user_team(tempid) == CS_TEAM_T )
                                ptn++;
                        else if ( cs_get_user_team(tempid) == CS_TEAM_CT )
                                pctn++;
                }
               
                new WinningTeam
               
                if (ptn > pctn)
                {
                        client_printc(0, "!g%s !nA Equipa A venceu a ronda de faca!", PREFIX)
                        set_hudmessage(255, 0, 0, 0.40, 0.71, 0, 6.0, 12.0)
                        ShowSyncHudMsg(0, g_MsgSync6, "Equipa A - Vencedores da ronda de faca.")
                        g_Twon = true
                        WinningTeam = T_WIN
                }
               
                else if (pctn > ptn)
                {
                        client_printc(0, "!g%s !nA Equipa B venceu a ronda de faca!", PREFIX)
                        set_hudmessage(255, 0, 0, 0.40, 0.71, 0, 6.0, 12.0)
                        ShowSyncHudMsg(0, g_MsgSync6, "Equipa B - Vencedores da ronda de faca.")
                        WinningTeam = CT_WIN
                }
               
                else
                {
                        client_printc(0, "!g%s !nA ronda de faca acabou! Nenhuma equipa ganhou.", PREFIX)
                        set_hudmessage(255, 0, 0, 0.40, 0.71, 0, 6.0, 12.0)
                        ShowSyncHudMsg(0, g_MsgSync6, "O Jogo continua.")
                        new taskId = scanForTaskID()
                        set_task(3.0, "SettingsAfter", taskId)
                        return PLUGIN_CONTINUE
                }
                KnifeSwitch(WinningTeam)
                return PLUGIN_CONTINUE
        }
       
        if (g_IsStarted)
        {
                new players[32], pnum, tempid;
               
                new playersT[32], playersCt[32], numTt, numCtt;
               
                get_players( playersT , numTt , "che" , "TERRORIST" )
                get_players( playersCt , numCtt , "che" , "CT" )
               
                get_players(players, pnum, "ch")
               
                if ((get_playersnum() != get_pcvar_num(cvar_pLeft)) || (get_pcvar_num(cvar_pLeft) != 10)) {
                       
                }
               
                else
                {
                        for (new i ; i<pnum ; i++)
                        {
                                tempid = players[i]
                                g_LeftKills[tempid] = (g_LeftKills[tempid]/3)*2
                               
                                if (g_KillsAce[tempid] == 0)
                                        continue;
                               
                                if (cs_get_user_team(tempid) == CS_TEAM_CT)
                                {
                                        if (g_KillsAce[tempid] == numTt-1)
                                        {
                                                new name[32]
                                                get_user_name(tempid, name, 31)
                                               
                                                set_hudmessage(255, 255, 255, 0.07, 0.69, 0, 6.0, 12.0)
                                                show_hudmessage(0, "%s Fez um ALMOST!", name)
                                        }
                                       
                                        else if (g_KillsAce[tempid] == numTt)
                                        {
                                                new name[32]
                                                get_user_name(tempid, name, 31)
                                               
                                                set_hudmessage(255, 255, 255, 0.07, 0.69, 0, 6.0, 12.0)
                                                show_hudmessage(0, "%s Fez um ACE!", name)
                                        }
                                       
                                        g_KillsAce[tempid] = 0
                                }
                               
                                else if (cs_get_user_team(tempid) == CS_TEAM_T)
                                {
                                        if (g_KillsAce[tempid] == numCtt-1)
                                        {
                                                new name[32]
                                                get_user_name(tempid, name, 31)
                                               
                                                set_hudmessage(255, 255, 255, 0.07, 0.69, 0, 6.0, 12.0)
                                                show_hudmessage(0, "%s Fez um ALMOST!", name)
                                        }
                                       
                                        else if (g_KillsAce[tempid] == numCtt)
                                        {
                                                new name[32]
                                                get_user_name(tempid, name, 31)
                                               
                                                set_hudmessage(255, 255, 255, 0.07, 0.69, 0, 6.0, 12.0)
                                                show_hudmessage(0, "%s Fez um ACE!", name)
                                        }
                                       
                                        g_KillsAce[tempid] = 0
                                }
                        }
                }
        }
       
        if (g_CustomGame)
                return PLUGIN_HANDLED
       
        else
        {
                if (g_IsStarted)
                {
                        new playersT[32], playersCt[32], numT, numCt;
                       
                        get_players( playersT , numT , "che" , "TERRORIST" )
                        get_players( playersCt , numCt , "che" , "CT" )
                       
                        if (numT <= 3 || numCt <= 3)
                        {
                                switch (g_NotBalanced)
                                {
                                        case 0:
                                        {
                                                client_printc(0, "!g%s !nUma das equipas tem apenas 3 jogadores na equipa ou MENOS!", PREFIX)
                                                client_printc(0, "!g%s !nSe a equipa nao receber novamente os seus jogadores de volta dentro de 2 rondas, a outra equipa ganhara automaticamente.", PREFIX)
                                                g_NotBalanced++
                                        }
                                       
                                        case 1:
                                        {
                                                client_printc(0, "!g%s !nUma das equipas tem apenas 3 jogadores na equipa ou MENOS!", PREFIX)
                                                client_printc(0, "!g%s !nSe a equipa nao receber novamente os seus jogadores de volta dentro de 2 rondas, a outra equipa ganhara automaticamente.", PREFIX)
                                                g_NotBalanced++
                                        }
                                       
                                        case 2:
                                        {
                                                if (numT > numCt)
                                                        client_print(0, print_chat, "%s A Equipa terrorista foi a vencedora escolhida automaticamente devido a falta de jogadores na equipa rival.", PREFIX)
                                               
                                                else if (numCt > numT)
                                                        client_print(0, print_chat, "%s A Equipa Contra-terrorista foi a vencedora escolhida automaticamente devido a falta de jogadores na equipa rival.", PREFIX)
                                               
                                                else if (numCt == numT)
                                                        client_print(0, print_chat, "%s As equipas sao iguais.", PREFIX)
                                               
                                                client_print(0, print_chat, "%s A terminar jogo em 5 segundos...", PREFIX)
                                                new taskId = scanForTaskID()
                                                set_task(5.0, "EndMatch", taskId)
                                                g_NotBalanced = 0
                                        }
                                       
                                }
                        }
                       
                        else
                        {
                                g_NotBalanced = 0;
                                return PLUGIN_HANDLED
                        }
                }
        }
       
        return PLUGIN_HANDLED
       
}

public TKRoundsLeft()
{
        for ( new i ; i < sizeof(g_RoundsLeft) ; i++ )
        {
                if ( g_RoundsLeft[i] != -1 )
                        g_RoundsLeft[i]--
        }
}

public LR() {
        set_hudmessage(255, 255, 255, 0.07, 0.69, 0, 6.0, 12.0)
        ShowSyncHudMsg(0, g_MsgSync6, "A Ultima ronda foi iniciada.")
}

public scndhalf() {
        server_cmd("sv_restart 1")
        new taskId = scanForTaskID()
        set_task(3.0, "showscnd", taskId)
}

public showscnd() {
        set_hudmessage(255, 255, 255, 0.07, 0.69, 0, 6.0, 18.0)
        ShowSyncHudMsg(0, g_MsgSync3, "Comecou a 2a parte. O jogo esta agora em live...")
        return PLUGIN_HANDLED
}



public Event_TeamScore() {
        if ( g_Restart ) return PLUGIN_HANDLED
       
        if (g_IsStarted)
        {
                read_data(1, g_szTeamName, 1)
               
                g_iTeam = (g_szTeamName[0] == 'T') ? 0 : 1
                g_iAltScore = read_data(2)
                g_iScoreOffset = g_iAltScore - g_iLastTeamScore[g_iTeam]
               
                if(g_iScoreOffset > 0)
                {
                        g_iScore[g_iTeam] += g_iScoreOffset
                }
               
                g_iLastTeamScore[g_iTeam] = g_iAltScore
               
                if (g_iScore[0] + g_iScore[1] == 14)
                {
                        new taskId = scanForTaskID()
                        set_task(10.0, "LR", taskId)
                }
               
                else if (g_iScore[0] + g_iScore[1] == 15)
                {
                        if (g_bStop2)
                        {
                                return PLUGIN_HANDLED;
                        }
                       
                        g_bStop2 = true
                        SwitchTeams()
                        client_print(0, print_chat, "%s Ja passou 15 rondas, e agora a mudanca das equipas!", PREFIX)
                        new taskId = scanForTaskID()
                        set_task(10.0, "scndhalf", taskId)
                }
               
                else if ((g_iScore[0] == 16) || (g_iScore[1] == 16))
                {
                        if (g_bStop)
                        {
                                return PLUGIN_HANDLED
                        }
                       
                        g_bStop = true
                        EndMatch()
                        return PLUGIN_HANDLED
                }
               
                else if ((g_iScore[0] == 15) || (g_iScore[1] == 15))
                {
                        new taskId = scanForTaskID()
                        set_task(10.0, "LRFif", taskId)
                        return PLUGIN_HANDLED
                }
               
               
                ClientCommand_SayScore()
        }
       
        return PLUGIN_HANDLED
}

public LRFif() {
        if ((g_iScore[1] == 16) || (g_iScore[0] == 16))
                return PLUGIN_HANDLED
       
        set_hudmessage(255, 255, 255, 0.06, 0.62, 0, 6.0, 12.0)
        ShowSyncHudMsg(0, g_MsgSync6, "A ultima ronda foi iniciada. (Equipa-A) %d - %d (Equipa-B)", g_iScore[1], g_iScore[0])
        return PLUGIN_HANDLED
}

public ClientCommand_SayScore() {
        if (g_Twon)
        {
                if (g_bSecondHalf)
                {
                        if (g_bDidScore)
                        {
                                client_print(0, print_chat, "Score: (Equipa-A) %d - %d (Equipa-B)", g_iScore[0], g_iScore[1])
                                g_bDidScore = false
                        }
                       
                        else
                        {
                                g_bDidScore = true
                        }
                }
               
                else
                {
                        if (g_bDidScore)
                        {
                                client_print(0, print_chat, "Score: (Equipa-A) %d - %d (Equipa-B)", g_iScore[1], g_iScore[0])
                                g_bDidScore = false
                        }
                       
                        else
                        {
                                g_bDidScore = true
                        }
                }
        }
       
        else
        {
               
                if (g_bSecondHalf)
                {
                        if (g_bDidScore)
                        {
                                client_print(0, print_chat, "Score: (Equipa-A) %d - %d (Equipa-B)", g_iScore[1], g_iScore[0])
                                g_bDidScore = false
                        }
                       
                        else
                        {
                                g_bDidScore = true
                        }
                }
               
                else
                {
                        if (g_bDidScore)
                        {
                                client_print(0, print_chat, "Score: (Equipa-A) %d - %d (Equipa-B)", g_iScore[0], g_iScore[1])
                                g_bDidScore = false
                        }
                       
                        else
                        {
                                g_bDidScore = true
                        }
                }
        }
       
        return PLUGIN_HANDLED
       
}

public client_disconnect(id) {
        CheckEmpty()
        DidTK(id)
        clear_list(id)
        g_LeftVotes[id] = 0
       
        if (g_bIsReady[id])
        {
                gPlayersLeft++
        }
       
        g_bIsReady[id] = false
        remove_task(id)
        save_points(id)
       
        return PLUGIN_HANDLED
}

public client_connect(id) {
        if ( is_user_bot(id) || is_user_hltv(id) || (!is_user_connected(id) && !is_user_connecting(id)) )
                return PLUGIN_HANDLED;
       
        g_afktime[id] = 0
        g_LeftVotes[id] = 0
        gTypedCommand[id] = 0.0
       
        if (!file_exists(gPug_ini_file))
        {
                client_print(0, print_chat, "%s ERRO! Pug.ini ficheiro nao encontrado.", PREFIX)
                return PLUGIN_HANDLED
        }
       
        if (get_pug_state() == 1)
        {
                g_LeftKills[id] = 0
                return PLUGIN_HANDLED
        }
       
        if (g_bCpt)
        {
                if (cs_get_user_team(id) != CS_TEAM_UNASSIGNED)
                {
                        cs_set_user_team(id, CS_TEAM_SPECTATOR)
                        return PLUGIN_HANDLED
                }
               
                else
                {
                        set_task(1.0, "client_connect", id)
                }
                return PLUGIN_HANDLED
        }
       
        if (g_AfterRdy || g_IsStarted)
        {
                return PLUGIN_HANDLED
        }
       
        else
        {
                g_KillsAce[id] = 0
                g_bIsReady[id] = false
                remove_task(id)
                g_iTimeLeft[id] = 130
                g_LeftKills[id] = 0
                set_task(1.0, "Continue", id, .flags="a", .repeat=130)
        }
       
        return PLUGIN_HANDLED
}

public DidTK(id)
{
        if ( g_LeftKills[id] >= 40 )
        {
                new ip[64], name[64], szAdd[128]
                get_user_ip(id, ip, charsmax(ip), 1)
                get_user_name(id, name, charsmax(name))
               
                for ( new i ; i < sizeof(g_LeftBans) ; i++ )
                {
                        if ( equali(g_LeftBansIPs[i], ip) )
                                break;
                       
                        else if ( !g_LeftBans[i][0] && !g_LeftBansIPs[i][0] )
                        {
                                format(szAdd, charsmax(szAdd), "%s - [Disconectou se]", name)
                                copy(g_LeftBans[i], charsmax(g_LeftBans[][]), szAdd)
                                copy(g_LeftBansIPs[i], charsmax(g_LeftBansIPs[][]), ip)
                                g_RoundsLeft[id] = 3
                        }
                }
        }
}

public BindApprove(id) {
        if (!is_user_connecting(id) && !is_user_connected(id))
                return PLUGIN_HANDLED
       
        if (cs_get_user_team(id) != CS_TEAM_UNASSIGNED && is_user_alive(id))
        {
                g_AppBind = menu_create("\rQueres a tecla \y'N' \rpara abrir o menu de jogador?", "bind_menu");
               
                menu_additem(g_AppBind, "Sim", "1", 0)
                menu_additem(g_AppBind, "Nao", "2", 0)
               
                menu_display(id, g_AppBind)
        }
       
        else
                set_task(0.1, "BindApprove", id)
       
        return PLUGIN_HANDLED
}

public bind_menu(id, menu, item) {
        if ( !g_ToDisplay && !g_IsStarted && !g_AfterRdy && !g_KnifeRound)
                ToSetTaskToInfo(id)
       
        if( item == MENU_EXIT )
        {
                menu_destroy(g_AppBind)
                return PLUGIN_HANDLED;
        }
       
        new data[6], iName[64];
        new access, callback;
        menu_item_getinfo(menu, item, access, data,5, iName, 63, callback);
        new key = str_to_num(data)
       
        if (key == 1)
                client_cmd(id, "bind n pmenu");
       
        return PLUGIN_HANDLED
}

public CheckEmpty() {
        if (get_maxplayers() == get_pcvar_num(cvar_pLeft))
                return PLUGIN_HANDLED
       
       
        if (get_playersnum() == get_pcvar_num(cvar_pLeft))
        {
                set_pcvar_string(cvar_sv_password, "")
                client_print(0, print_chat, "%s A password do server foi removida [Aberto]", PREFIX)
        }
       
        return PLUGIN_CONTINUE
}

public CheckFull(id) {
        if (get_maxplayers() == get_pcvar_num(cvar_pLeft))
                return PLUGIN_HANDLED
       
        if (get_playersnum() == get_pcvar_num(cvar_pLeft))
        {
                new rnd = random_num(99, 9999)
                new pass[10]
               
                num_to_str(rnd, pass, 9)
               
                set_pcvar_string(cvar_sv_password, pass)
                client_print(0, print_chat, "%s O Server esta agora com password [Protegido]", PREFIX)
               
                new players[32], pnum, tempid;
               
                get_players(players, pnum, "ch")
               
                for (new full; full<pnum ; full++)
                {
                        players[full] = tempid
                       
                        if (is_user_connecting(tempid))
                                server_cmd("kick # %d %s O Server esta cheio!", get_user_userid(tempid), PREFIX)
                       
                }
               
        }
       
        else if (get_playersnum() > get_pcvar_num(cvar_pLeft))
        {
                server_cmd("kick # %d %s O Server esta cheio!", get_user_userid(id), PREFIX)
        }
       
        return PLUGIN_HANDLED
}

public CheckNow() {
        client_print(0, print_console, "get_playersnum() == %d", get_playersnum())
        if (get_playersnum() < get_pcvar_num(cvar_pLeft))
        {
                set_pcvar_string(cvar_sv_password, "")
                return PLUGIN_HANDLED
        }
       
        else if (get_playersnum() > get_pcvar_num(cvar_pLeft))
        {
                new tokick = get_playersnum() - get_pcvar_num(cvar_pLeft)
               
                for (new kick; kick<tokick ; kick++)
                {
                        new playeract = random(get_pcvar_num(cvar_pLeft))
                       
                        while (!is_user_connected(playeract))
                        {
                                playeract = random(get_pcvar_num(cvar_pLeft))
                        }
                       
                        server_cmd("kick %d %s O Server esta cheio!", get_user_userid(playeract), PREFIX)
                }
        }
       
        new rnd = random_num(99, 9999)
        new pass[10]
       
        num_to_str(rnd, pass, 9)
       
        set_pcvar_string(cvar_sv_password, pass)
        return PLUGIN_CONTINUE
}

public DoAgain(id) {
        if (!file_exists(gPug_ini_file))
        {
                client_print(0, print_chat, "%s ERROR! Pug.ini ficheiro nao encontrado.", PREFIX)
                return PLUGIN_HANDLED
        }
       
        if (get_pug_state() == 1)
        {
                g_LeftKills[id] = 0
                return PLUGIN_HANDLED
        }
       
        if ( !g_AfterRdy && !g_IsStarted)
        {
                g_KillsAce[id] = 0
                g_bIsReady[id] = false
                remove_task(id)
                g_iTimeLeft[id] = 130
                g_LeftKills[id] = 0
                set_task(1.0, "Continue", id, .flags="a", .repeat=130)
        }
       
        return PLUGIN_HANDLED
}

public client_putinserver(id) {
        set_task(4.0,"CmdWelcomeMessage",id)
        g_afktime[id] = 0
       
        if (is_user_bot(id) || is_user_hltv(id))
                return PLUGIN_HANDLED;
       
        BindApprove(id)
        CheckFull(id)
        clear_list(id)
       
        if (g_IsStarted || g_AfterRdy || g_KnifeRound)
        {
                g_LeftKills[id] = 0
                MoveFromSpec(id)
                return PLUGIN_HANDLED
        }
       
        set_task(30.0, "CheckUnAssigned", id)
        load_points(id)
        points_in_name(id)
        return PLUGIN_HANDLED
}

public CheckUnAssigned(id) {
        if ( !is_user_connected(id) )
                return PLUGIN_HANDLED
       
        if (cs_get_user_team(id) == CS_TEAM_UNASSIGNED)
        {
                new name[50]
               
                get_user_name(id, name, 49)
               
                server_cmd("kick # %d %s AFK no login.", get_user_userid(id), PREFIX)
                client_print(0, print_chat, "%s %s foi kickado do servidor por afk no login.", PREFIX, name)
        }
       
        return PLUGIN_HANDLED
}

public ShowInfo(id) {
        new hostname[64]
       
        get_cvar_string("hostname", hostname, 63)
       
        if (g_bIsReady[id] || g_IsStarted || g_AfterRdy)
        {
                remove_task(id)
                return PLUGIN_HANDLED
        }
       
        set_hudmessage(70, 130, 180, 0.28, 0.265, 0, 6.0, 1.0)
        ShowSyncHudMsg(id, g_MsgSync4, "------------------------------------------^nBem Vindo a %s^nPara iniciar um jogo, escreve !add^nCarrega no botao 'N' para abrir o menu.^nTu tens %d segundos restantes para escrever !add^n------------------------------------------", hostname, g_iTimeLeft[id])
        return PLUGIN_CONTINUE
}

public Continue(id) {
        if (g_IsStarted || g_AfterRdy)
        {
                return PLUGIN_HANDLED
        }
       
        if (g_bIsReady[id])
        {
                return PLUGIN_HANDLED
        }
        g_iTimeLeft[id] -= 1
       
       
        switch(g_iTimeLeft[id]) {
                case 120: client_printc(id, "!g%s !nPor favor escreve !add para estares pronto! Tu vais ser kickado se tu nao o escreveres.", PREFIX, g_iTimeLeft[id])
                        case 90: client_printc(id, "!g%s !nPor favor escreve !add para estares pronto! Tu vais ser kickado se tu nao o escreveres.", PREFIX, g_iTimeLeft[id])
                        case 60: client_printc(id, "Por !nfavor escreve !add para estares pronto!! Tu vais ser kickado se tu nao o escreveres.", PREFIX, g_iTimeLeft[id])
                        case 30: {
                        client_printc(id, "Por favor escreve !add para estares pronto! Tu vais ser kickado se tu nao o escreveres.", PREFIX, g_iTimeLeft[id])
                        set_hudmessage(42, 127, 255, 0.07, 0.70, 0, 6.0, 12.0)
                        ShowSyncHudMsg(id, g_MsgSync, "30 Segundos restantes!!! Escreve !add")
                }
                case 10: {
                        client_print(id, print_chat, "Por favor escreve !add para estares pronto! Tu vais ser kickado se tu nao o escreveres..", PREFIX, g_iTimeLeft[id])
                        set_hudmessage(42, 127, 255, 0.07, 0.70, 0, 6.0, 12.0)
                        ShowSyncHudMsg(id, g_MsgSync, "10 Segundos restantes!!! Escreve !add")
                }
                case 0: {
                        if (is_user_connecting(id))
                                DoAgain(id)
                        else {
                                new playername[32]
                                get_user_name(id, playername, 31)
                                server_cmd("amx_banip #%d 1 ^"%s Foste expulso por nao escrever !add em 2 minutos.^"", get_user_userid(id), PREFIX)
                                client_printc(0, "!g%s !n%s foi expulso por nao escrever !add em 2 minutos.", PREFIX, playername)
                        }
                }
        }
       
        return PLUGIN_HANDLED
}

public CrashAttempt(id) {
       
        if ( get_gametime() - gTypedCommand[id] <= 1.0 ) {
                gTypedCommand[id] = get_gametime()
                return
        }
       
        gTypedCommand[id] = get_gametime()
}

public Prepare(id) {
        if (g_AfterRdy || g_IsStarted || g_MapChanged) {
                client_printc(id, "!g%s !nA jogo ja comecou!", PREFIX)
                return PLUGIN_HANDLED
        }
        if( g_bIsReady[id] ) {
                client_printc(id, "!g%s !nTu ja escreveste !add", PREFIX)
                return PLUGIN_HANDLED
        }
        else {
                CrashAttempt(id)
               
                new playername[32]
                get_user_name(id, playername, 31)
                g_bIsReady[id] = true
                client_printc(id, "!g%s !nTu estas agora pronto!", PREFIX)
                client_printc(0, "!g%s !n%s esta agora pronto!", PREFIX, playername)
                gPlayersLeft--
                remove_task(id)
        }
        if (gPlayersLeft != 0)
                client_printc(0, "!g%s !n%d Jogadores restantes para comecar o jogo!", PREFIX, gPlayersLeft)
        else {
                g_AfterRdy = true
                g_ToDisplay = true
                removeAllTasks()
                client_printc(0, "!g%s !nVotacao para o mapa vai comecar em breve...", PREFIX)
                client_printc(0, "!g%s !nVotacao para o mapa vai comecar em breve...", PREFIX)
                client_printc(0, "!g%s !nVotacao para o mapa vai comecar em breve...", PREFIX)
                new taskId = scanForTaskID()
                set_task(10.0, "StartVote", taskId)
        }
       
       
        return PLUGIN_HANDLED
}

public ToSetAllToInfo() {
        new players[32], pnum, tempid;
        get_players(players, pnum, "ch");
        for( new i; i<pnum; i++ )
        {
                tempid = players[i]
                set_task(1.0, "ShowInfo", tempid, .flags="a", .repeat=130)
        }
        return PLUGIN_CONTINUE
}

public ToSetTaskToInfo(id)
        set_task(1.0, "ShowInfo", id, .flags="a", .repeat=130)

public unPrepare(id) {
        if (g_AfterRdy || g_IsStarted || g_MapChanged) {
                client_print(id, print_chat, "%s O jogo ja comecou!", PREFIX)
                return PLUGIN_HANDLED
        }
       
        if (g_bIsReady[id]) {
                CrashAttempt(id)
               
                gPlayersLeft++
                g_bIsReady[id] = false
                client_printc(id, "!g%s !nTu nao podes estar mais pronto!", PREFIX)
                g_iTimeLeft[id] = 130
                client_printc(0, "!g%s !t%d !nJogadores restantes para comecar o jogo!", PREFIX, gPlayersLeft)
                ToSetTaskToInfo(id)
                set_task(1.0, "Continue", id, .flags="a", .repeat=130)
        }
       
        else {
                client_printc(id, "!g%s !nTu nem sequer escreveste !add", PREFIX)
        }
       
        return PLUGIN_HANDLED
}

public ShowLeft() {
        if (gPlayersLeft != 0)
        {
                new players[32], pnum, tempid;
                get_players(players, pnum, "ch");
               
                for( new i; i<pnum; i++ ) {
                        tempid = players[i];
                        if (g_bIsReady[tempid] == false) {
                                new playername[32]
                                get_user_name(tempid, playername, 31)
                                add( gNotRdy, charsmax( gNotRdy ), "^n" );
                                add( gNotRdy, charsmax( gNotRdy ), playername );
                        }
                }
               
        }
       
        else
                return PLUGIN_HANDLED
       
        new playersl[2]
        num_to_str(gPlayersLeft, playersl, 2)
        trim(playersl)
        add(gNotRdy, charsmax(gNotRdy), "^n^n")
        add(gNotRdy, charsmax(gNotRdy), playersl)
        add(gNotRdy, charsmax(gNotRdy), " Jogadores restantes.^nQuem estiver nesta lista, escreva add ou !add^nServidor Configurado por Valascus")
        set_hudmessage(0, 135, 0, 0.02, 0.19, 0, 6.0, 12.0)
        show_hudmessage(0, gNotRdy)
        gNotRdy = "[Route-Games Auto-Mix] Nao esta pronto:^n"
        new taskId = scanForTaskID()
        set_task(1.0, "ShowLeft", taskId)
        return PLUGIN_HANDLED
}

public credits(id) {
        client_printc(id, "!gCreditos: !tServidor Configurado por Valascus")
        client_printc(id, "!gContacto: !tSteam:vascodiogo")
        return PLUGIN_CONTINUE
}

public cmds(id) {
        client_printc(id, "!g%s !nComandos: !add, add, .add, !sair, !creditos, ! top15, !rank", PREFIX)
        client_printc(id, "!g%s !nComandos: !cmds, !menu, !dmg, !score, !voteban", PREFIX)
        client_printc(id, "!g%s !nComandos: !stats, !statsme, !hp, !mute", PREFIX)
        return PLUGIN_CONTINUE
}

public StartVote() {
        getmaps()
        new rnd
        while (g_DoneMaps != 4 && g_MapsCounter > 0) {
                rnd = random(g_MapsCounter)
                copy(g_MapsChosen[g_DoneMaps++], 19, g_MapsAvailable[rnd])
                g_MapsAvailable[rnd] = g_MapsAvailable[--g_MapsCounter]
        }
       
        g_gVoteMenu = menu_create("Mudar mapa?", "votemap");
       
        new num[11]
        for(new i = 0; i < g_DoneMaps; i++) {
                num_to_str(i, num, 10)
                menu_additem(g_gVoteMenu, g_MapsChosen[i], num, 0)
        }
        menu_additem(g_gVoteMenu, "Continuar com o mapa actual", "4", 0)
        new players[32], pnum, tempid;
        get_players(players, pnum, "ch");
        for( new i; i<pnum; i++ ) {
                tempid = players[i];
                client_printc(tempid, "!g%s !nPor favor, votem para o mapa que gostariam de jogar.", PREFIX)
                menu_display(tempid, g_gVoteMenu);
        }
        client_cmd(0, "spk ^"get red(e80) ninety(s45) to check(e20) use bay(s18) mass(e42) cap(s50)^"")
        new taskId = scanForTaskID()
        set_task(10.0, "EndVote", taskId);
        return PLUGIN_HANDLED;
}


public votemap(id, menu, item) {
        if( item == MENU_EXIT ) {
                menu_display(id, g_gVoteMenu)
                return PLUGIN_HANDLED;
        }
       
        new data[6], szName[64];
        new access, callback;
        menu_item_getinfo(menu, item, access, data,charsmax(data), szName,charsmax(szName), callback);
        new voteid = str_to_num(data);
        new playerna[32]
        get_user_name(id, playerna, 31)
       
        if (voteid != 4)
                client_print(0, print_chat, "%s %s votaram a favor do mapa %s", PREFIX, playerna, g_MapsChosen[voteid])
        else
                client_print(0, print_chat, "%s %s votaram a favor de continual com o mapa actual.", PREFIX, playerna)
       
        g_gVotes[voteid]++;
        return PLUGIN_HANDLED;
}

public getmaps() {
        get_configsdir(g_Maps_Ini_File, 63);
        format(g_Maps_Ini_File, 63, "%s/maps.ini", g_Maps_Ini_File);
       
        new mapsfile = fopen(g_Maps_Ini_File, "r")
        new linefortest[50]
       
        while (g_MapsCounter < sizeof(g_MapsAvailable) && !feof(mapsfile)) {
                fgets(mapsfile, linefortest, 49)
                trim(linefortest)
               
                new getcurrentmap[32]
                get_mapname(getcurrentmap, 31)
               
                if ((is_map_valid(linefortest)) && (!equali(linefortest, getcurrentmap)))
                        copy(g_MapsAvailable[g_MapsCounter++], 24, linefortest)
        }
       
        fclose(mapsfile)
}

public EndVote() {
        show_menu(0, 0, "^n", 1);
        new best = 0;
        for(new i = 1; i < sizeof(g_gVotes); i++) {
                if(g_gVotes[i] > g_gVotes[best])
                        best = i;
        }
       
        g_gVotes[0] = 0
        g_gVotes[1] = 0
        g_gVotes[2] = 0
        g_gVotes[3] = 0
        g_gVotes[4] = 0
       
        if(best == 4) {
                client_printc(0, "!g%s !nSera utilizado o mapa actual para este jogo.", PREFIX);
                TeamsVote()
        }
        else {
                client_printc(0, "!g%s !nO mapa sera alterado dentro de 10 segundos. O mapa escolhido foi: %s.", PREFIX, g_MapsChosen[best]);
                g_ChangeMapTo = best;
                set_pug_state(1)
                set_pcvar_string(cvar_sv_password, "")
                new taskId = scanForTaskID()
                set_task(10.0, "ChangeMap", taskId);
        }
       
        return PLUGIN_HANDLED
}

public ChangeMap() {
        new maptochangeto[25]
       
        copy(maptochangeto, 24, g_MapsChosen[g_ChangeMapTo])
        server_cmd("changelevel %s", maptochangeto)
        return PLUGIN_CONTINUE
}

public FriendlyFire() {
        g_fVoteMenu = menu_create("Como queres o Friendly Fire?", "voteFF");
       
       
        menu_additem(g_fVoteMenu, "Activado", "0", 0)
        menu_additem(g_fVoteMenu, "Desativado", "1", 0)
       
        new pplayers[32], ppnum, ptempid;
       
        get_players(pplayers, ppnum, "ch");
       
        for( new i; i<ppnum; i++ ){
                ptempid = pplayers[i]
                client_printc(ptempid, "!g% !nComo gostarias de ter o Friendly Fire? (Activado/Desligado)", PREFIX)
                menu_display(ptempid, g_fVoteMenu, 0)
        }
        new taskId = scanForTaskID()
        set_task(10.0, "EndFFVote", taskId)
        return PLUGIN_HANDLED
}

public voteFF(id, menu, item) {
        if( item == MENU_EXIT ) {
                menu_display(id, g_fVoteMenu)
                return PLUGIN_HANDLED;
        }
       
        new data[6], szName[64];
        new access, callback;
        menu_item_getinfo(menu, item, access, data,charsmax(data), szName,charsmax(szName), callback);
       
        new voteid = str_to_num(data);
        new playername[32]
        get_user_name(id, playername, 31)
       
        switch(voteid) {
                case 0: client_print(0, print_chat, "%s %s votou para o friendlyfire estar: Activado.", PREFIX, playername)
                        case 1: client_print(0, print_chat, "%s %s votou para o friendlyfire estar: Desativado.", PREFIX, playername)
                }
       
        g_fVotes[voteid]++;
        return PLUGIN_HANDLED;
}

public EndFFVote() {
        show_menu(0, 0, "^n", 1);
        new best = 0;
        for(new i = 1; i < sizeof(g_fVotes); i++) {
                if(g_fVotes[i] > g_fVotes[best])
                        best = i;
        }
        g_fVotes[0] = 0
        g_fVotes[1] = 0
       
        switch(best){
                case 0: client_printc(0, "!g%s !nO Friendly Fire sera activado!", PREFIX)
                        case 1: {
                        client_printc(0, "!g%s !nO FriendlyFire sera desativado!", PREFIX)
                        g_bFFoff = true
                }
        }
        new taskId = scanForTaskID()
        set_task(5.0, "StartMatch", taskId)
        return PLUGIN_HANDLED
}


public TeamsVote() {
        client_printc(0, "!g%s !nA organizacao das equipas ira comecar em 10 segundos.", PREFIX)
        new taskId = scanForTaskID()
        set_task(10.0, "TeamsVote2", taskId)
}

public TeamsVote2() {
        if ( !g_CustomGame ) {
                if (get_playersnum() < get_pcvar_num(cvar_pLeft) - 2) {
                        if (g_DidWaitEnough == 16) {
                                client_printc(0, "!g%s !nOs jogadores nao estao a juntar se! O Jogo acabou...", PREFIX)
                                set_pug_state(0)
                                g_IsStarted = false
                                g_AfterRdy = false
                                new taskId = scanForTaskID()
                                set_task(3.0, "MatchIsOver", taskId)
                                return PLUGIN_HANDLED
                        }
                       
                        new sum
                        sum = g_DidWaitEnough * 15
                        sum = 300 - sum
                        client_printc(0, "!g%s !nO voto para a organizacao das equipas sera atrasado em mais de 15 segundos ja que todos nao se juntaram ainda.", PREFIX)
                        set_hudmessage(255, 0, 0, 0.35, 0.66, 0, 6.0, 12.0)
                        ShowSyncHudMsg(0, g_MsgSync6, "Voto para as equipas Atrasou se - Reiniciando o jogo em %d Segundos", sum)
                        g_DidWaitEnough++
                        new taskId = scanForTaskID()
                        set_task(15.0, "TeamsVote2", taskId)
                        return PLUGIN_HANDLED
                }
               
        }
       
        set_pug_state(0)
        g_MapChanged = false
        g_AfterRdy = true
        g_DidWaitEnough = 0
        g_rVoteMenu = menu_create("Como tu queres as equipas organizadas?", "voteteams");
        menu_additem(g_rVoteMenu, "Mesmas equipas.", "0", 0)
        menu_additem(g_rVoteMenu, "Capitaes aleatorios.", "1", 0)
        menu_additem(g_rVoteMenu, "Equipas aleatorias.", "2", 0)
       
        new pplayers[32], ppnum, ptempid;
        get_players(pplayers, ppnum, "ch");
       
        for( new i; i<ppnum; i++ ) {
                ptempid = pplayers[i]
                client_printc(ptempid, "!g%s !nPor favor, escolhe a forma como tu gostarias que as equipas sejam organizadas.", PREFIX)
                menu_display(ptempid, g_rVoteMenu, 0)
        }
       
        client_cmd(0, "spk Gman/Gman_Choose1")
        new taskId = scanForTaskID()
        set_task(10.0, "EndTeamsVote", taskId)
        return PLUGIN_HANDLED
}

public voteteams(id, menu, item) {
        if( item == MENU_EXIT ) {
                menu_display(id, g_rVoteMenu)
                return PLUGIN_HANDLED;
        }
       
        new data[6], szName[64];
        new access, callback;
        menu_item_getinfo(menu, item, access, data,charsmax(data), szName,charsmax(szName), callback);
        new voteid = str_to_num(data);
        new playername[32]
        get_user_name(id, playername, 31)
       
        switch(voteid) {
                case 0: client_print(0, print_chat, "%s %s votou a favor das: Mesmas equipas.", PREFIX, playername)
                        case 1: client_print(0, print_chat, "%s %s votou a favor dos: Capitaes aleatorios.", PREFIX, playername)
                        case 2: client_print(0, print_chat, "%s %s votou a favor das: Equipas aleatorias.", PREFIX, playername)
                }
        g_rVotes[voteid]++;
        return PLUGIN_HANDLED;
}

public EndTeamsVote() {
        show_menu(0, 0, "^n", 1);
        new best = 0;
        for(new i = 1; i < sizeof(g_rVotes); i++) {
                if(g_rVotes[i] > g_rVotes[best])
                        best = i;
        }
       
        switch(best) {
                case 0:
                {
                        new playersT[32] , numT , playersCt[32] , numCt
                        get_players( playersT , numT , "che" , "TERRORIST" )
                        get_players( playersCt , numCt , "che" , "CT" )
                        g_rVotes[0] = 0
                        g_rVotes[1] = 0
                        g_rVotes[2] = 0
                       
                        if (numT != numCt)
                        {
                                client_print(0, print_chat, "%s As equipas nao estao equilibradas! Equipas aleatorias em 10 segundos.", PREFIX)
                                new taskId = scanForTaskID()
                                set_task(10.0, "RandomTeams", taskId)
                                return PLUGIN_HANDLED
                        }
                       
                        client_printc(0, "!g%s !nAs equipas permanecerao as mesmas, o jogo vai comecar em 10 segundos.", PREFIX)
                        new taskId = scanForTaskID()
                        set_task(10.0, "CurrentTeams", taskId)
                }
                case 1:
                {
                        g_rVotes[0] = 0
                        g_rVotes[1] = 0
                        g_rVotes[2] = 0
                        client_printc(0, "!g%s !nOs capitaes aleatorios serao escolhidos em 10 segundos.", PREFIX)
                        new taskId = scanForTaskID()
                        set_task(10.0, "RandomCpt", taskId)
                }
                case 2:
                {
                        g_rVotes[0] = 0
                        g_rVotes[1] = 0
                        g_rVotes[2] = 0
                        client_printc(0, "!g%s !nAs equipas aleatorias sera definidas em 10 segundos.", PREFIX)
                        new taskId = scanForTaskID()
                        set_task(10.0, "RandomTeams", taskId)
                }
        }
       
        return PLUGIN_HANDLED
}

public CurrentTeams() {
        new players[32], pnum, tempid;
        get_players(players, pnum, "ch");
       
        for( new i; i<pnum; i++ ) {
                tempid = players[i]
                if (cs_get_user_team(tempid) == CS_TEAM_SPECTATOR)
                        set_task(1.0, "MoveFromSpec", tempid)
        }
        StartMatch()
}


public MoveFromSpec(id) {
        new playersT[ 32 ] , numT , playersCt[ 32 ] , numCt
        get_players( playersT , numT , "che" , "TERRORIST" )
        get_players( playersCt , numCt , "che" , "CT" )
       
        if (g_Twon) {
                if (g_bSecondHalf) {
                        if( numT > numCt )
                        {
                                set_pcvar_string(cvar_humans_join_team, "CT")
                                client_cmd(id, "slot1")
                                ChangeTagB(id)
                        }
                       
                        else
                        {
                                set_pcvar_string(cvar_humans_join_team, "T")
                                client_cmd(id, "slot1")
                                ChangeTagA(id)
                        }
                }
               
                else
                {
                        if( numT > numCt )
                        {
                                set_pcvar_string(cvar_humans_join_team, "CT")
                                client_cmd(id, "slot1")
                                ChangeTagA(id)
                        }
                       
                        else
                        {
                                set_pcvar_string(cvar_humans_join_team, "T")
                                client_cmd(id, "slot1")
                                ChangeTagB(id)
                        }
                }
        }
       
        else
        {
                if (g_bSecondHalf)
                {
                        if( numT > numCt )
                        {
                                set_pcvar_string(cvar_humans_join_team, "CT")
                                client_cmd(id, "slot1")
                                ChangeTagA(id)
                        }
                       
                        else
                        {
                                set_pcvar_string(cvar_humans_join_team, "T")
                                client_cmd(id, "slot1")
                                ChangeTagB(id)
                        }
                }
               
                else
                {
                        if( numT > numCt )
                        {
                                set_pcvar_string(cvar_humans_join_team, "CT")
                                client_cmd(id, "slot1")
                                ChangeTagB(id)
                        }
                       
                        else
                        {
                                set_pcvar_string(cvar_humans_join_team, "T")
                                client_cmd(id, "slot1")
                                ChangeTagA(id)
                        }
                }
        }
       
        if (g_bCpt) {
                client_cmd(id, "kill")
                cs_set_user_team(id, CS_TEAM_SPECTATOR)
        }
       
        return PLUGIN_CONTINUE
}

public RandomCpt() {
        set_pcvar_num(cvar_mp_freezetime, 9999)
        new players[32], pnum, tempid;
        get_players(players, pnum, "ch");
       
        for( new i; i<pnum; i++ ) {
                tempid = players[i];
                client_cmd(tempid, "kill")
                cs_set_user_team(tempid, CS_TEAM_SPECTATOR)
        }
       
        if (get_playersnum() < 2) {
                if (g_CustomGame) {
                        client_printc(0, "!g%s !nEstao menos de 2 jogadores, nao podes escolher 2 capitaes. Sera equipas aleatorias... (Jogo personalizado)", PREFIX)
                        new taskId = scanForTaskID()
                        set_task(3.0, "RandomTeams", taskId)
                }
               
                else {
                        client_printc(0, "!g%s !nHa menos de 2 jogadores, a reiniciar o jogo...", PREFIX)
                        new taskId = scanForTaskID()
                        set_task(5.0, "EndMatch", taskId)
                }
        }
       
        new z = random(pnum)
        while (cs_get_user_team(players[z]) == CS_TEAM_UNASSIGNED)
                z = random(pnum)
        cs_set_user_team(players[z], CS_TEAM_T)
        gCptT = players[z]
       
        new q = random(pnum)
        while (q == z)
                q = random(pnum)
        cs_set_user_team(players[q], CS_TEAM_CT)
        gCptCT = players[q]
        client_printc(0, "!g%s !nOs Capitaes foram escolhidos ao acaso, os capitaes agora vao escolher os seus jogadores de equipa.", PREFIX)
        client_printc(0, "!g%s !nCapitao da equipa terrorista, por favor, escolhe primeiro.", PREFIX)
        g_bCpt = true
        moveT()
}

public kickhimout(id) {
        client_printc(0, "!g%s !nUm dos capitaes esta AFK! Sera equipas aleatorias...", PREFIX)
        set_hudmessage(255, 0, 0, 0.40, 0.32, 0, 6.0, 12.0)
        ShowSyncHudMsg(0, g_MsgSync2, "Um dos capitaes esta AFK!^nSera equipas aleatorias em 5 segundos...")
        show_menu(0, 0, "^n", 1);
        g_bCpt = false
        new taskId = scanForTaskID()
        set_task(5.0, "RandomTeams", taskId)
        return PLUGIN_HANDLED
}


public moveT() {
        TeamsInfo()
       
        g_PlayersMenu = menu_create("Escolhe um jogador para ir para a tua equipa:", "moveT_menu");
        new players[32], pnum, tempid;
        new Tplayers[32], Tpnum;
        new szName[32], szTempid[10];
        new pickisdone, check
        get_players(players, pnum, "ch");
        get_players(Tplayers, Tpnum, "che", "TERRORIST");
       
        for( new i; i<pnum; i++ )
        {
                tempid = players[i];
               
                if ((tempid == gCptT) || (tempid == gCptCT))
                        check++
               
                if (cs_get_user_team(tempid) == CS_TEAM_UNASSIGNED)
                        continue;
               
                else if (cs_get_user_team(tempid) == CS_TEAM_SPECTATOR) {
                        get_user_name(tempid, szName, 31);
                        num_to_str(tempid, szTempid, 9);
                        menu_additem(g_PlayersMenu, szName, szTempid, 0);
                        pickisdone++
                }
        }
       
        if (check != 2) {
                client_printc(0, "!g%s !nUm dos capitaes disconectou se! Sera equipas aleatorias...", PREFIX)
                g_bCpt = false
                removeAllTasks()
                new taskId = scanForTaskID()
                set_task(3.0, "RandomTeams", taskId)
                return PLUGIN_HANDLED
        }
       
        if (pickisdone == 0) {
                client_printc(0, "!g%s !nTodas as equipas estao definidas! Jogo vai comecar em 10 segundos...", PREFIX)
                g_bCpt = false
                removeAllTasks()
                new taskId = scanForTaskID()
                set_task(10.0, "StartMatch", taskId)
                return PLUGIN_HANDLED
        }
       
        if (Tpnum >= 5) {
                client_printc(0, "!g%s !nA Equipa de terroristas está CHEIA! Voltando ao Capitao CT.", PREFIX)
                moveCT()
                return PLUGIN_HANDLED
        }
       
        menu_display(gCptT, g_PlayersMenu)
        set_task(25.0, "kickhimout", gCptT)
        return PLUGIN_HANDLED;
}

public moveT_menu(id, g_PlayersMenu, item) {
        if( item == MENU_EXIT )
        {
                menu_display(id, g_PlayersMenu)
                return PLUGIN_HANDLED;
        }
       
        remove_task(gCptT)
        new data[6], iName[64];
        new access, callback;
        menu_item_getinfo(g_PlayersMenu, item, access, data,5, iName, 63, callback);
        new tempid = str_to_num(data);
        new name[32]
        new g_bCptNm[64]
        get_user_name(gCptT, g_bCptNm, 63)
        get_user_name(tempid, name, 31)
        cs_set_user_team(tempid, CS_TEAM_T)
        client_print(0, print_chat, "%s %s foi escolhido para a equipa terroristas pelo %s Capitao.", PREFIX, name, g_bCptNm)
        menu_destroy(g_PlayersMenu);
        remove_task(gCptT);
        moveCT()
        return PLUGIN_HANDLED
}


public moveCT() {
        g_PlayersMenu = menu_create("Escolhe um jogador para ir para a tua equipa:", "moveCT_menu");
        new players[32], pnum, tempid;
        new CTplayers[32], CTpnum;
        new szName[32], szTempid[10];
        new pickisdone, check
        get_players(players, pnum, "ch");
        get_players(CTplayers, CTpnum, "che", "CT");
       
        for( new i; i<pnum; i++ )
        {
                tempid = players[i];
               
                if ((tempid == gCptT) || (tempid == gCptCT))
                        check++
               
                if (cs_get_user_team(tempid) == CS_TEAM_UNASSIGNED)
                        continue;
               
                else if (cs_get_user_team(tempid) == CS_TEAM_SPECTATOR) {
                        get_user_name(tempid, szName, 31);
                        num_to_str(tempid, szTempid, 9);
                        menu_additem(g_PlayersMenu, szName, szTempid, 0);
                        pickisdone++
                }
        }
       
        if (check != 2) {
                client_printc(0, "!g%s !nUm dos capitaes disconectou se! Equipas aleatorias...", PREFIX)
                g_bCpt = false
                new taskId = scanForTaskID()
                set_task(3.0, "RandomTeams", taskId)
                return PLUGIN_HANDLED
        }
       
        if (pickisdone == 0) {
                client_printc(0, "!g%s !nTodas as equipas estao definidas! Jogo vai comecar em 10 segundos...", PREFIX)
                g_bCpt = false
                new taskId = scanForTaskID()
                set_task(10.0, "StartMatch", taskId)
                return PLUGIN_HANDLED
        }
       
        if (CTpnum >= 5) {
                client_printc(0, "!g%s !nA Equipa de Contra terroristas está CHEIA! Voltando ao Capitao T.", PREFIX)
                moveT()
                return PLUGIN_HANDLED
        }
       
        menu_display(gCptCT, g_PlayersMenu)
        set_task(20.0, "kickhimout", gCptCT)
        return PLUGIN_HANDLED;
}

public moveCT_menu(id, g_PlayersMenu, item) {
        if( item == MENU_EXIT ) {
                menu_display(id, g_PlayersMenu)
                return PLUGIN_HANDLED;
        }
       
        remove_task(gCptCT)
        new data[6], iName[64];
        new access, callback;
        menu_item_getinfo(g_PlayersMenu, item, access, data,5, iName, 63, callback);
        new tempid = str_to_num(data);
        new name[32]
        new g_bCptNm[64]
        get_user_name(gCptCT, g_bCptNm, 63)
        get_user_name(tempid, name, 31)
        cs_set_user_team(tempid, CS_TEAM_CT)
        client_print(0, print_chat, "%s %s foi escolhido para a equipa Contra terrorista pelo %s Capitao.", PREFIX, name, g_bCptNm)
        menu_destroy(g_PlayersMenu);
        remove_task(gCptCT);
        moveT()
        return PLUGIN_HANDLED
}

public TeamsInfo() {
        if (g_bCpt) {
                new nameCT[70], nameT[70]
                new infoT[500]
                new infoCT[500]
                new players[32], pnum, tempid;
                new toapprove
               
                get_players(players, pnum, "ch")
                get_user_name(gCptT, nameT, 69)
                get_user_name(gCptCT, nameCT, 69)
                format(infoT, 499, "Equipa A^n-------------^nCapitao: %s^n^nOs companheiros de equipa:^n^n", nameT)
                format(infoCT, 499, "Equipa B^n-------------^nCapitao: %s^n^nOs companheiros de equipa:^n^n", nameCT)
               
                for (new i ; i < pnum ; i++)
                {
                        tempid = players[i]
                       
                        if ((cs_get_user_team(tempid) == CS_TEAM_T) && (tempid != gCptT))
                        {
                                new nameofp[70]
                               
                                get_user_name(tempid, nameofp, 69)
                                add(infoT, 499, nameofp)
                                add(infoT, 499, "^n")
                        }
                       
                        else if ((cs_get_user_team(tempid) == CS_TEAM_CT) && (tempid != gCptCT))
                        {
                                new nameofCTp[70]
                               
                                get_user_name(tempid, nameofCTp, 69)
                                add(infoCT, 499, nameofCTp)
                                add(infoCT, 499, "^n")
                        }
                       
                        if ((cs_get_user_team(tempid) == CS_TEAM_T) && (tempid == gCptT))
                                toapprove++
                       
                        else if ((cs_get_user_team(tempid) == CS_TEAM_CT) && (tempid == gCptCT))
                        {
                                toapprove++
                        }
                }
               
                if (toapprove != 2) {
                        set_hudmessage(255, 0, 0, 0.40, 0.32, 0, 6.0, 12.0)
                        ShowSyncHudMsg(0, g_MsgSync2, "Um dos capitaes saiu do jogo!^nSera equipas aleatorias em 5 segundos...")
                        new taskId = scanForTaskID()
                        set_task(5.0, "RandomTeams", taskId)
                        return PLUGIN_HANDLED
                }
               
                set_hudmessage(27, 162, 229, 0.28, 0.32, 0, 6.0, 1.0)
                ShowSyncHudMsg(0, g_MsgSync8, infoT)
               
                set_hudmessage(27, 162, 229, 0.58, 0.32, 0, 6.0, 1.0)
                ShowSyncHudMsg(0, g_MsgSync2, infoCT)
                new taskId = scanForTaskID()
                set_task(1.0, "TeamsInfo", taskId)
        }
       
        else
        {
                set_hudmessage(0, 255, 0, 0.40, 0.32, 0, 6.0, 12.0)
                ShowSyncHudMsg(0, g_MsgSync2, "Todas as equipas sao definidas!")
                return PLUGIN_CONTINUE
        }
       
        return PLUGIN_CONTINUE
}


public RandomTeams()
{
        new players[32], pnum, tempid;
       
        get_players(players, pnum, "ch");
       
        for( new i; i<pnum; i++ ) {
                tempid = players[i];
                client_cmd(tempid, "kill")
               
                if (cs_get_user_team(tempid) == CS_TEAM_UNASSIGNED)
                        continue;
                cs_set_user_team(tempid, CS_TEAM_SPECTATOR)
        }
       
        new topick, idop
       
        while (AnyoneInSpec()) {
                if (cs_get_user_team(players[idop]) == CS_TEAM_UNASSIGNED)
                {
                        idop++
                        continue;
                }
               
                topick = random(2)
               
                if (topick == 1)
                {
                        cs_set_user_team(players[idop], CS_TEAM_T)
                }
               
                else
                {
                        cs_set_user_team(players[idop], CS_TEAM_CT)
                }
               
                new pplayers[32], ppnum, tempid;
                new ppplayers[32], pppnum;
                new temppnum
               
                get_players(players, pnum, "ch");
                get_players(pplayers, ppnum, "che", "CT")
                get_players(ppplayers, pppnum, "che", "TERRORIST")
               
                if (ppnum == pnum/2)
                {
                        get_players(players, temppnum, "ch");
                       
                        for( new i; i<temppnum; i++ )
                        {
                                tempid = players[i];
                               
                                if (cs_get_user_team(tempid) == CS_TEAM_SPECTATOR)
                                {
                                        cs_set_user_team(tempid, CS_TEAM_T)
                                }
                        }
                }
               
                else if (pppnum == pnum/2)
                {
                        get_players(players, temppnum, "ch");
                       
                        for( new i; i<temppnum; i++ )
                        {
                                tempid = players[i];
                               
                                if (cs_get_user_team(tempid) == CS_TEAM_SPECTATOR)
                                {
                                        cs_set_user_team(tempid, CS_TEAM_CT)
                                }
                        }
                }
               
                idop++
        }
        new taskId = scanForTaskID()
        client_printc(0, "!g%s !nAs equipas foram aleatorias! A comecar o jogo em 5 segundos...", PREFIX)
        set_task(5.0, "StartMatch", taskId)
}

public AnyoneInSpec() {
        new players[32], pnum, tempid;
        get_players(players, pnum, "ch");
       
        for( new i; i<pnum; i++ )
        {
                tempid = players[i];
               
                if (cs_get_user_team(tempid) == CS_TEAM_SPECTATOR)
                        return true
        }
       
        return false
}


public StartMatch() {
        if(get_pcvar_num(cvar_FFvote) && (g_bDidVoteFF == false))
        {
                g_bDidVoteFF = true
                client_printc(0, "!g%s !nO Voto para o Friendly Fire vai agora comecar...", PREFIX)
                new taskId = scanForTaskID()
                set_task(5.0, "FriendlyFire", taskId)
                return PLUGIN_HANDLED
        }
       
        new players[32], pnum, tempid;
       
        get_players(players, pnum, "ch")
       
        if (pnum < get_pcvar_num(cvar_pLeft) - 2)
        {
                if (g_CustomGame)
                {
                       
                }
               
                else
                {
                        if (g_DidWaitEnough < 8)
                        {
                                client_printc(0, "!g%s O Jogo sera atrasado em 15 segundos. (Minimo 8 Jogadores).", PREFIX)
                                g_DidWaitEnough++
                                new taskId = scanForTaskID()
                                set_task(15.0, "StartMatch", taskId)
                                return PLUGIN_HANDLED
                        }
                       
                        set_pcvar_string(cvar_humans_join_team, "")
                        g_iScore[0] = 0
                        g_iScore[1] = 0
                        g_AfterRdy = false
                        g_IsStarted = false
                        g_bDidVoteFF = false
                        g_ToDisplay = false
                        g_DidWaitEnough = 0
                        gPlayersLeft = get_maxplayers()
                       
                        client_printc(0, "!g%s !nNao ha mais 10 jogadores. Jogo vai comecar de novo.", PREFIX)
                        client_printc(0, "!g%s !nPre-configuracoes do jogo estao a ser carregadas. Espera por favor...", PREFIX)
                        ShowLeft()
                        server_cmd("exec practice.cfg")
                        server_exec()
                       
                        for( new i; i<pnum; i++ ) {
                                tempid = players[i];
                                g_bIsReady[tempid] = false
                                remove_task(tempid)
                                g_iTimeLeft[tempid] = 130
                                g_LeftKills[tempid] = 0
                                g_bSecondHalf = false
                                ToSetTaskToInfo(tempid)
                                set_task(1.0, "Continue", tempid, .flags="a", .repeat=130)
                        }
                        return PLUGIN_HANDLED
                }
        }
       
        for (new x ; x<pnum ; x++)
        {
                tempid = players[x]
               
                switch( cs_get_user_team(tempid) ) {
                        case CS_TEAM_UNASSIGNED: continue;
                                case CS_TEAM_SPECTATOR: server_cmd("kick # %d", get_user_userid(tempid))
                                case CS_TEAM_T: ChangeTagA(tempid)
                                case CS_TEAM_CT: ChangeTagB(tempid)
                        }
        }
       
        client_printc(0, "!g%s !nConfiguracoes de Mix estao agora carregadas. Espera por favor...", PREFIX)
        client_printc(0, "!g%s !nConfiguracoes de Mix estao agora carregadas. Espera por favor...", PREFIX)
        client_printc(0, "!g%s !nConfiguracoes de Mix estao agora carregadas. Espera por favor...", PREFIX)
        new taskId = scanForTaskID()
        set_task(4.0, "Settings", taskId)
       
        return PLUGIN_HANDLED
}

public ChangeTagA(id) {
        new pname[100]
        new newname[70]
        get_user_info(id, "name", pname, 49)
        pname = RemoveOldTag(pname)
        format(newname, 69, "(Equipa-A) %s", pname)
        set_user_info(id, "name", newname)
}

public ChangeTagB(id) {
        new pname[100]
        new newname[70]
        get_user_info(id, "name", pname, 49)
        pname = RemoveOldTag(pname)
        format(newname, 69, "(Equipa-B) %s", pname)
        set_user_info(id, "name", newname)
}

public RemoveOldTag(pname[100]) {
        replace_all(pname, 69, "(Equipa-B)", "")
        replace_all(pname, 69, "(Equipa-A)", "")
        replace_all(pname, 69, "(Equipa-B )", "")
        replace_all(pname, 69, "(Equipa-A )", "")
        replace_all(pname, 69, "( Equipa-B)", "")
        replace_all(pname, 69, "( Equipa-A)", "")
        replace_all(pname, 69, "( Equipa-B )", "")
        replace_all(pname, 69, "( Equipa-A )", "")
        replace_all(pname, 69, "(Equipa-B)", "")
        replace_all(pname, 69, "(Equipa-A)", "")
        replace_all(pname, 69, "(Equipa-B)", "")
        replace_all(pname, 69, "(Equipa-A)", "")
        replace_all(pname, 69, "(Equipa-B)", "")
        replace_all(pname, 69, "(Equipa-A)", "")
        replace_all(pname, 69, "[Equipa-B]", "")
        replace_all(pname, 69, "[Equipa-A]", "")
        replace_all(pname, 69, "[Equipa-B ]", "")
        replace_all(pname, 69, "[Equipa-A ]", "")
        replace_all(pname, 69, "[ Equipa-B]", "")
        replace_all(pname, 69, "[ Equipa-A]", "")
        replace_all(pname, 69, "[ Equipa-B ]", "")
        replace_all(pname, 69, "[ Equipa-A ]", "")
        replace_all(pname, 69, "(Equipa B)", "")
        replace_all(pname, 69, "(Equipa A)", "")
        replace_all(pname, 69, "[Equipa B]", "")
        replace_all(pname, 69, "[Equipa A]", "")
        replace_all(pname, 69, "(Equipa B )", "")
        replace_all(pname, 69, "(Equipa A )", "")
        replace_all(pname, 69, "[Equipa B ]", "")
        replace_all(pname, 69, "[Equipa A ]", "")
        replace_all(pname, 69, "( Equipa B)", "")
        replace_all(pname, 69, "( Equipa A)", "")
        replace_all(pname, 69, "[ Equipa B]", "")
        replace_all(pname, 69, "[ Equipa A]", "")
        replace_all(pname, 69, "( Equipa B )", "")
        replace_all(pname, 69, "( Equipa A )", "")
        replace_all(pname, 69, "[ Equipa B ]", "")
        replace_all(pname, 69, "[ Equipa A ]", "")
        replace_all(pname, 69, "{Equipa-B}", "")
        replace_all(pname, 69, "{Equipa-A}", "")
        replace_all(pname, 69, "{Equipa-B }", "")
        replace_all(pname, 69, "{Equipa-A }", "")
        replace_all(pname, 69, "{ Equipa-B}", "")
        replace_all(pname, 69, "{ Equipa-A}", "")
        replace_all(pname, 69, "{ Equipa-B }", "")
        replace_all(pname, 69, "{ Equipa-A }", "")
        trim(pname)
        return pname
}

public SwitchTeams() {
        new supportvariable
       
        supportvariable = g_iScore[0]
        g_iScore[0] = g_iScore[1]
        g_iScore[1] = supportvariable
       
        new players[32], pnum, tempid;
        get_players(players, pnum, "ch");
       
        for( new i; i<pnum; i++ ) {
                tempid = players[i];
                switch( cs_get_user_team(tempid) ) {
                        case CS_TEAM_T: cs_set_user_team(tempid, CS_TEAM_CT)
                                default: cs_set_user_team(tempid, CS_TEAM_T)
                }
        }
       
        g_bSecondHalf = true
        return PLUGIN_HANDLED
}

public KnifeSwitch(WinningTeam) {
        new players[32], pnum;
       
        switch ( WinningTeam ) {
                case T_WIN: get_players(players, pnum, "che", "TERRORIST")
                        case CT_WIN: get_players(players, pnum, "che", "CT")
                }
       
        g_switchmenu = menu_create("[Route-Games Auto-Mix] Tu queres mudar as equipas?", "handleSwitch")
        menu_additem(g_switchmenu, "Ficar", "0", 0)
        menu_additem(g_switchmenu, "Trocar", "1", 0)
        for ( new i ; i < pnum ; i++ )
                menu_display(players[i], g_switchmenu)
        new intParam[1]
        new taskId = scanForTaskID()
        intParam[0] = WinningTeam
        set_task(8.0, "declareSwitch", taskId, intParam, 1)
}

public handleSwitch(id, menu, item) {
        if( item == MENU_EXIT ) {
                menu_display(id, g_switchmenu)
                return PLUGIN_HANDLED;
        }
       
        new data[6], szName[64];
        new access, callback;
        menu_item_getinfo(menu, item, access, data,charsmax(data), szName,charsmax(szName), callback);
        g_switchVotes[str_to_num(data)]++
        switch ( str_to_num(data) ) {
                case 0: client_print(id, 3, "%s Tu votaste para: Ficar.", PREFIX)
                        case 1: client_print(id, 3, "%s Tu votaste para: Trocar.", PREFIX)
                }
        return PLUGIN_CONTINUE
}

public declareSwitch(recvParam[], prevTaskId) {
        new taskId = scanForTaskID()
       
        if ( g_switchVotes[0] > g_switchVotes[1] ) {
                client_print(0, 3, "%s O Resultado da mudanca das equipas foi ---> Ficar.", PREFIX)
                g_Twon = false
                set_task(3.0, "SettingsAfter", taskId)
                return PLUGIN_HANDLED
        }
        else
                client_print(0, 3, "%s O Resultado da mudanca das equipas foi ---> Trocar.", PREFIX)
       
        g_Twon = true
       
        new playersT[32], pnumT, playersCT[32], pnumCT;
       
        get_players(playersT, pnumT, "che", "TERRORIST")
        get_players(playersCT, pnumCT, "che", "CT")
        for ( new i ; i < pnumT ; i++ )
                cs_set_user_team(playersT[i], CS_TEAM_CT)
        for ( new i ; i < pnumCT ; i++ )
                cs_set_user_team(playersCT[i], CS_TEAM_T)
        set_task(3.0, "SettingsAfter", taskId)
        return PLUGIN_CONTINUE
}


public Settings() {
        if (get_pcvar_num(cvar_KnifeRound)) {
                g_KnifeRound = true
                set_pcvar_float(cvar_mp_roundtime, 1.75)
                set_pcvar_num(cvar_mp_freezetime, 7)
                set_pcvar_float(cvar_mp_buytime, 0.1)
                client_print(0, print_chat, "%s Ronda de Faca vai comecar...", PREFIX)
                client_print(0, print_chat, "%s Ronda de Faca vai comecar...", PREFIX)
                client_print(0, print_chat, "%s Ronda de Faca vai comecar...", PREFIX)
                set_pcvar_num(cvar_sv_restart, 3)
                new taskId = scanForTaskID()
                set_task(4.0, "TSAYKnife", taskId)
        }
       
        else
        {
                g_KnifeRound = false
                server_cmd("exec pug.cfg")
                client_print(0, print_chat, "%s O jogo foi iniciado...", PREFIX)
                client_print(0, print_chat, "%s O jogo foi iniciado...", PREFIX)
                client_print(0, print_chat, "%s O jogo foi iniciado...", PREFIX)
                server_cmd("sv_restart 1")
                new taskId = scanForTaskID()
                set_task(2.0, "Started", taskId)
        }
       
}

public TSAYKnife() {
        client_cmd(0, "drop")
        set_hudmessage(255, 255, 255, 0.10, 0.68, 0, 6.0, 15.0)
        ShowSyncHudMsg(0, g_MsgSync7, "Atencao! Ronda de faca ja comecou.")
}

public SettingsAfter() {
        g_KnifeRound = false
        g_bCpt = false
        server_cmd("exec pug.cfg")
        client_print(0, print_chat, "%s O jogo foi iniciado...", PREFIX)
        client_print(0, print_chat, "%s O jogo foi iniciado...", PREFIX)
        client_print(0, print_chat, "%s O jogo foi iniciado...", PREFIX)
        set_pcvar_num(cvar_sv_restart, 1)
        new taskId = scanForTaskID()
        set_task(5.0, "Started", taskId)
}

public Started() {
        if (g_bFFoff)
                set_pcvar_num(cvar_mp_friendlyfire, 0)
        else
                set_pcvar_num(cvar_mp_friendlyfire, 1)
        set_hudmessage(255, 255, 255, 0.07, 0.69, 0, 6.0, 20.0)
        ShowSyncHudMsg(0, g_MsgSync3, "A 1º ronda comecou. O jogo esta agora em live...")
        g_IsStarted = true
        g_AfterRdy = false
}


public EndMatch() {
        set_hudmessage(255, 255, 255, 0.07, 0.59, 0, 6.0, 15.0)
        ShowSyncHudMsg(0, g_MsgSync3, "O jogo acabou! (%d - %d)", g_iScore[0], g_iScore[1])
        client_printc(0, "!g%s !nO Jogo acabou! Um novo jogo sera iniciada em 10 segundos.", PREFIX)
        client_printc(0, "!g%s !nTu podes voltar a entrar no proximo jogo, basta escreveres !add novamente.", PREFIX)
        client_printc(0, "!g%s !nO Plugin sera reiniciado em 5 segundos.", PREFIX)
        g_Restart = true
        new taskId = scanForTaskID()
        set_task(5.0, "MatchIsOver", taskId)
}

public MatchIsOver()
        server_cmd("restart")

public player(id) {
        if (g_bCpt) {
                client_printc(id, "!g%s !nTu nao podes abrir agora o menu!", PREFIX)
                return PLUGIN_HANDLED
        }
       
        g_pVote = menu_create("\yMenu de jogadores \rBy Valascus :", "pmenu")
       
        if (g_IsStarted) {
                menu_additem(g_pVote, "\rMostrar Comandos", "1", 0)
                menu_additem(g_pVote, "Pronto", "2", 0)
                menu_additem(g_pVote, "Nao estou pronto", "3", 0)
        }
       
        else if (g_bIsReady[id]) {
                menu_additem(g_pVote, "\rMostrar Comandos", "1", 0)
                menu_additem(g_pVote, "Pronto", "2", 0)
                menu_additem(g_pVote, "Nao estou pronto", "3", 0)
        }
       
        else {
                menu_additem(g_pVote, "\rMostrar Comandos", "1", 0)
                menu_additem(g_pVote, "Pronto", "2", 0)
                menu_additem(g_pVote, "Nao estou pronto", "3", 0)
        }
       
        menu_additem(g_pVote, "Silenciar um jogador", "4", 0)
        menu_additem(g_pVote, "Sair do servidor", "5", 0)
        menu_additem(g_pVote, "\yCreditos", "6", 0)
        menu_display(id, g_pVote)
        return PLUGIN_CONTINUE
}

public pmenu(id, menu, item) {
        if( item == MENU_EXIT ) {
                menu_destroy(g_pVote)
                return PLUGIN_HANDLED;
        }
       
        new data[6], iName[64];
        new access, callback;
        menu_item_getinfo(menu, item, access, data,5, iName, 63, callback);
        new key = str_to_num(data)
        new playername[32]
        get_user_name(id, playername, 31)
       
        switch(key) {
                case 1: client_cmd(id, "say !cmds")
                        case 2: {
                        if (g_IsStarted || g_bIsReady[id]) {
                                client_print(id, print_chat, "%s Opcao nao esta disponivel!", PREFIX)
                                menu_display(id, g_pVote)
                                return PLUGIN_HANDLED
                        }
                       
                        else {
                                Prepare(id)
                                return PLUGIN_HANDLED
                        }
                       
                }
               
                case 3: {
                        if (g_bIsReady[id])
                        {
                                if (g_IsStarted)
                                {
                                        client_print(id, print_chat, "%s Opcao nao esta disponivel!", PREFIX)
                                        menu_display(id, g_pVote)
                                        return PLUGIN_HANDLED
                                }
                               
                                unPrepare(id)
                                return PLUGIN_HANDLED
                        }
                       
                        client_print(id, print_chat, "%s Opcao nao esta disponivel!", PREFIX)
                        menu_display(id, g_pVote)
                        return PLUGIN_HANDLED
                }
               
                case 4: {
                        display_mutemenu(id, g_menuposition[id] = 0)
                        return PLUGIN_HANDLED
                }
               
                case 5: {
                        client_cmd(id, "disconnect")
                        return PLUGIN_HANDLED
                       
                }
               
                case 6: credits(id)
                }
       
        player(id)
        return PLUGIN_HANDLED
}

public get_pug_state() {
        new file = fopen(gPug_ini_file, "r")
        fseek(file, -1, SEEK_END)
        new getchar = fgetc(file)
        fclose(file)
        return getchar - '0'
}

public set_pug_state(iState) {
        new file = fopen(gPug_ini_file, "w")
        fseek(file, -1, SEEK_END)
        fputc(file, iState + '0')
        fclose(file)
}


stock replace_it(string[], len, const what[], const with[]) {
        new pos = 0;
       
        if ((pos = contain(string, what)) == -1)
        {
                return 0;
        }
       
        new total = 0;
        new with_len = strlen(with);
        new diff = strlen(what) - with_len;
        new total_len = strlen(string);
        new temp_pos = 0;
       
        while (replace(string[pos], len - pos, what, with) != 0)
        {
                total++;
                pos += with_len;
                total_len -= diff;
               
                if (pos >= total_len)
                        break;
                temp_pos = contain(string[pos], what);
               
                if (temp_pos == -1)
                        break;
                pos += temp_pos;
        }
        return total;
}

clear_list(id) {
        for(new i = 0; i <= g_maxclients; ++i)
                g_mute[id][i] = false
}

public clcmd_say(id) {
        static say_args[10]
        read_args(say_args, 9)
        remove_quotes(say_args)
       
        if(say_args[0] == '!' && containi(say_args, "mute") != -1)
        {
                display_mutemenu(id, g_menuposition[id] = 0)
                return PLUGIN_HANDLED_MAIN
        }
        return PLUGIN_CONTINUE
}

public fwd_voice_setclientlistening(receiver, sender, listen)
{
        if(receiver == sender)
                return FMRES_IGNORED
       
        if(g_mute[receiver][sender]) {
                engfunc(EngFunc_SetClientListening, receiver, sender, 0)
                return FMRES_SUPERCEDE
        }
        return FMRES_IGNORED
}

display_mutemenu(id, pos) {
        if(pos < 0)
                return
       
        static team[11]
        get_user_team(id, team, 10)
       
        new at = get_pcvar_num(cvar_alltalk)
        get_players(g_menuplayers[id], g_playersnum[id],
        at ? "c" : "ce", at ? "" : team)
       
        new start = pos * 8
        if(start >= g_playersnum[id])
                start = pos = g_menuposition[id]
       
        new end = start + 8
        if(end > g_playersnum[id])
                end = g_playersnum[id]
       
        static menubody[512]
        new len = format(menubody, 511, "%s Mute menu:^n^n", PREFIX)
       
        static name[32]
       
        new b = 0, i
        new keys = MENU_KEY_0
       
        for(new a = start; a < end; ++a)
        {
                i = g_menuplayers[id][a]
                get_user_name(i, name, 31)
               
                if(i == id)
                {
                        ++b
                        len += format(menubody[len], 511 - len, "\d[Route-Games] \wEscolhe um jogador para calares^n")
                }
                else
                {
                        keys |= (1<<b)
                        len += format(menubody[len], 511 - len, "%s%d. %s %s^n", g_mute[id][i] ? "" : "", ++b, name, g_mute[id][i] ? "(Muted)" : "")
                }
        }
       
        if(end != g_playersnum[id])
        {
                format(menubody[len], 511 - len, "^n9. %s...^n0. %s", "Mias", pos ? "Atras" : "Sair")
                keys |= MENU_KEY_9
        }
        else
                format(menubody[len], 511-len, "^n0. %s", pos ? "Atras" : "Sair")
       
        show_menu(id, keys, menubody, -1, "mute menu")
}

public client_death(killer, victim, weapon, hitplace, TK)
{
        if(g_IsStarted && TK || g_KnifeRound && TK)
        {
                points[killer] -= get_pcvar_num(tk_points)
                client_printc(killer, "!g[Route-Games] !nPerdes-te 5 Skillpoints, por Teamkill.", tk_points)
               
                return PLUGIN_CONTINUE
        }
        if (g_IsStarted)
        {
                points[killer] += get_pcvar_num(kill_points)
                points[victim] -= get_pcvar_num(death_points)
                client_printc(victim, "!g[Route-Games] !nPerdes-te 1 Skillpoints, por morreres.", kill_points)
                client_printc(killer, "!g[Route-Games] !nGanhas-te 3 Skillpoints, por matares.", death_points)
        }
       
        if( g_IsStarted && hitplace == HIT_HEAD || g_KnifeRound && hitplace == HIT_HEAD)
        {
                points[killer] += get_pcvar_num(head_points)
                client_printc(killer, "!g[Route-Games] !nGanhas-te 4 Skillpoints, por headshot.", head_points)
        }
       
        if( g_IsStarted && weapon == CSW_KNIFE || g_KnifeRound && weapon == CSW_KNIFE)
        {
                points[killer] += get_pcvar_num(knife_points)
                client_printc(killer, "!g[Route-Games] !nGanhas-te 4 Skillpoints, por faca.", knife_points)
        }
       
        if( g_IsStarted && weapon == CSW_HEGRENADE)
        {
                points[killer] += get_pcvar_num(nade_points)
                client_printc(killer, "!g[Route-Games] !nGanhas-te 4 Skillpoints, por granada.", nade_points)
        }
       
        if( g_IsStarted && weapon == CSW_KNIFE && hitplace == HIT_HEAD || g_KnifeRound && weapon == CSW_KNIFE && hitplace == HIT_HEAD)
        {
                points[killer] += get_pcvar_num(skill_points)
                client_printc(killer, "!g[Route-Games] !nGanhas-te 4 Skillpoints, por faca e headshot.", nade_points)
        }
       
       
        return PLUGIN_CONTINUE;
}
public bomb_explode(planter)
{
        if ( g_IsStarted || g_KnifeRound )
        {
                points[planter] += get_pcvar_num(boom_points)
                client_printc(planter, "!g[Route-Games] !nGanhas-te 4 Skillpoints, por plantar a bomba.", boom_points)
        }
}
public bomb_defused(defuser)
{
        if ( g_IsStarted || g_KnifeRound )
        {
                points[defuser] += get_pcvar_num(def_points)
                client_printc(defuser, "!g[Route-Games] !nGanhas-te 4 Skillpoints, por defusar a bomba.", head_points)
                g_KillsAce[defuser] -= 3
        }
}
public stats_custom_compare(elem1[],elem2[])
{
        if(elem1[1] > elem2[1]) return -1;
        else if(elem1[1] < elem2[1]) return 1;
               
        return 0;
}
public advertise(id)
{
        client_printc(id, "!g[Route-Games] !nBem-Vindo! Tu tens %d skillpoints!", points[id])
}

stock Team_Info(id, type, team[])
{
        message_begin(type, TeamInfo, _, id);
        write_byte(id);
        write_string(team);
        message_end();
        return 1;
}
stock FindPlayer()
{
        new i = -1;
        while(i <= MaxSlots)
        {
                if(IsConnected[++i])
                {
                        return i;
                }
        }
        return -1;
}

stock points_in_name(id)
{
        new szName[32]
        get_user_name(id, szName, charsmax(szName))
        new iLen = strlen(szName)
       
        /* Finds and removes "<####>" */
        new iPos = iLen - 1
        if( szName[iPos] == '>' )
        {
                for( new i = 1; i < 6; i++)
                {
                        if( szName[iPos - i] == '<' )
                        {
                                iLen = iPos - i
                                szName[iLen] = '^0'
                                break
                        }
                }
        }
       
        format(szName[iLen], charsmax(szName) - iLen, szName[iLen-1] == ' ' ? "<%d>" : " <%d>", points[id])
        set_user_info(id, "name", szName)
}



public action_mutemenu(id, key)
{
        switch(key)
        {
                case 8: display_mutemenu(id, ++g_menuposition[id])
                case 9: display_mutemenu(id, --g_menuposition[id])
                default:
                {
                        new player = g_menuplayers[id][g_menuposition[id] * 8 + key]
               
                        g_mute[id][player] = g_mute[id][player] ? false : true
                        display_mutemenu(id, g_menuposition[id])
               
                        static name[32]
                        get_user_name(player, name, 31)
                        client_print(id, print_chat, "tu %s Silenciaste %s", g_mute[id][player] ? "" : "un", name)
                }
        }
        return PLUGIN_HANDLED
}

public checkPlayers() {
        if (!g_IsStarted) return PLUGIN_HANDLED
       
        for (new i = 1; i <= get_maxplayers(); i++) {
                if (is_user_alive(i) && is_user_connected(i) && !is_user_bot(i) && !is_user_hltv(i) && g_spawned[i]) {
                        new newangle[3]
                        get_user_origin(i, newangle)
                       
                        if ( newangle[0] == g_oldangles[i][0] && newangle[1] == g_oldangles[i][1] && newangle[2] == g_oldangles[i][2] ) {
                                g_afktime[i] += CHECK_FREQ
                                check_afktime(i)
                                } else {
                                g_oldangles[i][0] = newangle[0]
                                g_oldangles[i][1] = newangle[1]
                                g_oldangles[i][2] = newangle[2]
                                g_afktime[i] = 0
                        }
                }
        }
        return PLUGIN_HANDLED
}

check_afktime(id) {
        new numplayers = get_playersnum()
        new minplayers = get_cvar_num("mp_afkminplayers")
       
        if (numplayers >= minplayers) {
                new maxafktime = get_cvar_num("mp_afktime")
                if (maxafktime < MIN_AFK_TIME) {
                        log_amx("cvar mp_afktime %i e demasiado baixo. O valor minimo e %i.", maxafktime, MIN_AFK_TIME)
                        maxafktime = MIN_AFK_TIME
                        set_cvar_num("mp_afktime", MIN_AFK_TIME)
                }
               
                if ( maxafktime-WARNING_TIME <= g_afktime[id] < maxafktime) {
                        new timeleft = maxafktime - g_afktime[id]
                        client_print(id, print_chat, "%s Tu tens %i segundos para mover ou tu vais ser expulso por estar AFK", PREFIX, timeleft)
                        } else if (g_afktime[id] > maxafktime) {
                        new name[32]
                        get_user_name(id, name, 31)
                        client_print(0, print_chat, "%s %s foi expulso por estar AFK mais de %i segundos", PREFIX, name, maxafktime)
                        log_amx("%s foi expulso por estar AFK mais de %i segundos", name, maxafktime)
                        server_cmd("kick #%d ^"%s Tu foste expulso por estar AFK mais de %i segundos^"", get_user_userid(id), PREFIX, maxafktime)
                }
        }
}

public playerSpawned(id) {
        g_spawned[id] = false
        new sid[1]
        sid[0] = id
        set_task(0.75, "delayedSpawn",_, sid, 1) // Give the player time to drop to the floor when spawning
        return PLUGIN_HANDLED
}

public delayedSpawn(sid[]) {
        get_user_origin(sid[0], g_oldangles[sid[0]])
        g_spawned[sid[0]] = true
        return PLUGIN_HANDLED
}
public CmdMsg(id)
{
        new message[200]
        get_pcvar_string(g_CvarMsg, message, charsmax(message))
        new Text1[192]
       
        formatex(Text1,191,"%s", message)
       
        MakeTutor(id,Text1,YELLOW,15.0)
       
}
public CmdMsg2(id)
{
        new message[200]
        get_pcvar_string(g_CvarMsg2, message, charsmax(message))
        new Text2[192]
       
        formatex(Text2,191,"%s", message)
       
        MakeTutor(id,Text2,YELLOW,15.0)
       
}
MakeTutor(id,Text[],Color,Float:Time = 0.0) {
       
        message_begin(MSG_ALL,g_MsgTutor,_,id)
        write_string(Text)
        write_byte(0)
        write_short(0)
        write_short(0)
        write_short(1<<Color)
        message_end()
       
        if(Time != 0.0) {
               
                set_task(Time,"RemoveTutor",id + TASK_TUT)
        }
}
MsgWelcome(id,Text[],Color,Float:Time = 0.0) {
       
        message_begin(MSG_ONE_UNRELIABLE,g_MsgTutor,_,id)
        write_string(Text)
        write_byte(0)
        write_short(0)
        write_short(0)
        write_short(1<<Color)
        message_end()
       
        if(Time != 0.0) {
               
                set_task(Time,"RemoveTutor",id + TASK_TUT)
        }
}
public RemoveTutor(taskID) {
       
        new id = taskID - TASK_TUT
       
       
        message_begin(MSG_ALL,g_MsgTutClose,_,id)
        message_end()
}
scanForTaskID()
{
        for ( new i = 1337 ; i < 1337*2 ; i++ )
        {
                if ( !task_exists(i) ) return i
        }
       
        log_amx("Auto-Mix Task ID Error! Couldn't find a TASK ID!")
        return 0
}

removeAllTasks()
{
        for ( new i = 1337 ; i < 1337*2 ; i++ )
        {
                if ( task_exists(i) ) remove_task(i)
        }
}

/*============================================================
=== Color Chat Include ===
============================================================*/

/* ColorChat Support */
#define NORMAL DontChange
#define GREEN DontChange
#define TEAM_COLOR DontChange
#define RED Red
#define BLUE Blue
#define GREY Grey
#define ColorChat client_print_color
/* ColorChat Support */

enum _:Colors {
        DontChange,
        Red,
        Blue,
        Grey
}

stock const g_g_szTeamName[Colors][] =
{
"UNASSIGNED",
"TERRORIST",
"CT",
"SPECTATOR"
}

stock client_print_color(id, iColor=DontChange, const szMsg[], any:...)
{
// check if id is different from 0
if( id && !is_user_connected(id) )
{
        return 0;
}

if( iColor > Grey )
{
        iColor = DontChange;
}

new szMessage[192];
if( iColor == DontChange )
{
        szMessage[0] = 0x04;
}
else
{
        szMessage[0] = 0x03;
}

new iParams = numargs();
// Specific player code
if(id)
{
        if( iParams == 3 )
        {
                copy(szMessage[1], charsmax(szMessage)-1, szMsg);
        }
        else
        {
                vformat(szMessage[1], charsmax(szMessage)-1, szMsg, 4);
        }
       
        if( iColor )
        {
                new szTeam[11]; // store current team so we can restore it
                get_user_team(id, szTeam, charsmax(szTeam));
               
                // set id TeamInfo in consequence
                // so SayText msg gonna show the right color
                Send_TeamInfo(id, id, g_g_szTeamName[iColor]);
               
                // Send the message
                Send_SayText(id, id, szMessage);
               
                // restore TeamInfo
                Send_TeamInfo(id, id, szTeam);
        }
        else
        {
                Send_SayText(id, id, szMessage);
        }
}

// Send message to all players
else
{
        // Figure out if at least 1 player is connected
        // so we don't send useless message if not
        // and we gonna use that player as team reference (aka SayText message sender) for color change
        new iPlayers[32], iNum;
        get_players(iPlayers, iNum, "ch");
        if( !iNum )
        {
                return 0;
        }
       
        new iFool = iPlayers[0];
       
        new iMlNumber, i, j;
        new Array:aStoreML = ArrayCreate();
        if( iParams >= 5 ) // ML can be used
        {
                for(j=4; j<iParams; j++)
                {
                        // retrieve original param value and check if it's LANG_PLAYER value
                        if( getarg(j) == LANG_PLAYER )
                        {
                                i=0;
                                // as LANG_PLAYER == -1, check if next parm string is a registered language translation
                                while( ( szMessage[ i ] = getarg( j + 1, i++ ) ) ) {}
                                if( GetLangTransKey(szMessage) != TransKey_Bad )
                                {
                                        // Store that arg as LANG_PLAYER so we can alter it later
                                        ArrayPushCell(aStoreML, j++);
                                       
                                        // Update ML array saire so we'll know 1st if ML is used,
                                        // 2nd how many args we have to alterate
                                        iMlNumber++;
                                }
                        }
                }
        }
       
        // If arraysize == 0, ML is not used
        // we can only send 1 MSG_BROADCAST message
        if( !iMlNumber )
        {
                if( iParams == 3 )
                {
                        copy(szMessage[1], charsmax(szMessage)-1, szMsg);
                }
                else
                {
                        vformat(szMessage[1], charsmax(szMessage)-1, szMsg, 4);
                }
               
                if( iColor )
                {
                        new szTeam[11];
                        get_user_team(iFool, szTeam, charsmax(szTeam));
                        Send_TeamInfo(0, iFool, g_g_szTeamName[iColor]);
                        Send_SayText(0, iFool, szMessage);
                        Send_TeamInfo(0, iFool, szTeam);
                }
                else
                {
                        Send_SayText(0, iFool, szMessage);
                }
        }
       
        // ML is used, we need to loop through all players,
        // format text and send a MSG_ONE_UNRELIABLE SayText message
        else
        {
                new szTeam[11], szFakeTeam[10];
               
                if( iColor )
                {
                        get_user_team(iFool, szTeam, charsmax(szTeam));
                        copy(szFakeTeam, charsmax(szFakeTeam), g_g_szTeamName[iColor]);
                }
               
                for( i = 0; i < iNum; i++ )
                {
                        id = iPlayers[i];
                       
                        for(j=0; j<iMlNumber; j++)
                        {
                                // Set all LANG_PLAYER args to player index ( = id )
                                // so we can format the text for that specific player
                                setarg(ArrayGetCell(aStoreML, j), _, id);
                        }
                       
                        // format string for specific player
                        vformat(szMessage[1], charsmax(szMessage)-1, szMsg, 4);
                       
                        if( iColor )
                        {
                                Send_TeamInfo(id, iFool, szFakeTeam);
                                Send_SayText(id, iFool, szMessage);
                                Send_TeamInfo(id, iFool, szTeam);
                        }
                        else
                        {
                                Send_SayText(id, iFool, szMessage);
                        }
                }
                ArrayDestroy(aStoreML);
        }
}
return 1;
}

stock Send_TeamInfo(iReceiver, iPlayerId, szTeam[])
{
static g_iTeamInfo = 0;
if( !g_iTeamInfo )
{
        g_iTeamInfo = get_user_msgid("TeamInfo");
}
message_begin(iReceiver ? MSG_ONE_UNRELIABLE : MSG_BROADCAST, g_iTeamInfo, .player=iReceiver);
write_byte(iPlayerId);
write_string(szTeam);
message_end();
}

stock Send_SayText(iReceiver, iPlayerId, szMessage[])
{
static iSayText = 0;
if( !iSayText )
{
        iSayText = get_user_msgid("SayText");
}
message_begin(iReceiver ? MSG_ONE_UNRELIABLE : MSG_BROADCAST, iSayText, .player=iReceiver);
write_byte(iPlayerId);
write_string(szMessage);
message_end();
}
stock client_printc(const id, const input[], any:...)
{
new count = 1, players[32];
static msg[191];
vformat(msg, 190, input, 3);

replace_all(msg, 190, "!g", "^x04"); // Green Color
replace_all(msg, 190, "!n", "^x01"); // Default Color
replace_all(msg, 190, "!t", "^x03"); // Team Color

if (id) players[0] = id; else get_players(players, count, "ch");
{
for (new i = 0; i < count; i++)
{
        if (is_user_connected(players[i]))
        {
                message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("SayText"), _, players[i]);
                write_byte(players[i]);
                write_string(msg);
                message_end();
        }
}
}
}



All times are GMT -4. The time now is 00:27.

Powered by vBulletin®
Copyright ©2000 - 2024, vBulletin Solutions, Inc.