using System;
using System.Collections.Generic;
using System.Text;
using libsecondlife;
using OpenSim.Region.Environment.Scenes;
using OpenSim.Region.Environment.Scenes.Scripting;
using OpenSim.Region.ScriptEngine.DotNetEngine.Compiler;
using OpenSim.Region.ScriptEngine.Common;
using OpenSim.Framework.Console;
namespace OpenSim.Region.ScriptEngine.DotNetEngine.Compiler
{
///
/// Contains all LSL ll-functions. This class will be in Default AppDomain.
///
public class LSL_BuiltIn_Commands: MarshalByRefObject, LSL_BuiltIn_Commands_Interface
{
private System.Text.ASCIIEncoding enc = new System.Text.ASCIIEncoding();
private ScriptManager m_manager;
private IScriptHost m_host;
public LSL_BuiltIn_Commands(ScriptManager manager, IScriptHost host)
{
m_manager = manager;
m_host = host;
MainLog.Instance.Notice("ScriptEngine", "LSL_BaseClass.Start() called. Hosted by [" + m_host.Name + ":" + m_host.UUID + "@" + m_host.AbsolutePosition + "]");
}
private string m_state = "default";
public string State() {
return m_state;
}
public Scene World
{
get { return m_manager.World; }
}
//These are the implementations of the various ll-functions used by the LSL scripts.
//starting out, we use the System.Math library for trig functions. - CFK 8-14-07
public double llSin(double f) { return (double)Math.Sin(f); }
public double llCos(double f) { return (double)Math.Cos(f); }
public double llTan(double f) { return (double)Math.Tan(f); }
public double llAtan2(double x, double y) { return (double)Math.Atan2(y, x); }
public double llSqrt(double f) { return (double)Math.Sqrt(f); }
public double llPow(double fbase, double fexponent) { return (double)Math.Pow(fbase, fexponent); }
public int llAbs(int i) { return (int)Math.Abs(i); }
public double llFabs(double f) { return (double)Math.Abs(f); }
public double llFrand(double mag)
{
lock (OpenSim.Framework.Utilities.Util.RandomClass)
{
return OpenSim.Framework.Utilities.Util.RandomClass.Next((int)mag);
}
}
public int llFloor(double f) { return (int)Math.Floor(f); }
public int llCeil(double f) { return (int)Math.Ceiling(f); }
public int llRound(double f) { return (int)Math.Round(f, 1); }
public double llVecMag(LSL_Types.Vector3 v) { return 0; }
public LSL_Types.Vector3 llVecNorm(LSL_Types.Vector3 v) { return new LSL_Types.Vector3(); }
public double llVecDist(LSL_Types.Vector3 a, LSL_Types.Vector3 b) { return 0; }
public LSL_Types.Vector3 llRot2Euler(LSL_Types.Quaternion r) { return new LSL_Types.Vector3(); }
public LSL_Types.Quaternion llEuler2Rot(LSL_Types.Vector3 v) { return new LSL_Types.Quaternion(); }
public LSL_Types.Quaternion llAxes2Rot(LSL_Types.Vector3 fwd, LSL_Types.Vector3 left, LSL_Types.Vector3 up) { return new LSL_Types.Quaternion(); }
public LSL_Types.Vector3 llRot2Fwd(LSL_Types.Quaternion r) { return new LSL_Types.Vector3(); }
public LSL_Types.Vector3 llRot2Left(LSL_Types.Quaternion r) { return new LSL_Types.Vector3(); }
public LSL_Types.Vector3 llRot2Up(LSL_Types.Quaternion r) { return new LSL_Types.Vector3(); }
public LSL_Types.Quaternion llRotBetween(LSL_Types.Vector3 start, LSL_Types.Vector3 end) { return new LSL_Types.Quaternion(); }
public void llWhisper(int channelID, string text)
{
//Common.SendToDebug("INTERNAL FUNCTION llWhisper(" + channelID + ", \"" + text + "\");");
Console.WriteLine("llWhisper Channel " + channelID + ", Text: \"" + text + "\"");
//type for whisper is 0
World.SimChat(Helpers.StringToField(text),
0, m_host.AbsolutePosition, m_host.Name, m_host.UUID);
}
//public void llSay(int channelID, string text)
public void llSay(int channelID, string text)
{
//TODO: DO SOMETHING USEFUL HERE
//Common.SendToDebug("INTERNAL FUNCTION llSay(" + (int)channelID + ", \"" + (string)text + "\");");
Console.WriteLine("llSay Channel " + channelID + ", Text: \"" + text + "\"");
//type for say is 1
World.SimChat(Helpers.StringToField(text),
1, m_host.AbsolutePosition, m_host.Name, m_host.UUID);
}
public void llShout(int channelID, string text)
{
Console.WriteLine("llShout Channel " + channelID + ", Text: \"" + text + "\"");
//type for shout is 2
World.SimChat(Helpers.StringToField(text),
2, m_host.AbsolutePosition, m_host.Name, m_host.UUID);
}
public int llListen(int channelID, string name, string ID, string msg) { return 0; }
public void llListenControl(int number, int active) { return; }
public void llListenRemove(int number) { return; }
public void llSensor(string name, string id, int type, double range, double arc) { return; }
public void llSensorRepeat(string name, string id, int type, double range, double arc, double rate) { return; }
public void llSensorRemove() { return; }
public string llDetectedName(int number) { return ""; }
public string llDetectedKey(int number) { return ""; }
public string llDetectedOwner(int number) { return ""; }
public int llDetectedType(int number) { return 0; }
public LSL_Types.Vector3 llDetectedPos(int number) { return new LSL_Types.Vector3(); }
public LSL_Types.Vector3 llDetectedVel(int number) { return new LSL_Types.Vector3(); }
public LSL_Types.Vector3 llDetectedGrab(int number) { return new LSL_Types.Vector3(); }
public LSL_Types.Quaternion llDetectedRot(int number) { return new LSL_Types.Quaternion(); }
public int llDetectedGroup(int number) { return 0; }
public int llDetectedLinkNumber(int number) { return 0; }
public void llDie() { return; }
public double llGround(LSL_Types.Vector3 offset) { return 0; }
public double llCloud(LSL_Types.Vector3 offset) { return 0; }
public LSL_Types.Vector3 llWind(LSL_Types.Vector3 offset) { return new LSL_Types.Vector3(); }
public void llSetStatus(int status, int value) { return; }
public int llGetStatus(int status) { return 0; }
public void llSetScale(LSL_Types.Vector3 scale) { return; }
public LSL_Types.Vector3 llGetScale() { return new LSL_Types.Vector3(); }
public void llSetColor(LSL_Types.Vector3 color, int face) { return; }
public double llGetAlpha(int face) { return 0; }
public void llSetAlpha(double alpha, int face) { return; }
public LSL_Types.Vector3 llGetColor(int face) { return new LSL_Types.Vector3(); }
public void llSetTexture(string texture, int face) { return; }
public void llScaleTexture(double u, double v, int face) { return; }
public void llOffsetTexture(double u, double v, int face) { return; }
public void llRotateTexture(double rotation, int face) { return; }
public string llGetTexture(int face) { return ""; }
public void llSetPos(LSL_Types.Vector3 pos) { return; }
public LSL_Types.Vector3 llGetPos()
{
throw new NotImplementedException("llGetPos");
// return m_host.AbsolutePosition;
}
public LSL_Types.Vector3 llGetLocalPos() { return new LSL_Types.Vector3(); }
public void llSetRot(LSL_Types.Quaternion rot) { }
public LSL_Types.Quaternion llGetRot() { return new LSL_Types.Quaternion(); }
public LSL_Types.Quaternion llGetLocalRot() { return new LSL_Types.Quaternion(); }
public void llSetForce(LSL_Types.Vector3 force, int local) { }
public LSL_Types.Vector3 llGetForce() { return new LSL_Types.Vector3(); }
public int llTarget(LSL_Types.Vector3 position, double range) { return 0; }
public void llTargetRemove(int number) { }
public int llRotTarget(LSL_Types.Quaternion rot, double error) { return 0; }
public void llRotTargetRemove(int number) { }
public void llMoveToTarget(LSL_Types.Vector3 target, double tau) { }
public void llStopMoveToTarget() { }
public void llApplyImpulse(LSL_Types.Vector3 force, int local) { }
public void llApplyRotationalImpulse(LSL_Types.Vector3 force, int local) { }
public void llSetTorque(LSL_Types.Vector3 torque, int local) { }
public LSL_Types.Vector3 llGetTorque() { return new LSL_Types.Vector3(); }
public void llSetForceAndTorque(LSL_Types.Vector3 force, LSL_Types.Vector3 torque, int local) { }
public LSL_Types.Vector3 llGetVel() { return new LSL_Types.Vector3(); }
public LSL_Types.Vector3 llGetAccel() { return new LSL_Types.Vector3(); }
public LSL_Types.Vector3 llGetOmega() { return new LSL_Types.Vector3(); }
public double llGetTimeOfDay() { return 0; }
public double llGetWallclock() { return 0; }
public double llGetTime() { return 0; }
public void llResetTime() { }
public double llGetAndResetTime() { return 0; }
public void llSound() { }
public void llPlaySound(string sound, double volume) { }
public void llLoopSound(string sound, double volume) { }
public void llLoopSoundMaster(string sound, double volume) { }
public void llLoopSoundSlave(string sound, double volume) { }
public void llPlaySoundSlave(string sound, double volume) { }
public void llTriggerSound(string sound, double volume) { }
public void llStopSound() { }
public void llPreloadSound(string sound) { }
public string llGetSubString(string src, int start, int end) { return src.Substring(start, end); }
public string llDeleteSubString(string src, int start, int end) { return ""; }
public string llInsertString(string dst, int position, string src) { return ""; }
public string llToUpper(string src) { return src.ToUpper(); }
public string llToLower(string src) { return src.ToLower(); }
public int llGiveMoney(string destination, int amount) { return 0; }
public void llMakeExplosion() { }
public void llMakeFountain() { }
public void llMakeSmoke() { }
public void llMakeFire() { }
public void llRezObject(string inventory, LSL_Types.Vector3 pos, LSL_Types.Quaternion rot, int param) { }
public void llLookAt(LSL_Types.Vector3 target, double strength, double damping) { }
public void llStopLookAt() { }
public void llSetTimerEvent(double sec) { }
public void llSleep(double sec) { System.Threading.Thread.Sleep((int)(sec * 1000)); }
public double llGetMass() { return 0; }
public void llCollisionFilter(string name, string id, int accept) { }
public void llTakeControls(int controls, int accept, int pass_on) { }
public void llReleaseControls() { }
public void llAttachToAvatar(int attachment) { }
public void llDetachFromAvatar() { }
public void llTakeCamera() { }
public void llReleaseCamera() { }
public string llGetOwner() { return ""; }
public void llInstantMessage(string user, string message) { }
public void llEmail(string address, string subject, string message) { }
public void llGetNextEmail(string address, string subject) { }
public string llGetKey() { return ""; }
public void llSetBuoyancy(double buoyancy) { }
public void llSetHoverHeight(double height, int water, double tau) { }
public void llStopHover() { }
public void llMinEventDelay(double delay) { }
public void llSoundPreload() { }
public void llRotLookAt(LSL_Types.Quaternion target, double strength, double damping) { }
public int llStringLength(string str)
{
if (str.Length > 0)
{
return str.Length;
}
else
{
return 0;
}
}
public void llStartAnimation(string anim) { }
public void llStopAnimation(string anim) { }
public void llPointAt() { }
public void llStopPointAt() { }
public void llTargetOmega(LSL_Types.Vector3 axis, double spinrate, double gain) { }
public int llGetStartParameter() { return 0; }
public void llGodLikeRezObject(string inventory, LSL_Types.Vector3 pos) { }
public void llRequestPermissions(string agent, int perm) { }
public string llGetPermissionsKey() { return ""; }
public int llGetPermissions() { return 0; }
public int llGetLinkNumber() { return 0; }
public void llSetLinkColor(int linknumber, LSL_Types.Vector3 color, int face) { }
public void llCreateLink(string target, int parent) { }
public void llBreakLink(int linknum) { }
public void llBreakAllLinks() { }
public string llGetLinkKey(int linknum) { return ""; }
public void llGetLinkName(int linknum) { }
public int llGetInventoryNumber(int type) { return 0; }
public string llGetInventoryName(int type, int number) { return ""; }
public void llSetScriptState(string name, int run) { }
public double llGetEnergy() { return 1.0f; }
public void llGiveInventory(string destination, string inventory) { }
public void llRemoveInventory(string item) { }
public void llSetText(string text, LSL_Types.Vector3 color, double alpha)
{
// TEMP DISABLED UNTIL WE CAN AGREE UPON VECTOR/ROTATION FORMAT
//m_host.SetText(text, color, alpha);
}
public double llWater(LSL_Types.Vector3 offset) { return 0; }
public void llPassTouches(int pass) { }
public string llRequestAgentData(string id, int data) { return ""; }
public string llRequestInventoryData(string name) { return ""; }
public void llSetDamage(double damage) { }
public void llTeleportAgentHome(string agent) { }
public void llModifyLand(int action, int brush) { }
public void llCollisionSound(string impact_sound, double impact_volume) { }
public void llCollisionSprite(string impact_sprite) { }
public string llGetAnimation(string id) { return ""; }
public void llResetScript() { }
public void llMessageLinked(int linknum, int num, string str, string id) { }
public void llPushObject(string target, LSL_Types.Vector3 impulse, LSL_Types.Vector3 ang_impulse, int local) { }
public void llPassCollisions(int pass) { }
public string llGetScriptName() { return ""; }
public int llGetNumberOfSides() { return 0; }
public LSL_Types.Quaternion llAxisAngle2Rot(LSL_Types.Vector3 axis, double angle) { return new LSL_Types.Quaternion(); }
public LSL_Types.Vector3 llRot2Axis(LSL_Types.Quaternion rot) { return new LSL_Types.Vector3(); }
public void llRot2Angle() { }
public double llAcos(double val) { return (double)Math.Acos(val); }
public double llAsin(double val) { return (double)Math.Asin(val); }
public double llAngleBetween(LSL_Types.Quaternion a, LSL_Types.Quaternion b) { return 0; }
public string llGetInventoryKey(string name) { return ""; }
public void llAllowInventoryDrop(int add) { }
public LSL_Types.Vector3 llGetSunDirection() { return new LSL_Types.Vector3(); }
public LSL_Types.Vector3 llGetTextureOffset(int face) { return new LSL_Types.Vector3(); }
public LSL_Types.Vector3 llGetTextureScale(int side) { return new LSL_Types.Vector3(); }
public double llGetTextureRot(int side) { return 0; }
public int llSubStringIndex(string source, string pattern) { return 0; }
public string llGetOwnerKey(string id) { return ""; }
public LSL_Types.Vector3 llGetCenterOfMass() { return new LSL_Types.Vector3(); }
public List llListSort(List src, int stride, int ascending)
{ return new List(); }
public int llGetListLength(List src) { return 0; }
public int llList2Integer(List src, int index) { return 0; }
public double llList2double(List src, int index) { return 0; }
public string llList2String(List src, int index) { return ""; }
public string llList2Key(List src, int index) { return ""; }
public LSL_Types.Vector3 llList2Vector(List src, int index)
{ return new LSL_Types.Vector3(); }
public LSL_Types.Quaternion llList2Rot(List src, int index)
{ return new LSL_Types.Quaternion(); }
public List llList2List(List src, int start, int end)
{ return new List(); }
public List llDeleteSubList(List src, int start, int end)
{ return new List(); }
public int llGetListEntryType(List src, int index) { return 0; }
public string llList2CSV(List src) { return ""; }
public List llCSV2List(string src)
{ return new List(); }
public List llListRandomize(List src, int stride)
{ return new List(); }
public List llList2ListStrided(List src, int start, int end, int stride)
{ return new List(); }
public LSL_Types.Vector3 llGetRegionCorner()
{ return new LSL_Types.Vector3(World.RegionInfo.RegionLocX * 256, World.RegionInfo.RegionLocY * 256, 0); }
public List llListInsertList(List dest, List src, int start)
{ return new List(); }
public int llListFindList(List src, List test) { return 0; }
public string llGetObjectName() { return ""; }
public void llSetObjectName(string name) { }
public string llGetDate() { return ""; }
public int llEdgeOfWorld(LSL_Types.Vector3 pos, LSL_Types.Vector3 dir) { return 0; }
public int llGetAgentInfo(string id) { return 0; }
public void llAdjustSoundVolume(double volume) { }
public void llSetSoundQueueing(int queue) { }
public void llSetSoundRadius(double radius) { }
public string llKey2Name(string id) { return ""; }
public void llSetTextureAnim(int mode, int face, int sizex, int sizey, double start, double length, double rate) { }
public void llTriggerSoundLimited(string sound, double volume, LSL_Types.Vector3 top_north_east, LSL_Types.Vector3 bottom_south_west) { }
public void llEjectFromLand(string pest) { }
public void llParseString2List() { }
public int llOverMyLand(string id) { return 0; }
public string llGetLandOwnerAt(LSL_Types.Vector3 pos) { return ""; }
public string llGetNotecardLine(string name, int line) { return ""; }
public LSL_Types.Vector3 llGetAgentSize(string id) { return new LSL_Types.Vector3(); }
public int llSameGroup(string agent) { return 0; }
public void llUnSit(string id) { }
public LSL_Types.Vector3 llGroundSlope(LSL_Types.Vector3 offset) { return new LSL_Types.Vector3(); }
public LSL_Types.Vector3 llGroundNormal(LSL_Types.Vector3 offset) { return new LSL_Types.Vector3(); }
public LSL_Types.Vector3 llGroundContour(LSL_Types.Vector3 offset) { return new LSL_Types.Vector3(); }
public int llGetAttached() { return 0; }
public int llGetFreeMemory() { return 0; }
public string llGetRegionName() { return m_manager.RegionName; }
public double llGetRegionTimeDilation() { return 1.0f; }
public double llGetRegionFPS() { return 10.0f; }
public void llParticleSystem(List