Kleiner Bug bei /engine

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
  • Guten Abend liebe Breadfish Community,


    ich bin neu hier, und ich sah auf anblick das dass Forum was richtig gutes zu bieten hat.
    Jedoch habe ich ein kleines Problem, ich bin zwar schon seit 2008 in sachen SA-MP Scripting dabei, jedoch nicht so groß erfahren darin.


    Mein problem ist der Befehl "/engine". Den habe ich selbst gemacht, jedoch, wenn man das 2 mal /engine eingibt schaltet man den Motor ab, aber wenn man austeigt, oder jemand anders /engine macht, steht da zum zweiten mal "Dein Motor wurde eingeschaltet.", oder "Dein Motor wurde ausgeschaltet" obwohl man ihn ein/aus geschaltet hat.
    Deshalb wollte ich fragen was falsch ist? Dies ist mein Code:




    Befehl:


    if (strcmp(cmd, "/engine", true) == 0)
    {
    if(enginemotor[playerid] == 0)
    {
    if(GetPlayerState(playerid) == PLAYER_STATE_DRIVER)
    {
    if (IsPlayerInAnyVehicle(playerid))
    {
    new vid = GetPlayerVehicleID(playerid);
    if(vid != INVALID_VEHICLE_ID)
    {
    GetVehicleParamsEx(vid,engine,lights2,alarm,doors,bonnet,boot,objective);
    SetVehicleParamsEx(vid,VEHICLE_PARAMS_ON,lights2,alarm,doors,bonnet,boot,objective);
    SendClientMessage(playerid, COLOR_LIGHTBLUE, "* Du hast den Motor erfolgreich gestartet.");
    enginemotor[playerid] = 1;
    }
    }
    }
    }
    else
    {
    if(GetPlayerState(playerid) == PLAYER_STATE_DRIVER)
    {
    if (IsPlayerInAnyVehicle(playerid))
    {
    new vid = GetPlayerVehicleID(playerid);
    if(vid != INVALID_VEHICLE_ID)
    {
    GetVehicleParamsEx(vid,engine,lights2,alarm,doors,bonnet,boot,objective);
    SetVehicleParamsEx(vid,VEHICLE_PARAMS_OFF,lights2,alarm,doors,bonnet,boot,objective);
    SendClientMessage(playerid, COLOR_LIGHTBLUE, "* Du hast den Motor erfolgreich ausgeschaltet.");
    enginemotor[playerid] = 0;
    }
    }
    }
    }
    return 1;
    }



    //


    OnPlayerExitVehicle:


    if(enginemotor[playerid] == VEHICLE_PARAMS_OFF)
    {
    enginemotor[playerid] = 0;
    return 1;
    }

    if(enginemotor[playerid] == VEHICLE_PARAMS_ON)
    {
    enginemotor[playerid] = 1;
    return 1;
    }



    Und normalerweise müsste er erkennen das der Motor eigentlich aus ist, und nicht nochmal ausgeschaltet werden sollte, sondern eingeschaltet werden soll.


    Was ist der fehler?



    Ich hoffe das ich hier vielleicht geholfen werde, und ich wäre sehr dankbar dafür



    Mit freundlichen Grüßen



    Michael

  • wenn ich das richtig verstehe:
    Player 1 ( // Player 1 enginemotor[playerid]=0 )steigt in das Auto, macht /engine -> der Motor ist an // Player 1 enginemotor[playerid]=1
    Als Nächstes steigt Player 2 ( Player 2 enginemotor[playerid]=0 ) in das Auto, macht ebenfalls /engine -> der Motor geht wieder an // Player 2 enginemotor[playerid]=1


    das liegt dann einfach daran, dass die Variable enginemotor in Abhängigkeit von der Playerid erstellt wird.
    Das Auto ist zwar das gleiche, aber die Playerid verändert sich.


    Musst des in Abhängigkeit von dem Auto schreiben, dann sollts so gehen, wie du's dir vorstellst

  • Einfach die Variable


    enginemotor[MAX_PLAYERS];
    Mit der ersetzen
    enginemotor[MAX_VEHICLES];
    Und statt playerid, dass hier bentuzen
    enginemotor[vid] = 1;

  • Beim Callback OnPlayerExitVehicle hast du was vertauscht.
    if(enginemotor[playerid] == VEHICLE_PARAMS_OFF)
    {
    enginemotor[playerid] = 0; //Sollte 1 sein, sonst heißt es "Wenn enginemotor = 0, dann enginemotor = 0"
    return 1;
    }

    if(enginemotor[playerid] == VEHICLE_PARAMS_ON)
    {
    enginemotor[playerid] = 1; //Sollte 0 sein, siehe oben
    return 1;
    }