Garry's Mod Wiki

Revision Difference

Entity:IsValid#514666

<function name="IsValid" parent="Entity" type="classfunc">⤶ <description>⤶ Returns whether the entity is a valid entity or not.⤶ ⤶ An entity is valid if:⤶ * It is not a [NULL](/gmod/Global_Variables) entity⤶ * It is not the worldspawn entity (<page>game.GetWorld</page>)⤶ ⤶ Instead of calling this method directly, it's a good idea to call the global <page>Global.IsValid</page> instead.⤶ ⤶ It will check whether the given variable contains an object (an Entity) or nothing at all for you. See examples.⤶ ⤶ <warning>NULL entities can still be assigned with key/value pairs, but they will be instantly negated. See example 3</warning>⤶ This might be a cause for a lot of headache. Usually happening during networking etc., when completely valid entities suddenly become invalid on the client, but are never filtered with IsValid(). See <page>GM:InitPostEntity</page> for more details.⤶ </description>⤶ <realm>Shared</realm>⤶ <rets>⤶ <ret name="" type="boolean">true if the entity is valid, false otherwise</ret>⤶ </rets>⤶ </function>⤶ ⤶ <example>⤶ <description>Shows how to use the global <page>Global.IsValid</page> function instead of using this method directly.</description>⤶ <code>⤶ if ( entity &amp;&amp; entity:IsValid() ) then⤶ -- Do stuff⤶ end⤶ ⤶ -- The above can be replaced with the following for the same effect (and cleaner code)⤶ ⤶ if ( IsValid( entity ) ) then⤶ -- Do stuff⤶ end⤶ </code>⤶ ⤶ </example>⤶ ⤶ ⤶ <example>⤶ <code>print( LocalPlayer():IsValid() )</code>⤶ <output>Outputs 'true' to the console if the player is in-game.</output>⤶ ⤶ </example>⤶ ⤶ ⤶ <example>⤶ <code>⤶ local newPlayer = net.ReadEntity() --server found a new player on the server and sent it to us after ⤶ print( "1/4" ) -- it determined it was valid (newPlayer is NULL in this realm)⤶ ⤶ if not isnumber(newPlayer.ImportantGameData) then --If it doesn't have a specific field, assign a value to it⤶ print( "2/4" )⤶ newPlayer.ImportantGameData = 42 ⤶ end⤶ print( "3/4" )⤶ ⤶ print( newPlayer.ImportantGameData * 69 ) --Attempting to do arithmetics on the new field⤶ print( "4/4" )⤶ </code>⤶ <output>⤶ 1/4 ... 3/4⤶ * A lua error telling us 'ImportantGameData' is a nil value and thus can't perform math on it⤶ ----⤶ But this shouldn't be possible, because we just created a value there. No red flags are present up until this point; all code up until this will run fine. Make sure to add an IsValid() check when the seemingly impossible happens.⤶ </output>⤶ ⤶ </example>