Die Geschichte der Erschaffung einer Weltkarte für das Spiel „C & C Tiberium Alliances“. Post mortem

    Hallo allerseits! In diesem Beitrag möchte ich die Erfahrung des Erstellens und Entwickelns eines Dienstes für ein bekanntes Online-Spiel teilen.

    Das Leben darin erwärmt sich immer noch, aber ich denke, es ist bereits möglich, endgültige Ergebnisse zu erzielen.

    Lange vor der Veröffentlichung wurde ich auf dieses Spiel aufmerksam und konnte mich unter den ersten Beta-Testern platzieren. Ich hatte nicht viel von einem Browsergame erwartet, aber das Interesse forderte seinen Tribut. Ziemlich schnell fand ich eine adäquate russischsprachige Gemeinschaft und schloss mich einem der Clans an.

    Die erste Frage, die sich stellte, war „Wo bin ich?“. Den Kanonen des Genres folgend, schlug ich vor, ein Radar zu bauen. Aber aus irgendeinem Grund war er nicht da. Außerdem war ich überrascht, dass die Minikarte überhaupt nicht im Spiel enthalten ist. Was angesichts des gigantischen Spielraums sehr seltsam war. Darüber hinaus enthielten die unmittelbaren Pläne der Entwickler, wie sich später herausstellte, nicht die Erstellung.

    Nachdem ich die Server-API ein wenig studiert hatte, fand ich heraus, wo ich die benötigten Daten finden konnte - Listen der Benutzer mit ihren Datenbanken. Für ein paar Stunden schrieb ich einen Parser in PHP. Schwierigkeiten traten nur mit Genehmigung auf. Es war zweistufig, mit Hashes und Überschriften, aber sie erlag. Erblindete auf dem Knie eine Seite, auf der er einfach die Namen der Spieler mit absoluter Positionierung anordnete und auf ein kostenloses Hosting hochlud. Die Suche auf der Karte wurde mit dem Browser "Strg + F" durchgeführt, genau wie das Skalieren der Karte mit "Strg + Mausrad". Ich habe diese Kreation mit meinem Clan geteilt. Es stellte sich heraus, dass die Karte nicht nur mir fehlte. Als die Clanmitglieder sie sahen, waren sie sehr glücklich und die Clan-Führung „befahl“, sich nicht über die Karte außerhalb des Clans zu verbreiten.

    Am nächsten Tag habe ich die Karteninformationen im allgemeinen Gaming-Forum veröffentlicht. Dafür wurde er aus dem Clan ausgeschlossen, erhielt aber jede Menge positives Feedback von den Spielern. Inspiriert von einer solchen Reaktion entschloss ich mich, die Karte weiterzuentwickeln.

    Zuerst habe ich versucht, die Namen der Spieler durch Markierungen aus den HTML-Tags zu ersetzen, aber beim Skalieren sah alles gruselig aus. Der zweite Versuch war die Verwendung von svg, aber die Leistung war schlecht. Es gab nur Leinwand, und hier raschelte alles schon viel schneller.

    Die erste Veröffentlichung auf Leinwand sah so aus:



    Nach der Einführung einiger weiterer Funktionen wurde meine Ressource täglich zehntausend Mal aufgerufen. Mit der Zunahme der Nutzerzahl wurden immer mehr Spieleserver im Spiel eröffnet. In diesem Moment analysierte ein Server (Spielwelt) ungefähr eine Stunde lang. Es stellte sich heraus, dass mit zunehmender Anzahl die Karte jedes einzelnen Servers immer weniger aktualisiert wurde. Die Relevanz der Daten sank schnell, die Nutzer begannen sich zu beschweren.

    Die Einführung von Curl Multisocket reduzierte zwar die Parsing-Zeit einer Welt um die Hälfte, konnte das Problem aber nicht endgültig lösen. Zu meinem Glück hat mich einer der Entwickler in PM abgemeldet. Verweisen auf die Funktionen im Code, die für die Arbeit mit dem Datenübertragungsprotokoll, das Erstellen von Abfragen und das Parsen von Informationen zum Rendern der In-Game-Landschaft verantwortlich waren. Nach mehreren Versuchen zur Minimierung der Anzahl der Anfragen wurde die Parsing-Zeit eines Servers auf 6 Minuten reduziert.

    Inspiriert von diesem Glück, begann ich neue Features mit verdoppeltem Eifer zu sehen. Es wurde die Möglichkeit hinzugefügt, taktische Manöver auf der Karte zu zeichnen und zu teilen, das Farbschema vollständig zu ändern und die Symbole anzupassen. Und wieder geriet alles in einen Parser, als sich die Anzahl der Welten auf rund 100 erhöhte.


    Es wurde beschlossen, das Backend komplett neu zu schreiben. ZeroMQ wurde als Grundlage genommen, es gab Manager für Autorisierung, Parsing, Upload bzw. eine Gruppe von Arbeitnehmern für sie + ein Überwachungssystem für diese Freude. Die Frage bleibt, wohin das alles führen soll. Für eine normale Projektleistung würden die Hosting-Kosten nur vom Raum getragen. Eine Serversuche in der Gaming-Community führte nicht zu den gewünschten Ergebnissen. Ich habe das Problem gelöst, indem ich mir eine neue Hardware mit Hardware-Unterstützung für die Virtualisierung gekauft habe. Zumal ich mich schon lange damit beschäftigen wollte. Ich machte eine virtuelle Maschine für mich selbst, nachdem ich dort Vidyuha und einen Teil der USB-Ports geworfen hatte. Im übrigen habe ich das System erhöht, und einige der virtuellen Systeme waren Linux, ein Teil von Windows. Aufgrund der Merkmale der Implementierung von 0mq Bindung. Es gab auch Probleme mit der Verfügbarkeit des Dienstes, immer noch nicht Tier 4 :), aber der Providerwechsel stabilisierte alles.

    Die Karte hatte die folgende Form:



    Parallel dazu begann ich, einen Client für Android zu entwickeln. Ich nahm meine PHP-API, portierte sie nach Java und erweiterte sie, implementierte die grundlegenden Funktionen. Etwa zur gleichen Zeit wollte sich ein Encoder aus Chicago mit der Entwicklung verbinden, was mich ziemlich überraschte. Die Aufgabe fiel ihm auf die Schulter, eine E-Mail-Benachrichtigung des Spielers über den Angriff oder die Zerstörung seiner Basis zu implementieren. Ein C # -Kollege schrieb einen Abonnenten für den Parser, der alle Basen aller Spieler auf allen Welten verfolgte.

    Aber im Nu hörte alles auf. Mein "Insider" sagte, dass EA das Projekt für unrentabel hielt. Ihr Team wurde aufgelöst und auf andere Projekte verteilt. Die Entwicklung des Spiels war eingefroren. Dementsprechend war die Entwicklung des Kunden und des Dienstes auch für ein totes Projekt nicht mehr angemessen, und ich habe ihnen ein Ende gesetzt.

    Momentan sind 2,5 Tausend Personen an meiner Karte beteiligt. Die Werbeeinnahmen seit Juli 2012 beliefen sich auf 5.000 Dollar. Donat ist weniger als 200.

    PS Beim Schreiben eines Artikels war Hetzner plötzlich beleidigt, dass ich 100.000 Post-Anfragen pro Tag von einer IP aus erledigte und 5 TB Traffic pro Monat hochlud.

    Die Bibliothek, die ich für die Arbeit mit 0mq geschrieben habe, kann hier eingesehen werden: https://github.com/limitium/0MQ . Wenn jemand interessiert ist, erstelle ich eine Readme-Datei und erstelle ein Paket für den Komponisten. Nichts fließt, pflügt 2 Jahre lang rund um die Uhr.

    Das Gesicht des Projekts finden Sie hier: github.com/limitium/C-CTA-map-frontend

    Jetzt auch beliebt: