Problem mit carinfo-Command

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
  • Hallo,


    mein carinfo befehl funktioniert derzeit nicht Richtig. Gerne möchte ich nun, das die Abfrage if(IsAFahrschule(Vehicle)) abgefragt wird und ausgegeben wird. Das abfragen funktioniert schon ganz gut. Allerdings durchläuft er alle Abfragen. Was habe ich falsch gemacht ?


    Hinzu wird mir der GetPlayerName(pID) nicht ausgelesen bzw nicht Richtig angezeigt.



    ocmd:carinfo(playerid,params[])
    {
    new string[128],vid,Float:x,Float:y,Float:z,pID;
    if(sscanf(params,"d",vid)) return SendClientMessage(playerid,-1,"/carinfo [CARID]");
    if(vid == INVALID_VEHICLE_ID) return SendClientMessage(playerid,-1,"Ungültige Fahrzeug ID");
    GetVehiclePos(vid,x,y,z);
    if(!IsPlayerInRangeOfPoint(playerid,8,x,y,z)) return SendClientMessage(playerid,-1,"Du bist nicht in der Nähe des Fahrzeugs das du abrufen möchtest!");
    pID = GetVehicleBesitzer(vid);



    if(strlen(LastDriver[vid]) <= 0)
    {
    new Vehicle;
    if(IsAFahrschule(Vehicle))
    {
    format(string,sizeof(string),"Dieses Fahrzeug gehört der Fahrschule. Letzter Fahrer: %s",LastDriver[GetPlayerVehicleID(playerid)]);
    SendClientMessage(playerid,-1,string);

    }
    if(IsAOamtCar(Vehicle))
    {
    format(string,sizeof(string),"Dieses Fahrzeug gehört dem Ordnungsamt. Letzter Fahrer: %s",LastDriver[GetPlayerVehicleID(playerid)]);
    SendClientMessage(playerid,-1,string);
    }
    if(IsABus(Vehicle))
    {
    format(string,sizeof(string),"Dieses Fahrzeug gehört der Bus Organisation. Letzter Fahrer: %s",LastDriver[GetPlayerVehicleID(playerid)]);
    SendClientMessage(playerid,-1,string);
    return 1;
    }
    else
    {
    format(string,sizeof(string),"Besitzer %s [%d]",getPlayerName(pID),pID);
    SendClientMessage(playerid,-1,string);
    }
    }
    else
    {
    if(pID == -1)
    {
    SendClientMessage(playerid,-1,"Dies ist ein Staatsfahrzeug");
    format(string,sizeof(string),"Letzter Fahrer %s",LastDriver[GetPlayerVehicleID(playerid)]);
    SendClientMessage(playerid,-1,string);
    }
    else
    {



    format(string,sizeof(string),"Besitzer %s [%d] Letzter Fahrer: %s",getPlayerName(pID),pID,LastDriver[GetPlayerVehicleID(playerid)]);
    SendClientMessage(playerid,-1,string);
    }
    }
    return 1;
    }

  • Ich habe das ganze nun wie folgt gemacht



    ocmd:carinfo(playerid,params[])
    {
    new string[128],vid,Float:x,Float:y,Float:z,pID;
    if(sscanf(params,"d",vid)) return SendClientMessage(playerid,-1,"/carinfo [CARID]");
    if(vid == INVALID_VEHICLE_ID) return SendClientMessage(playerid,-1,"Ungültige Fahrzeug ID");
    GetVehiclePos(vid,x,y,z);
    if(!IsPlayerInRangeOfPoint(playerid,8,x,y,z)) return SendClientMessage(playerid,-1,"Du bist nicht in der Nähe des Fahrzeugs das du abrufen möchtest!");
    pID = GetVehicleBesitzer(vid);



    if(strlen(LastDriver[vid]) <= 0)
    {
    new Vehicle;
    if(IsAFahrschule(Vehicle))
    {
    format(string,sizeof(string),"Dieses Fahrzeug gehört der Fahrschule. Letzter Fahrer: %s",LastDriver[GetPlayerVehicleID(playerid)]);
    SendClientMessage(playerid,-1,string);
    return 1;

    }
    else if(IsAOamtCar(Vehicle))
    {
    format(string,sizeof(string),"Dieses Fahrzeug gehört dem Ordnungsamt. Letzter Fahrer: %s",LastDriver[GetPlayerVehicleID(playerid)]);
    SendClientMessage(playerid,-1,string);
    return 1;
    }
    else if(IsABus(Vehicle))
    {
    format(string,sizeof(string),"Dieses Fahrzeug gehört der Bus Organisation. Letzter Fahrer: %s",LastDriver[GetPlayerVehicleID(playerid)]);
    SendClientMessage(playerid,-1,string);
    return 1;
    }
    else
    {
    format(string,sizeof(string),"Besitzer %s [%d]",getPlayerName(pID),pID);
    SendClientMessage(playerid,-1,string);
    }
    }
    else
    {
    format(string,sizeof(string),"Besitzer %s [%d] Letzter Fahrer: %s",getPlayerName(pID),pID,LastDriver[GetPlayerVehicleID(playerid)]);
    SendClientMessage(playerid,-1,string);
    }
    return 1;
    }


    Allerdings liest er mir dann nur den ersten Wert der Fahrschule aus und nicht alle weiteren.

  • Die Variable "Vehicle" ist bei dir immer 0, da du diese einfach nur definierst aber nirgends einen Wert zu weist.
    Daher schreibe das so:

    C
    if(IsAFahrschule(Vehicle))

    zu

    C
    if(IsAFahrschule(vid))

    Bei den anderen Abfragen dann genau so, bzw, überall wo du "Vehicle" hast zu "vid" ändern. "vid" wird ja die Vehicle-ID vom Fahrzeug sein, die du da immer angibst, oder?

  • Die Variable "Vehicle" ist bei dir immer 0, da du diese einfach nur definierst aber nirgends einen Wert zu weist.
    Daher schreibe das so:

    C
    if(IsAFahrschule(Vehicle))

    zu

    C
    if(IsAFahrschule(vid))

    Bei den anderen Abfragen dann genau so, bzw, überall wo du "Vehicle" hast zu "vid" ändern. "vid" wird ja die Vehicle-ID vom Fahrzeug sein, die du da immer angibst, oder?

    Das ganze klappt nun. Nun hatte ich aber noch mit GetPlayerName(pID) ein Problem.



    else
    {
    format(string,sizeof(string),"Besitzer %s [%d] Letzter Fahrer: %s",getPlayerName(pID),pID,LastDriver[GetPlayerVehicleID(playerid)]);
    SendClientMessage(playerid,-1,string);
    }


    Dort gibt er mir den Nickname nicht aus

  • Kommt drauf an, wie dein GetVehicleBesitzer aussieht. Kannst du uns das einmal bitte schicken?

  • Kommt drauf an, wie dein GetVehicleBesitzer aussieht. Kannst du uns das einmal bitte schicken?

    Tut mir leid fürs fehlende nachdenken gerade. Aber klar doch




    GetVehicleBesitzer(vehicelid)
    {
    for(new i = 0; i < sizeof(cInfo); i++)
    {
    if(cInfo[i][id_x] == vehicelid)
    {
    for(new playerid = 0; playerid<MAX_PLAYERS; playerid++)
    {
    if(cInfo[i][besitzer] == playerid) return playerid;
    }
    }
    return -1;
    }
    return 1;
    }

  • Bei dieser Methode musst du aber sicher gehen, das beim erstellen der Fahrzeuge (nach dem Login, wenn die Fahrzeuge geladen werden), bei "besitzer" auch die playerid vom Spieler eingetragen wird und nicht irgendeine andere ID. ;)


    - EDIT:
    Schreibe, um Fehler eindeutig zu verhindern, den Code so:

    C
    else
    {
    	if(pID > -1)
    	{
    		format(string,sizeof(string),"Besitzer %s [%d] Letzter Fahrer: %s",getPlayerName(pID),pID,LastDriver[vid]);
    		SendClientMessage(playerid,-1,string);
    	}
    }
  • Die zweite Schleife ist nicht notwendig und das obere return -1 darf nicht in der Schleife stehen.
    Schreibe es so:
    GetVehicleBesitzer(vehicelid)
    {
    for(new i = 0; i < sizeof(cInfo); i++)
    {
    if(cInfo[i][id_x] == vehicelid)
    {
    if(!IsPlayerConnected(cInfo[i][besitzer]) || IsPlayerNPC(cInfo[i][besitzer])) return -1;
    else return cInfo[i][besitzer];
    }
    }
    return -1;
    }

  • Danke für deine Mühe die du dir machst. Allerdings funktioniert das auch nicht wirklich.


    // Edit
    Er gibt einfach den getPlayerName nicht aus




    Die zweite Schleife ist nicht notwendig und das obere return -1 darf nicht in der Schleife stehen.
    Schreibe es so:
    GetVehicleBesitzer(vehicelid){ for(new i = 0; i < sizeof(cInfo); i++) { if(cInfo[i][id_x] == vehicelid) { if(!IsPlayerConnected(cInfo[i][besitzer]) || IsPlayerNPC(cInfo[i][besitzer])) return -1; else return cInfo[i][besitzer]; } } return -1;}

    Ergebnis ist das mir rein garnichts mehr angezeigt wird. Nichtmal mehr die db id


  • ocmd:carinfo(playerid,params[])
    {
    new string[128],vid,Float:x,Float:y,Float:z,pID;
    if(sscanf(params,"d",vid)) return SendClientMessage(playerid,-1,"/carinfo [CARID]");
    if(vid == INVALID_VEHICLE_ID) return SendClientMessage(playerid,-1,"Ungültige Fahrzeug ID");
    GetVehiclePos(vid,x,y,z);
    if(!IsPlayerInRangeOfPoint(playerid,8,x,y,z)) return SendClientMessage(playerid,-1,"Du bist nicht in der Nähe des Fahrzeugs das du abrufen möchtest!");
    pID = GetVehicleBesitzer(vid);



    if(strlen(LastDriver[vid]) <= 0)
    {
    if(IsAFahrschule(vid))
    {
    format(string,sizeof(string),"Dieses Fahrzeug gehört der Fahrschule. Letzter Fahrer: %s",LastDriver[GetPlayerVehicleID(pID)]);
    SendClientMessage(playerid,-1,string);
    return 1;

    }
    else if(IsAOamtCar(vid))
    {
    format(string,sizeof(string),"Dieses Fahrzeug gehört dem Ordnungsamt. Letzter Fahrer: %s",LastDriver[GetPlayerVehicleID(pID)]);
    SendClientMessage(playerid,-1,string);
    return 1;
    }
    else if(IsABus(vid))
    {
    format(string,sizeof(string),"Dieses Fahrzeug gehört der Bus Organisation. Letzter Fahrer: %s",LastDriver[GetPlayerVehicleID(pID)]);
    SendClientMessage(playerid,-1,string);
    return 1;
    }
    else
    {
    if(pID > -1)
    {
    format(string,sizeof(string),"Besitzer %s [%d] Letzter Fahrer: %s",getPlayerName(pID),pID,LastDriver[vid]);
    SendClientMessage(playerid,-1,string);
    }
    }
    }
    return 1;
    }

  • Füge nach
    if(pID > -1)
    {
    format(string,sizeof(string),"Besitzer %s [%d] Letzter Fahrer: %s",getPlayerName(pID),pID,LastDriver[vid]);
    SendClientMessage(playerid,-1,string);
    }
    Mal das ein
    else
    {
    format(string,sizeof(string),"Besitzer Niemand [%d] Letzter Fahrer: %s",pID,LastDriver[vid]);
    SendClientMessage(playerid,-1,string);
    }


    Zeigt es dir dann etwas an?

  • Ich habe scheinbar unbewusst einen Fehler gemacht.


    Er wirft mir den Wert von


    if(pID > -1) { format(string,sizeof(string),"Besitzer %s [%d] Letzterr Fahrer: %s",getPlayerName(pID),pID,LastDriver[vid]); SendClientMessage(playerid,-1,string); }


    Allerdings nicht den


    getPlayerName(pID),


    sondern nur


    ,pID,LastDriver[vid]


    // Edit


    Problem folgender Maßen behoben



    Den Name über getPlayername abgefragt und als string an die Funktion übergeben


    GetPlayerName(i, string, MAX_PLAYER_NAME);


    // Edit


    Doch noch nicht erledigt. Nun wird mir zwar der Name angezeigt wenn ich Ihn abfrage allerdings nicht wenn der /motor befehl verwendet wurde um den letzten Fahrer auszulesen.



    Vielleicht kann mir da noch wer helfen



    ocmd:carinfo(playerid,params[])
    {
    if(IsPlayerInAnyVehicle(playerid)) return SendClientMessage(playerid,COLOR_RED,"Du musst dein Fahrzeug verlassen um die Abfrage tätigen zu können.");
    new string[128],vid,Float:x,Float:y,Float:z,pID;
    if(sscanf(params,"d",vid)) return SendClientMessage(playerid,-1,"/carinfo [CARID]");
    if(vid == INVALID_VEHICLE_ID) return SendClientMessage(playerid,-1,"Ungültige Fahrzeug ID");
    GetVehiclePos(vid,x,y,z);
    if(!IsPlayerInRangeOfPoint(playerid,8,x,y,z)) return SendClientMessage(playerid,-1,"Du bist nicht in der Nähe des Fahrzeugs das du abrufen möchtest!");
    pID = GetVehicleBesitzer(vid);



    if(strlen(LastDriver[vid]) <= 0)
    {
    if(IsAFahrschule(vid))
    {
    format(string,sizeof(string),"Dieses Fahrzeug gehört der Fahrschule. Letzter Fahrer: %s",LastDriver[GetPlayerVehicleID(p_id)]);
    SendClientMessage(playerid,-1,string);
    print("Privat3");



    }
    else if(IsAOamtCar(vid))
    {
    format(string,sizeof(string),"Dieses Fahrzeug gehört dem Ordnungsamt. Letzter Fahrer: %s vID: %i",LastDriver[GetPlayerVehicleID(pID)],vid);
    SendClientMessage(playerid,-1,string);
    print("Privat2");
    }
    else if(IsABus(vid))
    {
    format(string,sizeof(string),"Dieses Fahrzeug gehört der Bus Organisation. Letzter Fahrer: %s",LastDriver[GetPlayerVehicleID(pID)]);
    SendClientMessage(playerid,-1,string);
    print("Privat1");
    }

    else if(pID == -1)
    {
    SendClientMessage(playerid,COLOR_RED,"Dieses Fahrzeug gehört dem Staat");
    }
    else
    { new i;
    GetPlayerName(i, string, MAX_PLAYER_NAME);
    format(string,sizeof(string),"Besitzer %s [%d]",string,pID);
    SendClientMessage(playerid,-1,string);
    }
    }
    else
    {
    if(pID == -1)
    {
    SendClientMessage(playerid,-1,"Dies ist ein Staatsfahrzeug");
    format(string,sizeof(string),"Letzter Fahrer %s",LastDriver[GetPlayerVehicleID(playerid)]);
    SendClientMessage(playerid,-1,string);
    }
    else
    {
    format(string,sizeof(string),"Besitzer %s [%d] ",getPlayerName(pID),pID);
    SendClientMessage(playerid,-1,string);
    }
    format(string,sizeof(string),"Letzter Fahrer: %s",LastDriver[GetPlayerVehicleID(playerid)]);
    SendClientMessage(playerid,-1,string);
    }
    return 1;
    }



    ocmd:motor(playerid,params[])
    {
    if(GetPlayerState(playerid)!=PLAYER_STATE_DRIVER)return
    SendClientMessage(playerid,COLOR_RED,"Du bist nicht der Fahrer eines Fahrzeugs.");
    new Vehicle = GetPlayerVehicleID(playerid), engine,lights,alarm,doors,bonnet,boot,objective;



    //Fahrschule
    if(IsAFahrschule(Vehicle))
    {
    if(PlayerInfo[playerid][pFahrschulmotor]==0)
    {
    SendClientMessage(playerid,COLOR_RED,"Es findet kein Termin in der Fahrschule statt.");
    return 1;
    }
    GetVehicleParamsEx(Vehicle, engine,lights,alarm,doors,bonnet,boot,objective);
    if(engine == VEHICLE_PARAMS_ON)
    {
    SetVehicleParamsEx(Vehicle,VEHICLE_PARAMS_OFF,lights,alarm,doors,bonnet,boot,objective);
    GameTextForPlayer(playerid, "~n~~n~~n~~n~~n~~n~~W~Motor ~r~aus!", 2000, 5);
    DestroyVehicle(playerid);
    }
    else
    {
    SetVehicleParamsEx(Vehicle,VEHICLE_PARAMS_ON,lights,alarm,doors,bonnet,boot,objective);
    GameTextForPlayer(playerid, "~n~~n~~n~~n~~n~~n~~W~Motor ~g~an!", 2000, 5);
    PlayerInfo[playerid][pFahrschulmotor]=0;
    format(LastDriver[Vehicle],30,"%s",getPlayerName2(playerid));
    }
    return 1;
    }



    //Bus
    if(IsAbus(Vehicle) && PlayerInfo[playerid][pJob] == 1)
    {
    GetVehicleParamsEx(Vehicle, engine,lights,alarm,doors,bonnet,boot,objective);
    if(engine == VEHICLE_PARAMS_ON)
    {
    SetVehicleParamsEx(Vehicle,VEHICLE_PARAMS_OFF,lights,alarm,doors,bonnet,boot,objective);
    GameTextForPlayer(playerid, "~n~~n~~n~~n~~n~~n~~W~Motor ~r~aus!", 2000, 5);
    }
    else
    {
    SetVehicleParamsEx(Vehicle,VEHICLE_PARAMS_ON,lights,alarm,doors,bonnet,boot,objective);
    GameTextForPlayer(playerid, "~n~~n~~n~~n~~n~~n~~W~Motor ~g~an!", 2000, 5);
    format(LastDriver[Vehicle],30,"%s",getPlayerName(playerid));
    }
    return 1;
    }



    //Private Fahrzeuge
    for(new id = 0; id < sizeof(cInfo); id++)
    {
    if(cInfo[id][id_x] == Vehicle)
    {
    if(cInfo[id][besitzer] == PlayerInfo[playerid][p_id])
    {
    GetVehicleParamsEx(Vehicle, engine,lights,alarm,doors,bonnet,boot,objective);
    if(engine == 1)
    {
    SetVehicleParamsEx(Vehicle,0,lights,alarm,doors,bonnet,boot,objective);
    GameTextForPlayer(playerid, "~n~~n~~n~~n~~n~~n~~W~Motor ~r~aus!", 2000, 5);



    }
    else
    {
    SetVehicleParamsEx(Vehicle,1,lights,alarm,doors,bonnet,boot,objective);
    GameTextForPlayer(playerid, "~n~~n~~n~~n~~n~~n~~W~Motor ~g~an!", 2000, 5);
    format(LastDriver[Vehicle],30,"%s",getPlayerName(playerid));



    }
    }
    else
    {
    SendClientMessage(playerid, 0xFF0000FF, "Dieses Fahrzeug gehört nicht dir.");
    }
    return 1;
    }
    SendClientMessage(playerid,COLOR_RED,"Du besitzt keinen Schlüssel für dieses Fahrzeug.");
    return 1;
    }
    return 1;
    }

    2 Mal editiert, zuletzt von robbi2304 ()

  • Du hast da immer noch einen Fehler drin. Bei carinfo wird dir nämlich immer der Name von ID 0 gegeben.


    Nimm bei GetPlayerName pID anstatt i und lösche new i.