Jump to content

Rolig Loon

Resident
  • Posts

    46,374
  • Joined

  • Days Won

    5

Everything posted by Rolig Loon

  1. It isn't much easier to get a job that pays well in SL than it is to get one in RL. You need to have a skill of some kind, like scripting, or building, or being a DJ. If you don't have some background in a related area in RL, it takes a while to learn a skill in SL well enough to make it pay. After all, there are lot of other people who already have a head start on you. Don't get discouraged, though. Just take time to learn. Meanwhile, there are so many good quality free things in SL that you really don't need much L$ to enjoy yourself.
  2. I rarely change my shape any more. After four years, I think I finally have it right. I do swap skins sometimes, maybe three or four times a month, depending on what I'm doing. Outfits are different, though, I can sometimes change clothes and hair four or five times a day. I like to mix items, just the way I do in RL, so I almost never save a whole outfit -- just change one blouse or skirt or pair of shoes for another.
  3. It compiles in the LSLEditor, so it will run in world on the main grid. There may be runtime errors at that point, of course, but you aren't that far yet.
  4. Make a backup copy of your object first. Then stand on a pose stand, so that you are immobilized, and then select the object in Edit. Click the "Edit Linked Parts" box and select just one prim to adjust (usually the largest one or one that is an obvious "anchor" like a waistband or the main prim in a belt). Unclick the "Stretch both sides" box and then select the stretch option and make your adjustments very gently, moving your camera around so that you can check your work from all angles. Rinse and repeat until done. It's good practice and really the only way to guarantee that you have the best fit to your own shape. No resizer script knows what your body looks like, after all.
  5. Those look like compilation error emssages, but it compiles for me with no problems at all. As others have said, though, those are not standard error messages, so you are evidently doing something out of the ordinary.
  6. I was trying to do this same thing last month. I managed to make a pretty nice seat that looks like it has a hydraulic lift under it, using llVolumeDetect and physics to get it to move smoothly up and down. My goal, like yours, was actually to force the seat underground, but I couldn't find a way to do it with the av on the seat. I suspect that it can't be done. Av's just don't like to be under sod.
  7. This script will let you make a shadow that follows the movement of the sun and adjusts its length to the sun's elevation. It could be handy if you want to create a realistic shadow around something like a fence post. The length of the shadow is limited by the maximum dimension allowed for prims (no megaprims, since you cannot change their dimensions), so it is only realistic for reasonably short objects (no flagpoles). Still, there are plenty of short objects that deserve a dynamic shadow. To use, rez a box prim, flatten it along its Z axis and make its Y dimension approximately the width of the target object that it will be a shadow for. Place the name of your target object in the gName variable in this script and drop the script into your prim. Touch the prim to reset the script. Your prim will position itself at the base of the target object and adjust its rotation and length according to the position of the sun. Thereafter, it will track the sun, disappearing at dusk and reappearing at dawn. // Shadow -- Rolig Loon -- March 2011 // This script controls a shadow that tracks the sun's position (azimuth) and adjusts its length to the sun's elevation // Rez a prim that is flattened on Z and is as wide (Y axis) as the target object you want to shadow. // Set the gNAME parameter (below) to the name of the target object being shadowed. // Set your shadow prim within 10m of the target object and touch it to reset this script. // The shadow prim will position itself at the base of the target object and will adjust its own length (X) and texture. string gNAME = "Pole"; // The name of your target (shadowed) object goes here. float gHeight; // The target object's height (will be measured by this script). GoSun() { vector Sun = llGetSunDirection(); if (Sun.z > 0.0) //It's daytime....... { llSetAlpha(0.5,ALL_SIDES); // Track the sun's azimuth llSetLocalRot(llGetLocalRot() * llRotBetween( <-1.0,0.0,0.0> *llGetLocalRot(), <Sun.x,Sun.y,0.0> )); //Calculate the length of the shadow float SunAngle = llRot2Angle(llRotBetween(<-1.0,0.0,0.0>*llGetLocalRot(), <Sun.x,0.0,Sun.z> )); vector MySize = llGetScale(); //And set its length llSetScale(<2*gHeight/llSin(SunAngle),MySize.y,MySize.z>); } else //It's night ..... { llSetAlpha(0.0,ALL_SIDES); } } default { state_entry() { llSetTexture("5c50e129-0b07-3834-0748-f1df74234a65",ALL_SIDES); //All transparent llSetPrimitiveParams([PRIM_TEXTURE,0,"21b98d3c-617c-c1b7-8165-d1bb67ec9dfb",<0.5,0.8,0.0>,ZERO_VECTOR,0.0]); //Shadow on face 0 llSetPrimitiveParams([PRIM_TYPE,PRIM_TYPE_BOX,PRIM_HOLE_DEFAULT,<0.125,0.625,0.0>,0.0,ZERO_VECTOR,<1.0,1.0,0.0>,ZERO_VECTOR]); llSensor(gNAME,"",PASSIVE,10.0,PI); llSetTimerEvent(120.0); //Check sun every 2 minutes } touch_start(integer num) { if(llDetectedKey(0) == llGetOwner()) { llResetScript(); } } timer() { GoSun(); } sensor(integer num) { //How tall is the target object? list Box = llGetBoundingBox(llDetectedKey(0)); vector Low = llList2Vector(Box,0); vector High = llList2Vector(Box,1); gHeight = High.z - Low.z; //Move shadow to the base of the target object vector Pos = llDetectedPos(0); llSetPos(<Pos.x,Pos.y,Pos.z-0.5*gHeight>); GoSun(); } no_sensor() { llOwnerSay("I can't find the object named " + gNAME + ". Check to be sure that its name is entered properly in this script and that it is within 10m."); } }
  8. We're all a little jittery at times. It's the coffee. There are tradeoffs in any script. You could reduce the jitteriness a bit by putting that llSetRot business in the sensor event, but that would really add a lot of work for the sim's servers to do, and add to overall lag. In the end, you have to ask yourself how much it's worth to you. Yes, followers are usually made physical because that's a reliable way to get smooth motion.
  9. That's because the follower is physical and the script is allowing rotation on the Z axis. If it bumps into anything (like the ground), it will start spinning. You could set STATUS_ROTATE_Z to FALSE, or you could add a bit of code to force the follower to match your own rotation periodically. Off the top of my head, you might try putting llSetTimerEvent(3.0); in the setup function at the top of the script and then adding a timer event that looks something like this in the body of the script: timer() { if(llGetAgentInfo(llGetOwner()) != AGENT_WALKING) { llSetStatus(STATUS_PHYSICS,FALSE); llSetRot(gAgent_Rot); llSetStatus(STATUS_PHYSICS,TRUE); } } To make this work, you will also have to add a line that says rotation gAgent_Rot; at the very top of your script, so that it's a global variable, and then also add a line that says gAgent_Rot = llDetectedRot(0); in the sensor event. The net effect should be that the script checks every 3 seconds to see if you are walking. If not, it makes the follower temporarily nonphysical and matches its rotation to yours, then makes it physical again.
  10. Rolig Loon

    inventory

    When you have Inventory open, you can also select the "Recent" tab to see any items that have been added to your inventory since you logged in. When you are just beginning in SL, this list will not look much diferent from what you see when you list your entire inventory. As you start to accumulate things, though, it can be very handy to isolate the things that you just added. Then, before you log off again, rename those items or move them to folders that seem more logical in your own filing system.
  11. My best guess is that something has changed locally. If you're on wireless, maybe someone is eating a lot of your bandwidth. Or maybe you are running something in the background that's eating system resources (an antivirus scan or a routine Microsoft update). Maybe you just need to defrag your hard drive. If it's not that sort of thing, the next place to look is on your av. Check to see what your current script count is. If you are carrying around more than 50 scripts, you can be generating lag for yourself and others around you, especially if many of them are compiled in Mono. It's not likely that the lag you're seeing has anything to do with LL's servers or everyone else would be experiencing it too.
  12. It looks as if this script is already designed to do what you want. It can be triggered in either a touch_start event or by commands received through a linked mesage. I think all you need to do is remove the touch_start event and then write a second script to control the pet's movement. When it starts to move, send a llMessageLinked to this script to start the animation. Send a second one to stop the animation when the pet stops moving.
  13. It all depends on your sales volume. If you are making dozens of sales an hour, a flood of e-mails will be very annoying. A database is a much better choice. However, if you get a couple of sales a day like Dora and me, a private database is overkill. Your transaction history with LL is more than adequate for record-keeping. A nice heads-up e-mail is just enough to remind you to look in the transaction log. Or, as Dora says, you can easily do without notification at all and be pleasantly surprised when you see your balance increase. :smileyhappy:
  14. Il y a aussi quelques lieus dans SL ou l'un peut trouver ces informations. Essayez, par example, le College of Scripting, Music and Science.
  15. I'm finding the Knowledge Base almost impossible to navigate. Its Search function doesn't seem to be able to find things that were easily accessible before. For example, I had a request this morning for a tutorial or other information about how to use the in-world Search function. I tried typing in keywords "Search", "Using Search", ""Search in world", "How to Search" and several other variants. None of the suggestions I got pointed to anything remotely relevant. I expected it to point to Torley's videos and to KB pages that I know were there before. What's up?
  16. You can also always consult the SLED Events calendar, which lists events scheduled by educators across SL.
  17. Pete, are you sure that llStringTrim will remove a line feed that is typed in chat as \n? Won't it see \n as a literal string instead of an actual line feed? (I can't get in world right now to test, so I'm just asking.)
  18. If you could always predict that people were going to type \n and that it was always at the end of the message , then you could just write something like integer idx = llSubStringIndex(data,"\n"); if (~idx){ data = llGetSubString(data,0,idx-1); } That would take out everything following the first instance of "\n". If \n is somewhere else in the string, though, you'd risk losing stuff after it. It would be safer to make multiple passes on the line, deleting one instance of \n on each pass.
  19. Not quite. Regardless of what file format you use on your local machine (TGA, PNG, BMP, JPG), your file is converted to JPEG2000 format when it's uploaded. Even if it isn't also resized at that point, the file conversion results in compression, so you do lose some information. That said, I'd be surprised if you could usually see much difference in clarity between an image that was uploaded at 768x768 and one that was uploaded at 512x512, since both will end up as 512x512 JPEG2000 images. (That is, assuming that your 512x512 was originally created as a larger image and then downsized on your own machine, so we're comparing images with similar sizing histories.) Generally speaking, it's safer to make any size adjustments yourself rather than trusting SL to do it for you, especially if your image aspect ratio isn't in powers of 2, so I'd always prefer to upload as 512x512 myself.
  20. When you listen to an audio stream, you're using a fair amount of bandwidth. If SL needs some of that bandwidth for transferring information between your client and its servers, the audio stream will cut out for a while. For example, you'll notice that music disappears momentarily when you change outfits, because your client needs to bake the new outfit onto your avatar and then upload the updated graphics files so that they are visible in world. The same thing will happen sometimes if you have other software (like your e-mail program) demanding bandwidth, or if you are using a wifi connection in a busy public area.
  21. Alt + mouse is your friend. As you experiment and get used to using it, try holding down the CTRL or Shift keys as well as the Alt key while you move your mouse. You will be able to pan as well as rotate your view. Add the mouse wheel for zoom and you can see anywhere, from any angle you want. Not only that, but you'll be able to get rid of some ugly screen clutter by closing the camera control window forever. :smileywink:
  22. That's the way it ought to be in all of the forums. I'm finding it very difficult to see when something has been added to a thread that has been quiet for a day or more. I don't care to have my e-mail bombarded with messages every time anyone posts a reply, so I'm never going to turn that feature on, but it would be nice to be able to see at a glance when a thread has become active. Just float ALL threads in ALL forums to the top of the list when a new post is added.
  23. Lindens aren't likely to see requests like this here in a resident forum. The best place to make suggestions about new functions is in a JIRA or in office hours.
  24. Sometimes you need a pose stand with more than one pose. Perhaps you need a versatile modeling stand, or a dance pad. This script lets you cycle through as many animations or poses as you load into the one-prim stand, using either touch or chat commands. See internal comments for the available commands. //Multipose Stand -- Rolig Loon -- 7/09/09 -- Updated March 2011 // Place this script and your animations in a prim pose stand. // Touch pose stand to select the next animation in inventory or // type chat commands in channel 47. // Type /47 HELP to see a list of chat commands. integer ThisAnim = 0; integer NumAnims = 0; string CurrAnim = "turn_180"; string HoldName; key agent; default { on_rez(integer start_param) { llResetScript(); } state_entry() { HoldName = llGetObjectName(); llSetAlpha(1.0,ALL_SIDES); llSetObjectDesc("Chat commands on channel 47"); NumAnims = llGetInventoryNumber(INVENTORY_ANIMATION); llListen(47,"","",""); llSetSitText( "Stand" ); llSitTarget( <0.00, 0.00, 0.80>, ZERO_ROTATION ); } listen(integer channel, string thing, key id, string message) { if(id == agent) { if (llToUpper(message) == "ON") // Make the stand visible { llSetAlpha(1.0,ALL_SIDES); } else if (llToUpper(message) == "OFF") // Make ths stand invisible { llSetAlpha(0.0,ALL_SIDES); } else if (llToUpper(message) == "LIST") // LIST all available animations by number { integer j; for (j=0;j<= NumAnims-1;j=j+5) { llInstantMessage(id,"/me " + (string)(j+1) + " = " + llGetInventoryName(INVENTORY_ANIMATION,j) +" \n" + (string)(j+2) + " = " + llGetInventoryName(INVENTORY_ANIMATION,j+1) +" \n" + (string)(j+3) + " = " + llGetInventoryName(INVENTORY_ANIMATION,j+2) +" \n" + (string)(j+4) + " = " + llGetInventoryName(INVENTORY_ANIMATION,j+3) +" \n" + (string)(j+5) + " = " + llGetInventoryName(INVENTORY_ANIMATION,j+4)); } } else if (llToUpper(message) == "SHOW") //SHOW the currently active animation in chat { llInstantMessage(id,"/me Current Animation " + (string)ThisAnim + " = " + CurrAnim); } else if (llToUpper(message) == "NOTE") { llGiveInventory(id,"MultiPose Instructions"); // Give instruction notecard } else if (llToUpper(message) == "HELP") { llInstantMessage(id,"/me Left click the pose stand to advance poses or use chat commands on channel 47:"); llInstantMessage(id,"/me LIST produces a list of available poses with key numbers.\n" + " Typing a key number advances immediately to that pose in the LIST.\n" + " SHOW displays the key number and name of the current animation.\n" + " ON makes the pose stand visible.\n" + " OFF makes the pose stand invisible.\n" + " NOTE offers instructions on a notecard. \n" + " HELP produces this message."); } else { ThisAnim = (integer)message -1; //Listen for an optional direct command to apply animation #message if ((integer)message > NumAnims | (integer)message <= 0) { llInstantMessage(id,"/me Please type a number between 1 and " + (string)(NumAnims)); ThisAnim = 0; } else { llStopAnimation(CurrAnim); CurrAnim = llGetInventoryName(INVENTORY_ANIMATION, ThisAnim%NumAnims); llStartAnimation(CurrAnim); llInstantMessage(id,"/me " +(string)(ThisAnim+1) + " = " + CurrAnim); ++ThisAnim; ThisAnim = ThisAnim%NumAnims; } } } } touch_start(integer num_detected) { if (llDetectedKey(0) == agent) { llStopAnimation(CurrAnim); if(NumAnims != 0) { CurrAnim = llGetInventoryName(INVENTORY_ANIMATION, ThisAnim%NumAnims); llStartAnimation(CurrAnim); llInstantMessage(llDetectedKey(0),"/me " + (string)(ThisAnim+1) + " = " + CurrAnim); ++ThisAnim; ThisAnim = ThisAnim%NumAnims; } else { llStartAnimation("turn_180"); // The default if there are no stored animations is the SL Appearance stance } } } changed(integer change) { if (change & CHANGED_LINK) { agent = llAvatarOnSitTarget(); if (agent) { llInstantMessage(agent,"Click the pad to start and advance animations. Type \"/47 help\" for chat commands."); llRequestPermissions(agent,PERMISSION_TRIGGER_ANIMATION); } else { if ( llGetPermissions() == PERMISSION_TRIGGER_ANIMATION) { llStopAnimation(CurrAnim); llSetObjectName(HoldName); } llResetScript(); } } else if (change & CHANGED_INVENTORY) { llResetScript(); } } run_time_permissions(integer parm) { if(parm == PERMISSION_TRIGGER_ANIMATION) { llStopAnimation("sit"); llSetAlpha(0.0,ALL_SIDES); //Make the pose stand invisible llSetObjectName(""); llStartAnimation(CurrAnim); } } }
×
×
  • Create New...