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

custom weapons behind your back


Post New Thread Reply   
 
Thread Tools Display Modes
Author Message
Vaim
Member
Join Date: Feb 2019
Old 04-17-2021 , 14:37   custom weapons behind your back
Reply With Quote #1

Hello dear community members.
I found the Back Weapons plugin (https://forums.alliedmods.net/showthread.php?p=359356), it displays the player's main weapon behind him.
On my server, some players have custom weapon skins, but custom weapons are not displayed behind their backs, only default weapon models are visible. Please help me to create one so that the player who picked up the custom weapon will display it behind his back.
Thank you.

Code:
#include <amxmodx>
#include <fakemeta>
#include <hamsandwich>

#define PLUGIN	"Back Weapons"
#define AUTHOR	"hoboman313/cheap_suit"
#define VERSION	"1.87"

#define MAX_PLAYERS 		32
#define OFFSET_PRIMARYWEAPON 	116
#define OFFSET_WEAPONTYPE 	43
#define EXTRAOFFSET_WEAPONS 	4
#define OFFSET_AUTOSWITCH 	509
#define OFFSET_SHIELD 		510
#define HAS_SHIELD 		(1<<24)

#define PRIMARY_WEAPONS (1<<CSW_SCOUT | 1<<CSW_XM1014 | 1<<CSW_MAC10 | 1<<CSW_AUG | 1<<CSW_UMP45 | 1<<CSW_SG550 | 1<<CSW_GALIL | 1<<CSW_FAMAS | 1<<CSW_AWP | 1<<CSW_MP5NAVY | 1<<CSW_M249 | 1<<CSW_M3 | 1<<CSW_M4A1 | 1<<CSW_TMP | 1<<CSW_G3SG1 | 1<<CSW_SG552 | 1<<CSW_AK47 | 1<<CSW_P90)

#define is_weapon_primary(%1)      (PRIMARY_WEAPONS & (1<<%1))
#define cs_get_weapon_type(%1)     get_pdata_int(%1, OFFSET_WEAPONTYPE, EXTRAOFFSET_WEAPONS)
#define cs_get_user_hasprim(%1)    get_pdata_int(%1, OFFSET_PRIMARYWEAPON)
#define cs_get_user_autoswitch(%1) get_pdata_int(%1, OFFSET_AUTOSWITCH)
#define cs_get_user_shield(%1)	   (get_pdata_int(%1, OFFSET_SHIELD) & HAS_SHIELD) ? 1 : 0

enum
{
	MODEL_NULL    = 0,
	MODEL_AUG     = 1,
	MODEL_AK47    = 2,
	MODEL_AWP     = 3,
	MODEL_MP5NAVY = 4,
	MODEL_P90     = 5,
	MODEL_GALIL   = 6,
	MODEL_M4A1    = 7,
	MODEL_SG550   = 8,
	MODEL_SG552   = 9,
	MODEL_SCOUT   = 10,
	MODEL_XM1014  = 11,
	MODEL_M3      = 12,
	MODEL_G3SG1   = 13,
	MODEL_M249    = 14,
	MODEL_FAMAS   = 15,
	MODEL_UMP45   = 16
}

new g_weapons[][] =
{	
	"weapon_p228",
	"weapon_scout",
	"weapon_hegrenade",
	"weapon_xm1014",
	"weapon_c4",
	"weapon_mac10",
	"weapon_aug",
	"weapon_smokegrenade",
	"weapon_elite",
	"weapon_fiveseven",
	"weapon_ump45",
	"weapon_sg550",
	"weapon_galil",
	"weapon_famas",
	"weapon_usp",
	"weapon_glock18",
	"weapon_awp",
	"weapon_mp5navy",
	"weapon_m249",
	"weapon_m3",
	"weapon_m4a1",
	"weapon_tmp",
	"weapon_g3sg1",
	"weapon_flashbang",
	"weapon_deagle",
	"weapon_sg552",
	"weapon_ak47",
	"weapon_knife",
	"weapon_p90"
}

new g_weaponclass[] = "backweapon"
new g_weaponmodel[] = "models/backgweapons.mdl"

new g_weaponent[MAX_PLAYERS+1]

public plugin_init() 
{
	register_plugin(PLUGIN, VERSION, AUTHOR)
	register_cvar(PLUGIN, VERSION, FCVAR_SPONLY|FCVAR_SERVER)
	
	RegisterHam(Ham_Killed,           "player", "bacon_killed")
	RegisterHam(Ham_Spawn,            "player", "bacon_spawn_post", 1)
	RegisterHam(Ham_AddPlayerItem,    "player", "bacon_addplayeritem")
	RegisterHam(Ham_RemovePlayerItem, "player", "bacon_removeplayeritem")
	
	for(new i = 0; i < sizeof g_weapons; i++)
	{
		RegisterHam(Ham_Item_AttachToPlayer, g_weapons[i], "bacon_item_attachtoplayer_post", 1)
		RegisterHam(Ham_Item_Deploy,         g_weapons[i], "bacon_item_deploy_post",         1)
	}
}

public plugin_precache()
	precache_model(g_weaponmodel)

public client_putinserver(id)
{
	static infotarget 
	if(!infotarget) infotarget = engfunc(EngFunc_AllocString, "info_target")
	
	g_weaponent[id] = engfunc(EngFunc_CreateNamedEntity, infotarget)
	if(pev_valid(g_weaponent[id]))
	{
		engfunc(EngFunc_SetModel, g_weaponent[id], g_weaponmodel)
		set_pev(g_weaponent[id], pev_classname, g_weaponclass)
		set_pev(g_weaponent[id], pev_movetype, MOVETYPE_FOLLOW)
		set_pev(g_weaponent[id], pev_effects, EF_NODRAW)
		set_pev(g_weaponent[id], pev_aiment, id)
	}
}

public client_disconnected(id)
{
	if(g_weaponent[id] > 0 && pev_valid(g_weaponent[id]))
		engfunc(EngFunc_RemoveEntity, g_weaponent[id])
	
	g_weaponent[id] = 0
}

public bacon_killed(id, idattacker, shouldgib)
	fm_set_entity_visibility(g_weaponent[id], 0)

public bacon_addplayeritem(id, ent)
{
	static weaponid; weaponid = cs_get_weapon_type(ent)
	if(is_weapon_primary(weaponid) && pev_valid(g_weaponent[id]))
	{
		fm_set_entity_visibility(g_weaponent[id], 0)
		set_pev(g_weaponent[id], pev_body, get_weapon_model(weaponid))
	}
}

public bacon_removeplayeritem(id, ent)
{
	if(is_weapon_primary(cs_get_weapon_type(ent)) && pev_valid(g_weaponent[id]))
		fm_set_entity_visibility(g_weaponent[id], 0)
}

public bacon_spawn_post(id) if(is_user_alive(id))
{
	if(!cs_get_user_hasprim(id))
		fm_set_entity_visibility(g_weaponent[id], 0)
}

public bacon_item_attachtoplayer_post(ent, id) if(is_user_alive(id) && !cs_get_user_autoswitch(id))
{
	if(is_weapon_primary(cs_get_weapon_type(ent)) && pev_valid(g_weaponent[id]))
		fm_set_entity_visibility(g_weaponent[id], 1)
}

public bacon_item_deploy_post(ent)
{
	static id; id = pev(ent, pev_owner)
	if(is_user_alive(id)) 
	{
		static weapon; weapon = cs_get_weapon_type(ent)
		if(is_weapon_primary(weapon) || cs_get_user_shield(id))
			fm_set_entity_visibility(g_weaponent[id], 0)
		
		else if(cs_get_user_hasprim(id))
			fm_set_entity_visibility(g_weaponent[id], 1)
	}
}

stock get_weapon_model(weapon)
{
	switch(weapon)
	{
		case CSW_SCOUT:   return MODEL_SCOUT
		case CSW_XM1014:  return MODEL_XM1014
		case CSW_AUG:	  return MODEL_AUG
		case CSW_UMP45:   return MODEL_UMP45
		case CSW_SG550:   return MODEL_SG550
		case CSW_GALIL:   return MODEL_GALIL
		case CSW_FAMAS:   return MODEL_FAMAS
		case CSW_AWP:     return MODEL_AWP
		case CSW_MP5NAVY: return MODEL_MP5NAVY
		case CSW_M249:    return MODEL_M249
		case CSW_M3:      return MODEL_M3
		case CSW_M4A1:    return MODEL_M4A1
		case CSW_G3SG1:   return MODEL_G3SG1
		case CSW_SG552:   return MODEL_SG552
		case CSW_AK47:    return MODEL_AK47
		case CSW_P90:     return MODEL_P90
	}
	return 0
}

stock fm_set_entity_visibility(index, visible = 1) 
	set_pev(index, pev_effects, visible == 1 ? pev(index, pev_effects) & ~EF_NODRAW : pev(index, pev_effects) | EF_NODRAW)
Vaim is offline
Reply


Thread Tools
Display Modes

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 12:47.


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