aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/ScriptEngine/Shared/Api/Implementation
diff options
context:
space:
mode:
authorMelanie2012-01-06 21:34:43 +0100
committerMelanie2012-01-06 21:34:43 +0100
commitf1846045a6663c0530524d7c91d1ed17bf449c07 (patch)
treef4592ad721f22ff632da5f14dd3552647d404867 /OpenSim/Region/ScriptEngine/Shared/Api/Implementation
parentMerge branch 'master' into careminster (diff)
downloadopensim-SC_OLD-f1846045a6663c0530524d7c91d1ed17bf449c07.zip
opensim-SC_OLD-f1846045a6663c0530524d7c91d1ed17bf449c07.tar.gz
opensim-SC_OLD-f1846045a6663c0530524d7c91d1ed17bf449c07.tar.bz2
opensim-SC_OLD-f1846045a6663c0530524d7c91d1ed17bf449c07.tar.xz
Add osNpcCreateOwned to create an owned NPC. Those can be sensed only by the owner, can be destroyed only by the owner and only the owner can save their appearance. Added "NPC" as a flag to llSensor to sense NPCs and exclude them from "AGENT" results.
Diffstat (limited to 'OpenSim/Region/ScriptEngine/Shared/Api/Implementation')
-rw-r--r--OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs22
-rw-r--r--OpenSim/Region/ScriptEngine/Shared/Api/Implementation/Plugins/SensorRepeat.cs19
2 files changed, 37 insertions, 4 deletions
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs
index 8cc6554..120ae2c 100644
--- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs
+++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs
@@ -2076,10 +2076,20 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
2076 return retVal; 2076 return retVal;
2077 } 2077 }
2078 2078
2079 public LSL_Key osNpcCreateOwned(string firstname, string lastname, LSL_Vector position, string notecard)
2080 {
2081 CheckThreatLevel(ThreatLevel.High, "osNpcCreateOwned");
2082 return NpcCreate(firstname, lastname, position, notecard, true);
2083 }
2084
2079 public LSL_Key osNpcCreate(string firstname, string lastname, LSL_Vector position, string notecard) 2085 public LSL_Key osNpcCreate(string firstname, string lastname, LSL_Vector position, string notecard)
2080 { 2086 {
2081 CheckThreatLevel(ThreatLevel.High, "osNpcCreate"); 2087 CheckThreatLevel(ThreatLevel.High, "osNpcCreated");
2088 return NpcCreate(firstname, lastname, position, notecard, false);
2089 }
2082 2090
2091 private LSL_Key NpcCreate(string firstname, string lastname, LSL_Vector position, string notecard, bool owned)
2092 {
2083 INPCModule module = World.RequestModuleInterface<INPCModule>(); 2093 INPCModule module = World.RequestModuleInterface<INPCModule>();
2084 if (module != null) 2094 if (module != null)
2085 { 2095 {
@@ -2108,9 +2118,13 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
2108 if (appearance == null) 2118 if (appearance == null)
2109 return new LSL_Key(UUID.Zero.ToString()); 2119 return new LSL_Key(UUID.Zero.ToString());
2110 2120
2121 UUID ownerID = UUID.Zero;
2122 if (owned)
2123 ownerID = m_host.OwnerID;
2111 UUID x = module.CreateNPC(firstname, 2124 UUID x = module.CreateNPC(firstname,
2112 lastname, 2125 lastname,
2113 new Vector3((float) position.x, (float) position.y, (float) position.z), 2126 new Vector3((float) position.x, (float) position.y, (float) position.z),
2127 ownerID,
2114 World,appearance); 2128 World,appearance);
2115 2129
2116 return new LSL_Key(x.ToString()); 2130 return new LSL_Key(x.ToString());
@@ -2140,6 +2154,10 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
2140 if (!npcModule.IsNPC(npcId, m_host.ParentGroup.Scene)) 2154 if (!npcModule.IsNPC(npcId, m_host.ParentGroup.Scene))
2141 return new LSL_Key(UUID.Zero.ToString()); 2155 return new LSL_Key(UUID.Zero.ToString());
2142 2156
2157 UUID ownerID = npcModule.GetOwner(npcId);
2158 if (ownerID != UUID.Zero && ownerID != m_host.OwnerID)
2159 return new LSL_Key(UUID.Zero.ToString());
2160
2143 return SaveAppearanceToNotecard(npcId, notecard); 2161 return SaveAppearanceToNotecard(npcId, notecard);
2144 } 2162 }
2145 2163
@@ -2319,7 +2337,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
2319 INPCModule module = World.RequestModuleInterface<INPCModule>(); 2337 INPCModule module = World.RequestModuleInterface<INPCModule>();
2320 if (module != null) 2338 if (module != null)
2321 { 2339 {
2322 module.DeleteNPC(new UUID(npc.m_string), World); 2340 module.DeleteNPC(new UUID(npc.m_string), m_host.OwnerID, World);
2323 } 2341 }
2324 } 2342 }
2325 2343
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/Plugins/SensorRepeat.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/Plugins/SensorRepeat.cs
index 91a7b87..ac1c1a9 100644
--- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/Plugins/SensorRepeat.cs
+++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/Plugins/SensorRepeat.cs
@@ -26,10 +26,13 @@
26 */ 26 */
27 27
28using System; 28using System;
29using System.Reflection;
29using System.Collections.Generic; 30using System.Collections.Generic;
30using OpenMetaverse; 31using OpenMetaverse;
31using OpenSim.Framework; 32using OpenSim.Framework;
33using log4net;
32 34
35using OpenSim.Region.Framework.Interfaces;
33using OpenSim.Region.Framework.Scenes; 36using OpenSim.Region.Framework.Scenes;
34using OpenSim.Region.ScriptEngine.Shared; 37using OpenSim.Region.ScriptEngine.Shared;
35using OpenSim.Region.ScriptEngine.Shared.Api; 38using OpenSim.Region.ScriptEngine.Shared.Api;
@@ -51,6 +54,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api.Plugins
51 54
52 private const int AGENT = 1; 55 private const int AGENT = 1;
53 private const int AGENT_BY_USERNAME = 0x10; 56 private const int AGENT_BY_USERNAME = 0x10;
57 private const int NPC = 0x20;
54 private const int ACTIVE = 2; 58 private const int ACTIVE = 2;
55 private const int PASSIVE = 4; 59 private const int PASSIVE = 4;
56 private const int SCRIPTED = 8; 60 private const int SCRIPTED = 8;
@@ -203,7 +207,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api.Plugins
203 List<SensedEntity> sensedEntities = new List<SensedEntity>(); 207 List<SensedEntity> sensedEntities = new List<SensedEntity>();
204 208
205 // Is the sensor type is AGENT and not SCRIPTED then include agents 209 // Is the sensor type is AGENT and not SCRIPTED then include agents
206 if ((ts.type & (AGENT | AGENT_BY_USERNAME)) != 0 && (ts.type & SCRIPTED) == 0) 210 if ((ts.type & (AGENT | AGENT_BY_USERNAME | NPC)) != 0 && (ts.type & SCRIPTED) == 0)
207 { 211 {
208 sensedEntities.AddRange(doAgentSensor(ts)); 212 sensedEntities.AddRange(doAgentSensor(ts));
209 } 213 }
@@ -415,6 +419,8 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api.Plugins
415 419
416 private List<SensedEntity> doAgentSensor(SenseRepeatClass ts) 420 private List<SensedEntity> doAgentSensor(SenseRepeatClass ts)
417 { 421 {
422 INPCModule npcModule = m_CmdManager.m_ScriptEngine.World.RequestModuleInterface<INPCModule>();
423
418 List<SensedEntity> sensedEntities = new List<SensedEntity>(); 424 List<SensedEntity> sensedEntities = new List<SensedEntity>();
419 425
420 // If nobody about quit fast 426 // If nobody about quit fast
@@ -446,7 +452,9 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api.Plugins
446 452
447 Action<ScenePresence> senseEntity = new Action<ScenePresence>(delegate(ScenePresence presence) 453 Action<ScenePresence> senseEntity = new Action<ScenePresence>(delegate(ScenePresence presence)
448 { 454 {
449 if (presence.PresenceType == PresenceType.Npc) 455 if ((ts.type & NPC) == 0 && presence.PresenceType == PresenceType.Npc)
456 return;
457 if ((ts.type & AGENT) == 0 && presence.PresenceType == PresenceType.User)
450 return; 458 return;
451 459
452 if (presence.IsDeleted || presence.IsChildAgent || presence.GodLevel > 0.0) 460 if (presence.IsDeleted || presence.IsChildAgent || presence.GodLevel > 0.0)
@@ -460,6 +468,13 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api.Plugins
460 toRegionPos = presence.AbsolutePosition; 468 toRegionPos = presence.AbsolutePosition;
461 dis = Math.Abs(Util.GetDistanceTo(toRegionPos, fromRegionPos)); 469 dis = Math.Abs(Util.GetDistanceTo(toRegionPos, fromRegionPos));
462 470
471 if (presence.PresenceType == PresenceType.Npc && npcModule != null)
472 {
473 UUID npcOwner = npcModule.GetOwner(presence.UUID);
474 if (npcOwner != UUID.Zero && npcOwner != SensePoint.OwnerID)
475 return;
476 }
477
463 // are they in range 478 // are they in range
464 if (dis <= ts.range) 479 if (dis <= ts.range)
465 { 480 {