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();
}
}
}
}