Become VIP Plus

Одобрените от нас плъгини. Моля, докладвайте ако забележите бъг с някой от плъгините в този раздел.
Потребителски аватар

Ant1Lamer M.O.B
Потребител
Потребител
Мнения: 174
Регистриран: 08 окт 2016, 00:03
Се отблагодари: 12 пъти
Получена благодарност: 2 пъти
Години: 27

Become VIP Plus

Мнение от Ant1Lamer M.O.B » 12 сеп 2019, 16:07

ъпп със сял има ли го с амхбанс ?
НАУЧИ ПРАВИЛАТА, ЗА ДА ЗНАЕШ КАК ПОРЯДЪЧНО ДА ГИ НАРУШАВАШ!!!

Потребителски аватар

Автор на темата
OciXCrom TM
Администратор
Администратор
Мнения: 5789
Регистриран: 06 окт 2016, 19:20
Местоположение: /resetscore
Се отблагодари: 107 пъти
Получена благодарност: 693 пъти
Години: 22
Контакти:

Become VIP Plus

Мнение от OciXCrom TM » 13 сеп 2019, 14:34

Плъгинът запазва броя на убийства в nVault файл. Не мисля, че има нужда да се усложняват нещата с MySQL и прочие при положение, че просто трябва да се прочете един ред от файла.

Потребителски аватар

Ant1Lamer M.O.B
Потребител
Потребител
Мнения: 174
Регистриран: 08 окт 2016, 00:03
Се отблагодари: 12 пъти
Получена благодарност: 2 пъти
Години: 27

Become VIP Plus

Мнение от Ant1Lamer M.O.B » 13 сеп 2019, 22:28

Да това го разбрах въпроса ми е, както полазвам амхбанс при достигане на определеният брой фрагове флага ще го отчете ли тоест ще го даде ли ?
НАУЧИ ПРАВИЛАТА, ЗА ДА ЗНАЕШ КАК ПОРЯДЪЧНО ДА ГИ НАРУШАВАШ!!!

Потребителски аватар

mi0 cool
AMXX Скриптър
AMXX Скриптър
Мнения: 410
Регистриран: 09 дек 2016, 22:02
Се отблагодари: 84 пъти
Получена благодарност: 88 пъти
Години: 26
Контакти:

Become VIP Plus

Мнение от mi0 cool » 13 сеп 2019, 22:32

Флаговете не се записват по файлове или бази данни, ами дава флагове на момента до като играча е в сървъра.
► Покажи скъсения текст
They call me kurdokoleno
Catch Mod - 93.123.18.38:27018

Потребителски аватар

Ant1Lamer M.O.B
Потребител
Потребител
Мнения: 174
Регистриран: 08 окт 2016, 00:03
Се отблагодари: 12 пъти
Получена благодарност: 2 пъти
Години: 27

Become VIP Plus

Мнение от Ant1Lamer M.O.B » 13 сеп 2019, 22:47

мдаа разбрах сега видях и тествах дава ги дори с амхбанс, а дали може да се направи за определени дни да седи колкото аз реша а не докато играча е в сървъра
НАУЧИ ПРАВИЛАТА, ЗА ДА ЗНАЕШ КАК ПОРЯДЪЧНО ДА ГИ НАРУШАВАШ!!!

Потребителски аватар

mi0 cool
AMXX Скриптър
AMXX Скриптър
Мнения: 410
Регистриран: 09 дек 2016, 22:02
Се отблагодари: 84 пъти
Получена благодарност: 88 пъти
Години: 26
Контакти:

Become VIP Plus

Мнение от mi0 cool » 13 сеп 2019, 22:52

Не разбрах, какво точно искаш да направиш? Щом играча има убииствата запазени, винаги щом е в сървъра ще има флаговете. Иначе не виждам причина, ако искаш това което си мисля, понеже ако не е в сървъра, няма как да ползва флаговете?
They call me kurdokoleno
Catch Mod - 93.123.18.38:27018

Потребителски аватар

Ant1Lamer M.O.B
Потребител
Потребител
Мнения: 174
Регистриран: 08 окт 2016, 00:03
Се отблагодари: 12 пъти
Получена благодарност: 2 пъти
Години: 27

Become VIP Plus

Мнение от Ant1Lamer M.O.B » 23 сеп 2019, 18:50

Ами искам на определен период от време които аз му задам да речем правя го 14 дена да седи даденият флаг и да се маха и да трябва наново да ги правят тези килове, но това да е индивидуално за всеки играч тоест прави да речем 1000 кила даденият играч и след 14 дена автоматично му се маха флага и започва наново 1000 кила, но това да не зависи от топа дали ще е реснат или не и примерно да изписва колко време му остава докато флагът се махне
НАУЧИ ПРАВИЛАТА, ЗА ДА ЗНАЕШ КАК ПОРЯДЪЧНО ДА ГИ НАРУШАВАШ!!!

Потребителски аватар

mi0 cool
AMXX Скриптър
AMXX Скриптър
Мнения: 410
Регистриран: 09 дек 2016, 22:02
Се отблагодари: 84 пъти
Получена благодарност: 88 пъти
Години: 26
Контакти:

Become VIP Plus

Мнение от mi0 cool » 23 сеп 2019, 20:05

Ето ти кода, не съм го тествал

Код: Избери всички

#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
Note - Чак сега се сещам, че NVault има TimeStamp, ако някой иска да го преработи.
They call me kurdokoleno
Catch Mod - 93.123.18.38:27018

Потребителски аватар

Ant1Lamer M.O.B
Потребител
Потребител
Мнения: 174
Регистриран: 08 окт 2016, 00:03
Се отблагодари: 12 пъти
Получена благодарност: 2 пъти
Години: 27

Become VIP Plus

Мнение от Ant1Lamer M.O.B » 23 сеп 2019, 21:39

Мерси ще го пробвам, а това TimeStamp за какво е ? А с Fvault не ли по - добре ? Просто питам
НАУЧИ ПРАВИЛАТА, ЗА ДА ЗНАЕШ КАК ПОРЯДЪЧНО ДА ГИ НАРУШАВАШ!!!

Потребителски аватар

mi0 cool
AMXX Скриптър
AMXX Скриптър
Мнения: 410
Регистриран: 09 дек 2016, 22:02
Се отблагодари: 84 пъти
Получена благодарност: 88 пъти
Години: 26
Контакти:

Become VIP Plus

Мнение от mi0 cool » 23 сеп 2019, 21:42

Написал съм, че в NVault има TimeStamp и че може да се ползва него, вместо get_time. FVault е библиотека, NVault е модул и съответно работи по-бързо. Плъгина е направен, да работи на NVault.
Edit: Забравих да добавя - ако вече има випове, времето за изтичане ще почне да се брой, когато випа влезе отново.
They call me kurdokoleno
Catch Mod - 93.123.18.38:27018

Отговори

Върни се в “Одобрени плъгини”

Кой е на линия

Потребители, разглеждащи този форум: Няма регистрирани потребители и 1 гост