diff options
author | Justin Clark-Casey (justincc) | 2012-01-27 23:05:48 +0000 |
---|---|---|
committer | Justin Clark-Casey (justincc) | 2012-01-27 23:05:48 +0000 |
commit | 9939f94f08b33e3dd9eeea65b730f0ddc80275a5 (patch) | |
tree | aa1fc79d0a8a64f9b3d30dc383b049c5b5bf353c | |
parent | Add basic TestAddScript() regression test (diff) | |
download | opensim-SC-9939f94f08b33e3dd9eeea65b730f0ddc80275a5.zip opensim-SC-9939f94f08b33e3dd9eeea65b730f0ddc80275a5.tar.gz opensim-SC-9939f94f08b33e3dd9eeea65b730f0ddc80275a5.tar.bz2 opensim-SC-9939f94f08b33e3dd9eeea65b730f0ddc80275a5.tar.xz |
Implement osNpcGetOwner(key npc):key. This returns the owner for an 'owned' NPC, the npc's own key for an 'unowned' NPC and NULL_KEY is the input key was not an npc.
llGetOwnerKey() could also be extended but this does not allow one to distinguish between an unowned NPC and some other result (e.g. 'no such object' if NULL_KEY is the return.
Also, any future extensions to LSL functions by Linden Lab are unpredictable and OpenSim-specific extensions could clash.
4 files changed, 56 insertions, 20 deletions
diff --git a/OpenSim/Region/Framework/Interfaces/INPCModule.cs b/OpenSim/Region/Framework/Interfaces/INPCModule.cs index c50e734..b428c40 100644 --- a/OpenSim/Region/Framework/Interfaces/INPCModule.cs +++ b/OpenSim/Region/Framework/Interfaces/INPCModule.cs | |||
@@ -134,4 +134,4 @@ namespace OpenSim.Region.Framework.Interfaces | |||
134 | /// <returns>UUID of owner if the NPC exists, UUID.Zero if there was no such agent, the agent is unowned or the agent was not an NPC</returns> | 134 | /// <returns>UUID of owner if the NPC exists, UUID.Zero if there was no such agent, the agent is unowned or the agent was not an NPC</returns> |
135 | UUID GetOwner(UUID agentID); | 135 | UUID GetOwner(UUID agentID); |
136 | } | 136 | } |
137 | } | 137 | } \ No newline at end of file |
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs index 7792ab5..ba96ad8 100644 --- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs +++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs | |||
@@ -2313,6 +2313,27 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
2313 | } | 2313 | } |
2314 | } | 2314 | } |
2315 | 2315 | ||
2316 | public LSL_Key osNpcGetOwner(LSL_Key npc) | ||
2317 | { | ||
2318 | CheckThreatLevel(ThreatLevel.None, "osNpcGetOwner"); | ||
2319 | |||
2320 | INPCModule npcModule = World.RequestModuleInterface<INPCModule>(); | ||
2321 | if (npcModule != null) | ||
2322 | { | ||
2323 | UUID npcId; | ||
2324 | if (UUID.TryParse(npc.m_string, out npcId)) | ||
2325 | { | ||
2326 | UUID owner = npcModule.GetOwner(npcId); | ||
2327 | if (owner != UUID.Zero) | ||
2328 | return new LSL_Key(owner.ToString()); | ||
2329 | else | ||
2330 | return npc; | ||
2331 | } | ||
2332 | } | ||
2333 | |||
2334 | return new LSL_Key(UUID.Zero.ToString()); | ||
2335 | } | ||
2336 | |||
2316 | public LSL_Vector osNpcGetPos(LSL_Key npc) | 2337 | public LSL_Vector osNpcGetPos(LSL_Key npc) |
2317 | { | 2338 | { |
2318 | CheckThreatLevel(ThreatLevel.High, "osNpcGetPos"); | 2339 | CheckThreatLevel(ThreatLevel.High, "osNpcGetPos"); |
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Interface/IOSSL_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Interface/IOSSL_Api.cs index 0f8cbdc..ee48ec4 100644 --- a/OpenSim/Region/ScriptEngine/Shared/Api/Interface/IOSSL_Api.cs +++ b/OpenSim/Region/ScriptEngine/Shared/Api/Interface/IOSSL_Api.cs | |||
@@ -173,25 +173,35 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api.Interfaces | |||
173 | 173 | ||
174 | LSL_List osGetLinkPrimitiveParams(int linknumber, LSL_List rules); | 174 | LSL_List osGetLinkPrimitiveParams(int linknumber, LSL_List rules); |
175 | 175 | ||
176 | key osNpcCreate(string user, string name, vector position, string notecard); | 176 | key osNpcCreate(string user, string name, vector position, string notecard); |
177 | key osNpcCreate(string user, string name, vector position, string notecard, int options); | 177 | key osNpcCreate(string user, string name, vector position, string notecard, int options); |
178 | LSL_Key osNpcSaveAppearance(key npc, string notecard); | 178 | LSL_Key osNpcSaveAppearance(key npc, string notecard); |
179 | void osNpcLoadAppearance(key npc, string notecard); | 179 | void osNpcLoadAppearance(key npc, string notecard); |
180 | vector osNpcGetPos(key npc); | 180 | vector osNpcGetPos(key npc); |
181 | void osNpcMoveTo(key npc, vector position); | 181 | void osNpcMoveTo(key npc, vector position); |
182 | void osNpcMoveToTarget(key npc, vector target, int options); | 182 | void osNpcMoveToTarget(key npc, vector target, int options); |
183 | rotation osNpcGetRot(key npc); | 183 | |
184 | void osNpcSetRot(LSL_Key npc, rotation rot); | 184 | /// <summary> |
185 | void osNpcStopMoveToTarget(LSL_Key npc); | 185 | /// Get the owner of the NPC |
186 | void osNpcSay(key npc, string message); | 186 | /// </summary> |
187 | void osNpcSit(key npc, key target, int options); | 187 | /// <param name="npc"></param> |
188 | void osNpcStand(LSL_Key npc); | 188 | /// <returns> |
189 | void osNpcRemove(key npc); | 189 | /// The owner of the NPC for an owned NPC. The NPC's agent id for an unowned NPC. UUID.Zero if the key is not an npc. |
190 | void osNpcPlayAnimation(LSL_Key npc, string animation); | 190 | /// </returns> |
191 | void osNpcStopAnimation(LSL_Key npc, string animation); | 191 | LSL_Key osNpcGetOwner(key npc); |
192 | 192 | ||
193 | LSL_Key osOwnerSaveAppearance(string notecard); | 193 | rotation osNpcGetRot(key npc); |
194 | LSL_Key osAgentSaveAppearance(key agentId, string notecard); | 194 | void osNpcSetRot(LSL_Key npc, rotation rot); |
195 | void osNpcStopMoveToTarget(LSL_Key npc); | ||
196 | void osNpcSay(key npc, string message); | ||
197 | void osNpcSit(key npc, key target, int options); | ||
198 | void osNpcStand(LSL_Key npc); | ||
199 | void osNpcRemove(key npc); | ||
200 | void osNpcPlayAnimation(LSL_Key npc, string animation); | ||
201 | void osNpcStopAnimation(LSL_Key npc, string animation); | ||
202 | |||
203 | LSL_Key osOwnerSaveAppearance(string notecard); | ||
204 | LSL_Key osAgentSaveAppearance(key agentId, string notecard); | ||
195 | 205 | ||
196 | key osGetMapTexture(); | 206 | key osGetMapTexture(); |
197 | key osGetRegionMapTexture(string regionName); | 207 | key osGetRegionMapTexture(string regionName); |
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/OSSL_Stub.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/OSSL_Stub.cs index 02efecf..38a814d 100644 --- a/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/OSSL_Stub.cs +++ b/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/OSSL_Stub.cs | |||
@@ -513,6 +513,11 @@ namespace OpenSim.Region.ScriptEngine.Shared.ScriptBase | |||
513 | m_OSSL_Functions.osNpcLoadAppearance(npc, notecard); | 513 | m_OSSL_Functions.osNpcLoadAppearance(npc, notecard); |
514 | } | 514 | } |
515 | 515 | ||
516 | public LSL_Key osNpcGetOwner(LSL_Key npc) | ||
517 | { | ||
518 | return m_OSSL_Functions.osNpcGetOwner(npc); | ||
519 | } | ||
520 | |||
516 | public vector osNpcGetPos(LSL_Key npc) | 521 | public vector osNpcGetPos(LSL_Key npc) |
517 | { | 522 | { |
518 | return m_OSSL_Functions.osNpcGetPos(npc); | 523 | return m_OSSL_Functions.osNpcGetPos(npc); |