Jump to content

Ron Khondji

Resident
  • Posts

    352
  • Joined

  • Last visited

Posts posted by Ron Khondji

  1. If I do this:

    vector lPos;integer S;default {    touch_start(integer total_number) {        if (S = !S) {            lPos = llList2Vector(llGetLinkPrimitiveParams(2, [PRIM_POS_LOCAL]), 0);            llOwnerSay("POS_lOCAL vector = " + (string)lPos);        }        else {            llSetLinkPrimitiveParams(2, [PRIM_POS_LOCAL, lPos]);            llOwnerSay("POS_LOCAL set");        }    }}

    the child prim does not move, no matter what rotation the object has.. 

    So you must be doing something wrong.

  2. You do not need an allways open llListen() for what you're doing.
    Better would be to open the llListen() just before llDialog() and close that llListen() again in the listen event..

    And add a llSetTimerEvent() to close the llListen() when the user ignores or forgets the dialog.
    Remember to stop the timer in the listen or timer event. Which ever comes first.

    integer ListenHandle;default{    touch_start(integer x)    {        llSetTimerEvent(30.0);        ListenHandle = llListen(CHANNEL, "", llGetOwner(), ""); // DIALOG APPEARS ONLY WHEN OWNER TOUCH OBJECT        llDialog(llDetectedKey(0), "What do you want, owner?", MENU_MAIN, CHANNEL);    }        timer()    {        llSetTimerEvent(0.0);        llListenRemove( ListenHandle );    }                listen(integer channel, string name, key id, string message)    {        llSetTimerEvent(0.0);        llListenRemove( ListenHandle );        if (llListFindList(MENU_MAIN + MENU_OPTIONS + MENU_ABOUT, [message]) != -1)etc.

    Something like that.

    Also.
    People say it's better to use a large negative integer as a channelnumber.

     

  3. I would set camon to true in the camset function and set it to false when llClearCameraParams() instread of using a toggle.
    That way camon truly reflects the camera.

    The logic in th touch event would then be:

                if ( llGetAnimation( llGetOwner()) == "Sitting" )            {                if ( camon )                 {                        llClearCameraParams();                    camon = FALSE;                }                else camset();            }            else if ( camon )            {                llClearCameraParams();                camon = FALSE;            }

     

  4. I do not really understand what you're saying but you don't need a database to get a region name from a slurl or vica versa.


    A slurl looks like:

    http://maps.secondlife.com/secondlife/Monowai/42/121/73

    The stuff after 'http://maps.secondlife.com/secondlife/' is the region name followed by the x, y and z coordinates.

     

    So the region name can be quite easily be extracted from that.
    And if you want to create the slurl from a region and some coordinates, that is just as easy.

    string SLURL2Region(string slurl) {    list t = llParseString2List(slurl,["/"],[]);    return llUnescapeURL(llList2String(t, 3));}    string Region2SLURL(string region, integer x, integer y, integer z){    return "http://maps.secondlife.com/secondlife/" + llEscapeURL(region) + "/" + (string)x + "/" + (string)y + "/" + (string)z;}
  5. One way would be to just start a timer when the animation starts,
    Then in the timer event do a llStopAnimation("Anim") followed by a llStartAnimation("Anim").

    I do not know how much server load that generates though. Depends on the timer interval I guess. 

  6. Firstly you're mixing up strings and integers by declaring HP as a string and then checking if 'HP == 0' instead of 'HP =="0"'.
    Secondly you don't need the second 'if((llList2Key(temp,0) == owner) && (llList2String(temp,1) == "UPDATE")) {'

    Thirdly, I think this works as well:

    key owner;list textures = ["HP00", "HP01", "HP02", "HP03", "HP04", "HP05", "HP06", "HP07", "HP08", "HP09", "HP10"];default {    state_entry() {        owner = llGetOwner();        llListen(-156535255,"","","");    }        attach(key id) {        llResetScript();    }    listen(integer chan, string name, key id, string msg) {        list temp = llCSV2List(msg);        if((llList2Key(temp,0) == owner) && (llList2String(temp,1) == "UPDATE")) {            integer HP = llAbs((integer)(llList2String(temp,2)));            integer index = llFloor(HP/10) + 1;            if (index <= llGetListLength(textures) - 1) {                llSetTexture(llList2String(textures, index), ALL_SIDES);            }        }    }} 
  7. Here ya go:

    list Colors; // strided list [linknumber, facenumber, color, alpha, linknumber, facenumber, color, alpha, etc]SaveColors() {    Colors = [];    integer i;    integer links = llGetNumberOfPrims();    integer faces;    if (links == 1) links = 0;
    else i = 1; do { faces = llGetLinkNumberOfSides(i); integer j; do { list temp = llGetLinkPrimitiveParams(i, [PRIM_COLOR, j]); Colors += [i, j, llList2Vector(temp, 0), llList2Float(temp, 1)]; } while (++j < faces); } while(++i <= links);}RestoreColors() { if (Colors) { integer i; integer end = llGetListLength(Colors); do { integer link = llList2Integer(Colors, i); integer face = llList2Integer(Colors, i + 1); vector color = llList2Vector(Colors, i + 2); float alpha = llList2Float(Colors, i + 3); llSetLinkPrimitiveParamsFast(link, [PRIM_COLOR, face, color, alpha]); } while ((i += 4) < end); }} default { state_entry() { SaveColors(); } touch_start(integer total_number) { RestoreColors(); } changed(integer c) { if (c & CHANGED_LINK) llResetScript(); }}
  8. She means something like this, I think.

    integer StartStop;default {    state_entry() {        llSetLinkPrimitiveParamsFast(LINK_THIS, [PRIM_PHYSICS_SHAPE_TYPE, PRIM_PHYSICS_SHAPE_CONVEX]); // Required to use llSetKeyframedMotion! (restart script once)        llSetKeyframedMotion([<-0, -0, -1, 0>, 6.0, <-0, -0, -1, 0>, 6.0], [KFM_DATA, KFM_ROTATION, KFM_MODE, KFM_LOOP]); // Spinning on Z once every 12 seconds!    }    touch_start(integer num) {        if (StartStop = !StartStop) {            llSetKeyframedMotion([],[KFM_COMMAND, KFM_CMD_PAUSE]);        }        else {            llSetKeyframedMotion([],[KFM_COMMAND, KFM_CMD_PLAY]);        }    }}
  9. This is a script for in a linkset. 

    // Put this script in the root prim of the linkset. // Name the moving prim in the linkset "saw"// Name the start-stop prim in the linkset "button"// Do NOT set the 'saw' as the root prim.integer ON_OFF;integer OFFSET;integer SawLinkNum;vector StartPos;vector pos;default {    state_entry() {        integer i;        while(++i <= llGetNumberOfPrims()) {            if (llToLower(llStringTrim(llGetLinkName( i), STRING_TRIM)) == "saw" ) SawLinkNum = i;        }     }         touch_start(integer num_detected) {        if (llToLower(llStringTrim(llGetLinkName(llDetectedLinkNumber(0)), STRING_TRIM)) == "button") {            if (ON_OFF = !ON_OFF) {                StartPos = llList2Vector(llGetLinkPrimitiveParams(SawLinkNum, [PRIM_POS_LOCAL]),0);                pos = StartPos;                OFFSET = 1;                llSay(0, "Power On");                llSetTimerEvent(0.5);            }            else {                llSay(0, "Power Off");                llSetTimerEvent(0.0);                llSetLinkPrimitiveParamsFast(SawLinkNum, [PRIM_POS_LOCAL, StartPos]);            }        }    }        timer() {        llSetTimerEvent(0.3);        pos.x += (0.3 * ( OFFSET *= -1 ));        llSetLinkPrimitiveParamsFast(SawLinkNum, [PRIM_POS_LOCAL, pos]);    }}
  10. Try this:

    //Drifting Thoughts Car script//by Kayla Stonecutter//Date: 3/20/2006////Basic settingsfloat       ForwardPower; //Forward powerlist        ForwardPowerGears = [10, 30, 50, 100,110,200];float       ReversePower = -20; //Reverse powerfloat       TurnPower = 700; //Turning powerfloat       TurnSpeedAdjust = 0.1; //how much effect speed has on turning, higher numbers effect more. 0.0 to disablefloat       FlightForwardPower = 24;float       FlightReversePower = 16;float       FlightUpPower = 14;float       FlightDownPower = 14;float       FlightStrafePower = 12;float       FlightTurnPower = 4;string      SitText = "Lets Roll!"; //Text to show on pie menustring      NonOwnerMessage = "This is not your ride. Go get your own..."; //Message when someone other than owner tries to sitinteger     ListenCh = 0;string      HornCommand = "h";string      RevCommand = "r";string      IdleCommand = "i";string      StopCommand = "s";string      FlightCommand = "fly";string      GroundCommand = "drive";string      FlightSound = "plane";string      HornSound = "horn";string      IdleSound = "idle"; //Sound to play when idlingstring      RunSound = "run"; //Sound to play when the gas in pressedstring      RevSound = "rev";string      StartupSound = "starter"; //Sound to play when owner sitsstring      DrivingAnim = "driving generic"; //Animation to play when owner sits//Other variablesinteger     NumGears;integer     Gear = 0;integer     NewSound;string      Sound;integer     CurDir;integer     LastDir;integer     Forward;vector      SpeedVec;vector      Linear;vector      Angular;integer     Active;key         sitting;integer     Moving;string      SimName;integer     listener;integer     DIR_STOP = 100;integer     DIR_START = 101;integer     DIR_NORM = 102;integer     DIR_LEFT = 103;integer     DIR_RIGHT = 104;integer     DIR_FLIGHT = 105;default{    state_entry()    {        TurnSpeedAdjust *= 0.01;        ForwardPower = llList2Integer(ForwardPowerGears, 0);        NumGears = llGetListLength(ForwardPowerGears);        llSetSitText(SitText);        llCollisionSound("", 0.0);        llSitTarget(<0.8,0.0,0.65>, llEuler2Rot(<0,0,0> ));        state Ground;    }}state Ground{    state_entry()    {        llStopSound();        if(!Active)        {            llSetStatus(STATUS_PHYSICS, TRUE);            llMessageLinked(LINK_ALL_CHILDREN , DIR_STOP, "", NULL_KEY);            llUnSit(llAvatarOnSitTarget());        }else{            SimName = llGetRegionName();            llMessageLinked(LINK_ALL_CHILDREN, DIR_START, "", NULL_KEY);            llMessageLinked(LINK_ALL_CHILDREN, DIR_NORM, "", NULL_KEY);            NewSound = 1;            Sound = IdleSound;            Linear = <0,0,-2>;        }                llSetVehicleType(VEHICLE_TYPE_CAR);        llSetVehicleFloatParam(VEHICLE_LINEAR_DEFLECTION_EFFICIENCY, 0.80);        llSetVehicleFloatParam(VEHICLE_LINEAR_DEFLECTION_TIMESCALE, 1.0);                llSetVehicleFloatParam(VEHICLE_ANGULAR_DEFLECTION_EFFICIENCY, 0.2);        llSetVehicleFloatParam(VEHICLE_ANGULAR_DEFLECTION_TIMESCALE, 0.1);                llSetVehicleFloatParam(VEHICLE_LINEAR_MOTOR_TIMESCALE, 1.0);        llSetVehicleFloatParam(VEHICLE_LINEAR_MOTOR_DECAY_TIMESCALE, 0.1);                llSetVehicleFloatParam(VEHICLE_ANGULAR_MOTOR_TIMESCALE, 0.3);        llSetVehicleFloatParam(VEHICLE_ANGULAR_MOTOR_DECAY_TIMESCALE, 0.2);                llSetVehicleVectorParam(VEHICLE_LINEAR_FRICTION_TIMESCALE, <100.0, 2.0, 1000.0> );        llSetVehicleVectorParam(VEHICLE_ANGULAR_FRICTION_TIMESCALE, <1000.0, 1000.0, 1000.0> );                llSetVehicleFloatParam(VEHICLE_VERTICAL_ATTRACTION_EFFICIENCY, 0.0);        llSetVehicleFloatParam(VEHICLE_VERTICAL_ATTRACTION_TIMESCALE, 300.0);                llSetVehicleFloatParam(VEHICLE_HOVER_HEIGHT, 0 );        llSetVehicleFloatParam(VEHICLE_HOVER_EFFICIENCY, 0 );        llSetVehicleFloatParam(VEHICLE_HOVER_TIMESCALE, 1000 );        llSetVehicleFloatParam(VEHICLE_BUOYANCY, 0 );                llRemoveVehicleFlags(VEHICLE_FLAG_HOVER_WATER_ONLY | VEHICLE_FLAG_HOVER_TERRAIN_ONLY | VEHICLE_FLAG_HOVER_GLOBAL_HEIGHT);                llSetVehicleFlags(VEHICLE_FLAG_NO_DEFLECTION_UP | VEHICLE_FLAG_LIMIT_ROLL_ONLY | VEHICLE_FLAG_HOVER_UP_ONLY | VEHICLE_FLAG_LIMIT_MOTOR_UP);    }        on_rez(integer param)    {        llResetScript();    }        listen(integer channel, string name, key id, string message)    {        message = llToLower(message);        if(message == HornCommand) llMessageLinked(LINK_SET, 12345, HornSound, NULL_KEY);        else if(message == RevCommand) llMessageLinked(LINK_SET, 12345, RevSound, NULL_KEY);        else if(message == IdleCommand) llLoopSound(IdleSound, 1.0);        else if(message == StopCommand) llStopSound();        else if((message == FlightCommand) && Active) state Flight;    }        changed(integer change)    {        if((change & CHANGED_LINK) == CHANGED_LINK)        {            sitting = llAvatarOnSitTarget();            if((sitting != NULL_KEY) && !Active)            {                listener = llListen(ListenCh, "", sitting, "");                llRequestPermissions(sitting, PERMISSION_TRIGGER_ANIMATION | PERMISSION_TAKE_CONTROLS | PERMISSION_CONTROL_CAMERA);                llTriggerSound(StartupSound, 1.0);                llMessageLinked(LINK_ALL_CHILDREN, DIR_START, "", NULL_KEY);                llSetPos(llGetPos() + <0,0,0.15>);                llSetStatus(STATUS_PHYSICS, TRUE);                SimName = llGetRegionName();                llLoopSound(IdleSound,1);                llSetTimerEvent(0.1);                CurDir = DIR_NORM;                LastDir = DIR_NORM;            }            else if((sitting == NULL_KEY) && Active)            {                llSetTimerEvent(0.0);                llListenRemove(listener);                llStopAnimation(DrivingAnim);                Active = 0;                llStopSound();                llSetStatus(STATUS_PHYSICS, FALSE);                llMessageLinked(LINK_ALL_CHILDREN , DIR_STOP, "", NULL_KEY);                llReleaseControls();            }        }    }        run_time_permissions(integer perms)    {        if(perms == (PERMISSION_TRIGGER_ANIMATION | PERMISSION_TAKE_CONTROLS | PERMISSION_CONTROL_CAMERA))        {            Active = 1;            Linear = <0,0,-2>;            Angular = <0,0,0>;            llStopAnimation("sit");            llStartAnimation(DrivingAnim);            llTakeControls(CONTROL_FWD | CONTROL_BACK | CONTROL_DOWN | CONTROL_UP | CONTROL_RIGHT | CONTROL_LEFT | CONTROL_ROT_RIGHT | CONTROL_ROT_LEFT, TRUE, FALSE);            llSetCameraParams([                CAMERA_ACTIVE, 1, // 1 is active, 0 is inactive                CAMERA_BEHINDNESS_ANGLE, 2.0, // (0 to 180) degrees                CAMERA_BEHINDNESS_LAG, 0.1, // (0 to 3) seconds                CAMERA_DISTANCE, 8.0, // ( 0.5 to 10) meters                // CAMERA_FOCUS, <0,0,0>, // region-relative position                CAMERA_FOCUS_LAG, 0.1 , // (0 to 3) seconds                CAMERA_FOCUS_LOCKED, FALSE, // (TRUE or FALSE)                CAMERA_FOCUS_THRESHOLD, 0.5, // (0 to 4) meters                CAMERA_PITCH, 20.0, // (-45 to 80) degrees                // CAMERA_POSITION, <0,0,0>, // region-relative position                CAMERA_POSITION_LAG, 0.1, // (0 to 3) seconds                CAMERA_POSITION_LOCKED, FALSE, // (TRUE or FALSE)                CAMERA_POSITION_THRESHOLD, 0.5, // (0 to 4) meters                CAMERA_FOCUS_OFFSET, <0,0,0> // <-10,-10,-10> to <10,10,10> meters            ]);        }    }        control(key id, integer levels, integer edges)    {        if(!Moving)        {            Moving = 1;            llSetStatus(STATUS_PHYSICS, TRUE);        }        SpeedVec = llGetVel() / llGetRot();        if((edges & levels & CONTROL_UP))        {            if((Gear + 1) != NumGears)            {                ++Gear;                llWhisper(0, "Gear " + (string)(Gear + 1));                ForwardPower = llList2Float(ForwardPowerGears, Gear);                if(Linear.x > 0) Linear.x = ForwardPower;            }        }else if((edges & levels & CONTROL_DOWN))        {            if((Gear - 1) != -1)            {                --Gear;                llWhisper(0, "Gear " + (string)(Gear + 1));                ForwardPower = llList2Float(ForwardPowerGears, Gear);                if(Linear.x > 0) Linear.x = ForwardPower;            }        }        if((edges & levels & CONTROL_FWD))        {            Linear.x += ForwardPower;            NewSound = 1;        }else if((edges & ~levels & CONTROL_FWD))        {            Linear.x -= ForwardPower;            NewSound = 1;        }        if((edges & levels & CONTROL_BACK))        {            Linear.x += ReversePower;            NewSound = 1;        }else if((edges & ~levels & CONTROL_BACK))        {            Linear.x -= ReversePower;            NewSound = 1;        }        if(NewSound)        {            if(Linear.x) Sound = RunSound;            else Sound = IdleSound;        }        if(llFabs(SpeedVec.x) < 0.5)        {            if(levels & CONTROL_ROT_LEFT) CurDir = DIR_LEFT;            else if(levels & CONTROL_ROT_RIGHT) CurDir = DIR_RIGHT;            else CurDir = DIR_NORM;            Angular.z = 0.0;        }else{            if(SpeedVec.x < 0.0)            {                Forward = -1;                SpeedVec.x *= -TurnSpeedAdjust;            }else{                Forward = 1;                SpeedVec.x *= TurnSpeedAdjust;            }            if(levels & CONTROL_ROT_LEFT)            {                CurDir = DIR_LEFT;                Angular.z = (TurnPower - SpeedVec.x) * Forward;            }else if((edges & ~levels & CONTROL_ROT_LEFT))            {                CurDir = DIR_NORM;                Angular.z = 0;            }            if(levels & CONTROL_ROT_RIGHT)            {                CurDir = DIR_RIGHT;                Angular.z = -((TurnPower - SpeedVec.x) * Forward);            }else if((edges & ~levels & CONTROL_ROT_RIGHT))            {                CurDir = DIR_NORM;                Angular.z = 0;            }        }    }        moving_end()    {        if(llGetRegionName() == SimName)        {            Moving = 0;            llSetStatus(STATUS_PHYSICS, FALSE);        }else{            SimName = llGetRegionName();        }    }        timer()    {        if(Linear != <0.0,  0.0, -2.0>)        {            llSetVehicleVectorParam(VEHICLE_LINEAR_MOTOR_DIRECTION, Linear);            llApplyImpulse(Linear, TRUE);        }        if(Angular != <0.0, 0.0, 0.0>) llSetVehicleVectorParam(VEHICLE_ANGULAR_MOTOR_DIRECTION, Angular);        if(CurDir != LastDir)        {            llMessageLinked(LINK_ALL_CHILDREN, CurDir, "", NULL_KEY);            LastDir = CurDir;        }        if(NewSound)        {            llStopSound();            NewSound = 0;            llLoopSound(Sound, 1.0);        }    }}state Flight{    state_entry()    {        Linear = <0,0,0>;        llStopSound();        llMessageLinked(LINK_ALL_CHILDREN, DIR_FLIGHT, "", NULL_KEY);        llLoopSound(FlightSound, 1.0);        llSetStatus(STATUS_PHYSICS, FALSE);        llSetPos(llGetPos() + <0,0,0.25>);        vector rot = llRot2Euler(llGetRot());        llSetRot(llEuler2Rot(<0,0,rot.z>));        llListen(ListenCh, "", sitting, "");        llSetVehicleType(VEHICLE_TYPE_AIRPLANE);                // linear friction        llSetVehicleVectorParam(VEHICLE_LINEAR_FRICTION_TIMESCALE, <100.0, 100.0, 100.0>);                // uniform angular friction        llSetVehicleFloatParam(VEHICLE_ANGULAR_FRICTION_TIMESCALE, 0.5);                // linear motor        llSetVehicleVectorParam(VEHICLE_LINEAR_MOTOR_DIRECTION, <0.0, 0.0, 0.0>);        llSetVehicleFloatParam(VEHICLE_LINEAR_MOTOR_TIMESCALE, 1.0);        llSetVehicleFloatParam(VEHICLE_LINEAR_MOTOR_DECAY_TIMESCALE, 1.0);                // angular motor        llSetVehicleVectorParam(VEHICLE_ANGULAR_MOTOR_DIRECTION, <0.0, 0.0, 0.0>);        llSetVehicleFloatParam(VEHICLE_ANGULAR_MOTOR_TIMESCALE, 1.0);        llSetVehicleFloatParam(VEHICLE_ANGULAR_MOTOR_DECAY_TIMESCALE, 2.0);                // hover        llSetVehicleFloatParam(VEHICLE_HOVER_HEIGHT, 0.0);        llSetVehicleFloatParam(VEHICLE_HOVER_EFFICIENCY, 0.0);        llSetVehicleFloatParam(VEHICLE_HOVER_TIMESCALE, 360.0);        llSetVehicleFloatParam(VEHICLE_BUOYANCY, 0.988);                // linear deflection        llSetVehicleFloatParam(VEHICLE_LINEAR_DEFLECTION_EFFICIENCY, 0.0);        llSetVehicleFloatParam(VEHICLE_LINEAR_DEFLECTION_TIMESCALE, 1.0);                // angular deflection        llSetVehicleFloatParam(VEHICLE_ANGULAR_DEFLECTION_EFFICIENCY, 0.25);        llSetVehicleFloatParam(VEHICLE_ANGULAR_DEFLECTION_TIMESCALE, 100.0);                // vertical attractor        llSetVehicleFloatParam(VEHICLE_VERTICAL_ATTRACTION_EFFICIENCY, 0.5);        llSetVehicleFloatParam(VEHICLE_VERTICAL_ATTRACTION_TIMESCALE, 1.0);                // banking        llSetVehicleFloatParam(VEHICLE_BANKING_EFFICIENCY, 0.0);        llSetVehicleFloatParam(VEHICLE_BANKING_MIX, 1.0);        llSetVehicleFloatParam(VEHICLE_BANKING_TIMESCALE, 1.0);                // default rotation of local frame        llSetVehicleRotationParam(VEHICLE_REFERENCE_FRAME, <0.00000, 0.00000, 0.00000, 0.00000>);                // removed vehicle flags        llRemoveVehicleFlags(VEHICLE_FLAG_NO_DEFLECTION_UP | VEHICLE_FLAG_HOVER_WATER_ONLY | VEHICLE_FLAG_HOVER_TERRAIN_ONLY | VEHICLE_FLAG_HOVER_UP_ONLY | VEHICLE_FLAG_LIMIT_MOTOR_UP | VEHICLE_FLAG_LIMIT_ROLL_ONLY);                // set vehicle flags        llSetVehicleFlags(VEHICLE_FLAG_HOVER_GLOBAL_HEIGHT);        llTakeControls(CONTROL_FWD | CONTROL_BACK | CONTROL_LEFT | CONTROL_RIGHT | CONTROL_ROT_LEFT | CONTROL_ROT_RIGHT | CONTROL_UP | CONTROL_DOWN | CONTROL_LBUTTON, TRUE, FALSE);                llSetStatus(STATUS_PHYSICS, TRUE);    }        listen(integer channel, string name, key id, string message)    {        message = llToLower(message);        if(message == GroundCommand) state Ground;    }        control(key name, integer levels, integer edges)    {        if((levels & CONTROL_LBUTTON))        {            llSetVehicleVectorParam(VEHICLE_LINEAR_MOTOR_DIRECTION, <0,0,0>);            llSetVehicleVectorParam(VEHICLE_ANGULAR_MOTOR_DIRECTION, <0,0,0>);            llSetStatus(STATUS_PHYSICS, FALSE);            llSleep(0.1);            llSetStatus(STATUS_PHYSICS, TRUE);            return;        }                if((edges & levels & CONTROL_UP)) Linear.z += FlightUpPower;        else if((edges & ~levels & CONTROL_UP)) Linear.z = 0.0;                if((edges & levels & CONTROL_DOWN)) Linear.z -= FlightDownPower;        else if((edges & ~levels & CONTROL_DOWN)) Linear.z = 0.0;                if((edges & levels & CONTROL_FWD)) Linear.x += FlightForwardPower;        else if((edges & ~levels & CONTROL_FWD)) Linear.x = 0.0;                if((edges & levels & CONTROL_BACK)) Linear.x -= FlightReversePower;        else if((edges & ~levels & CONTROL_BACK)) Linear.x = 0.0;                if((edges & levels & CONTROL_LEFT)) Linear.y += FlightStrafePower;        else if((edges & ~levels & CONTROL_LEFT)) Linear.y = 0.0;                if((edges & levels & CONTROL_RIGHT)) Linear.y -= FlightStrafePower;        else if((edges & ~levels & CONTROL_RIGHT)) Linear.y = 0.0;                if((edges & levels & CONTROL_ROT_LEFT)) Angular.z = FlightTurnPower;        else if((edges & ~levels & CONTROL_ROT_LEFT)) Angular.z = 0;                if((edges & levels & CONTROL_ROT_RIGHT)) Angular.z = -FlightTurnPower;        else if((edges & ~levels & CONTROL_ROT_RIGHT)) Angular.z = 0;    }        changed(integer change)    {        if((change & CHANGED_LINK) == CHANGED_LINK)        {            sitting = llAvatarOnSitTarget();            if(sitting == NULL_KEY)            {                llSetTimerEvent(0.0);                llStopAnimation(DrivingAnim);                Active = 0;                llStopSound();                llSetStatus(STATUS_PHYSICS, FALSE);                llMessageLinked(LINK_ALL_CHILDREN , DIR_STOP, "", NULL_KEY);                llReleaseControls();                state Ground;            }        }    }        timer()    {        llSetVehicleVectorParam(VEHICLE_LINEAR_MOTOR_DIRECTION, Linear);        llSetVehicleVectorParam(VEHICLE_ANGULAR_MOTOR_DIRECTION, Angular);    }}

     

  11. I would do something like:

    show:

    llSetLinkPrimitiveParams(child_link_num, [PRIM_ROT_LOCAL, llEuler2Rot(<.0, .0, .0> * DEG_TO_RAD)]);

     hide:

    llSetLinkPrimitiveParams(child_link_num, [PRIM_ROT_LOCAL, llEuler2Rot(<.0, .0, 90.0> * DEG_TO_RAD)]);

     

    This way there's no need to get the local rotation in state_entry Which also means that it doesn't matter wich way the child is rotated when you reset the script.

  12. First rotating the cube on a point and then starting llTargteOmega() works aswell.
    Just dump this script in a prim.

    default {    state_entry() {        llSetRot(llEuler2Rot(<35.264, 45.0, 0.0> * DEG_TO_RAD));        llTargetOmega(<0,0,1>, PI/4, 1.0);    }}

     

     

    • Like 1
×
×
  • Create New...