Difference between revisions of "LlGetParcelPrimCount"
Jump to navigation
Jump to search
m |
m (Temp mesh is not included in the total returned by PARCEL_COUNT_TEMP) |
||
(14 intermediate revisions by 5 users not shown) | |||
Line 1: | Line 1: | ||
{{LSL_Function | {{LSL_Function | ||
|inject-2= | |inject-2= | ||
{{ | {{LSL_Function/position|pos|region=noZ}} | ||
{{LSL_Function/boolean|sim_wide|non-zero=*|td=searches parcels in the region with the same owner as the targeted parcel|fd=searches only the targeted parcel|bool=*}} | {{LSL_Function/boolean|sim_wide|non-zero=*|td=searches parcels in the region with the same owner as the targeted parcel|fd=searches only the targeted parcel|bool=*}} | ||
|func_id=325|func_sleep=0.0|func_energy=10.0 | |func_id=325|func_sleep=0.0|func_energy=10.0 | ||
|func=llGetParcelPrimCount|return_type=integer | |func=llGetParcelPrimCount|return_type=integer | ||
|p1_type=vector|p1_name=pos|p1_desc | |p1_type=vector|p1_name=pos|p1_desc | ||
|p2_type=integer|p2_name=category|p2_desc=a PARCEL_COUNT_* flag | |p2_type=integer|p2_name=category|p2_desc=a PARCEL_COUNT_* flag | ||
|p3_type=integer|p3_name=sim_wide|p3_desc | |p3_type=integer|p3_subtype=boolean|p3_name=sim_wide|p3_desc | ||
|func_footnote | |func_footnote | ||
|func_desc | |func_desc | ||
|return_text=that is the | |return_text=that is the total [http://community.secondlife.com/t5/English-Knowledge-Base/Calculating-land-impact/ta-p/974163 land impact] of objects on the parcel at {{LSLP|pos}} of the given {{LSLP|category}} | ||
|spec=If | |spec=If {{LSLP|sim_wide}} is... | ||
*{{#var:TRUE}} then the return is the combined | *{{#var: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.{{Footnote|handle=non-zero}} | ||
*{{#var:FALSE}} then the return is the | *{{#var:FALSE}} then the return is the object land impact used of the category requested on the parcel specified. | ||
|caveats | |caveats= | ||
|constants | * Temp mesh is not included in totals for PARCEL_COUNT_TEMP | ||
|constants={{LSL Constants/Parcel Prim Count}} | |||
|examples= | |examples= | ||
< | <syntaxhighlight lang="lsl2"> | ||
// 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."); | |||
} | |||
} | |||
</syntaxhighlight> | |||
<syntaxhighlight lang="lsl2"> | |||
//Sim-wide scanner to count prim use in each parcel | |||
list gPrclID; | |||
integer gTotPrims; | |||
float gX; | |||
float gY; | |||
string gObjName; | |||
integer gNUM; | |||
default | 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) | 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(); | |||
} | |||
} | } | ||
}</ | } | ||
</syntaxhighlight> | |||
|helpers | |helpers | ||
|also_functions= | |also_functions= | ||
Line 42: | Line 133: | ||
|also_events | |also_events | ||
|also_tests | |also_tests | ||
|also_articles | |also_articles=For a detailed explanation on how the land impact is calculated, see also [https://community.secondlife.com/forums/topic/83294-prims-prim-equivalent-land-impact-a-too-long-guide/ Jenni Darkwatch's post] from late 2011. | ||
|notes | |notes | ||
|permission | |permission | ||
|negative_index | |negative_index | ||
|haiku={{Haiku|It's a dreadful night|When an extra prim impacts|more than land can hold}} | |||
|sort=GetParcelPrimCount | |sort=GetParcelPrimCount | ||
|cat1=Parcel | |cat1=Parcel |
Latest revision as of 09:48, 3 October 2023
LSL Portal | Functions | Events | Types | Operators | Constants | Flow Control | Script Library | Categorized Library | Tutorials |
Summary
Function: integer llGetParcelPrimCount( vector pos, integer category, integer sim_wide );0.0 | Forced Delay |
10.0 | Energy |
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
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. |
Caveats
- Temp mesh is not included in totals for PARCEL_COUNT_TEMP
Examples
// 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.");
}
}
//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();
}
}
}
See Also
Functions
• | llGetParcelMaxPrims |