Beiträge von SteveWinfield

    * Bei einer SQL-Query die "WHERE"-Angabe vergessen und aus Versehen Daten von über 10k Nutzern gelöscht, welche kein Backup hatten.
    * Als PHP Noob immer mal wieder "session_start()" vergessen und dann Tage mit den Problemen gekämpft.
    * Auf einem Server mit 1k aktiven Nutzern 2x den originalen Emulator anstatt den Test-Emulator ausgeschalten.
    * Meinen Computer formatiert, ohne Arbeit zu speichern, an der ich über 3 Monate gearbeitet habe. (2x)
    * Stichwort: Python Einrückungen (100x)
    * Original-Passwörter auf Github-Repositories gepusht
    * CSS (.. ist ein einziger Fehler)
    * Durch ein fehlerhaftes If-Konstrukt bekamen 200 Nutzer live einen Jump-Scare
    * Eklige Dinge durch Faulheit
    * Docker-Container an zufällige Ports gebunden (ungewollt)
    * .. undso weiter

    Ich würde mal sagen, man lernt irgendwann aus seinen Fehlern (hoffentlich).

    Cheers,
    Steve Winfield

    PDO würde ich nicht empfehlen.
    Der einzige Vorteil seitens PDO ist, dass man es auf 12 Driver auslegen kann.
    Wenn man an einem Projekt arbeitet braucht man sowieso nur eins und einen Wechsel
    kann man mit Prefixes lösen. Sofern ist es meiner Meinung nach viel besser mit einer eigenen
    MySQLi Klasse zu arbeiten -> schneller, weniger Performance Aufwand.

    Zudem kann man schlecht kooperieren mit PDO wenn man z.B. eine SQL Plattform nutzen will wie MongoDB, da es nicht als
    sprichwörtlich SQL aufgefasst wird und somit nicht als Driver für PDO.

    Die Unterstützung mehrerer Datenbankformate ist ein immenser Vorteil (Es ist nicht nur auf 12 beschränkt, da man auch eigene Implementierungen erstellen kann). Meistens steht die Abstraktion eines Codes immer über der Performance, wenn der Unterschied nicht zu sehr erkennbar ist, was hier nicht der Fall sein sollte. Mit PDO ist man aufjedenfall gut bedient.

    Mysql ist sehr einfach, da die querys wie beim sprechen aufgebaut werden. Schau dir mal ein Tutorial auf php-einfach an, dort wird es dir gut erklärt. Aber auch jede andere Seite eignet sich fürs lesen und lernen :D


    Die Komplexität von SQL wird meistens auch sehr unterschätzt, so gibt es oft Fälle, die mittels einer Anpassung der Query wesentlich besser optimiert werden können, als es eine Verbesserung des Algorithmus selbst je ermöglichen würde, es gibt dafür nicht umsonst ganze Bücher.

    Cheers,
    Steve Winfield

    Hey,

    leider konnte man deinen Snippets nicht wirklich viel entnehmen (.. hätte man eigentlich gleich weglassen können). Mich persönlich würde vor allem die Architektur des Servers (Verteilung der Räume / "Aufräumer" Tasks - Thread Pool?) interessieren sowie das Datenbankhandling (ORM?)

    Da du jetzt noch weit am Anfang vom Projekt stehst wäre es außerdem sinnvoll jetzt noch einmal auf die letzte veröffentlichte Client-Version zu updaten (Wenn man das viel später macht, kommen immer irgendwelche Fehler mit rein, die man erst nach Monaten bemerkt).

    Hier noch ein paar Sachen aus eigener Erfahrung:

    * Das was mich bei IDK bis jetzt immer am meisten geärgert hat (war danach zu faul es zu ändern) war der Raum-Zyklus. Am Anfang beginnt alles noch relativ harmlos, doch dann, man schenkt dem Server einen Moment nicht seine komplette Aufmerksamkeit, kommen Sachen wie das Zurücksetzen von Carried Items, Roller, die Nutzer bewegen, etc.. die man dann einfach mal reinrotzt (Btw: Pass auf, dass in jedem Fall immer alle Daten synchron sind! - Hilft dir beim Aufrechterhalten der Stabilität des Emulators)

    Spoiler anzeigen


    Hatte später mal eine Idee, um diesen Messi-Zyklus zu verbessern:

    Externer Inhalt gist.github.com
    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.

    Externer Inhalt gist.github.com
    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.

    * Versuche deine Klassen so abstrakt und klein wie möglich (übertreibs aber auch nicht) zu halten. Damit meine ich, keine Raum-Klassen, die über 1.700 Zeilen groß sind.. Da verliert ja jeder den Überblick. Lieber alles aufteilen in Klassen wie "RoomEntityManager" oder derartiges. Es ist außerdem wichtig, Strukturen, die für mehrere Klassen gelten, immer miteinander kompatibel zu machen (Interfaces, abstrakte Klassen..), damit du sie irgendwann im Code wiederverwenden kannst.

    Beispiel:

    -> Jedes Objekt in einem Raum weiß von seinem Raum.
    ---> Jedes "Bodenobjekt" weiß von seinen Raum-Koordinaten
    -----> Jedes Wesen weiß von einer Richtung, in welche es guckt.
    -------> Jeder Spieler weiß von seiner Session
    -------> Jeder Bot weiß von seinen Aufgaben (Auf Fragen antworten etc..)
    ---------> Jedes Tier weiß von seinen Statistiken (Erfahrungslevel etc..)
    -----> Jedes Bodenmöbelstück weiß von seiner Rotation
    ---> Jedes "Wandobjekt" weiß von seinen Wand-Koordinaten
    -----> Wandmöbelstück

    Mir persönlich gefällt deine Package-Struktur nicht. Trenne am besten die Logik vom Rest (Server-Client-Kommunikation) total ab, indem du die Parser und Composer für Nachrichten in ein Package wie z. B. "communication" packst mit den "Unterkategorien".. "parsers" und "composers" oder "incoming" und "outgoing". Stell dir einfach immer die Frage: Wäre ich jetzt kein Client-Nutzer, könnte ich die gleichen Aktionen für meinen Raum / User / Navigator (..) leicht über Programmcode bewirken?

    Was die Sicherheit angeht: Neben dem Standardkram immer gucken, ob es denn für einen Nutzer eine Möglichkeit gibt, ein nicht gewollte Szenario herbeizurufen (Bspw. einen ungültigen Figure-Code.. etc.)

    Es scheint als würdest du eine Verschlüsselung nutzen, zumindest hast du Klassen dafür. Wenn du keine RSA-Keys, die du nicht selbst generiert hast oder oft öffentlich zeigst, verwendest, kannst du eigentlich RC4 gleich deaktivieren und Konstanten für die Keys benutzen, damit der Client nicht abschmiert.

    Cheers,
    Steve Winfield

    Normalerweise wird ein Projekt nach dem Release doch aufgehört. Außerdem Ihr erklärt das ganze zu kompliziert, da versteht man so einiges nicht, wollt Ihr jetzt ein HTML5 Client machen?

    "Normalerweise" trifft für mich auf die seltensten Fälle zu, kann dir also hier nicht zustimmen (meistens bei einem Leak). Die veröffentlichten Developer-Previews sollen Plugin-Entwicklern die Möglichkeit geben, das System bereits anzutesten und auch Anderen, die sich mit dem Thema "Habbo Server" evt. mehr befassen möchten, einen Einblick gewähren.

    Dass manche Posts manchmal fach-typische Ausdrücke enthalten, ist für uns bzw. mich unumgänglich, vor allem wenn das Thema alleine schon etwas kompliziert ist. Außerdem ist die oben genannte Theorie relativ unwichtig für die später folgende simple API.

    Cheers,
    Steve Winfield

    Einen wunderschönen Guten Abend meine Mitmenschen, hier spricht Steve Winfield.

    Bedingt geteilter Meinungen über die Implementierung der aktuellen Versionen des Habbo Hotels haben wir uns Gedanken über eine Lösung gemacht, welche die eigentliche Version des Flash-Clients möglichst irrelevant machen könnte.

    So konzentrierten wir uns verstärkt auf eine Schnittstelle für clientseitige IDK Plugins, um eine Kommunikation zwischen dem Habbo-Flash-Objekt und den Browser-JavaScript-Elementen zu ermöglichen. Nachdem wir bereits die Flash-Datei so umgeschrieben haben, sodass sie Server-Nachrichten an unseren JavaScript-Listener sendet und man ebenfalls Nachrichten an den Server über eine API senden kann, ist es uns nun eine Priorität, die UI-Elemente des Flash-Clients so in HTML nachzustellen, dass beide Bereiche perfekt harmonieren.

    Bereits fertig sind alle Buttons des Clients (HTML5):

    Für eine optimale Darstellung wird ein moderner Browser vorausgesetzt.

    Hier ein paar Tests mit einer bearbeiteten SWF:

    Spoiler anzeigen


    Die Möglichkeiten, die sich dadurch ergeben, sind relativ ausgeprägt.

    Bspw. ließe sich dadurch die Habbo Kamera relativ sicher (sicher wäre sie nur, wenn der Raum mit den Bedingungen komplett serverseitig nachgezeichnet wird, trägt jedoch viel Aufwand mit sich) in der Post-shuffle Version umsetzen. Hierfür wird über die API die Flash-UI ausgeblendet (Alles bis auf den Raum) und die Maus für den Flash-Client geblockt. Hier wäre ein erster Ansatz: http://idk.linkist.de/js/client/interface/plugins/camera.js

    Wir versuchen, weiterhin diesem Pfad zu folgen, um die für den Client möglichen Funktionen erweiterbar machen zu können. Ein Schritt mit dem wir uns von dem abspalten können, an das sich so viele nicht binden wollen.

    Cheers,
    Steve Winfield

    Hier eine kleine Entwickler-Vorschau des RoomEdit-Plugins:

    Externer Inhalt www.youtube.com
    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.

    So setzt man zwei Punkte mit Flaggen oder einen Command, die einen Quader bilden.
    Danach lässt sich der Inhalt bspw. füllen oder später auch kopieren und verschieben.

    Cheers,
    Steve Winfield

    Es wurden nun weitere Plugins wie bspw. das VIP Commands Plugin (Für alle Tester benutzbar), ein Bank Plugin inklusive Bank Raum, ein Sumo-Ringer Plugin und ein Mafia-Plugin hinzugefügt. Da sich die Mafia Bots über Cleverbot miteinander unterhalten, kann es da manchmal etwas länger dauern, bis die Bots antworten.

    Wir arbeiten derzeit an einem RoomEdit Plugin (inspiriert von World Edit, wer es kennt).

    Der Fokus des Hotels liegt auf der Suche nach Bugs.

    Cheers,
    Steve Winfield

    Nice, ein Hotel, wo man sich nicht registrieren muss :thumbup: Gefällt mir, aber du solltest das schon noch auf Deutsch übersetzen :D
    Ich fliege beim Wechseln der Kleidung nicht raus. Das Alter der Haustiere stimmt auch nicht, da steht 16000 Tage.

    Habe bis jetzt noch nicht die Zeit gefunden das zu machen, werde ich jedoch in naher Zukunft tun.

    Das mit dem Alter der Haustiere funktioniert korrekt, sind nur 1-3 meiner Tiere, die da ein Inkorrektes aufweisen.

    Cheers,
    Steve Winfield

    Um ggf. weitere Bugs finden zu können und um Umfragen durchführen zu können wurde nun ein provisorisches Testhotel erstellt. Es sind derzeit noch keine der oben genannten Plugins aktiv und der Katalog ist noch relativ offen gehalten, jedoch ist trotzdem schon eine gewisse Atmosphäre vorhanden.

    Zu finden auf folgender Seite: http://idk.linkist.de/

    Die Updates halten bzw. hielten sich in letzter Zeit in Grenzen, da ich sowie Rhinodanny relativ viel zu tun haben / hatten.

    Cheers,
    Steve Winfield

    Ja, es stimmt. Alle von der NATO gestützten Investigationen haben es sich zur Aufgabe gemacht unsere Onlineaktivitäten zu beschränken und uns somit für Wochen in einen alten DDR Bunker gesperrt. Doch der Wille an IDK zu arbeiten hat uns so stark angetrieben, dass Danny angefangen hat, die Stahltür mit seinen Zähnen zu durchbeißen.

    Danach war ich zuerst für eine Woche im Urlaub und musste dann feststellen, dass mein Computer den Geist aufgegeben hat. Der Neue kam jedoch heute, somit sollte es bald auch wieder ein Update geben.

    Cheers,
    Steve Winfield

    Es wurde unter anderem der Terrier sowie das Krokodil fertiggestellt.

    Außerdem sind wir dabei, die Funktionen der Plugins auf eine neue Ebene zu erweitern. Client-Plugins, welche ebenfalls in JavaScript vom Client ausgeführt werden, können dann nämlich mit Server-Plugins in Echtzeit kommunizieren, um den Client um eigene Funktionen zu erweitern.

    Wir stellen uns das ungefähr so vor:

    Server-Plugin

    Client-Plugin

    So in etwa versuchen wir dies umzusetzen, indem wir den AS3-Code der SWF umschreiben, sodass eine direkte Kommunikation zwischen Client- und Serverplugin möglich ist und Dinge wie die Habbo Kamera, WIRED Soundeffekte, Badge Vitrinen und weitere Dinge keine Unmöglichkeit für R63A mehr darstellen.


    Cheers,
    Steve Winfield

    Update:

    Mittlerweile lassen sich die Tiere kaufen und auch in fremde Räume mitnehmen. Außerdem ist nun der Drache samt seinem "Verbrannten Baum" auf welchem er Tricks verübt, der Hund sowie die Katze fertig. Ebenfalls können diese Tiere mit Bällen spielen. Dazu kommt, dass für jedes Nahrungsmittel ein bestimmter Nährwert eingestellt wurde.

    Was fehlt noch?

    - Einige Achievements für die Tiere
    - Die restlichen Standardtiere (Küken, Spinne, Eisbär, Terrier, Löwe, Frosch)

    -------


    Tiere wie beispielsweise der Drache sind etwas schüchterne Tiere, bedeutet, sie drücken ihre Stimmung meistens über Icons über ihren Köpfen aus anstatt diese im Chat mitzuteilen.


    Cheers,
    Steve Winfield

    Aktueller Stand der Dinge:

    * Es funktionieren bis dato 80% der Tier-Kommandos
    * Alle Nachrichten der Tiere, welche auf ihre Stimmung basieren, lassen sich konfigurieren
    * Das Hochleveln von Tieren funktioniert
    * Tiere verlieren Energie, wenn Kommandos ausgeführt werden und es besteht eine 50% Wahrscheinlichkeit, dass sie die Aktion ausführen und XP gewinnen
    * Wenn Tiere hungrig sind, suchen sie sich etwas zum Essen
    * Wenn Tiere durstig sind, suchen sie sich etwas zum Trinken
    * Wenn Tiere etwas essen, bekommen sie viel Energie
    * Das Glücksgefühl der Tiere steigt, wenn sie satt und sitt sind.
    * Das Glücksgefühl der Tiere nimmt ab, wenn ihre Energie voll ist und niemand mit ihnen spielt
    * Schläft ein Tier in einem Korb/Nest, bekommt es mehr Energie, als, wenn es auf dem Boden schläft
    * Ist ein Tier unglücklich, lassen sich mit ihm keine Kommandos mehr ausführen
    * Wenn man das Tier krault, gewinnt es 10 XP sowie 10 Glücksgefühl-Punkte.
    * Wassernäpfe lassen sich durch einen Doppelklick kostenlos wieder auffüllen.

    Was wir noch zu tun haben:

    * Die restlichen Tier-Kommandos (bspw. bestimmte bei dem Drachen)
    * Das Einstellen in der Datenbank von spezifischen Nahrungen sowie spezifischen Körben.
    * Das Kaufen von Tieren im Katalog.
    * Das Erscheinen von Stimmungs-Icons bei Tieren wie beispielsweise Schildkröten oder Küken.
    * Items zum Spielen (bspw. Bälle bei der Katze, ein Baum bei einem Drachen)

    Cheers,
    Steve Winfield

    Ich werde auf jeden Fall das Beta Hotel mal besuchen, das klingt schon mal nach etwas großen. Gibt es grenzen bei den Plugins?

    Die Möglichkeiten der Plugins sind nahezu endlos und dort wo die Möglichkeiten fehlen, helfen wir nach. Es wird später auch Abstimmungen geben, bei welchen Plugin-Entwickler entscheiden können, welche Möglichkeiten ihnen als nächstes gegeben werden sollen.

    Aktuell arbeiten wir an den Haustieren, welche wir voll funktionstüchtig machen wollen.

    Cheers,
    Steve Winfield

    "Ebenfalls wurden Fehler beim Setzen der Matrix behoben." - Und was bedeutet das ? Du redest sehr sehr oft immer nur daher, erklär das mal für den DAU..

    Die Matrix (aus der Mathematik) in diesem Fall beschreibt eine Map (Tabelle) mit x, y in welcher alle Raum-Positionen gespeichert sind. Der behobene Fehler beim Setzen in diesem Fall war, dass diese Position immernoch dachte, dass ein Spieler auf dem Feld steht, wenn dieser beim Übergang von einer Position auf die andere den Raum gewechselt bzw. verlassen hat.

    Jedoch habe ich diese Information weggelassen, da sie für diesen Thread keinerlei Bedeutung hat.

    Cheers,
    Steve Winfield