Jump to content

Ron Khondji

Resident
  • Posts

    351
  • Joined

  • Last visited

Everything posted by Ron Khondji

  1. Like this? list agents= llGetAgentList(AGENT_LIST_PARCEL, []); integer i = llGetListLength(agents); if (i) { do { if (llList2Key(agents, i) == llGetOwner()) agents = llDeleteSubList(agents, i, i); } while (--i > -1); }
  2. It's a very old bug. Something to do with touch_start event carrying over to the new state. The sollution is to use touch_end events instead.
  3. 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.
  4. There's a debug setting to use a external editor with the viewer. 
  5. 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.
  6. 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; }
  7. That looks like the reply to "Request Admin Status". The shortcut for that is CTRL + ALT + G I don't know why you get it after hitting "]". And Happy New Year!
  8. 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;}
  9. You don't have to put the textures in the objects inventory. You can use the textures uuid directly in functions like llSetTexture(), llSetPrimitiveParams() etc. To find the textures uuid you can right click the texture in your inventory and then "copy asset uuid".
  10. 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.
  11. 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); } } }}
  12. Don't know if it helps but what about unticking 'Stretch Textures'? 
  13. This is from the wiki: If there is a space in url, the http_response status code will be 499. Requests must fully complete after 60 seconds, or else the response will be thrown away and the http_response status code will be 499. I'm guessing the problem is either with your server or with the connection between SL and the server.
  14. Could it be a permissions problem? Do you have a llGetOwner() in state_entry() and forgot to reset the script on owner change? That's all I can think of.
  15. I do not remember it exactly, but I think I had to reinstall the microsoft c++ libraries a couple of years ago to fix the same problem.
  16. 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(); }}
  17. llSetLinkPrimitiveParamsFast(LINK_SET, [ PRIM_COLOR, integer face, vector color, float alpha ]); In your case integer face = -1 which is ALL_SIDES. What you should do is first get the face colors of each face with llGetLinkPrimitiveParams() in a loop and save those numbers in a list. Then you can allways restore the colors later.
  18. 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]); } }}
  19. 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]); }}
  20. 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); }}
  21. 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.
  22. 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); }}
  23. So, if I understand correctly: - Blue Steel gets something new. - Le Tigre stays the same with only 1 little update. - Magnum gets both? Something new, and stay the same? I guess I do not understand
×
×
  • Create New...