/repair Schleife funktioniert nicht. Was tun?

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
  • if(strcmp(cmdtext,"/repair",true)==0)
    {
    if(IsPlayerInAnyVehicle(playerid))
    {
    if(GetPVarInt(playerid,"Vehrepair")==0)
    {
    SetPVarInt(playerid,"Vehrepair",1);
    SendClientMessage(playerid,BLAU,"Dein Fahrzeug wird nun repariert wenn es Schaden nimmt.");
    for(new i = i; i < MAX_PLAYERS; i++)
    {
    new vehicleid = (GetPlayerVehicleID(playerid));
    new Float:VehHealth;
    GetVehicleHealth(vehicleid,VehHealth);
    if(VehHealth <1000.0)
    {
    SetVehicleHealth(vehicleid,1000.0);
    RepairVehicle(vehicleid);
    }
    }
    }
    else
    {
    SetPVarInt(playerid,"Vehrepair",0);
    SendClientMessage(playerid,BLAU,"Dein Fahrzeug wird nun nicht mehr repariert.");
    }
    }
    else
    {
    SendClientMessage(playerid, ROT, "Du bist in keinem Fahrzeug.");
    }
    return 1;
    }


    Bekomme keine Errors aber ingame wird das Fahrzeug nur einmal wieder repariert und das nur wenn man /repair eingibt und Vehrepair auf 0 ist.


    Die Schleife soll auch für jeden Spieler einzelnd laufen und wenn Vehrepair wieder auf 0 gesetzt wird soll sie nicht mehr laufen.


    Bekomme es leider nicht hin habe schon Sufu benutzt und Google misshandelt, aber keine Lösung gefunden :pinch:

  • Verstehe zwar nicht ganz, wieso du über /REPAIR von Jedem Spieler das Fahrzeug reparieren willst, aber gut.
    for(new i = i; i < MAX_PLAYERS; i++)
    {
    new vehicleid = (GetPlayerVehicleID(playerid)); // <-- Hier müsste i hin.
    new Float:VehHealth;
    GetVehicleHealth(vehicleid,VehHealth);
    if(VehHealth <1000.0)
    {
    SetVehicleHealth(vehicleid,1000.0);
    RepairVehicle(vehicleid);
    }
    }


    Die Variablen würde Ich nicht immer neu in der Schleif erstellen:
    if(strcmp(cmdtext,"/repair",true)==0)
    {
    if(IsPlayerInAnyVehicle(playerid))
    {
    if(GetPVarInt(playerid,"Vehrepair")==0)
    {
    new
    vehicleid,
    Float:VehHealth;
    SetPVarInt(playerid,"Vehrepair",1);
    SendClientMessage(playerid,BLAU,"Dein Fahrzeug wird nun repariert wenn es Schaden nimmt.");
    for(new i = 0; i < MAX_PLAYERS; i++)
    {
    vehicleid = GetPlayerVehicleID(i);
    GetVehicleHealth(vehicleid,VehHealth);
    if(VehHealth < 1000.0)
    {
    SetVehicleHealth(vehicleid,1000.0);
    RepairVehicle(vehicleid);
    }
    }
    }
    else
    {
    SetPVarInt(playerid,"Vehrepair",0);
    SendClientMessage(playerid,BLAU,"Dein Fahrzeug wird nun nicht mehr repariert.");
    }
    }
    else
    {
    SendClientMessage(playerid, ROT, "Du bist in keinem Fahrzeug.");
    }
    return 1;
    }
    Hast i mit playerid vertauscht.

  • Also wenn du es nicht weisst, kann ich es ja erst recht nicht wissen. Man kann auch nur helfen, wenn man genau weiss, worum es geht :| .
    Dein /REPAIR repariert von jedem Spieler das Fahrzeug, dass sollte wohl klar sein ...

  • ja es soll aber von dem auslösenden spieler das fahrzeug reparieren... das macht es ja aber nur wenn man /repair eingibt... es soll ja immer weiter reparieren wenn das fahrzeug schaden bekommt bis man wieder /repair eingibt und Vehhealth wieder auf 0 steht :/

  • ja die For-Schleife raus! Damit gehst du jeden Spieler durch, nehme die Funktion SetTimerEx (http://wiki.sa-mp.com/wiki/SetTimerEx) die tust du dann immer wiederholen ca. alle 5 sekunden (musst in Milisekunden umrechnen) und in der Funktion gibst du vor das das Fahrzeug von dem User (man beachte SetTimerEx ist user bezogen!) reparier wird.


    Wenn du willst das du mit /repair das wieder beenden tust baust du noch eine Variable ein, die bei dem ersten /repair auf 1 gesetzt wird und bei zweiten mal auf 0. Du darfst aber nicht die Abfragen vergessen ob du Variable auf 0 oder 1 ist!

  • Hmm also die abfrage habe ich ja aber wie soll ich das machen das es den Public dann ausführt ? Btw. kannst du mal erklären wie das genau geht oder mal ein Beispiel Poste ? Fine mit der Sufu und Google nur etwas das nicht mal im geringsten was mit meinem zu tun hat und ich nicht erfahren könnte wie ich es schreiben soll :D


    Man beachte ich scripte erst seid ner Woche ;)

  • So


    new Variable[MAX_PLAYERS];
    forward RepairVehicle(playerid);


    if(strcmp(cmdtext,"/repair",true)==0)
    {
    if(IsPlayerInAnyVehicle(playerid) && Variable[playerid] == 0)
    {
    SendClientMessage(playerid,Farbe,"Du bist in einem Auto, es wird nun Repariert.");
    SetVehicleHealth(GetPlayerVehicleID(playerid),100.0);
    RepairVehicle(GetPlayerVehicleID(playerid));
    SetTimerEx("RepairVehicle", 1000*5,1, "d", playerid);
    Variable[playerid] = 1;
    }
    else if(Variable[playerid] == 1)
    {
    SetTimerEx("RepairVehicle", 1000*5,0, "d", playerid);
    SendClientMessage(playerid,Farbe,"dein Auto wird nicht mehr Repariert!");
    }
    }
    return 1;
    }


    public RepairVehicle(playerid)
    {
    if(IsPlayerInAnyVehicle(playerid))
    {
    SetVehicleHealth(GetPlayerVehicleID(playerid),100.0);
    RepairVehicle(GetPlayerVehicleID(playerid));
    }
    return 1;
    }



    EDIT: Ausgebessert

  • hmm ich bekomme es nicht hin :(


    wieso denn new Variable[MAX_PLAYERS]; ?



    EDIT: ah okay danke klappt nun ;D

    Einmal editiert, zuletzt von Rey ()