CreateObject zählen lassen

  • Wie meinst du das genau? Mit Filterscripts oder ohne?

    Wenn du alle CreateObjects an einem Fleck hast, dann sieht das ja so aus:


    C-Quellcode

    1. CreateObject(...);
    2. CreateObject(...);
    3. CreateObject(...);
    4. CreateObject(...);
    5. //Und bei dem letzten CreateObject
    6. new objects = CreateObject(...);
    7. printf("Anzahl der Objekte: %d",objects);
    Allerdings solltest du CreateDynamicObject verwenden. (Also einen Streamer)

    Ingame kannst du dir das eig auch ganz schnell anzeigen lassen...fliege ans Ende der Map wo keine Objekte mehr sind und dann drück F5.
    Dort siehst du dann ObjectSlotsUsed und das sind auch die Anzahl deiner CreateObjects (da CreateDynamicObjects gelöscht werden würden).



    Leute, lernt scripten und versucht mal lieber etwas selber zu schreiben, als es aus einem GF zu kopieren. :pinch:
  • Das ist eine schlechte Lösung, vor allem dann, wenn man ein Objekt löscht, dann klappt das nämlich nicht.

    So zählt man die Objekte richtig:

    PAWN-Quellcode

    1. stock GetObjectCount()
    2. {
    3. new count;
    4. for(new i = 0; i < MAX_OBJECTS; i++) if(IsValidObject(i)) count++;
    5. return count;
    6. }

    Zu nutzen:

    PAWN-Quellcode

    1. printf("Es gibt insgesamt %d erstellte Objekte.", GetObjectCount());



    Beim Streamer Plugin:

    PAWN-Quellcode

    1. stock GetDynamicObjectCount()
    2. {
    3. return Streamer_CountItems(STREAMER_TYPE_OBJECT);
    4. }

    Zu nutzen:

    PAWN-Quellcode

    1. printf("Es gibt insgesamt %d erstellte Objekte, davon sind aktuell %d auf dem Server sichtbar.", GetDynamicObjectCount(), GetObjectCount());
  • Jeffry schrieb:

    Das ist eine schlechte Lösung, vor allem dann, wenn man ein Objekt löscht, dann klappt das nämlich nicht.
    Ja natürlich unter OnGameModeInit löscht man direkt ein Objekt...

    und das unter F5 zeigt die aktuellen Objekte an.

    Jeffry schrieb:

    GetObjectCount()
    Wenn man ein Objekt löscht..wird es hier auch nicht angezeigt.

    Zudem sollte noch erwähnt werden, dass diese Funktion aufgerufen werden sollte, nachdem die Objekte erstellt wurden...



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

    Ja natürlich unter OnGameModeInit löscht man direkt ein Objekt...
    Warum sollte man Objekte nur bei OnGameModeInit erstellen? Es gibt genügend Fälle, Objekte irgendwann zu erstellen und auch wieder zu löschen.


    Kaliber schrieb:

    und das unter F5 zeigt die aktuellen Objekte an.
    Das klappt beim Streamer aber nicht bzw. nur bedingt.


    Kaliber schrieb:

    Wenn man ein Objekt löscht..wird es hier auch nicht angezeigt.
    Korrekt, aber genau das ist das Problem.
    Du erstellst Objekt 0,1,2,3,4,5 und löschst dann Objekt 1.
    Jetzt führst du deinen Code aus, der erstellt dann Objekt 1 wieder, somit ist der Count laut deinem Code 1. Das ist falsch.


    Kaliber schrieb:

    Zudem sollte noch erwähnt werden, dass diese Funktion aufgerufen werden sollte, nachdem die Objekte erstellt wurden...
    Die Funktion kann dann aufgerufen werden, wann immer man möchte. Es wird dann die Anzahl der zu dem Zeitpunkt existierenden Objekte ausgegeben.
  • Jeffry schrieb:

    Das klappt beim Streamer aber nicht bzw. nur bedingt.
    Das soll auch gar nicht beim Streamer klappen, deshalb sagte ich, er soll ans Ende der Map gehen da dort alle Streamer Objekte zerstört wurden.

    Jeffry schrieb:

    Warum sollte man Objekte nur bei OnGameModeInit erstellen? Es gibt genügend Fälle, Objekte irgendwann zu erstellen und auch wieder zu löschen.
    Jo...aber ich denke diese Menge kann er einkalkulieren, ich denke es ging ihm um seine Map. Die man unter OnGameModeInit normalerweise erstellt

    Wie dem auch sei...du musst nicht sagen, dass das schlechte Methoden sind...denn diese funktionieren genauso gut wie deine...und die eine sogar ohne zusätzlichen Code...



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

    ich denke es ging ihm um seine Map
    Das sieht man schon ziemlich genau an der Zeilen-Zahl-Angabe am Rand, da brauch man nichts zählen lassen. Außer der Code ist so durcheinander, dass zwischen den Objekten immer wieder was anderes steht, was wenig Sinn macht.

    Wenn man die Objekte vom Server zählen lassen will, dann richtig. Und in fast allen Anwendungsfällen ist deine "Lösung" nur halbgar, daher bezeichne ich diese als schlecht.


    Kaliber schrieb:

    denn diese funktionieren genauso gut wie deine
    Nur nicht immer ¯\_(ツ)_/¯
  • Jeffry schrieb:

    Nur nicht immer ¯\_(ツ)_/¯
    ...doch natürlich F5 funktioniert genauso gut wie deine Lösung?!

    Jeffry schrieb:

    Das sieht man schon ziemlich genau an der Zeilen-Zahl-Angabe am Rand
    Genau..sowas wie Kommentare existieren natürlich nicht.

    Und man kann es auch einfach an das Objekt machen, was zuletzt erstellt wird..unabhängig von seinem Ort...

    Jeffry schrieb:

    Und in fast allen Anwendungsfällen ist deine "Lösung" nur halbgar, daher bezeichne ich diese als schlecht.
    Allet klar das macht natürlich voll Sinn



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

    Genau..sowas wie Kommentare existieren natürlich nicht.
    Daher "ziemlich genau". Sofern man keine Romane in die Map schreibt.
    Ansonsten einmal das ganze OnGameModeInit in Notepad++ kopieren -> STRG + H -> CreateObject / blabla -> Es wurden X Elemete ersetzt.
    Aber wie gesagt, das sind allesamt keine guten Lösungen, daher die beiden Funktionen, damit bekommt man alles hin, was man mit allen anderen Möglichkeiten zusammen hinbekommt.


    Kaliber schrieb:

    Und man kann es auch einfach an das Objekt machen, was zuletzt erstellt wird..unabhängig von seinem Ort...
    Die Funktionen kann man auch unabhängig von ihrem Ort ausführen und man bekommt sogar zur Laufzeit unterschiedliche Werte, wenn man weitere Objekte erstellt.


    Kaliber schrieb:

    Allet klar das macht natürlich voll Sinn
    Ich finde die Lösung schlecht, aus genannten Gründen. Wenn dir das nicht passt, kann ich dir auch nicht helfen.


    Kaliber schrieb:

    ...doch natürlich F5 funktioniert genauso gut wie deine Lösung?!
    Dann printe das doch mal im Server Log oder zeige es in einem Dialog/Textdraw/... an. Viel Spaß ;)