Garry's Mod Wiki

Revision Difference

Entity:TakeDamageInfo#550136

<function name="TakeDamageInfo" parent="Entity" type="classfunc"> <description> Applies the damage specified by the damage info to the entity. ⤶ <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> ⤶ <warning>Calling this function on the victim entity in <page>ENTITY:OnTakeDamage</page> can cause infinite loops.</warning>⤶ <warning>This function will not deal damage to a player inside a vehicle. You need to call it on the vehicle instead.</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> 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 ) </code> </example>