onPlayerGenerateMapTile

  • Hallo @red51,


    nachdem ich jetzt die screenshot Funktion in meine Plugins eingebaut habe (DiscordPlugin / GlobalIntercom) bin ich gerade dabei die neue requestMapTileRaw Funktion für mein Map Plugin zu verwenden und bin noch nicht ganz zufrieden.


    Mein erstes Problem: es fehlt noch das richtige Event um die Funktion zu verwenden. Aktuell habe ich diese prototyp code hier in Verwendung:


    Ist noch nicht ganz korrekt der code aber damit komm ich erstmal weiter.
    Der Vergleich mit dem MD5 funktioniert soweit, nur kam mir der Gedanke das ja die ingame MAP nicht immer direkt aktualisiert wird, also manchmal muss man halt den refresh button drücken.
    Wenn jetzt jemand mit einer alten ingame map kommt hat der natürlich einen anderen MD5 weil die Daten anders sind. Dies verhindert dann aber nicht das die alten Daten die neueren überschreiben. Hier müßte man dann das datum der Datei noch vergleichen können oder besser dieser Vorschlag:


    Ein neues Event "onPlayerGenerateMapTile" das gefeuert wird wenn der client ein map tile rendert bzw. gerendert hat. dort müßten dann die x/y Koordinaten übergeben werden. Diese kann man dann in requestMapTileRaw wieder verwenden um das entsprechende tile anzufragen.
    So könnte man gewährleisten das immer nur neue tiles übertragen werden und keine alten.

  • Oh das wäre cool, dann kann ich vielleicht diese Woche noch eine erste Version meines Plugins veröffentlichen.

  • Dieses Event ist nun mit dem neuesten Release (0.9.5.4) verfügbar ;) Einerseits erhälst du darüber die X und Y Koordinate, andererseits kannst du auch feststellen, ob der Map Tile zum ersten Mal erstellt oder durch den "Refresh"-Button erzwungenermaßen neu erstellt wurde.

  • Funktioniert super, bin gerade mal durch unbekanntes Gebiet und habe in bekanntem Gebiet auf resresh gedrückt. Keine Einschränkungen bzgl. lag oder sowas bemerkt, auch wenn bei refresh gleich mehrere übertragen werden. Eis ist mir noch aufgefallen das auch vorher schon war. im Server-Log steht immer SERVER MAPTILE 0 0 UPLOAD FROM _name_ COMPLETED! also immer 0 0 ;)

  • @red51 nachdem ich bemerkte das von meinen Spielern, wenn sie neues Gebiet erkunden gesprenkelte maps zurück kommen (teile fehlen) habe ich es selbst getestet und es werden nicht alle erstellten map files übertragen.


    Hier der code den ich verwende:


  • Jain lokal sind die tiles ja da, wenn ich z.b. in eine Richtung laufe habe ich den Effekt das 3 tiles lokal erstellt werden aber nur 1 wird übertragen.

  • Ich könnte mir vorstellen, dass der Client möglicherweise sehr lange (oder länger als üblich) braucht, um die Map-Datei auf die Festplatte zu speichern. Das Speichern läuft in einem separaten Thread ab, sodass das Event schon vorher getriggert wird (besonders dann, wenn ein guter Ping zwischen Client und Server besteht). Wenn das Speichern länger dauert als 2x der Ping (Event zum Server senden und Anforderung des Map-Tiles vom Server) kommt eine leere Antwort zurück zum Server (der Client prüft auf Performance-Gründen nur, ob die Map-Tile Datei vorhanden ist).


    Ich werde das mit dem nächsten Hotfix ändern ;)


    Wenn du dieses Phänomen bei dir reproduzieren kannst, könntest du ggf. im Vorfeld prüfen, ob es funktioniert, wenn du die "requestMapTileRaw()" Funktion verzögert aufrufst. Dafür gibt es in der Plugin Klasse die Funktion "executeDelayed()", zB:

    Java
    //4 Sekunden Verzögerung
    executeDelayed(4f, () -> {
    player.requestMapTileRaw(...);
    });


    Wenn die Map-Tiles dann korrekt übertragen werden, dürfte o.g. Vermutung tatsächlich zutreffen (ändere das mit dem executeDelayed() aber am besten danach wieder, da das sonst nur unnötigen Overhead mitbringt^^)

  • Ok werde ich mal heute Abend prüfen falls ich's zeitlich schaffe, danke! Hatte auch schon überlegt ob ich die requests in eine art queue packen soll um die pro-player sequentiell abzurufen damit nicht mehrere tiles gleichzeitig zu lag führen (ist bisher nie passiert aber kann ja immer mal jemand ne schlechte Leitung haben)

Participate now!

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