diff options
Diffstat (limited to 'OpenSim')
-rw-r--r-- | OpenSim/Region/OptionalModules/Avatar/SitStand/SitStandCommandsModule.cs | 131 |
1 files changed, 81 insertions, 50 deletions
diff --git a/OpenSim/Region/OptionalModules/Avatar/SitStand/SitStandCommandsModule.cs b/OpenSim/Region/OptionalModules/Avatar/SitStand/SitStandCommandsModule.cs index 874723c..e9cb213 100644 --- a/OpenSim/Region/OptionalModules/Avatar/SitStand/SitStandCommandsModule.cs +++ b/OpenSim/Region/OptionalModules/Avatar/SitStand/SitStandCommandsModule.cs | |||
@@ -30,18 +30,16 @@ using System.Collections.Generic; | |||
30 | using System.Linq; | 30 | using System.Linq; |
31 | using System.Reflection; | 31 | using System.Reflection; |
32 | using System.Text; | 32 | using System.Text; |
33 | using System.Text.RegularExpressions; | ||
33 | using log4net; | 34 | using log4net; |
34 | using Mono.Addins; | 35 | using Mono.Addins; |
36 | using NDesk.Options; | ||
35 | using Nini.Config; | 37 | using Nini.Config; |
36 | using OpenMetaverse; | 38 | using OpenMetaverse; |
37 | using OpenSim.Framework; | 39 | using OpenSim.Framework; |
38 | using OpenSim.Framework.Console; | 40 | using OpenSim.Framework.Console; |
39 | using OpenSim.Framework.Monitoring; | ||
40 | using OpenSim.Region.ClientStack.LindenUDP; | ||
41 | using OpenSim.Region.Framework.Interfaces; | 41 | using OpenSim.Region.Framework.Interfaces; |
42 | using OpenSim.Region.Framework.Scenes; | 42 | using OpenSim.Region.Framework.Scenes; |
43 | using OpenSim.Region.Framework.Scenes.Animation; | ||
44 | using OpenSim.Services.Interfaces; | ||
45 | 43 | ||
46 | namespace OpenSim.Region.OptionalModules.Avatar.SitStand | 44 | namespace OpenSim.Region.OptionalModules.Avatar.SitStand |
47 | { | 45 | { |
@@ -92,89 +90,122 @@ namespace OpenSim.Region.OptionalModules.Avatar.SitStand | |||
92 | 90 | ||
93 | scene.AddCommand( | 91 | scene.AddCommand( |
94 | "Users", this, "sit user name", | 92 | "Users", this, "sit user name", |
95 | "sit user name <first-name> <last-name>", | 93 | "sit user name [--regex] <first-name> <last-name>", |
96 | "Sit the named user on an unoccupied object with a sit target.\n" | 94 | "Sit the named user on an unoccupied object with a sit target.", |
97 | + "If there are no such objects then nothing happens", | 95 | "If there are no such objects then nothing happens.\n" |
96 | + "If --regex is specified then the names are treated as regular expressions.", | ||
98 | HandleSitUserNameCommand); | 97 | HandleSitUserNameCommand); |
99 | 98 | ||
100 | scene.AddCommand( | 99 | scene.AddCommand( |
101 | "Users", this, "stand user name", | 100 | "Users", this, "stand user name", |
102 | "stand user name <first-name> <last-name>", | 101 | "stand user name [--regex] <first-name> <last-name>", |
103 | "Stand the named user.", | 102 | "Stand the named user.", |
103 | "If --regex is specified then the names are treated as regular expressions.", | ||
104 | HandleStandUserNameCommand); | 104 | HandleStandUserNameCommand); |
105 | } | 105 | } |
106 | 106 | ||
107 | protected void HandleSitUserNameCommand(string module, string[] cmd) | 107 | private void HandleSitUserNameCommand(string module, string[] cmd) |
108 | { | 108 | { |
109 | if (MainConsole.Instance.ConsoleScene != m_scene && MainConsole.Instance.ConsoleScene != null) | 109 | if (MainConsole.Instance.ConsoleScene != m_scene && MainConsole.Instance.ConsoleScene != null) |
110 | return; | 110 | return; |
111 | 111 | ||
112 | if (cmd.Length != 5) | 112 | if (cmd.Length < 5) |
113 | { | 113 | { |
114 | MainConsole.Instance.Output("Usage: sit user name <first-name> <last-name>"); | 114 | MainConsole.Instance.Output("Usage: sit user name [--regex] <first-name> <last-name>"); |
115 | return; | 115 | return; |
116 | } | 116 | } |
117 | 117 | ||
118 | string firstName = cmd[3]; | 118 | List<ScenePresence> scenePresences = GetScenePresences(cmd); |
119 | string lastName = cmd[4]; | ||
120 | 119 | ||
121 | ScenePresence sp = m_scene.GetScenePresence(firstName, lastName); | 120 | foreach (ScenePresence sp in scenePresences) |
122 | |||
123 | if (sp == null || sp.IsChildAgent) | ||
124 | return; | ||
125 | |||
126 | SceneObjectPart sitPart = null; | ||
127 | List<SceneObjectGroup> sceneObjects = m_scene.GetSceneObjectGroups(); | ||
128 | |||
129 | foreach (SceneObjectGroup sceneObject in sceneObjects) | ||
130 | { | 121 | { |
131 | foreach (SceneObjectPart part in sceneObject.Parts) | 122 | SceneObjectPart sitPart = null; |
123 | List<SceneObjectGroup> sceneObjects = m_scene.GetSceneObjectGroups(); | ||
124 | |||
125 | foreach (SceneObjectGroup sceneObject in sceneObjects) | ||
132 | { | 126 | { |
133 | if (part.IsSitTargetSet && part.SitTargetAvatar == UUID.Zero) | 127 | foreach (SceneObjectPart part in sceneObject.Parts) |
134 | { | 128 | { |
135 | sitPart = part; | 129 | if (part.IsSitTargetSet && part.SitTargetAvatar == UUID.Zero) |
136 | break; | 130 | { |
131 | sitPart = part; | ||
132 | break; | ||
133 | } | ||
137 | } | 134 | } |
138 | } | 135 | } |
139 | } | ||
140 | 136 | ||
141 | if (sitPart != null) | 137 | if (sitPart != null) |
142 | { | 138 | { |
143 | MainConsole.Instance.OutputFormat( | 139 | MainConsole.Instance.OutputFormat( |
144 | "Sitting {0} on {1} {2} in {3}", | 140 | "Sitting {0} on {1} {2} in {3}", |
145 | sp.Name, sitPart.ParentGroup.Name, sitPart.ParentGroup.UUID, m_scene.Name); | 141 | sp.Name, sitPart.ParentGroup.Name, sitPart.ParentGroup.UUID, m_scene.Name); |
146 | 142 | ||
147 | sp.HandleAgentRequestSit(sp.ControllingClient, sp.UUID, sitPart.UUID, Vector3.Zero); | 143 | sp.HandleAgentRequestSit(sp.ControllingClient, sp.UUID, sitPart.UUID, Vector3.Zero); |
148 | sp.HandleAgentSit(sp.ControllingClient, sp.UUID); | 144 | sp.HandleAgentSit(sp.ControllingClient, sp.UUID); |
149 | } | 145 | } |
150 | else | 146 | else |
151 | { | 147 | { |
152 | MainConsole.Instance.OutputFormat( | 148 | MainConsole.Instance.OutputFormat( |
153 | "Could not find any unoccupied set seat on which to sit {0} in {1}", | 149 | "Could not find any unoccupied set seat on which to sit {0} in {1}. Aborting", |
154 | sp.Name, m_scene.Name); | 150 | sp.Name, m_scene.Name); |
151 | |||
152 | break; | ||
153 | } | ||
155 | } | 154 | } |
156 | } | 155 | } |
157 | 156 | ||
158 | protected void HandleStandUserNameCommand(string module, string[] cmd) | 157 | private void HandleStandUserNameCommand(string module, string[] cmd) |
159 | { | 158 | { |
160 | if (MainConsole.Instance.ConsoleScene != m_scene && MainConsole.Instance.ConsoleScene != null) | 159 | if (MainConsole.Instance.ConsoleScene != m_scene && MainConsole.Instance.ConsoleScene != null) |
161 | return; | 160 | return; |
162 | 161 | ||
163 | if (cmd.Length != 5) | 162 | if (cmd.Length < 5) |
164 | { | 163 | { |
165 | MainConsole.Instance.Output("Usage: stand user name <first-name> <last-name>"); | 164 | MainConsole.Instance.Output("Usage: stand user name [--regex] <first-name> <last-name>"); |
166 | return; | 165 | return; |
167 | } | 166 | } |
168 | 167 | ||
169 | string firstName = cmd[3]; | 168 | List<ScenePresence> scenePresences = GetScenePresences(cmd); |
170 | string lastName = cmd[4]; | ||
171 | 169 | ||
172 | ScenePresence sp = m_scene.GetScenePresence(firstName, lastName); | 170 | foreach (ScenePresence sp in scenePresences) |
173 | 171 | { | |
174 | if (sp == null || sp.IsChildAgent) | 172 | MainConsole.Instance.OutputFormat("Standing {0} in {1}", sp.Name, m_scene.Name); |
175 | return; | 173 | sp.StandUp(); |
174 | } | ||
175 | } | ||
176 | |||
177 | private List<ScenePresence> GetScenePresences(string[] cmdParams) | ||
178 | { | ||
179 | bool useRegex = false; | ||
180 | OptionSet options = new OptionSet().Add("regex", v=> useRegex = v != null ); | ||
181 | |||
182 | List<string> mainParams = options.Parse(cmdParams); | ||
183 | |||
184 | string firstName = mainParams[3]; | ||
185 | string lastName = mainParams[4]; | ||
186 | |||
187 | List<ScenePresence> scenePresencesMatched = new List<ScenePresence>(); | ||
188 | |||
189 | if (useRegex) | ||
190 | { | ||
191 | Regex nameRegex = new Regex(string.Format("{0} {1}", firstName, lastName)); | ||
192 | List<ScenePresence> scenePresences = m_scene.GetScenePresences(); | ||
193 | |||
194 | foreach (ScenePresence sp in scenePresences) | ||
195 | { | ||
196 | if (!sp.IsChildAgent && nameRegex.IsMatch(sp.Name)) | ||
197 | scenePresencesMatched.Add(sp); | ||
198 | } | ||
199 | } | ||
200 | else | ||
201 | { | ||
202 | ScenePresence sp = m_scene.GetScenePresence(firstName, lastName); | ||
203 | |||
204 | if (sp != null && !sp.IsChildAgent) | ||
205 | scenePresencesMatched.Add(sp); | ||
206 | } | ||
176 | 207 | ||
177 | sp.StandUp(); | 208 | return scenePresencesMatched; |
178 | } | 209 | } |
179 | } | 210 | } |
180 | } \ No newline at end of file | 211 | } \ No newline at end of file |