Senior Member
|
08-05-2023
, 09:18
Re: set_user_flags &
|
#11
|
Quote:
Originally Posted by lexzor
Code:
#include <amxmodx>
#include <amxmisc>
#include <csstats>
#define VIP_FLAG "bst"
#define SET_FLAG(%0) (set_user_flags(%0, read_flags(VIP_FLAG)))
#define REMOVE_FLAG(%1) (remove_user_flags(%1, read_flags(VIP_FLAG)))
static const RANK_TO_RETRIEVE = 10
enum OBJECTIVES
{
TOTAL_DEFUSIONS ,
BOMBS_DEFUSED,
BOMBS_PLANTED,
BOMB_EXPLOSIONS,
}
static const OBJECTIVES_NAMES[OBJECTIVES][] =
{
"Total defusion:",
"Total bomb defused:",
"Total bomb planted:",
"Total bomb explosions:",
}
new bool:g_bIsVIP[MAX_PLAYERS + 1]
public plugin_init()
{
//start task
set_task(60.0, "FindPlayers", .flags = "b")
}
public FindPlayers()
{
new iRank = 0,
szAuthID[64],
iObjectives[STATSX_MAX_OBJECTIVE],
szOutput[192],
iLen
new iPlayers[MAX_PLAYERS], iNum
get_players(iPlayers, iNum, "ch")
//remove flags for everyone
for(new i, iPlayer; i < iNum; i++)
{
iPlayer = iPlayers[i]
if(g_bIsVIP[iPlayer] && !is_user_admin(iPlayer))
{
server_print("User %n is not a VIP anymore", iPlayer)
g_bIsVIP[iPlayer] = false;
REMOVE_FLAG(iPlayer)
}
}
//get stats by rank num and check if user is connected
do {
get_stats2(iRank, iObjectives, szAuthID, charsmax(szAuthID))
iLen = formatex(szOutput, charsmax(szOutput), "%i. %s ", iRank, szAuthID )
for(new OBJECTIVES:iObjNum = TOTAL_DEFUSIONS; iObjNum < OBJECTIVES; iObjNum++)
{
iLen += formatex(szOutput[iLen], charsmax(szOutput), ", %s %i", OBJECTIVES_NAMES[iObjNum], iObjectives[_:iObjNum])
}
server_print("%s", szOutput)
//check user func
CheckUser(szAuthID)
iRank++
}
while (iRank <= RANK_TO_RETRIEVE)
}
CheckUser(const auth[])
{
new id = find_player_ex(FindPlayer_MatchAuthId, auth)
//if user is online, set flags
if(id && !is_user_admin(id))
{
SET_FLAG(id)
g_bIsVIP[id] = true
server_print("User %n is now a VIP!", id)
}
}
public client_connect(id)
{
g_bIsVIP[id] = false
}
next time post your code in a way people can actually compile it
nobody will spend time to resolve your code if you don't bother yourself to give a compilable version
|
The full code is here
PHP Code:
#include <amxmodx>
#include <amxmisc>
#include <cellarray>
#include <fvault>
#include <hamsandwich>
#include <wm_play>
#include <csstats>
#include <jctf>
#define TASKID_WARN_PRUNE 10099
#define LOG "log.log"
#define PLUGIN "Top 15 bandeiras"
#define VERSION "1.3"
#define AUTHOR "Cold"
#define PREFIX_CHAT "^4«Express»^1 "
enum _:xFvaultData
{
xAuthId[64],
xDataTop[128]
}
enum _:PlayerData
{
pl_szAuthid[MAX_AUTHID_LENGTH],
}
enum _:xMaxCvars
{
CVAR_LIST_RANK_TYPE,
CVAR_TOP15_SHOW_AMOUNT,
CVAR_MOTD_CSS,
CVAR_PRUNE,
CVAR_PREFIXCHAT,
CVAR_FULL_TO_SHOW,
CVAR_MIN_PLAYERS,
CVAR_VIP_PLAYER,
CVAR_FLAGS_GIVE[12]
}
new xCvars[xMaxCvars]
new xFlagDelivery[33], xFlagCapturated[33], xFlagRecuperated[33], xMotd[2000], Player[MAX_PLAYERS + 1][PlayerData];
new bool:g_bTop[33], bool:isAdmin[33]
new szLeFlags[32]
new db_top15_data[] = "db_top15_flags"
public plugin_init()
{
register_plugin(PLUGIN, AUTHOR, VERSION)
xCvars[CVAR_TOP15_SHOW_AMOUNT] = create_cvar("csr_top15f_show_amount", "10", .has_min = true, .min_val = 5.0, .has_max = true, .max_val = 15.0)
xCvars[CVAR_PRUNE] = create_cvar("csr_top15f_prune_days", "0") // Tempo Ate Rank Reseta
xCvars[CVAR_FULL_TO_SHOW] = create_cvar("csr_top15f_full_to_show", "0") // Shows MODT only complete
xCvars[CVAR_MIN_PLAYERS] = create_cvar("csr_top15f_min_players", "0") // Minimum number of players for the ranking to be activated
xCvars[CVAR_VIP_PLAYER] = create_cvar("cx_vip_players", "1") // How much player rank can be VIP
xCvars[CVAR_FLAGS_GIVE] = create_cvar("cx_vip_flags_give", "bst") // Which VIP Flags do you receive
set_task(60.0, "CheckPlayerRank", .flags = "b")
register_clcmd("amx_resetflag", "xResetTop15")
xRegisterSay("topflag", "xShowMotdTop")
xRegisterSay("topflag", "xShowMotdTop")
xRegisterSay("topb", "xShowMotdTop")
xRegisterSay("pbtop", "xShowMotdTop")
xRegisterSay("rankpb", "xSkillTop")
xRegisterSay("rankb", "xSkillTop")
xRegisterSay("pbrank", "xSkillTop")
}
public xResetTop15(id)
{
if(!(get_user_flags(id) && ADMIN_CFG))
{
console_print(id, "Voce nao tem acesso a este comando!")
return PLUGIN_HANDLED
}
fvault_clear(db_top15_data)
new i
for(i = 1; i <= MaxClients; i++)
{
xFlagDelivery[i] = 0
xFlagRecuperated[i] = 0
xFlagCapturated[i] = 0
}
console_print(id, "***********************************")
console_print(id, "-> TOP15 ZERADO !!!")
console_print(id, "-> TOP15 ZERADO !!!")
console_print(id, "-> TOP15 ZERADO !!!")
console_print(id, "***********************************")
return PLUGIN_HANDLED
}
public xSkillTop(id)
{
client_print_color(id, print_team_default, "%s ^1Sua posição é: ^4%s ^1de ^4%s ^1com ^4%s ^1bandeiras entregues.", PREFIX_CHAT, xAddPoint(xNtvGetUserPosTop(id)), xAddPoint(xNtvGetTotalTop()), xAddPoint(xFlagDelivery[id]))
}
public plugin_cfg()
{
if(get_pcvar_num(xCvars[CVAR_PRUNE]))
{
new prune_t15days = get_systime() - (get_pcvar_num(xCvars[CVAR_PRUNE]) * 24 * 60 * 60)
fvault_prune(db_top15_data, _, prune_t15days)
}
}
public client_disconnected(id)
{
Player[id][pl_szAuthid][0] = 0;
xFlagDelivery[id] = false
xFlagCapturated[id] = false
xFlagRecuperated[id] = false
xSaveData(id);
}
public client_putinserver(id)
{
if(is_user_admin(id))
isAdmin[id] = true
g_bTop[id] = false
if(!Player[id][pl_szAuthid][0])
{
set_task(1.5, "client_putinserver", id);
}
get_flags(get_user_flags(id), szLeFlags, charsmax(szLeFlags));
//server_print("Player (%d) Flags: %s", id, szLeFlags);/*skill issue*/
set_task(4.0, "CheckPlayerRank", id)
set_task(1.0, "xSaveData", id, _, _, "b")
xLoadData(id)
}
public client_authorized(id, const authid[])
{
copy(Player[id][pl_szAuthid], charsmax(Player[][pl_szAuthid]), authid);
}
public CheckPlayerRank(id)
{
if(!is_user_connected(id))
return PLUGIN_HANDLED
// SET VIP ACESS
new szFlags[64]
get_pcvar_string(xCvars[CVAR_FLAGS_GIVE], szFlags, 63)
new g_Flag_z, iFlag_Vip
g_Flag_z = read_flags("z")
remove_user_flags(id, g_Flag_z)
iFlag_Vip = read_flags(szFlags)
set_user_flags(id, iFlag_Vip)
new iStats[8], iBodyHits[8], iRank, szName[MAX_NAME_LENGTH]
new iPlayers[MAX_PLAYERS], iNum
get_players(iPlayers, iNum, "chi")
for(new i = 0, iPlayer; i < iNum; i++)
{
iPlayer = iPlayers[i]
if(!is_user_connected(iPlayer))
continue;
if(1 <= iRank <= get_pcvar_num(xCvars[CVAR_VIP_PLAYER]))
{
get_user_name(iPlayer, szName, charsmax(szName))
if(!g_bTop[iPlayer])
{
if(get_user_flags(iPlayer) & ADMIN_USER)
{
remove_user_flags(iPlayer, ADMIN_USER)
}
server_print("Do %s have the flags? [%s]", szName,bool:(get_user_flags(iPlayer) & read_flags(szFlags)) ? "Yes" : "No")
}
else if(g_bTop[iPlayer])
{
}
}
else
{
server_print("User %s is already top", szName)
}
iRank = get_user_stats(id, iStats, iBodyHits)
}
return PLUGIN_HANDLED
}
public jctf_flag(iEvent, id, iFlagTeam, bool:bAssist)
{
switch(iEvent)
{
case FLAG_RETURNED:
{
if(!bAssist)
{
xFlagRecuperated [id]++
}
}
case FLAG_CAPTURED:
{
if(!bAssist)
{
xFlagCapturated [id]++
}
}
case FLAG_STOLEN:
{
if(!bAssist)
{
xFlagDelivery [id]++
}
}
}
}
public xNtvFilter(const name[], index, trap)
{
if(!trap)
return PLUGIN_HANDLED
return PLUGIN_CONTINUE
}
public xSaveData(id)
{
if(get_playersnum(1) < get_pcvar_num(xCvars[CVAR_MIN_PLAYERS]) || is_user_alive(id))
return PLUGIN_HANDLED
if(is_user_bot(id) || is_user_hltv(id) || !Player[id][pl_szAuthid][0]) return PLUGIN_HANDLED;
{
static xData[500], xUserName[32]
get_user_name(id, xUserName, charsmax(xUserName))
formatex(xData, charsmax(xData), "%d %d %d ^"%s^"", xFlagDelivery[id], xFlagRecuperated[id], xFlagCapturated[id], xUserName)
fvault_set_data(db_top15_data, Player[id][pl_szAuthid], xData)
}
return PLUGIN_CONTINUE
}
public xLoadData(id)
{
if(is_user_bot(id) || is_user_hltv(id)) return PLUGIN_HANDLED;
static xData[500]
static xEnt[10], xRc[10], xCap[10], xIgnoreCase[32]
if(fvault_get_data(db_top15_data, Player[id][pl_szAuthid], xData, charsmax(xData)))
{
parse(xData, xEnt, charsmax(xEnt), xRc, charsmax(xRc), xCap, charsmax(xCap), xIgnoreCase, charsmax(xIgnoreCase))
xFlagDelivery[id] = str_to_num(xEnt)
xFlagRecuperated[id] = str_to_num(xRc)
xFlagCapturated[id] = str_to_num(xCap)
}
set_task(35.0, "xWarnTopPrune", id+TASKID_WARN_PRUNE, _, _, "a", 2)
xSaveData(id)
return PLUGIN_CONTINUE
}
public xWarnTopPrune(id)
{
id -= TASKID_WARN_PRUNE;
if(!is_user_connected(id))
{
remove_task(id+TASKID_WARN_PRUNE)
return
}
client_print_color(id, print_team_default, "%s ^4A^3T^4E^3N^4Ç^3Ã^4O ^3Não entrar no servidor por ^4%d ^1dias ^3seu rank de facas será resetado automaticamente.", PREFIX_CHAT, get_pcvar_num(xCvars[CVAR_PRUNE]))
}
public xShowMotdTop(id)
{
xMotd[0] = EOS
xMakeTop15(id)
new xxx[52]
formatex(xxx, charsmax(xxx), "TOP %d BANDEIRAS", get_pcvar_num(xCvars[CVAR_TOP15_SHOW_AMOUNT]))
show_motd(id, xMotd, xxx)
}
public xMakeTop15(id)
{
new xLen = 0
if(xNtvGetTotalTop() < 15 && get_pcvar_num(xCvars[CVAR_FULL_TO_SHOW]))
{
xLen = formatex(xMotd, charsmax(xMotd), "<html><head><meta charset=^"UTF-8^"><style>*{margin:0px;}body{background:#000;color:#D53D04;font-family:Arial;font-size:30px;margin-top:25px;}</style></head>")
xLen += formatex(xMotd[xLen], charsmax(xMotd)-xLen, "<body><center>O TOP10 ainda não está completo.<br>Aguarde....</center>")
xLen += formatex(xMotd[xLen], charsmax(xMotd)-xLen, "</table></body></html>")
return
}
xLen = formatex(xMotd, charsmax(xMotd), "<html><head><meta charset=^"UTF-8^"><link rel=stylesheet href=topbandeira.css></head>")
xLen += formatex(xMotd[xLen], charsmax(xMotd)-xLen, "<body><table><tr id='c'><th>#</th><th>Jogador</th><th>Entregues</th><th>Recuperadas</th><th>Capturadas</th></tr>")
new Array:aKey = ArrayCreate(64)
new Array:aData = ArrayCreate(128)
new Array:aAll = ArrayCreate(xFvaultData)
fvault_load(db_top15_data, aKey, aData)
new iArraySize = ArraySize(aKey)
new i, xEnt[10], xRc[10], xCap[10], xName[22], Data[xFvaultData]
for(i = 0; i < iArraySize; i++)
{
ArrayGetString(aKey, i, Data[xAuthId], charsmax(Data[xAuthId]))
ArrayGetString(aData, i, Data[xDataTop], charsmax(Data[xDataTop]))
ArrayPushArray(aAll, Data)
}
ArraySort(aAll, "xSortData")
//new xMaxColors = sizeof(xTopColors)
new iSize = clamp(iArraySize, 0, get_pcvar_num(xCvars[CVAR_TOP15_SHOW_AMOUNT]))
for(i = 0; i < iSize; i++)
{
ArrayGetArray(aAll, i, Data)
fvault_get_data(db_top15_data, Data[xAuthId], Data[xDataTop], charsmax(Data[xDataTop]))
parse(Data[xDataTop], xEnt, charsmax(xEnt), xRc, charsmax(xRc), xCap, charsmax(xCap), xName, charsmax(xName))
replace_all(xName, charsmax(xName), "<", "[")
replace_all(xName, charsmax(xName), ">", "]")
xLen += formatex(xMotd[xLen], charsmax(xMotd)-xLen, "<tr id='a'><td>%d</td><td id='b'>%s</td><td>%s</td><td>%s</td><td>%s</td></tr>", i + 1, xName,
xAddPoint(str_to_num(xEnt)), xAddPoint(str_to_num(xRc)), xAddPoint(str_to_num(xCap)) )
}
static xNName[32]; get_user_name(id, xNName, charsmax(xNName))
/*if(xNtvGetUserPosTop(id) > 10)
{
xLen += formatex(xMotd[xLen], charsmax(xMotd)-xLen, "<tr style=color:#00ff00><td>Meu rank: %d<td>%s<td>%s<td>%s<td>%s", xNtvGetUserPosTop(id), xNName, xAddPoint(xFlagDelivery[id]), xAddPoint(xFlagRecuperated[id]), xAddPoint(xFlagCapturated[id]))
}
else
{
xLen += formatex(xMotd[xLen], charsmax(xMotd)-xLen, "<tr style=color:#00ff00><td>Meu rank: <td>%s<td>0", xNName)
}*/
xLen += formatex(xMotd[xLen], charsmax(xMotd)-xLen, "</table></body></html>")
ArrayDestroy(aKey)
ArrayDestroy(aData)
ArrayDestroy(aAll)
}
public xSortData(Array:aArray, iItem1, iItem2, iData[], iDataSize)
{
new Data1[xFvaultData]
new Data2[xFvaultData]
ArrayGetArray(aArray, iItem1, Data1)
ArrayGetArray(aArray, iItem2, Data2)
new iCount1, iCount2, xStrKills, xStrKills2
new xK[10]
parse(Data1[xDataTop], xK, charsmax(xK))
xStrKills = str_to_num(xK)
new xK2[10]
parse(Data2[xDataTop], xK2, charsmax(xK2))
xStrKills2 = str_to_num(xK2)
iCount1 = xStrKills
iCount2 = xStrKills2
return (iCount1 > iCount2) ? -1 : ( (iCount1 < iCount2) ? 1 : 0 )
}
public xNtvGetUserPosTop(id)
{
if(!is_user_connected(id))
return false
new Array:aKey = ArrayCreate(35)
new Array:aData = ArrayCreate(128)
new Array:aAll = ArrayCreate(xFvaultData)
fvault_load(db_top15_data, aKey, aData)
new iArraySize = ArraySize(aKey)
new Data[xFvaultData]
new i
for(i = 0; i < iArraySize; i++)
{
ArrayGetString(aKey, i, Data[xAuthId], charsmax(Data[xAuthId]))
ArrayGetString(aData, i, Data[xDataTop], charsmax(Data[xDataTop]))
ArrayPushArray(aAll, Data)
}
ArraySort(aAll, "xSortData")
new szAuthIdFromArray[64]
static xGetAuth[64]
get_user_authid(id, xGetAuth, charsmax(xGetAuth))
new j
for(j = 0; j < iArraySize; j++)
{
ArrayGetString(aAll, j, szAuthIdFromArray, charsmax(szAuthIdFromArray))
if(equal(szAuthIdFromArray, xGetAuth))
break;
}
ArrayDestroy(aKey)
ArrayDestroy(aData)
ArrayDestroy(aAll)
return j+1
}
public xNtvGetTotalTop()
{
return fvault_size(db_top15_data)
}
public client_infochanged(id)
{
new iPlayerName[32], iNewName[32]
get_user_name(id, iPlayerName, 31)
get_user_info(id, "name", iNewName, 31)
if(!equali(iNewName, iPlayerName))
set_task(1.0, "CheckPlayerRank", id)
}
stock xRegisterSay( szSay[], szFunction[])
{
new szTemp[ 64 ];
formatex( szTemp, 63 , "say /%s", szSay );
register_clcmd( szTemp, szFunction );
formatex( szTemp, 63 , "say .%s", szSay );
register_clcmd( szTemp, szFunction );
formatex( szTemp, 63 , "say_team /%s", szSay );
register_clcmd( szTemp, szFunction );
formatex( szTemp, 63 , "say_team .%s", szSay );
register_clcmd( szTemp, szFunction );
}
stock xAddPoint(number)
{
new count, i, str[29], str2[35], len
num_to_str(number, str, charsmax(str))
len = strlen(str)
for (i = 0; i < len; i++)
{
if(i != 0 && ((len - i) %3 == 0))
{
add(str2, charsmax(str2), ".", 1)
count++
add(str2[i+count], 1, str[i], 1)
}
else add(str2[i+count], 1, str[i], 1)
}
return str2
}
HTML Code:
body {
background-repeat: no-repeat;
background-size: cover;
background-image: url('../img/background-knife.jpg');
background-attachment: fixed;
}
table {
width: 100%;
color: white;
background: rgba(6, 6, 6, 0.58);
}
td {
text-shadow: 0px 1px 3px black;
text-align: center;
color: #bfb7b7;
}
th {
color: #5ad37f;
}
th:first-child, td:first-child {
max-width: 20px;
}
/* linha de número par */
#a {
background: rgba(0, 0, 0, 0.2)
}
/* nome do jogador */
#b {
padding-left: 10px;
text-align: left;
color: #fff;
}
/* cabeçalho da tabela */
#c {
height: 30px;
background: rgba(93, 94, 105, 0.4);
}
/* linha dedicada as estatÃ*ticas de quem está vendo
* o MOTD e se ele próprio estiver na lista */
#f {
background: rgba(147, 201, 208, 0.2)
}
/* Ã*cone do kit de desarmamento */
#d {
background-image: url('../img/faca6.png');
background-repeat: no-repeat;
background-position: center;
background-size: contain;
}
/* Ã*cone da c4 */
#e {
background-image: url('../img/faca12.png');
background-repeat: no-repeat;
background-position: center;
background-size: contain;
}
/* nÃ*veis de habilidade */
#za {
background-image: url('../img/skills/skillgroup0.png');
background-repeat: no-repeat;
background-position: center;
background-size: contain;
max-width: 30px;
}
#zb {
background-image: url('../img/skills/skillgroup1.png');
background-repeat: no-repeat;
background-position: center;
background-size: contain;
max-width: 30px;
}
#zc {
background-image: url('../img/skills/skillgroup2.png');
background-repeat: no-repeat;
background-position: center;
background-size: contain;
max-width: 30px;
}
#zd {
background-image: url('../img/skills/skillgroup3.png');
background-repeat: no-repeat;
background-position: center;
background-size: contain;
max-width: 30px;
}
#ze {
background-image: url('../img/skills/skillgroup4.png');
background-repeat: no-repeat;
background-position: center;
background-size: contain;
max-width: 30px;
}
#zf {
background-image: url('../img/skills/skillgroup5.png');
background-repeat: no-repeat;
background-position: center;
background-size: contain;
max-width: 30px;
}
#zg {
background-image: url('../img/skills/skillgroup6.png');
background-repeat: no-repeat;
background-position: center;
background-size: contain;
max-width: 30px;
}
#zh {
background-image: url('../img/skills/skillgroup7.png');
background-repeat: no-repeat;
background-position: center;
background-size: contain;
max-width: 30px;
}
#zi {
background-image: url('../img/skills/skillgroup8.png');
background-repeat: no-repeat;
background-position: center;
background-size: contain;
max-width: 30px;
}
#zj {
background-image: url('../img/skills/skillgroup9.png');
background-repeat: no-repeat;
background-position: center;
background-size: contain;
max-width: 30px;
}
#zk {
background-image: url('../img/skills/skillgroup10.png');
background-repeat: no-repeat;
background-position: center;
background-size: contain;
max-width: 30px;
}
#zl {
background-image: url('../img/skills/skillgroup11.png');
background-repeat: no-repeat;
background-position: center;
background-size: contain;
max-width: 30px;
}
#zm {
background-image: url('../img/skills/skillgroup12.png');
background-repeat: no-repeat;
background-position: center;
background-size: contain;
max-width: 30px;
}
#zn {
background-image: url('../img/skills/skillgroup13.png');
background-repeat: no-repeat;
background-position: center;
background-size: contain;
max-width: 30px;
}
#zo {
background-image: url('../img/skills/skillgroup14.png');
background-repeat: no-repeat;
background-position: center;
background-size: contain;
max-width: 30px;
}
#zp {
background-image: url('../img/skills/skillgroup15.png');
background-repeat: no-repeat;
background-position: center;
background-size: contain;
max-width: 30px;
}
#zq {
background-image: url('../img/skills/skillgroup16.png');
background-repeat: no-repeat;
background-position: center;
background-size: contain;
max-width: 30px;
}
#zr {
background-image: url('../img/skills/skillgroup17.png');
background-repeat: no-repeat;
background-position: center;
background-size: contain;
max-width: 30px;
}
#zr {
background-image: url('../img/skills/skillgroup18.png');
background-repeat: no-repeat;
background-position: center;
background-size: contain;
max-width: 30px;
}
Last edited by yagami; 08-05-2023 at 09:24.
Reason: css
|
|