changed
- Category: Asset Permissions
- Category: Linkset Target
- Category: Media
- Category: Prim Appearance
- Category: Prim Inventory
- Category: Prim Media
- Category: Region
- Category: Teleport
- Category: Script
- Category: Sit
- Feature: Avatars
- Feature: Communications
- Feature: Data Storage
- Feature: Events
- Feature: Inventory
- Feature: Prims
- Feature: Textures & Materials
changed(integer changes// A bitfield of CHANGED_* flags representing what changed. Values: ChangeType
) { … }Multiple changes can be represented in a single event, so use bitwise arithmetic.
Various changes to the object/prim trigger this event.
changed(integer changes){
}Specification
Section titled “Specification”| Flag | Description | Scope | |
|---|---|---|---|
CHANGED_INVENTORY | 0x001 | Prim inventory has changed1. | prim |
CHANGED_COLOR | 0x002 | Prim color or alpha parameters have changed. | prim |
CHANGED_SHAPE | 0x004 | Prim shape has changed. | prim |
CHANGED_SCALE | 0x008 | Prim scale has changed. | prim |
CHANGED_TEXTURE | 0x010 | Prim texture parameters have changed. | prim |
CHANGED_LINK | 0x020 | The number of prims making up the object or avatars seated on the object have changed. | object |
CHANGED_ALLOWED_DROP | 0x040 | A user other than the owner (or the owner if the object is no-mod) has added inventory to the prim. | prim |
CHANGED_OWNER | 0x080 | The object has changed owners. | object |
CHANGED_REGION | 0x100 | The object has changed region. | object |
CHANGED_TELEPORT | 0x200 | The avatar to whom this object is attached has teleported. | object |
CHANGED_REGION_START | 0x400 | The region this object is in has just come online. | region |
CHANGED_MEDIA | 0x800 | Prim Media has changed. | prim |
CHANGED_RENDER_MATERIAL | 0x1000 | Render Material has changed. | prim |
Caveats
Section titled “Caveats”- This event will trigger in any script using it (in its current running state) whether the script be in a child or root prim of a
link_set, e. g., a changed event in a script in the wheel (child prim) of a car will trigger when any avatar sits on or stands from the seat (root prim) of that car. CHANGED_SCALEwill fire when the scale of at least one prim in the linked object has changed. Only the root prim will receive this event.
Examples
Section titled “Examples”Example 1
default{ changed(integer change) { // note that it's & and not &&... it's bitwise! if (change & CHANGED_INVENTORY) { llOwnerSay("The inventory has changed."); } if (change & CHANGED_COLOR) { llOwnerSay("The color or alpha changed."); } if (change & CHANGED_SHAPE) { llOwnerSay("The prims shape has changed."); } if (change & CHANGED_SCALE) { llOwnerSay("The prims size has changed."); } if (change & CHANGED_TEXTURE) { llOwnerSay("The prims texture or texture attributes have changed."); } if (change & CHANGED_LINK) { llOwnerSay("The number of links have changed."); } if (change & CHANGED_ALLOWED_DROP) { llOwnerSay("The inventory has changed as a result of a user without mod permissions "+ "dropping an item on the prim and it being allowed by the script."); } if (change & CHANGED_OWNER) { llOwnerSay("The owner of the object has changed."); } if (change & CHANGED_REGION) { llOwnerSay("The region the object is in has changed."); } if (change & CHANGED_TELEPORT) { llOwnerSay("The object has been teleported while attached."); } if (change & CHANGED_REGION_START) { llOwnerSay("The regions has just restarted."); } }}For the same action to be called for multiple changes we can use the following syntax:
default{ changed(integer change) { if(change & (CHANGED_OWNER | CHANGED_INVENTORY)) // Either of the changes will return true. llResetScript(); }}-
Always test the value of change for the specific
CHANGED_*flags you are interested in, unless you want your script to act upon any change that can cause a changed event to trigger.- New
CHANGED_*flags, bugs and bug fixes could conceivably be added by LL at any time. Scripts should be written under the assumption that they will receive changed events not expected at the time or place of writing. For future proof scripts, use bitwise conditions as in the examples.
- New
-
See
llGetOwnerfor a full discussion on(change & CHANGED_OWNER) -
CHANGED_INVENTORYwill also trigger when inventory permissions are changed, a new feature request for a CHANGED_PERMISSIONS flag to trigger when the object permissions are changed can be voted for at SCR-4112 -
If leaving a state from within a
changedevent that registers a change just before the state change, on return to that state, the changed event will trigger. For example —
default{ changed(integer change) { if(change & CHANGED_LINK) { integer links = 0; if(llGetObjectPrimCount(llGetKey()) < (links = llGetNumberOfPrims())) { llUnSit(llGetLinkKey(links)); state whatever; } else llOwnerSay("Some kind of linking or unlinking has changed me but, I am not being sat on."); // This will be chatted after returning to the default state. } }}state whatever10 collapsed lines
{ state_entry() { llSetTimerEvent(10.0); } timer() { state default; }}Known issues
Section titled “Known issues”From the issue templates included by the wiki article:
- SCR-411 (nf): CHANGED_PERMISSIONS new feature request.
- SVC-2549 (bug): <code>changed(CHANGED_SCALE)</code> is triggered only in root prim instead of rescaled prim.
Footnotes
Section titled “Footnotes”-
CHANGED_INVENTORYwon’t be triggered if the inventory change was caused by a script function or a user taking advantage ofllAllowInventoryDrop↩ -
Remember, as of 2024, this may be an archived vote. ↩