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>