Jump to content

Rubberene

Resident
  • Posts

    27
  • Joined

  • Last visited

Posts posted by Rubberene

  1. I have a product I sell which consists of a HUD and an attachment. Two scripts. 0.06069 ms script time.  I have sold nearly 700 of them since I first listed them last May. The vast majority of people who buy them have no trouble, but occasionally I get a message from someone who says it "stopped working."  I think so far I have gotten this message about six times.

    Inevitably I find that they are wearing a ton or three of scripts, for example:

    [12:39] Script info: '*Anonymous* Resident': [336/376] running scripts, 20988 KB allowed memory size limit, 1.193797 ms of CPU time consumed.

    In the case of this person, during the conversation I suggested several times that they take off some scripts, but they ignored this and insisted all they needed was a replacement "that worked." Furthermore, they insisted I give replacements to three of their friends, apparently just in case. I did all this, of course, but told them if they kept wearing so many scripts, the new ones would probably stop working for them before long. So far they are apparently happy. Fingers crossed.

    I know from dealing with some of the others that when they get rid of all the unnecessary scripts, my product "magically" starts working again. What I would like to know, though, is why this happens. Is there some priority given to scripts based on script time, or something else? I think if I understood the reason this happens, I might be able to explain it to my customers in a way that would convince them that so many scripts are not a good idea. All the other reasons a gajillion scripts are a bad idea aside, of course. :)

     

     

  2. I am trying to make the textures rotate on sides 0,1&3 of a cube. I put the following script in it to do so:

    default
    {
        state_entry()
        {
             llSetTextureAnim(ANIM_ON | SMOOTH | ROTATE | LOOP, 0,1,1,0, TWO_PI, -PI);
             llSetTextureAnim(ANIM_ON | SMOOTH | ROTATE | LOOP, 1,1,1,0, TWO_PI, -PI);
             llSetTextureAnim(ANIM_ON | SMOOTH | ROTATE | LOOP, 3,1,1,0, TWO_PI, -PI);
    
        }
    
      
    }

     Result: only side 3 rotates. If I comment out the call for side 3, side 1 rotates, and so on. What am I doing wrong?

  3. When speaking of syntax, I meant the syntax required to get the script to compile and run. I realize it is important to understand the logic of what is going on, which is why I asked about how counters function. Thanks for answering that, I now understand at least a tiny bit better. 

    From what you posted, I came up with this: 

    default{    state_entry()    {         llSetTimerEvent(10);    }   timer()   {    gCount = (++gCount)%4;    llPlaySound(llList2String(["One","Two","Three","Four"],gCount),1.0);    if (gCount == 1)    {        llStartAnimation("Squinty Eye");    }    }

     However, I think I still need to put in a list for the llList2String to reference, right? In any event, this will not compile. I see now how it is supposed to work, and how to make it work for me, but I am still missing one key line of code, it seems.

  4. Yes, since the last bit of code you posted I have played with it, and I have discovered that llSleep is not the best of options, as the internal animations for facial expressions I am trying to use will not persist through the sleep phase, and in any event are very short. It seems in order to get an extended open mouth anim I will have to trigger "express_open_mouth" repeatedly, Unless you know of a better way to do this?

    Thanks for posting the timer info, but I am afraid it is just plain beyond me at this point, I looked up llList2String to try to puzzle it out, but was unable to come up with the proper syntax to make the script compile and run, At my level I feel lucky to have guessed correctly where to plug in the last code snippet you posted. 

    Here is what I have so far that works but has the trouble with llSleep:

    default{    state_entry()    {         llSetTimerEvent(10);    }   timer()    {        if (llGetPermissions() & PERMISSION_TRIGGER_ANIMATION){               llPlaySound("ed124764-705d-d497-167a-182cd9fa2e6c",1);        llSleep(10);        llStartAnimation("express_open_mouth");        llPlaySound("ed124764-705d-d497-167a-182cd9fa2e6c",1);        llStartAnimation("express_open_mouth");        llSleep(10);        llStartAnimation("express_open_mouth");        llPlaySound("ed124764-705d-d497-167a-182cd9fa2e6c",1);        llSleep(10);        llStartAnimation ("express_open_mouth");        llPlaySound("ed124764-705d-d497-167a-182cd9fa2e6c",1);        llSleep(10);//Etc.       }else{    llRequestPermissions(llGetOwner(),PERMISSION_TRIGGER_ANIMATION);}}}

    This is shortened considerably; the actual script has 29 llPlaySound calls in it. (And of course the actual UUID's are all different.) 

     

    As I am using UUID's rather than sounds from the prim's inventory, would I put those in the list llList2String references?

    Also, I must admit the way timers function has me baffled at this point. I see timer() in your code above, and gCount seems to keep track of the current place in the sequence, but what tells the script to wait until sound One is done before triggering sound Two? The timer, obviously, but I mean how? (EDIT) Oh, it's in the Indexes, I guess, but that whole business is rather opaque to me just now.

    Also, when using UUID's, is this the best (meaning easiest) way to do this, or can I just put the UUID's in sequence after the llPlaySound call?

    Thanks for all your patience with a scripting noob. ;)

  5. Hmm. The script I posted here is just an example, not the actual full-blown script. What I want to do is play facial expressions in sequence with the sounds, which is why I put the open mouth one where I did, between two sounds. I am not sure I understand, but it sounds like you are telling me that "the" animation would trigger just once, as soon as the permission is granted. If this is the case, this will not work for my application. What I was hoping for was a simple way for permission to be granted when the script was turned on, and then the loop with the sounds and anims could just play until it was stopped.

    And yes, a switch is a switch, but in this case when I stop and then restart the sequence by changing script states, the sequence starts from where it left off, which is what I want it to do.rather than start from the beginning, 

  6. I want it to start when the script's state is set to TRUE, sorry if that wasn't clear. The script with only the sounds in it already works the way I want, I just need it to be able to also trigger anims. No touch events. And I'm not sure what you mean about the avatar leaving the sim; this is for an attachment. 

  7. I've done up a script that loops a sequence of sounds in an attachment:

    default
    {
        state_entry()
        {
             llSetTimerEvent(1);
        }
    
        timer()
        {
            llPlaySound("One",1);
            llSleep(10);
            llPlaySound("Two",1);
            llSleep(10);
            llPlaySound("Three",1);
            llSleep(10);
            llPlaySound("Four",1);
            llSleep(10);
            
        }
    }

     I want to have it also start and stop animations, but am having trouble with the whole permission to trigger animations thing. This is where I'm at so far, but obviously it doesn't work:

    default
    {
        state_entry()
     {
            llRequestPermissions(llDetectedKey(0), PERMISSION_TRIGGER_ANIMATION);
        }
        run_time_permissions(integer perm)
        {
            if (perm & PERMISSION_TRIGGER_ANIMATION)
            {
                
           
                llSetTimerEvent(1.0);
            }
            }
        timer()
        {
            llPlaySound("One",1);
            llSleep(10);
            llStartAnimation("express_open_mouth");
            llPlaySound("Two",1);
            llSleep(10);
            llPlaySound("Three",1);
            llSleep(10);
            llPlaySound("Four",1);
            llSleep(10);
            
            
            }  }    

     I know my feeble attempt probably looks like a joke to a real scripter, but I would truly appreciate it if someone would point me in the right direction, since I seem to be facing the wrong way at this point. :) 

    I need the sequence to loop indefinitely until another script sets this script's state to FALSE. Which so far works, as long as I don't go messing with animations. ;)

  8. After tracking down a zip file for internal animations, I downloaded and opened it, and discovered that some of them are missing, like express_open_mouth. No big deal, I thought, I'll just use the listed UUID. That got me an error message that the animation was not found.

    Have some of the facial animations been deprecated, or am I just missing something?

  9. I've googled this, but since it must be a fairly common thing, I must not be searching the right terms. This is for a product, and I need to ensure that if there are two avatars at the same place with the same item that their attachments won't listen to each other's HUDs. 

    To state the obvious, with the two example scripts, this is exactly what happens, If I use "llListen( 3, "", llGetOwner(), "" );", then, of course, the attachment won't listen to the HUD. 

     

    HUD Script:

    list buttons = ["Scare", "Sound"];
    string msg = "Select an option:";
    
    key Owner;
    integer channel_dialog;
    integer listen_id;
    default{
    state_entry() {
    Owner = llGetOwner();
    channel_dialog = ( -1 * (integer)("0x"+llGetSubString((string)llGetKey(),-5,-1)) );
    }
    
    touch_start(integer total_number) {
    if(llDetectedKey(0)==Owner){
    llDialog(Owner, msg, buttons, channel_dialog);
    listen_id = llListen( channel_dialog, "", Owner, "");
    
    }
    }
    
    
    listen(integer channel, string name, key id, string choice) {
    if (choice == "-") {
    llDialog(Owner, msg,buttons, channel_dialog);
    }
    else if (choice == "Scare") {
    llSay(3, "Scare");
    llListenRemove(listen_id);
    }
    else if (choice == "Sound") {
    llSay(3, "Sound");
    llListenRemove(listen_id);
    }
    
    
    }
    
    timer() {
    llListenRemove(listen_id);
    llSetTimerEvent(0.0);
    }
    
     on_rez(integer start_param)
        {
            llResetScript();
        } 
    }

     

     

    Attachment script:

    default
    {
    
        state_entry() {
            llListen(3,"", NULL_KEY, "");
        }
    
        listen(integer channel, string name, key id, string message) {
            if (message == "Scare") {llSay(0, "Boo!"); state default;}{
            if (message == "Sound") {llPlaySound("ed124764-705d-d497-167a-182cd9fa2e6c",1); state default;}{
          
            
            
            }
        }
    }
    }

     

     

    There must be a simple way to fix this. Any help will be muchly appreciated. ;)

  10. I can only conclude the reason for the lack of response is one of two: Either no one else is experiencing this, or people have come to regard this as expected behavior.


    In my experience, this is not expected behavior. It has been several years since changing clothing unseated the avatar, and this business with "breaking" the pose or animation has only cropped up for me within the last year. Between those times, I was most often able to change clothing with no change in the pose or animation, barring the occasional SL weirdness.


    I also find it difficult to believe this is not happening to anyone else.

  11. When I am on a multi-pose posing stand and change to another outfit, suddenly my avatar will go into what seems to be one of the default SL avatar sits, one that is neither in the posing stand or my AO. I have to click on the posing stand to get back into position.  This also happens when I am on other people's poseballs, in which case I have to hop off and back on.

    This has been happening to me for awhile now, but it is definitely a fairly recent change. It reminds me of way back when changing a clothing item would just plain unsit you, but I don't know if the two are related.


    Is anyone else experiencing this? Does anyone know what might be causing it? I checked, and if there is a Jira filed, I was unable to find it. I hope this is not just how SL is going to work now.

  12. I have noticed HUDs on the Marketplace that say they have the option to post pre-written sentences, etc, in local chat, but in white text so it looks as if an avatar has said them.

    Example


    I would like to script something similar, but I have no idea how an object can be scripted to speak as though the avatar is talking, in white text. Is it RLV? Gestures? Voodoo?


    If anyone can tell me, I would be grateful.

  13. Well, turns out 'snot me. The sim owner came over and he sees it the same as I do. Apparently the rezzer has an autoscan function that de-rezzes it while no one is there, which explains why it has to re-rez everytime I TP home. I had never encountered a rezzer that did this before, and this is what made me wonder if the positioning was server-side. He is restarting the sim as I type this, I am hoping this will at least cut down on the frequency of this issue.


    So, thanks for all the help with my little tempest in a teapot, everyone. :)

  14. Regarding Rez-Faux, as stated in my OP, if is not a faux rezzer.  To clarify, it is not a temp rezzer of any sort, Rez-Faux or otherwise.

    However, that aside, yes, you have the gist of it. It is a rezzer that rezzes each linkset, then moves them into place. It is just that they don't always quite get there. ;)

×
×
  • Create New...