Garry's Mod Wiki

Revision Difference

ENTITY:OnRemove#551709

<function name="OnRemove" parent="ENTITY" type="hook"> <ishook>yes</ishook> <description> Called when the entity is about to be removed. See also <page>Entity:CallOnRemove</page>, which can even be used on engine (non-Lua) entities. <example> <description>Create an explosion when the entity will be removed. To create an entity, you can read <page>ents.Create</page>.</description> <code> function ENT:OnRemove() local explosion = ents.Create( "env_explosion" ) -- The explosion entity explosion:SetPos( self:GetPos() ) -- Put the position of the explosion at the position of the entity explosion:Spawn() -- Spawn the explosion explosion:SetKeyValue( "iMagnitude", "50" ) -- the magnitude of the explosion explosion:Fire( "Explode", 0, 0 ) -- explode end </code> </example> </description> <realm>Shared</realm> <predicted>No</predicted> </function> # Clientside behaviour remarks ⤶ <bug issue="4675">This hook is called during clientside full updates.</bug>⤶ ⤶ <note>⤶ This hook is called during clientside full updates. ⤶ **This is fixed on the dev branch**⤶ </note>⤶ This hook may be called at odd times (when entity has actually not yet been removed from the server). This happens during fullupdate with the <page>ENTITY:Initialize</page> function not being called even when the entity reappears. You can debug this behaviour by enabling cheats and running **cl_fullupdate** on the client. <page>GM:NotifyShouldTransmit</page> can be used to circumvent this problem. <page>ENTITY:Think</page> can also be used to detect that the entity has reappeared. You may reinitialize any necessary data in these hooks. Another way to fix this problem can be found at the bottom of this page. <example> <description>Another way to circumvent the problem where the client thinks the entity is removed even though it has not is to test if the entity is valid using a tick delay.</description> <code> function ENT:OnRemove() timer.Simple( 0, function() if not IsValid( self ) then -- Your remove code here end end) end </code> </example>