Car spawnen in dem keiner drinne ist

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 Leute,


    ich möchte mal wissen wie man ein Car spawnt wo gerade niemand drinne ist aber jemand drinne war.


    In meinem Fall ist das wenn man 30 Sekunden nicht mehr in Auto ist (Tutorial) sollte das Auto spawnen.


    Ich habe jetzt nach den 30 Sekunden das hier reingehauen:

    new vehicleid = GetPlayerVehicleID(playerid);
    SetVehicleToRespawn(vehicleid);


    dann habe ich schnell gemerkt dass das nichts bringt...


    Wie kann ich das machen?


    MfG
    Pablo

  • Vielleicht nicht ganz hilfreich, aber ich will es los werden.


    Du legst eine neue Variable (vehicleid) an, fragst mit einer anderen Funktion die VehicleID von der Person die sich noch darin befindet ab und sagst ihm das er es zum Respawn zurück setzen soll.
    Schlussfolgerung ? = Der Spieler befindet sich zum Zeitpunkt der Abfrage in keinem Fahrzeug und tut genau das was gesagt wurde = kein Fahrzeug respawnen ^^


    Du musst dem Fahrzeug eine eigene Variable geben in der steht ob sich jemand im Fahrzeug befindet und nach der Variablen arbeiten.


    ( wenn ich mich Irre könnt ihr mich gern korregieren )

  • Da geht warscheinlich kein Weg an einem Timer vorbei :o Ich benutze bei so etwas gerne die funktion "wait".

    stock wait(seconds)
    {
    new _newTime[4], _oldTime[4];
    gettime(_oldTime[0], _oldTime[1], _oldTime[2]);
    _oldTime[3] = _oldTime[2] + (_oldTime[1] * 60) + (_oldTime[0] * 600);
    while(_newTime[3] != (_oldTime[3] + seconds))
    {
    gettime(_newTime[0], _newTime[1], _newTime[2]);
    _newTime[3] = _newTime[2] + (_newTime[1] * 60) + (_newTime[0] * 600);
    }
    }
    Während dem Tutorial:
    tutcar[playerid] = GetPlayerVehicleID(playerid);
    Nach dem Tutorial :

    wait(30);
    SetVehicleToRespawn(tutcar[playerid]);

    Habs nicht getestet :D

  • Da geht warscheinlich kein Weg an einem Timer vorbei :o Ich benutze bei so etwas gerne die funktion "wait".


    Bloß nicht!!!!
    Da kannste ja schonmal Gute Nach zu deinem Server sagen. Diese Funktion hängt den Server für X Skunden einfach auf, die CPU Leistung rast auf 100% hoch. Da ist so ziemlich das falscheste was man nur machen kann.
    Das ist absolut falsch das hier zu verwenden.


    ------------------


    Ganz einfach:
    new pCar[MAX_PLAYERS] = {-1,...};
    new pTimer[MAX_PLAYERS] = {-1,...};


    OnPlayerStateChange
    if(newstate == PLAYER_STATE_DRIVER) KillTimer(pTimer[playerid]), pTimer[playerid] = -1, pCar[playerid] = GetPlayerVehicleID(playerid);
    if(oldstate == PLAYER_STATE_DRIVER && IsATutorialVehicle(pCar[playerid])) pTimer[playerid] = SetTimerEx("RemoveCar", 30000, 0, "dd", pCar[playerid],playerid), pCar[playerid] = -1;


    forward RemoveCar(id,playerid);
    public RemoveCar(id,playerid)
    {
    pTimer[playerid] = -1;
    for(new i=0; i<MAX_PLAYERS; i++) if(GetPlayerVehicleID(i) == id && IsPlayerInAnyVehicle(i)) return 1; //Spieler im Auto
    return SetVehicleToRespawn(id);
    }


    stock IsATutorialVehicle(id) //TutCar entsprechend der Variable für die Tutorial Autos.
    {
    for(new i=0; i<MAX_VEHICLES; i++) for(new t=0; t<MAX_TUT_CARS; t++) if(i == TutCar[t]) return 1;
    return 0;
    }


    Einige teile werden bestimmt an deinen Code angepasst werden müssen, je nach dem wie dein Code aussieht.


  • Bloß nicht!!!!
    Da kannste ja schonmal Gute Nach zu deinem Server sagen. Diese Funktion hängt den Server für X Skunden einfach auf, die CPU Leistung rast auf 100% hoch. Da ist so ziemlich das falscheste was man nur machen kann.
    Das ist absolut falsch das hier zu verwenden.


    Deswegen der wait stock :) Der rechnet meine ich das ganze mit Variablen und gettime aus. Ganz so übertrieben wird das bei den Timern nicht... du musst Timer bei manchen sachen benutzen und das würde heißen, dass jeder Server laggen wurde?! :D

  • Der rechnet meine ich das ganze mit Variablen und gettime aus. Ganz so übertrieben wird das bei den Timern nicht... du musst Timer bei manchen sachen benutzen und das würde heißen, dass jeder Server laggen wurde?! :D


    Wer auch immer dir das erzählt hat, der wollte dich wohl auf den Arm nehmen und zwar gehörig. :wacko:


    Hier mal ein debug für dein "wait" stock:
    stock wait(seconds)
    {
    new _newTime[4], _oldTime[4], i;
    gettime(_oldTime[0], _oldTime[1], _oldTime[2]);
    _oldTime[3] = _oldTime[2] + (_oldTime[1] * 60) + (_oldTime[0] * 600);
    while(_newTime[3] != (_oldTime[3] + seconds))
    {
    gettime(_newTime[0], _newTime[1], _newTime[2]);
    _newTime[3] = _newTime[2] + (_newTime[1] * 60) + (_newTime[0] * 600);
    printf("Aufruf Nummer: %d", i);
    i++;
    }
    }


    wait(30);


    Probiers bitte mal aus. Bei mir kam i bis zu 587723, bei 30 Sekunden, das heißt die Schleife wiederholt sich in 30 Sekunden 587724 mal (hat bei 0 angefangen zu zählen). In dieser Zeit geht gar nichts am Server, die CPU Leistung schießt auf 100% hoch. Wenn irgendein Server die Funktion verwendet, dann kann ich dir garantieren, dass dort keiner spielt.


    Spoiler anzeigen
    PS: Ungelogen: Es war wirklich Zufall, dass ich den Code um genau 00:00:00 gestartet habe. 8|


    In diesem Fall ist ein Timer angebracht.

  • ok das ist mir i.wie zu kompliziert....


    Könnt Ihr mir vielleicht sagen wie ich die TutVehs spawnen kann? Also in denen niemand drinne ist...


    Geht ja eigentlich so wie Carrespawn aber halt nur für die TutVehs



    TutVeh[0] = AddStaticVehicleEx(421,1362.0919,-1660.7759,13.2653,267.0300,1,1,-1); // FS Washington 1
    TutVeh[1] = AddStaticVehicleEx(421,1362.1702,-1657.3817,13.2653,270.0033,1,1,-1); // FS Washington 2
    TutVeh[2] = AddStaticVehicleEx(421,1362.1846,-1653.9923,13.2653,270.4801,1,1,-1); // FS Washington 3
    TutVeh[3] = AddStaticVehicleEx(421,1362.3646,-1650.9076,13.2653,269.6422,1,1,-1); // FS Washington 4
    TutVeh[4] = AddStaticVehicleEx(421,1362.3704,-1647.8772,13.2653,270.3143,1,1,-1); // FS Washington 5
    TutVeh[5] = AddStaticVehicleEx(421,1362.3831,-1645.0792,13.2653,268.5753,1,1,-1); // FS Washington 6
    TutVeh[6] = AddStaticVehicleEx(421,1362.6201,-1642.2096,13.2653,269.1427,1,1,-1); // FS Washington 7


    MfG
    Pablo


    Jemand ne Idee?