Revision Difference
Entity:TakeDamageInfo#546691
<function name="TakeDamageInfo" parent="Entity" type="classfunc">
<description>
Applies the damage specified by the damage info to the entity.
⤶
<warning>Calling this function on the victim entity in <page>ENTITY:OnTakeDamage</page> can cause infinite loops.</warning>⤶
⤶
<note>This function will not deal damage to a player inside a vehicle. You need to call it on the vehicle instead.</note>⤶
<warning>Calling this function on the victim entity in <page>ENTITY:OnTakeDamage</page> can cause infinite loops.</warning>⤶
</description>
<realm>Server</realm>
<args>
<arg name="damageInfo" type="CTakeDamageInfo">The damage to apply.</arg>
</args>
</function>
<example>
<description>Dissolve the target into oblivion.</description>
<code>
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 )
</code>
</example>
<example>
<description>If you just want to dissolve your SENT, you may need to use [env_entity_dissolver](https://developer.valvesoftware.com/wiki/Env_entity_dissolver) for this, like below;</description>
<code>
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 )
</code>⤶
</example>⤶
⤶
<example>⤶
<description>Damage the vehicle if you need to kill the player inside.</description>⤶
<code>⤶
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 )⤶
</code>
</example>