Posts by Blacky1004

    Ich hatte sowas in den letzten Wochen vor zu erstellen, Wo man "permissiondateien" per Klick und Co zusammenstellen kann,
    Leider hapert es zur Zeit, an der Syntax von Yaml, bei Einstellungen bspw. für


    erhalte ich immer eine Exception da das "*" laut Yaml Syntax kein Numerisches oder Alphanumerisches Zeichen ist..
    Daher musste ich das Projekt erstmal auf Eis legen..
    Schade

    Hallo liebe Community,


    auch ich möchte heute mal die Gelegenheit nutzen um mein derzeiges Pluginprojekt hier vorzustellen und den aktuellen Stand
    bekannt zu geben.


    Bei dem Plugin handelt es sich wie im Betreff schon erwähnt um ein Geld- und Handelssystem mit dem es Möglich sein wird,
    in bereitgestellten Shops Items, Grundstücke, Lizenzen (Kreativmodus, Flugmodus) zu kaufen, Handel und Auktionen zwischen den Spielern zu betreiben,
    Erze usw. an entsprechenden Händlern zu verkaufen usw. usw.


    All das kann nach belieben vom Serverbetreiber auf seine Bedürfnisse angepasst und eingestellt werden. u.a.:

    • Auf Wunsch können Spieler nach eingestellbaren X Minuten einen Gehaltscheck erhalten. Die Höhe des Betrages hängt von der Gruppe ab,
      die der Spieler zugewiesen bekommen hat. (näheres zu den Gruppen in dem Abschnitt Pluginkonfiguration)
    • Hansdelspreislisten können eingeschalten und auch so eingestellt werden, das die Preise immer stabil sind oder gar nach jedem Serverneustart
      neu generiert werden. Somit werden Spieler dazu animiert in der Welt sich um die gerade gefragten Erze usw. umzuschauen und diese dann bei
      einem entspr. Händler zu verkaufen. Die Preislisten können an einen Stand jederzeit abgefragt werden (siehe Bild)
    • Betreiben von Erzdepots, an denen Spieler sich Erze abbauen können, die sie je nach Anzahl der erhaltenen Erze bezahlen müssen
    • Alle Shopmodels können durch eigenen ersetzt werden (auch hier erfolgt eine genauere Erklärung im Abschnitt Pluginkonfiguration)
    • Jeder Spieler hat ein bankkonto, auf das an aufgestellten Bankautomaten Transaktionen (Auszahlung, Einzahlung und Überweisung)
      durchgeführt werden können (siehe Bild)
    • Jeder Spieler kann einen anderen Spieler per "Chatcommando" geld geben (vorausgesetzt er hat auch soviel)
    • Serverbetreiber können einstellen, ob Spieler, die gestorben sind Ihr Bargeld verlieren. Dies ist jedoch nicht wie die Items im Nirvana
      verschwunden, sondern es erschein an der Stelle an der der Spieler gestorben ist ein silberner Koffer, in dem sein verlorenes Geld enthalten ist.
      Der Spieler sollte sich nach seinen Respawn beeilen, denn auch anderer Spieler können diesen Geldkoffer sehen und auch looten.
      Erst wenn ein Koffer nach 5 Minuten nicht gelootet wurde, ist er hoffnungslos verloren und das darin enthaltene Geld ist weg.
    • Alle Models können nach dem setzen/erstellen editiert werden hier besonders (rotieren und bewegen) (siehe Chatcommandos)


    Was noch nicht funktionert:

    • Der Flugmodus kann zur Zeit noch nicht gekauft werden
    • Items können zur Zeit noch nicht an Shops/Händler verkauft werden
    • Erzdepots können derzeitig noch nicht genutzt werden.
    • die Option "freecrafting" sollte im zusammenhang mit der Baulizenz nicht genutzt werden,
      da es zur Zeit noch nicht möglich ist die Anzahl und einige gecraftete ItemIDs per API abzufangen/fragen

    Was noch geplant ist:


    • ärztliche Versorgung ( bei wenig gesundheit oder Knochenbrüchen) gegen einen Geldbetrag
    • Jagdlizenzen (je nach Tierart)
    • Einführung einer zentralbank, die im PvP von spieler(gruppen) ausgeraubt werden können


    Pluginkonfiguration


    Das Plugin selbst besteht aus der Hauptkonfiguration "Config/config.properties", Handelspreislisten "Config/tradeprices.xml", Itemlisten "Config/itemlist.xml",
    Tradegruppen "Config/Groups/*.group" und der Sprachdateien "Config/Languages/*.properties"


    Das Plugin selbst unterliegt keiner festen Sprache, hier wird sich der Api-Funktion der Playerklasse "getLanguage()" bedient. Je nachdem welche Sprache der
    Spieler eingestellt hat, erhaält er auch Meldungen GUI-beschriftungen in seiner eingestellten Sprache.


    die config.prperties hat folgenden Inhalt:


    Zu den Tradegruppen gebe ich hier mal eine Beispiel Gruppe


    Chatcommandos



    Es folgen nun einige Bilder


    Bild 1: Die Handelspreisliste, Bild 2: der Lizenzshop, Bild 3. der bankautomat




    Für Vorschläge und Kritik bin ich bekanntlich immer offen. Sobald alle funktionen zur Verfügung stehen, werde ich das Plugin dann hier der breiten Masse
    zur Verfügung stellen.


    Blacky1004

    ja glaube ich Dir @Galveston01,


    nur selbst mein bescheidens Wissen sagt mir das selbst beim besten Game Grenzen liegen, zwar habe ich
    in sachen GUI im Bezug auf JMonkey nicht soviel beizutragen, weiß aber aus Sicht von Unity3D, welches
    bereits von Haus haus eine naja sagen wir mal genugtuhende GUI mitbringt, diese auch noch dynamisch
    an Spieler durchzubringen hmmmmmm nagut kurz um einfach wenn den überhaupt nur mit enormen Aufwand
    beizubringen ist.

    achso beinahe wäre es mir entgangen, möchte mein(e) Plugins Multilanguage fähig machen. So nun
    bietet ja die Klasse Player so ne hübsche Funktion/methode "getLanguage()" Für mich wäre es
    nun gut zu wissen ob hier die eingestelle Sprache im Spiel zurückgegeben wird oder die Culture des Betriebssystems.


    Bisher erhalte ich im meinem Falle "de" beim aufruf von getLanguage() zurück, somit weiss meine
    Klasse "LanguageManager" in welcher Sprache er entsprechende Nachrichten zu übermitteln hat.
    ist in dem Falle in der Datei de.properies abgelegt.


    Leider weiß ich nicht, wie ich die Sprache meines Spiels ändern kann, um so zum Debug dem Server
    ne andere Sprache vorzugaukeln...

    Oh, dieses Event sollte gar nicht in der API drin sein Es ist nämlich noch nicht verdrahtet, da tut sich also nichts. Im Grunde sind eigentlich nur die Dinge "offiziell" zur API hinzugekommen, die auch im Changelog erwähnt sind: API Changelog

    @red51 uppps das wuste ich nicht....
    Hab mich eigentlich schon gefreut....

    huhu @all und @red51


    also das Update ist ja mal gelungen *Hut zieht* :thumbsup:


    nur habe ich ein kleines Manko... ich habe folgendes meinem Listener hinzugefügt...


    Java
    @EventMethod
    public void onPlayerAddInventory(PlayerInventoryAddEvent event){
    System.out.println("PlayerInventoryAddEvent fired!");
    Player p = event.getPlayer();
    PlayerInventoryAddEvent.Origin origin = event.getOrigin();
    Item item = event.getItem();
    //if(origin == PlayerInventoryAddEvent.Origin.Digging)
    p.sendTextMessage("Du hast "+item.getStacksize()+" x "+item.getName()+" erhalten.");
    }

    nun nach ausprobieren (Spitzhacke in der Hand und mal Eisen und Co. abgebaut) habe ich festgestellt, das der Event nicht "zündet"
    liegt es an mir oder ist der Event noch nicht implementiert.


    Zum TNT .. nettes Feature gut kann in der einen oder anderen Situation etwas "weitreichende" Folgen haben aber @red51 hat ja rein vorsichtshalber
    per Permissioneinstellung gegengesteuert, von daher kostet es mich max. 5 Minuten Zeit dies evtl. Griefern/Trollern was auch immer zu verbieten...

    der Fehler ist schon so richtig.. du erstellt ein Attribut mit dem Key "sbg" und übergibst null. erwartet wird aber hier ein Object(Klasse, Image, Label int, String usw.usw)!
    und Null ist nun mal kein Object :(
    Daher die Exception..


    gut @red51 (wenn überhaupt machbar) könnte hier mal evtl. eine Methode von mir aus player.deleteAttribute("sbg) implentieren
    ansonsten mach folgendes....

    bei meinem Beispiel wird gefragt ob das Attribut "sbg" eine Instance(in C# vom Typ) ScrollBoxGui ist
    Wenn ja dann ... und Du setzt dann das attribut "sbg" auf -1 somit ist es beim nächsten zünden des events NICHT mehr Scrollboxgui, sonder ein INTEGER..


    hoffe Dir geholfen zu haben

    nix zu danken, freut mich wenn es geht, aber wegen den 1-2 Anstößen brauch man mich nicht zu erwähnen;)
    Ich hoffe dein Plugin kommt gut an :thumbsup: Zumindestens Drücke Dir die Daumen und wenn was ist, Du weißt ja wie ich zu erreichen bin


    In diesem Sinne Good Luck und großes GZ!!


    Blacky1004

    Bei String Datentypen, ist es in der Regel nicht so(es sei dann man initialisert ihn mit null), das sie NULL sind,
    Standart ist ein String nach der Deklaration (String text;) immer Empty (leer) dafür bietet der DAtentyp die Methode isEmpty() an.


    somit kannst Du auch gleich in der BEdingungsprüfung "if(Nachricht != null && !NAchricht.isEmpty)...." ob beides zutrifft.

    Ich hoffe ich habe es so richtig verstanden. Der User gibt im Chat


    /at setwelcome Willkommen in meiner Welt! /n Ich wünsche euch viel Spaß!


    als befehl ein und es soll dann aus "/n" -> "\r\n" werden...


    das sähe dann in Java so aus..



    Die Methode getNachricht(..) baut Dir dein Array ab dem gegebenen Startwert(index) wieder zu einem String zusammen hierbei nimmt
    er als seperator das leerzeichen(" "). als Rückgabe erhälst Du dann die werte von cmd[2] - cmd[x];


    Die Methode schreibt daher die nachricht nicht in cmd[2].
    der Aufruf in deinem Falle
    String Nachricht =getNachricht(cmd, 2, " ");


    in der Variablen Nachricht sollte dann nun "Das ist ein Test" enthalten...

    huhu


    versuch mal folgende Methode....

    Hallo Red51,


    Ich habe hier ein kleines Problem. Vieleicht nicht schwerwiegend, jedoch aber nennbar.
    Und zwar bin ich mit dem Geld und Handelsystem soweit, das man sich eine "Baulizenz" kaufen kann, die
    dann den Befehl Player.setCreativeModeEnables(true) ausführt, und nach abgelaufener Zeit
    wiederum Player.setCreativeModeEnabled(false) ausführt.


    Folgendes Problem, lässt die Zeit ohne das man was macht verstreichen, ist alles ok ergo wie gehabt,
    jedoch wenn man Funktionen wie TerrainBuilding nutzt und die Zeit aber zwischenzeitlich abgelaufen ist,
    ist man zwar wieder raus aus dem Creativemodus, nur die Actionbar ist bei der Auwahl per Scrollrad nicht
    mehr sichtbar.


    Ich habe dazu mal ein kleines Video gemacht, was die sache etwas verdeutlicht, nur ist sie für den Upload hier
    etwas zu groß, obwohl sie nur die letzte Minute zeigt. Ich möchte auch nicht, das auf Youtube hochladen da ich denke
    das die Angelegenheit hier hingehört und nicht an die breite Masse, daher habe ich das Video auf einen unserer Server
    im Rechenzentrum gehaun. der link ist:



    Bitte sei nicht böse, das ich dies spätestens am Freitag wieder vom server löschen muss...


    Du hast DA bestimmt eine Lösung für mich, ansonsten schönen Abend Dir noch UND mach heute nich mehr solange!!!


    Blacky1004 / Jens


    P.S. Red gerne stelle ich Dir auch das Projekt zur Nachforschung zur Verfügung.

    huhu
    Welchen Datentyp hat deine Spalte ID? wenn es ein INTEGER ist, muss die SQLAnweisung für dein Update so lauten...
    UPDATE `tmn-server-welcome` SET `Nachricht` = '" + welcomeTextNew + "' WHERE `ID` = 1


    Du hast ID='1' angegeben dies macht man wenn der Datentyp z.B VARCHAR ist. Ich nehme an das da der MySQL Server Dir ne Exception/Fehler
    geschmissen hat und das Update folglich nicht übernommen hat.

    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!

    ... oder mit rechter Maustaste auf deinem Projektordner klicken und dort Clean and Build wählen.
    Nach erfolgreichem Build findest Du in deinem Projektordner ewin Verzeichnis namens "dist" darin ist dann die *.jar Datei

    hallo Patrick,


    Ich habe grad noch ein Fehler in meiner Hilfe gesehen was mir eigentlich selbst beruflich als Anwendungsentwickler peinlich sein sollte...
    Der Index eines Arrays/List beginnt immer bei 0! die Abfrage eines Counts(in C#) Length(JavaArray) , size(Java.ArrayList) Liefert nicht den letzten Index sondern die Anzahl der Elemente im Array.
    somit muss ich meine Hilfestellung etwas verbessern...

    Java
    if(cmd.length == 4){
    String spielername = cmd[3];
    //...
    }
    }

    Das war mein Fehler... sowas kommt davon wenn man schnell helfen will und im Hinterkopf andere Gedanken hat.
    Ich stehe Dir aber gerne auch per PN zur Verfügung!

    Ein kleines Anliegen habe ich noch...


    folgender Quellcode:

    Java
    ...
    Player p = event.getPlayer();
    Inventory pInventory = p.getInventory();
    Item[] items = pInventory.getAllItems();
    if(items != null && items.length > 0){
    for(int i=0; i <items.length; i++){
    Item.Definition itemDefinition = Item.getItemDefinition(items[i].getTypeID());
    p.sendTextMessage(itemDefinition.getItemName()+" "+itemDefinition.getItemType()+" ("+itemDefinition.getStrength()+")");
    }
    }

    erzeugt bei mir folgenden Fehler im Logfile:


    Der Logeintrag "at de.wts.listener.PlayerListener.onPlayerInteract(PlayerListener.java:148)" entspricht dieser Zeile in meinem Quellcode "Item.Definition itemDefinition = Item.getItemDefinition(items[i].getTypeID());"



    die Plugin-Api habe ich gestern frisch runtergeladen. Vieleicht kannst Du mir ja da weiterhelfen 8)
    Als letzte Frage : Ist es so, das ich mit der Methode getInventory aus der Klasse Player nur die 5 Items aus meiner Actionbar erhalte?


    vielen Dank schonmal


    Blacky1004