diff options
Diffstat (limited to '')
7 files changed, 74 insertions, 105 deletions
diff --git a/OpenSim/Framework/IClientAPI.cs b/OpenSim/Framework/IClientAPI.cs index 43c8c70..76578df 100644 --- a/OpenSim/Framework/IClientAPI.cs +++ b/OpenSim/Framework/IClientAPI.cs | |||
@@ -50,10 +50,12 @@ namespace OpenSim.Framework | |||
50 | Whisper = 0, | 50 | Whisper = 0, |
51 | Say = 1, | 51 | Say = 1, |
52 | Shout = 2, | 52 | Shout = 2, |
53 | // 3 is an obsolete version of Say | ||
53 | StartTyping = 4, | 54 | StartTyping = 4, |
54 | StopTyping = 5, | 55 | StopTyping = 5, |
55 | Broadcast = 0xFF | 56 | Broadcast = 0xFF |
56 | } ; | 57 | } |
58 | |||
57 | public enum ThrottleOutPacketType : int | 59 | public enum ThrottleOutPacketType : int |
58 | { | 60 | { |
59 | Resend = 0, | 61 | Resend = 0, |
@@ -135,6 +137,9 @@ namespace OpenSim.Framework | |||
135 | set { m_sender = value; } | 137 | set { m_sender = value; } |
136 | } | 138 | } |
137 | 139 | ||
140 | /// <summary> | ||
141 | /// | ||
142 | /// </summary> | ||
138 | public IScene Scene | 143 | public IScene Scene |
139 | { | 144 | { |
140 | get { return m_scene; } | 145 | get { return m_scene; } |
@@ -153,18 +158,27 @@ namespace OpenSim.Framework | |||
153 | private sbyte m_discardLevel; | 158 | private sbyte m_discardLevel; |
154 | private uint m_packetNumber; | 159 | private uint m_packetNumber; |
155 | 160 | ||
161 | /// <summary> | ||
162 | /// | ||
163 | /// </summary> | ||
156 | public uint PacketNumber | 164 | public uint PacketNumber |
157 | { | 165 | { |
158 | get { return m_packetNumber; } | 166 | get { return m_packetNumber; } |
159 | set { m_packetNumber = value; } | 167 | set { m_packetNumber = value; } |
160 | } | 168 | } |
161 | 169 | ||
170 | /// <summary> | ||
171 | /// | ||
172 | /// </summary> | ||
162 | public sbyte DiscardLevel | 173 | public sbyte DiscardLevel |
163 | { | 174 | { |
164 | get { return m_discardLevel; } | 175 | get { return m_discardLevel; } |
165 | set { m_discardLevel = value; } | 176 | set { m_discardLevel = value; } |
166 | } | 177 | } |
167 | 178 | ||
179 | /// <summary> | ||
180 | /// | ||
181 | /// </summary> | ||
168 | public LLUUID RequestedAssetID | 182 | public LLUUID RequestedAssetID |
169 | { | 183 | { |
170 | get { return m_requestedAssetID; } | 184 | get { return m_requestedAssetID; } |
@@ -176,6 +190,9 @@ namespace OpenSim.Framework | |||
176 | { | 190 | { |
177 | private List<Wearable> m_nowWearing = new List<Wearable>(); | 191 | private List<Wearable> m_nowWearing = new List<Wearable>(); |
178 | 192 | ||
193 | /// <summary> | ||
194 | /// | ||
195 | /// </summary> | ||
179 | public List<Wearable> NowWearing | 196 | public List<Wearable> NowWearing |
180 | { | 197 | { |
181 | get { return m_nowWearing; } | 198 | get { return m_nowWearing; } |
@@ -269,6 +286,7 @@ namespace OpenSim.Framework | |||
269 | public delegate void AgentRequestSit(IClientAPI remoteClient, LLUUID agentID, LLUUID targetID, LLVector3 offset); | 286 | public delegate void AgentRequestSit(IClientAPI remoteClient, LLUUID agentID, LLUUID targetID, LLVector3 offset); |
270 | 287 | ||
271 | public delegate void AgentSit(IClientAPI remoteClient, LLUUID agentID); | 288 | public delegate void AgentSit(IClientAPI remoteClient, LLUUID agentID); |
289 | |||
272 | public delegate void AvatarPickerRequest(IClientAPI remoteClient, LLUUID agentdata, LLUUID queryID, string UserQuery); | 290 | public delegate void AvatarPickerRequest(IClientAPI remoteClient, LLUUID agentdata, LLUUID queryID, string UserQuery); |
273 | 291 | ||
274 | public delegate void MoveObject(LLUUID objectID, LLVector3 offset, LLVector3 grapPos, IClientAPI remoteClient); | 292 | public delegate void MoveObject(LLUUID objectID, LLVector3 offset, LLVector3 grapPos, IClientAPI remoteClient); |
@@ -340,7 +358,6 @@ namespace OpenSim.Framework | |||
340 | 358 | ||
341 | public delegate void ObjectPermissions(IClientAPI remoteClinet, LLUUID AgentID, LLUUID SessionID, List<ObjectPermissionsPacket.ObjectDataBlock> permChanges); | 359 | public delegate void ObjectPermissions(IClientAPI remoteClinet, LLUUID AgentID, LLUUID SessionID, List<ObjectPermissionsPacket.ObjectDataBlock> permChanges); |
342 | 360 | ||
343 | |||
344 | public interface IClientAPI | 361 | public interface IClientAPI |
345 | { | 362 | { |
346 | event ImprovedInstantMessage OnInstantMessage; | 363 | event ImprovedInstantMessage OnInstantMessage; |
diff --git a/OpenSim/Region/ClientStack/ClientView.cs b/OpenSim/Region/ClientStack/ClientView.cs index 540536e..5d5629b 100644 --- a/OpenSim/Region/ClientStack/ClientView.cs +++ b/OpenSim/Region/ClientStack/ClientView.cs | |||
@@ -587,7 +587,6 @@ namespace OpenSim.Region.ClientStack | |||
587 | /// <summary> | 587 | /// <summary> |
588 | /// | 588 | /// |
589 | /// </summary> | 589 | /// </summary> |
590 | /// <remarks>TODO</remarks> | ||
591 | /// <param name="message"></param> | 590 | /// <param name="message"></param> |
592 | /// <param name="target"></param> | 591 | /// <param name="target"></param> |
593 | public void SendInstantMessage(LLUUID fromAgent, LLUUID fromAgentSession, string message, LLUUID toAgent, | 592 | public void SendInstantMessage(LLUUID fromAgent, LLUUID fromAgentSession, string message, LLUUID toAgent, |
diff --git a/OpenSim/Region/Environment/Modules/ChatModule.cs b/OpenSim/Region/Environment/Modules/ChatModule.cs index ef46224..081e7ac 100644 --- a/OpenSim/Region/Environment/Modules/ChatModule.cs +++ b/OpenSim/Region/Environment/Modules/ChatModule.cs | |||
@@ -110,6 +110,43 @@ namespace OpenSim.Region.Environment.Modules | |||
110 | client.OnChatFromViewer += SimChat; | 110 | client.OnChatFromViewer += SimChat; |
111 | } | 111 | } |
112 | 112 | ||
113 | private void TrySendChatMessage(ScenePresence presence, LLVector3 fromPos, LLVector3 regionPos, | ||
114 | LLUUID fromAgentID, string fromName, ChatTypeEnum type, string message) | ||
115 | { | ||
116 | if (!presence.IsChildAgent) | ||
117 | { | ||
118 | LLVector3 fromRegionPos = fromPos + regionPos; | ||
119 | LLVector3 toRegionPos = presence.AbsolutePosition + regionPos; | ||
120 | int dis = Math.Abs((int) Util.GetDistanceTo(toRegionPos, fromRegionPos)); | ||
121 | |||
122 | switch (type) | ||
123 | { | ||
124 | case ChatTypeEnum.Whisper: | ||
125 | if (dis < m_whisperdistance) | ||
126 | { | ||
127 | // TODO: should change so the message is sent through the avatar rather than direct to the ClientView | ||
128 | presence.ControllingClient.SendChatMessage(message, (byte) type, fromPos, fromName, fromAgentID); | ||
129 | } | ||
130 | break; | ||
131 | case ChatTypeEnum.Say: | ||
132 | if (dis < m_saydistance) | ||
133 | { | ||
134 | presence.ControllingClient.SendChatMessage(message, (byte) type, fromPos, fromName, fromAgentID); | ||
135 | } | ||
136 | break; | ||
137 | case ChatTypeEnum.Shout: | ||
138 | if (dis < m_shoutdistance) | ||
139 | { | ||
140 | presence.ControllingClient.SendChatMessage(message, (byte) type, fromPos, fromName, fromAgentID); | ||
141 | } | ||
142 | break; | ||
143 | case ChatTypeEnum.Broadcast: | ||
144 | presence.ControllingClient.SendChatMessage(message, (byte) type, fromPos, fromName, fromAgentID); | ||
145 | break; | ||
146 | } | ||
147 | } | ||
148 | } | ||
149 | |||
113 | public void SimChat(Object sender, ChatFromViewerArgs e) | 150 | public void SimChat(Object sender, ChatFromViewerArgs e) |
114 | { | 151 | { |
115 | ScenePresence avatar = null; | 152 | ScenePresence avatar = null; |
@@ -123,12 +160,10 @@ namespace OpenSim.Region.Environment.Modules | |||
123 | 160 | ||
124 | // Filled in since it's easier than rewriting right now. | 161 | // Filled in since it's easier than rewriting right now. |
125 | LLVector3 fromPos = e.Position; | 162 | LLVector3 fromPos = e.Position; |
126 | LLVector3 fromRegionPos = e.Position + | 163 | LLVector3 regionPos = new LLVector3(scene.RegionInfo.RegionLocX*256, scene.RegionInfo.RegionLocY*256, 0); |
127 | new LLVector3(scene.RegionInfo.RegionLocX*256, scene.RegionInfo.RegionLocY*256, | 164 | |
128 | 0); | ||
129 | string fromName = e.From; | 165 | string fromName = e.From; |
130 | string message = e.Message; | 166 | string message = e.Message; |
131 | byte type = (byte) e.Type; | ||
132 | LLUUID fromAgentID = LLUUID.Zero; | 167 | LLUUID fromAgentID = LLUUID.Zero; |
133 | 168 | ||
134 | if (e.Sender != null) | 169 | if (e.Sender != null) |
@@ -139,32 +174,11 @@ namespace OpenSim.Region.Environment.Modules | |||
139 | if (avatar != null) | 174 | if (avatar != null) |
140 | { | 175 | { |
141 | fromPos = avatar.AbsolutePosition; | 176 | fromPos = avatar.AbsolutePosition; |
142 | fromRegionPos = fromPos + | 177 | regionPos = new LLVector3(scene.RegionInfo.RegionLocX*256, scene.RegionInfo.RegionLocY*256, 0); |
143 | new LLVector3(scene.RegionInfo.RegionLocX*256, scene.RegionInfo.RegionLocY*256, 0); | ||
144 | fromName = avatar.Firstname + " " + avatar.Lastname; | 178 | fromName = avatar.Firstname + " " + avatar.Lastname; |
145 | fromAgentID = e.Sender.AgentId; | 179 | fromAgentID = e.Sender.AgentId; |
146 | } | 180 | } |
147 | 181 | ||
148 | string typeName; | ||
149 | switch (e.Type) | ||
150 | { | ||
151 | case ChatTypeEnum.Broadcast: | ||
152 | typeName = "broadcasts"; | ||
153 | break; | ||
154 | case ChatTypeEnum.Say: | ||
155 | typeName = "says"; | ||
156 | break; | ||
157 | case ChatTypeEnum.Shout: | ||
158 | typeName = "shouts"; | ||
159 | break; | ||
160 | case ChatTypeEnum.Whisper: | ||
161 | typeName = "whispers"; | ||
162 | break; | ||
163 | default: | ||
164 | typeName = "unknown"; | ||
165 | break; | ||
166 | } | ||
167 | |||
168 | if (e.Message.Length > 0) | 182 | if (e.Message.Length > 0) |
169 | { | 183 | { |
170 | if (m_irc.Connected) | 184 | if (m_irc.Connected) |
@@ -174,69 +188,13 @@ namespace OpenSim.Region.Environment.Modules | |||
174 | 188 | ||
175 | if (e.Channel == 0) | 189 | if (e.Channel == 0) |
176 | { | 190 | { |
177 | foreach (Scene m_scene in m_scenes) | 191 | foreach (Scene s in m_scenes) |
178 | { | 192 | { |
179 | m_scene.ForEachScenePresence(delegate(ScenePresence presence) | 193 | s.ForEachScenePresence(delegate(ScenePresence presence) |
180 | { | 194 | { |
181 | if (!presence.IsChildAgent) | 195 | TrySendChatMessage(presence, fromPos, regionPos, |
182 | { | 196 | fromAgentID, fromName, e.Type, message); |
183 | int dis = -100000; | 197 | }); |
184 | |||
185 | LLVector3 avatarRegionPos = presence.AbsolutePosition + | ||
186 | new LLVector3( | ||
187 | scene.RegionInfo.RegionLocX * 256, | ||
188 | scene.RegionInfo.RegionLocY * 256, | ||
189 | 0); | ||
190 | dis = | ||
191 | Math.Abs((int) Util.GetDistanceTo(avatarRegionPos, fromRegionPos)); | ||
192 | |||
193 | switch (e.Type) | ||
194 | { | ||
195 | case ChatTypeEnum.Whisper: | ||
196 | if (dis < m_whisperdistance) | ||
197 | { | ||
198 | //should change so the message is sent through the avatar rather than direct to the ClientView | ||
199 | presence.ControllingClient.SendChatMessage(message, | ||
200 | type, | ||
201 | fromPos, | ||
202 | fromName, | ||
203 | fromAgentID); | ||
204 | } | ||
205 | break; | ||
206 | case ChatTypeEnum.Say: | ||
207 | if (dis < m_saydistance) | ||
208 | { | ||
209 | //Console.WriteLine("sending chat"); | ||
210 | presence.ControllingClient.SendChatMessage(message, | ||
211 | type, | ||
212 | fromPos, | ||
213 | fromName, | ||
214 | fromAgentID); | ||
215 | } | ||
216 | break; | ||
217 | case ChatTypeEnum.Shout: | ||
218 | if (dis < m_shoutdistance) | ||
219 | { | ||
220 | presence.ControllingClient.SendChatMessage(message, | ||
221 | type, | ||
222 | fromPos, | ||
223 | fromName, | ||
224 | fromAgentID); | ||
225 | } | ||
226 | break; | ||
227 | |||
228 | case ChatTypeEnum.Broadcast: | ||
229 | presence.ControllingClient.SendChatMessage(message, | ||
230 | type, | ||
231 | fromPos, | ||
232 | fromName, | ||
233 | fromAgentID); | ||
234 | break; | ||
235 | default: | ||
236 | break; | ||
237 | } | ||
238 | } | ||
239 | }); | ||
240 | } | 198 | } |
241 | } | 199 | } |
242 | } | 200 | } |
diff --git a/OpenSim/Region/Environment/Modules/InstantMessageModule.cs b/OpenSim/Region/Environment/Modules/InstantMessageModule.cs index 23dd0d9..cf6a94d 100644 --- a/OpenSim/Region/Environment/Modules/InstantMessageModule.cs +++ b/OpenSim/Region/Environment/Modules/InstantMessageModule.cs | |||
@@ -65,12 +65,12 @@ namespace OpenSim.Region.Environment.Modules | |||
65 | LLUUID imSessionID, uint timestamp, string fromAgentName, | 65 | LLUUID imSessionID, uint timestamp, string fromAgentName, |
66 | string message, byte dialog) | 66 | string message, byte dialog) |
67 | { | 67 | { |
68 | foreach (Scene m_scene in m_scenes) | 68 | foreach (Scene scene in m_scenes) |
69 | { | 69 | { |
70 | if (m_scene.Entities.ContainsKey(toAgentID) && m_scene.Entities[toAgentID] is ScenePresence) | 70 | if (scene.Entities.ContainsKey(toAgentID) && scene.Entities[toAgentID] is ScenePresence) |
71 | { | 71 | { |
72 | // Local Message | 72 | // Local message |
73 | ScenePresence user = (ScenePresence) m_scene.Entities[toAgentID]; | 73 | ScenePresence user = (ScenePresence) scene.Entities[toAgentID]; |
74 | if (!user.IsChildAgent) | 74 | if (!user.IsChildAgent) |
75 | { | 75 | { |
76 | user.ControllingClient.SendInstantMessage(fromAgentID, fromAgentSession, message, | 76 | user.ControllingClient.SendInstantMessage(fromAgentID, fromAgentSession, message, |
@@ -83,6 +83,7 @@ namespace OpenSim.Region.Environment.Modules | |||
83 | } | 83 | } |
84 | 84 | ||
85 | // Still here, try send via Grid | 85 | // Still here, try send via Grid |
86 | // TODO | ||
86 | } | 87 | } |
87 | 88 | ||
88 | public void PostInitialise() | 89 | public void PostInitialise() |
diff --git a/OpenSim/Region/Environment/Scenes/Scene.PacketHandlers.cs b/OpenSim/Region/Environment/Scenes/Scene.PacketHandlers.cs index 745345d..0c9f38c 100644 --- a/OpenSim/Region/Environment/Scenes/Scene.PacketHandlers.cs +++ b/OpenSim/Region/Environment/Scenes/Scene.PacketHandlers.cs | |||
@@ -156,10 +156,10 @@ namespace OpenSim.Region.Environment.Scenes | |||
156 | } | 156 | } |
157 | } | 157 | } |
158 | } | 158 | } |
159 | |||
159 | public void ProcessAvatarPickerRequest(IClientAPI client, LLUUID avatarID, LLUUID RequestID, string query) | 160 | public void ProcessAvatarPickerRequest(IClientAPI client, LLUUID avatarID, LLUUID RequestID, string query) |
160 | { | 161 | { |
161 | //EventManager.TriggerAvatarPickerRequest(); | 162 | //EventManager.TriggerAvatarPickerRequest(); |
162 | |||
163 | 163 | ||
164 | List<AvatarPickerAvatar> AvatarResponses = new List<AvatarPickerAvatar>(); | 164 | List<AvatarPickerAvatar> AvatarResponses = new List<AvatarPickerAvatar>(); |
165 | AvatarResponses = CommsManager.GenerateAgentPickerRequestResponse(RequestID, query); | 165 | AvatarResponses = CommsManager.GenerateAgentPickerRequestResponse(RequestID, query); |
@@ -167,7 +167,7 @@ namespace OpenSim.Region.Environment.Scenes | |||
167 | AvatarPickerReplyPacket replyPacket = new AvatarPickerReplyPacket(); | 167 | AvatarPickerReplyPacket replyPacket = new AvatarPickerReplyPacket(); |
168 | AvatarPickerReplyPacket.DataBlock[] searchData = new AvatarPickerReplyPacket.DataBlock[AvatarResponses.Count]; | 168 | AvatarPickerReplyPacket.DataBlock[] searchData = new AvatarPickerReplyPacket.DataBlock[AvatarResponses.Count]; |
169 | AvatarPickerReplyPacket.AgentDataBlock agentData = new AvatarPickerReplyPacket.AgentDataBlock(); | 169 | AvatarPickerReplyPacket.AgentDataBlock agentData = new AvatarPickerReplyPacket.AgentDataBlock(); |
170 | 170 | ||
171 | agentData.AgentID = avatarID; | 171 | agentData.AgentID = avatarID; |
172 | agentData.QueryID = RequestID; | 172 | agentData.QueryID = RequestID; |
173 | replyPacket.AgentData = agentData; | 173 | replyPacket.AgentData = agentData; |
diff --git a/OpenSim/Region/Environment/Scenes/SceneObjectPart.cs b/OpenSim/Region/Environment/Scenes/SceneObjectPart.cs index 05a59a2..8eef40b 100644 --- a/OpenSim/Region/Environment/Scenes/SceneObjectPart.cs +++ b/OpenSim/Region/Environment/Scenes/SceneObjectPart.cs | |||
@@ -68,7 +68,7 @@ namespace OpenSim.Region.Environment.Scenes | |||
68 | public Int32 CreationDate; | 68 | public Int32 CreationDate; |
69 | public uint ParentID = 0; | 69 | public uint ParentID = 0; |
70 | 70 | ||
71 | // Main grid has default permissions as follows | 71 | // Main grid has default permissions as follows |
72 | // | 72 | // |
73 | public uint OwnerMask = FULL_MASK_PERMISSIONS_OWNER; | 73 | public uint OwnerMask = FULL_MASK_PERMISSIONS_OWNER; |
74 | public uint NextOwnerMask = OBJNEXT_OWNER; | 74 | public uint NextOwnerMask = OBJNEXT_OWNER; |
@@ -85,7 +85,6 @@ namespace OpenSim.Region.Environment.Scenes | |||
85 | [XmlIgnore] | 85 | [XmlIgnore] |
86 | public uint TimeStampLastActivity = 0; // Will be used for AutoReturn | 86 | public uint TimeStampLastActivity = 0; // Will be used for AutoReturn |
87 | 87 | ||
88 | |||
89 | /// <summary> | 88 | /// <summary> |
90 | /// Only used internally to schedule client updates | 89 | /// Only used internally to schedule client updates |
91 | /// </summary> | 90 | /// </summary> |
diff --git a/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/Server_API/LSL_BuiltIn_Commands.cs b/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/Server_API/LSL_BuiltIn_Commands.cs index 1b660b8..353382d 100644 --- a/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/Server_API/LSL_BuiltIn_Commands.cs +++ b/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/Server_API/LSL_BuiltIn_Commands.cs | |||
@@ -59,7 +59,6 @@ namespace OpenSim.Region.ScriptEngine.DotNetEngine.Compiler | |||
59 | private LLUUID m_itemID; | 59 | private LLUUID m_itemID; |
60 | private bool throwErrorOnNotImplemented = true; | 60 | private bool throwErrorOnNotImplemented = true; |
61 | 61 | ||
62 | |||
63 | public LSL_BuiltIn_Commands(ScriptEngine ScriptEngine, SceneObjectPart host, uint localID, LLUUID itemID) | 62 | public LSL_BuiltIn_Commands(ScriptEngine ScriptEngine, SceneObjectPart host, uint localID, LLUUID itemID) |
64 | { | 63 | { |
65 | m_ScriptEngine = ScriptEngine; | 64 | m_ScriptEngine = ScriptEngine; |
@@ -67,11 +66,9 @@ namespace OpenSim.Region.ScriptEngine.DotNetEngine.Compiler | |||
67 | m_localID = localID; | 66 | m_localID = localID; |
68 | m_itemID = itemID; | 67 | m_itemID = itemID; |
69 | 68 | ||
70 | |||
71 | //MainLog.Instance.Notice("ScriptEngine", "LSL_BaseClass.Start() called. Hosted by [" + m_host.Name + ":" + m_host.UUID + "@" + m_host.AbsolutePosition + "]"); | 69 | //MainLog.Instance.Notice("ScriptEngine", "LSL_BaseClass.Start() called. Hosted by [" + m_host.Name + ":" + m_host.UUID + "@" + m_host.AbsolutePosition + "]"); |
72 | } | 70 | } |
73 | 71 | ||
74 | |||
75 | private string m_state = "default"; | 72 | private string m_state = "default"; |
76 | 73 | ||
77 | public string State() | 74 | public string State() |
@@ -95,7 +92,6 @@ namespace OpenSim.Region.ScriptEngine.DotNetEngine.Compiler | |||
95 | return lease; | 92 | return lease; |
96 | } | 93 | } |
97 | 94 | ||
98 | |||
99 | public Scene World | 95 | public Scene World |
100 | { | 96 | { |
101 | get { return m_ScriptEngine.World; } | 97 | get { return m_ScriptEngine.World; } |
@@ -1022,7 +1018,6 @@ namespace OpenSim.Region.ScriptEngine.DotNetEngine.Compiler | |||
1022 | m_host.SetText(text, av3, alpha); | 1018 | m_host.SetText(text, av3, alpha); |
1023 | } | 1019 | } |
1024 | 1020 | ||
1025 | |||
1026 | public double llWater(LSL_Types.Vector3 offset) | 1021 | public double llWater(LSL_Types.Vector3 offset) |
1027 | { | 1022 | { |
1028 | NotImplemented("llWater"); | 1023 | NotImplemented("llWater"); |
@@ -2300,4 +2295,4 @@ namespace OpenSim.Region.ScriptEngine.DotNetEngine.Compiler | |||
2300 | throw new NotImplementedException("Command not implemented: " + Command); | 2295 | throw new NotImplementedException("Command not implemented: " + Command); |
2301 | } | 2296 | } |
2302 | } | 2297 | } |
2303 | } \ No newline at end of file | 2298 | } |