Command funktioniert nicht richtig...

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
  • Moin Leute,
    sry für die etwas blöde Überschrift :D Ich habn Problem mit meinem Repair-Befehl. Immer wenn ich /repair eingebe wird geprüft, ob ich in der Nähe einer Tankstelle bin. Wenn ich nirgendwo in der Nähe bin wird mir die Nachricht "Du bist nicht an einer Tankstelle" so oft geschickt, wie Tankstellen rein"gescriptet" sind.+
    COMMAND:repair(playerid,params[])
    {
    new vID, Float:vDamage, Float:vHealth, Money, msg[128];
    vID = GetClosestVehicle(playerid, 7.0);
    GetVehicleHealth(vID, vHealth);
    vDamage=1000.0-vHealth;
    Money = floatround(vDamage,floatround_ceil);
    if(GetPVarInt(playerid,"Fraktion") != 5)
    {
    for(new i=0;i<MAX_TANKSTELLEN;i++)
    {
    if(IsPlayerInRangeOfPoint(playerid,15.0,Tankstellen[i][0],Tankstellen[i][1],Tankstellen[i][2]))
    {
    WithdrawPlayerMoney(playerid,Money*8);
    RepairVehicle(vID);
    Motorschaden[vID]=false;
    format(msg, sizeof(msg),"Du hast dein Fahrzeug für %d$ repariert!", Money);
    SCM(playerid, COLOR_GREEN, msg);
    return 1;
    }
    else
    {
    SendClientMessage(playerid,COLOR_RED,"Du bist nicht an einer Tankstelle!");
    }
    }
    }
    else
    {
    if(Motorschaden[vID]==true)
    {
    for(new i=0;i<MAX_TANKSTELLEN;i++)
    {
    if(IsPlayerInRangeOfPoint(playerid,15.0,Tankstellen[i][0],Tankstellen[i][1],Tankstellen[i][2]))
    {
    WithdrawPlayerMoney(playerid,Money*3);
    RepairVehicle(vID);
    Motorschaden[vID]=false;
    format(msg, sizeof(msg),"Du hast das Fahrzeug für %d$ repariert!", Money);
    SCM(playerid, COLOR_GREEN, msg);
    return 1;
    }
    else
    {
    SendClientMessage(playerid,COLOR_RED,"Motorschäden können nur an Tankstellen repariert werden!");
    }
    }


    }
    else
    {
    WithdrawPlayerMoney(playerid,Money*3);
    RepairVehicle(vID);
    Motorschaden[vID]=false;
    format(msg, sizeof(msg),"Du hast das Fahrzeug für %d$ repariert!", Money);
    SCM(playerid, COLOR_GREEN, msg);
    return 1;
    }
    }
    return 1;
    }
    Danke im Vorraus.
    MfG,
    AliBobMali

    Einmal editiert, zuletzt von AliBobMali ()

  • Das liegt an der For-schleife! Lass einfach bei der Abfrage ob man in der Nähe ist, die else abfrage weg. Oder verwende bei Erfolg return 1 ein und mache die Aussage, dass man nicht in der Nähe ist ausserhalb der Abfrage.


    Edit: Eine weitere möglichkeit wäre abzufragen ob die Variable der For-Schleife schon bei der Maximalen anzahl angekommen ist und in dem Fall dann eine Nachricht ausgeben zu lassen.

  • Hab das ganze jetzt mal umgescriptet aber jetzt geht nichts mehr...
    *Edit: Problem besteht immernoch... Kann mir keiner helfen?
    COMMAND:repair(playerid,params[])
    {
    new vID, Float:vDamage, Float:vHealth, Money, msg[128];
    vID = GetClosestVehicle(playerid, 7.0);
    GetVehicleHealth(vID, vHealth);
    vDamage=1000.0-vHealth;
    Money = floatround(vDamage,floatround_ceil);
    if(GetPVarInt(playerid,"Fraktion") != 5)
    {
    for(new i=0;i<=MAX_TANKSTELLEN;i++)
    {
    if(!IsPlayerInRangeOfPoint(playerid,15.0,Tankstellen[i][0],Tankstellen[i][1],Tankstellen[i][2])) continue;
    if(i==MAX_TANKSTELLEN)return SCM(playerid, COLOR_RED, "Du befindest dich an keiner Tankstelle!");
    WithdrawPlayerMoney(playerid,Money*8);
    RepairVehicle(vID);
    Motorschaden[vID]=false;
    format(msg, sizeof(msg),"Du hast dein Fahrzeug für %d$ repariert!", Money);
    SCM(playerid, COLOR_GREEN, msg);
    return 1;
    }
    }
    if(GetPVarInt(playerid,"Fraktion") == 5)
    {
    if(Motorschaden[vID]==true)
    {
    for(new i=0;i<MAX_TANKSTELLEN;i++)
    {
    if(!IsPlayerInRangeOfPoint(playerid,15.0,Tankstellen[i][0],Tankstellen[i][1],Tankstellen[i][2])) continue;
    if(i==MAX_TANKSTELLEN)return SCM(playerid, COLOR_RED, "Motorschäden können nur an Tankstellen repariert werden!");
    WithdrawPlayerMoney(playerid,Money*3);
    RepairVehicle(vID);
    Motorschaden[vID]=false;
    format(msg, sizeof(msg),"Du hast das Fahrzeug für %d$ repariert!", Money);
    SCM(playerid, COLOR_GREEN, msg);
    return 1;
    }
    }
    if(Motorschaden[vID]==false)
    {
    WithdrawPlayerMoney(playerid,Money*3);
    RepairVehicle(vID);
    Motorschaden[vID]=false;
    format(msg, sizeof(msg),"Du hast das Fahrzeug für %d$ repariert!", Money);
    SCM(playerid, COLOR_GREEN, msg);
    return 1;
    }


    }
    return 1;
    }

    Einmal editiert, zuletzt von AliBobMali ()

  • COMMAND:repair(playerid,params[])
    {
    new vID, Float:vDamage, Float:vHealth, Money, msg[128];
    vID = GetClosestVehicle(playerid, 7.0);
    GetVehicleHealth(vID, vHealth);
    vDamage=1000.0-vHealth;
    Money = floatround(vDamage,floatround_ceil);
    if(GetPVarInt(playerid,"Fraktion") != 5)
    {
    for(new i=0;i<MAX_TANKSTELLEN;i++)
    {
    if(IsPlayerInRangeOfPoint(playerid,15.0,Tankstellen[i][0],Tankstellen[i][1],Tankstellen[i][2]))
    {
    WithdrawPlayerMoney(playerid,Money*8);
    RepairVehicle(vID);
    Motorschaden[vID]=false;
    format(msg, sizeof(msg),"Du hast dein Fahrzeug für %d$ repariert!", Money);
    SCM(playerid, COLOR_GREEN, msg);
    return 1;
    }
    else return SendClientMessage(playerid,COLOR_RED,"Du bist nicht an einer Tankstelle!");
    }
    }
    else
    {
    if(Motorschaden[vID]==true)
    {
    for(new i=0;i<MAX_TANKSTELLEN;i++)
    {
    if(IsPlayerInRangeOfPoint(playerid,15.0,Tankstellen[i][0],Tankstellen[i][1],Tankstellen[i][2]))
    {
    WithdrawPlayerMoney(playerid,Money*3);
    RepairVehicle(vID);
    Motorschaden[vID]=false;
    format(msg, sizeof(msg),"Du hast das Fahrzeug für %d$ repariert!", Money);
    SCM(playerid, COLOR_GREEN, msg);
    return 1;
    }
    else return SendClientMessage(playerid,COLOR_RED,"Motorschäden können nur an Tankstellen repariert werden!");
    }


    }
    else
    {
    WithdrawPlayerMoney(playerid,Money*3);
    RepairVehicle(vID);
    Motorschaden[vID]=false;
    format(msg, sizeof(msg),"Du hast das Fahrzeug für %d$ repariert!", Money);
    SCM(playerid, COLOR_GREEN, msg);
    return 1;
    }
    }
    return 1;
    }

  • Danke erstmal für die Hilfe.
    Habs grad ausprobiert und mir wird die Nachricht nur einmal geschickt.
    Nur leider Checkt der Befehl nur ob ich an der 1. von mir angegebenen Tankstelle bin. Wenn nicht kommt die Nachricht "Du bist nicht an einer Tankstelle!".
    Nur mal so ne vermutung...
    MfG


    //Edit: Habs hinbekommen, trotzdem danke :)
    //Edit 2: Anstatt für den selben Command einen neuen Thread zu starten stell ich meine Frage hier. Der Command funktioniert nich richtig, findet jemand Fehler?
    MfG
    COMMAND:repair(playerid,params[])
    {
    new vID, vID2, Float:vDamage, Float:vHealth, Money, msg[128];
    vID = GetClosestCar(playerid, 7.0);
    vID2 = GetPlayerVehicleID(playerid);
    if(Motor[vID]==true)return SCM(playerid, COLOR_RED,"Willst du den Motor nicht noch ausschalten?");
    if(IsPlayerInVehicle(playerid, vID2))return SCM(playerid, COLOR_RED,"Willst du das Auto wirklich von innen heraus reparieren?");
    GetVehicleHealth(vID, vHealth);
    if(vHealth>=1000)return SCM(playerid, COLOR_RED, "Das Fahrzeug hat keinen Schaden!");
    vDamage=1000-vHealth;
    Money = floatround(vDamage/1000*100);
    if(GetPVarInt(playerid,"Fraktion") == 5)
    {
    if(Motorschaden[vID]==true)
    {
    for(new i=0;i<MAX_TANKSTELLEN;i++)
    {
    if(i==MAX_TANKSTELLEN+1)return SendClientMessage(playerid,COLOR_RED,"Motorschäden können nur an Tankstellen repariert werden!");
    if(IsPlayerInRangeOfPoint(playerid,15.0,Tankstellen[i][0],Tankstellen[i][1],Tankstellen[i][2])) continue;
    {
    WithdrawPlayerMoney(playerid,Money*3);
    RepairVehicle(vID);
    Motorschaden[vID]=false;
    format(msg, sizeof(msg),"Du hast das Fahrzeug für %d$ repariert! Du kannst %d$ verlangen!", Money*3, Money*5);
    SCM(playerid, COLOR_GREEN, msg);
    return 1;
    }
    }


    }
    else
    {
    WithdrawPlayerMoney(playerid,Money*3);
    RepairVehicle(vID);
    Motorschaden[vID]=false;
    format(msg, sizeof(msg),"Du hast das Fahrzeug für %d$ repariert! Du kannst %d$ verlangen!", Money*3, Money*5);
    SCM(playerid, COLOR_GREEN, msg);
    return 1;
    }
    }
    else
    {
    for(new i=0;i<MAX_TANKSTELLEN+1;i++)
    {
    if(i==MAX_TANKSTELLEN)return SendClientMessage(playerid,COLOR_RED,"Du bist nicht an einer Tankstelle!");
    if(!IsPlayerInRangeOfPoint(playerid,15.0,Tankstellen[i][0],Tankstellen[i][1],Tankstellen[i][2])) continue;
    {
    WithdrawPlayerMoney(playerid,Money*8);
    RepairVehicle(vID);
    Motorschaden[vID]=false;
    format(msg, sizeof(msg),"Du hast dein Fahrzeug für %d$ repariert!", Money*10);
    SCM(playerid, COLOR_GREEN, msg);
    return 1;
    }
    }
    }
    return 1;
    }

    2 Mal editiert, zuletzt von AliBobMali ()