Wie bekomme ich ne Einfache Ausgabe hin?

  • Hallo.


    Ich bin ja froh das ich das mit dem LUA so eben verstanden habe aber nun stehe ich wieder hier wie der Ochs vorm Berge. ;(


    Nun bekomme ich es nicht mal hin wenn jemand /test in den Chat schreibt, als Antwort Bestanden im Chat steht...
    Und warum steht den nix in der Console, wenn ich zb mit rp die Plugins neu lade?


    Ich habe mir das TS Plugin genommen und habe mir aus einem anderen Beitrag was von dem Quellcode geklaut aber bringt nix.



    Und wo bitte steht in der https://javadoc.rising-world.net/ was von sendTextMessage, woher weiß man sowas?


    Ich verstehe echt nur Bahnhof...


    LG von veralteten und verwirrten TutMeistensNix

  • Freut mich dass das Problem gelöst ist :)


    Ich bin ja froh das ich das mit dem LUA so eben verstanden habe aber nun stehe ich wieder hier wie der Ochs vorm Berge.

    Ja, das ist leider tatsächlich etwas ungünstig :( Nochmal wird sich die API jedenfalls nicht mehr so grundlegend ändern^^


    Und wo bitte steht in der javadoc.rising-world.net/ was von sendTextMessage, woher weiß man sowas?

    Du findest diese Funktion bei dem jeweiligen Objekt oder der jeweiligen Klasse, zu welcher sie gehört. In dem Fall also zum "Player". Diesen wiederum findest du in dem Package, in welchem er sich befindet (was für eine tolle Formulierung). Um das im Javadoc zu finden, gehst du in diesem Fall also auf net.risingworld.api.objects, und dort auf Player (dort finden sich alle Funktionen, die zum Player gehören, also auch "sendTextMessage()") ;)


    [...] vom veralteten [...] TutMeistensNix

    Das halte ich für ein Gerücht :whistling:

  • Danke dir für die gute Erklärung. :thumbup:


    Inzwischen habe ich diese "einfache" Ausgabe hinbekommen.
    Wollte nun ne einfache Ausgabe aus der MySQL Datenbank aber da bekomme ich im Moment nur Fehler.
    Langsam ernährt sich das Eichhörnchen...

  • Kannst du nicht schlafen? 8|


    Im Moment noch nicht.
    Heute Abend werde ich noch mal dran gehen, wenn ich Zeit und etwas Ruhe habe.


    Es ist schön wenn man nach einigen Versuchen selbst sieht was man verkehrt gemacht hat und kann sich es dann so viel besser merken als wenn man immer gleich die Lösung vor die Nase gesetzt bekommt.



    Aber ne Frage habe ich wirklich.
    Ich muss ja zb if(cmd[1].equals("tmn")) statt if(cmd[1] == ("tmn")) schreiben.
    So wird die if Schleife ausgeführt wenn der Wert positiv ist, was ist aber wenn ich jetzt genau das Gegenteil vor habe, ich also will das die Schleife ausgeführt wenn der Wert nicht tmn lautet?
    Also if(cmd[1] != ("tmn"))

  • Kannst du nicht schlafen?

    :saint:


    Aber ne Frage habe ich wirklich.

    Ja genau, Strings müssen mit equals() geprüft werden, ob sie übereinstimmen (ansonsten werden bei der == Variante grundsätzlich zwei Objekte auf Gleichheit geprüft (also ob es sich um das gleiche Objekt handelt), und da ein String ein Objekt ist, würde das == nur dann true ausgeben, wenn du exakt dasselbe String-Objekt [also exakt das selbe Objekt, nicht der Text] überprüfst... anders sieht es lediglich bei primitiven Datentypen wie int, float, boolean etc aus, da kannst du problemlos mit == und != prüfen).


    Um die Abfrage nun zu negieren, musst du lediglich das ! davor setzen, also if(!cmd[1].equals("tmn")) ;)

  • Also irgendwie war es mit Lua viel einfacher...

    Das ist eine reine Gewöhnungssache ;) Natürlich ist der Umstieg erstmal ungewohnt, aber wenn man sich erstmal dran gewöhnt hat, läuft eigentlich alles wie geschmiert.
    Wichtig ist, dass du das Javadoc in die IDE einfügst, damit du direkt die Autovervollständigung (inkl. Dokumentation) nutzen kannst (welche das Programmieren ungemein erleichtert)

  • Ja, das ist wirklich ein Vorteil.


    Aber ich kann hier ja nicht mal von anderen Scripten abgucken weil man ja keinen Code mehr sieht.
    Und wenn ich mir im Internet Hilfeseiten anschaue wie man den Daten aus einer MySQL Datenbank abruft bekomme ich nur Kopfschmerzen.
    5 Hilfe Seiten und überall steht es anders.


    Was ich mit https://javadoc.rising-world.net/ rausbekommen habe ist wie man eine Verbindung zu einer MySQL Datenbank aufbaut.


    Java
    Database db = getMySQLConnection("***", "localhost", 3306, "***", "****");
    if(db != null){
    System.out.println("Datenbank verbunden.");
    }else{
    System.out.println("Datenbank wurde nicht gefunden!!!");
    }

    Toll, nun habe ich in der Konsole Datenbank verbunden. stehen...

  • Das Spiel bietet Hilfsfunktionen, um SQL Abfragen durchzuführen. Die meisten Hilfestellungen im Internet sind also daher umfangreicher und komplexer als das, was du mit der API machst^^


    Das Database Objekt bietet Zugriff auf die Funktionen execute(), executeUpdate() und executeQuery(). "execute()" wird verwendet, wenn du bspw. ein "CREATE" oder "DELETE" Statement durchführen willst. "executeUpdate()" verwendest du, wenn du INSERT, UPDATE oder DELETE durchführen möchtest. "executeQuery()" ist für SELECT Abfragen gedacht, dabei wird auch ein ResultSet zurückgegeben. Das Javadoc enthält dazu auch Beispiele.


    Damit ist quasi alles abgedeckt. Alternativ kann mit "getConnection()" direkten Zugriff auf das Connection Objekt erhalten, womit dann alles, was der JDBC Treiber bereitstellt, gemacht werden kann (zB PreparedStatements verwenden, Tabellenmetadaten auslesen usw). Das ist mächtiger, aber auch komplexer. Das kannst du im Grunde erstmal ignorieren ;)


    Hier ein Beispiel um eine Tabelle zu erstellen und einen Eintrag einzufügen:

  • Du kannst doch einfach die .class Dateien aus den Plugins dekompilieren. Dann hast du den Code

    O.O Das ist etwas heikel, ich glaube kein Programmierer möchte, das seine Programme "Dekompiliert" werden.
    Wird unter uns Programmierern auch ungern gesehen. Das ist auch der Grund warum Red51 RisingWorld einen
    Sogenanten Obfocusator unterzogen hat!
    Somit ist es sehr schwer bzw. wenn überhaupt Rückschlüsse auf den Quelltext und seinen Abhängigkeiten
    nachzuvollziehen!

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

  • Hier ein Beispiel um eine Tabelle zu erstellen und einen Eintrag einzufügen:


    So, habe mich mal etwas damit beschäftigt und viel gelernt. :rolleyes:


    Wenn ich das richtig verstanden habe brauche ich gar nicht eine Verbindung mit getMySQLGedönns aufbauen ich kann ja einfach die vorhandene benutzen.
    Sprich, wenn ich WorldDatabase db = getWorldDatabase[b]([/b][b])[/b]; benutze nimmt er doch die Datenbank die der Admin in der server.properties angegeben hat, dabei richtet er sich doch nach dem Wert der unter database_type= angegeben wurde, oder liege ich da ganz falsch?


    Also ich habe jetzt ne einfache Abfrage die er aus der DB holt wenn ein Spieler joint.


    Diese kann ich aber nicht mit db.close(); dicht machen, dann zeigt mir Eclipse ne Warnung an.



    Ach, fast vergessen.
    Ich bin hier fast abgedreht weil er immer Fehler bei der Select Abfrage geworfen hat.
    Ganz wichtig sind die Hochkomma Teile, mal müssen diese ` und mal diese ' verwendet werden.... wer kommt den bitte auf so einen Mist? :P

  • Wenn ich das richtig verstanden habe brauche ich gar nicht eine Verbindung mit getMySQLGedönns aufbauen ich kann ja einfach die vorhandene benutzen.

    Ja also wenn du direkt auf die Weltdatenbank zugreifen möchtest, dann musst du keine eigene Verbindung aufbauen, sondern kannst direkt getWorldDatabase() aufrufen. Damit hast du Zugriff entweder auf die bestehenden Welttabellen (zB die Spielertabelle, oder Direktzugriff auf Chunks etc), du kannst natürlich aber auch eigene Tabellen anlegen. Nur das wird dann logischerweise alles direkt in der Weltdatenbank vorgenommen.


    nimmt er doch die Datenbank die der Admin in der server.properties angegeben hat, dabei richtet er sich doch nach dem Wert der unter database_type= angegeben wurde, oder liege ich da ganz falsch?

    Genau, halt die Weltdatenbank. Im Grundsatz sind aber alle Fkt in dieser Klasse so ausgelegt, dass es dir quasi egal sein kann, ob es eine SQLite oder MySQL Datenbank ist :D Ansonsten kannst du auf die Weltdatenbank auch getType() aufrufen, dann erhälst du den Datenbanktyp (also SQLite oder MySQL)


    Diese kann ich aber nicht mit db.close(); dicht machen, dann zeigt mir Eclipse ne Warnung an.

    Nee, die "Weltdatenbank" ist ein Sonderfall, die kann nicht mit close() dichtgemacht werden, sondern ist zur Laufzeit immer vorhanden und offen ^^


    Ganz wichtig sind die Hochkomma Teile, mal müssen diese ` und mal diese ' verwendet werden.... wer kommt den bitte auf so einen Mist?

    Ja, das ist bei MySQL leider so. SQLite ist da eher unproblematisch und legt gar nicht so viel Wert auf die korrekte Zeichenverwendung, MySQL hingegen ist da pingelig ;) Grundsätzlich die Hochkomma ` für Tabellen- oder Spaltennamen, die einfachen Anführungszeichen ' für Strings

  • Also ich stehe gerade etwas auf dem Schlauch.


    Ich möchte via Chat etwas in die Datenbank schreiben.
    Nun muss dafür /tmn update <Text> eingegeben werden.
    Aber ich will ja nicht alles speichern sondern nur den <Text>.


    Dafür habe ich folgendes geschrieben:


    Aber er haut mir immer nen Fehler in die Konsole.



    Wo liegt mein Fehler?

  • Der eigentliche Fehler ist dieser hier (ab der nächsten Version werden die Pluginfehlermeldungen deutlicher):

    Caused by: java.lang.StringIndexOutOfBoundsException: String index out of range: -7

    Der besagt, dass du bei einer String-Operation (in dem Fall "substring()") einen falschen Index angegeben hast, der länger als der String selber ist.


    Hier ist der Übeltäter:

    Quote

    String welcomeTextNew = cmd[2];
    String welcomeTextNew2 = welcomeTextNew.substring(12);

    In cmd[2] bzw. "welcomeTextNew" würde in deinem Fall nur "Hallo" stehen, wenn du versuchst, davon ab dem 12. Zeichen einen Substring zu bilden, schlägt das natürlich fehl (weil das Wort "Hallo" nicht so viele Zeichen besitzt) ;) Hingegen macht es Sinn, den Substring des gesamten Commands zu nehmen, also was in der Variable "command" bzw. in "event.getCommand()" steht. Also so:
    String welcomeTextNew2 = command.substring(12);

  • Ok, das habe ich nun geschafft.
    Jetzt wird es richtig verwirrend...


    Wenn ich nun /tmn update Hallo und Willkommen auf dem Server von Kadaboom.de eingebe bekomme ich als Bestätigung das der Text gespeichert wurde.
    Mache ich nun /tmn seen sehe ich auch den neuen Text im Chat stehen.


    Logge ich mich aber neu ein steht wieder der alte Text da.
    Grund dafür ist das er in der Datenbank nix geändert hat, wo bitte hat er dann den Text bei /tmn seen her, speichert er den irgendwo zwischen?




Participate now!

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