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