aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/Environment/Modules
diff options
context:
space:
mode:
Diffstat (limited to 'OpenSim/Region/Environment/Modules')
-rw-r--r--OpenSim/Region/Environment/Modules/FriendsModule.cs54
1 files changed, 53 insertions, 1 deletions
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,