diff options
Diffstat (limited to 'OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs')
-rw-r--r-- | OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs | 85 |
1 files changed, 85 insertions, 0 deletions
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs index 0c28bf5..6523c2d 100644 --- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs +++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs | |||
@@ -6132,6 +6132,91 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
6132 | m_host.AddScriptLPS(1); | 6132 | m_host.AddScriptLPS(1); |
6133 | return "en-us"; | 6133 | return "en-us"; |
6134 | } | 6134 | } |
6135 | /// <summary> | ||
6136 | /// http://wiki.secondlife.com/wiki/LlGetAgentList | ||
6137 | /// The list of options is currently not used in SL | ||
6138 | /// scope is one of:- | ||
6139 | /// AGENT_LIST_REGION - all in the region | ||
6140 | /// AGENT_LIST_PARCEL - all in the same parcel as the scripted object | ||
6141 | /// AGENT_LIST_PARCEL_OWNER - all in any parcel owned by the owner of the | ||
6142 | /// current parcel. | ||
6143 | /// </summary> | ||
6144 | public LSL_List llGetAgentList(LSL_Integer scope, LSL_List options) | ||
6145 | { | ||
6146 | m_host.AddScriptLPS(1); | ||
6147 | |||
6148 | // the constants are 1, 2 and 4 so bits are being set, but you | ||
6149 | // get an error "INVALID_SCOPE" if it is anything but 1, 2 and 4 | ||
6150 | bool regionWide = scope == ScriptBaseClass.AGENT_LIST_REGION; | ||
6151 | bool parcelOwned = scope == ScriptBaseClass.AGENT_LIST_PARCEL_OWNER; | ||
6152 | bool parcel = scope == ScriptBaseClass.AGENT_LIST_PARCEL; | ||
6153 | |||
6154 | LSL_List result = new LSL_List(); | ||
6155 | |||
6156 | if (!regionWide && !parcelOwned && !parcel) | ||
6157 | { | ||
6158 | result.Add("INVALID_SCOPE"); | ||
6159 | return result; | ||
6160 | } | ||
6161 | |||
6162 | ILandObject land; | ||
6163 | Vector3 pos; | ||
6164 | UUID id = UUID.Zero; | ||
6165 | if (parcel || parcelOwned) | ||
6166 | { | ||
6167 | pos = m_host.ParentGroup.RootPart.GetWorldPosition(); | ||
6168 | land = World.LandChannel.GetLandObject(pos.X, pos.Y); | ||
6169 | if (land == null) | ||
6170 | { | ||
6171 | id = UUID.Zero; | ||
6172 | } | ||
6173 | else | ||
6174 | { | ||
6175 | if (parcelOwned) | ||
6176 | { | ||
6177 | id = land.LandData.OwnerID; | ||
6178 | } | ||
6179 | else | ||
6180 | { | ||
6181 | id = land.LandData.GlobalID; | ||
6182 | } | ||
6183 | } | ||
6184 | } | ||
6185 | List<UUID> presenceIds = new List<UUID>(); | ||
6186 | |||
6187 | World.ForEachRootScenePresence( | ||
6188 | delegate (ScenePresence ssp) | ||
6189 | { | ||
6190 | // Gods are not listed in SL | ||
6191 | if (!ssp.IsDeleted && ssp.GodLevel == 0.0 && !ssp.IsChildAgent) | ||
6192 | { | ||
6193 | if (!regionWide) | ||
6194 | { | ||
6195 | pos = ssp.AbsolutePosition; | ||
6196 | land = World.LandChannel.GetLandObject(pos.X, pos.Y); | ||
6197 | if (land != null) | ||
6198 | { | ||
6199 | if (parcelOwned && land.LandData.OwnerID == id || | ||
6200 | parcel && land.LandData.GlobalID == id) | ||
6201 | { | ||
6202 | result.Add(ssp.UUID.ToString()); | ||
6203 | } | ||
6204 | } | ||
6205 | } | ||
6206 | else | ||
6207 | { | ||
6208 | result.Add(ssp.UUID.ToString()); | ||
6209 | } | ||
6210 | } | ||
6211 | // Maximum of 100 results | ||
6212 | if (result.Length > 99) | ||
6213 | { | ||
6214 | return; | ||
6215 | } | ||
6216 | } | ||
6217 | ); | ||
6218 | return result; | ||
6219 | } | ||
6135 | 6220 | ||
6136 | public void llAdjustSoundVolume(double volume) | 6221 | public void llAdjustSoundVolume(double volume) |
6137 | { | 6222 | { |