llGetParcelFlags

From Second Life Wiki
Jump to navigation Jump to search

Summary

Function: integer llGetParcelFlags( vector pos );

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
PF_FOR_SALE 0x00000004 find if a parcel is for sale
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
PF_FOR_SALE_OBJECTS 0x00000080 find if a parcel allows the objects to be purchased with the land
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
PF_SHOW_DIRECTORY 0x00001000
PF_ALLOW_DEED_TO_GROUP 0x00002000
PF_CONTRIBUTE_WITH_DEED 0x00004000
PARCEL_FLAG_LOCAL_SOUND_ONLY 0x00008000 find if a parcel restricts spatialized sound to the parcel
PF_SELL_PARCEL_OBJECTS 0x00010000 Objects on land are included as part of the land when the land is sold
PF_ALLOW_PUBLISH 0x00020000 Allow publishing of parcel information on the web
PF_MATURE_PUBLISH 0x00040000 The information on this parcel is mature
PF_URL_WEB_PAGE 0x00080000 The "media URL" is an HTML page
PF_URL_RAW_HTML 0x00100000 The "media URL" is a raw HTML string like "Foo"
PARCEL_FLAG_RESTRICT_PUSHOBJECT 0x00200000 find if a parcel restricts llPushObject
PF_DENY_ANONYMOUS 0x00400000 Deny all non identified/transacted accounts
PF_DENY_IDENTIFIED* 0x00800000
PF_DENY_TRANSACTED* 0x01000000
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
PF_ALLOW_VOICE_CHAT 0x20000000 find if a parcel allows voice chat
PF_USE_ESTATE_VOICE_CHAN 0x40000000
PF_DENY_AGEUNVERIFIED 0x80000000 find if a parcel prevent residents who aren't age-verified
  PF_* flags are internal and not exposed to the compiler (hence the strike through), despite this their values may be valid in the mask. In other words, there may be no nice name for the constant that the compiler will accept, so use the value instead. Remember that LL does not support these; they may redefine the flags without notice, this has happened in the past.
*  PF_* flags in red have been removed from the source code, the values may get reassigned and reused for flags with different meanings!

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

Search JIRA for related Issues

Tests

•  llGetParcelFlags Test

Source

Footnotes

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

Signature

function integer llGetParcelFlags( vector pos );