Raised This Month: $32 Target: $400
 8% 

Variable Ignoring _cl_autowepswich "0"


Post New Thread Reply   
 
Thread Tools Display Modes
Author Message
Vaim
Member
Join Date: Feb 2019
Old 02-15-2019 , 07:54   Variable Ignoring _cl_autowepswich "0"
Reply With Quote #1

Sever Counter-Strike 1.6

Version:
Protocol version 48
Exe version 1.1.2.7/Stdio (cstrike)
ReHLDS version: 3.3.0.605-dev
Build date: 22:55:56 Nov 8 2017 (1306)

Good day to all.
Please tell me, I do not know where to start.
The standard process for selecting weapons on csdm,
The player enters the server selects the primary weapon, followed by the secondary, the next spawn, he selects the item "the previous choice and no longer ask."
If the variable _cl_autowepswich 0 is set in config.cfg, the player will spawn with a knife and selects the surviving weapon in the slots
1,2, or 3
Question:
Can you please tell me how you can make sure that when a player is spawned, a check is made on the weapon he has and the more powerful one is automatically selected?

Last edited by Vaim; 02-15-2019 at 07:55.
Vaim is offline
CrazY.
Veteran Member
Join Date: May 2015
Location: SP, Brazil
Old 02-15-2019 , 08:06   Re: Variable Ignoring _cl_autowepswich "0"
Reply With Quote #2

Code:
/**
	 * Description:		This is typically called whenever an entity is created.
	 *					It is the virtual equivilent of spawn from the engine.
	 *					Some mods call this on player spawns too.
	 * Forward params:	function(this)
	 * Return type:		None.
	 * Execute params:	ExecuteHam(Ham_Spawn, this);
	 */
	Ham_Spawn = 0
https://github.com/FWGS/regamedll/bl...ayer.cpp#L7863
__________________








CrazY. is offline
Vaim
Member
Join Date: Feb 2019
Old 02-15-2019 , 08:51   Re: Variable Ignoring _cl_autowepswich "0"
Reply With Quote #3

Quote:
Originally Posted by CrazY. View Post
Code:
/**
	 * Description:		This is typically called whenever an entity is created.
	 *					It is the virtual equivilent of spawn from the engine.
	 *					Some mods call this on player spawns too.
	 * Forward params:	function(this)
	 * Return type:		None.
	 * Execute params:	ExecuteHam(Ham_Spawn, this);
	 */
	Ham_Spawn = 0
https://github.com/FWGS/regamedll/bl...ayer.cpp#L7863
I'm sorry, but I don't quite understand how to use it.:плач:
Vaim is offline
CrazY.
Veteran Member
Join Date: May 2015
Location: SP, Brazil
Old 02-15-2019 , 08:57   Re: Variable Ignoring _cl_autowepswich "0"
Reply With Quote #4

Quote:
how you can make sure that when a player is spawned
Code:
public plugin_init() {     RegisterHam(Ham_Spawn, "player", "CBasePlayer_Spawn_Post", 1); } public CBasePlayer_Spawn_Post(this) {     if (!is_user_alive(this))         return;     // Player spawned }

Quote:
... a check is made on the weapon he has and the more powerful one is automatically selected
Call SwitchWeapon as the c++ code that I sent to you does or you can try with Ham_Weapon_RetireWeapon.

Code:
new pActiveItem = get_pdata_cbase(id, 373, 5); if (pActiveItem != -1)     ExecuteHamB(Ham_Weapon_RetireWeapon, pActiveItem);
__________________









Last edited by CrazY.; 02-15-2019 at 08:59.
CrazY. is offline
Vaim
Member
Join Date: Feb 2019
Old 02-15-2019 , 15:42   Re: Variable Ignoring _cl_autowepswich "0"
Reply With Quote #5

Quote:
Originally Posted by CrazY. View Post
Code:
public plugin_init() {     RegisterHam(Ham_Spawn, "player", "CBasePlayer_Spawn_Post", 1); } public CBasePlayer_Spawn_Post(this) {     if (!is_user_alive(this))         return;     // Player spawned }



Call SwitchWeapon as the c++ code that I sent to you does or you can try with Ham_Weapon_RetireWeapon.

Code:
new pActiveItem = get_pdata_cbase(id, 373, 5); if (pActiveItem != -1)     ExecuteHamB(Ham_Weapon_RetireWeapon, pActiveItem);

I'm sorry, maybe I'm not experienced enough, but I get it
Code:
#include <amxmodx>
#include <amxmisc>
#include <hamsandwich>

public plugin_init()
{
    RegisterHam(Ham_Spawn, "player", "CBasePlayer_Spawn_Post", 1);
}

public CBasePlayer_Spawn_Post(id)
{
    if (!is_user_alive(id))
        return;
}

new pActiveItem = get_pdata_cbase ( id, 373 , 5 ) ;

if (pActiveItem! = -1)
    ExecuteHamB ( Ham_Weapon_RetireWeapon, pActiveItem ) ;
change_weapons.sma(1 : error 010: invalid function or declaration
change_weapons.sma(16) : warning 203: symbol is never used: "pActiveItem"

Last edited by Vaim; 02-15-2019 at 15:44.
Vaim is offline
CrazY.
Veteran Member
Join Date: May 2015
Location: SP, Brazil
Old 02-15-2019 , 15:54   Re: Variable Ignoring _cl_autowepswich "0"
Reply With Quote #6

Code:
#include <amxmodx> #include <amxmisc> #include <hamsandwich> public plugin_init() {     RegisterHam(Ham_Spawn, "player", "CBasePlayer_Spawn_Post", 1); } public CBasePlayer_Spawn_Post(id) {     if (!is_user_alive(id))         return;     new pActiveItem = get_pdata_cbase ( id, 373 , 5 ) ;     if (pActiveItem != -1)         ExecuteHamB ( Ham_Weapon_RetireWeapon, pActiveItem ) ; }
__________________








CrazY. is offline
Vaim
Member
Join Date: Feb 2019
Old 02-15-2019 , 17:58   Re: Variable Ignoring _cl_autowepswich "0"
Reply With Quote #7

Quote:
Originally Posted by CrazY. View Post
Code:
#include <amxmodx> #include <amxmisc> #include <hamsandwich> public plugin_init() {     RegisterHam(Ham_Spawn, "player", "CBasePlayer_Spawn_Post", 1); } public CBasePlayer_Spawn_Post(id) {     if (!is_user_alive(id))         return;     new pActiveItem = get_pdata_cbase ( id, 373 , 5 ) ;     if (pActiveItem != -1)         ExecuteHamB ( Ham_Weapon_RetireWeapon, pActiveItem ) ; }


Thank you very much for the help, but that's what happens to me.
when spawning, a check is in progress and a pistol is taken in hand, but after a second the saved weapon is given out and a knife is in the hands

csdm_equip.sma
Code:
#include <amxmodx>
#include <amxmisc>
#include <cstrike>
#include <csdm>
#include <fakemeta>
#include <hamsandwich>

#pragma semicolon 1

#if AMXX_VERSION_NUM < 183
	#define client_disconnected client_disconnect
#endif

//Tampering with the author and name lines can violate the copyright
new const PLUGINNAME[] = "ReCSDM Equip";
new const VERSION[] = CSDM_VERSION;
new const AUTHORS[] = "ReCSDM Team";

#define	EQUIP_PRI		(1<<0)
#define	EQUIP_SEC		(1<<1)
#define	EQUIP_ARMOR		(1<<2)
#define	EQUIP_GREN		(1<<3)
#define	EQUIP_ITEMS		(1<<4)
#define	EQUIP_ALL		(EQUIP_PRI|EQUIP_SEC|EQUIP_ARMOR|EQUIP_GREN|EQUIP_ITEMS)

#define	ITEMTYPES_NUM	42

new g_MaxPlayers;

new bool:IsRestricted[ITEMTYPES_NUM] = {false, ...};	// Contains if an item is restricted or not
new RestrictWps[ITEMTYPES_NUM] = {32, ...};
new UsedWpsT[ITEMTYPES_NUM] = {0, ...};
new UsedWpsCT[ITEMTYPES_NUM] = {0, ...};

//Menus
new const g_SecMenu[] = "Меню Первичного оружия";		// Menu Name
new g_SecMenuID = -1;													// Menu ID
new g_cSecondary;														// Menu Callback
new bool:g_mSecStatus = true;												// Menu Available?

new const g_PrimMenu[] = "Меню Вторичного оружия";
new g_PrimMenuID = -1;
new g_cPrimary;
new bool:g_mPrimStatus = true;

new const g_ArmorMenu[] = "Броня";
new g_ArmorMenuID = -1;
new bool:g_mArmorStatus = true;

new const g_NadeMenu[] = "Гранаты";
new g_NadeMenuID = -1;
new bool:g_mNadeStatus = true;

new const g_EquipMenu[] = "Р*РєРёРїРёСЂРѕРІРєР°";
new g_EquipMenuID = -1;
new g_cEquip;

new bool:g_mShowuser[CSDM_MAXPLAYERS + 1] = true;

new g_Teamuser[CSDM_MAXPLAYERS + 1];

new bool:g_mAutoNades = false;
new bool:g_mAutoArmor = false;
new bool:g_AlwaysAllowGunMenu = false;
new bool:g_AmmoRefill = false;
new g_WeaponStayTime = 0;

//Weapon Selections
new g_SecWeapons[CSDM_MAXPLAYERS + 1][18];
new g_PrimWeapons[CSDM_MAXPLAYERS + 1][18];
new bool:g_mNades[CSDM_MAXPLAYERS + 1];
new bool:g_mArmor[CSDM_MAXPLAYERS + 1];

//Config weapon storage holders
new g_BotPrim[MAX_WEAPONS][18];
new g_iNumBotPrim;

new g_BotSec[MAX_WEAPONS][18];
new g_iNumBotSec;

new g_Secondary[MAX_SECONDARY][18];
new bool:g_DisabledSec[MAX_WEAPONS];
new g_iNumSec;
new g_iNumUsedSec = 0;

new g_Primary[MAX_PRIMARY][18];
new bool:g_DisabledPrim[MAX_WEAPONS];
new g_iNumPrim;
new g_iNumUsedPrim = 0;

new pv_csdm_additems;

#define SILENCED_M4A1		0
#define SILENCED_USP		1
new bool:g_Silenced[CSDM_MAXPLAYERS + 1][2];

//Misc
new g_Armor = 0;
new fnadesnum = 0;
new bool:g_Flash = false;
new bool:g_Nade = false;
new bool:g_Smoke = false;
new bool:g_NightVision = false;
new bool:g_DefuseKit = false;

// page info for settings in CSDM Setting Menu
new g_SettingsMenu = 0;
new g_EquipSettMenu = 0;
new g_ItemsInMenuNr = 0;
new g_PageSettMenu = 0;

//Quick Fix for menu pages
new g_MenuState[CSDM_MAXPLAYERS + 1] = {0};

new Float:g_maxdelmenutime = 30.0;

#define	PDATA_SAFE				2
#define	OFFSET_LINUX_WEAPONS	4
#define	m_pPlayer					41
#define	m_iId						43

public csdm_Init(const version[])
{
	if (version[0] == 0) {
		set_fail_state("ReCSDM failed to load.");
		return;
	}

	// Menus and callbacks
	g_SecMenuID = menu_create(g_SecMenu, "m_SecHandler", 0);
	g_PrimMenuID = menu_create(g_PrimMenu, "m_PrimHandler", 0);
	g_ArmorMenuID = menu_create(g_ArmorMenu, "m_ArmorHandler", 0);
	g_NadeMenuID = menu_create(g_NadeMenu, "m_NadeHandler", 0);
	g_EquipMenuID = menu_create(g_EquipMenu, "m_EquipHandler", 0);

	menu_setprop(g_PrimMenuID, MPROP_EXIT, MEXIT_NEVER);
	menu_setprop(g_SecMenuID, MPROP_EXIT, MEXIT_NEVER);

	g_cSecondary = menu_makecallback("c_Secondary");
	g_cPrimary = menu_makecallback("c_Primary");
	g_cEquip = menu_makecallback("c_Equip");
}

public csdm_CfgInit()
{
	csdm_reg_cfg("settings", "cfgMainSettings");
	csdm_reg_cfg("misc", "cfgMiscSettings");

	// Config reader
	csdm_reg_cfg("equip", "cfgSetting");

	// In order for weapon menu
	csdm_reg_cfg("secondary", "cfgSecondary");
	csdm_reg_cfg("primary", "cfgPrimary");
	csdm_reg_cfg("botprimary", "cfgBotPrim");
	csdm_reg_cfg("botsecondary", "cfgBotSec");
	csdm_reg_cfg("item_restrictions", "cfgrestricts");

	set_task(2.0, "check_cvar_pointers", 790);
}

public check_cvar_pointers()
{
	pv_csdm_additems = get_cvar_pointer("csdm_add_items");
}

public plugin_init()
{
	register_plugin(PLUGINNAME, VERSION, AUTHORS);

	buildMenu(); // Build Armor/Nade/Equip Menu's

	register_clcmd("say guns", "enableMenu");
	register_clcmd("say /guns", "enableMenu");
	register_clcmd("say menu", "enableMenu");
	register_clcmd("say enablemenu", "enableMenu");
	register_clcmd("say enable_menu", "enableMenu");
	register_clcmd("csdm_equip_sett_menu", "csdm_equip_sett_menu", ADMIN_MAP, "CSDM Equip Settings Menu");
	register_event("TextMsg","eRestart","a","2&#Game_C","2&#Game_w");

	RegisterHam(Ham_Weapon_SecondaryAttack, "weapon_usp", "Weapon_SecondaryAttack_usp_Post", true);
	RegisterHam(Ham_Weapon_SecondaryAttack, "weapon_m4a1", "Weapon_SecondaryAttack_m4a1_Post", true);

	new main_plugin = module_exists("csdm_main") ? true : false;

	if(main_plugin)
	{
		g_SettingsMenu = csdm_settings_menu();
		g_ItemsInMenuNr = menu_items(g_SettingsMenu);
		g_PageSettMenu = g_ItemsInMenuNr / 7;

		g_EquipSettMenu = menu_create("Меню настроек экипировки", "use_csdm_equip_menu");

		menu_additem(g_SettingsMenu, "Настройки экипировки", "csdm_equip_sett_menu", ADMIN_MAP);

		if(g_EquipSettMenu)
		{
			new callback = menu_makecallback("hook_equip_sett_display");

			menu_additem(g_EquipSettMenu, "Меню первичной экипировки [вкл/выкл]", "1", ADMIN_MAP, callback);
			menu_additem(g_EquipSettMenu, "Меню вторичной экипировки [вкл/выкл]", "2", ADMIN_MAP, callback);
			menu_additem(g_EquipSettMenu, "Меню брони [вкл/выкл]", "3", ADMIN_MAP, callback);
			menu_additem(g_EquipSettMenu, "Меню гранат [вкл/выкл]", "4", ADMIN_MAP, callback);
			menu_additem(g_EquipSettMenu, "Автоматическая выдача брони [вкл/выкл]", "5", ADMIN_MAP, callback);
			menu_additem(g_EquipSettMenu, "Автоматическая выдача шлема [вкл/выкл]", "6", ADMIN_MAP, callback);
			menu_additem(g_EquipSettMenu, "Автоматическая выдача гранат [вкл/выкл]", "7", ADMIN_MAP, callback);
			menu_additem(g_EquipSettMenu, "Автоматическая выдача щипцов [вкл/выкл]", "8", ADMIN_MAP, callback);
			menu_additem(g_EquipSettMenu, "Автоматическая выдача ночного виденья [вкл/выкл]", "9", ADMIN_MAP, callback);
			menu_additem(g_EquipSettMenu, "Световые гранаты [вкл/выкл]", "10", ADMIN_MAP, callback);
			menu_additem(g_EquipSettMenu, "Дымовые гранаты [вкл/выкл]", "11", ADMIN_MAP, callback);
			menu_additem(g_EquipSettMenu, "Р*азрывные гранаты [РІРєР»/выкл]", "12", ADMIN_MAP, callback);
			menu_additem(g_EquipSettMenu, "Р*азрешить всегда использовать меню оружия [Р’РєР»/Выкл]", "13", ADMIN_MAP, callback);
			menu_additem(g_EquipSettMenu, "Назад", "14", 0, -1);
		}
	} else {
		log_amx("CSDM - csdm_equip - no main plugin loaded");
	}

	if(g_iNumUsedSec == 0)
		g_mSecStatus = false;

	if(g_iNumUsedPrim == 0)
		g_mPrimStatus = false;

	g_MaxPlayers = get_maxplayers();
}

public eRestart()
{
	arrayset(UsedWpsT, 0, ITEMTYPES_NUM);
	arrayset(UsedWpsCT, 0, ITEMTYPES_NUM);

	return PLUGIN_CONTINUE;
}

public client_connect(id)
{
	g_mShowuser[id] = true;
	g_mNades[id] = false;
	g_mArmor[id] = false;
	g_Silenced[id][SILENCED_M4A1] = false;
	g_Silenced[id][SILENCED_USP] = false;

	return PLUGIN_CONTINUE;
}

public client_disconnected(id)
{
	g_mShowuser[id] = false;
	g_mNades[id] = false;
	g_mArmor[id] = false;

	new weapons[MAX_WEAPONS], num, weapid;

	get_user_weapons(id, weapons, num);

	for (new i = 0; i < num; i++)
	{
		weapid = weapons[i];

		if(IsRestricted[weapid] && UsedWpsT[weapid] > 0 && g_Teamuser[id] == _TEAM_T) {
			UsedWpsT[weapid]--;
		}

		if(IsRestricted[weapid] && UsedWpsCT[weapid] > 0 && g_Teamuser[id] == _TEAM_CT) {
			UsedWpsCT[weapid]--;
		}
	}

	return PLUGIN_CONTINUE;
}

public csdm_RemoveWeapon(owner, entity_id, boxed_id)
{
	if(!pev_valid(entity_id))
		return PLUGIN_HANDLED;

	new szClassname[32], weapon, team;

	pev(entity_id, pev_classname, szClassname, charsmax(szClassname));

	weapon = get_weaponid(szClassname);

	if(owner && weapon)
	{
		team = _:cs_get_user_team(owner);

		if(IsRestricted[weapon] && UsedWpsT[weapon] > 0 && team == _TEAM_T) {
			UsedWpsT[weapon]--;
			// log_amx("[DEBUG] CSDM - restricted weapon %s removed. Currently there is %d such weapons on the map.", szClassname, UsedWpsT[weapon])
		}

		if(IsRestricted[weapon] && UsedWpsCT[weapon] > 0 && team == _TEAM_CT) {
			UsedWpsCT[weapon]--;
			//log_amx("[DEBUG] CSDM - restricted weapon %s removed. Currently there is %d such weapons on the map.", szClassname, UsedWpsCT[weapon])
		}
	}

	return PLUGIN_CONTINUE;
}

public csdm_PostDeath(killer, victim, headshot, const weapon[])
{
	/* Clean up any defusal kits we might have made! */
	if(!g_DefuseKit) return;

	g_Teamuser[victim] = _:cs_get_user_team(victim);

	/* This might have a race condition for team switches... */
	if(g_Teamuser[victim] == _TEAM_CT)
		cs_set_user_defuse(victim, 0);
}

public Weapon_SecondaryAttack_usp_Post(Ent)
{
	if(pev_valid(Ent) != PDATA_SAFE)
		return HAM_IGNORED;

	new id = get_pdata_cbase(Ent, m_pPlayer, OFFSET_LINUX_WEAPONS);

	if(id < 1 || id > g_MaxPlayers)
		return HAM_IGNORED;

	g_Silenced[id][SILENCED_USP] = cs_get_weapon_silen(Ent) ? true : false;

	return HAM_IGNORED;
}

public Weapon_SecondaryAttack_m4a1_Post(Ent)
{
	if(pev_valid(Ent) != PDATA_SAFE)
		return HAM_IGNORED;

	new id = get_pdata_cbase(Ent, m_pPlayer, OFFSET_LINUX_WEAPONS);

	if(id < 1 || id > g_MaxPlayers)
		return HAM_IGNORED;

	g_Silenced[id][SILENCED_M4A1] = cs_get_weapon_silen(Ent) ? true : false;

	return HAM_IGNORED;
}

public cfgSecondary(readAction, line[], section[])
{
	if(readAction == CFG_READ)
	{
		if (g_iNumSec >= MAX_SECONDARY)
			return PLUGIN_HANDLED;

		new wep[16], display[48], dis[4], cmd[6];

		parse(line, wep, charsmax(wep), display, charsmax(display), dis, charsmax(dis));

		new disabled = str_to_num(dis);

		//Copy weapon into array
		formatex(g_Secondary[g_iNumSec], charsmax(g_Secondary[]), "weapon_%s", wep);

		g_DisabledSec[g_iNumSec] = disabled ? false : true;

		formatex(cmd, 5, "%d ", g_iNumSec);

		g_iNumSec++;

		if(disabled > 0)
			g_iNumUsedSec++;

		//TODO: Add menu_destroy_items to remake menu on cfg reload
		menu_additem(g_SecMenuID, display, cmd, 0, g_cSecondary);

	} else if (readAction == CFG_RELOAD) {
		g_SecMenuID = menu_create(g_SecMenu, "m_SecHandler", 0);
		g_iNumSec = 0;
		g_iNumUsedSec = 0;

	} else if(readAction == CFG_DONE) {
		//Nothing for now
		return PLUGIN_HANDLED;
	}

	return PLUGIN_HANDLED;
}

public cfgPrimary(readAction, line[], section[])
{
	if(readAction == CFG_READ)
	{
		if(g_iNumPrim >= MAX_PRIMARY)
			return PLUGIN_HANDLED;

		new wep[16], display[48], dis[4], cmd[6];

		parse(line, wep, charsmax(wep), display, charsmax(display), dis, charsmax(dis));

		new disabled = str_to_num(dis);

		//Copy weapon into array
		formatex(g_Primary[g_iNumPrim], charsmax(g_Secondary[]), "weapon_%s", wep);

		g_DisabledPrim[g_iNumPrim] = disabled ? false : true;

		formatex(cmd, charsmax(cmd), "%d", g_iNumPrim);

		g_iNumPrim++;

		if(disabled > 0)
			g_iNumUsedPrim++;

		//TODO: Add menu_destroy_items to remake menu on cfg reload
		menu_additem(g_PrimMenuID, display, cmd, 0, g_cPrimary);

	} else if(readAction == CFG_RELOAD) {
		g_PrimMenuID = menu_create(g_PrimMenu, "m_PrimHandler", 0);
		g_iNumPrim = 0;
		g_iNumUsedPrim = 0;

	} else if(readAction == CFG_DONE) {
		//Nothing for now
		return PLUGIN_HANDLED;
	}

	return PLUGIN_HANDLED;
}

public cfgBotPrim(readAction, line[], section[])
{
	if(readAction == CFG_READ)
	{
		new wep[16], display[32];

		parse(line, wep, charsmax(wep), display, charsmax(display));

		//Copy weapon into array
		formatex(g_BotPrim[g_iNumBotPrim], charsmax(g_BotPrim[]), "weapon_%s", wep);

		g_iNumBotPrim++;

	} else if(readAction == CFG_RELOAD) {
		g_iNumBotPrim = 0;

	} else if(readAction == CFG_DONE) {
		//Nothing for now
		return PLUGIN_HANDLED;
	}

	return PLUGIN_HANDLED;
}

public cfgBotSec(readAction, line[], section[])
{
	if(readAction == CFG_READ)
	{
		new wep[16], display[32];

		parse(line, wep, charsmax(wep), display, charsmax(display));

		//Copy weapon into array
		formatex(g_BotSec[g_iNumBotSec], charsmax(g_BotPrim[]), "weapon_%s", wep);

		g_iNumBotSec++;

	} else if(readAction == CFG_RELOAD) {
		g_iNumBotSec = 0;

	} else if(readAction == CFG_DONE) {
		//Nothing for now
		return PLUGIN_HANDLED;
	}

	return PLUGIN_HANDLED;
}

public cfgSetting(readAction, line[], section[])
{
	if(readAction == CFG_READ)
	{
		new setting[24], sign[3], value[6];

		parse(line, setting, charsmax(setting), sign, charsmax(sign), value, charsmax(value));

		// Menus settings
		if(contain(setting,"menus") != -1)
		{
			if(containi(value, "p") != -1)
				g_mPrimStatus = true;

			if(containi(value, "s") != -1)
				g_mSecStatus = true;

			if(containi(value, "a") != -1)
				g_mArmorStatus = true;

			if(containi(value, "g") != -1)
				g_mNadeStatus = true;

			return PLUGIN_HANDLED;

		} else if(contain(setting, "autoitems") != -1) {

			if(containi(value, "a")  != -1) {
				//Disable Armor Menu
				g_mArmorStatus = false;
				g_mAutoArmor = true;
				g_Armor = 1;
			}

			if(containi(value, "h") != -1) {
				//Disable Armor Menu
				g_mArmorStatus = false;
				g_mAutoArmor = true;
				g_Armor = 2;
			}

			if(containi(value, "g") != -1) {
				//Disable Grenade Menu
				g_mNadeStatus = false;
				g_mAutoNades = true;
			}

			if(containi(value, "d") != -1)
				g_DefuseKit = true;

			if(containi(value, "n") != -1)
				g_NightVision = true;

			return PLUGIN_HANDLED;

		} else if(contain(setting, "grenades") != -1) {

			if(containi(value, "f") != -1)
				g_Flash = true;

			if(containi(value, "h") != -1)
				g_Nade = true;

			if (containi(value, "s") != -1)
				g_Smoke = true;

		} else if(contain(setting, "fnadesnum") != -1) {
			fnadesnum = str_to_num(value);

		} else if(contain(setting, "always_allow_gunmenu") != -1) {
			g_AlwaysAllowGunMenu = str_to_num(value)? true : false;
		}

		return PLUGIN_HANDLED;

	} else if(readAction == CFG_RELOAD) {
		g_mArmorStatus = false;
		g_mNadeStatus = false;
		g_Flash = false;
		g_Nade = false;
		g_Smoke = false;
		g_Armor = 0;
		g_mSecStatus = false;
		g_mPrimStatus = false;
		g_mAutoNades = false;
		g_DefuseKit = false;
		g_NightVision = false;
		fnadesnum = 1;

	} else if(readAction == CFG_DONE) {
		//Nothing for now
		return PLUGIN_HANDLED;
	}

	return PLUGIN_HANDLED;
}

public cfgrestricts(readAction, line[], section[])
{
	if(readAction == CFG_READ)
	{
		new itemname[24], value[32], limit;
		parse(line, itemname, charsmax(itemname), value, charsmax(value));

		limit = 0;

		if(value[0] != '0')
			limit = str_to_num(value);

		new weapname[24], weaptype;

		formatex(weapname, charsmax(weapname), "weapon_%s", itemname);

		weaptype = getWeapId(weapname);

		// weaptype = get_weaponid(weapname) // why this crap doesn't work here but works correctly during the game ?!?
		// log_amx("[DEBUG] CSDM - reading restrictions, weapon %s (weaptype = %d).", itemname, weaptype)

		if(weaptype != 0) {
			IsRestricted[weaptype] = true;
			RestrictWps[weaptype] = limit;
		}

		// log_amx("[DEBUG] CSDM - reading restrictions, restricted %s (weaptype = %d) = %d", itemname, weaptype, limit)
	}
	else if(readAction == CFG_RELOAD)
	{
		// Reset all restrictions
		arrayset(IsRestricted, false, ITEMTYPES_NUM);
		arrayset(RestrictWps, 32, ITEMTYPES_NUM);
		return PLUGIN_HANDLED;
	}
	else if(readAction == CFG_DONE)
	{
		//Nothing for now
		return PLUGIN_HANDLED;
	}

	return PLUGIN_HANDLED;
}

public cfgMainSettings(readAction, line[], section[])
{
	if(readAction == CFG_READ)
	{
		new setting[24], sign[3], value[32];

		parse(line, setting, charsmax(setting), sign, charsmax(sign), value, charsmax(value));

		if(equali(setting, "weapons_stay")) {
			g_WeaponStayTime = str_to_num(value);
		}
	}
}

public cfgMiscSettings(readAction, line[], section[])
{
	if(readAction == CFG_READ)
	{
		new setting[24], sign[3], value[32];

		parse(line, setting, charsmax(setting), sign, charsmax(sign), value, charsmax(value));

		if(equali(setting, "ammo_refill")) {
			g_AmmoRefill = str_to_num(value) ? true : false;
		}

	} else if(readAction == CFG_RELOAD) {
		g_AmmoRefill = true;
	}
}

//Equipment Menu callback
public c_Equip(id, menu, item)
{
	if(item < 0)
		return PLUGIN_CONTINUE;

	new cmd[6], iName[64], access, callback;

	menu_item_getinfo(menu, item, access, cmd, charsmax(cmd), iName, charsmax(iName), callback);

	new weapon_s, weapon_p;
	weapon_s = get_weaponid(g_SecWeapons[id]);
	weapon_p = get_weaponid(g_PrimWeapons[id]);

	if(weapon_s == 0 && g_mSecStatus
		|| weapon_p == 0 && g_mPrimStatus
		|| IsRestricted[weapon_s]
		|| IsRestricted[weapon_p]) {
			return ITEM_DISABLED;
	}

	return ITEM_ENABLED;
}

//Secondary Weapon Callback
public c_Secondary(id, menu, item)
{
	if(item < 0)
		return PLUGIN_CONTINUE;

	new cmd[6], iName[64], access, callback;

	menu_item_getinfo(menu, item, access, cmd, charsmax(cmd), iName, charsmax(iName), callback);

	new dis = str_to_num(cmd);
	new team = _:cs_get_user_team(id);
	new weaptype = get_weaponid(g_Secondary[dis]);

	//Check to see if item is disabled
	if(g_DisabledSec[dis]) {
		return ITEM_DISABLED;

	} else if(!IsRestricted[weaptype]) {
		return ITEM_ENABLED;

	} else if(UsedWpsT[weaptype] < RestrictWps[weaptype] && team == _TEAM_T 
		|| UsedWpsCT[weaptype] < RestrictWps[weaptype] && team == _TEAM_CT) {
		return ITEM_ENABLED;
	}

	return ITEM_DISABLED;
}

//Primary Weapon Callback
public c_Primary(id, menu, item)
{
	if(item < 0)
		return PLUGIN_CONTINUE;

	// Get item info
	new cmd[6], iName[64], access, callback;

	menu_item_getinfo(menu, item, access, cmd, charsmax(cmd), iName, charsmax(iName), callback);

	new dis = str_to_num(cmd);
	new team = _:cs_get_user_team(id);
	new weaptype = get_weaponid(g_Primary[dis]);

	//Check to see if item is disabled
	if(g_DisabledPrim[dis]) {
		return ITEM_DISABLED;

	} else if(!IsRestricted[weaptype]) {
		return ITEM_ENABLED;

	} else if(UsedWpsT[weaptype] < RestrictWps[weaptype] && team == _TEAM_T 
		|| UsedWpsCT[weaptype] < RestrictWps[weaptype] && team == _TEAM_CT) {
			return ITEM_ENABLED;
	}

	return ITEM_DISABLED;
}

//Equipment Menu handler
public m_EquipHandler(id, menu, item)
{
	if(item < 0)
		return PLUGIN_CONTINUE;

	// Get item info
	new cmd[2], iName[64], access, callback;

	menu_item_getinfo(menu, item, access, cmd, charsmax(cmd), iName, charsmax(iName), callback);

	switch(str_to_num(cmd))
	{
		case 1:
		{
			if(g_mSecStatus)
				menu_display(id, g_SecMenuID, 0);

			else if(g_mPrimStatus)
				menu_display(id, g_PrimMenuID, 0);

			else if(g_mArmorStatus)
				menu_display(id, g_ArmorMenuID, 0);

			else if(g_mNadeStatus)
			{
				if(g_mAutoArmor) 
					equipUser(id, EQUIP_ARMOR);

				menu_display(id, g_NadeMenuID, 0);

			} else {
				if(g_mAutoArmor) 
					equipUser(id, EQUIP_ARMOR);

				if(g_mAutoNades) 
					equipUser(id, EQUIP_GREN);

				equipUser(id, EQUIP_ITEMS);
			}
		}
		case 2:
		{
			// Equip person with last settings
			equipUser(id, EQUIP_ALL);
		}
		case 3:
		{
			g_mShowuser[id] = false;
			client_print(id, print_chat, "");
			equipUser(id, EQUIP_ALL);
		}
	}

	return PLUGIN_HANDLED;
}

//Secondary Weapon Menu handler
public m_SecHandler(id, menu, item)
{
	if(!is_user_connected(id))
		return PLUGIN_HANDLED;

	// Get item info
	new cmd[6], iName[64], access, callback;

	menu_item_getinfo(menu, item, access, cmd, charsmax(cmd), iName, charsmax(iName), callback);

	new wep = str_to_num(cmd);

	new team = _:cs_get_user_team(id);
	new weaptype = get_weaponid(g_Secondary[wep]);

	if((UsedWpsT[weaptype] < RestrictWps[weaptype] && team == _TEAM_T 
		|| UsedWpsCT[weaptype] < RestrictWps[weaptype] && team == _TEAM_CT)
		&& !g_DisabledSec[wep])
	{
		copy(g_SecWeapons[id],17,g_Secondary[wep]);
		equipUser(id, EQUIP_SEC);

	} else if(g_mSecStatus) {
		menu_display(id, g_SecMenuID, 0);
		return PLUGIN_HANDLED;
	}

	// Show next menu here

	if(g_mPrimStatus)
		menu_display(id, g_PrimMenuID, 0);

	else if(g_mArmorStatus)
		menu_display(id, g_ArmorMenuID, 0);

	else if(g_mNadeStatus)
	{
		if (g_mAutoArmor)
			equipUser(id, EQUIP_ARMOR);

		menu_display(id, g_NadeMenuID, 0);

	} else {
		if (g_mAutoArmor)
			equipUser(id, EQUIP_ARMOR);

		if (g_mAutoNades)
			equipUser(id, EQUIP_GREN);

		equipUser(id, EQUIP_ITEMS);
	}

	return PLUGIN_HANDLED;
}

//Primary Weapon Menu handler
public m_PrimHandler(id, menu, item)
{
	if (item < 0)
		return PLUGIN_HANDLED;

	// Get item info
	new cmd[6], iName[64], access, callback;

	if(menu_item_getinfo(menu, item, access, cmd, charsmax(cmd), iName, charsmax(iName), callback))
	{
		new wep = str_to_num(cmd);
		new team = _:cs_get_user_team(id);
		new weaptype = get_weaponid(g_Primary[wep]);

		if((UsedWpsT[weaptype] < RestrictWps[weaptype] && team == _TEAM_T 
			|| UsedWpsCT[weaptype] < RestrictWps[weaptype] && team == _TEAM_CT)
			&& !g_DisabledPrim[wep])
		{
			copy(g_PrimWeapons[id], charsmax(g_PrimWeapons[]), g_Primary[wep]);
			equipUser(id, EQUIP_PRI);

		} else if (g_mPrimStatus) {
			menu_display(id, g_PrimMenuID, 0);
			return PLUGIN_HANDLED;
		}
	}

	// Show next menu here
	if(g_mArmorStatus) {
		menu_display(id, g_ArmorMenuID, 0);
	}
	else if(g_mNadeStatus)
	{
		if(g_mAutoArmor)
			equipUser(id, EQUIP_ARMOR);

		menu_display(id, g_NadeMenuID, 0);

	} else {
		if (g_mAutoArmor)
			equipUser(id, EQUIP_ARMOR);

		if (g_mAutoNades)
			equipUser(id, EQUIP_GREN);

		equipUser(id, EQUIP_ITEMS);
	}

	return PLUGIN_HANDLED;
}

//Armor Menu handler
public m_ArmorHandler(id, menu, item)
{
	if(item < 0)
		return PLUGIN_CONTINUE;

	// Get item info
	new cmd[6], iName[64], access, callback;

	menu_item_getinfo(menu, item, access, cmd, charsmax(cmd), iName, charsmax(iName), callback);

	new choice = str_to_num(cmd);

	if(choice == 1) {
		g_mArmor[id] = true;
	} else if (choice == 2) {
		g_mArmor[id] = false;
	}

	equipUser(id, EQUIP_ARMOR);

	// Show next menu here

	if(g_mNadeStatus) {
		menu_display(id, g_NadeMenuID, 0);
	} else {
		if (g_mAutoNades)
			equipUser(id, EQUIP_GREN);

		equipUser(id, EQUIP_ITEMS);
	}

	return PLUGIN_HANDLED;
}

//Nade Menu handler
public m_NadeHandler(id, menu, item)
{
	if (item < 0)
		return PLUGIN_CONTINUE;

	new cmd[6], iName[64], access, callback;

	menu_item_getinfo(menu, item, access, cmd, charsmax(cmd), iName, charsmax(iName), callback);

	new choice = str_to_num(cmd);

	if (choice == 1) {
		g_mNades[id] = true;
	} else if (choice == 2) {
		g_mNades[id] = false;
	}

	equipUser(id, EQUIP_GREN);
	equipUser(id, EQUIP_ITEMS);

	return PLUGIN_HANDLED;
}

buildMenu()
{
	//Equip Menu
	menu_additem(g_EquipMenuID, "Новая экипировка", "1", 0, -1);
	menu_additem(g_EquipMenuID, "Предыдущий выбор", "2", 0, g_cEquip);
	menu_additem(g_EquipMenuID, "Предыдущий выбор и больше не спрашивать", "3", 0, g_cEquip);
	menu_setprop(g_EquipMenuID, MPROP_EXIT, MEXIT_NEVER);

	//Armor Menu
	menu_additem(g_ArmorMenuID, "Да, выдать броню", "1", 0, -1);
	menu_additem(g_ArmorMenuID, "Без брони", "2", 0, -1);
	menu_setprop(g_ArmorMenuID, MPROP_EXIT, MEXIT_NEVER);

	//Nade Menu
	menu_additem(g_NadeMenuID, "Все гранаты", "1", 0, -1);
	menu_additem(g_NadeMenuID, "Без гранат", "2", 0, -1);
	menu_setprop(g_NadeMenuID, MPROP_EXIT, MEXIT_NEVER);

	return PLUGIN_HANDLED;
}

equipUser(id, to)
{
	if(!is_user_alive(id)) return;

	new weaptype;
	new team = _:cs_get_user_team(id);

	if((to & EQUIP_SEC) && get_weaponid(g_SecWeapons[id])) {

		//Give Secondary
		GiveUserFullWeapon(id, g_SecWeapons[id]);
	}

	if((to & EQUIP_PRI) && get_weaponid(g_PrimWeapons[id])) {

		//Give Primary
		GiveUserFullWeapon(id, g_PrimWeapons[id]);
	}

	if(to & EQUIP_ARMOR)
	{
		//Give Armor
		if(g_mAutoArmor || g_mArmor[id]) {
			new armor = g_mArmor[id] ? 2 : g_Armor;
			cs_set_user_armor(id, DEFAULT_ARMOR, CsArmorType:armor);
		}
	}

	if(to & EQUIP_GREN)
	{
		//Give Nades
		if(g_mNades[id] || g_mAutoNades)
		{
			if(g_Nade)
			{

				weaptype = get_weaponid("weapon_hegrenade");

				if(IsRestricted[weaptype])
				{

					if(UsedWpsT[weaptype] < RestrictWps[weaptype] && team == _TEAM_T) {
						UsedWpsT[weaptype]++;
						GiveUserFullWeapon(id,"weapon_hegrenade");
					}

					if(UsedWpsCT[weaptype] < RestrictWps[weaptype] && team == _TEAM_CT) {
						UsedWpsCT[weaptype]++;
						GiveUserFullWeapon(id,"weapon_hegrenade");
					}

				} else {
					GiveUserFullWeapon(id,"weapon_hegrenade");
				}
			}

			if(g_Smoke)
			{
				weaptype = get_weaponid("weapon_smokegrenade");

				if(IsRestricted[weaptype])
				{

					if(UsedWpsT[weaptype] < RestrictWps[weaptype] && team == _TEAM_T) {
						UsedWpsT[weaptype]++;
						GiveUserFullWeapon(id,"weapon_smokegrenade");
					}

					if(UsedWpsCT[weaptype] < RestrictWps[weaptype] && team == _TEAM_CT) {
						UsedWpsCT[weaptype]++;
						GiveUserFullWeapon(id,"weapon_smokegrenade");
					}

				} else {
					GiveUserFullWeapon(id, "weapon_smokegrenade");
				}
			}

			if(g_Flash && fnadesnum)
			{

				weaptype = get_weaponid("weapon_flashbang");

				if(IsRestricted[weaptype])
				{

					if(UsedWpsT[weaptype] < RestrictWps[weaptype] && team == _TEAM_T) {
						UsedWpsT[weaptype]++;
						GiveUserFullWeapon(id, "weapon_flashbang");
					}

					if(UsedWpsCT[weaptype] < RestrictWps[weaptype] && team == _TEAM_CT) {
						UsedWpsCT[weaptype]++;
						GiveUserFullWeapon(id, "weapon_flashbang");
					}

				} else {
					GiveUserFullWeapon(id, "weapon_flashbang");
				}

				if(fnadesnum == 2)
				{
					if(IsRestricted[weaptype])
					{

						if((UsedWpsT[weaptype] < RestrictWps[weaptype]) && (team == _TEAM_T)) {
							UsedWpsT[weaptype]++;
							GiveUserFullWeapon(id, "weapon_flashbang");
						}

						if((UsedWpsCT[weaptype] < RestrictWps[weaptype]) && (team == _TEAM_CT)) {
							UsedWpsCT[weaptype]++;
							GiveUserFullWeapon(id, "weapon_flashbang");
						}

					} else {
						GiveUserFullWeapon(id, "weapon_flashbang");
					}

				}
			}
		}
	}

	if (to & EQUIP_ITEMS)
	{
		if (g_DefuseKit && (_:cs_get_user_team(id) == _TEAM_CT)) {
			cs_set_user_defuse(id, 1);
		}

		if (g_NightVision) {
			cs_set_user_nvg(id, 1);
		}
	}
}

GiveUserFullWeapon(id, const wp[])
{
	if(!is_user_connected(id)) return;

	/** First check to make sure the user does not have a weapon in this slot */
	new wpnid = get_weaponid(wp);
	new weapons[MAX_WEAPONS], num, name[24], weap, slot;
	new team = _:cs_get_user_team(id);

	if(wpnid == 0)
	{
		if(equal(wp, "weapon_shield")) {
			slot = SLOT_PRIMARY;
			wpnid = -1;
		}

	} else {
		slot = g_WeaponSlots[wpnid];
	}

	if((slot == SLOT_SECONDARY || slot == SLOT_PRIMARY) && wpnid > 0)
	{
		get_user_weapons(id, weapons, num);

		for (new i = 0; i < num; i++)
		{
			weap = weapons[i];

			if(weap == wpnid)
				continue;

			if(g_WeaponSlots[weap] == slot)
			{
				if(slot == SLOT_SECONDARY && cs_get_user_shield(id)) {
					//temporary fix!
					drop_with_shield(id, weap);

				} else {
					get_weaponname(weap, name, charsmax(name));
					csdm_force_drop(id, name);
				}
			}
		}

	} else if(slot == SLOT_PRIMARY && wpnid == -1 && cs_get_user_shield(id)) {
		return;
	}

	if(slot == SLOT_PRIMARY && cs_get_user_shield(id) && wpnid > 0) {
		csdm_fwd_drop(id, -1, "weapon_shield");
	}

	new item_id = csdm_give_item(id, wp);

	if(item_id > 0)
	{
		if (wpnid == CSW_M4A1) {
			cs_set_weapon_silen(item_id, g_Silenced[id][SILENCED_M4A1], 1);
		} else if (wpnid == CSW_USP) {
			cs_set_weapon_silen(item_id, g_Silenced[id][SILENCED_USP], 1);
		}
	}

	if(wpnid > 0)
	{
		new bpammo = g_MaxBPAmmo[wpnid];

		if(bpammo)
			cs_set_user_bpammo(id, wpnid, bpammo);

		if (IsRestricted[wpnid])
		{
			if ((UsedWpsT[wpnid] < RestrictWps[wpnid]) && (team == _TEAM_T)) {
				UsedWpsT[wpnid]++;
			}

			if ((UsedWpsCT[wpnid] < RestrictWps[wpnid]) && (team == _TEAM_CT)) {
				UsedWpsCT[wpnid]++;
			}
		}
	}
}

// MAIN FUNCTION OF THE PLUGIN
public csdm_PostSpawn(player)
{
	if(pv_csdm_additems)
	{
		if(get_pcvar_num(pv_csdm_additems)) {
			return PLUGIN_CONTINUE;
		}
	}

	g_Teamuser[player] = _:cs_get_user_team(player);

	if(is_user_bot(player))
	{
		new i, weapon_p, weapon_s;
		new randPrim = random_num(0, g_iNumBotPrim-1);
		new randSec = random_num(0, g_iNumBotSec-1);

		weapon_p = get_weaponid(g_BotPrim[randPrim]);

		i = 0;

		while(i < 10 && IsRestricted[weapon_p] 
			&& (UsedWpsT[weapon_p] >= RestrictWps[weapon_p] && g_Teamuser[player] == _TEAM_T 
			|| UsedWpsCT[weapon_p] >= RestrictWps[weapon_p] && g_Teamuser[player] == _TEAM_CT))
		{
			randPrim++;

			if(randPrim >= g_iNumBotPrim)
				randPrim = 0;

			weapon_p = get_weaponid(g_BotPrim[randPrim]);

			i++;
		}

		weapon_s = get_weaponid(g_BotSec[randSec]);

		i = 0;

		while(i < 10 && IsRestricted[weapon_s] 
			&& (UsedWpsT[weapon_s] >= RestrictWps[weapon_s] && g_Teamuser[player] == _TEAM_T 
			|| UsedWpsCT[weapon_s] >= RestrictWps[weapon_s] && g_Teamuser[player] == _TEAM_CT))
		{
			randSec++;

			if(randSec >= g_iNumBotSec)
				randSec = 0;

			weapon_s = get_weaponid(g_BotSec[randSec]);

			i++;
		}

		new randArm = random_num(0, 2);
		new randGre = random_num(0, 2);

		if(g_mPrimStatus)
			GiveUserFullWeapon(player, g_BotPrim[randPrim]);

		if(g_mSecStatus)
			GiveUserFullWeapon(player, g_BotSec[randSec]);

		g_mArmor[player] = (g_mArmorStatus && randArm);
		g_mNades[player] = (g_mNadeStatus && randGre);

		if(g_mAutoArmor || g_mArmor[player])
			equipUser(player, EQUIP_ARMOR);

		if(g_mAutoNades || g_mNades[player])
			equipUser(player, EQUIP_GREN);

		if (g_DefuseKit)
			equipUser(player, EQUIP_ITEMS);

	} else {

		if(g_mShowuser[player])
		{
			new oldmenuid, newmenuid;
			new bool:bEquipMenuDisp = false;

			player_menu_info(player, oldmenuid, newmenuid); // main thing to prevent overwrite some menu by gun menu

			if(newmenuid != -1 && (newmenuid == g_SecMenuID || newmenuid == g_PrimMenuID 
				|| newmenuid == g_ArmorMenuID || newmenuid == g_EquipMenuID))
			{
				bEquipMenuDisp = true;
			}

			if(bEquipMenuDisp || oldmenuid <= 0 || g_maxdelmenutime == 0)
			{
				g_MenuState[player] = 1;
				menu_display(player, g_EquipMenuID, 0);

			} else {

				new param[1];
				param[0] = player;

				if(g_maxdelmenutime > 0)
					set_task(1.0, "checkmenu", 850 + player, param, 1, "b");

				set_task(g_maxdelmenutime, "menu_delayed", 700 + player, param, 1);
			}

		} else {
			g_MenuState[player] = 0;
			set_task(0.2, "delay_equip", player);
			// equipUser(player, EQUIP_ALL)
		}
	}

	return PLUGIN_CONTINUE;
}

public delay_equip(id)
{
	if(is_user_connected(id))
		equipUser(id, EQUIP_ALL);
}

public enableMenu(id)
{
	if(!csdm_active())
		return PLUGIN_CONTINUE;

	if(!g_mShowuser[id])
	{
		g_mShowuser[id] = true;
		client_print(id, print_chat, "Меню экипировки было вновь включено.");

		if(!g_MenuState[id]) {
			g_MenuState[id] = 1;
			menu_display(id, g_EquipMenuID, 0);
		}

	} else if(!g_AlwaysAllowGunMenu || !g_AmmoRefill || (g_WeaponStayTime > 5)) {

		if(!g_AlwaysAllowGunMenu) 
			client_print(id, print_chat, "Меню экипировки уже включено. Вы уже должны иметь оружие.");

		else if(!g_AmmoRefill) 
			client_print(id, print_chat, "Вы не можете использовать меню экипировки т.к. у вас уже есть оружие или возможность выбрать другое оружие отключена.");

		else if(g_WeaponStayTime > 5)
			client_print(id, print_chat, "Вы не можете использовать меню экипировки т.к. у вас уже есть оружие слишком длительное время");
	
	} else {
		g_MenuState[id] = 1;
		menu_display(id, g_EquipMenuID, 0);
	}

	return PLUGIN_HANDLED;
}

public checkmenu(param[])
{
	new id = param[0];

	if(!id)
	{
		if(task_exists(850 + id)) {
			remove_task(850 + id);
		}

		return PLUGIN_CONTINUE;
	}

	if(!is_user_connected(id))
	{
		if (task_exists(850 + id)) {
			remove_task(850 + id);
		}

		return PLUGIN_CONTINUE;
	}

	new oldmenuid, newmenuid;
	new bool:bEquipMenuDisp = false;

	player_menu_info(id, oldmenuid, newmenuid);

	if(newmenuid != -1 && (newmenuid == g_SecMenuID || newmenuid == g_PrimMenuID 
		|| newmenuid == g_ArmorMenuID || newmenuid == g_EquipMenuID))
	{
		bEquipMenuDisp = true;
	}

	if((oldmenuid <= 0) || (bEquipMenuDisp))
	{
		g_MenuState[id] = 1;
		menu_display(id, g_EquipMenuID, 0);

		if (task_exists(850+id))
			remove_task(850+id);

		if (task_exists(700+id))
			remove_task(700+id);
	}	

	return PLUGIN_CONTINUE;
}

public menu_delayed(param[])
{
	new id = param[0];

	if (!id)
	{
		if (task_exists(700 + id)) {
			remove_task(700 + id);
		}

		return PLUGIN_HANDLED;
	}

	if(!is_user_connected(id))
	{

		if (task_exists(850 + id)) {
			remove_task(850 + id);
		}

		return PLUGIN_HANDLED;
	}

	g_MenuState[id] = 1;
	menu_display(id, g_EquipMenuID, 0);

	if (task_exists(700 + id))
		remove_task(700 + id);

	if (task_exists(850 + id))
		remove_task(850 + id);

	return PLUGIN_CONTINUE;
}

stock getWeapId(wp[]) // this one is used, because get_weaponid doesn't work when csdm_CfgInit is called (something wrong with core intitialisation?
{
	if(equal(wp, "weapon_p228")) return CSW_P228;
	else if(equal(wp, "weapon_scout")) return CSW_SCOUT;
	else if(equal(wp, "weapon_hegrenade")) return CSW_HEGRENADE;
	else if(equal(wp, "weapon_xm1014")) return CSW_XM1014;
	else if(equal(wp, "weapon_c4")) return CSW_C4;
	else if(equal(wp, "weapon_mac10")) return CSW_MAC10;
	else if(equal(wp, "weapon_aug")) return CSW_AUG;
	else if(equal(wp, "weapon_smokegrenade")) return CSW_SMOKEGRENADE;
	else if(equal(wp, "weapon_elite")) return CSW_ELITE;
	else if(equal(wp, "weapon_fiveseven")) return CSW_FIVESEVEN;
	else if(equal(wp, "weapon_ump45")) return CSW_UMP45;
	else if(equal(wp, "weapon_sg550")) return CSW_SG550;
	else if(equal(wp, "weapon_galil")) return CSW_GALIL;
	else if(equal(wp, "weapon_famas")) return CSW_FAMAS;
	else if(equal(wp, "weapon_usp")) return CSW_USP;
	else if(equal(wp, "weapon_glock18")) return CSW_GLOCK18;
	else if(equal(wp, "weapon_awp")) return CSW_AWP;
	else if(equal(wp, "weapon_mp5navy")) return CSW_MP5NAVY;
	else if(equal(wp, "weapon_m249")) return CSW_M249;
	else if(equal(wp, "weapon_m3")) return CSW_M3;
	else if(equal(wp, "weapon_m4a1")) return CSW_M4A1;
	else if(equal(wp, "weapon_tmp")) return CSW_TMP;
	else if(equal(wp, "weapon_g3sg1")) return CSW_G3SG1;
	else if(equal(wp, "weapon_flashbang")) return CSW_FLASHBANG;
	else if(equal(wp, "weapon_deagle")) return CSW_DEAGLE;
	else if(equal(wp, "weapon_sg552")) return CSW_SG552;
	else if(equal(wp, "weapon_ak47")) return CSW_AK47;
	else if(equal(wp, "weapon_knife")) return CSW_KNIFE;
	else if(equal(wp, "weapon_p90")) return CSW_P90;

	return PLUGIN_CONTINUE;
}

// stuff for settings menu - START
public csdm_equip_sett_menu(id, level, cid)
{
	if(!cmd_access(id, level, cid, 1))
		return PLUGIN_HANDLED;

	menu_display(id, g_EquipSettMenu, 0);

	return PLUGIN_HANDLED;
}

public use_csdm_equip_menu(id, menu, item)
{
	if(item < 0)
		return PLUGIN_CONTINUE;

	new command[6], paccess, call;

	if(!menu_item_getinfo(g_EquipSettMenu, item, paccess, command, charsmax(command), _, _, call)) {
		log_amx("Error: csdm_menu_item() failed (menu %d) (page %d) (item %d)", g_EquipSettMenu, 0, item);
		return PLUGIN_HANDLED;
	}

	if(paccess && !(get_user_flags(id) & paccess)) {
		client_print(id, print_chat, "You do not have access to this menu option.");
		return PLUGIN_HANDLED;
	}

	new iChoice = str_to_num(command);

	switch(iChoice)
	{
		case 1:
		{
			g_mPrimStatus = g_mPrimStatus? false : true;

			client_print(id, print_chat, "Отображение меню первичного оружия %s.", g_mPrimStatus ? "Включено" : "Выключено");
			log_amx("CSDM displaying primary gun menu %s.", g_mPrimStatus ? "enabled" : "disabled");

			menu_display(id, g_EquipSettMenu, 0);
			write_menus_settings(id);

			return PLUGIN_HANDLED;
		}
		case 2:
		{
			g_mSecStatus = g_mSecStatus? false : true;

			client_print(id, print_chat, "Отображение меню вторичного оружия %s.", g_mSecStatus ? "Включено" : "Выключено");
			log_amx("CSDM displaying secondary gun menu %s.", g_mSecStatus ? "enabled" : "disabled");

			menu_display(id, g_EquipSettMenu, 0);
			write_menus_settings(id);

			return PLUGIN_HANDLED;
		}
		case 3:
		{
			g_mArmorStatus = g_mArmorStatus? false : true;

			if(g_mArmorStatus)
				g_mAutoArmor = false;

			client_print(id, print_chat, "Отображение меню брони %s.", g_mArmorStatus ? "Включено" : "Выключено");
			log_amx("CSDM displaying armor menu %s.", g_mArmorStatus ? "enabled" : "disabled");

			menu_display(id, g_EquipSettMenu, 0);
			write_menus_settings(id);

			return PLUGIN_HANDLED;
		}
		case 4:
		{
			g_mNadeStatus = g_mNadeStatus? false : true;

			if(g_mNadeStatus)
				g_mAutoNades = false;

			client_print(id, print_chat, "Отображение меню гранат %s.", g_mNadeStatus ? "Включено" : "Выключено");
			log_amx("CSDM displaying nades menu %s.", g_mNadeStatus ? "enabled" : "disabled");

			menu_display(id, g_EquipSettMenu, 0);
			write_menus_settings(id);

			return PLUGIN_HANDLED;
		}
		case 5:
		{
			if(g_Armor == 1 || g_Armor == 2) {
				g_Armor = 0;
				g_mAutoArmor = false;
			}
			else if(g_Armor == 0) {
				g_Armor = 1;
				g_mAutoArmor = true;
				g_mArmorStatus = false;
			}

			client_print(id, print_chat, "Авто выдача брони %s.", g_mAutoArmor ? "Включена" : "Выключена");
			log_amx("CSDM auto equiping players with armor %s.", g_mAutoArmor ? "enabled" : "disabled");

			menu_display(id, g_EquipSettMenu, 0);
			write_autoequip_settings(id);

			return PLUGIN_HANDLED;
		}
		case 6:
		{
			if(g_Armor == 0 || g_Armor == 1) {
				g_Armor = 2;
				g_mAutoArmor = true;
				g_mArmorStatus = false;
			}
			else if(g_Armor == 2) {
				g_Armor = 1;
				g_mAutoArmor = true;
				g_mArmorStatus = false;
			}

			client_print(id, print_chat, "Авто выдача шлема %s.", (g_Armor == 2) ? "Включена" : "Выключена");
			log_amx("CSDM auto equiping players with helmet %s.", (g_Armor == 2) ? "enabled" : "disabled");

			menu_display(id, g_EquipSettMenu, 0);
			write_autoequip_settings(id);

			return PLUGIN_HANDLED;
		}
		case 7:
		{
			g_mAutoNades = g_mAutoNades? false : true;

			if(g_mAutoNades)
				g_mNadeStatus = false;

			client_print(id, print_chat, "Авто выдача гранат %s.", g_mAutoNades ? "Включена" : "Выключена");
			log_amx("CSDM auto equiping players with grenades %s.", g_mAutoNades ? "enabled" : "disabled");

			menu_display(id, g_EquipSettMenu, 0);
			write_autoequip_settings(id);

			return PLUGIN_HANDLED;
		}
		case 8:
		{
			g_DefuseKit = g_DefuseKit? false : true;

			client_print(id, print_chat, "Авто выдача щипцов (только спецназ) %s.", g_DefuseKit ? "Включена" : "Выключена");
			log_amx("CSDM auto equiping players with defuser (CTs) %s.", g_DefuseKit ? "enabled" : "disabled");

			menu_display(id, g_EquipSettMenu, 1);
			write_autoequip_settings(id);

			return PLUGIN_HANDLED;
		}
		case 9:
		{
			g_NightVision = g_NightVision? false : true;

			client_print(id, print_chat, "Авто выдача ночного выденья %s.", g_NightVision ? "Включена" : "Выключена");
			log_amx("CSDM auto equiping players with nightvision %s.", g_NightVision ? "enabled" : "disabled");

			menu_display(id, g_EquipSettMenu, 1);
			write_autoequip_settings(id);

			return PLUGIN_HANDLED;
		}
		case 10:
		{
			g_Flash = g_Flash? false : true;

			client_print(id, print_chat, "Р˜СЃРїРѕР»СЊР·РѕРІР°РЅРёРµ световых гранат %s.", g_Flash ? "Включено" : "Выключено");
			log_amx("CSDM usage of flashbangs is %s.", g_Flash ? "enabled" : "disabled");

			menu_display(id, g_EquipSettMenu, 1);
			write_nades_settings(id);

			return PLUGIN_HANDLED;
		}
		case 11:
		{
			g_Smoke = g_Smoke? false : true;

			client_print(id, print_chat, "Р˜В˜СЃРїРѕР»СЊР·РѕРІР°РЅРёРµ дымовых гранат %s.", g_Smoke ? "Включено" : "Выключено");
			log_amx("CSDM usage of smoke grenades is %s.", g_Smoke ? "enabled" : "disabled");

			menu_display(id, g_EquipSettMenu, 1);
			write_nades_settings(id);

			return PLUGIN_HANDLED;
		}
		case 12:
		{
			g_Nade = g_Nade? false : true;

			client_print(id, print_chat, "Р˜СЃРїРѕР»СЊР·РѕРІР°РЅРёРµ всех гранат %s.", g_Nade ? "Включено" : "Выключено");
			log_amx("CSDM usage of he nades is %s.", g_Nade ? "enabled" : "disabled");

			menu_display(id, g_EquipSettMenu, 1);
			write_nades_settings(id);

			return PLUGIN_HANDLED;
		}
		case 13:
		{
			g_AlwaysAllowGunMenu = g_AlwaysAllowGunMenu? false : true;

			client_print(id, print_chat, "Р˜В˜СЃРїРѕР»СЊР·РѕРІР°РЅРёРµ меню СЌРєРёРїРёСЂРѕРІРєРё всегда %s.", g_AlwaysAllowGunMenu ? "Включено" : "Выключено");
			log_amx("CSDM Always Allow Gun Menu is %s.", g_AlwaysAllowGunMenu ? "enabled" : "disabled");

			menu_display(id, g_EquipSettMenu, 1);
			csdm_write_cfg(id, "equip", "always_allow_gunmenu", g_AlwaysAllowGunMenu ? "1" : "0");

			return PLUGIN_HANDLED;
		}
		case 14:
		{
			menu_display(id, g_SettingsMenu, g_PageSettMenu);

			return PLUGIN_HANDLED;
		}
	}

	return PLUGIN_HANDLED;
}

public hook_equip_sett_display(player, menu, item)
{
	new paccess, command[24], call;

	menu_item_getinfo(menu, item, paccess, command, charsmax(command), _, _, call);

	if (equali(command, "1")) {
		if (g_mPrimStatus) menu_item_setname(menu, item, "Меню первичного оружия включено");
		else menu_item_setname(menu, item, "Меню первичного оружия выключено");
	} else if (equali(command, "2")) {
		if (g_mSecStatus) menu_item_setname(menu, item, "Меню вторичного оружия включено");
		else menu_item_setname(menu, item, "Меню вторичного оружия выключено");
	} else if (equali(command, "3")) {
		if (g_mArmorStatus) menu_item_setname(menu, item, "Меню брони включено");
		else menu_item_setname(menu, item, "Меню брони выключено");
	} else if (equali(command, "4")) {
		if (g_mNadeStatus) menu_item_setname(menu, item, "Equip Menu Grenades Enabled");
		else menu_item_setname(menu, item, "Equip Menu Grenades Disabled");
	} else if (equali(command, "5")) {
		if (g_mAutoArmor) menu_item_setname(menu, item, "Авто экипировка броней включена");
		else menu_item_setname(menu, item, "Авто экипировка броней выключена");
	} else if (equali(command, "6")) {
		if (g_mAutoArmor && g_Armor == 2) menu_item_setname(menu, item, "Авто экипировка шлемом включена");
		else menu_item_setname(menu, item, "Авто экипировка шлемом выключена");
	} else if (equali(command, "7")) {
		if (g_mAutoNades) menu_item_setname(menu, item, "Авто экипировка гранатами включена");
		else menu_item_setname(menu, item, "Авто экипировка гранатами включена");
	} else if (equali(command, "8")) {
		if (g_DefuseKit) menu_item_setname(menu, item, "Авто экипировка щипцами включена");
		else menu_item_setname(menu, item, "Авто экипировка щипцами выключена");
	} else if (equali(command, "9")) {
		if (g_NightVision) menu_item_setname(menu, item, "Авто экипировка ночным виденьем включена");
		else menu_item_setname(menu, item, "Авто экипировка ночным виденьем выключена");
	} else if (equali(command, "10")) {
		if (g_Flash) menu_item_setname(menu, item, "Световые гранаты включены");
		else menu_item_setname(menu, item, "Световые гранаты выключены");
	} else if (equali(command, "11")) {
		if (g_Smoke) menu_item_setname(menu, item, "Дымовые гранаты включены");
		else menu_item_setname(menu, item, "Дымовые гранаты выключены");
	} else if (equali(command, "12")) {
		if (g_Nade) menu_item_setname(menu, item, "Р*азрывные гранаты включены");
		else menu_item_setname(menu, item, "Р*азрывные гранаты выключены");
	} else if (equali(command, "13")) {
		if (g_AlwaysAllowGunMenu) menu_item_setname(menu, item, "Р˜СЃРїРѕР»СЊР·РѕРІР°РЅРёРµ меню СЌРєРёРїРёСЂРѕРІРєРё всегда, включено");
		else menu_item_setname(menu, item, "Р˜В˜СЃРїРѕР»СЊР·РѕРІР°РЅРёРµ меню СЌРєРёРїРёСЂРѕРІРєРё всегда, выключено");
	}
}

public write_menus_settings(id)
{
	new flags[5] = "";
	new menu_flags = 0;

	if(g_mPrimStatus)
		menu_flags |= (1<<0);
	if(g_mSecStatus)
		menu_flags |= (1<<1);
	if(g_mArmorStatus)
		menu_flags |= (1<<2);
	if(g_mNadeStatus)
		menu_flags |= (1<<3);

	get_flags(menu_flags, flags, charsmax(flags));

	replace(flags, charsmax(flags), "a", "p");
	replace(flags, charsmax(flags), "b", "s");
	replace(flags, charsmax(flags), "c", "a");
	replace(flags, charsmax(flags), "d", "g");

	csdm_write_cfg(id, "equip", "menus", flags);
}

public write_autoequip_settings(id)
{
	new flags[6] = "";
	new auto_flags = 0;

	if(g_mAutoArmor)
		auto_flags |= (1<<0);
	if(g_mAutoArmor && g_Armor == 2)
		auto_flags |= (1<<1);
	if(g_mAutoNades)
		auto_flags |= (1<<2);
	if(g_DefuseKit)
		auto_flags |= (1<<3);
	if(g_NightVision)
		auto_flags |= (1<<4);

	get_flags(auto_flags, flags, charsmax(flags));

	// replace(flags, charsmax(flags), "a", "a");
	replace(flags, charsmax(flags), "b", "h");
	replace(flags, charsmax(flags), "c", "g");
	// replace(flags, charsmax(flags), "d", "d");
	replace(flags, charsmax(flags), "e", "n");

	csdm_write_cfg(id, "equip", "autoitems", flags);
}

public write_nades_settings(id)
{
	new flags[4] = "";
	new nade_flags = 0;

	if(g_Flash)
		nade_flags |= (1<<0);
	if(g_Nade)
		nade_flags |= (1<<1);
	if(g_Smoke)
		nade_flags |= (1<<2);

	get_flags(nade_flags, flags, charsmax(flags));

	replace(flags, charsmax(flags), "a", "f");
	replace(flags, charsmax(flags), "b", "h");
	replace(flags, charsmax(flags), "c", "s");

	csdm_write_cfg(id, "equip", "grenades", flags);
}
// stuff for settings menu - END
video:
https://youtu.be/5HpNt-1v-Qs

Last edited by Vaim; 02-15-2019 at 17:59.
Vaim is offline
PartialCloning
Senior Member
Join Date: Dec 2015
Old 02-15-2019 , 17:59   Re: Variable Ignoring _cl_autowepswich "0"
Reply With Quote #8

What he's asking for and what your code does are completely different.

Vaim, post the code from your CSDM mod that's giving out weapons.
PartialCloning is offline
Vaim
Member
Join Date: Feb 2019
Old 02-15-2019 , 18:11   Re: Variable Ignoring _cl_autowepswich "0"
Reply With Quote #9

Quote:
Originally Posted by PartialCloning View Post
What he's asking for and what your code does are completely different.

Vaim, post the code from your CSDM mod that's giving out weapons.

Hello Mr. PartialCloning
gives weapons plugin
csdm_equip.amxx

Code:
#include <amxmodx>
#include <amxmisc>
#include <cstrike>
#include <csdm>
#include <fakemeta>
#include <hamsandwich>

#pragma semicolon 1

#if AMXX_VERSION_NUM < 183
	#define client_disconnected client_disconnect
#endif

//Tampering with the author and name lines can violate the copyright
new const PLUGINNAME[] = "ReCSDM Equip";
new const VERSION[] = CSDM_VERSION;
new const AUTHORS[] = "ReCSDM Team";

#define	EQUIP_PRI		(1<<0)
#define	EQUIP_SEC		(1<<1)
#define	EQUIP_ARMOR		(1<<2)
#define	EQUIP_GREN		(1<<3)
#define	EQUIP_ITEMS		(1<<4)
#define	EQUIP_ALL		(EQUIP_PRI|EQUIP_SEC|EQUIP_ARMOR|EQUIP_GREN|EQUIP_ITEMS)

#define	ITEMTYPES_NUM	42

new g_MaxPlayers;

new bool:IsRestricted[ITEMTYPES_NUM] = {false, ...};	// Contains if an item is restricted or not
new RestrictWps[ITEMTYPES_NUM] = {32, ...};
new UsedWpsT[ITEMTYPES_NUM] = {0, ...};
new UsedWpsCT[ITEMTYPES_NUM] = {0, ...};

//Menus
new const g_SecMenu[] = "Меню Первичного оружия";		// Menu Name
new g_SecMenuID = -1;													// Menu ID
new g_cSecondary;														// Menu Callback
new bool:g_mSecStatus = true;												// Menu Available?

new const g_PrimMenu[] = "Меню Вторичного оружия";
new g_PrimMenuID = -1;
new g_cPrimary;
new bool:g_mPrimStatus = true;

new const g_ArmorMenu[] = "Броня";
new g_ArmorMenuID = -1;
new bool:g_mArmorStatus = true;

new const g_NadeMenu[] = "Гранаты";
new g_NadeMenuID = -1;
new bool:g_mNadeStatus = true;

new const g_EquipMenu[] = "Р*РєРёРїРёСЂРѕРІРєР°";
new g_EquipMenuID = -1;
new g_cEquip;

new bool:g_mShowuser[CSDM_MAXPLAYERS + 1] = true;

new g_Teamuser[CSDM_MAXPLAYERS + 1];

new bool:g_mAutoNades = false;
new bool:g_mAutoArmor = false;
new bool:g_AlwaysAllowGunMenu = false;
new bool:g_AmmoRefill = false;
new g_WeaponStayTime = 0;

//Weapon Selections
new g_SecWeapons[CSDM_MAXPLAYERS + 1][18];
new g_PrimWeapons[CSDM_MAXPLAYERS + 1][18];
new bool:g_mNades[CSDM_MAXPLAYERS + 1];
new bool:g_mArmor[CSDM_MAXPLAYERS + 1];

//Config weapon storage holders
new g_BotPrim[MAX_WEAPONS][18];
new g_iNumBotPrim;

new g_BotSec[MAX_WEAPONS][18];
new g_iNumBotSec;

new g_Secondary[MAX_SECONDARY][18];
new bool:g_DisabledSec[MAX_WEAPONS];
new g_iNumSec;
new g_iNumUsedSec = 0;

new g_Primary[MAX_PRIMARY][18];
new bool:g_DisabledPrim[MAX_WEAPONS];
new g_iNumPrim;
new g_iNumUsedPrim = 0;

new pv_csdm_additems;

#define SILENCED_M4A1		0
#define SILENCED_USP		1
new bool:g_Silenced[CSDM_MAXPLAYERS + 1][2];

//Misc
new g_Armor = 0;
new fnadesnum = 0;
new bool:g_Flash = false;
new bool:g_Nade = false;
new bool:g_Smoke = false;
new bool:g_NightVision = false;
new bool:g_DefuseKit = false;

// page info for settings in CSDM Setting Menu
new g_SettingsMenu = 0;
new g_EquipSettMenu = 0;
new g_ItemsInMenuNr = 0;
new g_PageSettMenu = 0;

//Quick Fix for menu pages
new g_MenuState[CSDM_MAXPLAYERS + 1] = {0};

new Float:g_maxdelmenutime = 30.0;

#define	PDATA_SAFE				2
#define	OFFSET_LINUX_WEAPONS	4
#define	m_pPlayer					41
#define	m_iId						43

public csdm_Init(const version[])
{
	if (version[0] == 0) {
		set_fail_state("ReCSDM failed to load.");
		return;
	}

	// Menus and callbacks
	g_SecMenuID = menu_create(g_SecMenu, "m_SecHandler", 0);
	g_PrimMenuID = menu_create(g_PrimMenu, "m_PrimHandler", 0);
	g_ArmorMenuID = menu_create(g_ArmorMenu, "m_ArmorHandler", 0);
	g_NadeMenuID = menu_create(g_NadeMenu, "m_NadeHandler", 0);
	g_EquipMenuID = menu_create(g_EquipMenu, "m_EquipHandler", 0);

	menu_setprop(g_PrimMenuID, MPROP_EXIT, MEXIT_NEVER);
	menu_setprop(g_SecMenuID, MPROP_EXIT, MEXIT_NEVER);

	g_cSecondary = menu_makecallback("c_Secondary");
	g_cPrimary = menu_makecallback("c_Primary");
	g_cEquip = menu_makecallback("c_Equip");
}

public csdm_CfgInit()
{
	csdm_reg_cfg("settings", "cfgMainSettings");
	csdm_reg_cfg("misc", "cfgMiscSettings");

	// Config reader
	csdm_reg_cfg("equip", "cfgSetting");

	// In order for weapon menu
	csdm_reg_cfg("secondary", "cfgSecondary");
	csdm_reg_cfg("primary", "cfgPrimary");
	csdm_reg_cfg("botprimary", "cfgBotPrim");
	csdm_reg_cfg("botsecondary", "cfgBotSec");
	csdm_reg_cfg("item_restrictions", "cfgrestricts");

	set_task(2.0, "check_cvar_pointers", 790);
}

public check_cvar_pointers()
{
	pv_csdm_additems = get_cvar_pointer("csdm_add_items");
}

public plugin_init()
{
	register_plugin(PLUGINNAME, VERSION, AUTHORS);

	buildMenu(); // Build Armor/Nade/Equip Menu's

	register_clcmd("say guns", "enableMenu");
	register_clcmd("say /guns", "enableMenu");
	register_clcmd("say menu", "enableMenu");
	register_clcmd("say enablemenu", "enableMenu");
	register_clcmd("say enable_menu", "enableMenu");
	register_clcmd("csdm_equip_sett_menu", "csdm_equip_sett_menu", ADMIN_MAP, "CSDM Equip Settings Menu");
	register_event("TextMsg","eRestart","a","2&#Game_C","2&#Game_w");

	RegisterHam(Ham_Weapon_SecondaryAttack, "weapon_usp", "Weapon_SecondaryAttack_usp_Post", true);
	RegisterHam(Ham_Weapon_SecondaryAttack, "weapon_m4a1", "Weapon_SecondaryAttack_m4a1_Post", true);

	new main_plugin = module_exists("csdm_main") ? true : false;

	if(main_plugin)
	{
		g_SettingsMenu = csdm_settings_menu();
		g_ItemsInMenuNr = menu_items(g_SettingsMenu);
		g_PageSettMenu = g_ItemsInMenuNr / 7;

		g_EquipSettMenu = menu_create("Меню настроек экипировки", "use_csdm_equip_menu");

		menu_additem(g_SettingsMenu, "Настройки экипировки", "csdm_equip_sett_menu", ADMIN_MAP);

		if(g_EquipSettMenu)
		{
			new callback = menu_makecallback("hook_equip_sett_display");

			menu_additem(g_EquipSettMenu, "Меню первичной экипировки [вкл/выкл]", "1", ADMIN_MAP, callback);
			menu_additem(g_EquipSettMenu, "Меню вторичной экипировки [вкл/выкл]", "2", ADMIN_MAP, callback);
			menu_additem(g_EquipSettMenu, "Меню брони [вкл/выкл]", "3", ADMIN_MAP, callback);
			menu_additem(g_EquipSettMenu, "Меню гранат [вкл/выкл]", "4", ADMIN_MAP, callback);
			menu_additem(g_EquipSettMenu, "Автоматическая выдача брони [вкл/выкл]", "5", ADMIN_MAP, callback);
			menu_additem(g_EquipSettMenu, "Автоматическая выдача шлема [вкл/выкл]", "6", ADMIN_MAP, callback);
			menu_additem(g_EquipSettMenu, "Автоматическая выдача гранат [вкл/выкл]", "7", ADMIN_MAP, callback);
			menu_additem(g_EquipSettMenu, "Автоматическая выдача щипцов [вкл/выкл]", "8", ADMIN_MAP, callback);
			menu_additem(g_EquipSettMenu, "Автоматическая выдача ночного виденья [вкл/выкл]", "9", ADMIN_MAP, callback);
			menu_additem(g_EquipSettMenu, "Световые гранаты [вкл/выкл]", "10", ADMIN_MAP, callback);
			menu_additem(g_EquipSettMenu, "Дымовые гранаты [вкл/выкл]", "11", ADMIN_MAP, callback);
			menu_additem(g_EquipSettMenu, "Р*азрывные гранаты [РІРєР»/выкл]", "12", ADMIN_MAP, callback);
			menu_additem(g_EquipSettMenu, "Р*азрешить всегда использовать меню оружия [Р’РєР»/Выкл]", "13", ADMIN_MAP, callback);
			menu_additem(g_EquipSettMenu, "Назад", "14", 0, -1);
		}
	} else {
		log_amx("CSDM - csdm_equip - no main plugin loaded");
	}

	if(g_iNumUsedSec == 0)
		g_mSecStatus = false;

	if(g_iNumUsedPrim == 0)
		g_mPrimStatus = false;

	g_MaxPlayers = get_maxplayers();
}

public eRestart()
{
	arrayset(UsedWpsT, 0, ITEMTYPES_NUM);
	arrayset(UsedWpsCT, 0, ITEMTYPES_NUM);

	return PLUGIN_CONTINUE;
}

public client_connect(id)
{
	g_mShowuser[id] = true;
	g_mNades[id] = false;
	g_mArmor[id] = false;
	g_Silenced[id][SILENCED_M4A1] = false;
	g_Silenced[id][SILENCED_USP] = false;

	return PLUGIN_CONTINUE;
}

public client_disconnected(id)
{
	g_mShowuser[id] = false;
	g_mNades[id] = false;
	g_mArmor[id] = false;

	new weapons[MAX_WEAPONS], num, weapid;

	get_user_weapons(id, weapons, num);

	for (new i = 0; i < num; i++)
	{
		weapid = weapons[i];

		if(IsRestricted[weapid] && UsedWpsT[weapid] > 0 && g_Teamuser[id] == _TEAM_T) {
			UsedWpsT[weapid]--;
		}

		if(IsRestricted[weapid] && UsedWpsCT[weapid] > 0 && g_Teamuser[id] == _TEAM_CT) {
			UsedWpsCT[weapid]--;
		}
	}

	return PLUGIN_CONTINUE;
}

public csdm_RemoveWeapon(owner, entity_id, boxed_id)
{
	if(!pev_valid(entity_id))
		return PLUGIN_HANDLED;

	new szClassname[32], weapon, team;

	pev(entity_id, pev_classname, szClassname, charsmax(szClassname));

	weapon = get_weaponid(szClassname);

	if(owner && weapon)
	{
		team = _:cs_get_user_team(owner);

		if(IsRestricted[weapon] && UsedWpsT[weapon] > 0 && team == _TEAM_T) {
			UsedWpsT[weapon]--;
			// log_amx("[DEBUG] CSDM - restricted weapon %s removed. Currently there is %d such weapons on the map.", szClassname, UsedWpsT[weapon])
		}

		if(IsRestricted[weapon] && UsedWpsCT[weapon] > 0 && team == _TEAM_CT) {
			UsedWpsCT[weapon]--;
			//log_amx("[DEBUG] CSDM - restricted weapon %s removed. Currently there is %d such weapons on the map.", szClassname, UsedWpsCT[weapon])
		}
	}

	return PLUGIN_CONTINUE;
}

public csdm_PostDeath(killer, victim, headshot, const weapon[])
{
	/* Clean up any defusal kits we might have made! */
	if(!g_DefuseKit) return;

	g_Teamuser[victim] = _:cs_get_user_team(victim);

	/* This might have a race condition for team switches... */
	if(g_Teamuser[victim] == _TEAM_CT)
		cs_set_user_defuse(victim, 0);
}

public Weapon_SecondaryAttack_usp_Post(Ent)
{
	if(pev_valid(Ent) != PDATA_SAFE)
		return HAM_IGNORED;

	new id = get_pdata_cbase(Ent, m_pPlayer, OFFSET_LINUX_WEAPONS);

	if(id < 1 || id > g_MaxPlayers)
		return HAM_IGNORED;

	g_Silenced[id][SILENCED_USP] = cs_get_weapon_silen(Ent) ? true : false;

	return HAM_IGNORED;
}

public Weapon_SecondaryAttack_m4a1_Post(Ent)
{
	if(pev_valid(Ent) != PDATA_SAFE)
		return HAM_IGNORED;

	new id = get_pdata_cbase(Ent, m_pPlayer, OFFSET_LINUX_WEAPONS);

	if(id < 1 || id > g_MaxPlayers)
		return HAM_IGNORED;

	g_Silenced[id][SILENCED_M4A1] = cs_get_weapon_silen(Ent) ? true : false;

	return HAM_IGNORED;
}

public cfgSecondary(readAction, line[], section[])
{
	if(readAction == CFG_READ)
	{
		if (g_iNumSec >= MAX_SECONDARY)
			return PLUGIN_HANDLED;

		new wep[16], display[48], dis[4], cmd[6];

		parse(line, wep, charsmax(wep), display, charsmax(display), dis, charsmax(dis));

		new disabled = str_to_num(dis);

		//Copy weapon into array
		formatex(g_Secondary[g_iNumSec], charsmax(g_Secondary[]), "weapon_%s", wep);

		g_DisabledSec[g_iNumSec] = disabled ? false : true;

		formatex(cmd, 5, "%d ", g_iNumSec);

		g_iNumSec++;

		if(disabled > 0)
			g_iNumUsedSec++;

		//TODO: Add menu_destroy_items to remake menu on cfg reload
		menu_additem(g_SecMenuID, display, cmd, 0, g_cSecondary);

	} else if (readAction == CFG_RELOAD) {
		g_SecMenuID = menu_create(g_SecMenu, "m_SecHandler", 0);
		g_iNumSec = 0;
		g_iNumUsedSec = 0;

	} else if(readAction == CFG_DONE) {
		//Nothing for now
		return PLUGIN_HANDLED;
	}

	return PLUGIN_HANDLED;
}

public cfgPrimary(readAction, line[], section[])
{
	if(readAction == CFG_READ)
	{
		if(g_iNumPrim >= MAX_PRIMARY)
			return PLUGIN_HANDLED;

		new wep[16], display[48], dis[4], cmd[6];

		parse(line, wep, charsmax(wep), display, charsmax(display), dis, charsmax(dis));

		new disabled = str_to_num(dis);

		//Copy weapon into array
		formatex(g_Primary[g_iNumPrim], charsmax(g_Secondary[]), "weapon_%s", wep);

		g_DisabledPrim[g_iNumPrim] = disabled ? false : true;

		formatex(cmd, charsmax(cmd), "%d", g_iNumPrim);

		g_iNumPrim++;

		if(disabled > 0)
			g_iNumUsedPrim++;

		//TODO: Add menu_destroy_items to remake menu on cfg reload
		menu_additem(g_PrimMenuID, display, cmd, 0, g_cPrimary);

	} else if(readAction == CFG_RELOAD) {
		g_PrimMenuID = menu_create(g_PrimMenu, "m_PrimHandler", 0);
		g_iNumPrim = 0;
		g_iNumUsedPrim = 0;

	} else if(readAction == CFG_DONE) {
		//Nothing for now
		return PLUGIN_HANDLED;
	}

	return PLUGIN_HANDLED;
}

public cfgBotPrim(readAction, line[], section[])
{
	if(readAction == CFG_READ)
	{
		new wep[16], display[32];

		parse(line, wep, charsmax(wep), display, charsmax(display));

		//Copy weapon into array
		formatex(g_BotPrim[g_iNumBotPrim], charsmax(g_BotPrim[]), "weapon_%s", wep);

		g_iNumBotPrim++;

	} else if(readAction == CFG_RELOAD) {
		g_iNumBotPrim = 0;

	} else if(readAction == CFG_DONE) {
		//Nothing for now
		return PLUGIN_HANDLED;
	}

	return PLUGIN_HANDLED;
}

public cfgBotSec(readAction, line[], section[])
{
	if(readAction == CFG_READ)
	{
		new wep[16], display[32];

		parse(line, wep, charsmax(wep), display, charsmax(display));

		//Copy weapon into array
		formatex(g_BotSec[g_iNumBotSec], charsmax(g_BotPrim[]), "weapon_%s", wep);

		g_iNumBotSec++;

	} else if(readAction == CFG_RELOAD) {
		g_iNumBotSec = 0;

	} else if(readAction == CFG_DONE) {
		//Nothing for now
		return PLUGIN_HANDLED;
	}

	return PLUGIN_HANDLED;
}

public cfgSetting(readAction, line[], section[])
{
	if(readAction == CFG_READ)
	{
		new setting[24], sign[3], value[6];

		parse(line, setting, charsmax(setting), sign, charsmax(sign), value, charsmax(value));

		// Menus settings
		if(contain(setting,"menus") != -1)
		{
			if(containi(value, "p") != -1)
				g_mPrimStatus = true;

			if(containi(value, "s") != -1)
				g_mSecStatus = true;

			if(containi(value, "a") != -1)
				g_mArmorStatus = true;

			if(containi(value, "g") != -1)
				g_mNadeStatus = true;

			return PLUGIN_HANDLED;

		} else if(contain(setting, "autoitems") != -1) {

			if(containi(value, "a")  != -1) {
				//Disable Armor Menu
				g_mArmorStatus = false;
				g_mAutoArmor = true;
				g_Armor = 1;
			}

			if(containi(value, "h") != -1) {
				//Disable Armor Menu
				g_mArmorStatus = false;
				g_mAutoArmor = true;
				g_Armor = 2;
			}

			if(containi(value, "g") != -1) {
				//Disable Grenade Menu
				g_mNadeStatus = false;
				g_mAutoNades = true;
			}

			if(containi(value, "d") != -1)
				g_DefuseKit = true;

			if(containi(value, "n") != -1)
				g_NightVision = true;

			return PLUGIN_HANDLED;

		} else if(contain(setting, "grenades") != -1) {

			if(containi(value, "f") != -1)
				g_Flash = true;

			if(containi(value, "h") != -1)
				g_Nade = true;

			if (containi(value, "s") != -1)
				g_Smoke = true;

		} else if(contain(setting, "fnadesnum") != -1) {
			fnadesnum = str_to_num(value);

		} else if(contain(setting, "always_allow_gunmenu") != -1) {
			g_AlwaysAllowGunMenu = str_to_num(value)? true : false;
		}

		return PLUGIN_HANDLED;

	} else if(readAction == CFG_RELOAD) {
		g_mArmorStatus = false;
		g_mNadeStatus = false;
		g_Flash = false;
		g_Nade = false;
		g_Smoke = false;
		g_Armor = 0;
		g_mSecStatus = false;
		g_mPrimStatus = false;
		g_mAutoNades = false;
		g_DefuseKit = false;
		g_NightVision = false;
		fnadesnum = 1;

	} else if(readAction == CFG_DONE) {
		//Nothing for now
		return PLUGIN_HANDLED;
	}

	return PLUGIN_HANDLED;
}

public cfgrestricts(readAction, line[], section[])
{
	if(readAction == CFG_READ)
	{
		new itemname[24], value[32], limit;
		parse(line, itemname, charsmax(itemname), value, charsmax(value));

		limit = 0;

		if(value[0] != '0')
			limit = str_to_num(value);

		new weapname[24], weaptype;

		formatex(weapname, charsmax(weapname), "weapon_%s", itemname);

		weaptype = getWeapId(weapname);

		// weaptype = get_weaponid(weapname) // why this crap doesn't work here but works correctly during the game ?!?
		// log_amx("[DEBUG] CSDM - reading restrictions, weapon %s (weaptype = %d).", itemname, weaptype)

		if(weaptype != 0) {
			IsRestricted[weaptype] = true;
			RestrictWps[weaptype] = limit;
		}

		// log_amx("[DEBUG] CSDM - reading restrictions, restricted %s (weaptype = %d) = %d", itemname, weaptype, limit)
	}
	else if(readAction == CFG_RELOAD)
	{
		// Reset all restrictions
		arrayset(IsRestricted, false, ITEMTYPES_NUM);
		arrayset(RestrictWps, 32, ITEMTYPES_NUM);
		return PLUGIN_HANDLED;
	}
	else if(readAction == CFG_DONE)
	{
		//Nothing for now
		return PLUGIN_HANDLED;
	}

	return PLUGIN_HANDLED;
}

public cfgMainSettings(readAction, line[], section[])
{
	if(readAction == CFG_READ)
	{
		new setting[24], sign[3], value[32];

		parse(line, setting, charsmax(setting), sign, charsmax(sign), value, charsmax(value));

		if(equali(setting, "weapons_stay")) {
			g_WeaponStayTime = str_to_num(value);
		}
	}
}

public cfgMiscSettings(readAction, line[], section[])
{
	if(readAction == CFG_READ)
	{
		new setting[24], sign[3], value[32];

		parse(line, setting, charsmax(setting), sign, charsmax(sign), value, charsmax(value));

		if(equali(setting, "ammo_refill")) {
			g_AmmoRefill = str_to_num(value) ? true : false;
		}

	} else if(readAction == CFG_RELOAD) {
		g_AmmoRefill = true;
	}
}

//Equipment Menu callback
public c_Equip(id, menu, item)
{
	if(item < 0)
		return PLUGIN_CONTINUE;

	new cmd[6], iName[64], access, callback;

	menu_item_getinfo(menu, item, access, cmd, charsmax(cmd), iName, charsmax(iName), callback);

	new weapon_s, weapon_p;
	weapon_s = get_weaponid(g_SecWeapons[id]);
	weapon_p = get_weaponid(g_PrimWeapons[id]);

	if(weapon_s == 0 && g_mSecStatus
		|| weapon_p == 0 && g_mPrimStatus
		|| IsRestricted[weapon_s]
		|| IsRestricted[weapon_p]) {
			return ITEM_DISABLED;
	}

	return ITEM_ENABLED;
}

//Secondary Weapon Callback
public c_Secondary(id, menu, item)
{
	if(item < 0)
		return PLUGIN_CONTINUE;

	new cmd[6], iName[64], access, callback;

	menu_item_getinfo(menu, item, access, cmd, charsmax(cmd), iName, charsmax(iName), callback);

	new dis = str_to_num(cmd);
	new team = _:cs_get_user_team(id);
	new weaptype = get_weaponid(g_Secondary[dis]);

	//Check to see if item is disabled
	if(g_DisabledSec[dis]) {
		return ITEM_DISABLED;

	} else if(!IsRestricted[weaptype]) {
		return ITEM_ENABLED;

	} else if(UsedWpsT[weaptype] < RestrictWps[weaptype] && team == _TEAM_T 
		|| UsedWpsCT[weaptype] < RestrictWps[weaptype] && team == _TEAM_CT) {
		return ITEM_ENABLED;
	}

	return ITEM_DISABLED;
}

//Primary Weapon Callback
public c_Primary(id, menu, item)
{
	if(item < 0)
		return PLUGIN_CONTINUE;

	// Get item info
	new cmd[6], iName[64], access, callback;

	menu_item_getinfo(menu, item, access, cmd, charsmax(cmd), iName, charsmax(iName), callback);

	new dis = str_to_num(cmd);
	new team = _:cs_get_user_team(id);
	new weaptype = get_weaponid(g_Primary[dis]);

	//Check to see if item is disabled
	if(g_DisabledPrim[dis]) {
		return ITEM_DISABLED;

	} else if(!IsRestricted[weaptype]) {
		return ITEM_ENABLED;

	} else if(UsedWpsT[weaptype] < RestrictWps[weaptype] && team == _TEAM_T 
		|| UsedWpsCT[weaptype] < RestrictWps[weaptype] && team == _TEAM_CT) {
			return ITEM_ENABLED;
	}

	return ITEM_DISABLED;
}

//Equipment Menu handler
public m_EquipHandler(id, menu, item)
{
	if(item < 0)
		return PLUGIN_CONTINUE;

	// Get item info
	new cmd[2], iName[64], access, callback;

	menu_item_getinfo(menu, item, access, cmd, charsmax(cmd), iName, charsmax(iName), callback);

	switch(str_to_num(cmd))
	{
		case 1:
		{
			if(g_mSecStatus)
				menu_display(id, g_SecMenuID, 0);

			else if(g_mPrimStatus)
				menu_display(id, g_PrimMenuID, 0);

			else if(g_mArmorStatus)
				menu_display(id, g_ArmorMenuID, 0);

			else if(g_mNadeStatus)
			{
				if(g_mAutoArmor) 
					equipUser(id, EQUIP_ARMOR);

				menu_display(id, g_NadeMenuID, 0);

			} else {
				if(g_mAutoArmor) 
					equipUser(id, EQUIP_ARMOR);

				if(g_mAutoNades) 
					equipUser(id, EQUIP_GREN);

				equipUser(id, EQUIP_ITEMS);
			}
		}
		case 2:
		{
			// Equip person with last settings
			equipUser(id, EQUIP_ALL);
		}
		case 3:
		{
			g_mShowuser[id] = false;
			client_print(id, print_chat, "");
			equipUser(id, EQUIP_ALL);
		}
	}

	return PLUGIN_HANDLED;
}

//Secondary Weapon Menu handler
public m_SecHandler(id, menu, item)
{
	if(!is_user_connected(id))
		return PLUGIN_HANDLED;

	// Get item info
	new cmd[6], iName[64], access, callback;

	menu_item_getinfo(menu, item, access, cmd, charsmax(cmd), iName, charsmax(iName), callback);

	new wep = str_to_num(cmd);

	new team = _:cs_get_user_team(id);
	new weaptype = get_weaponid(g_Secondary[wep]);

	if((UsedWpsT[weaptype] < RestrictWps[weaptype] && team == _TEAM_T 
		|| UsedWpsCT[weaptype] < RestrictWps[weaptype] && team == _TEAM_CT)
		&& !g_DisabledSec[wep])
	{
		copy(g_SecWeapons[id],17,g_Secondary[wep]);
		equipUser(id, EQUIP_SEC);

	} else if(g_mSecStatus) {
		menu_display(id, g_SecMenuID, 0);
		return PLUGIN_HANDLED;
	}

	// Show next menu here

	if(g_mPrimStatus)
		menu_display(id, g_PrimMenuID, 0);

	else if(g_mArmorStatus)
		menu_display(id, g_ArmorMenuID, 0);

	else if(g_mNadeStatus)
	{
		if (g_mAutoArmor)
			equipUser(id, EQUIP_ARMOR);

		menu_display(id, g_NadeMenuID, 0);

	} else {
		if (g_mAutoArmor)
			equipUser(id, EQUIP_ARMOR);

		if (g_mAutoNades)
			equipUser(id, EQUIP_GREN);

		equipUser(id, EQUIP_ITEMS);
	}

	return PLUGIN_HANDLED;
}

//Primary Weapon Menu handler
public m_PrimHandler(id, menu, item)
{
	if (item < 0)
		return PLUGIN_HANDLED;

	// Get item info
	new cmd[6], iName[64], access, callback;

	if(menu_item_getinfo(menu, item, access, cmd, charsmax(cmd), iName, charsmax(iName), callback))
	{
		new wep = str_to_num(cmd);
		new team = _:cs_get_user_team(id);
		new weaptype = get_weaponid(g_Primary[wep]);

		if((UsedWpsT[weaptype] < RestrictWps[weaptype] && team == _TEAM_T 
			|| UsedWpsCT[weaptype] < RestrictWps[weaptype] && team == _TEAM_CT)
			&& !g_DisabledPrim[wep])
		{
			copy(g_PrimWeapons[id], charsmax(g_PrimWeapons[]), g_Primary[wep]);
			equipUser(id, EQUIP_PRI);

		} else if (g_mPrimStatus) {
			menu_display(id, g_PrimMenuID, 0);
			return PLUGIN_HANDLED;
		}
	}

	// Show next menu here
	if(g_mArmorStatus) {
		menu_display(id, g_ArmorMenuID, 0);
	}
	else if(g_mNadeStatus)
	{
		if(g_mAutoArmor)
			equipUser(id, EQUIP_ARMOR);

		menu_display(id, g_NadeMenuID, 0);

	} else {
		if (g_mAutoArmor)
			equipUser(id, EQUIP_ARMOR);

		if (g_mAutoNades)
			equipUser(id, EQUIP_GREN);

		equipUser(id, EQUIP_ITEMS);
	}

	return PLUGIN_HANDLED;
}

//Armor Menu handler
public m_ArmorHandler(id, menu, item)
{
	if(item < 0)
		return PLUGIN_CONTINUE;

	// Get item info
	new cmd[6], iName[64], access, callback;

	menu_item_getinfo(menu, item, access, cmd, charsmax(cmd), iName, charsmax(iName), callback);

	new choice = str_to_num(cmd);

	if(choice == 1) {
		g_mArmor[id] = true;
	} else if (choice == 2) {
		g_mArmor[id] = false;
	}

	equipUser(id, EQUIP_ARMOR);

	// Show next menu here

	if(g_mNadeStatus) {
		menu_display(id, g_NadeMenuID, 0);
	} else {
		if (g_mAutoNades)
			equipUser(id, EQUIP_GREN);

		equipUser(id, EQUIP_ITEMS);
	}

	return PLUGIN_HANDLED;
}

//Nade Menu handler
public m_NadeHandler(id, menu, item)
{
	if (item < 0)
		return PLUGIN_CONTINUE;

	new cmd[6], iName[64], access, callback;

	menu_item_getinfo(menu, item, access, cmd, charsmax(cmd), iName, charsmax(iName), callback);

	new choice = str_to_num(cmd);

	if (choice == 1) {
		g_mNades[id] = true;
	} else if (choice == 2) {
		g_mNades[id] = false;
	}

	equipUser(id, EQUIP_GREN);
	equipUser(id, EQUIP_ITEMS);

	return PLUGIN_HANDLED;
}

buildMenu()
{
	//Equip Menu
	menu_additem(g_EquipMenuID, "Новая экипировка", "1", 0, -1);
	menu_additem(g_EquipMenuID, "Предыдущий выбор", "2", 0, g_cEquip);
	menu_additem(g_EquipMenuID, "Предыдущий выбор и больше не спрашивать", "3", 0, g_cEquip);
	menu_setprop(g_EquipMenuID, MPROP_EXIT, MEXIT_NEVER);

	//Armor Menu
	menu_additem(g_ArmorMenuID, "Да, выдать броню", "1", 0, -1);
	menu_additem(g_ArmorMenuID, "Без брони", "2", 0, -1);
	menu_setprop(g_ArmorMenuID, MPROP_EXIT, MEXIT_NEVER);

	//Nade Menu
	menu_additem(g_NadeMenuID, "Все гранаты", "1", 0, -1);
	menu_additem(g_NadeMenuID, "Без гранат", "2", 0, -1);
	menu_setprop(g_NadeMenuID, MPROP_EXIT, MEXIT_NEVER);

	return PLUGIN_HANDLED;
}

equipUser(id, to)
{
	if(!is_user_alive(id)) return;

	new weaptype;
	new team = _:cs_get_user_team(id);

	if((to & EQUIP_SEC) && get_weaponid(g_SecWeapons[id])) {

		//Give Secondary
		GiveUserFullWeapon(id, g_SecWeapons[id]);
	}

	if((to & EQUIP_PRI) && get_weaponid(g_PrimWeapons[id])) {

		//Give Primary
		GiveUserFullWeapon(id, g_PrimWeapons[id]);
	}

	if(to & EQUIP_ARMOR)
	{
		//Give Armor
		if(g_mAutoArmor || g_mArmor[id]) {
			new armor = g_mArmor[id] ? 2 : g_Armor;
			cs_set_user_armor(id, DEFAULT_ARMOR, CsArmorType:armor);
		}
	}

	if(to & EQUIP_GREN)
	{
		//Give Nades
		if(g_mNades[id] || g_mAutoNades)
		{
			if(g_Nade)
			{

				weaptype = get_weaponid("weapon_hegrenade");

				if(IsRestricted[weaptype])
				{

					if(UsedWpsT[weaptype] < RestrictWps[weaptype] && team == _TEAM_T) {
						UsedWpsT[weaptype]++;
						GiveUserFullWeapon(id,"weapon_hegrenade");
					}

					if(UsedWpsCT[weaptype] < RestrictWps[weaptype] && team == _TEAM_CT) {
						UsedWpsCT[weaptype]++;
						GiveUserFullWeapon(id,"weapon_hegrenade");
					}

				} else {
					GiveUserFullWeapon(id,"weapon_hegrenade");
				}
			}

			if(g_Smoke)
			{
				weaptype = get_weaponid("weapon_smokegrenade");

				if(IsRestricted[weaptype])
				{

					if(UsedWpsT[weaptype] < RestrictWps[weaptype] && team == _TEAM_T) {
						UsedWpsT[weaptype]++;
						GiveUserFullWeapon(id,"weapon_smokegrenade");
					}

					if(UsedWpsCT[weaptype] < RestrictWps[weaptype] && team == _TEAM_CT) {
						UsedWpsCT[weaptype]++;
						GiveUserFullWeapon(id,"weapon_smokegrenade");
					}

				} else {
					GiveUserFullWeapon(id, "weapon_smokegrenade");
				}
			}

			if(g_Flash && fnadesnum)
			{

				weaptype = get_weaponid("weapon_flashbang");

				if(IsRestricted[weaptype])
				{

					if(UsedWpsT[weaptype] < RestrictWps[weaptype] && team == _TEAM_T) {
						UsedWpsT[weaptype]++;
						GiveUserFullWeapon(id, "weapon_flashbang");
					}

					if(UsedWpsCT[weaptype] < RestrictWps[weaptype] && team == _TEAM_CT) {
						UsedWpsCT[weaptype]++;
						GiveUserFullWeapon(id, "weapon_flashbang");
					}

				} else {
					GiveUserFullWeapon(id, "weapon_flashbang");
				}

				if(fnadesnum == 2)
				{
					if(IsRestricted[weaptype])
					{

						if((UsedWpsT[weaptype] < RestrictWps[weaptype]) && (team == _TEAM_T)) {
							UsedWpsT[weaptype]++;
							GiveUserFullWeapon(id, "weapon_flashbang");
						}

						if((UsedWpsCT[weaptype] < RestrictWps[weaptype]) && (team == _TEAM_CT)) {
							UsedWpsCT[weaptype]++;
							GiveUserFullWeapon(id, "weapon_flashbang");
						}

					} else {
						GiveUserFullWeapon(id, "weapon_flashbang");
					}

				}
			}
		}
	}

	if (to & EQUIP_ITEMS)
	{
		if (g_DefuseKit && (_:cs_get_user_team(id) == _TEAM_CT)) {
			cs_set_user_defuse(id, 1);
		}

		if (g_NightVision) {
			cs_set_user_nvg(id, 1);
		}
	}
}

GiveUserFullWeapon(id, const wp[])
{
	if(!is_user_connected(id)) return;

	/** First check to make sure the user does not have a weapon in this slot */
	new wpnid = get_weaponid(wp);
	new weapons[MAX_WEAPONS], num, name[24], weap, slot;
	new team = _:cs_get_user_team(id);

	if(wpnid == 0)
	{
		if(equal(wp, "weapon_shield")) {
			slot = SLOT_PRIMARY;
			wpnid = -1;
		}

	} else {
		slot = g_WeaponSlots[wpnid];
	}

	if((slot == SLOT_SECONDARY || slot == SLOT_PRIMARY) && wpnid > 0)
	{
		get_user_weapons(id, weapons, num);

		for (new i = 0; i < num; i++)
		{
			weap = weapons[i];

			if(weap == wpnid)
				continue;

			if(g_WeaponSlots[weap] == slot)
			{
				if(slot == SLOT_SECONDARY && cs_get_user_shield(id)) {
					//temporary fix!
					drop_with_shield(id, weap);

				} else {
					get_weaponname(weap, name, charsmax(name));
					csdm_force_drop(id, name);
				}
			}
		}

	} else if(slot == SLOT_PRIMARY && wpnid == -1 && cs_get_user_shield(id)) {
		return;
	}

	if(slot == SLOT_PRIMARY && cs_get_user_shield(id) && wpnid > 0) {
		csdm_fwd_drop(id, -1, "weapon_shield");
	}

	new item_id = csdm_give_item(id, wp);

	if(item_id > 0)
	{
		if (wpnid == CSW_M4A1) {
			cs_set_weapon_silen(item_id, g_Silenced[id][SILENCED_M4A1], 1);
		} else if (wpnid == CSW_USP) {
			cs_set_weapon_silen(item_id, g_Silenced[id][SILENCED_USP], 1);
		}
	}

	if(wpnid > 0)
	{
		new bpammo = g_MaxBPAmmo[wpnid];

		if(bpammo)
			cs_set_user_bpammo(id, wpnid, bpammo);

		if (IsRestricted[wpnid])
		{
			if ((UsedWpsT[wpnid] < RestrictWps[wpnid]) && (team == _TEAM_T)) {
				UsedWpsT[wpnid]++;
			}

			if ((UsedWpsCT[wpnid] < RestrictWps[wpnid]) && (team == _TEAM_CT)) {
				UsedWpsCT[wpnid]++;
			}
		}
	}
}

// MAIN FUNCTION OF THE PLUGIN
public csdm_PostSpawn(player)
{
	if(pv_csdm_additems)
	{
		if(get_pcvar_num(pv_csdm_additems)) {
			return PLUGIN_CONTINUE;
		}
	}

	g_Teamuser[player] = _:cs_get_user_team(player);

	if(is_user_bot(player))
	{
		new i, weapon_p, weapon_s;
		new randPrim = random_num(0, g_iNumBotPrim-1);
		new randSec = random_num(0, g_iNumBotSec-1);

		weapon_p = get_weaponid(g_BotPrim[randPrim]);

		i = 0;

		while(i < 10 && IsRestricted[weapon_p] 
			&& (UsedWpsT[weapon_p] >= RestrictWps[weapon_p] && g_Teamuser[player] == _TEAM_T 
			|| UsedWpsCT[weapon_p] >= RestrictWps[weapon_p] && g_Teamuser[player] == _TEAM_CT))
		{
			randPrim++;

			if(randPrim >= g_iNumBotPrim)
				randPrim = 0;

			weapon_p = get_weaponid(g_BotPrim[randPrim]);

			i++;
		}

		weapon_s = get_weaponid(g_BotSec[randSec]);

		i = 0;

		while(i < 10 && IsRestricted[weapon_s] 
			&& (UsedWpsT[weapon_s] >= RestrictWps[weapon_s] && g_Teamuser[player] == _TEAM_T 
			|| UsedWpsCT[weapon_s] >= RestrictWps[weapon_s] && g_Teamuser[player] == _TEAM_CT))
		{
			randSec++;

			if(randSec >= g_iNumBotSec)
				randSec = 0;

			weapon_s = get_weaponid(g_BotSec[randSec]);

			i++;
		}

		new randArm = random_num(0, 2);
		new randGre = random_num(0, 2);

		if(g_mPrimStatus)
			GiveUserFullWeapon(player, g_BotPrim[randPrim]);

		if(g_mSecStatus)
			GiveUserFullWeapon(player, g_BotSec[randSec]);

		g_mArmor[player] = (g_mArmorStatus && randArm);
		g_mNades[player] = (g_mNadeStatus && randGre);

		if(g_mAutoArmor || g_mArmor[player])
			equipUser(player, EQUIP_ARMOR);

		if(g_mAutoNades || g_mNades[player])
			equipUser(player, EQUIP_GREN);

		if (g_DefuseKit)
			equipUser(player, EQUIP_ITEMS);

	} else {

		if(g_mShowuser[player])
		{
			new oldmenuid, newmenuid;
			new bool:bEquipMenuDisp = false;

			player_menu_info(player, oldmenuid, newmenuid); // main thing to prevent overwrite some menu by gun menu

			if(newmenuid != -1 && (newmenuid == g_SecMenuID || newmenuid == g_PrimMenuID 
				|| newmenuid == g_ArmorMenuID || newmenuid == g_EquipMenuID))
			{
				bEquipMenuDisp = true;
			}

			if(bEquipMenuDisp || oldmenuid <= 0 || g_maxdelmenutime == 0)
			{
				g_MenuState[player] = 1;
				menu_display(player, g_EquipMenuID, 0);

			} else {

				new param[1];
				param[0] = player;

				if(g_maxdelmenutime > 0)
					set_task(1.0, "checkmenu", 850 + player, param, 1, "b");

				set_task(g_maxdelmenutime, "menu_delayed", 700 + player, param, 1);
			}

		} else {
			g_MenuState[player] = 0;
			set_task(0.2, "delay_equip", player);
			// equipUser(player, EQUIP_ALL)
		}
	}

	return PLUGIN_CONTINUE;
}

public delay_equip(id)
{
	if(is_user_connected(id))
		equipUser(id, EQUIP_ALL);
}

public enableMenu(id)
{
	if(!csdm_active())
		return PLUGIN_CONTINUE;

	if(!g_mShowuser[id])
	{
		g_mShowuser[id] = true;
		client_print(id, print_chat, "Меню экипировки было вновь включено.");

		if(!g_MenuState[id]) {
			g_MenuState[id] = 1;
			menu_display(id, g_EquipMenuID, 0);
		}

	} else if(!g_AlwaysAllowGunMenu || !g_AmmoRefill || (g_WeaponStayTime > 5)) {

		if(!g_AlwaysAllowGunMenu) 
			client_print(id, print_chat, "Меню экипировки уже включено. Вы уже должны иметь оружие.");

		else if(!g_AmmoRefill) 
			client_print(id, print_chat, "Вы не можете использовать меню экипировки т.к. у вас уже есть оружие или возможность выбрать другое оружие отключена.");

		else if(g_WeaponStayTime > 5)
			client_print(id, print_chat, "Вы не можете использовать меню экипировки т.к. у вас уже есть оружие слишком длительное время");
	
	} else {
		g_MenuState[id] = 1;
		menu_display(id, g_EquipMenuID, 0);
	}

	return PLUGIN_HANDLED;
}

public checkmenu(param[])
{
	new id = param[0];

	if(!id)
	{
		if(task_exists(850 + id)) {
			remove_task(850 + id);
		}

		return PLUGIN_CONTINUE;
	}

	if(!is_user_connected(id))
	{
		if (task_exists(850 + id)) {
			remove_task(850 + id);
		}

		return PLUGIN_CONTINUE;
	}

	new oldmenuid, newmenuid;
	new bool:bEquipMenuDisp = false;

	player_menu_info(id, oldmenuid, newmenuid);

	if(newmenuid != -1 && (newmenuid == g_SecMenuID || newmenuid == g_PrimMenuID 
		|| newmenuid == g_ArmorMenuID || newmenuid == g_EquipMenuID))
	{
		bEquipMenuDisp = true;
	}

	if((oldmenuid <= 0) || (bEquipMenuDisp))
	{
		g_MenuState[id] = 1;
		menu_display(id, g_EquipMenuID, 0);

		if (task_exists(850+id))
			remove_task(850+id);

		if (task_exists(700+id))
			remove_task(700+id);
	}	

	return PLUGIN_CONTINUE;
}

public menu_delayed(param[])
{
	new id = param[0];

	if (!id)
	{
		if (task_exists(700 + id)) {
			remove_task(700 + id);
		}

		return PLUGIN_HANDLED;
	}

	if(!is_user_connected(id))
	{

		if (task_exists(850 + id)) {
			remove_task(850 + id);
		}

		return PLUGIN_HANDLED;
	}

	g_MenuState[id] = 1;
	menu_display(id, g_EquipMenuID, 0);

	if (task_exists(700 + id))
		remove_task(700 + id);

	if (task_exists(850 + id))
		remove_task(850 + id);

	return PLUGIN_CONTINUE;
}

stock getWeapId(wp[]) // this one is used, because get_weaponid doesn't work when csdm_CfgInit is called (something wrong with core intitialisation?
{
	if(equal(wp, "weapon_p228")) return CSW_P228;
	else if(equal(wp, "weapon_scout")) return CSW_SCOUT;
	else if(equal(wp, "weapon_hegrenade")) return CSW_HEGRENADE;
	else if(equal(wp, "weapon_xm1014")) return CSW_XM1014;
	else if(equal(wp, "weapon_c4")) return CSW_C4;
	else if(equal(wp, "weapon_mac10")) return CSW_MAC10;
	else if(equal(wp, "weapon_aug")) return CSW_AUG;
	else if(equal(wp, "weapon_smokegrenade")) return CSW_SMOKEGRENADE;
	else if(equal(wp, "weapon_elite")) return CSW_ELITE;
	else if(equal(wp, "weapon_fiveseven")) return CSW_FIVESEVEN;
	else if(equal(wp, "weapon_ump45")) return CSW_UMP45;
	else if(equal(wp, "weapon_sg550")) return CSW_SG550;
	else if(equal(wp, "weapon_galil")) return CSW_GALIL;
	else if(equal(wp, "weapon_famas")) return CSW_FAMAS;
	else if(equal(wp, "weapon_usp")) return CSW_USP;
	else if(equal(wp, "weapon_glock18")) return CSW_GLOCK18;
	else if(equal(wp, "weapon_awp")) return CSW_AWP;
	else if(equal(wp, "weapon_mp5navy")) return CSW_MP5NAVY;
	else if(equal(wp, "weapon_m249")) return CSW_M249;
	else if(equal(wp, "weapon_m3")) return CSW_M3;
	else if(equal(wp, "weapon_m4a1")) return CSW_M4A1;
	else if(equal(wp, "weapon_tmp")) return CSW_TMP;
	else if(equal(wp, "weapon_g3sg1")) return CSW_G3SG1;
	else if(equal(wp, "weapon_flashbang")) return CSW_FLASHBANG;
	else if(equal(wp, "weapon_deagle")) return CSW_DEAGLE;
	else if(equal(wp, "weapon_sg552")) return CSW_SG552;
	else if(equal(wp, "weapon_ak47")) return CSW_AK47;
	else if(equal(wp, "weapon_knife")) return CSW_KNIFE;
	else if(equal(wp, "weapon_p90")) return CSW_P90;

	return PLUGIN_CONTINUE;
}

// stuff for settings menu - START
public csdm_equip_sett_menu(id, level, cid)
{
	if(!cmd_access(id, level, cid, 1))
		return PLUGIN_HANDLED;

	menu_display(id, g_EquipSettMenu, 0);

	return PLUGIN_HANDLED;
}

public use_csdm_equip_menu(id, menu, item)
{
	if(item < 0)
		return PLUGIN_CONTINUE;

	new command[6], paccess, call;

	if(!menu_item_getinfo(g_EquipSettMenu, item, paccess, command, charsmax(command), _, _, call)) {
		log_amx("Error: csdm_menu_item() failed (menu %d) (page %d) (item %d)", g_EquipSettMenu, 0, item);
		return PLUGIN_HANDLED;
	}

	if(paccess && !(get_user_flags(id) & paccess)) {
		client_print(id, print_chat, "You do not have access to this menu option.");
		return PLUGIN_HANDLED;
	}

	new iChoice = str_to_num(command);

	switch(iChoice)
	{
		case 1:
		{
			g_mPrimStatus = g_mPrimStatus? false : true;

			client_print(id, print_chat, "Отображение меню первичного оружия %s.", g_mPrimStatus ? "Включено" : "Выключено");
			log_amx("CSDM displaying primary gun menu %s.", g_mPrimStatus ? "enabled" : "disabled");

			menu_display(id, g_EquipSettMenu, 0);
			write_menus_settings(id);

			return PLUGIN_HANDLED;
		}
		case 2:
		{
			g_mSecStatus = g_mSecStatus? false : true;

			client_print(id, print_chat, "Отображение меню вторичного оружия %s.", g_mSecStatus ? "Включено" : "Выключено");
			log_amx("CSDM displaying secondary gun menu %s.", g_mSecStatus ? "enabled" : "disabled");

			menu_display(id, g_EquipSettMenu, 0);
			write_menus_settings(id);

			return PLUGIN_HANDLED;
		}
		case 3:
		{
			g_mArmorStatus = g_mArmorStatus? false : true;

			if(g_mArmorStatus)
				g_mAutoArmor = false;

			client_print(id, print_chat, "Отображение меню брони %s.", g_mArmorStatus ? "Включено" : "Выключено");
			log_amx("CSDM displaying armor menu %s.", g_mArmorStatus ? "enabled" : "disabled");

			menu_display(id, g_EquipSettMenu, 0);
			write_menus_settings(id);

			return PLUGIN_HANDLED;
		}
		case 4:
		{
			g_mNadeStatus = g_mNadeStatus? false : true;

			if(g_mNadeStatus)
				g_mAutoNades = false;

			client_print(id, print_chat, "Отображение меню гранат %s.", g_mNadeStatus ? "Включено" : "Выключено");
			log_amx("CSDM displaying nades menu %s.", g_mNadeStatus ? "enabled" : "disabled");

			menu_display(id, g_EquipSettMenu, 0);
			write_menus_settings(id);

			return PLUGIN_HANDLED;
		}
		case 5:
		{
			if(g_Armor == 1 || g_Armor == 2) {
				g_Armor = 0;
				g_mAutoArmor = false;
			}
			else if(g_Armor == 0) {
				g_Armor = 1;
				g_mAutoArmor = true;
				g_mArmorStatus = false;
			}

			client_print(id, print_chat, "Авто выдача брони %s.", g_mAutoArmor ? "Включена" : "Выключена");
			log_amx("CSDM auto equiping players with armor %s.", g_mAutoArmor ? "enabled" : "disabled");

			menu_display(id, g_EquipSettMenu, 0);
			write_autoequip_settings(id);

			return PLUGIN_HANDLED;
		}
		case 6:
		{
			if(g_Armor == 0 || g_Armor == 1) {
				g_Armor = 2;
				g_mAutoArmor = true;
				g_mArmorStatus = false;
			}
			else if(g_Armor == 2) {
				g_Armor = 1;
				g_mAutoArmor = true;
				g_mArmorStatus = false;
			}

			client_print(id, print_chat, "Авто выдача шлема %s.", (g_Armor == 2) ? "Включена" : "Выключена");
			log_amx("CSDM auto equiping players with helmet %s.", (g_Armor == 2) ? "enabled" : "disabled");

			menu_display(id, g_EquipSettMenu, 0);
			write_autoequip_settings(id);

			return PLUGIN_HANDLED;
		}
		case 7:
		{
			g_mAutoNades = g_mAutoNades? false : true;

			if(g_mAutoNades)
				g_mNadeStatus = false;

			client_print(id, print_chat, "Авто выдача гранат %s.", g_mAutoNades ? "Включена" : "Выключена");
			log_amx("CSDM auto equiping players with grenades %s.", g_mAutoNades ? "enabled" : "disabled");

			menu_display(id, g_EquipSettMenu, 0);
			write_autoequip_settings(id);

			return PLUGIN_HANDLED;
		}
		case 8:
		{
			g_DefuseKit = g_DefuseKit? false : true;

			client_print(id, print_chat, "Авто выдача щипцов (только спецназ) %s.", g_DefuseKit ? "Включена" : "Выключена");
			log_amx("CSDM auto equiping players with defuser (CTs) %s.", g_DefuseKit ? "enabled" : "disabled");

			menu_display(id, g_EquipSettMenu, 1);
			write_autoequip_settings(id);

			return PLUGIN_HANDLED;
		}
		case 9:
		{
			g_NightVision = g_NightVision? false : true;

			client_print(id, print_chat, "Авто выдача ночного выденья %s.", g_NightVision ? "Включена" : "Выключена");
			log_amx("CSDM auto equiping players with nightvision %s.", g_NightVision ? "enabled" : "disabled");

			menu_display(id, g_EquipSettMenu, 1);
			write_autoequip_settings(id);

			return PLUGIN_HANDLED;
		}
		case 10:
		{
			g_Flash = g_Flash? false : true;

			client_print(id, print_chat, "Р˜СЃРїРѕР»СЊР·РѕРІР°РЅРёРµ световых гранат %s.", g_Flash ? "Включено" : "Выключено");
			log_amx("CSDM usage of flashbangs is %s.", g_Flash ? "enabled" : "disabled");

			menu_display(id, g_EquipSettMenu, 1);
			write_nades_settings(id);

			return PLUGIN_HANDLED;
		}
		case 11:
		{
			g_Smoke = g_Smoke? false : true;

			client_print(id, print_chat, "Р˜В˜СЃРїРѕР»СЊР·РѕРІР°РЅРёРµ дымовых гранат %s.", g_Smoke ? "Включено" : "Выключено");
			log_amx("CSDM usage of smoke grenades is %s.", g_Smoke ? "enabled" : "disabled");

			menu_display(id, g_EquipSettMenu, 1);
			write_nades_settings(id);

			return PLUGIN_HANDLED;
		}
		case 12:
		{
			g_Nade = g_Nade? false : true;

			client_print(id, print_chat, "Р˜СЃРїРѕР»СЊР·РѕРІР°РЅРёРµ всех гранат %s.", g_Nade ? "Включено" : "Выключено");
			log_amx("CSDM usage of he nades is %s.", g_Nade ? "enabled" : "disabled");

			menu_display(id, g_EquipSettMenu, 1);
			write_nades_settings(id);

			return PLUGIN_HANDLED;
		}
		case 13:
		{
			g_AlwaysAllowGunMenu = g_AlwaysAllowGunMenu? false : true;

			client_print(id, print_chat, "Р˜В˜СЃРїРѕР»СЊР·РѕРІР°РЅРёРµ меню СЌРєРёРїРёСЂРѕРІРєРё всегда %s.", g_AlwaysAllowGunMenu ? "Включено" : "Выключено");
			log_amx("CSDM Always Allow Gun Menu is %s.", g_AlwaysAllowGunMenu ? "enabled" : "disabled");

			menu_display(id, g_EquipSettMenu, 1);
			csdm_write_cfg(id, "equip", "always_allow_gunmenu", g_AlwaysAllowGunMenu ? "1" : "0");

			return PLUGIN_HANDLED;
		}
		case 14:
		{
			menu_display(id, g_SettingsMenu, g_PageSettMenu);

			return PLUGIN_HANDLED;
		}
	}

	return PLUGIN_HANDLED;
}

public hook_equip_sett_display(player, menu, item)
{
	new paccess, command[24], call;

	menu_item_getinfo(menu, item, paccess, command, charsmax(command), _, _, call);

	if (equali(command, "1")) {
		if (g_mPrimStatus) menu_item_setname(menu, item, "Меню первичного оружия включено");
		else menu_item_setname(menu, item, "Меню первичного оружия выключено");
	} else if (equali(command, "2")) {
		if (g_mSecStatus) menu_item_setname(menu, item, "Меню вторичного оружия включено");
		else menu_item_setname(menu, item, "Меню вторичного оружия выключено");
	} else if (equali(command, "3")) {
		if (g_mArmorStatus) menu_item_setname(menu, item, "Меню брони включено");
		else menu_item_setname(menu, item, "Меню брони выключено");
	} else if (equali(command, "4")) {
		if (g_mNadeStatus) menu_item_setname(menu, item, "Equip Menu Grenades Enabled");
		else menu_item_setname(menu, item, "Equip Menu Grenades Disabled");
	} else if (equali(command, "5")) {
		if (g_mAutoArmor) menu_item_setname(menu, item, "Авто экипировка броней включена");
		else menu_item_setname(menu, item, "Авто экипировка броней выключена");
	} else if (equali(command, "6")) {
		if (g_mAutoArmor && g_Armor == 2) menu_item_setname(menu, item, "Авто экипировка шлемом включена");
		else menu_item_setname(menu, item, "Авто экипировка шлемом выключена");
	} else if (equali(command, "7")) {
		if (g_mAutoNades) menu_item_setname(menu, item, "Авто экипировка гранатами включена");
		else menu_item_setname(menu, item, "Авто экипировка гранатами включена");
	} else if (equali(command, "8")) {
		if (g_DefuseKit) menu_item_setname(menu, item, "Авто экипировка щипцами включена");
		else menu_item_setname(menu, item, "Авто экипировка щипцами выключена");
	} else if (equali(command, "9")) {
		if (g_NightVision) menu_item_setname(menu, item, "Авто экипировка ночным виденьем включена");
		else menu_item_setname(menu, item, "Авто экипировка ночным виденьем выключена");
	} else if (equali(command, "10")) {
		if (g_Flash) menu_item_setname(menu, item, "Световые гранаты включены");
		else menu_item_setname(menu, item, "Световые гранаты выключены");
	} else if (equali(command, "11")) {
		if (g_Smoke) menu_item_setname(menu, item, "Дымовые гранаты включены");
		else menu_item_setname(menu, item, "Дымовые гранаты выключены");
	} else if (equali(command, "12")) {
		if (g_Nade) menu_item_setname(menu, item, "Р*азрывные гранаты включены");
		else menu_item_setname(menu, item, "Р*азрывные гранаты выключены");
	} else if (equali(command, "13")) {
		if (g_AlwaysAllowGunMenu) menu_item_setname(menu, item, "Р˜СЃРїРѕР»СЊР·РѕРІР°РЅРёРµ меню СЌРєРёРїРёСЂРѕРІРєРё всегда, включено");
		else menu_item_setname(menu, item, "Р˜В˜СЃРїРѕР»СЊР·РѕРІР°РЅРёРµ меню СЌРєРёРїРёСЂРѕРІРєРё всегда, выключено");
	}
}

public write_menus_settings(id)
{
	new flags[5] = "";
	new menu_flags = 0;

	if(g_mPrimStatus)
		menu_flags |= (1<<0);
	if(g_mSecStatus)
		menu_flags |= (1<<1);
	if(g_mArmorStatus)
		menu_flags |= (1<<2);
	if(g_mNadeStatus)
		menu_flags |= (1<<3);

	get_flags(menu_flags, flags, charsmax(flags));

	replace(flags, charsmax(flags), "a", "p");
	replace(flags, charsmax(flags), "b", "s");
	replace(flags, charsmax(flags), "c", "a");
	replace(flags, charsmax(flags), "d", "g");

	csdm_write_cfg(id, "equip", "menus", flags);
}

public write_autoequip_settings(id)
{
	new flags[6] = "";
	new auto_flags = 0;

	if(g_mAutoArmor)
		auto_flags |= (1<<0);
	if(g_mAutoArmor && g_Armor == 2)
		auto_flags |= (1<<1);
	if(g_mAutoNades)
		auto_flags |= (1<<2);
	if(g_DefuseKit)
		auto_flags |= (1<<3);
	if(g_NightVision)
		auto_flags |= (1<<4);

	get_flags(auto_flags, flags, charsmax(flags));

	// replace(flags, charsmax(flags), "a", "a");
	replace(flags, charsmax(flags), "b", "h");
	replace(flags, charsmax(flags), "c", "g");
	// replace(flags, charsmax(flags), "d", "d");
	replace(flags, charsmax(flags), "e", "n");

	csdm_write_cfg(id, "equip", "autoitems", flags);
}

public write_nades_settings(id)
{
	new flags[4] = "";
	new nade_flags = 0;

	if(g_Flash)
		nade_flags |= (1<<0);
	if(g_Nade)
		nade_flags |= (1<<1);
	if(g_Smoke)
		nade_flags |= (1<<2);

	get_flags(nade_flags, flags, charsmax(flags));

	replace(flags, charsmax(flags), "a", "f");
	replace(flags, charsmax(flags), "b", "h");
	replace(flags, charsmax(flags), "c", "s");

	csdm_write_cfg(id, "equip", "grenades", flags);
}
// stuff for settings menu - END
Vaim is offline
PartialCloning
Senior Member
Join Date: Dec 2015
Old 02-15-2019 , 18:17   Re: Variable Ignoring _cl_autowepswich "0"
Reply With Quote #10

Edit, try this Line 1162:

PHP Code:
new item_id csdm_give_item(idwp);
if(
slot == SLOT_PRIMARY)
    
engclient_cmd(idwp); 

Last edited by PartialCloning; 02-15-2019 at 18:25. Reason: Re-read the question.
PartialCloning is offline
Reply



Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump


All times are GMT -4. The time now is 00:29.


Powered by vBulletin®
Copyright ©2000 - 2024, vBulletin Solutions, Inc.
Theme made by Freecode