diff options
Diffstat (limited to 'OpenSim/Region/ScriptEngine/Shared/Api')
-rw-r--r-- | OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs | 122 | ||||
-rw-r--r-- | OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs | 10 |
2 files changed, 58 insertions, 74 deletions
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs index 253d193..aa389ba 100644 --- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs +++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs | |||
@@ -3298,7 +3298,9 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
3298 | /// <summary> | 3298 | /// <summary> |
3299 | /// Attach the object containing this script to the avatar that owns it. | 3299 | /// Attach the object containing this script to the avatar that owns it. |
3300 | /// </summary> | 3300 | /// </summary> |
3301 | /// <param name='attachment'>The attachment point (e.g. ATTACH_CHEST)</param> | 3301 | /// <param name='attachmentPoint'> |
3302 | /// The attachment point (e.g. <see cref="OpenSim.Region.ScriptEngine.Shared.ScriptBase.ScriptBaseClass.ATTACH_CHEST">ATTACH_CHEST</see>) | ||
3303 | /// </param> | ||
3302 | /// <returns>true if the attach suceeded, false if it did not</returns> | 3304 | /// <returns>true if the attach suceeded, false if it did not</returns> |
3303 | public bool AttachToAvatar(int attachmentPoint) | 3305 | public bool AttachToAvatar(int attachmentPoint) |
3304 | { | 3306 | { |
@@ -3729,21 +3731,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
3729 | } | 3731 | } |
3730 | else | 3732 | else |
3731 | { | 3733 | { |
3732 | bool sitting = false; | 3734 | if (m_host.ParentGroup.GetSittingAvatars().Contains(agentID)) |
3733 | if (m_host.SitTargetAvatar == agentID) | ||
3734 | { | ||
3735 | sitting = true; | ||
3736 | } | ||
3737 | else | ||
3738 | { | ||
3739 | foreach (SceneObjectPart p in m_host.ParentGroup.Parts) | ||
3740 | { | ||
3741 | if (p.SitTargetAvatar == agentID) | ||
3742 | sitting = true; | ||
3743 | } | ||
3744 | } | ||
3745 | |||
3746 | if (sitting) | ||
3747 | { | 3735 | { |
3748 | // When agent is sitting, certain permissions are implicit if requested from sitting agent | 3736 | // When agent is sitting, certain permissions are implicit if requested from sitting agent |
3749 | implicitPerms = ScriptBaseClass.PERMISSION_TRIGGER_ANIMATION | | 3737 | implicitPerms = ScriptBaseClass.PERMISSION_TRIGGER_ANIMATION | |
@@ -3785,7 +3773,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
3785 | INPCModule npcModule = World.RequestModuleInterface<INPCModule>(); | 3773 | INPCModule npcModule = World.RequestModuleInterface<INPCModule>(); |
3786 | if (npcModule != null && npcModule.IsNPC(agentID, World)) | 3774 | if (npcModule != null && npcModule.IsNPC(agentID, World)) |
3787 | { | 3775 | { |
3788 | if (agentID == m_host.ParentGroup.OwnerID || npcModule.GetOwner(agentID) == m_host.ParentGroup.OwnerID) | 3776 | if (npcModule.CheckPermissions(agentID, m_host.OwnerID)) |
3789 | { | 3777 | { |
3790 | lock (m_host.TaskInventory) | 3778 | lock (m_host.TaskInventory) |
3791 | { | 3779 | { |
@@ -4160,62 +4148,56 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
4160 | public LSL_String llGetLinkName(int linknum) | 4148 | public LSL_String llGetLinkName(int linknum) |
4161 | { | 4149 | { |
4162 | m_host.AddScriptLPS(1); | 4150 | m_host.AddScriptLPS(1); |
4163 | // simplest case, this prims link number | ||
4164 | if (linknum == m_host.LinkNum || linknum == ScriptBaseClass.LINK_THIS) | ||
4165 | return m_host.Name; | ||
4166 | 4151 | ||
4167 | // parse for sitting avatare-names | 4152 | if (linknum < 0) |
4168 | List<String> nametable = new List<String>(); | ||
4169 | World.ForEachRootScenePresence(delegate(ScenePresence presence) | ||
4170 | { | 4153 | { |
4171 | SceneObjectPart sitPart = presence.ParentPart; | 4154 | if (linknum == ScriptBaseClass.LINK_THIS) |
4172 | if (sitPart != null && m_host.ParentGroup.ContainsPart(sitPart.LocalId)) | ||
4173 | nametable.Add(presence.ControllingClient.Name); | ||
4174 | }); | ||
4175 | |||
4176 | int totalprims = m_host.ParentGroup.PrimCount + nametable.Count; | ||
4177 | if (totalprims > m_host.ParentGroup.PrimCount) | ||
4178 | { | ||
4179 | // sitting Avatar-Name with negativ linknum / SinglePrim | ||
4180 | if (linknum < 0 && m_host.ParentGroup.PrimCount == 1 && nametable.Count == 1) | ||
4181 | return nametable[0]; | ||
4182 | // Prim-Name / SinglePrim Sitting Avatar | ||
4183 | if (linknum == 1 && m_host.ParentGroup.PrimCount == 1 && nametable.Count == 1) | ||
4184 | return m_host.Name; | 4155 | return m_host.Name; |
4185 | // LinkNumber > of Real PrimSet = AvatarName | 4156 | else |
4186 | if (linknum > m_host.ParentGroup.PrimCount && linknum <= totalprims) | 4157 | return ScriptBaseClass.NULL_KEY; |
4187 | return nametable[totalprims - linknum]; | ||
4188 | } | 4158 | } |
4189 | 4159 | ||
4190 | // Single prim | 4160 | int actualPrimCount = m_host.ParentGroup.PrimCount; |
4191 | if (m_host.LinkNum == 0) | 4161 | List<UUID> sittingAvatarIds = m_host.ParentGroup.GetSittingAvatars(); |
4162 | int adjustedPrimCount = actualPrimCount + sittingAvatarIds.Count; | ||
4163 | |||
4164 | // Special case for a single prim. In this case the linknum is zero. However, this will not match a single | ||
4165 | // prim that has any avatars sat upon it (in which case the root prim is link 1). | ||
4166 | if (linknum == 0) | ||
4192 | { | 4167 | { |
4193 | if (linknum == 0 || linknum == ScriptBaseClass.LINK_ROOT) | 4168 | if (actualPrimCount == 1 && sittingAvatarIds.Count == 0) |
4194 | return m_host.Name; | 4169 | return m_host.Name; |
4195 | else | ||
4196 | return UUID.Zero.ToString(); | ||
4197 | } | ||
4198 | 4170 | ||
4199 | // Link set | 4171 | return ScriptBaseClass.NULL_KEY; |
4200 | SceneObjectPart part = null; | 4172 | } |
4201 | if (m_host.LinkNum == 1) // this is the Root prim | 4173 | // Special case to handle a single prim with sitting avatars. GetLinkPart() would only match zero but |
4174 | // here we must match 1 (ScriptBaseClass.LINK_ROOT). | ||
4175 | else if (linknum == 1 && actualPrimCount == 1) | ||
4202 | { | 4176 | { |
4203 | if (linknum < 0) | 4177 | if (sittingAvatarIds.Count > 0) |
4204 | part = m_host.ParentGroup.GetLinkNumPart(2); | 4178 | return m_host.ParentGroup.RootPart.Name; |
4205 | else | 4179 | else |
4206 | part = m_host.ParentGroup.GetLinkNumPart(linknum); | 4180 | return ScriptBaseClass.NULL_KEY; |
4207 | } | 4181 | } |
4208 | else // this is a child prim | 4182 | else if (linknum <= adjustedPrimCount) |
4209 | { | 4183 | { |
4210 | if (linknum < 2) | 4184 | if (linknum <= actualPrimCount) |
4211 | part = m_host.ParentGroup.GetLinkNumPart(1); | 4185 | { |
4186 | return m_host.ParentGroup.GetLinkNumPart(linknum).Name; | ||
4187 | } | ||
4212 | else | 4188 | else |
4213 | part = m_host.ParentGroup.GetLinkNumPart(linknum); | 4189 | { |
4190 | ScenePresence sp = World.GetScenePresence(sittingAvatarIds[linknum - actualPrimCount - 1]); | ||
4191 | if (sp != null) | ||
4192 | return sp.Name; | ||
4193 | else | ||
4194 | return ScriptBaseClass.NULL_KEY; | ||
4195 | } | ||
4214 | } | 4196 | } |
4215 | if (part != null) | ||
4216 | return part.Name; | ||
4217 | else | 4197 | else |
4218 | return UUID.Zero.ToString(); | 4198 | { |
4199 | return ScriptBaseClass.NULL_KEY; | ||
4200 | } | ||
4219 | } | 4201 | } |
4220 | 4202 | ||
4221 | public LSL_Integer llGetInventoryNumber(int type) | 4203 | public LSL_Integer llGetInventoryNumber(int type) |
@@ -5828,9 +5810,9 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
5828 | } | 5810 | } |
5829 | 5811 | ||
5830 | /// <summary> | 5812 | /// <summary> |
5831 | /// Insert the list identified by <src> into the | 5813 | /// Insert the list identified by <paramref name="src"/> into the |
5832 | /// list designated by <dest> such that the first | 5814 | /// list designated by <paramref name="dest"/> such that the first |
5833 | /// new element has the index specified by <index> | 5815 | /// new element has the index specified by <paramref name="index"/> |
5834 | /// </summary> | 5816 | /// </summary> |
5835 | 5817 | ||
5836 | public LSL_List llListInsertList(LSL_List dest, LSL_List src, int index) | 5818 | public LSL_List llListInsertList(LSL_List dest, LSL_List src, int index) |
@@ -6663,6 +6645,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
6663 | ps.BurstSpeedMax = 1.0f; | 6645 | ps.BurstSpeedMax = 1.0f; |
6664 | ps.BurstRate = 0.1f; | 6646 | ps.BurstRate = 0.1f; |
6665 | ps.PartMaxAge = 10.0f; | 6647 | ps.PartMaxAge = 10.0f; |
6648 | ps.BurstPartCount = 1; | ||
6666 | return ps; | 6649 | return ps; |
6667 | } | 6650 | } |
6668 | 6651 | ||
@@ -6684,10 +6667,8 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
6684 | SetParticleSystem(m_host, rules); | 6667 | SetParticleSystem(m_host, rules); |
6685 | } | 6668 | } |
6686 | 6669 | ||
6687 | private void SetParticleSystem(SceneObjectPart part, LSL_List rules) | 6670 | private void SetParticleSystem(SceneObjectPart part, LSL_List rules) |
6688 | { | 6671 | { |
6689 | |||
6690 | |||
6691 | if (rules.Length == 0) | 6672 | if (rules.Length == 0) |
6692 | { | 6673 | { |
6693 | part.RemoveParticleSystem(); | 6674 | part.RemoveParticleSystem(); |
@@ -13232,7 +13213,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
13232 | /// Get a notecard line. | 13213 | /// Get a notecard line. |
13233 | /// </summary> | 13214 | /// </summary> |
13234 | /// <param name="assetID"></param> | 13215 | /// <param name="assetID"></param> |
13235 | /// <param name="line">Lines start at index 0</param> | 13216 | /// <param name="lineNumber">Lines start at index 0</param> |
13236 | /// <returns></returns> | 13217 | /// <returns></returns> |
13237 | public static string GetLine(UUID assetID, int lineNumber) | 13218 | public static string GetLine(UUID assetID, int lineNumber) |
13238 | { | 13219 | { |
@@ -13261,9 +13242,14 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
13261 | /// Get a notecard line. | 13242 | /// Get a notecard line. |
13262 | /// </summary> | 13243 | /// </summary> |
13263 | /// <param name="assetID"></param> | 13244 | /// <param name="assetID"></param> |
13264 | /// <param name="line">Lines start at index 0</param> | 13245 | /// <param name="lineNumber">Lines start at index 0</param> |
13265 | /// <param name="maxLength">Maximum length of the returned line. Longer lines will be truncated</para> | 13246 | /// <param name="maxLength"> |
13266 | /// <returns></returns> | 13247 | /// Maximum length of the returned line. |
13248 | /// </param> | ||
13249 | /// <returns> | ||
13250 | /// If the line length is longer than <paramref name="maxLength"/>, | ||
13251 | /// the return string will be truncated. | ||
13252 | /// </returns> | ||
13267 | public static string GetLine(UUID assetID, int lineNumber, int maxLength) | 13253 | public static string GetLine(UUID assetID, int lineNumber, int maxLength) |
13268 | { | 13254 | { |
13269 | string line = GetLine(assetID, lineNumber); | 13255 | string line = GetLine(assetID, lineNumber); |
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs index 51c8c7e..637d83a 100644 --- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs +++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs | |||
@@ -1214,12 +1214,11 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
1214 | sunHour += 24.0; | 1214 | sunHour += 24.0; |
1215 | 1215 | ||
1216 | World.RegionInfo.RegionSettings.UseEstateSun = useEstateSun; | 1216 | World.RegionInfo.RegionSettings.UseEstateSun = useEstateSun; |
1217 | World.RegionInfo.RegionSettings.SunPosition = sunHour + 6; // LL Region Sun Hour is 6 to 30 | 1217 | World.RegionInfo.RegionSettings.SunPosition = sunHour + 6; // LL Region Sun Hour is 6 to 30 |
1218 | World.RegionInfo.RegionSettings.FixedSun = sunFixed; | 1218 | World.RegionInfo.RegionSettings.FixedSun = sunFixed; |
1219 | World.RegionInfo.RegionSettings.Save(); | 1219 | World.RegionInfo.RegionSettings.Save(); |
1220 | 1220 | ||
1221 | World.EventManager.TriggerEstateToolsSunUpdate( | 1221 | World.EventManager.TriggerEstateToolsSunUpdate(World.RegionInfo.RegionHandle); |
1222 | World.RegionInfo.RegionHandle, sunFixed, useEstateSun, (float)sunHour); | ||
1223 | } | 1222 | } |
1224 | 1223 | ||
1225 | /// <summary> | 1224 | /// <summary> |
@@ -1244,8 +1243,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
1244 | World.RegionInfo.EstateSettings.FixedSun = sunFixed; | 1243 | World.RegionInfo.EstateSettings.FixedSun = sunFixed; |
1245 | World.RegionInfo.EstateSettings.Save(); | 1244 | World.RegionInfo.EstateSettings.Save(); |
1246 | 1245 | ||
1247 | World.EventManager.TriggerEstateToolsSunUpdate( | 1246 | World.EventManager.TriggerEstateToolsSunUpdate(World.RegionInfo.RegionHandle); |
1248 | World.RegionInfo.RegionHandle, sunFixed, World.RegionInfo.RegionSettings.UseEstateSun, (float)sunHour); | ||
1249 | } | 1247 | } |
1250 | 1248 | ||
1251 | /// <summary> | 1249 | /// <summary> |