ranksystem.sma
Код за потвърждение: Избери целия код
#include <amxmodx>
/* Common include libraries */
#include <amxmisc>
#include <fvault>
#tryinclude <cromchat>
#define PLUGIN "Rank System"
#define VERSION "1.1"
#define AUTHOR "Huehue @ AMXX-BG.INFO"
#define GAMETRACKER "rank_system"
#if !defined MAX_PLAYERS || AMXX_VERSION_NUM < 183
#define MAX_PLAYERS 32
#define client_disconnected client_disconnect
#endif
enum _:ePlayerData
{
Experience,
Level,
NextLevel,
IncreaseExperience,
ConnectStatus,
UserName[MAX_PLAYERS]
}
new g_iPlayerData[MAX_PLAYERS + 1][ePlayerData]
enum
{
Negative = 0,
Positive
}
new const g_szVault[] = "Rank_System_AMXXBG"
new Array:g_aRankName, Array:g_aRankExp
new iTotalRanks
enum
{
SECTION_SETTINGS = 1,
SECTION_RANKS
}
enum _:eSettings
{
Prefix[32],
VipFlag[6],
HudColors[12],
Float:HudX,
Float:HudY,
HudEffect,
KillExp,
HeadKillExp,
GrenadeKillExp,
KnifeKillExp,
VipKillExp,
VipHeadKillExp,
VipGrenadeKillExp,
VipKnifeKillExp,
VipFlagBit
}
new g_eSettings[eSettings]
public plugin_init()
{
register_plugin(PLUGIN, VERSION, AUTHOR)
register_cvar(GAMETRACKER, AUTHOR, FCVAR_SERVER | FCVAR_SPONLY)
set_cvar_string(GAMETRACKER, AUTHOR)
register_event("DeathMsg", "eventDeathMsg", "a")
register_clcmd("amx_reload_file", "Command_Reload_RanksFile", ADMIN_RCON, "- Reload settings and rank file..")
#if defined _cromchat_included
CC_SetPrefix(g_eSettings[Prefix])
#endif
}
public plugin_precache()
{
g_aRankName = ArrayCreate(128, 1)
g_aRankExp = ArrayCreate(64, 1)
Read_Ranks_File()
}
public Read_Ranks_File()
{
static szConfigsDir[64], iFile, szRankFile[64]
get_configsdir(szConfigsDir, charsmax(szConfigsDir))
formatex(szRankFile, charsmax(szRankFile), "/Rank_System.ini")
add(szConfigsDir, charsmax(szConfigsDir), szRankFile)
iFile = fopen(szConfigsDir, "rt")
if(!file_exists(szConfigsDir))
{
server_print("File not found, creating new one..")
new iFile = fopen(szConfigsDir, "wt")
if (iFile)
{
new szNewFile[512]
formatex(szNewFile, charsmax(szNewFile), "[SETTINGS]\
^nPREFIX = &x04[&x03Rank System&x04]\
^nVIP_FLAG = b\
^nHUD_COLORS = 255 0 0\
^nHUD_X_POSITION = 0.80\
^nHUD_Y_POSITION = -1.0\
^nHUD_EFFECT = 0\
^nKILL_EXP = 2\
^nHEADSHOT_KILL_EXP = 3\
^nGRENADE_KILL_EXP = 4\
^nKNIFE_KILL_EXP = 6\
^nVIP_KILL_EXP = 3\
^nVIP_HEADSHOT_KILL_EXP = 5\
^nVIP_GRENADE_KILL_EXP = 6\
^nVIP_KNIFE_KILL_EXP = 8\
^n^n[RANKS]\
^n;Rank Name = XP\
^nNewbie = 0\
^nPro = 25\
^nMaster = 50")
fputs(iFile, szNewFile)
}
fclose(iFile)
Read_Ranks_File()
return
}
new iLine
if (iFile)
{
static szLineData[160], iSection, szValue[160], szKey[64]
while (!feof(iFile))
{
fgets(iFile, szLineData, charsmax(szLineData))
trim(szLineData)
if (szLineData[0] == EOS || szLineData[0] == ';' || (szLineData[0] == '/' && szLineData[1] == '/'))
continue
switch(szLineData[0])
{
case EOS, ';': continue
case '[':
{
if (szLineData[strlen(szLineData) - 1] == ']')
{
if (containi(szLineData, "settings") != -1)
iSection = SECTION_SETTINGS
else if (containi(szLineData, "ranks") != -1)
iSection = SECTION_RANKS
}
else
continue
}
default:
{
switch(iSection)
{
case SECTION_SETTINGS:
{
strtok(szLineData, szKey, charsmax(szKey), szValue, charsmax(szValue), '=')
trim(szKey)
trim(szValue)
if (szValue[0] == EOS)
continue
if (equal(szKey, "PREFIX"))
copy(g_eSettings[Prefix], charsmax(g_eSettings[Prefix]), szValue)
else if (equal(szKey, "VIP_FLAG"))
{
copy(g_eSettings[VipFlag], charsmax(g_eSettings[VipFlag]), szValue)
g_eSettings[VipFlagBit] = read_flags(g_eSettings[VipFlag])
}
else if (equal(szKey, "HUD_COLORS"))
copy(g_eSettings[HudColors], charsmax(g_eSettings[HudColors]), szValue)
else if (equal(szKey, "HUD_X_POSITION"))
g_eSettings[HudX] = _:str_to_float(szValue)
else if (equal(szKey, "HUD_Y_POSITION"))
g_eSettings[HudY] = _:str_to_float(szValue)
else if (equal(szKey, "HUD_EFFECT"))
g_eSettings[HudEffect] = str_to_num(szValue)
else if (equal(szKey, "KILL_EXP"))
g_eSettings[KillExp] = str_to_num(szValue)
else if (equal(szKey, "HEADSHOT_KILL_EXP"))
g_eSettings[HeadKillExp] = str_to_num(szValue)
else if (equal(szKey, "GRENADE_KILL_EXP"))
g_eSettings[GrenadeKillExp] = str_to_num(szValue)
else if (equal(szKey, "KNIFE_KILL_EXP"))
g_eSettings[KnifeKillExp] = str_to_num(szValue)
else if (equal(szKey, "VIP_KILL_EXP"))
g_eSettings[VipKillExp] = str_to_num(szValue)
else if (equal(szKey, "VIP_HEADSHOT_KILL_EXP"))
g_eSettings[VipHeadKillExp] = str_to_num(szValue)
else if (equal(szKey, "VIP_GRENADE_KILL_EXP"))
g_eSettings[VipGrenadeKillExp] = str_to_num(szValue)
else if (equal(szKey, "VIP_KNIFE_KILL_EXP"))
g_eSettings[VipKnifeKillExp] = str_to_num(szValue)
}
case SECTION_RANKS:
{
strtok(szLineData, szKey, charsmax(szKey), szValue, charsmax(szValue), '=')
trim(szKey)
trim(szValue)
if (szValue[0] == EOS)
continue
ArrayPushString(g_aRankName, szKey)
ArrayPushCell(g_aRankExp, str_to_num(szValue))
iLine++
}
}
}
}
}
fclose(iFile)
}
iTotalRanks = iLine - 1
server_print(">> Loaded %i Ranks from file", iTotalRanks)
}
public client_putinserver(id)
{
arrayset(g_iPlayerData[id], 0, sizeof(g_iPlayerData[]))
get_user_name(id, g_iPlayerData[id][UserName], charsmax(g_iPlayerData[][UserName]))
set_task(0.1, "Load_Data", id, g_iPlayerData[id][UserName], sizeof(g_iPlayerData[][UserName]))
}
public client_disconnected(id)
{
if (g_iPlayerData[id][ConnectStatus])
{
Save_Data(id, g_iPlayerData[id][UserName])
g_iPlayerData[id][ConnectStatus] = false
}
}
public client_infochanged(id)
{
if (!is_user_connected(id))
return PLUGIN_HANDLED
static szNames[2][32]
get_user_name(id, szNames[0], charsmax(szNames[]))
get_user_info(id, "name", szNames[1], charsmax(szNames[]))
if (!equali(szNames[1], szNames[0]))
{
Save_Data(id, szNames[0])
set_task(0.1, "Load_Data", id, szNames[1], sizeof(szNames[]))
g_iPlayerData[id][UserName] = szNames[1]
return PLUGIN_HANDLED
}
return PLUGIN_HANDLED
}
public Command_Reload_RanksFile(id, level, cid)
{
if (!cmd_access(id, level, cid, 1))
return PLUGIN_HANDLED
ArrayClear(g_aRankName)
ArrayClear(g_aRankExp)
Read_Ranks_File()
return PLUGIN_HANDLED
}
public CheckRank(id, iType)
{
if(g_iPlayerData[id][Level] <= 0)
{
g_iPlayerData[id][Level] = 0
g_iPlayerData[id][NextLevel] = 1
}
if (g_iPlayerData[id][Experience] < 0)
g_iPlayerData[id][Experience] = 0
switch(iType)
{
case Negative:
{
while (g_iPlayerData[id][Level] <= iTotalRanks)
{
new iExp = ArrayGetCell(g_aRankExp, g_iPlayerData[id][Level])
if(g_iPlayerData[id][Experience] >= iExp)
break
g_iPlayerData[id][Level]--
g_iPlayerData[id][NextLevel]--
new szRankName[64]
ArrayGetString(g_aRankName, g_iPlayerData[id][NextLevel], szRankName, charsmax(szRankName))
#if defined _cromchat_included
CC_SendMatched(0, CC_COLOR_GREY, "&x03Player &x04%s&x03 has lost &x04Level %i &x03- &x04%s", g_iPlayerData[id][UserName], g_iPlayerData[id][NextLevel], szRankName)
#else
client_print(0, print_chat, "* Player %s has lost Level %i - %s", g_iPlayerData[id][UserName], g_iPlayerData[id][NextLevel], szRankName)
#endif
}
}
case Positive:
{
while (g_iPlayerData[id][Level] < iTotalRanks)
{
new iNextLevelExp = ArrayGetCell(g_aRankExp, g_iPlayerData[id][NextLevel])
if (g_iPlayerData[id][Experience] < iNextLevelExp)
break
g_iPlayerData[id][Level]++
g_iPlayerData[id][NextLevel]++
new szRankName[64]
ArrayGetString(g_aRankName, g_iPlayerData[id][Level], szRankName, charsmax(szRankName))
#if defined _cromchat_included
CC_SendMatched(0, CC_COLOR_GREY, "&x03Player &x04%s &x03has achieved &x04Level %i &x03- &x04%s", g_iPlayerData[id][UserName], g_iPlayerData[id][Level], szRankName)
#else
client_print(0, print_chat, "* Player %s has achieved Level %i - %s", g_iPlayerData[id][UserName], g_iPlayerData[id][Level], szRankName)
#endif
}
}
}
}
/* =============================================
Events
============================================= */
public eventDeathMsg()
{
new iKiller = read_data(1), iVictim = read_data(2)
if (is_user_connected(iKiller) && iKiller != iVictim)
{
new szWeapon[32]
read_data(4, szWeapon, charsmax(szWeapon))
if (equal(szWeapon, "grenade"))
{
if (get_user_flags(iKiller) & g_eSettings[VipFlagBit])
g_iPlayerData[iKiller][IncreaseExperience] = g_eSettings[VipGrenadeKillExp]
else
g_iPlayerData[iKiller][IncreaseExperience] = g_eSettings[GrenadeKillExp]
}
else if (equal(szWeapon, "knife"))
{
if (get_user_flags(iKiller) & g_eSettings[VipFlagBit])
g_iPlayerData[iKiller][IncreaseExperience] = g_eSettings[VipKnifeKillExp]
else
g_iPlayerData[iKiller][IncreaseExperience] = g_eSettings[KnifeKillExp]
}
else
{
new iHeadShot = read_data(3)
if (get_user_flags(iKiller) & g_eSettings[VipFlagBit])
g_iPlayerData[iKiller][IncreaseExperience] = iHeadShot ? g_eSettings[VipHeadKillExp] : g_eSettings[VipKillExp]
else
g_iPlayerData[iKiller][IncreaseExperience] = iHeadShot ? g_eSettings[HeadKillExp] : g_eSettings[KillExp]
}
g_iPlayerData[iKiller][Experience] += g_iPlayerData[iKiller][IncreaseExperience]
CheckRank(iKiller, Positive)
}
}
/* =============================================
Load & Save
============================================= */
public Load_Data(szName[], id)
{
if(!is_user_connected(id))
return
new szData[64]
if(fvault_get_data(g_szVault, szName, szData, charsmax(szData)))
{
replace_all(szData, charsmax(szData), "#", " ")
new szExp[10], szLevel[10]
parse(szData, szExp, charsmax(szExp), szLevel, charsmax(szLevel))
g_iPlayerData[id][Experience] = str_to_num(szExp)
g_iPlayerData[id][Level] = str_to_num(szLevel)
g_iPlayerData[id][NextLevel] = g_iPlayerData[id][Level]
g_iPlayerData[id][NextLevel]++
}
else
{
g_iPlayerData[id][Experience] = 0
g_iPlayerData[id][Level] = 0
g_iPlayerData[id][NextLevel] = 1
}
g_iPlayerData[id][ConnectStatus] = true
}
public Save_Data(id, szName[])
{
new szData[64]
formatex(szData, charsmax(szData), "%i#%i", g_iPlayerData[id][Experience], g_iPlayerData[id][Level])
fvault_set_data(g_szVault, szName, szData)
}
/* =============================================
Natives
============================================= */
public plugin_natives()
{
register_library("rank_system_huehue")
register_native("get_user_level", "native_get_user_level")
register_native("set_user_level", "native_set_user_level")
register_native("get_user_exp", "native_get_user_exp")
register_native("set_user_exp", "native_set_user_exp")
register_native("get_user_rank_name", "native_get_user_rank_name")
register_native("get_user_next_exp", "native_get_user_next_exp")
register_native("get_user_next_level", "native_get_user_next_level")
register_native("get_user_next_rank_name", "native_get_user_next_rank_name")
register_native("get_rank_name_by_level", "native_get_rank_name_by_level")
register_native("get_rank_exp", "native_get_rank_exp")
register_native("get_total_ranks", "native_get_total_ranks")
register_native("update_rank_info", "native_update_rank_info")
register_native("set_user_rank", "native_set_user_rank")
register_native("get_plugin_prefix", "native_get_plugin_prefix")
register_native("get_vip_flag", "native_get_vip_flag")
register_native("get_hud_colors", "native_get_hud_colors")
register_native("get_hud_position_x", "native_get_hud_position_x")
register_native("get_hud_position_y", "native_get_hud_position_y")
register_native("get_hud_effect", "native_get_hud_effect")
}
public native_get_user_level(iPlugin, iParams)
{
new id = get_param(1)
if (!is_user_connected(id))
return -1
return g_iPlayerData[id][Level]
}
public native_set_user_level(iPlugin, iParams)
{
new id = get_param(1), iLevel = get_param(2)
if (!is_user_connected(id))
return false
if (g_iPlayerData[id][Level] < iLevel)
{
g_iPlayerData[id][Level] = iLevel
CheckRank(id, Positive)
}
else
{
g_iPlayerData[id][Level] = iLevel
CheckRank(id, Negative)
}
return true
}
public native_get_user_exp(iPlugin, iParams)
{
new id = get_param(1)
if (!is_user_connected(id))
return -1
return g_iPlayerData[id][Experience]
}
public native_set_user_exp(iPlugin, iParams)
{
new id = get_param(1), iExp = get_param(2)
if (!is_user_connected(id))
return false
if (g_iPlayerData[id][Experience] < iExp)
{
g_iPlayerData[id][Experience] = iExp
CheckRank(id, Positive)
}
else
{
g_iPlayerData[id][Experience] = iExp
CheckRank(id, Negative)
}
return true
}
public native_get_user_rank_name(iPlugin, iParams)
{
new id = get_param(1)
if (!is_user_connected(id))
return false
new szRankName[64]
ArrayGetString(g_aRankName, g_iPlayerData[id][Level], szRankName, charsmax(szRankName))
set_string(2, szRankName, get_param(3))
return true
}
public native_get_user_next_exp(iPlugin, iParams)
{
new id = get_param(1)
if (g_iPlayerData[id][Level] > iTotalRanks-1)
{
return 0
}
else
{
new iNextLevelExp = ArrayGetCell(g_aRankExp, g_iPlayerData[id][NextLevel])
return iNextLevelExp
}
#if AMXX_VERSION_NUM < 183
return 0
#endif
}
public native_get_user_next_level(iPlugin, iParams)
{
new id = get_param(1)
if (g_iPlayerData[id][Level] > iTotalRanks-1)
{
return 0
}
else
{
return g_iPlayerData[id][NextLevel]
}
#if AMXX_VERSION_NUM < 183
return 0
#endif
}
public native_get_user_next_rank_name(iPlugin, iParams)
{
new id = get_param(1)
if (g_iPlayerData[id][Level] > iTotalRanks-1)
{
return 0
}
else
{
new szRankName[64]
ArrayGetString(g_aRankName, g_iPlayerData[id][NextLevel], szRankName, charsmax(szRankName))
set_string(2, szRankName, get_param(3))
}
return true
}
public native_get_rank_name_by_level(iPlugin, iParams)
{
new iLevel = get_param(1)
if (iLevel > iTotalRanks + 1)
{
return 0
}
new szRankName[64]
ArrayGetString(g_aRankName, iLevel, szRankName, charsmax(szRankName))
set_string(2, szRankName, get_param(3))
return true
}
public native_get_total_ranks(iPlugin, iParams)
{
return iTotalRanks
}
public native_update_rank_info(iPlugin, iParams)
{
new id = get_param(1), iType = get_param(2)
if (!is_user_connected(id))
return false
CheckRank(id, iType)
return true
}
public native_get_rank_exp(iPlugin, iParams)
{
new iExp = ArrayGetCell(g_aRankExp, get_param(1))
return iExp
}
public native_set_user_rank(iPlugin, iParams)
{
new id = get_param(1), iRankNum = get_param(2)
if (!is_user_connected(id))
return false
new iExpAmount = ArrayGetCell(g_aRankExp, iRankNum)
g_iPlayerData[id][Level] = iRankNum
g_iPlayerData[id][Experience] = iExpAmount
g_iPlayerData[id][NextLevel] = g_iPlayerData[id][Level]
g_iPlayerData[id][NextLevel]++
return true
}
public native_get_plugin_prefix(iPlugin, iParams)
{
return set_string(1, g_eSettings[Prefix], get_param(2))
}
public native_get_vip_flag(iPlugin, iParams)
{
return set_string(1, g_eSettings[VipFlag], get_param(2))
}
public native_get_hud_colors(iPlugin, iParams)
{
return set_string(1, g_eSettings[HudColors], get_param(2))
}
public Float:native_get_hud_position_x(iPlugin, iParams)
{
return g_eSettings[HudX]
}
public Float:native_get_hud_position_y(iPlugin, iParams)
{
return g_eSettings[HudY]
}
public native_get_hud_effect(iPlugin, iParams)
{
return g_eSettings[HudEffect]
}
Код за потвърждение: Избери целия код
#include <amxmodx>
#include <rank_system_huehue>
/* Common include libraries */
#include <amxmisc>
#tryinclude <cromchat>
#define PLUGIN "Addon: Admin Control Experience & Ranks"
#define VERSION "1.1"
#define AUTHOR "Huehue @ AMXX-BG.INFO"
#define GAMETRACKER "rank_system_admin_commands"
public plugin_init()
{
register_plugin(PLUGIN, VERSION, AUTHOR)
register_cvar(GAMETRACKER, AUTHOR, FCVAR_SERVER | FCVAR_SPONLY)
set_cvar_string(GAMETRACKER, AUTHOR)
register_clcmd("say /rankmenu", "Command_RankMenu", ADMIN_RCON, "- Toggles up the rank menu")
register_concmd("amx_rankmenu", "Command_RankMenu", ADMIN_RCON, "- Toggles up the rank menu")
register_clcmd("XP_Amount", "Command_XP_Amount", ADMIN_RCON)
register_clcmd("Set_Level", "Command_Set_Level", ADMIN_RCON)
#if defined _cromchat_included
new szPrefix[32]
get_plugin_prefix(szPrefix, charsmax(szPrefix))
CC_SetPrefix(szPrefix)
#endif
}
/* ================================================
Rank Menus & Commands
================================================ */
new g_iPlayer[33], g_iMenuType[33]
public Command_RankMenu(id, level, cid)
{
if (!cmd_access(id, level, cid, 1))
return PLUGIN_HANDLED
ToggleRankMenu(id)
return PLUGIN_HANDLED
}
public ToggleRankMenu(id)
{
static szTitle[64]
formatex(szTitle, charsmax(szTitle), "\rHuehue's \d~ \wRank Menu")
new iMenu = menu_create(szTitle, "rankmenu_handler")
menu_additem(iMenu, "\yGive \dPlayer \rXP")
menu_additem(iMenu, "\yTake \dPlayer \rXP^n")
menu_additem(iMenu, "\ySet \dPlayer \rRank")
menu_additem(iMenu, "\ySet \dPlayer \rLevel")
menu_setprop(iMenu, MPROP_NUMBER_COLOR, "\w")
menu_setprop(iMenu, MPROP_EXITNAME, "\yExit \rRank Menu\d..")
menu_display(id, iMenu, 0)
return PLUGIN_HANDLED
}
public rankmenu_handler(id, iMenu, Item)
{
if (Item == MENU_EXIT)
{
menu_destroy(iMenu)
return PLUGIN_HANDLED
}
Item++
PlayerSetMenu(id, Item)
menu_destroy(iMenu)
return PLUGIN_HANDLED
}
public PlayerSetMenu(id, iType)
{
static szTitle[64]
formatex(szTitle, charsmax(szTitle), "Choose Player to %s %s", iType == 1 ? "Give" : iType == 2 ? "Take" : "Set", iType == 4 ? "Level" : iType == 3 ? "Rank" : "XP")
new iMenu = menu_create(szTitle, "player_set_menu_handler")
g_iMenuType[id] = iType
new iPlayers[32], iNum, iPlayer
new szName[34], szTempID[10]
get_players(iPlayers, iNum)
for(new i; i < iNum; i++)
{
iPlayer = iPlayers[i]
if(!is_user_connected(iPlayer))
continue
get_user_name(iPlayer, szName, sizeof szName - 1)
num_to_str(iPlayer, szTempID, charsmax(szTempID))
menu_additem(iMenu, szName, szTempID)
}
menu_setprop(iMenu, MPROP_EXITNAME, "Go back..")
menu_display(id, iMenu, 0)
return PLUGIN_HANDLED
}
public player_set_menu_handler(id, iMenu, Item)
{
if (Item == MENU_EXIT)
{
menu_destroy(iMenu)
ToggleRankMenu(id)
g_iMenuType[id] = 0
return PLUGIN_HANDLED
}
new szData[6], iName[64], iAccess, iCallBack
menu_item_getinfo(iMenu, Item, iAccess, szData, charsmax(szData), iName, charsmax(iName), iCallBack)
g_iPlayer[id] = str_to_num(szData)
if (!is_user_connected(g_iPlayer[id]))
{
g_iPlayer[id] = 0
#if defined _cromchat_included
CC_SendMatched(id, CC_COLOR_GREY, "&x03The player you chose is not in the server.")
#else
client_print(id, print_chat, "* The player you chose is not in the server.")
#endif
return PLUGIN_HANDLED
}
new szRankName[64]
get_user_rank_name(g_iPlayer[id], szRankName, charsmax(szRankName))
#if defined _cromchat_included
CC_SendMatched(id, CC_COLOR_GREY, "&x03Player &x04%s &x03is &x04Level %i %s &x03with &x04%i Experience&x03.", iName, get_user_level(g_iPlayer[id]), szRankName, get_user_exp(g_iPlayer[id]))
#else
client_print(id, print_chat, "* Player %s is Level %i %s with %i Experience.", iName, get_user_level(g_iPlayer[id]), szRankName, get_user_exp(g_iPlayer[id]))
#endif
switch(g_iMenuType[id])
{
case 1..2: client_cmd(id, "messagemode XP_Amount")
case 3: SetRankMenu(id)
case 4: client_cmd(id, "messagemode Set_Level")
}
menu_destroy(iMenu)
return PLUGIN_HANDLED
}
public Command_XP_Amount(id, level, cid)
{
if (!cmd_access(id, level, cid, 1))
return PLUGIN_HANDLED
if (!g_iPlayer[id])
return PLUGIN_HANDLED
if (!is_user_connected(g_iPlayer[id]))
{
#if defined _cromchat_included
CC_SendMatched(id, CC_COLOR_GREY, "&x03The player you chose is not in the server.")
#else
client_print(id, print_chat, "* The player you chose is not in the server.")
#endif
return PLUGIN_HANDLED
}
new szArgs[12]
read_argv(1, szArgs, charsmax(szArgs))
new iXP = str_to_num(szArgs)
new szNames[2][32]
get_user_name(id, szNames[0], charsmax(szNames[]))
get_user_name(g_iPlayer[id], szNames[1], charsmax(szNames[]))
switch (g_iMenuType[id])
{
case 1:
{
set_user_exp(g_iPlayer[id], get_user_exp(g_iPlayer[id]) + iXP)
#if defined _cromchat_included
CC_SendMatched(0, CC_COLOR_GREY, "&x03%s&x01 gave &x04%i XP &x01to &x03%s&x01.", szNames[0], iXP, szNames[1])
#else
client_print(0, print_chat, "* %s gave %i XP to %s.", szNames[0], iXP, szNames[1])
#endif
}
case 2:
{
set_user_exp(g_iPlayer[id], get_user_exp(g_iPlayer[id]) - iXP)
#if defined _cromchat_included
CC_SendMatched(0, CC_COLOR_GREY, "&x03%s&x01 took &x04%i XP &x01from &x03%s&x01.", szNames[0], iXP, szNames[1])
#else
client_print(0, print_chat, "* %s took %i XP from %s.", szNames[0], iXP, szNames[1])
#endif
}
}
g_iPlayer[id] = 0
g_iMenuType[id] = 0
ToggleRankMenu(id)
return PLUGIN_HANDLED
}
public SetRankMenu(id)
{
static szTitle[64]
formatex(szTitle, charsmax(szTitle), "Choose Rank to Set")
new iMenu = menu_create(szTitle, "set_rank_handler")
//new szItem[100]
new iNum[6]
new szRankName[64]
for(new i = 0; i <= get_total_ranks(); i++)
{
get_rank_name_by_level(i, szRankName, charsmax(szRankName))
// Debug test message
//formatex(szItem, charsmax(szItem), "%s - Level %i", szRankName, PlayerData[i][LEVEL])
formatex(iNum, charsmax(iNum), "%i", i)
menu_additem(iMenu, szRankName, iNum)
}
menu_setprop(iMenu, MPROP_EXITNAME, "Go back..")
menu_display(id, iMenu, 0)
return PLUGIN_HANDLED
}
public set_rank_handler(id, iMenu, Item)
{
if (Item == MENU_EXIT)
{
ToggleRankMenu(id)
return PLUGIN_HANDLED
}
new szData[6], iAccess, iCallBack
menu_item_getinfo(iMenu, Item, iAccess, szData, charsmax(szData), _, _, iCallBack)
new iLevel = str_to_num(szData)
if (g_iPlayer[id] >= 0 || g_iPlayer[id] <= get_total_ranks())
{
set_user_rank(g_iPlayer[id], iLevel)
new szNames[2][32]
get_user_name(id, szNames[0], charsmax(szNames[]))
get_user_name(g_iPlayer[id], szNames[1], charsmax(szNames[]))
new szRankName[64]
get_user_rank_name(g_iPlayer[id], szRankName, charsmax(szRankName))
#if defined _cromchat_included
CC_SendMatched(0, CC_COLOR_GREY, "&x03%s&x01 set &x04Level %i %s &x01to &x03%s&x01.", szNames[0], iLevel, szRankName, szNames[1])
#else
client_print(0, print_chat, "* %s set Level %i %s to %s.", szNames[0], iLevel, szRankName, szNames[1])
#endif
}
g_iPlayer[id] = 0
g_iMenuType[id] = 0
ToggleRankMenu(id)
menu_destroy(iMenu)
return PLUGIN_HANDLED
}
public Command_Set_Level(id, level, cid)
{
if (!cmd_access(id, level, cid, 1))
return PLUGIN_HANDLED
if (!g_iPlayer[id])
return PLUGIN_HANDLED
if (!is_user_connected(g_iPlayer[id]))
{
#if defined _cromchat_included
CC_SendMatched(id, CC_COLOR_GREY, "&x03The player you chose is not in the server.")
#else
client_print(id, print_chat, "* The player you chose is not in the server.")
#endif
return PLUGIN_HANDLED
}
new szArgs[12]
read_argv(1, szArgs, charsmax(szArgs))
new iLevel = str_to_num(szArgs)
if (iLevel > get_total_ranks() || iLevel < 0)
{
#if defined _cromchat_included
CC_SendMatched(id, CC_COLOR_GREY, "&x03You can set level in between&x04 0 &x03and &x04%i &x03only!", get_total_ranks())
#else
client_print(id, print_chat, "* You can set level in between 0 and %i only!")
#endif
PlayerSetMenu(id, 4)
return PLUGIN_HANDLED;
}
new szNames[2][32]
get_user_name(id, szNames[0], charsmax(szNames[]))
get_user_name(g_iPlayer[id], szNames[1], charsmax(szNames[]))
set_user_rank(g_iPlayer[id], iLevel)
new szRankName[64]
get_user_rank_name(g_iPlayer[id], szRankName, charsmax(szRankName))
#if defined _cromchat_included
CC_SendMatched(0, CC_COLOR_GREY, "&x03%s &x01set &x04Level %i %s &x01to &x03%s", szNames[0], iLevel, szRankName, szNames[1])
#else
client_print(0, print_chat, "* %s set Level %i %s to %s", szNames[0], iLevel, szRankName, szNames[1])
#endif
g_iPlayer[id] = 0
g_iMenuType[id] = 0
ToggleRankMenu(id)
return PLUGIN_HANDLED
}
Код за потвърждение: Избери целия код
#include <amxmodx>
/* Common include libraries */
#include <engine>
#include <rank_system_huehue>
#define PLUGIN "Addon: Rank Information"
#define VERSION "1.1"
#define AUTHOR "Huehue @ AMXX-BG.INFO"
#define GAMETRACKER "rank_system_info"
new g_SyncHudMessage
public plugin_init()
{
register_plugin(PLUGIN, VERSION, AUTHOR)
register_cvar(GAMETRACKER, AUTHOR, FCVAR_SERVER | FCVAR_SPONLY)
set_cvar_string(GAMETRACKER, AUTHOR)
g_SyncHudMessage = CreateHudSyncObj()
new iEnt = create_entity("info_target")
entity_set_string(iEnt, EV_SZ_classname, "task_entity")
register_think("task_entity", "HudEntity")
entity_set_float(iEnt, EV_FL_nextthink, get_gametime() + 1.0)
register_event("StatusValue", "EventStatusValue", "b", "1>0", "2>0")
}
public HudEntity(iEnt)
{
static iPlayers[32], iNum, id, iLen
get_players(iPlayers, iNum, "ach")
for (new i = 0; i < iNum; i++)
{
id = iPlayers[i]
new szRankName[2][64], szHudMessage[128]
get_user_rank_name(id, szRankName[0], charsmax(szRankName[]))
get_user_next_rank_name(id, szRankName[1], charsmax(szRankName[]))
iLen = formatex(szHudMessage, charsmax(szHudMessage), "Rank: %s^n", szRankName[0])
if (get_user_level(id) > get_total_ranks()-1)
{
iLen += formatex(szHudMessage[iLen], charsmax(szHudMessage) - iLen, "Experience: %i", get_user_exp(id))
}
else
{
iLen += formatex(szHudMessage[iLen], charsmax(szHudMessage) - iLen, "Experience: %i/%i^nNext Rank: %s",
get_user_exp(id), get_user_next_exp(id), szRankName[1])
}
static szColors[12], szRed[6], szGreen[6], szBlue[6], iRed, iGreen, iBlue
get_hud_colors(szColors, charsmax(szColors))
parse(szColors, szRed, charsmax(szRed), szGreen, charsmax(szGreen), szBlue, charsmax(szBlue))
iRed = str_to_num(szRed)
iGreen = str_to_num(szGreen)
iBlue = str_to_num(szBlue)
set_hudmessage(iRed, iGreen, iBlue, get_hud_position_x(), get_hud_position_y(), get_hud_effect(), 0.8, 0.8)
ShowSyncHudMsg(id, g_SyncHudMessage, "%s", szHudMessage)
}
entity_set_float(iEnt, EV_FL_nextthink, get_gametime() + 0.6)
}
public EventStatusValue(const id)
{
static szMessage[34], iPlayer, iAux
get_user_aiming(id, iPlayer, iAux)
if (is_user_alive(iPlayer))
{
static szRankName[64]
get_user_rank_name(iPlayer, szRankName, charsmax(szRankName))
static szFlag[6]
get_vip_flag(szFlag, charsmax(szFlag))
if (get_user_flags(iPlayer) & read_flags(szFlag))
formatex(szMessage, charsmax(szMessage), "1 VIP: %%p2 | Rank: %s | Experience: %s", szRankName, get_user_exp(iPlayer))
else
formatex(szMessage, charsmax(szMessage), "1 PLAYER: %%p2 | Rank: %s | Experience: %s", szRankName, get_user_exp(iPlayer))
message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("StatusText") , _, id)
write_byte(0)
write_string(szMessage)
message_end()
}
}