AWP Models [XP System Support]

Одобрените от нас плъгини. Моля, докладвайте ако забележите бъг с някой от плъгините в този раздел.
Аватар
Siska
Извън линия
Потребител
Потребител
Мнения: 771
Регистриран на: 03 Дек 2019, 22:29
Местоположение: Bedrock
Се отблагодари: 157 пъти
Получена благодарност: 48 пъти
Обратна връзка:

AWP Models [XP System Support]

Мнение от Siska » 06 Ное 2020, 11:51

Искам да попитам колко модела могат да се ползват с този плъгин ? Има ли някакво ограничение и трябва ли задължително да са в една папка с късо име ? Може ли да крашва сървъра , защото сложих много папки една в друга и с дълги имена ?
Търсих врага и го открих : това съм аз , трябва да се победя...
Изображение
WWW.CSMEGAGAMING.COM Изображение Изображение Skype : Sisi-1_1

Аватар
OciXCrom
Извън линия
Администратор
Администратор
Мнения: 7206
Регистриран на: 06 Окт 2016, 19:20
Местоположение: /resetscore
Се отблагодари: 117 пъти
Получена благодарност: 1295 пъти
Обратна връзка:

AWP Models [XP System Support]

Мнение от OciXCrom » 06 Ное 2020, 12:37

Няма никакво ограничение от плъгина и не знам какво значение мислиш, че имат имената и папките. Ограничението си е стандартното което е наложено от самата игра, демек 512 ресурса общо.

Аватар
GGzBoy
Извън линия
Foreigner
Foreigner
Мнения: 63
Регистриран на: 28 Мар 2020, 16:42
Се отблагодари: 16 пъти
Получена благодарност: 1 път

AWP Models [XP System Support]

Мнение от GGzBoy » 19 Яну 2021, 20:35

Niiicu написа: 24 Юни 2020, 18:32
OciXCrom написа: 24 Юни 2020, 15:39 Let me see the code. How did you name the files?
When i connect on the server, the models are downloaded, but when i use comand /ak47, nothing is happen

I've named the files like this
AK47Models.ini
AK47Models


Код за потвърждение: Избери целия код

#include <amxmodx>
#include <amxmisc>
#include <cromchat>
#include <fakemeta>
#include <hamsandwich>
#include <nvault>

native crxranks_get_max_levels()
native crxranks_get_rank_by_level(level, buffer[], len)
native crxranks_get_user_level(id)
native crxranks_get_user_xp(id)

new const g_szNatives[][] =
{
	"crxranks_get_max_levels",
	"crxranks_get_rank_by_level",
	"crxranks_get_user_level",
	"crxranks_get_user_xp"
}

#if !defined m_pPlayer
	#define m_pPlayer 41
#endif

#if defined client_disconnected
	#define client_disconnect client_disconnected
#endif

#define PLUGIN_VERSION "2.1.4"
#define DEFAULT_V "models/v_ak47.mdl"
#define DEFAULT_P "models/p_ak47.mdl"
#define MAX_SOUND_LENGTH 128
#define MAX_AUTHID_LENGTH 35

#if !defined MAX_NAME_LENGTH
	#define MAX_NAME_LENGTH 32
#endif

#if !defined MAX_PLAYERS
	#define MAX_PLAYERS 32
#endif

enum _:AK47
{
	NAME[MAX_NAME_LENGTH],
	V_MODEL[MAX_SOUND_LENGTH],
	P_MODEL[MAX_SOUND_LENGTH],
	SELECT_SOUND[MAX_SOUND_LENGTH],
	FLAG,
	LEVEL,
	bool:SHOW_RANK,
	XP
}

new Array:g_aAK47,
	bool:g_bFirstTime[MAX_PLAYERS + 1],
	bool:g_bRankSystem,
	bool:g_bGetLevel,
	bool:g_bGetXP,
	g_eAK47[MAX_PLAYERS + 1][AK47],
	g_szAuth[MAX_PLAYERS + 1][MAX_AUTHID_LENGTH],
	g_iAK47[MAX_PLAYERS + 1],
	g_iCallback,
	g_pAtSpawn,
	g_pSaveChoice,
	g_iSaveChoice,
	g_iAK47Num,
	g_iVault

public plugin_init()
{
	register_plugin("AK47 Models", PLUGIN_VERSION, "OciXCrom")
	register_cvar("CRXAK47Models", PLUGIN_VERSION, FCVAR_SERVER|FCVAR_SPONLY|FCVAR_UNLOGGED)
	
	if(!g_iAK47Num)
		set_fail_state("No AK47s found in the configuration file.")
	
	register_dictionary("AK47Models.txt")
	
	RegisterHam(Ham_Spawn, "player", "OnPlayerSpawn", 1)
	RegisterHam(Ham_Item_Deploy, "weapon_AK47", "OnSelectAK47", 1)
	
	register_clcmd("say /ak47", "ShowMenu")
	register_clcmd("say_team /ak47", "ShowMenu")
	
	g_iCallback = menu_makecallback("CheckAK47Access")
	g_pAtSpawn = register_cvar("am_open_at_spawn", "0")
	g_pSaveChoice = register_cvar("am_save_choice", "0")
}

public plugin_precache()
{
	if(LibraryExists("crxranks", LibType_Library))
		g_bRankSystem = true
		
	g_aAK47 = ArrayCreate(AK47)
	ReadFile()
}

public plugin_cfg()
{
	g_iSaveChoice = get_pcvar_num(g_pSaveChoice)
	
	if(g_iSaveChoice)
		g_iVault = nvault_open("AK47Models")
}

public plugin_natives()
	set_native_filter("native_filter")
	
public native_filter(const szNative[], id, iTrap)
{
	if(!iTrap)
	{
		static i
		
		for(i = 0; i < sizeof(g_szNatives); i++)
		{
			if(equal(szNative, g_szNatives[i]))
				return PLUGIN_HANDLED
		}
	}
	
	return PLUGIN_CONTINUE
}
	
public plugin_end()
{
	ArrayDestroy(g_aAK47)
	
	if(g_iSaveChoice)
		nvault_close(g_iVault)
}

ReadFile()
{
	new szConfigsName[256], szFilename[256]
	get_configsdir(szConfigsName, charsmax(szConfigsName))
	formatex(szFilename, charsmax(szFilename), "%s/AK47Models.ini", szConfigsName)
	new iFilePointer = fopen(szFilename, "rt")
	
	if(iFilePointer)
	{
		new eAK47[AK47], szData[160], szKey[32], szValue[128], iMaxLevels
		
		if(g_bRankSystem)
			iMaxLevels = crxranks_get_max_levels()
		
		while(!feof(iFilePointer))
		{
			fgets(iFilePointer, szData, charsmax(szData))
			trim(szData)
			
			switch(szData[0])
			{
				case EOS, '#', ';': continue
				case '[':
				{
					if(szData[strlen(szData) - 1] == ']')
					{
						if(g_iAK47Num)
							PushAK47(eAK47)
							
						g_iAK47Num++
						replace(szData, charsmax(szData), "[", "")
						replace(szData, charsmax(szData), "]", "")
						copy(eAK47[NAME], charsmax(eAK47[NAME]), szData)
						
						eAK47[V_MODEL][0] = EOS
						eAK47[P_MODEL][0] = EOS
						eAK47[SELECT_SOUND][0] = EOS
						eAK47[FLAG] = ADMIN_ALL
						
						if(g_bRankSystem)
						{
							eAK47[LEVEL] = 0
							eAK47[SHOW_RANK] = false
							eAK47[XP] = 0
						}
					}
					else continue
				}
				default:
				{
					strtok(szData, szKey, charsmax(szKey), szValue, charsmax(szValue), '=')
					trim(szKey); trim(szValue)
					
					if(equal(szKey, "FLAG"))
						eAK47[FLAG] = read_flags(szValue)
					else if(equal(szKey, "LEVEL") && g_bRankSystem)
					{
						eAK47[LEVEL] = clamp(str_to_num(szValue), 0, iMaxLevels)
						
						if(!g_bGetLevel)
							g_bGetLevel = true
					}
					else if(equal(szKey, "SHOW_RANK") && g_bRankSystem)
						eAK47[SHOW_RANK] = _:clamp(str_to_num(szValue), false, true)
					else if(equal(szKey, "XP") && g_bRankSystem)
					{
						eAK47[XP] = _:clamp(str_to_num(szValue), 0)
						
						if(!g_bGetXP)
							g_bGetXP = true
					}
					else if(equal(szKey, "V_MODEL"))
					{
						if(!file_exists(szValue))
							log_amx("ERROR: model ^"%s^" not found!", szValue)
						else
						{
							precache_model(szValue)
							copy(eAK47[V_MODEL], charsmax(eAK47[V_MODEL]), szValue)
						}
					}
					else if(equal(szKey, "P_MODEL"))
					{
						if(!file_exists(szValue))
							log_amx("ERROR: model ^"%s^" not found!", szValue)
						else
						{
							precache_model(szValue)
							copy(eAK47[P_MODEL], charsmax(eAK47[P_MODEL]), szValue)
						}
					}
					else if(equal(szKey, "SELECT_SOUND"))
					{
						precache_sound(szValue)
						copy(eAK47[SELECT_SOUND], charsmax(eAK47[SELECT_SOUND]), szValue)
					}
				}
			}
		}
		
		if(g_iAK47Num)
			PushAK47(eAK47)
		
		fclose(iFilePointer)
	}
}

public client_connect(id)
{
	g_bFirstTime[id] = true
	ArrayGetArray(g_aAK47, 0, g_eAK47[id])
	g_iAK47[id] = 0
	
	if(g_iSaveChoice)
	{
		get_user_authid(id, g_szAuth[id], charsmax(g_szAuth[]))
		UseVault(id, false)
	}
}

public client_disconnect(id)
{
	if(g_iSaveChoice)
		UseVault(id, true)
}

public ShowMenu(id)
{
	static eAK47[AK47]
	new szTitle[128], szItem[128], iLevel, iXP
	formatex(szTitle, charsmax(szTitle), "%L", id, "AM_MENU_TITLE")

	if(g_bGetLevel)
		iLevel = crxranks_get_user_level(id)
	
	if(g_bGetXP)
		iXP = crxranks_get_user_xp(id)
		
	new iMenu = menu_create(szTitle, "MenuHandler")
	
	for(new iFlags = get_user_flags(id), i; i < g_iAK47Num; i++)
	{
		ArrayGetArray(g_aAK47, i, eAK47)
		copy(szItem, charsmax(szItem), eAK47[NAME])
		
		if(g_bRankSystem)
		{
			if(eAK47[LEVEL] && iLevel < eAK47[LEVEL])
			{
				if(eAK47[SHOW_RANK])
				{
					static szRank[32]
					crxranks_get_rank_by_level(eAK47[LEVEL], szRank, charsmax(szRank))
					format(szItem, charsmax(szItem), "%s %L", szItem, id, "AM_MENU_RANK", szRank)
				}
				else
					format(szItem, charsmax(szItem), "%s %L", szItem, id, "AM_MENU_LEVEL", eAK47[LEVEL])
			}
			
			if(eAK47[XP] && iXP < eAK47[XP])
				format(szItem, charsmax(szItem), "%s %L", szItem, id, "AM_MENU_XP", eAK47[XP])
		}
		
		if(eAK47[FLAG] != ADMIN_ALL && !(iFlags & eAK47[FLAG]))
			format(szItem, charsmax(szItem), "%s %L", szItem, id, "AM_MENU_VIP_ONLY")
			
		if(g_iAK47[id] == i)
			format(szItem, charsmax(szItem), "%s %L", szItem, id, "AM_MENU_SELECTED")
		
		menu_additem(iMenu, szItem, eAK47[NAME], eAK47[FLAG], g_iCallback)
	}
	
	if(menu_pages(iMenu) > 1)
	{
		formatex(szItem, charsmax(szItem), "%s%L", szTitle, id, "AM_MENU_TITLE_PAGE")
		menu_setprop(iMenu, MPROP_TITLE, szItem)
	}
		
	menu_display(id, iMenu)
	return PLUGIN_HANDLED
}

public MenuHandler(id, iMenu, iItem)
{
	if(iItem != MENU_EXIT)
	{
		g_iAK47[id] = iItem
		ArrayGetArray(g_aAK47, iItem, g_eAK47[id])
		
		if(is_user_alive(id) && get_user_weapon(id) == CSW_AK47)
			RefreshAK47Model(id)
		
		new szName[MAX_NAME_LENGTH], iUnused
		menu_item_getinfo(iMenu, iItem, iUnused, szName, charsmax(szName), .callback = iUnused)
		CC_SendMessage(id, "%L %L", id, "AM_CHAT_PREFIX", id, "AM_CHAT_SELECTED", szName)
		
		if(g_eAK47[id][SELECT_SOUND][0])
			engfunc(EngFunc_EmitSound, id, CHAN_AUTO, g_eAK47[id][SELECT_SOUND], 1.0, ATTN_NORM, 0, PITCH_NORM)
	}
	
	menu_destroy(iMenu)
	return PLUGIN_HANDLED
}	

public CheckAK47Access(id, iMenu, iItem)
	return ((g_iAK47[id] == iItem) || !HasAK47Access(id, iItem)) ? ITEM_DISABLED : ITEM_ENABLED

public OnPlayerSpawn(id)
{
	if(is_user_alive(id) && get_pcvar_num(g_pAtSpawn) && !g_iAK47[id] && g_bFirstTime[id])
	{
		g_bFirstTime[id] = false
		ShowMenu(id)
	}
}

public OnSelectAK47(iEnt)
{
	new id = get_pdata_cbase(iEnt, m_pPlayer, 4)
	
	if(is_user_connected(id))
		RefreshAK47Model(id)
}

RefreshAK47Model(const id)
{
	set_pev(id, pev_viewmodel2, g_eAK47[id][V_MODEL])
	set_pev(id, pev_weaponmodel2, g_eAK47[id][P_MODEL])
}

PushAK47(eAK47[AK47])
{
	if(!eAK47[V_MODEL][0])
		copy(eAK47[V_MODEL], charsmax(eAK47[V_MODEL]), DEFAULT_V)
		
	if(!eAK47[P_MODEL][0])
		copy(eAK47[P_MODEL], charsmax(eAK47[P_MODEL]), DEFAULT_P)
		
	ArrayPushArray(g_aAK47, eAK47)
}

bool:HasAK47Access(const id, const iAK47)
{		
	static eAK47[AK47]
	ArrayGetArray(g_aAK47, iAK47, eAK47)
	
	if(g_bRankSystem)
	{
		if(eAK47[LEVEL] && crxranks_get_user_level(id) < eAK47[LEVEL])
			return false
			
		if(eAK47[XP] && crxranks_get_user_xp(id) < eAK47[XP])
			return false
	}
		
	if(eAK47[FLAG] != ADMIN_ALL && !(get_user_flags(id) & eAK47[FLAG]))
		return false
		
	return true
}

UseVault(const id, const bool:bSave)
{
	if(bSave)
	{
		static szData[4]
		num_to_str(g_iAK47[id], szData, charsmax(szData))
		nvault_set(g_iVault, g_szAuth[id], szData)
	}
	else
	{
		static iAK47
		iAK47 = nvault_get(g_iVault, g_szAuth[id])
		
		if(iAK47 > g_iAK47Num)
			iAK47 = 0
		
		if(iAK47 && HasAK47Access(id, iAK47))
		{
			g_iAK47[id] = iAK47
			ArrayGetArray(g_aAK47, iAK47, g_eAK47[id])
			
			if(is_user_alive(id) && get_user_weapon(id) == CSW_AK47)
				RefreshAK47Model(id)
		}
	}
}	

L 01/19/2021 - 15:17:23: Invalid CVAR pointer
L 01/19/2021 - 15:17:23: [AMXX] Displaying debug trace (plugin "crx_ak47_models.amxx", version "2.1.4")
L 01/19/2021 - 15:17:23: [AMXX] Run time error 10: native error (native "get_pcvar_num")
L 01/19/2021 - 15:17:23: [AMXX] [0] crx_ak47_models.sma::OnPlayerSpawn (line 347)
Scoring will not start until both teams have players

Аватар
Zetsukt
Извън линия
Потребител
Потребител
Мнения: 4
Регистриран на: 11 Дек 2020, 18:53
Получена благодарност: 3 пъти
Обратна връзка:

AWP Models [XP System Support]

Мнение от Zetsukt » 19 Яну 2021, 20:53

L 01/19/2021 - 15:17:23: Invalid CVAR pointer
L 01/19/2021 - 15:17:23: [AMXX] Displaying debug trace (plugin "crx_ak47_models.amxx", version "2.1.4")
L 01/19/2021 - 15:17:23: [AMXX] Run time error 10: native error (native "get_pcvar_num")
L 01/19/2021 - 15:17:23: [AMXX] [0] crx_ak47_models.sma::OnPlayerSpawn (line 347)
Scoring will not start until both teams have players[/b]

Код за потвърждение: Избери целия код

#include <amxmodx>
#include <amxmisc>
#include <cromchat>
#include <fakemeta>
#include <hamsandwich>
#include <nvault>

native crxranks_get_max_levels()
native crxranks_get_rank_by_level(level, buffer[], len)
native crxranks_get_user_level(id)
native crxranks_get_user_xp(id)

new const g_szNatives[][] =
{
	"crxranks_get_max_levels",
	"crxranks_get_rank_by_level",
	"crxranks_get_user_level",
	"crxranks_get_user_xp"
}

#if !defined m_pPlayer
	#define m_pPlayer 41
#endif

#if defined client_disconnected
	#define client_disconnect client_disconnected
#endif

#define PLUGIN_VERSION "2.1.4"
#define DEFAULT_V "models/v_ak47.mdl"
#define DEFAULT_P "models/p_ak47.mdl"
#define MAX_SOUND_LENGTH 128

#if !defined MAX_AUTHID_LENGTH
#define MAX_AUTHID_LENGTH 35
#endif

#if !defined MAX_NAME_LENGTH
	#define MAX_NAME_LENGTH 32
#endif

#if !defined MAX_PLAYERS
	#define MAX_PLAYERS 32
#endif

enum _:AK47
{
	NAME[MAX_NAME_LENGTH],
	V_MODEL[MAX_SOUND_LENGTH],
	P_MODEL[MAX_SOUND_LENGTH],
	SELECT_SOUND[MAX_SOUND_LENGTH],
	FLAG,
	LEVEL,
	bool:SHOW_RANK,
	XP
}

new Array:g_aAK47,
	bool:g_bFirstTime[MAX_PLAYERS + 1],
	bool:g_bRankSystem,
	bool:g_bGetLevel,
	bool:g_bGetXP,
	g_eAK47[MAX_PLAYERS + 1][AK47],
	g_szAuth[MAX_PLAYERS + 1][MAX_AUTHID_LENGTH],
	g_iAK47[MAX_PLAYERS + 1],
	g_iCallback,
	g_pAtSpawn,
	g_pSaveChoice,
	g_iSaveChoice,
	g_iAK47Num,
	g_iVault

public plugin_init()
{
	register_plugin("AK47 Models", PLUGIN_VERSION, "OciXCrom")
	register_cvar("CRXAK47Models", PLUGIN_VERSION, FCVAR_SERVER|FCVAR_SPONLY|FCVAR_UNLOGGED)
	
	if(!g_iAK47Num)
		set_fail_state("No AK47s found in the configuration file.")
	
	register_dictionary("AKModels.txt")
	
	RegisterHam(Ham_Spawn, "player", "OnPlayerSpawn", 1)
	RegisterHam(Ham_Item_Deploy, "weapon_ak47", "OnSelectAK47", 1)
	
	register_clcmd("say /ak", "ShowMenu")
	register_clcmd("say_team /ak", "ShowMenu")
	
	g_iCallback = menu_makecallback("CheckAK47Access")
	g_pAtSpawn = register_cvar("ak_open_at_spawn", "0")
	g_pSaveChoice = register_cvar("ak_save_choice", "0")
}

public plugin_precache()
{
	if(LibraryExists("crxranks", LibType_Library))
		g_bRankSystem = true
		
	g_aAK47 = ArrayCreate(AK47)
	ReadFile()
}

public plugin_cfg()
{
	g_iSaveChoice = get_pcvar_num(g_pSaveChoice)
	
	if(g_iSaveChoice)
		g_iVault = nvault_open("AKModels")
}

public plugin_natives()
	set_native_filter("native_filter")
	
public native_filter(const szNative[], id, iTrap)
{
	if(!iTrap)
	{
		static i
		
		for(i = 0; i < sizeof(g_szNatives); i++)
		{
			if(equal(szNative, g_szNatives[i]))
				return PLUGIN_HANDLED
		}
	}
	
	return PLUGIN_CONTINUE
}
	
public plugin_end()
{
	ArrayDestroy(g_aAK47)
	
	if(g_iSaveChoice)
		nvault_close(g_iVault)
}

ReadFile()
{
	new szConfigsName[256], szFilename[256]
	get_configsdir(szConfigsName, charsmax(szConfigsName))
	formatex(szFilename, charsmax(szFilename), "%s/AKModels.ini", szConfigsName)
	new iFilePointer = fopen(szFilename, "rt")
	
	if(iFilePointer)
	{
		new eAK47[AK47], szData[160], szKey[32], szValue[128], iMaxLevels
		
		if(g_bRankSystem)
			iMaxLevels = crxranks_get_max_levels()
		
		while(!feof(iFilePointer))
		{
			fgets(iFilePointer, szData, charsmax(szData))
			trim(szData)
			
			switch(szData[0])
			{
				case EOS, '#', ';': continue
				case '[':
				{
					if(szData[strlen(szData) - 1] == ']')
					{
						if(g_iAK47Num)
							PushAK47(eAK47)
							
						g_iAK47Num++
						replace(szData, charsmax(szData), "[", "")
						replace(szData, charsmax(szData), "]", "")
						copy(eAK47[NAME], charsmax(eAK47[NAME]), szData)
						
						eAK47[V_MODEL][0] = EOS
						eAK47[P_MODEL][0] = EOS
						eAK47[SELECT_SOUND][0] = EOS
						eAK47[FLAG] = ADMIN_ALL
						
						if(g_bRankSystem)
						{
							eAK47[LEVEL] = 0
							eAK47[SHOW_RANK] = false
							eAK47[XP] = 0
						}
					}
					else continue
				}
				default:
				{
					strtok(szData, szKey, charsmax(szKey), szValue, charsmax(szValue), '=')
					trim(szKey); trim(szValue)
					
					if(equal(szKey, "FLAG"))
						eAK47[FLAG] = read_flags(szValue)
					else if(equal(szKey, "LEVEL") && g_bRankSystem)
					{
						eAK47[LEVEL] = clamp(str_to_num(szValue), 0, iMaxLevels)
						
						if(!g_bGetLevel)
							g_bGetLevel = true
					}
					else if(equal(szKey, "SHOW_RANK") && g_bRankSystem)
						eAK47[SHOW_RANK] = _:clamp(str_to_num(szValue), false, true)
					else if(equal(szKey, "XP") && g_bRankSystem)
					{
						eAK47[XP] = _:clamp(str_to_num(szValue), 0)
						
						if(!g_bGetXP)
							g_bGetXP = true
					}
					else if(equal(szKey, "V_MODEL"))
					{
						if(!file_exists(szValue))
							log_amx("ERROR: model ^"%s^" not found!", szValue)
						else
						{
							precache_model(szValue)
							copy(eAK47[V_MODEL], charsmax(eAK47[V_MODEL]), szValue)
						}
					}
					else if(equal(szKey, "P_MODEL"))
					{
						if(!file_exists(szValue))
							log_amx("ERROR: model ^"%s^" not found!", szValue)
						else
						{
							precache_model(szValue)
							copy(eAK47[P_MODEL], charsmax(eAK47[P_MODEL]), szValue)
						}
					}
					else if(equal(szKey, "SELECT_SOUND"))
					{
						precache_sound(szValue)
						copy(eAK47[SELECT_SOUND], charsmax(eAK47[SELECT_SOUND]), szValue)
					}
				}
			}
		}
		
		if(g_iAK47Num)
			PushAK47(eAK47)
		
		fclose(iFilePointer)
	}
}

public client_connect(id)
{
	g_bFirstTime[id] = true
	ArrayGetArray(g_aAK47, 0, g_eAK47[id])
	g_iAK47[id] = 0
	
	if(g_iSaveChoice)
	{
		get_user_authid(id, g_szAuth[id], charsmax(g_szAuth[]))
		UseVault(id, false)
	}
}

public client_disconnect(id)
{
	if(g_iSaveChoice)
		UseVault(id, true)
}

public ShowMenu(id)
{
	static eAK47[AK47]
	new szTitle[128], szItem[128], iLevel, iXP
	formatex(szTitle, charsmax(szTitle), "%L", id, "AM_MENU_TITLE")

	if(g_bGetLevel)
		iLevel = crxranks_get_user_level(id)
	
	if(g_bGetXP)
		iXP = crxranks_get_user_xp(id)
		
	new iMenu = menu_create(szTitle, "MenuHandler")
	
	for(new iFlags = get_user_flags(id), i; i < g_iAK47Num; i++)
	{
		ArrayGetArray(g_aAK47, i, eAK47)
		copy(szItem, charsmax(szItem), eAK47[NAME])
		
		if(g_bRankSystem)
		{
			if(eAK47[LEVEL] && iLevel < eAK47[LEVEL])
			{
				if(eAK47[SHOW_RANK])
				{
					static szRank[32]
					crxranks_get_rank_by_level(eAK47[LEVEL], szRank, charsmax(szRank))
					format(szItem, charsmax(szItem), "%s %L", szItem, id, "AM_MENU_RANK", szRank)
				}
				else
					format(szItem, charsmax(szItem), "%s %L", szItem, id, "AM_MENU_LEVEL", eAK47[LEVEL])
			}
			
			if(eAK47[XP] && iXP < eAK47[XP])
				format(szItem, charsmax(szItem), "%s %L", szItem, id, "AM_MENU_XP", eAK47[XP])
		}
		
		if(eAK47[FLAG] != ADMIN_ALL && !(iFlags & eAK47[FLAG]))
			format(szItem, charsmax(szItem), "%s %L", szItem, id, "AM_MENU_VIP_ONLY")
			
		if(g_iAK47[id] == i)
			format(szItem, charsmax(szItem), "%s %L", szItem, id, "AM_MENU_SELECTED")
		
		menu_additem(iMenu, szItem, eAK47[NAME], eAK47[FLAG], g_iCallback)
	}
	
	if(menu_pages(iMenu) > 1)
	{
		formatex(szItem, charsmax(szItem), "%s%L", szTitle, id, "AM_MENU_TITLE_PAGE")
		menu_setprop(iMenu, MPROP_TITLE, szItem)
	}
		
	menu_display(id, iMenu)
	return PLUGIN_HANDLED
}

public MenuHandler(id, iMenu, iItem)
{
	if(iItem != MENU_EXIT)
	{
		g_iAK47[id] = iItem
		ArrayGetArray(g_aAK47, iItem, g_eAK47[id])
		
		if(is_user_alive(id) && get_user_weapon(id) == CSW_AK47)
			RefreshAK47Model(id)
		
		new szName[MAX_NAME_LENGTH], iUnused
		menu_item_getinfo(iMenu, iItem, iUnused, szName, charsmax(szName), .callback = iUnused)
		CC_SendMessage(id, "%L %L", id, "AM_CHAT_PREFIX", id, "AM_CHAT_SELECTED", szName)
		
		if(g_eAK47[id][SELECT_SOUND][0])
			engfunc(EngFunc_EmitSound, id, CHAN_AUTO, g_eAK47[id][SELECT_SOUND], 1.0, ATTN_NORM, 0, PITCH_NORM)
	}
	
	menu_destroy(iMenu)
	return PLUGIN_HANDLED
}	

public CheckAK47Access(id, iMenu, iItem)
{
	return ((g_iAK47[id] == iItem) || !HasAK47Access(id, iItem)) ? ITEM_DISABLED : ITEM_ENABLED
}

public OnPlayerSpawn(id)
{
	if(is_user_alive(id) && get_pcvar_num(g_pAtSpawn) && !g_iAK47[id] && g_bFirstTime[id])
	{
		g_bFirstTime[id] = false
		ShowMenu(id)
	}
}

public OnSelectAK47(iEnt)
{
	new id = get_pdata_cbase(iEnt, m_pPlayer, 4)
	
	if(is_user_connected(id))
		RefreshAK47Model(id)
}

RefreshAK47Model(const id)
{
	set_pev(id, pev_viewmodel2, g_eAK47[id][V_MODEL])
	set_pev(id, pev_weaponmodel2, g_eAK47[id][P_MODEL])
}

PushAK47(eAK47[AK47])
{
	if(!eAK47[V_MODEL][0])
		copy(eAK47[V_MODEL], charsmax(eAK47[V_MODEL]), DEFAULT_V)
		
	if(!eAK47[P_MODEL][0])
		copy(eAK47[P_MODEL], charsmax(eAK47[P_MODEL]), DEFAULT_P)
		
	ArrayPushArray(g_aAK47, eAK47)
}

bool:HasAK47Access(const id, const iAK47)
{		
	static eAK47[AK47]
	ArrayGetArray(g_aAK47, iAK47, eAK47)
	
	if(g_bRankSystem)
	{
		if(eAK47[LEVEL] && crxranks_get_user_level(id) < eAK47[LEVEL])
			return false
			
		if(eAK47[XP] && crxranks_get_user_xp(id) < eAK47[XP])
			return false
	}
		
	if(eAK47[FLAG] != ADMIN_ALL && !(get_user_flags(id) & eAK47[FLAG]))
		return false
		
	return true
}

UseVault(const id, const bool:bSave)
{
	if(bSave)
	{
		static szData[4]
		num_to_str(g_iAK47[id], szData, charsmax(szData))
		nvault_set(g_iVault, g_szAuth[id], szData)
	}
	else
	{
		static iAK47
		iAK47 = nvault_get(g_iVault, g_szAuth[id])
		
		if(iAK47 > g_iAK47Num)
			iAK47 = 0
		
		if(iAK47 && HasAK47Access(id, iAK47))
		{
			g_iAK47[id] = iAK47
			ArrayGetArray(g_aAK47, iAK47, g_eAK47[id])
			
			if(is_user_alive(id) && get_user_weapon(id) == CSW_AK47)
				RefreshAK47Model(id)
		}
	}
}	

Аватар
ChrisBenoit
Извън линия
Потребител
Потребител
Мнения: 67
Регистриран на: 30 Яну 2021, 19:37
Се отблагодари: 19 пъти
Получена благодарност: 1 път
Обратна връзка:

AWP Models [XP System Support]

Мнение от ChrisBenoit » 03 Фев 2021, 02:37

Oci как да направя така че да не вземат скин на авп.
Enjoy Highserv.eu Servers
Dust2Only IP: 93.123.18.21:27016
BaseBuilder IP: 93.123.18.21:27017
Forum: www.highserv.eu/forum/

Аватар
zolfeca
Извън линия
Администратор
Администратор
Мнения: 417
Регистриран на: 10 Окт 2016, 23:48
Се отблагодари: 24 пъти
Получена благодарност: 92 пъти

AWP Models [XP System Support]

Мнение от zolfeca » 03 Фев 2021, 13:16

Това е плъгин за авп модели и питаш как да не взимат авп модел ?

Аватар
ChrisBenoit
Извън линия
Потребител
Потребител
Мнения: 67
Регистриран на: 30 Яну 2021, 19:37
Се отблагодари: 19 пъти
Получена благодарност: 1 път
Обратна връзка:

AWP Models [XP System Support]

Мнение от ChrisBenoit » 03 Фев 2021, 17:44

zolfeca написа: 03 Фев 2021, 13:16 Това е плъгин за авп модели и питаш как да не взимат авп модел ?
Идеята ми е друго оръжие на модел да вземат.
Enjoy Highserv.eu Servers
Dust2Only IP: 93.123.18.21:27016
BaseBuilder IP: 93.123.18.21:27017
Forum: www.highserv.eu/forum/

Аватар
Siska
Извън линия
Потребител
Потребител
Мнения: 771
Регистриран на: 03 Дек 2019, 22:29
Местоположение: Bedrock
Се отблагодари: 157 пъти
Получена благодарност: 48 пъти
Обратна връзка:

AWP Models [XP System Support]

Мнение от Siska » 03 Фев 2021, 18:13

ChrisBenoit написа: 03 Фев 2021, 17:44
zolfeca написа: 03 Фев 2021, 13:16 Това е плъгин за авп модели и питаш как да не взимат авп модел ?
Идеята ми е друго оръжие на модел да вземат.
Приятел , много е трудно да се разбере точно какво искаш. Опитай моля те да обясниш по-подробно. Аз засега разбирам , че искаш същия плъгин , но примерно за друго оръжие. Да речем , че искаш за ак47 , ако е така трябва да си направиш труда да прочетеш внимателно темите за това как става да си преработиш плъгина да работи за друго оръжие. Всичко е описано и е лесно , но трябва да прочетеш внимателно.
Ето използвай тази тема , за да си помогнеш viewtopic.php?f=33&p=56633
Ако това е , което искаш и не можеш да се справиш сам , пиши ми за кое оръжие искаш да бъде , а аз ще ти го преправя.
Търсих врага и го открих : това съм аз , трябва да се победя...
Изображение
WWW.CSMEGAGAMING.COM Изображение Изображение Skype : Sisi-1_1

Аватар
ChrisBenoit
Извън линия
Потребител
Потребител
Мнения: 67
Регистриран на: 30 Яну 2021, 19:37
Се отблагодари: 19 пъти
Получена благодарност: 1 път
Обратна връзка:

AWP Models [XP System Support]

Мнение от ChrisBenoit » 05 Фев 2021, 19:36

Siska написа: 03 Фев 2021, 18:13
ChrisBenoit написа: 03 Фев 2021, 17:44
zolfeca написа: 03 Фев 2021, 13:16 Това е плъгин за авп модели и питаш как да не взимат авп модел ?
Идеята ми е друго оръжие на модел да вземат.
Приятел , много е трудно да се разбере точно какво искаш. Опитай моля те да обясниш по-подробно. Аз засега разбирам , че искаш същия плъгин , но примерно за друго оръжие. Да речем , че искаш за ак47 , ако е така трябва да си направиш труда да прочетеш внимателно темите за това как става да си преработиш плъгина да работи за друго оръжие. Всичко е описано и е лесно , но трябва да прочетеш внимателно.
Ето използвай тази тема , за да си помогнеш viewtopic.php?f=33&p=56633
Ако това е , което искаш и не можеш да се справиш сам , пиши ми за кое оръжие искаш да бъде , а аз ще ти го преправя.
Да мерси.Разбрах как става номера.Ако нещо се затрудня ще ти пиша или ето направо дискорда ми да ми пратиш покана и от там да ти пиша. ChrisBenoit#0654
Enjoy Highserv.eu Servers
Dust2Only IP: 93.123.18.21:27016
BaseBuilder IP: 93.123.18.21:27017
Forum: www.highserv.eu/forum/

Аватар
MP1286694461
Извън линия
Потребител
Потребител
Мнения: 4
Регистриран на: 08 Апр 2021, 20:38
Получена благодарност: 1 път
Обратна връзка:

AWP Models [XP System Support]

Мнение от MP1286694461 » 13 Май 2021, 18:36

Hello, is there any sub plug-in that can add model attributes

Публикувай отговор
  • Подобни теми
    Отговори
    Преглеждания
     Последно мнение

Обратно към “Одобрени плъгини”

Кой е на линия

Потребители разглеждащи този форум: 0 регистрирани и 7 госта