[Nicht gelöst!] Gesammten Objecte werden gelöscht!

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 Liebe San Andreas Multiplayer Community,
    ich habe ein Problem.
    Undzwar..
    Ich lade ganz viele Objecte die ich per Command erstelle in eine Schleife.


    Definiert habe ich alles so:
    #define MAX_TEILE 100000
    new MyObjects[MAX_TEILE];


    So lade ich sie nun in die schleife wo sie erstellt werden:
    for(new d = 0; d < MAX_TEILE; d++)
    {
    MyObjects[d] = CreateDynamicObject(BLA.BLA.BLA);
    break;
    }


    Es wird alles richtig erstellt etc.
    Jedoch möchte ich diese Objecte nun löschen.
    Dies mache ich derzeit so:
    ocmd:loeschen(playerid,params[])
    {
    for(new d = 0; d < MAX_TEILE; d++)
    {
    DestroyDynamicObject(d);
    }
    return 1;
    }


    Jedoch löscht es alle Objecte vom Server..
    Hoffe es kann mir jemand helfen..
    Danke!

    Einmal editiert, zuletzt von Xalo ()

  • Musst den Code so schreiben:


    for(new d; d < MAX_TEILE; d++)
    {
    if(!MyObjects[d]) continue;
    DestroyDynamicObject(MyObjects[d]);
    }


    mfg. :thumbup:

    ast2ufdyxkb1.png


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


  • Hallo Kaliber und danke für die schnelle Antwort.
    habe das ganze mal so ausgetestet..


    ocmd:loeschen(playerid,params[])
    {
    for(new d = 0; d < MAX_TEILE; d++)
    {
    if(!MyObjects[d]) continue;
    DestroyDynamicObject(MyObjects[d]);
    SendClientMessage(playerid, COLOR_RED, "Done");
    }
    return 1;
    }


    Leider wird nun nichts mehr gelöscht..

  • Dann schau mal beim Laden:


    for(new d = 0; d < MAX_TEILE; d++)
    {
    MyObjects[d] = CreateDynamicObject(BLA.BLA.BLA);
    printf("%d",MyObjects[d]); //Dann siehst du welche objektid das ist
    break; //was soll das break da?! Damit lädst du nur 1 Objekt
    }


    Das break mach am besten mal raus..


    Sollte dann aber so gehen...wenn nicht, zeig nochmal genau wie du es lädst anstatt "BLABLABLA"..

    ast2ufdyxkb1.png


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


  • Hallo Kaliber,
    ich lade aus einer .map datei die Objecte für eine Map.
    Dies funktioniert auch alles.
    Das break mal rausgenommen.
    Die Map hat so 5.000 Objecte. (Streamer schafft es auch alles)
    jedoch spammt es mir nun die ganze Console voll bis die zahlen unendlich sind.
    Hier erstelle ich sie:
    if(!sscanf(loadstr, "p<">'object''model='d'posX='f'posY='f'posZ='f'rotX='f'rotY='f'rotZ='f",mapValues[pMmodelid], mapValues[pMX], mapValues[pMY], mapValues[pMZ], mapValues[pMRX], mapValues[pMRY], mapValues[pMRZ])){
    MyObjects[d] = CreateDynamicObject(mapValues[pMmodelid], mapValues[pMX], mapValues[pMY], mapValues[pMZ]+offZ, mapValues[pMRX], mapValues[pMRY], mapValues[pMRZ],-1,-1,-1,300.0,300.0);


    Alles funktioniert. Jedoch das löschen nicht..

  • Möglicherweise zählst du beim Laden das "d" im Index nicht hoch, sprich alle Werte werden nur in d=0 geschrieben, also überschrieben.


    Schau mal ob da ein
    d++;
    zu finden ist. Wenn nicht, füge es nach dem erstellen des Objektes hinzu.