Monday, December 13, 2010

Server requirements for Opensim - an email from Will to Nick, Monash IT

OpenSim is alpha (or pre-alpha depending on who you ask) software, so reliability and performance is not particularly easy to achieve. Getting it to perform well means getting better hardware than is generally required for other server applications.

The core of OpenSim is a MySQL database, which can get quite large. This means that the server needs to have plenty of RAM and fast disks in order to keep the queries running quickly. Of course, the larger the database becomes as more objects are created, and textures uploaded, the MySQL server will chew through more and more RAM, so it is important to have an excess from the very start.

OpenSim is also a physics simulator, and runs scripts that perform certain actions inside the world. This is done with the CPU, and in quite a highly threaded fashion. Given the option, it may be wiser to choose a CPU (or CPUs) that have more processing threads over the clock speed.

Having said all of this, the RAM and disks are the most important, as the MySQL database is essentially what drives the server. CPU power is also important to have so that the whole thing doesn't die when physics are being simulated.

I am of the understanding that the server might also be used for other purposes, your budget is about $4000-$5000, and your regular server is the R710. So:

CPU:
It appears that the R710 comes with 2 processors (I'm not too sure), so I would say that 2 Quad Core Xeons would suffice. The clock speed should probably be more than 2.2ghz or so.

Operating System:
I forgot to mention this before, but OpenSim is written in C# (.NET) so it can run on both Windows and Linux. .NET is native to Windows of course, so there is added reliability and stability there. We used to run OpenSim on Linux, and it often had problems. I would advise running Windows.

RAM:
As I said before, RAM is important considering that OpenSim relies heavily on a MySQL database. Not only this, but OpenSim caches most things in memory, so memory is used quite a lot. I would recommend a minimum of 8GB, but the more you have, the more room there is for MySQL.

Hard Drives:
The drives need to be fast, but massive amounts of space is not required. I would recommend using 15K drives, and RAID is obviously preferable to keep redundancy and perhaps more speed. Our OpenSim database is about 1.8gb with about 200,000 rows in total, so disk space will be used quite slowly. Even a 146GB 15K drive would probably be fine for quite some time.

Having said all of this, if you can get better parts, definitely go for it, especially in the CPU and Disks. I wouldn't think any more than 12GB of RAM is required, so any extra money should be spent on getting a faster CPU or faster disks.

If you want some more information on OpenSim, there is extensive information on their wiki at http://opensimulator.org/wiki/Main_Page

Will.

Tuesday, December 7, 2010

Week 2, Group 2

5 students in this group.

Once again, students noted in the short focus group at the end how much they enjoyed the virtual world activities and that it had helped them learn OH&S.

First pair v adept in OH&S. Lots of conversation to answer questions correctly.

Not though for following pair - took ages to do quiz, quite noteworthy lack of knowledge about asbestos and its effects and handling procedures.

Construction trial, Week 2, Group 1

Very interesting session.

Trialed OH&S exploratory and door quiz exercises with 5 students. (one/two at a time, with others continuing to work on their buildings)

First one solo. Realised he was asking us and other sts about the questions throughout, gaining knowledge. We then decided to continue the trial in pairs, which worked well - sts bouncing off one another to answer the questions and find the unsafe practices.

Gave them same paper test as last week - initial impression is that they have been filled in to a much greater level of detail, will be interesting to see marked results.

Also noted need to develop exercises in tandem with students. Throughout they were pointing out things we had missed in-world (as construction luddites) such as other unsafe practices eg planks of wood lying on ground. This will help us greatly. We will also need to add more unsafe examples in the exploratory exercise, as well as examples that ARE safe.

One interesting thing that came up is the issue of prompts in relation to the exploratory exercise. Our team was prompting students at times to look for more examples ("you got 2 to go" etc). Should we prompt? Our conclusion is:
- yes - if we want DEVELOP knowledge, to facilitate the most amount of knowledge gain
- no - if we want to TEST knowledge (want to replicate real life, where workers need to be alert to unsafe practices)

General impression is that, if familiar with virtual worlds, sts don't need much in the way of guidance to do the tasks except for something at the beginning of the structured door quiz to give them some context

Focus group at end - univerally positive, want to keep doing it, see it as fun and that they've learned more about OH&S

Issue of trees - pranking:putting trees into others' buildings etc. Big 'No Trees' message on whiteboard

Tuesday, November 30, 2010

3rd construction group, week 1

Again, immediately engaged by virtual world.

Excited about building avatars, even joke ones.

Totally not listening to Dale when he explains how to do stuff from the front, with projected screen. He needs to go to every student group, show them how to do it. But once he does, they are engrossed.

End of session:

Asked the six students if they played games. All bar one did. Interestingly, the one who didn't was the only one who said the virtual world work was, quote, 'shit' and didn't want to do more next week. The others said they enjoyed it and were keen to do more.

Plan for 2011

After talking to Justin, Mark and Dale, and learning from our 2010 activities, here's a revised plan for delivery for 2011:

Beginning-mid February 2011:

- organise 2 weeks of backfill for Justin and any necessary backfill for Mark if needed - we will pay for this. Justin is teaching as of Jan 30 and Mark at end of Feb.

- Stefan, Craig, Justin and Mark to work together to develop immersive activities (keeping Dale in the loop too - Dale will be busy on other projects at that time)

- Activities developed will depend on availability of web in prim feature within OpenSim. If it's not ready, we will have to adjust activities a little.

- Focus on developing in-world activities *and assessment* for three subjects previously targeted: OH&S, Sustainability and Building Docs and Plans.

- Activities to be immersive, where students do or make stuff ,and where there is a sequence of events with consequences for doing (or not) things right

- Assessment to take the form of in-world question-answer tests, to be collected by PushLMS (basically in-world versions of current paper tests)


- USB Stick functionality to be incorporated into project as a subset of activities in trial form eg some activities could be delivered by USB and undertaken individually by students in their own time or in lab. Possibly also some assessment could take place via USB if results can be fed back into PushLMS. But will see how this pans out.

- Plan of delivery worked out in consultation with Daniel


After Feb 2011:

- follow-up week of tweaking/redevelopment undertaken with the team. May involve more backfill

Today - first day of Construction trial

Hello from Newport campus.

First group of 6 pre-app students is busy building their houses. All v engaged, chose not to take smoko like last time.

Six boys, 16-17 yo. Nobody's a gamer. (Two staff are!) Don't do 3D, just Facebook etc. But all seemed to take to OpenSim - flying, walking, avatar creation straight away.

As far as building goes, ability varies. One guy is a whiz, the guy next to him much slower. Being helped by his neighbour. But by now (10.15 am, about 90 mins after starting) all are building houses on plans - not many questions being asked at all, getting on with it.

Should note that helping Dale today are Craig and James. Going smoothly for this reason - Dale not running around trying to snswer all manner of requests.

Teachers: Daniel wants to embed with all students next year. Justin and Mark (staff) v keen. Mark here too. Will be running new 'TradeApps' pre App program next year. Advantage - will know students, will have been working with them. Also working with Trade Colleges (TTCs), delivering at Keilor Downs (?)

Issues that have come up:

- Justin: not enough time to really work on this idea properly. Too much on.
- Dale: technology issues, getting system to work - only just really working properly this week. Has limited scope to do activities planned. Lesson: don't be too ambitious about scope.
- logistics: Hayden (teacher) quit half way through, delays meant not being able to deliver to previously planned groups (ie now preapps only) at end of year, so had to squeeze sessions into 2 hour blocks (students finish in 2 weeks). Also meant that not working with groups that Justin teaches, doesn't know students, what they've learned/been assessed for and when
- web in prim feature (putting webpages within OpenSim) still not available. So we're still using previous version of PushLMS (dialogue box). Web in prim has been promised by OpenSim OS developers by Xmas. This has menat we haven't been able to deliver everything we had planned in terms of activities.
- testing: after discussing activities in place, we have decided to only test for understanding of OH&S rather than Sustainability and Blg Docs and Plans as well, because the latter two activities are underdeveloped (other option is question/answer exercises, but this isn't really too meaningful since they do this on paper already...is basically sugar coating rather than truly new learning). SO giving all students OH&S question sheet at end of first general session (don't want to hit them with paper sheet as they arrive, [possibility of negatively influencing engagement), and then after OH&S session in Week 2.

Tuesday, November 16, 2010

Today's Building Design trial

Dale and I have started the building design trial today in the computer lab at Newport. To note initially:

- only 3 students have come in. (It's a beautiful day outside and the end of the year, and this is an optional activity)

- James H from Melbourne Grammar School is also here to provide technical server support.

- the students are two females and one male. The two females are mothers - and apparently the leaders of the class, which has 3 females and 20 males.

- after some concern about the internet speed, it is now apparent that the Newport lab speed is now excellent (see previous post) so we're using the lab machines instead of the laptops and modems. One of those unpredictable variables...

- the 'web in prim' function in OpenSim is not ready yet - the open source developers have not completed this function, which is up in Second Life. One of the issues with working with Open Source...deadlines are sometimes unpredictable. Instead, Dale has gone back to the previous version of the PushLMS, and the questions provided by Sue in the in-world assessment exercise (to happen after lunch) appear in a dialog box rather than on the clipboard. You need to be nimble, adaptable and able to probelm-solve on the spot in this space (which may make some more risk-adverse educators nervous)

- so far, two of the students seem to be very engaged in OpenSim - Dale is currently showing them the ropes. The third, the male, came in later after a dental appointment and after some cajoling by the other two students.

- the morning session happening now is the virtual world intro...Dale is going through avatar modification and building

- before we started this morning, a couple of unrelated students were in the lab and a teacher. One of the students (male) was immediately drawn to the virtual world and wanted to try it out - no prompting involved.

- both female students were familiar with computers, Autocad etc. Male student also (inc social networking)....he'd also done a multimedia course and knows 3d software such as 3d studio max. One female used to work in advertising. None of the students play computer games for recreation. Male said Second Life 'isn't really his thing'.

Tuesday, November 2, 2010

message from Patrick - proposed change is fine with Dale and Stefan

message from Patrick last Thursday 28 October:

Hi Team,
I had a chat to our prospective participants yesterday.
After much negotiating (which included the offer of pizzas for lunch) they have agreed to do one long session on the 17th Nov.
The session on the 10th was at a critical point in their assignment/test program.
I am proposing that we now have them for 4-5 hours so that we can give them the initial orientation, a break and the then institute the formal process to facilitate the review.
Proposed hours are 10-12 and then 1-4.
Can you please indicate if this can be accommodated.
Cheers
Patrick

Patrick White
Program Manager
Advanced Building Studies

Tuesday, October 26, 2010

Discussions with Patrick and Justin on Construction/Blg Design Project

Had a chat with Patrick yesterday.

We worked out that:


- 6-10 building design student volunteers would do two virtual world sessions of two hours over consecutive weeks: Weds Nov 10 and 17.


- they will focus on the OH&S stuff in the first, and the house building/design in the second.


- this won't involve any assessment since they have already been assessed on OH&S earlier in the year, plus it's getting to exam time then (too late in the year, too much else on). As a result we will have to treat the Building Design activity as a kind of feeler or tester, as we did with Construction last year. We will just look at if it increases engagement levels or not. It's not ideal for reporting, research etc, but is the best we can do at this stage.


Patrick would like to roll this out as an assessable activity in 2011. But this depends on if we can get it funded, since the current project funding runs out this year.


Also
spoke with Justin. We will use the existing assessment tests given to the construction guys for our pre and post tests for OH&S and workplace docs. For sustainability, Justin will compile a short test this week based on his longer assessment task.

Sunday, October 24, 2010

Latest on construction/building design OpenSim project

Summary of latest meetings and technical developments:

- Construction trial now to take place over 2 weeks: weeks of November 29 and December 6:
  • 3 groups of 5/6 students each from the Cert II in General Construction Pre-Apprenticeship program
  • each group undertakes one on the three virtual world-based activity sets from the three competencies: OH&S/sustainability/workplace documents
  • For pre-test, use existing theory assessment exercises. Give it to all sts before they do the study (to get baseline knowledge), then again at end (Note: only some pre-App sts do this as part of their training, some are assessed in integrated way, building houses etc...it depends on the circumstances - but in this case they will all get the sheets)
- Building Design trial to take place on November 10. No comparison group. Will look at measuring engagement levels (focus group before and afterwards) plus maybe compare with results from previous years

Thursday, October 14, 2010

Today's meeting with Construction teachers and Dale on delivery of virtual world workshops

Lots has come out of today's meeting:

Delivery;

- Push LMS system still being developed. Some issues with staffing (Will has bowed out, Craig has taken over, has meant some delays)
- also some issues with OpenSim viewers (Hippo) not displaying some OpenSim textures etc, now using Kirsten's Viewer)
- looking at delivering to the Cert II Construction pre-apps only (VET in Schools students leave next week, so have missed chance to work with them, but pre-apps still around until mid-December)
- Justin away for first 3 weeks of November, so looking at doing workshops weeks of Nov 29 and Dec 6 (Daniel to confirm)
- computers in Newport labs: graphics cards aren't up to displaying some OpenSim content (eg gum trees, figures). May need to upgrade cards to 512k (as initially listed in specs!)
- need to work out revised time for delivery with Building Design guys
- process of developing software is, in Dale's words, 'predictably unpredictable'...never really know if plans will translate into reality, especially in areas like this that nobody has done before

Assessment and research:

Chatted at length to Justin and Jason today. Notes:

- Workplace safety and env. sust. (OHS)/Workplace procedures for env. sust (Sust.): these competencies are delivered and assessed throughout course, not standalone (embedded in other subjets). Not formally assessed at Cert II level, more observational etc throughout year. Similar for Cert II and Cert III...can be applied across both (though Cert II is more practical and Cert II Ihas more design elements)
- Workplace documents: this one is assessed 'stand-alone'
- OH&S: OpenSim activities based closely on A3 sheet given to students to break up day of theory connected with assessment for 'white card':












- Daniel: refer to 'scenario based delivery'
- suggestion from Shelley re research: work within one group. Do OH&S baseline test pre-day, then again afterwards. Some sts to use A3 sheets, others OpenSim. (former have option of using OpenSim too if they want, to be ethical)

Tuesday, September 7, 2010

Illuminating day today at Newport campus teacher training day

Had a great day today with Dale and the teachers from Building Design (Sue, Patrick) and construction (Justin, Mark...Hayden can't make it anymore, hence replaced by Mark, and Jason is on leave) plus Daniel (coordinator). Howard from E-works visited too.

The day has been a mix of brainstorming activities, demonstration of what we've done for Howard, planning and training the teachers in the OpenSim virtual world. The enthusiasm of the teachers is evident. Mark (new guy) had some great ideas on sustainability activities in the construction area. He is a gamer and keen.



Building Design (the simpler of the two planned suite of activities):

- On track to do training with Sue and students from weeks 2 -4 of term 4 (September). Will involve building houses from plans

- Idea emerged of using PushLMS to do a mobile GPS-based project on building styles in the Adv Dip of Blg Design, and to apply for this in the next round of AFLF funding (due September 20)

Construction (more complex):

- buildings and areas of Isle of VU to be completed in next few weeks (over holidays)

- Daniel's input: we will aim for having the system ready for delivery to ALL VET in Schools Cert II students (170) by early 2011, assuming that pilot is all OK, and then all pre-App Cert II students in 2012.

- 2010 pilot: we can either do it in next 6 weeks (Daniel's current lot of VET in Schools students, 1 day a week) or wait until November for next group. Flexible, can do teacher swap for the day so that Mark and Justin can do the training whenever suits. Fine to work the same way as last year: 3-4 hour sessions weekly with 6 students at a time. This seemed to work well.

- Dale and Mark/Justin currently planning new activities to include in their activities.

Sunday, August 8, 2010

Merle in opensim




Using what we already did here in opensim, the plan at the moment is to run a virtual avatar starting with this.

Saturday, July 31, 2010

Aescelpia, Sterile Clean Room Update



The SL viewer issues;
Version 2.1.0 of the Second Life viewer doesn't allow clicking on web prims(the clipboard). After uninstalling this and reinstalling the old viewer web prims were once again interactive;
http://download.cloud.secondlife.com/Viewer-2/Second_Life_2-0-1-203797_Setup.exe
Another issue is having the camera view zoom off after clicking the clipboard. This can be remedied by unclicking the 'Auto-Zoom' option in the web prim properties.
Likewise the issues with 'unauthorised websites' can be changed in the web prim properties, you can add a list of sites to a whitelist or simply turn that function off. We need to test what works best here.
Internet browser issues;
The admin side of the site will only be accessed by teachers and admins. Explorer is frankly way behind when it comes to web standards and we are really waiting for them to fix their program rather than us having to ruin good code to get it working on a few pcs. If possible we will recommend using Mozilla Firefox or Chrome(at least at the beginning) which both work beautifully.
LMS Interfaces;
Will be redesigned this week, then tested as extensively as time allows.


Monday, July 26, 2010

VU island terrain

The wonderful Elena Hurse created some .raw terrain maps for us, 6 all up. They look even better than what I sent her to replicate.

The island from above using the map view.


The island from the top left of the 'V', I am standing on the road there(which has room for parking, it's wide), just to give you a sense of scale(it's big).


The island from above using the map view.


The island from the top left of the 'V', I am standing on the road there(which has room for parking, it's wide), just to give you a sense of scale(it's big).


Friday, July 16, 2010

Maths and music education tools for Second Life and Open Sim


This is a demonstration of several learning tools we have developed in conjunction with Debney Park Secondary College and Soundhouse for use in the virtual world Second Life.
The first tool is for use in the teaching of year seven maths. It allows students to explore the mathematical relationship between the size of 5 objects and their volumes.
Upon clicking the volume machine students are presented with what type of shape it is, and option to modify it's height, width, and length.
This will cause the shape in the machine to change, showing the students what the new volume is.
The equation which causes each shape is shown at the top of each volume machine.
There are five different volume machines, a cube, a cylinder, a cone, a pyramid and a sphere.
The aim of this tool is to help students understand practical applications of mathematics in an engaging 3 dimensional environment.

The second tool is a couple of simple scripts which will allow students to create virtual musical ensembles.
The first object contains a script which will play a single sound once.
The second object contains a script which will play a continuous loop, until the object is clicked again.
Using these scripts, students are able to build their own instruments and place their own pre-recorded sounds inside.

Thursday, July 15, 2010

Music Scripts

These two script can be used to make a musical machine. There are two different scripts, the first script will play a sound once. The second script will start a loop playing when it is touched and will stop when it is touched again.
To use each script simply create a prim place the script in the prim as well as the sound to be played.


Loop Sound Script:

//loops a sound
default
{
touch_start(integer total_number)
{
llLoopSound(llGetInventoryName(INVENTORY_SOUND,0), 1.0);
state on;
}
}
state on
{
touch_start(integer total_number)
{
llStopSound();
state default;
}
}
//Script end



Play Sound Script:



//plays a sound once
default
{
touch_start(integer total_number)
{
llPlaySound(llGetInventoryName(INVENTORY_SOUND,0), 1.0);
}
}
//End script

Maths Volume Machine Scripts

The following scripts are for the maths volume machine. The machine will calculate the volume of an object according to the dimensions given by the user. There are 5 possible shapes Cone,Cube,Cylinder,Pyramid and Sphere. After the dimensions have been entered the shape will change size to show the difference in volume.Colored beams of light will appear to go into the prim that is changing shape while it is changing.

To use these scripts place the control script in the root prim. This will be the prim that the user touches to start the machine as well as the prim that the results will be shown above.

Then place the slave script in the prim that will be changing shape.

To use the particle script place a prim above and below the prim that the slave script is in. Then place a copy of the particle script in each. Place the down particle script in the prim above and the rising particle script in the prim below.

Then select all of the prims selecting the control prim last and link them all.

Particle Script for all shapes

Place this script in the prims above and below the prim that is changing shape.
These will be the prims that the colored beams will be coming out of.
Make the prims that the particle script is in the colour that you want the beam to be.


Rising Particle:

vector colour;
default
{
state_entry()
{
colour=llGetColor(ALL_SIDES);
}
link_message(integer sender_number, integer number, string message, key id)
{
if (message=="start")
{
float rate = .1 ;
float age = 1.0 ;
integer count = 10 ;
llParticleSystem( [
PSYS_PART_INTERP_SCALE_MASK,
PSYS_PART_INTERP_COLOR_MASK,
PSYS_SRC_PATTERN, PSYS_SRC_PATTERN_DROP,
PSYS_SRC_BURST_PART_COUNT,(integer) count,
PSYS_SRC_BURST_RATE,(float) rate,
PSYS_PART_MAX_AGE,(float) age,
PSYS_SRC_ACCEL,(vector) <0,0,1.0>,//change to <0,0,-1.0> for down particle
PSYS_SRC_BURST_SPEED_MIN,(float) .5,
PSYS_SRC_BURST_SPEED_MAX,(float) .5,
PSYS_PART_START_SCALE,(vector) <.1,1,.1>,
PSYS_PART_START_COLOR,(vector) colour, // Start Color, (RGB, 0 to 1) set to colour of the slave prim
PSYS_PART_END_COLOR,(vector) <1,1,1>,
PSYS_SRC_MAX_AGE,(float) 5.0,
PSYS_PART_FLAGS,
PSYS_PART_EMISSIVE_MASK |
PSYS_PART_INTERP_COLOR_MASK |
0 ] );
llResetScript();
}
else
{
llResetScript();
}
}
}




Down Particle:


vector colour;
default
{
state_entry()
{
colour=llGetColor(ALL_SIDES);
}
link_message(integer sender_number, integer number, string message, key id)
{
if (message=="start")
{
float rate = .1 ;
float age = 1.0 ;
integer count = 10 ;
llParticleSystem( [
PSYS_PART_INTERP_SCALE_MASK,
PSYS_PART_INTERP_COLOR_MASK,
PSYS_SRC_PATTERN, PSYS_SRC_PATTERN_DROP,
PSYS_SRC_BURST_PART_COUNT,(integer) count,
PSYS_SRC_BURST_RATE,(float) rate,
PSYS_PART_MAX_AGE,(float) age,
PSYS_SRC_ACCEL,(vector) <0,0,-1.0>,//change to <0,0,-1.0> for down particle
PSYS_SRC_BURST_SPEED_MIN,(float) .5,
PSYS_SRC_BURST_SPEED_MAX,(float) .5,
PSYS_PART_START_SCALE,(vector) <.1,1,.1>,
PSYS_PART_START_COLOR,(vector) colour, // Start Color, (RGB, 0 to 1) set to colour of the slave prim
PSYS_PART_END_COLOR,(vector) <1,1,1>,
PSYS_SRC_MAX_AGE,(float) 5.0,
PSYS_PART_FLAGS,
PSYS_PART_EMISSIVE_MASK |
PSYS_PART_INTERP_COLOR_MASK |
0 ] );
llResetScript();
}
else
{
llResetScript();
}
}
}

Sphere Scripts

These scripts are for the Sphere shape.
To use these scripts place the control script in the root prim. Then place the slave script in the prim that will be changing shape.


Control Script:


// this script is placed in the main control prim for a sphere
key id;
float radiusSize;
float volumeSize;
default
{
touch_start(integer total_number)
{
id = llDetectedKey(0);
llMessageLinked(LINK_ALL_CHILDREN,0,"Cone",id);
state radius;
}
}

state radius
{
link_message(integer sender_number, integer number, string message, key id)
{
radiusSize=(float)message;
state display;
}
}
state display
{
state_entry()
{
volumeSize=(4.0/3.0)*PI*((radiusSize*radiusSize)*radiusSize);
llInstantMessage(id,"Volume is: "+(string)volumeSize
+"\n Radius is: "+(string)radiusSize);
llSetText("Volume is: "+(string)volumeSize
+"\n Radius is: "+(string)radiusSize,
<0.0,>, 1.0);
llMessageLinked(LINK_ALL_CHILDREN,0,"reset",id);
llResetScript();
}
}


Slave Script:

//place in the prim you want to change shape for a sphere
//global variables
float lengthSize;
float widthSize;
float radiusSize;
float volumeSize;
integer channel;
integer shape;
integer phantom=FALSE;
vector top_size=<1.0,1.0,0.0>;
vector startSize=<2.0,2.0,2.0>;//starting size of prim
string usermessage;
key id2;
//dialog list items
list listc= [".2", ".4", ".6", ".8", "1", "1.2", "1.4", "1.6", "1.8","2"];
list listd= ["0.1","0.2","0.3","0.4","0.5","0.6","0.7","0.8","0.9","1"];
list liste=["Yes","No"];
string menuHeight="Please Enter Height:";
string menuRadius="Please Enter Radius:";
string menurestart="Would You Like To Continue";
//============================================
//user defined functions
primsize()
{
float z= lengthSize;
float x= lengthSize;
float y= widthSize;
llSetScale();
}
primshape()
{
llSetPrimitiveParams([
PRIM_PHANTOM,phantom,
PRIM_TYPE,shape,
PRIM_HOLE_DEFAULT,
<0.0,1.0,0.0>,
0.0,
ZERO_VECTOR,
<0.0,1.0,0.0>]);
}

spherevolume()
{
volumeSize=(4.0/3.0)*PI*((radiusSize*radiusSize)*radiusSize);
}
reset()
{
llSleep(2.0);
llResetScript();
}
//======================================
//Script states
default
{
state_entry()
{
channel=(integer)llFrand(1000.0);
llListen(channel,"", id2,"");
}
link_message(integer sender_number, integer number, string message, key id)
{
id2=id;
usermessage=message;
if (message=="Square")
{
llResetScript();
}
else if (message=="Pyramid")
{
llResetScript();
}
else if (message=="Cylinder")
{
llResetScript();
}
else if (message=="Cone")
{
shape=PRIM_TYPE_SPHERE;
primshape();
state radiusState;
}
}
}
//state to get radius
state radiusState
{
state_entry()
{
llListen(channel,"", id2,"");
llDialog(id2, menuRadius, listd,channel);
}
listen(integer channel, string name, key id, string message)
{
radiusSize=(float)message;
llMessageLinked(LINK_ROOT,0,(string)radiusSize,"");
lengthSize=radiusSize*2;
widthSize=lengthSize;
llOwnerSay("Length"+message);
if (usermessage=="Cylinder")
{
llResetScript();
}
else if (usermessage=="Square")
{
llResetScript();
}
else if (usermessage=="Pyramid")
{
llResetScript();
}
else if (usermessage=="Cone")
{
spherevolume();
state display;
}
}
}
//state for display size
state display
{
state_entry()
{
llMessageLinked(LINK_ALL_CHILDREN,0,"start","");
llSleep(4.0);
primsize();
}
link_message(integer sender_number, integer number, string message, key id)
{
if (message=="reset")
reset();
}
}

Pyramid Scripts

These scripts are for the Pyramid shape.
To use these scripts place the control script in the root prim. Then place the slave script in the prim that will be changing shape.


Control Script:


// this script is placed in the main control prim for a pyramid

key id;
float heightSize;
float lengthSize;
float widthSize;
float volumeSize;
default
{
touch_start(integer total_number)
{
id = llDetectedKey(0);
llMessageLinked(LINK_ALL_CHILDREN,0,"Pyramid",id);
}
link_message(integer sender_number, integer number, string message, key id)
{
heightSize=(float)message;
state width;
}
}
state width
{
link_message(integer sender_number, integer number, string message, key id)
{
widthSize=(float)message;
state length;
}
}
state length
{
link_message(integer sender_number, integer number, string message, key id)
{
lengthSize=(float)message;
state display;
}
}
state display
{
state_entry()
{
volumeSize=(1.0/3.0)*widthSize*lengthSize*heightSize;
llInstantMessage(id,"Volume is: "+(string)volumeSize
+"\n Height is: "+(string)heightSize
+"\n Length is: "+(string)lengthSize
+"\n Width is: "+(string)widthSize);
llSetText("Volume is: "+(string)volumeSize
+"\n Height is: "+(string)heightSize
+"\n Length is: "+(string)lengthSize
+"\n Width is: "+(string)widthSize,
<1.0,>, 1.0);
llMessageLinked(LINK_ALL_CHILDREN,0,"reset",id);
llResetScript();
}
}



Slave Script:


//place in the prim you want to change shape for a pyramid

//global variables
float lengthSize;
float widthSize;
float heightSize;
float volumeSize;
integer channel;
integer shape;
integer phantom=FALSE;//Select TRUE for Phantom prim FALSE for normal.
vector top_size=<1.0,1.0,0.0>;
vector startSize=<2.0,2.0,2.0>;//starting size of prim
string usermessage;
key id2;
//dialog list items
list listc= [".2", ".4", ".6", ".8", "1", "1.2", "1.4", "1.6", "1.8","2"];
list liste=["Yes","No"];
string menuLength="Please Enter Length:";
string menuWidth="Please Enter Width:";
string menuHeight="Please Enter Height:";
string menurestart="Would You Like To Continue";
//===========================================
//user defined functions
primsize()
{
float z= heightSize;
float x= lengthSize;
float y= widthSize;
llSetScale();
}
primshape()
{
llSetPrimitiveParams([
PRIM_PHANTOM,phantom,
PRIM_TYPE,shape,
PRIM_HOLE_DEFAULT,
<0.0,1.0,0.0>,
0.0,
ZERO_VECTOR,
top_size,
ZERO_VECTOR]);
}
pyramidvolume()
{
volumeSize=(1.0/3.0)*widthSize*lengthSize*heightSize;
}
reset()
{
llSleep(2.0);
llResetScript();
}
//=========================================
//Script states
default
{
state_entry()
{
channel=(integer)llFrand(1000.0);
llListen(channel,"", id2,"");
}
link_message(integer sender_number, integer number, string message, key id)
{
id2=id;
usermessage=message;
if (message=="Pyramid")
{
shape=PRIM_TYPE_BOX;
top_size=ZERO_VECTOR;
primshape();
state Height;
}
else if (message=="Cube")
{
llResetScript();
}
else if (message=="Cone")
{
llResetScript();
}
else if (message=="Cylinder")
{
llResetScript();
}
}
}
//state to get height
state Height
{
state_entry()
{
llListen(channel,"", id2,"");
llDialog(id2, menuHeight, listc,channel);
}
listen(integer channel, string name, key id, string message)
{
heightSize=(float)message;
llMessageLinked(LINK_ROOT,0,(string)heightSize,"");
if (usermessage=="Cube"||usermessage=="Pyramid")
{
state width;
}
else if (usermessage=="Cylinder"||usermessage=="Cone")
{
llResetScript();
}
}
}
//state to get width
state width
{
state_entry()
{
llListen(channel,"", id2,"");
llDialog(id2, menuWidth, listc,channel);
}
listen(integer channel, string name, key id, string message)
{
widthSize=(float)message;
llMessageLinked(LINK_ROOT,0,(string)widthSize,"");
state length;
}
}
//state to get length
state length
{
state_entry()
{
llListen(channel,"", id2,"");
llDialog(id2, menuLength, listc,channel);
}
listen(integer channel, string name, key id, string message)
{
lengthSize=(float)message;
llMessageLinked(LINK_ROOT,0,(string)lengthSize,"");
llOwnerSay("Length"+message);
if (usermessage=="Pyramid")
{
pyramidvolume();
state display;
}
else if (usermessage=="Cube")
{
llResetScript();
state display;
}
else if (usermessage=="Cylinder")
{
llResetScript();
state display;
}
else if (usermessage=="Cone")
{
llResetScript();
state display;
}
}
}
//state for display size
state display
{
state_entry()
{
llMessageLinked(LINK_ALL_CHILDREN,0,"start","");
llSleep(4.0);
primsize();
}
link_message(integer sender_number, integer number, string message, key id)
{
if (message=="reset")
reset();
}
}
//Script End:

Cylinder Scripts

These scripts are for the Cylinder shape.
To use these scripts place the control script in the root prim. Then place the slave script in the prim that will be changing shape.

Control Script:


// this script is placed in the main control prim for a cylinder
key id;
float heightSize;
float radiusSize;
float volumeSize;
default
{
touch_start(integer total_number)
{
id = llDetectedKey(0);
llMessageLinked(LINK_ALL_CHILDREN,0,"Cylinder",id);
}
link_message(integer sender_number, integer number, string message, key id)
{
heightSize=(float)message;
state radius;
}
}
state radius
{
link_message(integer sender_number, integer number, string message, key id)
{
radiusSize=(float)message;
state display;
}
}
state display
{
state_entry()
{
volumeSize=PI*(radiusSize*radiusSize)*heightSize;
llInstantMessage(id,"Volume is: "+(string)volumeSize
+"\n Height is: "+(string)heightSize
+"\n Radius is: "+(string)radiusSize);
llSetText("Volume is: "+(string)volumeSize
+"\n Height is: "+(string)heightSize
+"\n Radius is: "+(string)radiusSize,
<1.0,>, 1.0);
llMessageLinked(LINK_ALL_CHILDREN,0,"reset",id);
llResetScript();
}
}



Slave Script:

//place in the prim you want to change shape for a cylinder
//global variables
float lengthSize;
float widthSize;
float heightSize;
float radiusSize;
float volumeSize;
integer channel;
integer shape;
integer phantom=FALSE;//Select TRUE for Phantom prim FALSE for normal.
vector top_size=<1.0,1.0,0.0>;
vector startSize=<2.0,2.0,2.0>;//starting size of prim
string usermessage;
key id2;
//dialog list items
list listc= [".2", ".4", ".6", ".8", "1", "1.2", "1.4", "1.6", "1.8","2"];
list listd= ["0.1","0.2","0.3","0.4","0.5","0.6","0.7","0.8","0.9","1"];
list liste=["Yes","No"];
string menuHeight="Please Enter Height:";
string menuRadius="Please Enter Radius:";
string menurestart="Would You Like To Continue";
//=========================================
//user defined functions
primsize()
{
float z= heightSize;
float x= lengthSize;
float y= widthSize;
llSetScale();
}
primshape()
{
llSetPrimitiveParams([
PRIM_PHANTOM,phantom,
PRIM_TYPE,shape,
PRIM_HOLE_DEFAULT,
<0.0,1.0,0.0>,
0.0,
ZERO_VECTOR,
top_size,
ZERO_VECTOR]);
}
cylindervolume()
{
volumeSize=PI*(radiusSize*radiusSize)*heightSize;
}
reset()
{
llResetScript();
}
//=======================================
//Script states
default
{
state_entry()
{
channel=(integer)llFrand(1000.0);
llListen(channel,"", id2,"");
}
link_message(integer sender_number, integer number, string message, key id)
{
id2=id;
usermessage=message;
if (message=="Square")
{
llResetScript();
}
else if (message=="Pyramid")
{
llResetScript();
}
else if (message=="Cone")
{
llResetScript();
}
else if (message=="Cylinder")
{
shape=PRIM_TYPE_CYLINDER;

primshape();
state Height;
}
}
}
//state to get height
state Height
{
state_entry()
{
llListen(channel,"", id2,"");
llDialog(id2, menuHeight, listc,channel);
}
listen(integer channel, string name, key id, string message)
{
heightSize=(float)message;
llMessageLinked(LINK_ROOT,0,(string)heightSize,"");
if (usermessage=="Square"||usermessage=="Pyramid")
{
llResetScript();
}
else if (usermessage=="Cylinder"||usermessage=="Cone")
{
state radiusState;
}
}
}
//state to get radius
state radiusState
{
state_entry()
{
llListen(channel,"", id2,"");
llDialog(id2, menuRadius, listd,channel);
}
listen(integer channel, string name, key id, string message)
{
radiusSize=(float)message;
llMessageLinked(LINK_ROOT,0,(string)radiusSize,"");
lengthSize=radiusSize*2;
widthSize=lengthSize;
llOwnerSay("Length"+message);
if (usermessage=="Cone")
{
llResetScript();
}
else if (usermessage=="Square")
{
llResetScript();
}
else if (usermessage=="Pyramid")
{
llResetScript();
}
else if (usermessage=="Cylinder")
{
cylindervolume();
state display;
}
}
}
//state for display size
state display
{
state_entry()
{
llMessageLinked(LINK_ALL_CHILDREN,0,"start","");
llSleep(4.0);
primsize();
}
link_message(integer sender_number, integer number, string message, key id)
{
if (message=="reset")
reset();
}
}

Cube Scripts

These scripts are for the Cube shape.
To use these scripts place the control script in the root prim. Then place the slave script in the prim that will be changing shape.

Control Script:


// this script is placed in the main control prim for a cube

key id;
float heightSize;
float lengthSize;
float widthSize;
float volumeSize;
default
{
touch_start(integer total_number)
{
id = llDetectedKey(0);
llMessageLinked(LINK_ALL_CHILDREN,0,"Cube",id);
}
link_message(integer sender_number, integer number, string message, key id)
{
heightSize=(float)message;
state width;
}
}
state width
{
link_message(integer sender_number, integer number, string message, key id)
{
widthSize=(float)message;
state length;
}
}
state length
{
link_message(integer sender_number, integer number, string message, key id)
{
lengthSize=(float)message;
state display;
}
}
state display
{
state_entry()
{
volumeSize=lengthSize*widthSize*heightSize;
llInstantMessage(id,"Volume is: "+(string)volumeSize
+"\n Height is: "+(string)heightSize
+"\n Length is: "+(string)lengthSize
+"\n Width is: "+(string)widthSize);
llSetText("Volume is: "+(string)volumeSize
+"\n Height is: "+(string)heightSize
+"\n Length is: "+(string)lengthSize
+"\n Width is: "+(string)widthSize,
<0.0,>, 1.0);
llMessageLinked(LINK_ALL_CHILDREN,0,"reset",id);
llResetScript();
}
}



Slave Script:

//place in the prim you want to change shape for a cube
//global variables
float lengthSize;
float widthSize;
float heightSize;
float volumeSize;
integer channel;
integer shape;
integer phantom=FALSE;//Select TRUE for Phantom prim FALSE for normal.
vector top_size=<1.0,1.0,0.0>;
vector startSize=<2.0,2.0,2.0>;//starting size of prim
string usermessage;
key id2;
//dialog list items
list listc= [".2", ".4", ".6", ".8", "1", "1.2", "1.4", "1.6", "1.8","2"];
list liste=["Yes","No"];
string menuLength="Please Enter Length:";
string menuWidth="Please Enter Width:";
string menuHeight="Please Enter Height:";
string menurestart="Would You Like To Continue";
//===================================================
//user defined functions
primsize()
{
float z= heightSize;
float x= lengthSize;
float y= widthSize;
llSetScale();
}
primshape()
{
llSetPrimitiveParams([
PRIM_PHANTOM,phantom,
PRIM_TYPE,shape,
PRIM_HOLE_DEFAULT,
<0.0,1.0,0.0>,
0.0,
ZERO_VECTOR,
top_size,
ZERO_VECTOR]);
}
Cubevolume()
{
volumeSize=lengthSize*widthSize*heightSize;
}
reset()
{
llSleep(2.0);
llResetScript();
}

//==================================================
//Script states
default
{
state_entry()
{
channel=(integer)llFrand(1000.0);
llListen(channel,"", id2,"");
}
link_message(integer sender_number, integer number, string message, key id)
{
id2=id;
usermessage=message;
if (message=="Cube")
{
shape=PRIM_TYPE_BOX;
primshape();
state Height;
}
else if (message=="Pyramid")
{
llResetScript();
}
else if (message=="Cone")
{
llResetScript();
}
else if (message=="Cylinder")
{
llResetScript();
}
}
}
//state to get height
state Height
{
state_entry()
{
llListen(channel,"", id2,"");
llDialog(id2, menuHeight, listc,channel);
}
listen(integer channel, string name, key id, string message)
{
heightSize=(float)message;
llMessageLinked(LINK_ROOT,0,(string)heightSize,"");
if (usermessage=="Cube"||usermessage=="Pyramid")
{
state width;
}
else if (usermessage=="Cylinder"||usermessage=="Cone")
{
llResetScript();
}
}
}
//state to get width
state width
{
state_entry()
{
llListen(channel,"", id2,"");
llDialog(id2, menuWidth, listc,channel);
}
listen(integer channel, string name, key id, string message)
{
widthSize=(float)message;
llMessageLinked(LINK_ROOT,0,(string)widthSize,"");
state length;
}
}
//state to get length
state length
{
state_entry()
{
llListen(channel,"", id2,"");
llDialog(id2, menuLength, listc,channel);
}
listen(integer channel, string name, key id, string message)
{
lengthSize=(float)message;
llMessageLinked(LINK_ROOT,0,(string)lengthSize,"");
llOwnerSay("Length"+message);
if (usermessage=="Cube")
{
Cubevolume();
state display;
}
else if (usermessage=="Pyramid")
{
llResetScript();
state display;
}
else if (usermessage=="Cylinder")
{
llResetScript();
state display;
}
else if (usermessage=="Cone")
{
llResetScript();
state display;
}
}
}
//state for display size
state display
{
state_entry()
{
llMessageLinked(LINK_ALL_CHILDREN,0,"start","");
llSleep(4.0);
primsize();
}
link_message(integer sender_number, integer number, string message, key id)
{
if (message=="reset")
reset();
}
}
//Script End:

Cone Scripts

These scripts are for the cone shape.
To use these scripts place the control script in the root prim. Then place the slave script in the prim that will be changing shape.

Control Script:


// copy from here down
// this script is placed in the main control prim for a cone
key id;
float heightSize;
float radiusSize;
float volumeSize;
default
{
touch_start(integer total_number)
{
id = llDetectedKey(0);
llMessageLinked(LINK_ALL_CHILDREN,0,"Cone",id);
}
link_message(integer sender_number, integer number, string message, key id)
{
heightSize=(float)message;
state radius;
}
}
state radius
{
link_message(integer sender_number, integer number, string message, key id)
{
radiusSize=(float)message;
state display;
}
}
state display
{
state_entry()
{
volumeSize=(1.0/3.0)*PI*(radiusSize*radiusSize)*heightSize;
llInstantMessage(id,"Volume is: "+(string)volumeSize
+"\n Height is: "+(string)heightSize
+"\n Radius is: "+(string)radiusSize);
llSetText("Volume is: "+(string)volumeSize
+"\n Height is: "+(string)heightSize
+"\n Radius is: "+(string)radiusSize,
<0.0,>, 1.0);
llMessageLinked(LINK_ALL_CHILDREN,0,"reset",id);
llResetScript();
}
}
//End of first script




Slave Script:

//copy from here down
//place in the prim you want to change shape for a cone
//global variables
float lengthSize;
float widthSize;
float heightSize;
float radiusSize;
float volumeSize;
integer channel;
integer shape;
integer phantom=FALSE;//Select TRUE for Phantom prim FALSE for normal.
vector top_size=<1.0,1.0,0.0>;
vector startSize=<2.0,2.0,2.0>;//starting size of prim
string usermessage;
key id2;
//dialog list items
list listc= [".2", ".4", ".6", ".8", "1", "1.2", "1.4", "1.6", "1.8","2"];
list listd= ["0.1","0.2","0.3","0.4","0.5","0.6","0.7","0.8","0.9","1"];
list liste=["Yes","No"];
string menuHeight="Please Enter Height:";
string menuRadius="Please Enter Radius:";
string menurestart="Would You Like To Continue";
//====================================
//user defined functions
primsize()
{
float z= heightSize;
float x= lengthSize;
float y= widthSize;
llSetScale();
}
primshape()
{
llSetPrimitiveParams([
PRIM_PHANTOM,phantom,
PRIM_TYPE,shape,
PRIM_HOLE_DEFAULT,
<0.0,1.0,0.0>,
0.0,
ZERO_VECTOR,
top_size,
ZERO_VECTOR]);
}
conevolume()
{
volumeSize=(1.0/3.0)*PI*(radiusSize*radiusSize)*heightSize;
}
reset()
{
llSleep(2.0);
llResetScript();
}
//==========================================
//Script states
default
{
state_entry()
{
channel=(integer)llFrand(1000.0);
llListen(channel,"", id2,"");
}
link_message(integer sender_number, integer number, string message, key id)
{
id2=id;
usermessage=message;
if (message=="Square")
{
llResetScript();
}
else if (message=="Pyramid")
{
llResetScript();
}
else if (message=="Cylinder")
{
llResetScript();
}
else if (message=="Cone")
{
shape=PRIM_TYPE_CYLINDER;
top_size=ZERO_VECTOR;
primshape();
state Height;
}
}
}
//state to get height
state Height
{
state_entry()
{
llListen(channel,"", id2,"");
llDialog(id2, menuHeight, listc,channel);
}
listen(integer channel, string name, key id, string message)
{
heightSize=(float)message;
llMessageLinked(LINK_ROOT,0,(string)heightSize,"");
if (usermessage=="Square"||usermessage=="Pyramid")
{
llResetScript();
}
else if (usermessage=="Cylinder"||usermessage=="Cone")
{
state radiusState;
}
}
}
//state to get radius
state radiusState
{
state_entry()
{
llListen(channel,"", id2,"");
llDialog(id2, menuRadius, listd,channel);
}
listen(integer channel, string name, key id, string message)
{
radiusSize=(float)message;
llMessageLinked(LINK_ROOT,0,(string)radiusSize,"");
lengthSize=radiusSize*2;
widthSize=lengthSize;
llOwnerSay("Length"+message);
if (usermessage=="Cylinder")
{
llResetScript();
}
else if (usermessage=="Square")
{
llResetScript();
}
else if (usermessage=="Pyramid")
{
llResetScript();
}
else if (usermessage=="Cone")
{
conevolume();
state display;
}
}
}
//state for display size
state display
{
state_entry()
{
llMessageLinked(LINK_ALL_CHILDREN,0,"start","");
llSleep(4.0);
primsize();
}
link_message(integer sender_number, integer number, string message, key id)
{
if (message=="reset")
reset();
}
}
//end of script

Sunday, July 11, 2010

Saturday, July 10, 2010

OpenSim Interface


User Management: http://s1.osvr.net/opensim/users

Click "Create User" in the top left to create a new user.
To edit a user, click the pencil icon.
To delete, click the red icon.
If a user is broken or can't login, click the icon

The same goes for adding and editing regions on the Region Configuration page http://s1.osvr.net/opensim/regionconfigs