1339 lines
45 KiB
C#
1339 lines
45 KiB
C#
// <copyright file="gpl-2.0.txt">
|
|
// ORIGINAL CODE BASE IS Copyright (C) 2006-2010 by Alphons van der Heijden.
|
|
// The code was donated on 2010-04-28 by Alphons van der Heijden to Brandon 'Dimentox Travanti' Husbands &
|
|
// Malcolm J. Kudra, who in turn License under the GPLv2 in agreement with Alphons van der Heijden's wishes.
|
|
//
|
|
// The community would like to thank Alphons for all of his hard work, blood sweat and tears. Without his work
|
|
// the community would be stuck with crappy editors.
|
|
//
|
|
// The source code in this file ("Source Code") is provided by The LSLEditor Group to you under the terms of the GNU
|
|
// General Public License, version 2.0 ("GPL"), unless you have obtained a separate licensing agreement ("Other
|
|
// License"), formally executed by you and The LSLEditor Group.
|
|
// Terms of the GPL can be found in the gplv2.txt document.
|
|
//
|
|
// GPLv2 Header
|
|
// ************
|
|
// LSLEditor, a External editor for the LSL Language.
|
|
// Copyright (C) 2010 The LSLEditor Group.
|
|
//
|
|
// This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public
|
|
// License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any
|
|
// later version.
|
|
//
|
|
// This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied
|
|
// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
|
|
// details.
|
|
//
|
|
// You should have received a copy of the GNU General Public License along with this program; if not, write to the Free
|
|
// Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
|
// ********************************************************************************************************************
|
|
// The above copyright notice and this permission notice shall be included in copies or substantial portions of the
|
|
// Software.
|
|
// ********************************************************************************************************************
|
|
// </copyright>
|
|
// <summary>
|
|
// All OSSL functions implemented.
|
|
// </summary>
|
|
|
|
|
|
using Newtonsoft.Json;
|
|
using System;
|
|
using System.Collections;
|
|
using System.Collections.Generic;
|
|
using System.Diagnostics.CodeAnalysis;
|
|
using System.IO;
|
|
using System.Linq;
|
|
using System.Reflection;
|
|
using System.Text;
|
|
using System.Text.RegularExpressions;
|
|
|
|
namespace LSLEditor
|
|
{
|
|
/// <summary>
|
|
/// This part of the SecondLife class contains the OSSL function definitions.
|
|
/// </summary>
|
|
[SuppressMessage("StyleCop.CSharp.DocumentationRules", "SA1600:ElementsMustBeDocumented", Justification = "These are all OSSL functions, the documentation is in the OSSL Wiki.")]
|
|
public partial class SecondLife
|
|
{
|
|
public key osAgentSaveAppearance(key avatarId, String notecard)
|
|
{
|
|
if (avatarId != "")
|
|
{
|
|
key k = new key(Guid.NewGuid());
|
|
Verbose("osAgentSaveAppearance(\"{0}\", \"{1}\")=\"{2}\"", avatarId, notecard, k);
|
|
return k;
|
|
}
|
|
Verbose("osAgentSaveAppearance(\"{0}\", \"{1}\")=\"{2}\"", avatarId, notecard, "");
|
|
return key.NULL_KEY;
|
|
}
|
|
|
|
public String osAvatarName2Key(String firstname, String lastname)
|
|
{
|
|
if(Properties.Settings.Default.AvatarName == (firstname + " " + lastname))
|
|
{
|
|
Verbose("osAvatarName2Key(\"{0}\", \"{1}\")=\"{2}\"", firstname, lastname, Properties.Settings.Default.AvatarKey.ToString());
|
|
return Properties.Settings.Default.AvatarKey.ToString();
|
|
}
|
|
|
|
if (!(firstname == "" && lastname == ""))
|
|
{
|
|
key k = new key(Guid.NewGuid());
|
|
Verbose("osAvatarName2Key(\"{0}\", \"{1}\")=\"{2}\"", firstname, lastname, k);
|
|
return k.ToString();
|
|
}
|
|
Verbose("osAvatarName2Key(\"{0}\", \"{1}\")=\"{2}\"", firstname, lastname, "");
|
|
return key.NULL_KEY.ToString();
|
|
}
|
|
|
|
public void osAvatarPlayAnimation(key avatar, String animation)
|
|
{
|
|
Verbose("osAvatarPlayAnimation(\"{0}\", \"{1}\")", avatar, animation);
|
|
}
|
|
|
|
public void osAvatarStopAnimation(key avatar, String animation)
|
|
{
|
|
Verbose("osAvatarStopAnimation(\"{0}\", \"{1}\")", avatar, animation);
|
|
}
|
|
|
|
public void osCauseDamage(key avatar, Float damage)
|
|
{
|
|
Verbose("osCauseDamage(\"{0}\", {1})", avatar, damage);
|
|
}
|
|
|
|
public void osCauseHealing(key avatar, Float healing)
|
|
{
|
|
Verbose("osCauseHealing(\"{0}\", {1})", avatar, healing);
|
|
}
|
|
|
|
public void osDropAttachment()
|
|
{
|
|
Verbose("osDorpAttachment()");
|
|
}
|
|
|
|
public void osDropAttachmentAt(vector pos, rotation rot)
|
|
{
|
|
Verbose("osDorpAttachmentAt({0}, {1})", pos, rot);
|
|
}
|
|
|
|
public integer osEjectFromGroup(key user)
|
|
{
|
|
integer isEjected = 1;
|
|
if (user == "")
|
|
{
|
|
isEjected = 0;
|
|
}
|
|
Verbose("osEjectFromGroup(\"{0}\")={1}", user, isEjected);
|
|
return isEjected;
|
|
}
|
|
|
|
public void osForceAttachToAvatar(integer attachmentPoint)
|
|
{
|
|
Verbose("osForceAttachToAvatar({0})", attachmentPoint);
|
|
}
|
|
|
|
public void osForceAttachToAvatarFromInventory(String itemName, integer attachmentPoint)
|
|
{
|
|
Verbose("osForceAttachToAvatarFromInventory(\"{0}\", {1})", itemName, attachmentPoint);
|
|
}
|
|
|
|
public void osForceAttachToOtherAvatarFromInventory(String rawAvatarId, String itemName, integer attachmentPoint)
|
|
{
|
|
Verbose("osForceAttachToOtherAvatarFromInventory(\"{0}\", \"{1}\", {2})", rawAvatarId, itemName, attachmentPoint);
|
|
}
|
|
|
|
public void osForceDetachFromAvatar()
|
|
{
|
|
Verbose("osForceDetachFromAvatar()");
|
|
}
|
|
|
|
public void osForceDropAttachment()
|
|
{
|
|
Verbose("osForceDropAttachment()");
|
|
}
|
|
|
|
public void osForceDropAttachmentAt(vector pos, rotation rot)
|
|
{
|
|
Verbose("osForceDropAttachmentAt({0}, {1})", pos, rot);
|
|
}
|
|
|
|
public void osForceOtherSit(String avatar)
|
|
{
|
|
Verbose("osForceOtherSit(\"{0}\")", avatar);
|
|
}
|
|
|
|
public void osForceOtherSit(String avatar, String target)
|
|
{
|
|
Verbose("osForceOtherSit(\"{0}\", \"{1}\")", avatar, target);
|
|
}
|
|
|
|
public String osGetAgentIP(key uuid)
|
|
{
|
|
Verbose("osGetAgentIP(\"{0}\")=\"\"", uuid);
|
|
return "";
|
|
}
|
|
|
|
public list osGetAgents()
|
|
{
|
|
list agents = new list();
|
|
Verbose("osGetAgents()=" + agents.ToVerboseString());
|
|
return agents;
|
|
}
|
|
|
|
public String osGetAvatarHomeURI(String uuid)
|
|
{
|
|
Verbose("osGetAvatarHomeURI(\"{0}\")=\"\"", uuid);
|
|
return "";
|
|
}
|
|
|
|
public list osGetAvatarList()
|
|
{
|
|
list avatars = new list();
|
|
Verbose("osGetAvatarList()=" + avatars.ToVerboseString());
|
|
return avatars;
|
|
}
|
|
|
|
public String osGetGender(key id)
|
|
{
|
|
String gender = "unknown";
|
|
Verbose("osGetGender(\"{0}\")=\"{1}\"", id, gender);
|
|
return gender;
|
|
}
|
|
|
|
public Float osGetHealRate(key avatar)
|
|
{
|
|
Float defaultHealRate = 0.5F;
|
|
if (avatar = "")
|
|
{
|
|
defaultHealRate = 0;
|
|
}
|
|
Verbose("osGetHealRate(\"{0}\")={1}", avatar, defaultHealRate);
|
|
return defaultHealRate;
|
|
}
|
|
|
|
public Float osGetHealth(string avatar)
|
|
{
|
|
Float health = 100.0F;
|
|
Verbose("osGetHealth(\"{0}\")={1}", avatar, health);
|
|
return health;
|
|
}
|
|
|
|
public list osGetNumberOfAttachments(key avatar, list attachmentPoints)
|
|
{
|
|
list numberOfAttachments = new list();
|
|
Verbose("osGetNumberOfAttachments(\"{0}\", {1})={2}", avatar, attachmentPoints.ToVerboseString(), numberOfAttachments.ToVerboseString());
|
|
return numberOfAttachments;
|
|
}
|
|
|
|
public integer osInviteToGroup(key user)
|
|
{
|
|
if (user != "")
|
|
{
|
|
Verbose("osInviteToGroup(\"{0}\")={1}", user, 1);
|
|
return 1;
|
|
}
|
|
Verbose("osInviteToGroup(\"{0}\")={1}", user, 0);
|
|
return 0;
|
|
}
|
|
|
|
public void osKickAvatar(String FirstName, String SurName, String alert)
|
|
{
|
|
Verbose("osKickAvatar(\"{0}\", \"{1}\", \"{2}\")", FirstName, SurName, alert);
|
|
}
|
|
|
|
public key osOwnerSaveAppearance(String notecard)
|
|
{
|
|
key k = new key(Guid.NewGuid());
|
|
Verbose("osOwnerSaveAppearance(\"{0}\")=\"{1}\"", notecard, k);
|
|
return k;
|
|
}
|
|
|
|
public Float osSetHealRate(key avatar, Float healrate)
|
|
{
|
|
Verbose("osSetHealRate(\"{0}\", {1})={1}", avatar, healrate);
|
|
return healrate;
|
|
}
|
|
|
|
public Float osSetHealth(String avatar, Float health)
|
|
{
|
|
Verbose("osSetHealth(\"{0}\", {1})={1}", avatar, health);
|
|
return health;
|
|
}
|
|
|
|
public void osTeleportAgent(key agent, integer regionX, integer regionY, vector position, vector lookat)
|
|
{
|
|
Verbose("osTeleportAgent(\"{0}\", {1}, {2}, {3}, {4})", agent, regionX, regionY, position, lookat);
|
|
}
|
|
|
|
public void osTeleportAgent(key agent, String regionName, vector position, vector lookat)
|
|
{
|
|
Verbose("osTeleportAgent(\"{0}\", \"{1}\", {2}, {3})", agent, regionName, position, lookat);
|
|
}
|
|
|
|
public void osTeleportAgent(key agent, vector position, vector lookat)
|
|
{
|
|
Verbose("osTeleportAgent(\"{0}\", {1}, {2})", agent, position, lookat);
|
|
}
|
|
|
|
public void osTeleportOwner(integer regionX, integer regionY, vector position, vector lookat)
|
|
{
|
|
Verbose("osTeleportOwner({0}, {1}, {2}, {3})", regionX, regionY, position, lookat);
|
|
}
|
|
|
|
public void osTeleportOwner(String regionName, vector position, vector lookat)
|
|
{
|
|
Verbose("osTeleportOwner(\"{0}\", {1}, {2})", regionName, position, lookat);
|
|
}
|
|
|
|
public void osTeleportOwner(vector position, vector lookat)
|
|
{
|
|
Verbose("osTeleportOwner({0}, {1})", position, lookat);
|
|
}
|
|
|
|
public integer osIsNpc(key npc)
|
|
{
|
|
if (npc != "")
|
|
{
|
|
integer isNpc = rdmRandom.Next(0, 2);
|
|
Verbose("osIsNpc(\"{0}\")={1}", npc, isNpc);
|
|
return isNpc;
|
|
}
|
|
Verbose("osIsNpc(\"{0}\")=0", npc);
|
|
return 0;
|
|
}
|
|
|
|
public key osNpcCreate(String firstname, String lastname, vector position, String cloneFrom, integer options)
|
|
{
|
|
key k = new key(Guid.NewGuid());
|
|
Verbose("osNpcCreate(\"{0}\", \"{1}\", {2}, \"{3}\", {4})=\"{5}\"", firstname, lastname, position, cloneFrom, options, k);
|
|
return k;
|
|
}
|
|
|
|
public key osNpcCreate(String firstname, String lastname, vector position, String cloneFrom)
|
|
{
|
|
key k = new key(Guid.NewGuid());
|
|
Verbose("osNpcCreate(\"{0}\", \"{1}\", {2}, \"{3}\")=\"{4}\"", firstname, lastname, position, cloneFrom, k);
|
|
return k;
|
|
}
|
|
|
|
public list osGetNpcList()
|
|
{
|
|
list npcs = new list();
|
|
Verbose("osGetNpcList()=" + npcs.ToVerboseString());
|
|
return npcs;
|
|
}
|
|
|
|
public vector osNpcGetPos(key npc)
|
|
{
|
|
vector pos = new vector(this.rdmRandom.Next(0, 255), this.rdmRandom.Next(0, 255), this.rdmRandom.Next(0, 255));
|
|
Verbose("osNpcGetPos({0})={1}", npc, pos);
|
|
return pos;
|
|
}
|
|
|
|
public rotation osNpcGetRot(key npc)
|
|
{
|
|
rotation rot = new rotation(this.rdmRandom.Next(0, (int)(Math.PI * 2)), this.rdmRandom.Next(0, (int)(Math.PI * 2)),
|
|
this.rdmRandom.Next(0, (int)(Math.PI * 2)), this.rdmRandom.Next(0, (int)(Math.PI * 2)));
|
|
Verbose("osNpcGetRot(\"{0}\")={1}", npc, rot);
|
|
return rot;
|
|
}
|
|
|
|
public key osNpcGetOwner(key npc)
|
|
{
|
|
key k = npc != "" ? new key(Guid.NewGuid()) : "";
|
|
Verbose("osNpcGetOwner(\"{0}\")=\"{1}\"", npc, k);
|
|
return k;
|
|
}
|
|
|
|
public void osNpcLoadAppearance(key npc, String notecard)
|
|
{
|
|
// Test if notecard exists
|
|
host.GetNotecardLine(notecard, 1);
|
|
Verbose("osNpcLoadAppearance(\"{0}\", \"{1}\")", npc, notecard);
|
|
}
|
|
|
|
public void osNpcMoveTo(key npc, vector position)
|
|
{
|
|
Verbose("osNpcMoveTo(\"{0}\", {1})", npc, position);
|
|
}
|
|
|
|
public void osNpcMoveToTarget(key npc, vector target, integer options)
|
|
{
|
|
Verbose("osNpcMoveToTarget(\"{0}\", {1}, {2})", npc, target, options);
|
|
}
|
|
|
|
public void osNpcPlayAnimation(key npc, String animation)
|
|
{
|
|
Verbose("osNpcPlayAnimation(\"{0}\", \"{1}\")", npc, animation);
|
|
}
|
|
|
|
public void osNpcRemove(key npc)
|
|
{
|
|
Verbose("osNpcRemove(\"{0}\")", npc);
|
|
}
|
|
|
|
public key osNpcSaveAppearance(key npc, String notecard)
|
|
{
|
|
key k = new key(Guid.NewGuid());
|
|
Verbose("osNpcSaveAppearance(\"{0}\", \"{1}\")=\"{2}\"", npc, notecard, k);
|
|
return k;
|
|
}
|
|
|
|
public void osNpcSay(key npc, String message)
|
|
{
|
|
Verbose("osNpcSay(\"{0}\", \"{1}\")", npc, message);
|
|
Chat(0, message, CommunicationType.Say);
|
|
}
|
|
|
|
public void osNpcSay(key npc, integer channel, String message)
|
|
{
|
|
Verbose("osNpcSay(\"{0}\", {1}, \"{2}\")", npc, channel, message);
|
|
Chat(channel, message, CommunicationType.Say);
|
|
}
|
|
|
|
public void osNpcSetProfileAbout(key npc, String about)
|
|
{
|
|
Verbose("osNpcSetProfileAbout(\"{0}\", \"{1}\")", npc, about);
|
|
}
|
|
|
|
public void osNpcSetProfileImage(key npc, String image)
|
|
{
|
|
Verbose("osNpcSetProfileImage(\"{0}\", \"{1}\")", npc, image);
|
|
}
|
|
|
|
public void osNpcSetRot(key npc, rotation rot)
|
|
{
|
|
Verbose("osNpcSetRot(\"{0}\", {1})", npc, rot);
|
|
}
|
|
|
|
public void osNpcShout(key npc, integer channel, String message)
|
|
{
|
|
Verbose("osNpcShout(\"{0}\", {1}, \"{2}\")", npc, channel, message);
|
|
Chat(channel, message, CommunicationType.Shout);
|
|
}
|
|
|
|
public void osNpcSit(key npc, key target, integer options)
|
|
{
|
|
Verbose("osNpcSit(\"{0}\", \"{1}\", {2})", npc, target, options);
|
|
}
|
|
|
|
public void osNpcStand(key npc)
|
|
{
|
|
Verbose("osNpcStand(\"{0}\")", npc);
|
|
}
|
|
|
|
public void osNpcStopMoveToTarget(key npc)
|
|
{
|
|
Verbose("osNpcStopMoveToTarget(\"{0}\")", npc);
|
|
}
|
|
|
|
public void osNpcStopAnimation(key npc, String animation)
|
|
{
|
|
Verbose("osNpcStopAnimation(\"{0}\", \"{1}\")", npc, animation);
|
|
}
|
|
|
|
public void osNpcTouch(key npcKey, key objectKey, integer linkNum)
|
|
{
|
|
Verbose("osNpcTouch(\"{0}\", \"{1}\", {2})", npcKey, objectKey, linkNum);
|
|
}
|
|
|
|
public void osNpcWhisper(key npc, integer channel, String message)
|
|
{
|
|
Verbose("osNpcWhipser(\"{0}\", \"{1}\", {2})", npc, channel, message);
|
|
llWhisper(channel, message);
|
|
}
|
|
|
|
public void osClearInertia()
|
|
{
|
|
Verbose("osClearInertia()");
|
|
}
|
|
|
|
public void osForceBreakAllLinks()
|
|
{
|
|
Verbose("osForceBreakAllLinks()");
|
|
}
|
|
|
|
public void osForceBreakLink(integer link)
|
|
{
|
|
Verbose("osForceBreakLink({0})", link);
|
|
}
|
|
|
|
public void osForceCreateLink(key target, integer parent)
|
|
{
|
|
Verbose("osForceCreateLink(\"{0}\", {1})", target, parent);
|
|
}
|
|
|
|
public list osGetInertiaData()
|
|
{
|
|
list l = new list();
|
|
Verbose("osGetInertiaData()={0}", l.ToVerboseString());
|
|
return l;
|
|
}
|
|
|
|
public String osGetInventoryDesc(String name)
|
|
{
|
|
Verbose("osGetInventoryDesc(\"{0}\")=\"\"", name);
|
|
return "";
|
|
}
|
|
|
|
public integer osGetLinkNumber(String name)
|
|
{
|
|
if (name == "")
|
|
{
|
|
Verbose("osGetLinkNumber(\"{0}\")={1}", name, -1);
|
|
return -1;
|
|
}
|
|
|
|
integer i = rdmRandom.Next(100);
|
|
Verbose("osGetLinkNumber(\"{0}\")={1}", name, i);
|
|
return i;
|
|
}
|
|
|
|
public list osGetLinkPrimitiveParams(integer linknumber, list rules)
|
|
{
|
|
list primParams = new list();
|
|
Verbose("osGetLinkPrimitiveParams({0}, {1})={2}", linknumber, rules.ToVerboseString(), primParams.ToVerboseString());
|
|
return primParams;
|
|
}
|
|
|
|
public list osGetPrimitiveParams(key prim, list rules)
|
|
{
|
|
list primParams = new list();
|
|
Verbose("osGetPrimitiveParams(\"{0}\", {1})={2}", prim, rules.ToVerboseString(), primParams.ToVerboseString());
|
|
return primParams;
|
|
}
|
|
|
|
public String osGetRezzingObject()
|
|
{
|
|
Verbose("osGetRezzingObject()=\"{0}\"", key.NULL_KEY.ToString());
|
|
return key.NULL_KEY.ToString();
|
|
}
|
|
|
|
public integer osIsUUID(String thing)
|
|
{
|
|
try
|
|
{
|
|
new Guid(thing);
|
|
} catch (FormatException e)
|
|
{
|
|
Verbose("osIsUUID({0})=0", thing);
|
|
return 0;
|
|
}
|
|
Verbose("osIsUUID({0})=1", thing);
|
|
return 1;
|
|
}
|
|
|
|
public integer osListenRegex(Int32 channelID, String name, String ID, String msg, Int32 regexBitfield)
|
|
{
|
|
Verbose("osListenRegex({0}, \"{1}\", \"{2}\", \"{3}\", {4})=1", channelID, name, ID, msg, regexBitfield);
|
|
return 1;
|
|
}
|
|
|
|
public void osMessageAttachments(key avatar, String message, list attachmentPoints, integer options)
|
|
{
|
|
Verbose("osMessageAttachments(\"{0}\", \"{1}\", {2}, {3})", avatar, message, attachmentPoints.ToVerboseString(), options);
|
|
}
|
|
|
|
public void osMessageObject(key objectUUID, String message)
|
|
{
|
|
Verbose("osMessageObject(\"{0}\", \"{1}\")", objectUUID, message);
|
|
}
|
|
|
|
public void osSetInertia(Float mass, vector centerOfMass, vector principalInertiaScaled, rotation InertiaRot)
|
|
{
|
|
Verbose("osSetInertia({0}, {1}, {2}, {3})", mass, centerOfMass, principalInertiaScaled, InertiaRot);
|
|
}
|
|
|
|
public void osSetInertiaAsBox(Float mass, vector boxSize, vector centerOfMass, rotation rot)
|
|
{
|
|
Verbose("osSetInertiaAsBox({0}, {1}, {2}, {3})", mass, boxSize, centerOfMass, rot);
|
|
}
|
|
|
|
public void osSetInertiaAsCylinder(Float mass, Float radius, Float length, vector centerOfMass, rotation rot)
|
|
{
|
|
Verbose("osSetInertiaAsCylinder({0}, {1}, {2}, {3}, {4})", mass, radius, length, centerOfMass, rot);
|
|
}
|
|
|
|
public void osSetInertiaAsSphere(Float mass, Float radius, vector centerOfMass)
|
|
{
|
|
Verbose("osSetInertiaAsSphere({0}, {1}, {2})", mass, radius, centerOfMass);
|
|
}
|
|
|
|
public void osSetPrimitiveParams(key prim, list rules)
|
|
{
|
|
Verbose("osSetPrimitiveParams(\"{0}\", {1})", prim, rules.ToVerboseString());
|
|
}
|
|
|
|
public void osSetProjectionParams(integer projection, key texture, Float fov, Float focus, Float amb)
|
|
{
|
|
Verbose("osSetProjectionParams({0}, \"{1}\", {2}, {3}, {4})", projection, texture, fov, focus, amb);
|
|
}
|
|
|
|
public void osSetProjectionParams(key prim, integer projection, key texture, Float fov, Float focus, Float amb)
|
|
{
|
|
Verbose("osSetProjectionParams(\"{0}\", {1}, \"{2}\", {3}, {4}, {5})", prim, projection, texture, fov, focus, amb);
|
|
}
|
|
|
|
public void osSetSpeed(String UUID, Float SpeedModifier)
|
|
{
|
|
Verbose("osSetSpeed(\"{0}\", {1})", UUID, SpeedModifier);
|
|
}
|
|
|
|
public integer osTeleportObject(key objectUUID, vector targetPos, rotation rot, integer flags)
|
|
{
|
|
Verbose("osTeleportObject(\"{0}\", {1}, {2}, {3})=1", objectUUID, targetPos, rot, flags);
|
|
return 1;
|
|
}
|
|
|
|
public String osDrawEllipse(String drawList, integer width, integer height)
|
|
{
|
|
Verbose("osDrawEllipse(\"{0}\", {1}, {2})=\"\"", drawList, width, height);
|
|
return "";
|
|
}
|
|
|
|
public String osDrawFilledEllipse(String drawList, integer width, integer height)
|
|
{
|
|
Verbose("osDrawFilledEllipse(\"{0}\", {1}, {2})=\"\"", drawList, width, height);
|
|
return "";
|
|
}
|
|
|
|
public String osDrawFilledPolygon(String drawList, list xpoints, list ypoints)
|
|
{
|
|
Verbose("osDrawFilledPolygon(\"{0}\", {1}, {2})=\"\"", drawList, xpoints.ToVerboseString(), ypoints.ToVerboseString());
|
|
return "";
|
|
}
|
|
|
|
public String osDrawFilledRectangle(String drawList, integer width, integer height)
|
|
{
|
|
Verbose("osDrawFilledRectangle(\"{0}\", {1}, {2})=\"\"", drawList, width, height);
|
|
return "";
|
|
}
|
|
|
|
public String osDrawImage(String drawList, integer width, integer height, String imageUrl)
|
|
{
|
|
Verbose("osDrawImage(\"{0}\", {1}, {2}, \"{3}\")=\"\"", drawList, width, height, imageUrl);
|
|
return "";
|
|
}
|
|
|
|
public String osDrawLine(String drawList, integer startX, integer startY, integer endX, integer endY)
|
|
{
|
|
Verbose("osDrawLine(\"{0}\", {1}, {2}, {3}, {4})=\"\"", drawList, startX, startY, endX, endY);
|
|
return "";
|
|
}
|
|
|
|
public String osDrawLine(String drawList, integer endX, integer endY)
|
|
{
|
|
Verbose("osDrawLine(\"{0}\", {1}, {2}, {3}, {4})=\"\"", drawList, endX, endY);
|
|
return "";
|
|
}
|
|
|
|
public String osDrawPolygon(String drawList, list xpoints, list ypoints)
|
|
{
|
|
Verbose("osDrawPolygon(\"{0}\", {1}, {2})=\"\"", drawList, xpoints.ToVerboseString(), ypoints.ToVerboseString());
|
|
return "";
|
|
}
|
|
|
|
public String osDrawRectangle(String drawList, integer width, integer height)
|
|
{
|
|
Verbose("osDrawRectangle(\"{0}\", {1}, {2})=\"\"", drawList, width, height);
|
|
return "";
|
|
}
|
|
|
|
public String osDrawResetTransform(String drawList)
|
|
{
|
|
Verbose("osDrawResetTransform(\"{0}\")=\"\"", drawList);
|
|
return "";
|
|
}
|
|
|
|
public String osDrawRotationTransform(String drawList, Float x)
|
|
{
|
|
Verbose("osDrawRotationTransform(\"{0}\", {1})=\"\"", drawList, x);
|
|
return "";
|
|
}
|
|
|
|
public String osDrawScaleTransform(String drawList, Float x, Float y)
|
|
{
|
|
Verbose("osDrawScaleTransform(\"{0}\", {1}, {2})=\"\"", drawList, x, y);
|
|
return "";
|
|
}
|
|
|
|
public String osDrawText(String drawList, String text)
|
|
{
|
|
Verbose("osDrawText(\"{0}\", \"{1}\")=\"\"", drawList, text);
|
|
return "";
|
|
}
|
|
|
|
public String osDrawTranslationTransform(String drawList, Float x, Float y)
|
|
{
|
|
Verbose("osDrawTranslationTransform(\"{0}\", {1}, {2})=\"\"", drawList, x, y);
|
|
return "";
|
|
}
|
|
|
|
public vector osGetDrawStringSize(String contentType, String text, String fontName, integer fontSize)
|
|
{
|
|
vector v = new vector();
|
|
Verbose("osGetDrawStringSize(\"{0}\", \"{1}\", \"{2}\", {3})={4}", contentType, text, fontName, fontSize, v);
|
|
return v;
|
|
}
|
|
|
|
public String osMovePen(String drawList, integer x, integer y)
|
|
{
|
|
Verbose("osMovePen(\"{0}\", {1}, {2})=\"\"", drawList, x, y);
|
|
return "";
|
|
}
|
|
|
|
public String osSetFontName(String drawList, String fontName)
|
|
{
|
|
Verbose("osSetFontName(\"{0}\", \"{1}\")=\"\"", drawList, fontName);
|
|
return "";
|
|
}
|
|
|
|
public String osSetFontSize(String drawList, integer fontSize)
|
|
{
|
|
Verbose("osSetFontSize(\"{0}\", {1})=\"\"", drawList, fontSize);
|
|
return "";
|
|
}
|
|
|
|
public String osSetPenCap(String drawList, String direction, String type)
|
|
{
|
|
Verbose("osSetPenCap(\"{0}\", \"{1}\", \"{2}\")=\"\"", drawList, direction, type);
|
|
return "";
|
|
}
|
|
|
|
public String osSetPenColor(String drawList, String color)
|
|
{
|
|
Verbose("osSetPenColor(\"{0}\", \"{1}\")=\"\"", drawList, color);
|
|
return "";
|
|
}
|
|
|
|
public String osSetPenSize(String drawList, integer penSize)
|
|
{
|
|
Verbose("osSetPenSize(\"{0}\", {1})=\"\"", drawList, penSize);
|
|
return "";
|
|
}
|
|
|
|
public String osSetDynamicTextureData(String dynamicID, String contentType, String data, String extraParams, integer timer)
|
|
{
|
|
Verbose("osSetDynamicTextureData(\"{0}\", \"{1}\", \"{2}\", \"{3}\", {4})=\"\"", dynamicID, contentType, data, extraParams, timer);
|
|
return "";
|
|
}
|
|
|
|
public String osSetDynamicTextureDataBlend(String dynamicID, String contentType, String data, String extraParams, integer timer, integer alpha)
|
|
{
|
|
Verbose("osSetDynamicTextureDataBlend(\"{0}\", \"{1}\", \"{2}\", \"{3}\", {4}, {5})=\"\"",
|
|
dynamicID, contentType, data, extraParams, timer, alpha);
|
|
return "";
|
|
}
|
|
|
|
public String osSetDynamicTextureDataBlendFace(String dynamicID, String contentType, String data, String extraParams, integer blend, integer disp, integer timer, integer alpha, integer face)
|
|
{
|
|
Verbose("osSetDynamicTextureDataBlendFace(\"{0}\", \"{1}\", \"{2}\", \"{3}\", {4}, {5}, {6}, {7}, {8})=\"\"",
|
|
dynamicID, contentType, data, extraParams, blend, disp, timer, alpha, face);
|
|
return "";
|
|
}
|
|
|
|
public String osSetDynamicTextureDataFace(String dynamicID, String contentType, String data, String extraParams, integer timer, integer face)
|
|
{
|
|
Verbose("osSetDynamicTextureDataFace(\"{0}\", \"{1}\", \"{2}\", \"{3}\", {4}, {5})=\"\"",
|
|
dynamicID, contentType, data, extraParams, timer, face);
|
|
return "";
|
|
}
|
|
|
|
public String osSetDynamicTextureURL(String dynamicID, String contentType, String url, String extraParams, integer timer)
|
|
{
|
|
Verbose("osSetDynamicTextureURL(\"{0}\", \"{1}\", \"{2}\", \"{3}\", {4})=\"\"",
|
|
dynamicID, contentType, url, extraParams, timer);
|
|
return "";
|
|
}
|
|
|
|
public String osSetDynamicTextureURLBlend(String dynamicID, String contentType, String url, String extraParams, integer timer, integer alpha)
|
|
{
|
|
Verbose("osSetDynamicTextureURLBlend(\"{0}\", \"{1}\", \"{2}\", \"{3}\", {4}, {5})=\"\"",
|
|
dynamicID, contentType, url, extraParams, timer, alpha);
|
|
return "";
|
|
}
|
|
|
|
public String osSetDynamicTextureURLBlendFace(String dynamicID, String contentType, String url, String extraParams, integer blend, integer disp, integer timer, integer alpha, integer face)
|
|
{
|
|
Verbose("osSetDynamicTextureURLBlendFace(\"{0}\", \"{1}\", \"{2}\", \"{3}\", {4}, {5}, {6}, {7}, {8})=\"\"",
|
|
dynamicID, contentType, url, extraParams, blend, disp, timer, alpha, face);
|
|
return "";
|
|
}
|
|
|
|
public String osGetNotecard(String name)
|
|
{
|
|
string strPath = host.efMainForm.SolutionExplorer.GetPath(host.GUID, name);
|
|
|
|
if (strPath == string.Empty)
|
|
{
|
|
strPath = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), name);
|
|
}
|
|
|
|
if (!File.Exists(strPath))
|
|
{
|
|
host.VerboseMessage("Notecard: " + strPath + " not found");
|
|
host.ExecuteSecondLife("llSay", (SecondLife.integer)0, (SecondLife.String)("Couldn't find notecard " + name));
|
|
Verbose("osGetNotecard(\"{0}\")=\"\"", name);
|
|
return "";
|
|
}
|
|
|
|
StreamReader sr = new StreamReader(strPath);
|
|
StringBuilder result = new StringBuilder();
|
|
|
|
while (!sr.EndOfStream)
|
|
{
|
|
result.Append(sr.ReadLine() + "\n");
|
|
|
|
}
|
|
sr.Close();
|
|
|
|
Verbose("osGetNotecard(\"{0}\")=\"{1}\"", name, result.ToString());
|
|
return result.ToString();
|
|
}
|
|
|
|
public String osGetNotecardLine(String name, integer line)
|
|
{
|
|
string strPath = host.efMainForm.SolutionExplorer.GetPath(host.GUID, name);
|
|
|
|
if (strPath == string.Empty)
|
|
{
|
|
strPath = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), name);
|
|
}
|
|
|
|
if (!File.Exists(strPath))
|
|
{
|
|
host.VerboseMessage("Notecard: " + strPath + " not found");
|
|
host.ExecuteSecondLife("llSay", (SecondLife.integer)0, (SecondLife.String)("Couldn't find notecard " + name));
|
|
Verbose("osGetNotecardLine(\"{0}\", {1})=\"\"", name, line);
|
|
return "";
|
|
}
|
|
|
|
StreamReader sr = new StreamReader(strPath);
|
|
string result = "";
|
|
int i = 1;
|
|
|
|
while (!sr.EndOfStream)
|
|
{
|
|
if(i == line)
|
|
{
|
|
result = sr.ReadLine();
|
|
} else
|
|
{
|
|
sr.ReadLine();
|
|
}
|
|
i++;
|
|
}
|
|
sr.Close();
|
|
|
|
Verbose("osGetNotecardLine(\"{0}\", {1})=\"{2}\"", name, line, result);
|
|
return result;
|
|
}
|
|
|
|
public integer osGetNumberOfNotecardLines(String name)
|
|
{
|
|
string strPath = host.efMainForm.SolutionExplorer.GetPath(host.GUID, name);
|
|
|
|
if (strPath == string.Empty)
|
|
{
|
|
strPath = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), name);
|
|
}
|
|
|
|
if (!File.Exists(strPath))
|
|
{
|
|
host.VerboseMessage("Notecard: " + strPath + " not found");
|
|
host.ExecuteSecondLife("llSay", (SecondLife.integer)0, (SecondLife.String)("Couldn't find notecard " + name));
|
|
Verbose("osGetNumberOfNotecardLines(\"{0}\")=-1", name);
|
|
return -1;
|
|
}
|
|
|
|
StreamReader sr = new StreamReader(strPath);
|
|
int i = 0;
|
|
|
|
while (!sr.EndOfStream)
|
|
{
|
|
sr.ReadLine();
|
|
i++;
|
|
}
|
|
sr.Close();
|
|
|
|
Verbose("osGetNumberOfNotecardLines(\"{0}\")={1}", name, i);
|
|
return i;
|
|
}
|
|
|
|
public void osMakeNotecard(String notecardName, list contents)
|
|
{
|
|
using(StreamWriter sw = new StreamWriter(Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), notecardName)))
|
|
{
|
|
foreach(String content in contents.ToArray())
|
|
{
|
|
sw.WriteLine(content.ToString());
|
|
}
|
|
}
|
|
|
|
Verbose("osMakeNotecard(\"{0}\", {1})", notecardName, contents.ToVerboseString());
|
|
}
|
|
|
|
public void osMakeNotecard(String notecardName, String contents)
|
|
{
|
|
using (StreamWriter sw = new StreamWriter(Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), notecardName)))
|
|
{
|
|
sw.Write(contents.ToString());
|
|
}
|
|
|
|
Verbose("osMakeNotecard(\"{0}\", \"{1}\")", notecardName, contents);
|
|
}
|
|
|
|
public void osRequestSecureURL(list options)
|
|
{
|
|
Verbose("osRequestSecureURL({0})", options.ToVerboseString());
|
|
}
|
|
|
|
public void osRequestURL(list options)
|
|
{
|
|
Verbose("osRequestURL({0})", options.ToVerboseString());
|
|
}
|
|
|
|
public void osParcelJoin(vector pos1, vector pos2)
|
|
{
|
|
Verbose("osParcelJoin({0}, {1})", pos1, pos2);
|
|
}
|
|
|
|
public void osParcelSubdivide(vector pos1, vector pos2)
|
|
{
|
|
Verbose("osParcelSubdivide({0}, {1})", pos1, pos2);
|
|
}
|
|
|
|
public void osSetParcelDetails(vector pos, list rules)
|
|
{
|
|
Verbose("osSetParcelDetails({0}, {1})", pos, rules.ToVerboseString());
|
|
}
|
|
|
|
public Float osGetTerrainHeight(integer x, integer y)
|
|
{
|
|
Verbose("osGetTerrainHeight({0}, {1})=1", x, y);
|
|
return 1;
|
|
}
|
|
|
|
public integer osSetTerrainHeight(integer x, integer y, double value)
|
|
{
|
|
Verbose("osSetTerrainHeight({0}, {1}, {2})=1", x, y, value);
|
|
return 1;
|
|
}
|
|
|
|
public void osSetTerrainTexture(integer level, key texture)
|
|
{
|
|
Verbose("osSetTerrainTexture({0}, \"{1}\")", level, texture);
|
|
}
|
|
|
|
public void osSetTerrainTextureHeight(integer corner, Float low, Float high)
|
|
{
|
|
Verbose("osSetTerrainTextureHeight({0}, {1}, {2})", corner, low, high);
|
|
}
|
|
|
|
public void osTerrainFlush()
|
|
{
|
|
Verbose("osTerrainFlush()");
|
|
}
|
|
|
|
public Float osGetCurrentSunHour()
|
|
{
|
|
Verbose("osGetCurrentSunHour()=0");
|
|
return 0;
|
|
}
|
|
|
|
public Float osGetSunParam(String param)
|
|
{
|
|
Verbose("osGetSunParam(\"{0}\")=0", param);
|
|
return 0;
|
|
}
|
|
|
|
public Float osGetWindParam(String plugin, String param)
|
|
{
|
|
Verbose("osGetWindParam(\"{0}\", \"{1}\")=0", plugin, param);
|
|
return 0;
|
|
}
|
|
|
|
public void osSetEstateSunSettings(integer sunFixed, Float sunHour)
|
|
{
|
|
Verbose("osSetEstateSunSettings({0}, {1})", sunFixed, sunHour);
|
|
}
|
|
|
|
public void osSetRegionSunSettings(integer useEstateSun, integer sunFixed, Float sunHour)
|
|
{
|
|
Verbose("osSetRegionSunSettings({0}, {1}, {2})", useEstateSun, sunFixed, sunHour);
|
|
}
|
|
|
|
public void osSetRegionWaterHeight(Float height)
|
|
{
|
|
Verbose("osSetRegionWaterHeight({0})", height);
|
|
}
|
|
|
|
public void osSetSunParam(String param, Float value)
|
|
{
|
|
Verbose("osSetSunParam(\"{0}\", {1})", param, value);
|
|
}
|
|
|
|
public void osSetWindParam(String plugin, String param, Float value)
|
|
{
|
|
Verbose("osSetWindParam(\"{0}\", \"{1}\", {2})", plugin, param, value);
|
|
}
|
|
|
|
public String osWindActiveModelPluginName()
|
|
{
|
|
Verbose("osWindActiveModelPluginName()=\"\"");
|
|
return "";
|
|
}
|
|
|
|
public integer osCheckODE()
|
|
{
|
|
Verbose("osCheckODE()=0");
|
|
return 0;
|
|
}
|
|
|
|
public String osGetGridCustom(String key)
|
|
{
|
|
Verbose("osGetGridCustom(\"{0}\")=\"\"");
|
|
return "";
|
|
}
|
|
|
|
public String osGetGridGatekeeperURI()
|
|
{
|
|
Verbose("osGetGridGatekeeperURI()=\"\"");
|
|
return "";
|
|
}
|
|
|
|
public String osGetGridHomeURI()
|
|
{
|
|
Verbose("osGetGridHomeURI()=\"\"");
|
|
return "";
|
|
}
|
|
|
|
public String osGetGridLoginURI()
|
|
{
|
|
Verbose("osGetGridLoginURI()=\"\"");
|
|
return "";
|
|
}
|
|
|
|
public String osGetGridName()
|
|
{
|
|
Verbose("osGetGridName()=\"\"");
|
|
return "";
|
|
}
|
|
|
|
public String osGetGridNick()
|
|
{
|
|
Verbose("osGetGridNick()=\"\"");
|
|
return "";
|
|
}
|
|
|
|
public key osGetMapTexture()
|
|
{
|
|
key k = new key(new Guid());
|
|
Verbose("osGetMapTexture()=\"{0}\"", k);
|
|
return k;
|
|
}
|
|
|
|
public String osGetPhysicsEngineName()
|
|
{
|
|
Verbose("osGetPhysicsEngineName()=\"\"");
|
|
return "";
|
|
}
|
|
|
|
public String osGetPhysicsEngineType()
|
|
{
|
|
Verbose("osGetPhysicsEngineType()=\"\"");
|
|
return "";
|
|
}
|
|
|
|
public key osGetRegionMapTexture(String regionName)
|
|
{
|
|
key k = new key(new Guid());
|
|
Verbose("osGetRegionMapTexture(\"{0}\")=\"{1}\"", regionName, k);
|
|
return k;
|
|
}
|
|
|
|
public vector osGetRegionSize()
|
|
{
|
|
vector v = new vector(256, 256, 0);
|
|
Verbose("osGetRegionSize()={0}", v);
|
|
return v;
|
|
}
|
|
|
|
public list osGetRegionStats()
|
|
{
|
|
list l = new list();
|
|
Verbose("osGetRegionStats()={0}", l.ToVerboseString());
|
|
return l;
|
|
}
|
|
|
|
public String osGetScriptEngineName()
|
|
{
|
|
Verbose("osGetScriptEngineName()=\"\"");
|
|
return "";
|
|
}
|
|
|
|
public integer osGetSimulatorMemory()
|
|
{
|
|
Verbose("osGetSimulatorMemory()=0");
|
|
return 0;
|
|
}
|
|
|
|
public String osGetSimulatorVersion()
|
|
{
|
|
Verbose("osGetSimulatorVersion()=\"\"");
|
|
return "";
|
|
}
|
|
|
|
public String osLoadedCreationDate()
|
|
{
|
|
Verbose("osLoadedCreationDate()=\"\"");
|
|
return "";
|
|
}
|
|
|
|
public String osLoadedCreationID()
|
|
{
|
|
Verbose("osLoadedCreationID()=\"\"");
|
|
return "";
|
|
}
|
|
|
|
public String osLoadedCreationTime()
|
|
{
|
|
Verbose("osLoadedCreationTime()=\"\"");
|
|
return "";
|
|
}
|
|
|
|
public integer osConsoleCommand(String command)
|
|
{
|
|
Verbose("osConsoleCommand(\"{0}\")=1");
|
|
return 1;
|
|
}
|
|
|
|
public void osRegionNotice(String msg)
|
|
{
|
|
Verbose("osRegionNotice(\"{0}\")", msg);
|
|
}
|
|
|
|
public integer osRegionRestart(Float seconds)
|
|
{
|
|
Verbose("osRegionRestart({0})={1}", seconds, 1);
|
|
return 1;
|
|
}
|
|
|
|
public void osSetParcelMediaURL(String url)
|
|
{
|
|
Verbose("osSetParcelMediaURL(\"{0}\")", url);
|
|
}
|
|
|
|
public void osSetParcelSIPAddress(String SIPAddress)
|
|
{
|
|
Verbose("osSetParcelSIPAddress(\"{0}\")", SIPAddress);
|
|
}
|
|
|
|
public void osSetPrimFloatOnWater(integer f)
|
|
{
|
|
Verbose("osSetPrimFloatOnWater({0})", f);
|
|
}
|
|
|
|
public void osGrantScriptPermissions(key allowed_key, String function)
|
|
{
|
|
Verbose("osGrantScriptPermissions(\"{0}\", \"{1}\")", allowed_key, function);
|
|
}
|
|
|
|
public void osRevokeScriptPermissions(key revoked_key, String function)
|
|
{
|
|
Verbose("osRevokeScriptPermissions(\"{0}\", \"{1}\")", revoked_key, function);
|
|
}
|
|
|
|
public void osCollisionSound(String impact_sound, double impact_volume)
|
|
{
|
|
Verbose("osCollisionSound(\"{0}\", {1})", impact_sound, impact_volume);
|
|
}
|
|
|
|
public Float osDie(key objectUUID)
|
|
{
|
|
Verbose("osDie(\"{0}\")=1", objectUUID);
|
|
return 1;
|
|
}
|
|
|
|
public String osFormatString(String format, list parameters)
|
|
{
|
|
Verbose("osFormatString(\"{0}\", {1})=\"\"", format, parameters.ToVerboseString());
|
|
return "";
|
|
}
|
|
|
|
public String osKey2Name(key id)
|
|
{
|
|
Verbose("osKey2Name(\"{0}\")=\"\"");
|
|
return "";
|
|
}
|
|
|
|
public Float osList2Double(list src, integer index)
|
|
{
|
|
if (index >= src.Count)
|
|
{
|
|
Verbose("osList2Double({0}, {1})={2}", src.ToVerboseString(), index, -1);
|
|
return -1;
|
|
}
|
|
else if (src[index].GetType() == typeof(string))
|
|
{
|
|
Verbose("osList2Double({0}, {1})={2}", src.ToVerboseString(), index, float.Parse((string)src[index]));
|
|
return (Float)float.Parse((string)src[index]);
|
|
}
|
|
else
|
|
{
|
|
Float f = float.Parse(src[index].ToString());
|
|
Verbose("osList2Double({0}, {1})={2}", src.ToVerboseString(), index, src[index]);
|
|
return f;
|
|
}
|
|
}
|
|
|
|
public list osMatchString(string src, String pattern, integer start)
|
|
{
|
|
list result = new list();
|
|
|
|
if (start < 0)
|
|
{
|
|
start = src.Length + start;
|
|
}
|
|
|
|
if (start < 0 || start >= src.Length)
|
|
{
|
|
Verbose("osMatchString(\"{0}\", \"{1}\", {2})={3}", src, pattern, start, result.ToVerboseString());
|
|
return result; // empty list
|
|
}
|
|
|
|
// Find matches beginning at start position
|
|
Regex matcher = new Regex(pattern);
|
|
Match match = matcher.Match(src, start);
|
|
while (match.Success)
|
|
{
|
|
foreach (System.Text.RegularExpressions.Group g in match.Groups)
|
|
{
|
|
if (g.Success)
|
|
{
|
|
result.Add(new String(g.Value));
|
|
result.Add(new integer(g.Index));
|
|
}
|
|
}
|
|
|
|
match = match.NextMatch();
|
|
}
|
|
Verbose("osMatchString(\"{0}\", \"{1}\", {2})={3}", src, pattern, start, result.ToVerboseString());
|
|
return result;
|
|
}
|
|
|
|
public Float osMax(Double a, Double b)
|
|
{
|
|
Float max = (Float)Math.Max(a, b);
|
|
|
|
Verbose("osMax({0}, {1})={2}", a, b, max);
|
|
return max;
|
|
}
|
|
|
|
public Float osMin(Double a, Double b)
|
|
{
|
|
Float min = (Float)Math.Min(a, b);
|
|
|
|
Verbose("osMin({0}, {1})={2}", a, b, min);
|
|
return min;
|
|
}
|
|
|
|
public Hashtable osParseJSON(String JSON)
|
|
{
|
|
Object decoded = JsonConvert.DeserializeObject(JSON);
|
|
|
|
if (decoded is Hashtable)
|
|
{
|
|
Verbose("osParseJSON(\"{0}\")={1}", JSON, (Hashtable)decoded);
|
|
return (Hashtable) decoded;
|
|
}
|
|
else if (decoded is ArrayList)
|
|
{
|
|
ArrayList decoded_list = (ArrayList)decoded;
|
|
Hashtable fakearray = new Hashtable();
|
|
int i = 0;
|
|
for (i = 0; i < decoded_list.Count; i++)
|
|
{
|
|
fakearray.Add(i, decoded_list[i]);
|
|
}
|
|
|
|
Verbose("osParseJSON(\"{0}\")={1}", JSON, new list(decoded_list.ToArray()).ToVerboseString());
|
|
return fakearray;
|
|
}
|
|
else
|
|
{
|
|
Chat(0, "osParseJSON: unable to parse JSON string " + JSON, CommunicationType.Say);
|
|
Verbose("osParseJSON(\"{0}\")={1}", JSON, new list().ToVerboseString());
|
|
return null;
|
|
}
|
|
}
|
|
|
|
public Object osParseJSONNew(String JSON)
|
|
{
|
|
Object result = JsonConvert.DeserializeObject(JSON);
|
|
Verbose("osParseJSONNew(\"{0}\")={1}", JSON, result);
|
|
return result;
|
|
}
|
|
|
|
public string osReplaceString(string src, String pattern, String replace, int count, int start)
|
|
{
|
|
// Normalize indices (if negative).
|
|
// After normalization they may still be
|
|
// negative, but that is now relative to
|
|
// the start, rather than the end, of the
|
|
// sequence.
|
|
if (start < 0)
|
|
{
|
|
start = src.Length + start;
|
|
}
|
|
|
|
if (start < 0 || start >= src.Length)
|
|
{
|
|
Verbose("osReplaceString(\"{0}\", \"{1}\", \"{2}\", {3}, {4})=\"{5}\"", src, pattern, replace, count, start, src);
|
|
return src;
|
|
}
|
|
|
|
// Find matches beginning at start position
|
|
Regex matcher = new Regex(pattern);
|
|
string result = matcher.Replace(src, replace, count, start);
|
|
Verbose("osReplaceString(\"{0}\", \"{1}\", \"{2}\", {3}, {4})=\"{5}\"", src, pattern, replace, count, start, result);
|
|
|
|
return result;
|
|
}
|
|
|
|
public integer osRegexIsMatch(String input, String pattern)
|
|
{
|
|
integer result = Regex.IsMatch(input, pattern);
|
|
Verbose("osRegexIsMatch(\"{0}\", \"{1}\")={2}", input, pattern, result);
|
|
|
|
return result;
|
|
}
|
|
|
|
public void osSetContentType(key id, string type)
|
|
{
|
|
Verbose("osSetContentType(\"{0}\", \"{1}\")", id, type);
|
|
}
|
|
|
|
public void osSetStateEvents(integer events)
|
|
{
|
|
Verbose("osSetStateEvents({0})", events);
|
|
}
|
|
|
|
public string osUnixTimeToTimestamp(integer epoch)
|
|
{
|
|
long baseTicks = 621355968000000000;
|
|
long tickResolution = 10000000;
|
|
long epochTicks = (epoch * tickResolution) + baseTicks;
|
|
DateTime date = new DateTime(epochTicks);
|
|
string result = date.ToString("yyyy-MM-ddTHH:mm:ss.fffffffZ");
|
|
|
|
Verbose("osUnixTimeToTimestamp({0})=\"{1}\"", epoch, result);
|
|
|
|
return result;
|
|
}
|
|
|
|
public void osVolumeDetect(integer detect)
|
|
{
|
|
Verbose("osVolumeDetect({0})", detect);
|
|
}
|
|
}
|
|
}
|