aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/OptionalModules/World/NPC
diff options
context:
space:
mode:
Diffstat (limited to 'OpenSim/Region/OptionalModules/World/NPC')
-rw-r--r--OpenSim/Region/OptionalModules/World/NPC/NPCAvatar.cs67
-rw-r--r--OpenSim/Region/OptionalModules/World/NPC/NPCModule.cs78
-rw-r--r--OpenSim/Region/OptionalModules/World/NPC/Tests/NPCModuleTests.cs4
3 files changed, 108 insertions, 41 deletions
diff --git a/OpenSim/Region/OptionalModules/World/NPC/NPCAvatar.cs b/OpenSim/Region/OptionalModules/World/NPC/NPCAvatar.cs
index fb644b7..7228348 100644
--- a/OpenSim/Region/OptionalModules/World/NPC/NPCAvatar.cs
+++ b/OpenSim/Region/OptionalModules/World/NPC/NPCAvatar.cs
@@ -61,10 +61,12 @@ namespace OpenSim.Region.OptionalModules.World.NPC
61 private readonly string m_firstname; 61 private readonly string m_firstname;
62 private readonly string m_lastname; 62 private readonly string m_lastname;
63 private readonly Vector3 m_startPos; 63 private readonly Vector3 m_startPos;
64 private readonly UUID m_uuid; 64 private UUID m_uuid = UUID.Random();
65 private readonly Scene m_scene; 65 private readonly Scene m_scene;
66 private readonly UUID m_ownerID; 66 private readonly UUID m_ownerID;
67 67
68 public List<uint> SelectedObjects {get; private set;}
69
68 public NPCAvatar( 70 public NPCAvatar(
69 string firstname, string lastname, Vector3 position, UUID ownerID, bool senseAsAgent, Scene scene) 71 string firstname, string lastname, Vector3 position, UUID ownerID, bool senseAsAgent, Scene scene)
70 { 72 {
@@ -94,6 +96,8 @@ namespace OpenSim.Region.OptionalModules.World.NPC
94 get { return m_scene; } 96 get { return m_scene; }
95 } 97 }
96 98
99 public int PingTimeMS { get { return 0; } }
100
97 public UUID OwnerID 101 public UUID OwnerID
98 { 102 {
99 get { return m_ownerID; } 103 get { return m_ownerID; }
@@ -187,9 +191,15 @@ namespace OpenSim.Region.OptionalModules.World.NPC
187 { 191 {
188 192
189 } 193 }
190 194
191 public void SendSitResponse(UUID TargetID, Vector3 OffsetPos, Quaternion SitOrientation, bool autopilot, 195 public void SendFindAgent(UUID HunterID, UUID PreyID, double GlobalX, double GlobalY)
192 Vector3 CameraAtOffset, Vector3 CameraEyeOffset, bool ForceMouseLook) 196 {
197
198 }
199
200 public void SendSitResponse(UUID TargetID, Vector3 OffsetPos,
201 Quaternion SitOrientation, bool autopilot,
202 Vector3 CameraAtOffset, Vector3 CameraEyeOffset, bool ForceMouseLook)
193 { 203 {
194 204
195 } 205 }
@@ -248,7 +258,7 @@ namespace OpenSim.Region.OptionalModules.World.NPC
248#pragma warning disable 67 258#pragma warning disable 67
249 public event Action<IClientAPI> OnLogout; 259 public event Action<IClientAPI> OnLogout;
250 public event ObjectPermissions OnObjectPermissions; 260 public event ObjectPermissions OnObjectPermissions;
251 261 public event MoveItemsAndLeaveCopy OnMoveItemsAndLeaveCopy;
252 public event MoneyTransferRequest OnMoneyTransferRequest; 262 public event MoneyTransferRequest OnMoneyTransferRequest;
253 public event ParcelBuy OnParcelBuy; 263 public event ParcelBuy OnParcelBuy;
254 public event Action<IClientAPI> OnConnectionClosed; 264 public event Action<IClientAPI> OnConnectionClosed;
@@ -268,6 +278,7 @@ namespace OpenSim.Region.OptionalModules.World.NPC
268 public event ObjectDrop OnObjectDrop; 278 public event ObjectDrop OnObjectDrop;
269 public event StartAnim OnStartAnim; 279 public event StartAnim OnStartAnim;
270 public event StopAnim OnStopAnim; 280 public event StopAnim OnStopAnim;
281 public event ChangeAnim OnChangeAnim;
271 public event LinkObjects OnLinkObjects; 282 public event LinkObjects OnLinkObjects;
272 public event DelinkObjects OnDelinkObjects; 283 public event DelinkObjects OnDelinkObjects;
273 public event RequestMapBlocks OnRequestMapBlocks; 284 public event RequestMapBlocks OnRequestMapBlocks;
@@ -318,6 +329,7 @@ namespace OpenSim.Region.OptionalModules.World.NPC
318 public event UpdatePrimTexture OnUpdatePrimTexture; 329 public event UpdatePrimTexture OnUpdatePrimTexture;
319 public event UpdateVector OnUpdatePrimGroupPosition; 330 public event UpdateVector OnUpdatePrimGroupPosition;
320 public event UpdateVector OnUpdatePrimSinglePosition; 331 public event UpdateVector OnUpdatePrimSinglePosition;
332 public event ClientChangeObject onClientChangeObject;
321 public event UpdatePrimRotation OnUpdatePrimGroupRotation; 333 public event UpdatePrimRotation OnUpdatePrimGroupRotation;
322 public event UpdatePrimSingleRotationPosition OnUpdatePrimSingleRotationPosition; 334 public event UpdatePrimSingleRotationPosition OnUpdatePrimSingleRotationPosition;
323 public event UpdatePrimSingleRotation OnUpdatePrimSingleRotation; 335 public event UpdatePrimSingleRotation OnUpdatePrimSingleRotation;
@@ -456,7 +468,7 @@ namespace OpenSim.Region.OptionalModules.World.NPC
456 public event ClassifiedInfoRequest OnClassifiedInfoRequest; 468 public event ClassifiedInfoRequest OnClassifiedInfoRequest;
457 public event ClassifiedInfoUpdate OnClassifiedInfoUpdate; 469 public event ClassifiedInfoUpdate OnClassifiedInfoUpdate;
458 public event ClassifiedDelete OnClassifiedDelete; 470 public event ClassifiedDelete OnClassifiedDelete;
459 public event ClassifiedDelete OnClassifiedGodDelete; 471 public event ClassifiedGodDelete OnClassifiedGodDelete;
460 472
461 public event EventNotificationAddRequest OnEventNotificationAddRequest; 473 public event EventNotificationAddRequest OnEventNotificationAddRequest;
462 public event EventNotificationRemoveRequest OnEventNotificationRemoveRequest; 474 public event EventNotificationRemoveRequest OnEventNotificationRemoveRequest;
@@ -495,11 +507,12 @@ namespace OpenSim.Region.OptionalModules.World.NPC
495 public event GroupVoteHistoryRequest OnGroupVoteHistoryRequest; 507 public event GroupVoteHistoryRequest OnGroupVoteHistoryRequest;
496 public event SimWideDeletesDelegate OnSimWideDeletes; 508 public event SimWideDeletesDelegate OnSimWideDeletes;
497 public event SendPostcard OnSendPostcard; 509 public event SendPostcard OnSendPostcard;
510 public event ChangeInventoryItemFlags OnChangeInventoryItemFlags;
498 public event MuteListEntryUpdate OnUpdateMuteListEntry; 511 public event MuteListEntryUpdate OnUpdateMuteListEntry;
499 public event MuteListEntryRemove OnRemoveMuteListEntry; 512 public event MuteListEntryRemove OnRemoveMuteListEntry;
500 public event GodlikeMessage onGodlikeMessage; 513 public event GodlikeMessage onGodlikeMessage;
501 public event GodUpdateRegionInfoUpdate OnGodUpdateRegionInfoUpdate; 514 public event GodUpdateRegionInfoUpdate OnGodUpdateRegionInfoUpdate;
502 515 public event GenericCall2 OnUpdateThrottles;
503#pragma warning restore 67 516#pragma warning restore 67
504 517
505 #endregion 518 #endregion
@@ -522,6 +535,7 @@ namespace OpenSim.Region.OptionalModules.World.NPC
522 public virtual UUID AgentId 535 public virtual UUID AgentId
523 { 536 {
524 get { return m_uuid; } 537 get { return m_uuid; }
538 set { m_uuid = value; }
525 } 539 }
526 540
527 public UUID SessionId 541 public UUID SessionId
@@ -627,6 +641,17 @@ namespace OpenSim.Region.OptionalModules.World.NPC
627 public virtual void SetChildAgentThrottle(byte[] throttle) 641 public virtual void SetChildAgentThrottle(byte[] throttle)
628 { 642 {
629 } 643 }
644
645 public virtual void SetChildAgentThrottle(byte[] throttle, float factor)
646 {
647
648 }
649
650 public void SetAgentThrottleSilent(int throttle, int setting)
651 {
652
653
654 }
630 public byte[] GetThrottlesPacked(float multiplier) 655 public byte[] GetThrottlesPacked(float multiplier)
631 { 656 {
632 return new byte[0]; 657 return new byte[0];
@@ -665,6 +690,11 @@ namespace OpenSim.Region.OptionalModules.World.NPC
665 690
666 } 691 }
667 692
693 public virtual bool CanSendLayerData()
694 {
695 return false;
696 }
697
668 public virtual void SendLayerData(float[] map) 698 public virtual void SendLayerData(float[] map)
669 { 699 {
670 } 700 }
@@ -772,6 +802,10 @@ namespace OpenSim.Region.OptionalModules.World.NPC
772 { 802 {
773 } 803 }
774 804
805 public void SendInventoryItemCreateUpdate(InventoryItemBase Item, UUID transactionID, uint callbackId)
806 {
807 }
808
775 public virtual void SendRemoveInventoryItem(UUID itemID) 809 public virtual void SendRemoveInventoryItem(UUID itemID)
776 { 810 {
777 } 811 }
@@ -788,7 +822,7 @@ namespace OpenSim.Region.OptionalModules.World.NPC
788 { 822 {
789 } 823 }
790 824
791 public virtual void SendXferPacket(ulong xferID, uint packet, byte[] data) 825 public virtual void SendXferPacket(ulong xferID, uint packet, byte[] data, bool isTaskInventory)
792 { 826 {
793 } 827 }
794 public virtual void SendAbortXferPacket(ulong xferID) 828 public virtual void SendAbortXferPacket(ulong xferID)
@@ -933,10 +967,10 @@ namespace OpenSim.Region.OptionalModules.World.NPC
933 967
934 public void Close() 968 public void Close()
935 { 969 {
936 Close(false); 970 Close(true, false);
937 } 971 }
938 972
939 public void Close(bool force) 973 public void Close(bool sendStop, bool force)
940 { 974 {
941 // Remove ourselves from the scene 975 // Remove ourselves from the scene
942 m_scene.RemoveClient(AgentId, false); 976 m_scene.RemoveClient(AgentId, false);
@@ -1155,6 +1189,10 @@ namespace OpenSim.Region.OptionalModules.World.NPC
1155 { 1189 {
1156 } 1190 }
1157 1191
1192 public void SendAgentGroupDataUpdate(UUID avatarID, GroupMembershipData[] data)
1193 {
1194 }
1195
1158 public void SendTerminateFriend(UUID exFriendID) 1196 public void SendTerminateFriend(UUID exFriendID)
1159 { 1197 {
1160 } 1198 }
@@ -1269,5 +1307,14 @@ namespace OpenSim.Region.OptionalModules.World.NPC
1269 { 1307 {
1270 } 1308 }
1271 1309
1310 public void SendPartFullUpdate(ISceneEntity ent, uint? parentID)
1311 {
1312 }
1313
1314 public int GetAgentThrottleSilent(int throttle)
1315 {
1316 return 0;
1317 }
1318
1272 } 1319 }
1273} 1320}
diff --git a/OpenSim/Region/OptionalModules/World/NPC/NPCModule.cs b/OpenSim/Region/OptionalModules/World/NPC/NPCModule.cs
index 9232db9..d40fa48 100644
--- a/OpenSim/Region/OptionalModules/World/NPC/NPCModule.cs
+++ b/OpenSim/Region/OptionalModules/World/NPC/NPCModule.cs
@@ -52,6 +52,11 @@ namespace OpenSim.Region.OptionalModules.World.NPC
52 private Dictionary<UUID, NPCAvatar> m_avatars = 52 private Dictionary<UUID, NPCAvatar> m_avatars =
53 new Dictionary<UUID, NPCAvatar>(); 53 new Dictionary<UUID, NPCAvatar>();
54 54
55
56
57 private NPCOptionsFlags m_NPCOptionFlags;
58 public NPCOptionsFlags NPCOptionFlags {get {return m_NPCOptionFlags;}}
59
55 public bool Enabled { get; private set; } 60 public bool Enabled { get; private set; }
56 61
57 public void Initialise(IConfigSource source) 62 public void Initialise(IConfigSource source)
@@ -59,6 +64,21 @@ namespace OpenSim.Region.OptionalModules.World.NPC
59 IConfig config = source.Configs["NPC"]; 64 IConfig config = source.Configs["NPC"];
60 65
61 Enabled = (config != null && config.GetBoolean("Enabled", false)); 66 Enabled = (config != null && config.GetBoolean("Enabled", false));
67 m_NPCOptionFlags = NPCOptionsFlags.None;
68 if(Enabled)
69 {
70 if(config.GetBoolean("AllowNotOwned", true))
71 m_NPCOptionFlags |= NPCOptionsFlags.AllowNotOwned;
72
73 if(config.GetBoolean("AllowSenseAsAvatar", true))
74 m_NPCOptionFlags |= NPCOptionsFlags.AllowSenseAsAvatar;
75
76 if(config.GetBoolean("AllowCloneOtherAvatars", true))
77 m_NPCOptionFlags |= NPCOptionsFlags.AllowCloneOtherAvatars;
78
79 if(config.GetBoolean("NoNPCGroup", true))
80 m_NPCOptionFlags |= NPCOptionsFlags.NoNPCGroup;
81 }
62 } 82 }
63 83
64 public void AddRegion(Scene scene) 84 public void AddRegion(Scene scene)
@@ -167,10 +187,9 @@ namespace OpenSim.Region.OptionalModules.World.NPC
167 npcAvatar.CircuitCode = (uint)Util.RandomClass.Next(0, 187 npcAvatar.CircuitCode = (uint)Util.RandomClass.Next(0,
168 int.MaxValue); 188 int.MaxValue);
169 189
170 m_log.DebugFormat( 190// m_log.DebugFormat(
171 "[NPC MODULE]: Creating NPC {0} {1} {2}, owner={3}, senseAsAgent={4} at {5} in {6}", 191// "[NPC MODULE]: Creating NPC {0} {1} {2}, owner={3}, senseAsAgent={4} at {5} in {6}",
172 firstname, lastname, npcAvatar.AgentId, owner, 192// firstname, lastname, npcAvatar.AgentId, owner, senseAsAgent, position, scene.RegionInfo.RegionName);
173 senseAsAgent, position, scene.RegionInfo.RegionName);
174 193
175 AgentCircuitData acd = new AgentCircuitData(); 194 AgentCircuitData acd = new AgentCircuitData();
176 acd.AgentID = npcAvatar.AgentId; 195 acd.AgentID = npcAvatar.AgentId;
@@ -192,36 +211,31 @@ namespace OpenSim.Region.OptionalModules.World.NPC
192 } 211 }
193 */ 212 */
194 213
195 lock (m_avatars) 214// ManualResetEvent ev = new ManualResetEvent(false);
196 {
197 scene.AuthenticateHandler.AddNewCircuit(npcAvatar.CircuitCode,
198 acd);
199 scene.AddNewAgent(npcAvatar, PresenceType.Npc);
200 215
201 ScenePresence sp; 216// Util.FireAndForget(delegate(object x) {
202 if (scene.TryGetScenePresence(npcAvatar.AgentId, out sp)) 217 lock (m_avatars)
203 { 218 {
204 /* 219 scene.AuthenticateHandler.AddNewCircuit(npcAvatar.CircuitCode, acd);
205 m_log.DebugFormat( 220 scene.AddNewAgent(npcAvatar, PresenceType.Npc);
206 "[NPC MODULE]: Successfully retrieved scene presence for NPC {0} {1}",
207 sp.Name, sp.UUID);
208 */
209
210 sp.CompleteMovement(npcAvatar, false);
211 m_avatars.Add(npcAvatar.AgentId, npcAvatar);
212 m_log.DebugFormat("[NPC MODULE]: Created NPC {0} {1}", npcAvatar.AgentId, sp.Name);
213 221
214 return npcAvatar.AgentId; 222 ScenePresence sp;
223 if (scene.TryGetScenePresence(npcAvatar.AgentId, out sp))
224 {
225
226 sp.CompleteMovement(npcAvatar, false);
227 m_avatars.Add(npcAvatar.AgentId, npcAvatar);
228// m_log.DebugFormat("[NPC MODULE]: Created NPC {0} {1}", npcAvatar.AgentId, sp.Name);
229 }
215 } 230 }
216 else 231// ev.Set();
217 { 232// });
218 m_log.WarnFormat(
219 "[NPC MODULE]: Could not find scene presence for NPC {0} {1}",
220 sp.Name, sp.UUID);
221 233
222 return UUID.Zero; 234// ev.WaitOne();
223 } 235
224 } 236// m_log.DebugFormat("[NPC MODULE]: Created NPC with id {0}", npcAvatar.AgentId);
237
238 return npcAvatar.AgentId;
225 } 239 }
226 240
227 public bool MoveToTarget(UUID agentID, Scene scene, Vector3 pos, 241 public bool MoveToTarget(UUID agentID, Scene scene, Vector3 pos,
@@ -436,9 +450,15 @@ namespace OpenSim.Region.OptionalModules.World.NPC
436 { 450 {
437 NPCAvatar av; 451 NPCAvatar av;
438 if (m_avatars.TryGetValue(npcID, out av)) 452 if (m_avatars.TryGetValue(npcID, out av))
453 {
454 if (npcID == callerID)
455 return true;
439 return CheckPermissions(av, callerID); 456 return CheckPermissions(av, callerID);
457 }
440 else 458 else
459 {
441 return false; 460 return false;
461 }
442 } 462 }
443 } 463 }
444 464
diff --git a/OpenSim/Region/OptionalModules/World/NPC/Tests/NPCModuleTests.cs b/OpenSim/Region/OptionalModules/World/NPC/Tests/NPCModuleTests.cs
index 77dfd40..a892cf4 100644
--- a/OpenSim/Region/OptionalModules/World/NPC/Tests/NPCModuleTests.cs
+++ b/OpenSim/Region/OptionalModules/World/NPC/Tests/NPCModuleTests.cs
@@ -112,7 +112,7 @@ namespace OpenSim.Region.OptionalModules.World.NPC.Tests
112 // ScenePresence.SendInitialData() to reset our entire appearance. 112 // ScenePresence.SendInitialData() to reset our entire appearance.
113 m_scene.AssetService.Store(AssetHelpers.CreateNotecardAsset(originalFace8TextureId)); 113 m_scene.AssetService.Store(AssetHelpers.CreateNotecardAsset(originalFace8TextureId));
114 114
115 m_afMod.SetAppearance(sp, originalTe, null, null); 115 m_afMod.SetAppearance(sp, originalTe, null, new WearableCacheItem[0] );
116 116
117 UUID npcId = m_npcMod.CreateNPC("John", "Smith", new Vector3(128, 128, 30), UUID.Zero, true, m_scene, sp.Appearance); 117 UUID npcId = m_npcMod.CreateNPC("John", "Smith", new Vector3(128, 128, 30), UUID.Zero, true, m_scene, sp.Appearance);
118 118
@@ -483,4 +483,4 @@ namespace OpenSim.Region.OptionalModules.World.NPC.Tests
483 Assert.That(npc.ParentID, Is.EqualTo(0)); 483 Assert.That(npc.ParentID, Is.EqualTo(0));
484 } 484 }
485 } 485 }
486} \ No newline at end of file 486}