blob: 9b6777052046e9515ecd5ed51e3b1530a0e56587 [file] [log] [blame]
// 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");
}
public varargs void init(object origin) {
int res;
object ob;
::init(origin);
// Von Ark, an alle Rassenstartpunkte
if (ob=present("\nentdecker_obj",this_player()))
ob->Check_And_Update(this_player(),"Menschen");
}