Besetzte Fraktionsfahrzeuge nicht respawnen lassen

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,
    ich habe ein kleines problem mit dem Leader Respawn befehl für Fraktions Fahrzeuge,
    es werden alle Fahrzeuge respawnt, auch die besetzten.


    Hier der Command:
    ocmd:respawnfw(playerid,params[])
    {
    if(SpielerInfo[playerid][Leader] == 0)
    {
    SendClientMessage(playerid,COLOR_WHITE,"Du bist kein Leader!");
    return 1;
    }
    if(SpielerInfo[playerid][Leader] == 2)
    {
    for(new i; i < sizeof(FactionCars); i++)
    {
    if(FactionCars[i][fFaction][0] == GetPlayerFaction(playerid))
    {
    if(!IsVehicleEmpty(i))
    {
    continue;
    }
    else
    {
    DestroyAndCreateFactionCar(i);
    }
    }
    }
    }
    return 1;
    }


    Funktion DestroyAndCreateFactionCar
    public DestroyAndCreateFactionCar(fc)
    {
    if(!IsVehicleEmpty(fc))
    {
    return 1;
    }
    if(FactionCars[fc][fVehid] >= 400 && FactionCars[fc][fVehid] <= 611)
    {
    DestroyVehicle(FactionCars[fc][fCarid]);
    FactionCars[fc][fCarid] = CreateVehicle(FactionCars[fc][fVehid],FactionCars[fc][fPos][0],FactionCars[fc][fPos][1],FactionCars[fc][fPos][2],FactionCars[fc][fPos][3],FactionCars[fc][fCol][0],FactionCars[fc][fCol][1],-255);
    #if defined FACTION_CARS_TUNEABLE
    if(IsAllowedFactionToTune(FactionCars[fc][fFaction][0]))
    {
    if(FactionCars[fc][fTuning][0] != 0)
    {
    AddVehicleComponent(FactionCars[fc][fCarid],FactionCars[fc][fTuning][0]);
    }
    if(FactionCars[fc][fTuning][1] != 0)
    {
    AddVehicleComponent(FactionCars[fc][fCarid],FactionCars[fc][fTuning][1]);
    }
    if(FactionCars[fc][fTuning][2] != 0)
    {
    AddVehicleComponent(FactionCars[fc][fCarid],FactionCars[fc][fTuning][2]);
    }
    if(FactionCars[fc][fTuning][3] != 0)
    {
    AddVehicleComponent(FactionCars[fc][fCarid],FactionCars[fc][fTuning][3]);
    }
    if(FactionCars[fc][fTuning][4] != 0)
    {
    AddVehicleComponent(FactionCars[fc][fCarid],FactionCars[fc][fTuning][4]);
    }
    if(FactionCars[fc][fTuning][5] != 0)
    {
    AddVehicleComponent(FactionCars[fc][fCarid],FactionCars[fc][fTuning][5]);
    }
    if(FactionCars[fc][fTuning][6] != 0)
    {
    AddVehicleComponent(FactionCars[fc][fCarid],FactionCars[fc][fTuning][6]);
    }
    if(FactionCars[fc][fTuning][7] != 0)
    {
    AddVehicleComponent(FactionCars[fc][fCarid],FactionCars[fc][fTuning][7]);
    }
    if(FactionCars[fc][fTuning][8] != 0)
    {
    AddVehicleComponent(FactionCars[fc][fCarid],FactionCars[fc][fTuning][8]);
    }
    if(FactionCars[fc][fTuning][9] != 0)
    {
    AddVehicleComponent(FactionCars[fc][fCarid],FactionCars[fc][fTuning][9]);
    }
    if(FactionCars[fc][fTuning][10] != 0)
    {
    AddVehicleComponent(FactionCars[fc][fCarid],FactionCars[fc][fTuning][10]);
    }
    if(FactionCars[fc][fTuning][11] != 0)
    {
    AddVehicleComponent(FactionCars[fc][fCarid],FactionCars[fc][fTuning][11]);
    }
    if(FactionCars[fc][fTuning][12] != 0)
    {
    AddVehicleComponent(FactionCars[fc][fCarid],FactionCars[fc][fTuning][12]);
    }
    if(FactionCars[fc][fTuning][13] != 0)
    {
    AddVehicleComponent(FactionCars[fc][fCarid],FactionCars[fc][fTuning][13]);
    }
    }
    #endif
    motor[fc] = false;
    SetVehicleHealth(fc,1500);
    }
    return true;
    }


    Funktion IsVehicleEmpty:
    stock IsVehicleEmpty(vehicleid)
    {
    for(new i =0; i < GetMaxPlayers(); i++)
    {
    if(!IsPlayerConnected(i)) continue;
    if(IsPlayerInVehicle(i,vehicleid)) return 0;
    }
    return 1;
    }



    Habe bereits alles mögliche probiert bekomme es aber nicht hin...


    Währe sehr freundlich wenn mir jemand helfen würde...



    //edit:
    Schleife durch alle Spieler entfernt

    05eb03de-9fda-461c-9dfc-834ae5b64e65.png << Server | Home >> 13462590508.png

    Einmal editiert, zuletzt von xXManuelXx ()

  • mach mal den
    stock IsVehicleEmpty(vehicleid)
    {
    for(new i =0; i < GetMaxPlayers(); i++)
    {
    if(!IsPlayerConnected(i)) continue;
    if(IsPlayerInVehicle(i,vehicleid)) return 0;
    }
    return 1;
    }
    zu den
    stock IsVehicleEmpty(vehicleid)
    {
    for(new i =0; i < GetMaxPlayers(); i++)
    if(IsPlayerInVehicle(i,vehicleid)) return 1;
    return 0;
    }
    dann sollte es eig gehen
    der command noch
    ocmd:respawnfw(playerid,params[])
    {
    if(SpielerInfo[playerid][Leader] == 0)
    return SendClientMessage(playerid,COLOR_WHITE,"Du bist kein Leader!");
    if(SpielerInfo[playerid][Leader] == 2)
    {
    for(new x; x < MAX_VEHICLES; x++)
    for(new i; i < sizeof(FactionCars); i++)
    if(x==FactionCars[i])
    if(FactionCars[i][fFaction][0] == GetPlayerFaction(playerid))
    if(IsVehicleEmpty(i))continue;
    DestroyAndCreateFactionCar(i);
    }
    return 1;
    }


    //e CMD erneuert

    All in all it's just another brick in the wall


  • du hast isplayerconnected gelöscht? das ist ziemlich wichtig in einer schleife..
    zudem hast du die returns vertauscht.. wenn jemand in dem auto sitzt returnst du 1 ?? genau falschrum wenn man sich den namen vom dem stock anschaut...



    hier mal mein vorschlag:
    ocmd:respawnfw(playerid,params[])
    {
    if(SpielerInfo[playerid][Leader] == 0)return SendClientMessage(playerid,COLOR_WHITE,"Du bist kein Leader!");
    if(SpielerInfo[playerid][Leader] == 2)
    {
    for(new i; i < sizeof(FactionCars); i++)
    {
    if(FactionCars[i][fFaction][0] == GetPlayerFaction(playerid))//vlcht liegt auch hier der fehler
    {
    if(!IsVehicleEmpty(FactionCars[i][fCarid]))continue;
    DestroyAndCreateFactionCar(FactionCars[i][fCarid]);
    }
    }
    }
    return 1;
    }

  • zudem hast du die returns vertauscht.. wenn jemand in dem auto sitzt returnst du 1 ??


    Das war absicht
    return 1 wenn er im Auto sitzt dann ist es true
    return 0 wenn er es nicht ist also false


    Außerdem musste ne schleife durch alle vehicles machen da der sonst nur von id 0 bis Xx geht und nicht die die eigendlich respawnt werden

    u hast isplayerconnected gelöscht? das ist ziemlich wichtig in einer schleife..

    Indirekt wenn man MAX_PLAYERS nutzt dann versteh ich es aber bei GetMaxPlayers.. ist es eh whayne von meiner sicht aus

    All in all it's just another brick in the wall

  • ajo ich wollts nur mal sagen dass wenn der stock IsVehicleEmpty heißt will man doch eine 1 returnt bekommen falls es wahr ist und 0 falls es falsch ist oder nicht?


    Indirekt wenn man MAX_PLAYERS nutzt dann versteh ich es aber bei GetMaxPlayers.. ist es eh whayne von meiner sicht aus


    naja ob man jetzt MAX_PLAYERS auf 100 stellt oder die slot zahl auf 100 stellt ist das gleich da geb ich dir recht.. aber warum soll die schleife den spieler überprüfen der nicht connected ist.. das verursacht lags..
    for(new i =0;i<GetMaxPlayers();i++)
    oder
    for(new i=0;i<MAX_PLAYERS;i++)
    oder
    for(new i=0;i<100;i++)
    das ist alles das gleiche..


    zudem liest GetMaxPlayers(); die zahl der slots aus der server.cfg aus was auch wiederrum mehr resourcen frisst wie einfach MAX_PLAYERS abzufrage..

    Einmal editiert, zuletzt von Tround ()

  • stock IsVehicleEmpty heißt will man doch eine 1 returnt bekommen falls es wahr ist und 0 falls es falsch ist oder nicht?


    naja ich habs ja gemacht weil
    if(!...)//er ist nicht im Auto == return 0
    else... //we ist im auto == return 1


    @TE wie erstellst du die Autos?

    All in all it's just another brick in the wall

  • So erstelle ich die:


    public LoadFactionCars(){
    if(!fexist(FACTION_CAR_FILE)){
    new File:tfFile=fopen(FACTION_CAR_FILE,io_write);
    fclose(tfFile);
    }
    new File:fFile=fopen(FACTION_CAR_FILE,io_read),Content[1024],fc;
    while(fread(fFile,Content) && fc<sizeof(FactionCars)){
    StripNewLine(Content);
    sscanf(Content,"dffffdddddddddddddddddddddd",
    FactionCars[fc][fVehid],
    FactionCars[fc][fPos][0],
    FactionCars[fc][fPos][1],
    FactionCars[fc][fPos][2],
    FactionCars[fc][fPos][3],
    FactionCars[fc][fCol][0],
    FactionCars[fc][fCol][1],
    FactionCars[fc][fFaction][0],
    FactionCars[fc][fFaction][1],
    FactionCars[fc][fFaction][2],
    FactionCars[fc][fFaction][3],
    FactionCars[fc][fFaction][4],
    FactionCars[fc][fTuning][0],
    FactionCars[fc][fTuning][1],
    FactionCars[fc][fTuning][2],
    FactionCars[fc][fTuning][3],
    FactionCars[fc][fTuning][4],
    FactionCars[fc][fTuning][5],
    FactionCars[fc][fTuning][6],
    FactionCars[fc][fTuning][7],
    FactionCars[fc][fTuning][8],
    FactionCars[fc][fTuning][9],
    FactionCars[fc][fTuning][10],
    FactionCars[fc][fTuning][11],
    FactionCars[fc][fTuning][12],
    FactionCars[fc][fTuning][13],
    FactionCars[fc][fPrice]);
    if(FactionCars[fc][fVehid] >= 400 && FactionCars[fc][fVehid] <= 611){
    FactionCars[fc][fCarid] = CreateVehicle(FactionCars[fc][fVehid],FactionCars[fc][fPos][0],FactionCars[fc][fPos][1],FactionCars[fc][fPos][2],FactionCars[fc][fPos][3],FactionCars[fc][fCol][0],FactionCars[fc][fCol][1],-255);
    // #if defined FACTION_CARS_LOCKABLE
    fLockCar(FactionCars[fc][fCarid]);
    FactionCars[fc][fLock] = true;
    // #endif
    #if defined FACTION_CARS_TUNEABLE
    if(IsAllowedFactionToTune(FactionCars[fc][fFaction][0])){
    if(FactionCars[fc][fTuning][0] != 0) { AddVehicleComponent(FactionCars[fc][fCarid],FactionCars[fc][fTuning][0]); }
    if(FactionCars[fc][fTuning][1] != 0) { AddVehicleComponent(FactionCars[fc][fCarid],FactionCars[fc][fTuning][1]); }
    if(FactionCars[fc][fTuning][2] != 0) { AddVehicleComponent(FactionCars[fc][fCarid],FactionCars[fc][fTuning][2]); }
    if(FactionCars[fc][fTuning][3] != 0) { AddVehicleComponent(FactionCars[fc][fCarid],FactionCars[fc][fTuning][3]); }
    if(FactionCars[fc][fTuning][4] != 0) { AddVehicleComponent(FactionCars[fc][fCarid],FactionCars[fc][fTuning][4]); }
    if(FactionCars[fc][fTuning][5] != 0) { AddVehicleComponent(FactionCars[fc][fCarid],FactionCars[fc][fTuning][5]); }
    if(FactionCars[fc][fTuning][6] != 0) { AddVehicleComponent(FactionCars[fc][fCarid],FactionCars[fc][fTuning][6]); }
    if(FactionCars[fc][fTuning][7] != 0) { AddVehicleComponent(FactionCars[fc][fCarid],FactionCars[fc][fTuning][7]); }
    if(FactionCars[fc][fTuning][8] != 0) { AddVehicleComponent(FactionCars[fc][fCarid],FactionCars[fc][fTuning][8]); }
    if(FactionCars[fc][fTuning][9] != 0) { AddVehicleComponent(FactionCars[fc][fCarid],FactionCars[fc][fTuning][9]); }
    if(FactionCars[fc][fTuning][10] != 0) { AddVehicleComponent(FactionCars[fc][fCarid],FactionCars[fc][fTuning][10]); }
    if(FactionCars[fc][fTuning][11] != 0) { AddVehicleComponent(FactionCars[fc][fCarid],FactionCars[fc][fTuning][11]); }
    if(FactionCars[fc][fTuning][12] != 0) { AddVehicleComponent(FactionCars[fc][fCarid],FactionCars[fc][fTuning][12]); }
    if(FactionCars[fc][fTuning][13] != 0) { AddVehicleComponent(FactionCars[fc][fCarid],FactionCars[fc][fTuning][13]); }
    }
    #endif
    SetVehicleHealth(fc,1500);
    fc++;
    }
    }fclose(fFile);
    return printf(" '%d' Fraktionsfahrzeuge wurden geladen & erstellt.",fc);
    }

    05eb03de-9fda-461c-9dfc-834ae5b64e65.png << Server | Home >> 13462590508.png

  • So sollte der Fehler behoben sein
    ocmd:respawnfw(playerid,params[])
    {
    if(SpielerInfo[playerid][Leader] == 0)
    return SendClientMessage(playerid,COLOR_WHITE,"Du bist kein Leader!");
    if(SpielerInfo[playerid][Leader] == 2)
    {
    for(new x; x < MAX_VEHICLES; x++)
    for(new i; i < sizeof(FactionCars); i++)
    if(x==FactionCars[i][fCarid])
    if(FactionCars[i][fFaction][0] == GetPlayerFaction(playerid))
    if(IsVehicleEmpty(FactionCars[i][fCarid]))continue;
    DestroyAndCreateFactionCar(FactionCars[i][fCarid]);
    }
    return 1;
    }


    stock IsVehicleEmpty(vehicleid)
    {
    for(new i =0; i < GetMaxPlayers(); i++)
    if(IsPlayerInVehicle(i,vehicleid)) return 1;
    return 0;
    }

    All in all it's just another brick in the wall

  • Versuch das mal:
    Sonst kannste alles so lassen wie bei deinem ersten Post...

    ocmd:respawnfw(playerid,params[])
    {
    if(SpielerInfo[playerid][Leader] == 0)
    {
    SendClientMessage(playerid,COLOR_WHITE,"Du bist kein Leader!");
    return 1;
    }
    if(SpielerInfo[playerid][Leader] == 2)
    {
    for(new i; i < sizeof(FactionCars); i++)
    {
    if(FactionCars[i][fFaction][0] == GetPlayerFaction(playerid))
    {
    if(!IsVehicleEmpty(FactionCars[i][fCarid]))
    {
    continue;
    }
    else
    {
    DestroyAndCreateFactionCar(i);
    }
    }
    }
    }
    return 1;
    }


    //Edit: Unter DestroyAndCreateFactionCar(fc)solltest du das noch ändern:
    if(!IsVehicleEmpty(FactionCars[fc][fCarid]))return 1;


  • Jetzt respawnen sie garnicht mehr...

    05eb03de-9fda-461c-9dfc-834ae5b64e65.png << Server | Home >> 13462590508.png