Added Abenteuergilde
diff --git a/gilden/abenteurer.c b/gilden/abenteurer.c
new file mode 100644
index 0000000..313e755
--- /dev/null
+++ b/gilden/abenteurer.c
@@ -0,0 +1,374 @@
+// Ich fand es ein wenig langweilig in der Gilde, also habe ich ein wenig daran
+// gebastelt.
+// Hate.
+// 2002-12-06 Mandragons Projektbrett eingebaut, Humni.
+// 2003-07-11 Bugfix
+// 2005-08-19 Miril Arks Bienen eingebaut
+// 2007-08-03 Zesstra, PFad fuers Vereinsbuero angepasst.
+inherit "/std/gilden_room";
+
+#include <properties.h>
+#include <rooms.h>
+#include <wizlevels.h>
+#include <language.h>
+#include <defines.h>
+#include <moving.h>
+#include <new_skills.h>
+#include <events.h>
+#include <player/fao.h>
+
+#define P_ANFAENGER_BIENENORT_ "anfaenger_bienenort_"
+#define P_ANFAENGER_BIENENZIEL_ "anfaenger_bienenziel_"
+
+string Funktion(); // Funktion der Gilde
+string Schmutz(); // Wohl bald ein Zaubertrank
+
+int _query_light() {return 20;}
+
+void create() {
+ ::create();
+
+ SetProp(P_GUILD_DEFAULT_SPELLBOOK,"ab_spells");
+ SetProp(P_LIGHT,20);
+ SetProp(P_INDOORS,1);
+ AddSpell("steinschlag");
+ AddSpell("licht");
+ AddSpell("kampfschrei");
+ AddSpell("ausweichen");
+ AddSpell("schaetz");
+ AddSpell("pfeil");
+ AddSpell("identifiziere");
+ AddSpell("feuerball");
+ AddSpell("schnell");
+ AddSpell("saeurestrahl");
+
+ SetProp(P_GUILD_MALE_TITLES, ([
+ 1 : "der hoffnungsvolle Anfaenger",
+ 2 : "der Landstreicher",
+ 3 : "der Streuner",
+ 4 : "der Wandergeselle",
+ 5 : "der Waldlaeufer",
+ 6 : "der Faehrtensucher",
+ 7 : "der Wegekundige",
+ 8 : "der Jaeger",
+ 9 : "der Kundschafter",
+ 10 : "der Reisende",
+ 11 : "der Abenteurer",
+ 12 : "der Weltenbummler",
+ 13 : "der Draufgaenger",
+ 14 : "der Schatzsucher",
+ 15 : "der Feuerbaendiger",
+ 16 : "der Entdecker",
+ 17 : "der Eroberer",
+ 18 : "der Held",
+ 19 : "der angehende Seher",
+ 20 : "der Seher",
+ ]) );
+ SetProp(P_GUILD_FEMALE_TITLES, ([
+ 1 : "die hoffnungsvolle Anfaengerin",
+ 2 : "die Landstreicherin",
+ 3 : "die Streunerin",
+ 4 : "die Wandergesellin",
+ 5 : "die Waldlaeuferin",
+ 6 : "die Faehrtensucherin",
+ 7 : "die Wegekundige",
+ 8 : "die Jaegerin",
+ 9 : "die Kundschafterin",
+ 10 : "die Reisende",
+ 11 : "die Abenteurerin",
+ 12 : "die Weltenbummlerin",
+ 13 : "die Draufgaengerin",
+ 14 : "die Schatzsucherin",
+ 15 : "die Feuerbaendigerin",
+ 16 : "die Entdeckerin",
+ 17 : "die Erobererin",
+ 18 : "die Heldin",
+ 19 : "die angehende Seherin",
+ 20 : "die Seherin",
+ ]) );
+
+ SetProp(P_INT_SHORT,"Die beruehmte Abenteurergilde");
+ SetProp(P_INT_LONG,
+ "Der grosse Raum mit seiner niedrigen Decke und den grob geschnittenen\n"
++"Querbalken hat Platz fuer sehr viele Personen. Knarrende Dielen erzaehlen\n"
++"ueber Heldentaten laengst vergessener Abenteurer, beruehmter als mancher\n"
++"Weise unserer Zeit.\n"
++"Abenteurer, aber auch andere Bewohner dieser Welt kommen hierher, um\n"
++"sich zu informieren, ihre Erfahrungen auszutauschen oder sich in den\n"
++"verschiedensten Wissenschaften zu verbessern.\n"
++"Durch die immer offene Tuer scheint die aufgehende Sonne herein und fuellt\n"
++"den Raum mit ihrem goldenen Licht. Sonst gibt es hier nur noch den Ausgang\n"
++"im Norden, welcher auf die Hafenstrasse fuehrt und Bilder an den Waenden,\n"
++"mit Zeichnungen und Gemaelden vom MorgenGrauen. Eins der Bilder erlaeutert\n"
++"die Funktion der Gilde und eine grosse Uhr an der Wand zeigt, was die\n"
+//+"Stunde schlaegt. In einer Ecke steht ein kleines Projektbrett.\n"
++"Stunde schlaegt.\n"
++"Nach oben fuehrt eine Treppe in das Buero des Foerdervereins Projekt\n"
++"MorgenGrauen e.V., das Du unbedingt besuchen solltest.\n");
+
+ AddDetail(({"raum", "gilde", "abenteurergilde", "haus", "gildenhaus",
+ "gildehaus"}),
+ "Du stehst mitten in der Abenteurergilde. Hier trifft man sich und kann\n"
+ +"auch seine persoenlichen Werte verbessern.\n");
+ AddDetail(({"tuer", "ausgang"}),
+ "Der immer offenstehende Ausgang fuehrt hinaus auf die Hafenstrasse.\n"
+ +"Goldenes Licht einer ewig aufgehenden Sonne scheint herein.\n");
+ AddSpecialDetail(({"bild", "bilder", "zeichnungen", "gemaelde", "karten",
+ "landschaftsbilder"}),"det_bild");
+ AddDetail(({"funktion", "schild"}), #'Funktion);
+ AddDetail(({"wand", "waende"}),
+ "Aus fein saeuberlich geschlagenen Steinen sind die Waende der Gilde\n"+
+ "zusammengesetzt. Viele interessante Bilder haengen daran.\n");
+ AddDetail(({"stein", "steine"}), "Es sind ganz einfache Sandsteine.\n");
+ AddDetail(({"fenster"}),
+ "Eine wundervolle Welt eroeffnet sich Dir, genannt Realitaet. Aber gibt es\n"
+ +"diese wirklich? Ist sie nicht voller Gefahren und Stress?\n");
+ AddDetail(({"seite", "suedseite"}),
+ "Am Suedende des Raumes ist ein eigenartiges Fenster auszumachen.\n");
+ AddDetail(({"balken", "querbalken", "holzbalken", "deckenbalken"}),
+ "Diese Balken halten das Obergeschoss des Gildenhauses, wohin nur Magier\n"
+ +"kommen und sind an manchen Stellen ganz schoen durchgebogen. Das grob ge-\n"
+ +"schnittene Holz ist teilweise von Schwertstreichen zernarbt.\n");
+ AddDetail(({"hafen", "hafenstrasse", "strasse"}),
+ "Zur Tuer hinaus gelangt man ueber die Hafenstrasse zum Hafen von Port Vain"
+ +"\n");
+ AddDetail(({"boden", "fussboden", "dielen"}),
+ "Die knarrenden Dielen der Gilde sind schon alt und abgeschabt. In den\n"
+ +"Ritzen zwischen ihnen ist viel Dreck von den Stiefeln der Abenteurer.\n");
+ AddDetail(({"decke"}),
+ "Die Decke des Raumes wird von Holzbalken gehalten.\n");
+ AddDetail(({"licht", "sonnenlicht", "sonne"}),
+ "Warmes Sonnenlicht scheint durch den Ausgang zur Strasse herein. Jedesmal\n"
+ +"wenn jemand hereinkommt wird er vom Licht umspuelt und erscheint Gott-\n"
+ +"gleich mit dieser Aura.\n");
+ AddDetail(({"ebene"}),
+ "Du betrachtest das Bild der Ebene und denkst, welche Schaetze in dieser\n"
+ +"flachen, gruenen Landschaft verborgen sein muessen.\n");
+ AddDetail(({"gebirge", "huegel", "berge", "berg"}),
+ "Das Bild der Huegel und Berge betrachtend, schleicht sich ein wenig Sehn-\n"
+ +"sucht nach dieser herrlichen, aber gefaehrlichen Landschaft ein.\n");
+ AddDetail(({"perspektiven", "perspektive", "darstellung", "landschaft"}),
+ "Manche der Landschaftsbilder sind aus der Vogelperspektive oder von\n"
+ +"hohen Bergen aus oder von Zwergen gemalt worden.\n");
+ AddDetail(({"see", "meer", "wellen"}),
+ "Die Wellen auf dem Meer glitzern wie tausend Edelsteine.\n");
+ AddDetail(({"spritzer", "lichtspritzer"}),
+ "Wie tausend kleine Edelsteine verteilen sich diese winzigen, gluehenden\n"
+ +"Lichtspritzer ueber das wundervolle Gemaelde\n");
+ AddDetail(({"geschoss", "obergeschoss"}),
+ "Ins obere Geschoss der Gilde kommen nur Magier, mittels eines besonderen\n"
+ +"Zauberspruchs, der die Decke durchlaessig fuer sie macht.\n");
+ AddDetail(({"ritzen", "fugen"}),
+ "In den Fugen zwischen den Dielen befindet sich eine Menge Schmutz und\n"
+ +"Dreck von den Besuchern der Gilde.\n");
+ AddDetail(({"fugen", "dreck", "schmutz"}), #'Schmutz);
+ AddDetail(({"holz"}), "Die Dielen und die Deckenbalken sind aus Holz.\n");
+ AddDetail(({"kartograph", "kartographen"}),
+ "Dieselben laufen hier zwar im Moment nicht herum, aber ihre Karten sehen\n"
+ +"ziemlich verwirrend aus mit den ganzen Linien, welche diese Welt "
+ "darstellen.\n");
+ AddDetail(({"stellen", "stelle"}),
+ "Nichts sieht aus wie das andere, und die Ecken sind da keine Ausnahmen.\n");
+ AddDetail(({"ecken","ecke"}),
+ "In einer der Ecken, gleich neben der Treppe, steht ein kleines braunes\n"
+ +"Holzbrett, das sofort Deine Aufmerksamkeit erregt. Wozu es wohl dient?\n");
+ AddDetail("aufmerksamkeit",
+ "Du beschliesst, Dir das Brett sofort naeher zu betrachten, um sie zu\n"
+ +"befriedigen.\n");
+/*
+ AddDetail(({"brett","holzbrett"}),
+ "Ein unscheinbares kleines Brett steht in der Ecke des Raumes. Wenn man\n"
+ +"bedenkt, wie viele kleine Zettel daran befestigt wurden, kann es sich\n"
+ +"nur um ein schwarzes Brett handeln. Welche Informationen hier wohl\n"
+ +"ausgetauscht werden? Du koenntest natuerlich anfangen, die Zettel zu\n"
+ +"lesen, um das herauszufinden ...\n");
+ AddDetail("zettel",
+ "Viele verschiedene Zettel stecken an dem Brett. Rote, gelbe, blaue,\n"
+ +"jeder scheint eine andere Farbe zu haben. Auf jedem von ihnen scheint\n"
+ +"etwas geschrieben zu sein.\n");
+ AddDetail(({"farbe","farben"}),
+ "Es sind so viele, Du wuerdest bestimmt jahrelang zaehlen.\n");
+ AddDetail("informationen",
+ "Wenn Du die Zettel liest, findest Du bestimmt welche.");
+*/
+ AddDetail(({"wissenschaften", "eigenschaften"}), #'Funktion); //');
+ AddDetail(({"narben", "schwertstreich"}),
+ "Die Narben in den Holzbalken sind schon recht alt. Es ist lange her, dass\n"
+ +"hier richtig gekaempft wurde.\n");
+ AddDetail(({"aura"}),
+ "Eine Aura von Licht umgibt jeden, der von der Strasse ins Haus kommt.\n");
+ AddDetail(({"bewohner", "abenteurer"}),
+ "Hier, im Gildenhaus, ist jeder gern willkommen.\n");
+ AddDetail(({"weise", "weiser", "recken"}),
+ "Die Weisen dieses Landes sind beruehmt, kommen aber nicht an die Be-\n"
+ +"ruehmtheit ihrer Vorfahren, die grossen Recken der ersten Jahre, heran.\n");
+ AddDetail(({"realitaet"}), "Was ist schon real?\n");
+ AddSpecialDetail("uhr","zeige_reboot");
+
+
+ AddDetail(({"buero","foerderverein"}),
+ "Wichtige Informationen warten auf Dich im Buero des Foerdervereins!\n");
+ AddDetail("informationen", "Du musst schon ins Buero gehen, wenn Du "
+ "die Informationen erhalten willst.\n");
+ AddDetail("treppe","Die Treppe fuehrt nach Oben in das Buero des "
+ "Foerdervereins Projekt MorgenGrauen e.V.\n");
+ AddExit("norden", "/d/ebene/room/PortVain/po_haf1");
+ AddExit("oben","/p/verein/room/buero");
+
+ AddCmd("gehe|geh&\ngehtnicht",0,"Um Dich hier fortzubewegen, "
+ "solltest Du direkt das Kommando der Richtung eingeben,"
+ " wie ,,norden'' oder ,,suedwesten''. Du kannst das auch "
+ "abkuerzen, durch ,,n'' oder ,,sw''.");
+
+ AddItem("/obj/zeitungsautomat", REFRESH_REMOVE);
+
+ AddSpecialDetail("karte","karte");
+ AddSpecialDetail("brett","brett_fun");
+
+ EVENTD->RegisterEvent(EVT_LIB_ADVANCE, "handle_advance", this_object());
+
+ // nur auf dem Mudrechner laden (Stichwort: oeffentlich Mudlib)
+#if MUDHOST == __HOST_NAME__
+ AddItem("/p/service/troy/obj/buchautomat", REFRESH_REMOVE);
+// AddItem("/p/service/mandragon/projektbrett/board", REFRESH_REMOVE);
+ // Die Biene fuer den Transport zur Wonnewichtlichtung.
+ // Ark, 19.08.05
+ AddItem("/d/anfaenger/ark/mon/mantisbiene",REFRESH_DESTRUCT,
+ ([P_ANFAENGER_BIENENORT_:"Mensch",
+ P_ANFAENGER_BIENENZIEL_:({"/d/anfaenger/ark/rooms/wald16",
+ "zum Wald der Wonnewichte",
+ "/gilden/abenteurer"})]));
+#endif
+}
+
+string det_bild()
+{
+ return
+ "Die Zeichnung und Gemaelde stellen MorgenGrauen aus den verschiedensten\n"
+ "Perspektiven dar. Einige davon zeigen abstrakte Darstellungen, wie sie\n"
+ "gerne von Kartographen gemacht werden, und andere zeigen wunderschoene\n"
+ "Darstellungen von Landschaften, wie dem Gebirge oder der Ebene. Besonders\n"
+ "schoen ist ein Bild der See. Tausende von Lichtspritzern verteilen sich\n"
+ "ueber die Wellen.\n"
+ "Ein kleines Schild zeigt folgendes:\n"+Funktion();
+}
+
+string brett_fun()
+{
+ if (present("party\nbrett",this_object()))
+ return "Welches Brett meinst Du denn? Das Partybrett oder das Holzbrett?\n";
+ return GetDetail("holzbrett");
+}
+
+int beitreten()
+{
+ if (::beitreten()<1)
+ return 1; // Meldung vom Gildenmaster oder Gildenobjekt
+ write("Du bist jetzt ein Abenteurer.\n");
+ adjust_title(PL);
+ return 1;
+}
+
+varargs int austreten(int loss)
+{
+ if (::austreten()<1)
+ return 1; // Meldung kommt vom Gildenmaster
+ write("Du bist nun kein Abenteurer mehr.\n");
+ return 1;
+}
+
+string Funktion()
+{ string re;
+ re = ("Moegliche Befehle sind:\n"
+ +" liste\n"
+ +" erhoehe (stufe)\n"
+ +" kosten\n"
+ +" lerne\n");
+ if (this_player()->QueryProp(P_GUILD)!="abenteurer")
+ re += (" trete in gilde ein\n"+
+ " trete aus gilde aus\n");
+ return re;
+}
+
+string Schmutz()
+{
+ // hier sollte sich doch glatt ein Zaubertrank lohnen!!
+ return "In den Fugen befindet sich viel Schmutz.\n";
+}
+
+// Fuer Spielerstufenaufstiege gerufen - egal in welcher Gilde.
+public void handle_advance(string eid, object trigob, mixed data) {
+
+ object pl = data[E_OBJECT];
+ if (!pl || !IsGuildMember(pl) || !interactive(pl))
+ return;
+
+ int lvl=pl->QueryProp(P_LEVEL);
+ // nicht fuer Level 1, da ist genug scroll...
+ if (lvl == 1) return;
+
+ // Alle Spells raussuchen, die der Spieler lernen kann.
+ string *spells=filter(m_indices(Query(P_GUILD_SKILLS,F_VALUE)),
+ function int (string sp)
+ {
+ mapping ski = QuerySpell(sp);
+ if (!ski) return 0; // kein Spell
+ if (pl->QuerySkillAbility(sp) > 0
+ || check_restrictions(pl, ski[SI_SKILLRESTR_LEARN]))
+ return 0; // Vorraussetzungen nicht erfuellt oder schon gelernt.
+ return 1; // offenbar ist sp lernbar.
+ }
+ );
+
+ int count=sizeof(spells);
+ if (!count)
+ return;
+
+ if (count == 1) {
+ tell_object(pl, break_string("Dir faellt auf einmal auf, dass Du "
+ "versuchen koenntest, den Zauberspruch \"" + spells[0]
+ + "\" in der Abenteurergilde zu erlernen.",78));
+ }
+ else {
+ tell_object(pl, break_string("Dir faellt auf einmal auf, dass Du "
+ "versuchen koenntest, die folgenden Zaubersprueche in der "
+ "Abenteurergilde zu erlernen:",78));
+ tell_object(pl, CountUp(spells) + "\n");
+ }
+}
+
+// wird aus Spielerobjekt, /std/gilde.c und Gildenmaster gerufen (mindestens)
+// aktualisiert den Gildenlevel auf den Spielerlevel und setzt den per
+// get_new_title() aus den Gildentiteln ermittelten Gildentitel.
+void adjust_title(object pl) {
+ int lv;
+
+ // bei P_LEVEL < 0 ist der Spieler noch "nicht fertig".
+ // Der Titel wird anschliessend noch korrekt gesetzt.
+ if (!pl || !IsGuildMember(pl) || (lv=pl->QueryProp(P_LEVEL)) < 0)
+ return;
+
+ pl->SetProp(P_GUILD_LEVEL,lv);
+ if (!lv) lv=1;
+ pl->SetProp(P_GUILD_TITLE, get_new_title(lv,pl));
+ // Spielertitel nullen, damit der Gildentitel angezeigt wird.
+ if (!IS_SEER(pl) && !FAO_HAS_TITLE_GIFT(pl))
+ pl->SetProp(P_TITLE,0);
+}
+
+string karte() {
+ if (this_player() && present("karte",this_player())) return 0;
+ return GetDetail("karten");
+}
+
+void init() {
+ int res;
+ object ob;
+
+ ::init();
+
+ // Von Ark, an alle Rassenstartpunkte
+ if (ob=present("\nentdecker_obj",this_player()))
+ ob->Check_And_Update(this_player(),"Menschen");
+}
+