NoobLauncher

Sauerbraten bietet eine kleine und einfache Skriptsprache namens CubeScript an. Sie ist sicherlich an LISP angelehnt und unterliegt einigen Restriktionen. Eigentlich kann man gar nichts damit machen – war mein erster Gedanke. Aber um ein paar Admins auf der NoobLounge das Leben leichter zu machen, erstellte ich eine einfache GUI. Was anfangs ein kleines Skript war, entwickelte sich schnell zu einem ganzen Framework. Der NoobLauncher ist dabei an Anwender und CubeScript-Entwickler gerichtet. An Anwender, denn es stehen zahlreiche Plugins zur Verfügung, die Sauerbraten um einige nützliche Funktionalitäten erweitern. An Entwickler, denn es stehen Bibliotheken, ein Plugin-Mechanismus inklusive dynamisches Laden von Plugins, Logging, Events usw. zur Verfügung und damit lassen sich Anwendungen in CubeScript auf einer höheren Abstraktionsstufe entwickeln. Unglaublich aber wahr: der NoobLauncher kann durch einen ausgeklügelten Mechanismus sogar Einstellungen persistent speichern.

Welche Funktionalität bietet der NoobLauncher für Anwender?

Anwender können durch das Installieren des NoobLaunchers Sauerbraten durch viele Funktionalitäten erweitern. Die meisten von ihnen sind als Plugins realisiert. Einige der Plugins sind inspiriert von CubeScript Snippets von Quadropolis. Der NoobLauncher bietet jedoch den Vorteil, dass man nicht selbst danach suchen muss, dass sie wie in einem Paketmanager verfügbar sind und nach persönlichen Preferenzen aktiviert oder deaktiviert werden können. Die meisten der Plugins lassen sich zudem noch konfigurieren.

Die folgende Liste von Plugins dürfte einen ziemlich guten Überblick geben, was der NoobLauncher zu bieten hat:

  • aboutyou: Fügt ein Tab im Nooblounge-Menü hinzu, der Informationen über Dich gibt und kleinere Aktionen auf NoobLounge erlaubt
  • altmainmenu: Ersetzt bzw. erweitert das Hauptmenü (Taste: ESC)
  • autospec: Setzt dich automatisch nach einer konfigurierbaren Phase der Inaktivität (z.B.: 2 Minuten) in den Spectator Modus. Zuvor wird man jedoch davor gewarnt.
  • changemap: Erlaubt das Wechseln der Map auf NoobLounge Servern
  • ctfgui: Nützliche Phrasen, wenn man CTF spielt
  • fileeditor: Ein Dateieditor und dazugehöriger Dateibrowser
  • germankeymapextension: Fügt Umlauttasten zu den nutzbaren Tasten hinzu
  • hifriends: Begrüsst nach dem Login automatisch alle auf dem Server befindlichen Freunde
  • keyeditor: Zuordnung von Tasten zu registrierten Funktionen
  • login: Erlaubt das Einloggen auf NoobLounge Servern
  • movierecorder: Aufzeichnen von Videos mit einstellbaren Optionen und Effekten
  • musicplayer: Spielt benutzerdefinierte Musik ab.
  • nlabout: Ein einfaches NoobLounge “Über Uns” Tab im NoobLounge Menü
  • nlgameplay: Optionen und Befehle für NoobLounge Server bezüglich des Gameplays
  • nlstats: Anzeige von Statistiken von Nooblounge
  • nlservers: Fügt die Nooblounge Server zur Serververwaltung hinzu
  • optionseditor: Erlaubt das Bearbeiten aller registrierten Optionen
  • outlaw: Ändert die Bezugsquelle für die Serverliste
  • playercontrol: Erlaubt das Ausführen von Administrator Befehlen auf NoobLounge Servern, z.B. Mute, Kick, Warn
  • pluginmanager: Darstellen aller Plugins und Bearbeitungsmöglichkeit des Codes von innerhalb des Spiels
  • randomsay: Aus einer Liste an möglichen Phrasen wird eines zufällig ausgewählt und gesagt
  • saygui: Nützliche Phrasen, allgemein
  • screenshooter: Erzeugen von netten Screenshots, ähnlich wie der MovieRecorder können Effekte verwendet werden
  • servermanager: Verwalten von Servern
  • speccontrol: Erlaubt das Specen und Unspecen von Spielern auf NoobLounge Servern
  • tweek: Nützliche Anpassungen wie MaxFPS usw.
  • wheelzoom: Nutze das Mausrad als höchstkonfigurierbaren Zoom, außerdem zwei- und dreistufiger Zoom

Welche Funktionalität bietet der NoobLauncher für CubeScript-Entwickler?

Das Framework auf Basis von CubeScript erlaubt es, relativ schnell Plugins zu entwickeln. Oft genutzte Mechanismen wurden dazu abstrahiert und global zur Verfügung gestellt. Insbesondere ist dieses Framework Plugin-fähig, was bedeutet, dass es erweitert werden kann.

Namespaces: Es ist darauf zu achten, dass jedes Plugin seinen Namespace einhält. Nehmen wir an, das Plugin hieße ””musicplayer”” würden es eine Option ””MUSICPLAYER_FOLDER”” geben, die eine globale, registrierte Option wäre. Programmierer können sofort erkennen, welches Plugin für diese globale, registrierte Option verantwortlich ist. Gleiches gilt für globale, registrierte Keys, usw.

Lokale Funktionen und Variablen sollten ebenfalls mit dem Namespace geprefixed werden, z.B. ”_MUSICPLAYER_NEXT_SONG=[ … ]”

Events: Es gibt ein Event-System, das erlaubt, dass Aktionen durch bestimmte Ereignisse ausgelöst werden. Diese Ereignisse können im Prinzip alles sein. Eingebaut sind z.B. ”ON_MUSIC_NEXT” oder ”ON_PLAYER_ENTER” . Soll das Plugin selbst einen Event auslösen, muss dieser mit ””register_event”” zunächst registriert werden. Später kann der Event mit ””fire_event”” abgefeuert werden. Damit daraufhin etwas geschieht, benötigt es Abonnementen. Man kann mit ””subscribe_event”” eine Funktion angeben, die dann aufgerufen wird, wenn der Event abgefeuert wird.

Debug: Ähnlich wie in anderen Programmiersprachen ist Debugging sehr wichtig. Das Hauptmodul debug stellt dazu Logging Funktionalitäten bereit. Es gibt die Log-Level debug, info, warning und error. Mit ””register_logger”” kann ein Logger registriert werden und mit ””log”” kann eine Logging-Ausgabe getätigt werden.

Keys: Cubescript erlaubt es Tasten (keine Tastenkombinationen) an Funktionen zu binden. Das bedeutet, dass man sich z.B. mit der Taste W vorwärts bewegt, aber dies auch auf eine andere Taste legen kann. Jedes Plugin könnte nun auch einfach Tasten an seine Funktionen binden. Das Problem daran ist, dass der Benutzer sich bestimmt ärgert, wenn seine Tasten “gestohlen” werden. Daher wurde das Modul keys geschaffen. Hier kann man brav Tasten registrieren. Wenn diese Taste bereits belegt ist, wird der Benutzer gefragt, ob er dies akzeptieren möchte. Das Modul speichert sich alle Einstellungen, die die Tastenbelegungen betreffen, solange sie nicht andersweitig belegt verwaltet werden. Um eine Tastenbelegung zu registrieren ruft man ””register_key”” auf.

Options: Jedes Plugin hat bestimmte Einstellungen, die der Benutzer gerne speichern würde. Diese sollen einen Neustart überleben, daher gibt es das Plugin Options. Dies sind im Prinzip High_Level Variablen, die zunächst mit ””register_option”” registriert werden. Später kann mit mit ””get_option”” den aktuellen Wert auslesen oder mit ””set_option”” einen neuen Wert setzen.

Plugins: Um ein Plugin systemweit bekannt zu machen, benutzt man ””register_plugin”” . Beim Systemstart werden die Dateien ”/packages/nooblounge/plugins/*/init.cfg” ausgeführt. Damit werden jedoch zunächst die Plugins initialisiert. Da manche Plugins von anderen Plugins abhängen, müssen diese zunächst initialisiert sein, bevor sie gestartet werden. Im zweiten Schritt werden sie dann schließlich gestartet. Manche der mitgelieferten Plugins können während der Laufzeit nicht deaktiviert werden, z.B. der PluginManager.

Rendering: Manche Plugins werden eine Interaktion mit dem Benutzer benötigen. Um dies zu erleichtern und dem einen Rahmen zu geben, gibt es das Modul rendering. Damit können Guis und Tabs registriert werden. Das Rendering unterstützt dabei mehrseitige Tabs und Guis. Rendering verwaltet und steuert alle Guis und Tabs. Außerdem stellt das Rendering Modul Requester Funktionalitäten bereit.

Server: Das Sauerbraten Projekt stellt einen Master-Server bereit, der eine Liste von Sauerbraten-Servern verwaltet. Das Modul server verwaltet deine favorisierten Server, deren IP, Port, Sauerbraten Edition, Login- und Slotpasswörter (evtl. auch die auth keys). Es stellt ferner Funktionen zu verbinden mit einem Server und dem (automatischen) Login zur Verfügung. Das Login-Plugin nutzt das Modul um die Server aufzulisten und um den Benutzer einzuloggen. Das Plugin nlservers liefert die Konfiguration für alle Nooblounge-Server und einer Einlogg-Funktion mit. Es ist möglich weitere Plugins zu erstellen, die andere Server und deren Loginfunktionalität implementieren.

Services: Mit den Services gibt es die bisher einzigartige Möglichkeit mit dem Server zu kommunizieren. Jeder Service liefert Daten oder Programmcode, der ausgeführt wird. Beispielsweise liefert der Service “date” Datum und Uhrzeit zurück. Die Kommunikation erfolgt über Kommandos ””#service”” und über einen speziellen Masterserver. Dieser Masterserver liefert im Normalfall die Serverliste von is.kicks-ass.org aus (er ist ein einfacher Proxy). Wenn zuvor ein Kommando an der Server übermittelt wurde, liefert er jedoch das Ergebnis dessen aus. Beispiel: Der Client schickt das Kommando ””#service execute date”” und führt kurz später ””updatemaster”” aus. Mit dem Kommando wird der Server beauftragt ein CubeScript zu erstellen. Mit dem updatemaster wird dieses CubeScript vom Masterserver geholt. Im diesem Fall wurden mit dem CubeScript die Variablen _DATE_DATE und _DATE_TIME mit dem Datum und der Uhrzeit überschrieben.

Installation

  1. Achtung: Mache zunächst ein Backup!
  2. Der im ZIP-Verzeichnis befindliche Ordner ””nooblounge”” wird in den Packages-Ordner von Sauerbraten kopiert.
    • Unter Linux befindet sich dieser im unter ””~/.sauerbraten/packages””. Schließlich sollte es einen Ordner ””~/.sauerbraten/packages/nooblounge”” geben. Soll das Nooblounge Package global für alle Benutzer des Rechners verfügbar sein, kann man es auch unter ””/usr/share/games/sauerbraten/packages”” installieren.
    • Unter Windows: Im Programmverzeichnis (Normalerweise ”C:\Programme\Sauerbraten\packages” )
    • Unter Mac: Im Programmverzeichnis (Normalerweise ”user/Library/Application Support/sauerbraten/packages/” )
  3. In der ”autoexec.cfg” Datei muss folgende Zeile am Anfang eingefügt werden:
    •  C |  copy code |? 
      1
      exec "packages/nooblounge/init.cfg"
  4. Wenn du den NoobLauncher zum ersten Mal installierst, empfiehlt es sich die Datei ”config.cfg” in ”config.cfg.old” umzubennenen, um mit einer neuen Sauerbraten-Konfiguration zu beginnen.
  5. Sauerbraten starten!
  6. NoobLauncher konfigurieren: drücke F7
Hinweise zu den Tastenbelegungen

Einige Tastenbelegungen werden von NoobLauncher überschrieben. Beispielsweise übernimmt das aktivierte Screenshooter Plugin die Taste ”F12”. Das AutoSpec Plugin übernimmt die Tasten ”W, S, A und D” . Das Wheelzoom Plugin hingegen übernimmt die Tasten ”G und Z” sowie das Mausrad.

Installation von neuer Musik

Im Ordner ””[…]/packages/nooblounge/music”” können Musikordner angelegt werden. Wichtig ist, dass niemals NIE Leerzeichen bei Dateinamen von Ordnern und Musikstücken verwendet werden. In dem Ordner gibt es sollte es nur Dateien mit den Endungen .ogg oder .mp3 geben. Andere Dateien kann Sauerbraten nicht abspielen. Mit .mp3 Dateien könnte es außerdem Probleme geben: das Abspielen funktioniert nicht bei jedem. Weiterhin kann eine ””cover.jpg”” Datei mit dem Bild eines Album-Covers in diesem Ordner abgelegt werden. Es muss sich um eine JPG-Datei handeln und sie darf nicht anders heißen.

Aktivierung von Sound-Sets

Seit Version 0.9.5 ist es möglich Sound-Sets zu nutzen. Der NoobLauncher bietet hierfür die notwendige Funktionalität. Außerdem liefert er ein eigenes Sound-Set (erstellt von Huki) namens Acapella-Sounds mit.

Da es vom Sauerbraten-Client nicht standardmäßig vorgesehen ist, dass man andere als die mitgelieferten Sounds verwendet, muss die Datei ”sounds.cfg” modifiziert werden. Die Modifikation verhindert, dass die Sounds schon beim Programmstart geladen werden. In Folge dessen kann ein NoobLauncher-Plugin das Laden der Sounds übernehmen.

Füge folgende Zeile als erste Zeile in die ”sounds.cfg” ein:

 C |  copy code |? 
1
_SOUNDS_ORIGINAL = [

… und folgende Zeile als letzte Zeile:

 C |  copy code |? 
1
]

Nun muss nur noch eines der Plugins ”acapellasounds” oder ”standardsounds” aktiviert werden, die die entsprechenden Sounds laden.

*Beachte:* es ist ein Neustart von Sauerbraten notwendig, will man das Sound-Set wechseln.

Kompatibilität

NoobLauncher wurde unter Linux und Windows getestet. Volle Funktionalität ist ab der Sauerbraten Trooper Edition (Mai 2009) zu erwarten. NoobLauncher läuft derzeit ”nicht” auf der CTF Edition (Juni 2008), weil die automatische Erkennung von Plugins aufgrund des fehlenden loopfiles Befehls nicht funktioniert (siehe Known Issues). Ab NoobLauncher v0.9.5 gibt es aber die Möglichkeit den NoobLauncher unter CTF trotzdem zu starten (allerdings funktioniert dann nicht alles).

Comments are closed