#include <amxmodx>
#include <fakemeta>
#include <fun>
#define VERSION "0.3"
new g_firstleader, g_secondleader, g_thirdleader, g_winner
new g_votemap, g_leaderfrags
new g_connected
const MaxPlayers = 32;
new g_playername[MaxPlayers+1][32]
new cvar_maxfrags, cvar_enable, cvar_lastfrags, cvar_winnertime, cvar_steal
#define is_player_connected(%0) (g_connected & (1 << %0-1))
enum (+= 111)
{
TASK_SHOWFRAGS = 987,
TASK_SHOWLEADER
}
public plugin_init()
{
register_plugin("Win by Frags", VERSION, "Mario AR.")
register_event("DeathMsg", "RegisterDeath", "a")
cvar_maxfrags = register_cvar("wbf_max_frags", "50");
cvar_enable = register_cvar("wbf_enable", "1");
cvar_winnertime = register_cvar("wbf_winner_time", "10");
cvar_lastfrags = register_cvar("wbf_frags_left_to_vote", "10");
cvar_steal = register_cvar("wbf_knife_steal", "1");
set_task(3.0, "StartTasks");
}
public plugin_precache()
{
precache_sound("gungame/gg_brass_bell.wav");
precache_sound("wbf/box_ring.wav");
}
public client_putinserver(id)
{
if(!get_pcvar_num(cvar_enable))
return;
get_user_name(id, g_playername[id], 31);
g_connected |= (1 << id-1)
if(!is_user_bot(id))
{
set_task(3.0, "ShowFrags", id + TASK_SHOWFRAGS);
set_task(3.0, "ShowTheLeader", id + TASK_SHOWLEADER);
}
}
public client_disconnect(id)
{
if(!get_pcvar_num(cvar_enable))
return;
if(task_exists(id + TASK_SHOWLEADER))
remove_task(id + TASK_SHOWLEADER);
if(task_exists(id + TASK_SHOWFRAGS))
remove_task(id + TASK_SHOWFRAGS);
g_connected &= ~(1 << id-1)
}
public StartTasks()
{
if(!get_pcvar_num(cvar_enable))
return;
set_cvar_num("mp_timelimit", 0);
GetTheLeader();
}
public ShowFrags(id)
{
id -= TASK_SHOWFRAGS
if(!is_player_connected(id))
return;
static Frags
Frags = get_user_frags(id);
if(!g_winner)
{
set_hudmessage(255, 255, 255, -1.0, 0.84, 0, 0.0, 1.1, 0.0, 0.0, 4);
show_hudmessage(id, "Tienes %i frags.^nNecesitas %i mas para ganar.", Frags, get_pcvar_num(cvar_maxfrags) - Frags);
}
else if(g_winner != id)
{
set_hudmessage(255, 255, 255, -1.0, 0.43, 0, 0.0, 1.1, 0.0, 0.0, 3);
show_hudmessage(id, "El ganador es %s!^nSu ultima victima fue %s^nFelicitaciones, %s!^n^nTe faltaron %d frags para ganar.^nMas suerte la proxima vez!^n^nCambio de mapa en %d segundos.",
g_playername[g_winner], g_playername[g_secondleader], g_playername[g_winner], get_pcvar_num(cvar_maxfrags) - Frags, g_firstleader);
}
else
{
set_hudmessage(255, 255, 255, -1.0, 0.46, 0, 0.0, 1.1, 0.0, 0.0, 3);
show_hudmessage(id, "Has Ganado!^nFuiste el primero en llegar a los %d frags.^nFelicitaciones, %s!^n^nTu ultima victima fue %s^n^nCambio de mapa en %d segundos.",
Frags, g_playername[g_winner], g_playername[g_secondleader], g_firstleader);
}
set_task(1.0, "ShowFrags", id + TASK_SHOWFRAGS);
}
public GetTheLeader()
{
if(g_winner)
return;
if(!g_votemap && get_pcvar_num(cvar_maxfrags) - g_leaderfrags <= get_pcvar_num(cvar_lastfrags))
{
g_votemap = true
VoteForMap();
}
static frags[33], i
g_leaderfrags = -99 // BUGFIX
g_secondleader = g_thirdleader = 0
for(i = 1; i <= MaxPlayers; i++)
{
if(!is_player_connected(i)) continue;
frags[i] = get_user_frags(i)
if(frags[i] > g_leaderfrags)
{
g_firstleader = i
g_leaderfrags = frags[i];
}
}
for(i = 1; i < MaxPlayers; i++)
{
if(!is_player_connected(i) || i == g_firstleader) continue;
if(frags[i] == g_leaderfrags)
{
if(!g_secondleader)
g_secondleader = i
else if(!g_thirdleader)
{
g_thirdleader = i
break;
}
}
}
set_task(0.2, "GetTheLeader");
}
public ShowTheLeader(id)
{
id -= TASK_SHOWLEADER
if(!is_player_connected(id))
return;
set_hudmessage(255, 255, 255, -1.0, 0.12, 0, 0.0, 1.1, 0.0, 0.0, 3);
static frags; frags = get_user_frags(id);
if(!g_secondleader)
{
if(g_firstleader == id)
show_hudmessage(id, "Eres el unico lider.");
else
show_hudmessage(id, "Lider: %s con %d frags.^nEstas a %i frags de alcanzarlo.", g_playername[g_firstleader], g_leaderfrags, g_leaderfrags - frags);
}
else if(!g_thirdleader)
{
if(frags == g_leaderfrags)
show_hudmessage(id, "Eres el lider y compartes el titulo con:^n%s", g_playername[(id == g_firstleader) ? g_secondleader : g_firstleader]);
else
show_hudmessage(id, "Lideres: %s y %s con %d frags.^nEstas a %d frags de alcanzarlos.", g_playername[g_firstleader], g_playername[g_secondleader], g_leaderfrags, g_leaderfrags - frags);
}
else
{
if(frags == g_leaderfrags)
{
if(id == g_firstleader)
show_hudmessage(id, "Eres el lider y compartes el titulo con:^n%s y %s", g_playername[g_secondleader], g_playername[g_thirdleader]);
else if(id == g_secondleader)
show_hudmessage(id, "Eres el lider y compartes el titulo con:^n%s y %s", g_playername[g_firstleader], g_playername[g_thirdleader]);
else
show_hudmessage(id, "Eres el lider y compartes el titulo con:^n%s y %s", g_playername[g_firstleader], g_playername[g_secondleader]);
}
else
show_hudmessage(id, "Lideres: %s, %s y %s con %d frags.^nEstas a %d frags de alcanzarlos.", g_playername[g_firstleader], g_playername[g_secondleader], g_playername[g_thirdleader], g_leaderfrags, g_leaderfrags - frags);
}
if(!g_winner)
set_task(1.0, "ShowTheLeader", id + TASK_SHOWLEADER);
}
public RegisterDeath()
{
if(!get_pcvar_num(cvar_enable) || g_winner)
return;
static id, vic
id = read_data(1);
vic = read_data(2);
if(id == vic)
{
client_print(id, print_chat, "Pierdes un frag por suicidio.");
return;
}
static weapon[3], steal, frags;
read_data(4, weapon, 2);
steal = get_pcvar_num(cvar_steal)
frags = get_user_frags(id)
if(steal && weapon[0] == 'k')
{
set_user_frags(id, frags + steal - 1);
set_user_frags(vic, get_user_frags(vic) - steal);
client_print(id, print_chat, "Robaste %i frag%s de %s por acuchillarlo.", steal, steal == 1 ? "" : "s", g_playername[vic]);
client_print(vic, print_chat, "%s te robo %i frag%s por acuchillarte.", g_playername[id], steal, steal == 1 ? "" : "s");
}
if(!g_winner && frags + 1 >= get_pcvar_num(cvar_maxfrags))
{
g_winner = id;
// We'll use these variables so we don't need to create new ones
g_firstleader = get_pcvar_num(cvar_winnertime)
g_secondleader = vic
client_cmd(0, "spk wbf/box_ring.wav");
for(id = 1; id <= MaxPlayers; id++)
{
if(!is_player_connected(id)) continue;
set_user_godmode(id,1);
set_pev(id, pev_flags, pev(id,pev_flags) | FL_FROZEN);
set_pev(id, pev_viewmodel2, "");
}
PrepareToChangeMap()
}
}
public PrepareToChangeMap()
{
g_firstleader--
if(!g_firstleader)
{
new NextMap[65]
get_cvar_string("amx_nextmap", NextMap, 64);
server_cmd("changelevel %s", NextMap);
}
else
set_task(1.0, "PrepareToChangeMap")
}
//Code from GunGame, made by Avalanche.
stock VoteForMap()
{
if(find_plugin_byfile("mapchooser.amxx") == INVALID_PLUGIN_ID)
return;
new oldWinLimit = get_cvar_num("mp_winlimit"), oldMaxRounds = get_cvar_num("mp_maxrounds");
set_cvar_num("mp_winlimit",0);
set_cvar_num("mp_maxrounds",-1);
client_cmd(0, "spk gungame/gg_brass_bell.wav");
if(callfunc_begin("voteNextmap","mapchooser.amxx") == 1)
callfunc_end();
set_cvar_num("mp_winlimit",oldWinLimit);
set_cvar_num("mp_maxrounds",oldMaxRounds);
}