Skip to content

Commit

Permalink
Merge branch 'master' of ssh://opensimulator.org/var/git/opensim
Browse files Browse the repository at this point in the history
  • Loading branch information
Justin Clark-Casey (justincc) committed Apr 26, 2012
2 parents ca228c4 + 2542ca2 commit d19aa9e
Show file tree
Hide file tree
Showing 6 changed files with 144 additions and 10 deletions.
30 changes: 30 additions & 0 deletions OpenSim/Region/Framework/Interfaces/INPCModule.cs
Expand Up @@ -134,6 +134,36 @@ public interface INPCModule
/// <returns>True if the operation succeeded, false if there was no such agent or the agent was not an NPC</returns>
bool Say(UUID agentID, Scene scene, string text);

/// <summary>
/// Get the NPC to say something.
/// </summary>
/// <param name="agentID">The UUID of the NPC</param>
/// <param name="scene"></param>
/// <param name="text"></param>
/// <param name="channel"></param>
/// <returns>True if the operation succeeded, false if there was no such agent or the agent was not an NPC</returns>
bool Say(UUID agentID, Scene scene, string text, int channel);

/// <summary>
/// Get the NPC to shout something.
/// </summary>
/// <param name="agentID">The UUID of the NPC</param>
/// <param name="scene"></param>
/// <param name="text"></param>
/// <param name="channel"></param>
/// <returns>True if the operation succeeded, false if there was no such agent or the agent was not an NPC</returns>
bool Shout(UUID agentID, Scene scene, string text, int channel);

/// <summary>
/// Get the NPC to whisper something.
/// </summary>
/// <param name="agentID">The UUID of the NPC</param>
/// <param name="scene"></param>
/// <param name="text"></param>
/// <param name="channel"></param>
/// <returns>True if the operation succeeded, false if there was no such agent or the agent was not an NPC</returns>
bool Whisper(UUID agentID, Scene scene, string text, int channel);

/// <summary>
/// Sit the NPC.
/// </summary>
Expand Down
21 changes: 13 additions & 8 deletions OpenSim/Region/OptionalModules/World/NPC/NPCAvatar.cs
Expand Up @@ -76,22 +76,27 @@ public UUID OwnerID

public void Say(string message)
{
SendOnChatFromClient(message, ChatTypeEnum.Say);
SendOnChatFromClient(0, message, ChatTypeEnum.Say);
}

public void Shout(string message)
public void Say(int channel, string message)
{
SendOnChatFromClient(message, ChatTypeEnum.Shout);
SendOnChatFromClient(channel, message, ChatTypeEnum.Say);
}

public void Whisper(string message)
public void Shout(int channel, string message)
{
SendOnChatFromClient(message, ChatTypeEnum.Whisper);
SendOnChatFromClient(channel, message, ChatTypeEnum.Shout);
}

public void Whisper(int channel, string message)
{
SendOnChatFromClient(channel, message, ChatTypeEnum.Whisper);
}

public void Broadcast(string message)
{
SendOnChatFromClient(message, ChatTypeEnum.Broadcast);
SendOnChatFromClient(0, message, ChatTypeEnum.Broadcast);
}

public void GiveMoney(UUID target, int amount)
Expand Down Expand Up @@ -146,10 +151,10 @@ public bool SendLogoutPacketWhenClosing

#region Internal Functions

private void SendOnChatFromClient(string message, ChatTypeEnum chatType)
private void SendOnChatFromClient(int channel, string message, ChatTypeEnum chatType)
{
OSChatMessage chatFromClient = new OSChatMessage();
chatFromClient.Channel = 0;
chatFromClient.Channel = channel;
chatFromClient.From = Name;
chatFromClient.Message = message;
chatFromClient.Position = StartPos;
Expand Down
43 changes: 42 additions & 1 deletion OpenSim/Region/OptionalModules/World/NPC/NPCModule.cs
Expand Up @@ -211,6 +211,11 @@ public bool StopMoveToTarget(UUID agentID, Scene scene)
}

public bool Say(UUID agentID, Scene scene, string text)
{
return Say(agentID, scene, text, 0);
}

public bool Say(UUID agentID, Scene scene, string text, int channel)
{
lock (m_avatars)
{
Expand All @@ -219,7 +224,25 @@ public bool Say(UUID agentID, Scene scene, string text)
ScenePresence sp;
scene.TryGetScenePresence(agentID, out sp);

m_avatars[agentID].Say(text);
m_avatars[agentID].Say(channel, text);

return true;
}
}

return false;
}

public bool Shout(UUID agentID, Scene scene, string text, int channel)
{
lock (m_avatars)
{
if (m_avatars.ContainsKey(agentID))
{
ScenePresence sp;
scene.TryGetScenePresence(agentID, out sp);

m_avatars[agentID].Shout(channel, text);

return true;
}
Expand All @@ -246,6 +269,24 @@ public bool Sit(UUID agentID, UUID partID, Scene scene)
return false;
}

public bool Whisper(UUID agentID, Scene scene, string text, int channel)
{
lock (m_avatars)
{
if (m_avatars.ContainsKey(agentID))
{
ScenePresence sp;
scene.TryGetScenePresence(agentID, out sp);

m_avatars[agentID].Whisper(channel, text);

return true;
}
}

return false;
}

public bool Stand(UUID agentID, Scene scene)
{
lock (m_avatars)
Expand Down
Expand Up @@ -2538,6 +2538,11 @@ public void osNpcStopMoveToTarget(LSL_Key npc)
}

public void osNpcSay(LSL_Key npc, string message)
{
osNpcSay(npc, 0, message);
}

public void osNpcSay(LSL_Key npc, int channel, string message)
{
CheckThreatLevel(ThreatLevel.High, "osNpcSay");
m_host.AddScriptLPS(1);
Expand All @@ -2550,7 +2555,24 @@ public void osNpcSay(LSL_Key npc, string message)
if (!module.CheckPermissions(npcId, m_host.OwnerID))
return;

module.Say(npcId, World, message);
module.Say(npcId, World, message, channel);
}
}

public void osNpcShout(LSL_Key npc, int channel, string message)
{
CheckThreatLevel(ThreatLevel.High, "osNpcShout");
m_host.AddScriptLPS(1);

INPCModule module = World.RequestModuleInterface<INPCModule>();
if (module != null)
{
UUID npcId = new UUID(npc.m_string);

if (!module.CheckPermissions(npcId, m_host.OwnerID))
return;

module.Shout(npcId, World, message, channel);
}
}

Expand Down Expand Up @@ -2635,6 +2657,23 @@ public void osNpcStopAnimation(LSL_Key npc, string animation)
}
}

public void osNpcWhisper(LSL_Key npc, int channel, string message)
{
CheckThreatLevel(ThreatLevel.High, "osNpcWhisper");
m_host.AddScriptLPS(1);

INPCModule module = World.RequestModuleInterface<INPCModule>();
if (module != null)
{
UUID npcId = new UUID(npc.m_string);

if (!module.CheckPermissions(npcId, m_host.OwnerID))
return;

module.Whisper(npcId, World, message, channel);
}
}

/// <summary>
/// Save the current appearance of the script owner permanently to the named notecard.
/// </summary>
Expand Down
3 changes: 3 additions & 0 deletions OpenSim/Region/ScriptEngine/Shared/Api/Interface/IOSSL_Api.cs
Expand Up @@ -217,11 +217,14 @@ public interface IOSSL_Api
void osNpcSetRot(LSL_Key npc, rotation rot);
void osNpcStopMoveToTarget(LSL_Key npc);
void osNpcSay(key npc, string message);
void osNpcSay(key npc, int channel, string message);
void osNpcShout(key npc, int channel, string message);
void osNpcSit(key npc, key target, int options);
void osNpcStand(LSL_Key npc);
void osNpcRemove(key npc);
void osNpcPlayAnimation(LSL_Key npc, string animation);
void osNpcStopAnimation(LSL_Key npc, string animation);
void osNpcWhisper(key npc, int channel, string message);

LSL_Key osOwnerSaveAppearance(string notecard);
LSL_Key osAgentSaveAppearance(key agentId, string notecard);
Expand Down
16 changes: 16 additions & 0 deletions OpenSim/Region/ScriptEngine/Shared/Api/Runtime/OSSL_Stub.cs
Expand Up @@ -580,6 +580,17 @@ public void osNpcSay(key npc, string message)
m_OSSL_Functions.osNpcSay(npc, message);
}

public void osNpcSay(key npc, int channel, string message)
{
m_OSSL_Functions.osNpcSay(npc, channel, message);
}


public void osNpcShout(key npc, int channel, string message)
{
m_OSSL_Functions.osNpcShout(npc, channel, message);
}

public void osNpcSit(LSL_Key npc, LSL_Key target, int options)
{
m_OSSL_Functions.osNpcSit(npc, target, options);
Expand All @@ -605,6 +616,11 @@ public void osNpcStopAnimation(LSL_Key npc, string animation)
m_OSSL_Functions.osNpcStopAnimation(npc, animation);
}

public void osNpcWhisper(key npc, int channel, string message)
{
m_OSSL_Functions.osNpcWhisper(npc, channel, message);
}

public LSL_Key osOwnerSaveAppearance(string notecard)
{
return m_OSSL_Functions.osOwnerSaveAppearance(notecard);
Expand Down

0 comments on commit d19aa9e

Please sign in to comment.