Solved M32

Unpaid Requests, Public Plugins
Post Reply
User avatar
Luxurious
Mod Tester
Mod Tester
Egypt
Posts: 177
Joined: 6 years ago
Location: Egypt
Contact:

M32

#1

Post by Luxurious » 5 years ago

Convert This Weapons to our Mode With Native To Add in Weapons Menu!

Code: Select all

#include <amxmodx>
#include <engine>
#include <fakemeta>
#include <fakemeta_util>
#include <fun>
#include <hamsandwich>
#include <xs>
#include <cstrike>
#include <zombieplague>
 
#define ENG_NULLENT             -1
#define EV_INT_WEAPONKEY        EV_INT_impulse
#define m32_WEAPONKEY     91421

new const GRENADE_MODEL[] = "models/grenade.mdl"
new in_zoom[33]
new g_reload[33]
// Sprites
new const GRENADE_TRAIL[] = "sprites/laserbeam.spr"
new const GRENADE_EXPLOSION[] = "sprites/zerogxplode.spr"
new sTrail, sExplo
const PRIMARY_WEAPONS_BIT_SUM = (1<<CSW_SCOUT)|(1<<CSW_XM1014)|(1<<CSW_P90)|(1<<CSW_P90)|(1<<CSW_P90)|(1<<CSW_SG550)|(1<<CSW_P90)|(1<<CSW_FAMAS)|(1<<CSW_AWP)|(1<<CSW_P90)|(1<<CSW_M249)|(1<<CSW_M3)|(1<<CSW_M4A1)|(1<<CSW_TMP)|(1<<CSW_M3)|(1<<CSW_P90)|(1<<CSW_AK47)|(1<<CSW_P90)

new const Fire_Sounds[][] = { "weapons/m32-1.wav" }

new gmsgWeaponList
new m32_V_MODEL[64] = "models/v_m32.mdl"
new m32_P_MODEL[64] = "models/p_m32.mdl"
new m32_W_MODEL[64] = "models/w_m32.mdl"

new cvar_clip_m32, cvar_m32_ammo,cvar_dmg
new g_has_m32[33]
new g_MaxPlayers, g_orig_event_m32
new g_itemid
public plugin_init()
{
	register_plugin("M32", "2.6", "Arwel / PbI)I(Uu'")
	register_message(get_user_msgid("DeathMsg"), "message_DeathMsg")
	register_event("CurWeapon","CurrentWeapon","be","1=1")
	RegisterHam(Ham_Item_AddToPlayer, "weapon_m3", "m32AddToPlayer")
	register_forward(FM_CmdStart, "fw_CmdStart")
	RegisterHam( Ham_Weapon_PrimaryAttack, "weapon_m3", "fw_attack" )
	RegisterHam( Ham_Weapon_PrimaryAttack, "weapon_m3", "fw_attackp", 1 )
	RegisterHam(Ham_Item_Deploy,"weapon_m3", "fw_Item_Deploy_Post", 1)
	RegisterHam(Ham_Weapon_Reload, "weapon_m3", "fw_r")
	RegisterHam(Ham_Weapon_Reload, "weapon_m3", "fw_reload" )
	register_forward(FM_SetModel, "modelka")
	register_forward(FM_UpdateClientData, "client_data_post", 1)
	register_forward(FM_PlaybackEvent, "PlaybackEvent")
	
	cvar_clip_m32 = register_cvar("m32_clip", "6")
	cvar_m32_ammo = register_cvar("m32_ammo", "1854212")
	cvar_dmg = register_cvar("m32_dmg","600.0")
	
	//register_clcmd("buyammo1", "clcmd_buyammo")
	//register_clcmd("buyammo2", "clcmd_buyammo")
	g_itemid =  zp_register_extra_item("Milkor M32 MGL", 0 ,ZP_TEAM_HUMAN)
	gmsgWeaponList = get_user_msgid("WeaponList")
	g_MaxPlayers = get_maxplayers()
}
 
public plugin_precache()
{
	precache_model(m32_V_MODEL)
	precache_model(m32_P_MODEL)
	precache_model(m32_W_MODEL)
	precache_model(GRENADE_MODEL)
	sTrail = precache_model(GRENADE_TRAIL)
	sExplo = precache_model(GRENADE_EXPLOSION)
	precache_sound("weapons/m32_after_reload.wav")
	precache_sound("weapons/m32_insert.wav")
	precache_sound("weapons/m32_start_reload.wav")
	precache_sound(Fire_Sounds[0])	
	precache_generic( "sprites/weapon_m32.txt" )
	precache_generic( "sprites/zp_cso/640hud75.spr" )
	precache_generic( "sprites/zp_cso/640hud7x.spr" )
	precache_generic( "sprites/zp_cso/scope_grenade.spr" )

	register_clcmd("weapon_m32", "Hook_Select")
	register_forward(FM_PrecacheEvent, "fwPrecacheEvent_Post", 1)
}

public zp_extra_item_selected(id, itemid) if(itemid==g_itemid) give_m32(id)

public Hook_Select(id)
{
	engclient_cmd(id, "weapon_m3")
	return PLUGIN_HANDLED
}

public fwPrecacheEvent_Post(type, const name[])
{
	if (equal("events/m3.sc", name))
	{
		g_orig_event_m32 = get_orig_retval()
		return FMRES_HANDLED
	}
	
	return FMRES_IGNORED
}


/*public clcmd_buyammo(id)
{
	// Not alive or infinite ammo setting enabled
	if (!is_user_alive(id) || !user_has_weapon(id,CSW_M3) || !g_has_m32[id])
		return PLUGIN_CONTINUE
	
	
	
	if (zp_get_user_ammo_packs(id) < 1)
	{
		client_print(id,print_chat,"You need 1 ammo")
		return PLUGIN_CONTINUE
	}
	
	// Get user weapons
	static  currentammo, refilled
	refilled = false
	if(cs_get_user_bpammo(id,CSW_M3)>=18)
	return PLUGIN_HANDLED
			
	// Give additional ammo
	ExecuteHamB(Ham_GiveAmmo, id, 6, "buckshot", 18)
	// Check whether we actually refilled the weapon's ammo
	if (cs_get_user_bpammo(id, CSW_M3) - currentammo > 0) refilled = true
	
	// Weapons already have full ammo
	if (!refilled) return PLUGIN_CONTINUE
	
	// Deduce ammo packs, play clip purchase sound, and notify player
	zp_set_user_ammo_packs(id,zp_get_user_ammo_packs(id)-1)
	emit_sound(id, CHAN_ITEM, "items/9mmclip1.wav", 1.0, ATTN_NORM, 0, PITCH_NORM)
	
	return PLUGIN_CONTINUE
}*/
 
public modelka(entity, model[])
{
	if(!is_valid_ent(entity))
		return FMRES_IGNORED;
	
	static szClassName[33]
	entity_get_string(entity, EV_SZ_classname, szClassName, charsmax(szClassName))
	
	if(!equal(szClassName, "weaponbox"))
		return FMRES_IGNORED;
	
	static iOwner
	iOwner = entity_get_edict(entity, EV_ENT_owner)
	
	if(equal(model, "models/w_m3.mdl"))
	{
		static iStoredAugID
		iStoredAugID = find_ent_by_owner(-1, "weapon_m3", entity)
		
		if(!is_valid_ent(iStoredAugID))
			return FMRES_IGNORED;
		
		if(g_has_m32[iOwner])
		{
			entity_set_int(iStoredAugID, EV_INT_impulse, 91421)
			g_has_m32[iOwner] = false
			g_reload[iOwner]=0
			if(in_zoom[iOwner]){
			set_zoom(iOwner,0)
			return PLUGIN_CONTINUE
		}
			entity_set_model(entity, m32_W_MODEL)
			
			return FMRES_SUPERCEDE;
		}
	}
	
	return FMRES_IGNORED;
}

public Sprite(id,type)
{
    
	message_begin(MSG_ONE, gmsgWeaponList, {0,0,0}, id)
	write_string(type?"weapon_m32":"weapon_m3")
	write_byte(5)
	write_byte(32)
	write_byte(-1)
	write_byte(-1)
	write_byte(0)
	write_byte(5)
	write_byte(21)
	write_byte(0)
	message_end()
}

public give_m32(id)
{
	drop_weapons(id, 1)
	new iWep2 = give_item(id,"weapon_m3")
	if( iWep2 > 0 )
	{
		cs_set_weapon_ammo(iWep2, get_pcvar_num(cvar_clip_m32))
		cs_set_user_bpammo (id, CSW_M3, get_pcvar_num(cvar_m32_ammo))
	}

	if(in_zoom[id])
	{ 
		cs_set_user_zoom(id, CS_RESET_ZOOM, 1)
		in_zoom[id] = 0
	}
	Sprite(id,1)
	set_zoom(id,0)
	g_reload[id]=0
	g_has_m32[id] = true
}
 
public m32AddToPlayer(m32, id)
{
	if(!is_valid_ent(m32) || !is_user_connected(id)) return HAM_IGNORED
        
	if(entity_get_int(m32, EV_INT_WEAPONKEY) == m32_WEAPONKEY)
	{
		g_has_m32[id] = true
		g_reload[id]=0
		set_zoom(id,0)
		entity_set_int(m32, EV_INT_WEAPONKEY, 0)
		Sprite(id,1)
		return HAM_HANDLED
	}
	if(entity_get_int(m32, EV_INT_WEAPONKEY) != m32_WEAPONKEY) Sprite(id,0)
	
	return HAM_IGNORED
}
 
public fw_Item_Deploy_Post(weapon_ent)
{
	new owner
	owner = pev(weapon_ent,pev_owner)
	if(is_user_alive(owner) && get_user_weapon(owner) == CSW_M3)
	{
		set_zoom(owner,0)
	}
	static weaponid
	weaponid = cs_get_weapon_id(weapon_ent)
	if(is_user_alive(owner))
	replace_weapon_models(owner, weaponid)
}

public CurrentWeapon(id)
{
	if( read_data(2) != CSW_M3 ) {
		if( g_reload[id] ) {
			g_reload[id] = false
			remove_task( id + 1331 )
		}
	}
	replace_weapon_models(id, read_data(2))
	remove_task(id)
} 
 
replace_weapon_models(id, weaponid)
{
	switch (weaponid)
	{
		case CSW_M3:
		{
			if(g_has_m32[id] && is_user_alive(id))
			{

				set_pev(id, pev_viewmodel2, m32_V_MODEL)
				set_pev(id, pev_weaponmodel2, m32_P_MODEL)
			}
		}
	}
}
 
public client_data_post(Player, SendWeapons, CD_Handle)
{
	if(!is_user_alive(Player) || (get_user_weapon(Player) != CSW_M3) || !g_has_m32[Player]) return FMRES_IGNORED
        
	set_cd(CD_Handle, CD_flNextAttack, halflife_time () + 0.00001)
	return FMRES_HANDLED
}

public fw_CmdStart(id, uc_handle, seed) 
{
	new ammo, clip, weapon = get_user_weapon(id, clip, ammo)
	if (!g_has_m32[id] || weapon != CSW_M3 || !is_user_alive(id))
		return

	if(( get_uc( uc_handle, UC_Buttons ) & IN_ATTACK2 ) && !( pev( id, pev_oldbuttons ) & IN_ATTACK2 )) {
		if(!in_zoom[id] && !g_reload[id]) set_zoom(id,1)
		else set_zoom(id,0)
	}
}

public fw_attack( wpn ) {
	if( g_has_m32[ pev( wpn, pev_owner ) ] ) return HAM_SUPERCEDE
	return HAM_IGNORED
}

public fw_attackp( wpn ) {
	new id = pev( wpn, pev_owner ), clip, bpammo
	get_user_weapon( id, clip, bpammo )
	if( g_has_m32[ id ] ) {
		if( clip > 0 ) {
			if( g_reload[id] ) {
				UTIL_PlayWeaponAnimation( id, 4 )
				set_pdata_float( id, 83, 1.0 )
				remove_task( id + 1331 )
				g_reload[id] = false
				return
			}

			UTIL_PlayWeaponAnimation(id,random_num(1,2))
			emit_sound( id, CHAN_WEAPON, Fire_Sounds[0], 1.0, ATTN_NORM, 0, PITCH_NORM )
			FireGrenade( id )
			MakeRecoil( id )

			set_pdata_float( id, 83, 0.6 )
		}
	}
}

public MakeRecoil(id)
{
	if(!is_user_alive(id))
		return;

	if(zp_get_user_zombie(id))
		return;

	if(!g_has_m32[id])
		return;

	static Float:punchAngle[3];
	punchAngle[0] = float(random_num(-1 * 400, 400)) / 100.0;
	punchAngle[1] = float(random_num(-1 * 700, 700)) / 100.0;
	punchAngle[2] = 0.0;
	set_pev(id, pev_punchangle, punchAngle);
}

public FireGrenade(id)
{
	new ammo, clip
	get_user_weapon(id, clip, ammo)
	static wep
	wep = find_ent_by_owner(-1, "weapon_m3", id)
	cs_set_weapon_ammo(wep,clip-1)
	new Float:origin[3],Float:velocity[3],Float:angles[3]
	engfunc(EngFunc_GetAttachment, id, 0, origin,angles)
	pev(id,pev_angles,angles)
	new ent = create_entity( "info_target" ) 
	set_pev( ent, pev_classname, "m32_grenade" )
	set_pev( ent, pev_solid, SOLID_BBOX )
	set_pev( ent, pev_movetype, MOVETYPE_TOSS )
	set_pev( ent, pev_mins, { -0.1, -0.1, -0.1 } )
	set_pev( ent, pev_maxs, { 0.1, 0.1, 0.1 } )
	entity_set_model( ent, GRENADE_MODEL )
	set_pev( ent, pev_origin, origin )
	set_pev( ent, pev_angles, angles )
	set_pev( ent, pev_owner, id )
	velocity_by_aim( id, in_zoom[id]? 1400 : 1000 , velocity )
	set_pev( ent, pev_velocity, velocity )
	message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
	write_byte(TE_BEAMFOLLOW) // Temporary entity ID
	write_short(ent) // Entity
	write_short(sTrail) // Sprite index
	write_byte(10) // Life
	write_byte(3) // Line width
	write_byte(255) // Red
	write_byte(255) // Green
	write_byte(255) // Blue
	write_byte(50) // Alpha
	message_end() 
	return PLUGIN_CONTINUE
}	



// We hit something!!!
public pfn_touch(ptr, ptd)
{
	// If ent is valid
	if (pev_valid(ptr))
	{	
		// Get classnames
		static classname[32]
		pev(ptr, pev_classname, classname, 31)
		
		// Our ent
		if(equal(classname, "m32_grenade"))
		{
			// Get it's origin
			new Float:originF[3]
			pev(ptr, pev_origin, originF)
			engfunc(EngFunc_MessageBegin, MSG_PAS, SVC_TEMPENTITY, originF, 0)
			write_byte(TE_WORLDDECAL)
			engfunc(EngFunc_WriteCoord, originF[0])
			engfunc(EngFunc_WriteCoord, originF[1])
			engfunc(EngFunc_WriteCoord, originF[2])
			write_byte(engfunc(EngFunc_DecalIndex,"{scorch3"))
			message_end()
			// Draw explosion
			message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
			write_byte(TE_EXPLOSION) // Temporary entity ID
			engfunc(EngFunc_WriteCoord, originF[0]) // engfunc because float
			engfunc(EngFunc_WriteCoord, originF[1])
			engfunc(EngFunc_WriteCoord, originF[2]+30.0)
			write_short(sExplo) // Sprite index
			write_byte(25) // Scale
			write_byte(35) // Framerate
			write_byte(0) // Flags
			message_end()
			
			// Get owner
			new owner = pev(ptr, pev_owner)
			// Alive...
			new a = FM_NULLENT
			// Get distance between victim and epicenter
			while((a = find_ent_in_sphere(a,originF,300.0)) != 0) {
				if( a!=owner&& a!=ptr&&pev(a,pev_takedamage)!=DAMAGE_NO) ExecuteHamB( Ham_TakeDamage, a ,owner ,owner,  get_pcvar_float(cvar_dmg), DMG_BULLET )
				set_pev(ptr, pev_flags, FL_KILLME)
			}
		}
	}
		
}	
 
public PlaybackEvent(flags, invoker, eventid, Float:delay, Float:origin[3], Float:angles[3], Float:fparam1, Float:fparam2, iParam1, iParam2, bParam1, bParam2)
{
	if ((eventid != g_orig_event_m32)) return FMRES_IGNORED
	if (!(1 <= invoker <= g_MaxPlayers)) return FMRES_IGNORED

	playback_event(flags | FEV_HOSTONLY, invoker, eventid, delay, origin, angles, fparam1, fparam2, iParam1, iParam2, bParam1, bParam2)
	return FMRES_SUPERCEDE
}


public message_DeathMsg(msg_id, msg_dest, id)
{
	static szTruncatedWeapon[33], iAttacker, iVictim
        
	get_msg_arg_string(4, szTruncatedWeapon, charsmax(szTruncatedWeapon))
        
	iAttacker = get_msg_arg_int(1)
	iVictim = get_msg_arg_int(2)
        
	if(!is_user_connected(iAttacker) || iAttacker == iVictim) return PLUGIN_CONTINUE
        
	if(get_user_weapon(iAttacker) == CSW_M3)
	{
		if(g_has_m32[iAttacker])
			set_msg_arg_string(4, "grenade")
	}
                
	return PLUGIN_CONTINUE
}
 
stock UTIL_PlayWeaponAnimation(const Player, const Sequence)
{
	set_pev(Player, pev_weaponanim, Sequence)
        
	message_begin(MSG_ONE_UNRELIABLE, SVC_WEAPONANIM, .player = Player)
	write_byte(Sequence)
	write_byte(2)
	message_end()
}

 
public fw_r( wpn ) {
	if( g_has_m32[ pev( wpn, pev_owner ) ] ) {
		fw_reload( wpn )
		return HAM_SUPERCEDE
	}
	return HAM_IGNORED
}

public fw_reload(weapon) {
	new id = pev( weapon, pev_owner )
	new clip, bpammo
	get_user_weapon(id, clip, bpammo )
	if( g_has_m32[ id ] && clip < 6 && bpammo > 0 ) {
		if(!task_exists( id+1331 )) set_task( 0.1, "reload", id+1331 )
		}
	if(in_zoom[id])
	{
		cs_set_user_zoom(id, CS_RESET_ZOOM, 1)
		in_zoom[id] = 0
	}
	return HAM_IGNORED
}

public reload( id ) {
	id -= 1331
	new clip, bpammo, weapon = find_ent_by_owner( -1, "weapon_m3", id )
	get_user_weapon(id, clip, bpammo )
	if(!g_reload[id]) {
			set_zoom(id,0)
			UTIL_PlayWeaponAnimation( id, 5 )
			g_reload[ id ] = 1
			set_pdata_float( id, 83, 1.0, 5 )
			set_task( 1.0, "reload", id+1331 )
			return
	}

	if(in_zoom[id])
	{
		cs_set_user_zoom(id, CS_RESET_ZOOM, 1)
		in_zoom[id] = 0
	}
	
	if( clip > 5 || bpammo < 1 ) {
		UTIL_PlayWeaponAnimation( id, 4 )
		g_reload[ id ] = 0
		set_pdata_float( id, 83, 1.5, 5 )
		return
	}
	cs_set_user_bpammo( id, CSW_M3, bpammo - 1 )
	cs_set_weapon_ammo( weapon, clip + 1 )
	set_pdata_float( id, 83, 1.0, 5 )
	UTIL_PlayWeaponAnimation( id, 3 )
	set_task( 1.0, "reload", id+1331 )
}
 
stock drop_weapons(id, dropwhat)
{
	static weapons[32], num, i, weaponid
	num = 0
	get_user_weapons(id, weapons, num)
	
	for (i = 0; i < num; i++)
	{
		weaponid = weapons[i]
		
		if (dropwhat == 1 && ((1<<weaponid) & PRIMARY_WEAPONS_BIT_SUM))
		{
			static wname[32]
			get_weaponname(weaponid, wname, sizeof wname - 1)
			engclient_cmd(id, "drop", wname)
		}
	}
}

stock set_zoom(index,type){
	if(type==0){
		if(in_zoom[index]==1){
			cs_set_user_zoom(index, CS_SET_AUGSG552_ZOOM, 1)

			in_zoom[index]=0
			emit_sound( index, CHAN_ITEM, "weapons/zoom.wav", 0.20, 2.40, 0, 100 )
		}
	}
	if(type==1){
		if(in_zoom[index]==0){
			cs_set_user_zoom(index, CS_RESET_ZOOM, 1)

			in_zoom[index]=1
			emit_sound( index, CHAN_ITEM, "weapons/zoom.wav", 0.20, 2.40, 0, 100 )
		}
	}
}
DRK Zombie-Escape V1.6
IP : 81.169.153.129:27015

User avatar
Raheem
Mod Developer
Mod Developer
Posts: 2214
Joined: 7 years ago
Contact:

#2

Post by Raheem » 5 years ago

1. We remove: 2. We convert any native zp to ze:
  • zp_get_user_zombie(id) --->> ze_is_user_zombie(id)
3. Also change any zp to ze

4. Add the native so first add:
    1. public plugin_natives()
    2. {
    3.     register_native("give_weapon_m32", "native_give_weapon_m32", 1)
    4. }
Then implement it: Now you can use the native give_weapon_m32(id)

Full code:

  1. #include <amxmodx>
  2. #include <engine>
  3. #include <fakemeta>
  4. #include <fakemeta_util>
  5. #include <fun>
  6. #include <hamsandwich>
  7. #include <xs>
  8. #include <cstrike>
  9. #include <zombieplague>
  10.  
  11. #define ENG_NULLENT             -1
  12. #define EV_INT_WEAPONKEY        EV_INT_impulse
  13. #define m32_WEAPONKEY     91421
  14.  
  15. new const GRENADE_MODEL[] = "models/grenade.mdl"
  16. new in_zoom[33]
  17. new g_reload[33]
  18. // Sprites
  19. new const GRENADE_TRAIL[] = "sprites/laserbeam.spr"
  20. new const GRENADE_EXPLOSION[] = "sprites/zerogxplode.spr"
  21. new sTrail, sExplo
  22. const PRIMARY_WEAPONS_BIT_SUM = (1<<CSW_SCOUT)|(1<<CSW_XM1014)|(1<<CSW_P90)|(1<<CSW_P90)|(1<<CSW_P90)|(1<<CSW_SG550)|(1<<CSW_P90)|(1<<CSW_FAMAS)|(1<<CSW_AWP)|(1<<CSW_P90)|(1<<CSW_M249)|(1<<CSW_M3)|(1<<CSW_M4A1)|(1<<CSW_TMP)|(1<<CSW_M3)|(1<<CSW_P90)|(1<<CSW_AK47)|(1<<CSW_P90)
  23.  
  24. new const Fire_Sounds[][] = { "weapons/m32-1.wav" }
  25.  
  26. new gmsgWeaponList
  27. new m32_V_MODEL[64] = "models/v_m32.mdl"
  28. new m32_P_MODEL[64] = "models/p_m32.mdl"
  29. new m32_W_MODEL[64] = "models/w_m32.mdl"
  30.  
  31. new cvar_clip_m32, cvar_m32_ammo,cvar_dmg
  32. new g_has_m32[33]
  33. new g_MaxPlayers, g_orig_event_m32
  34.  
  35. public plugin_init()
  36. {
  37.     register_plugin("M32", "2.6", "Arwel / PbI)I(Uu'")
  38.     register_message(get_user_msgid("DeathMsg"), "message_DeathMsg")
  39.     register_event("CurWeapon","CurrentWeapon","be","1=1")
  40.     RegisterHam(Ham_Item_AddToPlayer, "weapon_m3", "m32AddToPlayer")
  41.     register_forward(FM_CmdStart, "fw_CmdStart")
  42.     RegisterHam( Ham_Weapon_PrimaryAttack, "weapon_m3", "fw_attack" )
  43.     RegisterHam( Ham_Weapon_PrimaryAttack, "weapon_m3", "fw_attackp", 1 )
  44.     RegisterHam(Ham_Item_Deploy,"weapon_m3", "fw_Item_Deploy_Post", 1)
  45.     RegisterHam(Ham_Weapon_Reload, "weapon_m3", "fw_r")
  46.     RegisterHam(Ham_Weapon_Reload, "weapon_m3", "fw_reload" )
  47.     register_forward(FM_SetModel, "modelka")
  48.     register_forward(FM_UpdateClientData, "client_data_post", 1)
  49.     register_forward(FM_PlaybackEvent, "PlaybackEvent")
  50.    
  51.     cvar_clip_m32 = register_cvar("m32_clip", "6")
  52.     cvar_m32_ammo = register_cvar("m32_ammo", "1854212")
  53.     cvar_dmg = register_cvar("m32_dmg","600.0")
  54.    
  55.     //register_clcmd("buyammo1", "clcmd_buyammo")
  56.     //register_clcmd("buyammo2", "clcmd_buyammo")
  57.     gmsgWeaponList = get_user_msgid("WeaponList")
  58.     g_MaxPlayers = get_maxplayers()
  59. }
  60.  
  61. public plugin_precache()
  62. {
  63.     precache_model(m32_V_MODEL)
  64.     precache_model(m32_P_MODEL)
  65.     precache_model(m32_W_MODEL)
  66.     precache_model(GRENADE_MODEL)
  67.     sTrail = precache_model(GRENADE_TRAIL)
  68.     sExplo = precache_model(GRENADE_EXPLOSION)
  69.     precache_sound("weapons/m32_after_reload.wav")
  70.     precache_sound("weapons/m32_insert.wav")
  71.     precache_sound("weapons/m32_start_reload.wav")
  72.     precache_sound(Fire_Sounds[0]) 
  73.     precache_generic( "sprites/weapon_m32.txt" )
  74.     precache_generic( "sprites/zp_cso/640hud75.spr" )
  75.     precache_generic( "sprites/zp_cso/640hud7x.spr" )
  76.     precache_generic( "sprites/zp_cso/scope_grenade.spr" )
  77.  
  78.     register_clcmd("weapon_m32", "Hook_Select")
  79.     register_forward(FM_PrecacheEvent, "fwPrecacheEvent_Post", 1)
  80. }
  81.  
  82. public plugin_natives()
  83. {
  84.     register_native("give_weapon_m32", "native_give_weapon_m32", 1)
  85. }
  86.  
  87. public native_give_weapon_m32(id)
  88. {
  89.     give_m32(id)
  90. }
  91.  
  92. public Hook_Select(id)
  93. {
  94.     engclient_cmd(id, "weapon_m3")
  95.     return PLUGIN_HANDLED
  96. }
  97.  
  98. public fwPrecacheEvent_Post(type, const name[])
  99. {
  100.     if (equal("events/m3.sc", name))
  101.     {
  102.         g_orig_event_m32 = get_orig_retval()
  103.         return FMRES_HANDLED
  104.     }
  105.    
  106.     return FMRES_IGNORED
  107. }
  108.  
  109.  
  110. /*public clcmd_buyammo(id)
  111. {
  112.     // Not alive or infinite ammo setting enabled
  113.     if (!is_user_alive(id) || !user_has_weapon(id,CSW_M3) || !g_has_m32[id])
  114.         return PLUGIN_CONTINUE
  115.    
  116.    
  117.    
  118.     if (zp_get_user_ammo_packs(id) < 1)
  119.     {
  120.         client_print(id,print_chat,"You need 1 ammo")
  121.         return PLUGIN_CONTINUE
  122.     }
  123.    
  124.     // Get user weapons
  125.     static  currentammo, refilled
  126.     refilled = false
  127.     if(cs_get_user_bpammo(id,CSW_M3)>=18)
  128.     return PLUGIN_HANDLED
  129.            
  130.     // Give additional ammo
  131.     ExecuteHamB(Ham_GiveAmmo, id, 6, "buckshot", 18)
  132.     // Check whether we actually refilled the weapon's ammo
  133.     if (cs_get_user_bpammo(id, CSW_M3) - currentammo > 0) refilled = true
  134.    
  135.     // Weapons already have full ammo
  136.     if (!refilled) return PLUGIN_CONTINUE
  137.    
  138.     // Deduce ammo packs, play clip purchase sound, and notify player
  139.     zp_set_user_ammo_packs(id,zp_get_user_ammo_packs(id)-1)
  140.     emit_sound(id, CHAN_ITEM, "items/9mmclip1.wav", 1.0, ATTN_NORM, 0, PITCH_NORM)
  141.    
  142.     return PLUGIN_CONTINUE
  143. }*/
  144.  
  145. public modelka(entity, model[])
  146. {
  147.     if(!is_valid_ent(entity))
  148.         return FMRES_IGNORED;
  149.    
  150.     static szClassName[33]
  151.     entity_get_string(entity, EV_SZ_classname, szClassName, charsmax(szClassName))
  152.    
  153.     if(!equal(szClassName, "weaponbox"))
  154.         return FMRES_IGNORED;
  155.    
  156.     static iOwner
  157.     iOwner = entity_get_edict(entity, EV_ENT_owner)
  158.    
  159.     if(equal(model, "models/w_m3.mdl"))
  160.     {
  161.         static iStoredAugID
  162.         iStoredAugID = find_ent_by_owner(-1, "weapon_m3", entity)
  163.        
  164.         if(!is_valid_ent(iStoredAugID))
  165.             return FMRES_IGNORED;
  166.        
  167.         if(g_has_m32[iOwner])
  168.         {
  169.             entity_set_int(iStoredAugID, EV_INT_impulse, 91421)
  170.             g_has_m32[iOwner] = false
  171.             g_reload[iOwner]=0
  172.             if(in_zoom[iOwner]){
  173.             set_zoom(iOwner,0)
  174.             return PLUGIN_CONTINUE
  175.         }
  176.             entity_set_model(entity, m32_W_MODEL)
  177.            
  178.             return FMRES_SUPERCEDE;
  179.         }
  180.     }
  181.    
  182.     return FMRES_IGNORED;
  183. }
  184.  
  185. public Sprite(id,type)
  186. {
  187.    
  188.     message_begin(MSG_ONE, gmsgWeaponList, {0,0,0}, id)
  189.     write_string(type?"weapon_m32":"weapon_m3")
  190.     write_byte(5)
  191.     write_byte(32)
  192.     write_byte(-1)
  193.     write_byte(-1)
  194.     write_byte(0)
  195.     write_byte(5)
  196.     write_byte(21)
  197.     write_byte(0)
  198.     message_end()
  199. }
  200.  
  201. public give_m32(id)
  202. {
  203.     drop_weapons(id, 1)
  204.     new iWep2 = give_item(id,"weapon_m3")
  205.     if( iWep2 > 0 )
  206.     {
  207.         cs_set_weapon_ammo(iWep2, get_pcvar_num(cvar_clip_m32))
  208.         cs_set_user_bpammo (id, CSW_M3, get_pcvar_num(cvar_m32_ammo))
  209.     }
  210.  
  211.     if(in_zoom[id])
  212.     {
  213.         cs_set_user_zoom(id, CS_RESET_ZOOM, 1)
  214.         in_zoom[id] = 0
  215.     }
  216.     Sprite(id,1)
  217.     set_zoom(id,0)
  218.     g_reload[id]=0
  219.     g_has_m32[id] = true
  220. }
  221.  
  222. public m32AddToPlayer(m32, id)
  223. {
  224.     if(!is_valid_ent(m32) || !is_user_connected(id)) return HAM_IGNORED
  225.        
  226.     if(entity_get_int(m32, EV_INT_WEAPONKEY) == m32_WEAPONKEY)
  227.     {
  228.         g_has_m32[id] = true
  229.         g_reload[id]=0
  230.         set_zoom(id,0)
  231.         entity_set_int(m32, EV_INT_WEAPONKEY, 0)
  232.         Sprite(id,1)
  233.         return HAM_HANDLED
  234.     }
  235.     if(entity_get_int(m32, EV_INT_WEAPONKEY) != m32_WEAPONKEY) Sprite(id,0)
  236.    
  237.     return HAM_IGNORED
  238. }
  239.  
  240. public fw_Item_Deploy_Post(weapon_ent)
  241. {
  242.     new owner
  243.     owner = pev(weapon_ent,pev_owner)
  244.     if(is_user_alive(owner) && get_user_weapon(owner) == CSW_M3)
  245.     {
  246.         set_zoom(owner,0)
  247.     }
  248.     static weaponid
  249.     weaponid = cs_get_weapon_id(weapon_ent)
  250.     if(is_user_alive(owner))
  251.     replace_weapon_models(owner, weaponid)
  252. }
  253.  
  254. public CurrentWeapon(id)
  255. {
  256.     if( read_data(2) != CSW_M3 ) {
  257.         if( g_reload[id] ) {
  258.             g_reload[id] = false
  259.             remove_task( id + 1331 )
  260.         }
  261.     }
  262.     replace_weapon_models(id, read_data(2))
  263.     remove_task(id)
  264. }
  265.  
  266. replace_weapon_models(id, weaponid)
  267. {
  268.     switch (weaponid)
  269.     {
  270.         case CSW_M3:
  271.         {
  272.             if(g_has_m32[id] && is_user_alive(id))
  273.             {
  274.  
  275.                 set_pev(id, pev_viewmodel2, m32_V_MODEL)
  276.                 set_pev(id, pev_weaponmodel2, m32_P_MODEL)
  277.             }
  278.         }
  279.     }
  280. }
  281.  
  282. public client_data_post(Player, SendWeapons, CD_Handle)
  283. {
  284.     if(!is_user_alive(Player) || (get_user_weapon(Player) != CSW_M3) || !g_has_m32[Player]) return FMRES_IGNORED
  285.        
  286.     set_cd(CD_Handle, CD_flNextAttack, halflife_time () + 0.00001)
  287.     return FMRES_HANDLED
  288. }
  289.  
  290. public fw_CmdStart(id, uc_handle, seed)
  291. {
  292.     new ammo, clip, weapon = get_user_weapon(id, clip, ammo)
  293.     if (!g_has_m32[id] || weapon != CSW_M3 || !is_user_alive(id))
  294.         return
  295.  
  296.     if(( get_uc( uc_handle, UC_Buttons ) & IN_ATTACK2 ) && !( pev( id, pev_oldbuttons ) & IN_ATTACK2 )) {
  297.         if(!in_zoom[id] && !g_reload[id]) set_zoom(id,1)
  298.         else set_zoom(id,0)
  299.     }
  300. }
  301.  
  302. public fw_attack( wpn ) {
  303.     if( g_has_m32[ pev( wpn, pev_owner ) ] ) return HAM_SUPERCEDE
  304.     return HAM_IGNORED
  305. }
  306.  
  307. public fw_attackp( wpn ) {
  308.     new id = pev( wpn, pev_owner ), clip, bpammo
  309.     get_user_weapon( id, clip, bpammo )
  310.     if( g_has_m32[ id ] ) {
  311.         if( clip > 0 ) {
  312.             if( g_reload[id] ) {
  313.                 UTIL_PlayWeaponAnimation( id, 4 )
  314.                 set_pdata_float( id, 83, 1.0 )
  315.                 remove_task( id + 1331 )
  316.                 g_reload[id] = false
  317.                 return
  318.             }
  319.  
  320.             UTIL_PlayWeaponAnimation(id,random_num(1,2))
  321.             emit_sound( id, CHAN_WEAPON, Fire_Sounds[0], 1.0, ATTN_NORM, 0, PITCH_NORM )
  322.             FireGrenade( id )
  323.             MakeRecoil( id )
  324.  
  325.             set_pdata_float( id, 83, 0.6 )
  326.         }
  327.     }
  328. }
  329.  
  330. public MakeRecoil(id)
  331. {
  332.     if(!is_user_alive(id))
  333.         return;
  334.  
  335.     if(ze_is_user_zombie(id))
  336.         return;
  337.  
  338.     if(!g_has_m32[id])
  339.         return;
  340.  
  341.     static Float:punchAngle[3];
  342.     punchAngle[0] = float(random_num(-1 * 400, 400)) / 100.0;
  343.     punchAngle[1] = float(random_num(-1 * 700, 700)) / 100.0;
  344.     punchAngle[2] = 0.0;
  345.     set_pev(id, pev_punchangle, punchAngle);
  346. }
  347.  
  348. public FireGrenade(id)
  349. {
  350.     new ammo, clip
  351.     get_user_weapon(id, clip, ammo)
  352.     static wep
  353.     wep = find_ent_by_owner(-1, "weapon_m3", id)
  354.     cs_set_weapon_ammo(wep,clip-1)
  355.     new Float:origin[3],Float:velocity[3],Float:angles[3]
  356.     engfunc(EngFunc_GetAttachment, id, 0, origin,angles)
  357.     pev(id,pev_angles,angles)
  358.     new ent = create_entity( "info_target" )
  359.     set_pev( ent, pev_classname, "m32_grenade" )
  360.     set_pev( ent, pev_solid, SOLID_BBOX )
  361.     set_pev( ent, pev_movetype, MOVETYPE_TOSS )
  362.     set_pev( ent, pev_mins, { -0.1, -0.1, -0.1 } )
  363.     set_pev( ent, pev_maxs, { 0.1, 0.1, 0.1 } )
  364.     entity_set_model( ent, GRENADE_MODEL )
  365.     set_pev( ent, pev_origin, origin )
  366.     set_pev( ent, pev_angles, angles )
  367.     set_pev( ent, pev_owner, id )
  368.     velocity_by_aim( id, in_zoom[id]? 1400 : 1000 , velocity )
  369.     set_pev( ent, pev_velocity, velocity )
  370.     message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
  371.     write_byte(TE_BEAMFOLLOW) // Temporary entity ID
  372.     write_short(ent) // Entity
  373.     write_short(sTrail) // Sprite index
  374.     write_byte(10) // Life
  375.     write_byte(3) // Line width
  376.     write_byte(255) // Red
  377.     write_byte(255) // Green
  378.     write_byte(255) // Blue
  379.     write_byte(50) // Alpha
  380.     message_end()
  381.     return PLUGIN_CONTINUE
  382. }  
  383.  
  384.  
  385.  
  386. // We hit something!!!
  387. public pfn_touch(ptr, ptd)
  388. {
  389.     // If ent is valid
  390.     if (pev_valid(ptr))
  391.     {  
  392.         // Get classnames
  393.         static classname[32]
  394.         pev(ptr, pev_classname, classname, 31)
  395.        
  396.         // Our ent
  397.         if(equal(classname, "m32_grenade"))
  398.         {
  399.             // Get it's origin
  400.             new Float:originF[3]
  401.             pev(ptr, pev_origin, originF)
  402.             engfunc(EngFunc_MessageBegin, MSG_PAS, SVC_TEMPENTITY, originF, 0)
  403.             write_byte(TE_WORLDDECAL)
  404.             engfunc(EngFunc_WriteCoord, originF[0])
  405.             engfunc(EngFunc_WriteCoord, originF[1])
  406.             engfunc(EngFunc_WriteCoord, originF[2])
  407.             write_byte(engfunc(EngFunc_DecalIndex,"{scorch3"))
  408.             message_end()
  409.             // Draw explosion
  410.             message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
  411.             write_byte(TE_EXPLOSION) // Temporary entity ID
  412.             engfunc(EngFunc_WriteCoord, originF[0]) // engfunc because float
  413.             engfunc(EngFunc_WriteCoord, originF[1])
  414.             engfunc(EngFunc_WriteCoord, originF[2]+30.0)
  415.             write_short(sExplo) // Sprite index
  416.             write_byte(25) // Scale
  417.             write_byte(35) // Framerate
  418.             write_byte(0) // Flags
  419.             message_end()
  420.            
  421.             // Get owner
  422.             new owner = pev(ptr, pev_owner)
  423.             // Alive...
  424.             new a = FM_NULLENT
  425.             // Get distance between victim and epicenter
  426.             while((a = find_ent_in_sphere(a,originF,300.0)) != 0) {
  427.                 if( a!=owner&& a!=ptr&&pev(a,pev_takedamage)!=DAMAGE_NO) ExecuteHamB( Ham_TakeDamage, a ,owner ,owner,  get_pcvar_float(cvar_dmg), DMG_BULLET )
  428.                 set_pev(ptr, pev_flags, FL_KILLME)
  429.             }
  430.         }
  431.     }
  432.        
  433. }  
  434.  
  435. public PlaybackEvent(flags, invoker, eventid, Float:delay, Float:origin[3], Float:angles[3], Float:fparam1, Float:fparam2, iParam1, iParam2, bParam1, bParam2)
  436. {
  437.     if ((eventid != g_orig_event_m32)) return FMRES_IGNORED
  438.     if (!(1 <= invoker <= g_MaxPlayers)) return FMRES_IGNORED
  439.  
  440.     playback_event(flags | FEV_HOSTONLY, invoker, eventid, delay, origin, angles, fparam1, fparam2, iParam1, iParam2, bParam1, bParam2)
  441.     return FMRES_SUPERCEDE
  442. }
  443.  
  444.  
  445. public message_DeathMsg(msg_id, msg_dest, id)
  446. {
  447.     static szTruncatedWeapon[33], iAttacker, iVictim
  448.        
  449.     get_msg_arg_string(4, szTruncatedWeapon, charsmax(szTruncatedWeapon))
  450.        
  451.     iAttacker = get_msg_arg_int(1)
  452.     iVictim = get_msg_arg_int(2)
  453.        
  454.     if(!is_user_connected(iAttacker) || iAttacker == iVictim) return PLUGIN_CONTINUE
  455.        
  456.     if(get_user_weapon(iAttacker) == CSW_M3)
  457.     {
  458.         if(g_has_m32[iAttacker])
  459.             set_msg_arg_string(4, "grenade")
  460.     }
  461.                
  462.     return PLUGIN_CONTINUE
  463. }
  464.  
  465. stock UTIL_PlayWeaponAnimation(const Player, const Sequence)
  466. {
  467.     set_pev(Player, pev_weaponanim, Sequence)
  468.        
  469.     message_begin(MSG_ONE_UNRELIABLE, SVC_WEAPONANIM, .player = Player)
  470.     write_byte(Sequence)
  471.     write_byte(2)
  472.     message_end()
  473. }
  474.  
  475.  
  476. public fw_r( wpn ) {
  477.     if( g_has_m32[ pev( wpn, pev_owner ) ] ) {
  478.         fw_reload( wpn )
  479.         return HAM_SUPERCEDE
  480.     }
  481.     return HAM_IGNORED
  482. }
  483.  
  484. public fw_reload(weapon) {
  485.     new id = pev( weapon, pev_owner )
  486.     new clip, bpammo
  487.     get_user_weapon(id, clip, bpammo )
  488.     if( g_has_m32[ id ] && clip < 6 && bpammo > 0 ) {
  489.         if(!task_exists( id+1331 )) set_task( 0.1, "reload", id+1331 )
  490.         }
  491.     if(in_zoom[id])
  492.     {
  493.         cs_set_user_zoom(id, CS_RESET_ZOOM, 1)
  494.         in_zoom[id] = 0
  495.     }
  496.     return HAM_IGNORED
  497. }
  498.  
  499. public reload( id ) {
  500.     id -= 1331
  501.     new clip, bpammo, weapon = find_ent_by_owner( -1, "weapon_m3", id )
  502.     get_user_weapon(id, clip, bpammo )
  503.     if(!g_reload[id]) {
  504.             set_zoom(id,0)
  505.             UTIL_PlayWeaponAnimation( id, 5 )
  506.             g_reload[ id ] = 1
  507.             set_pdata_float( id, 83, 1.0, 5 )
  508.             set_task( 1.0, "reload", id+1331 )
  509.             return
  510.     }
  511.  
  512.     if(in_zoom[id])
  513.     {
  514.         cs_set_user_zoom(id, CS_RESET_ZOOM, 1)
  515.         in_zoom[id] = 0
  516.     }
  517.    
  518.     if( clip > 5 || bpammo < 1 ) {
  519.         UTIL_PlayWeaponAnimation( id, 4 )
  520.         g_reload[ id ] = 0
  521.         set_pdata_float( id, 83, 1.5, 5 )
  522.         return
  523.     }
  524.     cs_set_user_bpammo( id, CSW_M3, bpammo - 1 )
  525.     cs_set_weapon_ammo( weapon, clip + 1 )
  526.     set_pdata_float( id, 83, 1.0, 5 )
  527.     UTIL_PlayWeaponAnimation( id, 3 )
  528.     set_task( 1.0, "reload", id+1331 )
  529. }
  530.  
  531. stock drop_weapons(id, dropwhat)
  532. {
  533.     static weapons[32], num, i, weaponid
  534.     num = 0
  535.     get_user_weapons(id, weapons, num)
  536.    
  537.     for (i = 0; i < num; i++)
  538.     {
  539.         weaponid = weapons[i]
  540.        
  541.         if (dropwhat == 1 && ((1<<weaponid) & PRIMARY_WEAPONS_BIT_SUM))
  542.         {
  543.             static wname[32]
  544.             get_weaponname(weaponid, wname, sizeof wname - 1)
  545.             engclient_cmd(id, "drop", wname)
  546.         }
  547.     }
  548. }
  549.  
  550. stock set_zoom(index,type){
  551.     if(type==0){
  552.         if(in_zoom[index]==1){
  553.             cs_set_user_zoom(index, CS_SET_AUGSG552_ZOOM, 1)
  554.  
  555.             in_zoom[index]=0
  556.             emit_sound( index, CHAN_ITEM, "weapons/zoom.wav", 0.20, 2.40, 0, 100 )
  557.         }
  558.     }
  559.     if(type==1){
  560.         if(in_zoom[index]==0){
  561.             cs_set_user_zoom(index, CS_RESET_ZOOM, 1)
  562.  
  563.             in_zoom[index]=1
  564.             emit_sound( index, CHAN_ITEM, "weapons/zoom.wav", 0.20, 2.40, 0, 100 )
  565.         }
  566.     }
  567. }
He who fails to plan is planning to fail

User avatar
Luxurious
Mod Tester
Mod Tester
Egypt
Posts: 177
Joined: 6 years ago
Location: Egypt
Contact:

#3

Post by Luxurious » 5 years ago

Thx , Worked !
DRK Zombie-Escape V1.6
IP : 81.169.153.129:27015

Post Reply

Create an account or sign in to join the discussion

You need to be a member in order to post a reply

Create an account

Not a member? register to join our community
Members can start their own topics & subscribe to topics
It’s free and only takes a minute

Register

Sign in

Who is online

Users browsing this forum: Bing [Bot] and 5 guests