SCRIPTED
Revision as of 02:27, 22 May 2010 by Mako Nozaki (talk | contribs)
LSL Portal | Functions | Events | Types | Operators | Constants | Flow Control | Script Library | Categorized Library | Tutorials |
Description
Constant: integer SCRIPTED = 0x8;The integer constant SCRIPTED has the value 0x8
If it is contained in the result of llDetectedType(), it means it is containing any active script.
If it is used as an filter of llSensor() or llSensorRepeat(), it will search for objects that has any script, which is doing anything in simulator just now.
Caveats
Related Articles
Constants
|
Functions
• | llDetectedType | |||
• | llSensor | |||
• | llSensorRepeat |
Examples
Using llDetectedType in collision event:
integer type;
default
{
state_entry()
{
llVolumeDetect(TRUE);
}
collision_start(integer detected)
{
type = llDetectedType(0);
if (type == AGENT)// = 1
{
llSay(0, "This is impossible. Since there is no avatar who doesn't require the physical calculation.");
}
else if (type == ACTIVE)// = 2
{
llSay(0, "I have been struck by a physical object not containing any script.");
}
else if (type == PASSIVE)// = 4
{
llSay(0, "This is impossible. Non-physical objects cannot trigger this event.");
}
else if (type == SCRIPTED)// = 8
{
llSay(0, "This is impossible. Since there is no object which isn't physical nor non-physical.");
}
else if (type == (AGENT | ACTIVE) ) // 1 + 2
{
llSay(0, "I have been struck by an avatar.");
}
else if (type == (SCRIPTED | ACTIVE) ) // = 8 + 2
{
llSay(0, "I have been struck by a physical object containing any script.");
}
else if (type == (SCRIPTED | PASSIVE) ) // = 8 + 4
{
llSay(0, "This is impossible. Non-physical objects cannot trigger this event.");
}
}
}
Using llDetectedType in sensor event:
default
{
touch_start(integer numberDetected)
{
llSensor("", "", ACTIVE | PASSIVE | AGENT, 20.0, PI); // activates the sensor.
}
sensor (integer numberDetected)
{
integer i;
while(i < numberDetected)
{
integer type = llDetectedType(i);
string message;
message += (string)i + ", " + llDetectedName(i) + ", ";
list typeList;
if (type & AGENT)
{
typeList += "AGENT";
}
if (type & ACTIVE)
{
typeList += "ACTIVE";
}
if (type & PASSIVE)
{
typeList += "PASSIVE";
}
if (type & SCRIPTED)
{
typeList += "SCRIPTED";
}
message += llDumpList2String(typeList, "|");
llWhisper(0, message);
++i;
}
}
no_sensor()
{
// This is impossible if range = 20.0 and you are standing within 10m!
llWhisper(0, "Nothing is near me at present.");
}
}
Using filter in llSensor* functions:
// Report nearby sensed objects and avatars under sundry categories
list SenseTypes;
integer gIndex;
SenseNextType()
{
string text = llList2String( SenseTypes, gIndex);
integer tipe = llList2Integer(SenseTypes, gIndex + 1);
if (tipe)
{
llWhisper(0, text);
llSensor("", NULL_KEY, tipe, 20.0, PI);
gIndex += 2; // increment by stride
}
else
llWhisper(0, "--- Finished ---");
}
default
{
touch_start(integer detected)
{
// Make a Strided list of text and sensor type combinations
// (Can't use '|' in Global, unfortunately)
SenseTypes = [
"AGENT_BY_LEGACY_NAME", AGENT_BY_LEGACY_NAME,
"ACTIVE", ACTIVE,
"AGENT_BY_LEGACY_NAME|ACTIVE", AGENT_BY_LEGACY_NAME|ACTIVE,
"PASSIVE", PASSIVE,
"AGENT_BY_LEGACY_NAME|PASSIVE", AGENT_BY_LEGACY_NAME|PASSIVE,
"ACTIVE|PASSIVE", ACTIVE|PASSIVE,
"AGENT_BY_LEGACY_NAME|ACTIVE|PASSIVE", AGENT_BY_LEGACY_NAME|ACTIVE|PASSIVE,
"SCRIPTED", SCRIPTED,
"AGENT|SCRIPTED", AGENT|SCRIPTED,
"ACTIVE|SCRIPTED", ACTIVE|SCRIPTED,
"AGENT_BY_LEGACY_NAME|ACTIVE|SCRIPTED", AGENT_BY_LEGACY_NAME|ACTIVE|SCRIPTED,
"PASSIVE|SCRIPTED", PASSIVE|SCRIPTED,
"", 0 ];
gIndex = 0;
SenseNextType(); // Kick off the sensing sequence
}
sensor(integer detected)
{
integer x;
while (x < detected)
{
llWhisper(0, (string) (x+1) + ": " + llDetectedName(x) );
++x;
}
SenseNextType();
}
no_sensor()
{
llWhisper(0, "none");
SenseNextType();
}
}
Detecting damageable things with sensors:
default
{
state_entry()
{
llSensor("", "", SCRIPTED|AGENT|DAMAGEABLE, 20, PI);
}
no_sensor()
{
llOwnerSay("Nothing detected");
}
sensor(integer num_detected)
{
llOwnerSay("Detected " + (string)num_detected + " damageable thing(s)");
integer i;
for (i = 0; i < num_detected; ++i)
{
string name = llDetectedName(i);
integer isAgent = llDetectedType(i) & AGENT;
list types = ["Object", "Agent"];
llOwnerSay(llList2String(types, isAgent) + ": " + name);
}
}
}