Hi i need help with a script! When i sit on the car i want it to be ready to move witout clicking on it. But i don't know how to make it work..
// Hot Air Balloon Script // Modified version of the flying Saucer script // // string animation = "crossleg"; // name of built-in animation or animation in prim inventory string gSoundIdle = "Idle"; string gSoundStart = "Start2";
integer gOldSound=3; //variable for sound function integer gNewSound=3;
default { state_entry() { gOwnerKey = llGetOwner(); // The Owner gOwnerName = llKey2Name(llGetOwner()); // The Owners name (WHY, Never Used)
SetPilotPosition(); // Position of pilot's seat SetCamera(); // Position camera
llSetTimerEvent(0.0);
SetPhysics(); // Which Keys we are interested in KEYMASK = CONTROL_FWD | CONTROL_BACK | CONTROL_ROT_LEFT | CONTROL_ROT_RIGHT | CONTROL_UP | CONTROL_DOWN | CONTROL_LEFT | CONTROL_RIGHT | CONTROL_ML_LBUTTON;
TARGET_INCREMENT = 0.5;
state Listening; } } //--------------------------------------------------------------- state Listening { state_entry() { llWhisper(0,"Type /" + (string)CHANNEL + " menu for a list of options."); llListen(CHANNEL, "", "", ""); // Listen to anyoen saying anything
}
on_rez(integer number) { llResetScript(); } // Reset The script if we rez, this ensures a good start up
changed(integer change) { if (change & CHANGED_LINK) { llWhisper(0,"if1"); key sitter = llAvatarOnSitTarget(); if(sitter != NULL_KEY) llRequestPermissions(sitter , PERMISSION_TRIGGER_ANIMATION); else { key id = llDetectedKey(0); if (id == Driver) { llWhisper(0,"Thank You for flying!"); gFLYING = 0; auto=FALSE; llSleep(1.5); llSetSitText("Pilot"); llSetStatus(STATUS_PHYSICS, FALSE); llMessageLinked(LINK_ALL_CHILDREN, 0, "stop", gOwnerKey); llSetTimerEvent(0.0); llReleaseControls(); llStopSound(); llResetScript(); llStopSound(); } } } }
run_time_permissions(integer perm) { if ( perm & PERMISSION_TRIGGER_ANIMATION ) { llSetAlpha(0.0, ALL_SIDES); // hide prim llStartAnimation(animation); llStopAnimation("sit");
// Here is the Listen callback listen(integer channel, string name, key id, string msg) { //if (llSameGroup(id)==1) // This is meant to only allow same group control but it fails //{ string message = llToLower(msg); if (message == "menu") { help(); } //} } } //--------------------------------------------------------------- state StateDriving { state_entry() { llRequestPermissions(Driver, PERMISSION_TAKE_CONTROLS); llMoveToTarget(llGetPos(), LINEAR_TAU); llRotLookAt(llGetRot(), ANGULAR_TAU, 1.0); llListen(CHANNEL, "", Driver, ""); llMessageLinked(LINK_ALL_CHILDREN, 0, "light", gOwnerKey);
Need help for a balloon vehicul script
in LSL Scripting
Posted
Hi i need help with a script! When i sit on the car i want it to be ready to move witout clicking on it. But i don't know how to make it work..
// Hot Air Balloon Script
// Modified version of the flying Saucer script
//
//
string animation = "crossleg"; // name of built-in animation or animation in prim inventory
string gSoundIdle = "Idle";
string gSoundStart = "Start2";
integer gOldSound=3; //variable for sound function
integer gNewSound=3;
float LINEAR_TAU = 0.75;
float TARGET_INCREMENT = 0.5;
float ANGULAR_TAU = 1.5;
float ANGULAR_DAMPING = 0.85;
float THETA_INCREMENT = 10;
integer KEYMASK = 0;
vector pos;
vector face;
float brake = 0.5;
key gOwnerKey;
string gOwnerName;
key Driver;
integer gFLYING = 0;
integer nudge = FALSE;
integer auto=FALSE;
integer CHANNEL = 6;
//---------------------------------------------------------------
help()
{
string chan = (string)CHANNEL;
llWhisper(0,"Commands:");
llWhisper(0,"Left click craft = Start ");
llWhisper(0,"Left click craft = Stop and release contol");
llWhisper(0,"/" + chan + " 1! through" + " /" + chan + " 9!," + " /" + chan + " slow = Set power");
llWhisper(0,"/" + chan + " menu = Display this list");
llWhisper(0,"PgUp or PgDn = Gain or lose altitude");
llWhisper(0,"Arrow keys = Left, right, Forwards and Back");
llWhisper(0,"Shift + Left or Right arrow = Rotate but maintain view");
llWhisper(0,"PgUp + PgDn or combination similar = Set cruise on or off");
}
//---------------------------------------------------------------
SetPhysics()
{
llSetStatus(STATUS_PHYSICS, TRUE);
llSetStatus(STATUS_ROTATE_X | STATUS_ROTATE_Y, TRUE);
llSleep(0.1);
llSetStatus(STATUS_ROTATE_X | STATUS_ROTATE_Y, FALSE);
llSetStatus(STATUS_PHYSICS, FALSE);
llMoveToTarget(llGetPos(), 0);
llRotLookAt(llGetRot(), 0, 0);
llSetStatus(STATUS_PHYSICS, FALSE);
}
//---------------------------------------------------------------
SetPilotPosition()
{
llSetSitText("Pilot");
llSitTarget(<0.0, 0.0, 0.1>, ZERO_ROTATION);
}
//---------------------------------------------------------------
SetCamera()
{
llSetCameraEyeOffset(<-10.0, 0.0, 4.0>);
llSetCameraAtOffset(<0, 0.0, 0>);
}
//---------------------------------------------------------------
SetSpeed(float speed)
{
TARGET_INCREMENT = speed;
llWhisper(0,"Power: " + llGetSubString((string)(TARGET_INCREMENT * 10.0),0,3) + "%");
}
//---------------------------------------------------------------
handleKeys()
{
}
//---------------------------------------------------------------
Move()
{
pos *= brake; // Update position, effectively decays away 'speed'
if (pos.x < 0) { pos.x=0; } // Dont allow negative X values
else { pos.x += TARGET_INCREMENT; } // Speed increment
vector world_target = pos * llGetRot(); // Rotate into world co-ordinate system
llMoveToTarget(llGetPos() + world_target, LINEAR_TAU); // Move the vehicle
}
//---------------------------------------------------------------
CruiseMode()
{
if (auto)
{
auto=FALSE;
llWhisper(0,"Cruise off");
llSetTimerEvent(0.0);
}
else
{
auto=TRUE;
llWhisper(0,"Cruise on");
llSetTimerEvent(0.5);
}
llSleep(0.5);
}
//---------------------------------------------------------------
enginesound(){
vector vel = llGetVel();
float speed = llVecMag(vel);
if(speed <=10){
gNewSound = 0;
}
else if(speed >=50){
gNewSound = 2;
}
else {
gNewSound = 1;
}
if(gOldSound != gNewSound){
if(speed <=10){
llLoopSound(gSoundIdle,2.0);
}
else if(speed >=50){
}
else {
}
gOldSound = gNewSound;
}
}
default
{
state_entry()
{
gOwnerKey = llGetOwner(); // The Owner
gOwnerName = llKey2Name(llGetOwner()); // The Owners name (WHY, Never Used)
SetPilotPosition(); // Position of pilot's seat
SetCamera(); // Position camera
llSetTimerEvent(0.0);
SetPhysics();
// Which Keys we are interested in
KEYMASK = CONTROL_FWD | CONTROL_BACK | CONTROL_ROT_LEFT | CONTROL_ROT_RIGHT | CONTROL_UP | CONTROL_DOWN | CONTROL_LEFT | CONTROL_RIGHT | CONTROL_ML_LBUTTON;
TARGET_INCREMENT = 0.5;
state Listening;
}
}
//---------------------------------------------------------------
state Listening
{
state_entry()
{
llWhisper(0,"Type /" + (string)CHANNEL + " menu for a list of options.");
llListen(CHANNEL, "", "", ""); // Listen to anyoen saying anything
}
on_rez(integer number) { llResetScript(); } // Reset The script if we rez, this ensures a good start up
changed(integer change)
{
if (change & CHANGED_LINK)
{
llWhisper(0,"if1");
key sitter = llAvatarOnSitTarget();
if(sitter != NULL_KEY) llRequestPermissions(sitter , PERMISSION_TRIGGER_ANIMATION);
else
{
key id = llDetectedKey(0);
if (id == Driver)
{
llWhisper(0,"Thank You for flying!");
gFLYING = 0;
auto=FALSE;
llSleep(1.5);
llSetSitText("Pilot");
llSetStatus(STATUS_PHYSICS, FALSE);
llMessageLinked(LINK_ALL_CHILDREN, 0, "stop", gOwnerKey);
llSetTimerEvent(0.0);
llReleaseControls();
llStopSound();
llResetScript();
llStopSound();
}
}
}
}
run_time_permissions(integer perm)
{
if ( perm & PERMISSION_TRIGGER_ANIMATION )
{
llSetAlpha(0.0, ALL_SIDES); // hide prim
llStartAnimation(animation);
llStopAnimation("sit");
if (gFLYING == 0)
{
gFLYING = 1;
llSetStatus(STATUS_PHYSICS, TRUE);
llSetSitText("Ride");
Driver=llGetOwner();
llTriggerSound(gSoundStart,1.0);
llSleep(2.5);
enginesound();
state StateDriving;
}
else{llStopSound();}
}
}
//touch_start(integer total_number)
//{
// if (gFLYING == 0)
//{
//gFLYING = 1;
//llSetStatus(STATUS_PHYSICS, TRUE);
//llSetSitText("Ride");
//Driver=llDetectedKey(total_number - 1);
// llTriggerSound(gSoundStart,1.0);
// llSleep(2.5);
//enginesound();
// state StateDriving;
// }
// }
// Here is the Listen callback
listen(integer channel, string name, key id, string msg)
{
//if (llSameGroup(id)==1) // This is meant to only allow same group control but it fails
//{
string message = llToLower(msg);
if (message == "menu")
{
help();
}
//}
}
}
//---------------------------------------------------------------
state StateDriving
{
state_entry()
{
llRequestPermissions(Driver, PERMISSION_TAKE_CONTROLS);
llMoveToTarget(llGetPos(), LINEAR_TAU);
llRotLookAt(llGetRot(), ANGULAR_TAU, 1.0);
llListen(CHANNEL, "", Driver, "");
llMessageLinked(LINK_ALL_CHILDREN, 0, "light", gOwnerKey);
}
// Handles Key press events
control(key driver, integer keys, integer edges)
{
pos *= brake;
face.x *= brake;
face.z *= brake;
nudge = FALSE;
if (keys & CONTROL_FWD)
{
if (pos.x < 0) { pos.x=0; }
else { pos.x += TARGET_INCREMENT; }
nudge = TRUE;
}
if (keys & CONTROL_BACK)
{
if (pos.x > 0) { pos.x=0; }
else { pos.x -= TARGET_INCREMENT; }
nudge = TRUE;
}
if (keys & CONTROL_UP)
{
llMessageLinked(LINK_ALL_CHILDREN, 0, "fast", driver);
if(pos.z<0) { pos.z=0; }
else { pos.z += TARGET_INCREMENT; }
face.x=0;
nudge = TRUE;
}
if (keys & CONTROL_DOWN)
{
llMessageLinked(LINK_ALL_CHILDREN, 0, "fast", driver);
if(pos.z>0) { pos.z=0; }
else { pos.z -= TARGET_INCREMENT; }
face.x=0;
nudge = TRUE;
}
if ((keys) & (CONTROL_LEFT|CONTROL_ROT_LEFT))
{
if (face.z < 0) { face.z=0; }
else { face.z += THETA_INCREMENT; }
nudge = TRUE;
}
if ((keys) & (CONTROL_RIGHT|CONTROL_ROT_RIGHT))
{
if (face.z > 0) { face.z=0; }
else { face.z -= THETA_INCREMENT; }
nudge = TRUE;
}
if ((keys & CONTROL_UP) && (keys & CONTROL_DOWN))
{
CruiseMode();
}
if (nudge)
{
llWhisper(0,"ok6");
vector world_target = pos * llGetRot();
llMoveToTarget(llGetPos() + world_target, LINEAR_TAU);
vector eul = face;
eul *= DEG_TO_RAD;
rotation quat = llEuler2Rot( eul );
rotation rot = quat * llGetRot();
llRotLookAt(rot, ANGULAR_TAU, ANGULAR_DAMPING);
}
}
timer()
{
Move();
}
}