aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
-rw-r--r--OpenSim/Region/Environment/LandManagement/LandManager.cs2
-rw-r--r--OpenSim/Region/Environment/Modules/FriendsModule.cs54
-rw-r--r--OpenSim/Region/Environment/Scenes/SceneEvents.cs14
-rw-r--r--OpenSim/Region/Environment/Scenes/ScenePresence.cs2
4 files changed, 70 insertions, 2 deletions
diff --git a/OpenSim/Region/Environment/LandManagement/LandManager.cs b/OpenSim/Region/Environment/LandManagement/LandManager.cs
index 4f6015a..83ed3cf 100644
--- a/OpenSim/Region/Environment/LandManagement/LandManager.cs
+++ b/OpenSim/Region/Environment/LandManagement/LandManager.cs
@@ -775,6 +775,8 @@ namespace OpenSim.Region.Environment.LandManagement
775 if (!avatar.IsChildAgent) 775 if (!avatar.IsChildAgent)
776 { 776 {
777 over.sendLandUpdateToClient(avatar.ControllingClient); 777 over.sendLandUpdateToClient(avatar.ControllingClient);
778 m_scene.EventManager.TriggerAvatarEnteringNewParcel(avatar, over.landData.localID,
779 m_scene.RegionInfo.RegionID);
778 } 780 }
779 } 781 }
780 782
diff --git a/OpenSim/Region/Environment/Modules/FriendsModule.cs b/OpenSim/Region/Environment/Modules/FriendsModule.cs
index 4081a75..e1d3e2a 100644
--- a/OpenSim/Region/Environment/Modules/FriendsModule.cs
+++ b/OpenSim/Region/Environment/Modules/FriendsModule.cs
@@ -45,6 +45,8 @@ namespace OpenSim.Region.Environment.Modules
45 45
46 private List<Scene> m_scene = new List<Scene>(); 46 private List<Scene> m_scene = new List<Scene>();
47 47
48
49 Dictionary<LLUUID, ulong> m_rootAgents = new Dictionary<LLUUID, ulong>();
48 Dictionary<LLUUID, LLUUID> m_pendingFriendRequests = new Dictionary<LLUUID, LLUUID>(); 50 Dictionary<LLUUID, LLUUID> m_pendingFriendRequests = new Dictionary<LLUUID, LLUUID>();
49 51
50 public void Initialise(Scene scene, IConfigSource config) 52 public void Initialise(Scene scene, IConfigSource config)
@@ -62,6 +64,9 @@ namespace OpenSim.Region.Environment.Modules
62 scene.EventManager.OnNewClient += OnNewClient; 64 scene.EventManager.OnNewClient += OnNewClient;
63 scene.EventManager.OnGridInstantMessageToFriendsModule += OnGridInstantMessage; 65 scene.EventManager.OnGridInstantMessageToFriendsModule += OnGridInstantMessage;
64 scene.EventManager.OnAvatarEnteringNewParcel += AvatarEnteringParcel; 66 scene.EventManager.OnAvatarEnteringNewParcel += AvatarEnteringParcel;
67 scene.EventManager.OnMakeChildAgent += MakeChildAgent;
68 scene.EventManager.OnClientClosed += ClientLoggedOut;
69
65 70
66 71
67 } 72 }
@@ -86,13 +91,60 @@ namespace OpenSim.Region.Environment.Modules
86 client.OnTerminateFriendship += OnTerminateFriendship; 91 client.OnTerminateFriendship += OnTerminateFriendship;
87 92
88 93
94
89 95
90 96
91 } 97 }
92 98
99 private void ClientLoggedOut(LLUUID AgentId)
100 {
101 lock (m_rootAgents)
102 {
103 if (m_rootAgents.ContainsKey(AgentId))
104 {
105 m_rootAgents.Remove(AgentId);
106 m_log.Info("[FRIEND]: Removing " + AgentId + ". Agent logged out.");
107 }
108 }
109 }
110
93 private void AvatarEnteringParcel(ScenePresence avatar, int localLandID, LLUUID regionID) 111 private void AvatarEnteringParcel(ScenePresence avatar, int localLandID, LLUUID regionID)
94 { 112 {
95 int i = 0; 113 lock (m_rootAgents)
114 {
115 if (m_rootAgents.ContainsKey(avatar.UUID))
116 {
117 if (avatar.RegionHandle != m_rootAgents[avatar.UUID])
118 {
119 m_rootAgents[avatar.UUID] = avatar.RegionHandle;
120 m_log.Info("[FRIEND]: Claiming " + avatar.Firstname + " " + avatar.Lastname + " in region:" + avatar.RegionHandle + ".");
121 // Claim User! my user! Mine mine mine!
122 }
123 }
124 else
125 {
126 m_rootAgents.Add(avatar.UUID, avatar.RegionHandle);
127 m_log.Info("[FRIEND]: Claiming " + avatar.Firstname + " " + avatar.Lastname + " in region:" + avatar.RegionHandle + ".");
128 }
129 }
130 //m_log.Info("[FRIEND]: " + avatar.Name + " status:" + (!avatar.IsChildAgent).ToString());
131 }
132 private void MakeChildAgent(ScenePresence avatar)
133 {
134
135 lock (m_rootAgents)
136 {
137 if (m_rootAgents.ContainsKey(avatar.UUID))
138 {
139 if (m_rootAgents[avatar.UUID] == avatar.RegionHandle)
140 {
141 m_rootAgents.Remove(avatar.UUID);
142 m_log.Info("[FRIEND]: Removing " + avatar.Firstname + " " + avatar.Lastname + " as a root agent");
143 }
144
145 }
146 }
147
96 } 148 }
97 149
98 private void OnInstantMessage(IClientAPI client,LLUUID fromAgentID, 150 private void OnInstantMessage(IClientAPI client,LLUUID fromAgentID,
diff --git a/OpenSim/Region/Environment/Scenes/SceneEvents.cs b/OpenSim/Region/Environment/Scenes/SceneEvents.cs
index 5389ec4..62011ea 100644
--- a/OpenSim/Region/Environment/Scenes/SceneEvents.cs
+++ b/OpenSim/Region/Environment/Scenes/SceneEvents.cs
@@ -133,6 +133,9 @@ namespace OpenSim.Region.Environment.Scenes
133 133
134 public event ScriptChangedEvent OnScriptChangedEvent; 134 public event ScriptChangedEvent OnScriptChangedEvent;
135 135
136 public event OnNewPresenceDelegate OnMakeChildAgent;
137
138
136 public class MoneyTransferArgs : System.EventArgs 139 public class MoneyTransferArgs : System.EventArgs
137 { 140 {
138 public LLUUID sender; 141 public LLUUID sender;
@@ -185,6 +188,7 @@ namespace OpenSim.Region.Environment.Scenes
185 private NewGridInstantMessage handler023 = null; //OnGridInstantMessageToIMModule; 188 private NewGridInstantMessage handler023 = null; //OnGridInstantMessageToIMModule;
186 private NewGridInstantMessage handler024 = null; //OnGridInstantMessageToFriendsModule; 189 private NewGridInstantMessage handler024 = null; //OnGridInstantMessageToFriendsModule;
187 private ClientClosed handler025 = null; //OnClientClosed; 190 private ClientClosed handler025 = null; //OnClientClosed;
191 private OnNewPresenceDelegate handler026 = null; //OnMakeChildAgent;
188 192
189 public void TriggerOnScriptChangedEvent(uint localID, uint change) 193 public void TriggerOnScriptChangedEvent(uint localID, uint change)
190 { 194 {
@@ -405,6 +409,16 @@ namespace OpenSim.Region.Environment.Scenes
405 handler025(ClientID); 409 handler025(ClientID);
406 } 410 }
407 } 411 }
412
413 public void TriggerOnMakeChildAgent(ScenePresence presence)
414 {
415 handler026 = OnMakeChildAgent;
416 if (handler026 != null)
417 {
418 handler026(presence);
419 }
420
421 }
408 422
409 } 423 }
410} \ No newline at end of file 424} \ No newline at end of file
diff --git a/OpenSim/Region/Environment/Scenes/ScenePresence.cs b/OpenSim/Region/Environment/Scenes/ScenePresence.cs
index 9f3c924..ef23432 100644
--- a/OpenSim/Region/Environment/Scenes/ScenePresence.cs
+++ b/OpenSim/Region/Environment/Scenes/ScenePresence.cs
@@ -547,7 +547,7 @@ namespace OpenSim.Region.Environment.Scenes
547 m_isChildAgent = true; 547 m_isChildAgent = true;
548 m_scene.SwapRootAgentCount(true); 548 m_scene.SwapRootAgentCount(true);
549 RemoveFromPhysicalScene(); 549 RemoveFromPhysicalScene();
550 550 m_scene.EventManager.TriggerOnMakeChildAgent(this);
551 //this.Pos = new LLVector3(128, 128, 70); 551 //this.Pos = new LLVector3(128, 128, 70);
552 } 552 }
553 553