blob: 5143ab2b7683f51951f53db48db3a37ca5adb861 [file] [log] [blame]
MG Mud User88f12472016-06-24 23:31:02 +02001//--------------------------------------------------------------------------------
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"
15inherit "/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
28protected 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
118int 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
125static 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
135void begruessung(object pl, string txt)
136{
137 if( objectp(pl) && present(pl) )
138 tell_room(ETO, "\n"+txt);
139}
140
141void 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
172int 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}