[Plugin] Flugverbotszone / Noflyarea

  • :!: Dieses Plugin wird in Zukunft nicht mehr Unterstützt und Weiterentwickelt, da es nun ein Teil von WorldGard ist! :!:


    Zu WorldGard!


    Hallo alle Zusammen,


    unser Plugin ist endlich soweit, dass der erste Teil veröffentlicht werden kann. :thumbsup:


    Was macht Noflyarea?


    Mit Noflyarea kann man Bereiche auf dem Server festlegen, wo Spieler fliegen oder nicht fliegen dürfen.
    Auch den Admins kann man das Fliegen in bestimmten Area verbieten.


    Durch die Funktionen "AdminFly", "OwenerFly" oder "UserFly" kann man sogar, das fliegen in bestimmten
    erlauben (Vorraussetzung: Es ist auf dem Server allgemein erlaubt!) Jede einzelne Area ist durch
    die Funktionen flexibel einstellbar. :thumbsup:



    Die Config


    GUIKey=KEY_B - Damit stellt ihr ein, mit welcher Taste ihr das Hauptgui öffnen wollt (GUI NOCH NICHT AKTIV)
    PlayerOpenGUI=false - Hier wird eingestellt, ob Player die GUIs verwenden dürfen (GUIs brauchen keine Admin-Rechte!)
    Language=en - ZURZEIT NICHT AKTIV!
    ConfigVersion=1.0.0 - BITTE HIER NICHTS ÄNDERN! Brauchen wir für kommende Updates!
    UserFly=false - Schalte diese Funktion ein, um in den Areas zu bestimmen, ob User fliegen dürfen
    AdminFly=true - Schalte diese Funktion aus, damit Admins, egal in welcher Area, nicht fliegen drüfen!
    PlayerChangeOwner=false - Schalte diese Funktion ein, damit User ohne Admin-Rechte die Owners ändern dürfen
    OwnerFly=false - Schalte diese Funktion ein, um in den Areas zu bestimmen, ob Owners fliegen dürfen
    PlayerEditArea=false - Erlaube/Verbiete Spieler Noflyarea zu verwalten (Hinzufügen, Eigene Löschen usw.)


    Die Kommandos


    <> = Pflichtfeld; * = Du musst in einer Area sein


    Für Admins oder wenn in der Config "PlayerEditArea" auf "true" steht, für alle:
    /noflyarea select - Bereich für die Noflyarea auswählen
    /noflyarea cancel - Auswahl der Noflyarea abbrechen
    /noflyarea crate - Eine Noflyarea erstellen, nachdem sie ausgewählt worden ist
    /noflyarea delete <this*/ID/Name> - Diese, in der ihr seid / ID der Area / Name der Area löschen!
    /noflyarea setowner* <Player> - Owner der Area ändern, in der ihr seid
    /noflyarea setprio <ID/Name> <PRIO> - Ändert die Priorität einer Area (Wird im FILM erklärt)
    /noflyarea adminfly* <true/false> - Erlaubt/Verbietet Admin das fliegen in der Area
    /noflyarea ownerfly* <true/false> - Erlaubt/Verbietet Owner das fliegen in der Area
    /noflyarea userfly* <true/false> - Erlaubt/Verbietet User das fliegen in der Area


    Immer für Alle:
    /noflyarea help - Zeigt diese Hilfe an
    /noflyarea list - Listet alle Noflyareas auf
    /noflyarea show <this*/all/ID/Name> - Zeigt diese Area, in der ihr seid / Alle / ID der Area / Name der Area
    /noflyarea hide <this*/all/ID/Name> - Versteckt diese Area, in der ihr seid / Alle / ID der Area / Name der Area


    TIPP: Für die, die nicht so viel schreiben wollen: /noflyarea kann man auch /nfa abkürzen! :D:whistling:


    Installation


    1. Ladet euch die Noflyarea.zip herunter
    2. Geht auf euren Server in den "plugins"-Ordner (Wenn nicht vorhanden, dann einen erstellen)
    3. Erstellt dort einen Ordner mit dem Namen "Noflyarea"
    4. Fügt dort die "Noflyarea.jar" ein
    5. Downloadet zusätzlich das Plugin "rwGUI" hier: GUI back-end plug-in: work in progress, testers welcome.
    6. Installiert "rwGUI"
    7. Startet den Server neu
    8. Spielen


    Es werden in den nächsten Wochen noch weitere Updates kommen. Die Datenbank versuchen wir aber nicht zu ändern, damit nicht alle Areas neu gemacht werden müssen.
    Wir versuchen alle Updates so zu gestellten, dass keine Einstellungen verloren gegangen werden. Falls es doch etwas Gößers gibt, sagen wir bescheid.


    An dieser Stelle möchte ich mich bei @noci für seine große Hilfe und für die gute Zusammenarbeit bedanken! :thumbup:


    Ein Ausführliches Tutorial, über dieses Plugin, wird in den nächsten Wochen folgen (FILM)! ;)


    Über ein Feedback würden wir uns freuen. :thumbup:


    ----------------------------------------------------------------------------------------------------------
    Bugfix Version 1.0.1 - 05.10.2017


    Ein neues Update ist herausgekommen.


    - [BEHOBEN] adminfly und userfly zeigen nun in der Meldung die richtigen Werte
    - [BEHOBEN] /noflyarea setprio wird nun wieder in "Help" angezeigt und kann auch nun ausgeführt werden


    ----------------------------------------------------------------------------------------------------------
    Bugfix 09.10.2017


    delete => finde Area reparirt und, GUI bestätigung hinzugefügt.
    GUI Sprach Variable DE
    Sprachdateien angepasst
    setowner prüft jetzt admin & PlayerChangeOwner nicht mehr Admin & PlayerEditArea
    help komannd, ausgabe mit PlayerChangeOwner & PlayerEditArea überarbeitet
    weitere Sprache Ausgaben überarbeitet
    Sprache soweit Fertig. Alles was bislabn dan den Spieler get, ist über locale einstellbar.
    /nfa list ausgabe begonne zu überarbeiten
    mit GUI begonnen, unterfenster sind Aktiv aber ohne funktion.


    -----------------------------------------------------------------------------------------------------------
    Bugfix Version 1.0.2 - 10.10.2017
    BugFix: Area betreten, Text wieder Richtig (Fehler vom 09.10.2017)
    KOMMAND nfa list: Update
    - FlyRechte werden mit Farbe unterstützt, durchfliegbare Areas werden Grün dargestellt, blokierte Rot. Ausname spalte Owner
    - bei eigener Area wird der Owner in grün angezeigt
    - *die einzelnen spalten werden grundsetzlich angezeigt wenn:
    - Config.AdminFly = true, Spalte AdminFly einblenden
    - Config.OwnerFly = true, Spalte OwnerFly einblenden
    - Config.UserFly = true, Spalte UserFly einblenden
    - Config.PlayerChangeOwner = true, Spalte Owner einblenden
    - Liste für USER: ID NAME
    - Liste für OWNER: ID OWNER NAME
    - Liste für Config.PlayerEditArea&ADMIN: ID PRIO OWNER ADMFLY* OWNFLY* UERFLY* NAME

  • Man markiert einen Bereich und gibt ihm einen Namen und in diesem Bereich wird der Flugmodus automatisch auf "false" gestellt.
    Später ist es auch möglich einzustellen, ob Admins trotzdem fliegen dürfen.

    Du kannst es leichter machen, statt dem Flugmodus auf "false" zu stellen mach es so dass wenn man in ein bereich geht (PlayerEnterAreaEvent) und er in flugmodus ist dann das Event ist storniert und der spieler bekommt eine nachricht. (d.h. der spieler muss selbst den Flugmodus ausstellen um zu eintreten)

  • @Minotorious Kommt deine Idee nicht praktisch mit einem Blockieren des Fliegens gleich ? Ich denke es wäre besser, wenn das Fliegen deaktiviert wird bzw. das der Spieler sowieso ein Nachricht auf dem Bildschirm bekommt, ab hier darf nicht mehr geflogen werden.

  • was wäre der Vorteil wenn man den Flug deaktiviert (eine riskante Landung auf den Boden implementiert) ?
    selber landen fände ich besser und vor allem sicherer für alle Spieler mit älteren PCs oder langsamen Internetverbindungen

  • ich finde es toll, dass so etwas nun bald auch kommt. Es ist wohl richtig was @dagoline schreibt, das Plug-in sollte dafür sorgen das die Spieler nicht plötzlich in die Tiefe fallen und sich die Knochen brechen.
    Aber wenn ich an ein Labyrinth denke um nur eins zu sagen, macht so ein Plug-in viel Sinn.

  • ich finde es toll, dass so etwas nun bald auch kommt. Es ist wohl richtig was @dagoline schreibt, das Plug-in sollte dafür sorgen das die Spieler nicht plötzlich in die Tiefe fallen und sich die Knochen brechen.
    Aber wenn ich an ein Labyrinth denke um nur eins zu sagen, macht so ein Plug-in viel Sinn.

    genau deswegen würde ich mir so ein plugin wünschen, ich bastle schon eine weile an einem dungeon mit labyrinth, hüpfpassagen, rätselportalen usw. nur im flugmodus lass ich da sicher niemanden rein :D

  • das sollte man so halten wie es in vielen anderen Spielen gemacht wird.
    a) entweder man definiert einen festgelegten Punkt (Vector3f im Falle von RW)
    oder
    b) man bedient sich der Methode "getDefaultSpawnPosition()" vom Interface Server (getServer())


    beides kann man dann mit setPosition(..) des Players setzen, somit ist ausgeschlossen das der Spieler unweigerlich
    zu Boden fällt.


    @red51 hat aber für uns soviel Möglichkeiten geschaffen, das da immer eine Lösung drinnen ist!


    CU Black1004 (Jens)

    Programmierer machen nie Fehler! Sie bauen nur neue Features ein....

  • Danke für euer Feedback und eueren Tipps. Ich werde sie berücksichtigen.


    Trotzdem wäre es schön, wenn mann in der API eine Methode hätte, wo mann sagen kann, das der Spieler auf dem Boden teleportiert wird.


    Das mit dem Selbstlanden finde ich auch eine Gute Idee, solange es mit dem Boden-Teleportiren nicht geht.


    EDIT: Das mit dem Selbstlanden habe ich hinzugefügt.
    Und übrigens, keine Sorge, dass die, wenn sie in der Area sind, wieder fliegen können. Das werde ich mit einem Trick verhindern.


    @red51, kannst du bitte ein Event hinzufügen, das ausgelöst wird, wenn etwas innerhalb einer Area geschieh (z.B. Es wird geflogen, oder eine Block wird gesetzt usw.! Achja und nicht zu vergessen, die Methode z.B. "getGround()" um den Boden zu bekommen.
    Mann könnte dann z.B. damit berechnen, wie hoch man ist oder wie tief. Oder mann kann sich dorthin teleportieren!

  • Hallo Patrick,


    in der derzeitigen Fassung der PluginApi,gibt es schon Methoden,mit dem man deine Problematik
    schon lösen kann.


    hierbei zähle ich die Events:

    An meinem RPGSystem, bei demich nun endlich wieder Zeit habe zu arbeiten, gibt es ähnliche Sachen,so gibt es Gebiete die nicht betreten oder durchflogen werden dürfen.
    hierbei habe ich eigens ein Protectionsystem entwickelt, welches zumindestens Datenbanktechnich auf das Areaprotection aufsetzt. Somit müssen nicht alle
    bereits auf unserem Server gesicherten Gebiete(welche bei uns mittlerweile unzählbar sind) von Hand neu gemacht werden.
    In der neuen Datenbank gibt es nun mehr 2 neue Felder ("canEnter" und "canFly").
    Sobald nun ein Spieler in einer dieser Area kommt (Auftreten des Events PlayerEnterAreaEvent) prüfe ich nun nach ob dies eine Gesicherte Area ist und
    frage dann die entsprechenden Werte ab (true oder false). Bis jetzt ist es so, das der Spieler im Falle des fliegens genau 3 Sekunden Zeit hat (Timer) das Area zu verlassen
    anderen Falls (nach ablauf des Timers) wird er an den Spawnpunkt teleportiert.
    Was Du auch machen kannst wenn das Area eine Flugverbotszone ist, dir den Event PlayerChangeBlockPosition zunutze zu machen, somit kannst Du dann wenn die
    Function "getNewBlockPosition()" des Events sich innerhalb der Area befindet, so setzt du innerhalb dieses Events setCanceled(true). Somit kommt der Spieler erst gar nicht mehr
    in die Area rein.... Hat halt nur so einen unschönen nebeneffekt wenn man die Taste "W" nicht loslässt.. man denkt das das Spiel "zittert" lol.


    Das mit der getGroud() MEthode ist ne gute idee, zumal hier der Vector3f völlig ausreichen würde. Dies selbst zu realisiern ist meiner bescheidenen Meinung nach
    gar nicht oder gar sehr schwierig zu realisieren,da ich entweder dieMöglichkeit haben müsste den Collider des TerrainMeshes abzufragen, bzw. den Block des Chunks in dem sich
    "der Grund" befindet.




    Gruß Jens (Blacky1004)

    Programmierer machen nie Fehler! Sie bauen nur neue Features ein....

  • ... Somit kommt der Spieler erst gar nicht mehr
    in die Area rein.... Hat halt nur so einen unschönen nebeneffekt wenn man die Taste "W" nicht loslässt.. man denkt das das Spiel "zittert" lol.


    ...

    um das Zittern zuverhindern habe ich zwei, drei möglichkeiten gefunden.
    1. event.getPlayer().disableClientsideKeys(KeyInput.KEY_W, KeyInput.KEY_A, KeyInput.KEY_S, KeyInput.KEY_D);
    2. event.getPlayer().setMouseCursorVisible(true);
    3. rwGUI Dialog aufrufen.


    dann gibt es bei mir ne Info, der PlayerEnterAreaEvent wird Disabeld (setzt den Spieler wieder vor den Area Eintrit).

  • Also bei mir läuft es gerade so:
    1. Mann erstellt markiert ein Gebiet mit dem AreaSelectionTool und benennt es.
    2. Die erstellte Area wird in eine Datenbank gespeichert. (Nebenbei wird auch gespeichert, wer diese Area erstellt hat = Eigentümer)
    3. Ein Spieler kommt zur Area im Flugmodus. Er wird an der Granze gestopp.
    if (player.isFlying()){
    event.setCahncelled(true)
    ... Und er bekommt eine Mittelung!
    4. Der Spieler muss also jetzt selbst landen, um das Gebiet zu betreten (Verhindern des Absturzes)
    5. Sobald der Flaymod aus ist, kann er das Gebiet betreten.
    (3. - 5. Gilt nicht für Admins oder Eigentümer! (Einstellbar))
    6. Sobald er die Grenze passiert (PlayerEnterAreaEvent) bekommt der ein Attribut (player.setAttribute("inArea", "true")
    Sollange dieses Attribut auf "true" steht, kann er nicht fliegen, weil ein PlayerChangePositionEvent prüft, ob er fliegt.
    7. Player verlässt Area (PlayerLeaveAreaEvent) und sein Attribute wird wieder auf "false" gestellt. Das heißt, er darf wieder fliegen!

  • Hallo erstmal Daumen hoch, ich fand die Idee von Anfang an toll und um so mehr das ihr sie umgesetzt habt.
    Wir werden es in den kommenden Tagen testen, mal gespannt wie es funktioniert. :thumbsup::thumbsup::thumbsup:

  • Wir haben eben eine halbe Stunde mit zwei Personen auf unserem Testserver das Plugin versucht zu testen
    doch leider hatten wir einen crash, wobei ich jetzt nicht sagen kann ob es an diesem Plugin oder evtl an einem anreren lag obwohl unser Testserver
    eigendlich schon lange kein crash mehr hatte, evtl verträgt sich es mit einem anderen Plugin nicht.


    Siehe HIER


    Sonst macht das Plugin erstmal einen tollen eindruck


    Area Selectieren :thumbsup:
    Area anlegen :thumbsup:
    Area Spieler können nicht mehr durch fliegen :thumbsup:
    Area löschen :thumbsup:
    Area ansehen und unsichtbar machen :thumbsup:


    Bei dem Owner sind wir nicht weiter gekommen, dort könnte der crash gekommen sein, ich denke mal das dies dafür gedacht ist das es eine Area von einem Spieler ist und
    bei bei /noflyarea owner NAME einen Spieler einsetzen kann dem das Gebiet gehört und dieser dann außer Admin der Einzige ist, der fliegen kann.


    Auch bei /noflyarea setprio <ID/Name> <PRIO> ist nichts passiert, evtl auch durch falsche Eingabe.



    Ich hoffe diese Informationen helfen erstmal weiter, finde das Plug-In soweit erstmal toll.

  • Oke, ich hab mir mal den Error_log angesehen, bin darin aber noch nicht geübt, das einziege was ich jetzt unserem Plugin zu ordnen kann sind folgende Zeile.

    Code
    Java frames: (J=compiled Java code, j=interpreted, Vv=VM code)
    ...
    j de.pbplugins.Noflyarea.showArea(Lnet/risingworld/api/objects/Player;Lnet/risingworld/api/utils/Area;ZZ)V+133
    j de.pbplugins.Noflyarea.showArea(Lnet/risingworld/api/objects/Player;Lnet/risingworld/api/utils/Area;Z)V+5
    j de.pbplugins.Noflyarea.showArea(Lnet/risingworld/api/objects/Player;Lnet/risingworld/api/utils/Area;)V+4
    j de.pbplugins.NoflyareaListenerCommand.onPlayerCommand(Lnet/risingworld/api/events/player/PlayerCommandEvent;)V+3020

    Die Funktion showArea wird jedes mal bei spornen, /nfa show [all/id/name] und /nfa hide [all/id/name] aufgerufen. Ich greife dort 3mal hintereinander auf die DB zu. (Weiter oben im error_log hab ich was mit DB gefunden) ?sind die DB zugriffe limitiert? eigendlich ja nicht.


    Brauche da mal Hilfe die error_log richtig zu lesen.


    Auch bei /noflyarea setprio <ID/Name> <PRIO> ist nichts passiert, evtl auch durch falsche Eingabe.

    in der version war das noch abgestellt. Wir hatten probleme mit der gemeinsamen Arbeit in NetBeans.
    Ich habe die "resources" wieder aus der JAR genommen, damit wird der Ordner "resources" überflüssig. Die DB kann weiter genutzt werden.


    setprio ist dafür da um Area in Area zu Managen. Kleinste Prio wird gefunden.


    Äußere Area Prio=10
    Turm Area Prio=9
    Küchen Area Prio=8

    /noflyarea owner NAME

    Funktioniert erstmal nur in einer Area "/nfa setowner [NAME]"


    Testet Bitte nochmal mit der Datei.
    [Bearbeitet] Siehe Update Oben

    Edited 3 times, last by noci: Rechtschreibung ().

Participate now!

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