OSSL Proposals
From OpenSimulator
(Difference between revisions)
Line 220: | Line 220: | ||
| Ezekiel | | Ezekiel | ||
− | |- style="font-size: | + | |- style="font-size:8pt;border-bottom:1px solid;" valign="top" |
| osSetScriptServer() | | osSetScriptServer() | ||
| Create a 'Server' prim that allows for extended scripting capabilities: more memory, higher bandwidth when communicating with external servers, probably some database connectivity, no artificial delays, can receive IMs, etc. Could be limited to one server per prim / parcel or per avatar, could be forced to remain in a fixed position. A server is important for residents that want to set up a virtual business. | | Create a 'Server' prim that allows for extended scripting capabilities: more memory, higher bandwidth when communicating with external servers, probably some database connectivity, no artificial delays, can receive IMs, etc. Could be limited to one server per prim / parcel or per avatar, could be forced to remain in a fixed position. A server is important for residents that want to set up a virtual business. | ||
Line 226: | Line 226: | ||
| Ezekiel | | Ezekiel | ||
− | |- style="font-size: | + | |- style="font-size:8pt;border-bottom:1px solid;" valign="top" |
| integer osRemoteLoadScript(string url, string target) | | integer osRemoteLoadScript(string url, string target) | ||
| Load a source file in txt format from "URL" and compile it into script "target" in the inventory of the same prim. Requires permission of the object owner (RequestPermission). Returns boolean success value. Replaces an existing script with same name. This function would allow updates to scripted solutions that operate in any grid and sim worldwide, allowing the creator of the solution to distribute code fixes and implement new functions. Since the source code is distributed openly, it can be copied and modified by anyone. A function that would allow for secure code distribution, protecting copyrights and certificates, would also be very interesting but should be far more difficult to implement. | | Load a source file in txt format from "URL" and compile it into script "target" in the inventory of the same prim. Requires permission of the object owner (RequestPermission). Returns boolean success value. Replaces an existing script with same name. This function would allow updates to scripted solutions that operate in any grid and sim worldwide, allowing the creator of the solution to distribute code fixes and implement new functions. Since the source code is distributed openly, it can be copied and modified by anyone. A function that would allow for secure code distribution, protecting copyrights and certificates, would also be very interesting but should be far more difficult to implement. |
Revision as of 07:28, 6 February 2008
This is a page dedicated to OpenSim's very own home brew custom scripting language Known as "Open Sim Scripting Language"
Please see LSL_OSSL_Standards for proposed naming schema
- Please post your osFunction along with a brief description of what it would be for, or do and an example of it.
- Make sure it begins with os NOT ll.
- And remember, almost anything within reason can be posted here as an idea, who knows, maybe a variation of your request can be possible.
- If a function could implemented in standard LSL, there is no reason to make an OS function. LSL code and function code executes at the same speed in OpenSim.
OSSL Proposal Table
osFunction | Description | Example Usage | Signed |
int osRestartRegion() | Restarts the region the script is currently in. The script this is run in has to be owned by the master avatar for that region. Returns 1 if the region is restarting, 0 on failure. | osRestartRegion(); | gryc (Implemented by AFrisby) |
int osWebTexture() | Sets the texture from a web-url | osWebTexture(string url,integer maptype); | AFrisby? |
int osShutdownRegion() | Shuts down the region the script is currently in. The script this is run in has to be owned by the master avatar for that region. Returns 1 if the region is going down, 0 on failure. | osShutdownRegion(); | gryc |
void osAttachmentSay(integer channel, string msg) | Provide a secure, low lag method of communicating between attachments over the chat channels by only sending messages to objects attached to the same avatar. Would fail (or not be heard) if in a non-attached object. | osAttachmentSay(-20, "detatch"); | Del M |
void osMessageSecure(string message_key, string str, integer num, key id); secure_message(string message_key, string str, integer num, key id); |
Provide a method of sending secure, salt encripted messages sim wide. Messages would only be able to be received by scripts with the matching key in the secure_message method. | osMessageSecure("myPassPhrase", "Hello World", 0, NULL_KEY); | Del M |
void osSetText( vector color, string text [,vector color, string text]); | Allow setting of multiple colors on the prim text | osSetText(<1,0,0>,"Red", <0,1,0>, "\nGreen", <0,0,1>, "\nBlue"); | Del M |
osSensor | Gets ALL the objects in the specified range not just the first 16 | (same as standard) | Sal |
list lst=osDetectObjectsInSim(key id) | given an Agent Key, provide a list of ALL object owned by that agent | osDetectObjectsInSim(key id) returning a strided list of [ name, <pos> ] | Sal |
integer=osDialog([ title, label1, type1, len1, label2, type2, len2].... | given title and a listing of fields, builds up a real form where to put structured checked data | will return a [ value1, value2, valuen ] corresponding to fields read. Type might be something like (string, text (multiline), integer, float, currency(decimals), options(combobox) | Sal |
key id=osMakeTextureText(string name,integer width, integer height,[posx1,posy1,font1,color1,size1,text1,posx2,posy2,font2,color2,size2,text2....]) | allow for producing a texture on the fly with desired Font content from a selected font selection. Width, Height in pixels 1024x512 to control how big will be the texture | will generate a texture with defined text. (Allow some support for at least ISO-8859-1) texture will be created in the object inventory. posx, posy in the range 0-1 to be pixel independent | Sal |
osMakeNotecard(string name, [ line1, line2, line3, ...]) | allow creation of new notecards in current object repository | generate a new asset id useful for storing modified configuration | Sal |
integer handler=osReadNotecardKey(string notecard, string key) | allows reading notecards (through dataserver) in format key=value in convenient and efficient way | ... | Sal |
osWriteNotecardKey(string notecard, string key,string value) | allows WRITING notecards in format key=value in convenient and efficient way. Might be optimized having a fixed record length "file" so to avoid rewriting of the entire notecard | ... | Sal |
integer handle=osXMLParser(string xml) | will activate a listener xmlparser(integer handler,string parent, string field, string value) | to easily parse xml without writing php external code | Sal |
integer osReturnObjects(key owner, integer type); | Provide a scriptable method of returning objects from a sim. type would be OBJECT_SCRIPTED, OBJECT_PASSIVE or OBJECT_ALL. Would return a binary Success/Fail, and work inline with land permissions for the script owner. | osReturnObjects( target, OBJECT_ALL); | Del M |
integer osReturnItem(key item); | Provide a scriptable method of returning individual objects from a sim. Would return a binary Success/Fail, and work inline with land permissions for the script owner. | osReturnItem(uuid); | Del M |
osSetTimerEvent(integer timer, float rate); (event) timer(integer timer_num) |
Support for multiple timers in a script. | osSetTimerEvent(2, 0.5); | Del M |
osTimerOnce(integer timer, float rate); | Allow for a one shot timer event, rather than the normal repeating heartbeat type | osTimerOnce(2, 10); | Del M |
integer osVerifyScripts(); | Check to see if all scripts in an object are created by the owner of the script calling the function. Return TRUE if they are, FALSE otherwise, to prevent insertion of alien scripts into an object | if (!osVerifyScripts()) { llDie(); } | Del M |
void osStopOtherAnimations(list animation_exceptions); | Provide a method of stopping all animations on an avatar, except those defined in the list | osStopOtherAnimations(["my_sitting_anim"]); | Del M |
void osPutScriptInLinkedSet(string name,integer linknum, integer starting_parm, integer running) | Use this to propagate one script to ALL or part of linked set. | Useful to have all objects in a linked set sharing a common behaviour | Sal |
osRezObject(string name, string description, integer permissionmask, list setPrimitiveObjectLikeList) will trigger the object_rez object as usual | similar to llRezObject, but without the need of having a prim inside the inventory (which produced a lot of problems in deploying and in sl). Newly created object will have the same owner of current object where script is running. | In case list is empty or position not specified, suitable defaults should apply like pos being 1 m higher in the z axis | Sal |
string osGetOwnerName(); | Provide a method of getting the owner name without having to use llKey2Name | myName = osGetOwnerName(); | Del M |
integer osXMPPOpen(string server, string username, string password, string resource); | Open an XMPP session to a jabber or other XMPP server, returning a handle to be able to manipulate the connection. Incoming messages to be parsed through a xmpp_message(integer handle, string sender, string service, string message) event. Accounts would have to be set up manually by the scripter, or by some other method, to prevent scripted spamming of a server, and to allow users to set up gateways and other services if needed. | handle = osXMPPOpen("jabber.org", "MyObject", "MyPassword", "OpenSim"); | Del M |
list osXMPPGetRosta(integer handle); | Get the rosta from the XMPP server, list in the strided form of [username, presence, resource]; | list presence = osXMPPGetRosta(handle); | Del M |
list osXMPPGetServices(integer handle); | Get a list of available services from the XMPP Server. | list services = osXMPPGetServices(handle); | Del M |
integer osXMPPAdd(string username, string service) | Add a username to the account rosta. Return boolean success or fail | if (osXMPPAdd("Test User", "Yahoo")) { ... } | Del M |
integer oxXMPPDelete(string username) | Remove a username from the account rosta. Return boolean success or fail | if (osXMPPDelete("Test User")) { ... } | Del M |
integer osXMPPGetStatus(string username); | Poll the server for the status of a specific username on the rosta - returns would be OFFLINE, BUSY, AWAY and ONLINE | if (osXMPPGetStatus("Test User") & ONLINE) { ... } | Del M |
integer osXMPPSendMessage(integer handle, string message, string target); | Send a message via the open XMPP channel, to the specified target. Return boolean success values | if (osXMPPSendMessage(handle, "Hello World", osGetOwnerName()) { llOwnerSay("Successfully sent message"); | Del M |
void osXMPPClose(integer handle); | Close the XMPP session | osXMPPClose(); | Del M |
void osRezObjectKey(key object,vector pos,vector vel,rotation rot, int param); | Basically llGodLikeRezObject[1] with the features of llRezObject[2] but for everyone to use. Calls object_rez. | osRezObjectKey(object_key,llGetPos(),ZERO_VECTOR,llGetRot(),0); | Tdub |
osRezFromURL(string url, vector pos, vector vel, rotation rot, integer param) - calls on_rez | Fetch a fragment of xml from a web server and rez its contents in-world as in 'load-xml'. Off or intergrid object repositories, such as objects stored in SVN via websvn, CMS, etc. | osRezFromURL("http://my.objectstore.com/myawesomeprims.xml", <1, 1, 1>, <0, 0, 0>, <0, 0, 0>, 0) | Jimbo2120 |
list osRunCustom(string function, list params) | Allow scripts to call external custom routines that are grid-specific without modifying the set of LSL and OSL functions. | list results = osRunCustom("function1", [...]) | Ezekiel |
osSetScriptServer() | Create a 'Server' prim that allows for extended scripting capabilities: more memory, higher bandwidth when communicating with external servers, probably some database connectivity, no artificial delays, can receive IMs, etc. Could be limited to one server per prim / parcel or per avatar, could be forced to remain in a fixed position. A server is important for residents that want to set up a virtual business. | osSetScriptServer() | Ezekiel |
integer osRemoteLoadScript(string url, string target) | Load a source file in txt format from "URL" and compile it into script "target" in the inventory of the same prim. Requires permission of the object owner (RequestPermission). Returns boolean success value. Replaces an existing script with same name. This function would allow updates to scripted solutions that operate in any grid and sim worldwide, allowing the creator of the solution to distribute code fixes and implement new functions. Since the source code is distributed openly, it can be copied and modified by anyone. A function that would allow for secure code distribution, protecting copyrights and certificates, would also be very interesting but should be far more difficult to implement. | integer updatestatus = osRemoteLoadScript("http://www.xyz.com/updates/script1013.txt", "betterscript" ) | Ezekiel |
integer osSetCustomPrimitiveAttributes(list params) | Set some custom persistent primitive attributes, the same way as llSetPrimitiveParams do. The attribute name has to be specified as a string, then the attribute type using a lSL constant. In the example, we set a "magnet" custom attribute as -0.5, supposing a customized physic engine handles this attribute to provide prim attraction. | integer osSetCustomPrimitiveAttributes(["magnet", TYPE_FLOAT, -0.5]) | Grumly |
list osGetCustomPrimitiveAttributes(list paramNames) | Return a list values of the specified attributes names, the same way as llGetPrimitiveParams do. | list osGetCustomPrimitiveAttributes(["Magnetic"]) | Grumly
|
integer osSyncUUID(key oldUUID, key newUUID); | Allows to change the UUID of an avatar or item(requires permission from owner). | Suppose a terminal in the LL-grid wants to communicate with an OS-Grid terminal. It can only send messages, if the UUID's of avatars match. An OS-Grid script can get the avatar's LL-UUID by calling the dataserver script. Then it calls osSyncUUID(llDetectedKey(0), keyFromHTTPRequest); . Now the two keys are equal, and avatar-avatar communication between grids can take place! | Phrearch |