MG Mud User | 88f1247 | 2016-06-24 23:31:02 +0200 | [diff] [blame^] | 1 | #include <properties.h> |
| 2 | #include <wizlevels.h> |
| 3 | #include <moving.h> |
| 4 | #include "haus.h" |
| 5 | |
| 6 | inherit "std/room"; |
| 7 | |
| 8 | create() |
| 9 | { |
| 10 | ::create(); |
| 11 | |
| 12 | SetProp( P_INDOORS, 1 ); |
| 13 | SetProp( P_LIGHT, 1 ); |
| 14 | SetProp( P_INT_SHORT, "Am Antragsschalter" ); |
| 15 | SetProp( P_INT_LONG, |
| 16 | "Du stehst am Antragsschalter der Bank. Hinter einer Rauchglasscheibe scheint\n" |
| 17 | +"sich ein Schalterbeamter zu befinden, Du kannst aber nichts genaueres er-\n" |
| 18 | +"kennen.\n" |
| 19 | +"Wenn Du Dich traust, kannst Du hier einen Bausparvertrag beantragen und einen\n" |
| 20 | +"beantragten Vertrag unterschreiben.\n" |
| 21 | +"Die Syntax dazu lautet:\n" |
| 22 | +"beantrage vertrag (fuer einen Bausparvertrag)\n" |
| 23 | +"beantrage ausbauvertrag (fuer den Ausbau des Hauses)\n" |
| 24 | +"unterschreibe vertrag (um den jeweiligen Vertrag zu unterschreiben)\n" ); |
| 25 | |
| 26 | AddDetail( ({ "boden" }), |
| 27 | "Der tiefschwarze Boden gibt Dir das Gefuehl, im absoluten Nichts zu stehen.\n" ); |
| 28 | AddDetail( ({ "wand", "waende" }), |
| 29 | "Dunkle Schatten tanzen ueber die Waende.\n" ); |
| 30 | AddDetail( ({ "decke" }), |
| 31 | "Sie scheint Dir in dieser unheimlichen Umgebung auf den Kopf fallen zu\n" |
| 32 | +"wollen.\n" ); |
| 33 | AddDetail( ({ "nichts" }), |
| 34 | "Du siehst nichts.\n" ); |
| 35 | AddDetail( ({ "schatten" }), |
| 36 | "Die Schatten irritieren Dich sehr.\n" ); |
| 37 | AddDetail( ({ "schalter" }), |
| 38 | "An diesem Schalter kannst Du einen Bausparvertrag beantragen und unter-\n" |
| 39 | +"schreiben.\n" ); |
| 40 | AddDetail( ({ "beamte", "beamter", "beamten", "schalterbeamte", "schalterbeamten", "schalterbeamter" }), |
| 41 | "Du kannst ihn nur schemenhaft hinter der Rauchglasscheibe des Schalters er-\n" |
| 42 | +"kennen. Die Umrisse scheinen allerdings zu keiner Lebensform zu gehoeren,\n" |
| 43 | +"derer Du Dich erinnern koenntest.\n" ); |
| 44 | AddDetail( ({ "scheibe", "glasscheibe", "rauchglas", "rauchglasscheibe" }), |
| 45 | "Ein schemenhafter Beamter sitzt dahinter.\n" ); |
| 46 | AddDetail( ({ "umrisse" }), |
| 47 | "Sie sind aeusserst beunruhigend.\n" ); |
| 48 | |
| 49 | AddCmd( ({ "beantrage" }), "beantragen" ); |
| 50 | AddCmd( ({ "unterschreib", "unterschreibe" }), "unterschreiben" ); |
| 51 | AddExit( "raus", PATH+"seherbank" ); |
| 52 | } |
| 53 | |
| 54 | void |
| 55 | BecomesNetDead(object pl) |
| 56 | { |
| 57 | pl->move(PATH+"seherbank", M_GO, 0, "wird rausgeworfen", "schlafwandelt herein"); |
| 58 | } |
| 59 | |
| 60 | int |
| 61 | beantragen(string str) |
| 62 | { |
| 63 | object tp, vertrag; |
| 64 | int haus; |
| 65 | |
| 66 | tp = this_player(); |
| 67 | |
| 68 | if (!str || (haus = member( ({"ausbauvertrag", "vertrag", "bausparvertrag"}), str)) <0) { |
| 69 | notify_fail( "Versuch mal 'beantrage vertrag'!\n" ); |
| 70 | return 0; |
| 71 | } |
| 72 | |
| 73 | if (!IS_SEER(tp)) { |
| 74 | notify_fail( "Nur Seher koennen einen Bausparvertrag beantragen!\n" ); |
| 75 | return 0; |
| 76 | } |
| 77 | if (tp->QueryProp(P_KILLS)) { |
| 78 | write("Verbrecher werden hier nicht bedient!\n"); |
| 79 | return 1; |
| 80 | } |
| 81 | if (vertrag = present("sehe\rvertrag", tp)) |
| 82 | write( "Der Beamte schnarrt: Aber Sie haben doch schon einen Vertrag!\n" ); |
| 83 | else if (haus && (present("sehe\rhaus", tp) || VERWALTER->FindeHaus(getuid(tp)))) { |
| 84 | write( "Der Beamte schnarrt: Sie duerfen nur EIN Haus besitzen!\n" ); |
| 85 | HLOG( "BANK.LOG", "Antrag: "+getuid(tp)+" stellte zweiten Antrag.\n" ); |
| 86 | } |
| 87 | else if (!haus && !VERWALTER->FindeHaus(getuid(tp))) { |
| 88 | write( "Der Beamte faucht: Haben sie denn ueberhaupt schon ein Haus aufgestellt?\n" |
| 89 | +"Vorher koennen sie natuerlich keine Erweiterungen beantragen!\n" ); |
| 90 | } |
| 91 | else { |
| 92 | if (!haus && VERWALTER->HausProp(getuid(tp),HP_ROOMS) == 9) { |
| 93 | write( "Der Beamte droehnt: Ihr Haus hat schon die hoechste Ausbaustufe erreicht!\n"); |
| 94 | return 1; |
| 95 | } |
| 96 | (vertrag = clone_object(PATH+"bausparvertrag"))->move(tp, M_NOCHECK); |
| 97 | |
| 98 | write( "Die Schatten verdichten sich zu einem Blatt Papier, welches in Deine Haende\n" |
| 99 | +"geweht wird. Mit droehnender Stimme erklaert der Schalterbeamte:\n" |
| 100 | +"Dies ist Ihr Bausparvertrag. Bitte lesen Sie ihn sich gruendlich durch, be-\n" |
| 101 | +"vor Sie ihn unterschreiben! Wenn Sie ihn erst einmal unterschrieben haben,\n" |
| 102 | +"koennen sie nicht wieder davon zuruecktreten (es sei denn, Sie zerreissen\n" |
| 103 | +"ihn oder ueberziehen die Ratenzahlungen)! Sie sind nicht gezwungen, den Ver-\n" |
| 104 | +"trag sofort zu unterschreiben. Im Hauptraum der Bank befindet sich ein In-\n" |
| 105 | +"formationsstand, an dem Sie Kommentare zu diesem Vertrag kaeuflich erwerben\n" |
| 106 | +"koennen. Wenn Ihnen einige Passagen des Vertrags unverstaendlich sind, wird\n" |
| 107 | +"Ihnen in den Kommentaren sicherlich geholfen.\n" |
| 108 | +"Das Leisten der Unterschrift ist jedoch nur hier an diesem Schalter\n" |
| 109 | +"moeglich!\n" ); |
| 110 | if (!haus) |
| 111 | vertrag->Sign(V_RAUM); |
| 112 | HLOG( "BANK.LOG", "Antrag: "+getuid(tp)+" bekam einen "+(haus ? "Haus" : "Raum")+"vertrag.\n" ); |
| 113 | } |
| 114 | return 1; |
| 115 | } |
| 116 | |
| 117 | int |
| 118 | unterschreiben(string str) |
| 119 | { |
| 120 | object tp, vertrag; |
| 121 | int flag; |
| 122 | |
| 123 | tp = this_player(); |
| 124 | |
| 125 | notify_fail( "Was willst Du denn unterschreiben?\n" ); |
| 126 | if (!str || !(vertrag = present(str, tp)) || !vertrag->id("sehe\rvertrag")) |
| 127 | return 0; |
| 128 | |
| 129 | if ((flag = vertrag->QueryProp(P_AUTOLOADOBJ)[1]) & V_SIGNED) { |
| 130 | write( "Der Schalterbeamte sagt: Aber der Vertrag ist doch schon unterschrieben!\n" ); |
| 131 | return 1; |
| 132 | } |
| 133 | |
| 134 | write( "Der Schalterbeamte sagt: Fuer welche Vertragsvariante haben sie sich\n" |
| 135 | +"entschieden? Tippen Sie 'sanft' fuer den sanften Weg zum eigenen Heim\n" |
| 136 | +"oder 'schnell' fuer den schnellen Weg.\n] " ); |
| 137 | input_to("sign", 0, vertrag, flag|V_EP); |
| 138 | return 1; |
| 139 | } |
| 140 | |
| 141 | void |
| 142 | sign(string str, object vertrag, int flag) |
| 143 | { |
| 144 | object block; |
| 145 | string s; |
| 146 | int *al; |
| 147 | |
| 148 | if (str == "sanft" || str == "schnell") { |
| 149 | write( "Der Schalterbeamte gibt Dir einen Fuellfederhalter sowie ein Skalpell.\n" |
| 150 | +"Schwungvoll setzt Du Deine Unterschrift unter den Vertrag. Dann piekst\n" |
| 151 | +"Du Dir mit dem Skalpell in den Finger und bestaetigst die Unterschrift\n" |
| 152 | +"mit einem dunklen Tropfen Deines Blutes.\n" |
| 153 | +"Ploetzlich zucken Blitze um Dich herum auf, und der Schalterbeamte lacht\n" |
| 154 | +"droehnend auf. Du hast das Gefuehl, dass hier etwas nicht ganz mit rechten\n" |
| 155 | +"Dingen vor sich geht. Dann bestaetigt der Beamte die Unterschrift und\n" |
| 156 | +"uebergibt Dir den ersten Block, auf dem Deine Raten vermerkt werden.\n" |
| 157 | +"Der Beamte erklaert: Damit auf den Block auch eingezahlt wird, muss man\n" |
| 158 | +"ihn wie eine Ruestung anziehen!\n" ); |
| 159 | |
| 160 | this_player()->reduce_hit_points(50); |
| 161 | vertrag->Sign(flag | (str == "sanft" ? V_SIGNED : V_SIGNED | V_FAST)); |
| 162 | (block = clone_object(PATH+"block"))->move(this_player(), M_NOCHECK); |
| 163 | block->SetProp("schwer", V_FAST & vertrag->QueryProp(P_AUTOLOADOBJ)[1]); |
| 164 | al = block->QueryProp(P_AUTOLOADOBJ); |
| 165 | al[V_FLAGS] |= B_ACTIVE; |
| 166 | block->SetProp(P_AUTOLOADOBJ, al); |
| 167 | s = "Antrag: "+getuid(this_player())+" unterschrieb den Vertrag ("+str+").\n"; |
| 168 | HLOG( "BANK.LOG", s ); |
| 169 | HLOG( getuid(this_player()), s ); |
| 170 | } |
| 171 | else { |
| 172 | write( "Der Schalterbeamte sagt: Nur 'sanft' oder 'schnell', bitte!\n" ); |
| 173 | input_to("sign", 0, vertrag, flag); |
| 174 | } |
| 175 | } |