diff options
Diffstat (limited to 'OpenSim')
5 files changed, 43 insertions, 33 deletions
diff --git a/OpenSim/Framework/Communications/CommunicationsManager.cs b/OpenSim/Framework/Communications/CommunicationsManager.cs index 2410f31..4bf9018 100644 --- a/OpenSim/Framework/Communications/CommunicationsManager.cs +++ b/OpenSim/Framework/Communications/CommunicationsManager.cs | |||
@@ -209,35 +209,24 @@ namespace OpenSim.Framework.Communications | |||
209 | 209 | ||
210 | private string[] doUUIDNameRequest(UUID uuid) | 210 | private string[] doUUIDNameRequest(UUID uuid) |
211 | { | 211 | { |
212 | string[] returnstring = new string[0]; | ||
213 | bool doLookup = false; | ||
214 | |||
215 | lock (m_nameRequestCache) | 212 | lock (m_nameRequestCache) |
216 | { | 213 | { |
217 | if (m_nameRequestCache.ContainsKey(uuid)) | 214 | if (m_nameRequestCache.ContainsKey(uuid)) |
218 | { | 215 | return m_nameRequestCache[uuid]; |
219 | returnstring = m_nameRequestCache[uuid]; | ||
220 | } | ||
221 | else | ||
222 | { | ||
223 | // we don't want to lock the dictionary while we're doing the lookup | ||
224 | doLookup = true; | ||
225 | } | ||
226 | } | 216 | } |
227 | 217 | ||
228 | if (doLookup) { | 218 | string[] returnstring = new string[0]; |
229 | UserProfileData profileData = m_userService.GetUserProfile(uuid); | 219 | CachedUserInfo uinfo = UserProfileCacheService.GetUserDetails(uuid); |
230 | if (profileData != null) | 220 | |
221 | if ((uinfo != null) && (uinfo.UserProfile != null)) | ||
222 | { | ||
223 | returnstring = new string[2]; | ||
224 | returnstring[0] = uinfo.UserProfile.FirstName; | ||
225 | returnstring[1] = uinfo.UserProfile.SurName; | ||
226 | lock (m_nameRequestCache) | ||
231 | { | 227 | { |
232 | returnstring = new string[2]; | 228 | if (!m_nameRequestCache.ContainsKey(uuid)) |
233 | // UUID profileId = profileData.ID; | 229 | m_nameRequestCache.Add(uuid, returnstring); |
234 | returnstring[0] = profileData.FirstName; | ||
235 | returnstring[1] = profileData.SurName; | ||
236 | lock (m_nameRequestCache) | ||
237 | { | ||
238 | if (!m_nameRequestCache.ContainsKey(uuid)) | ||
239 | m_nameRequestCache.Add(uuid, returnstring); | ||
240 | } | ||
241 | } | 230 | } |
242 | } | 231 | } |
243 | 232 | ||
diff --git a/OpenSim/Region/CoreModules/World/Permissions/PermissionsModule.cs b/OpenSim/Region/CoreModules/World/Permissions/PermissionsModule.cs index 901144a..fe9de1b 100644 --- a/OpenSim/Region/CoreModules/World/Permissions/PermissionsModule.cs +++ b/OpenSim/Region/CoreModules/World/Permissions/PermissionsModule.cs | |||
@@ -556,6 +556,8 @@ namespace OpenSim.Region.CoreModules.World.Permissions | |||
556 | 556 | ||
557 | // Customize the EveryoneMask | 557 | // Customize the EveryoneMask |
558 | uint objectEveryoneMask = ApplyObjectModifyMasks(task.EveryoneMask, objflags); | 558 | uint objectEveryoneMask = ApplyObjectModifyMasks(task.EveryoneMask, objflags); |
559 | if (objectOwner != UUID.Zero) | ||
560 | objectEveryoneMask |= (uint)PrimFlags.ObjectAnyOwner; | ||
559 | 561 | ||
560 | if (m_bypassPermissions) | 562 | if (m_bypassPermissions) |
561 | return objectOwnerMask; | 563 | return objectOwnerMask; |
@@ -578,12 +580,9 @@ namespace OpenSim.Region.CoreModules.World.Permissions | |||
578 | { | 580 | { |
579 | // Admin objects should not be editable by the above | 581 | // Admin objects should not be editable by the above |
580 | if (!IsAdministrator(objectOwner)) | 582 | if (!IsAdministrator(objectOwner)) |
581 | return objectOwnerMask; | 583 | return objectOwnerMask; |
582 | } | 584 | } |
583 | 585 | ||
584 | if ((objectOwnerMask & (uint)PermissionMask.Transfer) != 0 && task.ObjectSaleType != 0) | ||
585 | objectEveryoneMask |= (uint)PrimFlags.ObjectTransfer; | ||
586 | |||
587 | // Group permissions | 586 | // Group permissions |
588 | if ((task.GroupID != UUID.Zero) && IsGroupMember(task.GroupID, user, 0)) | 587 | if ((task.GroupID != UUID.Zero) && IsGroupMember(task.GroupID, user, 0)) |
589 | return objectGroupMask | objectEveryoneMask; | 588 | return objectGroupMask | objectEveryoneMask; |
diff --git a/OpenSim/Region/Framework/Scenes/ScenePresence.cs b/OpenSim/Region/Framework/Scenes/ScenePresence.cs index 3996cdc..15fb11f 100644 --- a/OpenSim/Region/Framework/Scenes/ScenePresence.cs +++ b/OpenSim/Region/Framework/Scenes/ScenePresence.cs | |||
@@ -3409,7 +3409,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
3409 | scene.AddPhysicsActorTaint(m_physicsActor); | 3409 | scene.AddPhysicsActorTaint(m_physicsActor); |
3410 | //m_physicsActor.OnRequestTerseUpdate += SendTerseUpdateToAllClients; | 3410 | //m_physicsActor.OnRequestTerseUpdate += SendTerseUpdateToAllClients; |
3411 | m_physicsActor.OnCollisionUpdate += PhysicsCollisionUpdate; | 3411 | m_physicsActor.OnCollisionUpdate += PhysicsCollisionUpdate; |
3412 | m_physicsActor.SubscribeEvents(1000); | 3412 | m_physicsActor.SubscribeEvents(500); |
3413 | m_physicsActor.LocalID = LocalId; | 3413 | m_physicsActor.LocalID = LocalId; |
3414 | 3414 | ||
3415 | } | 3415 | } |
@@ -3417,7 +3417,15 @@ namespace OpenSim.Region.Framework.Scenes | |||
3417 | // Event called by the physics plugin to tell the avatar about a collision. | 3417 | // Event called by the physics plugin to tell the avatar about a collision. |
3418 | private void PhysicsCollisionUpdate(EventArgs e) | 3418 | private void PhysicsCollisionUpdate(EventArgs e) |
3419 | { | 3419 | { |
3420 | if ((e == null) || m_invulnerable) | 3420 | if (e == null) |
3421 | return; | ||
3422 | |||
3423 | //if ((Math.Abs(Velocity.X) > 0.1e-9f) || (Math.Abs(Velocity.Y) > 0.1e-9f)) | ||
3424 | // The Physics Scene will send updates every 500 ms grep: m_physicsActor.SubscribeEvents( | ||
3425 | // as of this comment the interval is set in AddToPhysicalScene | ||
3426 | UpdateMovementAnimations(); | ||
3427 | |||
3428 | if (m_invulnerable) | ||
3421 | return; | 3429 | return; |
3422 | CollisionEventUpdate collisionData = (CollisionEventUpdate)e; | 3430 | CollisionEventUpdate collisionData = (CollisionEventUpdate)e; |
3423 | Dictionary<uint, float> coldata = collisionData.m_objCollisionList; | 3431 | Dictionary<uint, float> coldata = collisionData.m_objCollisionList; |
@@ -3455,8 +3463,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
3455 | m_scene.EventManager.TriggerAvatarKill(killerObj, this); | 3463 | m_scene.EventManager.TriggerAvatarKill(killerObj, this); |
3456 | } | 3464 | } |
3457 | 3465 | ||
3458 | if (Velocity.X > 0 || Velocity.Y > 0) | 3466 | |
3459 | UpdateMovementAnimations(); | ||
3460 | } | 3467 | } |
3461 | 3468 | ||
3462 | public void setHealthWithUpdate(float health) | 3469 | public void setHealthWithUpdate(float health) |
diff --git a/OpenSim/Region/Physics/OdePlugin/ODECharacter.cs b/OpenSim/Region/Physics/OdePlugin/ODECharacter.cs index a00ba11..bd81d50 100644 --- a/OpenSim/Region/Physics/OdePlugin/ODECharacter.cs +++ b/OpenSim/Region/Physics/OdePlugin/ODECharacter.cs | |||
@@ -98,6 +98,7 @@ namespace OpenSim.Region.Physics.OdePlugin | |||
98 | private bool m_alwaysRun = false; | 98 | private bool m_alwaysRun = false; |
99 | private bool m_hackSentFall = false; | 99 | private bool m_hackSentFall = false; |
100 | private bool m_hackSentFly = false; | 100 | private bool m_hackSentFly = false; |
101 | private int m_requestedUpdateFrequency = 0; | ||
101 | private PhysicsVector m_taintPosition = new PhysicsVector(0, 0, 0); | 102 | private PhysicsVector m_taintPosition = new PhysicsVector(0, 0, 0); |
102 | public uint m_localID = 0; | 103 | public uint m_localID = 0; |
103 | public bool m_returnCollisions = false; | 104 | public bool m_returnCollisions = false; |
@@ -1184,26 +1185,31 @@ namespace OpenSim.Region.Physics.OdePlugin | |||
1184 | 1185 | ||
1185 | public override void SubscribeEvents(int ms) | 1186 | public override void SubscribeEvents(int ms) |
1186 | { | 1187 | { |
1188 | m_requestedUpdateFrequency = ms; | ||
1187 | m_eventsubscription = ms; | 1189 | m_eventsubscription = ms; |
1188 | _parent_scene.addCollisionEventReporting(this); | 1190 | _parent_scene.addCollisionEventReporting(this); |
1189 | } | 1191 | } |
1190 | public override void UnSubscribeEvents() | 1192 | public override void UnSubscribeEvents() |
1191 | { | 1193 | { |
1192 | _parent_scene.remCollisionEventReporting(this); | 1194 | _parent_scene.remCollisionEventReporting(this); |
1195 | m_requestedUpdateFrequency = 0; | ||
1193 | m_eventsubscription = 0; | 1196 | m_eventsubscription = 0; |
1194 | } | 1197 | } |
1195 | public void AddCollisionEvent(uint CollidedWith, float depth) | 1198 | public void AddCollisionEvent(uint CollidedWith, float depth) |
1196 | { | 1199 | { |
1197 | if (m_eventsubscription > 0) | 1200 | if (m_eventsubscription > 0) |
1198 | CollisionEventsThisFrame.addCollider(CollidedWith,depth); | 1201 | { |
1202 | CollisionEventsThisFrame.addCollider(CollidedWith, depth); | ||
1203 | } | ||
1199 | } | 1204 | } |
1200 | 1205 | ||
1201 | public void SendCollisions() | 1206 | public void SendCollisions() |
1202 | { | 1207 | { |
1203 | if (m_eventsubscription > 0) | 1208 | if (m_eventsubscription > m_requestedUpdateFrequency) |
1204 | { | 1209 | { |
1205 | base.SendCollisionUpdate(CollisionEventsThisFrame); | 1210 | base.SendCollisionUpdate(CollisionEventsThisFrame); |
1206 | CollisionEventsThisFrame = new CollisionEventUpdate(); | 1211 | CollisionEventsThisFrame = new CollisionEventUpdate(); |
1212 | m_eventsubscription = 0; | ||
1207 | } | 1213 | } |
1208 | } | 1214 | } |
1209 | public override bool SubscribedEvents() | 1215 | public override bool SubscribedEvents() |
@@ -1309,5 +1315,13 @@ namespace OpenSim.Region.Physics.OdePlugin | |||
1309 | } | 1315 | } |
1310 | 1316 | ||
1311 | } | 1317 | } |
1318 | |||
1319 | internal void AddCollisionFrameTime(int p) | ||
1320 | { | ||
1321 | // protect it from overflow crashing | ||
1322 | if (m_eventsubscription + p >= int.MaxValue) | ||
1323 | m_eventsubscription = 0; | ||
1324 | m_eventsubscription += p; | ||
1325 | } | ||
1312 | } | 1326 | } |
1313 | } | 1327 | } |
diff --git a/OpenSim/Region/Physics/OdePlugin/OdePlugin.cs b/OpenSim/Region/Physics/OdePlugin/OdePlugin.cs index f5ab1de..083b7db 100644 --- a/OpenSim/Region/Physics/OdePlugin/OdePlugin.cs +++ b/OpenSim/Region/Physics/OdePlugin/OdePlugin.cs | |||
@@ -2928,6 +2928,7 @@ namespace OpenSim.Region.Physics.OdePlugin | |||
2928 | { | 2928 | { |
2929 | case ActorTypes.Agent: | 2929 | case ActorTypes.Agent: |
2930 | OdeCharacter cobj = (OdeCharacter)obj; | 2930 | OdeCharacter cobj = (OdeCharacter)obj; |
2931 | cobj.AddCollisionFrameTime(100); | ||
2931 | cobj.SendCollisions(); | 2932 | cobj.SendCollisions(); |
2932 | break; | 2933 | break; |
2933 | case ActorTypes.Prim: | 2934 | case ActorTypes.Prim: |