Become VIP Plus
-
Ant1Lamer
Извън линия - Потребител
- Мнения: 217
- Регистриран на: 08 Окт 2016, 00:03
- Се отблагодари: 18 пъти
- Получена благодарност: 3 пъти
Become VIP Plus
ъпп със сял има ли го с амхбанс ?
НАУЧИ ПРАВИЛАТА, ЗА ДА ЗНАЕШ КАК ПОРЯДЪЧНО ДА ГИ НАРУШАВАШ!!!
-
OciXCrom
Извън линия - Администратор
- Мнения: 7206
- Регистриран на: 06 Окт 2016, 19:20
- Местоположение: /resetscore
- Се отблагодари: 117 пъти
- Получена благодарност: 1295 пъти
- Обратна връзка:
Become VIP Plus
Плъгинът запазва броя на убийства в nVault файл. Не мисля, че има нужда да се усложняват нещата с MySQL и прочие при положение, че просто трябва да се прочете един ред от файла.
-
Ant1Lamer
Извън линия - Потребител
- Мнения: 217
- Регистриран на: 08 Окт 2016, 00:03
- Се отблагодари: 18 пъти
- Получена благодарност: 3 пъти
Become VIP Plus
Да това го разбрах въпроса ми е, както полазвам амхбанс при достигане на определеният брой фрагове флага ще го отчете ли тоест ще го даде ли ?
НАУЧИ ПРАВИЛАТА, ЗА ДА ЗНАЕШ КАК ПОРЯДЪЧНО ДА ГИ НАРУШАВАШ!!!
-
mi0
Извън линия - AMXX Скриптър
- Мнения: 534
- Регистриран на: 09 Дек 2016, 22:02
- Се отблагодари: 97 пъти
- Получена благодарност: 120 пъти
- Обратна връзка:
Become VIP Plus
Флаговете не се записват по файлове или бази данни, ами дава флагове на момента до като играча е в сървъра.
► Покажи скъсения текст
aka kurdokoleno
Catch Mod - 87.121.112.232:27021
Catch Mod - 87.121.112.232:27021
-
Ant1Lamer
Извън линия - Потребител
- Мнения: 217
- Регистриран на: 08 Окт 2016, 00:03
- Се отблагодари: 18 пъти
- Получена благодарност: 3 пъти
Become VIP Plus
мдаа разбрах сега видях и тествах дава ги дори с амхбанс, а дали може да се направи за определени дни да седи колкото аз реша а не докато играча е в сървъра
НАУЧИ ПРАВИЛАТА, ЗА ДА ЗНАЕШ КАК ПОРЯДЪЧНО ДА ГИ НАРУШАВАШ!!!
-
mi0
Извън линия - AMXX Скриптър
- Мнения: 534
- Регистриран на: 09 Дек 2016, 22:02
- Се отблагодари: 97 пъти
- Получена благодарност: 120 пъти
- Обратна връзка:
Become VIP Plus
Не разбрах, какво точно искаш да направиш? Щом играча има убииствата запазени, винаги щом е в сървъра ще има флаговете. Иначе не виждам причина, ако искаш това което си мисля, понеже ако не е в сървъра, няма как да ползва флаговете?
aka kurdokoleno
Catch Mod - 87.121.112.232:27021
Catch Mod - 87.121.112.232:27021
-
Ant1Lamer
Извън линия - Потребител
- Мнения: 217
- Регистриран на: 08 Окт 2016, 00:03
- Се отблагодари: 18 пъти
- Получена благодарност: 3 пъти
Become VIP Plus
Ами искам на определен период от време които аз му задам да речем правя го 14 дена да седи даденият флаг и да се маха и да трябва наново да ги правят тези килове, но това да е индивидуално за всеки играч тоест прави да речем 1000 кила даденият играч и след 14 дена автоматично му се маха флага и започва наново 1000 кила, но това да не зависи от топа дали ще е реснат или не и примерно да изписва колко време му остава докато флагът се махне
НАУЧИ ПРАВИЛАТА, ЗА ДА ЗНАЕШ КАК ПОРЯДЪЧНО ДА ГИ НАРУШАВАШ!!!
-
mi0
Извън линия - AMXX Скриптър
- Мнения: 534
- Регистриран на: 09 Дек 2016, 22:02
- Се отблагодари: 97 пъти
- Получена благодарност: 120 пъти
- Обратна връзка:
Become VIP Plus
Ето ти кода, не съм го тествал
Добавяш в конфиг файла.
Note - Чак сега се сещам, че NVault има TimeStamp, ако някой иска да го преработи.
Код за потвърждение: Избери целия код
#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],
DAYS_TO_SAVE
}
enum _:PlayerData
{
Name[32],
Info[35],
Kills
}
new g_eSettings[Settings],
g_ePlayerData[33][PlayerData],
g_iObject,
g_iVault,
bool:g_bShouldSaveDate[33]
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])
}
else if(equal(szKey, "DAYS_TO_SAVE"))
g_eSettings[DAYS_TO_SAVE] = str_to_num(szValue)
}
}
}
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)
else
g_bShouldSaveDate[id] = true
}
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
new szData[32]
if(bSave)
{
get_time("%y %j", szData, charsmax(szData))
format(szData, charsmax(szData), "%d %s", g_ePlayerData[id][Kills], szData)
nvault_set(g_iVault, szInfo, szData)
}
else
{
nvault_get(g_iVault, szInfo, szData, charsmax(szData))
if (contain(szData, " "))
{
new szKills[16], szOldYear[3], szOldDay[3]
parse(szData, szKills, charsmax(szKills), szOldYear, charsmax(szOldYear), szOldDay, charsmax(szOldDay))
g_ePlayerData[id][Kills] = str_to_num(szKills)
if (g_ePlayerData[id][Kills] > g_eSettings[KILLS_NEEDED])
{
new szDate[64], szNewYear[3], szNewDay[3]
get_time("%y %j", szDate, charsmax(szDate))
parse(szDate, szNewYear, charsmax(szNewYear), szNewDay, charsmax(szNewDay))
new iOldYear = str_to_num(szOldYear), iOldDay = str_to_num(szOldDay), iNewYear = str_to_num(szNewYear), iNewDay = str_to_num(szNewDay)
new iOldYearDays = floatround(iOldYear * 365.25, floatround_ceil) + iOldDay
new iNewYearDays = floatround(iNewYear * 365.25, floatround_ceil) + iNewDay
if (iNewYearDays - iOldYearDays > g_eSettings[DAYS_TO_SAVE])
{
g_ePlayerData[id][Kills] = 0
}
}
}
else
{
g_ePlayerData[id][Kills] = str_to_num(szData)
}
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))
Код за потвърждение: Избери целия код
DAYS_TO_SAVE = 15
aka kurdokoleno
Catch Mod - 87.121.112.232:27021
Catch Mod - 87.121.112.232:27021
-
Ant1Lamer
Извън линия - Потребител
- Мнения: 217
- Регистриран на: 08 Окт 2016, 00:03
- Се отблагодари: 18 пъти
- Получена благодарност: 3 пъти
Become VIP Plus
Мерси ще го пробвам, а това TimeStamp за какво е ? А с Fvault не ли по - добре ? Просто питам
НАУЧИ ПРАВИЛАТА, ЗА ДА ЗНАЕШ КАК ПОРЯДЪЧНО ДА ГИ НАРУШАВАШ!!!
-
mi0
Извън линия - AMXX Скриптър
- Мнения: 534
- Регистриран на: 09 Дек 2016, 22:02
- Се отблагодари: 97 пъти
- Получена благодарност: 120 пъти
- Обратна връзка:
Become VIP Plus
Написал съм, че в NVault има TimeStamp и че може да се ползва него, вместо get_time. FVault е библиотека, NVault е модул и съответно работи по-бързо. Плъгина е направен, да работи на NVault.
Edit: Забравих да добавя - ако вече има випове, времето за изтичане ще почне да се брой, когато випа влезе отново.
Edit: Забравих да добавя - ако вече има випове, времето за изтичане ще почне да се брой, когато випа влезе отново.
aka kurdokoleno
Catch Mod - 87.121.112.232:27021
Catch Mod - 87.121.112.232:27021
Кой е на линия
Потребители разглеждащи този форум: Google [Bot] и 39 госта