Jedes Auto Speichern?

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
  • Ok, sobald der Server Up ist und ich conncecte, sowie dannach /destroycars eingebe, fängt er bei 1 an. Danke :)


    Theoritisch könnte ich doch, vom Script aus, zb. 1min nach Serverstart den Befehl !vom script Aus! /destroycars senden oder nicht? Nur wie?

  • Ist mir schon kla, bloß wie kann ein Script ein Befehl senden?


    Einfach so:


    SetTimer("@destroy",1000*30,0);


    @destroy();@destroy() return OnPlayerCommandText(0,"/destroycars");


    Wenn du allerdings eine Admin-Abfrage o.ä. in diesem Command hast, musst du einfach den Code in den Timer kopieren ;)


    mfg. :thumbup:

    ast2ufdyxkb1.png


    Leute, lernt scripten und versucht mal lieber etwas selber zu schreiben, als es aus einem GF zu kopieren. :S

  • Perfekt. Habe aber nun ein weiteren Fehler gefunden.
    Sobald dann die Carid 1 gespawned wird, steht unter /dl die carid 1.
    Da aber schon ein fahrzeug mit der Carid 1 besteht, übernimmt er logischerweise auch die KM des Fahrzeuges mit der ID 1.
    Wenn ich immer weiter Fahrzeuge spawne, übernehmen die Logischerweise die ID des eigentliches Fahreuges mit der ID.
    Sprich, man müsste die Cars eigentlich ab id z.b. 500 Spawnen lassen, damit die die id 500 haben und ich keine 500 Fahrzeuge besitze..
    Jemand eine Idee?

  • Es können nicht zwei Fahrzeuge mit der ID 1 existieren. :wacko:
    Wenn du ein Fahrzeug löschst, dann musst du auch dessen Kilometerstand auf 0 setzen, es existiert ja dann nicht mehr.


    Kann dein "/destroycars" Befehl von allen Spielern oder nur von Admins ausgeführt werden?

  • Dann ist der Vorschlag von Kaliber falsch. Das wird nur funktionieren, wenn der Spieler der die ID 0 hat auch ein Admin ist.
    Generell ist es auch schlecht das so zu schreiben, besser wäre es, das ganze über eine Funktion zu machen.


    Sprich, du nimmst den Code (außer die Admin-Abfrage) aus dem Befehl und fügst ihn in eine Funktion ein:
    forward DeleteAllCars();
    public DeleteAllCars()
    {
    //Hier hin.
    return 1;
    }


    An die Stelle des entfernten Codes im Befehl schreibst du:
    DeleteAllCars();


    Und den Timer startest du bei OnGameModeInit so:
    SetTimer("DestroyAllCars",30000,false);

  • Gerne, dafür bin ich ja da :)


    Nein, das kannst du nicht, außer du erstellst 500 Dummy-Cars, aber das macht ja keinen Sinn.
    Es wäre gut, wenn du Schritt für Schritt erklärst was du machst, welche Codes ausgeführt werden (dazu posten) und dann jeweils beschreibst, ab wann etwas falsch ist, also den falschen Wert hat. So genau wie möglich bitte.

  • Also gut :)


    Sobald ich den Server Starte und ein Fahrzeuge spawne mit dem Befehl "/veh", zeigt er mir an dass CarID "242" gespawned wurde.
    (Habe insg. 241 Fest erstelle Fahrzeuge auf meinem Server)
    Wenn ich aber dannach "/destroycars" eingebe, geht erstmal kein Auto "kaputt" da die zahl "201" ja "verbuggt" ist.
    Anschließend möchte ich noch ein Fahrzeug mit /veh erstellen und plötzlich steht dort: Fahrzeug 1 wurde gespawned. Ab diesem Zeitpunkt läuft es richtig.


    Habe grade was getestet: Server an, direkt Befehl /destroycars. Alle Fahrzeuge von ID 1-99 wurden gelöscht...


    Dannach ging aber der Befehl wieschongesagt einwandfrei.


    Hier mein Destroycars Befehl:


    if(strcmp(cmd, "/destroycars", true) == 0)
    {
    if(IsPlayerConnected(playerid))
    {
    if(Spieler[playerid][Admin] < 4)
    {
    SendClientMessage(playerid, COLOR_GRAD1, "Dir ist es nicht erlaubt, diesen Befehl zu benutzen!");
    return 1;
    }
    for(new i = 0; i < sizeof(CreatedCars); i++)
    {
    if(i != 0)
    {
    DestroyVehicle(i);
    }
    }
    SendClientMessage(playerid, COLOR_GREY, "Erschaffene Fahrzeuge wurden zerstört!");
    }
    return 1;
    }


    Und hier wo ich CreatedCars usw. erstelle:


    Ongamemodeinit
    new CreatedCars[100];
    new CreatedCar = 0;


    Theoritisch könnt ich ja so machen und ich muss es auch, dass er einfach von der 241 einfach weiter Addiert. Sprich das nächste Fahrzeuge wäre 242 243 usw.
    Dann würde das mit den Kilometern auch klappen...

  • Die Schleife muss auf jeden Fall so sein:
    for(new i = 0; i < sizeof(CreatedCars); i++)
    {
    if(CreatedCars[i] != 0)
    {
    DestroyVehicle(CreatedCars[i]);
    }
    }


    Sonst löschst du ja die Fahrzeuge 1 - 99, die sind aber keine CreatedCars.
    Geht dann der Rest auch richtig?

  • Du bist echt ein Genie weisst du das? :)


    Jetzt funktioniert ALLES einwandfrei. Die cars werden normal erstellt und es folgt die nächste ID sprich 242.
    Sobald ich destroycars eingebe und wieder eins erstelle kommt wieder 242 -> Funkt.
    Bei serverstart direkt /destroycars eingegeben und dann /veh -> 242 also funktioniert auch :)


    Habe dennoch eine Sache,


    wie mache ich das, dass wenn ich keine Fahrzeuge erstelle und /destroycars eingebe, dass er mir sagt, dass keine erstellt wurden?
    Habe das problem bei meinem /gointocar Befehl nämlich auch. Wenn ich /gointocar 500 eingebe, steht da, dass ich mich zur CarID 500 geportet hab, obwohl dieser nicht existiert.


    Hier mal der Befehl:


    ocmd:gointocar(playerid, params[])
    {
    if(Spieler[playerid][Admin] < 2)return SendClientMessage(playerid, COLOR_GRAD2, "Du besitzt nicht die benötigten Rechte.");
    new vID,string[1000];
    if(sscanf(params, "i", vID))return SendClientMessage(playerid, COLOR_GRAD2, "Benutze: /gointocar [Fahrzeug-ID]");
    if(vID == INVALID_VEHICLE_ID)return SendClientMessage(playerid, COLOR_GRAD2, "Dieses Fahrzeug gibt es nicht.");
    PutPlayerInVehicle(playerid, vID, 0);
    format(string,sizeof(string),"Du hast dich zu Fahrzeug-ID %i geportet.",vID);
    SendClientMessage(playerid,COLOR_YELLOW,string);
    return 1;
    }

  • Danke ^^


    1.)
    if(strcmp(cmd, "/destroycars", true) == 0)
    {
    if(IsPlayerConnected(playerid))
    {
    if(Spieler[playerid][Admin] < 4)
    {
    SendClientMessage(playerid, COLOR_GRAD1, "Dir ist es nicht erlaubt, diesen Befehl zu benutzen!");
    return 1;
    }
    new carsDestroyed;
    for(new i = 0; i < sizeof(CreatedCars); i++)
    {
    if(CreatedCars[i] != 0)
    {
    DestroyVehicle(CreatedCars[i]);
    carsDestroyed++;
    }
    }
    new str[145];
    if(carsDestroyed > 0) format(string, sizeof(string), "Es wurden %d erschaffene Fahrzeuge zerstört!", carsDestroyed);
    else format(string, sizeof(string), "Es wurden keine zu zerstörenden Fahrzeuge gefunden!");
    SendClientMessage(playerid, COLOR_GREY, string);
    }
    return 1;
    }


    2.)
    if(GetVehicleModel(vID) == 0)return SendClientMessage(playerid, COLOR_GRAD2, "Dieses Fahrzeug gibt es nicht.");





    Edit:
    kreetkev: Gerne, kein Problem! Ja, so machst! :)

    3HZXdYd.png

    Einmal editiert, zuletzt von Jeffry ()