ocixcroms weapon plugin

Въпроси и проблеми свързани с AMXModX.
Аватар
TheRaiD
Извън линия
Foreigner
Foreigner
Мнения: 32
Регистриран на: 20 Яну 2019, 20:22
Се отблагодари: 5 пъти
Получена благодарност: 1 път

ocixcroms weapon plugin

Мнение от TheRaiD » 02 Сеп 2019, 19:22

Hello iam using this plugin on my escape mod its works nice but after zombie appeared the zombies can choose weapons too with this menu i want to disable it for zombies to not choose any weapon!!! and i want here on spawn that the players get same time with the weapons 1 He grenade and 1 flashbang (frostnade)
Thanks to all.

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

#include <amxmodx>
#include <amxmisc>
#include <cromchat>
#include <cstrike>
#include <fakemeta>
#include <fun>
#include <hamsandwich>

#if AMXX_VERSION_NUM < 183
	#include <fmt>
#endif

native crxranks_get_user_level(id)

#define PLUGIN_VERSION "1.1"
#define BACKPACK_AMMO 5000
#define WEAPON_TYPES 2
#define NULL_WEAPON -1

enum
{
	PRIMARY = 0,
	SECONDARY
}

enum
{
	NEW = 0,
	PREV,
	SAVE_PREV,
	SAVE_NEW
}

enum _:Weapons
{
	Name[32],
	Id[20],
	CSW,
	Level,
	VModel[128],
	PModel[128],
	Damage[16],
	Price
}

new Array:g_aWeapons[WEAPON_TYPES],
	bool:g_bSave[33],
	g_iWeapon[33][WEAPON_TYPES],
	g_iMaxWeapons[WEAPON_TYPES],
	g_iDisabled

public plugin_init()
{
	register_plugin("Weapons XP Menu", PLUGIN_VERSION, "OciXCrom")
	register_cvar("CRXWeaponsXPMenu", PLUGIN_VERSION, FCVAR_SERVER|FCVAR_SPONLY|FCVAR_UNLOGGED)
		
	register_dictionary("WeaponsXPMenu.txt")
	
	RegisterHam(Ham_Spawn, "player", "OnPlayerSpawn", 1)
	RegisterHam(Ham_TakeDamage, "player", "PreTakeDamage")
	register_event("CurWeapon", "OnWeaponChange", "be", "1=1")
	
	register_clcmd("say /guns", "ResetMenu")
	register_clcmd("say_team /guns", "ResetMenu")
	
	g_iDisabled = menu_makecallback("DisableItem")
	CC_SetPrefix(fmt("%L", LANG_SERVER, "WEAPONSXP_PREFIX"))
}

public plugin_precache()
{
	for(new i; i < WEAPON_TYPES; i++)
		g_aWeapons[i] = ArrayCreate(Weapons)
		
	ReadFile()
}

public plugin_end()
{
	for(new i; i < WEAPON_TYPES; i++)
		ArrayDestroy(g_aWeapons[i])
}

ReadFile()
{
	new szConfigsName[256], szFilename[256]
	get_configsdir(szConfigsName, charsmax(szConfigsName))
	formatex(szFilename, charsmax(szFilename), "%s/WeaponsXPMenu.ini", szConfigsName)
	new iFilePointer = fopen(szFilename, "rt")
	
	if(iFilePointer)
	{
		new szData[300], szPrice[6], szLevel[4], eItem[Weapons], iSection = -1, iSize
		
		while(!feof(iFilePointer))
		{
			fgets(iFilePointer, szData, charsmax(szData))
			trim(szData)
			
			switch(szData[0])
			{
				case EOS, ';': continue
				case '[':
				{
					iSize = strlen(szData)
					
					if(szData[iSize - 1] == ']')
					{
						switch(szData[1])
						{
							case 'P', 'p': iSection = PRIMARY
							case 'S', 's': iSection = SECONDARY
							default: continue
						}
					}
					else continue
				}
				default:
				{
					switch(iSection)
					{
						case PRIMARY: g_iMaxWeapons[PRIMARY]++
						case SECONDARY: g_iMaxWeapons[SECONDARY]++
						default: continue
					}
					
					parse(szData, eItem[Name], charsmax(eItem[Name]), eItem[Id], charsmax(eItem[Name]), szLevel, charsmax(szLevel),\
					eItem[VModel], charsmax(eItem[VModel]), eItem[PModel], charsmax(eItem[PModel]), eItem[Damage], charsmax(eItem[Damage]), szPrice, charsmax(szPrice))
					
					if(eItem[VModel][0])
						precache_model(eItem[VModel])
						
					if(eItem[PModel][0])
						precache_model(eItem[PModel])
						
					eItem[Level] = str_to_num(szLevel)
					eItem[CSW] = get_weaponid(eItem[Id])
					eItem[Price] = str_to_num(szPrice)
					ArrayPushArray(g_aWeapons[iSection], eItem)
					
					szLevel[0] = EOS
					szPrice[0] = EOS
					eItem[VModel][0] = EOS
					eItem[PModel][0] = EOS
					eItem[Damage][0] = EOS
				}
			}
		}
		
		fclose(iFilePointer)
	}
}

public client_putinserver(id)
{
	g_bSave[id] = false
	g_iWeapon[id][PRIMARY] = NULL_WEAPON
	g_iWeapon[id][SECONDARY] = NULL_WEAPON
}

public ResetMenu(id)
{
	if(!g_bSave[id])
		CC_SendMessage(id, "%L", id, "WEAPONSXP_ALREADY_ENABLED")
	else
	{
		g_bSave[id] = false
		CC_SendMessage(id, "%L", id, "WEAPONSXP_MENU_REENABLED")
	}
	
	return PLUGIN_HANDLED
}

public OnWeaponChange(id)
{
	static eItem[Weapons]
	
	for(new i, iWeapon = read_data(2); i < WEAPON_TYPES; i++)
	{
		if(g_iWeapon[id][i] == NULL_WEAPON)
			continue
			
		ArrayGetArray(g_aWeapons[i], g_iWeapon[id][i], eItem)
		
		if(eItem[CSW] == iWeapon)
		{
			if(eItem[VModel][0])
				set_pev(id, pev_viewmodel2, eItem[VModel])
			
			if(eItem[PModel][0])
				set_pev(id, pev_weaponmodel2, eItem[PModel])
				
			break
		}
	}
}

public PreTakeDamage(iVictim, iInflictor, iAttacker, Float:fDamage, iDamageBits)
{
	if(is_user_alive(iAttacker) && iAttacker != iVictim && iAttacker == iInflictor)
	{
		static eItem[Weapons]
		
		for(new i, iWeapon = get_user_weapon(iAttacker); i < WEAPON_TYPES; i++)
		{
			if(g_iWeapon[iAttacker][i] == NULL_WEAPON)
				continue
				
			ArrayGetArray(g_aWeapons[i], g_iWeapon[iAttacker][i], eItem)
			
			if(eItem[CSW] == iWeapon)
			{
				if(eItem[Damage][0])
					SetHamParamFloat(4, math_add_f(fDamage, eItem[Damage]))
					
				break
			}
		}
	}
}

public OnPlayerSpawn(id)
{
	if(!is_user_alive(id))
		return
		
	strip_user_weapons(id)
	give_item(id, "weapon_knife")
		
	if(g_bSave[id])
	{
		give_weapons(id, PRIMARY)
		give_weapons(id, SECONDARY)
	}
	else ShowMainMenu(id)
}

ShowMainMenu(id)
{
	new iMenu = menu_create(fmt("%L", id, "WEAPONSXP_MENU_TITLE"), "Main_Handler")
	
	menu_additem(iMenu, fmt("%L", id, "WEAPONSXP_SELECT_NEW"))
	
	if(g_iWeapon[id][PRIMARY] != NULL_WEAPON || g_iWeapon[id][SECONDARY] != NULL_WEAPON)
	{
		menu_additem(iMenu, fmt("%L", id, "WEAPONSXP_GET_PREVIOUS"))
		menu_additem(iMenu, fmt("%L", id, "WEAPONSXP_SAVE_PREVIOUS"))
	}
	else
	{
		menu_additem(iMenu, fmt("%L", id, "WEAPONSXP_GET_PREVIOUS"), .callback = g_iDisabled)
		menu_additem(iMenu, fmt("%L", id, "WEAPONSXP_SAVE_PREVIOUS"), .callback = g_iDisabled)
	}
		
	menu_additem(iMenu, fmt("%L", id, "WEAPONSXP_SAVE_NEW"))
	menu_setprop(iMenu, MEXIT_ALL, 0)
	menu_display(id, iMenu)
	return PLUGIN_HANDLED
}

public Main_Handler(id, iMenu, iItem)
{
	menu_destroy(iMenu)
	
	if(iItem == MENU_EXIT || !is_user_alive(id))
		return PLUGIN_HANDLED
	
	switch(iItem)
	{
		case NEW: ShowWeaponsMenu(id, PRIMARY)
		case PREV:
		{
			give_weapons(id, PRIMARY)
			give_weapons(id, SECONDARY)
		}
		case SAVE_PREV:
		{
			g_bSave[id] = true
			give_weapons(id, PRIMARY)
			give_weapons(id, SECONDARY)
		}
		case SAVE_NEW:
		{
			g_bSave[id] = true
			ShowWeaponsMenu(id, PRIMARY)
		}
	}
	
	return PLUGIN_HANDLED
}

ShowWeaponsMenu(id, iType)
{
	static eItem[Weapons]
	new szKey[3], iMenu = menu_create(fmt("%L", id, "WEAPONSXP_CHOOSE", id, iType == PRIMARY ? "WEAPONSXP_PRIMARY" : "WEAPONSXP_SECONDARY"), "Weapons_Handler")
	num_to_str(iType, szKey, charsmax(szKey))
	
	for(new i, iMoney = cs_get_user_money(id), iLevel = crxranks_get_user_level(id); i < g_iMaxWeapons[iType]; i++)
	{
		ArrayGetArray(g_aWeapons[iType], i, eItem)
		
		if(iLevel < eItem[Level])
			menu_additem(iMenu, fmt("%L", id, "WEAPONSXP_LOCKED", eItem[Name], eItem[Level]), szKey, .callback = g_iDisabled)
		else if(eItem[Price])
		{
			if(iMoney >= eItem[Price])
				menu_additem(iMenu, fmt("%L", id, "WEAPONSXP_PRICED_ITEM_YES", eItem[Name], eItem[Price]), szKey)
			else
				menu_additem(iMenu, fmt("%L", id, "WEAPONSXP_PRICED_ITEM_NO", eItem[Name], eItem[Price]), szKey, .callback = g_iDisabled)
		}
		else
			menu_additem(iMenu, eItem[Name], szKey)
	}
	
	menu_display(id, iMenu)
	return PLUGIN_HANDLED
}

public Weapons_Handler(id, iMenu, iItem)
{
	if(iItem == MENU_EXIT || !is_user_alive(id))
	{
		menu_destroy(iMenu)
		return PLUGIN_HANDLED
	}
	
	new szKey[3], iUnused, iType
	menu_item_getinfo(iMenu, iItem, iUnused, szKey, charsmax(szKey), .callback = iUnused)
	iType = str_to_num(szKey)
	
	g_iWeapon[id][iType] = iItem
	give_weapons(id, iType)
	
	menu_destroy(iMenu)
	
	if(iType == PRIMARY)
		ShowWeaponsMenu(id, SECONDARY)
		
	return PLUGIN_HANDLED
}

public DisableItem(id, iMenu, iItem)
	return ITEM_DISABLED

give_weapons(const id, const iType)
{
	if(g_iWeapon[id][iType] == NULL_WEAPON)
		return
		
	static eItem[Weapons]
	ArrayGetArray(g_aWeapons[iType], g_iWeapon[id][iType], eItem)
	
	if(eItem[Price])
	{
		new iMoney = cs_get_user_money(id)
		
		if(iMoney < eItem[Price])
		{
			CC_SendMessage(id, "%L", id, "WEAPONSXP_NO_MONEY", eItem[Price], eItem[Name])
			return
		}
		else cs_set_user_money(id, iMoney - eItem[Price])
	}
	
	if(give_item(id, eItem[Id]))
		cs_set_user_bpammo(id, eItem[CSW], BACKPACK_AMMO)
}

Float:math_add_f(Float:fNum, const szMath[])
{
	static szNewMath[16], Float:fMath, bool:bPercent, cOperator
   
	copy(szNewMath, charsmax(szNewMath), szMath)
	bPercent = szNewMath[strlen(szNewMath) - 1] == '%'
	cOperator = szNewMath[0]
   
	if(!isdigit(szNewMath[0]))
		szNewMath[0] = ' '
   
	if(bPercent)
		replace(szNewMath, charsmax(szNewMath), "%", "")
	   
	trim(szNewMath)
	fMath = str_to_float(szNewMath)
   
	if(bPercent)
		fMath *= fNum / 100
	   
	switch(cOperator)
	{
		case '+': fNum += fMath
		case '-': fNum -= fMath
		case '/': fNum /= fMath
		case '*': fNum *= fMath
		default: fNum = fMath
	}
   
	return fNum
}

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

Обратно към “Поддръжка / Помощ”

Кой е на линия

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