Diff
checker
文本
文本
图像
文档
Excel
文件夹
Legal
Enterprise
桌面版
定价
登录
下载 Diffchecker 桌面版
比较文本
查找两个文本文件之间的差异
工具
历史
实时编辑器
折叠未更改行
关闭换行
视图
拆分
统一
比对精度
智能
单词
字符
语法高亮
选择语法
忽略
文本转换
转到第一个差异
编辑输入
Diffchecker Desktop
运行Diffchecker最安全的方式。获取Diffchecker桌面应用:您的差异永远不会离开您的电脑!
获取桌面版
Untitled diff
创建于
8年前
差异永不过期
清除
导出
分享
解释
4 删除
行
总计
删除
字符
总计
删除
要继续使用此功能,请升级到
Diff
checker
Pro
查看价格
371 行
全部复制
28 添加
行
总计
添加
字符
总计
添加
要继续使用此功能,请升级到
Diff
checker
Pro
查看价格
386 行
全部复制
#include <amxmodx>
#include <amxmodx>
#include <amxmisc>
#include <amxmisc>
#include <cromchat>
#include <cromchat>
#include <hamsandwich>
#include <hamsandwich>
#include <nvault>
#include <nvault>
#define PLUGIN_VERSION "2.1"
#define PLUGIN_VERSION "2.1"
#define ARG_RANDOM -1
#define ARG_RANDOM -1
#define RANDOM_COLOR random_num(50, 255)
#define RANDOM_COLOR random_num(50, 255)
#define FLAGS_DELAY 0.1
#define FLAGS_DELAY 0.1
#if defined client_disconnected
#if defined client_disconnected
#define client_disconnect client_disconnected
#define client_disconnect client_disconnected
#endif
#endif
enum _:Settings
enum _:Settings
{
{
SAVE_TYPE,
SAVE_TYPE,
KILLS_NEEDED,
KILLS_NEEDED,
VIP_FLAGS_BIT,
VIP_FLAGS_BIT,
VIP_FLAGS_STR[32],
VIP_FLAGS_STR[32],
IGNORE_BOTS,
IGNORE_BOTS,
VIP_SUCCESS_MESSAGE,
VIP_SUCCESS_MESSAGE,
bool:HUD_MESSAGE_ENABLED,
bool:HUD_MESSAGE_ENABLED,
HUD_MESSAGE_COLOR[3],
HUD_MESSAGE_COLOR[3],
Float:HUD_MESSAGE_POSITION[2],
Float:HUD_MESSAGE_POSITION[2],
Float:HUD_MESSAGE_DURATION,
Float:HUD_MESSAGE_DURATION,
HUD_MESSAGE_EFFECTS,
HUD_MESSAGE_EFFECTS,
Float:HUD_MESSAGE_TIME[3]
Float:HUD_MESSAGE_TIME[3]
}
}
enum _:PlayerData
enum _:PlayerData
{
{
Name[32],
Name[32],
Info[35],
Info[35],
Kills
Kills
}
}
new g_eSettings[Settings],
new g_eSettings[Settings],
g_ePlayerData[33][PlayerData],
g_ePlayerData[33][PlayerData],
g_iObject,
g_iObject,
g_iVault
g_iVault
public plugin_init()
public plugin_init()
{
{
register_plugin("BecomeVIP Plus", PLUGIN_VERSION, "OciXCrom")
register_plugin("BecomeVIP Plus", PLUGIN_VERSION, "OciXCrom")
register_cvar("CRXBecomeVIP", PLUGIN_VERSION, FCVAR_SERVER|FCVAR_SPONLY|FCVAR_UNLOGGED)
register_cvar("CRXBecomeVIP", PLUGIN_VERSION, FCVAR_SERVER|FCVAR_SPONLY|FCVAR_UNLOGGED)
register_dictionary("BecomeVIP.txt")
register_dictionary("BecomeVIP.txt")
register_event("DeathMsg", "OnPlayerKilled", "a")
register_event("DeathMsg", "OnPlayerKilled", "a")
复制
已复制
复制
已复制
register_concmd("becomevip_give_kills", "Cmd_GiveKills", ADMIN_
BAN
, "<nick|#userid> <kills>")
register_concmd("becomevip_give_kills", "Cmd_GiveKills", ADMIN_
LEVEL_C
, "<nick|#userid> <kills>")
register_concmd("becomevip_reset_kills", "Cmd_ResetKills", ADMIN_
BAN
, "<nick|#userid>")
register_concmd("becomevip_reset_kills", "Cmd_ResetKills", ADMIN_
LEVEL_C
, "<nick|#userid>")
ReadFile()
ReadFile()
}
}
public plugin_end()
public plugin_end()
nvault_close(g_iVault)
nvault_close(g_iVault)
ReadFile()
ReadFile()
{
{
new szConfigsName[256], szFilename[256]
new szConfigsName[256], szFilename[256]
get_configsdir(szConfigsName, charsmax(szConfigsName))
get_configsdir(szConfigsName, charsmax(szConfigsName))
formatex(szFilename, charsmax(szFilename), "%s/BecomeVIP.ini", szConfigsName)
formatex(szFilename, charsmax(szFilename), "%s/BecomeVIP.ini", szConfigsName)
new iFilePointer = fopen(szFilename, "rt")
new iFilePointer = fopen(szFilename, "rt")
if(iFilePointer)
if(iFilePointer)
{
{
new szData[96], szValue[64], szKey[32], szTemp[4][5], i
new szData[96], szValue[64], szKey[32], szTemp[4][5], i
while(!feof(iFilePointer))
while(!feof(iFilePointer))
{
{
fgets(iFilePointer, szData, charsmax(szData))
fgets(iFilePointer, szData, charsmax(szData))
trim(szData)
trim(szData)
switch(szData[0])
switch(szData[0])
{
{
case EOS, '#', ';': continue
case EOS, '#', ';': continue
default:
default:
{
{
strtok(szData, szKey, charsmax(szKey), szValue, charsmax(szValue), '=')
strtok(szData, szKey, charsmax(szKey), szValue, charsmax(szValue), '=')
trim(szKey); trim(szValue)
trim(szKey); trim(szValue)
if(equal(szKey, "PLUGIN_PREFIX"))
if(equal(szKey, "PLUGIN_PREFIX"))
CC_SetPrefix(szValue)
CC_SetPrefix(szValue)
else if(equal(szKey, "SAVE_TYPE"))
else if(equal(szKey, "SAVE_TYPE"))
g_eSettings[SAVE_TYPE] = str_to_num(szValue)
g_eSettings[SAVE_TYPE] = str_to_num(szValue)
else if(equal(szKey, "KILLS_NEEDED"))
else if(equal(szKey, "KILLS_NEEDED"))
g_eSettings[KILLS_NEEDED] = str_to_num(szValue)
g_eSettings[KILLS_NEEDED] = str_to_num(szValue)
else if(equal(szKey, "VIP_FLAGS"))
else if(equal(szKey, "VIP_FLAGS"))
{
{
copy(g_eSettings[VIP_FLAGS_STR], charsmax(g_eSettings[VIP_FLAGS_STR]), szValue)
copy(g_eSettings[VIP_FLAGS_STR], charsmax(g_eSettings[VIP_FLAGS_STR]), szValue)
g_eSettings[VIP_FLAGS_BIT] = read_flags(szValue)
g_eSettings[VIP_FLAGS_BIT] = read_flags(szValue)
}
}
else if(equal(szKey, "IGNORE_BOTS"))
else if(equal(szKey, "IGNORE_BOTS"))
g_eSettings[IGNORE_BOTS] = str_to_num(szValue)
g_eSettings[IGNORE_BOTS] = str_to_num(szValue)
if(equal(szKey, "CHECK_KILLS_COMMANDS"))
if(equal(szKey, "CHECK_KILLS_COMMANDS"))
{
{
while(szValue[0] != 0 && strtok(szValue, szKey, charsmax(szKey), szValue, charsmax(szValue), ','))
while(szValue[0] != 0 && strtok(szValue, szKey, charsmax(szKey), szValue, charsmax(szValue), ','))
{
{
trim(szKey); trim(szValue)
trim(szKey); trim(szValue)
if(szKey[0] == '/' || szKey[0] == '!')
if(szKey[0] == '/' || szKey[0] == '!')
{
{
formatex(szData, charsmax(szData), "say %s", szKey)
formatex(szData, charsmax(szData), "say %s", szKey)
register_clcmd(szData, "Cmd_CheckKills")
register_clcmd(szData, "Cmd_CheckKills")
formatex(szData, charsmax(szData), "say_team %s", szKey)
formatex(szData, charsmax(szData), "say_team %s", szKey)
register_clcmd(szData, "Cmd_CheckKills")
register_clcmd(szData, "Cmd_CheckKills")
}
}
else register_clcmd(szData, "Cmd_CheckKills")
else register_clcmd(szData, "Cmd_CheckKills")
}
}
}
}
else if(equal(szKey, "VAULT_FILE"))
else if(equal(szKey, "VAULT_FILE"))
g_iVault = nvault_open(szValue)
g_iVault = nvault_open(szValue)
else if(equal(szKey, "VIP_SUCCESS_MESSAGE"))
else if(equal(szKey, "VIP_SUCCESS_MESSAGE"))
g_eSettings[VIP_SUCCESS_MESSAGE] = str_to_num(szValue)
g_eSettings[VIP_SUCCESS_MESSAGE] = str_to_num(szValue)
else if(equal(szKey, "HUD_MESSAGE_ENABLED"))
else if(equal(szKey, "HUD_MESSAGE_ENABLED"))
{
{
g_eSettings[HUD_MESSAGE_ENABLED] = bool:str_to_num(szValue)
g_eSettings[HUD_MESSAGE_ENABLED] = bool:str_to_num(szValue)
if(g_eSettings[HUD_MESSAGE_ENABLED])
if(g_eSettings[HUD_MESSAGE_ENABLED])
{
{
g_iObject = CreateHudSyncObj()
g_iObject = CreateHudSyncObj()
RegisterHam(Ham_Spawn, "player", "OnPlayerSpawn", 1)
RegisterHam(Ham_Spawn, "player", "OnPlayerSpawn", 1)
}
}
}
}
else if(equal(szKey, "HUD_MESSAGE_COLOR"))
else if(equal(szKey, "HUD_MESSAGE_COLOR"))
{
{
parse(szValue, szTemp[0], charsmax(szTemp[]), szTemp[1], charsmax(szTemp[]), szTemp[2], charsmax(szTemp[]))
parse(szValue, szTemp[0], charsmax(szTemp[]), szTemp[1], charsmax(szTemp[]), szTemp[2], charsmax(szTemp[]))
for(i = 0; i < 3; i++)
for(i = 0; i < 3; i++)
g_eSettings[HUD_MESSAGE_COLOR][i] = str_to_num(szTemp[i])
g_eSettings[HUD_MESSAGE_COLOR][i] = str_to_num(szTemp[i])
}
}
else if(equal(szKey, "HUD_MESSAGE_POSITION"))
else if(equal(szKey, "HUD_MESSAGE_POSITION"))
{
{
parse(szValue, szTemp[0], charsmax(szTemp[]), szTemp[1], charsmax(szTemp[]))
parse(szValue, szTemp[0], charsmax(szTemp[]), szTemp[1], charsmax(szTemp[]))
for(i = 0; i < 2; i++)
for(i = 0; i < 2; i++)
g_eSettings[HUD_MESSAGE_POSITION][i] = _:str_to_float(szTemp[i])
g_eSettings[HUD_MESSAGE_POSITION][i] = _:str_to_float(szTemp[i])
}
}
else if(equal(szKey, "HUD_MESSAGE_DURATION"))
else if(equal(szKey, "HUD_MESSAGE_DURATION"))
g_eSettings[HUD_MESSAGE_DURATION] = _:str_to_float(szValue)
g_eSettings[HUD_MESSAGE_DURATION] = _:str_to_float(szValue)
else if(equal(szKey, "HUD_MESSAGE_EFFECTS"))
else if(equal(szKey, "HUD_MESSAGE_EFFECTS"))
{
{
parse(szValue, szTemp[0], charsmax(szTemp[]), szTemp[1], charsmax(szTemp[]), szTemp[2], charsmax(szTemp[]), szTemp[3], charsmax(szTemp[]))
parse(szValue, szTemp[0], charsmax(szTemp[]), szTemp[1], charsmax(szTemp[]), szTemp[2], charsmax(szTemp[]), szTemp[3], charsmax(szTemp[]))
g_eSettings[HUD_MESSAGE_EFFECTS] = str_to_num(szTemp[0])
g_eSettings[HUD_MESSAGE_EFFECTS] = str_to_num(szTemp[0])
for(i = 0; i < 3; i++)
for(i = 0; i < 3; i++)
g_eSettings[HUD_MESSAGE_TIME][i] = _:str_to_float(szTemp[i + 1])
g_eSettings[HUD_MESSAGE_TIME][i] = _:str_to_float(szTemp[i + 1])
}
}
}
}
}
}
}
}
fclose(iFilePointer)
fclose(iFilePointer)
}
}
}
}
public client_authorized(id)
public client_authorized(id)
{
{
if(ignore_bot(id))
if(ignore_bot(id))
return
return
switch(g_eSettings[SAVE_TYPE])
switch(g_eSettings[SAVE_TYPE])
{
{
case 0:
case 0:
{
{
get_user_name(id, g_ePlayerData[id][Info], charsmax(g_ePlayerData[][Info]))
get_user_name(id, g_ePlayerData[id][Info], charsmax(g_ePlayerData[][Info]))
strtolower(g_ePlayerData[id][Info])
strtolower(g_ePlayerData[id][Info])
}
}
case 1: get_user_ip(id, g_ePlayerData[id][Info], charsmax(g_ePlayerData[][Info]), 1)
case 1: get_user_ip(id, g_ePlayerData[id][Info], charsmax(g_ePlayerData[][Info]), 1)
case 2: get_user_authid(id, g_ePlayerData[id][Info], charsmax(g_ePlayerData[][Info]))
case 2: get_user_authid(id, g_ePlayerData[id][Info], charsmax(g_ePlayerData[][Info]))
}
}
get_user_name(id, g_ePlayerData[id][Name], charsmax(g_ePlayerData[][Name]))
get_user_name(id, g_ePlayerData[id][Name], charsmax(g_ePlayerData[][Name]))
use_vault(id, false, g_ePlayerData[id][Info])
use_vault(id, false, g_ePlayerData[id][Info])
}
}
public client_disconnect(id)
public client_disconnect(id)
{
{
if(ignore_bot(id))
if(ignore_bot(id))
return
return
use_vault(id, true, g_ePlayerData[id][Info])
use_vault(id, true, g_ePlayerData[id][Info])
}
}
public client_infochanged(id)
public client_infochanged(id)
{
{
if(ignore_bot(id))
if(ignore_bot(id))
return
return
static szNewName[32], szOldName[32]
static szNewName[32], szOldName[32]
get_user_info(id, "name", szNewName, charsmax(szNewName))
get_user_info(id, "name", szNewName, charsmax(szNewName))
get_user_name(id, szOldName, charsmax(szOldName))
get_user_name(id, szOldName, charsmax(szOldName))
if(!equal(szNewName, szOldName))
if(!equal(szNewName, szOldName))
{
{
if(!g_eSettings[SAVE_TYPE])
if(!g_eSettings[SAVE_TYPE])
{
{
use_vault(id, true, szOldName)
use_vault(id, true, szOldName)
use_vault(id, false, szNewName)
use_vault(id, false, szNewName)
copy(g_ePlayerData[id][Info], charsmax(g_ePlayerData[][Info]), szNewName)
copy(g_ePlayerData[id][Info], charsmax(g_ePlayerData[][Info]), szNewName)
strtolower(g_ePlayerData[id][Info])
strtolower(g_ePlayerData[id][Info])
}
}
set_task(FLAGS_DELAY, "refresh_status", id)
set_task(FLAGS_DELAY, "refresh_status", id)
copy(g_ePlayerData[id][Name], charsmax(g_ePlayerData[][Name]), szNewName)
copy(g_ePlayerData[id][Name], charsmax(g_ePlayerData[][Name]), szNewName)
}
}
}
}
public OnPlayerSpawn(id)
public OnPlayerSpawn(id)
{
{
if(!is_user_alive(id) || has_vip_flags(id) || ignore_bot(id))
if(!is_user_alive(id) || has_vip_flags(id) || ignore_bot(id))
return
return
复制
已复制
复制
已复制
new szName[32], szAuthId[35], szDateAndTime[22]
get_user_name(id, szName, charsmax(szName))
get_user_authid(id, szAuthId, charsmax(szAuthId))
get_time("%H:%M - %d/%m/%Y", szDateAndTime, charsmax(szDateAndTime))
set_hudmessage
set_hudmessage
(
(
g_eSettings[HUD_MESSAGE_COLOR][0] == ARG_RANDOM ? RANDOM_COLOR : g_eSettings[HUD_MESSAGE_COLOR][0],
g_eSettings[HUD_MESSAGE_COLOR][0] == ARG_RANDOM ? RANDOM_COLOR : g_eSettings[HUD_MESSAGE_COLOR][0],
g_eSettings[HUD_MESSAGE_COLOR][1] == ARG_RANDOM ? RANDOM_COLOR : g_eSettings[HUD_MESSAGE_COLOR][1],
g_eSettings[HUD_MESSAGE_COLOR][1] == ARG_RANDOM ? RANDOM_COLOR : g_eSettings[HUD_MESSAGE_COLOR][1],
g_eSettings[HUD_MESSAGE_COLOR][2] == ARG_RANDOM ? RANDOM_COLOR : g_eSettings[HUD_MESSAGE_COLOR][2],
g_eSettings[HUD_MESSAGE_COLOR][2] == ARG_RANDOM ? RANDOM_COLOR : g_eSettings[HUD_MESSAGE_COLOR][2],
g_eSettings[HUD_MESSAGE_POSITION][0], g_eSettings[HUD_MESSAGE_POSITION][1], g_eSettings[HUD_MESSAGE_EFFECTS],
g_eSettings[HUD_MESSAGE_POSITION][0], g_eSettings[HUD_MESSAGE_POSITION][1], g_eSettings[HUD_MESSAGE_EFFECTS],
g_eSettings[HUD_MESSAGE_TIME][0], g_eSettings[HUD_MESSAGE_DURATION], g_eSettings[HUD_MESSAGE_TIME][1], g_eSettings[HUD_MESSAGE_TIME][2]
g_eSettings[HUD_MESSAGE_TIME][0], g_eSettings[HUD_MESSAGE_DURATION], g_eSettings[HUD_MESSAGE_TIME][1], g_eSettings[HUD_MESSAGE_TIME][2]
)
)
复制
已复制
复制
已复制
ShowSyncHudMsg(id, g_iObject, "%L", id, "BECOMEVIP_HUD_MSG"
, g_eSettings[KILLS_NEEDED], g_ePlayerData[id][Kills]
)
ShowSyncHudMsg(id, g_iObject, "%L", id, "BECOMEVIP_HUD_MSG"
, szName, szAuthId
, g_eSettings[KILLS_NEEDED], g_ePlayerData[id][Kills]
, szDateAndTime
)
}
}
public OnPlayerKilled()
public OnPlayerKilled()
{
{
new iAttacker = read_data(1), iVictim = read_data(2)
new iAttacker = read_data(1), iVictim = read_data(2)
if(is_user_connected(iAttacker) && iAttacker != iVictim && !ignore_bot(iAttacker))
if(is_user_connected(iAttacker) && iAttacker != iVictim && !ignore_bot(iAttacker))
{
{
g_ePlayerData[iAttacker][Kills]++
g_ePlayerData[iAttacker][Kills]++
check_status(iAttacker, true)
check_status(iAttacker, true)
}
}
}
}
public Cmd_CheckKills(id)
public Cmd_CheckKills(id)
{
{
复制
已复制
复制
已复制
new szName[32], szAuthId[35], szDateAndTime[22]
get_user_name(id, szName, charsmax(szName))
get_user_authid(id, szAuthId, charsmax(szAuthId))
get_time("%H:%M - %d/%m/%Y", szDateAndTime, charsmax(szDateAndTime))
if(has_vip_flags(id))
if(has_vip_flags(id))
复制
已复制
复制
已复制
CC_SendMessage(id, "%L", id, "BECOMEVIP_INFO_YES"
, g_eSettings[KILLS_NEEDED], g_eSettings[VIP_FLAGS_STR]
)
CC_SendMessage(id, "%L", id, "BECOMEVIP_INFO_YES"
, szName, szAuthId
, g_eSettings[KILLS_NEEDED], g_eSettings[VIP_FLAGS_STR]
, szDateAndTime
)
else
else
复制
已复制
复制
已复制
CC_SendMessage(id, "%L", id, "BECOMEVIP_INFO_NO"
, g_eSettings[KILLS_NEEDED] - g_ePlayerData[id][Kills], g_ePlayerData[id][Kills], g_eSettings[VIP_FLAGS_STR]
)
CC_SendMessage(id, "%L", id, "BECOMEVIP_INFO_NO"
, szName, szAuthId
, g_eSettings[KILLS_NEEDED] - g_ePlayerData[id][Kills], g_ePlayerData[id][Kills], g_eSettings[VIP_FLAGS_STR]
, szDateAndTime
)
return PLUGIN_HANDLED
return PLUGIN_HANDLED
}
}
public Cmd_GiveKills(id, iLevel, iCid)
public Cmd_GiveKills(id, iLevel, iCid)
{
{
if(!cmd_access(id, iLevel, iCid, 3))
if(!cmd_access(id, iLevel, iCid, 3))
return PLUGIN_HANDLED
return PLUGIN_HANDLED
new szPlayer[32]
new szPlayer[32]
read_argv(1, szPlayer, charsmax(szPlayer))
read_argv(1, szPlayer, charsmax(szPlayer))
new iPlayer = cmd_target(id, szPlayer, CMDTARGET_ALLOW_SELF)
new iPlayer = cmd_target(id, szPlayer, CMDTARGET_ALLOW_SELF)
if(!iPlayer)
if(!iPlayer)
return PLUGIN_HANDLED
return PLUGIN_HANDLED
new szName[2][32], szAmount[8]
new szName[2][32], szAmount[8]
get_user_name(id, szName[0], charsmax(szName[]))
get_user_name(id, szName[0], charsmax(szName[]))
get_user_name(iPlayer, szName[1], charsmax(szName[]))
get_user_name(iPlayer, szName[1], charsmax(szName[]))
read_argv(2, szAmount, charsmax(szAmount))
read_argv(2, szAmount, charsmax(szAmount))
new iAmount = str_to_num(szAmount)
new iAmount = str_to_num(szAmount)
g_ePlayerData[iPlayer][Kills] += iAmount
g_ePlayerData[iPlayer][Kills] += iAmount
check_status(iPlayer, true)
check_status(iPlayer, true)
CC_LogMessage(0, _, "%L", LANG_PLAYER, iAmount >= 0 ? "BECOMEVIP_GIVE_KILLS" : "BECOMEVIP_TAKE_KILLS", szName[0], iAmount, szName[1])
CC_LogMessage(0, _, "%L", LANG_PLAYER, iAmount >= 0 ? "BECOMEVIP_GIVE_KILLS" : "BECOMEVIP_TAKE_KILLS", szName[0], iAmount, szName[1])
return PLUGIN_HANDLED
return PLUGIN_HANDLED
}
}
public Cmd_ResetKills(id, iLevel, iCid)
public Cmd_ResetKills(id, iLevel, iCid)
{
{
if(!cmd_access(id, iLevel, iCid, 2))
if(!cmd_access(id, iLevel, iCid, 2))
return PLUGIN_HANDLED
return PLUGIN_HANDLED
new szPlayer[32]
new szPlayer[32]
read_argv(1, szPlayer, charsmax(szPlayer))
read_argv(1, szPlayer, charsmax(szPlayer))
new iPlayer = cmd_target(id, szPlayer, CMDTARGET_ALLOW_SELF|CMDTARGET_OBEY_IMMUNITY)
new iPlayer = cmd_target(id, szPlayer, CMDTARGET_ALLOW_SELF|CMDTARGET_OBEY_IMMUNITY)
if(!iPlayer)
if(!iPlayer)
return PLUGIN_HANDLED
return PLUGIN_HANDLED
new szName[2][32]
new szName[2][32]
get_user_name(id, szName[0], charsmax(szName[]))
get_user_name(id, szName[0], charsmax(szName[]))
get_user_name(iPlayer, szName[1], charsmax(szName[]))
get_user_name(iPlayer, szName[1], charsmax(szName[]))
g_ePlayerData[iPlayer][Kills] = 0
g_ePlayerData[iPlayer][Kills] = 0
CC_LogMessage(0, _, "%L", LANG_PLAYER, "BECOMEVIP_RESET_KILLS", szName[0], szName[1])
CC_LogMessage(0, _, "%L", LANG_PLAYER, "BECOMEVIP_RESET_KILLS", szName[0], szName[1])
return PLUGIN_HANDLED
return PLUGIN_HANDLED
}
}
public refresh_status(id)
public refresh_status(id)
check_status(id, false)
check_status(id, false)
bool:check_status(const id, const bool:bAnnounce)
bool:check_status(const id, const bool:bAnnounce)
{
{
if(has_vip_flags(id) || ignore_bot(id))
if(has_vip_flags(id) || ignore_bot(id))
return
return
if(g_ePlayerData[id][Kills] >= g_eSettings[KILLS_NEEDED])
if(g_ePlayerData[id][Kills] >= g_eSettings[KILLS_NEEDED])
set_vip_flags(id, bAnnounce)
set_vip_flags(id, bAnnounce)
}
}
set_vip_flags(const id, const bool:bAnnounce)
set_vip_flags(const id, const bool:bAnnounce)
{
{
set_user_flags(id, g_eSettings[VIP_FLAGS_BIT])
set_user_flags(id, g_eSettings[VIP_FLAGS_BIT])
复制
已复制
复制
已复制
new szName[32], szAuthId[35], szDateAndTime[22]
get_user_name(id, szName, charsmax(szName))
get_user_authid(id, szAuthId, charsmax(szAuthId))
get_time("%H:%M - %d/%m/%Y", szDateAndTime, charsmax(szDateAndTime))
if(bAnnounce)
if(bAnnounce)
{
{
switch(g_eSettings[VIP_SUCCESS_MESSAGE])
switch(g_eSettings[VIP_SUCCESS_MESSAGE])
{
{
复制
已复制
复制
已复制
case 1: CC_SendMessage(id, "%L", id, "BECOMEVIP_SUCCESS_PLR"
, g_eSettings[VIP_FLAGS_STR], g_eSettings[KILLS_NEEDED]
)
case 1: CC_SendMessage(id, "%L", id, "BECOMEVIP_SUCCESS_PLR"
, szName, szAuthId
, g_eSettings[VIP_FLAGS_STR], g_eSettings[KILLS_NEEDED]
, szDateAndTime
)
case 2: CC_SendMessage(0, "%L", LANG_PLAYER, "BECOMEVIP_SUCCESS_ALL",
g_ePlayerData[id][
Name
]
, g_eSettings[VIP_FLAGS_STR], g_eSettings[KILLS_NEEDED]
)
case 2: CC_SendMessage(0, "%L", LANG_PLAYER, "BECOMEVIP_SUCCESS_ALL",
sz
Name
, szAuthId
, g_eSettings[VIP_FLAGS_STR], g_eSettings[KILLS_NEEDED]
, szDateAndTime
)
}
}
}
}
}
}
bool:ignore_bot(const id)
bool:ignore_bot(const id)
return (g_eSettings[IGNORE_BOTS] && is_user_bot(id))
return (g_eSettings[IGNORE_BOTS] && is_user_bot(id))
bool:has_vip_flags(const id)
bool:has_vip_flags(const id)
return ((get_user_flags(id) & g_eSettings[VIP_FLAGS_BIT]) == g_eSettings[VIP_FLAGS_BIT])
return ((get_user_flags(id) & g_eSettings[VIP_FLAGS_BIT]) == g_eSettings[VIP_FLAGS_BIT])
use_vault(const id, const bool:bSave, const szInfo[])
use_vault(const id, const bool:bSave, const szInfo[])
{
{
if(!szInfo[0])
if(!szInfo[0])
return
return
if(bSave)
if(bSave)
{
{
static szKills[10]
static szKills[10]
num_to_str(g_ePlayerData[id][Kills], szKills, charsmax(szKills))
num_to_str(g_ePlayerData[id][Kills], szKills, charsmax(szKills))
nvault_set(g_iVault, szInfo, szKills)
nvault_set(g_iVault, szInfo, szKills)
}
}
else
else
{
{
g_ePlayerData[id][Kills] = nvault_get(g_iVault, szInfo)
g_ePlayerData[id][Kills] = nvault_get(g_iVault, szInfo)
set_task(FLAGS_DELAY, "refresh_status", id)
set_task(FLAGS_DELAY, "refresh_status", id)
}
}
}
}
public plugin_natives()
public plugin_natives()
{
{
register_library("becomevip")
register_library("becomevip")
register_native("becomevip_get_flags", "_becomevip_get_flags")
register_native("becomevip_get_flags", "_becomevip_get_flags")
register_native("becomevip_get_kills_needed", "_becomevip_get_kills_needed")
register_native("becomevip_get_kills_needed", "_becomevip_get_kills_needed")
register_native("becomevip_get_save_type", "_becomevip_get_save_type")
register_native("becomevip_get_save_type", "_becomevip_get_save_type")
register_native("becomevip_get_user_kills", "_becomevip_get_user_kills")
register_native("becomevip_get_user_kills", "_becomevip_get_user_kills")
register_native("becomevip_is_hud_enabled", "_becomevip_is_hud_enabled")
register_native("becomevip_is_hud_enabled", "_becomevip_is_hud_enabled")
register_native("becomevip_user_has_flags", "_becomevip_user_has_flags")
register_native("becomevip_user_has_flags", "_becomevip_user_has_flags")
}
}
public _becomevip_get_flags(iPlugin, iParams)
public _becomevip_get_flags(iPlugin, iParams)
return g_eSettings[VIP_FLAGS_BIT]
return g_eSettings[VIP_FLAGS_BIT]
public _becomevip_get_kills_needed(iPlugin, iParams)
public _becomevip_get_kills_needed(iPlugin, iParams)
return g_eSettings[KILLS_NEEDED]
return g_eSettings[KILLS_NEEDED]
public _becomevip_get_save_type(iPlugin, iParams)
public _becomevip_get_save_type(iPlugin, iParams)
return g_eSettings[SAVE_TYPE]
return g_eSettings[SAVE_TYPE]
public _becomevip_get_user_kills(iPlugin, iParams)
public _becomevip_get_user_kills(iPlugin, iParams)
return g_ePlayerData[get_param(1)][Kills]
return g_ePlayerData[get_param(1)][Kills]
public bool:_becomevip_is_hud_enabled(iPlugin, iParams)
public bool:_becomevip_is_hud_enabled(iPlugin, iParams)
return g_eSettings[HUD_MESSAGE_ENABLED]
return g_eSettings[HUD_MESSAGE_ENABLED]
public bool:_becomevip_user_has_flags(iPlugin, iParams)
public bool:_becomevip_user_has_flags(iPlugin, iParams)
return has_vip_flags(get_param(1))
return has_vip_flags(get_param(1))
已保存差异
原始文本
打开文件
#include <amxmodx> #include <amxmisc> #include <cromchat> #include <hamsandwich> #include <nvault> #define PLUGIN_VERSION "2.1" #define ARG_RANDOM -1 #define RANDOM_COLOR random_num(50, 255) #define FLAGS_DELAY 0.1 #if defined client_disconnected #define client_disconnect client_disconnected #endif enum _:Settings { SAVE_TYPE, KILLS_NEEDED, VIP_FLAGS_BIT, VIP_FLAGS_STR[32], IGNORE_BOTS, VIP_SUCCESS_MESSAGE, bool:HUD_MESSAGE_ENABLED, HUD_MESSAGE_COLOR[3], Float:HUD_MESSAGE_POSITION[2], Float:HUD_MESSAGE_DURATION, HUD_MESSAGE_EFFECTS, Float:HUD_MESSAGE_TIME[3] } enum _:PlayerData { Name[32], Info[35], Kills } new g_eSettings[Settings], g_ePlayerData[33][PlayerData], g_iObject, g_iVault public plugin_init() { register_plugin("BecomeVIP Plus", PLUGIN_VERSION, "OciXCrom") register_cvar("CRXBecomeVIP", PLUGIN_VERSION, FCVAR_SERVER|FCVAR_SPONLY|FCVAR_UNLOGGED) register_dictionary("BecomeVIP.txt") register_event("DeathMsg", "OnPlayerKilled", "a") register_concmd("becomevip_give_kills", "Cmd_GiveKills", ADMIN_BAN, "<nick|#userid> <kills>") register_concmd("becomevip_reset_kills", "Cmd_ResetKills", ADMIN_BAN, "<nick|#userid>") ReadFile() } public plugin_end() nvault_close(g_iVault) ReadFile() { new szConfigsName[256], szFilename[256] get_configsdir(szConfigsName, charsmax(szConfigsName)) formatex(szFilename, charsmax(szFilename), "%s/BecomeVIP.ini", szConfigsName) new iFilePointer = fopen(szFilename, "rt") if(iFilePointer) { new szData[96], szValue[64], szKey[32], szTemp[4][5], i while(!feof(iFilePointer)) { fgets(iFilePointer, szData, charsmax(szData)) trim(szData) switch(szData[0]) { case EOS, '#', ';': continue default: { strtok(szData, szKey, charsmax(szKey), szValue, charsmax(szValue), '=') trim(szKey); trim(szValue) if(equal(szKey, "PLUGIN_PREFIX")) CC_SetPrefix(szValue) else if(equal(szKey, "SAVE_TYPE")) g_eSettings[SAVE_TYPE] = str_to_num(szValue) else if(equal(szKey, "KILLS_NEEDED")) g_eSettings[KILLS_NEEDED] = str_to_num(szValue) else if(equal(szKey, "VIP_FLAGS")) { copy(g_eSettings[VIP_FLAGS_STR], charsmax(g_eSettings[VIP_FLAGS_STR]), szValue) g_eSettings[VIP_FLAGS_BIT] = read_flags(szValue) } else if(equal(szKey, "IGNORE_BOTS")) g_eSettings[IGNORE_BOTS] = str_to_num(szValue) if(equal(szKey, "CHECK_KILLS_COMMANDS")) { while(szValue[0] != 0 && strtok(szValue, szKey, charsmax(szKey), szValue, charsmax(szValue), ',')) { trim(szKey); trim(szValue) if(szKey[0] == '/' || szKey[0] == '!') { formatex(szData, charsmax(szData), "say %s", szKey) register_clcmd(szData, "Cmd_CheckKills") formatex(szData, charsmax(szData), "say_team %s", szKey) register_clcmd(szData, "Cmd_CheckKills") } else register_clcmd(szData, "Cmd_CheckKills") } } else if(equal(szKey, "VAULT_FILE")) g_iVault = nvault_open(szValue) else if(equal(szKey, "VIP_SUCCESS_MESSAGE")) g_eSettings[VIP_SUCCESS_MESSAGE] = str_to_num(szValue) else if(equal(szKey, "HUD_MESSAGE_ENABLED")) { g_eSettings[HUD_MESSAGE_ENABLED] = bool:str_to_num(szValue) if(g_eSettings[HUD_MESSAGE_ENABLED]) { g_iObject = CreateHudSyncObj() RegisterHam(Ham_Spawn, "player", "OnPlayerSpawn", 1) } } else if(equal(szKey, "HUD_MESSAGE_COLOR")) { parse(szValue, szTemp[0], charsmax(szTemp[]), szTemp[1], charsmax(szTemp[]), szTemp[2], charsmax(szTemp[])) for(i = 0; i < 3; i++) g_eSettings[HUD_MESSAGE_COLOR][i] = str_to_num(szTemp[i]) } else if(equal(szKey, "HUD_MESSAGE_POSITION")) { parse(szValue, szTemp[0], charsmax(szTemp[]), szTemp[1], charsmax(szTemp[])) for(i = 0; i < 2; i++) g_eSettings[HUD_MESSAGE_POSITION][i] = _:str_to_float(szTemp[i]) } else if(equal(szKey, "HUD_MESSAGE_DURATION")) g_eSettings[HUD_MESSAGE_DURATION] = _:str_to_float(szValue) else if(equal(szKey, "HUD_MESSAGE_EFFECTS")) { parse(szValue, szTemp[0], charsmax(szTemp[]), szTemp[1], charsmax(szTemp[]), szTemp[2], charsmax(szTemp[]), szTemp[3], charsmax(szTemp[])) g_eSettings[HUD_MESSAGE_EFFECTS] = str_to_num(szTemp[0]) for(i = 0; i < 3; i++) g_eSettings[HUD_MESSAGE_TIME][i] = _:str_to_float(szTemp[i + 1]) } } } } fclose(iFilePointer) } } public client_authorized(id) { if(ignore_bot(id)) return switch(g_eSettings[SAVE_TYPE]) { case 0: { get_user_name(id, g_ePlayerData[id][Info], charsmax(g_ePlayerData[][Info])) strtolower(g_ePlayerData[id][Info]) } case 1: get_user_ip(id, g_ePlayerData[id][Info], charsmax(g_ePlayerData[][Info]), 1) case 2: get_user_authid(id, g_ePlayerData[id][Info], charsmax(g_ePlayerData[][Info])) } get_user_name(id, g_ePlayerData[id][Name], charsmax(g_ePlayerData[][Name])) use_vault(id, false, g_ePlayerData[id][Info]) } public client_disconnect(id) { if(ignore_bot(id)) return use_vault(id, true, g_ePlayerData[id][Info]) } public client_infochanged(id) { if(ignore_bot(id)) return static szNewName[32], szOldName[32] get_user_info(id, "name", szNewName, charsmax(szNewName)) get_user_name(id, szOldName, charsmax(szOldName)) if(!equal(szNewName, szOldName)) { if(!g_eSettings[SAVE_TYPE]) { use_vault(id, true, szOldName) use_vault(id, false, szNewName) copy(g_ePlayerData[id][Info], charsmax(g_ePlayerData[][Info]), szNewName) strtolower(g_ePlayerData[id][Info]) } set_task(FLAGS_DELAY, "refresh_status", id) copy(g_ePlayerData[id][Name], charsmax(g_ePlayerData[][Name]), szNewName) } } public OnPlayerSpawn(id) { if(!is_user_alive(id) || has_vip_flags(id) || ignore_bot(id)) return set_hudmessage ( g_eSettings[HUD_MESSAGE_COLOR][0] == ARG_RANDOM ? RANDOM_COLOR : g_eSettings[HUD_MESSAGE_COLOR][0], g_eSettings[HUD_MESSAGE_COLOR][1] == ARG_RANDOM ? RANDOM_COLOR : g_eSettings[HUD_MESSAGE_COLOR][1], g_eSettings[HUD_MESSAGE_COLOR][2] == ARG_RANDOM ? RANDOM_COLOR : g_eSettings[HUD_MESSAGE_COLOR][2], g_eSettings[HUD_MESSAGE_POSITION][0], g_eSettings[HUD_MESSAGE_POSITION][1], g_eSettings[HUD_MESSAGE_EFFECTS], g_eSettings[HUD_MESSAGE_TIME][0], g_eSettings[HUD_MESSAGE_DURATION], g_eSettings[HUD_MESSAGE_TIME][1], g_eSettings[HUD_MESSAGE_TIME][2] ) ShowSyncHudMsg(id, g_iObject, "%L", id, "BECOMEVIP_HUD_MSG", g_eSettings[KILLS_NEEDED], g_ePlayerData[id][Kills]) } public OnPlayerKilled() { new iAttacker = read_data(1), iVictim = read_data(2) if(is_user_connected(iAttacker) && iAttacker != iVictim && !ignore_bot(iAttacker)) { g_ePlayerData[iAttacker][Kills]++ check_status(iAttacker, true) } } public Cmd_CheckKills(id) { if(has_vip_flags(id)) CC_SendMessage(id, "%L", id, "BECOMEVIP_INFO_YES", g_eSettings[KILLS_NEEDED], g_eSettings[VIP_FLAGS_STR]) else CC_SendMessage(id, "%L", id, "BECOMEVIP_INFO_NO", g_eSettings[KILLS_NEEDED] - g_ePlayerData[id][Kills], g_ePlayerData[id][Kills], g_eSettings[VIP_FLAGS_STR]) return PLUGIN_HANDLED } public Cmd_GiveKills(id, iLevel, iCid) { if(!cmd_access(id, iLevel, iCid, 3)) return PLUGIN_HANDLED new szPlayer[32] read_argv(1, szPlayer, charsmax(szPlayer)) new iPlayer = cmd_target(id, szPlayer, CMDTARGET_ALLOW_SELF) if(!iPlayer) return PLUGIN_HANDLED new szName[2][32], szAmount[8] get_user_name(id, szName[0], charsmax(szName[])) get_user_name(iPlayer, szName[1], charsmax(szName[])) read_argv(2, szAmount, charsmax(szAmount)) new iAmount = str_to_num(szAmount) g_ePlayerData[iPlayer][Kills] += iAmount check_status(iPlayer, true) CC_LogMessage(0, _, "%L", LANG_PLAYER, iAmount >= 0 ? "BECOMEVIP_GIVE_KILLS" : "BECOMEVIP_TAKE_KILLS", szName[0], iAmount, szName[1]) return PLUGIN_HANDLED } public Cmd_ResetKills(id, iLevel, iCid) { if(!cmd_access(id, iLevel, iCid, 2)) return PLUGIN_HANDLED new szPlayer[32] read_argv(1, szPlayer, charsmax(szPlayer)) new iPlayer = cmd_target(id, szPlayer, CMDTARGET_ALLOW_SELF|CMDTARGET_OBEY_IMMUNITY) if(!iPlayer) return PLUGIN_HANDLED new szName[2][32] get_user_name(id, szName[0], charsmax(szName[])) get_user_name(iPlayer, szName[1], charsmax(szName[])) g_ePlayerData[iPlayer][Kills] = 0 CC_LogMessage(0, _, "%L", LANG_PLAYER, "BECOMEVIP_RESET_KILLS", szName[0], szName[1]) return PLUGIN_HANDLED } public refresh_status(id) check_status(id, false) bool:check_status(const id, const bool:bAnnounce) { if(has_vip_flags(id) || ignore_bot(id)) return if(g_ePlayerData[id][Kills] >= g_eSettings[KILLS_NEEDED]) set_vip_flags(id, bAnnounce) } set_vip_flags(const id, const bool:bAnnounce) { set_user_flags(id, g_eSettings[VIP_FLAGS_BIT]) if(bAnnounce) { switch(g_eSettings[VIP_SUCCESS_MESSAGE]) { case 1: CC_SendMessage(id, "%L", id, "BECOMEVIP_SUCCESS_PLR", g_eSettings[VIP_FLAGS_STR], g_eSettings[KILLS_NEEDED]) case 2: CC_SendMessage(0, "%L", LANG_PLAYER, "BECOMEVIP_SUCCESS_ALL", g_ePlayerData[id][Name], g_eSettings[VIP_FLAGS_STR], g_eSettings[KILLS_NEEDED]) } } } bool:ignore_bot(const id) return (g_eSettings[IGNORE_BOTS] && is_user_bot(id)) bool:has_vip_flags(const id) return ((get_user_flags(id) & g_eSettings[VIP_FLAGS_BIT]) == g_eSettings[VIP_FLAGS_BIT]) use_vault(const id, const bool:bSave, const szInfo[]) { if(!szInfo[0]) return if(bSave) { static szKills[10] num_to_str(g_ePlayerData[id][Kills], szKills, charsmax(szKills)) nvault_set(g_iVault, szInfo, szKills) } else { g_ePlayerData[id][Kills] = nvault_get(g_iVault, szInfo) set_task(FLAGS_DELAY, "refresh_status", id) } } public plugin_natives() { register_library("becomevip") register_native("becomevip_get_flags", "_becomevip_get_flags") register_native("becomevip_get_kills_needed", "_becomevip_get_kills_needed") register_native("becomevip_get_save_type", "_becomevip_get_save_type") register_native("becomevip_get_user_kills", "_becomevip_get_user_kills") register_native("becomevip_is_hud_enabled", "_becomevip_is_hud_enabled") register_native("becomevip_user_has_flags", "_becomevip_user_has_flags") } public _becomevip_get_flags(iPlugin, iParams) return g_eSettings[VIP_FLAGS_BIT] public _becomevip_get_kills_needed(iPlugin, iParams) return g_eSettings[KILLS_NEEDED] public _becomevip_get_save_type(iPlugin, iParams) return g_eSettings[SAVE_TYPE] public _becomevip_get_user_kills(iPlugin, iParams) return g_ePlayerData[get_param(1)][Kills] public bool:_becomevip_is_hud_enabled(iPlugin, iParams) return g_eSettings[HUD_MESSAGE_ENABLED] public bool:_becomevip_user_has_flags(iPlugin, iParams) return has_vip_flags(get_param(1))
更改后文本
打开文件
#include <amxmodx> #include <amxmisc> #include <cromchat> #include <hamsandwich> #include <nvault> #define PLUGIN_VERSION "2.1" #define ARG_RANDOM -1 #define RANDOM_COLOR random_num(50, 255) #define FLAGS_DELAY 0.1 #if defined client_disconnected #define client_disconnect client_disconnected #endif enum _:Settings { SAVE_TYPE, KILLS_NEEDED, VIP_FLAGS_BIT, VIP_FLAGS_STR[32], IGNORE_BOTS, VIP_SUCCESS_MESSAGE, bool:HUD_MESSAGE_ENABLED, HUD_MESSAGE_COLOR[3], Float:HUD_MESSAGE_POSITION[2], Float:HUD_MESSAGE_DURATION, HUD_MESSAGE_EFFECTS, Float:HUD_MESSAGE_TIME[3] } enum _:PlayerData { Name[32], Info[35], Kills } new g_eSettings[Settings], g_ePlayerData[33][PlayerData], g_iObject, g_iVault public plugin_init() { register_plugin("BecomeVIP Plus", PLUGIN_VERSION, "OciXCrom") register_cvar("CRXBecomeVIP", PLUGIN_VERSION, FCVAR_SERVER|FCVAR_SPONLY|FCVAR_UNLOGGED) register_dictionary("BecomeVIP.txt") register_event("DeathMsg", "OnPlayerKilled", "a") register_concmd("becomevip_give_kills", "Cmd_GiveKills", ADMIN_LEVEL_C, "<nick|#userid> <kills>") register_concmd("becomevip_reset_kills", "Cmd_ResetKills", ADMIN_LEVEL_C, "<nick|#userid>") ReadFile() } public plugin_end() nvault_close(g_iVault) ReadFile() { new szConfigsName[256], szFilename[256] get_configsdir(szConfigsName, charsmax(szConfigsName)) formatex(szFilename, charsmax(szFilename), "%s/BecomeVIP.ini", szConfigsName) new iFilePointer = fopen(szFilename, "rt") if(iFilePointer) { new szData[96], szValue[64], szKey[32], szTemp[4][5], i while(!feof(iFilePointer)) { fgets(iFilePointer, szData, charsmax(szData)) trim(szData) switch(szData[0]) { case EOS, '#', ';': continue default: { strtok(szData, szKey, charsmax(szKey), szValue, charsmax(szValue), '=') trim(szKey); trim(szValue) if(equal(szKey, "PLUGIN_PREFIX")) CC_SetPrefix(szValue) else if(equal(szKey, "SAVE_TYPE")) g_eSettings[SAVE_TYPE] = str_to_num(szValue) else if(equal(szKey, "KILLS_NEEDED")) g_eSettings[KILLS_NEEDED] = str_to_num(szValue) else if(equal(szKey, "VIP_FLAGS")) { copy(g_eSettings[VIP_FLAGS_STR], charsmax(g_eSettings[VIP_FLAGS_STR]), szValue) g_eSettings[VIP_FLAGS_BIT] = read_flags(szValue) } else if(equal(szKey, "IGNORE_BOTS")) g_eSettings[IGNORE_BOTS] = str_to_num(szValue) if(equal(szKey, "CHECK_KILLS_COMMANDS")) { while(szValue[0] != 0 && strtok(szValue, szKey, charsmax(szKey), szValue, charsmax(szValue), ',')) { trim(szKey); trim(szValue) if(szKey[0] == '/' || szKey[0] == '!') { formatex(szData, charsmax(szData), "say %s", szKey) register_clcmd(szData, "Cmd_CheckKills") formatex(szData, charsmax(szData), "say_team %s", szKey) register_clcmd(szData, "Cmd_CheckKills") } else register_clcmd(szData, "Cmd_CheckKills") } } else if(equal(szKey, "VAULT_FILE")) g_iVault = nvault_open(szValue) else if(equal(szKey, "VIP_SUCCESS_MESSAGE")) g_eSettings[VIP_SUCCESS_MESSAGE] = str_to_num(szValue) else if(equal(szKey, "HUD_MESSAGE_ENABLED")) { g_eSettings[HUD_MESSAGE_ENABLED] = bool:str_to_num(szValue) if(g_eSettings[HUD_MESSAGE_ENABLED]) { g_iObject = CreateHudSyncObj() RegisterHam(Ham_Spawn, "player", "OnPlayerSpawn", 1) } } else if(equal(szKey, "HUD_MESSAGE_COLOR")) { parse(szValue, szTemp[0], charsmax(szTemp[]), szTemp[1], charsmax(szTemp[]), szTemp[2], charsmax(szTemp[])) for(i = 0; i < 3; i++) g_eSettings[HUD_MESSAGE_COLOR][i] = str_to_num(szTemp[i]) } else if(equal(szKey, "HUD_MESSAGE_POSITION")) { parse(szValue, szTemp[0], charsmax(szTemp[]), szTemp[1], charsmax(szTemp[])) for(i = 0; i < 2; i++) g_eSettings[HUD_MESSAGE_POSITION][i] = _:str_to_float(szTemp[i]) } else if(equal(szKey, "HUD_MESSAGE_DURATION")) g_eSettings[HUD_MESSAGE_DURATION] = _:str_to_float(szValue) else if(equal(szKey, "HUD_MESSAGE_EFFECTS")) { parse(szValue, szTemp[0], charsmax(szTemp[]), szTemp[1], charsmax(szTemp[]), szTemp[2], charsmax(szTemp[]), szTemp[3], charsmax(szTemp[])) g_eSettings[HUD_MESSAGE_EFFECTS] = str_to_num(szTemp[0]) for(i = 0; i < 3; i++) g_eSettings[HUD_MESSAGE_TIME][i] = _:str_to_float(szTemp[i + 1]) } } } } fclose(iFilePointer) } } public client_authorized(id) { if(ignore_bot(id)) return switch(g_eSettings[SAVE_TYPE]) { case 0: { get_user_name(id, g_ePlayerData[id][Info], charsmax(g_ePlayerData[][Info])) strtolower(g_ePlayerData[id][Info]) } case 1: get_user_ip(id, g_ePlayerData[id][Info], charsmax(g_ePlayerData[][Info]), 1) case 2: get_user_authid(id, g_ePlayerData[id][Info], charsmax(g_ePlayerData[][Info])) } get_user_name(id, g_ePlayerData[id][Name], charsmax(g_ePlayerData[][Name])) use_vault(id, false, g_ePlayerData[id][Info]) } public client_disconnect(id) { if(ignore_bot(id)) return use_vault(id, true, g_ePlayerData[id][Info]) } public client_infochanged(id) { if(ignore_bot(id)) return static szNewName[32], szOldName[32] get_user_info(id, "name", szNewName, charsmax(szNewName)) get_user_name(id, szOldName, charsmax(szOldName)) if(!equal(szNewName, szOldName)) { if(!g_eSettings[SAVE_TYPE]) { use_vault(id, true, szOldName) use_vault(id, false, szNewName) copy(g_ePlayerData[id][Info], charsmax(g_ePlayerData[][Info]), szNewName) strtolower(g_ePlayerData[id][Info]) } set_task(FLAGS_DELAY, "refresh_status", id) copy(g_ePlayerData[id][Name], charsmax(g_ePlayerData[][Name]), szNewName) } } public OnPlayerSpawn(id) { if(!is_user_alive(id) || has_vip_flags(id) || ignore_bot(id)) return new szName[32], szAuthId[35], szDateAndTime[22] get_user_name(id, szName, charsmax(szName)) get_user_authid(id, szAuthId, charsmax(szAuthId)) get_time("%H:%M - %d/%m/%Y", szDateAndTime, charsmax(szDateAndTime)) set_hudmessage ( g_eSettings[HUD_MESSAGE_COLOR][0] == ARG_RANDOM ? RANDOM_COLOR : g_eSettings[HUD_MESSAGE_COLOR][0], g_eSettings[HUD_MESSAGE_COLOR][1] == ARG_RANDOM ? RANDOM_COLOR : g_eSettings[HUD_MESSAGE_COLOR][1], g_eSettings[HUD_MESSAGE_COLOR][2] == ARG_RANDOM ? RANDOM_COLOR : g_eSettings[HUD_MESSAGE_COLOR][2], g_eSettings[HUD_MESSAGE_POSITION][0], g_eSettings[HUD_MESSAGE_POSITION][1], g_eSettings[HUD_MESSAGE_EFFECTS], g_eSettings[HUD_MESSAGE_TIME][0], g_eSettings[HUD_MESSAGE_DURATION], g_eSettings[HUD_MESSAGE_TIME][1], g_eSettings[HUD_MESSAGE_TIME][2] ) ShowSyncHudMsg(id, g_iObject, "%L", id, "BECOMEVIP_HUD_MSG", szName, szAuthId, g_eSettings[KILLS_NEEDED], g_ePlayerData[id][Kills], szDateAndTime) } public OnPlayerKilled() { new iAttacker = read_data(1), iVictim = read_data(2) if(is_user_connected(iAttacker) && iAttacker != iVictim && !ignore_bot(iAttacker)) { g_ePlayerData[iAttacker][Kills]++ check_status(iAttacker, true) } } public Cmd_CheckKills(id) { new szName[32], szAuthId[35], szDateAndTime[22] get_user_name(id, szName, charsmax(szName)) get_user_authid(id, szAuthId, charsmax(szAuthId)) get_time("%H:%M - %d/%m/%Y", szDateAndTime, charsmax(szDateAndTime)) if(has_vip_flags(id)) CC_SendMessage(id, "%L", id, "BECOMEVIP_INFO_YES", szName, szAuthId, g_eSettings[KILLS_NEEDED], g_eSettings[VIP_FLAGS_STR], szDateAndTime) else CC_SendMessage(id, "%L", id, "BECOMEVIP_INFO_NO", szName, szAuthId, g_eSettings[KILLS_NEEDED] - g_ePlayerData[id][Kills], g_ePlayerData[id][Kills], g_eSettings[VIP_FLAGS_STR], szDateAndTime) return PLUGIN_HANDLED } public Cmd_GiveKills(id, iLevel, iCid) { if(!cmd_access(id, iLevel, iCid, 3)) return PLUGIN_HANDLED new szPlayer[32] read_argv(1, szPlayer, charsmax(szPlayer)) new iPlayer = cmd_target(id, szPlayer, CMDTARGET_ALLOW_SELF) if(!iPlayer) return PLUGIN_HANDLED new szName[2][32], szAmount[8] get_user_name(id, szName[0], charsmax(szName[])) get_user_name(iPlayer, szName[1], charsmax(szName[])) read_argv(2, szAmount, charsmax(szAmount)) new iAmount = str_to_num(szAmount) g_ePlayerData[iPlayer][Kills] += iAmount check_status(iPlayer, true) CC_LogMessage(0, _, "%L", LANG_PLAYER, iAmount >= 0 ? "BECOMEVIP_GIVE_KILLS" : "BECOMEVIP_TAKE_KILLS", szName[0], iAmount, szName[1]) return PLUGIN_HANDLED } public Cmd_ResetKills(id, iLevel, iCid) { if(!cmd_access(id, iLevel, iCid, 2)) return PLUGIN_HANDLED new szPlayer[32] read_argv(1, szPlayer, charsmax(szPlayer)) new iPlayer = cmd_target(id, szPlayer, CMDTARGET_ALLOW_SELF|CMDTARGET_OBEY_IMMUNITY) if(!iPlayer) return PLUGIN_HANDLED new szName[2][32] get_user_name(id, szName[0], charsmax(szName[])) get_user_name(iPlayer, szName[1], charsmax(szName[])) g_ePlayerData[iPlayer][Kills] = 0 CC_LogMessage(0, _, "%L", LANG_PLAYER, "BECOMEVIP_RESET_KILLS", szName[0], szName[1]) return PLUGIN_HANDLED } public refresh_status(id) check_status(id, false) bool:check_status(const id, const bool:bAnnounce) { if(has_vip_flags(id) || ignore_bot(id)) return if(g_ePlayerData[id][Kills] >= g_eSettings[KILLS_NEEDED]) set_vip_flags(id, bAnnounce) } set_vip_flags(const id, const bool:bAnnounce) { set_user_flags(id, g_eSettings[VIP_FLAGS_BIT]) new szName[32], szAuthId[35], szDateAndTime[22] get_user_name(id, szName, charsmax(szName)) get_user_authid(id, szAuthId, charsmax(szAuthId)) get_time("%H:%M - %d/%m/%Y", szDateAndTime, charsmax(szDateAndTime)) if(bAnnounce) { switch(g_eSettings[VIP_SUCCESS_MESSAGE]) { case 1: CC_SendMessage(id, "%L", id, "BECOMEVIP_SUCCESS_PLR", szName, szAuthId, g_eSettings[VIP_FLAGS_STR], g_eSettings[KILLS_NEEDED], szDateAndTime) case 2: CC_SendMessage(0, "%L", LANG_PLAYER, "BECOMEVIP_SUCCESS_ALL", szName, szAuthId, g_eSettings[VIP_FLAGS_STR], g_eSettings[KILLS_NEEDED], szDateAndTime) } } } bool:ignore_bot(const id) return (g_eSettings[IGNORE_BOTS] && is_user_bot(id)) bool:has_vip_flags(const id) return ((get_user_flags(id) & g_eSettings[VIP_FLAGS_BIT]) == g_eSettings[VIP_FLAGS_BIT]) use_vault(const id, const bool:bSave, const szInfo[]) { if(!szInfo[0]) return if(bSave) { static szKills[10] num_to_str(g_ePlayerData[id][Kills], szKills, charsmax(szKills)) nvault_set(g_iVault, szInfo, szKills) } else { g_ePlayerData[id][Kills] = nvault_get(g_iVault, szInfo) set_task(FLAGS_DELAY, "refresh_status", id) } } public plugin_natives() { register_library("becomevip") register_native("becomevip_get_flags", "_becomevip_get_flags") register_native("becomevip_get_kills_needed", "_becomevip_get_kills_needed") register_native("becomevip_get_save_type", "_becomevip_get_save_type") register_native("becomevip_get_user_kills", "_becomevip_get_user_kills") register_native("becomevip_is_hud_enabled", "_becomevip_is_hud_enabled") register_native("becomevip_user_has_flags", "_becomevip_user_has_flags") } public _becomevip_get_flags(iPlugin, iParams) return g_eSettings[VIP_FLAGS_BIT] public _becomevip_get_kills_needed(iPlugin, iParams) return g_eSettings[KILLS_NEEDED] public _becomevip_get_save_type(iPlugin, iParams) return g_eSettings[SAVE_TYPE] public _becomevip_get_user_kills(iPlugin, iParams) return g_ePlayerData[get_param(1)][Kills] public bool:_becomevip_is_hud_enabled(iPlugin, iParams) return g_eSettings[HUD_MESSAGE_ENABLED] public bool:_becomevip_user_has_flags(iPlugin, iParams) return has_vip_flags(get_param(1))
查找差异