Problem mit Blaulicht auf dem Dach

Wichtiger Hinweis: Bitte ändert nicht manuell die Schriftfarbe auf schwarz sondern belasst es bei der Standardeinstellung. Somit tragt ihr dazu bei dass euer Text auch bei Verwendung unseren dunklen Forenstils noch lesbar ist!

Tipp: Ihr wollt längere Codeausschnitte oder Logfiles bereitstellen? Benutzt unseren eigenen PasteBin-Dienst Link
  • N'Abend zusammen,


    ich habe soweit alles fertig, dass man sich beim Hupen ein Blaulicht auf's Dach macht. Ich würde das gerne so haben, dass, wenn man noch mal H drückt, das Blaulicht wieder verschwindet.


    Im Moment sieht der Code so aus:



    public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
    {
    new LightOn;
    new alarm;
    new alarm2;
    new Float:x,Float:y,Float:z;

    if(newkeys & KEY_CROUCH)
    {
    if(IsPlayerInAnyVehicle(playerid))
    {
    if(LightOn == 0)
    {
    alarm = CreateObject(18646,x,y,z,0,0,0,283); //die 1. neonröhre
    alarm2 = CreateObject(18646,x,y,z,0,0,0,283); //die 2. neoröhre
    AttachObjectToVehicle(alarm, GetPlayerVehicleID(playerid), 0.77,-0.2,1.4,0,0,0); //das ist die eine seite
    AttachObjectToVehicle(alarm2, GetPlayerVehicleID(playerid), -0.77,-0.2,1.4,0,0,0); //das die andere seite unter dem auto
    SendClientMessage(playerid, COLOR_GREEN, "Licht montiert.");
    LightOn = 1;
    }
    else if(LightOn == 1)
    {
    DestroyObject(alarm);
    DestroyObject(alarm2);
    SendClientMessage(playerid, COLOR_GREEN, "Licht demontiert.");
    LightOn = 0;
    }
    }
    }
    return 1;
    }


    Das Blaulicht wird erstellt, jedoch geht es nicht mehr runter. Dafür habe ich mal die SendClientMessage eingebaut, um zu gucken, was passiert. Bei jedem mal, wo ich H drücke, schreibt er "Licht montiert."


    Weiß jemand weiter?

  • Mal mit else statt ele if versucht?


    Achja ich würd das für jedes Auto einzelen speichern sprich Arrays

    "Bevor ich mir Informationen aus der "Bild" hole,
    werde ich anfangen, Wahlergebnisse danach vorauszusagen,
    neben welchen Busch unsere Katze gepinkelt hat."

    Margarete Stokowski

  • //oben
    new alarm[MAX_VEHICLES], alarm2[MAX_VEHICLES];
    new bool:LightOn[MAX_VEHICLES];


    public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
    {
    new Float:x,Float:y,Float:z;
    if(newkeys & KEY_CROUCH)
    {
    if(IsPlayerInAnyVehicle(playerid))
    {
    new vehicleid = GetPlayerVehicleID(playerid);
    if(LightOn[vehicleid] == false)
    {
    alarm[vehicleid] = CreateObject(18646,x,y,z,0,0,0,283); //die 1. neonröhre
    alarm2[vehicleid] = CreateObject(18646,x,y,z,0,0,0,283); //die 2. neoröhre
    AttachObjectToVehicle(alarm, GetPlayerVehicleID(playerid), 0.77,-0.2,1.4,0,0,0); //das ist die eine seite
    AttachObjectToVehicle(alarm2, GetPlayerVehicleID(playerid), -0.77,-0.2,1.4,0,0,0); //das die andere seite unter dem auto
    SendClientMessage(playerid, COLOR_GREEN, "Licht montiert.");
    LightOn[vehicleid] = true;
    }
    else if(LightOn[vehicleid] == true)
    {
    DestroyObject(alarm[vehicleid]);
    DestroyObject(alarm2[vehicleid]);
    SendClientMessage(playerid, COLOR_GREEN, "Licht demontiert.");
    LightOn[vehicleid] = false;
    }
    }
    }
    return 1;
    }


    Sorry hab den Theard eig nur überflogen sonst hätt ich die Fehler sofort gesehn :D


    Machs am besten so mit Arrays -> speicherst das für jedes Auto

    "Bevor ich mir Informationen aus der "Bild" hole,
    werde ich anfangen, Wahlergebnisse danach vorauszusagen,
    neben welchen Busch unsere Katze gepinkelt hat."

    Margarete Stokowski

  • Dann klopp das 'else' einfach raus oder nimm deine 'else if' abfrage raus und schreib einfach nur 'else' dahin

    "Bevor ich mir Informationen aus der "Bild" hole,
    werde ich anfangen, Wahlergebnisse danach vorauszusagen,
    neben welchen Busch unsere Katze gepinkelt hat."

    Margarete Stokowski

  • Oder es liegt irgendwie am DestroyObject. Ich habe bei OnGameModeExit() alle Tore eingetragen, die im Script sind und sie weden nach GMX trotzdem ein weiteres mal erstellt. Also so, dass ein Tor runterfährt und das andere einfach stehen bleibt.



    public OnGameModeExit()
    {
    DestroyObject(LVPDGate1);
    DestroyObject(LVPDGate2);
    return 1;
    }

  • Wenn du GMX machst wird zuerst OnGameModeExit und dann wieder OnGameModeInit aufgerufen.


    Außerdem versteh ich dein Problem nicht ganz...
    Du machst ein GMX und sagst das ein Tor oben bleibt und das andere wieder runter fährt?
    Wenn ja, dann frage ich dich ist das vor dem GMX auch schon so gewesen oder hast du einen Befehl genutzt der das Tor runterfährt?
    Oder hast du das Tor runterfahren lassen?

    "Bevor ich mir Informationen aus der "Bild" hole,
    werde ich anfangen, Wahlergebnisse danach vorauszusagen,
    neben welchen Busch unsere Katze gepinkelt hat."

    Margarete Stokowski

  • Wenn ich den Server starte und /move eingebe, fährt das Tor normal runter und ich kann durch fahren. Wenn ich nen GMX mache, also den Server nicht ausmache, dann wird ein neues Tor erstellt. Das eine fährt runter, aber da steht dann ein anderes und ich kann nicht durchfahren. Deswegen will ich alle Tore bei OnGameModeExit löschen.