LlGetParcelFlags: Difference between revisions

From Second Life Wiki
Jump to navigation Jump to search
Tapple Gao (talk | contribs)
Added two functions for determining the rezzability and scriptability of a parcel
Tapple Gao (talk | contribs)
m line breaks in script comments
Line 17: Line 17:
     llSay(0,"You are not allowed to fly here!, Sorry!.");
     llSay(0,"You are not allowed to fly here!, Sorry!.");


// Answers TRUE if rezzing is permitted, FALSE if not. Rezzing can fail even if this returns true due to parcel full or server errors. Rezzing will always fail if this returns FALSE
// Answers TRUE if rezzing is permitted, FALSE if not.
// Rezzing can fail even if this returns TRUE due to parcel full or server errors.
// Rezzing will always fail if this returns FALSE
integer canRezAt(vector pos) {
integer canRezAt(vector pos) {
     integer parcelFlags = llGetParcelFlags(pos);
     integer parcelFlags = llGetParcelFlags(pos);

Revision as of 19:44, 28 July 2020

Summary

Function: integer llGetParcelFlags( vector pos );
0.0 Forced Delay
10.0 Energy

Returns a bit field (an integer) of parcel flags (PARCEL_FLAG_*) for the parcel that includes the point pos.

• vector pos position in region coordinates (z component is ignored)

Both x and y components of pos are clamped to the range [0.0, 256.0], the z component is ignored.

Flag Value Description
PARCEL_FLAG_ALLOW_FLY 0x00000001 find if a parcel allows flying
PARCEL_FLAG_ALLOW_SCRIPTS 0x00000002 find if a parcel allows outside scripts
PARCEL_FLAG_ALLOW_LANDMARK 0x00000008 find if a parcel allows landmarks to be created
PARCEL_FLAG_ALLOW_TERRAFORM 0x00000010 find if a parcel allows anyone to terraform the land
PARCEL_FLAG_ALLOW_DAMAGE 0x00000020 find if a parcel allows damage
PARCEL_FLAG_ALLOW_CREATE_OBJECTS 0x00000040 find if a parcel allows anyone to create objects
PARCEL_FLAG_USE_ACCESS_GROUP 0x00000100 find if a parcel limits access to a group
PARCEL_FLAG_USE_ACCESS_LIST 0x00000200 find if a parcel limits access to a list of residents
PARCEL_FLAG_USE_BAN_LIST 0x00000400 find if a parcel uses a ban list, including restricting access based on payment info
PARCEL_FLAG_USE_LAND_PASS_LIST 0x00000800 find if a parcel allows passes to be purchased
PARCEL_FLAG_LOCAL_SOUND_ONLY 0x00008000 find if a parcel restricts spatialized sound to the parcel
PARCEL_FLAG_RESTRICT_PUSHOBJECT 0x00200000 find if a parcel restricts llPushObject
PARCEL_FLAG_ALLOW_GROUP_SCRIPTS 0x02000000 find if a parcel allows scripts owned by group
PARCEL_FLAG_ALLOW_CREATE_GROUP_OBJECTS 0x04000000 find if a parcel allows object creation by group members or objects
PARCEL_FLAG_ALLOW_ALL_OBJECT_ENTRY 0x08000000 find if a parcel allows all objects to enter a parcel
PARCEL_FLAG_ALLOW_GROUP_OBJECT_ENTRY 0x10000000 find if a parcel only allows group (and owner) objects to enter the parcel

Examples

if (!(llGetParcelFlags(llGetPos()) & PARCEL_FLAG_ALLOW_FLY))
    llSay(0,"You are not allowed to fly here!, Sorry!.");

// Answers TRUE if rezzing is permitted, FALSE if not.
// Rezzing can fail even if this returns TRUE due to parcel full or server errors.
// Rezzing will always fail if this returns FALSE
integer canRezAt(vector pos) {
    integer parcelFlags = llGetParcelFlags(pos);
    list parcelDetails = llGetParcelDetails(pos, [PARCEL_DETAILS_OWNER, PARCEL_DETAILS_GROUP]);
    key parcelOwner = llList2Key(parcelDetails, 0);
    key parcelGroup = llList2Key(parcelDetails, 1);
 
    if (parcelFlags & PARCEL_FLAG_ALLOW_CREATE_OBJECTS) return TRUE;
    if (parcelOwner == llGetOwner()) return TRUE;
    if (!llSameGroup(parcelGroup)) return FALSE;
    if (parcelFlags & PARCEL_FLAG_ALLOW_CREATE_GROUP_OBJECTS) return TRUE;
    return FALSE;
}
 
// Answers TRUE if running scripts is permitted, FALSE if not
integer canRunScriptsAt(vector pos) {
    integer parcelFlags = llGetParcelFlags(pos);
    list parcelDetails = llGetParcelDetails(pos, [PARCEL_DETAILS_OWNER, PARCEL_DETAILS_GROUP]);
    key parcelOwner = llList2Key(parcelDetails, 0);
    key parcelGroup = llList2Key(parcelDetails, 1);
 
    if (parcelFlags & PARCEL_FLAG_ALLOW_SCRIPTS) return TRUE;
    if (parcelOwner == llGetOwner()) return TRUE;
    if (!llSameGroup(parcelGroup)) return FALSE;
    if (parcelFlags & PARCEL_FLAG_ALLOW_GROUP_SCRIPTS) return TRUE;
    return FALSE;
}

See Also

Functions

•  llGetParcelDetails
•  llGetRegionFlags

Deep Notes

Tests

•  llGetParcelFlags Test

Source

Footnotes

  1. ^ The ranges in this article are written in Interval Notation.

Signature

function integer llGetParcelFlags( vector pos );