Nur Leere Autos respawnen

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
  • hey,
    ich habe zwei Car Respawn Befehle der eine um alle zu respawnen und der andere um jeweils bestimmte cars zu respawnen.
    die funktionieren auch nur ist meine Frage wie kann ich das machen das nur leere Autos respwant werden?

    if (strcmp("/respawnallcars", cmdtext, true, 10) == 0)
    {
    if(IsPlayerAdmin(playerid))
    {
    for(new v=0; v<MAX_VEHICLES; v++)
    {
    SetVehicleToRespawn(v);
    SendClientMessageToAll(COLOR_LIGHTBLUE,"Alle Fahrzeuge werden Respawnt");
    }
    return 1;
    }
    else
    {
    SendClientMessage(playerid,COLOR_RED,"Du bist kein Admin");
    }
    }
    //-------------------------------------------------------------------------------------------------------


    if (strcmp("/respawncars", cmdtext, true, 10) == 0)
    {
    if(GetPlayerTeam(playerid) == 1)
    {
    SetVehicleToRespawn(13);
    SetVehicleToRespawn(14);
    SetVehicleToRespawn(15);
    SetVehicleToRespawn(16);
    SetVehicleToRespawn(17);
    SetVehicleToRespawn(18);
    SetVehicleToRespawn(19);
    SetVehicleToRespawn(20);
    SetVehicleToRespawn(21);
    SetVehicleToRespawn(24);
    SetVehicleToRespawn(25);

    }
    else if(GetPlayerTeam(playerid) == 2)
    {
    SetVehicleToRespawn(1);
    SetVehicleToRespawn(2);
    SetVehicleToRespawn(3);
    SetVehicleToRespawn(4);
    SetVehicleToRespawn(5);
    SetVehicleToRespawn(6);
    SetVehicleToRespawn(7);
    SetVehicleToRespawn(8);
    SetVehicleToRespawn(9);
    SetVehicleToRespawn(10);
    SetVehicleToRespawn(11);
    SetVehicleToRespawn(12);
    }
    return 1;
    }



    schonmal danke im vorraus


    mfg Varg

  • if(!VehicleOccupied(v))
    {
    SetVehicleToRespawn(v);
    }


    Der Stock dazu



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


    /edit:


    Es wird also in einem Stock abgefragt, ob jemand in dem Fahrzeug sitzt was Respawnt werden soll.


    Oder mit nem public:



    forward VehicleOccupied(vehicleid);
    public VehicleOccupied(vehicleid)
    {
    for(new i=0;i<MAX_PLAYERS;i++)
    {
    if(IsPlayerInVehicle(i,vehicleid)) return 1;
    }
    return 0;
    }

    Einmal editiert, zuletzt von BobbiVids () aus folgendem Grund: Public / Stock

  • also ich hab das Public unten am Script dazu gefügt und die Abfrage eingebaut und dann bekomm ich diesen error:
    Zeile (1157) : Nicht deklarierte (forward) Funktion : ("VehicleOccupied")



    mfg Varg


  • Hoppla, Danke :whistling:


    edit:


    Man hätte es auch oben einfach deklarieren können mit
    forward VehicleOccupied(vehicleid);

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



    forward VehicleOccupied(vehicleid);


    if (strcmp("/respawnallcars", cmdtext, true, 10) == 0)
    {
    if(IsPlayerAdmin(playerid))
    {
    for(new v=0; v<MAX_VEHICLES; v++)
    {
    if(!VehicleOccupied(v)) { // Es wird abgefragt ob jemand in dem Fahrzeug sitzt, wenn ja wird es nicht respawnt
    SetVehicleToRespawn(v);
    SendClientMessageToAll(COLOR_LIGHTBLUE,"Alle Fahrzeuge werden Respawnt");
    }
    }
    return 1;
    }
    else
    {
    SendClientMessage(playerid,COLOR_RED,"Du bist kein Admin");
    }
    }


    public VehicleOccupied(vehicleid)
    {
    for(new i=0;i<MAX_PLAYERS;i++)
    {
    if(IsPlayerInVehicle(i,vehicleid)) return 1;
    }
    return 0;
    }

  • MAX_VEHICLES = 2.000
    MAX_PLAYERS = 500
    2.000*500 sind 1.000.000 Durchgänge für die Schleife.
    Bei definierten 50 MAX_PLAYERS sind es immernoch 100.000 Durchgänge.


    Man könnte das ganze doch mit "GetPlayerVehicleID" lösen.
    1. Schleife für die Spieler, boolean (true) für z.B. VehicleInUse setzen.
    2. Schleife für die Fahrzeuge, wenn VehicleInUse NICHT true -> Respawn.
    Somit wären wir bei maximal 2.500 "Durchgängen"!


    Mit freundlichen Grüßen
    Kevin


    Edit:
    Benutzt bei VehicleOccupied foreach (Include) oder IsPlayerConnected in Verbindung mit break.

    Einmal editiert, zuletzt von Kevin1 ()

  • Wieso rechnest du das * ?


    Ganz einfach weil die eine Schleife in der anderen ist.
    Bei jedem Fahrzeug schaut das Script bei jedem Spieler ob er drin sitzt.


    Mit freundlichen Grüßen
    Kevin