Setting up Objects for +Traits & @Traits Commands
The +traits
staff command is used to edit the traits properties of an object to any value using a web interface. Which is particular useful for StoryBuilders when testing new Shared objects, or StoryPlotters to make unique spawn for a user request or as a plot item in a game.
The @traits
OOC user command, if enabled on a particular ChatTheatre, will allow regular users to also edit the traits of an item, but they are restricted to more limited lists of specific values for each trait.
Overview of +Traits
Though properties named traits:*
are used for many purposes, the most common use is for custom adjectives used in descriptions of details.
export:traits:adj-map
- watched adjective traits and what detail they appy to. REQUIRED FOR +TRAITS.export:traits:sname-map
- watched noun traits and what detail they apply toexport:traits:adj-map-restricted
- subset the traits for OOC user editing with @traitsexport:traits:sname-map-restricted
- subset of noun traits for OOC user editing with @traits.export:traits:adj-map:options
- list of allowed values for adjective traits for OOC user editing with @traits. REQUIRED FOR @TRAITS
Key Scripts & Objects for +Traits
???
objectname
- purpose
Converting an Object for +Traits
If you are not cloning an existing [[SharedSystem]] object, you'll need to convert it (otherwise, just skip to next section).
The first step to converting is to use the +sharify <woename>
command. If you get an error, run it twice.
Next you may need to use the Tree of Woe to change the parent of the object to point to a more appropriate [[SharedSystem]] UR:objects that leads to one of the grandparent UR:objects that have the [[SharedSystem]] Merry Scripts in them.
Good candidates are:
Shared:Local:clothing:UrClothing
Modifying an Object for +Traits
You'll need to decide which object in your UR parent heirarchy you want your to have your traits properties in. For instance, for most kinds of pants it is in Shared:clothing:ageless:leggings:pants-nopockets
as that is the "least unique" pair of pants.
Then you'll need to set
Special Properties
export:traits:adj-map
- List of +staff editible adjective traits
This is the core:property with a mapping list of adjective traits that are editible by staff using the +traits <local spawned object>
command.
These traits are watched, and if are changed (leveraging the setprop-post
signal), the adjectives are added or removed from the object.
This property is REQUIRED for the Traits System to function, in particular the +traits
staff command.
By convention, all [[SharedSystem]] [[ClothingSystem]] objects should have at minimum trait:color
and trait:material
properties for the prime "default" detail:
([ "color":({ "default" }), "material":({ "default" }) ])
An example from a more complex clothing object:Shared:clothing:ageless:leggings:pants-nopockets
:
([ "color":({ "default" }), "condition":({ "default" }), "detail:fly:type":({ "fly" }), "fit":({ "default" }), "material":({ "default" }), "pattern":({ "default" }), "style":({ "default" }) ])
Note in the above example that with trait:detail:fly:type
when property value changes, the adjective for the the detail "fly", is changed, not the advjective in the default detail.
export:traits:sname-map
- List of +staff editable name variant traits
This is a core:property with the mapping list of nount (sname/pname???) traits that are editible by staff using the +traits <local spawned object>
command.
These traits are watched, and if are changed (leveraging the setprop-post
signal), rather than adjectives being changed, the appropriate nouns (snames/pnames???) are added or removed from the object.
This is particularly useful in situations where there are disjoint synonyms: all jeans are pants, but not all pants are jeans.
The original noun (sname/pname???) defined in the object will always function, so a trait:variant
value of jeans
will still always have the parent's noun of pants
if it was defined there. (??? What if there is no sname in the prime detail?)
If you want variants to be editable in +traits
you need:
([ "variant":({ "default" }) ])
We use the property name trait:variant
by convention in [[SharedSystem]] [[ClothingSystem]] objects, but these nount (sname/pname???) traits can have a different property name, there can be multiple of them, and they can refer to other details than the default detail.
export:traits:adj-map:restricted
- List values available to OOC user editible adjective traits
If this property doesn't exist, all the adjective traits listed in export:traits:adj-map
are available to the @traits
OOC user command.
However, in many case it can be useful to give Users a smaller list of adjective traits to edit with @traits
OOC user command, than what is available to the +traits
staff command.
An example from a relatively simple object: Shared:clothing:ageless:accessories:belt-simple
does not allow editing of the trait:craft
and trait:design
properties.
([ "color":({ "default" }), "condition":({ "default" }), "material":({ "default" }), "style":({ "default" }) ])
export:traits:sname-map:restricted
- List values available to User OOC editible noun traits
If this property doesn't exist, all the noun traits listed in export:traits:noun-map
are available to the User OOC @traits
command.
However, you may wish to not allow users to edit all the noun traits.
You can completely turn them off with
([ "" ])
Of if there are multiple noun traits, delete one or more of them.
export:traits:adj-map:options
- List of User OOC editable adjective options
With the @traits
OOC user command, a limited list of adjective choices for each trait is available rather than the open choices given to+traits
staff command.
This property is REQUIRED for the @traits
OOC user command to function, but is not required for the +traits
staff command.
Most Shared objects have a master list for export:traits:adj-map:options
, for instance, for clothing it is in Shared:Local:clothing:UrClothing
. However, it can be overridden in any child for more limited options.
Note that all the adjective choices except for trait:color
& trait:cloth
have "" aka ‘nil' entries in them. This allows for that adjective choice to be optional.
For another example of use of "" nil values, note inside of Shared:Local:clothing:UrClothing
you'll see that a nil fly type is possible: "detail:fly:type":({ "", "button", "zipper" }),
This is used by the SAM tags in the prime examine and detail:fly of pants so that the look and examine descriptions to say "There is no fly."
Another example of fewer adjective choices for use in the @traits
OOC user command is in a relatively simple belt object Shared:clothing:ageless:accessories:belt-simple
. This list is different and overrides Shared:Local:clothing:UrClothing
as belt's are not made of cloth:
([ "color":({ "black", "blue", "brown", "gray", "grey", "green", "khaki", "maroon", "navy", "purple", "red", "tan", "white", "yellow" }), "condition":({ "", "battered", "clean", "dirty", "filthy", "frayed", "grubby", "new", "old", "pristine", "ragged", "ripped", "soiled", "starched", "tattered", "torn", "worn" }), "fit":({ "", "loose", "snug", "tight" }), "material":({ "cotton", "leather", "silk", "terry-cloth" }), "style":({ "", "dress", "plain", "thick", "thin" }) ])
Note that there isn't a export:traits:adj-map:options:restricted
property, however, if there are property values in this mapping that are not listed in export:traits:adj-map
or export:traits:adj-map:restricted
, they will not be seen by user in the @traits
OOC user command.
export:traits:sname-map:options
- List of User OOC editable adjective options
Similarly to adjective options, you may a limited list of noun choices for each trait is available rather than the open choices given to+traits
staff command.
An example from a more complex clothing object: Shared:clothing:ageless:leggings:pants-nopockets
we allow four variants, but do not allow long-johns, knickers, etc. that could be added with the +traits
staff command:
([ "variant":({ "jeans", "pants", "slacks", "trousers" }) ])
By convention, we always add the prime detail noun in the variant list, however, note that can also offer an option "" aka ‘nil' entry for detail noun, which allows for that noun choice to be optional.
Master UrClothing
For reference, these are the default details available to the @traits
OOC user command found in export:traits:adj-map:options
inside Shared:Local:clothing:UrClothing
Currently supported are:
$(trait:cloth)
$(trait:condition)
$(trait:crafted)
$(trait:design)
$(trait:detail:collar:type)
$(trait:detail:long-sleeves:type)
$(trait:detail:short-sleeves:type)
$(trait:fit)
$(trait:style)
Note in particular that $(trait:design)
and $(trait:design
are available in the +trait
staff commands but largely restricted from the @traits
OOC user command.
([
"cloth":({ "broadcloth", "chevoir", "corduroy", "cotton", "denim", "duck", "flannel", "leather", "moleskin", "nylon", "rayon", "rubber", "serge", "silk", "tweed", "twill", "whipcord", "wool", "worsted" }),
"color":({ "black", "blue", "brown", "dove", "gray", "grey", "green", "hyacynth", "khaki", "maroon", "navy", "purple", "red", "tan", "white", "yellow" }),
"condition":({ "", "battered", "clean", "dirty", "filthy", "frayed", "grubby", "neatly-pressed", "moth-eaten", "new", "old", "pristine", "ragged", "ripped", "soiled", "starched", "tattered", "threadbare", "torn", "worn", "unkempt", "unpressed" }),
"crafted":({ "", "carved", "embossed", "embroidered", "printed" }), "design":({ "", "rose", "roses" }),
"detail:collar:type":({ "", "band", "bib", "bishop", "butterfly", "button-band", "button-down", "chelsea", "classic", "clerical", "club", "cossack", "cutaway", "dutch", "formal", "frilled", "longpoint", "pinned", "ring", "ruffle", "sailor", "shirt", "stand", "spread", "tab", "turtleneck", "tuxedo", "van-dyke", "wing", "wing-tip" }),
"detail:long-sleeves:type":({ "", "bag", "baggy", "balloon", "barrel", "batwing", "bell", "bishop", "cuffed", "cold-shoulder", "classic", "dolman", "elbow-patched", "epaulet", "flutter", "gauntlet", "gibson-girl", "hanging", "juliet", "kimono", "lantern", "loose", "magyar", "mahoitres", "marmaluke", "mutton-leg", "off-shoulder", "over", "padded-shoulder", "peasant", "poet", "puffed", "regular", "slashed", "slit", "tight", "tailored", "well-tailored", "virago" }),
"detail:short-sleeves:type":({ "", "angel", "baggy", "banded", "bracelet", "butterfly", "cap", "cape", "classic", "cold-shouldered", "draped", "drawstring", "epaulet", "extended-cap", "frill", "flute", "flared", "loose", "melon", "off-shoulder", "pagada", "puff", "puffed", "raglan", "regular", "slashed", "slit", "square-armhole", "strapped", "tailored", "tight", "t-shirt", "well-tailored", "wing-ruffle" }),
"fit":({ "", "baggy", "form-fitting", "loose", "regular", "snug", "tight" }), "pattern":({ "", "checked", "herringbone", "patterned", "plaid", "pinstriped", "polkadot", "striped", "windowpane-check" }),
"style":({ "", "crude", "chic", "dapper", "diaphanous", "dowdy", "drab", "dress", "elegant", "fashionable", "flimsy", "formal", "gauzy", "heavy", "old-fashioned", "outdated", "plain", "patched", "rakish", "shabby", "sheer", "slashed", "sleek", "smart", "shoddy", "solid", "stylish", "thick", "thin", "unstylish" }) ])
Credits
The intial +traits command was created by @Zwoc (Kalle Alm) as part of the [[SharedSystem]] in 2006, and this version of +traits and the new @traits was been updated by @Roo (Sarah Tacket) in 2020 and examples and documentation by @ChristopherA (Christopher Allen)