aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/Environment/Modules
diff options
context:
space:
mode:
authorTeravus Ovares2008-02-28 05:20:23 +0000
committerTeravus Ovares2008-02-28 05:20:23 +0000
commit1afe38b319d8306b372b639ac2ad2c8e71c3e75d (patch)
treea888a2e24fbd6487b2561b54559b4ce209be36df /OpenSim/Region/Environment/Modules
parent* OnSignificantClientMovement was never being called. So we got no land updat... (diff)
downloadopensim-SC-1afe38b319d8306b372b639ac2ad2c8e71c3e75d.zip
opensim-SC-1afe38b319d8306b372b639ac2ad2c8e71c3e75d.tar.gz
opensim-SC-1afe38b319d8306b372b639ac2ad2c8e71c3e75d.tar.bz2
opensim-SC-1afe38b319d8306b372b639ac2ad2c8e71c3e75d.tar.xz
* Added a way for the friends module to definitively know if an avatar's root agent is on the instance and if so, which region the avatar's root agent is in.
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,