blob: 313e7557e290629a8540233bfcf7070ff3ce5da9 [file] [log] [blame]
MG Mud User3c1f5a82016-06-25 09:57:34 +02001// Ich fand es ein wenig langweilig in der Gilde, also habe ich ein wenig daran
2// gebastelt.
3// Hate.
4// 2002-12-06 Mandragons Projektbrett eingebaut, Humni.
5// 2003-07-11 Bugfix
6// 2005-08-19 Miril Arks Bienen eingebaut
7// 2007-08-03 Zesstra, PFad fuers Vereinsbuero angepasst.
8inherit "/std/gilden_room";
9
10#include <properties.h>
11#include <rooms.h>
12#include <wizlevels.h>
13#include <language.h>
14#include <defines.h>
15#include <moving.h>
16#include <new_skills.h>
17#include <events.h>
18#include <player/fao.h>
19
20#define P_ANFAENGER_BIENENORT_ "anfaenger_bienenort_"
21#define P_ANFAENGER_BIENENZIEL_ "anfaenger_bienenziel_"
22
23string Funktion(); // Funktion der Gilde
24string Schmutz(); // Wohl bald ein Zaubertrank
25
26int _query_light() {return 20;}
27
28void create() {
29 ::create();
30
31 SetProp(P_GUILD_DEFAULT_SPELLBOOK,"ab_spells");
32 SetProp(P_LIGHT,20);
33 SetProp(P_INDOORS,1);
34 AddSpell("steinschlag");
35 AddSpell("licht");
36 AddSpell("kampfschrei");
37 AddSpell("ausweichen");
38 AddSpell("schaetz");
39 AddSpell("pfeil");
40 AddSpell("identifiziere");
41 AddSpell("feuerball");
42 AddSpell("schnell");
43 AddSpell("saeurestrahl");
44
45 SetProp(P_GUILD_MALE_TITLES, ([
46 1 : "der hoffnungsvolle Anfaenger",
47 2 : "der Landstreicher",
48 3 : "der Streuner",
49 4 : "der Wandergeselle",
50 5 : "der Waldlaeufer",
51 6 : "der Faehrtensucher",
52 7 : "der Wegekundige",
53 8 : "der Jaeger",
54 9 : "der Kundschafter",
55 10 : "der Reisende",
56 11 : "der Abenteurer",
57 12 : "der Weltenbummler",
58 13 : "der Draufgaenger",
59 14 : "der Schatzsucher",
60 15 : "der Feuerbaendiger",
61 16 : "der Entdecker",
62 17 : "der Eroberer",
63 18 : "der Held",
64 19 : "der angehende Seher",
65 20 : "der Seher",
66 ]) );
67 SetProp(P_GUILD_FEMALE_TITLES, ([
68 1 : "die hoffnungsvolle Anfaengerin",
69 2 : "die Landstreicherin",
70 3 : "die Streunerin",
71 4 : "die Wandergesellin",
72 5 : "die Waldlaeuferin",
73 6 : "die Faehrtensucherin",
74 7 : "die Wegekundige",
75 8 : "die Jaegerin",
76 9 : "die Kundschafterin",
77 10 : "die Reisende",
78 11 : "die Abenteurerin",
79 12 : "die Weltenbummlerin",
80 13 : "die Draufgaengerin",
81 14 : "die Schatzsucherin",
82 15 : "die Feuerbaendigerin",
83 16 : "die Entdeckerin",
84 17 : "die Erobererin",
85 18 : "die Heldin",
86 19 : "die angehende Seherin",
87 20 : "die Seherin",
88 ]) );
89
90 SetProp(P_INT_SHORT,"Die beruehmte Abenteurergilde");
91 SetProp(P_INT_LONG,
92 "Der grosse Raum mit seiner niedrigen Decke und den grob geschnittenen\n"
93+"Querbalken hat Platz fuer sehr viele Personen. Knarrende Dielen erzaehlen\n"
94+"ueber Heldentaten laengst vergessener Abenteurer, beruehmter als mancher\n"
95+"Weise unserer Zeit.\n"
96+"Abenteurer, aber auch andere Bewohner dieser Welt kommen hierher, um\n"
97+"sich zu informieren, ihre Erfahrungen auszutauschen oder sich in den\n"
98+"verschiedensten Wissenschaften zu verbessern.\n"
99+"Durch die immer offene Tuer scheint die aufgehende Sonne herein und fuellt\n"
100+"den Raum mit ihrem goldenen Licht. Sonst gibt es hier nur noch den Ausgang\n"
101+"im Norden, welcher auf die Hafenstrasse fuehrt und Bilder an den Waenden,\n"
102+"mit Zeichnungen und Gemaelden vom MorgenGrauen. Eins der Bilder erlaeutert\n"
103+"die Funktion der Gilde und eine grosse Uhr an der Wand zeigt, was die\n"
104//+"Stunde schlaegt. In einer Ecke steht ein kleines Projektbrett.\n"
105+"Stunde schlaegt.\n"
106+"Nach oben fuehrt eine Treppe in das Buero des Foerdervereins Projekt\n"
107+"MorgenGrauen e.V., das Du unbedingt besuchen solltest.\n");
108
109 AddDetail(({"raum", "gilde", "abenteurergilde", "haus", "gildenhaus",
110 "gildehaus"}),
111 "Du stehst mitten in der Abenteurergilde. Hier trifft man sich und kann\n"
112 +"auch seine persoenlichen Werte verbessern.\n");
113 AddDetail(({"tuer", "ausgang"}),
114 "Der immer offenstehende Ausgang fuehrt hinaus auf die Hafenstrasse.\n"
115 +"Goldenes Licht einer ewig aufgehenden Sonne scheint herein.\n");
116 AddSpecialDetail(({"bild", "bilder", "zeichnungen", "gemaelde", "karten",
117 "landschaftsbilder"}),"det_bild");
118 AddDetail(({"funktion", "schild"}), #'Funktion);
119 AddDetail(({"wand", "waende"}),
120 "Aus fein saeuberlich geschlagenen Steinen sind die Waende der Gilde\n"+
121 "zusammengesetzt. Viele interessante Bilder haengen daran.\n");
122 AddDetail(({"stein", "steine"}), "Es sind ganz einfache Sandsteine.\n");
123 AddDetail(({"fenster"}),
124 "Eine wundervolle Welt eroeffnet sich Dir, genannt Realitaet. Aber gibt es\n"
125 +"diese wirklich? Ist sie nicht voller Gefahren und Stress?\n");
126 AddDetail(({"seite", "suedseite"}),
127 "Am Suedende des Raumes ist ein eigenartiges Fenster auszumachen.\n");
128 AddDetail(({"balken", "querbalken", "holzbalken", "deckenbalken"}),
129 "Diese Balken halten das Obergeschoss des Gildenhauses, wohin nur Magier\n"
130 +"kommen und sind an manchen Stellen ganz schoen durchgebogen. Das grob ge-\n"
131 +"schnittene Holz ist teilweise von Schwertstreichen zernarbt.\n");
132 AddDetail(({"hafen", "hafenstrasse", "strasse"}),
133 "Zur Tuer hinaus gelangt man ueber die Hafenstrasse zum Hafen von Port Vain"
134 +"\n");
135 AddDetail(({"boden", "fussboden", "dielen"}),
136 "Die knarrenden Dielen der Gilde sind schon alt und abgeschabt. In den\n"
137 +"Ritzen zwischen ihnen ist viel Dreck von den Stiefeln der Abenteurer.\n");
138 AddDetail(({"decke"}),
139 "Die Decke des Raumes wird von Holzbalken gehalten.\n");
140 AddDetail(({"licht", "sonnenlicht", "sonne"}),
141 "Warmes Sonnenlicht scheint durch den Ausgang zur Strasse herein. Jedesmal\n"
142 +"wenn jemand hereinkommt wird er vom Licht umspuelt und erscheint Gott-\n"
143 +"gleich mit dieser Aura.\n");
144 AddDetail(({"ebene"}),
145 "Du betrachtest das Bild der Ebene und denkst, welche Schaetze in dieser\n"
146 +"flachen, gruenen Landschaft verborgen sein muessen.\n");
147 AddDetail(({"gebirge", "huegel", "berge", "berg"}),
148 "Das Bild der Huegel und Berge betrachtend, schleicht sich ein wenig Sehn-\n"
149 +"sucht nach dieser herrlichen, aber gefaehrlichen Landschaft ein.\n");
150 AddDetail(({"perspektiven", "perspektive", "darstellung", "landschaft"}),
151 "Manche der Landschaftsbilder sind aus der Vogelperspektive oder von\n"
152 +"hohen Bergen aus oder von Zwergen gemalt worden.\n");
153 AddDetail(({"see", "meer", "wellen"}),
154 "Die Wellen auf dem Meer glitzern wie tausend Edelsteine.\n");
155 AddDetail(({"spritzer", "lichtspritzer"}),
156 "Wie tausend kleine Edelsteine verteilen sich diese winzigen, gluehenden\n"
157 +"Lichtspritzer ueber das wundervolle Gemaelde\n");
158 AddDetail(({"geschoss", "obergeschoss"}),
159 "Ins obere Geschoss der Gilde kommen nur Magier, mittels eines besonderen\n"
160 +"Zauberspruchs, der die Decke durchlaessig fuer sie macht.\n");
161 AddDetail(({"ritzen", "fugen"}),
162 "In den Fugen zwischen den Dielen befindet sich eine Menge Schmutz und\n"
163 +"Dreck von den Besuchern der Gilde.\n");
164 AddDetail(({"fugen", "dreck", "schmutz"}), #'Schmutz);
165 AddDetail(({"holz"}), "Die Dielen und die Deckenbalken sind aus Holz.\n");
166 AddDetail(({"kartograph", "kartographen"}),
167 "Dieselben laufen hier zwar im Moment nicht herum, aber ihre Karten sehen\n"
168 +"ziemlich verwirrend aus mit den ganzen Linien, welche diese Welt "
169 "darstellen.\n");
170 AddDetail(({"stellen", "stelle"}),
171 "Nichts sieht aus wie das andere, und die Ecken sind da keine Ausnahmen.\n");
172 AddDetail(({"ecken","ecke"}),
173 "In einer der Ecken, gleich neben der Treppe, steht ein kleines braunes\n"
174 +"Holzbrett, das sofort Deine Aufmerksamkeit erregt. Wozu es wohl dient?\n");
175 AddDetail("aufmerksamkeit",
176 "Du beschliesst, Dir das Brett sofort naeher zu betrachten, um sie zu\n"
177 +"befriedigen.\n");
178/*
179 AddDetail(({"brett","holzbrett"}),
180 "Ein unscheinbares kleines Brett steht in der Ecke des Raumes. Wenn man\n"
181 +"bedenkt, wie viele kleine Zettel daran befestigt wurden, kann es sich\n"
182 +"nur um ein schwarzes Brett handeln. Welche Informationen hier wohl\n"
183 +"ausgetauscht werden? Du koenntest natuerlich anfangen, die Zettel zu\n"
184 +"lesen, um das herauszufinden ...\n");
185 AddDetail("zettel",
186 "Viele verschiedene Zettel stecken an dem Brett. Rote, gelbe, blaue,\n"
187 +"jeder scheint eine andere Farbe zu haben. Auf jedem von ihnen scheint\n"
188 +"etwas geschrieben zu sein.\n");
189 AddDetail(({"farbe","farben"}),
190 "Es sind so viele, Du wuerdest bestimmt jahrelang zaehlen.\n");
191 AddDetail("informationen",
192 "Wenn Du die Zettel liest, findest Du bestimmt welche.");
193*/
194 AddDetail(({"wissenschaften", "eigenschaften"}), #'Funktion); //');
195 AddDetail(({"narben", "schwertstreich"}),
196 "Die Narben in den Holzbalken sind schon recht alt. Es ist lange her, dass\n"
197 +"hier richtig gekaempft wurde.\n");
198 AddDetail(({"aura"}),
199 "Eine Aura von Licht umgibt jeden, der von der Strasse ins Haus kommt.\n");
200 AddDetail(({"bewohner", "abenteurer"}),
201 "Hier, im Gildenhaus, ist jeder gern willkommen.\n");
202 AddDetail(({"weise", "weiser", "recken"}),
203 "Die Weisen dieses Landes sind beruehmt, kommen aber nicht an die Be-\n"
204 +"ruehmtheit ihrer Vorfahren, die grossen Recken der ersten Jahre, heran.\n");
205 AddDetail(({"realitaet"}), "Was ist schon real?\n");
206 AddSpecialDetail("uhr","zeige_reboot");
207
208
209 AddDetail(({"buero","foerderverein"}),
210 "Wichtige Informationen warten auf Dich im Buero des Foerdervereins!\n");
211 AddDetail("informationen", "Du musst schon ins Buero gehen, wenn Du "
212 "die Informationen erhalten willst.\n");
213 AddDetail("treppe","Die Treppe fuehrt nach Oben in das Buero des "
214 "Foerdervereins Projekt MorgenGrauen e.V.\n");
215 AddExit("norden", "/d/ebene/room/PortVain/po_haf1");
216 AddExit("oben","/p/verein/room/buero");
217
218 AddCmd("gehe|geh&\ngehtnicht",0,"Um Dich hier fortzubewegen, "
219 "solltest Du direkt das Kommando der Richtung eingeben,"
220 " wie ,,norden'' oder ,,suedwesten''. Du kannst das auch "
221 "abkuerzen, durch ,,n'' oder ,,sw''.");
222
223 AddItem("/obj/zeitungsautomat", REFRESH_REMOVE);
224
225 AddSpecialDetail("karte","karte");
226 AddSpecialDetail("brett","brett_fun");
227
228 EVENTD->RegisterEvent(EVT_LIB_ADVANCE, "handle_advance", this_object());
229
230 // nur auf dem Mudrechner laden (Stichwort: oeffentlich Mudlib)
231#if MUDHOST == __HOST_NAME__
232 AddItem("/p/service/troy/obj/buchautomat", REFRESH_REMOVE);
233// AddItem("/p/service/mandragon/projektbrett/board", REFRESH_REMOVE);
234 // Die Biene fuer den Transport zur Wonnewichtlichtung.
235 // Ark, 19.08.05
236 AddItem("/d/anfaenger/ark/mon/mantisbiene",REFRESH_DESTRUCT,
237 ([P_ANFAENGER_BIENENORT_:"Mensch",
238 P_ANFAENGER_BIENENZIEL_:({"/d/anfaenger/ark/rooms/wald16",
239 "zum Wald der Wonnewichte",
240 "/gilden/abenteurer"})]));
241#endif
242}
243
244string det_bild()
245{
246 return
247 "Die Zeichnung und Gemaelde stellen MorgenGrauen aus den verschiedensten\n"
248 "Perspektiven dar. Einige davon zeigen abstrakte Darstellungen, wie sie\n"
249 "gerne von Kartographen gemacht werden, und andere zeigen wunderschoene\n"
250 "Darstellungen von Landschaften, wie dem Gebirge oder der Ebene. Besonders\n"
251 "schoen ist ein Bild der See. Tausende von Lichtspritzern verteilen sich\n"
252 "ueber die Wellen.\n"
253 "Ein kleines Schild zeigt folgendes:\n"+Funktion();
254}
255
256string brett_fun()
257{
258 if (present("party\nbrett",this_object()))
259 return "Welches Brett meinst Du denn? Das Partybrett oder das Holzbrett?\n";
260 return GetDetail("holzbrett");
261}
262
263int beitreten()
264{
265 if (::beitreten()<1)
266 return 1; // Meldung vom Gildenmaster oder Gildenobjekt
267 write("Du bist jetzt ein Abenteurer.\n");
268 adjust_title(PL);
269 return 1;
270}
271
272varargs int austreten(int loss)
273{
274 if (::austreten()<1)
275 return 1; // Meldung kommt vom Gildenmaster
276 write("Du bist nun kein Abenteurer mehr.\n");
277 return 1;
278}
279
280string Funktion()
281{ string re;
282 re = ("Moegliche Befehle sind:\n"
283 +" liste\n"
284 +" erhoehe (stufe)\n"
285 +" kosten\n"
286 +" lerne\n");
287 if (this_player()->QueryProp(P_GUILD)!="abenteurer")
288 re += (" trete in gilde ein\n"+
289 " trete aus gilde aus\n");
290 return re;
291}
292
293string Schmutz()
294{
295 // hier sollte sich doch glatt ein Zaubertrank lohnen!!
296 return "In den Fugen befindet sich viel Schmutz.\n";
297}
298
299// Fuer Spielerstufenaufstiege gerufen - egal in welcher Gilde.
300public void handle_advance(string eid, object trigob, mixed data) {
301
302 object pl = data[E_OBJECT];
303 if (!pl || !IsGuildMember(pl) || !interactive(pl))
304 return;
305
306 int lvl=pl->QueryProp(P_LEVEL);
307 // nicht fuer Level 1, da ist genug scroll...
308 if (lvl == 1) return;
309
310 // Alle Spells raussuchen, die der Spieler lernen kann.
311 string *spells=filter(m_indices(Query(P_GUILD_SKILLS,F_VALUE)),
312 function int (string sp)
313 {
314 mapping ski = QuerySpell(sp);
315 if (!ski) return 0; // kein Spell
316 if (pl->QuerySkillAbility(sp) > 0
317 || check_restrictions(pl, ski[SI_SKILLRESTR_LEARN]))
318 return 0; // Vorraussetzungen nicht erfuellt oder schon gelernt.
319 return 1; // offenbar ist sp lernbar.
320 }
321 );
322
323 int count=sizeof(spells);
324 if (!count)
325 return;
326
327 if (count == 1) {
328 tell_object(pl, break_string("Dir faellt auf einmal auf, dass Du "
329 "versuchen koenntest, den Zauberspruch \"" + spells[0]
330 + "\" in der Abenteurergilde zu erlernen.",78));
331 }
332 else {
333 tell_object(pl, break_string("Dir faellt auf einmal auf, dass Du "
334 "versuchen koenntest, die folgenden Zaubersprueche in der "
335 "Abenteurergilde zu erlernen:",78));
336 tell_object(pl, CountUp(spells) + "\n");
337 }
338}
339
340// wird aus Spielerobjekt, /std/gilde.c und Gildenmaster gerufen (mindestens)
341// aktualisiert den Gildenlevel auf den Spielerlevel und setzt den per
342// get_new_title() aus den Gildentiteln ermittelten Gildentitel.
343void adjust_title(object pl) {
344 int lv;
345
346 // bei P_LEVEL < 0 ist der Spieler noch "nicht fertig".
347 // Der Titel wird anschliessend noch korrekt gesetzt.
348 if (!pl || !IsGuildMember(pl) || (lv=pl->QueryProp(P_LEVEL)) < 0)
349 return;
350
351 pl->SetProp(P_GUILD_LEVEL,lv);
352 if (!lv) lv=1;
353 pl->SetProp(P_GUILD_TITLE, get_new_title(lv,pl));
354 // Spielertitel nullen, damit der Gildentitel angezeigt wird.
355 if (!IS_SEER(pl) && !FAO_HAS_TITLE_GIFT(pl))
356 pl->SetProp(P_TITLE,0);
357}
358
359string karte() {
360 if (this_player() && present("karte",this_player())) return 0;
361 return GetDetail("karten");
362}
363
364void init() {
365 int res;
366 object ob;
367
368 ::init();
369
370 // Von Ark, an alle Rassenstartpunkte
371 if (ob=present("\nentdecker_obj",this_player()))
372 ob->Check_And_Update(this_player(),"Menschen");
373}
374