")
if(get_pcvar_num(PcvarType) == 1)
{
iLen += format(MotdMsg[iLen], MOTDLEN2 - iLen, "%2s %-22.22s %10s %10s %10s %10s^n^n", "#", lNick, lScore, lWins, lKills, lDeaths)
for (new i = 0; i < iMax; i++)
{
new CheckName[32]
copy(CheckName, charsmax(CheckName), Stats[i][NAME])
replace_all(CheckName, charsmax(CheckName), "<", "[")
replace_all(CheckName, charsmax(CheckName), ">", "]")
iLen += format(MotdMsg[iLen], MOTDLEN2 - iLen, "%2d %-22.22s %10d %10d %10d %10d^n", i + 1, CheckName, Stats[i][SCORE], Stats[i][WINS], Stats[i][KILLS], Stats[i][DEATHS])
}
}
else
{
iLen += format(MotdMsg[iLen], MOTDLEN2 - iLen, "%2s %-22.22s %10s %10s %10s %10s^n", "#", lNick, lWins, lScore, lKills, lDeaths)
for (new i = 0; i < iMax; i++)
{
new CheckName[32]
copy(CheckName, charsmax(CheckName), Stats[i][NAME])
replace_all(CheckName, charsmax(CheckName), "<", "[")
replace_all(CheckName, charsmax(CheckName), ">", "]")
iLen += format(MotdMsg[iLen], MOTDLEN2 - iLen, "%2s %-22.22s %10s %10s %10s %10s^n^n", i + 1, CheckName, Stats[i][WINS], Stats[i][SCORE], Stats[i][KILLS], Stats[i][DEATHS])
}
}
iLen += format(MotdMsg[iLen], MOTDLEN2 - iLen, "^n^n^n%s v%s by %s", PLUGIN, VERSION, AUTHOR)
show_motd(id, MotdMsg, "FL TOP 15")
return PLUGIN_CONTINUE
}
public CmdRank(id)
{
new sname[32], sip[32], ssteamid[34]
get_user_name(id, sname, charsmax(sname))
get_user_ip(id, sip, charsmax(sip), 1)
get_user_authid(id, ssteamid, charsmax(ssteamid))
new RankPos = fl_find_stats_pos(sname, sip, ssteamid)
if(RankPos < 0)
{
color_print(id, "%L", id, "FL_NO_RANK")
return PLUGIN_CONTINUE
}
else if(!Stats[RankPos][RANKED])
{
color_print(id, "%L", id, "FL_NO_RANK")
return PLUGIN_CONTINUE
}
else if(get_pcvar_num(PcvarType) == 1)
{
color_print(id, "%L", id, "FL_RANK_1", RankPos + 1, StatNum, Stats[RankPos][SCORE], Stats[RankPos][WINS])
}
else
{
color_print(id, "%L", id, "FL_RANK_2", RankPos + 1, StatNum, Stats[RankPos][WINS], Stats[RankPos][SCORE])
}
return PLUGIN_CONTINUE
}
public CmdRankStats(id)
{
new sname[32], sip[32], ssteamid[34]
get_user_name(id, sname, charsmax(sname))
get_user_ip(id, sip, charsmax(sip), 1)
get_user_authid(id, ssteamid, charsmax(ssteamid))
new RankPos = fl_find_stats_pos(sname, sip, ssteamid)
if(RankPos < 0)
{
color_print(id, "%L", id, "FL_NO_RANK")
return PLUGIN_CONTINUE
}
else if(!Stats[RankPos][RANKED])
{
color_print(id, "%L", id, "FL_NO_RANK")
return PLUGIN_CONTINUE
}
new iLen
new lNick[32], lIp[32], lSteamid[32], lWins[32], lScore[32], lKills[32], lDeaths[32]
format(lNick, charsmax(lNick), "%L", id, "FL_NICK")
format(lWins, charsmax(lWins), "%L", id, "FL_WINS")
format(lIp, charsmax(lIp), "%L", id, "FL_IP")
format(lSteamid, charsmax(lSteamid), "%L", id, "FL_STEAMID")
format(lScore, charsmax(lScore), "%L", id, "FL_SCORE")
format(lKills, charsmax(lKills), "%L", id, "FL_KILLS")
format(lDeaths, charsmax(lDeaths), "%L", id, "FL_DEATHS")
new MotdMsg[MOTDLEN]
iLen = format(MotdMsg, MOTDLEN2, "")
iLen += format(MotdMsg[iLen], MOTDLEN2 - iLen, "%L^n^n", id, "FL_RANK_IS", RankPos + 1, StatNum)
new CheckName[32]
copy(CheckName, charsmax(CheckName), Stats[RankPos][NAME])
replace_all(CheckName, charsmax(CheckName), "<", "[")
replace_all(CheckName, charsmax(CheckName), ">", "]")
if(get_pcvar_num(PcvarType) == 1)
{
iLen += format(MotdMsg[iLen], MOTDLEN2 - iLen, "%6s: %s^n%6s: %s^n%6s: %s^n%6s: %d^n%6s: %d^n%6s: %d^n%6s: %d", lNick, CheckName, lIp, Stats[RankPos][IP], lSteamid, Stats[RankPos][STEAMID], lScore, Stats[RankPos][SCORE], lWins, Stats[RankPos][WINS], lKills, Stats[RankPos][KILLS], lDeaths, Stats[RankPos][DEATHS])
}
else
{
iLen += format(MotdMsg[iLen], MOTDLEN2 - iLen, "%6s: %s^n%6s: %s^n%6s: %s^n%6s: %d^n%6s: %d^n%6s: %d^n%6s: %d", lNick, CheckName, lIp, Stats[RankPos][IP], lSteamid, Stats[RankPos][STEAMID], lScore, Stats[RankPos][WINS], lWins, Stats[RankPos][SCORE], lKills, Stats[RankPos][KILLS], lDeaths, Stats[RankPos][DEATHS])
}
iLen += format(MotdMsg[iLen], MOTDLEN2 - iLen, "^n^n^n%s v%s by %s", PLUGIN, VERSION, AUTHOR)
show_motd(id, MotdMsg, "FL Rank Stats")
return PLUGIN_CONTINUE
}
public PlayerDeath()
{
if(!get_pcvar_num(PcvarEnable) || Winner)
{
return PLUGIN_HANDLED
}
new Frags, Killername[32]
new Killer = read_data(1)
new Victim = read_data(2)
new Headshot = read_data(3)
if(Killer == Victim || !is_valid_player(Killer) || !is_valid_player(Victim))
{
return PLUGIN_CONTINUE
}
if(cs_get_user_team(Killer) == cs_get_user_team(Victim) && !get_pcvar_num(PcvarFfa))
{
Temp[Killer][TEMP_KILLS]--
}
else
{
Temp[Killer][TEMP_KILLS]++
Temp[Victim][TEMP_DEATHS]++
if(Headshot)
{
Temp[Killer][TEMP_HS]++
}
}
get_user_name(Killer, Killername, charsmax(Killername))
Frags = get_user_frags(Killer) + 1
new FragsLeft = get_pcvar_num(PcvarLimit) - Frags
if(FragsLeft == 3)
{
set_hudmessage(255, 0, 0, 0.02, 0.5, 2, 0.1, 1.0, 0.025, 1.0, 2)
ShowSyncHudMsg(0, gMsgHud2, "%L", LANG_PLAYER, "FL_3_LEFT", Killername)
client_cmd(0,"spk misc/3frags")
}
else if(FragsLeft == 2)
{
set_hudmessage(255, 255, 0, 0.02, 0.5, 2, 0.1, 1.0, 0.025, 1.0, 2)
ShowSyncHudMsg(0, gMsgHud2, "%L", LANG_PLAYER, "FL_2_LEFT", Killername)
client_cmd(0,"spk misc/2frags")
}
else if(FragsLeft == 1)
{
set_hudmessage(0, 255, 0, 0.02, 0.5, 2, 0.1, 1.0, 0.025, 1.0, 2)
ShowSyncHudMsg(0, gMsgHud2, "%L", LANG_PLAYER, "FL_1_LEFT", Killername)
client_cmd(0,"spk misc/1frag")
}
else if(Frags >= get_pcvar_num(PcvarLimit) && !Winner)
{
Win(Killer, Victim)
return PLUGIN_CONTINUE
}
return PLUGIN_CONTINUE
}
public Win(winner, loser) // Thanks to Avalanche for some win and winmotd codes
{
Winner = true
Winnerid = winner
get_user_name(winner, WinnerName, charsmax(WinnerName))
new sip[32], ssteamid[34]
get_user_ip(winner, sip, charsmax(sip), 1)
get_user_authid(winner, ssteamid, charsmax(ssteamid))
for(new id = 1; id <= get_maxplayers(); id++)
{
if(is_user_connected(id))
{
SaveTemp(id)
}
}
new winnerstatsid = fl_find_stats_pos(WinnerName, sip, ssteamid)
Stats[winnerstatsid][WINS] += 1
if(get_pcvar_num(PcvarMusic))
{
client_cmd(0, "stopsound;speak null;mp3 stop;mp3volume 0.5;mp3 play %s", Music[random_num(0, MCOUNT-1)])
}
new Float:chattime = get_cvar_float("mp_chattime")
set_task(floatmax(chattime, 10.0), "GoNextmap")
message_begin(MSG_ALL, SVC_FINALE)
write_string("")
message_end()
color_print(0, "%L", LANG_PLAYER, "FL_WINNER", WinnerName)
color_print(0, "%L", LANG_PLAYER, "FL_WINNER", WinnerName)
color_print(0, "%L", LANG_PLAYER, "FL_WINNER", WinnerName)
color_print(0, "%L", LANG_PLAYER, "FL_WINNER", WinnerName)
color_print(0, "%L", LANG_PLAYER, "FL_WINNER", WinnerName)
new params[2]
params[0] = winner
params[1] = loser
if(get_pcvar_num(PcvarMotd))
{
set_task(1.0, "ShowWinMotd",_, params, 2)
}
return PLUGIN_CONTINUE
}
public ShowWinMotd(params[2])
{
new winner = params[0]
new loser = params[1]
new losername[32], cnextmap[32], wip[32], wsteamid[34]
get_user_ip(winner, wip, charsmax(wip), 1)
get_user_authid(winner, wsteamid, charsmax(wsteamid))
new winnerpos = fl_find_stats_pos(WinnerName, wip, wsteamid)
get_cvar_string("amx_nextmap", cnextmap, charsmax(cnextmap))
get_user_name(loser, losername, charsmax(losername))
for(new id; id <= get_maxplayers(); id++)
{
if(!is_user_connected(id))
{
continue
}
new MotdMsg[MOTDLEN], iLen, sname[32], sip[32], ssteamid[34]
get_user_name(id, sname, charsmax(sname))
get_user_ip(id, sip, charsmax(sip), 1)
get_user_authid(id, ssteamid, charsmax(ssteamid))
new sid = fl_find_stats_pos(sname, sip, ssteamid)
iLen = format(MotdMsg, MOTDLEN2, "Fraglimit Advanced")
iLen += format(MotdMsg[iLen], MOTDLEN2 - iLen, "")
iLen += format(MotdMsg[iLen], MOTDLEN2 - iLen, "")
if(cs_get_user_team(winner) == CS_TEAM_T)
{
iLen += format(MotdMsg[iLen], MOTDLEN2 - iLen, "%L", id, "FL_LINE_1", WinnerName)
}
else if(cs_get_user_team(winner) == CS_TEAM_CT)
{
iLen += format(MotdMsg[iLen], MOTDLEN2 - iLen, "%L", id, "FL_LINE_1", WinnerName)
}
else
{
iLen += format(MotdMsg[iLen], MOTDLEN2 - iLen, "%L", id, "FL_LINE_1", WinnerName)
}
iLen += format(MotdMsg[iLen], MOTDLEN2 - iLen, "")
iLen += format(MotdMsg[iLen], MOTDLEN2 - iLen, "
%L
", id, "FL_LINE_2", WinnerName, get_pcvar_num(PcvarLimit))
iLen += format(MotdMsg[iLen], MOTDLEN2 - iLen, "%L
", id, "FL_LINE_3", Stats[winnerpos][TEMPSCORE], Stats[winnerpos][SCORE], Stats[winnerpos][WINS])
iLen += format(MotdMsg[iLen], MOTDLEN2 - iLen, "%L
", id, "FL_LINE_4", losername)
if(sid >= 0 && id != winner)
{
iLen += format(MotdMsg[iLen], MOTDLEN2 - iLen, "%L
", id, "FL_LINE_5", Stats[sid][TEMPSCORE], Stats[sid][SCORE], Stats[sid][WINS])
}
iLen += format(MotdMsg[iLen], MOTDLEN2 - iLen, "%L
", id, "FL_LINE_6", cnextmap)
iLen += format(MotdMsg[iLen], MOTDLEN2 - iLen, "%s v%s by %s", PLUGIN, VERSION, AUTHOR)
show_motd(id, MotdMsg, "FL WINNER")
}
return PLUGIN_CONTINUE
}
public plugin_precache()
{
precache_sound("misc/1frag.wav")
precache_sound("misc/2frags.wav")
precache_sound("misc/3frags.wav")
return PLUGIN_CONTINUE
}
public GoNextmap()
{
new cnextmap[32]
get_cvar_string("amx_nextmap", cnextmap, charsmax(cnextmap))
server_cmd("changelevel %s", cnextmap)
return PLUGIN_CONTINUE
}
public Informer()
{
new id, Frags, FragsLeft, LeaderFrags, PlayersNum, LeaderName[32], CurrentTime[32] , NextMap[32], Message[512]
for(id = 1; id <= get_maxplayers(); id++)
{
if(!is_user_connected(id))
{
continue
}
else
{
Frags = get_user_frags(id)
if(Frags > LeaderFrags)
{
LeaderFrags = Frags
get_user_name(id, LeaderName, charsmax(LeaderName))
}
PlayersNum++
}
}
for(id = 1; id <= get_maxplayers(); id++)
{
new Len
get_time("%H:%M:%S", CurrentTime, charsmax(CurrentTime))
Len = format(Message, charsmax(Message), "%L: %s", id, "FL_TIME", CurrentTime)
Len += format(Message[Len], charsmax(Message) - Len, "^n%L: ", id, "FL_TIMELEFT")
if(get_cvar_float("mp_timelimit"))
{
new a = get_timeleft()
Len += format(Message[Len], charsmax(Message) - Len, "%d:%02d", (a / 60), (a % 60))
}
else
{
Len += format(Message[Len], charsmax(Message) - Len, "%L", id, "FL_LAST_ROUND")
}
get_cvar_string("amx_nextmap", NextMap, charsmax(NextMap))
Len += format(Message[Len], charsmax(Message) - Len, "^n%L: %s", id, "FL_NEXTMAP", NextMap)
if(!Winner)
{
if(!strlen(LeaderName))
{
format(LeaderName, charsmax(LeaderName), "%L", id, "FL_NONE")
}
Len += format(Message[Len], charsmax(Message) - Len, "^n%L: %s [%d/%d]", id, "FL_LEADER", LeaderName, LeaderFrags, get_pcvar_num(PcvarLimit))
}
else
{
Len += format(Message[Len], charsmax(Message) - Len, "^n%L: %s", id, "FL_WINNER_2", WinnerName)
}
Frags = get_user_frags(id)
FragsLeft = get_pcvar_num(PcvarLimit) - Frags
Len += format(Message[Len], charsmax(Message) - Len, "^n%L: %d %L", id, "FL_YOU_NEED", FragsLeft, id, "FL_FRAGS")
Len += format(Message[Len], charsmax(Message) - Len, "^n%L: %d/%d", id, "FL_PLAYERS", PlayersNum, get_maxplayers())
new LFragsLeft = get_pcvar_num(PcvarLimit) - LeaderFrags
if(Winner)
{
set_hudmessage(0, 255, 0, 0.01, 0.18, 0, 1.0, 1.0, _, _, 1)
}
else if(LFragsLeft > 3)
{
set_hudmessage(100, 100, 100, 0.01, 0.18, 0, 1.0, 1.0, _, _, 1)
}
else if(LFragsLeft == 3)
{
set_hudmessage(255, 0, 0, 0.01, 0.18, 1, 1.0, 1.0, _, _, 1)
}
else if(LFragsLeft == 2)
{
set_hudmessage(255, 255, 0, 0.01, 0.18, 1, 1.0, 1.0, _, _, 1)
}
else if(LFragsLeft == 1)
{
set_hudmessage(0, 255, 0, 0.01, 0.18, 1, 1.0, 1.0, _, _, 1)
}
ShowSyncHudMsg(id, gMsgHud, Message)
}
return PLUGIN_CONTINUE
}
public plugin_end()
{
for(new id; id <= get_maxplayers(); id++)
{
if(is_user_connected(id))
{
SaveTemp(id)
}
}
SaveStats()
return PLUGIN_CONTINUE
}
public SaveStats()
{
if(!get_pcvar_num(PcvarStats) || !get_pcvar_num(PcvarEnable) || Recheaded)
{
return PLUGIN_CONTINUE
}
new cFile[128], cLine[256]
get_datadir(cFile, charsmax(cFile))
format(cFile, charsmax(cFile), "%s/fraglimit.dat", cFile)
delete_file(cFile)
for(new i; i < StatNum; i++)
{
format(cLine, charsmax(cLine), "^"%s^" ^"%s^" ^"%s^" ^"%d^" ^"%d^" ^"%d^" ^"%d^" ^"%d^"", Stats[i][NAME], Stats[i][IP], Stats[i][STEAMID], Stats[i][WINS], Stats[i][SCORE], Stats[i][KILLS], Stats[i][DEATHS], Stats[i][TIME])
write_file(cFile, cLine)
}
return PLUGIN_CONTINUE
}
stock SaveTemp(id)
{
new sname[32], sip[32], ssteamid[34]
get_user_name(id, sname, charsmax(sname))
get_user_ip(id, sip, charsmax(sip), 1)
get_user_authid(id, ssteamid, charsmax(ssteamid))
new statsid = fl_find_stats_pos(sname, sip, ssteamid)
if(statsid >= 0 && !Recheaded)
{
copy(Stats[statsid][NAME], 31, sname)
copy(Stats[statsid][IP], 31, sip)
copy(Stats[statsid][STEAMID], 33, ssteamid)
Stats[statsid][WINS] += 0
if(id == Winnerid)
{
Stats[statsid][TEMPSCORE] += floatround(float(Temp[id][TEMP_KILLS]) / float(Temp[id][TEMP_DEATHS] + 10) * 100.0 * 1.5 * (float(Temp[id][TEMP_HS] + 1) / float(Temp[id][TEMP_KILLS] + 1)), floatround_ceil)
Stats[statsid][SCORE] += floatround(float(Temp[id][TEMP_KILLS]) / float(Temp[id][TEMP_DEATHS] + 10) * 100.0 * 1.5 * (float(Temp[id][TEMP_HS] + 1) / float(Temp[id][TEMP_KILLS] + 1)), floatround_ceil)
}
else
{
Stats[statsid][TEMPSCORE] += floatround(float(Temp[id][TEMP_KILLS]) / float(Temp[id][TEMP_DEATHS] + 10) * 100.0 * (float(Temp[id][TEMP_HS] + 1) / float(Temp[id][TEMP_KILLS] + 1)), floatround_ceil)
Stats[statsid][SCORE] += floatround(float(Temp[id][TEMP_KILLS]) / float(Temp[id][TEMP_DEATHS] + 10) * 100.0 * (float(Temp[id][TEMP_HS] + 1) / float(Temp[id][TEMP_KILLS] + 1)), floatround_ceil)
}
Stats[statsid][KILLS] += Temp[id][TEMP_KILLS]
Stats[statsid][DEATHS] += Temp[id][TEMP_DEATHS]
Stats[statsid][TIME] = get_systime(0)
Temp[id][TEMP_KILLS] = 0
Temp[id][TEMP_DEATHS] = 0
Temp[id][TEMP_HS] = 0
}
else if(!Recheaded)
{
if((StatNum + 1) > MAX_STATS)
{
Recheaded = true
new cFile[128]
get_datadir(cFile, charsmax(cFile))
format(cFile, charsmax(cFile), "%s/fraglimit.dat", cFile)
delete_file(cFile)
log_amx("Stats limit <%d> recheaded, clear all stats...", MAX_STATS)
return PLUGIN_CONTINUE
}
copy(Stats[StatNum][NAME], 31, sname)
copy(Stats[StatNum][IP], 31, sip)
copy(Stats[StatNum][STEAMID], 33, ssteamid)
Stats[StatNum][WINS] += 0
if(id == Winnerid)
{
Stats[StatNum][TEMPSCORE] += floatround(float(Temp[id][TEMP_KILLS]) / float(Temp[id][TEMP_DEATHS] + 10) * 100.0 * 1.5 * (float(Temp[id][TEMP_HS] + 1) / float(Temp[id][TEMP_KILLS] + 1)), floatround_ceil)
Stats[StatNum][SCORE] += floatround(float(Temp[id][TEMP_KILLS]) / float(Temp[id][TEMP_DEATHS] + 10) * 100.0 * 1.5 * (float(Temp[id][TEMP_HS] + 1) / float(Temp[id][TEMP_KILLS] + 1)), floatround_ceil)
}
else
{
Stats[StatNum][TEMPSCORE] += floatround(float(Temp[id][TEMP_KILLS]) / float(Temp[id][TEMP_DEATHS] + 10) * 100.0 * (float(Temp[id][TEMP_HS] + 1) / float(Temp[id][TEMP_KILLS] + 1)), floatround_ceil)
Stats[StatNum][SCORE] += floatround(float(Temp[id][TEMP_KILLS]) / float(Temp[id][TEMP_DEATHS] + 10) * 100.0 * (float(Temp[id][TEMP_HS] + 1) / float(Temp[id][TEMP_KILLS] + 1)), floatround_ceil)
}
Stats[StatNum][KILLS] += Temp[id][TEMP_KILLS]
Stats[StatNum][DEATHS] += Temp[id][TEMP_DEATHS]
Stats[StatNum][TIME] = get_systime(0)
Temp[id][TEMP_KILLS] = 0
Temp[id][TEMP_DEATHS] = 0
Temp[id][TEMP_HS] = 0
StatNum++
}
return PLUGIN_CONTINUE
}
stock fl_find_stats_pos(const name[], const ip[], const steamid[])
{
switch(get_pcvar_num(PcvarBy))
{
case 1:
{
for(new i; i < StatNum; i++)
{
if(equal(name, Stats[i][NAME]))
{
return i
}
}
}
case 2:
{
for(new i; i < StatNum; i++)
{
if(equal(ip, Stats[i][IP]))
{
return i
}
}
}
case 3:
{
for(new i; i < StatNum; i++)
{
if(equal(steamid, Stats[i][STEAMID]))
{
return i
}
}
}
}
return -1
}
stock color_print(id, const input[], any:...)
{
static msg[191]
vformat(msg, 190, input, 3)
replace_all(msg, 190, "!g", "^4")
replace_all(msg, 190, "!y", "^1")
replace_all(msg, 190, "!t", "^3")
format(msg, 190, "^x04[FRAGLIMIT]^x01 %s", msg)
if(id)
{
message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("SayText"), _, id)
write_byte(id)
write_string(msg)
message_end()
}
else
{
for(new i; i <= get_maxplayers(); i++)
{
if(!is_user_connected(i))
{
continue
}
message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("SayText"), _, i)
write_byte(i)
write_string(msg)
message_end()
}
}
return 1
}