ar3play: webbasierte Missionsreplays

  • Moin,
    Ich habe vor einigen Wochen ein Projekt begonnen, um den Analyse- bzw. zurückspul-und-replay-Bedarf meiner Gruppe (und meiner selbst) umfassend zu befriedigen.


    Mein Ziel sind Missionsreplays:
    * im Browser
    * mit (theoretisch) unbegrenzter Speicherdauer
    * schnell vorspulbar
    * frei zoombar (Google Maps)


    Das Kind heißt ar3play ist in seinen Grundfunktionen inzwischen benutzbar. Ich baue auf folgenden existierenden Projekten auf:
    * Micoverys sock.dll und sock-rpc
    * 10Ts gekachelten Karten von Altis, Stratis, Chernarus und Takistan
    * den Google Maps Javascript-Bibliotheken


    Die Software besteht aus drei Teilen:


    * die aufzunehmende Mission muß angepaßt werden , und sendet dann Spielerpositionen und andere Daten regelmäßig per sock-rpc an
    * einen NodeJS-Server, der die Daten in eine Redis-Datenbank pupst, und sie bei Anforderung über eine REST-Schnittstelle ans Internetz weitergibt, wo
    * eine Webanwendung sitzt, die alles zur Auswahl stellt und schön zoom- und vorspulbar macht.


    Voraussetzungen sind also:
    * sock.dll / sock.so - Extension
    * NodeJS
    * Redis-Server
    * Die Karten von 10T


    Das ganze schaut dann zB so aus:


    [ATTACH=CONFIG]239[/ATTACH]



    Bei Interesse geb ich gern mehr Details – bzw schreib mehr Doku. Auch liegt der ganze Shit auf github und ist entsprechend gut einsehbar :)


    Die aktuelle live-Version ist zur Zeit auch auf http://gruppe-adler.de/maps zu finden.


    Probleme hab ich im Moment keine, featuremäßig ist massig Luft nach oben - allerdings gibt es durchaus eine Sache, wo man mit genug Größenwahn an Grenzen stoßen wird: Aufrufe von sock_rpc sind ziemlich teuer. Wenn man aus der Mission heraus zehnmal pro Sekunde die Schnittstelle anpingt, leiden die Server-FPS erheblich. Alle ein bis zwei Sekunden Daten übertragen verträgt Arma aber problemlos.

  • Mit dem WarRoom und dem Database-Modul bietet es diese Funktionen bereits


    Ah, ich wußte nicht, daß die ALiVE-Leute auch sowas machen.


    Ich hab mir grob das Video zum WarRoom angeguckt (wtf, warum schreiben die nicht einen Text dazu?).
    Beeindruckend.


    Bin dann an der Stelle ausgestiegen wo die Worte "VisualStudio" und ".NET" auftauchten... ich habe nur Linux-Server ;)


    Nicht ganz klar geworden ist mir (oder vllt weigere ich mich auch nur ein 10'-Windows-Geklickere gründlich anzugucken, um ein paar grundlegende Infos zu kriegen), ob dafür clientseitig / in der Mission das "normale" ALiVE aktiv sein muß - das wäre mein zweites KO-Kriterium.

  • Mal so ne dumme Frage wieso brauchst du den NodeJS wenn du direkt von Arma über ein Plugin in die Redis DB schreiben kannst?


    Bezüglich von Missions Anpassung kann man mittels eine Config recht sauber lösen.
    Ich würde das ganze wie ein Server Addon händeln.


    MfG


    PS: Hilfe zum Redis Plugin kann ich im Moment nicht geben da ist noch nicht Public ist (werde es bestimmt noch releasen).

  • :001_tt1: Da ich kein "Alive Fan" bin (ich bräuchte halt nur 2 Sachen aus den gefüllten 1000), finde ich dein Projekt sehr interessant und werde es weiter beobachten. :thumbup1:

    Passwords are like underwear. You should change them often (okay, maybe not every day). Don’t share them. Don’t leave them out for others to see (no sticky notes!). Oh, and they should be sexy. Wait, sorry, I mean they should be mysterious. In other words, make your password a total mystery to others.
    :thumbsup:

  • Mal so ne dumme Frage wieso brauchst du den NodeJS wenn du direkt von Arma über ein Plugin in die Redis DB schreiben kannst?


    NodeJS brauch ich sowieso für die REST-Schnittstelle.


    Wegen direkt aus Arma auf Redis schreiben: du meinst, hiermit https://github.com/Torndeco/extdb2 ?


    Könnt ich wohl, aber dann müßt ich etwas mehr Code in die Missionen schreiben.
    Und ich möchte sowenig wie möglich Code auf dem Gameserver haben


    * weil mich sqf-Scripting nervt
    * weil ich so wenig wie möglich Last auf den Armaserver legen will


    Und schlußendlich ist es erheblich sauberer, für eine Aufgabe (hier: Persistenz) nur eine Komponente (hier: NodeJS-Service) zu benutzen.


    Die Dreiteilung meiner Anwendung ist ein *Feature* ;)

  • Nee extdb2 ist mir persönlich zu langsam. Hab da ne schnellere Eigenentwicklung.
    Braucht nur sehr wenig Code und hat kein String Limit was extdb2 leider immnoch hat.


    Hatte mal vor einem Jahr zu Spaß 2 Server gesynct über eine DB. Auf dem einem waren Spieler und auf dem Andrem war die Organisations Leitung. Diese hatte wie in einem RTS Befehls Gewalt und konnte Ziele, Mission und Squads zusammenstellen.


    MfG

  • Hatte mal vor einem Jahr zu Spaß 2 Server gesynct über eine DB


    Jetz wirds OT, aber... omfg. Mit etwas Aufwand könnte man aus Arma ein MMOG machen. Jeder Server ist für einen bestimmten Bereich der Insel zuständig. Das müßte sich dynamisch von selbst anpassen, damit kein Server überladen wird wenn sich irgendwo mehr Leute treffen.
    Wenn du an die Grenze des Einzugsbereichs kommst, kriegst du ne Nachricht und mußt den Server wechseln.
    Auf dem neuen Server spawnst du an derselben Stelle mit dem selben Loadout.
    Für Spieler die sich in den Übergangsbereichen treffen, werden KI-Einheiten gesetzt, die sklavisch das imitieren was der jeweilige Spieler aufm andern Server grade treibt.


    Es gäbe gigantomanische Lags und noch viel schlimmere Dinge, aber der Gedanke 10 Armaserver zusammenzuschließen macht mich trotzdem hibbelig. ^^

  • @ Fusselwurm: Ich glaube an einem solchen Möglichkeit der Nachbearbeitung von Missionen hätten mehrere Clans / Squads Interesse.


    Ich weiß, das bei der IXXL Liga (Real War Liga) einmal ein Betreiber genau ein solches Tool für ArmA2 gebaut hatte. Auch die „virtuelle Panzergrenadierbrigade 37“ nutzte zu Ihren „Beginner Zeiten“ ein solches Tool.


    Ich selber hätte sehr großes Interesse, gibt es einen neuen Sachstand zu dem Thema?

  • Ich selber hätte sehr großes Interesse, gibt es einen neuen Sachstand zu dem Thema?


    Ich hab 'nen Mitstreiter gefunden, scheint mir: Dahlgren (ZiP auf irc.gamesurge.net:6667/#arma3 , Mitgründer von http://anrop.se/ ) hat den Arma-seitigen Code in ein Addon gepackt, um nich an den Missionen rumschrauben zu müssen: https://github.com/Dahlgren/ar3play-addon


    Beim Webclient tut sich auch was - die Soldatenmarker drehen sich jetzt auch je nach Blickrichtung. Weitere Fahrzeugmarker kommen am Wochenende dazu.


    Pull requests / zusätzlicher Code wird gern angenommen. :)

  • und if else if else if else...... ist sehr langsam


    Wat.


    Das evaluiert drei verschiedene Bedingungen:


    Code
    1. if () then {};
    2. if () then {};
    3. if () then {};



    Und das hier *ein bis drei* verschiedene Bedingungen:


    Code
    1. if () then {
    2. } else {
    3. if () then {
    4. } else {
    5. if () then {};
    6. };
    7. };


    Letzteres sollte doch bitteschön im Schnitt fixer sein. Ist BIS' Interpreter *noch* behinderter als ich dachte?

  • PHP
    1. classtype = [
    2. 'mg', 'mg', 'mg',
    3. 'officer', 'officer', 'officer',
    4. 'leader', ...
    5. ] select ([
    6. 'B_Soldier_AR_F', 'I_Soldier_AR_F', 'O_Soldier_AR_F',
    7. 'B_Soldier_SL_F', 'I_Soldier_SL_F', 'O_Soldier_SL_F',
    8. 'B_Soldier_TL_F', ...
    9. ] find (typeOf _x));


    ist am schnellsten.


    Jedoch ist Creedcoder's Methode universell und funktioniert (wahrscheinlich) auch wenn Mods im Spiel sind ohne Anpassungen, während man hier die meiste (Schreib-)arbeit hat.


    Edit:
    Ich habe mir dein Projekt nicht so genau angeschaut, aber ich würde empfehlen die Spielerklasse, so wie sie ist, an den Server zu übertragen. Dann kannst du auf dem Server die Darstellungsart (ich denke darum geht es hier) wählen. Damit ist dein Script dann kompatibel zu allen kommenden Spielerklassen/-änderungen und du musst lediglich den Server (Darstellung) anpassen ohne das Script zu verändern.
    Du kannst dann auch auf dem Server abfangen wenn er unbekannte Klassennamen empfängt und dir dafür das passende Icon raussuchen.


  • http://community.bistudio.com/wiki/Code_Optimisation


    Ist mal ein blick wert ^^

  • Zitat von [C-L-F] NetFusion;1458

    ich würde empfehlen die Spielerklasse, so wie sie ist, an den Server zu übertragen


    Ja, hatt ich auch dran gedacht -- hieße allerdings, daß dann der ar3play-server mehr wissen müßte als er bisher weiß.


    Beispiel: ich benutz ARC-Einheiten.

    Code
    1. _unit kindOf '[COLOR=#000000][COLOR=#DD0000]B_Soldier_AR_F'[/COLOR][/COLOR]

    für 'nen ARC_GER-MG-Schützen wird mir

    Code
    1. true

    zurückgeben, weil die Jungs von ARC nicht doof sind, und von den BIS-Klassen erben. Damit der ar3play-server mir das selbe zurückgibt, müßt er halt alle Klassenhierarchien kennen.
    Wenn mir das einer einbaut für alle denkbaren Mods *und pflegt* -- dann gerne, ich selbst hab dazu keinen Bock ;)


    Ich glaub auch, daß performancetechnisch am ehesten was aus sock-rpc und dem ganzen socketquatsch rauszuholen ist.
    Da passiert der aufwendigste Shit, den sollte man angehen bevor ich hier Mikrooptimierungen mit if und else einbaue :)

  • Wie wäre es wenn du einfach die Beschreibung der Klasse aus der cfg ziehst? GetText wäre da meine Idee dann kannst du das ei fach übergeben und direkt anzeigen lassen. Ist dann auch Automatisch zu allen Mods kompatibel und wäre um einiges weniger Code.


    Kann dir jetzt leider kein Snippet posten da ich auf der Arbeit mit dem Handy schreibe ;P

  • Wie wäre es wenn du einfach die Beschreibung der Klasse aus der cfg ziehst?


    Ha, interessante Idee! Andererseits fühlt sichs auch ziemlich hacky an. Ich würd mich ungern darauf verlassen wollen, daß eine Beschreibung ein bestimmtes Keyword enthält
    (da fehlt mir allerdings Arma-Wissen: sind Beschreibungen übersetzt? Genügen die immer einem bestimmten Format?).


    Und jetzt fällt mir auch auf warum alles was auf typeOf basiert für mich nicht funktioniert: ich brauche isKindOf weil das die Möglichkeit ist, Elternklassen mit einzubeziehen in die Suche. :)