Es wurde ein Validator programmiert, welcher absichert, dass Nutzer einen gültigen vollständigen Figure-Code besitzen. Dafür packt man seine aktuell im Client benutzte "figuredata.xml" in den Server-Ordner und Probleme wie beispielsweise der gesichtslose Kopf über Fußball-Schleusen sind erledigt. Außerdem wurde "ads_background" programmiert und das Verschieben von Items über den Roller gefixxt. Ebenfalls wurden Fehler beim Setzen der Matrix behoben.
Eines verstehe ich nicht, wieso denn alle immer command_"shells"_.. nehmen? Es sollte jedem bewusst sein, dass es nicht nur die Muscheln gab, da wäre ein Befehl der vielleicht mal seasonal currency oder sonst wie besser als dieser.
Wir hatten bereits angefangen dies zu verändern. Im Katalog ist beispielsweise diese Währung als "extra_price" angegeben, jedoch danke für deinen Vorschlag, die restlichen Spalten- und Variablennamen wurden nun ebenfalls ausgetauscht.
Weiterhin haben wir nun Raum-Umfragen und Infobus-Fragen fertiggestellt.
Dazu wurde ebenfalls eine RCON-Funktion (RemoteConnect) in den Server programmiert, welche euch eher als MUS bekannt sein sollte.
Wen's interessiert:
Spoiler anzeigen
In diesem Fall ist es jedoch eine UDP statt einer TCP Verbindung, welche das Post-shuffle Client Protokoll zur Kommunikation nutzt. Einen Client (bzw. eine API) hierfür haben wir bereits in PHP geschrieben. Python und JavaScript (NodeJS) folgen noch.
Beispiel:
PHP
$instance = new RconInstance("127.0.0.1", 38102);
class InfobusQuestion extends RconWriter {
public function __construct($roomId, $question, $selections) {
parent::__construct(2);
parent::pushInteger($roomId);
parent::pushUTF($question);
parent::pushInteger(count($selections));
foreach ($selections as $selection) {
parent::pushUTF($selection);
}
}
}
$instance->sendData(new InfobusQuestion($raumId, "Frage?", [
"Antwort 1",
"Antwort 2",
"Antwort 3"
]));
Alles anzeigen
Raum-Umfragen:
Umfragen, welche einem Nutzer, wenn eingestellt, 10 Sekunden nach Raum-Betritt angezeigt werden. Wenn der Nutzer diese vollständig durchführt, wird ihm eine, falls eingestellt, Belohnung (Taler, Pixel, Badge, Muscheln) und eine Nachricht übergeben. Seine Antworten werden in einer Datenbank-Tabelle gespeichert. Außerdem lässt sich eine Zeit und ein Datum festlegen, an dem diese Umfrage gestoppt wird.
Screens:
Spoiler anzeigen
Infobus-Fragen:
Abstimmungen, welche über die RCON-Funktion in einem bestimmten Raum "live" gestartet werden und deren Ergebnis nach 30 Sekunden an alle Nutzer übermittelt und in der Datenbank gespeichert wird.
Ich verstehe nur eines nicht, wieso macht ihr alles halb englisch und halb deutsch, wo ist denn da der Sinn? Anstatt mal mit dem englischen oder deutschen anzufangen mischt ihr alles.
Die Texte für den Emulator sind standardmäßig alle Englisch gehalten (Für eine leichtere Globalisierung des Servers), die Texte in der Datenbank standardmäßig alle Deutsch. Jedoch nutzen wir im Client die englischen "external_flash_texts" ("productdata" und "furnidata") weshalb in den Screens einige Texte in Englisch vorhanden sind.
Wir mischen also nicht wirklich.
Hier ein Auszug aus der Server-Text-Datei:
Code
fail_authenticate=The token that was generated for your authentication, no longer exists. Please reload the hotel.
fail_load_player_information=The information for this player could not be loaded.
fail_load_room_information=The information for this room could not be loaded.
fail_send_message_player_not_online=The message could not be sent because the player is not in the hotel.
feature_disabled=This feature is currently disabled or has not been programmed.
info_chat_command=Powered by the IDK Project (Version %s, Build %s) developed by %s and %s.
command_negative_result=The command returned a negative result.
command_no_permission=You don't have permission to execute that command.
command_multiple_buy_max_amount=You may not buy more than %d items at once.
command_multiple_buy_min_amount=For using this command you have to set an amount of at least %d item.
command_multiple_buy_usage_amount=Amount
command_usage_description=That's how to use the command\n ->
command_help_introduction=You can use following commands:\r\n
command_push_pull_not_in_front=There is no player in front of you.
command_push_message=*pushes %s*
command_pull_message=*pulls %s*
command_mimic_player_not_exist=The player who owns the style you want doesn't exist.
command_mimic_own_player=You may not want to copy your own style.
command_sit_diagonally_sitting=You cannot sit diagonally, try it again please.
fail_kick_player_not_in_room=The player is not online or currently not in a room.
fail_ban_player_higher_level=You cannot ban a player who has got your level or a higher one.
info_player_muted=You have been muted by a moderator.
info_player_unmuted=You are no longer muted.
info_room_muted=The room has been muted.
room_default_name=Room
room_inappropriate_name=Inappropriate to hotel management
room_inappropriate_description=Inappropriate to hotel management
command_coins_player_not_exist=The player who should receive the coins doesn't exist.
command_pixels_player_not_exist=The player who should receive the pixels doesn't exist.
command_shells_player_not_exist=The player who should receive the shells doesn't exist.
command_no_negative_number=You may not use a negative number.
command_coins_award_notification=You have been awarded %d coins.
command_pixels_award_notification=You have been awarded %d pixels.
command_shells_award_notification=You have been awarded %d shells.
heute stellten wir die Möbel-Sets im Katalog fertig, was zukünftigen IDK Nutzern die Möglichkeit bieten sollte, eigene Möbel-Sets mit verlockenden Angeboten in den Katalog zu stellen.
Gleich mit diesem Update folgten die bereits oben erwähnten WIRED-Sets.
es sind nun alle WIREDs (sprich Auslöser, Effekte, Bedingungen und Extras - zufälliger Effekt und unbenutzter Effekt) vollständig funktionstüchtig gemacht worden.
seit Mittwoch wurden ebenso die Hilferufe, Günni und die Hilfeseiten fertiggestellt. Wir planen derzeit ein unkommerzielles offenes Betahotel, nicht mit dem Ziel, hohe Nutzerzahlen zu erreichen, sondern damit, viele Tests zu erreichen, um für uns alle eine bessere Emulation zu ermöglichen.
Bis zu diesem Beta-Hotel sind es noch folgende Sachen, die wir fertigstellen wollen: - Alle WIREDs (voll funktionstüchtig) - Umfragen (Infobus-Umfragen sowie Raum-Umfragen) - Einen Wortfilter - Einen Spamschutz
Aus der Kooperation mit dem ST hat sich gezeigt, dass es uns eher zusagt, die Verwaltung selbst vorzunehmen. Ebenso ist dadurch die Nähe zu anderen Retro Hotels auf einem Niveau gehalten.
Bin nun zurück aus meinem Urlaub und habe einige Features, die wir vor ein paar Monaten unglücklicherweise verloren haben, nun wieder nachgeholt.
Folgende Kommandos:
:shutup <Nickname> (2 Minütiger Mute für den User.. Zeit kann bei den Einstellungen verändert werden.):unmute <Nickname> (Entmutet den Nutzer vor Ablauf der Zeit) :roomshutup (2 Minütiger Mute für den Raum.. Zeit kann bei den Einstellungen verändert werden.) :roomunmute/:eventunmute (Entmutet den Raum vor Ablauf der Zeit) :eventmute <Zeit in Minuten> <Nachricht> (Mutet den Raum wegen eines Events für eine bestimmte Zeit und schickt eine Nachricht an alle Nutzer im Raum) :roomalert <Nachricht> (Verschickt eine Nachricht an alle Nutzer im Raum) :roomkick <Nachricht> (Kickt alle Nutzer aus dem Raum, ausgenommen den Absender und unkickbare User wie z.B. Moderatoren) :softkick <Nutzername> (Kickt den Nutzer nur leicht.. Er geht aus dem Raum raus) :kick <Nutzername> <Nachricht> (Kickt den Nutzer direkt und er erhält eine Nachricht) :ban <Nutzername> [<Zeit in Stunden>] <Nachricht/Grund> (Bannt den Nutzer für eine bestimmte Zeit [wenn nicht angegeben, 2 Stunden] (Kann in den Einstellungen verändert werden) und speichert einen Grund) :hotelalert <Nachricht> (Sendet Nachricht an alle Nutzer im Hotel) :coins <Nutzername> <Anzahl> (Sendet Taler an einen Nutzer) :pixels <Nutzername> <Anzahl> (Sendet Pixel an einen Nutzer) :shells <Nutzername> <Anzahl> (Sendet Muscheln an einen Nutzer)
Außerdem wurde das Moderations-Tool vervollständigt (Hilferufe noch ausgeschlossen).
Inhalte von externen Seiten werden ohne Ihre Zustimmung nicht automatisch geladen und angezeigt.
Durch die Aktivierung der externen Inhalte erklären Sie sich damit einverstanden, dass personenbezogene Daten an Drittplattformen übermittelt werden. Mehr Informationen dazu haben wir in unserer Datenschutzerklärung zur Verfügung gestellt.
Inhalte von externen Seiten werden ohne Ihre Zustimmung nicht automatisch geladen und angezeigt.
Durch die Aktivierung der externen Inhalte erklären Sie sich damit einverstanden, dass personenbezogene Daten an Drittplattformen übermittelt werden. Mehr Informationen dazu haben wir in unserer Datenschutzerklärung zur Verfügung gestellt.
Inhalte von externen Seiten werden ohne Ihre Zustimmung nicht automatisch geladen und angezeigt.
Durch die Aktivierung der externen Inhalte erklären Sie sich damit einverstanden, dass personenbezogene Daten an Drittplattformen übermittelt werden. Mehr Informationen dazu haben wir in unserer Datenschutzerklärung zur Verfügung gestellt.
Außerdem sind für das Bank- und das PhoenixCommands-Plugin Quellcodes auf Github verfügbar.
Hatten die letzte Woche nicht besonders viel Zeit, haben jedoch auch einige Zeit mit dem IDK Server verbracht. Da wir uns die letzte Zeit meistens nur mit dem Plug-in System beschäftigt haben, welches auch für uns einer der wichtigsten Features überhaupt ist, ist es nun mein Privileg, den Server selbst etwas weiter zu bringen. Rhinodanny wird weiterhin an Plug-ins arbeiten.
Mehrere Projektdateien Eingeführt haben wir ein Python-Tool, welches mehrere JavaScript-Dateien letzendlich in eine umwandeln kann. Dies ist hauptsächlich mit der "require"-Funktion von NodeJS vergleichbar, da hier auch Objekte direkt referenziert werden können oder auch nur eingebunden werden können.
Der Grund dafür ist, dass es bei manchen großen Plug-ins Sinn macht, sie in mehrere Dateien aufzuspalten, um die Übersichtlichkeit zu gewährleisten. Moderne IDEs wie Atom.io und Sublime3 sind dazu fähig, z. B. einen bestimmten Befehl immer dann auszuführen, wenn eine JavaScript-Datei gespeichert wird. Somit ist es möglich, nach der Speicherung die Haupt-Datei mit dem Python-Tool umzuwandeln und sie dann sofort auf einen FTP-Server hochzuladen.
Ein Beispiel:
Spoiler anzeigen
Dieses Beispiel wird dann zu dieser Enddatei umgewandelt, die dann dem Emulator bereitgestellt wird: Ubuntu Pastebin
Bank-Angestellter als Bot? Rhinodanny kam mit der Idee auf, ein Plug-in zu schreiben, mit welchem man über einen Bot Geld an andere Nutzer verschicken kann. Spoiler anzeigen
Um das Beispiel mit Cleverbot weiter auszubauen, sind wir zu der Idee gekommen, mehrere Bots, welche man ansprechen kann, auch miteinander sprechen zu lassen. Dies geschieht relativ zufällig und mit einem Cooldown von ein paar Minuten, um die Gespräche so realistisch wie möglich zu halten.
Nutzer selbst können Bots auch ansprechen, falls sie unmittelbar neben diesem stehen und ihn ansprechen oder in einer Entfernung von max. 10 Feldern den Namen erwähnen. Falls einer der beiden Konditionen erfüllt ist, wird dem Nutzer ein 10 Sekunden Gespräch mit dem Bot reserviert (Name muss nicht mehr in Nachricht enthalten sein), welches bei erneutem Schreiben wieder auf 10 Sekunden gestellt wird. Dritte Nutzer bzw. Bots können sich nicht in ein laufendes Gespräch einmischen.
Unser Ziel war es in diesem Fall, mindestens augenscheinlich die Aktivität der Nutzer im Hotel zu steigern.
Inhalte von externen Seiten werden ohne Ihre Zustimmung nicht automatisch geladen und angezeigt.
Durch die Aktivierung der externen Inhalte erklären Sie sich damit einverstanden, dass personenbezogene Daten an Drittplattformen übermittelt werden. Mehr Informationen dazu haben wir in unserer Datenschutzerklärung zur Verfügung gestellt.
Entwickler-Update: Es wurden Item-Interaktoren für Plugins eingeführt, mit welchen man auf bestimmte Ereignisse eines Möbelstücks reagieren kann (Nutzer stellt sich auf Möbelstück, geht davon herunter, Doppelklick darauf..).
Nachdem wir die Einleitung der Dokumentation nun abgeschlossen haben, folgt ein detailiert beschriebenes Nachschlagewerk für Methoden und Klassen, welche von Plugins verwendet werden können.
Da wir auch nicht ohne eine bestimmte Basis an Plugins für Hotels starten wollen, sind wir dabei, uns immer neue Ideen einfallen zu lassen.
Diese Ideen umfassen z. B. Kommandos, welche den kreativen Raum-Bau so einfach wie möglich machen (Wer mit World-Edit für Minecraft vertraut ist, kann sich darunter etwas genaueres vorstellen), Games wie z. B. das ehemalige IDK Habbo Racing (https://retrotown.ws/www.youtube.com/watch?v=-GdsCyYtPF8) und deartiges wie hier:
Ein Bot, der sich mit Cleverbot.com verbindet und als eine Art Schnittstelle dafür dient. Eventuell nicht wirklich nützlich, aber natürlich dürfen Fun-Plugins auch nicht fehlen.
Worüber werdet ihr das ganze Vertreiben? Kenne ein Forum wo ihr Paysafecard annehmen könnt etc. mehr Infos per PN.
Wir vertreiben es über das Placeholder Network. Welche Zahlungsmittel wir annehmen steht momentan noch nicht fest.
Wir haben angefangen ein Einführung sowie eine Dokumentation für das Plugin-System von IDK zu schreiben, sodass der Einstieg für Entwickler so leicht wie möglich ist.
Rhinodanny hat ebenfalls begonnen, Plugins zu entwickeln:
Dieses ist unter anderem auch als "Weather Bot" bekannt
Im Spanischen kennt man ihn auch als "El Tiempo Bot".
Das war nicht wirklich als ausgereifte Funktion gedacht, sondern nur dazu da, eine neue Funktion des Plugin-Systems besser in der Praxis zu demonstrieren.
Da wir anfangs bereits eine höhere Anzahl an Plugins bereitstellen wollen, brauchen wir auch Ideen für diese. Vorschlagen könnt ihr schon in Phoenix bekannte Kommandos oder auch eigene Ideen.
Ebenfalls noch ein kleines Entwickler-Update:
Spoiler anzeigen
Nun kann man auch nebenläufige Funktionieren ausführen, welche unter anderem dann gebraucht werden, wenn beispielsweise Daten aus dem Internet heruntergeladen werden müssen, um den aktuellen Thread nicht zu behindern.
Inhalte von externen Seiten werden ohne Ihre Zustimmung nicht automatisch geladen und angezeigt.
Durch die Aktivierung der externen Inhalte erklären Sie sich damit einverstanden, dass personenbezogene Daten an Drittplattformen übermittelt werden. Mehr Informationen dazu haben wir in unserer Datenschutzerklärung zur Verfügung gestellt.
Wir haben angefangen eine Dokumentation für Plugin-Entwickler anzufertigen. In diesem Bereich gibt es außerdem ein Update:
Objekte, wie z. B. Bot-Interaktoren, Chat-Kommandos und Event-Listener, kann man nun auch direkt ohne Strings referenzieren. Dies ermöglicht unter anderem das Erstellen von anonymen und lokalen Objekten.
Code
function initializePlugin() {
if (IDK.isLoadedExternally()) {
IDK.getLogger().info("Ich wurde aus dem Internet heruntergeladen!");
} else {
IDK.getLogger().info("Mich gibt es im 'plugins' Ornder!");
}
IDK.addEventListener(ItemPurchaseEvent.class, {
onEvent: function(event) {
print ("Wanted to buy an item: " + event.getItem().getDisplayName());
}
});
IDK.addBotInteractor(FRANZ_BOT_ID, FranzDerBot);
}
Alles anzeigen
Außerdem kann einem Chat-Kommando nun auch ein "usage"-String, der die Verwendung beschreibt, und ein Alias-Array, also mehrere alternative Schreibweisen für ein Kommando, hinzugefügt werden.
Das könnte man doch ganz leicht umgehen, in dem der User, der gekickt werden soll, einfach auf einen anderen Punkt des Raums klickt. Oder wurde diese Funktion dem User entnommen?
Natürlich ist dies dem Spieler dann auch nicht mehr möglich.
Da @domi338 gerade das mit den Badges erwähnt hat: Diese habe ich nun schnell erledigt.