blob: 4eb8300be89fc94b38fddac3cb160edd3797ccbb [file] [log] [blame]
// Einiger Code wurde aus dem Questtagebuch des Tempels uebernommen.
// Da man das Buch, sobald es im aufgestellten Lesepult des Spielers
// abgelegt wurde, auch lesen koennen muss, sind die Funktionen und
// Details auch weiterhin sinnvoll. Kaufen kann es jeder Seher, aber
// nutzen kann man es nur mit dem von Hels Avatar ueberreichten Buch.
#include <properties.h>
#include <moving.h>
#include <language.h>
#include <wizlevels.h>
#include "/d/seher/haeuser/moebel/moebel.h"
#include "/d/seher/haeuser/haus.h"
#include "/d/anfaenger/ark/knochentempel/files.h"
#pragma strong_types,rtt_checks
inherit LADEN("swift_std_container");
static string owner;
string le(string key);
string in(string key);
int cmd_eintragen(string str);
int cmd_lesen(string str);
int take_page(string str);
int drop_book(string str);
int cmd_blaettern(string str);
int cmd_oeffnen(string str);
int cmd_schliessen(string str);
void AddTheOldDetails();
protected void create()
{
if(!clonep(this_object()))
{
set_next_reset(-1);
return;
}
::create();
owner="Anonymus";
AddDetail("finger",BS(
"Deine Finger sollten schon vorsichtig sein, wenn sie das Zeder"+
"nholz beruehren. Einerseits, damit Du Dich nicht verletzt, and"+
"ererseits, damit Du nichts beschmutzt.",78));
AddDetail(({"holz","zedernholz","zeder"}),BS(
"Aus einem einzigen starken Stamm einer Zeder bearbeitet, ist d"+
"ieses edle Lesepult schon etwas sehr Feines und Dekoratives.",78));
AddDetail(({"stamm","zedernstamm","holzstamm"}),BS(
"Der Zedernstamm ist wahrlich kunstvoll veredelt worden, sein k"+
"raeftiges Braun wurde hervorragend zur Geltung gebracht.",78));
AddDetail(({"braun","dunkelbraun"}),BS(
"Der dunkelbraune Stamm glaenzt wunderschoen, wenn Licht auf ih"+
"n faellt. Ein sehr angenehmes Holz, das fuer das Lesepult verw"+
"endet wurde.",78));
AddDetail("geltung",BS(
"Ja, dieses Holz gefaellt Dir sehr, das ganze Pult ist ein beme"+
"rkenswertes Kunstwerk.",78));
AddDetail(({"kunst","werk","kunstwerk"}),BS(
"Immer wieder faellt Dein bewundernder Blick auf das Lesepult.",78));
AddDetail("blick",BS(
"Wachsam und flink wie immer, hat er jedoch ein wenig pausiert,"+
" indem er muessig auf dem Lesepult ruht.",78));
AddDetail(({"feines","dekoratives"}),BS(
"Das teilweise eckige und dann wieder sanft geschwungene, runde"+
" Lesepult sieht schon ziemlich repraesentativ aus.",78));
AddDetail("zeder",BS(
"Von ihr ist nurmehr das Pult geblieben, allerdings findest Du,"+
" dass es nicht der schlechteste Teil ist.",78));
AddDetail("teil",BS(
"Du siehst nur den bearbeiteten Teil der Zeder vor Dir.",78));
AddDetail("exemplar",BS(
"Es ist ganz klar zu sehen, dass es sich nur um eine Zeder hand"+
"elt, aus der dieses Pult entstand.",78));
AddDetail(({"handwerk","kunst"}),BS(
"Tatsaechlich ist dieses Lesepult ein sehr schoenes Beispiel ho"+
"echster handwerklicher Kunst.",78));
AddDetail("beispiel",BS(
"Ein weiteres steht hier dummerweise nicht herum.",78));
SetProp("cnt_version_obj","1");
SetProp(P_NAME,"Lesepult");
SetProp(P_GENDER,NEUTER);
SetProp(P_NEVERDROP,1);
SetProp(P_VALUE,10);
SetProp(P_WEIGHT,500000);
SetProp(P_NOGET,"Das Lesepult ist Dir viel zu schwer.\n");
SetProp(P_NOSELL,"Du behaeltst das Lesepult lieber.\n");
SetProp(P_MATERIAL,([MAT_CEDAR:100]));
SetProp(H_FURNITURE,1);
SetProp(P_INFO,BS(
"Auf dieses Lesepult kann man ein ganz bestimmtes schwarzes Bu"+
"ch legen. Dort liegt es perfekt, um darin zu blaettern und zu"+
" lesen. Ausserdem birgt es sicher noch Geheimnisse.",78));
AddId(({"pult","lesepult","\nlesepult_ark"}));
AddCmd("eintragen&quest|aufgabe|loesung|erlebnis|abenteuer",
#'cmd_eintragen,"Was willst Du hier denn eintragen ?\n");
AddCmd(({"lies","lese","les"}),#'cmd_lesen);
AddCmd("nimm",#'take_page);
AddCmd(({"lege","leg"}),#'drop_book);
AddCmd("blaetter|blaettre|blaettere&in&buch|tagebuch|"
"tempeltagebuch",#'cmd_blaettern,"Worin willst Du blaettern ?|"
"Willst Du im Tagebuch blaettern ?");
AddCmd("oeffne&@ID|buch|tagebuch|tempeltagebuch",#'cmd_oeffnen,
"Was willst Du oeffnen?\n");
AddCmd("schliesse|schliess&@ID|buch|tagebuch|tempeltagebuch",
#'cmd_schliessen,"Was willst Du schliessen?\n");
if (MQTBMASTER->QueryTagebuchAufPult(this_player()))
AddTheOldDetails();
}
void SetOwner(string str)
{
owner=str;
}
string QueryOwner()
{
return owner;
}
string _query_short()
{
if ((owner=="Anonymus")||
!this_player()||
!(MQTBMASTER->QueryTagebuchAufPult(this_player())))
return "Ein wunderschoenes Lesepult aus dunkelbraunem Zedernholz";
if (getuid(this_player())==owner)
return
"Ein wunderschoenes Lesepult, auf dem Dein Tagebuch des Tempels ruht";
else return
"Ein wunderschoenes Lesepult, das ein gueldenes Buch traegt";
}
string _query_long()
{
if ((owner=="Anonymus")||
!this_player()||
!(MQTBMASTER->QueryTagebuchAufPult(this_player())))
return BS(
"Vorsichtig faehrst Du mit den Fingern ueber das dunkelbraune Holz."+
" Was Du spuerst, fuehlt sich kuehl und angenehm an, die Zeder, die"+
" fuer dieses bestaunenswerte Lesepult herhalten musste, wurde vors"+
"ichtig und aeusserst kunstfertig bearbeitet. Ein wirklich schoenes"+
" Exemplar holzhandwerklicher Kunst.",78);
if (getuid(this_player())==owner)
{
if (MQTBMASTER->QueryTagebuchAufPult(this_player()))
return BS(
"Vorsichtig faehrst Du mit den Fingern ueber das dunkelbraune Holz"+
". Was Du spuerst, fuehlt sich kuehl und angenehm an, die Zeder, d"+
"ie fuer dieses bestaunenswerte Lesepult herhalten musste, wurde v"+
"orsichtig und aeusserst kunstfertig bearbeitet. Ein wirklich scho"+
"enes Exemplar holzhandwerklicher Kunst, Du bist froh, dieses Lese"+
"pult erstanden zu haben. Auf dem Lesepult siehst Du Dein schwarze"+
"s Tagebuch des Knochentempels, in dem Du nun nur noch lesen kanns"+
"t, denn Deine Abenteuer dort sind vollstaendig zu Papier gebracht"+
". Allerdings kannst Du auch noch ein wenig weiter drin herumblaet"+
"tern, wenn Du magst.",78);
return BS(
"Vorsichtig faehrst Du mit den Fingern ueber das dunkelbraune Holz"+
". Was Du spuerst, fuehlt sich kuehl und angenehm an, die Zeder, d"+
"ie fuer dieses bestaunenswerte Lesepult herhalten musste, wurde v"+
"orsichtig und aeusserst kunstfertig bearbeitet. Ein wirklich scho"+
"enes Exemplar holzhandwerklicher Kunst, Du bist froh, dieses Lese"+
"pult erstanden zu haben. Ein wenig gruebeln laesst Dich die Tatsa"+
"che, dass das Lesepult leer ist. Was man dort wohl platzieren kan"+
"n ?",78);
}
return BS(
"Vorsichtig faehrst Du mit den Fingern ueber das dunkelbraune Holz."+
". Was Du spuerst, fuehlt sich kuehl und angenehm an, die Zeder, di"+
"e fuer dieses bestaunenswerte Lesepult herhalten musste, wurde vor"+
"sichtig und aeusserst kunstfertig bearbeitet. Ein wirklich schoene"+
"s Exemplar holzhandwerklicher Kunst, Du bist ein wenig neidisch."+
""+(MQTBMASTER->QueryTagebuchAufPult(this_player())?" Auf dem Lesep"+
"ult wurde ein schwarzes Buch abgelegt, das sehr wertvoll aussieht.":
" Das Lesepult sieht ohne dazugehoeriges Buch ein wenig einsam aus.")+".",78);
}
void AddTheOldDetails()
{
AddDetail(({"buch","buechlein","tagebuch"}),BS(
"Dies ist ein kleines Buechlein aus Gold, auf dem ein Name in "+
"schwarzen Lettern steht. Ansonsten ist der Einband schlicht, "+
"das Papier schon ausfuehrlich beschrieben und vom vielen Blae"+
"ttern hier und da auch schon ein wenig geknickt.",78));
AddDetail("blaettern",BS(
"Ja, das schoene Buechlein ist von haeufigem Blaettern nicht s"+
"choener geworden, aber irgendetwas Magisches hat es schon an "+
"sich. Ab und an magst Du immer wieder einmal herumblaettern.",78));
AddDetail("magisches",BS(
"Es ist nicht so einfach zu ergruenden, indem man einmal genau"+
"er hinsieht.",78));
AddDetail("leder",BS(
"Das Leder ist glatt und vollkommen guelden. Nur die schwarzen"+
" Lettern geben einen angenehmen Kontrast ab. Irgendwie seltsa"+
"m, denn Du findest, dass Schwarz und Gold eigentlich umgekehr"+
"t mehr Sinn machen.",78));
AddDetail("sinn",BS(
"Vielleicht ist aber auch alles bestens, und nur Dein Verstand"+
" will das nicht nachvollziehen.",78));
AddDetail("verstand",BS(
"Ja, auch Du kannst ihm nicht immer folgen, also wundere Dich "+
"nicht, warum dieses Leder hier golden verfaerbt ist und die B"+
"uchstaben darauf schwarz.",78));
AddDetail(({"lettern","buchstaben"}),BS(
"Du kannst sie lesen.",78));
AddDetail(({"name","namen"}),BS(
"Man kann ihn genauso lesen wie die Buchstaben.",78));
AddDetail("kontrast",BS(
"Die Buchstaben heben sich wirklich deutlich vom gueldenen Led"+
"er des Einbands ab.",78));
AddDetail("einband",BS(
"Es ist kein aufwaendiger Einband, fuerwahr. Dennoch faszinier"+
"t die Pracht, die mit den schwarzen Lettern kontrastiert.",78));
AddDetail("pracht",BS(
"So muss man den goldenen Einband wohl nennen.",78));
AddDetail(({"papier","seiten","buchseiten","seite","buchseite"}),BS(
"Das Papier ist von guter Qualitaet, die Buchseiten lassen sic"+
"h sicher einfach beschreiben.",78));
AddDetail(({"schwarze buchseiten","schwarze buchseite",
"schwarze buchseite"}),BS(
"Tatsaechlich, beim Blaettern siehst Du einige schwarze Buchse"+
"iten, die unbeschrieben sind. Was hat dies zu bedeuten ?",78));
AddDetail("qualitaet",BS(
"Du siehst, dass das Papier fest und bluetenweiss ist.",78));
AddReadDetail(({"buch","buechlein","tagebuch"}),BS(
"Das Buch hat ein Inhaltsverzeichnis. Wenn dort etwas steht, k"+
"annst Du das oder die Kapitel sicher lesen.",78));
AddDetail("kapitel",BS(
"Lies nur im Inhaltsverzeichnis nach, vielleicht hat das Buch "+
"bereits ein oder mehrere Kapitel.",78));
AddReadDetail("kapitel",BS(
"Welches Kapitel willst Du denn lesen ? Sie sind sicher durchn"+
"ummeriert, wenn man schon etwas im Buch niedergeschrieben hat.",78));
AddReadDetail(({"name","namen","buchstaben","lettern"}),#'le);
AddReadDetail(({"inhalt","inhaltsverzeichnis"}),#'in);
SetProp(P_MATERIAL,([MAT_LEATHER:10,MAT_PAPER:15,MAT_CEDAR:75]));
}
int drop_book(string str)
{
if (!stringp(str))
return 0;
if (strstr(lower_case(str),"pult",0)==-1)
return 0;
notify_fail(BS(
"Willst Du etwas auf das Pult legen ? Ein Buch waere passend, "+
"aber es sollte schon etwas Besonderes sein.",78));
if (strstr(lower_case(str),"buch",0)==-1&&
strstr(lower_case(str),"buechlein",0)==-1)
return 0;
notify_fail(BS(
"Das ist nicht Dein Lesepult, Du laesst es besser in Ruhe.",78));
if (getuid(this_player())!=owner)
return 0;
notify_fail(BS(
"Auf dem Pult liegt schon ein goldenes Buch.",78));
if (MQTBMASTER->QueryTagebuchAufPult(this_player()))
return 0;
notify_fail(BS(
"Entweder hast Du Dich noch nicht als wuerdig erwiesen, indem "+
"Du alle Aufgaben im Knochentempel erfuellt hast oder Du hast "+
"dem Avatar des Waechters der Nacht, Mhun'dae Hel, noch nicht "+
"Deine Aufwartung gemacht und ihm gezeigt, dass Du wuerdig bis"+
"t, ein geeignetes Buch zu empfangen. Auf alle Faelle kannst D"+
"u hier noch nichts auf das Pult legen.",78));
if (!present_clone(OBJ("buechlein_invers"),this_player()))
return 0;
MQTBMASTER->AddBuchAufPult(this_player());
this_player()->ReceiveMsg(BS(
"Vorsichtig schlaegst Du Dein gueldenes Tagebuch auf, das Dir "+
"Mhun'dae Hel, das Avatar des Waechters der Nacht, ueberreicht"+
" hat. Du legst es sachte auf das Pult und merkst, dass es sof"+
"ort eine magische Verbindung mit dem Lesepult eingeht. Es ist"+
" nun untrennbar mit diesem verbunden.",78),MT_MAGIC,MA_USE);
tell_room(environment(),BS(
this_player()->Name(WER)+" legt vorsichtig ein gueldenes Buch "+
"mit schwarzen Lettern aufgeschlagen auf dem Lesepult ab und b"+
"etrachtet dieses dann ehrfuerchtig und zutiefst zufrieden.",78),
({this_player()}));
return 1;
}
int cmd_blaettern(string str)
{
notify_fail(BS(
"Auf dem Lesepult liegt doch gar kein Tagebuch.",78));
if (!(MQTBMASTER->QueryTagebuchAufPult(find_player(owner))))
return 0;
notify_fail(BS(
"Das ist nicht Dein Tagebuch, Du laesst es lieber in Frieden.",78));
if (getuid(this_player())!=owner)
return 0;
this_player()->ReceiveMsg(BS(
"Du blaetterst ein wenig durch Dein Tagebuch und stoesst auf e"+
"inige raetselhafte schwarze Seiten. Was mag es damit auf sich"+
" haben ? Ob Du sie herausnehmen kannst ?",78),MT_LOOK,MA_LOOK);
return 1;
}
int take_page(string str)
{
if (!stringp(str))
return 0;
if (present(str,environment()))
return 0;
notify_fail(BS(
"Wo siehst Du denn hier ein Buch ?",78));
if (!(MQTBMASTER->QueryTagebuchAufPult(this_player()))&&
strstr(lower_case(str),"buch")!=-1)
return 0;
if ((owner!=getuid(this_player()))&&
strstr(lower_case(str),"buch")!=-1)
notify_fail(BS(
"Dies ist nicht Dein Lesepult oder Dein Buch darauf, deshalb l"+
"aesst Du es vorsichtshalber liegen.",78));
return 0;
if ((owner!=getuid(this_player()))&&
strstr(lower_case(str),"seite")!=-1)
notify_fail(BS(
"Die Eigentuemerin oder der Eigentuemer des Lesepults haette s"+
"icher etwas dagegen, wenn Du das Buch zerstoerst, also laesst"+
" Du es lieber.",78));
return 0;
// Heilung 1x alle 6 Stunden.
if (this_player()->check_and_update_timed_key(21600,"Ark_Hels_Schwarzes_Buch")==-1)
{
object o;
this_player()->ReceiveMsg(BS(
"Du reisst erst vorsichtig eine schwarze Seite und dann eine"+
" weitere aus dem goldenen Buch. Dann ueberfaellt Dich eine "+
"kleine Schwaeche, die Dich vor weiterem Zerstoeren innehalt"+
"en laesst. Du solltest Hels Grosszuegigkeit nicht ueberscha"+
"etzen.",78),MT_FEEL,MA_TAKE);
tell_room(environment(),BS(
this_player()->Name(WER)+" reisst zwei Seiten aus dem Buch, "+
"das auf dem Pult liegt. Dann haelt "+this_player()->QueryPronoun(WER)+""+
" inne, wahrscheinlich folgt "+this_player()->QueryPronoun(WER)+""+
" einer klugen Eingebung.",78));
o=clone_object(OBJ("reg_seite"));
if (o->move(this_player())!=MOVE_OK)
{
o->remove(1);
this_player()->ReceiveMsg(BS(
"Du kannst die erste Seite nicht mehr tragen, sie loest sic"+
"h einfach auf.",78),MT_MAGIC,MA_REMOVE);
}
// Die erste Seite behandelt, hier, falls man auch die zweite
// Seite nicht tragen kann oder mit der ersten am Limit ist.
o=clone_object(OBJ("reg_seite"));
if (o->move(this_player())!=MOVE_OK)
{
o->remove(1);
this_player()->ReceiveMsg(BS(
"Du kannst die zweite Seite nicht mehr tragen, sie loest si"+
"ch einfach auf.",78),MT_MAGIC,MA_REMOVE);
}
return 1;
}
this_player()->ReceiveMsg(BS(
"Vergeblich reisst Du mehr oder weniger vorsichtig an einigen"+
" schwarzen Seiten im Buch herum, doch sie bleiben stoerrisch"+
". Es wird wohl ein wenig dauern, bis Du das wieder versuchen"+
" kannst.",78),MT_MAGIC,MA_USE);
tell_room(environment(),BS(
this_player()->Name(WER)+" reisst im Buch auf dem Lesepult he"+
"rum.",78),({this_player()}));
return 1;
}
int cmd_lesen(string str)
{
int k;
if(!str) return 0;
if (owner=="Anonymus")
{
write (BS(
"Dieses Lesepult scheint niemandem zu gehoeren ... es loest s"+
"ich daher einfach auf, als Du darauf etwas lesen willst.",78));
remove(1);
return 1;
}
if (getuid(this_player())!=owner)
{
notify_fail(BS(
"Dieses Tagebuch gehoert "+capitalize(owner)+", nicht Dir, Du"+
" bist eigentlich nicht so recht an dem interessiert, was man"+
" in dem Buch niedergeschrieben hat. Sicher ist es uebertrieb"+
"en langatmig formuliert und stimmt nicht genau mit dem ueber"+
"ein, was wirklich geschah. Man kennt das ja.",78));
return 0;
}
if (strstr(lower_case(str),"kapitel",0)!=-1&&
sscanf(lower_case(str),"kapitel %d",k)!=1)
{
write (BS(
"Willst Du ein Kapitel aus dem Buch lesen ? Dann gib bitte ei"+
"ne Ziffer an.",78));
return 1;
}
if (k>0)
{
MQTBMASTER->LiesQuest(k,this_player());
return 1;
}
return 0;
}
int cmd_eintragen(string str)
{
int i;
if (!(MQTBMASTER->QueryTagebuchAufPult(this_player())))
{
notify_fail(BS(
"Du findest hier nichts, worin Du etwas eintragen koenntest.",78));
return 0;
}
if (getuid(this_player())!=owner)
{
notify_fail(BS(
"Dieses Tagebuch gehoert "+capitalize(owner)+", nicht Dir, Du"+
" kannst darin nichts eintragen.",78));
return 0;
}
notify_fail(BS(
"Deine Missionen im Knochentempel ... besser gesagt, dem Wyrmt"+
"empel, sie sind allesamt tapfer von Dir erfuellt worden. Du k"+
"annst hier nichts weiter mehr eintragen, sicher aber von der "+
"arkanen Macht des Buches profitieren, wenn Du es einmal durch"+
"blaetterst.",78));
return 0;
}
string calc_name()
{
string *nam;
string res;
int i,j;
res="";
if (owner=="")
return "";
nam=explode(upperstring(owner),"");
if (j=sizeof(nam))
{
switch(j)
{
case 3..4:
res=" ";
break;
case 5:
res=" ";
break;
case 7:
res=" ";
break;
case 9:
res=" ";
break;
default:
res=" ";
}
for (i=0;i<j;i++)
{
res+=nam[i]+" ";
}
}
return res;
}
string le(string key)
{
return "\n"+
" De Templum Os Hel\n\n"+
calc_name()+"\n\n";
}
string in(string key)
{
if (owner!=getuid(this_player()))
return "Dort steht allerdings nichts. Seltsam.\n";
return MQTBMASTER->LiesInhalt(find_player(owner));
}
// Das hier bezeichnet den Urheber des Moebelstuecks.
// Nicht meine Idee!
string GetOwner() { return "Ark"; }
int cmd_oeffnen(string str)
{
if (strstr(lower_case(str),"pult")!=-1)
{
this_player()->ReceiveMsg(
"Du kannst das Pult nicht oeffnen, nur etwas zum Lesen darauflegen.",
MT_LOOK,MA_FEEL);
return 1;
}
if (strstr(lower_case(str),"buch")!=-1)
{
if (!(MQTBMASTER->QueryTagebuchAufPult(this_player())))
return 0;
this_player()->ReceiveMsg(
"Das schwarze Buch ist doch schon geoeffnet.",MT_LOOK,MA_FEEL);
return 1;
}
// Alles andere per Default.
return 0;
}
int cmd_schliessen(string str)
{
if (strstr(lower_case(str),"pult")!=-1)
{
this_player()->ReceiveMsg(
"Du kannst das Pult nicht schliessen.",MT_LOOK,MA_FEEL);
return 1;
}
if (strstr(lower_case(str),"buch")!=-1)
{
if (!(MQTBMASTER->QueryTagebuchAufPult(this_player())))
return 0;
this_player()->ReceiveMsg(
"Das Buch bleibt trotz Deiner Bemuehungen einfach offen.",MT_LOOK,MA_FEEL);
return 1;
}
else return 0;
}
mixed _query_noget()
{
if (getuid(this_player())!=owner)
return BS(
"Dies ist offensichtlich nicht Dein Pult, deshalb laesst "+
"Du es auch besser liegen.",78);
return 0;
}
string _query_autoloadobj()
{
return QueryOwner();
}
string _set_autoloadobj(string s)
{
return QueryOwner();
}
// Beim Kauf setzen wir erstmal nur den Eigentuemer.
// Ist aus Swifts Container, der diese Funktion im
// NotifyMove() aufruft.
protected void SetBesitzer(string uid, string uuid)
{
SetOwner(uid);
MQTBMASTER->AddLesepult(find_player(uid)||find_netdead(uid));
}