Jump to content

Ruthven Willenov

  • Content Count

  • Joined

  • Last visited

Community Reputation

122 Excellent

1 Follower

About Ruthven Willenov

  • Rank
    Advanced Member

Recent Profile Visitors

997 profile views
  1. I thought attachments (even huds) couldn't be opened that way? I will have to test that
  2. With advanced lighting and shadows from projectors, you can create a flashing light effect. In this example I have just a plain white circle as the projector texture. In front of the light (facing the light source) I have a prim with a texture animation that flickers between solid and full alpha. https://gyazo.com/fea61f7438f44b3b5b72bf1ea7b9c2eb Can also be used without a projector texture or a wider FOV on the projector to create a flickering light around the whole room
  3. I don't believe that's possible. I think objects lose debit perms when taken back into inventory, and debit perms is how you'd need to do it
  4. Put /me back at the beginning of the string, like: llSay(0, "/me"+ llGetDisplayName(llDetectedKey(0)) + "kisses " + owner + "'s nose. ");
  5. Not in world to check, but calling llGetRot() from an attachment will get the Avatar's rotation, so say to get 1 meter in front of the avatar would be Avpos = llGetPos() Avrot = llGetRot() Offset = avpos+<1.0,0.0,0.0>*avrot
  6. I have a feeling that would be too much of a privacy issue
  7. maybe this? http://wiki.secondlife.com/wiki/Attach#Caveats When detaching an object, llGetAttached() returns 0, but the same happens when dropping an object from an attachment point to the ground. No other indicative event is triggered in the latter case; in particular, the on_rez event is not triggered for attachment drops. If you need to distinguish a drop from a detach, a possible hack is to check llGetObjectPrimCount(llGetKey()). If it's zero, it can be assumed that the object is being detached; otherwise, that it is being dropped.
  8. in the on rez event, use llGetAttached to get the attachment point. if it's not attached it will be 0 default { attach(key id) { llOwnerSay("[ATTACH]"); if(id != NULL_KEY) // Prevent the next bit to run upon detach. { // Do stuff } } on_rez(integer s) { if(llGetAttached() != 0)return; llOwnerSay("[ON REZ]"); // Do different stuff. } }
  9. Try changing the negative values to positive? Negative values in the texture edit window will flip it, so that may be why it's doing it here as well. I never really mess with the zoom feature of this function, and not in world to look at it.
  10. I would also suggest a numbered list, with just numbers for the buttons. using pantera's script, i added a third list for numbered buttons, and when creating the name list, i had it prepend the name with the number list gNames; list gKeys; list gButtons; key gVictim; integer gListenerHandle; stopListener() { llSetTimerEvent(0); llListenRemove(gListenerHandle); } default { state_entry() { stopListener(); llSetText("touch me", <1,0,0>, 1.0); llTargetOmega(<0, 0, 0>, 0, 0); } on_rez(integer start_param) { llResetScript(); } no_sensor() { llOwnerSay("cant find targets"); } touch_start(integer nd) { if (llDetectedKey(0) == llGetOwner()) { llSensor("", NULL_KEY, AGENT, 512, PI); } } sensor(integer num) { integer i; gNames = []; gKeys = []; gButtons = []; key ownerKey = llGetOwner(); if (num > 12) { num = 12; } for (i = 0; i < num; i++) { gNames = gNames + [(string)i + ": " +llBase64ToString(llGetSubString(llStringToBase64(llDetectedName(i)), 0, 31))]; gKeys = gKeys + llDetectedKey(i); gButtons = gButtons + [(string)(i+1)]; } stopListener(); gListenerHandle = llListen(6666, "", ownerKey, ""); llDialog(ownerKey, llDumpList2String(["Select your target"]+gNames,"\n"), gButtons, 6666); llSetTimerEvent(60); } timer() { stopListener(); } listen(integer channel, string name, key id, string message) { stopListener(); gVictim = llList2Key(gKeys, (integer)message-1); state stalking; } } state stalking { state_entry() { stopListener(); llSetText("", <0, 0, 0>, 1.0); llSetTimerEvent(0.1); llSetMemoryLimit(llGetUsedMemory() + 5120); } timer() { vector position = llList2Vector(llGetObjectDetails(gVictim, [OBJECT_POS]), 0); if (position != ZERO_VECTOR) { position = position + <0, 0, -2>; if (position.z < 4096) { llSetRegionPos(position); } integer maxAttemptsPerMove = 25; while (llGetPos() != position && maxAttemptsPerMove > 0) { --maxAttemptsPerMove; llSetLinkPrimitiveParamsFast(LINK_THIS, [PRIM_POSITION, position]); } } } }
  11. It has nothing to do with scripting or the object's inventory. It's a rigged mesh, and a child link of the HUD. As Wulfie explained above, other avatars won't see it, as it's attached to your HUD. Its the rigging that forces it to be placed in your hand.
  12. The bag is probably rigged mesh, and linked to the HUD. Try editing the HUD, and the bag will probably highlight with it.
  13. I see that now, odd, i was able to do it before. Maybe they "fixed" the viewer code to not let dialogs trigger gestures. I had a bingo hud with a "Bingo" button that would pop up a dialog with /bingo to trigger a gesture i had to say "BINGO!" and play a sound. tried it again after not using it for a while, and you are right, it didn't trigger it now, and i checked to make sure the gesture is still active
  14. Well you can, sorta. As long as the llDialog is set to channel 0, and the button contains text that will trigger a gesture EDIT: Nevermind, it worked for me before, maybe the viewer code changed to ignore llDialog in relation to gestures
  15. If for any reason the seated avatar doesn't own the vehicle, you could get an agent list, and run a loop using llGetObjectDetails(agent,[OBJECT_ROOT]) to see if their root matches the detected object: key agentonobject(key obj, list agents) { integer len = llGetListLength(agents); integer i; for(i = 0; i < len; i++) { key agent = llList2Key(agents,i); list details = llGetObjectDetails(agent,[OBJECT_ROOT]); key root = llList2Key(details,0); if(root == obj)return agent; } return NULL_KEY; } default { state_entry() { llVolumeDetect(TRUE); } collision_start(integer n) { key obj = llDetectedKey(0); if(llDetectedType(0) & AGENT)//detected a non-seated avatar { llSay(0, llKey2Name(obj) + " walked or ran through me"); } else//an object passed through { key agent = agentonobject(obj,llGetAgentList(AGENT_LIST_PARCEL,[])); if(agent) { llSay(0, llKey2Name(agent) + " is seated on an object that passed through me"); } else { llSay(0,"No one was seated on the object that passed through me"); } } } }
  • Create New...