I use this in scripts to know if rez is possible
integer canrez()
{
list parcelownerandgroup = llGetParcelDetails(llGetPos(),[PARCEL_DETAILS_OWNER,PARCEL_DETAILS_GROUP]);
list objectownerandgroup = llGetObjectDetails(llGetKey(),[OBJECT_OWNER,OBJECT_GROUP]);
integer parcelflags = llGetParcelFlags( llGetPos() );
integer result = FALSE;
if(llGetOwner() == llList2Key(parcelownerandgroup,0)) result = TRUE;
if(llList2Key(parcelownerandgroup,1) == llList2Key(objectownerandgroup,1)
&& (parcelflags &PARCEL_FLAG_ALLOW_CREATE_GROUP_OBJECTS)) result = TRUE;
if(parcelflags & PARCEL_FLAG_ALLOW_CREATE_OBJECTS) result = TRUE;
return result;
}
It not totally reliable.
It would be nice to have a llCanRez() or llCanrez(vector position)