Skip to content
lsl.devlsl.devLSL Dev

llGetParcelPrimCount

function
Function syntax
integer llGetParcelPrimCount(
  1. vector pos,// Position vector in region coordinates (the Z component is ignored).
  2. integer category,// PARCEL_COUNT_* category flag. Values: ParcelPrimCountCategory
  3. integer sim_wide// Boolean. If TRUE, searches all parcels in the region owned by the targeted parcel's owner; if FALSE, searches only the specified parcel.
);
Returns
integer
Energy
10

Returns an integer representing the total land impact of objects on the parcel at pos in the specified category. If sim_wide is TRUE, returns combined usage for all regional parcels owned by the parcel owner; if FALSE, returns usage for only the specified parcel.

Returns an integer that is the total land impact of objects on the parcel at pos of the given category

How to use
integer result = llGetParcelPrimCount(ZERO_VECTOR, 0, 0);

If sim_wide is…

  • then the return is the object land impact used of the category requested on the parcel specified.
CategoryDescription
PARCEL_COUNT_TOTAL0All objects on the parcel(s). Does not include temp on rez objects.
PARCEL_COUNT_OWNER1Objects owned by the parcel owner.
PARCEL_COUNT_GROUP2Objects not owned by the owner, but set to or owned by the group of the parcel.
PARCEL_COUNT_OTHER3Objects not set to group or owned by the owner.
PARCEL_COUNT_SELECTED4All objects selected or sat on.
PARCEL_COUNT_TEMP5All temp on rez objects.
Example 1
5 collapsed lines
// gives prim usage information when touched
string primCountThisParcel(integer flag)
{
vector currentPosition = llGetPos();
return
(string)llGetParcelPrimCount(currentPosition, flag, FALSE);
}
23 collapsed lines
default
{
touch_start(integer total_number)
{
llSay(PUBLIC_CHANNEL,
"The total land impact of objects on this parcel is " + primCountThisParcel(PARCEL_COUNT_TOTAL) + ".");
llSay(PUBLIC_CHANNEL,
primCountThisParcel(PARCEL_COUNT_OWNER) + " LI for objects owned by the parcel owner.");
llSay(PUBLIC_CHANNEL,
primCountThisParcel(PARCEL_COUNT_GROUP) + " LI for objects set to or owned by the parcel's group.");
llSay(PUBLIC_CHANNEL,
primCountThisParcel(PARCEL_COUNT_OTHER) + " LI for objects not set to the parcel group or owned by the parcel owner.");
llSay(PUBLIC_CHANNEL,
primCountThisParcel(PARCEL_COUNT_SELECTED) + " LI for selected objects.");
llSay(PUBLIC_CHANNEL,
primCountThisParcel(PARCEL_COUNT_TEMP) + " LI for temp-on-rez objects.");
}
}
Example 2
46 collapsed lines
//Sim-wide scanner to count prim use in each parcel
list gPrclID;
integer gTotPrims;
float gX;
float gY;
string gObjName;
integer gNUM;
default
{
state_entry()
{
gObjName = llGetObjectName();
gPrclID = [];
gTotPrims = 0;
// Begin scanning at the SW <0.0,0.0,0.0> corner of the sim
gX = 4.0;
gY = 4.0;
}
on_rez(integer start)
{
llSetPos(llGetPos() + <0.0,0.0,0.5>);
llSetText("Touch to start scan",<1.0,1.0,0.0>,1.0);
}
touch_start(integer total_number)
{
llSetText("Scanning ....",<1.0,1.0,0.0>,1.0);
gNUM = 0;
llRegionSayTo(llGetOwner(),0,"Scan started on " + llGetRegionName());
llSetTimerEvent(0.1);
}
timer()
{
//Grab the parcel's ID and name at position <gX, gY, 100.0>
list parcel = llGetParcelDetails(<gX,gY,100.0>,[PARCEL_DETAILS_ID,PARCEL_DETAILS_NAME]);
key temp = llList2Key(parcel,0);
string parcel_name = llList2String(parcel,1);
if (parcel_name == "")
{
parcel_name = "(no name)";
}
if (!~llListFindList(gPrclID,[temp])) //Scan at this location if this parcel was not scanned earlier
{
++gNUM;
llSetObjectName((string)gNUM);
integer Count = llGetParcelPrimCount(<gX,gY,100>,PARCEL_COUNT_TOTAL,FALSE); //Do not include other parcels owned by llGetOwner()
gTotPrims += Count;
llRegionSayTo(llGetOwner(),0, "/me "+ parcel_name + " @ <"+(string)gX+","+(string)gY+",Z> = " + (string)Count);
21 collapsed lines
gPrclID += [temp]; //Add this parcel to the "previously scanned" list
}
// Increment X and Y in successive scans to look at the entire sim in 8m square blocks
if (gX < 256.0)
{
gX +=8.0;
}
if (gX > 256.0)
{
gY += 8.0;
gX = 4.0;
}
if (gY > 256.0) // Reached NE corner
{
llSetObjectName(gObjName);
llRegionSayTo(llGetOwner(),0,"Scan finished. Total land impact = " + (string)gTotPrims + " in " + (string)llGetListLength(gPrclID) + " parcels (not counting temp rez prims).");
llSetText("Touch to start scan",<1.0,1.0,0.0>,1.0);
llResetScript();
}
}
}

For a detailed explanation on how the land impact is calculated, see also Jenni Darkwatch’s post from late 2011.

Original wiki source

Some wiki templates and tables need their original context. View this article on the Second Life Wiki. Technical wording and examples are retained from the source; historical guidance may differ from current behavior.