Dynamisches Tankstellensystem Fehler

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, liebe Breadfish Community.


    Ich habe einen Fehler in meinem Tankstellen-System. Das heißt nicht das man es nicht compilen kann sondern Ingame.

    if(strcmp(cmd, "/tanken", true) == 0)
    {
    if(IsPlayerConnected(playerid))
    {
    for(new i = 0; i<MAX_TANKEN; i++) //Hier die Schleife
    {
    if(IsPlayerInRangeOfPoint(playerid, 8.0, TankenInfo[i][tPosX], TankenInfo[i][tPosY], TankenInfo[i][tPosZ])) //Ist der Spieler bei der Tanke?
    {
    //if(IsANoTachoVehicle(GetPlayerVehicleID(playerid)))
    //{
    // SendClientMessage(playerid,COLOR_RED,"* Ein Fahrrad hat keinen Tank!"); //Erstmal entfernt.
    //}
    //else
    //{
    new VID;
    new FillUp;
    new string[256];
    VID = GetPlayerVehicleID(i);
    FillUp = GetGasMax(GetVehicleModel(VID)) - Gas[VID];
    if(GetPlayerMoney(i) >= FillUp+4)
    {
    SetTimer("Fillup",RefuelWait,0);
    Refueling[playerid] = 1;
    FreezePlayer(playerid);
    TankenInfo[i][tLiter] -= FillUp;
    UpdateTankenLabel(i);
    format(string, sizeof(string), "* Tankstelle: {FFFFFF}Du betankst dein Fahrzeug an der %s Tankstelle!", TankenInfo[i][tDescr]);
    SendClientMessage(playerid,COLOR_LIGHTBLUE,string);
    SendClientMessage(playerid,COLOR_LIGHTBLUE,"* Tankstelle: {FFFFFF}Bitte warte bis es aufgetankt wurde!");
    return 1;
    }
    else
    {
    format(string,sizeof(string),"* Du hast nicht genug Geld zum Tanken auf der Hand! Kosten: %d$",FillUp);
    SendClientMessage(i,COLOR_LIGHTGREEN,string);
    }


    }
    else
    {
    //SendClientMessage(playerid,COLOR_RED,"* Du befindest dich an keiner Tankstelle!");
    //return 1;
    GameTextForPlayer(playerid,"~r~DU BIST AN KEINER TANKSTELLE!",4000,3); //Kommt immer bei der zweiten Tanke die ich erstelle.
    }
    }
    }

    }




    Fehlermeldung:


    Immer wenn ich die erste Tankstelle mit einem Ingame Command erstelle (siehe unten), funktioniert es. Bei der zweiten Tanke die ich aber erstelle kommt immer:
    "Du bist an keiner Tankstelle"


    Ich wäre unheimlich dankbar wenn jemand den Fehler findet.



    ==> /createtanke Befehl:


    ocmd:createtanke(playerid,params[])
    {
    new tstring[500];
    if(!IsAAdmin(playerid))return SendClientMessage(playerid,COLOR_RED,"Du bist kein Admin!");
    new Name[300],string[128];
    if(sscanf(params,"s",Name))return SendClientMessage(playerid,COLOR_GREY,"Verwende: /createtanke [Name]");
    format(tstring, sizeof(tstring), "Administrator %s hat eine Tankstelle erstellt! Name: %s", Spielername(playerid), Name);
    TBroadCast(COLOR_LIGHTBLUE, tstring);
    new i = GetTankenID(); if(i == -1) return SendClientMessage(playerid, COLOR_GREY, "Error: Maximale Anzahl an Tankstellen erreicht!");
    format(string, sizeof string, "/Tankstellen/%d.ini", i);
    dini_Create(string);
    TankenInfo[i][tPosX] = GetX(playerid);
    TankenInfo[i][tPosY] = GetY(playerid);
    TankenInfo[i][tPosZ] = GetZ(playerid);
    TankenInfo[i][tLiter] = 500;
    format(TankenInfo[i][tDescr], 50, "%s", Name);
    format(string, sizeof string, "{0087FF}|Tankstelle|\n{FFFFFF}%s\nVerfügare Liter: {00A500}%d/500", TankenInfo[i][tDescr], TankenInfo[i][tLiter]);
    TankenInfo[i][tLabel] = CreateDynamic3DTextLabel(string, COLOR_WHITE, TankenInfo[i][tPosX], TankenInfo[i][tPosY], TankenInfo[i][tPosZ], 15, INVALID_PLAYER_ID, INVALID_VEHICLE_ID, 1, -1, -1, -1, 15);
    TankenInfo[i][tPick] = CreateDynamicPickup(1650, 1, TankenInfo[i][tPosX], TankenInfo[i][tPosY], TankenInfo[i][tPosZ]);
    return 1;
    }




    Mit freundlichen Grüßen


    DirectX

  • if(strcmp(cmd, "/tanken", true) == 0)
    {
    if(IsPlayerConnected(playerid))
    {
    for(new i = 0; i<MAX_TANKEN; i++) //Hier die Schleife
    {
    if(IsPlayerInRangeOfPoint(playerid, 8.0, TankenInfo[i][tPosX], TankenInfo[i][tPosY], TankenInfo[i][tPosZ])) //Ist der Spieler bei der Tanke?
    {
    //if(IsANoTachoVehicle(GetPlayerVehicleID(playerid)))
    //{
    // SendClientMessage(playerid,COLOR_RED,"* Ein Fahrrad hat keinen Tank!"); //Erstmal entfernt.
    //}
    //else
    //{
    new VID;
    new FillUp;
    new string[256];
    VID = GetPlayerVehicleID(i);
    FillUp = GetGasMax(GetVehicleModel(VID)) - Gas[VID];
    if(GetPlayerMoney(i) >= FillUp+4)
    {
    SetTimer("Fillup",RefuelWait,0);
    Refueling[playerid] = 1;
    FreezePlayer(playerid);
    TankenInfo[i][tLiter] -= FillUp;
    UpdateTankenLabel(i);
    format(string, sizeof(string), "* Tankstelle: {FFFFFF}Du betankst dein Fahrzeug an der %s Tankstelle!", TankenInfo[i][tDescr]);
    SendClientMessage(playerid,COLOR_LIGHTBLUE,string);
    SendClientMessage(playerid,COLOR_LIGHTBLUE,"* Tankstelle: {FFFFFF}Bitte warte bis es aufgetankt wurde!");
    return 1;
    }
    else
    {
    format(string,sizeof(string),"* Du hast nicht genug Geld zum Tanken auf der Hand! Kosten: %d$",FillUp);
    return SendClientMessage(i,COLOR_LIGHTGREEN,string);
    }
    }
    }
    //SendClientMessage(playerid,COLOR_RED,"* Du befindest dich an keiner Tankstelle!");
    //return 1;
    GameTextForPlayer(playerid,"~r~DU BIST AN KEINER TANKSTELLE!",4000,3); //Kommt immer bei der zweiten Tanke die ich erstelle.
    }
    }


    Was habe ich gemacht?
    1) return bei "Du hast nicht genug Geld" hinzugefügt.
    2) GameText aus der Schleife geholt, das muss unter die Schleife, da der Punkt nicht erreicht wird, wenn er an einer Tankstelle ist, ansonsten wird dieser Punkt aufgerufen.


    Tip: if(IsPlayerConnected(playerid)) kannst du weg machen. Wenn der Spieler den Command eingibt, wird er auch verbunden sein. ;)

  • if(strcmp(cmd, "/tanken", true) == 0)
    {
    for(new i = 0; i<MAX_TANKEN; i++) //Hier die Schleife
    {
    if(IsPlayerInRangeOfPoint(playerid, 8.0, TankenInfo[i][tPosX], TankenInfo[i][tPosY], TankenInfo[i][tPosZ])) //Ist der Spieler bei der Tanke?
    {
    //if(IsANoTachoVehicle(GetPlayerVehicleID(playerid)))
    //{
    // SendClientMessage(playerid,COLOR_RED,"* Ein Fahrrad hat keinen Tank!"); //Erstmal entfernt.
    //}
    //else
    //{
    new VID;
    new FillUp;
    new string[256];
    VID = GetPlayerVehicleID(i);
    FillUp = GetGasMax(GetVehicleModel(VID)) - Gas[VID];
    if(GetPlayerMoney(i) >= FillUp+4)
    {
    SetTimer("Fillup",RefuelWait,0);
    Refueling[playerid] = 1;
    FreezePlayer(playerid);
    TankenInfo[i][tLiter] -= FillUp;
    UpdateTankenLabel(i);
    format(string, sizeof(string), "* Tankstelle: {FFFFFF}Du betankst dein Fahrzeug an der %s Tankstelle!", TankenInfo[i][tDescr]);
    SendClientMessage(playerid,COLOR_LIGHTBLUE,string);
    SendClientMessage(playerid,COLOR_LIGHTBLUE,"* Tankstelle: {FFFFFF}Bitte warte bis es aufgetankt wurde!");
    return 1;
    }
    else
    {
    format(string,sizeof(string),"* Du hast nicht genug Geld zum Tanken auf der Hand! Kosten: %d$",FillUp);
    return SendClientMessage(i,COLOR_LIGHTGREEN,string);
    }
    }
    }
    //SendClientMessage(playerid,COLOR_RED,"* Du befindest dich an keiner Tankstelle!");
    //return 1;
    GameTextForPlayer(playerid,"~r~DU BIST AN KEINER TANKSTELLE!",4000,3); //Kommt immer bei der zweiten Tanke die ich erstelle.
    }



    So habe ich das jetzt macht aber keinen Unterschied... bei der ersten erstellten Tanke gehts immer bei der zweiten nicht..

  • Du hast i und playerid vertauscht, z.T.


    VID = GetPlayerVehicleID(i);
    zu:
    VID = GetPlayerVehicleID(playerid);


    if(GetPlayerMoney(i) >= FillUp+4)
    zu:
    if(GetPlayerMoney(playerid) >= FillUp+4)



    (Unter Vorbehalt sind vielleicht noch mehr drinne, je nach dem was so manche Variable/Funktion macht, überprüf das bitte.)

  • if(strcmp(cmd, "/tanken", true) == 0)
    {
    new fillstation = -1;
    for(new i = 0; i<MAX_TANKEN; i++) //Hier die Schleife
    {
    if(IsPlayerInRangeOfPoint(playerid, 8.0, TankenInfo[i][tPosX], TankenInfo[i][tPosY], TankenInfo[i][tPosZ]))
    {
    fillstation = i;//Tankstelle gefunden
    break;//Schleife anhalten
    }
    }

    if(fillstation != -1)//Fragt ab ob eine Tankstelle in der Nähe vom Spieler gefunden wurde
    {
    //if(IsANoTachoVehicle(GetPlayerVehicleID(playerid)))
    //{
    // SendClientMessage(playerid,COLOR_RED,"* Ein Fahrrad hat keinen Tank!"); //Erstmal entfernt.
    //}
    //else
    //{


    new VID;
    new FillUp;
    new string[256];
    VID = GetPlayerVehicleID(playerid);
    FillUp = GetGasMax(GetVehicleModel(VID)) - Gas[VID];

    if(GetPlayerMoney(playerid) >= FillUp+4)
    {
    SetTimer("Fillup",RefuelWait,0);
    Refueling[playerid] = 1;
    FreezePlayer(playerid);
    TankenInfo[fillstation][tLiter] -= FillUp;
    UpdateTankenLabel(fillstation);

    format(string, sizeof(string), "* Tankstelle: {FFFFFF}Du betankst dein Fahrzeug an der %s Tankstelle!", TankenInfo[fillstation][tDescr]);
    SendClientMessage(playerid,COLOR_LIGHTBLUE,string);
    SendClientMessage(playerid,COLOR_LIGHTBLUE,"* Tankstelle: {FFFFFF}Bitte warte bis es aufgetankt wurde!");
    return 1;
    }
    else
    {
    format(string,sizeof(string),"* Du hast nicht genug Geld zum Tanken auf der Hand! Kosten: %d$",FillUp);
    return SendClientMessage(playerid, COLOR_LIGHTGREEN,string);
    }
    }
    else
    {
    return GameTextForPlayer(playerid,"~r~DU BIST AN KEINER TANKSTELLE!", 4000, 3);
    }
    }


    Wenn du die for-Schleifen so verwendest, sparst du enorm Leistung.
    Ich hab dir auch deine i und playerid Fehler gefixt.

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen