blob: aadb54a7310adc4d76a2cc0a7393a968b7cd5a8c [file] [log] [blame]
MG Mud User88f12472016-06-24 23:31:02 +02001
2Zaubertraenke fuer Magier
3=========================
4
5Wie man die Traenke jetzt genau versteckt bleibt dem betreffenden Magier
6ueberlassen, es sollte halt insgesamt ein breites Spektrum von sehr leicht
7zu finden bis fast unmoeglich abgedeckt sein.
8Fuer das Orakel der Hochebene sollte dann ein entsprechender Spruch
9vorbereitet werden, nicht zu kryptisch aber doch orakleig.
10
11Die zufaellige Auswahl an zugeordneten Zaubertraenken wird beim ersten
12Einloggen des Spielers festgelegt.
13
14Die Raeume, in denen Traenke versteckt werden (und es duerfen nur Raeume
15sein), werden in 8 Listen eingeteilt, je nach Schwierigkeitsgrad. Der haengt
16natuerlich von der Lage (so ist ein Trank in einem monsterwimmelnden
17Labyrinth schwieriger zu erreichen, als einer auf der Hochebene), und von
18dem Versteck selbst ab.
19Questraeume, die nur im Rahmen der Quest erreichbar sind, sind ungeeignet.
20
21
22Mein Standardbeispiel fuer ein Versteck ist immer folgendes:
23
24> schaue
25blablablabla .... Ein Schreibtisch steht in der Ecke. ... blablabla
26> unt schreibtisch
27Er hat eine Schublade.
28> oeffne schublade
29Du oeffnest die Schublade.
30> unt schublade
31In der Schublade enteckst Du ein paar Papiere.
32> unt papiere
33Beim Rumwuehlen in den Papieren entdeckst Du einen kleinen Zaubertrank, den
34Du sofort trinkst.
35
36Dann kommt die Auswahlsequenz, welche Eigenschaft man erhoehen will.
37
38In diesem Fall reichen Details, Details mit Closure und eine Kommando fuer
39"oeffne" aus. Etwa wie folgt:
40
41 void create() {
42 [...]
43 SetProp(P_INT_LONG, ... Ein Schreibtisch steht in der Ecke ...);
44
45 AddDetail(({"tisch", "schreibtisch"}),
46 "Er hat eine Schublade.");
47
48 AddCmd("oeffne&schublade", #'action_oeffne,
49 "Was moechtest du oeffnen.");
50 }
51
52 private int action_oeffne() {
53 tell_object(this_player(), "Du oeffnest die Schublade.\n");
54 tell_room(this_object(), this_player()->Name()+
55 " oeffnet eine Schublade.\n", ({this_player()}));
56
57 AddDetail("schublade",
58 "In der Schublade entdeckst du ein paar Papiere.\n");
59 AddDetail("papiere", #'detail_papiere);
60 }
61
62 // Zaubertrankgebendes Detail
63 private string detail_papiere() {
64 if (this_player()->FindPotion(
65 break_string("Beim Rumwuehlen in den Papieren entdeckst Du einen "
66 "kleinen Zaubertrank, den Du sofort trinkst.", 78)))
67 return "";
68 // Es muss ein String zurueckgegeben werden, da man sonst
69 // die Fehlermeldung "Sowas siehst du hier nicht." bekommt
70 else
71 return "Die Papiere sind alle unbeschriftet.\n";
72 }
73
74 // Aufraeumen des Raumes
75 void reset() {
76 if(!sizeof(filter(all_inventory(this_object()), #'interactive))) {
77 RemoveDetail("papiere");
78 RemoveDetail("schublade");
79 }
80 ::reset();
81 }
82
83FindPotion() gibt 1 zurueck, wenn der Spieler den Zaubertrank finden darf.
84
85Wer also Traenke verstecken will, macht sowas in der Art und meldet dann den
86Raum persoenlich oder per Post bei den Erzmagiern bzw seinem aktiven
87Regionsmagier an.
88
89SIEHE AUCH:
90 Weitere Dateinamen mit Beispielen fuer Trankverstecke kann man der
91 Datei /etc/traenke entnehmen.
92
93 Befehl: traenke (fuer Magier zum Einschalten des Findens von ZTs)
94
9510. August 2015 Gloinson