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