# *rules* library ```lua rules.create( -- rule name name: str, -- default value default: bool, -- value change handler function [optional] handler: function ) -> int ``` Creates a rule. If a handler is specified, returns the id for deletion. > [!NOTE] > A rule is created by calling rules.create with a default value. > Rules that have not been created can be used, but resetting via rules.reset will result in setting the value to nil. ```lua rules.listen( -- rule name name: str, -- value change handler function handler: function ) -> int ``` Adds a rule value change handler. Returns the id for deletion. Also allows subscribing to a rule before it is created. ```lua rules.unlisten(name: str, id: int) ``` Removes a rule handler by id, if it exists. ```lua rules.get(name: str) -> bool | nil ``` Returns the rule value, or nil if it has not been created yet. ```lua rules.set(name: str, value: bool) ``` Sets the rule value by calling handlers. Can be used before creating a rule. ```lua rules.reset(name: str) ``` Resets the rule value to the default value. ## Standard Rules | Name | Description | Default | | ---------------------- | ----------------------------------------------------------- | ------- | | cheat-commands | Allow commands whose names are in the console.cheats array. | true | | allow-content-access | Allow the content access panel. | true | | allow-flight | Allow flight. | true | | allow-noclip | Allow noclip. | true | | allow-attack | Allow attacking entities. | true | | allow-destroy | Allow block destruction. | true | | allow-cheat-movement | Allow special quick movement keys. | true | | allow-debug-cheats | Allow cheat controls in the debug panel. | true | | allow-fast-interaction | Allow fast interaction. | true |