Glauch Auer
Aktiver Nutzer
ooooookey, eigentlich dachte ich ja, ich wuerde heute fertig, indem ich Euch noch die Skripte geb... aber ich schulde Euch noch das HUD. naja, fliegen tut das Teil auch ohne HUD, ich reich's Euch trotzdem noch nach. erstmal die Skripte. die erklaer ich nicht extra, ich hab sie fuer mich als Copy-Paste-Programmierer so umfangreich kommentiert, dass sie eigentlich auch fuer Anfaenger verstaendlich sein muessten:
in den Fahrersitz, der gleichzeitig Euer Rootprims ist, steckt Ihr folgendes Skript:
das hier kommt in den linken Propeller und den Knubbel daran:
das hier in die rechten:
das hier in das Hoehenruder:
und das Skript kommt ins Seitenruder:
ferrdsch. *Euch das HUD schulde*
aaaah, nee, Moment. wo ich Euch das schon zeige. ich hab zwei Probleme. ich hab teilweise willkuerlich llSleeps verstreut, in dem Versuch, den Propellern und den Rudern Zeit zu lassen zu reagieren. das ist mir so richtig nicht gelungen. das zweite besteht darin, dass ich beim Aufstehen eine Fehlermeldung bekomme, weil die Kamerakontrolle nicht zurueckgegeben wird, wie ich mir das dachte. also wenn sich wirklich jemand die Skripte durchlesen sollte und Ahnung davon hat: DIE zwei Probleme wuerde ich gern noch irgendwann loesen.
in den Fahrersitz, der gleichzeitig Euer Rootprims ist, steckt Ihr folgendes Skript:
Code:
//glauchauer slinfo.de blimp
//fahrersitz und root
//use it, change it, enjoy it, give credit, or not ...
//contact your local Goethe-Institut if there's something you don't understand
float fahrhoehe; // [m] angestrebte Fahrhoehe
float delta_fahrhoehe = 0.5; // [m] Schrittgroesse fuer Fahrhoehenaenderung
vector position;
float geschwindigkeit_steig_sink = 0.5; // [m/s] Steig- Sinkgeschwinigkeit
float geschwindigkeit_drehen = 15.0; // [deg/s] maximale Drehgeschwindigkeit
float omega; // [/s] angestrebte Drehgeschwindigkeit
float geschwindigkeit_vorwaerts = 5.0; // [m/s] Vorwaertsgeschwindigkeit
float geschwindigkeit_rueckwaerts = 2.5; // [m/s] Rueckwaertsgeschwindigkeit
vector linear_motor = <0,0,0>; // [m/s] Lineargeschwindigkeiten <vor, seitwaerts, hoch>
float multiplikator_delta_fahrhoehe = 1.2; // Multiplikator zum Erhoehen der Schrittgroesse fuer Fahrhoehenaenderung
integer i = 1;
string objektname_alt;
string objektname_neu;
key eigentuemer_UUID;
vector kamera_position = <-1.0, 0, 0.5>; // [m, m, m] Position der Kamera vor, neben, ueber dem Primmittelpunkt
vector kamera_fokus = <2, 0, 0.1>; // [m, m, m] wohin die Kamera schaut, vor, neben, ueber dem Primmittelpunkt
string kamera = "kamera_eins"; // die verschiedenen Kameras
//===== >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
//===== eigene Funktionen Anfang ==============================================
geradehaengen()
{
rotation ausgangslage_rot = llGetRot();
vector ausgangslage_winkel = llRot2Euler(ausgangslage_rot);
float rollwinkel = ausgangslage_winkel.x * RAD_TO_DEG;
float nickwinkel = ausgangslage_winkel.y * RAD_TO_DEG;
float gierwinkel = ausgangslage_winkel.z * RAD_TO_DEG;
while(llFabs(rollwinkel) > 1.0 | llFabs(nickwinkel) > 1.0)
{
// vector endlage_winkel = <0.0, 0.0, gierwinkel>; // den Gierwinkel (die Himmelsrichtung) wollen wir nicht veraendern
rollwinkel = 0.0; // gerade Endlage
nickwinkel = 0.0; // gerade Endlage
vector endlage_winkel = <rollwinkel, nickwinkel, gierwinkel> * DEG_TO_RAD;
rotation endlage_rot = llEuler2Rot(endlage_winkel);
llSetRot(endlage_rot);
}
}
fahrhoeheFestlegen()
{
position = llGetPos();
fahrhoehe = position.z + 0.2; // beginnt, 20cm ueber der Ausgangsposition zu schweben
}
//===== eigene Funktionen Ende ================================================
//=============================================================================
//===== >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
//===== Kameras Anfang ========================================================
schalt_auf_kamera_eins() { //Kamera aus
llClearCameraParams(); // reset camera to default
llSetCameraParams([
CAMERA_ACTIVE, 0 // 1 is active, 0 is inactive
]);
}
schalt_auf_kamera_zwei() { //50m zurueck
llClearCameraParams(); // reset camera to default
llSetCameraParams([
CAMERA_ACTIVE, 1, // 1 is active, 0 is inactive
CAMERA_BEHINDNESS_ANGLE, 15.0, // (0 to 180) degrees
CAMERA_BEHINDNESS_LAG, 0.5, // (0 to 3) seconds
CAMERA_DISTANCE, 50.0, // ( 0.5 to 10) meters
//CAMERA_FOCUS, <0.0,0.0,5.0>, // region relative position
CAMERA_FOCUS_LAG, 0.05 , // (0 to 3) seconds
CAMERA_FOCUS_LOCKED, FALSE, // (TRUE or FALSE)
CAMERA_FOCUS_THRESHOLD, 0.0, // (0 to 4) meters
CAMERA_PITCH, 20.0, // (-45 to 80) degrees
//CAMERA_POSITION, <0.0,0.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.0, // (0 to 4) meters
CAMERA_FOCUS_OFFSET, <3.0,0.0,2.0> // <-10,-10,-10> to <10,10,10> meters
]);
}
//===== Kameras Ende ==========================================================
//=============================================================================
default {
on_rez(integer indeddscher)
{
llResetScript();
}
state_entry()
{
// erstmal gehen wir auf Nummer sicher und sehen zu, dass wir das Teil nicht "physisch" eingepackt haben und es uns jetzt wegfliegt
llSetStatus(STATUS_PHYSICS, FALSE);
// dann ermitteln wir den Eigentuemer, um dem Ballon einen einmaligen Namen zu geben, unter dem ihn das HUD erkennt
objektname_alt = llGetObjectName();
eigentuemer_UUID = llGetOwner();
objektname_neu = "zeppelin-" + (string)eigentuemer_UUID;
//----- Fahrhoehe festlegen
fahrhoeheFestlegen();
//----- Sitz- und Kameraeinrichtung
llSitTarget(<0, 0, -.2>, <0,0,0,1>); //vor, neben, ueber dem Sitzmittelpunkt, Richtung
llSetSitText("Fahr mich");
llSetCameraEyeOffset(kamera_position);
// llSetCameraEyeOffset(<-20, 0, 1>); // the camera is 20m behind and 1m above the object
llSetCameraAtOffset(kamera_fokus);
//===== >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
//===== Fahrzeugeigenschaften Anfang ==========================================
linear_motor.z = geschwindigkeit_steig_sink;
llSetVehicleType(VEHICLE_TYPE_BALLOON);
llSetVehicleVectorParam( VEHICLE_LINEAR_FRICTION_TIMESCALE, <6, 3, 3> ); // geringe lineare Reibung in Fahrtrichtung, hoeher zur Seite und in die Hoehe
llSetVehicleVectorParam( VEHICLE_ANGULAR_FRICTION_TIMESCALE, <6, 1, 1> ); // geringe axialeReibung in Fahrtrichtung, hoeher zur Seite und in die Hoehe
// ============ Linearmotor
llSetVehicleVectorParam( VEHICLE_LINEAR_MOTOR_DIRECTION, <0, 0, 0> );
llSetVehicleFloatParam( VEHICLE_LINEAR_MOTOR_TIMESCALE, 5 ); // [s] Zeit zu vollem Motoreffekt
llSetVehicleFloatParam( VEHICLE_LINEAR_MOTOR_DECAY_TIMESCALE, 10 ); // [s] Zeit zu vollem Motorstillstand
// ============ Winkelmotor
llSetVehicleVectorParam( VEHICLE_ANGULAR_MOTOR_DIRECTION, <0, 0, 0> );
llSetVehicleFloatParam( VEHICLE_ANGULAR_MOTOR_TIMESCALE, 6 ); // [s] Zeit zu vollem Motoreffekt
llSetVehicleFloatParam( VEHICLE_ANGULAR_MOTOR_DECAY_TIMESCALE, 10 ); // [s] Zeit zu vollem Motorstillstand
// ============ Hoehenregulierung
llSetVehicleFloatParam( VEHICLE_HOVER_HEIGHT, fahrhoehe ); // [m] angestrebte Fahrhoehe
llSetVehicleFloatParam( VEHICLE_HOVER_EFFICIENCY, 0.4 ); // von 0 (aprupt) bis 1 (glatt)
llSetVehicleFloatParam( VEHICLE_HOVER_TIMESCALE, 30 ); // Periodenlaenge der Schwingung zur Fahrhoehe
llSetVehicleFloatParam( VEHICLE_BUOYANCY, 1 ); // von 0 (normale Gravitation) bis 1 (schwerelos)
// no linear deflection
llSetVehicleFloatParam( VEHICLE_LINEAR_DEFLECTION_EFFICIENCY, 0 );
llSetVehicleFloatParam( VEHICLE_LINEAR_DEFLECTION_TIMESCALE, 5 );
// no angular deflection
llSetVehicleFloatParam( VEHICLE_ANGULAR_DEFLECTION_EFFICIENCY, 0 );
llSetVehicleFloatParam( VEHICLE_ANGULAR_DEFLECTION_TIMESCALE, 15 );
// Stehaufmaennchen
llSetVehicleFloatParam( VEHICLE_VERTICAL_ATTRACTION_EFFICIENCY, 0.1 );
llSetVehicleFloatParam( VEHICLE_VERTICAL_ATTRACTION_TIMESCALE, 10.0 );
// keine Querneigung
llSetVehicleFloatParam( VEHICLE_BANKING_EFFICIENCY, 0 );
llSetVehicleFloatParam( VEHICLE_BANKING_MIX, 0.7 );
llSetVehicleFloatParam( VEHICLE_BANKING_TIMESCALE, 5 );
// default rotation of local frame
llSetVehicleRotationParam( VEHICLE_REFERENCE_FRAME, <0, 0, 0, 1> );
// remove 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_ROLL_ONLY
| VEHICLE_FLAG_LIMIT_MOTOR_UP );
// set flags
llSetVehicleFlags( VEHICLE_FLAG_HOVER_GLOBAL_HEIGHT );
// | VEHICLE_FLAG_LIMIT_ROLL_ONLY );
//===== Fahrzeugeigenschaften Ende ============================================
//=============================================================================
}
touch_start(integer num) {
key gAvatarKey = llDetectedKey(0);
llLoadURL(gAvatarKey, "SLinfo.de - Social Network Second Life.", "http://www.slinfo.de/vb_forum");
}
changed(integer change) {
if (change & CHANGED_LINK) {
key agent = llAvatarOnSitTarget();
if (agent) {
if (agent != llGetOwner()) {
// jemand anderes als der Eigentuemer setzt sich in den Zeppelin
// llSay(0, "Schoen, dass Du Dich auf einen GRUENEN Sitz gesetzt hast, um einen Ausflug zu geniessen. Um das Luftschiff selbst steuern zu koennen, folge dem Link http://slurl.com/secondlife/Junapel/146/172/23 und kauf eins. Danke.");
// llGiveInventory(agent, "glauchauer shop next to the SLinfo.de headquarters");
// llUnSit(agent);
// llPushObject(agent, <0,0,10>, ZERO_VECTOR, FALSE);
} else {
// der Eigentuemer setzt sich in den Zeppelin
llSetStatus(STATUS_PHYSICS, TRUE);
//----- wir fordern die Kontrolle ueber die Steuerungstasten und die Kamera
llRequestPermissions(agent, PERMISSION_TAKE_CONTROLS | PERMISSION_CONTROL_CAMERA);
schalt_auf_kamera_eins();
llSay(9610, (string)fahrhoehe);
}
} else {
// der Eigentuemer steht auf
llSetObjectName(objektname_alt); // wir setzen den Objektnamen zurueck, um den Eigentuemer nicht zu veraergern
llSetStatus(STATUS_PHYSICS, FALSE);
llSetCameraParams([CAMERA_ACTIVE, 0]); // wir geben dem Benutzer die Kontrolle ueber seine Kamera zurueck
llReleaseControls(); // wir geben dem Benutzer die Kontrolle ueber seine Bewegung zurueck
//geradehaengen();
fahrhoeheFestlegen();
}
}
}
//________wir nehmen die Kontrolle ueber die Steuerungstasten und die Kamera
run_time_permissions(integer perm) {
if (perm) {
llTakeControls(CONTROL_FWD | CONTROL_BACK | CONTROL_RIGHT | CONTROL_LEFT | CONTROL_ROT_RIGHT | CONTROL_ROT_LEFT | CONTROL_UP | CONTROL_DOWN, TRUE, FALSE);
}
if (perm & PERMISSION_CONTROL_CAMERA) {
llSetCameraParams([CAMERA_ACTIVE, 0]);
}
}
//===== >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
//===== Bewegungs- und Kamerakontrolle Anfang =================================
control(key id, integer level, integer edge) {
//===== Bewegung
//----- links
if(level & (CONTROL_ROT_LEFT)) { // linke Cursortaste
omega = geschwindigkeit_drehen * PI / 180;
llSleep(0.0);
llMessageLinked(LINK_ALL_CHILDREN , 0, "wir fliegen nach LINKS", NULL_KEY);
} else if (edge & (CONTROL_LEFT | CONTROL_ROT_LEFT)) {
omega = 0.0;
llSleep(0.0);
llMessageLinked(LINK_ALL_CHILDREN , 0, "wir fliegen NICHT mehr nach LINKS", NULL_KEY);
}
//----- rechts
if(level & (CONTROL_ROT_RIGHT)) { //rechte Cursortaste
omega = -geschwindigkeit_drehen * PI / 180;
llSleep(0.0);
llMessageLinked(LINK_ALL_CHILDREN , 0, "wir fliegen nach RECHTS", NULL_KEY);
} else if (edge & (CONTROL_RIGHT | CONTROL_ROT_RIGHT)) {
omega = 0.0;
llSleep(0.0);
llMessageLinked(LINK_ALL_CHILDREN , 0, "wir fliegen NICHT mehr nach RECHTS", NULL_KEY);
}
// ----- vorwaerts
if(level & CONTROL_FWD) {
linear_motor.x = geschwindigkeit_vorwaerts;
llSleep(0.0);
llMessageLinked(LINK_ALL_CHILDREN , 0, "wir fliegen nach VORN", NULL_KEY);
} else if (edge & CONTROL_FWD) {
linear_motor.x = 0;
llSleep(0.0);
llMessageLinked(LINK_ALL_CHILDREN , 0, "wir fliegen NICHT mehr nach VORN", NULL_KEY);
}
//----- rueckwaerts
if(level & CONTROL_BACK) {
linear_motor.x = -geschwindigkeit_rueckwaerts;
llSleep(0.0);
llMessageLinked(LINK_ALL_CHILDREN , 0, "wir fliegen nach HINTEN", NULL_KEY);
} else if (edge & CONTROL_BACK) {
linear_motor.x = 0;
llSleep(0.0);
llMessageLinked(LINK_ALL_CHILDREN , 0, "wir fliegen NICHT mehr nach HINTEN", NULL_KEY);
}
//----- hoch
if(level & CONTROL_UP) {
if (fahrhoehe < 1000) // hoeher als 1000m kann ein SL-Ballon nicht
{
if (i<=5) fahrhoehe += i/5;
else if (i<=10) fahrhoehe += i/4;
else if (i<=15) fahrhoehe += i/3;
else if (i<=20) fahrhoehe += i/2;
else fahrhoehe += 10.0;
i+=1;
llSetObjectName(objektname_neu); // wir benutzen "unseren" Objektnamen, damit uns das HUD hoert
llSay(9610, (string)fahrhoehe);
llSetObjectName(objektname_alt); // wir setzen den Objektnamen zurueck, um den Eigentuemer nicht zu veraergern
llSleep(0.5);
llMessageLinked(LINK_ALL_CHILDREN , 0, "wir fliegen nach OBEN", NULL_KEY);
}
else
{
fahrhoehe = 1000.0;
llSleep(0.3);
llSay(9610, (string)fahrhoehe);
llWhisper(0, "Hoeher als 1000m fliegt der Ballon nicht.");
}
}
else if (edge & CONTROL_UP) {
// linear_motor.z = 0;
i=1;
llSleep(0.3);
llMessageLinked(LINK_ALL_CHILDREN , 0, "wir fliegen NICHT mehr nach OBEN", NULL_KEY);
//geradehaengen();
}
//----- runter
if(level & CONTROL_DOWN) {
if (fahrhoehe > 0) // wir wollen nicht tauchen
{
if (i<=5) fahrhoehe -= i/5;
else if (i<=10) fahrhoehe -= i/4;
else if (i<=15) fahrhoehe -= i/3;
else if (i<=20) fahrhoehe -= i/2;
else fahrhoehe -= 10.0;
i+=1;
llSetObjectName(objektname_neu); // wir benutzen "unseren" Objektnamen, damit uns das HUD hoert
llSay(9610, (string)fahrhoehe);
llSetObjectName(objektname_alt); // wir setzen den Objektnamen zurueck, um den Eigentuemer nicht zu veraergern
llSleep(0.5);
llMessageLinked(LINK_ALL_CHILDREN , 0, "wir fliegen nach UNTEN", NULL_KEY);
}
else
{
fahrhoehe = 0;
llSleep(0.3);
llSay(9610, (string)fahrhoehe);
llWhisper(0, "Unter den Meeresspiegel fliegt der Ballon nicht.");
}
} else if (edge & CONTROL_DOWN) {
// linear_motor.z = 0;
i=1;
llSleep(0.3);
llMessageLinked(LINK_ALL_CHILDREN , 0, "wir fliegen NICHT mehr nach UNTEN", NULL_KEY);
//geradehaengen();
}
//----- Bewegung anwenden
llSetVehicleVectorParam(VEHICLE_LINEAR_MOTOR_DIRECTION,linear_motor);
llSetVehicleVectorParam(VEHICLE_ANGULAR_MOTOR_DIRECTION, <0,0,omega>);
llSetVehicleFloatParam(VEHICLE_HOVER_HEIGHT, fahrhoehe);
//===== Kamera
if(level & CONTROL_RIGHT) { // [shift] rechte cursortaste
if (kamera == "kamera_eins") {
kamera = "kamera_zwei";
schalt_auf_kamera_zwei();
llSleep(2.5);
}
else if (kamera == "kamera_zwei") {
kamera = "kamera_eins";
schalt_auf_kamera_eins();
llSleep(2.5);
}
}
}
//===== Bewegungs- und Kamerakontrolle Ende ===================================
//=============================================================================
}
Code:
//glauchauer slinfo.de blimp
//propeller, links
//use it, change it, enjoy it, give credit, or not ...
//contact your local Goethe-Institut if there's something you don't understand
float geschwindigkeit_ruhe = 0.1;
float geschwindigkeit_lenken = 1.0;
float schalter_lenken = 0.0;
float geschwindigkeit_vor = 5.0;
float schalter_vor = 0.0;
float geschwindigkeit_hinter = 3.0;
float schalter_hinter = 0.0;
float drehgeschwindigkeit = 0.0;
default
{
on_rez(integer indeddscher)
{
llResetScript();
}
state_entry()
{
drehgeschwindigkeit = geschwindigkeit_ruhe;
}
link_message(integer sender, integer num, string message, key id)
{
if (message == "wir fliegen nach VORN") schalter_vor = 1.0;
else if (message == "wir fliegen nach HINTEN") schalter_hinter = 1.0;
else if (message == "wir fliegen nach LINKS") schalter_lenken = 1.0; // diese zwei Werte unterscheiden sich zwischen
else if (message == "wir fliegen nach RECHTS") schalter_lenken = -1.0; // linkem und rechtem Propeller in ihrem Vorzeichen
else if (message == "wir fliegen NICHT mehr nach VORN") schalter_vor = 0.0;
else if (message == "wir fliegen NICHT mehr nach HINTEN") schalter_hinter = 0.0;
else if (message == "wir fliegen NICHT mehr nach LINKS") schalter_lenken = 0.0;
else if (message == "wir fliegen NICHT mehr nach RECHTS") schalter_lenken = 0.0;
llSleep(0.2);
drehgeschwindigkeit = schalter_vor * geschwindigkeit_vor + schalter_hinter * geschwindigkeit_hinter + schalter_lenken * geschwindigkeit_lenken + geschwindigkeit_ruhe;
llSleep(0.2);
llTargetOmega(<1.0,0.0,0.0>,-drehgeschwindigkeit,1.0);
}
}
Code:
//glauchauer slinfo.de blimp
//propeller, rechts
//use it, change it, enjoy it, give credit, or not ...
//contact your local Goethe-Institut if there's something you don't understand
float geschwindigkeit_ruhe = 0.1;
float geschwindigkeit_lenken = 1.0;
float schalter_lenken = 0.0;
float geschwindigkeit_vor = 5.0;
float schalter_vor = 0.0;
float geschwindigkeit_hinter = 3.0;
float schalter_hinter = 0.0;
float drehgeschwindigkeit = 0.0;
default
{
on_rez(integer indeddscher)
{
llResetScript();
}
state_entry()
{
drehgeschwindigkeit = geschwindigkeit_ruhe;
}
link_message(integer sender, integer num, string message, key id)
{
if (message == "wir fliegen nach VORN") schalter_vor = 1.0;
else if (message == "wir fliegen nach HINTEN") schalter_hinter = 1.0;
else if (message == "wir fliegen nach LINKS") schalter_lenken = -1.0; // diese zwei Werte unterscheiden sich zwischen
else if (message == "wir fliegen nach RECHTS") schalter_lenken = 1.0; // linkem und rechtem Propeller in ihrem Vorzeichen
else if (message == "wir fliegen NICHT mehr nach VORN") schalter_vor = 0.0;
else if (message == "wir fliegen NICHT mehr nach HINTEN") schalter_hinter = 0.0;
else if (message == "wir fliegen NICHT mehr nach LINKS") schalter_lenken = 0.0;
else if (message == "wir fliegen NICHT mehr nach RECHTS") schalter_lenken = 0.0;
llSleep(0.2);
drehgeschwindigkeit = schalter_vor * geschwindigkeit_vor + schalter_hinter * geschwindigkeit_hinter + schalter_lenken * geschwindigkeit_lenken + geschwindigkeit_ruhe;
llSleep(0.2);
llTargetOmega(<1.0,0.0,0.0>,-drehgeschwindigkeit,1.0);
}
}
Code:
//glauchauer slinfo.de blimp
//hoehenruder
//use it, change it, enjoy it, give credit, or not ...
//contact your local Goethe-Institut if there's something you don't understand
rotation geradeaus;
rotation nach_oben;
rotation nach_unten;
rotation ausrichtung;
default
{
on_rez(integer indeddscher)
{
llResetScript();
}
state_entry()
{
geradeaus = llEuler2Rot(<0.0, (0.0 + 0), 90.0> * DEG_TO_RAD);
nach_oben = llEuler2Rot(<0.0, (0.0 - 30), 90.0> * DEG_TO_RAD);
nach_unten = llEuler2Rot(<0.0, (0.0 + 30), 90.0> * DEG_TO_RAD);
ausrichtung = geradeaus;
}
link_message(integer sender, integer num, string message, key id)
{
if (message == "wir fliegen nach OBEN") ausrichtung = nach_oben;
else if (message == "wir fliegen nach UNTEN") ausrichtung = nach_unten;
else if (message == "wir fliegen NICHT mehr nach OBEN") ausrichtung = geradeaus;
else if (message == "wir fliegen NICHT mehr nach UNTEN") ausrichtung = geradeaus;
llSetLocalRot(ausrichtung);
}
}
Code:
//glauchauer slinfo.de blimp
//seitenruder
//use it, change it, enjoy it, give credit, or not ...
//contact your local Goethe-Institut if there's something you don't understand
rotation geradeaus;
rotation nach_links;
rotation nach_rechts;
rotation ausrichtung;
default
{
on_rez(integer indeddscher)
{
llResetScript();
}
state_entry()
{
geradeaus = llEuler2Rot(<0.0, 0.0, (90 + 0) * DEG_TO_RAD>);
nach_links = llEuler2Rot(<0.0, 0.0, (90 - 30) * DEG_TO_RAD>);
nach_rechts = llEuler2Rot(<0.0, 0.0, (90 + 30) * DEG_TO_RAD>);
ausrichtung = geradeaus;
}
link_message(integer sender, integer num, string message, key id)
{
if (message == "wir fliegen nach LINKS") ausrichtung = nach_links;
else if (message == "wir fliegen nach RECHTS") ausrichtung = nach_rechts;
else if (message == "wir fliegen NICHT mehr nach LINKS") ausrichtung = geradeaus;
else if (message == "wir fliegen NICHT mehr nach RECHTS") ausrichtung = geradeaus;
llSetLocalRot(ausrichtung);
}
}
aaaah, nee, Moment. wo ich Euch das schon zeige. ich hab zwei Probleme. ich hab teilweise willkuerlich llSleeps verstreut, in dem Versuch, den Propellern und den Rudern Zeit zu lassen zu reagieren. das ist mir so richtig nicht gelungen. das zweite besteht darin, dass ich beim Aufstehen eine Fehlermeldung bekomme, weil die Kamerakontrolle nicht zurueckgegeben wird, wie ich mir das dachte. also wenn sich wirklich jemand die Skripte durchlesen sollte und Ahnung davon hat: DIE zwei Probleme wuerde ich gern noch irgendwann loesen.