LlGetParcelPrimOwners
De DigiWiki.
Version du 11 août 2012 à 15:13 par Djphil (discuter | contributions)
// Script by Falados Kapuskas // The object has the same permisions to view prim parcel owners // as its owner (In About Land >> Objects >> Object Owners ) // Example: If you can't return group object, you won't see group objects // If you can't return any objects, an empty list will be returned. // If the prim is deeded to the right group, it should always get a full list // Note: Only works on group owned land when the object owner is in the Sim // Deeded objects always work (group is always online?) // -- SETTINGS (Edit These!) -- // integer REFRESH_TIMER = 600; // Refresh Time (in seconds) vector PARCEL_POS = <128,128,0>; // A Region coordinate of a point in the parcel integer PAGE_SIZE = 8; // Number of owners to display per page on the prim integer DATA_TIMEOUT = 10; // Number of seconds to wait before giving up on dataserver events // -- END SETTINGS -- // list gQueryKeys; list gQueryIndex; list gNames; list gPrims; key gDataserver_Name; integer gPageNumber; integer gPageMax; //Updates the internal list of prim owners //Returns TRUE if there were prim owners //Returns FALSE if the prim owner list was empty integer UpdateOwnerList() { list owner_prim = llGetParcelPrimOwners(PARCEL_POS); //Empty List either means no prims in the parcel //Or we couldn't get the list. The latter is more likely if( owner_prim == [] ) { llSetText("[ERROR]\n Couldn't get Parcel Prim Owners",<1,0,0>,1.0); return FALSE; } integer i; integer n = llGetListLength(owner_prim) / 2; //Reset the lists gPrims = []; gNames = []; gQueryKeys = []; gQueryIndex = []; for( i = 0; i < n; ++i) { key owner = llList2Key(owner_prim,i*2); string name = llKey2Name(owner); if( name == "" ) { //Not in the sim //Add to the query list gNames += ["[Unknown]"]; gQueryIndex += [llGetListLength(gNames) - 1]; gQueryKeys += [owner]; } else { gNames += [name]; } gPrims += llList2Integer(owner_prim,i*2+1); } gPageNumber = 0; gPageMax = llCeil( (float)llGetListLength(gNames) / PAGE_SIZE ); return TRUE; } // Shows the prim owners starting at index 9*page // Returns TRUE if there are more pages // Returns FALSE otherwise integer ShowPrimOwners(integer page) { integer len = llGetListLength(gNames); integer offset = len-page*PAGE_SIZE; if( offset < 0 ) { return FALSE; } integer i; integer end = (integer)( llListStatistics(LIST_STAT_MIN,[len,(page+1)*PAGE_SIZE]) ); string text; for( i = PAGE_SIZE*page; i < end; ++i) { text += llList2String(gNames,i) + " - " + (string)llList2Integer(gPrims,i) + "\n"; } llSetText(text,<1,1,1>,1.0); return TRUE; } // Set-up phase default { state_entry() { llSetText("",<1,1,1>,1.0); if(UpdateOwnerList()) { if( gQueryKeys == [] ) { state display; } else { state lookup; } } } // If there is an error, touch to reset touch_start(integer i){llResetScript();} } // Display the list // Allow page flipping via touch state display { state_entry() { ShowPrimOwners(gPageNumber); llSetTimerEvent(REFRESH_TIMER); } touch_start(integer i) { if( !ShowPrimOwners(++gPageNumber) ) { gPageNumber = 0; ShowPrimOwners(0); } } timer() { state default; } } // Look up all names for people that are not in the sim // Go to the display state when finished state lookup { state_entry() { if( gQueryKeys == [] ) state display; llSetTimerEvent(DATA_TIMEOUT); gDataserver_Name = llRequestAgentData( llList2Key(gQueryKeys,0) , DATA_NAME ); } dataserver( key request_id, string data) { if( request_id == gDataserver_Name ) { llSetText("Loading Names .. " + (string)llGetListLength(gQueryKeys),<1,.5,0>,1.0); if( llStringTrim(data,STRING_TRIM) != "" ) { integer i = llList2Integer(gQueryIndex,0); gNames = llListReplaceList(gNames,[data],i,i); } gQueryKeys = llDeleteSubList(gQueryKeys,0,0); gQueryIndex = llDeleteSubList(gQueryIndex,0,0); if( gQueryKeys != [] ) { llSetTimerEvent(DATA_TIMEOUT); gDataserver_Name = llRequestAgentData( llList2Key(gQueryKeys,0) , DATA_NAME ); } else { state display; } } } timer() { //Skip it, move on gQueryKeys = llDeleteSubList(gQueryKeys,0,0); gQueryIndex = llDeleteSubList(gQueryIndex,0,0); gDataserver_Name = llRequestAgentData( llList2Key(gQueryKeys,0) , DATA_NAME ); } }


