Difference between revisions of "Changed"

From Second Life Wiki
Jump to navigation Jump to search
(Added caveat. Really not sure about this edit. The info is good but I'm pretty sure Strife would not approve of the style.)
(*fingerwag* check those changes!)
Line 4: Line 4:
|p1_type=integer
|p1_type=integer
|p1_name=change  
|p1_name=change  
|p1_desc=[[bit field]] of CHANGE_* flags
|p1_desc=[[bit field]] of CHANGED_* flags
|event_footnote=Multiple changes can be represented in a single event, so use bitwise arithmetic.
|event_footnote=Multiple changes can be represented in a single event, so use bitwise arithmetic.
|event_desc=Various changes to the object/prim trigger this event.
|event_desc=Various changes to the object/prim trigger this event.
|constants={{LSL Constants Changed}}
|constants={{LSL Constants Changed}}
|spec
|spec
|caveats=If leaving a [[state]] from within a changed event that registers a change just before the [[state]] change, on return to that state the changed event will trigger. For example -
|caveats=* Always test the value of '''change''', even if your script doesn't seem to need it now. New CHANGED_* triggers are added once in a while, and a script can do surprising things when unexpected events suddenly come in.
*If leaving a [[state]] from within a changed event that registers a change just before the [[state]] change, on return to that state the changed event will trigger. For example -
<lsl>default
<lsl>default
{
{

Revision as of 08:54, 21 July 2011

Description

Event: changed( integer change ){ ; }

Various changes to the object/prim trigger this event.

• integer change bit field of CHANGED_* flags

Multiple changes can be represented in a single event, so use bitwise arithmetic.

Flag Description Scope
CHANGED_INVENTORY 0x001 Prim inventory has changed[1]. 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. Caveat: This parameter will be supported in the upcoming GLTF Materials project. Currently it will only work in supported testing areas with a supported test viewer. prim

Caveats

  • Always test the value of change, even if your script doesn't seem to need it now. New CHANGED_* triggers are added once in a while, and a script can do surprising things when unexpected events suddenly come in.
  • If leaving a state from within a changed event that registers a change just before the state change, on return to that state the changed event will trigger. For example -

<lsl>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 whatever {

   state_entry()
   {
       llSetTimerEvent(10.0);
   }
   timer()
   {
       state default;
   }

}</lsl>


Examples

<lsl>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.");
       }
   }

}</lsl>For the same action to be called for multiple changes we can use the following syntax.<lsl>default {

   changed(integer change)
   {
       if(change & (CHANGED_OWNER

Notes

See llGetOwner for a full discussion on " (change & CHANGED_OWNER) "

Deep Notes

Footnotes

  1. ^ CHANGED_INVENTORY won't be triggered if the inventory change was caused by a script function or a user taking advantage of llAllowInventoryDrop

Signature

event void changed( integer change );