llGetParcelPrimCount

From Second Life Wiki
Revision as of 18:40, 12 January 2014 by Strife Onizuka (talk | contribs) (Template bug... sorry;)
Jump to navigation Jump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

Summary

Function: integer llGetParcelPrimCount( vector pos, integer category, integer sim_wide );

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

• vector pos position in region coordinates (z component is ignored)
• integer category a PARCEL_COUNT_* flag
• integer sim_wide boolean, TRUE[1] searches parcels in the region with the same owner as the targeted parcel, FALSE searches only the targeted parcel

Specification

If sim_wide is...

  • TRUE then the return is the combined object land impact used on all parcels in the sim owned by the specified parcel's owner of the category requested.[1]
  • FALSE then the return is the object land impact used of the category requested on the parcel specified.

Category Description
PARCEL_COUNT_TOTAL 0 All objects on the parcel(s). Does not include temp on rez objects.
PARCEL_COUNT_OWNER 1 Objects owned by the parcel owner.
PARCEL_COUNT_GROUP 2 Objects not owned by the owner, but set to or owned by the group of the parcel.
PARCEL_COUNT_OTHER 3 Objects not set to group or owned by the owner.
PARCEL_COUNT_SELECTED 4 All objects selected or sat on.
PARCEL_COUNT_TEMP 5 All temp on rez objects.

Examples

<lsl> // gives prim usage information when touched

string primCountThisParcel(integer flag) {

   vector currentPosition = llGetPos();
   return
       (string)llGetParcelPrimCount(currentPosition, flag, FALSE);

}

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.");
   }

} </lsl> <lsl> //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);
           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();
       }
   }

}

</lsl>

See Also

Functions

•  llGetParcelMaxPrims

Deep Notes

Search JIRA for related Issues

Footnotes

  1. ^ Any value that is not zero/FALSE is treated the same as TRUE. This behavior should not be depended upon.

Signature

function integer llGetParcelPrimCount( vector pos, integer category, integer sim_wide );