")
iLen += format(sBuffer[iLen], MAX_BUFFER_LENGTH - iLen, "%s | %s | %s | %s | %s |
", "#", lNick, lKills, lDeaths, lHs)
}
for (new i = 0; i < iMax && MAX_BUFFER_LENGTH - iLen > 0; i++)
{
iLen = format_all_stats(g_sBuffer, izStats, izBody, iLen, i)
}
}
format_all_themes(sBuffer[MAX_BUFFER_LENGTH + 1], iLen)
{
if(get_pcvar_num(pcvar_design)<= STATSX_SHELL_DESIGN_MAX)
{
iDesign = get_pcvar_num(pcvar_design)
}
else
{
if(get_pcvar_num(pcvar_design) == (STATSX_SHELL_DESIGN_MAX + 1))
{
iDesign = random_num(1,STATSX_SHELL_DESIGN_MAX)
}
}
switch(iDesign)
{
case 1:
{
iLen = format(sBuffer, MAX_BUFFER_LENGTH, STATSX_SHELL_DESIGN1_STYLE)
}
case 2:
{
iLen = format(sBuffer, MAX_BUFFER_LENGTH, STATSX_SHELL_DESIGN2_STYLE)
}
case 3:
{
iLen = format(sBuffer, MAX_BUFFER_LENGTH, STATSX_SHELL_DESIGN3_STYLE)
}
case 4:
{
iLen = format(sBuffer, MAX_BUFFER_LENGTH, STATSX_SHELL_DESIGN4_STYLE)
}
case 5:
{
iLen = format(sBuffer, MAX_BUFFER_LENGTH, STATSX_SHELL_DESIGN5_STYLE)
}
case 6:
{
iLen = format(sBuffer, MAX_BUFFER_LENGTH, STATSX_SHELL_DESIGN6_STYLE)
}
case 7:
{
iLen = format(sBuffer, MAX_BUFFER_LENGTH, STATSX_SHELL_DESIGN7_STYLE)
}
case 8:
{
iLen = format(sBuffer, MAX_BUFFER_LENGTH, STATSX_SHELL_DESIGN8_STYLE)
}
case 9:
{
iLen = format(sBuffer, MAX_BUFFER_LENGTH, STATSX_SHELL_DESIGN9_STYLE)
}
case 10:
{
iLen = format(sBuffer, MAX_BUFFER_LENGTH, STATSX_SHELL_DESIGN10_STYLE)
}
case 11:
{
iLen = format(sBuffer, MAX_BUFFER_LENGTH, STATSX_SHELL_DESIGN11_STYLE)
}
case 12:
{
iLen = format(sBuffer, MAX_BUFFER_LENGTH, STATSX_SHELL_DESIGN12_STYLE)
}
case 13:
{
iLen = format(sBuffer, MAX_BUFFER_LENGTH, STATSX_SHELL_DESIGN13_STYLE)
}
default:
{
iLen = format(sBuffer, MAX_BUFFER_LENGTH, STATSX_SHELL_DEFAULT_STYLE)
}
}
return iLen
}
format_all_stats(sBuffer[MAX_BUFFER_LENGTH + 1], izStats[8], izBody[8], iLen, i)
{
get_stats(i, izStats, izBody, t_sName, MAX_NAME_LENGTH)
replace_all(t_sName, MAX_NAME_LENGTH, "<", "<")
replace_all(t_sName, MAX_NAME_LENGTH, ">", ">")
if (szTrigger)
{
szTrigger = false
if(get_pcvar_num(pcvar_style))
{
iLen += format(sBuffer[iLen], MAX_BUFFER_LENGTH - iLen, "%d | %s | %d | %d | %d", i + 1, t_sName, izStats[STATS_KILLS],
izStats[STATS_DEATHS], izStats[STATS_HS])
if(((effec(izStats) + accuracy(izStats)) / 2) < 50)
{
iLen += format(sBuffer[iLen], MAX_BUFFER_LENGTH - iLen, " | %2.0f%% |
", (((effec(izStats) + accuracy(izStats)) / 2) / 1.3), ((effec(izStats) + accuracy(izStats)) / 2))
}
else
{
iLen += format(sBuffer[iLen], MAX_BUFFER_LENGTH - iLen, "%2.0f%%", (((effec(izStats) + accuracy(izStats)) / 2) / 1.3), ((effec(izStats) + accuracy(izStats)) / 2))
}
}
else
{
iLen += format(sBuffer[iLen], MAX_BUFFER_LENGTH - iLen, " | %d | %s | %d | %d | %d |
", i + 1, t_sName, izStats[STATS_KILLS],
izStats[STATS_DEATHS], izStats[STATS_HS])
}
}
else
{
szTrigger = true
if(get_pcvar_num(pcvar_style))
{
iLen += format(sBuffer[iLen], MAX_BUFFER_LENGTH - iLen, "%d | %s | %d | %d | %d", i + 1, t_sName, izStats[STATS_KILLS],
izStats[STATS_DEATHS], izStats[STATS_HS])
if(((effec(izStats) + accuracy(izStats)) / 2) < 50)
{
iLen += format(sBuffer[iLen], MAX_BUFFER_LENGTH - iLen, " | %2.0f%% |
", (((effec(izStats) + accuracy(izStats)) / 2) / 1.3), ((effec(izStats) + accuracy(izStats)) / 2))
}
else
{
iLen += format(sBuffer[iLen], MAX_BUFFER_LENGTH - iLen, "%2.0f%%", (((effec(izStats) + accuracy(izStats)) / 2) / 1.3), ((effec(izStats) + accuracy(izStats)) / 2))
}
}
else
{
iLen += format(sBuffer[iLen], MAX_BUFFER_LENGTH - iLen, " | %d | %s | %d | %d | %d |
", i + 1, t_sName, izStats[STATS_KILLS],
izStats[STATS_DEATHS], izStats[STATS_HS])
}
}
return iLen
}
format_dmg_stats(sBuffer[MAX_BUFFER_LENGTH + 1], izStats[8], iLen, i)
{
if (szTrigger)
{
szTrigger = false
iLen += format(sBuffer[iLen], MAX_BUFFER_LENGTH - iLen, "%d | %s | %d | %d | %d |
", i + 1, t_sName, izStats[STATS_DAMAGE], izStats[STATS_KILLS],
izStats[STATS_DEATHS])
if(((effec(izStats) + accuracy(izStats)) / 2) < 50)
{
iLen += format(sBuffer[iLen], MAX_BUFFER_LENGTH - iLen, "%2.0f%%", (((effec(izStats) + accuracy(izStats)) / 2) / 1.3), ((effec(izStats) + accuracy(izStats)) / 2))
}
else
{
iLen += format(sBuffer[iLen], MAX_BUFFER_LENGTH - iLen, " | %2.0f%%", (((effec(izStats) + accuracy(izStats)) / 2) / 1.3), ((effec(izStats) + accuracy(izStats)) / 2))
}
}
else
{
szTrigger = true
iLen += format(sBuffer[iLen], MAX_BUFFER_LENGTH - iLen, " | %d | %s | %d | %d | %d", i + 1, t_sName, izStats[STATS_DAMAGE],
izStats[STATS_DEATHS], izStats[STATS_HS])
if(((effec(izStats) + accuracy(izStats)) / 2) < 50)
{
iLen += format(sBuffer[iLen], MAX_BUFFER_LENGTH - iLen, " | %2.0f%% |
", (((effec(izStats) + accuracy(izStats)) / 2) / 1.3), ((effec(izStats) + accuracy(izStats)) / 2))
}
else
{
iLen += format(sBuffer[iLen], MAX_BUFFER_LENGTH - iLen, "%2.0f%%", (((effec(izStats) + accuracy(izStats)) / 2) / 1.3), ((effec(izStats) + accuracy(izStats)) / 2))
}
}
return iLen
}
format_hs_stats(sBuffer[MAX_BUFFER_LENGTH + 1], izStats[8], iLen, i)
{
if (szTrigger)
{
szTrigger = false
iLen += format(sBuffer[iLen], MAX_BUFFER_LENGTH - iLen, " | %d | %s | %d | %d | %d |
", i + 1, t_sName, izStats[STATS_HS], izStats[STATS_KILLS],
izStats[STATS_DEATHS])
if(((effec(izStats) + accuracy(izStats)) / 2) < 50)
{
iLen += format(sBuffer[iLen], MAX_BUFFER_LENGTH - iLen, "%2.0f%%", (((effec(izStats) + accuracy(izStats)) / 2) / 1.3), ((effec(izStats) + accuracy(izStats)) / 2))
}
else
{
iLen += format(sBuffer[iLen], MAX_BUFFER_LENGTH - iLen, " | %2.0f%%", (((effec(izStats) + accuracy(izStats)) / 2) / 1.3), ((effec(izStats) + accuracy(izStats)) / 2))
}
}
else
{
szTrigger = true
iLen += format(sBuffer[iLen], MAX_BUFFER_LENGTH - iLen, " | %d | %s | %d | %d | %d", i + 1, t_sName, izStats[STATS_HS],
izStats[STATS_DEATHS], izStats[STATS_HS])
if(((effec(izStats) + accuracy(izStats)) / 2) < 50)
{
iLen += format(sBuffer[iLen], MAX_BUFFER_LENGTH - iLen, " | %2.0f%% |
", (((effec(izStats) + accuracy(izStats)) / 2) / 1.3), ((effec(izStats) + accuracy(izStats)) / 2))
}
else
{
iLen += format(sBuffer[iLen], MAX_BUFFER_LENGTH - iLen, "%2.0f%%", (((effec(izStats) + accuracy(izStats)) / 2) / 1.3), ((effec(izStats) + accuracy(izStats)) / 2))
}
}
return iLen
}
// MastaMan Edition
format_place2(sBuffer[MAX_BUFFER_LENGTH + 1])
{
new iMax = get_statsnum()
new izStats[8], izBody[8]
new iLen = 0
if(get_pcvar_num(pcvar_style))
{
if (iMax > 20)
iMax = 20
}
else
{
if (iMax > 15)
iMax = 15
}
new lSecondPlace[60], lKills[30], lDeaths[30], lHits[30], lShots[30], lEff[30], lAcc[30], lHs[30], lNick[30], lPot[45]
format(lSecondPlace, 59, "%L", LANG_SERVER, "MM_SECONDPLACE")
format(lNick, 29, "%L", LANG_SERVER, "MM_NICK")
replace_all(lNick, 29, " ", " ")
format(lKills, 29, "%L", LANG_SERVER, "KILLS")
format(lDeaths, 29, "%L", LANG_SERVER, "DEATHS")
format(lHits, 29, "%L", LANG_SERVER, "HITS")
format(lShots, 29, "%L", LANG_SERVER, "SHOTS")
format(lHs, 29, "%L", LANG_SERVER, "MM_HS")
replace_all(lHs, 29, " ", " ")
format(lEff, 29, "%L", LANG_SERVER, "MM_EFF")
format(lAcc, 29, "%L", LANG_SERVER, "MM_ACC")
format(lPot, 44, "%L", LANG_SERVER, "MM_POT")
ucfirst(lEff)
ucfirst(lAcc)
iLen = format_all_themes(sBuffer, iLen)
if(get_pcvar_num(pcvar_style))
{
iLen += format(sBuffer[iLen], MAX_BUFFER_LENGTH - iLen, "%s ", lSecondPlace)
iLen += format(sBuffer[iLen], MAX_BUFFER_LENGTH - iLen, "%s | %s | %s | %s | %s | %s | ", "#", lNick, lKills, lDeaths, lHs, lPot)
}
else
{
iLen += format(sBuffer[iLen], MAX_BUFFER_LENGTH - iLen, "")
iLen += format(sBuffer[iLen], MAX_BUFFER_LENGTH - iLen, "%s | %s | %s | %s | %s | ", "#", lNick, lKills, lDeaths, lHs)
}
for (new i = 10; i < iMax && MAX_BUFFER_LENGTH - iLen > 0; i++)
{
iLen = format_all_stats(g_sBuffer, izStats, izBody, iLen, i)
}
}
// MastaMan Edition
format_place3(sBuffer[MAX_BUFFER_LENGTH + 1])
{
new iMax = get_statsnum()
new izStats[8], izBody[8]
new iLen = 0
if(get_pcvar_num(pcvar_style))
{
if (iMax > 30)
iMax = 30
}
else
{
if (iMax > 15)
iMax = 15
}
new lThirdPlace[60], lKills[30], lDeaths[30], lHits[30], lShots[30], lEff[30], lAcc[30], lHs[30], lNick[30], lPot[45]
format(lThirdPlace, 59, "%L", LANG_SERVER, "MM_THIRDPLACE")
format(lNick, 29, "%L", LANG_SERVER, "MM_NICK")
replace_all(lNick, 29, " ", " ")
format(lKills, 29, "%L", LANG_SERVER, "KILLS")
format(lDeaths, 29, "%L", LANG_SERVER, "DEATHS")
format(lHits, 29, "%L", LANG_SERVER, "HITS")
format(lShots, 29, "%L", LANG_SERVER, "SHOTS")
format(lHs, 29, "%L", LANG_SERVER, "MM_HS")
replace_all(lHs, 29, " ", " ")
format(lEff, 29, "%L", LANG_SERVER, "MM_EFF")
format(lAcc, 29, "%L", LANG_SERVER, "MM_ACC")
format(lPot, 44, "%L", LANG_SERVER, "MM_POT")
ucfirst(lEff)
ucfirst(lAcc)
iLen = format_all_themes(sBuffer, iLen)
if(get_pcvar_num(pcvar_style))
{
iLen += format(sBuffer[iLen], MAX_BUFFER_LENGTH - iLen, "%s ", lThirdPlace)
iLen += format(sBuffer[iLen], MAX_BUFFER_LENGTH - iLen, "%s | %s | %s | %s | %s | %s | ", "#", lNick, lKills, lDeaths, lHs, lPot)
}
else
{
iLen += format(sBuffer[iLen], MAX_BUFFER_LENGTH - iLen, "")
iLen += format(sBuffer[iLen], MAX_BUFFER_LENGTH - iLen, "%s | %s | %s | %s | %s | ", "#", lNick, lKills, lDeaths, lHs)
}
for (new i = 20; i < iMax && MAX_BUFFER_LENGTH - iLen > 0; i++)
{
iLen = format_all_stats(g_sBuffer, izStats, izBody, iLen, i)
}
}
// MastaMan Edition
format_bot10(sBuffer[MAX_BUFFER_LENGTH + 1])
{
new iMax = get_statsnum()
new iBotX = iMax - 10
new izStats[8], izBody[8]
new iLen = 0
new lBot[60], lKills[30], lDeaths[30], lHits[30], lShots[30], lEff[30], lAcc[30], lHs[30], lNick[30], lPot[45]
format(lBot, 59, "%L", LANG_SERVER, "MM_BOT")
format(lNick, 29, "%L", LANG_SERVER, "MM_NICK")
replace_all(lNick, 29, " ", " ")
format(lKills, 29, "%L", LANG_SERVER, "KILLS")
format(lDeaths, 29, "%L", LANG_SERVER, "DEATHS")
format(lHits, 29, "%L", LANG_SERVER, "HITS")
format(lShots, 29, "%L", LANG_SERVER, "SHOTS")
format(lHs, 29, "%L", LANG_SERVER, "MM_HS")
replace_all(lHs, 29, " ", " ")
format(lEff, 29, "%L", LANG_SERVER, "MM_EFF")
format(lAcc, 29, "%L", LANG_SERVER, "MM_ACC")
format(lPot, 44, "%L", LANG_SERVER, "MM_POT")
ucfirst(lEff)
ucfirst(lAcc)
iLen = format_all_themes(sBuffer, iLen)
iLen += format(sBuffer[iLen], MAX_BUFFER_LENGTH - iLen, "%s ", lBot)
if(get_pcvar_num(pcvar_style))
{
iLen += format(sBuffer[iLen], MAX_BUFFER_LENGTH - iLen, "%s | %s | %s | %s | %s | %s | ", "#", lNick, lKills, lDeaths, lHs, lPot)
}
else
{
iLen += format(sBuffer[iLen], MAX_BUFFER_LENGTH - iLen, "%s | %s | %s | %s | %s | ", "#", lNick, lKills, lDeaths, lHs)
}
for (new i = iMax - 1; i > iBotX && MAX_BUFFER_LENGTH - iLen > 0; i--)
{
iLen = format_all_stats(g_sBuffer, izStats, izBody, iLen, i)
}
}
find_max_stats(g_iStatsBase[], iMax, iExcludeID[])
{
new g_iDataMax = 0
new iId
for(new j = 0; j < iMax; j++)
{
if(!iExcludeID[j])
{
if(g_iStatsBase[j] > g_iDataMax)
{
g_iDataMax = g_iStatsBase[j]
iExcludeID[j] = true
iId = j
}
}
}
return iId
}
// MastaMan Edition
format_top_dmg(sBuffer[MAX_BUFFER_LENGTH + 1])
{
new iMax = get_statsnum()
new izStats[8], izBody[8]
new iLen = 0
new g_iStatsBase[MAX_SORT_COUNT]
new bool:iExcludeID[MAX_SORT_COUNT]
new lDmg_Place[60], lDamage[30], lKills[30], lDeaths[30], lHits[30], lEff[30], lAcc[30], lHs[30], lNick[30], lPot[45]
if (iMax > MAX_SORT_COUNT)
{
iMax = MAX_SORT_COUNT
}
for(new i = 0; i < iMax; i++)
{
get_stats(i, izStats, izBody, t_sName, MAX_NAME_LENGTH)
g_iStatsBase[i] = izStats[STATS_DAMAGE]
}
format(lDmg_Place, 59, "%L", LANG_SERVER, "MM_DMG_PLACE")
format(lNick, 29, "%L", LANG_SERVER, "MM_NICK")
replace_all(lNick, 29, " ", " ")
format(lDamage, 29, "%L", LANG_SERVER, "MM_DAMAGE")
format(lKills, 29, "%L", LANG_SERVER, "KILLS")
format(lDeaths, 29, "%L", LANG_SERVER, "DEATHS")
format(lHits, 29, "%L", LANG_SERVER, "HITS")
format(lHs, 29, "%L", LANG_SERVER, "MM_HS")
replace_all(lHs, 29, " ", " ")
format(lEff, 29, "%L", LANG_SERVER, "MM_EFF")
format(lAcc, 29, "%L", LANG_SERVER, "MM_ACC")
format(lPot, 44, "%L", LANG_SERVER, "MM_POT")
ucfirst(lEff)
ucfirst(lAcc)
iLen = format_all_themes(sBuffer, iLen)
iLen += format(sBuffer[iLen], MAX_BUFFER_LENGTH - iLen, "%s ", lDmg_Place)
iLen += format(sBuffer[iLen], MAX_BUFFER_LENGTH - iLen, "%s | %s | %s | %s | %s | %s | ", "#", lNick, lDamage, lKills, lDeaths, lPot)
for(new i = 0; i < 10; i++)
{
get_stats(find_max_stats(g_iStatsBase, iMax, iExcludeID), izStats, izBody, t_sName, MAX_NAME_LENGTH)
replace_all(t_sName, MAX_NAME_LENGTH, "<", "<")
replace_all(t_sName, MAX_NAME_LENGTH, ">", ">")
iLen = format_dmg_stats(g_sBuffer, izStats, iLen, i)
}
}
// MastaMan Edition
format_top_hs(sBuffer[MAX_BUFFER_LENGTH + 1])
{
new iMax = get_statsnum()
new izStats[8], izBody[8]
new iLen = 0
new g_iStatsBase[MAX_SORT_COUNT]
new bool:iExcludeID[MAX_SORT_COUNT]
new lHs_Place[60], lKills[30], lDeaths[30], lHits[30], lEff[30], lAcc[30], lHs[30], lNick[30], lPot[45]
if (iMax > MAX_SORT_COUNT)
{
iMax = MAX_SORT_COUNT
}
for(new i = 0; i < iMax; i++)
{
get_stats(i, izStats, izBody, t_sName, MAX_NAME_LENGTH)
g_iStatsBase[i] = izStats[STATS_HS]
}
format(lHs_Place, 59, "%L", LANG_SERVER, "MM_HS_PLACE")
format(lNick, 29, "%L", LANG_SERVER, "MM_NICK")
replace_all(lNick, 29, " ", " ")
format(lKills, 29, "%L", LANG_SERVER, "KILLS")
format(lDeaths, 29, "%L", LANG_SERVER, "DEATHS")
format(lHits, 29, "%L", LANG_SERVER, "HITS")
format(lHs, 29, "%L", LANG_SERVER, "MM_HS")
replace_all(lHs, 29, " ", " ")
format(lEff, 29, "%L", LANG_SERVER, "MM_EFF")
format(lAcc, 29, "%L", LANG_SERVER, "MM_ACC")
format(lPot, 44, "%L", LANG_SERVER, "MM_POT")
ucfirst(lEff)
ucfirst(lAcc)
iLen = format_all_themes(sBuffer, iLen)
iLen += format(sBuffer[iLen], MAX_BUFFER_LENGTH - iLen, "%s ", lHs_Place)
iLen += format(sBuffer[iLen], MAX_BUFFER_LENGTH - iLen, "%s | %s | %s | %s | %s | %s | ", "#", lNick, lHs, lKills, lDeaths, lPot)
for(new i = 0; i < 10; i++)
{
get_stats(find_max_stats(g_iStatsBase, iMax, iExcludeID), izStats, izBody, t_sName, MAX_NAME_LENGTH)
replace_all(t_sName, MAX_NAME_LENGTH, "<", "<")
replace_all(t_sName, MAX_NAME_LENGTH, ">", ">")
iLen = format_hs_stats(g_sBuffer, izStats, iLen, i)
}
}
format_day(sBuffer[MAX_BUFFER_LENGTH + 1])
{
new g_szDayData[12], szKey[6]
new iLen = 0
new lHeader[100], lTitle1[30], lTitle2[30], szDate[128]
format_time(szDate, sizeof(szDate) - 1, "%d.%m.%Y")
formatex(lHeader, 99, "%L %L", LANG_SERVER, "MM_ATTEND", LANG_SERVER, "MM_ATTEND_TO", szDate)
formatex(lTitle1, 29, "%L", LANG_SERVER, "MM_TIME")
formatex(lTitle2, 29, "%L", LANG_SERVER, "MM_ATTEND")
iLen = format_all_themes(sBuffer, iLen)
if (g_Vault == INVALID_HANDLE)
{
iLen += format(sBuffer[iLen], MAX_BUFFER_LENGTH - iLen, "Read data from vault failure!...")
return PLUGIN_HANDLED
}
//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
iLen += format(sBuffer[iLen], MAX_BUFFER_LENGTH - iLen, "%s", lHeader)
if(get_pcvar_num(pcvar_day) == 1)
{
iLen += format(sBuffer[iLen], MAX_BUFFER_LENGTH - iLen, "")
iLen += format(sBuffer[iLen], MAX_BUFFER_LENGTH - iLen, "")
iLen += format(sBuffer[iLen], MAX_BUFFER_LENGTH - iLen, "100%% 50%% 0%% | ")
for(new i = 0; i < 24; i++)
{
formatex(szKey, 5,"%d-h" , i)
nvault_get(g_Vault , szKey, g_szDayData, 11)
iLen += format(sBuffer[iLen], MAX_BUFFER_LENGTH - iLen, "", str_to_num(g_szDayData) * (250 / get_maxplayers()))
}
iLen += format(sBuffer[iLen], MAX_BUFFER_LENGTH - iLen, " | | ")
iLen += format(sBuffer[iLen], MAX_BUFFER_LENGTH - iLen, " 0.....2.....4.....6.....8.....10....12....14....16....18....20....22... ")
}
if(get_pcvar_num(pcvar_day) > 1)
{
iLen += format(sBuffer[iLen], MAX_BUFFER_LENGTH - iLen, "")
iLen += format(sBuffer[iLen], MAX_BUFFER_LENGTH - iLen, "%s | %s", lTitle1, lTitle2)
for(new i = 0; i < 24; i++)
{
formatex(szKey, 5,"%d-h" , i)
nvault_get(g_Vault , szKey, g_szDayData, 11)
if(szTrigger)
{
iLen += format(sBuffer[iLen], MAX_BUFFER_LENGTH - iLen, " | %d:00 | %d", i, (str_to_num(g_szDayData) * (250 / get_maxplayers())) - 10, str_to_num(g_szDayData))
szTrigger = false
}
else
{
iLen += format(sBuffer[iLen], MAX_BUFFER_LENGTH - iLen, " | %d:00 | %d", i, (str_to_num(g_szDayData) * (250 / get_maxplayers())) - 10, str_to_num(g_szDayData))
szTrigger = true
}
}
}
return PLUGIN_CONTINUE
}
format_played_time(id, sBuffer[MAX_BUFFER_LENGTH + 1])
{
new iLen = 0
new lTime[30], lName[30], szName[33], szTmpName[32]
new szPlayers[32], iNum, szKey[32], szData[128]
new lYear[30], lMonth[30], lDay[30], lWeek[30], lHour[30], lMinute[30]
formatex(lYear, 29, "%L", LANG_SERVER, "MM_YEAR")
formatex(lMonth, 29, "%L", LANG_SERVER, "MM_MONTH")
formatex(lWeek, 29, "%L", LANG_SERVER, "MM_WEEK")
formatex(lDay, 29, "%L", LANG_SERVER, "MM_DAY")
formatex(lHour, 29, "%L", LANG_SERVER, "MM_HOUR")
formatex(lMinute, 29, "%L", LANG_SERVER, "MM_MIN")
formatex(lName, 29, "%L", LANG_SERVER, "MM_NICK")
formatex(lTime, 29, "%L", LANG_SERVER, "MM_TIME")
iLen = format_all_themes(sBuffer, iLen)
iLen += format(sBuffer[iLen], MAX_BUFFER_LENGTH - iLen, "# | %s | %s", lName, lTime)
get_players(szPlayers, iNum)
for(new i = 0; i < iNum; i++)
{
new iYear, iMonth, iDay, iWeek, iHour, iMinute, szTime[64]
get_user_name(szPlayers[i], szName, sizeof(szName) - 1)
get_user_name(id, szTmpName, sizeof(szTmpName) - 1)
formatex(szKey, sizeof(szKey) - 1, "PLAYED_TIME#%s", szName)
nvault_get(g_Vault2, szKey, szData, sizeof(szData) - 1)
new iTime = str_to_num(szData) + get_user_time(szPlayers[i])
if(iTime / MM_MINUTE)
{
iMinute = iTime / MM_MINUTE
formatex(szTime, sizeof(szTime) - 1, "%d %s", iMinute, lMinute)
}
else
{
continue
}
if(iTime / MM_HOUR)
{
iHour = iTime / MM_HOUR
iMinute = (iTime - (iHour * MM_HOUR)) / MM_MINUTE
formatex(szTime, sizeof(szTime) - 1, "%d %s %d %s", iHour, lHour, iMinute, lMinute)
}
if(iTime / MM_DAY)
{
iDay = iTime / MM_DAY
iHour = (iTime - (iDay * MM_DAY)) / MM_HOUR
formatex(szTime, sizeof(szTime) - 1, "%d %s %d %s %d %s", iDay, lDay, iHour, lHour, iMinute, lMinute)
}
if(iTime / (MM_WEEK))
{
iWeek = iTime / (MM_WEEK)
iDay = (iTime - (iWeek * (MM_WEEK))) / MM_DAY
formatex(szTime, sizeof(szTime) - 1, "%d %s %d %s %d %s", iDay, iHour, iMinute )
}
if(iTime / MM_MONTH)
{
iMonth = iTime / MM_MONTH
iWeek = (iTime - (iMonth * MM_MONTH)) / 604800
formatex(szTime, sizeof(szTime) - 1, "%d month %d week %d day %d hour %d min", iMonth, iWeek , iDay, iHour, iMinute )
}
if((iTime / MM_YEAR) > 1)
{
iYear = iTime / MM_YEAR
iMonth = (iTime - (iYear * MM_YEAR)) / MM_MONTH
formatex(szTime, sizeof(szTime) - 1, "%d year %d month %d week %d day %d hour %d min", iYear, iMonth, iWeek, iDay, iHour, iMinute )
}
if(equal(szTmpName, szName))
{
iLen += format(sBuffer[iLen], MAX_BUFFER_LENGTH - iLen, " | %d | %s | %s", i + 1, szName, szTime)
}
else
{
iLen += format(sBuffer[iLen], MAX_BUFFER_LENGTH - iLen, " | %d | %s | %s", i + 1, szName, szTime)
}
}
return PLUGIN_CONTINUE
}
// MastaMan Edition
format_award(sBuffer[MAX_BUFFER_LENGTH + 1])
{
new izStats[8], izBody[8], szName[3][MAX_NAME_LENGTH], id
new iLen = 0
new Float:izAwardCash_Bonus[3], Float:izAwardSkil_Level[3], izCash
new lBonus[30]
format(lBonus, 29, "%L", LANG_SERVER, "MM_BONUS")
iLen = format_all_themes(sBuffer, iLen)
id = iAwardID
for(new i = 0; i < 3; i++)
{
get_stats(id, izStats, izBody, t_sName, MAX_NAME_LENGTH)
replace_all(t_sName, MAX_NAME_LENGTH, "<", "<")
replace_all(t_sName, MAX_NAME_LENGTH, ">", ">")
copy(szName[i], MAX_NAME_LENGTH - 1, t_sName)
izAwardCash_Bonus[i] = get_pcvar_num(pcvar_award_cash) * (((effec(izStats) + accuracy(izStats)) / 2) / 100)
izAwardSkil_Level[i] = ((effec(izStats) + accuracy(izStats)) / 2)
id += 10
}
iAwardID = random_num(0, 9)
iLen = format_all_themes(sBuffer, iLen)
iLen += format(sBuffer[iLen], MAX_BUFFER_LENGTH - iLen, "
%s ", szName[0])
iLen += format(sBuffer[iLen], MAX_BUFFER_LENGTH - iLen, "")
iLen += format(sBuffer[iLen], MAX_BUFFER_LENGTH - iLen, "%s 2 | ", szName[1])
iLen += format(sBuffer[iLen], MAX_BUFFER_LENGTH - iLen, "1 | ")
iLen += format(sBuffer[iLen], MAX_BUFFER_LENGTH - iLen, "%s 3 | ", szName[2])
iLen += format(sBuffer[iLen], MAX_BUFFER_LENGTH - iLen, "
")
if(get_pcvar_num(pcvar_award_cash))
{
iLen += format(sBuffer[iLen], MAX_BUFFER_LENGTH - iLen, "")
for(new i = 0; i < 3; i++)
{
izCash = get_pcvar_num(pcvar_award_cash) / (i + 1)
iLen += format(sBuffer[iLen], MAX_BUFFER_LENGTH - iLen, "%d | %s", i + 1, szName[i])
if(izAwardSkil_Level[i] < 50.0)
{
iLen += format(sBuffer[iLen], MAX_BUFFER_LENGTH - iLen, " | %2.0f%%", izAwardSkil_Level[i], izAwardSkil_Level[i])
}
else
{
iLen += format(sBuffer[iLen], MAX_BUFFER_LENGTH - iLen, " | %2.0f%%", izAwardSkil_Level[i], izAwardSkil_Level[i])
}
iLen += format(sBuffer[iLen], MAX_BUFFER_LENGTH - iLen, " | %d$ (+%0.0f$ %s) | ", izCash, izAwardCash_Bonus[i], lBonus)
}
}
}
// MastaMan Edition
format_rankstats(id, sBuffer[MAX_BUFFER_LENGTH + 1], iMyId = 0)
{
new izStats[8] = {0, ...}
new izBody[8]
new iRankPos, iLen
new lKills[30], lDeaths[30], lHits[30], lShots[30], lDamage[30], lEff[30], lAcc[30], lPot[45]
format(lKills, 29, "%L", id, "KILLS")
format(lDeaths, 29, "%L", id, "DEATHS")
format(lHits, 29, "%L", id, "HITS")
format(lShots, 29, "%L", id, "SHOTS")
format(lDamage, 29, "%L", id, "MM_DAMAGE")
format(lEff, 29, "%L", id, "MM_EFF")
format(lAcc, 29, "%L", id, "MM_ACC")
format(lPot, 44, "%L", id, "MM_POT")
ucfirst(lEff)
ucfirst(lAcc)
iLen = format_all_themes(sBuffer, iLen)
iRankPos = get_user_stats(id, izStats, izBody)
iLen += format(sBuffer[iLen], MAX_BUFFER_LENGTH - iLen, "%L %L", id, (!iMyId || iMyId == id) ? "YOUR" : "PLAYERS", id, "RANK_IS", iRankPos, get_statsnum())
iLen += format(sBuffer[iLen], MAX_BUFFER_LENGTH - iLen, "%L", id, "MM_STAT")
iLen += format(sBuffer[iLen], MAX_BUFFER_LENGTH - iLen, " | %s | %d   (%L) | %s | %d | %s | %d | %s | %d | %s | %d | %s | %0.2f%% | ",
lKills, izStats[STATS_KILLS], id, "MM_WITH_HS",izStats[STATS_HS], lDeaths, izStats[STATS_DEATHS], lHits, izStats[STATS_HITS], lShots, izStats[STATS_SHOTS],
lDamage, izStats[STATS_DAMAGE], lAcc, accuracy(izStats))
if(((effec(izStats) + accuracy(izStats)) / 2) < 50)
{
iLen += format(sBuffer[iLen], MAX_BUFFER_LENGTH - iLen, "%s | %2.0f%% | ", lPot, (((effec(izStats) + accuracy(izStats)) / 2) / 1.3), ((effec(izStats) + accuracy(izStats)) / 2))
}
else
{
iLen += format(sBuffer[iLen], MAX_BUFFER_LENGTH - iLen, "%s | %2.0f%%", lPot, (((effec(izStats) + accuracy(izStats)) / 2) / 1.3), ((effec(izStats) + accuracy(izStats)) / 2))
}
new L_BODY_PART[8][32]
for (new i = 1; i < 8; i++)
{
format(L_BODY_PART[i], 31, "%L", id, BODY_PART[i])
}
iLen += format(sBuffer[iLen], MAX_BUFFER_LENGTH - iLen, " |
%L", id, "MM_HIT")
iLen += format(sBuffer[iLen], MAX_BUFFER_LENGTH - iLen, " | %s | %d | %s | %d | %s | %d | %s | %d | %s | %d | %s | %d | %s | %d",
L_BODY_PART[1], izBody[1], L_BODY_PART[2], izBody[2], L_BODY_PART[3], izBody[3], L_BODY_PART[4], izBody[4], L_BODY_PART[5],
izBody[5], L_BODY_PART[6], izBody[6], L_BODY_PART[7], izBody[7])
}
// MastaMan Edition
format_stats(id, sBuffer[MAX_BUFFER_LENGTH + 1])
{
new izStats[8] = {0, ...}
new izBody[8]
new iWeapon, iLen
new lKills[30], lDeaths[30], lHits[30], lShots[30], lDamage[30], lEff[30], lAcc[30], lWeapon[30], lPot[45]
format(lKills, 29, "%L", id, "KILLS")
format(lDeaths, 29, "%L", id, "DEATHS")
format(lHits, 29, "%L", id, "HITS")
format(lShots, 29, "%L", id, "SHOTS")
format(lDamage, 29, "%L", id, "MM_DAMAGE")
format(lEff, 29, "%L", id, "MM_EFF")
format(lAcc, 29, "%L", id, "MM_ACC")
format(lPot, 44, "%L", id, "MM_POT")
format(lWeapon, 29, "%L", id, "WEAPON")
ucfirst(lEff)
ucfirst(lAcc)
get_user_wstats(id, 0, izStats, izBody)
iLen = format_all_themes(sBuffer, iLen)
iLen += format(sBuffer[iLen], MAX_BUFFER_LENGTH - iLen, "%L", id, "MM_STAT")
iLen += format(sBuffer[iLen], MAX_BUFFER_LENGTH - iLen, " | %s | %d   (%L) | %s | %d | %s | %d | %s | %d | %s | %d | %s | %0.2f | %s | %0.2f | ",
lKills, izStats[STATS_KILLS], id, "MM_WITH_HS",izStats[STATS_HS], lDeaths, izStats[STATS_DEATHS], lHits, izStats[STATS_HITS], lShots, izStats[STATS_SHOTS],
lDamage, izStats[STATS_DAMAGE], lEff, effec(izStats), lAcc, accuracy(izStats))
if(((effec(izStats) + accuracy(izStats)) / 2) < 50)
{
iLen += format(sBuffer[iLen], MAX_BUFFER_LENGTH - iLen, "%s | %2.0f%%", lPot, (((effec(izStats) + accuracy(izStats)) / 2) / 1.3), ((effec(izStats) + accuracy(izStats)) / 2))
}
else
{
iLen += format(sBuffer[iLen], MAX_BUFFER_LENGTH - iLen, " | %s | %2.0f%%", lPot, (((effec(izStats) + accuracy(izStats)) / 2) / 1.3), ((effec(izStats) + accuracy(izStats)) / 2))
}
iLen += format(sBuffer[iLen], MAX_BUFFER_LENGTH - iLen, " |
")
iLen += format(sBuffer[iLen], MAX_BUFFER_LENGTH - iLen, "%s | %s | %s | %s | %s | %s | %s", lWeapon, lKills, lDeaths, lHits, lShots, lDamage, lAcc)
new bool:szTrigger = true
for (iWeapon = 1; iWeapon < xmod_get_maxweapons() && MAX_BUFFER_LENGTH - iLen > 0 ; iWeapon++)
{
if (get_user_wstats(id, iWeapon, izStats, izBody))
{
xmod_get_wpnname(iWeapon, t_sWpn, MAX_WEAPON_LENGTH)
if(szTrigger)
{
szTrigger = false
iLen += format(sBuffer[iLen], MAX_BUFFER_LENGTH - iLen, " |
---|
%s | %d | %d | %d | %d | %d | %3.0f", t_sWpn, izStats[STATS_KILLS], izStats[STATS_DEATHS],
izStats[STATS_HITS], izStats[STATS_SHOTS], izStats[STATS_DAMAGE], accuracy(izStats))
}
else
{
szTrigger = true
iLen += format(sBuffer[iLen], MAX_BUFFER_LENGTH - iLen, " | %s | %d | %d | %d | %d | %d | %3.0f", t_sWpn, izStats[STATS_KILLS], izStats[STATS_DEATHS],
izStats[STATS_HITS], izStats[STATS_SHOTS], izStats[STATS_DAMAGE], accuracy(izStats))
}
}
}
}
// Show round end stats. If gametime is zero then use default duration time.
show_roundend_hudstats(id, Float:fGameTime)
{
// Bail out if there no HUD stats should be shown
// for this player or end round stats not created.
if (!g_izStatsSwitch[id]) return
if (!g_sAwardAndScore[0]) return
// If round end timer is zero clear round end stats.
if (g_fShowStatsTime == 0.0)
{
ClearSyncHud(id, g_HudSync_EndRound)
#if defined STATSX_DEBUG
log_amx("Clear round end HUD stats for #%d", id)
#endif
}
// Set HUD-duration to default or remaining time.
new Float:fDuration
if (fGameTime == 0.0)
fDuration = g_fHUDDuration
else
{
fDuration = g_fShowStatsTime + g_fHUDDuration - fGameTime
if (fDuration > g_fFreezeTime + g_fFreezeLimitTime)
fDuration = g_fFreezeTime + g_fFreezeLimitTime
}
// Show stats only if more time left than coded minimum.
if (fDuration >= HUD_MIN_DURATION)
{
set_hudtype_endround(fDuration)
ShowSyncHudMsg(id, g_HudSync_EndRound, "%s", g_sAwardAndScore)
#if defined STATSX_DEBUG
log_amx("Show %1.2fs round end HUD stats for #%d", fDuration, id)
#endif
}
}
// Show round end stats.
show_user_hudstats(id, Float:fGameTime)
{
// Bail out if there no HUD stats should be shown
// for this player or user stats timer is zero.
if (!g_izStatsSwitch[id]) return
if (g_fzShowUserStatsTime[id] == 0.0) return
// Set HUD-duration to default or remaining time.
new Float:fDuration
if (fGameTime == 0.0)
fDuration = g_fHUDDuration
else
{
fDuration = g_fzShowUserStatsTime[id] + g_fHUDDuration - fGameTime
if (fDuration > g_fFreezeTime + g_fFreezeLimitTime)
fDuration = g_fFreezeTime + g_fFreezeLimitTime
}
// Show stats only if more time left than coded minimum.
if (fDuration >= HUD_MIN_DURATION)
{
if (ShowKiller)
{
new iKiller
iKiller = g_izKilled[id][KILLED_KILLER_ID]
get_kill_info(id, iKiller, g_sBuffer)
add_attacker_hits(id, iKiller, g_sBuffer)
set_hudtype_killer(fDuration)
show_hudmessage(id, "%s", g_sBuffer)
#if defined STATSX_DEBUG
log_amx("Show %1.2fs %suser HUD k-stats for #%d", fDuration, g_sBuffer[0] ? "" : "no ", id)
#endif
}
if (ShowVictims)
{
get_victims(id, g_sBuffer)
set_hudtype_victim(fDuration)
show_hudmessage(id, "%s", g_sBuffer)
#if defined STATSX_DEBUG
log_amx("Show %1.2fs %suser HUD v-stats for #%d", fDuration, g_sBuffer[0] ? "" : "no ", id)
#endif
}
if (ShowAttackers)
{
get_attackers(id, g_sBuffer)
set_hudtype_attacker(fDuration)
show_hudmessage(id, "%s", g_sBuffer)
#if defined STATSX_DEBUG
log_amx("Show %1.2fs %suser HUD a-stats for #%d", fDuration, g_sBuffer[0] ? "" : "no ", id)
#endif
}
}
}
//------------------------------------------------------------
// Plugin commands
//------------------------------------------------------------
// Set or get plugin config flags.
public cmdPluginMode(id, level, cid)
{
if (!cmd_access(id, level, cid, 1))
return PLUGIN_HANDLED
if (read_argc() > 1)
read_argv(1, g_sBuffer, MAX_BUFFER_LENGTH)
else
g_sBuffer[0] = 0
set_plugin_mode(id, g_sBuffer)
return PLUGIN_HANDLED
}
// Display MOTD stats.
public cmdStatsMe(id)
{
if (!SayStatsMe)
{
colorChat(id, CHATCOLOR_RED, "%L", id, "DISABLED_MSG")
return PLUGIN_HANDLED
}
format_stats(id, g_sBuffer)
get_user_name(id, t_sName, MAX_NAME_LENGTH)
format(t_sName, MAX_NAME_LENGTH - 1, "StatsMe ^"%s^"", t_sName)
show_motd(id, g_sBuffer, t_sName)
return PLUGIN_CONTINUE
}
// Display MOTD rank.
public cmdRankStats(id)
{
if (!SayRankStats)
{
colorChat(id, CHATCOLOR_RED, "%L", id, "DISABLED_MSG")
return PLUGIN_HANDLED
}
format_rankstats(id, g_sBuffer)
get_user_name(id, t_sName, MAX_NAME_LENGTH)
format(t_sName, MAX_NAME_LENGTH - 1, "RankStats ^"%s^"", t_sName)
show_motd(id, g_sBuffer, t_sName)
return PLUGIN_CONTINUE
}
//MastaMan Edition
public cmdTopX(id)
{
if (!SayTop15)
{
colorChat(id, CHATCOLOR_RED, "%L", id, "DISABLED_MSG")
return PLUGIN_HANDLED
}
if(!get_pcvar_num(pcvar_topx))
{
colorChat(id, CHATCOLOR_RED, "%L", id, "DISABLED_MSG")
return PLUGIN_HANDLED
}
new szArg[128]
read_args(szArg, 127)
remove_quotes(szArg)
new szTopX[32]
new szMotdTitle[30]
if(equal(szArg, "/top", 4))
{
copy(szTopX, charsmax(szTopX), szArg[4])
iTopX = str_to_num(szTopX)
if(get_pcvar_num(pcvar_style) && iTopX > 30)
{
if (get_statsnum() < iTopX + 10)
{
iTopEnd = get_statsnum()
iTopX = iTopEnd - 10
formatex(szMotdTitle, charsmax(szMotdTitle), "%L %d - %d", LANG_SERVER, "MM_TOPX_T", iTopX + 1, iTopEnd)
}
else
{
iTopX = iTopX - 1
iTopEnd = iTopX + 10
formatex(szMotdTitle, charsmax(szMotdTitle), "%L %d - %d", LANG_SERVER, "MM_TOPX_T", iTopX + 1, iTopEnd)
}
format_topx(g_sBuffer)
show_motd(id, g_sBuffer, szMotdTitle)
}
}
return PLUGIN_CONTINUE
}
// Display MOTD top15 ranked.
public cmdPlace1(id)
{
if (!SayTop15)
{
colorChat(id, CHATCOLOR_RED, "%L", id, "DISABLED_MSG")
return PLUGIN_HANDLED
}
new szMotdTitle[30]
if(get_pcvar_num(pcvar_style))
{
formatex(szMotdTitle, charsmax(szMotdTitle), "10%L",id, "MM_PLACE")
}
else
{
szMotdTitle = "Top 15"
}
format_place1(g_sBuffer)
show_motd(id, g_sBuffer, szMotdTitle)
return PLUGIN_CONTINUE
}
public cmdPlace2(id)
{
if (!SayTop15)
{
colorChat(id, CHATCOLOR_RED, "%L", id, "DISABLED_MSG")
return PLUGIN_HANDLED
}
format_place2(g_sBuffer)
new szMotdTitle[30]
formatex(szMotdTitle, charsmax(szMotdTitle), "20%L",id, "MM_PLACE")
show_motd(id, g_sBuffer, szMotdTitle)
return PLUGIN_CONTINUE
}
public cmdPlace3(id)
{
if (!SayTop15)
{
colorChat(id, CHATCOLOR_RED, "%L", id, "DISABLED_MSG")
return PLUGIN_HANDLED
}
format_place3(g_sBuffer)
new szMotdTitle[30]
formatex(szMotdTitle, charsmax(szMotdTitle), "30%L",id, "MM_PLACE")
show_motd(id, g_sBuffer, szMotdTitle)
return PLUGIN_CONTINUE
}
public cmdBot10(id)
{
if (!SayTop15)
{
colorChat(id, CHATCOLOR_RED, "%L", id, "DISABLED_MSG")
return PLUGIN_HANDLED
}
if(!get_pcvar_num(pcvar_bot))
{
colorChat(id, CHATCOLOR_RED, "%L", id, "DISABLED_MSG")
return PLUGIN_HANDLED
}
format_bot10(g_sBuffer)
new szMotdTitle[30]
formatex(szMotdTitle, charsmax(szMotdTitle), "%L",id, "MM_BOT_T")
show_motd(id, g_sBuffer, szMotdTitle)
return PLUGIN_CONTINUE
}
public cmdAward(id)
{
if (!SayTop15)
{
colorChat(id, CHATCOLOR_RED, "%L", id, "DISABLED_MSG")
return PLUGIN_HANDLED
}
if(!get_pcvar_num(pcvar_award))
{
colorChat(id, CHATCOLOR_RED, "%L", id, "DISABLED_MSG")
return PLUGIN_HANDLED
}
format_award(g_sBuffer)
new szMotdTitle[30]
formatex(szMotdTitle, charsmax(szMotdTitle), "%L",id, "MM_AWARD_T")
show_motd(id, g_sBuffer, szMotdTitle)
return PLUGIN_CONTINUE
}
public cmdDay(id)
{
if (!SayTop15)
{
colorChat(id, CHATCOLOR_RED, "%L", id, "DISABLED_MSG")
return PLUGIN_HANDLED
}
if(!get_pcvar_num(pcvar_day))
{
colorChat(id, CHATCOLOR_RED, "%L", id, "DISABLED_MSG")
return PLUGIN_HANDLED
}
format_day(g_sBuffer)
new szMotdTitle[30]
formatex(szMotdTitle, sizeof(szMotdTitle) - 1, "%L", LANG_SERVER, "MM_ATTEND")
show_motd(id, g_sBuffer, szMotdTitle)
return PLUGIN_CONTINUE
}
public cmdPlTime(id)
{
if (!SayTop15)
{
colorChat(id, CHATCOLOR_RED, "%L", id, "DISABLED_MSG")
return PLUGIN_HANDLED
}
if(!get_pcvar_num(pcvar_pt))
{
colorChat(id, CHATCOLOR_RED, "%L", id, "DISABLED_MSG")
return PLUGIN_HANDLED
}
format_played_time(id, g_sBuffer)
new szMotdTitle[30]
formatex(szMotdTitle, charsmax(szMotdTitle), "%L",id, "MM_PT_T")
show_motd(id, g_sBuffer, szMotdTitle)
return PLUGIN_CONTINUE
}
public cmdDmg(id)
{
if (!SayTop15)
{
colorChat(id, CHATCOLOR_RED, "%L", id, "DISABLED_MSG")
return PLUGIN_HANDLED
}
if(!get_pcvar_num(pcvar_dmg))
{
colorChat(id, CHATCOLOR_RED, "%L", id, "DISABLED_MSG")
return PLUGIN_HANDLED
}
format_top_dmg(g_sBuffer)
new szMotdTitle[30]
formatex(szMotdTitle, charsmax(szMotdTitle), "%L",id, "MM_DMG_PLACE_T")
show_motd(id, g_sBuffer, szMotdTitle)
return PLUGIN_CONTINUE
}
public cmdHs(id)
{
if (!SayTop15)
{
colorChat(id, CHATCOLOR_RED, "%L", id, "DISABLED_MSG")
return PLUGIN_HANDLED
}
if(!get_pcvar_num(pcvar_hs))
{
colorChat(id, CHATCOLOR_RED, "%L", id, "DISABLED_MSG")
return PLUGIN_HANDLED
}
format_top_hs(g_sBuffer)
new szMotdTitle[30]
formatex(szMotdTitle, charsmax(szMotdTitle), "%L",id, "MM_HS_PLACE_T")
show_motd(id, g_sBuffer, szMotdTitle)
return PLUGIN_CONTINUE
}
// Display killer information.
public cmdHp(id)
{
if (!SayHP)
{
colorChat(id, CHATCOLOR_RED, "%L", id, "DISABLED_MSG")
return PLUGIN_HANDLED
}
new iKiller = g_izKilled[id][KILLED_KILLER_ID]
format_kill_ainfo(id, iKiller, g_sBuffer)
colorChat(id, CHATCOLOR_RED, "* %s", g_sBuffer)
return PLUGIN_CONTINUE
}
// Display user stats.
public cmdMe(id)
{
if (!SayMe)
{
colorChat(id, CHATCOLOR_RED, "%L", id, "DISABLED_MSG")
return PLUGIN_HANDLED
}
format_kill_vinfo(id, 0, g_sBuffer)
colorChat(id, CHATCOLOR_GREEN,"* %s", g_sBuffer)
return PLUGIN_CONTINUE
}
// Display user rank
public cmdRank(id)
{
if (!SayRank)
{
colorChat(id, CHATCOLOR_RED, "%L", id, "DISABLED_MSG")
return PLUGIN_HANDLED
}
new izStats[8], izBody[8]
new iRankPos, iRankMax
iRankPos = get_user_stats(id, izStats, izBody)
iRankMax = get_statsnum()
colorChat(id, CHATCOLOR_GREEN, "* %L", id, "YOUR_RANK_IS", iRankPos, iRankMax, izStats[STATS_KILLS], izStats[STATS_HITS], ((effec(izStats) + accuracy(izStats)) / 2))
return PLUGIN_CONTINUE
}
// Report user weapon status to team.
public cmdReport(id)
{
if (!SayReport)
{
colorChat(id, CHATCOLOR_RED, "%L", id, "DISABLED_MSG")
return PLUGIN_HANDLED
}
new iWeapon, iClip, iAmmo, iHealth, iArmor
iWeapon = get_user_weapon(id, iClip, iAmmo)
if (iWeapon != 0)
xmod_get_wpnname(iWeapon, t_sWpn, MAX_WEAPON_LENGTH)
iHealth = get_user_health(id)
iArmor = get_user_armor(id)
new lWeapon[16]
format(lWeapon, 15, "%L", id, "WEAPON")
strtolower(lWeapon)
if (iClip >= 0)
{
format(g_sBuffer, MAX_BUFFER_LENGTH, "^x04%s: ^x03%s^x04, %L: ^x03%d/%d^x04, %L: ^x03%d^x04, %L: ^x03%d", lWeapon, t_sWpn, LANG_SERVER, "AMMO", iClip, iAmmo, LANG_SERVER, "HEALTH", iHealth, LANG_SERVER, "ARMOR", iArmor)
}
else
format(g_sBuffer, MAX_BUFFER_LENGTH, "^x04%s: ^x03%s^x04, %L: ^x03%d^x04, %L: ^x03%d", lWeapon, t_sWpn[7], LANG_SERVER, "HEALTH", iHealth, LANG_SERVER, "ARMOR", iArmor)
engclient_cmd(id, "say_team", g_sBuffer)
return PLUGIN_CONTINUE
}
// Display team map score
public cmdScore(id)
{
if (!SayScore)
{
colorChat(id, CHATCOLOR_RED, "%L", id, "DISABLED_MSG")
return PLUGIN_HANDLED
}
colorChat(id, CHATCOLOR_GREEN, "%L: %s", id, "GAME_SCORE", g_sScore)
return PLUGIN_CONTINUE
}
// Client switch to enable or disable stats announcements.
public cmdSwitch(id)
{
g_izStatsSwitch[id] = (g_izStatsSwitch[id]) ? 0 : -1
num_to_str(g_izStatsSwitch[id], t_sText, MAX_TEXT_LENGTH)
client_cmd(id, "setinfo _amxstatsx %s", t_sText)
new lEnDis[32]
format(lEnDis, 31, "%L", id, g_izStatsSwitch[id] ? "ENABLED" : "DISABLED")
colorChat(id, CHATCOLOR_GREEN, "* %L", id, "STATS_ANNOUNCE", lEnDis)
return PLUGIN_CONTINUE
}
// Player stats menu.
public cmdStats(id)
{
if (!SayStatsAll)
{
colorChat(id, CHATCOLOR_RED, "%L", id, "DISABLED_MSG")
return PLUGIN_HANDLED
}
showStatsMenu(id, g_izUserMenuPosition[id] = 0)
return PLUGIN_CONTINUE
}
//--------------------------------
// Menu
//--------------------------------
public actionStatsMenu(id, key)
{
switch (key)
{
// Key '1' to '7', execute action on this option
case 0..6:
{
new iOption, iIndex
iOption = (g_izUserMenuPosition[id] * PPL_MENU_OPTIONS) + key
if (iOption >= 0 && iOption < 32)
{
iIndex = g_izUserMenuPlayers[id][iOption]
if (is_user_connected(iIndex))
{
switch (g_izUserMenuAction[id])
{
case 0: format_stats(iIndex, g_sBuffer)
case 1: format_rankstats(iIndex, g_sBuffer, id)
default: g_sBuffer[0] = 0
}
if (g_sBuffer[0])
{
get_user_name(iIndex, t_sName, MAX_NAME_LENGTH)
show_motd(id, g_sBuffer, t_sName)
}
}
}
showStatsMenu(id, g_izUserMenuPosition[id])
}
// Key '8', change action
case 7:
{
g_izUserMenuAction[id]++
if (g_izUserMenuAction[id] >= MAX_PPL_MENU_ACTIONS)
g_izUserMenuAction[id] = 0
showStatsMenu(id, g_izUserMenuPosition[id])
}
// Key '9', select next page of options
case 8: showStatsMenu(id, ++g_izUserMenuPosition[id])
// Key '10', cancel or go back to previous menu
case 9:
{
if (g_izUserMenuPosition[id] > 0)
showStatsMenu(id, --g_izUserMenuPosition[id])
}
}
return PLUGIN_HANDLED
}
new g_izUserMenuActionText[MAX_PPL_MENU_ACTIONS][62]
showStatsMenu(id, iMenuPos)
{
formatex(g_izUserMenuActionText[0], charsmax(g_izUserMenuActionText[]),"\r%L", id, "MM_RANKSTATS")
formatex(g_izUserMenuActionText[1], charsmax(g_izUserMenuActionText[]),"\r%L", id, "MM_RANK")
new iLen, iKeyMask, iPlayers
new iUserIndex, iMenuPosMax, iMenuOption, iMenuOptionMax
get_players(g_izUserMenuPlayers[id], iPlayers)
iMenuPosMax = ((iPlayers - 1) / PPL_MENU_OPTIONS) + 1
// If menu pos does not excist use last menu (if players has left)
if (iMenuPos >= iMenuPosMax)
iMenuPos = iMenuPosMax - 1
iUserIndex = iMenuPos * PPL_MENU_OPTIONS
iLen = format(g_sBuffer, MAX_BUFFER_LENGTH, "\y%L\R%d/%d^n\w^n", id, "SERVER_STATS", iMenuPos + 1, iMenuPosMax)
iMenuOptionMax = iPlayers - iUserIndex
if (iMenuOptionMax > PPL_MENU_OPTIONS)
iMenuOptionMax = PPL_MENU_OPTIONS
for (iMenuOption = 0; iMenuOption < iMenuOptionMax; iMenuOption++)
{
get_user_name(g_izUserMenuPlayers[id][iUserIndex++], t_sName, MAX_NAME_LENGTH)
iKeyMask |= (1< iUserIndex)
{
iLen += format(g_sBuffer[iLen], MAX_BUFFER_LENGTH - iLen, "^n9. %L...", id, "MORE")
iKeyMask |= MENU_KEY_9
}
if (iMenuPos > 0)
iLen += format(g_sBuffer[iLen], MAX_BUFFER_LENGTH - iLen, "^n0. %L", id, "BACK")
else
iLen += format(g_sBuffer[iLen], MAX_BUFFER_LENGTH - iLen, "^n0. %L", id, "EXIT")
show_menu(id, iKeyMask, g_sBuffer, -1, "Server Stats")
return PLUGIN_HANDLED
}
//------------------------------------------------------------
// Plugin events
//------------------------------------------------------------
// Reset game stats on game start and restart.
public eventStartGame()
{
read_data(2, t_sText, MAX_TEXT_LENGTH)
if (t_sText[6] == 'w')
{
read_data(3, t_sText, MAX_TEXT_LENGTH)
g_fStartGame = get_gametime() + float(str_to_num(t_sText))
}
else
g_fStartGame = get_gametime()
return PLUGIN_CONTINUE
}
// Round start
public eventStartRound()
{
new iTeam, id, i
if (read_data(1) >= floatround(get_cvar_float("mp_roundtime") * 60.0,floatround_floor))
{
#if defined STATSX_DEBUG
log_amx("Reset round stats")
#endif
// Reset game stats on game start and restart.
if (g_fStartGame > 0.0 && g_fStartGame <= get_gametime())
{
#if defined STATSX_DEBUG
log_amx("Reset game stats")
#endif
g_fStartGame = 0.0
// Clear team and game stats.
for (iTeam = 0; iTeam < MAX_TEAMS; iTeam++)
{
g_izTeamEventScore[iTeam] = 0
for (i = 0; i < 8; i++)
g_izTeamGameStats[iTeam][i] = 0
}
// Clear game stats, incl '0' that is sum of all users.
for (id = 0; id < MAX_PLAYERS; id++)
{
for (i = 0; i < 8; i++)
g_izUserGameStats[id][i] = 0
}
}
// Update team score with "TeamScore" event values and
// clear team round stats.
for (iTeam = 0; iTeam < MAX_TEAMS; iTeam++)
{
g_izTeamScore[iTeam] = g_izTeamEventScore[iTeam]
for (i = 0; i < 8; i++)
g_izTeamRndStats[iTeam][i] = 0
}
// Clear user round stats, incl '0' that is sum of all users.
for (id = 0; id < MAX_PLAYERS; id++)
{
g_izUserRndName[id][0] = 0
for (i = 0; i < 8; i++)
g_izUserRndStats[id][i] = 0
g_fzShowUserStatsTime[id] = 0.0
}
// Allow end round stats and reset end round triggered indicator.
g_iRoundEndTriggered = 0
g_iRoundEndProcessed = 0
g_fShowStatsTime = 0.0
// Update local configuration vars with value in cvars.
get_config_cvars()
}
return PLUGIN_CONTINUE
}
// Reset killer info on round restart.
public eventResetHud(id)
{
new args[1]
args[0] = id
if (g_iPluginMode & MODE_HUD_DELAY)
set_task(0.01, "delay_resethud", 200 + id, args, 1)
else
delay_resethud(args)
return PLUGIN_CONTINUE
}
public delay_resethud(args[])
{
new id = args[0]
new Float:fGameTime
// Show user and score round stats after HUD-reset
#if defined STATSX_DEBUG
log_amx("Reset HUD for #%d", id)
#endif
fGameTime = get_gametime()
show_user_hudstats(id, fGameTime)
show_roundend_hudstats(id, fGameTime)
// Reset round stats
g_izKilled[id][KILLED_KILLER_ID] = 0
g_izKilled[id][KILLED_KILLER_STATSFIX] = 0
g_izShowStatsFlags[id] = -1 // Initialize flags
g_fzShowUserStatsTime[id] = 0.0
g_izUserAttackerDistance[id] = 0
for (new i = 0; i < MAX_PLAYERS; i++)
g_izUserVictimDistance[id][i] = 0
return PLUGIN_CONTINUE
}
// Save killer info on death.
public client_death(killer, victim, wpnindex, hitplace, TK)
{
// Bail out if no killer.
if (!killer)
return PLUGIN_CONTINUE
if (killer != victim)
{
new iaVOrigin[3], iaKOrigin[3]
new iDistance
get_user_origin(victim, iaVOrigin)
get_user_origin(killer, iaKOrigin)
g_izKilled[victim][KILLED_KILLER_ID] = killer
g_izKilled[victim][KILLED_KILLER_HEALTH] = get_user_health(killer)
g_izKilled[victim][KILLED_KILLER_ARMOUR] = get_user_armor(killer)
g_izKilled[victim][KILLED_KILLER_STATSFIX] = 0
iDistance = get_distance(iaVOrigin, iaKOrigin)
g_izUserAttackerDistance[victim] = iDistance
g_izUserVictimDistance[killer][victim] = iDistance
}
g_izKilled[victim][KILLED_TEAM] = get_user_team(victim)
g_izKilled[victim][KILLED_KILLER_STATSFIX] = 1
// Display kill stats for the player if round
// end stats was not processed.
if (!g_iRoundEndProcessed)
kill_stats(victim)
return PLUGIN_CONTINUE
}
// Display hudmessage stats on death.
// This will also update all round and game stats.
// Must be called at least once per round.
kill_stats(id)
{
// Bail out if user stats timer is non-zero,
// ie function already called.
if (g_fzShowUserStatsTime[id] > 0.0)
{
return
}
new team = get_user_team(id)
if (team < 1 || team > 2)
{
return
}
// Flag kill stats displayed for this player.
g_fzShowUserStatsTime[id] = get_gametime()
// Add user death stats to user round stats
new izStats[8], izBody[8]
new iTeam, i
new iKiller
iKiller = g_izKilled[id][KILLED_KILLER_ID]
// Get user's team (if dead use the saved team)
if (iKiller)
iTeam = g_izKilled[id][KILLED_TEAM] - 1
else
iTeam = get_user_team(id) - 1
get_user_name(id, g_izUserRndName[id], MAX_NAME_LENGTH)
if (get_user_rstats(id, izStats, izBody))
{
// Update user's team round stats
if (iTeam >= 0 && iTeam < MAX_TEAMS)
{
for (i = 0; i < 8; i++)
{
g_izTeamRndStats[iTeam][i] += izStats[i]
g_izTeamGameStats[iTeam][i] += izStats[i]
g_izUserRndStats[0][i] += izStats[i]
g_izUserGameStats[0][i] += izStats[i]
}
}
// Update user's round stats
if (g_izUserUserID[id] == get_user_userid(id))
{
for (i = 0; i < 8; i++)
{
g_izUserRndStats[id][i] += izStats[i]
g_izUserGameStats[id][i] += izStats[i]
}
} else {
g_izUserUserID[id] = get_user_userid(id)
for (i = 0; i < 8; i++)
{
g_izUserRndStats[id][i] = izStats[i]
g_izUserGameStats[id][i] = izStats[i]
}
}
} // endif (get_user_rstats())
// Report stats in the chat section, if player is killed.
if (KillerChat && iKiller && iKiller != id)
{
if (format_kill_ainfo(id, iKiller, g_sBuffer))
{
colorChat(id, CHATCOLOR_GREEN, "* %s", g_sBuffer)
format_kill_vinfo(id, iKiller, g_sBuffer)
}
colorChat(id, CHATCOLOR_GREEN, "* %s", g_sBuffer)
}
// Display player stats info.
#if defined STATSX_DEBUG
log_amx("Kill stats for #%d", id)
#endif
show_user_hudstats(id, 0.0)
}
public award_cash()
{
if(!get_pcvar_num(pcvar_award) || !get_pcvar_num(pcvar_award_cash))
{
return PLUGIN_HANDLED
}
new izStats[8], izBody[8]
new szPlayers[32], szName[MAX_NAME_LENGTH], iNumPlayers
new iAwardCash_Bonus, iAwardCash, iPlace, iAwardChance
get_players(szPlayers, iNumPlayers)
for(new i = 0; i < 30; i++)
{
iAwardChance = random_num(0, floatround(get_pcvar_float(pcvar_award_chance) * 10.0))
get_stats(i, izStats, izBody, t_sName, MAX_NAME_LENGTH)
for(new k = 0; k < iNumPlayers; k++)
{
get_user_name(szPlayers[k], szName, MAX_NAME_LENGTH - 1)
if(equal(szName, t_sName))
{
if(get_pcvar_float(pcvar_award_chance))
{
if(!iAwardChance)
{
continue
}
}
if (0 < (i + 1) <= 10) iPlace = 1
if (10 < (i + 1) <= 20) iPlace = 2
if (20 < (i + 1) <= 30) iPlace = 3
iAwardCash = get_pcvar_num(pcvar_award_cash) / iPlace
iAwardCash_Bonus = floatround(get_pcvar_num(pcvar_award_cash) * (((effec(izStats) + accuracy(izStats)) / 2) / 100))
if((iAwardCash + iAwardCash_Bonus + cs_get_user_money(szPlayers[k])) >= 16000)
{
cs_set_user_money(szPlayers[k], 16000)
}
else
{
cs_set_user_money(szPlayers[k], (iAwardCash + iAwardCash_Bonus + cs_get_user_money(szPlayers[k])))
}
if(get_pcvar_num(pcvar_award_anonce_chat))
{
if(cs_get_user_team(szPlayers[k]) != CS_TEAM_SPECTATOR && get_pcvar_num(pcvar_pt_bonus_anonce))
{
colorChat(szPlayers[k], CHATCOLOR_GREEN, "%L", LANG_SERVER, "MM_AWARD", iAwardCash, iAwardCash_Bonus, i + 1)
}
}
}
}
}
return PLUGIN_CONTINUE
}
public time_play_bonus()
{
if(!get_pcvar_num(pcvar_pt_bonus) || !get_pcvar_num(pcvar_pt))
{
return PLUGIN_HANDLED
}
new iCash, iTmpCash, iDay, szDay[5]
new szPlayers[32], iNum, szName[32]
new szKey[50], szData[128]
new iCash_1h = get_pcvar_num(pcvar_pt_bonus_1h)
new iCash_2h = get_pcvar_num(pcvar_pt_bonus_2h)
new iCash_3h = get_pcvar_num(pcvar_pt_bonus_3h)
new iCash_4h = get_pcvar_num(pcvar_pt_bonus_4h)
new iCash_5h = get_pcvar_num(pcvar_pt_bonus_5h)
format_time(szDay, sizeof(szDay) - 1, "%d")
iDay = str_to_num(szDay)
get_players(szPlayers, iNum)
for(new i = 0; i < iNum; i++)
{
if(cs_get_user_team(szPlayers[i]) == CS_TEAM_SPECTATOR)
{
continue
}
get_user_name(szPlayers[i], szName, sizeof(szName) - 1)
formatex(szKey, sizeof(szKey) - 1, "TODAY_PLAY#%s", szName)
nvault_get(g_Vault2, szKey, szData, sizeof(szData) - 1)
new szToday[5], szTodayPlay[256]
parse(szData, szToday, sizeof(szToday), szTodayPlay, sizeof(szTodayPlay))
if(iDay != str_to_num(szToday))
{
formatex(szData, sizeof(szData) - 1, "%d 0", iDay)
nvault_set(g_Vault2, szKey, szData)
continue
}
new iTime = (get_user_time(szPlayers[i]) + str_to_num(szTodayPlay)) / MM_HOUR
iCash = cs_get_user_money(szPlayers[i])
if(!iTime)
{
continue
}
if(iTime == 1 && iCash_1h != 0)
{
if((iCash + iCash_1h) > 16000)
{
cs_set_user_money(szPlayers[i], 16000)
}
else
{
cs_set_user_money(szPlayers[i], iCash + iCash_1h)
}
iTmpCash = iCash_1h
}
if(iTime == 2 && iCash_2h != 0)
{
if((iCash + iCash_2h) > 16000)
{
cs_set_user_money(szPlayers[i], 16000)
}
else
{
cs_set_user_money(szPlayers[i], iCash + iCash_2h)
}
iTmpCash = iCash_2h
}
if(iTime == 3 && iCash_3h != 0)
{
if((iCash + iCash_3h) > 16000)
{
cs_set_user_money(szPlayers[i], 16000)
}
else
{
cs_set_user_money(szPlayers[i], iCash + iCash_3h)
}
iTmpCash = iCash_3h
}
if(iTime == 4 && iCash_4h != 0)
{
if((iCash + iCash_4h) > 16000)
{
cs_set_user_money(szPlayers[i], 16000)
}
else
{
cs_set_user_money(szPlayers[i], iCash + iCash_4h)
}
iTmpCash = iCash_4h
}
if(iTime > 5 && iCash_5h != 0)
{
if((iCash + iCash_5h) > 16000)
{
cs_set_user_money(szPlayers[i], 16000)
}
else
{
cs_set_user_money(szPlayers[i], iCash + iCash_5h)
}
iTmpCash = iCash_5h
}
colorChat(szPlayers[i], CHATCOLOR_GREEN, "%L", LANG_SERVER, "MM_TIME_PLAY_BONUS", iTime, iTmpCash)
}
return PLUGIN_HANDLED
}
public eventEndRound()
{
award_cash()
day_stat()
time_play_bonus()
// Update local configuration vars with value in cvars.
get_config_cvars()
// If first end round event in the round, calculate team score.
if (!g_iRoundEndTriggered)
{
read_data(2, t_sText, MAX_TEXT_LENGTH)
if (t_sText[7] == 't') // Terrorist wins
g_izTeamScore[0]++
else if (t_sText[7] == 'c') // CT wins
g_izTeamScore[1]++
}
set_task(0.3, "ERTask", 997)
return PLUGIN_CONTINUE
}
public client_disconnect(id)
{
if(get_pcvar_num(pcvar_pt))
{
played_time(id)
}
}
public played_time(id)
{
new szPlayers[32], iNum, szKey[32], szData[128], szName[32]
new szMinute[5], szHour[5], szDay[5], szMonth[5], szYear[5]
new iMinute, iHour, iDay, iMonth, iYear
format_time(szMinute, sizeof(szMinute) - 1, "%M")
format_time(szHour, sizeof(szHour) - 1, "%H")
format_time(szDay, sizeof(szDay) - 1, "%d")
format_time(szMonth, sizeof(szMonth) - 1, "%m")
format_time(szYear, sizeof(szYear) - 1, "%Y")
iMinute = str_to_num(szMinute)
iHour = str_to_num(szHour)
iDay = str_to_num(szDay)
iMonth = str_to_num(szMonth)
iYear = str_to_num(szYear)
get_players(szPlayers, iNum)
get_user_name(id, szName, sizeof(szName) - 1)
formatex(szKey, sizeof(szKey) - 1, "PLAYED_TIME#%s", szName)
nvault_get(g_Vault2, szKey, szData, sizeof(szData) - 1)
new iTime = str_to_num(szData)
formatex(szData, sizeof(szData) - 1, "%d", iTime + (get_user_time(id)))
nvault_set(g_Vault2 , szKey, szData)
formatex(szKey, sizeof(szKey) - 1, "LAST_VISIT#%s", szName)
formatex(szData, sizeof(szData) - 1, "%d %d %d %d %d", iDay, iMonth, iYear,iHour, iMinute)
nvault_set(g_Vault2 , szKey, szData)
formatex(szKey, sizeof(szKey) - 1, "TODAY_PLAY#%s", szName)
nvault_get(g_Vault2, szKey, szData, sizeof(szData) - 1)
new szToday[5], szTodayPlay[256]
parse(szData, szToday, sizeof(szToday), szTodayPlay, sizeof(szTodayPlay))
if(str_to_num(szToday) != iDay)
{
formatex(szData, sizeof(szData) - 1, "%d 0", iDay)
nvault_set(g_Vault2 , szKey, szData)
}
else
{
formatex(szData, sizeof(szData) - 1, "%d %d", iDay, (get_user_time(id) + str_to_num(szTodayPlay)))
nvault_set(g_Vault2 , szKey, szData)
}
}
public day_stat()
{
if(!get_pcvar_num(pcvar_day))
{
return PLUGIN_HANDLED
}
new g_szData[12], Players[32], iNum, i
new szDate[5], szTime[5], szKey[6]
format_time(szDate, sizeof(szDate) - 1, "%d")
format_time(szTime, sizeof(szTime) - 1, "%H")
i = str_to_num(szTime)
nvault_get(g_Vault , "DAY" , g_szData , 11)
if(str_to_num(g_szData) != str_to_num(szDate))
{
day_stat_clear()
}
formatex(szKey, 5, "%d-h", i)
nvault_get(g_Vault , szKey , g_szData , 11 )
get_players(Players, iNum)
if(str_to_num(g_szData) < iNum)
{
new szStr[5]
formatex(szStr, 4, "%d", iNum)
formatex(szKey, 5, "%d-h", i)
nvault_set(g_Vault , szKey , szStr)
}
return PLUGIN_CONTINUE
}
public day_stat_clear()
{
new szDate[5], szKey[6]
format_time(szDate, sizeof(szDate) - 1, "%d")
for(new i = 0; i < 24; i++)
{
formatex(szKey, 5, "%d-h", i)
nvault_set(g_Vault , szKey , "0")
}
nvault_set(g_Vault , "DAY" , szDate)
return PLUGIN_CONTINUE
}
public ERTask()
{
// Flag round end triggered.
g_iRoundEndTriggered = 1
// Display round end stats to all players.
endround_stats()
}
endround_stats()
{
// Bail out if end round stats has already been processed
// or round end not triggered.
if (g_iRoundEndProcessed || !g_iRoundEndTriggered)
return
new iaPlayers[32], iPlayer, iPlayers, id
get_players(iaPlayers, iPlayers)
// Display attacker & victim list for all living players.
// This will also update all round and game stats for all players
// not killed.
#if defined STATSX_DEBUG
log_amx("End round stats")
#endif
for (iPlayer = 0; iPlayer < iPlayers; iPlayer++)
{
id = iaPlayers[iPlayer]
if (g_fzShowUserStatsTime[id] == 0.0)
{
kill_stats(id)
}
}
g_sAwardAndScore[0] = 0
// Create round awards.
if (ShowMostDisruptive)
add_most_disruptive(g_sAwardAndScore)
if (ShowBestScore)
add_best_score(g_sAwardAndScore)
// Create round score.
// Compensate HUD message if awards are disabled.
if (ShowTeamScore || ShowTotalStats)
{
if (ShowMostDisruptive && ShowBestScore)
add(g_sAwardAndScore, MAX_BUFFER_LENGTH, "^n^n")
else if (ShowMostDisruptive || ShowBestScore)
add(g_sAwardAndScore, MAX_BUFFER_LENGTH, "^n^n^n^n")
else
add(g_sAwardAndScore, MAX_BUFFER_LENGTH, "^n^n^n^n^n^n")
if (ShowTeamScore)
add_team_score(g_sAwardAndScore)
if (ShowTotalStats)
add_total_stats(g_sAwardAndScore)
}
save_team_chatscore()
// Get and save round end stats time.
g_fShowStatsTime = get_gametime()
// Display round end stats to all players.
for (iPlayer = 0; iPlayer < iPlayers; iPlayer++)
{
id = iaPlayers[iPlayer]
show_roundend_hudstats(id, 0.0)
}
// Flag round end processed.
g_iRoundEndProcessed = 1
}
public eventTeamScore()
{
new sTeamID[1 + 1], iTeamScore
read_data(1, sTeamID, 1)
iTeamScore = read_data(2)
g_izTeamEventScore[(sTeamID[0] == 'C') ? 1 : 0] = iTeamScore
return PLUGIN_CONTINUE
}
public eventIntermission()
{
if (EndPlayer || EndTop15)
set_task(1.0, "end_game_stats", 900)
}
public end_game_stats()
{
new iaPlayers[32], iPlayer, iPlayers, id
if (EndPlayer)
{
get_players(iaPlayers, iPlayers)
for (iPlayer = 0; iPlayer < iPlayers; iPlayer++)
{
id = iaPlayers[iPlayer]
if (!g_izStatsSwitch[id])
continue // Do not show any stats
cmdStatsMe(iaPlayers[iPlayer])
}
}
else if (EndTop15)
{
get_players(iaPlayers, iPlayers)
format_place1(g_sBuffer)
for (iPlayer = 0; iPlayer < iPlayers; iPlayer++)
{
id = iaPlayers[iPlayer]
if (!g_izStatsSwitch[id])
continue // Do not show any stats
new szMotdTitle[30]
formatex(szMotdTitle, charsmax(szMotdTitle), "1 - %L",id, "MM_PLACE")
show_motd(iaPlayers[iPlayer], g_sBuffer, szMotdTitle)
}
}
return PLUGIN_CONTINUE
}
public eventSpecMode(id)
{
new sData[12]
read_data(2, sData, 11)
g_izSpecMode[id] = (sData[10] == '2')
return PLUGIN_CONTINUE
}
public eventShowRank(id)
{
if (SpecRankInfo && g_izSpecMode[id])
{
new iPlayer = read_data(2)
if (is_user_connected(iPlayer))
{
new izStats[8], izBody[8]
new iRankPos, iRankMax
get_user_name(iPlayer, t_sName, MAX_NAME_LENGTH)
iRankPos = get_user_stats(iPlayer, izStats, izBody)
iRankMax = get_statsnum()
set_hudtype_specmode()
ShowSyncHudMsg(id, g_HudSync_SpecInfo, "%L", id, "X_RANK_IS", t_sName, iRankPos, iRankMax)
}
}
return PLUGIN_CONTINUE
}
public client_connect(id)
{
if (ShowStats)
{
get_user_info(id, "_amxstatsx", t_sText, MAX_TEXT_LENGTH)
g_izStatsSwitch[id] = (t_sText[0]) ? str_to_num(t_sText) : -1
}
else
g_izStatsSwitch[id] = 0
g_izKilled[id][KILLED_KILLER_ID] = 0
g_izKilled[id][KILLED_KILLER_STATSFIX] = 0
g_izShowStatsFlags[id] = 0 // Clear all flags
g_fzShowUserStatsTime[id] = 0.0
return PLUGIN_CONTINUE
}
new iEffect, iColor_R, iColor_G, iColor_B, g_pcvarColor
new Float:iFadeIn, Float:iFadeOut, Float:iHoldTime, Float:iPos_X, Float:iPos_Y
public StatsMarquee(id)
{
if(!get_pcvar_num(pcvar_statsmarquee))
{
return PLUGIN_HANDLED
}
new izStats[8], izBody[8]
get_stats(marquee_iID, izStats, izBody, m_sName, MAX_NAME_LENGTH)
switch(get_pcvar_num(pcvar_statsmarquee_position))
{
case 1:
{
iPos_X = 0.7
iPos_Y = 0.05
}
case 2:
{
iPos_X = 0.02
iPos_Y = 0.7
}
case 3:
{
iPos_X = 0.02
iPos_Y = 0.2
}
default:
{
iPos_X = 0.7
iPos_Y = 0.78
}
}
g_pcvarColor = get_pcvar_num(pcvar_statsmarquee_color)
if(g_pcvarColor == 11)
{
g_pcvarColor = random_num(1, 9)
}
switch(g_pcvarColor)
{
case 1:
{
// RED
iColor_R = 255
iColor_G = 0
iColor_B = 0
}
case 2:
{
// GREEN
iColor_R = 0
iColor_G = 255
iColor_B = 0
}
case 3:
{
// BLUE
iColor_R = 0
iColor_G = 0
iColor_B = 255
}
case 4:
{
// YELLOW
iColor_R = 255
iColor_G = 255
iColor_B = 0
}
case 5:
{
// CYAN
iColor_R = 0
iColor_G = 255
iColor_B = 255
}
case 6:
{
// MAGENTA
iColor_R = 255
iColor_G = 0
iColor_B = 255
}
case 7:
{
// ORANGE
iColor_R = 255
iColor_G = 128
iColor_B = 0
}
case 8:
{
// VIOLET
iColor_R = 0
iColor_G = 128
iColor_B = 255
}
case 9:
{
// GRAY
iColor_R = 100
iColor_G = 100
iColor_B = 100
}
case 10:
{
// RANDOM
iColor_R = random_num(0, 255)
iColor_G = random_num(0, 255)
iColor_B = random_num(0, 255)
}
default:
{
}
}
if(get_pcvar_num(pcvar_style))
{
switch(marquee_iID)
{
case 0:
{
formatex(marquee_place, charsmax(marquee_place), "%L", id, "MM_FIRSTPLACE")
if(!g_pcvarColor)
{
iColor_R = 0
iColor_G = 255
iColor_B = 0
}
}
case 10:
{
formatex(marquee_place, charsmax(marquee_place), "%L", id, "MM_SECONDPLACE")
if(!g_pcvarColor)
{
iColor_R = 255
iColor_G = 255
iColor_B = 0
}
}
case 20:
{
formatex(marquee_place, charsmax(marquee_place), "%L", id, "MM_THIRDPLACE")
if(!g_pcvarColor)
{
iColor_R = 255
iColor_G = 0
iColor_B = 0
}
}
}
}
else
{
formatex(marquee_place, charsmax(marquee_place), "%L", id, "SERVER_STATS")
}
switch(get_pcvar_num(pcvar_statsmarquee_effect))
{
case 1:
{
iEffect = 1
iFadeIn = 0.2
iFadeOut = 0.2
iHoldTime = 5.8
}
case 2:
{
iEffect = 2
iFadeIn = 0.05
iFadeOut = 0.5
iHoldTime = 2.0
}
default:
{
iEffect = 0
iFadeIn = 0.5
iFadeOut = 0.5
iHoldTime = 5.5
}
}
set_hudmessage(iColor_R, iColor_G, iColor_B, iPos_X, iPos_Y, iEffect, 0.1, iHoldTime, iFadeIn, iFadeOut, -1)
show_hudmessage(0,"%L", id, "MM_MARQUEE" , marquee_place, m_sName, marquee_iID + 1, izStats[0], izStats[1])
marquee_iID++
if(marquee_iID >= 30)
{
marquee_iID = 0
set_task(300.0, "StatsMarquee", 0, _, 0)
}
else
{
set_task(6.0, "StatsMarquee", 0, _, 0)
}
return PLUGIN_CONTINUE
}
/* Thanks for Damaged Soul for finding the information on how to do this.
http://forums.alliedmods.net/showthread.php?p=79604#post79604
This is code snippets I find useful.
^x01 is Yellow
^x03 is Team Color. Ie. Red (Terrorist) or blue (Counter-Terrorist) or grey (SPECTATOR or UNASSIGNED).
^x04 is Green
The colors red, grey, and blue can't be used on the same line. This is not possible at all to do.
Also there are limitation to using Red or Grey while on the TEAM CT.
You would have to do for example if they were on CT.
ColorChat(0, RED, "%s, ^x01This color is yellow. ^x03This color is red. ^x04This color is green.);
You have to set the Type to RED because of certain messages that need to be sent out so a person on the
team CT can be sent red colors.
Some important information. When using MSG_ALL to send color message to all clients and your going to use blue/grey/red
color sending the TeamInfo Message to tempoary change the player team to achieve this. You must send that message in MSG_ALL
also. If your going to only send it to one person. You need to MSG_ONE on TeamInfo and SayText. (Thanks to CheapSuit I was able
to see their was an error and fix it).
*/
colorChat(id, ChatColor:color, const msg[], {Float,Sql,Result,_}:...)
{
new team, index, MSG_Type
new bool:teamChanged = false
static message[192]
switch(color)
{
case CHATCOLOR_NORMAL: // Normal
{
message[0] = 0x01;
}
case CHATCOLOR_GREEN: // Green
{
message[0] = 0x04;
}
default: // Grey, Red, Blue
{
message[0] = 0x03;
}
}
vformat(message[1], 190, msg, 4);
replace_all(message, 190, "$g", "^x04")
replace_all(message, 190, "$n", "^x01")
replace_all(message, 190, "$t", "^x03")
if(id == 0)
{
index = findAnyPlayer();
MSG_Type = MSG_ALL;
}
else
{
index = id;
MSG_Type = MSG_ONE;
}
if(index != 0)
{
team = get_user_team(index);
if(color == CHATCOLOR_RED && team != 1)
{
messageTeamInfo(index, MSG_Type, g_TeamName[1])
teamChanged = true
}
else
if(color == CHATCOLOR_BLUE && team != 2)
{
messageTeamInfo(index, MSG_Type, g_TeamName[2])
teamChanged = true
}
else
if(color == CHATCOLOR_GREY && team != 0)
{
messageTeamInfo(index, MSG_Type, g_TeamName[0])
teamChanged = true
}
messageSayText(index, MSG_Type, message);
if(teamChanged)
{
messageTeamInfo(index, MSG_Type, g_TeamName[team])
}
}
}
messageSayText(id, type, message[])
{
message_begin(type, g_msgSayText, _, id)
write_byte(id)
write_string(message)
message_end()
}
messageTeamInfo(id, type, team[])
{
message_begin(type, g_msgTeamInfo, _, id)
write_byte(id)
write_string(team)
message_end()
}
findAnyPlayer()
{
static players[32], inum, pid
get_players(players, inum, "ch")
for (new a = 0; a < inum; a++)
{
pid = players[a]
if(is_user_connected(pid))
return pid
}
return 0
}
/*
* С уважением, Wildness Team (с) 2012
*/
Данная иконка означает, что плагин был проверен администрацией хостинга на тестовом сервере, и проблем с ним не было выявлено. Рекомендуем ставить исключительно проверенные плагины.
Плагин загружен на сервер, но проверка еще не была проведена.
| |
|
| | |