Hallo allerseits! Mein Name ist Maxim und ich möchte Ihnen die Geschichte der Entstehung des Wasteland Wars-Projekts erzählen. Ich hoffe, Sie werden interessiert sein, und vielleicht kann Ihnen einiges davon helfen, meine Fehler zu vermeiden.
Plattformauswahl
Telegramm ist eine sehr ungewöhnliche Plattform zum Erstellen von Online-Spielen. Besonders wenn es um MMORPGs geht. Ich fragte mich, ob es überhaupt möglich war, auf dieser Plattform ein Qualitätsprodukt zu erstellen, und wenn ja, ob überhaupt eine Nachfrage danach besteht. Im Juni 2017 begann ich mit der Entwicklung von Wasteland Wars.
Viralität
In den frühen Tagen der Entwicklung wurde beschlossen, eine Fokusgruppe aus meinen Freunden für einen Spieletest zusammenzustellen. Schließlich war das Testen allein im Umgang mit IMO problematisch. Also habe ich den Closed Beta-Test des Spiels gestartet und über einmalige Schlüssel auf den Bot zugegriffen. Nachdem ich solche 10 Stücke erzeugt hatte, schickte ich sie an meine Freunde in TG. Das Überweisungssystem wurde bereits zu diesem Punkt hinzugefügt, obwohl es angesichts der geschlossenen Tests tatsächlich nicht funktionierte. Das Wesentliche ist, dass für jede Person, die im Spiel registriert ist, gemäß Ihrer Referenz. Link, der Spieler erhält +1 auf die maximale Ausdauer und einige Obergrenzen (lokale Währung) für Taschenausgaben. Dies führte dazu, dass 2 Wochen nach Beginn der PTA 50 Personen daran teilnahmen und meine privaten Nachrichten mit Anfragen von Personen überfüllt waren, ihnen weitere 1-2-10 Schlüssel für ihre Freunde zu geben. Anstatt ständig neue Schlüssel zu generieren, habe ich mich darauf konzentriert, die beim Testen festgestellten Fehler zu beheben und einen offenen Beta-Test zu starten, bei dem die Registrierung nach Schlüsseln aufgehoben wird. Am ersten Tag von MBT haben sich 120 Personen für das Spiel angemeldet. Einen Monat später waren täglich 200 bis 250 Personen online, und die Gesamtzahl der registrierten Spieler näherte sich 800. Und dies alles ohne Bewegung seitens des PR-Spiels, wurde das Spiel ausschließlich dank Mundpropaganda und Empfehlungssystem bekannt.
Projektfunktionen, die den Spielern gefallen haben
Während des Tests stellten die Spieler ein Spielgenre fest, das für dieses Format äußerst ungewöhnlich war, vollwertige PVP-Schlachten und das Pumpsystem eines Spielers ohne klassische Fertigkeitspunkte und Level-Ups. Was mich jedoch überraschte: Am allermeisten lobten die Leute die Spieltexte, insbesondere die Qualität des Humors, Hinweise auf die Populärkultur und atmosphärische Situationen, im Gegensatz zum schwarzen Humor mit ihrem Drama.
Technische Details
Die ersten Schwierigkeiten im Zusammenhang mit der Bot-API-Plattform traten bereits in den ersten Tagen der Entwicklung auf. Telegramm hat zwei Hauptsysteme, um ihre Bots mit Ihrem Server zu verbinden: das sogenannte Long Polling und Webhooks. Der erste impliziert, dass Ihr Server das Telegramm in einem bestimmten Intervall ständig nach neuen Anforderungen abfragt und es gegebenenfalls verarbeitet, indem er eine Bot-API-Antwort zurückgibt. Die zweite ist etwas schwieriger zu implementieren - sie besteht darin, dass Ihr Server Telegram mitteilt: "Wenn Sie Anfragen haben, legen Sie diese an dieser Adresse ab." Dementsprechend sind zur Implementierung des Bots mithilfe der Webhooks-Technologie eine permanente IP-Adresse und ein SSL-Zertifikat erforderlich, die zumindest selbst signiert sind. Nachdem ich mit der Entwicklung auf Basis von Long Polling begonnen hatte, bemerkte ich zu Beginn keine Probleme im Zusammenhang mit dieser Methode. Nach einem Tag im Dauerbetrieb stürzte der Bot jedoch unerwartet ab. Das Telegramm gab einen Fehler zurück, als es eine Anfrage erhielt. Wie sich herausstellte, plagt dieses Problem absolut alle auf Long Polling basierenden Bots - das Telegramm schließt die Anforderungsverarbeitung vom Bot nach einiger Zeit ab, weshalb Sie es ständig neu starten müssen. Zuerst beschloss ich, den "Reanimations" -Prozess des Bots zu automatisieren, indem ich ein Cron-Skript schrieb, um den Puls des Prozesses zu überprüfen und neu zu starten, wenn der Patient nicht auf einen Stockstoß reagierte. Dieser Prozess des ständigen Neustarts verursachte den Spielern jedoch Unannehmlichkeiten hat einige Zeit gedauert und auch die aktuellen Timer im Spiel zurückgesetzt. Infolgedessen wurde das Projekt auf Webhooks übertragen, und dieses Problem verschwand sofort.
In Bezug auf die Komplexität der Bot-API selbst war alles ruhig. Bis zu einem Moment.
Das Projekt gewann an Umfang, baute sein Publikum auf und entwickelte sich ständig weiter. Irgendwann wurde der Bot nach Erhalt der Anfrage plötzlich "langweilig". Genauer gesagt gab es eine Verzögerung bei der Reaktion des Bots auf den Spieler. Zunächst stieg ich auf den Server und dachte, dass er die wachsende Anzahl von Anfragen nicht mehr bewältigen konnte. Aber nein, die Serverlast hat in Spitzenzeiten 30% nicht überschritten, es gab keine Probleme mit dem freien Speicher, es gab keine Fehler und Warnungen im Systemprotokoll. Aber die Bremsen wuchsen weiter. Wie sich herausstellte, begann der Bot, sich hinsichtlich der Anzahl gleichzeitiger Anforderungen an das Bot-API-Limit zu stützen. Zuerst habe ich den Bot erfolgreich reduziert und optimiert, um diese Menge zu reduzieren. Als sich das Spiel jedoch auf die Massen ausbreitete, wurde klar: Sehr bald wird der Bot diese Obergrenze erreichen und keine Optimierungen werden mir helfen. Dann wurde beschlossen, zur Unterstützung von Telegram mit der Bitte zu schreiben, die Limits speziell für meinen Bot zu erhöhen. Und zu meiner großen Überraschung antworteten sie am nächsten Tag und das Limit wurde erhöht, obwohl sie keine neue Schwelle nannten. Außerdem informierten sie mich, dass der Bot auf dem Limit für eine bestimmte Art von Anfrage ruht - Rückruf auf die sogenannte. Inline-Schaltflächen. Dies ist die Tastatur im Telegramm, die unter einer bestimmten Meldung angezeigt wird. Bei Textanforderungen (einschließlich Anfragen mit normalen Schaltflächen) ist das Limit viel höher, und es gibt auch kein Limit von 15 Sekunden für eine Antwort vom Server. Das Problem war, dass 70% der Benutzeroberfläche des Spiels auf Inline-Schaltflächen basiert. Ich musste es komplett verarbeiten, um dieses Übel loszuwerden, so bequem und schön.
Das nächste Problem, auf das das Projekt stieß, war bereits in meiner Entwicklungsumgebung und in meinem Code. Insbesondere in Python 3 und wie es mit Threads funktioniert. Jeder neue Thread in Python 3 wird zusammen mit Umgebungsvariablen erstellt und verbraucht viel Speicher. Das Spiel ist voll von Timern (2 Minuten, um zwischen Orten zu wechseln, auf einen Kampf zu warten usw.), und das Starten in separaten Streams verursachte einen Speicherverlust. Während das Online-Spiel wächst, hat das Leck ein verrücktes Ausmaß erreicht, das den gesamten möglichen RAM verschlingt und den verbleibenden Speicher des SSD-Servers aufpumpt. Das Problem wurde natürlich gelöst, indem Warteschlangen von Timern erstellt wurden, die für jeden Typ in einem Thread verarbeitet werden.
Visueller Teil in einem Textspiel
Eines der Hauptmerkmale von Wasteland Wars im Vergleich zu anderen ähnlichen Spielen in Telegram war die Einführung des visuellen Teils. Ein interaktiver Avatar des Charakters wurde dem Spiel hinzugefügt sowie eine visuelle Anzeige jedes Ausrüstungsgegenstandes im Spiel. Wie bei RPGs in voller Größe auf Spielplattformen kann ein Spieler seinen Charakter in verschiedene Rüstungen kleiden, ihm verschiedene Waffen geben und dann alle Änderungen visuell sehen. Wenig später entwickelte ich diese Idee. Wenn sich jetzt ein anderer Spieler im Spiel trifft, wird auch sein Avatar angezeigt. Auf diese Weise wird es möglich, das Pumpen des Feindes nicht zu kennen und seine Gefahr im Aussehen zu bewerten. Zusätzlich zur Ausrüstung werden auf dem Avatar auch „Masken“ angezeigt - sie können gegen Spende gekauft werden, sie bieten dem Spieler keinen Vorteil, aber sie ändern sein Aussehen im Avatar. Außerdem wurde im Spiel eine vollständige interaktive Karte angezeigt. Wenn ein Ort gefunden wird, wird er dem Spieler auf der Karte hinzugefügt.
Alle Bilder werden in einer relativ niedrigen Auflösung angezeigt, die ausreicht, um ihren Inhalt zu verstehen. Dies liegt an der Tatsache, dass Avatare und Karten aus vielen verschiedenen Elementen für jeden Spieler gesammelt werden und bei einer großen Anzahl gleichzeitiger Anforderungen ihre Zusammenstellung in hoher Auflösung den Spielserver erheblich belasten kann.
Projektentwicklungspläne
Im Moment wird das Spiel nach Go kopiert - diese Sprache ist, wie sich herausstellte, viel besser für die Entwicklung eines solchen Projekts geeignet. Mit meinem eigenen Webserver in Go und seiner Geschwindigkeit konnte ich meine eigene API für das Projekt erstellen, um es von einer einzigen Plattform in Telegram zu lösen. Mit der API können Sie Anforderungen von jedem Client empfangen und verarbeiten, und die gesamte Logik wird nur auf dem Server verarbeitet.
Die Entwicklung eines Clients für jede Plattform ist so einfach wie der Client selbst. Dadurch werden viele Einschränkungen von Telegram vermieden, Schwierigkeiten beim Blockieren vermieden und eine große Anzahl neuer Zuschauer für das Spiel gewonnen.