View Single Post
OciXCrom
Veteran Member
Join Date: Oct 2013
Location: Macedonia
Old 08-14-2018 , 15:52   Re: OciXCrom's Rank System [XP|Levels|Ranks]
Reply With Quote #61

I really don't think that showing the city, country or similar stuff is relevant to a Rank System. I won't add that to the main plugin, but here's an edited version:

PHP Code:
#include <amxmodx>
#include <amxmisc>
#include <fakemeta>
#include <geoip>
#include <nvault>

// Comment or remove this line in order to run the plugin on a mod different than Counter-Strike.
#define USE_CSTRIKE

#if defined USE_CSTRIKE
    #include <cromchat>
    #include <csx>
#else
new CC_PREFIX[64]
#endif

#if AMXX_VERSION_NUM < 183
    #include <dhudmessage>
#endif

#include <crxranks_const>

#if defined client_disconnected
    #define client_disconnect client_disconnected
#endif

#define PLUGIN_VERSION "2.3.2-geoip"
#define DELAY_ON_CONNECT 5.0
#define HUD_REFRESH_FREQ 1.0
#define DELAY_ON_CHANGE 0.1
#define MAX_HUDINFO_LENGTH 192
#define MAX_SOUND_LENGTH 128
#define MAX_PLAYER_INFO_LENGTH 35
#define MAX_RANK_LENGTH 32
#define MAX_XP_REWARD_LENGTH 32
#define MAX_XP_LENGTH 16
#define TASK_HUD 304500

#if !defined MAX_NAME_LENGTH
    #define MAX_NAME_LENGTH 32
#endif

#define ARG_CURRENT_XP             "$current_xp$"
#define ARG_NEXT_XP             "$next_xp$"
#define ARG_XP_NEEDED             "$xp_needed$"
#define ARG_LEVEL                 "$level$"
#define ARG_NEXT_LEVEL             "$next_level$"
#define ARG_RANK                 "$rank$"
#define ARG_NEXT_RANK             "$next_rank$"
#define ARG_MAX_LEVELS            "$max_levels$"
#define ARG_LINE_BREAK             "$br$"
#define ARG_NAME                 "$name$"
#define ARG_CITY                "$city$"

#define XPREWARD_KILL            "kill"
#define XPREWARD_HEADSHOT         "headshot"
#define XPREWARD_TEAMKILL         "teamkill"
#define XPREWARD_SUICIDE         "suicide"

#if defined USE_CSTRIKE
    #define XPREWARD_BOMB_PLANTED     "bomb_planted"
    #define XPREWARD_BOMB_DEFUSED     "bomb_defused"
    #define XPREWARD_BOMB_EXPLODED     "bomb_exploded"
#endif

#define clr(%1) %1 == -1 ? random(256) : %1

#define HUDINFO_PARAMS clr(g_eSettings[HUDINFO_COLOR][0]), clr(g_eSettings[HUDINFO_COLOR][1]), clr(g_eSettings[HUDINFO_COLOR][2]),\
g_eSettings[HUDINFO_POSITION][0], g_eSettings[HUDINFO_POSITION][1], 00.11.00.10.1

#define XP_NOTIFIER_PARAMS_GET clr(g_eSettings[XP_NOTIFIER_COLOR_GET][0]), clr(g_eSettings[XP_NOTIFIER_COLOR_GET][1]), clr(g_eSettings[XP_NOTIFIER_COLOR_GET][2]),\
g_eSettings[XP_NOTIFIER_POSITION][0], g_eSettings[XP_NOTIFIER_POSITION][1], .holdtime g_eSettings[XP_NOTIFIER_DURATION]

#define XP_NOTIFIER_PARAMS_LOSE clr(g_eSettings[XP_NOTIFIER_COLOR_LOSE][0]), clr(g_eSettings[XP_NOTIFIER_COLOR_LOSE][1]), clr(g_eSettings[XP_NOTIFIER_COLOR_LOSE][2]),\
g_eSettings[XP_NOTIFIER_POSITION][0], g_eSettings[XP_NOTIFIER_POSITION][1], .holdtime g_eSettings[XP_NOTIFIER_DURATION]

enum
{
    
VAULT_WRITE 0,
    
VAULT_READ
}

enum
{
    
OBJ_HUDINFO 0,
    
OBJ_XP_NOTIFIER
}

enum
{
    
SAVE_NICKNAME 0,
    
SAVE_IP,
    
SAVE_STEAMID
}

enum _:Sections
{
    
SECTION_NONE 0,
    
SECTION_SETTINGS,
    
SECTION_RANKS,
    
SECTION_XP_REWARDS
}

enum _:PlayerData
{
    
XP,
    
Level,
    
NextXP,
    
Rank[MAX_RANK_LENGTH],
    
NextRank[MAX_RANK_LENGTH],
    
HUDInfo[MAX_HUDINFO_LENGTH],
    
City[MAX_NAME_LENGTH],
    
bool:IsOnFinalLevel,
    
bool:IsVIP
}

enum _:Settings
{
    
SAVE_TYPE,
    
LEVELUP_MESSAGE_TYPE,
    
LEVELUP_SOUND[MAX_SOUND_LENGTH],
    
bool:LEVELUP_SCREEN_FADE_ENABLED,
    
LEVELUP_SCREEN_FADE_COLOR[4],
    
LEVELDN_SOUND[MAX_SOUND_LENGTH],
    
bool:LEVELDN_SCREEN_FADE_ENABLED,
    
LEVELDN_SCREEN_FADE_COLOR[4],
    
FINAL_LEVEL_FLAGS[32],
    
FINAL_LEVEL_FLAGS_BIT,
    
VIP_FLAGS[32],
    
VIP_FLAGS_BIT,
    
VAULT_NAME[32],
    
TEAM_LOCK,
    
MINIMUM_PLAYERS,
    
bool:USE_COMBINED_EVENTS,
    
bool:HUDINFO_ENABLED,
    
bool:HUDINFO_ALIVE_ONLY,
    
bool:HUDINFO_TEAM_LOCK,
    
bool:HUDINFO_OTHER_PLAYERS,
    
HUDINFO_COLOR[3],
    
Float:HUDINFO_POSITION[2],
    
bool:HUDINFO_USE_DHUD,
    
HUDINFO_FORMAT[MAX_HUDINFO_LENGTH],
    
HUDINFO_FORMAT_FINAL[MAX_HUDINFO_LENGTH],
    
HUDINFO_INVALID_TEXT[32],
    
bool:XP_NOTIFIER_ENABLED,
    
XP_NOTIFIER_COLOR_GET[3],
    
XP_NOTIFIER_COLOR_LOSE[3],
    
Float:XP_NOTIFIER_POSITION[2],
    
Float:XP_NOTIFIER_DURATION,
    
bool:XP_NOTIFIER_USE_DHUD
}

new 
g_eSettings[Settings]
new 
g_ePlayerData[33][PlayerData]
new 
g_szMaxLevels[MAX_XP_LENGTH]
new Array:
g_aLevels
new Array:g_aRankNames
new Trie:g_tXPRewards
new Trie:g_tXPRewardsVIP

new g_iVault
new g_iMaxLevels
new g_iObject[2]
new 
g_iScreenFade
new g_iFlagZ
new g_fwdUserLevelUpdated
new g_fwdUserReceiveXP

public plugin_init()
{
    
register_plugin("OciXCrom's Rank System"PLUGIN_VERSION"OciXCrom")
    
register_cvar("CRXRankSystem"PLUGIN_VERSIONFCVAR_SERVER|FCVAR_SPONLY|FCVAR_UNLOGGED)
    
register_event("DeathMsg""OnPlayerKilled""a")
    
    
#if defined USE_CSTRIKE
    
register_dictionary("RankSystem.txt")
    
#else
    
register_dictionary("RankSystemNoColors.txt")
    
#endif
    
    
register_clcmd("say /xplist""Cmd_XPList"ADMIN_BAN)
    
register_clcmd("say_team /xplist""Cmd_XPList"ADMIN_BAN)
    
register_concmd("crxranks_give_xp""Cmd_GiveXP"ADMIN_RCON"<nick|#userid> <amount>")
    
register_concmd("crxranks_reset_xp""Cmd_ResetXP"ADMIN_RCON"<nick|#userid>")
    
    if(
g_eSettings[LEVELUP_SCREEN_FADE_ENABLED] || g_eSettings[LEVELDN_SCREEN_FADE_ENABLED])
        
g_iScreenFade get_user_msgid("ScreenFade")

    
g_fwdUserLevelUpdated CreateMultiForward("crxranks_user_level_updated"ET_IGNOREFP_CELLFP_CELLFP_CELL)
    
g_fwdUserReceiveXP CreateMultiForward("crxranks_user_receive_xp"ET_STOPFP_CELLFP_CELLFP_CELL)
}

public 
plugin_precache()
{
    
g_aLevels ArrayCreate(16)
    
ArrayPushCell(g_aLevels0)
    
g_aRankNames ArrayCreate(32)
    
ArrayPushString(g_aRankNames"")
    
g_tXPRewards TrieCreate()
    
g_tXPRewardsVIP TrieCreate()
    
ReadFile()
}

public 
plugin_end()
{
    
ArrayDestroy(g_aLevels)
    
ArrayDestroy(g_aRankNames)
    
TrieDestroy(g_tXPRewards)
    
TrieDestroy(g_tXPRewardsVIP)
    
DestroyForward(g_fwdUserLevelUpdated)
    
nvault_close(g_iVault)
}

ReadFile()
{
    new 
szConfigsName[256], szFilename[256]
    
get_configsdir(szConfigsNamecharsmax(szConfigsName))
    
formatex(szFilenamecharsmax(szFilename), "%s/RankSystem.ini"szConfigsName)
    
    new 
iFilePointer fopen(szFilename"rt")
    
    if(
iFilePointer)
    {
        new 
szData[192], szValue[96], szMap[32], szKey[32], szTemp[4][5], bool:bRead trueiiSizeiSection SECTION_NONE
        get_mapname
(szMapcharsmax(szMap))
        
        while(!
feof(iFilePointer))
        {
            
fgets(iFilePointerszDatacharsmax(szData))
            
trim(szData)
            
            switch(
szData[0])
            {
                case 
EOS'#'';': continue
                case 
'-':
                {
                    
iSize strlen(szData)
                    
                    if(
szData[iSize 1] == '-')
                    {
                        
szData[0] = ' '
                        
szData[iSize 1] = ' '
                        
trim(szData)
                        
                        if(
contain(szData"*") != -1)
                        {
                            
strtok(szDataszKeycharsmax(szKey), szValuecharsmax(szValue), '*')
                            
copy(szValuestrlen(szKey), szMap)
                            
bRead equal(szValueszKey) ? true false
                        
}
                        else
                        {
                            static const 
szAll[] = "#all"
                            
bRead equal(szDataszAll) || equali(szDataszMap)
                        }
                    }
                    else continue
                }
                case 
'[':
                {
                    
iSize strlen(szData)
                    
                    if(
szData[iSize 1] == ']')
                    {
                        switch(
szData[1])
                        {
                            case 
'S''s'iSection SECTION_SETTINGS
                            
case 'R''r'iSection SECTION_RANKS
                            
case 'X''x'iSection SECTION_XP_REWARDS
                            
default: iSection SECTION_NONE
                        
}
                    }
                    else continue
                }
                default:
                {
                    if(!
bRead || iSection == SECTION_NONE)
                        continue
                        
                    
strtok(szDataszKeycharsmax(szKey), szValuecharsmax(szValue), '=')
                    
trim(szKey); trim(szValue)
                            
                    if(!
szValue[0])
                        continue
                        
                    switch(
iSection)
                    {
                        case 
SECTION_SETTINGS:
                        {
                            if(
equal(szKey"CHAT_PREFIX"))
                            {
                                
#if defined USE_CSTRIKE
                                
CC_SetPrefix(szValue)
                                
#else
                                
copy(CC_PREFIXcharsmax(CC_PREFIX), szValue)
                                
#endif
                            
}
                            else if(
equal(szKey"SAVE_TYPE"))
                                
g_eSettings[SAVE_TYPE] = clamp(str_to_num(szValue), SAVE_NICKNAMESAVE_STEAMID)
                            else if(
equal(szKey"XP_COMMANDS"))
                            {
                                while(
szValue[0] != && strtok(szValueszKeycharsmax(szKey), szValuecharsmax(szValue), ','))
                                {
                                    
trim(szKey); trim(szValue)
                                    
register_clcmd(szKey"Cmd_XP")
                                }
                            }
                            else if(
equal(szKey"LEVELUP_MESSAGE_TYPE"))
                                
g_eSettings[LEVELUP_MESSAGE_TYPE] = clamp(str_to_num(szValue), 02)
                            else if(
equal(szKey"LEVELUP_SOUND"))
                            {
                                
copy(g_eSettings[LEVELUP_SOUND], charsmax(g_eSettings[LEVELUP_SOUND]), szValue)
                                
                                if(
szValue[0])
                                    
precache_sound(szValue)
                            }
                            else if(
equal(szKey"LEVELUP_SCREEN_FADE_ENABLED"))
                                
g_eSettings[LEVELUP_SCREEN_FADE_ENABLED] = _:clamp(str_to_num(szValue), falsetrue)
                            else if(
equal(szKey"LEVELUP_SCREEN_FADE_COLOR"))
                            {
                                
parse(szValueszTemp[0], charsmax(szTemp[]), szTemp[1], charsmax(szTemp[]), szTemp[2], charsmax(szTemp[]), szTemp[3], charsmax(szTemp[]))
                                
                                for(
04i++)
                                    
g_eSettings[LEVELUP_SCREEN_FADE_COLOR][i] = clamp(str_to_num(szTemp[i]), -1255)
                            }
                            else if(
equal(szKey"LEVELDN_SOUND"))
                            {
                                
copy(g_eSettings[LEVELDN_SOUND], charsmax(g_eSettings[LEVELDN_SOUND]), szValue)
                                
                                if(
szValue[0])
                                    
precache_sound(szValue)
                            }
                            else if(
equal(szKey"LEVELDN_SCREEN_FADE_ENABLED"))
                                
g_eSettings[LEVELDN_SCREEN_FADE_ENABLED] = _:clamp(str_to_num(szValue), falsetrue)
                            else if(
equal(szKey"LEVELDN_SCREEN_FADE_COLOR"))
                            {
                                
parse(szValueszTemp[0], charsmax(szTemp[]), szTemp[1], charsmax(szTemp[]), szTemp[2], charsmax(szTemp[]), szTemp[3], charsmax(szTemp[]))
                                
                                for(
04i++)
                                    
g_eSettings[LEVELDN_SCREEN_FADE_COLOR][i] = clamp(str_to_num(szTemp[i]), -1255)
                            }
                            else if(
equal(szKey"FINAL_LEVEL_FLAGS"))
                            {
                                
copy(g_eSettings[FINAL_LEVEL_FLAGS], charsmax(g_eSettings[FINAL_LEVEL_FLAGS]), szValue)
                                
g_eSettings[FINAL_LEVEL_FLAGS_BIT] = read_flags(szValue)
                                
g_iFlagZ read_flags("z")
                            }
                            else if(
equal(szKey"VIP_FLAGS"))
                            {
                                
copy(g_eSettings[VIP_FLAGS], charsmax(g_eSettings[VIP_FLAGS]), szValue)
                                
g_eSettings[VIP_FLAGS_BIT] = read_flags(szValue)
                            }
                            else if(
equal(szKey"VAULT_NAME"))
                            {
                                
g_iVault nvault_open(szValue)
                                
copy(g_eSettings[VAULT_NAME], charsmax(g_eSettings[VAULT_NAME]), szValue)
                            }
                            else if(
equal(szKey"TEAM_LOCK"))
                                
g_eSettings[TEAM_LOCK] = str_to_num(szValue)
                            else if(
equal(szKey"MINIMUM_PLAYERS"))
                                
g_eSettings[MINIMUM_PLAYERS] = clamp(str_to_num(szValue), 032)
                            else if(
equal(szKey"USE_COMBINED_EVENTS"))
                                
g_eSettings[USE_COMBINED_EVENTS] = _:clamp(str_to_num(szValue), falsetrue)
                            else if(
equal(szKey"HUDINFO_ENABLED"))
                                
g_eSettings[HUDINFO_ENABLED] = _:clamp(str_to_num(szValue), falsetrue)
                            else if(
equal(szKey"HUDINFO_ALIVE_ONLY"))
                                
g_eSettings[HUDINFO_ALIVE_ONLY] = _:clamp(str_to_num(szValue), falsetrue)
                            else if(
equal(szKey"HUDINFO_TEAM_LOCK"))
                                
g_eSettings[HUDINFO_TEAM_LOCK] = _:clamp(str_to_num(szValue), falsetrue)
                            else if(
equal(szKey"HUDINFO_OTHER_PLAYERS"))
                                
g_eSettings[HUDINFO_OTHER_PLAYERS] = _:clamp(str_to_num(szValue), falsetrue)
                            else if(
equal(szKey"HUDINFO_COLOR"))
                            {
                                
parse(szValueszTemp[0], charsmax(szTemp[]), szTemp[1], charsmax(szTemp[]), szTemp[2], charsmax(szTemp[]))
                                
                                for(
03i++)
                                    
g_eSettings[HUDINFO_COLOR][i] = clamp(str_to_num(szTemp[i]), -1255)
                            }
                            else if(
equal(szKey"HUDINFO_POSITION"))
                            {
                                
parse(szValueszTemp[0], charsmax(szTemp[]), szTemp[1], charsmax(szTemp[]))
                                
                                for(
02i++)
                                    
g_eSettings[HUDINFO_POSITION][i] = _:floatclamp(str_to_float(szTemp[i]), -1.01.0)
                            }
                            else if(
equal(szKey"HUDINFO_USE_DHUD"))
                            {
                                
g_eSettings[HUDINFO_USE_DHUD] = _:clamp(str_to_num(szValue), falsetrue)
                                
                                if(!
g_eSettings[HUDINFO_USE_DHUD])
                                    
g_iObject[OBJ_HUDINFO] = CreateHudSyncObj()
                            }
                            else if(
equal(szKey"HUDINFO_FORMAT"))
                                
copy(g_eSettings[HUDINFO_FORMAT], charsmax(g_eSettings[HUDINFO_FORMAT]), szValue)
                            else if(
equal(szKey"HUDINFO_FORMAT_FINAL"))
                                
copy(g_eSettings[HUDINFO_FORMAT_FINAL], charsmax(g_eSettings[HUDINFO_FORMAT_FINAL]), szValue)
                            else if(
equal(szKey"HUDINFO_INVALID_TEXT"))
                                
copy(g_eSettings[HUDINFO_INVALID_TEXT], charsmax(g_eSettings[HUDINFO_INVALID_TEXT]), szValue)
                            else if(
equal(szKey"XP_NOTIFIER_ENABLED"))
                                
g_eSettings[XP_NOTIFIER_ENABLED] = _:clamp(str_to_num(szValue), falsetrue)
                            else if(
equal(szKey"XP_NOTIFIER_COLOR_GET"))
                            {
                                
parse(szValueszTemp[0], charsmax(szTemp[]), szTemp[1], charsmax(szTemp[]), szTemp[2], charsmax(szTemp[]))
                                
                                for(
03i++)
                                    
g_eSettings[XP_NOTIFIER_COLOR_GET][i] = clamp(str_to_num(szTemp[i]), -1255)
                            }
                            else if(
equal(szKey"XP_NOTIFIER_COLOR_LOSE"))
                            {
                                
parse(szValueszTemp[0], charsmax(szTemp[]), szTemp[1], charsmax(szTemp[]), szTemp[2], charsmax(szTemp[]))
                                
                                for(
03i++)
                                    
g_eSettings[XP_NOTIFIER_COLOR_LOSE][i] = clamp(str_to_num(szTemp[i]), -1255)
                            }
                            else if(
equal(szKey"XP_NOTIFIER_POSITION"))
                            {
                                
parse(szValueszTemp[0], charsmax(szTemp[]), szTemp[1], charsmax(szTemp[]))
                                
                                for(
02i++)
                                    
g_eSettings[XP_NOTIFIER_POSITION][i] = _:floatclamp(str_to_float(szTemp[i]), -1.01.0)
                            }
                            else if(
equal(szKey"XP_NOTIFIER_DURATION"))
                                
g_eSettings[XP_NOTIFIER_DURATION] = _:floatclamp(str_to_float(szValue), 0.0float(cellmax))
                            else if(
equal(szKey"XP_NOTIFIER_USE_DHUD"))
                            {
                                
g_eSettings[XP_NOTIFIER_USE_DHUD] = _:clamp(str_to_num(szValue), falsetrue)
                                
                                if(!
g_eSettings[XP_NOTIFIER_USE_DHUD])
                                    
g_iObject[OBJ_XP_NOTIFIER] = CreateHudSyncObj()
                            }
                        }
                        case 
SECTION_RANKS:
                        {
                            
ArrayPushCell(g_aLevelsclamp(str_to_num(szValue), 0))
                            
ArrayPushString(g_aRankNamesszKey)
                            
g_iMaxLevels++
                        }
                        case 
SECTION_XP_REWARDS:
                        {
                            static 
szReward[2][16]
                            
szReward[1][0] = EOS
                            
                            parse
(szValueszReward[0], charsmax(szReward[]), szReward[1], charsmax(szReward[]))
                            
TrieSetCell(g_tXPRewardsszKeystr_to_num(szReward[0]))
                            
                            if(
szReward[1][0])
                                
TrieSetCell(g_tXPRewardsVIPszKeystr_to_num(szReward[1]))
                        }
                    }
                }
            }
        }
        
        
num_to_str(g_iMaxLevelsg_szMaxLevelscharsmax(g_szMaxLevels))
        
fclose(iFilePointer)
    }
}

public 
client_connect(id)
{
    
reset_stats(id)
    
    new 
szInfo[MAX_PLAYER_INFO_LENGTH]
    
get_user_saveinfo(idszInfocharsmax(szInfo))
    
use_vault(idszInfoVAULT_READ)
    
set_task(DELAY_ON_CONNECT"update_vip_status"id)
    
    if(
g_eSettings[HUDINFO_ENABLED])
        
set_task(HUD_REFRESH_FREQ"DisplayHUD"id TASK_HUD, .flags "b")
}

public 
client_disconnect(id)
{
    new 
szInfo[MAX_PLAYER_INFO_LENGTH]
    
get_user_saveinfo(idszInfocharsmax(szInfo))
    
use_vault(idszInfoVAULT_WRITE)
    
remove_task(id TASK_HUD)
}

public 
client_infochanged(id)
{
    if(!
is_user_connected(id))
        return
        
    static const 
szKey[] = "name"
    
static szNewName[MAX_NAME_LENGTH], szOldName[MAX_NAME_LENGTH]
    
get_user_info(idszKeyszNewNamecharsmax(szNewName))
    
get_user_name(idszOldNamecharsmax(szOldName))
    
    if(!
equal(szNewNameszOldName))
    {        
        if(
g_eSettings[SAVE_TYPE] == SAVE_NICKNAME)
        {
            
use_vault(idszOldNameVAULT_WRITE)
            
use_vault(idszNewNameVAULT_READ)
            
update_hudinfo(id)
        }
        
        
set_task(DELAY_ON_CHANGE"update_vip_status"id)
    }
}

public 
DisplayHUD(id)
{
    
id -= TASK_HUD
    
    
static iTarget
    iTarget 
id
    
    
if(!is_user_alive(id))
    {        
        if(
g_eSettings[HUDINFO_ALIVE_ONLY])
            return
            
        if(
g_eSettings[HUDINFO_OTHER_PLAYERS])
            
iTarget pev(idpev_iuser2)
    }
    
    if(!
iTarget)
        return

    if(
g_eSettings[TEAM_LOCK] && g_eSettings[HUDINFO_TEAM_LOCK] && get_user_team(iTarget) != g_eSettings[TEAM_LOCK])
        return
    
    if(
g_eSettings[HUDINFO_USE_DHUD])
    {
        
set_dhudmessage(HUDINFO_PARAMS)
        
show_dhudmessage(idg_ePlayerData[iTarget][HUDInfo])
    }
    else
    {
        
set_hudmessage(HUDINFO_PARAMS)
        
ShowSyncHudMsg(idg_iObject[OBJ_HUDINFO], g_ePlayerData[iTarget][HUDInfo])
    }
}

#if defined USE_CSTRIKE
public bomb_planted(id)
    
give_user_xp(idget_xp_reward(idXPREWARD_BOMB_PLANTED), CRXRANKS_XPS_REWARD)
    
public 
bomb_defused(id)
    
give_user_xp(idget_xp_reward(idXPREWARD_BOMB_DEFUSED), CRXRANKS_XPS_REWARD)
    
public 
bomb_explode(id)
    
give_user_xp(idget_xp_reward(idXPREWARD_BOMB_EXPLODED), CRXRANKS_XPS_REWARD)
#endif

public Cmd_XP(id)
{    
    if(
g_ePlayerData[id][Level] == g_iMaxLevels)
        
send_message(idfalse"%L"id"CRXRANKS_RANKINFO_FINAL"g_ePlayerData[id][XP], g_ePlayerData[id][Level], g_ePlayerData[id][Rank])
    else
    {
        
send_message(idfalse"%L"id"CRXRANKS_RANKINFO_NORMAL"g_ePlayerData[id][XP], g_ePlayerData[id][NextXP],\
        
g_ePlayerData[id][Level], g_ePlayerData[id][Rank], g_ePlayerData[id][NextRank])
    }
    
    return 
PLUGIN_HANDLED
}

public 
Cmd_XPList(idiLeveliCid)
{
    if(!
cmd_access(idiLeveliCid1))
        return 
PLUGIN_HANDLED
        
    
new szTitle[128]
    
formatex(szTitlecharsmax(szTitle), "%L"id"CRXRANKS_MENU_TITLE")
    
    new 
iPlayers[32], iPnumiMenu menu_create(szTitle"XPList_Handler")
    
get_players(iPlayersiPnum); SortCustom1D(iPlayersiPnum"sort_players_by_xp")
    
    for(new 
szItem[128], szName[32], iPlayeriiPnumi++)
    {
        
iPlayer iPlayers[i]
        
get_user_name(iPlayerszNamecharsmax(szName))
        
formatex(szItemcharsmax(szItem), "%L"id"CRXRANKS_ITEM_FORMAT"g_ePlayerData[iPlayer][XP], szNameg_ePlayerData[iPlayer][Level], g_ePlayerData[iPlayer][Rank])
        
menu_additem(iMenuszItem)
    }
    
    
menu_display(idiMenu)
    return 
PLUGIN_HANDLED
}

public 
XPList_Handler(idiMenuiItem)
{
    
menu_destroy(iMenu)
    return 
PLUGIN_HANDLED
}

public 
Cmd_GiveXP(idiLeveliCid)
{    
    if(!
cmd_access(idiLeveliCid3))
        return 
PLUGIN_HANDLED
    
    
new szPlayer[MAX_NAME_LENGTH]
    
read_argv(1szPlayercharsmax(szPlayer))
    
    new 
iPlayer cmd_target(idszPlayer0)
    
    if(!
iPlayer)
        return 
PLUGIN_HANDLED
        
    
new szName[2][MAX_NAME_LENGTH], szAmount[MAX_XP_LENGTH]
    
read_argv(2szAmountcharsmax(szAmount))
    
get_user_name(idszName[0], charsmax(szName[]))
    
get_user_name(iPlayerszName[1], charsmax(szName[]))
    
    new 
szKey[32], iXP str_to_num(szAmount)
    
give_user_xp(iPlayeriXPCRXRANKS_XPS_ADMIN)
    
    if(
iXP >= 0)
        
copy(szKeycharsmax(szKey), "CRXRANKS_GIVE_XP")
    else
    {
        
copy(szKeycharsmax(szKey), "CRXRANKS_TAKE_XP")
        
iXP *= -1
    
}
    
    
send_message(0true"%L"idszKeyszName[0], iXPszName[1])
    return 
PLUGIN_HANDLED
}

public 
Cmd_ResetXP(idiLeveliCid)
{    
    if(!
cmd_access(idiLeveliCid2))
        return 
PLUGIN_HANDLED
    
    
new szPlayer[MAX_NAME_LENGTH]
    
read_argv(1szPlayercharsmax(szPlayer))
    
    new 
iPlayer cmd_target(idszPlayerCMDTARGET_OBEY_IMMUNITY|CMDTARGET_ALLOW_SELF)
    
    if(!
iPlayer)
        return 
PLUGIN_HANDLED
        
    
new szName[2][MAX_NAME_LENGTH]
    
get_user_name(idszName[0], charsmax(szName[]))
    
get_user_name(iPlayerszName[1], charsmax(szName[]))
    
g_ePlayerData[iPlayer][XP] = 0
    check_level
(iPlayertrue)
    
send_message(0true"%L"id"CRXRANKS_RESET_XP"szName[0], szName[1])
    return 
PLUGIN_HANDLED
}

public 
OnPlayerKilled()
{
    new 
iAttacker read_data(1), iVictim read_data(2)
    
    if(!
is_user_connected(iAttacker) || !is_user_connected(iVictim))
        return
        
    new 
iRewardiTemp
    
    
if(iAttacker == iVictim)
    {
        
iTemp get_xp_reward(iAttackerXPREWARD_SUICIDE)
        
iReward += iTemp
        
        
if(should_skip(iTemp))
            goto @
GIVE_REWARD
    
}
    else if(
get_user_team(iAttacker) == get_user_team(iVictim))
    {
        
iTemp get_xp_reward(iAttackerXPREWARD_TEAMKILL)
        
iReward += iTemp
        
        
if(should_skip(iTemp))
            goto @
GIVE_REWARD
    
}
    else
    {
        new 
szWeapon[16]
        
read_data(4szWeaponcharsmax(szWeapon))
        
        
iTemp get_xp_reward(iAttackerszWeapon)
        
iReward += iTemp
        
        
if(should_skip(iTemp))
            goto @
GIVE_REWARD
            
        
if(read_data(3))
        {
            
iTemp get_xp_reward(iAttackerXPREWARD_HEADSHOT)
            
iReward += iTemp
            
            
if(should_skip(iTemp))
                goto @
GIVE_REWARD
        
}
        
        
iReward += get_xp_reward(iAttackerXPREWARD_KILL)
    }
    
    @
GIVE_REWARD:
    
give_user_xp(iAttackeriRewardCRXRANKS_XPS_REWARD)
}

public 
sort_players_by_xp(id1id2)
{
    if(
g_ePlayerData[id1][XP] > g_ePlayerData[id2][XP])
        return -
1
    
else if(g_ePlayerData[id1][XP] < g_ePlayerData[id2][XP])
        return 
1
    
    
return 0
}

use_vault(const id, const szInfo[], const iType)
{
    if(!
szInfo[0])
        return
        
    switch(
iType)
    {
        case 
VAULT_WRITE:
        {
            static 
szData[MAX_XP_LENGTH]
            
num_to_str(g_ePlayerData[id][XP], szDatacharsmax(szData))
            
nvault_set(g_iVaultszInfoszData)
        }
        case 
VAULT_READ:
        {
            static 
iData
            iData 
nvault_get(g_iVaultszInfo)
            
g_ePlayerData[id][XP] = iData clamp(iData0) : 0
            check_level
(idfalse)
        }
    }
}

get_xp_reward(const id, const szKey[])
{
    static 
iReward
    
    
if(g_ePlayerData[id][IsVIP])
    {
        if(
TrieKeyExists(g_tXPRewardsVIPszKey))
        {
            
TrieGetCell(g_tXPRewardsVIPszKeyiReward)
            return 
iReward
        
}
    }
    
    if(
TrieKeyExists(g_tXPRewardsszKey))
    {
        
TrieGetCell(g_tXPRewardsszKeyiReward)
        return 
iReward
    
}
    
    return 
0
}

give_user_xp(const idiXPCRXRanks_XPSources:iSource CRXRANKS_XPS_PLUGIN)
{
    if(!
iXP)
        return

    if(
iSource == CRXRANKS_XPS_REWARD)
    {
        if(
g_eSettings[MINIMUM_PLAYERS] && get_playersnum() < g_eSettings[MINIMUM_PLAYERS])
            return;

        if(
g_eSettings[TEAM_LOCK] && get_user_team(id) != g_eSettings[TEAM_LOCK])
            return
    }
        
    static 
iReturn
    ExecuteForward
(g_fwdUserReceiveXPiReturnidiXPiSource)
    
    switch(
iReturn)
    {
        case 
CRXRANKS_HANDLED: return
        case 
CRXRANKS_CONTINUE: { }
        default:
        {
            if(
iReturn != 0)
                
iXP iReturn
        
}
    }
        
    
g_ePlayerData[id][XP] += iXP
    
    
if(g_ePlayerData[id][XP] < 0)
        
g_ePlayerData[id][XP] = 0
    
    
if(!check_level(idtrue))
        
update_hudinfo(id)
        
    if(
g_eSettings[XP_NOTIFIER_ENABLED])
    {
        static 
szKey[32], bool:bPositive
        bPositive 
iXP >= 0
        
        
if(bPositive)
            
copy(szKeycharsmax(szKey), "CRXRANKS_XP_NOTIFIER_GET")
        else
        {
            
copy(szKeycharsmax(szKey), "CRXRANKS_XP_NOTIFIER_LOSE")
            
iXP *= -1
        
}
            
        if(
g_eSettings[XP_NOTIFIER_USE_DHUD])
        {
            if(
bPositiveset_dhudmessage(XP_NOTIFIER_PARAMS_GET)
            else 
set_dhudmessage(XP_NOTIFIER_PARAMS_LOSE)                
            
show_dhudmessage(id"%L"idszKeyiXP)
        }
        else
        {
            if(
bPositiveset_hudmessage(XP_NOTIFIER_PARAMS_GET)
            else 
set_hudmessage(XP_NOTIFIER_PARAMS_LOSE)                
            
ShowSyncHudMsg(idg_iObject[OBJ_XP_NOTIFIER], "%L"idszKeyiXP)
        }
    }            
}

get_user_saveinfo(const idszInfo[MAX_PLAYER_INFO_LENGTH], const iLen)
{
    switch(
g_eSettings[SAVE_TYPE])
    {
        case 
SAVE_NICKNAME:    get_user_name(idszInfoiLen)
        case 
SAVE_IPget_user_ip(idszInfoiLen1)
        case 
SAVE_STEAMIDget_user_authid(idszInfoiLen)
    }
}

reset_stats(const id)
{
    
g_ePlayerData[id][XP] = 0
    g_ePlayerData
[id][Level] = 0
    g_ePlayerData
[id][NextXP] = 0
    g_ePlayerData
[id][Rank][0] = EOS
    g_ePlayerData
[id][NextRank][0] = EOS
    g_ePlayerData
[id][HUDInfo][0] = EOS
    g_ePlayerData
[id][IsOnFinalLevel] = false
    g_ePlayerData
[id][IsVIP] = false
}

bool:has_argument(const szMessage[], const szArg[])
    return 
contain(szMessageszArg) != -1
    
bool
:should_skip(const iNum)
    return (
iNum != && !g_eSettings[USE_COMBINED_EVENTS])
    
send_message(const id, const bool:bLog, const szInput[], any:...)
{
    static 
szMessage[192]
    
vformat(szMessagecharsmax(szMessage), szInput4)
    
    
#if defined USE_CSTRIKE
    
bLog CC_LogMessage(id_szMessage) : CC_SendMessage(idszMessage)
    
#else
    
format(szMessagecharsmax(szMessage), "%s %s"CC_PREFIXszMessage)
    
client_print(idprint_chatszMessage)
    
    if(
bLog)
        
log_amx(szMessage)
    
#endif
}

update_hudinfo(const id)
{
    if(!
g_eSettings[HUDINFO_ENABLED])
        return
        
    static 
szMessage[MAX_HUDINFO_LENGTH], szPlaceHolder[32], bool:bIsOnFinal
    bIsOnFinal 
g_ePlayerData[id][IsOnFinalLevel]
    
copy(szMessagecharsmax(szMessage), g_eSettings[bIsOnFinal HUDINFO_FORMAT_FINAL HUDINFO_FORMAT])
    
    if(
has_argument(szMessageARG_CURRENT_XP))
    {
        
num_to_str(g_ePlayerData[id][XP], szPlaceHoldercharsmax(szPlaceHolder))
        
replace_all(szMessagecharsmax(szMessage), ARG_CURRENT_XPszPlaceHolder)
    }
    
    if(
has_argument(szMessageARG_NEXT_XP))
    {
        
num_to_str(g_ePlayerData[id][NextXP], szPlaceHoldercharsmax(szPlaceHolder))
        
replace_all(szMessagecharsmax(szMessage), ARG_NEXT_XPszPlaceHolder)
    }
    
    if(
has_argument(szMessageARG_XP_NEEDED))
    {
        
num_to_str(g_ePlayerData[id][NextXP] - g_ePlayerData[id][XP], szPlaceHoldercharsmax(szPlaceHolder))
        
replace_all(szMessagecharsmax(szMessage), ARG_XP_NEEDEDszPlaceHolder)
    }
    
    if(
has_argument(szMessageARG_LEVEL))
    {
        
num_to_str(g_ePlayerData[id][Level], szPlaceHoldercharsmax(szPlaceHolder))
        
replace_all(szMessagecharsmax(szMessage), ARG_LEVELszPlaceHolder)
    }
    
    if(
has_argument(szMessageARG_NEXT_LEVEL))
    {
        
num_to_str(g_ePlayerData[id][bIsOnFinal Level Level 1], szPlaceHoldercharsmax(szPlaceHolder))
        
replace_all(szMessagecharsmax(szMessage), ARG_NEXT_LEVELszPlaceHolder)
    }
    
    if(
has_argument(szMessageARG_MAX_LEVELS))
        
replace_all(szMessagecharsmax(szMessage), ARG_MAX_LEVELSg_szMaxLevels)

    if(
has_argument(szMessageARG_NAME))
    {
        
get_user_name(idszPlaceHoldercharsmax(szPlaceHolder))
        
replace_all(szMessagecharsmax(szMessage), ARG_NAMEszPlaceHolder)
    }

    if(
has_argument(szMessageARG_CITY))
        
replace_all(szMessagecharsmax(szMessage), ARG_CITYg_ePlayerData[id][City])
    
    
replace_all(szMessagecharsmax(szMessage), ARG_RANKg_ePlayerData[id][Rank])
    
replace_all(szMessagecharsmax(szMessage), ARG_NEXT_RANKg_ePlayerData[id][NextRank])
    
replace_all(szMessagecharsmax(szMessage), ARG_LINE_BREAK"^n")
    
    
copy(g_ePlayerData[id][HUDInfo], charsmax(g_ePlayerData[][HUDInfo]), szMessage)
}

bool:check_level(const id, const bool:bNotify)
{
    static 
iLeveli
    iLevel 
0
    
    
for(1g_iMaxLevels 1i++)
    {
        if(
g_ePlayerData[id][XP] >= ArrayGetCell(g_aLevelsi))
            
iLevel++
    }
    
    if(
iLevel != g_ePlayerData[id][Level])
    {
        static 
bool:bLevelUpiReturn
        bLevelUp 
iLevel g_ePlayerData[id][Level]
        
g_ePlayerData[id][Level] = iLevel
        
        ExecuteForward
(g_fwdUserLevelUpdatediReturnidiLevelbLevelUp)
        
ArrayGetString(g_aRankNamesiLevelg_ePlayerData[id][Rank], charsmax(g_ePlayerData[][Rank]))
        
        if(
iLevel g_iMaxLevels)
        {
            
g_ePlayerData[id][IsOnFinalLevel] = false
            g_ePlayerData
[id][NextXP] = ArrayGetCell(g_aLevelsiLevel 1)
            
ArrayGetString(g_aRankNamesiLevel 1g_ePlayerData[id][NextRank], charsmax(g_ePlayerData[][NextRank]))
        }
        else
        {
            
g_ePlayerData[id][IsOnFinalLevel] = true
            g_ePlayerData
[id][NextXP] = ArrayGetCell(g_aLevelsiLevel)
            
copy(g_ePlayerData[id][NextRank], charsmax(g_ePlayerData[][NextRank]), g_eSettings[HUDINFO_INVALID_TEXT])
            
            if(
g_eSettings[FINAL_LEVEL_FLAGS])
            {
                
set_user_flags(idg_eSettings[FINAL_LEVEL_FLAGS])
                
remove_user_flags(idg_iFlagZ)
            }
        }
            
        if(
bNotify && g_eSettings[LEVELUP_MESSAGE_TYPE])
        {
            static 
szMessage[128], szName[32], bool:bGlobalMsg
            get_user_name
(idszNamecharsmax(szName))
            
bGlobalMsg g_eSettings[LEVELUP_MESSAGE_TYPE] == 2
            
            formatex
(szMessagecharsmax(szMessage), "%L"bGlobalMsg LANG_PLAYER id,\
            
bLevelUp "CRXRANKS_LEVEL_REACHED" "CRXRANKS_LEVEL_LOST"szNameg_ePlayerData[id][Level], g_ePlayerData[id][Rank])
            
send_message(bGlobalMsg idfalseszMessage)
            
            if(
bLevelUp && g_eSettings[LEVELUP_SOUND][0])
                
emit_sound(idCHAN_AUTOg_eSettings[LEVELUP_SOUND], 1.0ATTN_NORM0PITCH_NORM)
            else if(!
bLevelUp && g_eSettings[LEVELDN_SOUND][0])
                
emit_sound(idCHAN_AUTOg_eSettings[LEVELDN_SOUND], 1.0ATTN_NORM0PITCH_NORM)
                
            if(
g_eSettings[bLevelUp LEVELUP_SCREEN_FADE_ENABLED LEVELDN_SCREEN_FADE_ENABLED])
            {
                
message_begin(MSG_ONEg_iScreenFade, {000}, id)
                
write_short(1<<10)
                
write_short(1<<10)
                
write_short(0x0000)
                
                if(
bLevelUp)
                {
                    
write_byte(clr(g_eSettings[LEVELUP_SCREEN_FADE_COLOR][0]))
                    
write_byte(clr(g_eSettings[LEVELUP_SCREEN_FADE_COLOR][1]))
                    
write_byte(clr(g_eSettings[LEVELUP_SCREEN_FADE_COLOR][2]))
                    
write_byte(clr(g_eSettings[LEVELUP_SCREEN_FADE_COLOR][3]))
                }
                else
                {
                    
write_byte(clr(g_eSettings[LEVELDN_SCREEN_FADE_COLOR][0]))
                    
write_byte(clr(g_eSettings[LEVELDN_SCREEN_FADE_COLOR][1]))
                    
write_byte(clr(g_eSettings[LEVELDN_SCREEN_FADE_COLOR][2]))
                    
write_byte(clr(g_eSettings[LEVELDN_SCREEN_FADE_COLOR][3]))
                }
                
                
message_end()
            }
        }
        
        
update_hudinfo(id)
        return 
true
    
}
    
    return 
false
}

public 
update_vip_status(id)
{
    if(
is_user_connected(id))
    {
        new 
szIP[16]
        
get_user_ip(idszIPcharsmax(szIP), 1)
        
geoip_city(szIPg_ePlayerData[id][City], charsmax(g_ePlayerData[][City]))

        if(
g_eSettings[VIP_FLAGS_BIT] != ADMIN_ALL)
            
g_ePlayerData[id][IsVIP] = bool:((get_user_flags(id) & g_eSettings[VIP_FLAGS_BIT]) == g_eSettings[VIP_FLAGS_BIT])
    }
}

public 
plugin_natives()
{
    
register_library("crxranks")
    
register_native("crxranks_get_chat_prefix",         "_crxranks_get_chat_prefix")
    
register_native("crxranks_get_final_flags",         "_crxranks_get_final_flags")
    
register_native("crxranks_get_hudinfo_format",         "_crxranks_get_hudinfo_format")
    
register_native("crxranks_get_max_levels",             "_crxranks_get_max_levels")
    
register_native("crxranks_get_rank_by_level",         "_crxranks_get_rank_by_level")
    
register_native("crxranks_get_save_type",             "_crxranks_get_save_type")
    
register_native("crxranks_get_user_hudinfo",         "_crxranks_get_user_hudinfo")
    
register_native("crxranks_get_user_level",             "_crxranks_get_user_level")
    
register_native("crxranks_get_user_next_rank",         "_crxranks_get_user_next_rank")
    
register_native("crxranks_get_user_next_xp",         "_crxranks_get_user_next_xp")
    
register_native("crxranks_get_user_rank",             "_crxranks_get_user_rank")
    
register_native("crxranks_get_user_xp",             "_crxranks_get_user_xp")
    
register_native("crxranks_get_vault_name",             "_crxranks_get_vault_name")
    
register_native("crxranks_get_vip_flags",             "_crxranks_get_vip_flags")
    
register_native("crxranks_get_xp_for_level",         "_crxranks_get_xp_for_level")
    
register_native("crxranks_get_xp_reward",             "_crxranks_get_xp_reward")
    
register_native("crxranks_give_user_xp",             "_crxranks_give_user_xp")
    
register_native("crxranks_hi_is_using_dhud",        "_crxranks_hi_is_using_dhud")
    
register_native("crxranks_is_hud_enabled",             "_crxranks_is_hud_enabled")
    
register_native("crxranks_is_sfdn_enabled",         "_crxranks_is_sfdn_enabled")
    
register_native("crxranks_is_sfup_enabled",         "_crxranks_is_sfup_enabled")
    
register_native("crxranks_is_user_on_final",         "_crxranks_is_user_on_final")
    
register_native("crxranks_is_user_vip",                "_crxranks_is_user_vip")
    
register_native("crxranks_is_xpn_enabled",             "_crxranks_is_xpn_enabled")
    
register_native("crxranks_using_comb_events",        "_crxranks_using_comb_events")
    
register_native("crxranks_xpn_is_using_dhud",        "_crxranks_xpn_is_using_dhud")
}

public 
_crxranks_get_chat_prefix(iPluginiParams)
    
set_string(1CC_PREFIXget_param(2))

public 
_crxranks_get_final_flags(iPluginiParams)
{
    
set_string(1g_eSettings[FINAL_LEVEL_FLAGS], get_param(2))
    return 
g_eSettings[FINAL_LEVEL_FLAGS_BIT]
}

public 
_crxranks_get_hudinfo_format(iPluginiParams)
    
set_string(2g_eSettings[get_param(1) ? HUDINFO_FORMAT_FINAL HUDINFO_FORMAT], get_param(3))
    
public 
_crxranks_get_max_levels(iPluginiParams)
    return 
g_iMaxLevels
    
public _crxranks_get_rank_by_level(iPluginiParams)
{
    static 
iLevel
    iLevel 
get_param(1)
    
    if(
iLevel || iLevel g_iMaxLevels)
        return 
0
        
    
static szRank[MAX_RANK_LENGTH]
    
ArrayGetString(g_aRankNamesiLevelszRankcharsmax(szRank))
    
set_string(2szRankget_param(3))
    return 
1
}

public 
_crxranks_get_save_type(iPluginiParams)
    return 
g_eSettings[SAVE_TYPE]

public 
_crxranks_get_user_hudinfo(iPluginiParams)
    
set_string(2g_ePlayerData[get_param(1)][HUDInfo], get_param(3))
    
public 
_crxranks_get_user_level(iPluginiParams)
    return 
g_ePlayerData[get_param(1)][Level]
    
public 
_crxranks_get_user_next_rank(iPluginiParams)
    
set_string(2g_ePlayerData[get_param(1)][NextRank], get_param(3))
    
public 
_crxranks_get_user_next_xp(iPluginiParams)
    return 
g_ePlayerData[get_param(1)][NextXP]    
    
public 
_crxranks_get_user_rank(iPluginiParams)
    
set_string(2g_ePlayerData[get_param(1)][Rank], get_param(3))
    
public 
_crxranks_get_user_xp(iPluginiParams)
    return 
g_ePlayerData[get_param(1)][XP]
    
public 
_crxranks_get_vault_name(iPluginiParams)
    
set_string(1g_eSettings[VAULT_NAME], get_param(2))
    
public 
_crxranks_get_vip_flags(iPluginiParams)
{
    
set_string(1g_eSettings[VIP_FLAGS], get_param(2))
    return 
g_eSettings[VIP_FLAGS_BIT]
}
    
public 
_crxranks_get_xp_for_level(iPluginiParams)
{
    static 
iLevel
    iLevel 
get_param(1)
    
    if(
iLevel || iLevel g_iMaxLevels)
        return -
1
        
    
return ArrayGetCell(g_aLevelsiLevel)
}

public 
_crxranks_get_xp_reward(iPluginiParams)
{
    static 
szReward[MAX_XP_REWARD_LENGTH]
    
get_string(2szRewardcharsmax(szReward))
    return 
get_xp_reward(get_param(1), szReward)
}
    
public 
_crxranks_give_user_xp(iPluginiParams)
{
    static 
szReward[MAX_XP_REWARD_LENGTH], iRewardid
    szReward
[0] = EOS
    get_string
(3szRewardcharsmax(szReward))
    
id get_param(1)
    
    if(
szReward[0])
    {
        
iReward get_xp_reward(idszReward)
        
        if(
iReward)
            
give_user_xp(idiRewardCRXRanks_XPSources:get_param(3))
            
        return 
iReward
    
}
    
    
iReward get_param(2)
    
give_user_xp(idiRewardCRXRanks_XPSources:get_param(3))
    return 
iReward
}

public 
bool:_crxranks_hi_is_using_dhud(iPluginiParams)
    return 
g_eSettings[HUDINFO_USE_DHUD]

public 
bool:_crxranks_is_hud_enabled(iPluginiParams)
    return 
g_eSettings[HUDINFO_ENABLED]
    
public 
bool:_crxranks_is_sfdn_enabled(iPluginiParams)
    return 
g_eSettings[LEVELDN_SCREEN_FADE_ENABLED]

public 
bool:_crxranks_is_sfup_enabled(iPluginiParams)
    return 
g_eSettings[LEVELUP_SCREEN_FADE_ENABLED]

public 
bool:_crxranks_is_user_on_final(iPluginiParams)
    return 
g_ePlayerData[get_param(1)][IsOnFinalLevel]
    
public 
bool:_crxranks_is_user_vip(iPluginiParams)
    return 
g_ePlayerData[get_param(1)][IsVIP]
    
public 
bool:_crxranks_is_xpn_enabled(iPluginiParams)
    return 
g_eSettings[XP_NOTIFIER_ENABLED]
    
public 
bool:_crxranks_using_comb_events(iPluginiParams)
    return 
g_eSettings[USE_COMBINED_EVENTS]
    
public 
bool:_crxranks_xpn_is_using_dhud(iPluginiParams)
    return 
g_eSettings[XP_NOTIFIER_USE_DHUD
What do you mean by "HUD of online players"?
__________________

Last edited by OciXCrom; 08-16-2018 at 13:25.
OciXCrom is offline
Send a message via Skype™ to OciXCrom