Die Untiefen der Grammatik II

Ich möchte mal das Beispiel mit dem Reh aufgreifen und ein wenig aufzeigen, welche technische Entwicklung die Mudlib durch hat.

Am Anfang gab es die bereits erwähnten Grammatikfunktionen:

Der(taeter) + " trifft " + den(opfer) + " an " + dem(koerperstelle) + "."

Jetzt kann man sich vorstellen, daß das nicht der lesbarste Code wird. Für eine normale Kampfzeile muß ich bereits drei Meldungen erzeugen:

Der(taeter) + " trifft " + den( opfer ) + " an " + dem(koerperstelle) + "."

"Du triffst " + den(opfer) + " an " + dem(koerperstelle) + "."

Der(taeter) + " trifft Dich an " + dem(koerperstelle) + "."

Sowas mag ich immer sehr. Ohne Syntax-Highlighting bin ich bei sowas sofort verloren. Es gibt Codestellen, wo man ganze Bildschirmseiten voll mit solchen Meldungsblöcken hat :(

Dabei gibt es so schöne Methoden, um Code und Daten (die Meldung) zu trennen. Ganz simpel z.B. mit

msg = "%s trifft %s an %s.";

sprintf( msg, Der(taeter), den(opfer), dem(koerperstelle) );

Das halte ich für tausendmal lesbarer als obigen Dreck.

In der Mudlib hat man diesen Ansatz weiterverfolgt. Man kann die Grammatikfunktionen direkt in den Text schreiben und zur Laufzeit wird dann daraus die eigentliche Meldung gebaut:

"$Der('taeter) trifft $den('opfer) an $dem('koerperstelle)."

Na das sieht doch schon besser aus. Leider müssen wir immer noch drei Meldungen einzeln bauen:

"$Der('taeter) trifft $den('opfer) an $dem('koerperstelle)."

"Du triffst $den('opfer) an $dem('koerperstelle)."

"$Der('taeter) trifft Dich an $dem('koerperstelle)."

Zum Glück gibts dafür seit kurzem aber auch eine Lösung:

verb = "treffen";

msg = "$Du_der() $machst_macht('arg1) $den_dich('arg2) $prep(an,'arg3)."

taeter -> message_room( msg, verb, opfer, koerperstelle );

Das generiert mir automatisch alle drei verschiedenen Meldungen für Täter, Opfer und alle anderen Person im Raum. Perfekt!

Hier sind wir also wieder an dem Punkt, wo wirklich alles automatisch geht, egal wie die Datenlage ist. Und der Code sieht auch noch aufgeräumt und übersichtlich aus! Was will man mehr? Also ich find das mal so richtig Klasse! Hat ja auch nur 20 Jahre gedauert ;)

Der Fehlerteufel

Einige Spieler haben sicherlich den Eindruck, daß ihre abgesetzten Fehler irgendwo im Nirwana verschwinden. Das ist für mich sehr nachvollziehbar. Die Rückmeldungen zu Fehlern gehen faktisch gegen Null. Dazu kommt, daß die Personaldecke an aktiven Adeligen derzeit im unteren einstelligen Bereich liegt.

Seit Anfang des Jahres bin ich hauptverantwortlich für Nereid zuständig. Ich will das mal zum Anlaß nehmen und ein wenig die Situation dort beleuchten.

Ein Bild sagt mehr als tausend Worte, daher hier mal ein Ausschnitt aus meinem Fehlertool:

    2 - DLs_Nereid                ( 167/ 185)
   11 - Team_Nereid/Ashar         (  66/  77)
   12 - RLs_Exxe                  ( 118/ 118)
   13 - Team_Nereid/Alotria       ( 254/ 255)
   14 - Team_Nereid/Barden        (  78/  78)
   15 - Team_Nereid/Besonderes    (  75/  84)
   16 - Team_Nereid/Boten         (   6/   6)
   17 - Team_Nereid/Corona        (  84/  92)
   18 - Team_Nereid/Dhungar       ( 357/ 363)
   19 - Team_Nereid/Dichter       (   0/   0)
   20 - Team_Nereid/Druiden       ( 204/ 206)
   21 - Team_Nereid/Formwandler   (  10/  17)
   22 - Team_Nereid/Imker         (  32/  32)
   23 - Team_Nereid/Kleriker      (  83/  87)
   24 - Team_Nereid/Minias        (   5/   9)
   25 - Team_Nereid/Miobaas       (  18/  19)
   26 - Team_Nereid/NereidMap     (   5/   7)
   27 - Team_Nereid/Orks          ( 198/ 200)
   29 - Team_Nereid/Sanduz        (  95/  95)
   30 - Team_Nereid/Usagoor       ( 334/ 336)
   31 - Team_Nereid/Wahrsager     (  11/  11)
   32 - Team_Nereid/Walhalla      (  71/  81)

Die erste Zahl ist jeweils die Zahl der unbearbeiteten Fehler, die zweite Zahl die Gesamtzahl im Ordner. Die Differenz sind vorallem Fehler, die als ‘lösch dich in 4 Wochen selber’ markiert sind. Damit markiert man z.B. Duplikate oder wirklich abstruse Ideen. (ja sowas gibts auch) ;)

Die Zahlen kann man nicht addieren, ein Teil der Fehler liegen gleichzeitig in mehreren Ordnern. Aber man bekommt schon mal ein gutes Gefühl, wo es klemmt.

Es sind auch nicht alles harte Fehlfunktionen. Da ist alles dabei: jede Idee, jedes Lob, jedes Detail, jeder Typo. Ideen und Lob hab ich teilweise schon ausgegliedert in einen extra Ordner, bleiben vorallem Typos, Details und richtige Fehler.

Wer ist nun dafür verantwortlich, diese Fehler zu bearbeiten? Theoretisch ist die Struktur so gedacht, daß es unter den Fürsten als Gesamtverantwortlichen eine Zahl Herzöge gibt, welche für ein Teilgebiet, z.B. Ashar, verantwortlich sind.

Aktuell sieht das nur leider extrem mau aus. Mein einziger aktiver Herzog ist gar keiner. Pelleas ist hauptberuflich Menschenkönig und hat sich um seine Stadt gekümmert. Das er ganze Arbeit in Miobaas und Minias geleistet hat, sieht man daran, daß die Anzahl Fehler dort extrem gering ist.

Neue Herzöge sind nicht in Sicht. Die wenigen Neuadeligen werden von ihren Lehrmeistern verständlicherweise in andere Domains verfrachtet. Nereid ist von den drei großen Domains wahrscheinlich auch die Langweiligste. Endgame Content gibts nunmal woanders.

Gehen wir ans andere Ende der Skala. Richtig schlimm ist es um Dhungar und Usagoor bestellt. Hier gibt es seit Jahr und Tag praktisch keine aktiven Herzöge. Letztendlich landet das dann alles auf meinem Schreibtisch. Und wenn nicht bald ein Zwergenkönig auftaucht, werd ich irgendwann die Ärmel umkrempeln müssen und mich da durchbeißen. Bisher fehlte dazu ganz ehrlich die Motivation. Da kommt halt das Exxenblut durch, haha ;)

Die drei alten Gilden laufen mehr oder weniger auf Autopilot. Ich hab in den letzten Monaten wenigstens die groben Fehler behoben, wie z.B. den Lernbug bei den Barden.

Fremden Code zu warten, ist übrigens teilweise richtig harter Tobak. Man muß sich richtig Zeit nehmen und sich in den Quellcode einlesen. Der von den Druiden ist z.B. richtig kompliziert mit der Trankbrauerei und dem ganzen Rattenschwanz da hinten dran. Da gibt es regelrechte Einstiegshürden.

Unterschätzt das bitte nicht. Es ist schnell was “repariert” und plötzlich geht woanders was nicht. Und für ‘Oh das wußte ich nicht’ oder ‘Oh daran habe ich nicht gedacht’ erntet man wenig Verständnis, so gut es gemeint war.

Wirklich akute Fehler, die z.B. questrelevant sind, versuche ich praktisch sofort zu beheben. Letztens gab es eine Änderung in der Mudlib, in deren Folge einige ‘gib’ und ‘zeige’ nicht mehr funktionierten. Nachdem die dritte kaputte Quest auftauchte, bin ich das Problem systematisch angegangen. Ich habe ein Programm geschrieben, welches alle Domains auf möglicherweise betroffene Stellen untersucht hat. Auf Nereid habe ich dann 34 Stellen manuell überprüfen dürfen. Da war der Nachmittag dann auch dahin.

So, jetzt habt ihr ein grobes Gefühl, was an Fehlern so vorhanden ist.

Beleuchten wir die andere Seite. Ich wurde darauf hingewiesen, daß es eine Statistik über bearbeitete Fehler gibt. Ich hab meine mal rausgesucht:

Jahr 2010:
  ...
  Zum Loeschen markiert: 211 (gesamt: 770)
  Als Bearbeitet markiert: 229 (gesamt: 506)

Jahr 2011:
  ...
  Zum Loeschen markiert: 258 (gesamt: 573)
  Als Bearbeitet markiert: 102 (gesamt: 119)

Es gibt Laufzeitfehler, die werden immer wieder geworfen. Die stehen dann für jedes einzelne Mal im Fehlerordner. Die kleine Zahl ist um diese Dubletten bereinigt. Auch die gelöschten Fehler sind im Grunde solche Wiederholungen.

Die bearbeiteten Fehler waren sehr unterschiedlicher Natur. Für einen Typo braucht es nicht viel Zeit. Solche spaßigen Dinge wie den Angststab auf der Brücke zu fixen, braucht es aber auch schnell mal 2-3 Tage, weil man das ganze Ding praktisch neu baut und getestet werden will es ja auch noch, bevor man es wieder einbaut.

Schlußendlich kann sich jetzt jeder ausrechnen, was da an Arbeitsstunden drinsteckt. Und schaut man sich die Zahlen von oben an, kann ich da nochmal soviel versenken und es sind immernoch mehrere hundert Fehler übrig.

Vielleicht sollte ich mir ein Pferd zulegen, es Rosinante nennen und einen Lehrling nehmen, der Sancho Pansa heisst. Anyone?

Dazu kommt: Nach all den Stunden hab ich noch nichts Neues gebaut. Nur alten Code repariert und den Bestand bewahrt. Es mag zwar eine kleine Befriedigung dabei sein, zu sehen, wie die Zahlen im Fehlertool kleiner werden, aber irgendwann kommt man an den Punkt, wo man dann doch auch mal wieder was völlig Neues basteln will. Und ihr wollt ja auch ab und zu mal was Neues zu Entdecken haben.

Als Motivations- und Spaßprojekte für zwischendurch entstehen dann z.B. die Wandervögel oder der Trapper Jon für die Waldläufer. Zum Glück ist meine Liste mit blöden Ideen extrem lang. Daran wird es also nicht mangeln.

Ich möchte also nochmal um Verständnis werben, wenn manche Dinge länger dauern. Motivation hat Höhen und Tiefen. Und selbst die Leute, die wirklich mit Herzblut an Avalon hängen, haben ein RL. Ich habe z.B. seit letztem Jahr einen kleinen Sohn und das der dann einfach mal Priorität bekommt, sollte auch klar sein.

So, ich hoffe, ich habe Euch einen kleinen Einblick geben können und vielleicht einen kleinen Beitrag dazu leisten, daß der Abstand zwischen Spielern und Adeligen ein Stückchen schmaler wird.

Die Untiefen der Grammatik

Die UNItopia-Mudlib steht ja frei zum Download bereit. Ich weiß auch, daß ein Teil der Spielerschaft da auch fröhlich drin rumschmökert, um vielleicht Rückschlüsse auf Avalon zu ziehen ;) Da kann ich ja auch mal was über die Technik unter der Haube berichten.

Die Schnittstelle zum Spieler sind lesbare, deutsche Texte. Die deutsche Sprache zeichnet sich nun leider nicht unbedingt durch Geradlinigkeit aus. Vier Fälle, lustige Artikel, drei Geschlechter statt nur zweien, usw. Grammatik ist die pure Lust ;)

Wenn man fürs MUD programmiert, hat man zwei Fälle:

Zum einen schreibt man statische Texte, wie z.B. bei Raumbeschreibungen:

In der Praerie. Das Gras ist kurz und trocken. Viel waechst hier nicht,
ausser ein paar dornigen Bueschen und duerren Baeumen.

Da braucht man keine große Technik für. Das schreibt man runter, speichert es weg und fertig. Wenn der Spieler den Raum betritt, wird es 1:1 angezeigt.

Auf der anderen Seite es eine Vielzahl Situationen, wo man zur Laufzeit Texte zusammenbauen will. Beispielsweise im Kampfscroll:

Bei mir steht:

   Das Reh tritt Dich mit seinem Huf an der Hand.

Beim Reh steht:

   Du trittst Selena mit Deinem Huf an der Hand.

Und alle anderen bekommen:

   Das Reh tritt Selena mit seinem Huf an der Hand.

Und hier kommen die ganzen Grammatikfunktionen ins Spiel, z.B. könnte man die letzte Meldung folgendermaßen zusammenbauen:

string msg = Der(taeter) + " " + verb + " " + den(opfer) + " mit " +
             seinem(waffe,0,taeter) + " an " + dem(koerperstelle) + ".";

So in der Art wird das an ganz vielen Stellen gemacht.

Jetzt gab es bei genau diesem Beispiel ein klitzekleines Restproblem:

Trifft man jemanden z.B. am Kopf, dann heißt es halt ‘am Kopf’ und nicht ‘an dem Kopf’.

Lösen konnte man das bisher nur, indem man das Geschlecht abfragt und das dann manuell zusammenbaut. Also eine nervige Sonderbehandlung.

Zu meiner großen Freude gibt es aber seit dieser Woche in der Mudlib eine neue Funktion und endlich auch dafür eine Lösung:

string msg = Der(taeter) + " " + verb + " " + den(opfer) + " mit " +
             seinem(waffe,0,taeter) + " " + prep("an",koerperstelle) + ".";

Egal, ob da man an Kopf, Fuß, Hand, Bein, Rücken oder Exxenschwanz getroffen wird, der Satz wird immer automatisch richtig sein.

Die Präpositionsfunktion konsequent angewendet, könnte man das Beispiel noch weiter umbauen:

string msg = Der(taeter) + " " + verb + " " + den(opfer) + " " +
             prep("mit",seinem(waffe,0,taeter)) + " " +
             prep("an",koerperstelle) + ".";

Sehr, sehr, sehr, sehr cool! Vermutlich kann die Hälfte der Leserschaft das nicht nachvollziehen, aber über sowas kann ich mir echt nen Ast freuen. Sowas macht das Leben eines Adeligen echt leichter:

Über je weniger blöde Sonderfälle ich mir den Kopf zerbrechen muß, um so weniger Code muß ich am Ende schreiben und umso produktiver kann ich sein. Es bleiben ja mehr als genug inhaltliche Probleme übrig.

Manchmal hat mans echt schwer…

Irgendwie bin ich mit den WordPress-Themes so gar nicht zufrieden. Entweder das Ding ist in den absonderlichsten Farben und absolut unleserlich, oder der Textblock ist so schmal, daß ich keine Texte aus dem MUD posten kann, ohne daß die nochmal umgebrochen werden, bäääääh.

Mach ich halt ein Hokuten-Fanboy-Blog und klau ihm das Design, haha.

P.S. Der Font für die Überschriften sieht bei dem Theme im Firefox aber auch seltsam aus *seufz*

Liebe Wanderlehrlinge…

Ich bekam heute folgende Fehlermeldung:

FEHLER fuer Calidus: irgendwas stimmt da mit dem aufsteigen nicht. bin
             schon viele tage sehr weit gewandert usw und nichts geht. und
             tschuess zunft! :( 

Tschuldigung, da ist nix kaputt. Es sind auch schon Leute aufgestiegen. Ich habs grad mal probiert:

Du sagst: will aufsteigen
Calidus schuettelt verneinend den Kopf.
Calidus sagt: So einfach ist das nicht.
Calidus sagt: Wenn Du weit genug gewandert bist und genug von der Welt
        gesehen hast, wird Dich die Bruderschaft in einen hoeheren Rang
        erheben.
Calidus sagt: Zu gegebener Zeit wird Dir das dann mitgeteilt.
Calidus denkt . o O ( Aber das wird noch lange dauern. )
Calidus grinst.

Vielleicht ist das ja missverständlich formuliert. Ich brech das mal runter:

Wenn A UND B, dann C.

Es gibt also zwei Aufstiegsbedingungen:

A = weit genug wandern
B = genug von der Welt sehen

Zugegebermaßen ist B nicht ganz so leicht zu erreichen. Es hat wirklich etwas mit dem persönlichen Erforschen von Avalon zu tun.

Möglicherweise ist Eigeninitiative zu Zeiten von WoW und Konsorten, in der man jeglichen Content auf Webseiten von Drittanbietern vorgekaut kriegt, nicht mehr zeitgemäß. Das ist mir aber herzlich egal. Avalon besteht aus weit mehr als nur der FOTM EP-Farmgegend. Geht raus und schaut es Euch an!

Und dann hab ich noch die hier im Kasten liegen:

IDEE fuer das Buendel: Man koennte ja so ein Anstecknadel-System
             implementieren (so wie es z.B. die Alpenvereine haben), die
             besondere Leistungen ausweisen sollen. In Avalon koennten das
             z.B. schwer zugaengliche Orte sein, die beim Zunftheini
             erfragbar sind (z.B. Westlicher Ausgang der TB-Hoehle,
             hoechster Berg auf Tolsgal oder der Vulkan bei Ashar)

Das ist doch mal ne schöne Idee. Über das Aufgabenbuch ist die auch gar nicht schwer zu realisieren.

Na schauen wir mal. Niemand weiß, was die Zukunft bringt ;)