Location Entry Behavior is an opt-in feature that applies a private message, standard appearance itemsets, or both when a character enters a configured map location. Operators can define reusable rules by location type and override a rule on an individual location.
data.entryBehavior override takes precedence over its type’s
configured default. If neither exists, legacy behavior for the bunny and
park_region location types remains available for compatibility.AppearanceItemSetService and retain its permission, serialization,
observation, and action-journaling guarantees.
Conditional itemset variants are resolved against the target’s latest
BC-observed appearance when the set is applied; unknown prerequisite
evidence does not select a variant. See the shared
appearance itemset reference.data.entryMessage key
suppresses the default message, and an existing data.entryAppearance key
suppresses the default appearance application. The other default action may
still run.enabled: false disables the feature for that location.This feature does not create timers, track offences, persist per-member state, block other features from releasing appearance items, or retry uncertain writes. Timers configured on appearance itemsets are passed through to BC; the shared appearance action remains the sole journal owner for each mutation.
The feature reads location-entry-behavior.rules from
prototypeGameConfig.rooms.main. Startup inserts a disabled baseline only when
neither this key nor the legacy bunny.rules key exists. When both are present,
the generic key takes precedence. Existing legacy configuration remains in
place and readable.
Room admins can manage it through the world-config commands:
!world config show room main
!world config set room main location-entry-behavior.rules <JSON policy>
!world config unset room main location-entry-behavior.rules
The admin web workspace also provides a Location entry behavior room-config section. Add reusable rules using the location-type dropdown and select appearance itemsets from the shared itemset list. The same validated generic configuration is available through the world-config command and the admin workspace.
Example:
{
"schemaVersion": 1,
"enabled": true,
"messages": {
"actionFailed": "The configured appearance could not be applied safely."
},
"locationTypes": {
"cage": {
"enabled": true,
"message": "Please respect everyone in this cage.",
"itemSets": [{ "name": "Cage profile", "itemSetKey": "appearance.cage" }]
},
"shower": {
"enabled": true,
"message": "Welcome to the shower."
}
}
}
locationTypes keys are location types from the shared location type catalog.
Each rule requires enabled and may include message, itemSets, or both.
Itemset keys refer to standard records in prototypeItemSets; manage them with
the shared appearance itemset tools.
An individual location can override a type default through its map record’s
data metadata:
{
"entryBehavior": {
"enabled": true,
"message": "Welcome to this special cage.",
"itemSets": [{ "name": "Special profile", "itemSetKey": "appearance.special-cage" }]
}
}
Use the location editor’s guided Location entry behavior override controls
to configure the enabled state, optional message, and appearance itemsets.
Choose itemsets from the shared dropdown; use Other location metadata (JSON)
only for unrelated metadata. The server validates the override before saving.
Existing data.bunnyBehavior records and legacy punishments configuration
fields remain readable; new configuration should use entryBehavior and
itemSets.
The bunny location type remains in the shared type catalog for existing
locations. Renaming this feature does not rename or migrate location records.
Disabled or unconfigured behavior does nothing. Unsupported or disabled itemsets fail without a mutation. Occupied or protected appearance groups remain untouched, and dispatched-but-unobserved writes remain unconfirmed in the normal action journal. The feature does not retry them.
Offline tests cover configuration validation and fallback, type defaults, location overrides, existing-action suppression, appearance itemset selection, action outcomes, location transitions, and listener cleanup. They do not claim to qualify live BC timer expiry.