Auto spawnt extrem verzögert oder gar nicht

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 habe hier ein Befehl gescriptet bei dem das Auto Spawnt und in eine Datei gespeichert wird
    allerdings sofern ich den Befehl ausübe wird die Datei sofort erstellt und der Text "Auto" erstellt kommt auch sofort
    nur das Fahrzeug selbst spawnt extrem Verzögert warum?


    if(strcmp(cmd, "/auto", true)==0)
    {
    if(Account[playerid][Admin] == 3)
    {
    new modelid,respawn;
    new Float:isx,Float:isy,Float:isz;
    tmp = strtok(cmdtext, idx);
    if(!strlen(tmp))
    {
    SCM(playerid, COLOR_WHITE, "Benutze: /auto [modelid] [Respawn Time]");
    return 1;
    }
    modelid = strval(tmp);
    tmp = strtok(cmdtext, idx);
    if(!strlen(tmp))
    {
    SCM(playerid, COLOR_WHITE, "Benutze: /auto [modelid] [Respawn Time]");
    return 1;
    }
    respawn = strval(tmp);
    SCM(playerid,COLOR_GREEN,"/////////////////////////////////////////////////");
    SCM(playerid,COLOR_LIGHTRED," Auto erstellt ");
    SCM(playerid,COLOR_GREEN,"/////////////////////////////////////////////////");
    for(new count=1;count<MAX_VEHICLES;count++)
    {
    format(string, sizeof(string),"Autos/vehicle_%d.sav",count);
    if(!dini_Exists(string))
    {
    GPP(playerid,Float:isx,Float:isy,Float:isz);
    dini_Create(string);
    Autos[count][vModel] = modelid;
    Autos[count][vEingepackt] = 0;
    Autos[count][vArt] = 0;
    Autos[count][vX] = isx;
    Autos[count][vY] = isy;
    Autos[count][vZ] = isz;
    Autos[count][vA] = 0;
    Autos[count][vFarbe1] = 0;
    Autos[count][vFarbe2] = 0;
    Autos[count][vVerkauf] = 0;
    Autos[count][vPreis] = 0;
    Autos[count][vKMStand] = 0;
    Autos[count][vRKMStand] = 0;
    strmid(Autos[count][vBesitzer], "Niemand", 0, strlen("Niemand"), 255);
    strmid(Autos[count][vSch1], "Niemand", 0, strlen("Niemand"), 255);
    strmid(Autos[count][vSch2], "Niemand", 0, strlen("Niemand"), 255);
    strmid(Autos[count][vSch3], "Niemand", 0, strlen("Niemand"), 255);
    Autos[count][vBeschlagnahmt] = 0;
    Autos[count][vBX] = isx;
    Autos[count][vBY] = isy;
    Autos[count][vBZ] = isz;
    Autos[count][vBA] = 0;
    Autos[count][vRespawn] = respawn;
    count = MAX_VEHICLES;
    OnVehicleDataUpdate(count);
    CreateVehicle(modelid,isx,isy,isz,0,0,0,respawn);
    }
    }
    }
    else
    {
    SCM(playerid, COLOR_RED, "Du bist kein Admin!");
    return 1;
    }
    return 1;
    }


    mfg Dedi



    Einmal editiert, zuletzt von Tomi93 ()

  • gut das mit dem return teste ich mal und
    die Datei ist doch schon längst erstellt
    15-30 sec nach dem die Datei erstellt wurde spawnt er das FZG
    //Edit
    das mit dem return 1; hat nichts gebracht wie könnte ich das Script verbessen?



    3 Mal editiert, zuletzt von Tomi93 ()

  • hab ich gemacht das sieht so aus
    if(strcmp(cmd, "/auto", true)==0)
    {
    if(Account[playerid][Admin] == 3)
    {
    new modelid,respawn;
    new Float:isx,Float:isy,Float:isz;
    tmp = strtok(cmdtext, idx);
    if(!strlen(tmp))
    {
    SCM(playerid, COLOR_WHITE, "Benutze: /auto [modelid] [Respawn Time]");
    return 1;
    }
    modelid = strval(tmp);
    tmp = strtok(cmdtext, idx);
    if(!strlen(tmp))
    {
    SCM(playerid, COLOR_WHITE, "Benutze: /auto [modelid] [Respawn Time]");
    return 1;
    }
    respawn = strval(tmp);
    SCM(playerid,COLOR_GREEN,"/////////////////////////////////////////////////");
    SCM(playerid,COLOR_LIGHTRED," Auto erstellt ");
    SCM(playerid,COLOR_GREEN,"/////////////////////////////////////////////////");
    GPP(playerid,Float:isx,Float:isy,Float:isz);
    CreateVehicle(modelid,isx,isy,isz,0,0,0,respawn);
    for(new count=1;count<MAX_VEHICLES;count++)
    {
    format(string, sizeof(string),"Autos/vehicle_%d.sav",count);
    if(!dini_Exists(string))
    {
    dini_Create(string);
    Autos[count][vModel] = modelid;
    Autos[count][vEingepackt] = 0;
    Autos[count][vArt] = 0;
    Autos[count][vX] = isx;
    Autos[count][vY] = isy;
    Autos[count][vZ] = isz;
    Autos[count][vA] = 0;
    Autos[count][vFarbe1] = 0;
    Autos[count][vFarbe2] = 0;
    Autos[count][vVerkauf] = 0;
    Autos[count][vPreis] = 0;
    Autos[count][vKMStand] = 0;
    Autos[count][vRKMStand] = 0;
    strmid(Autos[count][vBesitzer], "Niemand", 0, strlen("Niemand"), 255);
    strmid(Autos[count][vSch1], "Niemand", 0, strlen("Niemand"), 255);
    strmid(Autos[count][vSch2], "Niemand", 0, strlen("Niemand"), 255);
    strmid(Autos[count][vSch3], "Niemand", 0, strlen("Niemand"), 255);
    Autos[count][vBeschlagnahmt] = 0;
    Autos[count][vBX] = isx;
    Autos[count][vBY] = isy;
    Autos[count][vBZ] = isz;
    Autos[count][vBA] = 0;
    Autos[count][vRespawn] = respawn;
    count = MAX_VEHICLES;
    OnVehicleDataUpdate(count);
    return 1;
    }
    }
    }
    else
    {
    SCM(playerid, COLOR_RED, "Du bist kein Admin!");
    return 1;
    }
    return 1;
    }


    Text "auto erstellt" wird angezeigt
    Fahrzeug spawnt nicht
    server laggt kurz bzw. spiel ist home dann hmm.
    Fahrzeug ist gespawnt
    wie könnte ich diesen Befehl auf Performance sozusagen optimieren?



    Einmal editiert, zuletzt von Tomi93 ()

  • ja es liegt am OnVehicleDataUpdate
    wo ist denn da der Fehler bzw. wie kann ich da mehr leistung rausholen???
    public OnVehicleDataUpdate(vehicleid)
    {
    new str[256];
    format(str, sizeof(str),"Autos/vehicle_%d.sav",vehicleid);
    dini_IntSet(str,"Model",Autos[vehicleid][vModel]);
    dini_IntSet(str,"Eingepackt",Autos[vehicleid][vEingepackt]);
    dini_IntSet(str,"Art",Autos[vehicleid][vArt]);
    dini_FloatSet(str,"X",Autos[vehicleid][vX]);
    dini_FloatSet(str,"Y",Autos[vehicleid][vY]);
    dini_FloatSet(str,"Z",Autos[vehicleid][vZ]);
    dini_FloatSet(str,"A",Autos[vehicleid][vA]);
    dini_IntSet(str,"Farbe1",Autos[vehicleid][vFarbe1]);
    dini_IntSet(str,"Farbe2",Autos[vehicleid][vFarbe2]);
    dini_IntSet(str,"Verkauf",Autos[vehicleid][vVerkauf]);
    dini_IntSet(str,"Preis",Autos[vehicleid][vPreis]);
    dini_IntSet(str,"KMStand",Autos[vehicleid][vKMStand]);
    dini_IntSet(str,"RKMStand",Autos[vehicleid][vRKMStand]);
    dini_Set(str,"Besitzer",Autos[vehicleid][vBesitzer]);
    dini_Set(str,"Sch1",Autos[vehicleid][vSch1]);
    dini_Set(str,"Sch2",Autos[vehicleid][vSch2]);
    dini_Set(str,"Sch3",Autos[vehicleid][vSch3]);
    dini_IntSet(str,"Beschlagnahmt",Autos[vehicleid][vBeschlagnahmt]);
    dini_FloatSet(str,"BX",Autos[vehicleid][vBX]);
    dini_FloatSet(str,"BY",Autos[vehicleid][vBY]);
    dini_FloatSet(str,"BZ",Autos[vehicleid][vBZ]);
    dini_FloatSet(str,"BA",Autos[vehicleid][vBA]);
    dini_IntSet(str,"Respawn",Autos[vehicleid][vRespawn]);
    return 1;
    }


    mfg Dedi

  • also ich kann keine fehler erkennen, aber vielleicht is das alles zu viel für den oda so.
    Bei mir verzögert das auch, aber nur maximal eine sekunde.
    Ich hab nit viel anders, mein car-sys is so ähnlich aufgebaut.


    MFG, Rob

  • MAX_VEHICLES = 700
    daher solltest du eine Variable nehmen die jedes mal hochzählt sobald ein Fahrzeug erstellt wird das ist dann deine Maximale Anzahl der Fahrzeuge sprich diese kannst du dann für deine Schleifen nehmen
    sollte so einiges an Leistung sparen, zudem ist Dini ein langsames Speicher System & greift bei jeder Abfrage auf die Datei auch bei Zugriffen wie das beschreiben wird jedes mal auf die Datei zugegriffen das
    erfordert am meisten Leistung deshalb solltest du Cache basierte Systeme nehmen


    bfx_ini
    SII
    DJson

    Mfg. BlackFoX_UD_ alias [BFX]Explosion


  • Wenn ich das so mache
    funktioniert das auch so das es in die richtige Datei speichert?
    Kann ich mir i-wie nicht vorstellen
    public OnVehicleDataUpdate(vehicleid)
    {
    SetKeyInt("Model",Autos[vehicleid][vModel]);
    SetKeyInt("Eingepackt",Autos[vehicleid][vEingepackt]);
    SetKeyInt("Art",Autos[vehicleid][vArt]);
    SetKeyFloat("X",Autos[vehicleid][vX]);
    SetKeyFloat("Y",Autos[vehicleid][vY]);
    SetKeyFloat("Z",Autos[vehicleid][vZ]);
    SetKeyFloat("A",Autos[vehicleid][vA]);
    SetKeyInt("Farbe1",Autos[vehicleid][vFarbe1]);
    SetKeyInt("Farbe2",Autos[vehicleid][vFarbe2]);
    SetKeyInt("Verkauf",Autos[vehicleid][vVerkauf]);
    SetKeyInt("Preis",Autos[vehicleid][vPreis]);
    SetKeyInt("KMStand",Autos[vehicleid][vKMStand]);
    SetKeyInt("RKMStand",Autos[vehicleid][vRKMStand]);
    SetKeyString("Besitzer",Autos[vehicleid][vBesitzer]);
    SetKeyString("Sch1",Autos[vehicleid][vSch1]);
    SetKeyString("Sch2",Autos[vehicleid][vSch2]);
    SetKeyString("Sch3",Autos[vehicleid][vSch3]);
    SetKeyInt("Beschlagnahmt",Autos[vehicleid][vBeschlagnahmt]);
    SetKeyFloat("BX",Autos[vehicleid][vBX]);
    SetKeyFloat("BY",Autos[vehicleid][vBY]);
    SetKeyFloat("BZ",Autos[vehicleid][vBZ]);
    SetKeyFloat("BA",Autos[vehicleid][vBA]);
    SetKeyInt("Respawn",Autos[vehicleid][vRespawn]);
    return 1;
    }



    Einmal editiert, zuletzt von Tomi93 ()

  • Mein System arbeitet über Cache sprich du musst so vorgehen...


    if(OpenINI("Dateiname"))
    {
    // Deine Vorgänge Speichern/Lesen etc.
    SaveINI(); // Nur verwenden wenn du was umgestellt hast beim auslesen ist das hier unwichtig Logisch was
    CloseINI();
    }

    Mfg. BlackFoX_UD_ alias [BFX]Explosion


  • so besser???


    public OnVehicleDataUpdate(vehicleid)
    {
    new str[256];
    format(str, sizeof(str),"Autos/vehicle_%d.sav",vehicleid);
    if(OpenINI(str))
    {
    SetKeyInt("Model",Autos[vehicleid][vModel]);
    SetKeyInt("Eingepackt",Autos[vehicleid][vEingepackt]);
    SetKeyInt("Art",Autos[vehicleid][vArt]);
    SetKeyFloat("X",Autos[vehicleid][vX]);
    SetKeyFloat("Y",Autos[vehicleid][vY]);
    SetKeyFloat("Z",Autos[vehicleid][vZ]);
    SetKeyFloat("A",Autos[vehicleid][vA]);
    SetKeyInt("Farbe1",Autos[vehicleid][vFarbe1]);
    SetKeyInt("Farbe2",Autos[vehicleid][vFarbe2]);
    SetKeyInt("Verkauf",Autos[vehicleid][vVerkauf]);
    SetKeyInt("Preis",Autos[vehicleid][vPreis]);
    SetKeyInt("KMStand",Autos[vehicleid][vKMStand]);
    SetKeyInt("RKMStand",Autos[vehicleid][vRKMStand]);
    SetKeyString("Besitzer",Autos[vehicleid][vBesitzer]);
    SetKeyString("Sch1",Autos[vehicleid][vSch1]);
    SetKeyString("Sch2",Autos[vehicleid][vSch2]);
    SetKeyString("Sch3",Autos[vehicleid][vSch3]);
    SetKeyInt("Beschlagnahmt",Autos[vehicleid][vBeschlagnahmt]);
    SetKeyFloat("BX",Autos[vehicleid][vBX]);
    SetKeyFloat("BY",Autos[vehicleid][vBY]);
    SetKeyFloat("BZ",Autos[vehicleid][vBZ]);
    SetKeyFloat("BA",Autos[vehicleid][vBA]);
    SetKeyInt("Respawn",Autos[vehicleid][vRespawn]);
    SaveINI();
    CloseINI();
    }
    return 1;
    }



    Einmal editiert, zuletzt von Tomi93 ()

  • DA ich auch nummer sicher gehen will
    ist da auch alles richtig?
    if(strcmp(cmd, "/auto", true)==0)
    {
    if(Account[playerid][Admin] == 3)
    {
    new modelid,respawn;
    new Float:isx,Float:isy,Float:isz;
    tmp = strtok(cmdtext, idx);
    if(!strlen(tmp))
    {
    SCM(playerid, COLOR_WHITE, "Benutze: /auto [modelid] [Respawn Time]");
    return 1;
    }
    modelid = strval(tmp);
    tmp = strtok(cmdtext, idx);
    if(!strlen(tmp))
    {
    SCM(playerid, COLOR_WHITE, "Benutze: /auto [modelid] [Respawn Time]");
    return 1;
    }
    respawn = strval(tmp);
    SCM(playerid,COLOR_GREEN,"/////////////////////////////////////////////////");
    SCM(playerid,COLOR_LIGHTRED," Auto erstellt ");
    SCM(playerid,COLOR_GREEN,"/////////////////////////////////////////////////");
    GPP(playerid,Float:isx,Float:isy,Float:isz);
    CreateVehicle(modelid,isx,isy,isz,0,0,0,respawn);
    for(new count=1;count<MAX_VEHICLES;count++)
    {
    format(string, sizeof(string),"Autos/vehicle_%d.sav",count);
    if(!fexist(string))
    {
    CreateINI(string);
    Autos[count][vModel] = modelid;
    Autos[count][vEingepackt] = 0;
    Autos[count][vArt] = 0;
    Autos[count][vX] = isx;
    Autos[count][vY] = isy;
    Autos[count][vZ] = isz;
    Autos[count][vA] = 0;
    Autos[count][vFarbe1] = 0;
    Autos[count][vFarbe2] = 0;
    Autos[count][vVerkauf] = 0;
    Autos[count][vPreis] = 0;
    Autos[count][vKMStand] = 0;
    Autos[count][vRKMStand] = 0;
    strmid(Autos[count][vBesitzer], "Niemand", 0, strlen("Niemand"), 255);
    strmid(Autos[count][vSch1], "Niemand", 0, strlen("Niemand"), 255);
    strmid(Autos[count][vSch2], "Niemand", 0, strlen("Niemand"), 255);
    strmid(Autos[count][vSch3], "Niemand", 0, strlen("Niemand"), 255);
    Autos[count][vBeschlagnahmt] = 0;
    Autos[count][vBX] = isx;
    Autos[count][vBY] = isy;
    Autos[count][vBZ] = isz;
    Autos[count][vBA] = 0;
    Autos[count][vRespawn] = respawn;
    OnVehicleDataUpdate(count);
    count = MAX_VEHICLES;
    return 1;
    }
    }
    }
    else
    {
    SCM(playerid, COLOR_RED, "Du bist kein Admin!");
    return 1;
    }
    return 1;
    }

  • Ich hätte das ganze besser gestaltet ^^


    new count;
    while(count<MAX_VEHICLES && !CreateINI(string))count++;


    Da meine CreateINI Funktion 0 zurückgibt solange die Funktion die Datei nicht erstellen kann sprich solange sie existiert wird hochgezählt die Und Abfrage hat den Sinn
    das wenn eines der beide Dinge nicht stimmen sollte sie Sofort abbricht da while eine Abfrage Funktion darstellt


    unter die Schleife kannst du deine Aktion dann ausführen wenn man ein Auto erstellt

    Mfg. BlackFoX_UD_ alias [BFX]Explosion


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