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

A new update is now available, introducing a lot of new content!
  • Muss es eigentlich zwingend java sein, oder gehen auch verschiedene c Programmierspachen?

    Wie meinst du das?
    Als Programiersprache für die Plugin's? Dann müsste Red warscheinlich erst noch eine Bibliothek für die anderen Sprachen Bauen und diese mit dem Spiel Verbinden:thinking:
    Wegen der Perfomance?

  • Ja, das könnte man mit JNI machen.

    Ja
    Nur ich sehe da die gefahr, das die Leute das für eine direckte C/C++ anbindung halten.
    Aber es eigendlich die 3. Ebene der Emulation ist und am ende durch den JNI, wahrscheinlich ausgebremst wird:thinking:
    Wehre Interessant zu hören was Red dazu sagt;)
    Yes

    Only I can see because of the risk that the people think it's a direckte C/C++ connection.

    But it's actually the 3. The level of Emulation is and at the end of the JNI, probably thwarted :thinking:

    To listen to repel Interesting what it says in Red on it ;)

  • red51 könntest du den Font-Dialog auch zur Verfügung stellen?
    Also den Oberen Block der Schilder^^also Frarbe, Font, Größe, gerne auch Ausrichtung :saint:
    Im Schlimmsten Fall würde mir die Font auswahl reichen;)mit der schönen Vorschau:love:

  • Muss es eigentlich zwingend java sein, oder gehen auch verschiedene c Programmierspachen?

    Welchen konkreten Nutzen möchtest du damit verfolgen? Das Spiel selbst besteht in kompilierter Form ausschließlich aus C++ Code, d.h. wir hätten die API statt Java auch in C++ anbieten können, aber das wäre recht unklug gewesen, da C++ einerseits komplexer und weniger verzeihend als Java ist, andererseits C++ Code "gefährlicher" ist (zB kann falscher Memory-Zugriff unvorhergesehene Fehler mit sich bringen, sodass die Fehlersuche wesentlich schwieriger ist). Zudem würde das wahrscheinlich dazu führen, dass noch weniger Leute mit der API arbeiten (durch den allgemein höherene Schwierigkeitsgrad von C++) :thinking: Vorteile hätte es stattdessen nicht gebracht - zwar ist C++ minimal performanter als Java, aber das fällt in der Praxis nicht wirklich ins Gewicht.


    Alternativ wäre noch eine Skriptsprache wie Lua denkbar gewesen. Skriptsprachen sind meist noch "einfacher" als klassische Programmiersprachen (wie zB Java). Hier gibts aber viele Einschränkungen, u.a. in puncto Multithreading, was die Performance des Spiels dann doch zu sehr geschmälert hätte. Python wäre sonst


    Ja, das könnte man mit JNI machen.

    Das ist tatsächlich die Art und Weise, wie das Spiel mit der API kommuniziert ;)


    könntest du den Font-Dialog auch zur Verfügung stellen?
    Also den Oberen Block der Schilder^^also Frarbe, Font, Größe, gerne auch Ausrichtung :saint:
    Im Schlimmsten Fall würde mir die Font auswahl reichen;)mit der schönen Vorschau:love:

    Theoretisch könnten wir die Font-Auswahl einbauen (also als separater Dialog, so wie zB der Colorpicker) ;) Der ganze obere Block der Schilder ist aber leider etwas schwieriger, da das kein einzelnes Element ist, stattdessen sind das mehrere einzelne Elemente...

  • red51 Nabend,
    gibt es einen "Work a Round" um Bilder in einem UIElement zu Spiegeln?:thinking:
    Normal könnte mann das ja über Transform.Scale(-1,1) machen, für eine Vertikale Spiegelung.:saint:


    In der Npcs.db gibt es ja schon einen Owner, der wird nur noch nicht genutzt:Dwie ist den das Grob geplant?
    Ich würde den schon mal für die Pferde nutzen wollen. Sattel Drauf UID rein, sattel runter UID raus und das dann beim Aufsteigen Prüfen8)
    Oder mache ich dann nur Unordnung?

    :crazy:OKe, wird wieder zurückgesetzt beim neustart:lol:

  • :saint:ich glaube ich habe es schon mal Irgendwo erwähnt, bin aber geradewieder darüber gestolpert^^
    Bei den Areas hätte ich gerne die möglichkeit die Area eigenen Permission auslesen, nicht nur die Spieler eigene.
    So das ich Vergleichen könnte ob eine Area eine bestimmte Permissions hat.

  • Apropo Colorpicker, ich bekomme da noch Netzwerk Fehler, war die schon überarbeitet?

    Hmm... bin mir nicht so sicher, in dem Zusammenhang wurden ein paar Änderungen vorgenommen, kann mich aber nicht mehr konkret erinnern, inwieweit das davon betroffen ist (bzw. ob der Bug damit ggf. gefixed wurde) :thinking: Was für einen Netzwerkfehler bekommst du denn genau?


    gibt es einen "Work a Round" um Bilder in einem UIElement zu Spiegeln?
    Normal könnte mann das ja über Transform.Scale(-1,1) machen, für eine Vertikale Spiegelung.

    Eine Spiegelung würde man tatsächlich mit einer negativen Skalierung umsetzen, das wäre über das IStyle.scale Property möglich, ist aber in der API leider noch nicht exposed... das können wir aber mit dem kommenden Update noch hinzufügen :)


    In der Npcs.db gibt es ja schon einen Owner, der wird nur noch nicht genutzt :D wie ist den das Grob geplant?

    [...]

    OKe, wird wieder zurückgesetzt beim neustart

    Ja, das wird momentan beim Speichern fest auf -1 gesetzt (da Npcs intern noch keinen owner tracken). Das Feld ist später für Haustiere usw vorgesehen, es kann aber durchaus sein, dass sich das bis dahin noch ändert^^


    Bei den Areas hätte ich gerne die möglichkeit die Area eigenen Permission auslesen, nicht nur die Spieler eigene.

    Das wird mit dem nächsten Update kommen, also genau genommen eine Area.getDefaultPermission() Methode (womit man die Standard-Permission der Area setzen kann) ;)

  • :thinking: Was für einen Netzwerkfehler bekommst du denn genau?

    Aktuell gibt es noch Folgende Fehlermeldung:

    Code
    [ERROR] [15:35:30] [JNI exception] java.lang.ClassCastException: class net.risingworld.api.utils.ColorRGBA cannot be cast to class java.lang.Integer (net.risingworld.api.utils.ColorRGBA is in unnamed module of loader net.jiw.unity.Loader$RuntimeClassLoader @2acf57e3; java.lang.Integer is in module java.base of loader 'bootstrap')
    UnityEngine.Debug:LogError(Object)
    JIW.JNI.Wrapper.Env.JNIEnv:CheckException()
    RisingWorld.PluginAPI.Types.JCallback:OnCall(JNIEnv, JObject)
    RisingWorld.PluginAPI.Objects.<>c__DisplayClass492_0:<ShowColorPicker>b__0(Object)
    RisingWorld.Server.Network.Listeners.ServerGeneralListener:ShowCustomMessageDialogResponseReceived(IPacket, AbstractConnection)
    JIW.Network.Core.Common.Event.ReceiveServerPacketEvent:Execute(AbstractNetworkServer, NetworkEvent)
    JIW.Network.Core.Common.Event.NetworkEvent:Execute(AbstractNetworkServer, AbstractNetworkClient)
    JIW.Network.Core.Common.Channel:Run()
    System.Threading.ExecutionContext:Run(ExecutionContext, ContextCallback, Object)


    das können wir aber mit dem kommenden Update noch hinzufügen :)

    :wow:

    es kann aber durchaus sein, dass sich das bis dahin noch ändert^^

    :D


    wird mit dem nächsten Update kommen

    :drooling:

  • Mir ist noch eine kleinigkeit Aufgefallen, weiß aber nicht ob das so beabsichtigt ist:thinking:
    Wenn ich z.B. eine Karotte mit der Sichel Schlage, bekomme ich umgehend ein DestroyEvent, aber sie müsste doch auch einen HitEvent bekommen?
    Eventuell weil es wenig Halbarkeit hat.
    Ich kann nicht unterscheiden ob ich es mit [F] einsammle oder mit der Sichel:thinking:


    Ich Prüfe auf die Sichel in der Hand, es gibt aber keinen unterschied ob ich Schlage oder die Sichel nur in der Hand halte und mit [F] interagiere, beim Destroy.


    Destroy ist ja Zerstören
    Remove ist ja wie Einsammeln

    Hit bleibt Schlag



    Wo finde ich den die GrassID?
    Das müsste doch die Gras Variante bestimmen:thinking:
    Ich bekomme die GrassID 100, das müste die Variante 1 sein, kann das aber nicht in der definition.db finden.
    Gibts da ein Work a Round?

  • red51 wehre es möglich für den PlayerUIInputTextEvent noch einen Event zu bekommen für jede Zeichen änderung?
    Mir schwebt da so eine Autovervolständiegung/Übereinstimmungsliste vor, dafür bräuchte ich nur jede veränderung:saint:

  • Wenn ich z.B. eine Karotte mit der Sichel Schlage, bekomme ich umgehend ein DestroyEvent, aber sie müsste doch auch einen HitEvent bekommen?

    [...]

    Ich kann nicht unterscheiden ob ich es mit [F] einsammle oder mit der Sichel

    Wenn du die Karotte mit der Sichel schlägst, sollte eigentlich das PlayerRemoveVegetationEvent getriggert werden. Bei anderen Pflanzen hingegen, die nicht mit der Sichel aufgesammelt werden können, wird der Schlag als normaler Schlag gewertet, d.h. es wird das Hit-Event sowie Destroy-Event getriggert.

    Grundsätzlich ist Destroy immer bei jeglicher Form von Zerstörung vorgesehen, während Remove das zerstörungsfreie Aufsammeln beschreibt. Leider gibt es tatsächlich keine direkte Möglichkeit, herauszufinden, ob die Pflanze mit F oder mit der Sichel aufgesammelt wurde... vll macht es Sinn, wenn wir zusätzlich noch ein PlayerPickupVegetationEvent (aufheben mit F) und PlayerHarvestVegetationEvent (sammeln mit Sichel) einbauen? :thinking: Oder ggf. ein Parameter in PlayerRemoveVegetation, um zu unterscheiden, wie das Einsammeln vonstatten ging. Bin mir nicht ganz sicher, was der beste Weg wäre...


    Wo finde ich den die GrassID?
    Das müsste doch die Gras Variante bestimmen :thinking:
    Ich bekomme die GrassID 100, das müste die Variante 1 sein, kann das aber nicht in der definition.db finden.
    Gibts da ein Work a Round?

    Bei welchem Event genau? Das Spiel repräsentiert über die ID sowohl die Grassorte als auch die Grashöhe: 100 ist die ID von normalem Gras, allerdings ohne Grashalme (also komplett plattes Gras). 101 ist dann sehr kurzes Gras, 102 ist Gras von mittlerer Länge (Standardlänge), 103 ist hohes Gras und 104 ist sehr hohes Gras.

    Bei 105 beginnt dann die nächste Grassorte (arides Gras), wieder als plattes Gras, 106 ist dann kurzes Gras, 107 mittl. Gras, 108 hohes Gras und 109 sehr hohes Gras. 110 ist dann trockenes Gras, 115 ist totes Gras usw. ^^


    In der API sind die Grassorten leider nicht wirklich gut repräsentiert. Ggf. macht es Sinn, wenn wir den GrassEvents dort zusätzliche Funktionen mitgeben?


    red51 wehre es möglich für den PlayerUIInputTextEvent noch einen Event zu bekommen für jede Zeichen änderung?
    Mir schwebt da so eine Autovervolständiegung/Übereinstimmungsliste vor, dafür bräuchte ich nur jede veränderung :saint:

    Ich packe das mal auf unsere Liste, kann aber leider noch nicht 100% sagen, ob das mit dem nächsten Update reinkommt :saint:

  • ein Parameter in PlayerRemoveVegetation, um zu unterscheiden

    Ich denke drt Zewite Parameter Reicht.
    Es geht darum eine kleine Tutorial-Save-Zone zu erstellen, in der Gäste gewisse sachen machen Dürfen aber die sachen nicht Zerstört werden. (Rechte Offen, Events werden geCanceld, Ermitteltes Item wird dem Player Inventar hinzugefügt)

    Um ein wenig Spaß mit rein zu bringen wollte ich schon mal kleine Quest machen wie X*Gras Schneiden(wo das mit der ID noch nicht klappt) und für die Unterscheidung Sammeln/Sicheln ist bei Mais und Tomaten Entscheident Ernten=nur Mais Sicheln Setzlich und Mais.
    Ich bin aus dem Theme aber wieder etwas Raus:saint:

    Ggf. macht es Sinn, wenn wir den GrassEvents dort zusätzliche Funktionen mitgeben?

    Naja es wehre schon schön die Gras Sorte zu ermitteln, in dem Zenarion Brauche ich eigendlich das dazugehöriege Item.

    Allerdings kann ich mir Vorstellen (Elfen zu Suchen) wo bei Unterschiedlichen Gras Sorten und Längen auch unterschiedliche Warscheinlichkeiten für so ein Event liefern sollten.


    ob das mit dem nächsten Update reinkommt :saint:

    Das ist nicht so Schlimm, wenn das Sonst kein großes ding ist.


    Köntest du schon den "low level socket support" Reparieren?
    src\stemnetworkingsockets\clientlib\steamnetworkingsockets_lowlevel.cpp (3856) : Trying to close low level socket support, but we still have sockets open!
    Das Trift meist auf, wenn ich einen Button zu Schnell hintereinander Drücke und der Clien den Server zu "viel" Fragt. Teilweise konnte ich das Verhinder in dem ich eine isUpdate Check eingefügt habe (So lange der 1te Prozess noch Läuft kann er nicht erneut aufgerufen werden, genauer gesagt es geht dann in eine While-Schleife mit einem Thread.sleep bis isUpdate wieder False ist)
    Das kann ich machen bei "größeren" Berechnungen(Fensteraufbau/Schleifen für Listen und so) machen, aber bei einem "SpinButton" der nur "Kurz" hochzählt und ggf. aine UI-Aktualiesierung macht ist das Schwer. Da gibts dan eigendlich nur 2-Takte (Rechnen, UImachen), ich wüsste nicht wo ich da die Wrte-Schleife wieder Freigeben soll, nach dem UI-Update?

    Somit kann ein Mungo auf Koffein den Server zum Absturz bringen:thinking:


    Ach ja beim UIPainter2D, gibt es da eine Maximal Begrenzung?
    Ich habe versucht ein Raste abzubilden, allerdings wenn ich eines Baue was größer 31x31 Felder groß ist, bleibt das Element Leer:thinking:
    Als würde dann etwas Volllaufen. Ich habe auch Versucht das stückweise zu Laden, das klappt, bis zu einer gewissen größe dann ist SchichtX(


    8)Ich muss aber gestehen das ich mittlerweile nicht mehr alles auf dem Schirm habe was schon gemeldet ist und das mansches eventuell schon mal Besprochen wurde:saint:




    Anderes Thema, naja nicht wirklich.)Ich habe heute einen Punkt gefunden den ich einfach nicht Verstehe und sogar Absichtliche Dummheit unterstellen muss.Bitte welchen Grund gibt es, für Text ein Overlay zu machen mit dem man den Text Verdecken kann (So das er nicht Lesbar ist)?Das nent mann dan Marker, wobei ich da an Textmarker Denke und nicht an Übermalen.
    Ich habe was gesucht um den Hintergrund einzelner Textbereiche zu Färben!
    Aber so klappt das nicht Wirklich Text und Hintergrund zu Gestalten.

    Ich hoffe du Verzweifelst nicht an Unity, bleib Stark;)
    Wie kommen Unity und Steam eigendlich mit einander klar? Gibt es dort eine einheit oder ist das "Unity Standard Chaos" ?

  • Ich denke drt Zewite Parameter Reicht.
    Es geht darum eine kleine Tutorial-Save-Zone zu erstellen, in der Gäste gewisse sachen machen Dürfen aber die sachen nicht Zerstört werden. (Rechte Offen, Events werden geCanceld, Ermitteltes Item wird dem Player Inventar hinzugefügt)

    Um ein wenig Spaß mit rein zu bringen wollte ich schon mal kleine Quest machen wie X*Gras Schneiden(wo das mit der ID noch nicht klappt) und für die Unterscheidung Sammeln/Sicheln ist bei Mais und Tomaten Entscheident Ernten=nur Mais Sicheln Setzlich und Mais.

    Hört sich gut an, ich schaue mal, was sich machen lässt ;)


    Naja es wehre schon schön die Gras Sorte zu ermitteln, in dem Zenarion Brauche ich eigendlich das dazugehöriege Item.

    Allerdings kann ich mir Vorstellen (Elfen zu Suchen) wo bei Unterschiedlichen Gras Sorten und Längen auch unterschiedliche Warscheinlichkeiten für so ein Event liefern sollten.

    Sinnvoll wäre es definitiv, wenn man da rankommt... ich packe es mal auf unsere Liste. Ich sehe auch gerade, dass die Grashöhe leider nicht über das Event ermittelbar ist... das müssen wir ändern.


    Du kannst aber zwischenzeitlich auch eine eigene Hilfsfunktion schreiben, die dir die Grassorte anhand der ID zurückgibt. Das könnte dann so aussehen:



    Die Grassorte kann dann zB so ermittelt werden:

    Java
    @EventMethod
    public void onPlayerRemoveGrass(PlayerRemoveGrassEvent e) {
    int id = e.getGrassID();
    System.out.println("Grass ID: " + id + " Type: " + getGrassType(id));
    }


    Das gibt dann zB aus Grass ID: 130   Type: GrassJungle usw.


    Köntest du schon den "low level socket support" Reparieren?

    Diese Meldung kommt von Steam direkt und ist eigentlich kein Fehler in dem Sinne, sondern tritt i.d.R. dann auf, wenn die Anwendung nicht ordnungsgemäß beendet wird - zB wenn der Prozess gekilled wird, oder wenn der Server via shutdown now Command beendet wird, oder eben wenn das Spiel crasht. So oder so ist das aber eher ein Folgeeffekt und normalerweise nicht für das Problem verantwortlich, welches bei dir auftritt.


    Ich habe leider nicht ganz verstanden, was genau passiert? Wenn nur beim Knopfdruck irgendeine Nachricht vom Client zum Server gesendet wird (oder andersherum), dann verursacht sowas alleine keinesfalls zu viele Pakete. Du müsstest mir höchstens mal den Code zeigen, damit ich dazu mehr sagen kann.


    Ach ja beim UIPainter2D, gibt es da eine Maximal Begrenzung?

    Nicht von unserer Seite, aber leider hat Unity ein hartverdrahtetes Vertexlimit für UI Elemente, welches bei 65535 liegt. Unity hat zwar 2022 angekündigt, dass sie das zukünftig ändern oder einstellbar machen wollen, aber realistisch betrachtet werden wir das nicht mehr erleben.

    Wenn das Limit überschritten wird, dann wird das Element unsichtbar... diverse Einstellungen treiben die Vertexe nach oben (zB LineJoin.Round oder LineCap.Round, und zB haben Bezier-Kurven logischerweise auch mehr Vertexe als eine gerade Linie usw), hier könnte man höchstens versuchen, das etwas zu reduzieren. Ansonsten bleibt nur, das ganze zu unterteilen und mehrere UIPainter2D zu verwenden :silenced:


    Bitte welchen Grund gibt es, für Text ein Overlay zu machen mit dem man den Text Verdecken kann (So das er nicht Lesbar ist)?Das nent mann dan Marker, wobei ich da an Textmarker Denke und nicht an Übermalen.
    Ich habe was gesucht um den Hintergrund einzelner Textbereiche zu Färben!
    Aber so klappt das nicht Wirklich Text und Hintergrund zu Gestalten.

    Leider gibt es keine Möglichkeit, dieses Overlay hinter den Text zu bekommen :/ Du kannst zwar einen Transparenzwert bei <mark> verwenden (zB <mark=#0000FF80>), wodurch der Text sichtbar wird, aber man sieht trotzdem, dass sich die Färbung vor dem Element befindet.


    Hier bleiben leider nur zwei Möglichkeiten: Entweder zu erzeugst ein weiteres Panel, welches du hinter den Text legst. Hier wird es leider schwierig, die richtige Position zu finden. Oder alternativ erstellst du zwei identische Label übereinander (zB könnte das 2. Label einfach ein Child vom 1. Label sein), beide mit gleichem Style, setzt aber nur beim 1. (also unteren) Label den <mark> Tag (dann idealerweise mit vollem Alphawert, zB <mark=#0000FFFF>). Das 2. Label erhält denselben Text, aber ohne <mark> Tag. Nicht schön, aber selten ^^


    Wie kommen Unity und Steam eigendlich mit einander klar? Gibt es dort eine einheit oder ist das "Unity Standard Chaos" ?

    Naja, glücklicherweise hat das nichts mit Unity zutun :D Wir verwenden Steamworks.NET, welches ein 1:1 Wrapper der Steam API ist. Da muss an keiner Stelle direkt mit Unity interagiert werden (da sich alles eh nur codeseitig abspielt).

  • Du kannst aber zwischenzeitlich auch eine eigene Hilfsfunktion schreiben, die dir die Grassorte anhand der ID zurückgibt.

    :thumbup:Darauf lässt sich aufbauen:D



    hier könnte man höchstens versuchen, das etwas zu reduzieren.

    Ja da werde ich mal Schauen, mit den Runden sache könnte warscheinlich noch was platz frei gemacht werden.
    Aber da weiß ich schon mal wo/wie die Grenzen sind:crazy:


    Diese Meldung kommt von Steam direkt und ist eigentlich kein Fehler in dem Sinne, sondern tritt i.d.R. dann auf, wenn die Anwendung nicht ordnungsgemäß beendet wird - zB wenn der Prozess gekilled wird

    In die Richtung hat sich mein Bauch gefühl auch geäußert:D
    Ich berhalte das estmal noch im Auge, ich bin meistens in FOR oder ForEach Schleifen unterwegs die dann etwas länger Brauchen und meißt würden die dan Doppelt gestartet werden und dann passiert es.
    Kann das was mit den Events zu tun haben, das die nur in dem Tick existieren?
    Kann ich irgend wie sehen was ein Plugin im Speicher hat, könnte ich sehen wieviele und welche Schleifen am Laufen sind?

    Ich wollte dir erstmal noch etwas Zeit für das Update geben^^danach würde ich dich wieder Intensiver mit Plugin Fragen Löchen:saint:
    Wenn ich bis dahin noch Probleme mit dem "low Level Soket" habe, melde ich mich nochmal per PN;)

  • Kann das was mit den Events zu tun haben, das die nur in dem Tick existieren?

    Das ist nur problematisch, wenn Events außerhalb des aktuellen Scopes benutzt werden. Es ist für die Lebensdauer des Event-Objects egal, wie lange das Abarbeiten des Events dauert. Problematisch ist es nur, wenn das Event den Scope verlässt - zB wenn du das Event-Objekt selbst in einer Liste speicherst und an anderer Stelle darauf zugreifst, oder wenn du das Event in der enqueue() oder executeDelayed() Methode verwendest, oder in einem Timer, oder wenn du einen neuen Thread erstellst und darin das Event verwendest. In diesen Fällen sollte aber *eigentlich* eine Java-Exception geworfen werden, wenn du auf das Event zugreifen möchtest.


    Intern läuft es so ab, dass das native Event-Objekt erstellt wird (immer nur im Stack, nicht im Heap), dann holt sich das Spiel die Speicheradresse dieses Objektes, ruft die Java Eventmethoden auf (also in den Listenern der Plugins), und nach Abarbeitung der Eventmethoden wird das Objekt bzw. der Speicher freigegeben (und ist dann nicht mehr gültig). Das Event ist also nur für die Dauer des Funktionsaufrufs valide.


    Kann ich irgend wie sehen was ein Plugin im Speicher hat, könnte ich sehen wieviele und welche Schleifen am Laufen sind?

    Leider nein, also zumindest nicht mit den Bordwerkzeugen des Spiels. Debugging scheint aber generell zu funktionieren, wie Kryssi_79 getestet hat: Plugin Remote debuggen ?


    Wenn ich bis dahin noch Probleme mit dem "low Level Soket" habe, melde ich mich nochmal per PN ;)

    Aber habe ich das denn richtig verstanden, dass der Server crasht (falls du im MP testest)? Bzw. konkreter gesagt die Instanz, die die Plugins geladen hat?


    Normalerweise sollte der Server niemals crashen, zumindest in der Theorie. In der Praxis ist es allerdings leider so, dass wenn Java eine native Methode aufruft, und diese native Methode eine Exception wirft, es leider zwangsläufig zu einem harten Crash kommt (und die eigentliche Exception des Spiels untergeht). Das kann schon bei ganz simplen Sachen passieren, zB wenn etwas aus der Welt-Datenbank ausgelesen und dabei ein falscher SQL-Syntax verwendet wird (oder auf eine Column zugegriffen wird die nicht existiert). Das führt dazu, dass durch ein Plugin tatsächlich recht schnell mal ein Crash entstehen kann. Aber auch kleinste Bugs im Spiel können dann schnell zu so einer Situation führen (ohne Hinweis auf die eigentliche problematische Stelle).


    Das sollte mit dem nächsten Update nicht mehr der Fall sein (sofern wir da nichts übersehen haben). Ob dein Problem aber überhaupt damit zusammenhängt, kann ich leider nicht sagen, das müsste man nach dem Update beobachten (wenn also Crashes nach dem Update auftreten, am besten Bescheid geben) ;)

  • Debugging scheint aber generell zu funktionieren

    Ja das klappt super, nur sehe ich da ja "nur" die Aktuelle Schleife.
    Ich bin mir manschmal nicht Sicher ob ich Richtig Aufgräumt habe, vor allem wenn es Umfangreicher wird:drunk:
    Ja dann muss ich mir mal überlegen wie ich das mache, damitt ich erkenne in welcher Schleife ich gerade Debugge:thumbup:


    Aber habe ich das denn richtig verstanden, dass der Server crasht (falls du im MP testest)? Bzw. konkreter gesagt die Instanz, die die Plugins geladen hat?

    Ja das ist alles im MP.
    Also der gesammte DedicatedServer beendet sich, diese Info taucht auch nicht im Log auf, Sondern "nur" auf der Server-Konsole, von der ich ein OBS mitschnit mache, da kann ich das dann sehen.
    Dieser Fehler ist auch Aufgetaucht wenn sich neue Spieler auf meinem Server zum ersten mal einloggt. Da lag der Verdacht auf dem ModelLoader, das bei Schlechterverbindung und Unbekannte X, neue Spieler erst den Server "killen", wo bei der Log dann verät das er gerade AssetBundle's Syncronisiert hat. Nach neustart und erneutem versuch wird der Resr Syncronisiert und dann kommt der "neue" Spieler ohne weitere Probleme drauf.
    Soweit ich das seiner Zeit Testen konnte lag es nicht am Betriebsystem, ich dachte erst Unix hat da Probleme aber das konnte nicht Reproduzirt werden.


    zB wenn etwas aus der Welt-Datenbank ausgelesen und dabei ein falscher SQL-Syntax verwendet wird

    Da achte ich eigendlich Drauf, jede Query über zwei Zeilen Teste ich Normal zuvor im DB-Browser, da lässt es sich eigendlich auch besser Kontroiren:D


    Aber auch kleinste Bugs im Spiel können dann schnell zu so einer Situation führen (ohne Hinweis auf die eigentliche problematische Stelle).

    Ich lass mal mein bauchgefühl weiter Horchen, ich habe ja schon eine recht gute Vorstellung wan was Passiert.


    Den Aktuellen Fehlen kann ich auch mit dem neuen Plugin Reproduzieren. Er tritt auf wenn ich ein PlayerUIElementClickEvent so schnell hinternander auslöse das die erste Runde noch nicht abgeschlossen ist! (for, foreach, lambda & interfaces) Das bekomme ich aber geregelt indem ich eine Prüfung eingebaut habe die Doppelte Schleifen Verhinder, sie sind weiter Aktiv und Warten mit z.B.Thread.sleep(750); in einer Schleife bis die Erste Funktion durch gfürt wurde.
    Das klingt danach das ich in dieser Funktion was habe (?offene native Metode?) die dann Stenkert:thinking:


    Das sollte mit dem nächsten Update nicht mehr der Fall sein (sofern wir da nichts übersehen haben).

    Das werde ich Selbst Verständlich für dich Überprüfen wenn's soweit ist:thumbup:
    Wenn ich die Sachen heraus bekomme, mache ich dir Notizen und geb dir dann den Code zum Selber Testen. Da ich ja viel in die ToolsAPI auslager bräuchte ich die dann nur einmal im Forum Aktualiesieren :nerd:

  • Was allerdings noch ziemlich wichtig wehre, das mann eine Text-Datei aus einem Asset auslesen kann. Eigendlich nur für Config/Yaml/Jason.

    Für die UIElemente würde ich noch ein Drack-Drop wünschen, so das ich Elemente aufnehmen und Ablegen kann (für ein egenes "Inventar"), und auch die Aktuelle Position bekommen kann (vieleicht als abfrage da könnte ich den Rütmus selber bestimmen).
    Ich hatte Überlegt, sowas wie Logik Sim zu Bauen und beim Verbinden der Pin's soll die Linie schon zu sehen sein. Die Bauelemente würde ich mit Elementen machen und im Hintergund ein UIPainter2D für die Verbindungen.

Participate now!

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