Ако имаш такъв проблем, опитай да заместиш функцията client_authorized с client_connect. Поне аз никога не съм имал проблем при ползване на втората. Ако се оправи по този начин, ще обновя плъгина.JackEyedJones написа: ↑11 Яну 2019, 19:22 Някой срещал ли е проблем със запазването на статистиките ? Тоест изгубване или рестартиране на убийствата от самосебеси.
Become VIP Plus
-
OciXCrom
Извън линия - Администратор
- Мнения: 7206
- Регистриран на: 06 Окт 2016, 19:20
- Местоположение: /resetscore
- Се отблагодари: 117 пъти
- Получена благодарност: 1295 пъти
- Обратна връзка:
Become VIP Plus
-
JackEyedJones
Извън линия - Потребител
- Мнения: 399
- Регистриран на: 10 Сеп 2018, 17:26
- Местоположение: Plovdiv, Bulgaria, Europe, Entire World
- Се отблагодари: 4 пъти
- Получена благодарност: 69 пъти
- Обратна връзка:
Become VIP Plus
Ще се замести едното с другото и ще се пробва. Обмислян ли е съб-плъгин с който можем посредством чат команда да се отваря меню показващо кой колко убийства има до момента и съответно с чат команда да се проверява статистиката на съответен играч персонално, съответно на онлайн и offline такъв. Подобно на /xplist в Ранк системата.
-
iv69
Извън линия - Потребител
- Мнения: 744
- Регистриран на: 17 Мар 2018, 15:34
- Се отблагодари: 214 пъти
- Получена благодарност: 39 пъти
Become VIP Plus
Оцикс,
Много ми се иска да ползвам плъгина, но както се вижда и в коментариите ми - не ме устройва идеята при достигане на "определения праг"на убийства - играча да получава "ПЕРМАНЕНТНО" - или завинаги VIP... затова се чудя, ще може ли да се добави например опция(която - който иска, да може да си я активира) със която да се следи достигане на втори "праг" от убийства от VIP-играча - и след като бъде достигнат - плъгина да започва "броенето" за VIP отново ?
Примерно: както ако нов влязъл играч достигне 500убийства - и придобие VIP , така, след неговите следващи 500убийства (тоест когато натрупа 1000 убийства) - да се "занулява"статистиката му и да се губят VIPправата -и броенето да започва пак отначало ...? Мисля, че плъгина така, ще има малко по-голяма вариабилност и ще има по-голям интерес към него, след такъв "ъпдейт" ???
Благодаря !
-
glmmlg
Извън линия - Foreigner
- Мнения: 31
- Регистриран на: 20 Фев 2019, 21:51
- Се отблагодари: 6 пъти
- Получена благодарност: 2 пъти
Become VIP Plus
Hellow here its a bug on save kills on Nickname. So i will take first name (test) connect on server make 3 kills , than disconnect change name to other one like (asdasda) after this connect again to the server make 1 kill and than disconnect again , change back your name in to (test) and join again to the server your kills its back to 0 .
-
HD.Yordanov
Извън линия - Потребител
- Мнения: 5
- Регистриран на: 19 Апр 2019, 16:07
Become VIP Plus
Интересно ми сложул съм този плъгин очита,че даден играч има над 1000 фрага изписва ,че имат вип а дефакто нямат нито префикс нито ексти от кво може да е ?
-
thoughtz
Извън линия - Модератор
- Мнения: 585
- Регистриран на: 13 Окт 2016, 00:32
- Местоположение: гр. София
- Се отблагодари: 112 пъти
- Получена благодарност: 79 пъти
- Обратна връзка:
Become VIP Plus
Отделно от префикса, прочете ли забележката в описанието?
☄ Забележка
☄ Забележка
- Имайте предвид, че плъгинът само дава флаговете, а не добавя никакви екстри. Нужно е да ползвате отделен плъгин за екстрите, тъй като е напълно ненужно този да ги съдържа. Можете да си генерирате плъгин за екстри от тук.
-
iv69
Извън линия - Потребител
- Мнения: 744
- Регистриран на: 17 Мар 2018, 15:34
- Се отблагодари: 214 пъти
- Получена благодарност: 39 пъти
Become VIP Plus
Кроме,
ще бъдеш ли така добър(когато имаш време и настроение), да качиш версия на плъгина с която придобитите флагове от играчите, след направения брой убийства да се "рескат" при всяка смяна на картата, мисля , че някъде в темата каза , че това не е невъзможно? Плъгина съм го пробвал, харесва ми и искам да го ползвам за постоянно, но би ли го променил?!
Благодаря.
ще бъдеш ли така добър(когато имаш време и настроение), да качиш версия на плъгина с която придобитите флагове от играчите, след направения брой убийства да се "рескат" при всяка смяна на картата, мисля , че някъде в темата каза , че това не е невъзможно? Плъгина съм го пробвал, харесва ми и искам да го ползвам за постоянно, но би ли го променил?!
Благодаря.
-
OciXCrom
Извън линия - Администратор
- Мнения: 7206
- Регистриран на: 06 Окт 2016, 19:20
- Местоположение: /resetscore
- Се отблагодари: 117 пъти
- Получена благодарност: 1295 пъти
- Обратна връзка:
Become VIP Plus
Не е тествано. Когато играчът получи флаговете, бива изтриван од nVault файла и убийствата за текущата карта се връщат на 0. Имай предвид, че това е лоша идея, тъй като играчът може да направи последното убийство в последната секунда от времетраенето на картата и изобщо да няма шанс да ползва получените екстри.iv69 написа: ↑08 Май 2019, 14:07 Кроме,
ще бъдеш ли така добър(когато имаш време и настроение), да качиш версия на плъгина с която придобитите флагове от играчите, след направения брой убийства да се "рескат" при всяка смяна на картата, мисля , че някъде в темата каза , че това не е невъзможно? Плъгина съм го пробвал, харесва ми и искам да го ползвам за постоянно, но би ли го променил?!
Благодаря.
Код за потвърждение: Избери целия код
#include <amxmodx>
#include <amxmisc>
#include <cromchat>
#include <hamsandwich>
#include <nvault>
#define PLUGIN_VERSION "2.2-alpha"
#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)
nvault_remove(g_iVault, g_ePlayerData[id][Info])
g_ePlayerData[id][Kills] = 0
}
}
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))
-
iv69
Извън линия - Потребител
- Мнения: 744
- Регистриран на: 17 Мар 2018, 15:34
- Се отблагодари: 214 пъти
- Получена благодарност: 39 пъти
Become VIP Plus
хехех , благодаря, веднага ще го тествам: За това: "...играчът може да направи последното убийство в последната секунда от времетраенето на картата и изобщо да няма шанс да ползва получените екстри..." не бях се замислял изобщо, но... , имаш невероятно "чувство за справедливост" ...хехе, пак благодаря.OciXCrom написа: ↑09 Май 2019, 17:34Не е тествано. Когато играчът получи флаговете, бива изтриван од nVault файла и убийствата за текущата карта се връщат на 0. Имай предвид, че това е лоша идея, тъй като играчът може да направи последното убийство в последната секунда от времетраенето на картата и изобщо да няма шанс да ползва получените екстри.iv69 написа: ↑08 Май 2019, 14:07 Кроме,
ще бъдеш ли така добър(когато имаш време и настроение), да качиш версия на плъгина с която придобитите флагове от играчите, след направения брой убийства да се "рескат" при всяка смяна на картата, мисля , че някъде в темата каза , че това не е невъзможно? Плъгина съм го пробвал, харесва ми и искам да го ползвам за постоянно, но би ли го променил?!
Благодаря.
Код за потвърждение: Избери целия код
#include <amxmodx> #include <amxmisc> #include <cromchat> #include <hamsandwich> #include <nvault> #define PLUGIN_VERSION "2.2-alpha" #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) nvault_remove(g_iVault, g_ePlayerData[id][Info]) g_ePlayerData[id][Kills] = 0 } } 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))
"Поправката" работи точно както ИСКАХ . БЛАГОДАРЯ !
Кой е на линия
Потребители разглеждащи този форум: 0 регистрирани и 16 госта