Jump to content


  • Posts

  • Joined

  • Last visited

Everything posted by Tattooshop

  1. Thank you! It turned out that my menu was using a random channel (llFrand) every time! I feel stupid.
  2. Hello! There is a basic menu script. And it works fine for one object. But is it possible to do something so that several identical non-linked objects with the same menu script work synchronously and perform the same action, regardless of which one I clicked on and their number? Just as if they were working on the same channel? 🤔
  3. Hello there! Many many many thanks! The script is awesome! Everything works! 👍
  4. Thanks for the answer. It is not entirely clear how to do this and how to add objects with specific names to these lists?
  5. Hello there! I am trying to create an unpacker where one could use a button to select which objects to give away. For example, I have three buttons on the HUD, and button1 gives out objects named object1a, object1b, and so on. I just sketched something here, but I'm not sure if I'm on the right track. string button = llGetLinkName(llDetectedLinkNumber(0)); if (button == "button1") { llGiveInventoryList(llGetOwner(), llGetObjectName(object1a), InvenList); llGiveInventoryList(llGetOwner(), llGetObjectName(object1b), InvenList); } I have an unpacker, please help me add such a filter. default { touch_start(integer total_number) { integer x; for(x = 0; x < total_number; x++) { if(llDetectedKey(x) == llGetOwner()) { string InvenName; integer InvenNumber = llGetInventoryNumber(INVENTORY_ALL); list InvenList = []; integer y; for(y = 0; y < InvenNumber; y++) { InvenName = llGetInventoryName(INVENTORY_ALL, y); if(InvenName != llGetScriptName()) InvenList += [InvenName]; } llGiveInventoryList(llGetOwner(), llGetObjectName(), InvenList); } } } }
  6. Thank you so much! You helped me a lot! 👍
  7. Hello! Thank you! Oh, me no, but my friend does. Could you please tell a little more how to do this? I tried to use the area search, but did not seem to find there how to massively stop scripts, only script info and edit objects one by one... Thank you!
  8. Hello there! Can I somehow stop or delete all scripts in the parcel / sim? ( not one by one of course 🙂 )
  9. Hello! How to simulate such an effect using texture animation? It will be like a neon sign and the glass will fill from mid to full. And then mid to full again, and so on. On a cycle, possibly from a timer. And the liquid will be partially white texture. I am considering using this llSetLinkTextureAnim(LINK_THIS, ANIM_ON | SMOOTH | LOOP , ALL_SIDES, 1, 1, 1, 1, 1); but how do I reset back to the middle of a full glass?
  10. Thanks again to everyone who took part and pushed me towards the goal! You are the best! 👍
  11. Thank you so much! It works! I am very grateful to you! You have helped not only me, but also my friend, he is making a sim dedicated to Egypt, so if this sim appears one day, you contributed to its creation! 👍 list gState = [0, 0, 0, 0, 0, 0, 0, 0, 0]; default { state_entry() { llSetTimerEvent(0.0); } collision_start(integer num) { integer ii; string plate; if (llListFindList(gState, [1]) < 0) // we've only just begun { llSetTimerEvent(30.0); } for (ii = 0; ii < num; ii++) { plate = llGetLinkName(llDetectedLinkNumber(ii)); if (plate == "1") // plate name check { // do something llSay(0, "plate number 1 pressed"); gState = llListReplaceList(gState, [1], 0, 0); } ///---------------------------------------------------------------------- if (plate == "9") { llSay(0, "plate number 9 pressed"); gState = llListReplaceList(gState, [1], 8, 8); } //add in all the other plates here in a similar manner } if (llListFindList(gState, [0]) < 0) { // do MAIN_ACTION(); llSetTimerEvent(0.0); llSay(0, "all plates are pressed"); llResetScript(); } } timer() { llSetTimerEvent(0.0); llSay(0, "Bad luck, move faster next time"); llResetScript(); // and reset the script to have another go } }
  12. Thanks everyone for your great suggestions! Sorry for deviating from the ways you suggested, but how to implement this option and is it possible: each plate transmits a signal for the glow of a symbol / prim, there are 9 such symbols, respectively, but is it possible to simply count the number of glowing primitives on each collision, and if there are 9, then the main condition is fulfilled?
  13. I also ran the test for only one object and failed. default { collision_start(integer num) { list gState = [0]; integer ii; integer whichChild; for (ii = 0; ii < num; ii++) { whichChild = llDetectedLinkNumber(ii); } if (llListFindList(gState, [0]) == -1) { llSay(0, "Woohoo!"); } } }
  14. Thank you so much! I decided to try your method, but again I couldn't. default { state_entry() { //llMinEventDelay(0.2); } collision_start(integer num) { list gState = [0, 0, 0, 0, 0, 0, 0, 0, 0]; integer ii; integer whichChild; for (ii = 0; ii < num; ii++) { whichChild = llDetectedLinkNumber(ii); // and update the list if it's a plate } // now see how many of the list are still unset if (llListFindList(gState, [0]) == -1) { // there are no un-collided plates, so let's do stuff llSay(0, "all plates are pressed"); } string plate = llGetLinkName(llDetectedLinkNumber(0)); if (plate == "1") // plate name check { // do something llSay(0, "plate number 1 pressed"); } ///------------------------------------------------------------- if (plate == "9") { llSay(0, "plate number 9 pressed"); } } }
  15. Many thanks! This is what I got, but for some reason the main action occurs when I press any plate. Where did I go wrong? 🤔 default { state_entry() { llMinEventDelay(0.2); } collision_start(integer num) { string plate = llGetLinkName(llDetectedLinkNumber(0)); list gState = [0,0,0,0,0,0,0,0,0]; if (plate == "1") // plate name check { // do something llSay(0, "plate number 1 pressed"); gState = llListReplaceList(gState,[1],1,1); } ///......................................................... if (plate == "7") { llSay(0, "plate number 7 pressed"); gState = llListReplaceList(gState,[1],7,7); } if (plate == "8") { llSay(0, "plate number 8 pressed"); gState = llListReplaceList(gState,[1],8,8); } if (plate == "9") { llSay(0, "plate number 9 pressed"); gState = llListReplaceList(gState,[1],9,9); } if(gState == [1,1,1,1,1,1,1,1,1]) { // do MAIN_ACTION(); llSay(0, "all plates are pressed"); } } }
  16. Thank you very much! This is just how I see it. There will be 9 pressure plates, and it does not matter in what order they are pressed and for how long. If the plate is pressed once, the plate remains activated, a specific sub-action associated with the plate occurs, which is counted by a counter, and as soon as 9 such unique pressures occur, the main action is triggered. ( It may be needed to reset the counter until next time. ) I assume I need to use llGetLinkName in a collision event and then build a chain of IF checks for each pressure plate name and activate sub-actions, but how I can add "counter" if all plates are stepped is not clear. I only need to add a unique steps counter somehow... or what?
  17. Hello there! 😉 There is a linkset of several pressure plates and I need to activate some main action only when all the pressure plates are activated (stepped on). Plates react to collisions. Each plate has its own original name, if that makes sense in this case. What is the best way to do this? Addition: when you step on each plate, it activates a small secondary action... Thanks for any help!
  18. Rotating the sliced cylinder (left) and Quistessa's script (works like magic!) 👍
  19. I moved global variables to the beginning of the script. In order to educate myself, I would still like to know what is wrong here. vector rotate = < 0, 0, 10 > ; // Global Variables: vector Center_of_Rotation = < 73.66853, 145.58430, 3017.25000 > ; // in local coords, or for global just modify llSLPPF a little. vector Offset = < -1.24544, -0.06297, 0.00000 > -Center_of_Rotation; rotation g_rot; // set this to different rotatitons, or multiply it a marginal ammount on a timer. rotate *= DEG_TO_RAD; g_rot = llEuler2Rot(rotate); default { state_entry() { llSetTimerEvent(1); } timer() { //... //on a timer or whatever: llSetLinkPrimitiveParamsFast(2, [PRIM_POS_LOCAL, Center_of_Rotation + Offset * g_rot, PRIM_ROT_LOCAL, g_rot]); } }
  20. Yes, thanks, most likely I will have to do this, or use a cylinder sliced off in the middle, if it's not a mesh but prim.
  21. There was a feeling that I did something stupid, thanks!
  • Create New...