blob: c17a9a46a76bcff582850a1195990929b7afce35 [file] [log] [blame]
MG Mud User88f12472016-06-24 23:31:02 +02001
2Zaubertraenke fuer Magier
3=========================
4
Arathornee7ec862020-12-01 23:57:24 +01005Wie man die Traenke jetzt genau versteckt, bleibt dem betreffenden Magier
6ueberlassen, es sollte nur insgesamt ein breites Spektrum von sehr leicht
MG Mud User88f12472016-06-24 23:31:02 +02007zu finden bis fast unmoeglich abgedeckt sein.
Arathornee7ec862020-12-01 23:57:24 +01008
9Fuer das Orakel der Hochebene muss dann ein entsprechender Spruch
Deaddy277a0652018-01-03 23:48:18 +010010vorbereitet werden, nicht zu kryptisch aber doch orakelig. Wichtig ist auch,
11dass der Spruch nicht in Dateien oder Code festgehalten wird. Gerade im
12modernen Workflow mit Git ist darauf zu achten, da hier auch temporaere
13Kommentare oder Dateien wieder hergestellt werden koennten; am besten haelt
14man den Spruch also fest, in dem man sich selbst im Mud eine Mail schickt oder
15ihn an einem sonstwie sicheren Ort verwahrt.
MG Mud User88f12472016-06-24 23:31:02 +020016
17Die zufaellige Auswahl an zugeordneten Zaubertraenken wird beim ersten
18Einloggen des Spielers festgelegt.
19
20Die Raeume, in denen Traenke versteckt werden (und es duerfen nur Raeume
21sein), werden in 8 Listen eingeteilt, je nach Schwierigkeitsgrad. Der haengt
22natuerlich von der Lage (so ist ein Trank in einem monsterwimmelnden
23Labyrinth schwieriger zu erreichen, als einer auf der Hochebene), und von
24dem Versteck selbst ab.
Arathornee7ec862020-12-01 23:57:24 +010025
MG Mud User88f12472016-06-24 23:31:02 +020026Questraeume, die nur im Rahmen der Quest erreichbar sind, sind ungeeignet.
27
Arathornee7ec862020-12-01 23:57:24 +010028Darueber hinaus muessen aufgrund eines EM-Beschlusses alle Zaubertraenke in
29der Normalwelt angeschlossen bzw. ueber diese erreichbar sein. Zaubertraenke,
30die nur ueber die Parawelt erreichbar sind, werden daher nicht genehmigt.
31
32
33BEISPIEL
34--------
35
36Ein Standardbeispiel fuer ein Versteck ist immer folgendes:
Deaddy277a0652018-01-03 23:48:18 +010037
MG Mud User88f12472016-06-24 23:31:02 +020038> schaue
39blablablabla .... Ein Schreibtisch steht in der Ecke. ... blablabla
Arathornee7ec862020-12-01 23:57:24 +010040
MG Mud User88f12472016-06-24 23:31:02 +020041> unt schreibtisch
42Er hat eine Schublade.
Arathornee7ec862020-12-01 23:57:24 +010043
Deaddy277a0652018-01-03 23:48:18 +010044> oeffne schublade
MG Mud User88f12472016-06-24 23:31:02 +020045Du oeffnest die Schublade.
Arathornee7ec862020-12-01 23:57:24 +010046
MG Mud User88f12472016-06-24 23:31:02 +020047> unt schublade
48In der Schublade enteckst Du ein paar Papiere.
Arathornee7ec862020-12-01 23:57:24 +010049
MG Mud User88f12472016-06-24 23:31:02 +020050> unt papiere
51Beim Rumwuehlen in den Papieren entdeckst Du einen kleinen Zaubertrank, den
52Du sofort trinkst.
Deaddy277a0652018-01-03 23:48:18 +010053
MG Mud User88f12472016-06-24 23:31:02 +020054Dann kommt die Auswahlsequenz, welche Eigenschaft man erhoehen will.
Deaddy277a0652018-01-03 23:48:18 +010055
MG Mud User88f12472016-06-24 23:31:02 +020056In diesem Fall reichen Details, Details mit Closure und eine Kommando fuer
57"oeffne" aus. Etwa wie folgt:
58
59 void create() {
60 [...]
61 SetProp(P_INT_LONG, ... Ein Schreibtisch steht in der Ecke ...);
Deaddy277a0652018-01-03 23:48:18 +010062
MG Mud User88f12472016-06-24 23:31:02 +020063 AddDetail(({"tisch", "schreibtisch"}),
64 "Er hat eine Schublade.");
65
66 AddCmd("oeffne&schublade", #'action_oeffne,
67 "Was moechtest du oeffnen.");
68 }
69
70 private int action_oeffne() {
71 tell_object(this_player(), "Du oeffnest die Schublade.\n");
72 tell_room(this_object(), this_player()->Name()+
73 " oeffnet eine Schublade.\n", ({this_player()}));
74
75 AddDetail("schublade",
76 "In der Schublade entdeckst du ein paar Papiere.\n");
77 AddDetail("papiere", #'detail_papiere);
78 }
79
Deaddy277a0652018-01-03 23:48:18 +010080 // Zaubertrankgebendes Detail
MG Mud User88f12472016-06-24 23:31:02 +020081 private string detail_papiere() {
82 if (this_player()->FindPotion(
83 break_string("Beim Rumwuehlen in den Papieren entdeckst Du einen "
84 "kleinen Zaubertrank, den Du sofort trinkst.", 78)))
Deaddy277a0652018-01-03 23:48:18 +010085 return "";
MG Mud User88f12472016-06-24 23:31:02 +020086 // Es muss ein String zurueckgegeben werden, da man sonst
87 // die Fehlermeldung "Sowas siehst du hier nicht." bekommt
88 else
89 return "Die Papiere sind alle unbeschriftet.\n";
90 }
91
92 // Aufraeumen des Raumes
93 void reset() {
94 if(!sizeof(filter(all_inventory(this_object()), #'interactive))) {
95 RemoveDetail("papiere");
96 RemoveDetail("schublade");
97 }
98 ::reset();
99 }
Deaddy277a0652018-01-03 23:48:18 +0100100
MG Mud User88f12472016-06-24 23:31:02 +0200101FindPotion() gibt 1 zurueck, wenn der Spieler den Zaubertrank finden darf.
102
103Wer also Traenke verstecken will, macht sowas in der Art und meldet dann den
Deaddy277a0652018-01-03 23:48:18 +0100104Raum persoenlich oder per Post bei den Erzmagiern bzw. seinem aktiven
105Regionsmagier an. Diese sollten dann auch den zugehoerigen Spruch erhalten,
106welcher, wie oben erwaehnt, ja nicht im Code oder in einer dabeiliegenden
107Datei stehen sollte.
108
MG Mud User88f12472016-06-24 23:31:02 +0200109SIEHE AUCH:
110 Weitere Dateinamen mit Beispielen fuer Trankverstecke kann man der
111 Datei /etc/traenke entnehmen.
112
Deaddy277a0652018-01-03 23:48:18 +0100113 FindPotion - die Funktion, mit welcher man den Trank im Code einbaut
114 traenke - Magierbefehl zum Einschalten des Findens von ZTs
MG Mud User88f12472016-06-24 23:31:02 +0200115
Deaddy277a0652018-01-03 23:48:18 +0100116LETZTE AeNDERUNG:
Arathornee7ec862020-12-01 23:57:24 +0100117 19. Nov. 2020, Arathorn