blob: 048a4619cc401b7ca8eb265b6a000d9acffa7b73 [file] [log] [blame]
MG Mud User88f12472016-06-24 23:31:02 +02001#include <defines.h>
2#include <properties.h>
3#include <moving.h>
4//
5// By Rumata@MorgenGrauen 3/99
6//
7// Beispieldatei fuer die Benutzung von Mastern und Klienten.
8//
9// Ich gehe hier nicht auf die "normalen" Funktionen ein.
10
11inherit "/std/thing";
12
13#define OS_MASTER "/doc/beispiele/master/opferstockmaster"
14
15void create()
16{
17 if(IS_BLUE(ME)) return;
18 ::create();
19 SetProp( P_NAME, "Opferstock" );
20 SetProp( P_GENDER, MALE );
21 SetProp( P_VALUE, 1000 + random(2000) );
22 AddId( ({"stock","inschrift","opferstock"}) );
23 SetProp( P_SHORT, "In einer Ecke steht ein Opferstock" );
24 SetProp( P_LONG,
25 "Der Opferstock besteht aus solidem Holz. Vorne auf dem Kasten ist eine\n"
26 + "Inschrift zu sehen, die Du lesen kannst.\n"
27 + "@@contents@@"
28 );
29 SetProp( P_READ_MSG,
30 ">>>>>>>>>>>> Fuer den Aufbau eines Orkwaisenhauses <<<<<<<<<<<<\n"
31 + "In den letzten Jahren wurden immer wieder unschuldige Orkkinder\n"
32 + "durch brutale Abenteurer ihrer Eltern beraubt. Bitte unter-\n"
33 + "stuetzen Sie mit einer kleinen Spende den Aufbau eines Waisen-\n"
34 + "hauses fuer diese bemitleidenswerten Kreaturen.\n"
35 );
36 AddDetail( "holz", "Solide und so gut wie unzerbrechlich.\n" );
37 SetProp( P_NOGET,
38 "Der Opferstock ist nicht ohne Grund am Boden festgenagelt.\n" );
39 AddCmd( "spende","spende" );
40 AddCmd( ({"stecke","steck"}), "stecken" );
41 AddCmd( "oeffne","oeffne" );
42 AddCmd( ({"brich","breche"}),"breche" );
43}
44
45contents()
46{
47 switch(QueryProp(P_VALUE))
48 {
49 case 0:
50 return "Er ist leer.\n";
51 case 1:
52 return "Er enthaelt:\nEine Muenze.\n";
53 default:
54 return "Er enthaelt:\n"+QueryProp(P_VALUE)+" Muenzen.\n";
55 }
56}
57
58stecken( str )
59{
60 string was, worein;
61 if( !str || sscanf(str,"%s in %s",was,worein)!=2 || !id(worein) ) return 0;
62 return spende( str );
63}
64
65spende( str )
66{
67 int anz, newAl;
68 string arg;
69
70 notify_fail( "Wieviele Muenzen willst Du denn spenden?\n" );
71 if( !str || str=="" )
72 return 0;
73 if( sscanf(str,"%d %s",anz,arg)== 2 )
74 str = arg;
75 else
76 {
77 if( str=="eine muenze" || str=="ein goldstueck" )
78 {
79 anz = 1;
80 str = "muenze";
81 }
82 else
83 return 0;
84 }
85 if( anz<=0 ||
86 member(({"muenze","goldstueck","muenzen","goldstuecke"}), str)==-1
87 )
88 return 0;
89 if( anz>PL->QueryMoney() )
90 {
91 write( "So viel Geld hast Du nicht.\n" );
92 return 1;
93 }
94 PL->AddMoney(-anz);
95 SetProp(P_VALUE,QueryProp(P_VALUE)+anz);
96
97 // Hier wird der Master aufgerufen, der das Alignment der Spieler
98 // dann aendert.
99 if( OS_MASTER->addAlignment( PL, anz/3 ) > 0 ) {
100 // Eigentlich könnte man hier auch die Meldung ausgeben, aber
101 // der Spieler soll den Unterschied zwischen Alignment geaendert
102 // unt Alignment nicht geaendert sehen koennen.
103 }
104 write( "Du hast wahrhaft das Gefuehl, etwas Gutes getan zu haben.\n" );
105
106 say( capitalize(PL->name(WER))+" spendet "+anz
107 + ((anz==1)?" Muenze.\n":" Muenzen.\n") );
108 return 1;
109}
110
111oeffne( str )
112{
113 int newAl;
114
115 notify_fail( "WAS willst Du oeffnen?\n" );
116 if( !id(str) )
117 return 0;
118 OS_MASTER->addAlignment( PL, -30 );
119 write( "Allein schon der Gedanke....\n" );
120 return 1;
121}
122
123breche( str )
124{
125 string arg;
126 notify_fail( "WAS willst Du aufbrechen?\n" );
127 if( !str )
128 return 0;
129 if( sscanf(str,"%s auf",arg)==1 )
130 str = arg;
131 if( !id(str) )
132 return 0;
133 write( "Dein lautes Getoese ruft einen Teufel herbei, der Dich gleich\n"
134 + "mit in die Hoelle nimmt.\n"
135 );
136 say( capitalize(PL->name(WER))+" versucht, den Opferstock aufzubrechen.\n"
137 + "Gleich erscheint ein Teufel, um "+PL->QueryPronoun(WEN)
138 + " in die Hoelle zu reissen.\n" );
139 PL->move("/d/unterwelt/raeume/qualenraum",M_GO,"zur Hoelle","faehrt");
140 OS_MASTER->addAlignment( PL, -200 );
141 return 1;
142}