
MAGIER
======

    In MorgenGrauen erweitern Magier das MUD. Ausserdem haben sie viele
    Moeglichkeiten, die Spieler nicht haben.

     Wer kann Magier werden?
        Magier kann jeder werden, der die Anforderungen zur Seher-Werdung
        erfuellt; siehe dazu die Hilfeseite 'seher'.
        Soll ein Charakter Magier werden, der selber kein Seher ist, aber der
        Erstspieler dieses Spielers ist Seher, ist dies mit Genehmigung der
        EMs moeglich. Hierzu muss den EMs (in Absprache mit dem zukuenftigen
        Sponsor) ein GS-Konzept vorgestellt werden (in diesem Fall bitte 
        auch Abschnitt 'Magierwerdung mit einem nicht-Seher' unten beachten).

     Muss ich Magier werden?
        Wer keine Lust hat, Magier zu werden und lieber noch spielen moechte,
        kann mit diesen Voraussetzungen Seher werden. Als Seher hat man auch
        ein paar zusaetzliche Faehigkeiten.

     Wie werde ich Magier?
        Wenn Du die Voraussetzungen erfuellst, um Magier zu werden, musst Du
        einen Magier finden, der Dich unterstuetzt. Dieser Magier soll den
        neuen Magier in seine Moeglichkeiten einweisen und fuer Fragen offen
        sein. D.h. es sollte am besten ein Magier sein, den Du schon kennst
        und von dem Du Hilfe erwarten kannst.

        Wenn Du so einen Magier gefunden hast, fragst Du ihn, ob er Dich zu
        einem neuen Magier ausbildet. Von dem Magier bekommst Du dann einen
        Vertrag, den Du sorgfaeltig lesen solltest. Wenn Du dann immer noch
        Magier werden willst, unterschreibst Du den Vertrag. Danach gehst Du
        mit dem Vertrag zu Merlin (erstmal suchen) und der Magier, von dem
        Du den Vertrag hast, bittet Merlin, Dich zum Magier zu machen.

        Danach solltest Du von dem Magier eine Einfuehrung erhalten,
        desweiteren wird Dir Merlin ein Mail mit nuetzlichen Informationen
        schicken.

     Und was dann?
        Du beginnst Dein Magierdasein als Lehrling (Lv 15). Du hast noch kein
        eigenes Verzeichnis, in dem Du programmieren kannst, und Du kannst
        auch nicht in allen Verzeichnissen lesen. Du kannst Dich allerdings
        schon einmal mit den Einschraenkungen des Magierlebens (siehe Vertrag)
        sowie mit der MudLib vertraut machen. Dazu hast Du Leserechte in den
        Verzeichnissen `/doc', `/std', `/secure' und `/sys'.

        Wenn Du zu diesem Zeitpunkt erkennst, dass der Magierstatus wohl doch
        nichts fuer Dich ist, kannst Du Dich immer noch an einen Erzmagier
        wenden, damit er Dich wieder zum Spieler macht. Hiermit solltest Du
        jedoch nicht zulangen warten, da hierzu eine aeltere Kopie Deines
        ehemaligen Spielers noetig ist.

        Wenn Du allerdings merkst, dass Du gerne etwas programmieren moech-
        test, dann melde Dich (mit mail erzmagier) unter Angabe eines kurzen
        Abrisses, wie Du Deinen weiteren Werdegang als Magier vorstellst bei
        den Erzmagiern, damit sie Dich auf die naechste Magierstufe (Lv 20)
        befoerdern. Die Bearbeitugnszeit dieser Mail liegt bei ein bis zwei
        Wochen. Auf dieser Stufe bekommst Du ein eigenes Verzeichnis samt
        Workroom, und Du kannst Deine ersten eigenen Programmierversuche
        starten.

        Wenn Du auch nach Deinen ersten mehr oder weniger erfolgreichen
        Programmierversuchen noch immer nicht die Flinte ins Korn geworfen
        hast, dann solltest Du Dir einmal Gedanken darueber machen, was Du
        im MorgenGrauen genau programmieren moechtest. Der zustaendige
        Regionsmagier wird Dich bei der Ausarbeitung Deines Konzeptes gerne
        beraten. Bevor Du anfaengst zu programmieren, solltest Du mit
        Deinem genauen Konzept noch einmal bei einem zustaendigen
        Erzmagier nachfragen, ob es als Gesellenstueck ausreicht.

        Sobald Dein Regionsmagier und Du der Meinung seid, dass Deine
        Sachen fertig sind, koennt Ihr Euch damit an einen der fuer
        die Abnahme von Gesellenstuecken zustaendigen Erzmagier (siehe
        Hilfe Erzmagier) wenden. Dieser wird sich Deine Arbeit ansehen und
        dann entscheiden, ob sie fuer ein Gesellenstueck im MorgenGrauen
        ausreichend ist. Beachte bitte, dass vor einer solchen Genehmigung
        durch die zustaendigen Erzmagier von Dir noch keine Objekte
        unter eigenem Namen angeschlossen werden koennen/duerfen.

        Um eine zuegige Abnahme Deines Gesellenstuecks sicherzustellen,
        spricht zu Beginn der Abnahmen mit dem fuer die Gesellenstuecke
        zustaendigen Erzmagier Deinen Weg durch die Abnahme-Buerokratie
        durch. Es ist durchaus moeglich, gewisse Abnahmen (Quests, 
        Zaubertraenke, Forscherpunkte, Erstkill-Stufenpunkte) zu
        parallelisieren. Bist Du unsicher oder kommt es zu Rueckfragen,
        Verzoegerungen, Schwierigkeiten, ist der fuer die Gesellenstuecke
        zustaendige Erzmagier Dein Begleiter und hilft Dir bei der
        Bewaeltigung der aufgetretenen Themen.

        Sofern Du die Regeln fuer Gesellenstuecke erfuellt hast, wird Dich
        der zustaendige Erzmagier zu einem Vollmagier machen. Erst dann
        kannst Du auch in anderen Teilen der MudLib einen Blick in den
        Quellcode anderer Magier werfen. Ausserdem bekommst Du ein eigenes
        Verzeichnis in der Region, in der Du mitarbeiten moechtest. Dort
        kannst Du Deine Sachen ausgiebig testen und spaeter dann auch von
        Deinem Regionsmagier anschliessen lassen.


Magierwerdung mit einem nicht-Seher
-----------------------------------

      * Die Berufung eines nicht-Seher-Charakters zum Magier ist moeglich,
        sofern der betreffende RL-Spieler bereits einen Seher hat.
      * Die Berufung eines solchen Charakters zum Magier ist nur in Absprache
        mit den EMs moeglich. Bei konkreten Anfragen an EMs muss eine erste 
        Idee angegeben werden, was man sich als GS vorstellt.
      * Ein vernuenftiges, d.h. zustimmungsfaehiges Konzept muss _vor_
        Magierwerdung den EMs vorgstellt werden.. An dieses werden die sonst
        ueblichen Anforderungen bzgl. Umfang und Komplexitaet gestellt. Das
        Konzept wird von EMs genehmigt, bevor die Berufung zum Magier
        erfolgt.
      * Nach Sponsorn des Charakters entfaellt die sonst uebliche Wartezeit
        von 1-2 Wochen (weil die EMs ja vorher zugestimmt haben) und der
        Char kann direkt auf Level 20 befoerdert werden.
      * Das GS muss innerhalb von 6 Monaten nach Magierwerdung fertiggestellt 
        werden.
        Die Fertigstellung ist definiert als Einreichung an den RM zur 
        Abnahme.
        Dies darf natuerlich keine pro-forma Einreichung von halbfertigem 
        Zeugs sein.
      * Eine Verlaengerung dieser Frist kann durch einen von den EMs be-
        nannten EM (idR EM Gesellenstuecke) genehmigt werden, sofern ihm
        dies sinnvoll erscheint ("begruendete Faelle", fast fertig, etc.).
        In Zweifelsfaellen wird die Verlaengerung von den EMs diskutiert.
      * Muss das GS nach Abnahme durch den RM und/oder den EM Gesellenstuecke
        nachgebessert werden, sollte dieses innerhalb von 2 Monaten geschehen.
        Verlaengerungen: s.o.
      * Bei Nicht-Einhaltung der Frist erfolgt die Loeschung des Charakters 
        oder Dauerspielpausen auf Magierlevel 15.
      * Der Spieler unterliegt auch nach Loeschung dem Magiervertrag insofern,
        als dass er ueber etwaige als Magier gewonnene Interna von nicht-
        oeffentlichem Code Stillschweigen zu wahren hat.

 SIEHE AUCH:
    stufen, magierstufen, abenteuer, konzept, gesellenstueck
    seher, regionen, gildenmagier, erzmagier, goetter

 LETZTE AeNDERUNG: 2019-07-29 von Zook

