CreateObject zählen lassen

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
  • Wie meinst du das genau? Mit Filterscripts oder ohne?


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



    C
    CreateObject(...);
    CreateObject(...);
    CreateObject(...);
    CreateObject(...);
    //Und bei dem letzten CreateObject
    new objects = CreateObject(...);
    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).

    ast2ufdyxkb1.png


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

  • 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:
    stock GetObjectCount()
    {
    new count;
    for(new i = 0; i < MAX_OBJECTS; i++) if(IsValidObject(i)) count++;
    return count;
    }
    Zu nutzen:
    printf("Es gibt insgesamt %d erstellte Objekte.", GetObjectCount());



    Beim Streamer Plugin:
    stock GetDynamicObjectCount()
    {
    return Streamer_CountItems(STREAMER_TYPE_OBJECT);
    }
    Zu nutzen:
    printf("Es gibt insgesamt %d erstellte Objekte, davon sind aktuell %d auf dem Server sichtbar.", GetDynamicObjectCount(), GetObjectCount());

  • 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.


    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...

    ast2ufdyxkb1.png


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

  • 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.



    und das unter F5 zeigt die aktuellen Objekte an.

    Das klappt beim Streamer aber nicht bzw. nur bedingt.



    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.



    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.

  • 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.


    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...

    ast2ufdyxkb1.png


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

  • 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.



    denn diese funktionieren genauso gut wie deine

    Nur nicht immer ¯\_(ツ)_/¯

  • Nur nicht immer ¯\_(ツ)_/¯

    ...doch natürlich F5 funktioniert genauso gut wie deine Lösung?!


    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...


    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

    ast2ufdyxkb1.png


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

  • 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.



    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.



    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.



    ...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ß ;)

  • Dann printe das doch mal im Server Log oder zeige es in einem Dialog/Textdraw/... an. Viel Spaß

    ...Ich sag dazu jetzt nix mehr.


    Der Thread Ersteller hat genug Möglichkeiten geliefert bekommen, da kann er sich bestimmt eine aussuchen :)

    ast2ufdyxkb1.png


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

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen
  • Jeffry's Möglichkeit ist gut, kannst es aber auch so machen:


    CreateObject und DestroyObject hooken.
    Bei CreateObject eine Variable hochzählen und bei DestroyObject runterzählen.
    Denke das wäre eine weitere Möglichkeit, wollte ich nur mal erwähnen :)


    Mit freundlichen Grüßen
    JustMe.77 8)