blob: fc1f9556cb3ba151177f5675324f416788ac6f58 [file] [log] [blame]
MG Mud User88f12472016-06-24 23:31:02 +02001/*
2 *----------------------------------------------------------------------
3 * obj_geruest
4 * Dieses File ist Teil der Morgengrauen-Mudlib.
5 * Dieses File wird optimal formatiert, wenn Tabulatoren 4 Zeichen breit
6 * sind.
7 *
8 * Allgemeines Geruest fuer ein Objekt. Wer eigene Objekte schreibt,
9 * sollte sie nicht ganz so intensiv kommentieren wie dieses hier, aber
10 * hier sollen gleichzeitig, die grundlegenden Mechanismen erlaeutert
11 * werden.
12 *
13 * 16.08.92 Rumata
14 * Ueberarbeitet am 24.08.94 von Viper
15 *----------------------------------------------------------------------
16 */
17inherit "std/thing"; /* Leite aus den std-Objekten ab */
18
19#include <language.h> /* Stelle Namen der Faelle und der Geschlechter */
20 /* dem Objekt zur Verfuegung. */
21
22create()
23{
24 ::create();
25 /* Diese Zeile NIEMALS vergessen!!! */
26
27 AddId( "ball" );
28 AddId( "strandball" );
29 /* Unter diesen Bezeichnungen fuehlt der Ball sich "angesprochen" */
30 /* Mann sollte mit Ids nicht sparen, damit die Spieler nicht ewig */
31 /* nur nach dem richtigen Namen eines Objektes suchen muessen. */
32
33 SetProp( P_NAME, "Ball" );
34 SetProp( P_GENDER, MALE );
35 SetProp( P_ARTICLE, 1 );
36 /* Diese Meldungen ermoeglichen es der Mudlib, das Objekt richtig */
37 /* zu deklinieren. SetProp(P_ARTICLE, 1) kann wegfallen, da 1 Default ist. */
38
39 SetProp( P_SHORT, "Ein bunter Ball" );
40 SetProp( P_LONG, "Was fuer ein huebscher kleiner Strandball.\n"
41 +"Wem koenntest Du den mal zuwerfen?\n" );
42 /* Beschreibungen zur Betrachtung des Balls. */
43
44 SetProp( P_VALUE, 10 );
45 SetProp( P_WEIGHT, 250 );
46 /* Bei diesen Werten sollte die Verhaeltnismaessigkeit */
47 /* nicht aus den Augen gelassen werden. */
48}
49
50init()
51{
52 ::init();
53 /* NICHT VERGESSEN */
54 /* Wenn keine eigenen Aktionen definiert werden sollen, so kann die */
55 /* Funktion init ganz weggelassen werden. Ein init, das nur */
56 /* ::init() aufruft ist ueberfluessig. */
57
58 add_action( "wurf", "werf", 1 );
59 add_action( "wurf", "wirf" );
60 /* werfe, werf oder wirf jemandem den Ball zu. Man sollte darauf */
61 /* achten, dass natuerliche Saetze als Eingabe akzeptiert werden. */
62}
63
64/*************************************************************************/
65/************* Die grundlegenden Funktionen enden hier *******************/
66/*************************************************************************/
67
68
69/* Eine Beispielaktion fuer den Ball. */
70wurf( argument )
71{
72 /* "werf ball rumata zu" wird als Argument "ball rumata zu" bekommen. */
73 string arg1, arg2;
74 string ziel;
75 object zielObj;
76
77 if ( sscanf( argument, "%s %s zu", arg1, arg2 ) != 2 ) return 0;
78 /* Rueckgabe von 0 bedeutet, dass dieses Objekt mit der Eingabe */
79 /* nichts anfangen konnte, und dass der Gamedriver das naechste */
80 /* Objekt befragen soll. */
81
82 if ( id( arg1 ) )
83 /* Welches der Argumente spricht den Ball an ? */
84 /* Das andere muss dann das Ziel des Balls sein. */
85 ziel = arg2;
86 else if ( id( arg2 ) )
87 ziel = arg1;
88 else
89 return 0;
90 /* Keines der Argumente war der Ball. */
91
92 zielObj = present( ziel, environment() );
93 /* Suche ein Objekt, das sich als Ziel angesprochen fuehlt. */
94
95 if ( ! zielObj )
96 {
97 write( "Hier ist kein \"" + ziel + "\".\n" );
98 return 1;
99 /* Hier wird 1 zurueckgegeben, da der Ball das Kommando den */
100 /* Befehl bearbeiten konnte. Er hat zwar kein Ziel gefunden, */
101 /* aber man kann ja nicht alles haben. :-) */
102 }
103
104 if( !living( zielObj ) )
105 {
106 write( "Und wie soll " + zielObj->name(WER,1) + " den Ball fangen?\n" );
107 return 1;
108 /* Nur lebende Wesen sollen Baelle fangen koennen. */
109 }
110
111 write( "Du wirfst " + zielObj->name(WEN,1) + " den Ball zu.\n" );
112 /* Mitteilung an den Werfer */
113 say( PL->name(WER,2) + " wirft " + zielObj->name(WEM,2)
114 + " einen Ball zu.\n", zielObj );
115 /* Mitteilung an alle Wesem im selben Raum. */
116 tell_object( zielObj, "Hoppla, " + PL->name(WER,2)
117 + " wirft Dir einen Ball zu.\n" );
118 /* Mitteilung an den Beworfenen */
119
120 if ( move( zielObj ) ) return 1;
121 /* Es hat geklappt. */
122
123 move( environment() );
124 /* Im Fehlerfall soll der Ball zu Boden fallen. */
125
126 write( "Aber " + zielObj->QueryPronoun(WER)
127 + " kann ihn nicht fangen.\nDer Ball plumpst zu Boden.\n" );
128 say( "Aber " + zielObj->QueryPronoun(WER)
129 + " kann ihn nicht fangen.\nDer Ball plumpst zu Boden.\n", zielObj );
130 tell_object( zielObj,
131 "Aber Du kannst ihn nicht fangen.\nDer Ball plumpst zu Boden.\n" );
132
133 return 1;
134}