37
FlashLamp/Object/Flash.lsl
Normal file
37
FlashLamp/Object/Flash.lsl
Normal file
@@ -0,0 +1,37 @@
|
||||
|
||||
integer root = 0 ; // change to the number of a prim that you want to flash
|
||||
float timeval = 0.1; //the interval between events, smaller = faster
|
||||
integer counter = 0;
|
||||
|
||||
On() {
|
||||
llSetLinkPrimitiveParamsFast(root,[PRIM_POINT_LIGHT, TRUE, <1,1,1>, 1.0, 10, .1, PRIM_FULLBRIGHT, ALL_SIDES,TRUE, PRIM_GLOW, ALL_SIDES, 1.0]);
|
||||
}
|
||||
Off() {
|
||||
llSetLinkPrimitiveParamsFast(root,[PRIM_POINT_LIGHT, FALSE, <1,1,1>, 1.0, 10, .1, PRIM_FULLBRIGHT, ALL_SIDES,FALSE, PRIM_GLOW, ALL_SIDES, 0.0]);
|
||||
}
|
||||
default
|
||||
{
|
||||
state_entry()
|
||||
{
|
||||
Off();
|
||||
}
|
||||
touch_start(integer total_number)
|
||||
{
|
||||
llSetTimerEvent(timeval); // between events
|
||||
}
|
||||
timer()
|
||||
{
|
||||
if (counter == 0)
|
||||
On();
|
||||
else if (counter == 1)
|
||||
Off();
|
||||
else if (counter == 2)
|
||||
On();
|
||||
else if (counter >= 3) {
|
||||
Off();
|
||||
counter = -1;
|
||||
llSetTimerEvent(0);
|
||||
}
|
||||
counter++;
|
||||
}
|
||||
}
|
||||
1
GameOfFireAndIce
Submodule
1
GameOfFireAndIce
Submodule
Submodule GameOfFireAndIce added at d446b50561
3
HG Teleporter/HG Teleporter.sol
Normal file
3
HG Teleporter/HG Teleporter.sol
Normal file
@@ -0,0 +1,3 @@
|
||||
<Solution name="HG Teleporter">
|
||||
<Project name="HG Teleporter" path="HG Teleporter\HG Teleporter.prj" active="true"/>
|
||||
</Solution>
|
||||
8
HG Teleporter/HG Teleporter/HG Teleporter.prj
Normal file
8
HG Teleporter/HG Teleporter/HG Teleporter.prj
Normal file
@@ -0,0 +1,8 @@
|
||||
<Project name="HG Teleporter" guid="51805803-890c-4338-89ee-33df6ab6756f">
|
||||
<Object name="Object" guid="93af6471-e139-4d3d-8546-7822d412954f" active="true">
|
||||
<Notecard name="Destinations" guid="98d91026-d7ee-4380-8381-b09382c404a5">
|
||||
</Notecard>
|
||||
<Script name="Script.lsl" guid="3b8f2075-0fb7-4c26-840d-0979021e98c8">
|
||||
</Script>
|
||||
</Object>
|
||||
</Project>
|
||||
29
HG Teleporter/HG Teleporter/Object/Destinations
Normal file
29
HG Teleporter/HG Teleporter/Object/Destinations
Normal file
@@ -0,0 +1,29 @@
|
||||
|
||||
// Example notecard
|
||||
|
||||
// Enter each destination in the form :
|
||||
// grid | region | x,y (global location) | url | x,y,z (optional landing point)
|
||||
|
||||
// The optional landing point is useful in the case of sims that not been designed
|
||||
// for direct teleport, when your avatar lands underwater or in a closed room.
|
||||
Raels World|The High castle|2359,1466|||
|
||||
Raels World|Tomb raider Temple| 2409,1516|||
|
||||
Raels World|Sleepless City| 2399,1506|||
|
||||
Raels World|Raels World| 2339,1446 |||
|
||||
Raels World|Raels habitat| 2349,1456|||
|
||||
Raels World|Raels Freebee mall|2389,1496|||
|
||||
Raels World|Raels flight test ground|2379,1486|||
|
||||
Raels World|Raels club|2419,1526|||
|
||||
Raels World|Doomed city|2369,1476|||martin
|
||||
|
||||
|
||||
// Example notecard
|
||||
|
||||
// Enter each destination in the form :
|
||||
// grid | region | x,y (global location) | url | x,y,z (optional landing point)
|
||||
|
||||
// The optional landing point is useful in the case of sims that not been designed
|
||||
// for direct teleport, when your avatar lands underwater or in a closed room.
|
||||
|
||||
|
||||
Raels World | The High castle | 2359,1466 || 92.232.227.241|
|
||||
480
HG Teleporter/HG Teleporter/Object/Script.lsl
Normal file
480
HG Teleporter/HG Teleporter/Object/Script.lsl
Normal file
@@ -0,0 +1,480 @@
|
||||
|
||||
|
||||
//LSL-Editor ONLY code - delete this to actually work in-Openim
|
||||
|
||||
osMessageObject(key id, string str) {}
|
||||
osSetDynamicTextureData( string dynamicID, string contentType, string data, string extraParams, integer timer) {}
|
||||
string osSetPenColor(string drawList, string color) { return "";}
|
||||
string osMovePen(string drawList, integer x, integer y) { return "";}
|
||||
string osDrawRectangle(string drawList, integer width, integer height) { return "";}
|
||||
string osDrawFilledRectangle(string drawList, integer width, integer height) {return "";}
|
||||
string osDrawText(string drawList, string texts) {return "";}
|
||||
string osSetPenSize(string drawList, integer penSize) {return "";}
|
||||
string osSetFontSize(string drawList, integer fontSize) {return "";}
|
||||
osTeleportAgent(key agent, string regionName, vector position, vector lookat) {}
|
||||
|
||||
|
||||
|
||||
// (c) The owner of Avatar Jeff Kelley, 2010
|
||||
//
|
||||
// This script is licensed under Creative Commons BY-NC-SA
|
||||
// See <http://creativecommons.org/licenses/by-nc-sa/3.0/>
|
||||
//
|
||||
// You may not use this work for commercial purposes.
|
||||
// You must attribute the work to the author, Jeff Kelley.
|
||||
// You may distribute, alter, transform, or build upon this work
|
||||
// as long as you do not delete the name of the original author.
|
||||
//
|
||||
// *** UPDATED ***
|
||||
// Fix to allow the boards to work under Opensim 0.8.1 official release and later
|
||||
// by Aine Caoimhe March 2015
|
||||
// - removed 4096-region distance check as distance is no longer limitted as of 0.8.0.x
|
||||
// - fixed: change to TP code handling requires that grid url and port be stripped from local tp
|
||||
// To use this fix you must add your own local grid's url and port here (example "refugegrid.com:8002")
|
||||
string localGrid="world.narasnook.com:8900";
|
||||
|
||||
integer DEBUG_ON = FALSE;
|
||||
DEBUG(string message) {if (DEBUG_ON) llOwnerSay(message);}
|
||||
|
||||
|
||||
///////////////////////////////////////////////////////////////////
|
||||
// Part 1 : Datasource
|
||||
///////////////////////////////////////////////////////////////////
|
||||
|
||||
// The goal of the datasource is to read a file in script's memory
|
||||
// At the moment, we support three datasources:
|
||||
//
|
||||
// http:// A web file
|
||||
// card://cardname A notecard in the objects's inventory
|
||||
// card://uuid/cardname A notecard from the LSL server 'uuid'
|
||||
// (requires a server script, not included)
|
||||
//
|
||||
// Edit the 'datasource' string to fit your need
|
||||
//
|
||||
//string datasource = "card://Destinations";
|
||||
//string datasource = "card://e511d6c0-7588-4157-a684-8ca5f685a077/Destinations";
|
||||
//string datasource = "http://my_web_server/path_to_file/Destinations";
|
||||
|
||||
string datasource = "card://Destinations";
|
||||
|
||||
string datasorceData; // The content of the datasource
|
||||
|
||||
readFile(string source) {
|
||||
list parse = llParseString2List (source, ["/"],[]);
|
||||
string s0 = llList2String (parse, 0);
|
||||
string s1 = llList2String (parse, 1);
|
||||
string s2 = llList2String (parse, 2);
|
||||
|
||||
// Web server: fall through http_response event
|
||||
|
||||
if (s0 == "http:") sendHTTPRequest (source);
|
||||
|
||||
// LSL server : fall through dataserver event
|
||||
// If no UUID : fall through dataserver event
|
||||
|
||||
if (s0 == "card:")
|
||||
if (isUUID(s1)) osMessageObject ((key)s1, "READ "+s2);
|
||||
else readNotecard (s1);
|
||||
}
|
||||
|
||||
integer isUUID (string s) {
|
||||
list parse = llParseString2List (s, ["-"],[]);
|
||||
return ((llStringLength (llList2String (parse, 0)) == 8)
|
||||
&& (llStringLength (llList2String (parse, 1)) == 4)
|
||||
&& (llStringLength (llList2String (parse, 2)) == 4)
|
||||
&& (llStringLength (llList2String (parse, 3)) == 4)
|
||||
&& (llStringLength (llList2String (parse, 4)) == 12));
|
||||
}
|
||||
|
||||
///////////////////
|
||||
// Notecard reader
|
||||
///////////////////
|
||||
|
||||
// Since osGetNotecard has Threat Level = VeryHigh
|
||||
// we stick to the old, slow, clumsy notecard reader
|
||||
|
||||
string ncName; // Name of the notecard to be read
|
||||
key ncQueryID; // id of dataserver queries
|
||||
integer ncLine; // Current line being read
|
||||
|
||||
readNotecard (string name) {
|
||||
ncName = name;
|
||||
ncLine = 0;
|
||||
ncQueryID = llGetNotecardLine(ncName, ncLine++); // request first line
|
||||
}
|
||||
|
||||
addtoNotecard (string data) {
|
||||
datasorceData += data+"\n";
|
||||
ncQueryID = llGetNotecardLine(ncName, ncLine++); // Request next line
|
||||
}
|
||||
|
||||
///////////////////
|
||||
// Http stuff
|
||||
///////////////////
|
||||
|
||||
key httpQueryId;
|
||||
|
||||
sendHTTPRequest (string url) {
|
||||
httpQueryId = llHTTPRequest(url,
|
||||
[ HTTP_METHOD, "GET", HTTP_MIMETYPE,"text/plain;charset=utf-8" ], "");
|
||||
}
|
||||
|
||||
string URI2hostport (string uri) {
|
||||
list parse = llParseString2List (uri, [":"], []);
|
||||
return llList2String (parse, 0)
|
||||
+":" + llList2String (parse, 1);
|
||||
}
|
||||
|
||||
|
||||
///////////////////////////////////////////////////////////////////
|
||||
// Part 2 : Parsing & accessors
|
||||
///////////////////////////////////////////////////////////////////
|
||||
|
||||
list destinations; // Strided list for destinations
|
||||
|
||||
integer NAME_IDX = 0; // Index of region name in list
|
||||
integer COOR_IDX = 1; // Index of grid coordinates in list
|
||||
integer HURL_IDX = 2; // Index of hypergrid url in list
|
||||
integer HGOK_IDX = 3; // Index of validity flag in list
|
||||
integer LAND_IDX = 4; // Index of landing point in list
|
||||
integer N_FIELDS = 5; // Total number of fields
|
||||
|
||||
parseFile (string data) {
|
||||
list lines = llParseString2List (data,["\n"],[]);
|
||||
integer nl = llGetListLength (lines);
|
||||
integer i; for (i=0;i<nl;i++)
|
||||
parseLine (llList2String(lines,i));
|
||||
}
|
||||
|
||||
parseLine (string line) {
|
||||
if (line == "") return; // Ignore empty lines
|
||||
|
||||
if (llGetSubString (line,0,1) == "//") { // Is this a comment?
|
||||
llOwnerSay ("(Comment) "+line);
|
||||
return;
|
||||
}
|
||||
|
||||
list parse = llParseStringKeepNulls (line, ["|"],[]);
|
||||
string grid = llList2String (parse, 0); // Grid name
|
||||
string name = llList2String (parse, 1); // Region name
|
||||
string gloc = llList2String (parse, 2); // Coordinates
|
||||
string hurl = llList2String (parse, 3); // HG url
|
||||
string coor = llList2String (parse, 4); // Landing
|
||||
|
||||
// Parse and check grid location
|
||||
// *** CHANGED by Aine Caoimhe: removed distance check because 0.8.0 and later no longer have distance limit
|
||||
// parse = llParseString2List (gloc, [","],[]);
|
||||
// integer xloc = llList2Integer (parse, 0); // X grid location
|
||||
// integer yloc = llList2Integer (parse, 1); // Y grid location
|
||||
|
||||
// vector hisLoc = <xloc, yloc, 0>;
|
||||
// vector ourLoc = llGetRegionCorner()/256;
|
||||
// integer ok =( llAbs(llFloor(hisLoc.x - ourLoc.x)) < 4096 )
|
||||
// && ( llAbs(llFloor(hisLoc.y - ourLoc.y)) < 4096 )
|
||||
// && ( hisLoc != ourLoc);
|
||||
integer ok=TRUE;
|
||||
// *** END CHANGE
|
||||
|
||||
// Parse and check landing point
|
||||
|
||||
parse = llParseString2List (coor, [","],[]);
|
||||
integer xland = llList2Integer (parse, 0); // X landing point
|
||||
integer yland = llList2Integer (parse, 1); // Y landing point
|
||||
integer zland = llList2Integer (parse, 2); // Z landing point
|
||||
|
||||
vector land = <xland, yland, zland>;
|
||||
if (land == ZERO_VECTOR) land = <128,128,20>;
|
||||
|
||||
// Note: grid and region names merged into one field
|
||||
destinations += [grid+" "+name, gloc, hurl, ok, land];
|
||||
}
|
||||
|
||||
///////////////////
|
||||
// List accessors
|
||||
///////////////////
|
||||
|
||||
string dst_name (integer n) { // Get name for destination n
|
||||
return llList2String (destinations, N_FIELDS*n +NAME_IDX);
|
||||
}
|
||||
|
||||
string dst_coord (integer n) { // Get coords for destination n
|
||||
return llList2String (destinations, N_FIELDS*n +COOR_IDX);
|
||||
}
|
||||
|
||||
vector dst_landp (integer n) { // Get landing point for destination n
|
||||
return llList2Vector (destinations, N_FIELDS*n +LAND_IDX);
|
||||
}
|
||||
|
||||
string dst_hgurl (integer n) { // Get hypergrid url for destination n
|
||||
return llList2String (destinations, N_FIELDS*n +HURL_IDX);
|
||||
}
|
||||
|
||||
integer dst_valid (integer n) { // Get validity flag for destination n
|
||||
return llList2Integer (destinations, N_FIELDS*n +HGOK_IDX);
|
||||
}
|
||||
|
||||
|
||||
////////////////////////////////////////////////////////////
|
||||
// Part 3 : Drawing
|
||||
////////////////////////////////////////////////////////////
|
||||
|
||||
integer TEXTURE_SIZE = 512;
|
||||
integer DISPLAY_SIDE = 4;
|
||||
integer FONT_SIZE = 10; // Depends on TEXTURE_SIZE
|
||||
integer COLUMNS = 2;
|
||||
integer ROWS = 16;
|
||||
|
||||
string validCellColor = "CadetBlue";
|
||||
// string invalCellColor = "IndianRed";
|
||||
string invalCellColor = "CadetBlue";
|
||||
string emptyCellColor = "DarkGray";
|
||||
string cellBorderColor = "White";
|
||||
string backgroundColor = "Gray";
|
||||
|
||||
string drawList;
|
||||
|
||||
displayBegin() {
|
||||
drawList = "";
|
||||
}
|
||||
|
||||
displayEnd() {
|
||||
osSetDynamicTextureData ( "", "vector", drawList,
|
||||
"width:"+(string)TEXTURE_SIZE+",height:"+(string)TEXTURE_SIZE, 0);
|
||||
}
|
||||
|
||||
drawCell (integer x, integer y) {
|
||||
integer CELL_HEIGHT = TEXTURE_SIZE / ROWS;
|
||||
integer CELL_WIDHT = TEXTURE_SIZE / COLUMNS;
|
||||
integer xTopLeft = x*CELL_WIDHT;
|
||||
integer yTopLeft = y*CELL_HEIGHT;
|
||||
|
||||
// Draw grid
|
||||
|
||||
drawList = osSetPenColor (drawList, cellBorderColor);
|
||||
drawList = osMovePen (drawList, xTopLeft, yTopLeft);
|
||||
drawList = osDrawRectangle (drawList, CELL_WIDHT, CELL_HEIGHT);
|
||||
|
||||
integer index = (y+x*ROWS);
|
||||
string cellName = dst_name(index);
|
||||
integer cellValid = dst_valid(index);
|
||||
|
||||
string cellBbackground;
|
||||
if (cellName == "") cellBbackground = emptyCellColor; else
|
||||
if (cellValid) cellBbackground = validCellColor; else
|
||||
cellBbackground = invalCellColor;
|
||||
|
||||
// Fill background
|
||||
|
||||
drawList = osSetPenColor (drawList, cellBbackground);
|
||||
drawList = osMovePen (drawList, xTopLeft+2, yTopLeft+2);
|
||||
drawList = osDrawFilledRectangle (drawList, CELL_WIDHT-3, CELL_HEIGHT-3);
|
||||
|
||||
xTopLeft += 2; // Center text in cell
|
||||
yTopLeft += 6; // Center text in cell
|
||||
drawList = osSetPenColor (drawList, "Black");
|
||||
drawList = osMovePen (drawList, xTopLeft, yTopLeft);
|
||||
drawList = osDrawText (drawList, cellName);
|
||||
}
|
||||
|
||||
drawTable() {
|
||||
displayBegin();
|
||||
|
||||
drawList = osSetPenSize (drawList, 1);
|
||||
drawList = osSetFontSize (drawList, FONT_SIZE);
|
||||
|
||||
drawList = osMovePen (drawList, 0, 0);
|
||||
drawList = osSetPenColor (drawList, backgroundColor);
|
||||
drawList = osDrawFilledRectangle (drawList, TEXTURE_SIZE, TEXTURE_SIZE);
|
||||
|
||||
integer x; integer y;
|
||||
for (x=0; x<COLUMNS; x++)
|
||||
for (y=0; y<ROWS; y++)
|
||||
drawCell (x, y);
|
||||
|
||||
displayEnd();
|
||||
}
|
||||
|
||||
integer getCellClicked(vector point) {
|
||||
integer y = (ROWS-1) - llFloor(point.y*ROWS); // Top to bottom
|
||||
integer x = llFloor(point.x*COLUMNS); // Left to right
|
||||
integer index = (y+x*ROWS);
|
||||
return index;
|
||||
}
|
||||
|
||||
|
||||
///////////////////////////////////////////////////////////////////
|
||||
// Part 4 : Action routnes: when clicked, when http test succeed
|
||||
///////////////////////////////////////////////////////////////////
|
||||
|
||||
string CLICK_SOUND = "clickSound"; // Sound to play when board clicked
|
||||
string TELPT_SOUND = "teleportSound"; // Sound to play when teleported
|
||||
integer JUMP_DELAY = 2; // Time to wait before teleport
|
||||
|
||||
string hippo_url; // URL for http check
|
||||
string telep_url; // For osTeleportAgent
|
||||
key telep_key; // For osTeleportAgent
|
||||
vector telep_land; // For osTeleportAgent
|
||||
|
||||
|
||||
integer action (integer index, key who) {
|
||||
string name = dst_name (index);
|
||||
string gloc = dst_coord (index);
|
||||
vector land = dst_landp (index);
|
||||
string hurl = dst_hgurl (index);
|
||||
integer ok = dst_valid (index);
|
||||
|
||||
if (name == "") return FALSE; // Empty cell
|
||||
// if (!ok) llWhisper (0, "This region is too far ("+gloc+")");
|
||||
// if (!ok) return FALSE; // Incompatible region
|
||||
|
||||
llWhisper (0, "You have selected "+name+", location "+gloc);
|
||||
|
||||
// Préparer les globales avant de sauter
|
||||
|
||||
telep_key = who; // Pass to postaction
|
||||
telep_url = hurl; // Pass to postaction
|
||||
telep_land = land; // Pass to postaction
|
||||
|
||||
hippo_url = "http://"+URI2hostport(hurl); // Pass to http check
|
||||
|
||||
DEBUG ("Region name: " +name +" "+gloc+" (Check="+(string)ok+")");
|
||||
DEBUG ("Landing point: " +(string)land);
|
||||
DEBUG ("Hypergrid Url: " +hurl);
|
||||
DEBUG ("Hippochek url: " +hippo_url);
|
||||
|
||||
llTriggerSound (CLICK_SOUND, 1.0);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
postaction (integer success) {
|
||||
if (success) {
|
||||
llWhisper (0, "Fasten your seat belt, we move!!!");
|
||||
llPlaySound (TELPT_SOUND, 1.0); llSleep (JUMP_DELAY);
|
||||
// CHANGED by Aine Caoimhe: if local grid, strip that from the telep_url before sending
|
||||
if (llSubStringIndex(telep_url,localGrid)==0)
|
||||
{
|
||||
telep_url=llGetSubString(telep_url,llStringLength(localGrid)+1,-1);
|
||||
DEBUG ("This is a local TP so stripped grid portion of URL. New telep_url is: "+telep_url);
|
||||
}
|
||||
osTeleportAgent(telep_key, telep_url, telep_land, ZERO_VECTOR);
|
||||
} else {
|
||||
llWhisper (0, "Sorry, host is not available");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
///////////////////////////////////////////////////////////////////
|
||||
// State 1 : read the data and draw the board
|
||||
///////////////////////////////////////////////////////////////////
|
||||
|
||||
default {
|
||||
|
||||
state_entry() {
|
||||
llOwnerSay ("Reading data from "+datasource);
|
||||
readFile (datasource);
|
||||
}
|
||||
|
||||
// Handler for card:// datasource
|
||||
dataserver(key id, string data) {
|
||||
// Internal card reader
|
||||
if (id == ncQueryID) {
|
||||
if (data != EOF) addtoNotecard (data);
|
||||
else state ready; // File in datasorceData
|
||||
// External card server
|
||||
} else {
|
||||
datasorceData = data;
|
||||
state ready; // File in datasorceData
|
||||
}
|
||||
}
|
||||
|
||||
// Handler fot http:// datasource
|
||||
http_response(key id,integer status, list meta, string body) {
|
||||
if (id != httpQueryId) return;
|
||||
datasorceData = body;
|
||||
state ready; // File in datasorceData
|
||||
}
|
||||
|
||||
state_exit() {
|
||||
llOwnerSay ("Done. Initializing board");
|
||||
parseFile(datasorceData);
|
||||
drawTable();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////
|
||||
// State 2 : running, we pass most of our time here
|
||||
///////////////////////////////////////////////////////////////////
|
||||
|
||||
state ready {
|
||||
|
||||
state_entry() {
|
||||
llWhisper (0, "Ready");
|
||||
}
|
||||
|
||||
touch_start (integer n) {
|
||||
key whoClick = llDetectedKey(0);
|
||||
vector point = llDetectedTouchST(0);
|
||||
integer face = llDetectedTouchFace(0);
|
||||
integer link = llDetectedLinkNumber(0);
|
||||
|
||||
if (link != LINK_ROOT)
|
||||
if (whoClick == llGetOwner()) llResetScript();
|
||||
else return;
|
||||
|
||||
if (point == TOUCH_INVALID_TEXCOORD) return;
|
||||
if (face != DISPLAY_SIDE) return;
|
||||
|
||||
integer ok = action (getCellClicked(point), whoClick);
|
||||
if (!ok) return; // Incompatible grid coordinates
|
||||
|
||||
integer USE_MAP = (llGetObjectDesc() == "usemap");
|
||||
|
||||
// llMapDestination works only in touch events
|
||||
// We must invoke it here, bypassing http check
|
||||
// Return so osTeleportAgent will not be called
|
||||
|
||||
if (USE_MAP) {
|
||||
llMapDestination (telep_url, telep_land, ZERO_VECTOR);
|
||||
return;
|
||||
}
|
||||
|
||||
// Proceed to http check which
|
||||
// will chain to osTeleportAgent
|
||||
|
||||
llWhisper (0, "Checking host. This may take up to 30s, please wait...");
|
||||
state hippos; // Perform HTTP check
|
||||
}
|
||||
|
||||
changed(integer what) {
|
||||
if (what & CHANGED_REGION) llResetScript();
|
||||
if (what & CHANGED_INVENTORY) llResetScript();
|
||||
if (what & CHANGED_REGION_START) llResetScript();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////
|
||||
// State 3 : HTTP host check
|
||||
///////////////////////////////////////////////////////////////////
|
||||
|
||||
state hippos {
|
||||
|
||||
state_entry() {
|
||||
sendHTTPRequest (hippo_url);
|
||||
llSetTimerEvent (60);
|
||||
}
|
||||
|
||||
http_response(key id,integer status, list meta, string body) {
|
||||
if (id == httpQueryId)
|
||||
postaction (status == 200);
|
||||
state ready;
|
||||
}
|
||||
|
||||
timer() {
|
||||
llSetTimerEvent (0);
|
||||
postaction (FALSE);
|
||||
state ready;
|
||||
}
|
||||
|
||||
}
|
||||
3
Lag Meter/Lag Meter.sol
Normal file
3
Lag Meter/Lag Meter.sol
Normal file
@@ -0,0 +1,3 @@
|
||||
<Solution name="Lag Meter">
|
||||
<Project name="Lag Meter" path="Lag Meter\Lag Meter.prj" active="true"/>
|
||||
</Solution>
|
||||
6
Lag Meter/Lag Meter/Lag Meter.prj
Normal file
6
Lag Meter/Lag Meter/Lag Meter.prj
Normal file
@@ -0,0 +1,6 @@
|
||||
<Project name="Lag Meter" guid="c7ac11a4-f71f-4511-b545-c0c4f2f320cf">
|
||||
<Object name="Object" guid="daec7a0d-6e12-4946-abc2-40a5ed6cc649" active="true">
|
||||
<Script name="Open Source Lag meter.lsl" guid="e3463ba7-4c16-4d51-a0fa-9ec3a59e434d">
|
||||
</Script>
|
||||
</Object>
|
||||
</Project>
|
||||
87
Lag Meter/Lag Meter/Object/Open Source Lag meter.lsl
Normal file
87
Lag Meter/Lag Meter/Object/Open Source Lag meter.lsl
Normal file
@@ -0,0 +1,87 @@
|
||||
//:AUTHOR: Chaser.Zaks
|
||||
|
||||
//Link two boxes then put the script inside.
|
||||
|
||||
//By Chaser.Zaks.
|
||||
//Feel free to redistribute and use in projects(even in sold products, just keep it open source).
|
||||
//DO NOT CLOSE SOURCE OR SELL ALONE.
|
||||
|
||||
//Configuration:
|
||||
integer MeasureNonParcelPrims=FALSE;
|
||||
//Variables, these are dynamically set, don't bother with them.
|
||||
string region;
|
||||
string sim;
|
||||
vector color;
|
||||
integer avatars;
|
||||
integer lastrestart;
|
||||
integer days;
|
||||
integer hours;
|
||||
integer minutes;
|
||||
integer seconds;
|
||||
integer lastrestartedcalc;
|
||||
list same_params =[PRIM_SLICE, <0.5, 1.0, 0.0>,PRIM_FULLBRIGHT,ALL_SIDES,TRUE,PRIM_TEXTURE,ALL_SIDES,TEXTURE_BLANK,ZERO_VECTOR,ZERO_VECTOR,0];
|
||||
|
||||
default
|
||||
{
|
||||
state_entry()
|
||||
{
|
||||
|
||||
llSetObjectName("Open Source Lag Meter v3");
|
||||
llSetLinkPrimitiveParams(1,same_params+[PRIM_COLOR,ALL_SIDES,<0,0,0>,.4,PRIM_SIZE,<.5,.5,4>]);
|
||||
llSetLinkPrimitiveParams(2,same_params+[PRIM_COLOR,ALL_SIDES,<0,1,0>,1.,PRIM_SIZE,<.4,.4,3.8>,PRIM_POS_LOCAL,<0,0,.04>]);
|
||||
llSetText("Initalizing...",<1,1,0>, 1.0);
|
||||
//First start, Set some stuff.
|
||||
lastrestart = llGetUnixTime();
|
||||
llSetTimerEvent(0.5); //One second is too much checking. Let's not be a resource hog.
|
||||
}
|
||||
changed(integer change)
|
||||
{
|
||||
if(change & CHANGED_REGION_START)
|
||||
lastrestart = llGetUnixTime();
|
||||
}
|
||||
timer(){
|
||||
region = llGetRegionName();
|
||||
avatars = llGetListLength(llGetAgentList(AGENT_LIST_REGION, []));
|
||||
//Restart time
|
||||
lastrestartedcalc = llGetUnixTime()-lastrestart;
|
||||
days=0;
|
||||
hours=0;
|
||||
minutes=0;
|
||||
seconds=0;
|
||||
do{
|
||||
if(lastrestartedcalc>=86399){
|
||||
days++;
|
||||
lastrestartedcalc=lastrestartedcalc-86399;
|
||||
}else if(lastrestartedcalc>=3599){
|
||||
hours++;
|
||||
lastrestartedcalc=lastrestartedcalc-3599;
|
||||
}else if(lastrestartedcalc>=59){
|
||||
minutes++;
|
||||
lastrestartedcalc=lastrestartedcalc-59;
|
||||
}else{
|
||||
seconds++;
|
||||
lastrestartedcalc--;
|
||||
}
|
||||
}while(lastrestartedcalc>=0);
|
||||
float region_time_dilation=llGetRegionTimeDilation();
|
||||
if(region_time_dilation>=0.75)
|
||||
color=<0,1,0>;
|
||||
else if(region_time_dilation>=0.50)
|
||||
color=<1,1,0>;
|
||||
else
|
||||
color=<1,0,0>;
|
||||
integer primsused=llGetParcelPrimCount(llGetPos(), PARCEL_COUNT_TOTAL, MeasureNonParcelPrims);
|
||||
integer maxprims=llGetParcelMaxPrims(llGetPos(), MeasureNonParcelPrims);
|
||||
llSetText(
|
||||
"Region: "+region+
|
||||
"\nAvatars: "+(string)avatars+
|
||||
"\nPrims left: "+(string)(maxprims-primsused)+" ("+(string)primsused+"/"+(string)maxprims+")"+
|
||||
"\nDilation: "+llGetSubString((string)((1.-region_time_dilation)*100.), 0, 3)+"%"+
|
||||
"\nFPS: "+llGetSubString((string)llGetRegionFPS(), 0, 5)+
|
||||
"\nLast restart:\n"+(string)days+" Days, "+(string)hours+" Hours, "+(string)minutes+" Minutes, and "+(string)seconds+" Seconds ago.",
|
||||
//"\nLast restart:\n"+(string)days+":"+(string)hours+":"+(string)minutes+":"+(string)seconds,
|
||||
color, 1.0);
|
||||
//llSetLinkPrimitiveParamsFast(2,[PRIM_SLICE,<0,(region_time_dilation),0>,PRIM_COLOR,ALL_SIDES,color,1]);
|
||||
llSetLinkPrimitiveParamsFast(2,[PRIM_SLICE, <0.5, 1., 0.0>,PRIM_SIZE,<0.4, 0.4, 3.80*region_time_dilation>,PRIM_COLOR,ALL_SIDES,color,1]);
|
||||
}
|
||||
}
|
||||
3
Move-From-Point-To-Point/Move-From-Point-To-Point.sol
Normal file
3
Move-From-Point-To-Point/Move-From-Point-To-Point.sol
Normal file
@@ -0,0 +1,3 @@
|
||||
<Solution name="Move-From-Point-To-Point">
|
||||
<Project name="Move-From-Point-To-Point" path="Move-From-Point-To-Point\Move-From-Point-To-Point.prj" active="true"/>
|
||||
</Solution>
|
||||
@@ -0,0 +1,6 @@
|
||||
<Project name="Move-From-Point-To-Point" guid="3efa6557-d0b9-4d11-b090-a5f637fbe05d">
|
||||
<Object name="Mover Prim" guid="dba12071-44c7-443b-87d1-32e37d549c9f" active="true">
|
||||
<Script name="Mover Script.lsl" guid="4c2d4f6b-40a9-4648-821f-9c8dac1b8105">
|
||||
</Script>
|
||||
</Object>
|
||||
</Project>
|
||||
@@ -0,0 +1,44 @@
|
||||
//:Author: Unknown
|
||||
//:CATEGORY: Mover
|
||||
|
||||
float delay = 0.1;
|
||||
integer m_STEPS = 64;
|
||||
|
||||
motionTo(vector dest,rotation rot) {
|
||||
integer i;
|
||||
vector currentpos = llGetPos();
|
||||
vector step = (dest - currentpos) / m_STEPS;
|
||||
|
||||
for (i = 1;i <= m_STEPS; i++)
|
||||
{
|
||||
if (i == (m_STEPS / 2))
|
||||
{
|
||||
llSetRot(rot);
|
||||
}
|
||||
llSetPos(currentpos + (step * i));
|
||||
|
||||
}
|
||||
llSensor("Track",NULL_KEY,ACTIVE | PASSIVE,10,PI/4);
|
||||
}
|
||||
|
||||
default {
|
||||
state_entry() {
|
||||
llSensor("Track",NULL_KEY,ACTIVE | PASSIVE,10,PI/4);
|
||||
}
|
||||
changed(integer what) {
|
||||
if (what & CHANGED_REGION_START){
|
||||
llResetScript();
|
||||
}
|
||||
}
|
||||
sensor(integer n) {
|
||||
motionTo(llDetectedPos(0) +(llRot2Fwd(m_NEXTROT) / 10),llDetectedRot(0));
|
||||
}
|
||||
no_sensor()
|
||||
{
|
||||
llSetTimerEvent(10);
|
||||
}
|
||||
timer() {
|
||||
llSensor("Track",NULL_KEY,ACTIVE | PASSIVE,10,PI/4);
|
||||
llSetTimerEvent(0);
|
||||
}
|
||||
}
|
||||
3
Opensim VIsitors List/Opensim VIsitors List.sol
Normal file
3
Opensim VIsitors List/Opensim VIsitors List.sol
Normal file
@@ -0,0 +1,3 @@
|
||||
<Solution name="Opensim VIsitors List">
|
||||
<Project name="Opensim VIsitors List" path="Opensim VIsitors List\Opensim VIsitors List.prj" active="true"/>
|
||||
</Solution>
|
||||
117
Opensim VIsitors List/Opensim VIsitors List/Object/Script.lsl
Normal file
117
Opensim VIsitors List/Opensim VIsitors List/Object/Script.lsl
Normal file
@@ -0,0 +1,117 @@
|
||||
|
||||
list gDetected = [];
|
||||
list gVisitors = [];
|
||||
string gTime = "";
|
||||
|
||||
|
||||
display()
|
||||
{
|
||||
string body = "width:512,height:512,aplha:FALSE,bgcolour:black";
|
||||
string draw = "";
|
||||
string log = "";//~ visitatori ~";
|
||||
string ad0 = " * Welcome to My World * \n";
|
||||
string ad1 = "";
|
||||
string ad2 = "";
|
||||
|
||||
integer visitors = llGetListLength(gVisitors) / 3;
|
||||
|
||||
while(visitors--)
|
||||
{
|
||||
log = log + "\n"
|
||||
+ llList2String(gVisitors, visitors * 3 + 2) + " - "
|
||||
+ llList2String(gVisitors, visitors * 3 + 1) + " - "
|
||||
+ llList2String(gVisitors, visitors * 3);
|
||||
}
|
||||
|
||||
draw = osSetFontSize(draw, 12);
|
||||
draw = osMovePen(draw, 16, 16);
|
||||
draw = osSetPenColor(draw, "white");
|
||||
draw = osDrawText(draw, ad2 + "\n" + ad0 + "\n"+ ad1 + "\n" + log);
|
||||
|
||||
osSetDynamicTextureDataBlendFace("", "vector", draw, body, FALSE, 2, 0, FALSE, 4);
|
||||
}
|
||||
|
||||
string time()
|
||||
{ //0123 4 56 7 89 0 12 3 45
|
||||
//YYYY - MM - DD T hh : mm:ss.ff..fZ
|
||||
string now = llGetTimestamp();
|
||||
return llGetSubString(now,0,9) + " " +
|
||||
llGetSubString(now,11,15);
|
||||
}
|
||||
|
||||
string duration(string timeIn, string timeOut)
|
||||
{
|
||||
integer came = ((integer)llGetSubString(timeIn,11,12) * 60) + (integer)llGetSubString(timeIn,14,15);
|
||||
integer went = ((integer)llGetSubString(timeOut,11,12) * 60) + (integer)llGetSubString(timeOut,14,15);
|
||||
|
||||
if (came == went) if(llGetSubString(timeIn,8,9) != llGetSubString(timeOut,8,9)) went = went + 1440;
|
||||
|
||||
if (came > went) went = went + 1440;
|
||||
went = went - came;
|
||||
|
||||
return llGetSubString("00" + (string)((went - (went % 60)) / 60), -2, -1) + ":" +
|
||||
llGetSubString("00" + (string)(went % 60), -2, -1);
|
||||
}
|
||||
|
||||
detectVisitorInOut(list avatars)
|
||||
{
|
||||
integer avatar = llGetListLength(avatars);
|
||||
string name = "";
|
||||
|
||||
while(avatar--)
|
||||
{
|
||||
name = llList2String(avatars, avatar);
|
||||
if (llSubStringIndex((string)gDetected, name) == -1) gVisitors = gVisitors + [name, "00:00", gTime];
|
||||
|
||||
if (llGetListLength(gVisitors) >= 63) gVisitors = llDeleteSubList(gVisitors, 0, 2);
|
||||
}
|
||||
|
||||
avatar = llGetListLength(gDetected);
|
||||
name = "";
|
||||
|
||||
while(avatar--)
|
||||
{
|
||||
name = llList2String(gDetected, avatar);
|
||||
if (llSubStringIndex((string)avatars, name) == -1)
|
||||
{
|
||||
integer position = llListFindList(gVisitors, [name, "00:00"]) + 1;
|
||||
string time = duration(llList2String(gVisitors, position + 1), gTime);
|
||||
gVisitors = llListReplaceList(gVisitors, [time], position, position);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
visitorOut()
|
||||
{
|
||||
integer avatar = llGetListLength(gDetected);
|
||||
string name = "";
|
||||
|
||||
while(avatar--)
|
||||
{
|
||||
name = llList2String(gDetected, avatar);
|
||||
integer position = llListFindList(gVisitors, [name, "00:00"]) + 1;
|
||||
string time = duration(llList2String(gVisitors, position + 1), gTime);
|
||||
gVisitors = llListReplaceList(gVisitors, [time], position, position);
|
||||
}
|
||||
}
|
||||
|
||||
default
|
||||
{
|
||||
state_entry() { llSetTimerEvent(10.0); }
|
||||
|
||||
timer()
|
||||
{
|
||||
list avatarList = osGetAgents();
|
||||
|
||||
if ((string)avatarList != (string)gDetected)
|
||||
{
|
||||
gTime = time();
|
||||
|
||||
if (avatarList != []) detectVisitorInOut(avatarList);
|
||||
else visitorOut();
|
||||
|
||||
gDetected = avatarList;
|
||||
display();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,6 @@
|
||||
<Project name="Opensim VIsitors List" guid="cb98e94a-a5b5-4304-9783-8df59fb9db39">
|
||||
<Object name="Object" guid="888e5254-391b-4ca7-a4b9-30351f7cba3a" active="true">
|
||||
<Script name="Script.lsl" guid="9461f733-27d0-4a7c-befa-446866c014f0">
|
||||
</Script>
|
||||
</Object>
|
||||
</Project>
|
||||
3
Trash Collector NPC/Trash Collector NPC.sol
Normal file
3
Trash Collector NPC/Trash Collector NPC.sol
Normal file
@@ -0,0 +1,3 @@
|
||||
<Solution name="Trash Collector NPC">
|
||||
<Project name="Trash Collector NPC" path="Trash Collector NPC\Trash Collector NPC.prj" active="true"/>
|
||||
</Solution>
|
||||
@@ -0,0 +1,180 @@
|
||||
//:AUTHOR:Unknown
|
||||
//:Name:Trash Collector NPC script
|
||||
|
||||
// comment out for runtime, for LSLEditor use
|
||||
integer OS_NPC_NO_FLY = 1;
|
||||
|
||||
float WAIT = 10;
|
||||
float range = 15;
|
||||
vector start_location = <355.80, 326.80, 44>;
|
||||
|
||||
// define a box in front of the NPC size 'range'
|
||||
vector top;
|
||||
vector right;
|
||||
vector left;
|
||||
|
||||
list positions;
|
||||
integer destination;
|
||||
key NPCKey; // storage for NPC Key
|
||||
|
||||
float iWaitCounter;
|
||||
vector newDest;
|
||||
integer checkAV;
|
||||
|
||||
integer debug = TRUE;
|
||||
|
||||
DEBUG(string str)
|
||||
{
|
||||
if (debug) llSay(0,str);
|
||||
}
|
||||
|
||||
string pickup="pick up from ground animation";
|
||||
|
||||
TimerEvent(float timesent)
|
||||
{
|
||||
DEBUG("Setting timer: " + (string) timesent);
|
||||
llSetTimerEvent(timesent);
|
||||
}
|
||||
create_path(vector start,vector goal)
|
||||
{
|
||||
vector pos = llGetPos();
|
||||
integer direct;
|
||||
list results = llCastRay(start, goal, [ RC_MAX_HITS, 1] );
|
||||
direct=llList2Integer(results, -1);
|
||||
if (!direct)
|
||||
{
|
||||
positions = [start, goal];
|
||||
return;
|
||||
}
|
||||
if (pos.y < goal.y)
|
||||
positions= [start,top, goal];
|
||||
else if (goal.x < pos.x)
|
||||
positions= [start,top,left,goal];
|
||||
else if (goal.x > pos.x)
|
||||
positions= [start,top,right,goal];
|
||||
return;
|
||||
}
|
||||
|
||||
send_path(integer homewardbound, list path)
|
||||
{
|
||||
integer length=llGetListLength(path);
|
||||
|
||||
if(destination < length && destination >= -length)
|
||||
{
|
||||
DEBUG((string) destination);
|
||||
newDest = llList2Vector(path,destination);
|
||||
iWaitCounter = WAIT; // wait to get to a destination.
|
||||
osNpcMoveToTarget(NPCKey, newDest, OS_NPC_NO_FLY );
|
||||
TimerEvent(1);
|
||||
return;
|
||||
} else if (destination == length) {
|
||||
osNpcPlayAnimation(NPCKey,pickup);
|
||||
TimerEvent(3.0);
|
||||
} else if (destination <= -length) {
|
||||
osNpcRemove(NPCKey);
|
||||
TimerEvent(480);
|
||||
checkAV=TRUE;
|
||||
return;
|
||||
}
|
||||
|
||||
destination= -1;
|
||||
TimerEvent(1);
|
||||
iWaitCounter = WAIT;
|
||||
DEBUG((string)destination);
|
||||
|
||||
}
|
||||
|
||||
init()
|
||||
{
|
||||
vector pos = llGetPos();
|
||||
top = pos + <0,range,0>;
|
||||
right = pos + <range,0,0>;
|
||||
left = pos - <range,0,0>;
|
||||
destination=0;
|
||||
TimerEvent(480); // 8 minutes !!!
|
||||
checkAV=FALSE;
|
||||
destination=0;
|
||||
create_path(start_location,randompos());
|
||||
DEBUG((string)positions);
|
||||
NPCKey=osNpcCreate("Trash", "Bot", start_location, "Trash Bot");
|
||||
send_path(TRUE, positions);
|
||||
}
|
||||
|
||||
vector randompos()
|
||||
{
|
||||
vector pos= llGetPos();
|
||||
if(llFrand(1)<0.5)
|
||||
{
|
||||
float randx= 18*((llRound(llFrand(1))*2)-1);
|
||||
//llOwnerSay((string)randx);
|
||||
float randy=18*((llRound(llFrand(1))*2)-1);
|
||||
//llOwnerSay((string)randy);
|
||||
return pos+<randx+(3-llFrand(5)),randy+(3-llFrand(5)),0>;
|
||||
}
|
||||
else
|
||||
{
|
||||
return pos+<llFrand(18)-9,-llFrand(30)-7,0>;
|
||||
}
|
||||
}
|
||||
check_agents()
|
||||
{
|
||||
integer nNew = 0;
|
||||
list avis = llGetAgentList(AGENT_LIST_REGION, []);
|
||||
integer howmany = llGetListLength(avis);
|
||||
integer i;
|
||||
for ( i = 0; i < howmany; i++ ) {
|
||||
if ( ! osIsNpc(llList2Key(avis, i)) )
|
||||
nNew++; // only non-NPC's
|
||||
}
|
||||
if (nNew>0)
|
||||
{
|
||||
checkAV=FALSE;
|
||||
destination=0;
|
||||
create_path(start_location,randompos());
|
||||
DEBUG((string)positions);
|
||||
NPCKey=osNpcCreate("Trash", "Bot", start_location, "Trash Bot");
|
||||
send_path(TRUE, positions);
|
||||
|
||||
}
|
||||
}
|
||||
default
|
||||
{
|
||||
state_entry()
|
||||
{
|
||||
init();
|
||||
}
|
||||
touch_start(integer total_number)
|
||||
{
|
||||
checkAV=FALSE;
|
||||
destination=0;
|
||||
create_path(start_location,randompos());
|
||||
//llOwnerSay((string)positions);
|
||||
NPCKey=osNpcCreate("Trash", "Bot", start_location, "Trash Bot");
|
||||
send_path(TRUE, positions);
|
||||
}
|
||||
timer() {
|
||||
if (checkAV)
|
||||
{
|
||||
check_agents();
|
||||
}
|
||||
if (--iWaitCounter) {
|
||||
|
||||
vector tDest = newDest;
|
||||
tDest.z = 0;
|
||||
vector hisDest = osNpcGetPos(NPCKey);
|
||||
hisDest.z = 0;
|
||||
|
||||
if (llVecDist(hisDest, newDest) > 1) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
//llSetTimerEvent(0);
|
||||
if (destination >= 0)
|
||||
destination++;
|
||||
else
|
||||
destination--;
|
||||
|
||||
send_path(TRUE, positions);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,6 @@
|
||||
<Project name="Trash Collector NPC" guid="c07664f4-2d12-4d4c-8286-b65ed8ad0281">
|
||||
<Object name="NPC Box" guid="5575be97-3a9a-4d40-acc9-54a5d0ce25d5" active="true">
|
||||
<Script name="Trash Collector script.lsl" guid="29d71b36-8986-4fd2-aa62-672584ff4fd1">
|
||||
</Script>
|
||||
</Object>
|
||||
</Project>
|
||||
Reference in New Issue
Block a user