Difference between revisions of "Changed"

From Second Life Wiki
Jump to navigation Jump to search
m
(Added caveat. Really not sure about this edit. The info is good but I'm pretty sure Strife would not approve of the style.)
Line 9: Line 9:
|constants={{LSL Constants Changed}}
|constants={{LSL Constants Changed}}
|spec
|spec
|caveats
|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 -
<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
|examples=<lsl>default
{
{

Revision as of 10:58, 17 May 2010

Description

Event: changed( integer change ){ ; }

Various changes to the object/prim trigger this event.

• integer change bit field of CHANGE_* 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

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 );