I have a function which explodes a prop, thanks to whoever wrote this code, I found it in another thread:
[CODE] local explosion = ents.Create( "env_explosion" )
explosion:SetKeyValue( "spawnflags", 174 )
explosion:SetKeyValue( "iMagnitude", 45 )
explosion:SetKeyValue( "iRadiusOverride", 456 )
explosion:SetPos(trent:GetPos())
explosion:Spawn( )
explosion:Fire("explode","",0)[/CODE]
I wonder, how can I make the entity(trent) get impact from the explosion? so it flies away?
[editline]4th September 2013[/editline]
This is not solved, I must have put it by mistake!
What's the code you used to spawn Trent? Is it a physics prop? Did you :Spawn( ), and :Activate( ), and PhysWake( ) if it wasn't moving?
[QUOTE=Acecool;42078418]What's the code you used to spawn Trent? Is it a physics prop? Did you :Spawn( ), and :Activate( ), and PhysWake( ) if it wasn't moving?[/QUOTE]
It is a car :downs:
Which is driving so it's activated and physwaked.
I noticed when I ran the code, it did rock a car which I spawned.
According to: if you need a larger magnitude, create more explosions!!!
[url]https://developer.valvesoftware.com/wiki/Env_physexplosion[/url]
Doing it 500 times actually throws the car quite a LARGE distance!
[lua] for i = 1, 500 do
local explosion = ents.Create( "env_explosion" )
explosion:SetKeyValue( "spawnflags", 174 )
explosion:SetKeyValue( "iMagnitude", 100 ) // Clamped from 1 to 100
explosion:SetKeyValue( "iRadiusOverride", 150)
explosion:SetPos( trace.HitPos )
explosion:Spawn( )
explosion:Fire("explode","",0)
// Add a timer, sometimes the ent is removed TOO quickly without it, and it doesn't explode.
// Or use the kill flag
timer.Simple( 1, function( )
explosion:Remove( );
end )
end[/lua]
Make sure you remove the explosion after you're done, the entity stays when you're done exploding.
Read into FLAGS:
1 : No Damage - Only Force
2 : Push players
4 : Push radially - not as a sphere
8 : Test LOS before pushing
16 : Disorient player if pushed
If I were you, I'd create a helper function for the explosion, which lets you decide magnitude, how many times to force, and also for the FORCE explosions ( repeats in the loop ), don't do damage. Reserve damage for FIRST explosion only, otherwise you may have some WEIRD effects on death such as spammed audio, etc.
EDIT: Added timer around the Explode ( had originally, then removed as it seemed to be fine, re-added as there was an issue without at times )
EDIT: You've given me a new function idea to add to my skeleton game-mode to help people with development.
There needs to be an explosion effect added, but aside from that it works fine.
SERVERSIDE:
Arguments are:
[B]Position[/B] of the center of the explosion,
[B]Magnitude[/B] of explosion ( While the default is clamped from 1 to 100, this function will generate MORE explosions until all magnitude is dispersed ),
[B]Radius[/B] of explosion ( again, a visual effect would need to be added for the full radius, which will come in final copy ),
[B]Damage[/B] caused if you were standing at the center of the explosion ( It travels more outwards than up, so at 100 if it's right under you, you'd survive barely, but right beside you at the same height, no -- ADDITIONALLY damage is only created 1 time - util.BlastDamage is finicky in the sense that it sometimes creates other effects; final version will have it all - DAMAGE IS OPTIONAL, 0 by default, if 0 then it just force pushes! ),
Which [B]Weapon[/B] caused the damage ( In case a grenade, or other entity is to be held accountable OPTIONAL - world by default ),
Which [B]Player[/B] caused the damage ( In case a Player is to be held accountable OPTIONAL - world by default )
[lua]CreateExplosion( Vector( 0, 0, 0 ), -- Pos
14187, -- Magnitude
450, -- Radius of damage / force
500 -- damage
);[/lua]
Here's a rough copy:
[lua]//
// CreateExplosion - with proper magnitude dispersement, damage, etc... - Josh 'Acecool' Moser
//
function CreateExplosion( _pos, _magnitude, _radius, _damage, _inflictorWeapon, _inflictorPlayer )
// Generate the damage from the explosion.
util.BlastDamage( _inflictorWeapon or game.GetWorld( ), _inflictorPlayer or game.GetWorld( ), _pos, _radius or _magnitude, _damage or 0 )
// Ensure that the entire magnitude is dispensed in 100 increments/intervals
local _times = math.ceil( _magnitude / 100 );
for i = 0, _times - 1 do
local _mag = ( _magnitude - ( i * 100 ) )
// Generate the explosion / force of the explosion.
local explosion = ents.Create( "env_explosion" )
// No damage just force, push players, disorient players if pushed
explosion:SetKeyValue( "spawnflags", 1 + 2 + 16 );
// Mag is clamped from 1 to 100 anyway
explosion:SetKeyValue( "iMagnitude", math.Clamp( _mag, 1, 100 ) );
// Radius or magnitude
explosion:SetKeyValue( "iRadiusOverride", _radius or _magnitude );
explosion:SetPos( _pos );
explosion:Spawn( );
// Touch-Off
explosion:Fire( "Explode", "", 0 );
// Remove it from the world
explosion:Fire( "Kill", "", 0 );
end
end[/lua]
Edit again:
A few resources. So, env_explosion is a visual explosion, ar2explosion is a nice dust cloud, physexplosion nudges phys objects and stuff, env_shake to shake screen etc etc...
My skeleton game-mode will have all of these coded and ready to use. I did create a new helper function to manage all of them with input, table of options; but the above function should serve as more than enough for the player; although the dust cloud might be nice for you:
[url]https://developer.valvesoftware.com/wiki/Explosions[/url]
[url]https://developer.valvesoftware.com/wiki/Env_explosion[/url]
[url]https://developer.valvesoftware.com/wiki/Env_physexplosion[/url]
[url]https://developer.valvesoftware.com/wiki/Env_ar2explosion[/url]
[url]https://developer.valvesoftware.com/wiki/Env_shake[/url]
[url]https://developer.valvesoftware.com/wiki/Env_shooter[/url]
[url]https://developer.valvesoftware.com/wiki/Env_spark[/url]
[url]https://developer.valvesoftware.com/wiki/Env_splash[/url]
[lua]function CreateExplosionDustCloud( _pos )
local explosion = ents.Create( "env_ar2explosion" );
explosion:SetPos( _pos )
explosion:Spawn( )
// Touch-Off
explosion:Fire( "Explode", "", 0 );
// Remove it from the world
explosion:Fire( "Kill", "", 0 );
end[/lua]
Simply add that function call right after util.BlastEffect, don't do it inside the for loop.
Sorry, you need to Log In to post a reply to this thread.