Plugin API - Wehre schön, wenn & Fehlerberichte - It would be nice, if & bug reports

  • Hi red51, iIch glaube ich habe noch eine kleinigkeit gefunden:saint:

    Bei Internals.addUIElementToPlayer(player, radialStatusLabel, "RadialMenuLayer/screen"); bekomme ich den gesammten Bildschirm, das ist denke ich soweit Richtig.

    Und bei Internals.addUIElementToPlayer(player, radialStatusLabel, "RadialMenuLayer/apiElement"); bekomme ich ebenfals den gesammten Bildschirm, das klang für mich so ein bisschen nach nur dem Bereich vom KreisMenü.
    Aber was definitiv nicht klappt ist das Aus- und Ein-Blenden mit dem KreisMenü, aktuell wird es immer angezeigt:thinking:

  • Das ist an sich kein direkter Bug, das ist tatsächlich erstmal normal ;) Radial-Menüs werden dynamisch erzeugt und dann zur Layer hinzugefügt (und nach dem Ausblenden wieder gelöscht), daher ist die Layer selber immer sichtbar. "screen" ist im Grunde die Layer selbst, während "apiElement" eine Art Duplikat davon ist, was automatisch jede Layer hat. Die meisten API Elemente, die auf regulärem (also nicht über Internals) Wege zur UI hinzugefügt werden, landen dort. Das ist dafür da, damit es keine Probleme zw. API Elementen und normalen UI Elementen gibt.


    Es spricht aber nichts dagegen, dass die RadialMenuLayer selbst jeweils ein- und ausgeblendet wird, wenn ein Radial-Menü erscheint oder geschlossen wird. Dann werden die selbsterstellten Elemente immerhin auch mit ein- und ausgeblendet. Das können wir mit dem nächsten Update ändern ^^

  • Das können wir mit dem nächsten Update ändern ^^

    Mir ist aufgefallen das ich eh, das zusätzliche Element Ein/Aus-Blenden Sollte, wenn ich das nur für ein Bestimmtes Menü brauche:D

    :saint:Was bringt mein Menü im Kreismenü vom Bauen oder einem Anderen Plugin:lol:



    Noch eine kleinigkeit^^

    Ich habe die Möglichkeit Entdeckt, den Lade Bildschirm zu über Springen.
    Eigendlich eine schöne Idee, nur könnte da der Server das Letzte Wort haben?
    Wenn ich Labyrinte oder Versteckte Hölen habe, könnte in der Zeit wo sich die Wellt aufbaut, das schon gesehen werden in welcher Richtung zu Suchen ist:D

  • Mir ist aufgefallen das ich eh, das zusätzliche Element Ein/Aus-Blenden Sollte, wenn ich das nur für ein Bestimmtes Menü brauche :D

    :saint: Was bringt mein Menü im Kreismenü vom Bauen oder einem Anderen Plugin :lol:

    Achso, naja, wir werden das trotzdem ändern (bzw. es ist schon geändert) :D


    Ich habe die Möglichkeit Entdeckt, den Lade Bildschirm zu über Springen.
    Eigendlich eine schöne Idee, nur könnte da der Server das Letzte Wort haben?
    Wenn ich Labyrinte oder Versteckte Hölen habe, könnte in der Zeit wo sich die Wellt aufbaut, das schon gesehen werden in welcher Richtung zu Suchen ist :D

    Es gibt an sich nicht nur die Option, bewusst den Ladebildschirm zu überspringen, sondern das Spiel macht das auch dann automatisch, wenn das Laden aus irgendeinem Grund nicht weitergeht (aber die Grunddaten vom Server bereits erhalten wurden). Das Problem ist nämlich, dass wenn zB einzelne Chunks nicht geladen werden können, der Spieler sonst im Ladebildschirm hängen bleiben würde... was Ersteres angeht (also die Option zum Überspringen), so können wir dafür gerne auch eine serverseitige Einstellung einbauen, um das zu verhindern (würde dann mit dem nächsten Update "Settings_SkipLoadingAllowed" in der server.properties heißen) ;) Letzteres (also das Überspringen des Ladens weil es nicht mehr vorwärts geht) würde aber dann vmtl. nicht davon betroffen sein (zumindest würde ich mich dabei etwas unwohl fühlen) ^^

  • Letzteres (also das Überspringen des Ladens weil es nicht mehr vorwärts geht) würde aber dann vmtl. nicht davon betroffen sein (zumindest würde ich mich dabei etwas unwohl fühlen) ^^

    Ja, das ist auch eine gute Lösung:thumbup:
    Ich habe Festgestellt das, wenn ich Plugin's mit viel Upload beim Spawnen habe, sollte ich das, In Timer etwas Versetzt Laden Lassen.
    Das geht ganz gut, trotz der Enormen Daten, wird erst die Welt geladen, gelegendlich hängt auch mal ein Chunk, aber im Großen und ganzen Steht die Wellt bei 100% und in den Folgenden 3-5 Sec. werden die Timer abgearbeitet und die Plugin's Laden nach.
    Ich hätte zwar gerne noch etwas um den Spieler solange noch "fest zuhalten", mit einer kleinen Info das "Plugin XY noch am Inizialiesieren/Laden ist"
    Da könnte ich eventuell den Maus Zeigen und ein "Warte Bildschirm"Anzeigen:thinking:
    Ich würde eine Liste Machen, bei der sich die Plugin's anmelden im Enable und beim Spawn am Ende sich bei der Liste als Fertig melden, sind alle Fertig gehts Richtig Los:D

  • Hi red51,


    ich habe Probleme im "Single Player" den Mous-Event abzufangen, im "Multie Player" klappt es, player.setListenForMouseInput(true); wird auch gesetzt.


    Was mir auch noch aufgefallen ist:

    Wenn ich im MP ein Bundle Lade und es schon geladen wurde dan greift er ja auf den Chas zurück.

    Allerdings scheint das im SP zu einem fehler zu führen.

    Ist das von deiner Seite aus Schnell/Einfach zu regeln, oOder wie gehe ich da am besten im Single Player um?

  • ich habe Probleme im "Single Player" den Mous-Event abzufangen, im "Multie Player" klappt es, player.setListenForMouseInput(true); wird auch gesetzt.

    Hmm... welches Problem tritt denn genau auf? Wird das Event gar nicht erst getriggert? :wat:


    Wenn ich im MP ein Bundle Lade und es schon geladen wurde dan greift er ja auf den Chas zurück.

    Allerdings scheint das im SP zu einem fehler zu führen.

    Das ist leider ein heikles Thema :/ Dummerweise erlaubt Unity es nicht, ein Asset Bundle mehrmals zu laden... das Problem tritt hier beim Aufruf von "getAllAssetNames()" auf, da dafür ebenfalls das Bundle geladen werden muss (was aber nicht klappt, wenn das Bundle bereits clientseitig geladen wurde). Und es gibt leider keine Möglichkeit, anhand von Bytes (so liegen die Bundles in der API vor) auf ein geladenes Bundle zu schließen bzw. anhand eines bereits geladenen Bundles zu suchen...


    Wir müssen mal gucken, ob wir das irgendwie umgehen können :thinking:


    Ist das von deiner Seite aus Schnell/Einfach zu regeln, oOder wie gehe ich da am besten im Single Player um?

    Ich kann leider nicht sagen, ob wir dafür bis zum nächsten Update eine Lösung haben... dafür müssten wir das Laden von AssetBundles generell umschreiben. Du könntest sonst vll versuchen, "getAllAssetNames()" nur vor dem Verwenden von Asset Bundles aufzurufen (also bevor du das AssetBundle einem Spieler zuweist bzw. ein Modell davon lädst), dann dürfte es diesen Fehler eigentlich nicht geben.

  • Hmm... welches Problem tritt denn genau auf? Wird das Event gar nicht erst getriggert? :wat:

    Ja, es scheint als würde er garnicht erst Getriggert werden.



    Das ist leider ein heikles Thema

    Ja gut, dann muss das ebend an die Hand nehmen:Dund selber "Cashen"/eigene Listen nehmen.
    Muss ich aber erstmal Probieren


    Ich kann leider nicht sagen, ob wir dafür bis zum nächsten Update eine Lösung haben...

    Kein Stress, Primer Ziel ist ja Server und das Klappt, SP schaue ich mir jetzt mal genauer an;)

  • Ja, es scheint als würde er garnicht erst Getriggert werden.

    Merkwürdig... ich konnte das bei mir irgendwie nicht reproduzieren :wat: Dein Code sieht eigentlich korrekt aus. Vll hing es aber auch mit einem Bug zusammen, den wir zwischenzeitlich möglicherweise bereits behoben haben... ich teste es nochmal, wenn ich eine aktuelle gebuildete Version zur Hand habe ^^

  • Hai red51,

    ich wollte noch mal nach Fragen^^

    Kannst du den Eintrag API: Received raycast result unterbinden?
    Sind die API: einträge aus der Unitiy-API und lassen sich daher nicht abfangen?

    In der Zeit der Entwicklung, kann man diese Ausgebe Brauchen, allerdings gehe ich dann auch direckt an die stelle wo ich die Info brauche und lass sie mir ausgeben;)



    :saint:Für Hinten auf der Liste:
    Ich versuche mich noch an eigenen NPC's, da bin ich noch am Kern drann.


    Code
    HandleMainTask = new Timer(0.0416f, 0.50f, -1, () -> {
    ...
        getPlayer().raycastFromWorldPosition(getLocalPosition().add(0, 0.5f, 0), new Vector3f(0f, 90f, 0f), 50f, Layer.getBitmask(Layer.TERRAIN, Layer.CONSTRUCTION), false, (raycast) -> {
            ... Entscheiden Was und Wie gemacht wird ...
        });
    });

    Das fürt dann schon zu Brauchbaren Ergebnissten, nur kommen sehr Viele Log Einträge zustande.
    Im Allgemeinen würde ich behaupten das, jede Log ausgabe an der Leistung zieht, vorallem wenn sie ca. 24 mal Pro Secunde aufgerufen werden.


    Ich stückel mir gerade diese NPC-Klasse zusammen und mache mir gedanken über die Performans.

    Da Denke ich, würde eine C#-Funktion/Klasse die enger mit dem spiel Verbunden ist, besser sein.


    Speziell die Animator Steuerung in Verbindungt mit der moveToLocalPosition Funktion.
    Aktuell mache ich eine Entfernungsmessung zum Ziel Punkt um zu entscheiden wann ich vom walk zurück zum IDLE schalte. Teschnisch Laufen da zwei Schleifen Nebeneinander das gefällt mir Persönlich nicht so Recht und würde hier gerne enger mit dem Spiel zusammen Arbeiten:D


    Ich Probiere noch was die Besere Variante ist "in Java" ob ich eine Runnable oder interface in Vererbter Klasse nutzen sollte.
    Eventuell könnte die moveToLocalPosition noch zwei bis drei callbacks, für die (Start), AmLaufen und Stop Animator Steuerung haben.


    In der Unity Scripting API habe ich noch nicht genau nachgeschaut :saint:

  • Die Meldung "API: Received raycast result" können wir mit dem nächsten Update auf jeden Fall schonmal rausnehmen ^^ Das war eher zu Debug-Zwecke um zu prüfen, ob alles funktioniert (die Ausgabe findet dann statt, denn der Server die Antwort vom Client erhält).


    Deine Vermutung, dass das auf die Performance geht, ist auch korrekt. Allerdings haben Raycasts über die API generell einen gewissen Overhead - denn da die API nur serverseitig läuft (und niemals Code clientseitig ausgeführt wird), muss für einen Raycast erst ein Paket an den Client geschickt werden mit der Aufforderung des Raycasts, der Client muss dann diesen Raycast durchführen und das Ergebnis zurück an den Server senden, und dort wiederum wird dann das Java-Callback aufgerufen. An sich geschieht das immernoch alles schnell genug (abgesehen vom Ping im Multiplayer), doch wenn das zB sehr häufig ausgeführt wird, insbesondere dann noch für mehrere Instanzen (wenn du zB mehrere solcher NPCs hast), dann das durchaus an die Grenzen stoßen...


    Idealerweise würde das Spiel von sich aus bereits eine Möglichkeit bieten, Objekte am Boden haften zu lassen (dann ggf. i.V.m. einer moveTo-Funktion). Oder aber wenn es die Möglichkeit gibt, eigene Npcs einzubinden, würde man direkt vom Handling der Npcs profitieren. Leider wird beides aber noch etwas brauchen, bis sowas ins Spiel kommt :/


    raycastFromWorldPosition(getLocalPosition().add(0, 0.5f, 0), new Vector3f(0f, 90f, 0f), 50f...

    Hier ist ein kleiner Fehler (ggf. nur ein Flüchtigkeitsfehler beim Schreiben des Beitrags?): Der zweite Parameter erwartet einen Richtungsvektor (als Einheitsvektor). Wenn die Richtung zB nach unten zeigen soll, wäre der Vektor new Vector3f(0f, -1f, 0f);. Du kannst bei festen Richtungen aber alternativ auch die vordefinierten statischen Vektoren verwenden (zB Vector3f.DOWN für nach-unten) ^^

  • Ein Wunderschönes neues Jahr, red51 :party:

    Ich habe noch eine kleinigkeit gefunden, ich weiß jetzt nicht ob das schon bekannt oder schon von selbst aufgefallen ist:saint:

    Ein RayCast auf das Layer.CONSTRUCTION Layer gibt immer nur eine (Warscheinlich die erste) ID aus dem Chunk zurück, aber nicht die Richtiege ID auf die Gezielt wurde:thinking:

    Kannst du das reproduzieren oder ist das schon längst erledigt?^^




    :saint:ich wollte mal ein OBJECT oder CONSTRUCTION über die API bewegen;(da habe ich gesehen das mann zwar die Position holen kann, aber nicht Setzen:drooling:
    Gibt es da noch Pläne/Möglichkeiten ein MoveTo oder ein SetPosition einzubauen:nerd:dann Bitte hinten mit auf die Liste:D

  • Ein Wunderschönes neues Jahr, red51 :party:

    Vielen Dank, dir natürlich auch! ^^:thumbup:


    Ein RayCast auf das Layer.CONSTRUCTION Layer gibt immer nur eine (Warscheinlich die erste) ID aus dem Chunk zurück, aber nicht die Richtiege ID auf die Gezielt wurde :thinking:

    Oh, das ist wahr, danke für den Hinweis! :wat: Tatsächlich wird das erste Bauelement aus dem Chunk zurückgegeben... das werden wir mit dem nächsten Update beheben ^^


    :saint: ich wollte mal ein OBJECT oder CONSTRUCTION über die API bewegen ;( da habe ich gesehen das mann zwar die Position holen kann, aber nicht Setzen :drooling:
    Gibt es da noch Pläne/Möglichkeiten ein MoveTo oder ein SetPosition einzubauen :nerd: dann Bitte hinten mit auf die Liste :D

    Du meinst ein bestehendes Spielelement, zB ein Block oder Möbelstück? Ein "moveTo" ist leider etwas schwierig... zumindest bei Blöcken nicht so einfach möglich. Denn diese werden nicht einzeln dargestellt, sondern alle Blöcke in einem Chunk zu einem einzigen Mesh zusammengepackt. Dieser Mesh muss bei jeder Änderung (zB wenn ein Block nachträglich gedreht wird) neu generiert werden, was bei vielen verbauten Bauelementen relativ lange dauert. Ein smoothes "moveTo" müsste jeden Frame den Block bewegen, was bei mehreren Bauelementen unweigerlich die Performance killen würde :(


    Ein "setPosition" hingegen wäre theoretisch möglich. Wir haben das bisher noch nicht in der API eingebaut, da sowohl Objekte als auch Blöcke nur eine relative Position speichern (zu ihrem Chunk, in welchem sie gespeichert sind). Wenn die Position zu weit vom zugehörigen Chunk abweicht, wird es etwas problematisch... die API müsste sowas unter der Haube regeln (dass sie Objekte zB bei Bedarf einem anderen Chunk zuweist). Das Problem ist jedoch, dass auch in der API Objekte eine feste Chunkzugehörigkeit haben, was nicht ganz so einfach geändert werden kann. Wir müssten uns da mal überlegen, wie wir sowas am besten exposen... kann aber leider nicht sagen, wann sowas kommen würde :silenced:

  • wird das erste Bauelement aus dem Chunk zurückgegeben

    Super, dann kann man zumindestens den Status, Info und die Farbe für die Bauelemente erreichen^^


    Du meinst ein bestehendes Spielelement, zB ein Block oder Möbelstück?

    Ja, in ersterlinie geht's mir um einen Geheimgang:saint: hierfür sollten Möbelstücke eigendlich Voll ausreichen :love:
    Ich dachte wenn es möglich ist, könnte mann das mit einem Teil der Wand auch machen:nerd:aber hier ist es wohl Besser auf die "Hinge Joint" Elemente zu warten, evetuel kann man dann ja Eine Tür Bauen, die schwer von der Want zu unterscheiden ist8)

    Ein smoothes "moveTo" müsste jeden Frame den Block bewegen, was bei mehreren Bauelementen unweigerlich die Performance killen

    Eine "kleine Animation" vom Öffnen/zur Seite Schieben, wehre zwar Cool, aber das muss nicht sein.
    Vieleicht kann das Später mit den "Hinge Joint's" gemacht werden, sind ja eigendlich "nur Schaniere" aber vieleicht geht da auch Gleiten, wie Schiebetür:saint:



    Wir müssten uns da mal überlegen, wie wir sowas am besten exposen

    <3<3<3Wirklich keinen Stress<3<3<3
    :!:Wenn ich Schreibe: Bitte hinten mit auf die Liste.:!:
    ;)Ist das genau so gemeint:*


    Ich habe Absolutes Versändnis für die Situation:)
    Ich wünsche dir das du die Liste auch Fertig bekomms, und ich Hoffe das ich den Quell-Code von RW, nie in einem Öffendlichen Forum Sehen muss:saint:


    Ich versuche mich ja schon zurück zu halten^^aber einmal im Monat muss ich was Schreiben:saint:

    Ich wünsche dir das Mächtigste Insektenstpay auf der Welt<3

  • :saint: red51, du hast doch zugriff auf einiege Steam Daten, zumindestens die ID und das Profielbild.
    Könnte der Server sich das Letzte Profielbild pro Spiler "Speichern", ähnlich wie beim Namen, so das mann zum Spieler auch ein Bild über Plugins anzeigen kann^^
    Gibt es dafür vieleicht ein Workaround mit Internals oder so :D

Participate now!

Don’t have an account yet? Create a new account now and be part of our community!