MG Mud User | 88f1247 | 2016-06-24 23:31:02 +0200 | [diff] [blame^] | 1 | /* |
| 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 | */ |
| 17 | inherit "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 | |
| 22 | create() |
| 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 | |
| 50 | init() |
| 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. */ |
| 70 | wurf( 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 | } |