Properties. These are used a LOT on FR. We use them for long term spell effects, to regulate quests, to save data on players or items. The basic "property" is permanent add_property("xxxxx",value) will add the property "xxxxx" to something. query_property("xxxxx") will return value. (So will query_old_property("xxxxx") see below) Thats the basic propety system most Discworld based MUD's inherited. We wanted something that would allow long timeouts on players and which didn't require "call_out's". I won't go into the details here but call_out has a few limitations, it's variable times as far as players are concerned, and it doesn't save through logouts. To overcome these problems we added the timed property. add_timed_property("xxxxx",value,duration) This lasts for "duration" player turns , and then wears off. query_property("xxxxx") will return value so will query_timed_property("xxxxx") Note: call query_time_remaining() will return the time remaining on a timed property. Note that the duration of a timed property can be several PLAYING weeks. The duration is frozen while the player is logged off. The final class of properties are static properties. We added these for effects that ARE supposed to wear off at logout, but not before. add_static_property("xxxxx",value) This lasts on a player or item until logout. query_property("xxxxx") will return value so will query_static_property("xxxxx") In reality query_property() operates as follows. if a matching timed property exists, query_timed_property() is returned else if a static property exists query_static_property() is returned else query_old_property() is returned. This is quite important, it allows us to give NPC's spell resistance easilly however :), a clued up wizards minor resistance, which uses a timed property can over-ride that. For example, spell resistance works on a property value , nominally 0-100% (tho it can go -ve or > 100%) We simply add the timed property to the player. All attacks of the appropriate type use query_property() to see if the resistance is in effect. If the property hasn't expired the % resistance is returned, otherwise the timed property is removed and 0 is returned. The beauty of this is that the property code does NOTHING unless it's needed, it costs no CPU unless it's queried. The property DATA may be on the player for months for even a short property, but will simply return 0 and dissapear when queried.