Raised This Month: $51 Target: $400
 12% 

Zp_concudion_grenade help !!1


Post New Thread Reply   
 
Thread Tools Display Modes
Author Message
StarMpK
Member
Join Date: Feb 2014
Location: Romania , Cluj
Old 02-15-2020 , 09:06   Zp_concudion_grenade help !!1
Reply With Quote #1

Hello ! This is the error which i get from my server. it's the only error wich occure on my server. i just instaled and is not working properly.

L 02/15/2020 - 14:55:41: [FAKEMETA] Invalid entity
L 02/15/2020 - 14:55:41: [AMXX] Displaying debug trace (plugin "zp_extra_conc.amxx")
L 02/15/2020 - 14:55:41: [AMXX] Run time error 10: native error (native "pev")
L 02/15/2020 - 14:55:41: [AMXX] [0] zp_extra_conc.sma::concussion_explode (line 355)
L 02/15/2020 - 14:55:41: [AMXX] [1] zp_extra_conc.sma::fw_ThinkGrenade (line 275)
this is the sma
Code:
 /*
	[ZP] Extra Item: Concussion Grenade
	Copyright (C) 2009 by NiHiLaNTh

	This program is free software: you can redistribute it and/or modify
	it under the terms of the GNU General Public License as published by
	the Free Software Foundation, either version 3 of the License, or
	(at your option) any later version.
	
	This program is distributed in the hope that it will be useful,
	but WITHOUT ANY WARRANTY; without even the implied warranty of
	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
	GNU General Public License for more details.
	
	You should have received a copy of the GNU General Public License
	along with this program.  If not, see <http://www.gnu.org/licenses/>.
	
	In addition, as a special exception, the author gives permission to
	link the code of this program with the Half-Life Game Engine ("HL
	Engine") and Modified Game Libraries ("MODs") developed by Valve,
	L.L.C ("Valve"). You must obey the GNU General Public License in all
	respects for all of the code used other than the HL Engine and MODs
	from Valve. If you modify this file, you may extend this exception
	to your version of the file, but you are not obligated to do so. If
	you do not wish to do so, delete this exception statement from your
	version.

	--- Introduction ---
	This plugin adds new weapon to zombie plague - concussion grenade.I took
	this idead from Team Fortress Classic.When grenade explodes it doesn't
	do any damage, but it starts to make hallucinations to players, such as
	screen shake, screen fade, recoil changes.
	
	--- CVARs ---
	zp_conc_nade_radius 500 -- Explosion radius
	zp_conc_nade_duration 7 -- Duration of hallucinations
	
	--- Credits ---
	NiHiLaNTh - Plugin
	dels - Grenade model
	MeRcyLeZZ - Some useful code parts
	xPaw / Xellath - Code optimization
	
	--- Changelog ---
	v1.0 - Initial release 
	v1.1 - Optimized code ( Thanks xPaw and Xellath )

*/

#include < amxmodx >
#include < fakemeta >
#include < hamsandwich >
#include < fun >
#include < zombieplague >

// Plugin version
#define VERSION "1.1"

// Defines
#define MAXPLAYERS 	32
#define FCVAR_FLAGS 	( FCVAR_SERVER | FCVAR_SPONLY | FCVAR_UNLOGGED )
#define OFFSET_PLAYER	41
#define OFFSET_ACTIVE	373
#define LINUX_DIFF	5
#define NADE_TYPE_CONC	pev_iuser2
//#define UNIT_SECOND	(1<<12)
#define FFADE_IN	0x0000
#define FFADE_OUT	0x0001
#define REPEAT		0.2 // Time when next screen fade/shake message is being sent
#define TASK_AFFECT	666
#define ID_AFFECT	( taskid - TASK_AFFECT )

// Grenade cost
#define GRENADE_COST	15  

// Grenade model
new const grenade_model [ ] = "models/v_grenade_conc.mdl"

// Sounds
new const explosion_sound [ ] = "zombie_plague/concgren_blast1.wav"
new const purchase_sound [ ] = "items/gunpickup2.wav"

// Cached sprite indexes
new m_iTrail, m_iRing

// Item ID
new g_conc

// Player variable
new g_hasConc [ MAXPLAYERS + 1 ]

// Message ID's
new g_msgScreenFade, g_msgScreenShake

// CVAR pointers
new cvar_nade_radius, cvar_duration

// Precache
public plugin_precache ( )
{
	// Precache grenade models
	precache_model ( grenade_model )
	
	// Precache sounds
	precache_sound ( explosion_sound )
	precache_sound ( purchase_sound )
	
	// Precache sprites
	m_iRing = precache_model ( "sprites/shockwave.spr" )
	m_iTrail = precache_model ( "sprites/laserbeam.spr" )
}

// Plugin initialization
public plugin_init ( )
{
	// New plugin
	register_plugin ( "[ZP] Extra Item: Concussion Grenade", VERSION, "NiHiLaNTh" )
	
	// Add cvar to detect servers with this plugin
	register_cvar ( "zp_concgren_version", VERSION, FCVAR_FLAGS )
	
	// New extra item
	g_conc = zp_register_extra_item ( "Concussion Grenade", GRENADE_COST, ZP_TEAM_ZOMBIE )
	
	// Events
	register_event ( "HLTV", "Event_NewRound", "a", "1=0", "2=0" )
	register_event ( "DeathMsg", "Event_DeathMsg", "a" )
	register_event ( "CurWeapon", "Event_CurrentWeapon", "be", "1=1", "2=25" )
	
	// Forwards
	register_forward ( FM_SetModel, "fw_SetModel" )
	RegisterHam ( Ham_Think, "grenade", "fw_ThinkGrenade" )
	register_forward ( FM_CmdStart, "fw_CmdStart" )
	
	// CVARs
	cvar_nade_radius = register_cvar ( "zp_conc_nade_radius", "500" )
	cvar_duration = register_cvar ( "zp_conc_nade_duration", "7" )
	
	// Messages
	g_msgScreenShake = get_user_msgid ( "ScreenShake" )
	g_msgScreenFade = get_user_msgid ( "ScreenFade" )
}

// Someone decided to buy our an extra item
public zp_extra_item_selected ( Player, Item )
{
	// This is our grenade
	if ( Item == g_conc )
	{
		// Player already have it
		if ( g_hasConc [ Player ] )
		{
			// Notice him about that
			client_print ( Player, print_chat, "[ZP] You already have this item" )
			return ZP_PLUGIN_HANDLED
		}
		else
		{
			// Now we have grenade
			g_hasConc [ Player ] = true
			
			// Give him flashbang
			give_item ( Player, "weapon_flashbang" )
			
			// Play purchase sound
			client_cmd ( Player, "spk %s", purchase_sound )	
		}
	}
	return PLUGIN_CONTINUE
}
	
// Someone was infected	
public zp_user_infected_post ( Player, Infector )
{
	// We were affected by concussion grenade
	if ( task_exists ( Player+TASK_AFFECT ) )
		remove_task ( Player+TASK_AFFECT )
}	

// Someone were turned back to human
public zp_user_humanized_post ( Player, Survivor )
{
	// We dont' have nade anymore
	if ( g_hasConc [ Player ] )
		g_hasConc [ Player ] = false
}

// New round started
public Event_NewRound ( )
{
	// They loose conc.grenade
	arrayset ( g_hasConc, false, 33 )
		
	// And they aren't affected by conc.grenade
	remove_task ( TASK_AFFECT )	
}

// Someone died
public Event_DeathMsg ( )
{
	// Get victim
	new victim = read_data ( 2 )
	
	// He had conc.grenade
	if ( g_hasConc [ victim ] )
		g_hasConc [ victim ] = false
	else if ( task_exists ( victim+TASK_AFFECT ) ) // We were affected
		remove_task ( victim+TASK_AFFECT )
}

// Current weapon player is holding
public Event_CurrentWeapon ( Player )
{
	// Dead or not zombie
	if ( !is_user_alive ( Player ) || !zp_get_user_zombie ( Player ) )
		return PLUGIN_CONTINUE
	
	// Replace flashbang model with our
	set_pev ( Player, pev_viewmodel2, grenade_model )
	
	return PLUGIN_CONTINUE
}

// Set model
public fw_SetModel ( Entity, const Model [ ] )
{
	// Prevent invalid ent messages
	if ( !pev_valid ( Entity ) )
		return 
		
	// Grenade not thrown yet	
	if ( pev ( Entity, pev_dmgtime ) == 0.0 )
		return 
		
	// We are throwing concussion grenade	
	if ( g_hasConc [ pev ( Entity, pev_owner ) ] && equal ( Model [7 ], "w_fl", 4 ) )
	{
		//Draw trail
		message_begin ( MSG_BROADCAST, SVC_TEMPENTITY )
		write_byte ( TE_BEAMFOLLOW ) // Temp entity ID
		write_short ( Entity ) // Entity to follow
		write_short ( m_iTrail ) // Sprite index
		write_byte ( 10 ) // Life
		write_byte ( 10 ) // Line width
		write_byte ( 255 ) // Red amount
		write_byte ( 255 ) // Blue amount
		write_byte ( 0 ) // Blue amount
		write_byte ( 255 ) // Alpha
		message_end ( )
		
		// Set grenade entity
		set_pev ( Entity, pev_flTimeStepSound, NADE_TYPE_CONC )
	}
}

// Grenade is getting to explode
public fw_ThinkGrenade ( Entity )
{
	// Prevent invalid ent messages
	if ( !pev_valid ( Entity ) )
		return HAM_IGNORED
	
	// Get damage time
	static Float:dmg_time
	pev ( Entity, pev_dmgtime, dmg_time )
	
	// maybe it is time to go off
	if ( dmg_time > get_gametime ( ) )
		return HAM_IGNORED
		
	// Our grenade	
	if ( pev ( Entity, pev_flTimeStepSound ) == NADE_TYPE_CONC )
	{
		// Force to explode
		concussion_explode ( Entity )
		return HAM_SUPERCEDE
	}
	return HAM_IGNORED
}

// Command start
public fw_CmdStart ( Player, UC_Handle, Seed )
{
	// Dead, zombie or not affected
	if ( !is_user_alive ( Player ) || zp_get_user_zombie ( Player ) || !task_exists ( Player+TASK_AFFECT ) )
		return FMRES_IGNORED
	
	// Get buttons
	new buttons = get_uc ( UC_Handle, UC_Buttons )
	
	// We are firing
	if ( buttons & IN_ATTACK )
	{
		// We are holding an active weapon
		if ( get_pdata_cbase ( Player, OFFSET_ACTIVE, LINUX_DIFF ) )
		{
			// New recoil
			set_pev ( Player, pev_punchangle, Float:{3.0, 3.0, 4.0} )
		}
	}
	return FMRES_HANDLED
}
			

// Grenade explode
public concussion_explode ( Entity )
{
	// Invalid entity ?
	if ( !pev_valid ( Entity  ) )
		return
	
	// Get entities origin
	static Float:origin [ 3 ]
	pev ( Entity, pev_origin, origin )
	
	// Draw ring
	UTIL_DrawRing (origin )
	
	// Explosion sound
	emit_sound ( Entity, CHAN_WEAPON, explosion_sound, VOL_NORM, ATTN_NORM, 0, PITCH_NORM )
	
	// Collisions
	static victim 
	victim = -1
	
	// Find radius
	static Float:radius
	radius = get_pcvar_float ( cvar_nade_radius )
	
	// Find all players in a radius
	while ( ( victim = engfunc ( EngFunc_FindEntityInSphere, victim, origin, radius ) ) != 0 )
	{
		// Dead or zombie
		if ( !is_user_alive ( victim ) || zp_get_user_zombie ( victim ) )
			continue
			
		// Victim isn't affected yet	
		if ( !task_exists ( victim+TASK_AFFECT ) ) 
		{
			// Get duration
			new duration = get_pcvar_num ( cvar_duration )
			
			// Calculate affect times
			new affect_count = floatround ( duration / REPEAT )
			
			// Continiously affect them
			set_task ( REPEAT, "affect_victim", victim+TASK_AFFECT, _, _, "a", affect_count )
		}
	}
	
	// Remove entity from ground
	engfunc ( EngFunc_RemoveEntity, Entity )
	
	// We dont' have grenade anymore
	g_hasConc [ pev ( Entity, pev_owner ) ] = false
}

// We are going to affect you
public affect_victim ( taskid )
{
	// Dead
	if ( !is_user_alive ( ID_AFFECT ) )
		return
		
	// Make a screen fade
	message_begin ( MSG_ONE_UNRELIABLE, g_msgScreenFade, {0,0,0}, ID_AFFECT )
	write_short ( 1<<13 ) // Duration
	write_short ( 1<<14 ) // Hold Time
	write_short ( FFADE_IN ) // Fade type
	write_byte ( random_num ( 50, 200 ) ) // Red amount
	write_byte ( random_num ( 50, 200 ) ) // Green amount
	write_byte ( random_num ( 50, 200 ) ) // Blue amount
	write_byte ( random_num ( 50, 200 ) ) // Alpha
	message_end ( )
		
	// Make a screen shake
	message_begin ( MSG_ONE_UNRELIABLE, g_msgScreenShake, {0,0,0}, ID_AFFECT )
	write_short ( 0xFFFF ) // Amplitude
	write_short ( 1<<13 ) // Duration
	write_short ( 0xFFFF ) // Frequency
	message_end ( )
}

// Draw explosion ring ( from zombie_plague40.sma )
stock UTIL_DrawRing ( const Float:origin [ 3 ] )
{
	engfunc(EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, origin, 0)
	write_byte(TE_BEAMCYLINDER) // TE id
	engfunc(EngFunc_WriteCoord, origin[0]) // x
	engfunc(EngFunc_WriteCoord, origin[1]) // y
	engfunc(EngFunc_WriteCoord, origin[2]) // z
	engfunc(EngFunc_WriteCoord, origin[0]) // x axis
	engfunc(EngFunc_WriteCoord, origin[1]) // y axis
	engfunc(EngFunc_WriteCoord, origin[2]+555.0) // z axis
	write_short( m_iRing ) // sprite
	write_byte(0) // startframe
	write_byte(0) // framerate
	write_byte(4) // life
	write_byte(60) // width
	write_byte(0) // noise
	write_byte(200) // red
	write_byte(200) // green
	write_byte(200) // blue
	write_byte(200) // brightness
	write_byte(0) // speed
	message_end()
}
/* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE
*{\\ rtf1\\ ansi\\ deff0{\\ fonttbl{\\ f0\\ fnil Tahoma;}}\n\\ viewkind4\\ uc1\\ pard\\ lang1049\\ f0\\ fs16 \n\\ par }
*/
StarMpK is offline
Akka3223
Member
Join Date: Oct 2016
Old 02-15-2020 , 12:22   Re: Zp_concudion_grenade help !!1
Reply With Quote #2

new Owner = pev(Entity, pev_owner)
or
new Owner = entity_get_edict(Entity, EV_ENT_owner);

g_hasConc [ pev ( Entity, pev_owner ) ] = false --> g_hasConc[Owner] = false
Akka3223 is offline
StarMpK
Member
Join Date: Feb 2014
Location: Romania , Cluj
Old 02-16-2020 , 21:12   Re: Zp_concudion_grenade help !!1
Reply With Quote #3

i don't understand. can you please post a fixed sma? thx
StarMpK is offline
OciXCrom
Veteran Member
Join Date: Oct 2013
Location: Macedonia
Old 02-17-2020 , 08:12   Re: Zp_concudion_grenade help !!1
Reply With Quote #4

Quote:
Originally Posted by StarMpK View Post
i don't understand. can you please post a fixed sma? thx
If you don't understand, don't post in this section. This section is about learning to do things by yourself. If you're not willing to do any of that, use the requests section.
__________________
OciXCrom is offline
Send a message via Skype™ to OciXCrom
georgik57
Veteran Member
Join Date: Oct 2008
Location: 🎧Music World
Old 02-17-2020 , 13:03   Re: Zp_concudion_grenade help !!1
Reply With Quote #5

Of course it reports error if you're trying to access an entity's data after removing it.
Simply move
PHP Code:
    // We dont' have grenade anymore
    
g_hasConc pev Entitypev_owner ) ] = false 
before
PHP Code:
    // Remove entity from ground
    
engfunc EngFunc_RemoveEntityEntity 
__________________
georgik57 is offline
Send a message via MSN to georgik57 Send a message via Yahoo to georgik57 Send a message via Skype™ to georgik57
StarMpK
Member
Join Date: Feb 2014
Location: Romania , Cluj
Old 02-17-2020 , 13:56   Re: Zp_concudion_grenade help !!1
Reply With Quote #6

Thank you very much !!!
StarMpK 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 08:05.


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