mirror of
https://github.com/opensim/opensim.git
synced 2026-08-01 22:26:09 +08:00
Merge branch 'master' into careminster
Conflicts: OpenSim/Region/CoreModules/Avatar/Chat/ChatModule.cs OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs OpenSim/Region/Framework/Scenes/Scene.PacketHandlers.cs OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs OpenSim/Region/ScriptEngine/Shared/Api/Runtime/LSL_Constants.cs
This commit is contained in:
@@ -11578,12 +11578,12 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||
|
||||
internal void Deprecated(string command)
|
||||
{
|
||||
throw new Exception("Command deprecated: " + command);
|
||||
throw new ScriptException("Command deprecated: " + command);
|
||||
}
|
||||
|
||||
internal void LSLError(string msg)
|
||||
{
|
||||
throw new Exception("LSL Runtime Error: " + msg);
|
||||
throw new ScriptException("LSL Runtime Error: " + msg);
|
||||
}
|
||||
|
||||
public delegate void AssetRequestCallback(UUID assetID, AssetBase asset);
|
||||
|
||||
@@ -95,13 +95,13 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||
|
||||
internal void MODError(string msg)
|
||||
{
|
||||
throw new Exception("MOD Runtime Error: " + msg);
|
||||
throw new ScriptException("MOD Runtime Error: " + msg);
|
||||
}
|
||||
|
||||
//
|
||||
//Dumps an error message on the debug console.
|
||||
//
|
||||
|
||||
/// <summary>
|
||||
/// Dumps an error message on the debug console.
|
||||
/// </summary>
|
||||
/// <param name='message'></param>
|
||||
internal void MODShoutError(string message)
|
||||
{
|
||||
if (message.Length > 1023)
|
||||
@@ -359,20 +359,18 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||
result[i] = (string)(LSL_String)plist[i];
|
||||
else if (plist[i] is LSL_Integer)
|
||||
result[i] = (int)(LSL_Integer)plist[i];
|
||||
// The int check exists because of the many plain old int script constants in ScriptBase which
|
||||
// are not LSL_Integers.
|
||||
else if (plist[i] is int)
|
||||
result[i] = plist[i];
|
||||
else if (plist[i] is LSL_Float)
|
||||
result[i] = (float)(LSL_Float)plist[i];
|
||||
else if (plist[i] is LSL_Key)
|
||||
result[i] = new UUID((LSL_Key)plist[i]);
|
||||
else if (plist[i] is LSL_Rotation)
|
||||
{
|
||||
result[i] = (OpenMetaverse.Quaternion)(
|
||||
(LSL_Rotation)plist[i]);
|
||||
}
|
||||
result[i] = (Quaternion)((LSL_Rotation)plist[i]);
|
||||
else if (plist[i] is LSL_Vector)
|
||||
{
|
||||
result[i] = (OpenMetaverse.Vector3)(
|
||||
(LSL_Vector)plist[i]);
|
||||
}
|
||||
result[i] = (Vector3)((LSL_Vector)plist[i]);
|
||||
else
|
||||
MODError(String.Format("{0}: unknown LSL list element type", fname));
|
||||
}
|
||||
|
||||
@@ -218,7 +218,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||
}
|
||||
else
|
||||
{
|
||||
throw new Exception("OSSL Runtime Error: " + msg);
|
||||
throw new ScriptException("OSSL Runtime Error: " + msg);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1789,18 +1789,24 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||
protected string LoadNotecard(string notecardNameOrUuid)
|
||||
{
|
||||
UUID assetID = CacheNotecard(notecardNameOrUuid);
|
||||
StringBuilder notecardData = new StringBuilder();
|
||||
|
||||
for (int count = 0; count < NotecardCache.GetLines(assetID); count++)
|
||||
if (assetID != UUID.Zero)
|
||||
{
|
||||
string line = NotecardCache.GetLine(assetID, count) + "\n";
|
||||
|
||||
// m_log.DebugFormat("[OSSL]: From notecard {0} loading line {1}", notecardNameOrUuid, line);
|
||||
|
||||
notecardData.Append(line);
|
||||
StringBuilder notecardData = new StringBuilder();
|
||||
|
||||
for (int count = 0; count < NotecardCache.GetLines(assetID); count++)
|
||||
{
|
||||
string line = NotecardCache.GetLine(assetID, count) + "\n";
|
||||
|
||||
// m_log.DebugFormat("[OSSL]: From notecard {0} loading line {1}", notecardNameOrUuid, line);
|
||||
|
||||
notecardData.Append(line);
|
||||
}
|
||||
|
||||
return notecardData.ToString();
|
||||
}
|
||||
|
||||
return notecardData.ToString();
|
||||
return null;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -2373,11 +2379,12 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||
return UUID.Zero.ToString();
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
OSSLError(string.Format("osNpcCreate: Notecard reference '{0}' not found.", notecard));
|
||||
}
|
||||
}
|
||||
|
||||
if (appearance == null)
|
||||
return new LSL_Key(UUID.Zero.ToString());
|
||||
|
||||
UUID ownerID = UUID.Zero;
|
||||
if (owned)
|
||||
ownerID = m_host.OwnerID;
|
||||
@@ -2446,6 +2453,10 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||
return;
|
||||
|
||||
string appearanceSerialized = LoadNotecard(notecard);
|
||||
|
||||
if (appearanceSerialized == null)
|
||||
OSSLError(string.Format("osNpcCreate: Notecard reference '{0}' not found.", notecard));
|
||||
|
||||
OSDMap appearanceOsd = (OSDMap)OSDParser.DeserializeLLSDXml(appearanceSerialized);
|
||||
// OSD a = OSDParser.DeserializeLLSDXml(appearanceSerialized);
|
||||
// Console.WriteLine("appearanceSerialized {0}", appearanceSerialized);
|
||||
@@ -3691,5 +3702,68 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||
|
||||
DropAttachmentAt(false, pos, rot);
|
||||
}
|
||||
|
||||
public LSL_Integer osListenRegex(int channelID, string name, string ID, string msg, int regexBitfield)
|
||||
{
|
||||
CheckThreatLevel(ThreatLevel.Low, "osListenRegex");
|
||||
m_host.AddScriptLPS(1);
|
||||
UUID keyID;
|
||||
UUID.TryParse(ID, out keyID);
|
||||
|
||||
// if we want the name to be used as a regular expression, ensure it is valid first.
|
||||
if ((regexBitfield & ScriptBaseClass.OS_LISTEN_REGEX_NAME) == ScriptBaseClass.OS_LISTEN_REGEX_NAME)
|
||||
{
|
||||
try
|
||||
{
|
||||
Regex.IsMatch("", name);
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
OSSLShoutError("Name regex is invalid.");
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
// if we want the msg to be used as a regular expression, ensure it is valid first.
|
||||
if ((regexBitfield & ScriptBaseClass.OS_LISTEN_REGEX_MESSAGE) == ScriptBaseClass.OS_LISTEN_REGEX_MESSAGE)
|
||||
{
|
||||
try
|
||||
{
|
||||
Regex.IsMatch("", msg);
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
OSSLShoutError("Message regex is invalid.");
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
IWorldComm wComm = m_ScriptEngine.World.RequestModuleInterface<IWorldComm>();
|
||||
return (wComm == null) ? -1 : wComm.Listen(
|
||||
m_host.LocalId,
|
||||
m_item.ItemID,
|
||||
m_host.UUID,
|
||||
channelID,
|
||||
name,
|
||||
keyID,
|
||||
msg,
|
||||
regexBitfield
|
||||
);
|
||||
}
|
||||
|
||||
public LSL_Integer osRegexIsMatch(string input, string pattern)
|
||||
{
|
||||
CheckThreatLevel(ThreatLevel.Low, "osRegexIsMatch");
|
||||
m_host.AddScriptLPS(1);
|
||||
try
|
||||
{
|
||||
return Regex.IsMatch(input, pattern) ? 1 : 0;
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
OSSLShoutError("Possible invalid regular expression detected.");
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user