MG Mud User | 88f1247 | 2016-06-24 23:31:02 +0200 | [diff] [blame^] | 1 | //-------------------------------------------------------------------------------- |
| 2 | // Name des Objects: Verkaeufer (August vom SCHRAENKER) |
| 3 | // Letzte Aenderung: 24.08.2006 |
| 4 | // Magier: Seleven |
| 5 | //-------------------------------------------------------------------------------- |
| 6 | #pragma strong_types,rtt_checks |
| 7 | |
| 8 | #include <properties.h> |
| 9 | #include <language.h> |
| 10 | #include <moving.h> |
| 11 | #include <wizlevels.h> |
| 12 | #include <bank.h> |
| 13 | |
| 14 | #include "schrankladen.h" |
| 15 | inherit "/std/npc"; |
| 16 | |
| 17 | // Wenn im Laden bzw. im Environment von August die Prop "test" auf 1 gesetzt |
| 18 | // wird, kostet der Kauf nichts. Jeder der ein Seherhaus besitzt, kann kaufen. |
| 19 | |
| 20 | // Fuer Prop im Spieler = individuellere Begruessung |
| 21 | #define LASTVISIT "schrankladen_lastvisit" |
| 22 | // 10% Rabatt fuer Leute, die intensiv testeten, Ideen fuer den Laden beisteuerten, |
| 23 | // oder halfen, groessere Bugs zu beheben! |
| 24 | #define RABATT ({"geordi","foobar","blood","lurchi", "eldaron"}) |
| 25 | |
| 26 | // kaufe... andere im raum sollten vor der antwort sehen wer august nach was fragt |
| 27 | |
| 28 | protected void create() |
| 29 | { |
| 30 | if(!clonep(TO)) return; |
| 31 | ::create(); |
| 32 | SetProp(P_LOG_FILE,"seleven/schraenker"); // Seleven 06.04.2006 |
| 33 | SP(P_SHORT, "August"); |
| 34 | SP(P_LONG, BS( |
| 35 | "Das ist August, ein kleiner Zwerg und seines Zeichens Seher-Berater. " |
| 36 | +"Er versorgt Seher mit Eigenheim mit dem Mobiliar, das man braucht, " |
| 37 | +"will man sein Haus uebersichtlich halten und etwas Ordnung in die " |
| 38 | +"Sammlungen bringen, die sich in so einem Seherhaus zwangslaeufig " |
| 39 | +"anhaeufen. Im Gegensatz zu den meisten Zwergen sieht August nicht nur " |
| 40 | +"aus wie frisch geduscht, er steckt auch in einem feinen Anzug. So " |
| 41 | +"einen gepflegten Bart wie den von August hast Du vorher noch nie " |
| 42 | +"gesehen. Und dann duftet er auch noch nach irgendeinem exotischen " |
| 43 | +"Waesserchen. Waere nicht der gierige Blick in seinen Augen, koenntest " |
| 44 | +"Du wirklich zweifeln, dass es sich hier wirklich um einen Zwerg " |
| 45 | +"handelt.",78,0,1)); |
| 46 | SP(P_NAME, "August"); |
| 47 | SP(P_GENDER, MALE); |
| 48 | SP(P_ARTICLE, 0); |
| 49 | SP(P_RACE, "Zwerg"); |
| 50 | // Arathorn, 2015-Okt-13, Zeile vor P_XP gezogen, damit auch sicher kein |
| 51 | // EK angezeigt wird. |
| 52 | create_default_npc(20); |
| 53 | SP(P_XP, 0); |
| 54 | AddId(({"august", "inhaber", "ladeninhaber", "besitzer", |
| 55 | "firmenbesitzer", "verkaeufer", "zwerg", "seher-berater"})); |
| 56 | |
| 57 | SP(P_SIZE, 130); |
| 58 | SP(P_NO_ATTACK, BS("Die beruhigende Melodie scheint nicht nur zum " |
| 59 | +"Vergnuegen der Kunden zu erklingen. Du bringst es einfach " |
| 60 | +"nicht fertig, Deine Hand gegen August zu erheben!")); |
| 61 | |
| 62 | AD(({"anzug"}), BS(Name(WER)+" steckt in einem feinen rotbraunen Anzug, " |
| 63 | +"in dem vermutlich auch ein Bettler koeniglich auf Dich wirken wuerde. " |
| 64 | +"Offensichtlich ist er nicht der Aermsten einer.")); |
| 65 | AD(({"bettler"}), BS("Wie ein Bettler wirkt August nicht auf Dich.")); |
| 66 | AD(({"waesserchen"}), BS("Es riecht koestlich. Schnupper doch mal!")); |
| 67 | AD(({"bart"}), BS("Der vermutlich weisse Bart wurde von Kuenstlerhand " |
| 68 | +"roetlich eingefaerbt und passt farblich vorzueglich zum Anzug.")); |
| 69 | AD(({"kuenstlerhand"}), BS("Bestimmt hat August das nicht selbst gemacht.")); |
| 70 | AD(({"mobiliar"}), BS("Das verkauft er hier.")); |
| 71 | AD(({"augen"}), BS("Obwohl "+Name(WER)+" perfekte Manieren an den Tag " |
| 72 | +"legt, seine Augen verraten ihn. Die Dollarzeichen in seinem Blick " |
| 73 | +"sind nicht zu uebersehen.")); |
| 74 | AD(({"dollarzeichen"}), BS("Eine Redensart. Keine Ahnung was das sein soll.")); |
| 75 | AD(({"redensart"}), BS("Irgend ein Spruch, den Du irgendwo aufgeschnappt hast.")); |
| 76 | AD(({"spruch"}), BS("Im Spruecheklopfen bist Du gut, oder?")); |
| 77 | AD(({"spruecheklopfen"}), BS("OK, ich geb auf. :)")); |
| 78 | AD(({"manieren"}), "Und das bei einem Zwerg!!!\n"); |
| 79 | |
| 80 | AddInfo(({"laden", "schraenker"}), "Der Schraenker ist mein Laden, " |
| 81 | +"und ich denke es ist ein guter Laden. Das Geschaeft laeuft, seit " |
| 82 | +"jeder Ordnung in seinem Seherhaus haben moechte. Und Seherhaeuser " |
| 83 | +"gibt es ja mehr als genug! :)", "sagt: "); |
| 84 | AddInfo(({"haeuser", "seherhaeuser"}), "Bei mir koennen Seher " |
| 85 | +"Mobiliar fuer ihr Seherhaus kaufen. Unsere Qualitaet ist weithin " |
| 86 | +"beruehmt. Ausserdem sind wir die einzigen auf dem Markt.", "grinst: "); |
| 87 | AddInfo(({"melodie"}), "lauscht vertraeumt.\n"); |
| 88 | AddInfo(({"geld"}), "Sie haben doch welches?\n", "fragt besorgt: "); |
| 89 | // Seleven 01.04.2006: frage nach (schluessel)brett eingefuegt |
| 90 | AddInfo(({"mobiliar", "schrank", "schraenke", "truhe", "truhen", "kommode", |
| 91 | "kuehlschrank", "waffenschrank", "waffentruhe", "spind", "kleiderschrank","brett","schluesselbrett", |
| 92 | "muellcontainer", "zauberkiste", "tresor", "holztruhe","vitrine","pult","lesepult"}), |
| 93 | "Lesen Sie doch bitte die Preisliste an der Wand.", "sagt: "); |
| 94 | AddInfo(({"liefern", "lieferung"}), "Wir liefern sofort.", "sagt: "); |
| 95 | AddInfo(({"bart"}), "Es ist ein schoener Bart, nicht? :)", "fragt: "); |
| 96 | AddInfo(({"augen"}), "Was haben Sie an denen auszusetzen?", "fragt: "); |
| 97 | AddInfo(({"dusche"}), "Jeden Morgen. Das ist leider Pflicht. Und 364 mal " |
| 98 | +"zu oft :(", "sagt: "); |
| 99 | AddInfo(({"pflicht", "pflichten"}), "Als Ladeninhaber hat man deren " |
| 100 | +"viele!", "sagt: "); |
| 101 | AddInfo(({"anzug"}), "Ein echter Armgani!", "verkuendet stolz: "); |
| 102 | AddInfo(({"armgani"}), "Du kennst Armgani nicht?", "fragt naseruempfend: "); |
| 103 | AddInfo(({"geordi"}), "Von ihm stammt die urspruengliche Geschaeftsidee " |
| 104 | +"fuer den SCHRAENKER. Dafuer bekommt er bei uns auch Rabatt!", "erzaehlt: "); |
| 105 | AddInfo(({"august"}), "Wollen Sie sich ueber mich lustig machen?", "fragt drohend: "); |
| 106 | AddInfo(({"rabatt"}), "Nur Stammkunden, die uns schon brauchbare Ideen " |
| 107 | +"geliefert haben, oder die uns beim Aufbau des Geschaefts geholfen haben, " |
| 108 | +"gewaehren wir Rabatt.", "sagt: "); |
| 109 | AddInfo(({"ideen"}), "Es muessen brauchbare Ideen sein.", "sagt: "); |
| 110 | AddInfo(({"stammkunde", "stammkunden"}), "Einige kommen oefter vorbei.", "sagt: "); |
| 111 | AddInfo(({"aufbau"}), "Es kommt mir noch so vor, als waers gestern gewesen.", "sagt: "); |
| 112 | AddInfo(({"kunde", "kunden"}), "Ich hoffe mal, dass SIE der Kunde sind!?", "sagt: "); |
| 113 | |
| 114 | AddCmd(({"kauf", "kaufe", "bestell", "bestelle"}), "container_kaufen"); |
| 115 | AddCmd(({"schnupper", "schnuppere"}), "schnuppern"); |
| 116 | } |
| 117 | |
| 118 | int schnuppern() |
| 119 | { |
| 120 | write(BS("Ein betoerender Duft umgibt August, und verdeckt jeglichen Geruch, " |
| 121 | +"den Du von sonstigen Zwergen gewohnt bist.")); |
| 122 | return 1; |
| 123 | } |
| 124 | |
| 125 | static string anrede() |
| 126 | { |
| 127 | switch( TP->QueryProp(P_GENDER) ) |
| 128 | { |
| 129 | case MALE : return "mein Herr"; break; |
| 130 | case FEMALE : return "meine Dame"; break; |
| 131 | } |
| 132 | return "mein H... D... Wasauchimmer"; |
| 133 | } |
| 134 | |
| 135 | void begruessung(object pl, string txt) |
| 136 | { |
| 137 | if( objectp(pl) && present(pl) ) |
| 138 | tell_room(ETO, "\n"+txt); |
| 139 | } |
| 140 | |
| 141 | void init() |
| 142 | { |
| 143 | ::init(); |
| 144 | if (!interactive(TP) || TP->QueryProp(P_INVIS)) |
| 145 | return 0; // Keine Meldungen wenn invis oder kein Spieler! |
| 146 | if(TP->QueryProp(LASTVISIT) < time()-3600) // laenger als 1 Std. nicht da gewesen |
| 147 | { |
| 148 | if( member(RABATT, geteuid(TP)) != -1 ) |
| 149 | call_out("begruessung", 0, TP, BS("Herzlichst Willkommen in meinem " |
| 150 | +"bescheidenen Laden, "+TP->name(WER)+". Es ist jedesmal eine Freude, " |
| 151 | +"Sie zu sehen!",78, Name(WER)+" sagt: ")); |
| 152 | else |
| 153 | call_out("begruessung", 0, TP, BS("Willkommen in meinem bescheidenen Laden, " |
| 154 | +anrede()+".",78, Name(WER)+" sagt: ")); |
| 155 | } |
| 156 | else // schonmal innerhalb 1 Std. da gewesen? |
| 157 | { |
| 158 | if( member(RABATT, geteuid(TP)) != -1 ) |
| 159 | call_out("begruessung", 0, TP, BS("Hallo, "+TP->name(WER)+". " |
| 160 | +"Sie konnten es ja nicht lange ohne mich aushalten, aber Stammkunden " |
| 161 | +"sind mir die liebsten Kunden. Womit kann ich Ihnen diesmal " |
| 162 | +"dienen?",78, Name(WER)+" sagt: ")); |
| 163 | else |
| 164 | call_out("begruessung", 0, TP, BS("Guten Tag, "+anrede()+". " |
| 165 | +"Ich freue mich, dass Sie meinen Laden so bald wieder besuchen kommen! " |
| 166 | +"Womit kann ich Ihnen diesmal dienen?",78, Name(WER)+" sagt: ")); |
| 167 | } |
| 168 | |
| 169 | TP->SetProp(LASTVISIT, time() ); |
| 170 | } |
| 171 | |
| 172 | int container_kaufen(string str) |
| 173 | { |
| 174 | string cnt_file; |
| 175 | int preis; |
| 176 | object zielraum,cnt,ob; |
| 177 | tell_room(ETO, TP->Name(WER)+" wendet sich wegen eines Kaufs an " |
| 178 | +Name(WEN)+".\n", ({TP}) ); |
| 179 | if( (query_wiz_level(TP) >= SEER_LVL && query_wiz_level(TP) < LEARNER_LVL) || |
| 180 | ETO->QueryProp("test") ) // TP ist Seher, oder Testmodus. |
| 181 | { |
| 182 | catch(call_other("/d/seher/haeuser/"+geteuid(TP)+"raum0", "???", 0)); |
| 183 | if( !zielraum=find_object("/d/seher/haeuser/"+geteuid(TP)+"raum0") ) |
| 184 | { |
| 185 | tell_room(ETO, BS("Tut mir leid, "+anrede()+". Voraussetzung fuer eine " |
| 186 | +"Lieferung unserer Artikel ist ein begehbares " |
| 187 | +"Seherhaus.",78, Name(WER)+" sagt: ")); |
| 188 | return 1; |
| 189 | } |
| 190 | notify_fail( BS("Tut mir leid, "+anrede()+". So einen Artikel fuehren wir nicht. " |
| 191 | +"Bitte lesen Sie die Preisliste an der Wand. Dort koennen Sie sich genau " |
| 192 | +"darueber informieren, ueber welche Artikel wir zur Zeit " |
| 193 | +"verfuegen.",78, Name(WER)+" sagt: ")); |
| 194 | if(!str) return 0; |
| 195 | switch(str) |
| 196 | { |
| 197 | case "1" : |
| 198 | case "kommode" : cnt_file="kommode"; |
| 199 | preis=3799; |
| 200 | break; |
| 201 | case "2" : |
| 202 | case "kleiderschrank": cnt_file="kleiderschrank"; |
| 203 | preis=5899; |
| 204 | break; |
| 205 | case "3" : |
| 206 | case "spind" : cnt_file="spind"; |
| 207 | preis=5299; |
| 208 | break; |
| 209 | case "4" : |
| 210 | case "kuehlschrank" : cnt_file="kuehlschrank"; |
| 211 | preis=3499; |
| 212 | break; |
| 213 | case "5" : |
| 214 | case "waffenschrank" : cnt_file="waffenschrank"; |
| 215 | preis=5899; |
| 216 | break; |
| 217 | case "6" : |
| 218 | case "waffentruhe" : cnt_file="waffentruhe"; |
| 219 | preis=5399; |
| 220 | break; |
| 221 | case "7" : |
| 222 | case "tresor" : cnt_file="tresor"; |
| 223 | preis=4499; |
| 224 | break; |
| 225 | case "8" : |
| 226 | case "zauberkiste" : cnt_file="zauberkiste"; |
| 227 | preis=7999; |
| 228 | break; |
| 229 | case "9" : |
| 230 | case "muellcontainer": cnt_file="muellcontainer"; |
| 231 | preis=999; |
| 232 | break; |
| 233 | // Seleven 01.04.2006 |
| 234 | case "10" : |
| 235 | case "schluesselbrett": cnt_file="schluesselbrett"; |
| 236 | preis=499; |
| 237 | break; |
| 238 | case "11" : |
| 239 | case "duschkabine": cnt_file="wasch"; |
| 240 | preis=3499; |
| 241 | break; |
| 242 | case "12": |
| 243 | case "holztruhe": |
| 244 | cnt_file="autoloadertruhe"; |
| 245 | preis=74999; |
| 246 | break; |
| 247 | case "13": |
| 248 | case "vitrine": |
| 249 | cnt_file="vitrine"; |
| 250 | preis=49999; |
| 251 | break; |
| 252 | case "14": |
| 253 | case "lesepult": |
| 254 | cnt_file="lesepult"; |
| 255 | preis=60000; |
| 256 | break; |
| 257 | default: return 0; break; |
| 258 | } |
| 259 | if( member(RABATT, geteuid(TP)) != -1 ) // 10% Rabatt fuer bestimmte Leute, |
| 260 | preis=preis/100*90; // die Ideen fuer den Laden beisteuerten. |
| 261 | if( !ETO->QueryProp("test") ) |
| 262 | { |
| 263 | if( !TP->QueryMoney() ) |
| 264 | { |
| 265 | tell_room(ETO, BS("Ohne Geld bekommen Sie bei uns nichts, "+anrede() |
| 266 | +". Wir sind kein Wohlfahrtsinstitut!",78, Name(WER)+" sagt: ")); |
| 267 | return 1; |
| 268 | } |
| 269 | if( TP->QueryMoney() < preis ) |
| 270 | { |
| 271 | tell_room(ETO, BS( CAP(anrede())+", Sie haben zuwenig Geld dabei. " |
| 272 | +"Der Preis fuer dieses Objekt ist "+preis |
| 273 | +" Muenzen.",78, Name(WER)+" sagt: ")); |
| 274 | return 1; |
| 275 | } |
| 276 | TP->AddMoney(-preis); // Spieler Geld abziehen |
| 277 | ZENTRALBANK->PayIn(preis); // Geld auf die Bank. |
| 278 | } |
| 279 | cnt=clone_object( LADEN(cnt_file) ); |
| 280 | cnt->move(zielraum, M_PUT|M_SILENT); |
| 281 | tell_room(ETO, TP->Name(WER)+" kauft "+cnt->name(WEN)+".\n", ({TP}) ); |
| 282 | tell_room(ETO, BS("Es ist ein Vergnuegen, mit Ihnen Geschaefte zu machen, " |
| 283 | +anrede()+"! Wenn Sie in Ihr Haus zurueckkehren, werden Sie die Ware bereits " |
| 284 | +"vorfinden, so schnell arbeiten wir.",78, Name(WER)+" sagt: ")); |
| 285 | tell_room(zielraum, BS("Mit Knall und Schwefelduft erscheint ein kleines, " |
| 286 | +"verhutzeltes Maennchen. Es traegt einen gruenen Anzug und eine gruene " |
| 287 | +"Kappe, auf der in gelbem Schriftzug \"SCHRAENKER\" steht. Das Maennchen " |
| 288 | +"stellt "+cnt->name(WEN)+" ab und verschwindet auf dem gleichen Wege, wie " |
| 289 | +"es hereingekommen ist.")); |
| 290 | if( present("Interactive", SCHRANKMASTER) ) |
| 291 | tell_room(SCHRANKMASTER, TP->Name(WER)+" kauft "+name(WEN)+".\n"); |
| 292 | SCHRANKMASTER->RegisterCnt(cnt, cnt->QueryProp("cnt_version_std") |
| 293 | +cnt->QueryProp("cnt_version_obj"), geteuid(TP), |
| 294 | "/d/seher/haeuser/"+geteuid(TP)+"raum0"); |
| 295 | return 1; |
| 296 | } |
| 297 | else if(query_wiz_level(TP) >= LEARNER_LVL ) // TP ist Magier. |
| 298 | { |
| 299 | tell_room(ETO, BS("Tut mir leid, "+anrede()+". An Magier liefern wir nichts. " |
| 300 | +"Das ist ein Prinzip des Hauses, und Prinzipien sind dazu da, dass " |
| 301 | +"sie eingehalten werden. ",78, Name(WER)+" sagt: ")); |
| 302 | return 1; |
| 303 | } |
| 304 | else // TP ist Spieler, kein Seher oder Magier. |
| 305 | { |
| 306 | tell_room(ETO, BS("Tut mir leid, "+anrede()+". Wir liefern nur an Seher. " |
| 307 | +"Aber da ich Sie als strebsame und erfolgreiche Person ansehe, " |
| 308 | +"bin ich sicher, dass wir uns bald wiedersehen!",78, Name(WER)+" sagt: ")); |
| 309 | return 1; |
| 310 | } |
| 311 | } |