Garry's Mod Wiki

Revision Difference

Structures/PropertyAdd#563306

<structure> <realm>Shared</realm> <description>Structure used for <page>properties.Add</page>.</description> <fields> <item name="Type" type="string" default="simple">Can be set to "toggle" to make this property a toggle property.</item> <item name="MenuLabel" type="string">Label to show on opened menu</item> <item name="MenuIcon" type="string">Icon to show on opened menu for this item. Optional for simple properties and unused for toggle properties.</item> <item name="StructureField (Order)" type="number">Where in the list should the property be positioned, relative to other properties. For reference, here are the default properties and their Order values: Property | Order | ---------|-------| | Bone Manipulate | 500 | | Bodygroups | 600 | | Skin | 601 | | Keep Upright | 900 | | Ignite/Extinguish | 999 | | Remove | 1000 | | Gravity | 1001 | | Drive | 1100 | | Collision | 1500 | | Statue | 1501 | | NPC Biggify/Smallify | 1799, 1800 | | Motion Control (Kinect) | 2500 | | <page text="Edit Properties">Editable_Entities</page> | 90001 | </item> <item name="PrependSpacer" type="boolean" default="false">Whether to add a spacer before this property. This should generally be true for the first property in a group of properties.</item> <item name="Filter" type="function">Used **clientside** to decide whether this property should be shown for an entity. It's good practice to call <page>GM:CanProperty</page> in this hook via <page>gamemode.Call</page> or <page>hook.Run</page>. <callback> <arg type="table" name="self">the property table</arg> <arg type="Entity" name="ent">the entity the player clicked</arg> <arg type="Global.LocalPlayer" name="player">the localplayer</arg>⤶ <arg type="Player" name="player">the <page>Global.LocalPlayer</page></arg>⤶ <ret type="boolean" name="check">Return true if the property should be shown for this entity.</ret> </callback> </item> <item name="Checked" type="function"> Required for toggle properties (clientside). <callback> <arg type="table" name="self">the property table</arg> <arg type="Entity" name="ent">the entity the player clicked</arg> <arg type="table" name="tr">the player's eye trace</arg> <ret type="boolean" name="check">Return true if the property should appear checked in the UI.</ret> </callback> </item> <item name="Action" type="function"> Called **clientside** when the property is clicked <callback> <arg type="table" name="self">the property table</arg> <arg type="Entity" name="ent">the entity the player clicked</arg> <arg type="table" name="tr">the player's eye trace</arg> </callback> When appropriate, within this function you can call `self:MsgStart()`, write data with the <page>net</page>.`Write*` functions, and finish with `self:MsgEnd()`. This will activate the `Receive` function on the server. In most cases, you will want to send the entity to the server, as it's not done by default. </item> <item name="Receive" type="function"> Called **serverside** if the client sends a message in the `Action` function (see above). <callback> <arg type="table" name="self">the property table</arg> <arg type="number" name="len">the net message length, although this includes the property identifier used internally (the name of the property)</arg> <arg type="Player" name="ply">the player who clicked the property</arg> </callback> You can read data received from the client with the <page>net</page>.`Read*` functions. It's good practice to check <page>GM:CanProperty</page> here via <page>gamemode.Call</page> or <page>hook.Run</page>. </item> <item name="MenuOpen" type="function"> Called **clientside** when the property option has been created in the right-click menu. This is not called for toggle properties! <callback> <arg type="table" name="self">the property table</arg> <arg type="DMenuOption" name="option">the menu option</arg> <arg type="Entity" name="ent">the entity the player right-clicked</arg> <arg type="table" name="tr">the player's eye trace</arg> </callback> </item> <item name="OnCreate" type="function"> Same as `MenuOpen`, but also called for toggle properties and has different arguments. This is called immediately after `MenuOpen`, but nothing happens in between so you should only ever use one or the other. <callback> <arg type="table" name="self">the property table</arg> <arg type="DMenu" name="menu">the property menu</arg> <arg type="DMenuOption" name="option">the menu option</arg> </callback> </item> </fields> </structure>