[SHOEBILL] Textdrawsystem

    Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

    • [SHOEBILL] Textdrawsystem


      Meine Präsentation des System ist schon etwas länger her (SAMP GUI Library).

      Ich habe mich dazu entschieden, dieses System zu veröffentlichen, da es immer wieder Personen gibt, die ein eigenes GUI nutzen wollen, aber dazu keine Erweiterungen wie Clientside Plugins bzw. diese nicht selbst schreiben wollen.
      Zudem ist es für mich nicht mehr sinnvoll, da es Textdraw Limits gibt und ich ein GUI System erschaffen will, das eine gute Performance und neue Grafiken hat. Dazu eigne ich mir Modifizieren und C++ an, damit ich selbst dieses System als GUI als clientside & serverside Plugin nutzen kann.
      Dieses Plugin läuft serverside und ist für Shoebill in Java geschrieben.

      In der Readme auf GitHUB ist ein Beispielcode. Wie ihr in den Videos seht, ist vieles möglich und man kann es auch einfach erweitern (da das Grundgerüst komplett fertig gebaut ist).
      Es gibt Components ("Komponenten") und Attachments. Die Komponente kann man einfach zu jeder Seite hinzufügen. Die Attachments kann man an die Komponenten anheften. Das ist Beispielsweise praktisch, wenn man eine Bar ("Balken") hat und dort einen Text als Attachment anheftet.
      So kann man einfach viele Seiten dynamisch erstellen, dynamisch Komponenten und Attachments hinzufügen oder entfernen, Daten über Text/String Identifizierung setzen und entgegennehmen.

      Weitere Infos kommen morgen, wollte das erstmal hinter mich bringen mit dem Release, bevor ich das vergesse ^^


      • Programmiersprache: Java (für das Shoebill Plugin)
      • Programmierdauer: Einige Wochen, je nachdem, wie man Lust und Zeit hatte
      • Bugs vorhanden: Ja, kenne bisher nur 2, aber bin mir nicht sicher, ob die jemand finden wird ^^
      • Probleme: Man sollte das Plugin bis jetzt nur mit anderen Shoebill Plugins oder Gamemodes nutzen, da bis Shoebill 2.0 draußen ist, es keine Detection gibt, wann von PAWN aus TextDraws erstellen wurden -> Man kann Probleme mit den Limits bekommen und das Plugin kann abschmieren
      • Bedienung: Sehr einfach, jedenfalls kann man sich mit IntelliJ IDEA sehr schön daran ausprobieren





      Fragen / Probleme? Immer her damit ^^

      Beispielcode wie man den beim Colorpicker den rechten Rand mit den Farbboxen einfach erstellen konnte + handling dieser:

      Quellcode

      1. Color[] color = { .... }; // Farben hinzufügen
      2. for (int y = 0; y < color.length; y++) {
      3. Button button = Button.create(this, startX, startY + paddingY * y, width, "_", "Bar_Button_" + y);
      4. Color tmp = color[y];
      5. button.getButtonTextdraw().setBoxColor(tmp);
      6. button.setClickHandler(handler -> {
      7. clearColorContent();
      8. createColorContent(tmp);
      9. showColorContent();
      10. });
      11. button.toggleActivationEffect(false);
      12. this.addButton(button);
      13. }
      Alles anzeigen


      Beispielcode für einen Dialog:

      Example how to create a panel with a list, a panelDialog and a MessageBox:

      Quellcode

      1. Panel panel = TextdrawSystem.createPanel(player);
      2. TextdrawSystem.setPanel(player, panel);
      3. panel.setDialogLayout(DialogLayout.FORM); //standard layout
      4. panel.getLeftButton().setText(localizedStringSet.get(player, "Dialogs.Back")); //set Text of left button to the localizedStringSet of "Dialogs.Back". That means that we use a language plugin to support multiple languages and translate the string of an .yml file to the language of the player
      5. panel.getRightButton().setText(localizedStringSet.get(player, "Dialogs.Next"));
      6. //example panelDialog
      7. PanelDialog panelDialog = TextdrawSystem.createPanelDialog(player);
      8. // add a list to the dialog
      9. List list = panelDialog.addList("optionList");
      10. //create a listItem
      11. //create group (code example)
      12. list.addListItem("createGroup")
      13. .setClickHandler(handler -> createGroupDialog());
      14. //delete group (ce)
      15. list.addListItem("deleteGroup")
      16. .setClickHandler(handler -> deleteGroupDialog());
      17. //edit group (ce)
      18. list.addListItem("EditGroup")
      19. .setClickHandler(handler -> editGroupDialog());
      20. //disable the okButton (leftButton)
      21. panelDialog.toggleOkButton(false);
      22. //set caption of dialog
      23. panelDialog.setCaption("Caption");
      24. //display the dialog
      25. panelDialog.show();
      26. //MsgBox
      27. MsgBox msgBox = new MsgBox(player, "Caption", "Message", groupName));
      28. msgBox.setCancelButton("No");
      29. msgBox.setOkButton("Yes");
      30. msgBox.setClickOkHandler(msgBoxHandler -> createGroupDialog());
      31. msgBox.setClickCancelHandler(msgBoxHandler -> createOptions());
      32. msgBox.show(); //also possible to use the panel with content !
      Alles anzeigen



      Download:


      Bitte lasst doch ein Kommentar da! :)

      Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von Alf21 ()

    • Danke euch allen! :)

      Ich denke, dass es einige abschreckt, dass es auf Java statt auf PAWN programmiert ist. Aber es ist im normalen Gebrauch eher besser mit der Performance. Zudem habt ihr so ein System und ein Beispiel, wie man dynamisch GUIs programmiert. Erweiterunfen und Ideen wie 'Switcher' habe ich bereits eingefügt. Falls ich Zeit habe, werde ich alles noch ergänzen. Aber momentan gibt es wegen fehlenden Anfragen und fehlender Interesse keine Motivation, dies zu implementieren.

      Falls ihr einen Guide oder hilfe braucht, kann ich das gerne anfertigen. Ansonsten läuft es problemlos und sehr gut von der Performance her. Einfache Bedienung. Falls es jedoch Probleme gibt, werde ich oder @123marvin123 (der fortführende Entwickler des Plugins sicher helfen.

      Ich bin auch für PNs offen oder Posts an die Pinwand ;)

      @iPower: Indem ich in Java Klassen erstellt habe, welche man simple erweitern kann und modifizieren kann. Falls du dich in Java mit ArrayLists auskennst, diese nehmen dynamisch Objekte eine bestimmten Klasse als Element entgegen. Das ist auch mit den ComponentData möglich, um die Daten eines Komponenten zu bekommen. Wenn ihr Wünsche habt, könnt ihr diese hier auch gerne einfügen. Aber für mich macht Java einfach am meisten Sinn, da es objektorientiert und eher die Zukunft ist :)

    • LoRiX schrieb:

      Find das aufjedenfall nützlich für Anfänger!
      Ich bezweifel das es für Anfänger ist.


      Ansonsten ganze schöne Sachen, vor allem das man es ohne Dialogen nutzen kann wie bei dem Colorpicker

      dennismitzwein schrieb:

      Die meisten Beiträge
      Der eifrigste Tastaturklimperer, derjenige, welcher mehr Muskeln in den Fingern besitzt als die meisten von euch im Bizeps haben. Mit ganzen 1524 Beiträgen ist @Rocky Balboa der User mit den meisten geschriebenen Beiträgen im gesamten Jahr 2017
    • Hatte gestern freie Zeit gefunden und mich dazu entschlossen, ein kleines Update (TextdrawSystem:0.4-SNAPSHOT) rauszuhauen.
      Hinzugefügt wurde u.a. ein neuer Component "ClickableTextdraw", um eine Alternative zu den Buttons zu haben, falls man eben nur einen Textdraw ohne Text haben will (mit onClickHandler, ohne Effekte).
      Außerdem kam ein neues Design ("light") dazu, um auch für das bekannte Design ("normal") eine Abwechslung zu bringen:

      Wünsche, Anregungen, Kritik o.ä. ist gern gesehen ;)