Entity:TakeDamageInfo
Description
Applies the damage specified by the damage info to the entity.
This function will not deal damage to a player inside a vehicle. You need to call it on the vehicle instead.
Calling this function on the victim entity in ENTITY:OnTakeDamage can cause infinite loops.
Arguments
Example
Dissolve the target into oblivion.
function DissolveIt( ent, ply )
local d = DamageInfo()
d:SetDamage( ent:Health() )
d:SetAttacker( ply or ent )
d:SetDamageType( DMG_DISSOLVE )
ent:TakeDamageInfo( d )
end
concommand.Add( "dissolve_it", function( ply, cmd, arg )
local ent = ply:GetEyeTrace().Entity
if ( !IsValid( ent ) ) then return end -- Not looking at a valid entity
DissolveIt( ent, ply )
end )
Example
If you just want to dissolve your SENT, you may need to use env_entity_dissolver for this, like below;
function MakeDissolver( ent, position, attacker, dissolveType )
local Dissolver = ents.Create( "env_entity_dissolver" )
timer.Simple(5, function()
if IsValid(Dissolver) then
Dissolver:Remove() -- backup edict save on error
end
end)
Dissolver.Target = "dissolve"..ent:EntIndex()
Dissolver:SetKeyValue( "dissolvetype", dissolveType )
Dissolver:SetKeyValue( "magnitude", 0 )
Dissolver:SetPos( position )
Dissolver:SetPhysicsAttacker( attacker )
Dissolver:Spawn()
ent:SetName( Dissolver.Target )
Dissolver:Fire( "Dissolve", Dissolver.Target, 0 )
Dissolver:Fire( "Kill", "", 0.1 )
return Dissolver
end
concommand.Add( "dissolve_it", function( ply, cmd, arg )
local ent = ply:GetEyeTrace().Entity
if ( !IsValid( ent ) ) then return end -- Not looking at a valid entity
local dissolver = MakeDissolver( ent, ent:GetPos(), ply, 0 )
end )
Example
Damage the vehicle if you need to kill the player inside.
local dmg = DamageInfo() -- Create a server-side damage information class
function TakeDamage( victim, damage, attacker, inflictor )
dmg:SetDamage( damage )
dmg:SetAttacker( attacker )
dmg:SetInflictor( inflictor )
dmg:SetDamageType( DMG_ENERGYBEAM )
victim:TakeDamageInfo( dmg )
end
if ( target:IsVehicle() ) then
target = target:GetDriver() -- Comment this to damage the plater inside
end
-- When target is a player in a vehicle will not get damaged
TakeDamage( target, damage, attacker, weapon )