Posts by red51

A small new update is available now!

    1. Wenn 2 Personen in einer Truhe sind und einer von beiden raus geht wird der andere auch aus der Truhe geworfen und dabei ist es egal in welcher Truhe man ist. Das gleiche passiert auch wenn

    einer von beiden im Inventar ist, sobald einer aus eine Truhe geht wird der andere aus dem Menü geworfen.

    Das ist leider ein Bug, wie noci schon sagt. Der Bug hat sogar eine relativ banale Ursache: Wenn ein Spieler sein Inventar schließt, schließt das Spiel auch automatisch die Kiste. Das wiederum schließt das Inventar aller anderen Spieler, die ebenfalls auf diese Kiste zugreifen. Das werden wir noch beheben ;)


    Grundsätzlich unterstützt das Spiel aber den gleichzeitigen Zugriff mehrerer Spieler auf eine Truhe ^^


    2. hatte mein Mitspieler das Problem wenn er im Berg graben war das die Welt auf reist (nicht richtig ladet) sie Bilder

    Hmm... probiere am besten mal, die Welt neuzuladen, wie noci vorschlägt. Bestehen die Risse danach immernoch?

    Unfortunately your permissions don't contain any settings for images. It just works for you because permissions are ignored for server admins by default (you can disable this behaviour by setting "Permissions_AdminsFullPermissions" to False in the server.properties file btw).


    To define the image limit in the permissions, you have to set maxamount in the image category. If you want all players to be affected, it's sufficient to just change that in the default.json file (all group permissions inherit their permissions from that file). This is how image permissions could look like:

    JSON
    "image": {
    "maxamount": -1,
    "maxresolution": 512,
    "delete": false,
    "deleteown": true
    }


    This post also contains an overview of all permissions (including a description and examples): RE: Permissions [New Version]


    I've updated your default.json file, please find it attached (you can find the added "image" part after the "blueprint" part) ;)

    Files

    • default.json

      (3.42 kB, downloaded 273 times, last: )

    The problem indeed appears to be happening in the Portals plugin, as mentioned by yahwho , but in fact that seems to be just a follow-up error :thinking: According to the report you've sent, there is an error in the UnityBundleLoader plugin. This apparently causes issues when using the reloadplugins command.


    According to the log, an old version of the UnityBundleLoader plugin was used (0.0.1). I was able to reproduce the issue with that version, but it seems to be fixed with the latest version (0.0.2), so I would recommend to install the latest version of that plugin ;)

    Resetting the gap to zero by a command would be really helpful :D

    We could add a gap command to set an arbitrary gap for the currently active element directly (you could then just pass 0 to reset the gap) ;)

    No precision, that's right, but a way to switch to normal with backspace. in the unity-version it's like yahwho mentioned, very very unfriendly to set the gap distance to 0.

    So this means you want the precision to be removed and a hard-coded value to be used instead? Idk if that's really an improvement.


    The Java version didn't have a way to set the gap size to 0 either, and binding it to backspace may be a bit confusing (considering backspace already resets the rotation/scale).

    Grundsätzlich wäre das möglich, nur leider ist es schwierig, das als Option anzubieten... denn einerseits bestimmen diese Zusatzdaten, wie die Items im Inventar gespeichert bzw. serialisiert werden. Andererseits wird das Inventar immer serverseitig bestimmt, sodass zumindest im MP bei Clients abweichende Einstellungen auf Ecken und Kanten stoßen würden :/ Das umzusetzen wäre zwar kein Ding der Unmöglichkeit, dazu müssten wir uns aber mal Gedanken machen :thinking:


    Oder man legt das direkt als Standardverhalten fest, allerdings weiß ich nicht, ob das wirklich immer sinnvoll ist :monocle: Es gibt vmtl. auch Situationen, wo geringfügige Abweichungen in der Größe dazu führen, dass Blöcke im Inventar nicht mehr gestapelt werden (was das Inventar dann generell spürbar voller machen könnte)... das könnte ggf. ungewollt sein.

    Thanks for the log! As mentioned by noci , it's caused by an incompatible version of the "ToolsAPI" plugin. Replacing it with the latest version of that plugin should do the trick ;)

    Sorry for my late response, unfortunately I missed your initial post :/ But I'm glad to hear you managed to solve the problem :)


    As for the scheduler for the server........ god knows why its non functional.. I will get to the bottom of it eventually

    Hmm... if the scheduler contains any errors, the log usually provides more information about that :thinking: Do you mind sending me the scheduler file, so I can take a closer look at it? You can either upload it here or send it via PM to me :)

    Sorry ersmtal für meine späte Antwort! :saint:


    Zuerst war ich ein wenig Verwirrt da es kein Boolean Parameter gibt, aber als ich mich getraut habe den mit dem Integer (0/1) zu benutzen hat es ebenfalls geklappt.

    Unity verwendet intern keine bools für Material-Parameter (das wird einfach über floats abgebildet), aber wir könnten das der Einfachheit halber trotzdem zur API hinzufügen ^^


    red51 Jetzt habe ich nur das Problem das ich wenn der "Animator 2"[2.] Aktiv ist, kann ich nicht mehr "Shader"[2.] nutzen, warscheinlich überschreit die Animation die werte. Ich Habe versucht ihn mit der API zu Aktivieren oder Deaktivieren, leider ohne erfolg.

    Das ist merkwürdig :wat: Kannst du mir das AssetBundle (und den Namen des Prefabs) ggf. einmal zusenden? Dann kann ich versuchen es bei mir zu reproduzieren ;)


    Was ich auch noch gerne wüste, was mache ich mit invokeComponentMethod, klingt Spannend, aber konnte da, noch nix mit bewirken.

    Damit kann eine beliebige Methode einer Component aufgerufen werden. Die meisten wichtigen Methoden der wichtigsten Komponenten sind bereits exposed (zB die Animator- oder Material-Methoden), aber diese Funktion ist hilfreich für Dinge, die noch nicht nach außen getragen wurden. Beispiel: Wenn dein Prefab eine Rigidbody-Komponente hat, und du zB die WakeUp() Methode aufrufen möchtest, könnte der Code dazu so aussehen:

    Code
    prefab.invokeComponentMethod(null, "Rigidbody", "WakeUp");


    Oder die Translate() Methode der Transform-Komponente, bei der ein Vector3 als Parameter übergeben wird:

    Code
    prefab.invokeComponentMethod(null, "Transform", "Translate", new Vector3f(10f, 0f, 0f));


    Analog dazu gibt es noch die setComponentProperty() Methode, womit "Properties" statt Methoden/Funktionen aufgerufen werden können. Beispiel: Wenn du die Masse eines Rigidbody auf 100 setzen möchtest (in Unity ist "mass" ein Property), könntest du das zB so machen:

    Code
    prefab.setComponentProperty(null, "Rigidbody", "mass", 100f);


    Was ich mir noch Dringend :saint: wünsche ist das auslesen des Transform und eine Liste der enthaltenen Unterordner ^^ also jeden Tranform im Prefab mit Namen

    Schwierig... das Problem ist leider, dass dafür das Modell zusätzlich serverseitig geladen werden muss. Bei Prefabs aus AssetBundles ist das zwar nicht so das große Problem, aber zB FBX Dateien brauchen relativ lange zum laden... das würde leider ein sehr teurer Funktionsaufruf... :dizzy:


    Wir können mit dem nächsten Update aber eine neue "readLocalPosition()" bzw. "readWorldPosition()" einbauen, mit welcher von einem Prefab bzw. einem beliebigen Child die derzeitige lokale bzw. globale Position (und Rotation) ausgelesen werden kann. Der Aufruf ist dann an einen Spieler gebunden und arbeitet mit einem Callback (da die Position vom Client abgefragt wird - schließlich könnte sie theoretisch bei jedem Spieler anders sein, vor allem wenn eine Komponente zB animiert oder physikalisch ist). Ich weiß nicht, ob das in deinem Fall vll schon weiterhilft? :thinking:


    Dabei ist mir aufgefallen das ein Timer nicht das Optimale ist

    Warum? Für wiederholende Aufgaben ist ein Timer eigentlich die geeignete Lösung. Ansonsten kannst du sonst auch das UpdateEvent abgreifen, welches jeden Tick aufgerufen wird. Für komplexe Rechenaufgaben o.ä. wäre sonst auch ein klassischer Thread denkbar.


    Allerdings bräuchte man schon eien "kontinuirlichen Event" um z.B. die entfernung zum Spieler zu ermitteln, der müsste aber nicht auf jedem Tick hängen, vieleicht nur bei Spieler Bewegung, Change World, Load/Spawn, MoveToFinish :)

    Das Problem ist leider die Entkoppelung von Client und Server... da die API niemals clientseitig ausgeführt wird, sind Millisekunden-genaue Aufrufe leider nicht möglich (allein der Ping zw. Client und Server ist der begrenzende Faktor). In vielen Fällen aber ist ein Timer (mit einem Interval von 0) oder das o.g. UpdateEvent aber normalerweise ausreichend.


    Wenn du schon ein wenig zu NPC's und API sagen könntest :love: wehre das Super.

    Leider noch nicht :( Bisher ist da noch nicht viel in dem Bereich passiert, da wir momentan noch zu sehr mit anderen Features beschäftigt sind... sobald die Java Version endlich durch die neue Version ersetzt wurde haben wir hoffentlich mehr Luft dafür ;)


    Hier habe ich einfach mal ein Shader gebaut der die Basistexture Abdunkelt und als Emissiv raus gibt :thinking: das macht es erstmal
    Ist das der Weg den du auch genommen hast?

    Öhm... ist die Frage an mich gerichtet gewesen? :saint:


    Wenn du für die UI noch die Liste und Dropdown freigeben könntest wehre das Wunderbar <3

    Hehe, "freigeben" klingt ein wenig so, als müssten wir nur einen Haken setzen, damit die Dinge verfügbar werden :D Ein Dropdown Element ist in unserer UI leider generell nicht vorhanden bisher, stattdessen verwenden wir was anderes (siehe zB die Auswahlelemente für Dinge wie Auflösung etc. im Settings-Menü). Das wollen wir aber auch noch in der API abbilden ;)


    Es gibt zwar von UI Toolkit derartige Elemente, die haben wir aber nie verwendet (und auch deren Style nie angepasst), da diese vor nicht all zu langer Zeit leider nur im Editor verfügbar waren und nicht zur Runtime :/ Wir könnten das aber trotzdem in Zukunft integrieren und in der API exposen bei Bedarf.


    Eine List-View können wir allerdings leider nicht anbieten (da diese virtualisiert ist und das nicht über die API abgebildet werden kann), aber eine Scroll-View ist geplant (damit kann dasselbe erzielt werden) ^^


    Oder für die Nutzung von USS & UXML, noch einen kleinen Tip gibst, wie mann das geladen bekommt wenn beide StyleSheetAsset vorhanden sind :D

    UXMLs kannst du leider noch nicht laden, sondern nur USS Dateien (als StyleSheetAsset) ;) Die können einem UI Element dann via addStyleSheet() zugewiesen werden. Es können darin ja Klassen definiert werden, diese können dann via addToClassList() zugewiesen werden.


    red51, noch ein kleiner Fehlerbericht:

    Oh, danke für den Hinweis, das wird mit dem nächsten Update behoben :saint:


    Könnte eventuell bei dem ColorPicker noch die Intesity hinzugefügt werden, vieleicht mit einem weiteren Schalter HDR ^^

    Wie meinst du das mit der Intensity genau? :monocle:


    Mit HDR meinst du vmtl. eine Möglichkeit, RGB oder HSV Farbraum vorzugeben, oder?

    Sorry für die späte Antwort, aber wir können mit dem nächsten Update zumindest Attribute für die Klassen "ObjectElement", "ConstructionElement" und "Plant" hinzufügen ;) Da ein Sign i.d.R. auch ein ObjectElement ist bzw. dem zugehört (siehe Sign.getRelatedObject()), könntest du darüber Attribute speichern & auslesen ^^

    Animated GIFs are still planned, but we decided to not add them with the recent update because they consume a lot of memory... each frame of a gif is basically a separate image (in VRAM it's a lot larger than the original file size btw). In singleplayer, this usually isn't a huge issue at all, but in multiplayer, this could result in a lot of trouble... it's probably better if we release animated GIFs as a separate update ;)

    Sorry for my late response! In the new version, the setting is called Disable Hunger / Thirst (Survival only) in the Miscellaneous settings. If you turn that On, hunger and thirst will be disabled.


    So if you want hunger and thirst to be active, turn it to Off ;) It's not affected by peaceful mode, but these settings only work in survival mode (in creative mode, you never have hunger or thirst). Also please keep in mind that this only works in singleplayer - in multiplayer, this setting is determined by the server admin.

    Installation indeed works like in the Java version ;) Which plugins did you try to install? Is it in multiplayer or singleplayer?


    If a plugin cannot be loaded, the log file typically contains more information about what went wrong. You can find the "Player.log" file in the "Logs" folder in the "_New Version" subfolder (in the game directory), maybe upload it here :)

    In the Java-version I've always use this feature with pleasure, now in the unity-version only very, very rarely, which is a pity, but the system has become user unfriendly

    Could you elaborate on that? The Java version used a fixed gap size, there was no way to change the precision for that. We could set a hard coded value for the gap size precision in the new version as well, but I'm not sure if this really improves the situation :thinking:

    Also wir werden zumindest im nächsten Update einen Wert loadorder einbauen, was optional in die plugin.yml eingetragen werden kann. Wenn nicht angegeben, ist der Wert automatisch auf 0 gesetzt (und Plugins mit identischer loadorder wenn wie gewohnt alphabetisch geladen). Beim Spiel- bzw. Serverstart werden die Plugins sonst abhängig von ihrer loadorder geladen, d.h. eine niedrige loadorder führt dazu, dass das Plugin früher geladen wird. Wenn ein Plugin also hauptsächlich eher als Library fungiert, kann diesem Plugin direkt ein sehr kleiner Wert verpasst werden (zB -1000000). Einem Plugin, welches viele Abhängigkeiten zu anderen Plugins hat, könnte man vorsorglich einen hohen Wert geben.


    In den meisten Fällen sollte das eigentlich schon helfen ^^ Die loadorder wird zwar vom Pluginersteller gesetzt (da ja in der plugin.yml festgelegt), aber wenn dort im Vorfeld sinnvolle Werte gewählt werden (wie zB oben erwähnt), sollte das i.d.R. passen. Nur, wenn ein Plugin wirklich extrem viele Abhängigkeiten zu anderen Plugins hat, und alle Plugins von unterschiedlichen Entwicklern stammen, könnte das vmtl. an die Grenzen stoßen.

    Unfortunately the logs indeed contain no information about the crash, as mentioned by Juggernaut :/ This indicates that some native crash occurs apparently, unfortunately this makes it difficult to find out what's really causing it...


    It's possible that this is caused by a plugin... unfortunately JNI (Javas interface for communication between Java and native side) just crashes if an error occurs inside a JNI call, which makes it crash-prone if a plugin does something unexpected. This can still be considered a bug in the game, because ideally the game would catch all exceptions and have enough sanity checks to make sure a proper exception is raised instead of a hard crash, but it's difficult to track these errors...


    To find out what's going on, you could try to launch the server from command line and redirect the output to a separate log file. It will contain more information than the regular log. To do that, you could just use this command to start the server: RisingWorldServer.exe 1> serverlog.log 2>&1

    Unfortunately you no longer see any output in the command prompt and you can no longer enter input commands directly, but all log output will be written to a file called "serverlog.log" in the server directory (please bear in mind that this log file is overwritten everytime you start the server). If the server crashes again then, please upload the serverlog.log file here (or alternatively send it via PM to me) :)

    Wenn das Forum meint, das eingegebene Kennwort sei falsch, dann ist da scheinbar irgendeine Abweichung zwischen dem eingegebenen Kennwort und dem ursprünglich gespeicherten Kennwort für den Account... ich kann Passwörter leider nicht einsehen, das wird komplett von der Forensoftware (WBB) gehandhabt, daher kann ich nichts dazu sagen... habe bisher aber noch nicht beobachten können, dass Passwörter plötzlich ungültig werden o.ä.


    Du kannst aber im Anmeldebildschirm sonst einfach "Kennwort vergessen" auswählen, um ein neues Kennwort zu generieren (da kannst du dann eigentlich dasselbe Kennwort erneut angeben).

    Ich stelle mir eine onLoad()-Event, da wo man das Plugin bereit für andere vorbereiten kann oder in der plugin.yml ein Bereich, die sagt, welches Plugin muss als erstes geladen werden.

    Es gibt tatsächlich bereits eine onLoad() Methode: Diese wird exakt dann aufgerufen, wenn das Plugin geladen wird (zu dem Zeitpunkt sind andere Plugins noch nicht unbedingt geladen). Die onEnable() Methode hingegen wird erst aufgerufen, wenn alle Plugins geladen sind ^^


    Das Problem bei den Abhängigkeiten ist aber, dass sobald eine Klassenvariable oder eine statische Variable direkt ein Objekt erzeugt (diese also nicht erst in onEnable() erzeugt werden), ein Fehler geworfen wird wenn das entsprechende Plugin noch nicht geladen ist. Das lässt sich leider nicht verhindern (schließlich weiß Java an der Stelle ja noch nichts von diesem Objekt, kann also seinen Konstruktor oder eine seiner Methoden nicht aufrufen). Man kann das Problem aber umgehen, indem keine fremden Objekte erstellt oder Methoden aufgerufen werden, bevor onEnable() aufgerufen wurde.


    Wir könnten ggf. eine Option hinzufügen, mit welcher man die Reihenfolge festlegen kann, in der ein Plugin geladen wird. Dem Plugin also einen Wert geben (und alle Plugins werden anhand dieses Wertes sortiert, d.h. ein kleiner bzw. negativer Wert führt dazu, dass ein Plugin früher geladen wird, ein höherer Wert dazu, dass es später geladen wird). So könnte man den Plugins, die von anderen Plugins benutzt werden, einen möglichst kleinen Wert geben (zB -1000), und dem Hauptplugin einen höheren Wert (Standard 0 oder eine höhere Zahl) :thinking:

    Bei moveToLocalPosition würde ich gerne noch die Höhe wehren dessen überarbeiten
    Wenn ich mir etwas hinterher "laufen" lasse und es durch entfernung getriggerte neue Positionen gibt (der zurüch kelegte weg ist mal Kürzer oder Länger und kann auch mal mehr Steigung haben), fürt der Weg manschmal durch ein hügel oder über ein Tal, und in diesen Momenten würde ich gerne ein getTerrainsHeight einbauen ^^
    Entwerder da eine kleine Calback/Run oder mit der möglichkeit moveToLocalPosition(Vector3f position, float speed, boolean includeWater) wo der Scann schon mit drinn ist
    Mir wehre ein calback lieber, feinere Kontrolle.

    Das ist leider etwas schwierig... momentan wird die Bewegung bei moveTo vom Client und Server separat berechnet (d.h. der Client bekommt die Anweisung, das Objekt "smooth" an die Zielposition zu bewegen, und der Server berechnet die derzeitige Position eigenständig). Das ist deshalb so gemacht, damit der Traffic zwischen Client und Server so gering bleibt wie möglich (so wird nur 1 Paket zum Client gesendet, statt jeden Tick die Position zw. Client und Server zu synchronisieren, was selbst bei kurzen Strecken zu hunderten oder gar tausenden Paketen führen würde)...


    Denkbar wäre ggf. aber ein optionales Callback, in welchem die aktuelle Position übergeben wird, die man dann entsprechend ändern könnte... das würde aber natürlich auch zu viel Traffic führen... dazu müssten wir uns mal Gedanken machen :thinking:


    Ich weiß nicht wie weit der Status genau ist, aber zur Info UILabel.setFont will auch noch nicht wirklich

    Ja, das ist leider noch nicht ganz umgesetzt... das wird sich hoffentlich bis zum nächsten Update ändern ^^


    Könnte der ClassLoader vom Spiel, die nicht vorhabdene Klassen überspringen?

    Ich würde das später im Enabel Abschnit selber Prüfen ob das Plugin mit den Klassen Vorhanden ist oder nicht ;)

    Das klappt leider nicht :/ Grundsätzlich ist es erstmal noch kein Problem, wenn eine Klasse nicht gefunden wird (weil zB noch nicht geladen). Wenn diese Klasse aber dann bereits verwendet werden soll (obwohl noch nicht geladen), gibt es entsprechend einen Fehler (was ja auch logisch ist, schließlich kennt Java weder den Konstruktor noch eine der Methoden dieser Klassen).

    Dieses Problem tritt i.d.R. dann auf, wenn Klassenvariablen (oder statische Variablen) direkt ein fremdes Objekt initialisieren. ZB wenn ein fremdes Plugin eine Klasse namens "UnknownObject" hätte, und in deinem Hauptplugin diese Variable vorhanden wäre (public UnknownObject o = new UnknownObject();), dann wird dieses Objekt direkt initialisiert, sobald das Plugin geladen wird (und wirft entsprechend einen Fehler, da er "UnknownObject" ja noch nicht kennt und er nicht weiß, was im Konstruktor von UnknownObject überhaupt passieren soll).

    Was hingegen funktioniert: Die Variable erst in "onEnable()" initialisieren (also die Variable ist nur als public UnknownObject o; deklariert und in onEnable() wird o = new UnknownObject(); ausgeführt).


    ich wünsche mir einPrefab.setAnimatorResetTrigger(String path, String trigger), wie bei Animator.ResetTrigger

    Das können wir mit dem nächsten Update einbauen ;) Auch wenn du zwischenzeitlich eine andere Lösung gefunden hast, ist es trotzdem sinnvoll, möglichst viel von der Unity-API auch in der Plugin-API abzubilden :D