Added public files
Roughly added all public files. Probably missed some, though.
diff --git a/d/seher/haeuser/moebel/vitrine.c b/d/seher/haeuser/moebel/vitrine.c
new file mode 100644
index 0000000..ae5bb96
--- /dev/null
+++ b/d/seher/haeuser/moebel/vitrine.c
@@ -0,0 +1,339 @@
+/************************************************************************************
+Vitrine fuer die Pokale
+Autor: Miril
+letzte Aenderung:
+05.09.2011
+************************************************************************************/
+
+#include <properties.h>
+#include <defines.h>
+#include <wizlevels.h>
+#include "/d/ebene/miril/fraternitas/fraternitas.h"
+#include "/d/ebene/miril/fraternitas/trophy.h"
+#pragma strong_types,rtt_checks
+#include "/d/seher/haeuser/moebel/moebel.h"
+#include "/d/seher/haeuser/haus.h"
+
+inherit LADEN("swift_std_container");
+
+string besitzer;
+int staub;
+string *trophynamen;
+
+static string my_long();
+static string staub_descr();
+void GetTrophyDetails();
+string *GetAllTrophyNames();
+void NeueDetails();
+
+protected void create()
+{
+ if (!clonep(this_object())){
+ set_next_reset(-1);
+ return;
+ }
+ set_next_reset(86400);
+ ::create();
+ besitzer="";
+ staub=0;
+ SetProp(P_NAME,"Vitrine");
+ SetProp(P_SHORT,"Eine Vitrine");
+ Set(P_LONG,#'my_long,F_QUERY_METHOD);
+ SetProp(P_GENDER,FEMALE);
+ SetProp(P_MATERIAL,([MAT_GLASS:50,MAT_EBONY:50]));
+ SetProp(P_VALUE,10000);
+ SetProp(P_WEIGHT,500000);
+ SetProp(P_MAX_OBJECTS,0);
+ SetProp(P_MAX_WEIGHT,0);
+ SetProp(H_FURNITURE,1);
+ SetProp(P_NOGET,"Die Vitrine ist viel zu schwer.\n");
+ SetProp("cnt_version_obj",2);
+ GetTrophyDetails();
+ AddId(({"\nmiril_pokal_vitrine","vitrine"}));
+
+ NeueDetails();
+
+ AddCmd(({"saeubere","saeuber","reinige","reinig","mach","mache"}),
+ "saeuber_cmd");
+
+ AddCmd(({"stelle","stell"}),"stell_cmd");
+ RemoveCmd(({"serlaube"}));
+
+}
+
+void reset(){
+ ++staub;
+ set_next_reset(86400);
+ ::reset();
+ return;
+}
+
+void SetBesitzer(string uid,string uuid){
+ besitzer=uuid;
+ GetTrophyDetails();
+ return;
+}
+
+string QueryBesitzer(){
+ return besitzer;
+}
+
+void NeueDetails(){
+ AddDetail(({"holz","ebenholz"}),BS("Die Vitrine besteht teilweise "
+ "aus Ebenholz. Tueren, Deckel und Einlegeboeden sind aus Glas."));
+ AddDetail(({"tueren","tuer","glastueren","glastuer","deckel"}),BS(
+ "Durch das Glas kannst Du ins Innere der Vitrine gucken."));
+ AddDetail(({"inneres","gegenstaende","gegenstand"}),
+ BS("Dort kann man Pokale hineinstellen, aber nicht wieder "
+ "herausnehmen."));
+ AddDetail(({"glas","scheibe","scheiben"}),
+ BS("Glas ist praktisch, solange es sauber ist: "
+ "Man kann dadurch ins Innere schauen."));
+ AddDetail(({"reihe","platz","einlegeboeden","einlegeboden","boeden",
+ "boden"}),
+ BS("Die vielen Boeden bieten Platz fuer viele Pokale!"));
+ return;
+}
+
+
+static string my_long(){
+ if(staub<21)
+ return BS(
+ "Die schlichte Vitrine aus dunklem Holz eignet sich hervorragend, um "
+ "wertvolle Gegenstaende darin auszustellen. Hinter den beiden Glastueren "
+ "siehst Du eine Reihe von Einlegeboeden, die ebenfalls aus Glas bestehen. "+
+ staub_descr());
+ else return BS(staub_descr());
+}
+
+
+static string staub_descr(){
+ string text;
+ text="";
+ switch(staub){
+ case 0..1:
+ text=
+ "Die Vitrine ist hervorragend gepflegt. Du siehst keinerlei Staub "+
+ "darin, und die Scheiben sind voellig klar.\n";
+ AddDetail(({"staub"}),BS("Keiner zu sehen."));
+ break;
+ case 2..4:
+ text=
+ "Die Vitrine ist gut gepflegt. Es liegt kaum Staub darin, und die "+
+ "Tueren sind klar.\n";
+ AddDetail(({"staub"}),BS("Man sieht nur wenig davon."));
+ break;
+ case 5..7:
+ text=
+ "Die Vitrine ist in einem ordentlichen Zustand, allerdings sammelt "+
+ "sich so langsam Staub auf den Einlegeboeden.\n";
+ AddDetail(({"staub"}),BS("So langsam koennte man die "
+ "Vitrine saeubern!"));
+ AddDetail(({"zustand"}),BS("Noch ist er ordentlich."));
+ break;
+ case 8..10:
+ text=
+ "Die Vitrine wirkt schon etwas staubig. Man erkennt auch, dass "+
+ "der ein oder andere Fingerabdruck die Tueren ziert.";
+ AddDetail(({"staub","fingerabdruck","tueren","glastueren",
+ "deckel","glastuer","tuer","zustand"}),
+ BS("Es lohnt sich jetzt schon, die Vitrine zu saeubern."));
+ break;
+ case 11..15:
+ text=
+ "Du hast den Eindruck, dass die Vitrine langsam einmal gesaeubert "+
+ "werden koennte. Die Einlegeboeden sind staubig und zahlreiche "+
+ "Fingerabdruecke sind auf den Glastueren zu sehen.";
+ break;
+ case 16..20:
+ text=
+ "Die Vitrine macht einen recht ungepflegten Eindruck. Innen ist "+
+ "sie schon sehr verstaubt und auch die Tueren sind schon recht "+
+ "dreckig geworden.";
+ AddDetail(({"staub"}),BS("Nun wird es aber wirklich Zeit, die "
+ "Vitrine zu saeubern. Sonst sieht man bald nichts mehr darin."));
+ break;
+ case 21..25:
+ text=
+ "Die Vitrine ist total zugestaubt. Ueber den Glastueren sind "+
+ "erste Spinnweben zu erkennen und die Scheiben sind schon fast "+
+ "blind von all den Fingerabdruecken unaufmerksamer Gaeste.";
+ RemoveDetail(m_indices(QueryProp(P_DETAILS)));
+ AddDetail(({"spinnweben","dreck","vitrine","glastueren","glastuer",
+ "tueren","tuer","scheibe","scheiben","deckel"}),
+ "Unter dem ganzen Dreck ist leider nichts mehr zu erkennen.\n");
+ AddDetail(({"gaeste","gast","fingerabdruck","fingerabdruecke"}),
+ "Die Gaeste sind sicher schuld an dem Dreck.\n");
+ break;
+ case 26..30:
+ text=
+ "Du kannst die Vitrine unter der dicken Staubschicht kaum noch "+
+ "erkennen und die Glastueren sind blind geworden.";
+ AddDetail(({"staubschicht","schicht"}),
+ BS("Die ist verdammt dick und undurchsichtig."));
+ break;
+ default:
+ text=
+ "Dass sich unter dieser Ansammlung von Spinnweben und Staub noch "+
+ "eine Vitrine mit Glastueren verbergen soll, kannst Du kaum glauben. "+
+ "Jedenfalls kann man durch die voellig blinden Scheiben nichts "+
+ "mehr erkennen.";
+ AddDetail(({"dreck","spinnweben","staub","ansammlung"}),"Pfui Deibel!\n");
+ }
+ return text;
+}
+
+static int saeuber_cmd(string str){
+ string text;
+ if(!str) return 0;
+ if(strstr(str,"vitrine")<0) return 0;
+ switch(staub){
+ case 0:
+ write("Das ist noch nicht noetig!\n");
+ return 1;
+ break;
+ case 1..20:
+ text="Du reinigst die Vitrine gruendlich. Das wurde auch langsam "
+ "Zeit!";
+ if(getuuid(TP)!=besitzer)
+ text+="Du fragst Dich, wieso Du fremde Moebel reinigst.";
+
+ write(BS(text));
+ say(BS(TPN+" reinigt die Vitrine gruendlich. Das wurde auch langsam "
+ "Zeit!\n"),TP);
+ staub=0; //Hier darf noch jemand helfen!
+ break;
+ case 21..30:
+ text="Du beginnst die Vitrine zu reinigen. ";
+ if(getuuid(TP)!=besitzer){
+ text+="Nach einiger Zeit fragst Du Dich, ob Du eigentlich spinnst, "+
+ "denn das ist ueberhaupt nicht Deine Vitrine. Du laesst von dem "+
+ "Vorhaben wieder ab.";
+ say(BS(TPN+" faengt kurz an, die Vitrine zu reinigen, laesst es aber "
+ "schnell wieder sein."),TP);
+ }
+ else{
+ text+="Das dauert eine ganze Weile, aber dann strahlt die Vitrine "
+ "wieder.";
+ say(BS(TPN+" beginnt die Vitrine zu reinigen. Das dauert eine ganze "
+ "Weile, aber dann strahlt sie wieder."),TP);
+ staub=0;
+ }
+ write(BS(text));
+ break;
+ default:
+ if(getuuid(TP)!=besitzer)
+ write("Das dreckige Teil fasst Du nicht an!\n");
+ else{
+ write(BS(
+ "Du schrubbst und schrubbst und es scheint kein Ende zu nehmen. "
+ "Als Du schon langsam aufgeben willst, ist so langsam ein kleiner "
+ "Erfolg zu sehen. Du nimmst Dir vor, die Vitrine in Zukunft "
+ "haeufiger zu reinigen!"));
+ say(BS(
+ TPN+" schrubbt stundenlang an der Vitrine rum, bis sie endlich "
+ "wieder richtig sauber ist."),TP);
+ staub=0;
+ }
+ }
+ if(staub==0){
+ RemoveDetail(m_indices(QueryProp(P_DETAILS)));
+ GetTrophyDetails();
+ NeueDetails();
+ }
+ return 1;
+}
+
+void GetTrophyDetails(){
+ string *trophyliste,*shorts;
+ mapping trophydetails;
+
+ shorts=({});
+
+ trophyliste=MIRIL_TROPHYMASTER->GetPlacedTrophies(besitzer);
+
+ foreach( string tr : trophyliste )
+ shorts+=({ MIRIL_TROPHYMASTER->GetTrophyShort(tr) });
+
+ shorts = sort_array(shorts, #'>);
+ if(!sizeof(shorts))
+ AddDetail(({"pokale","pokal","in vitrine"}),
+ "Bislang ist die Vitrine noch leer.\n");
+ else
+ AddDetail(({"pokale","pokal","in vitrine"}),
+ "Du siehst folgende Pokale in der Vitrine:\n"
+ +implode(shorts,".\n")+".\n");
+
+ foreach( string tr : trophyliste )
+ {
+ AddDetail( MIRIL_TROPHYMASTER->GetTrophyIds(tr),
+ BS(MIRIL_TROPHYMASTER->GetTrophyLong(tr)));
+
+ trophydetails = MIRIL_TROPHYMASTER->GetTrophyDetails(tr);
+ if ( !sizeof(trophydetails) )
+ continue;
+ foreach ( mixed det, string det_desc : trophydetails )
+ AddDetail( det, BS(det_desc) );
+ }
+ return;
+}
+
+string *GetAllTrophyNames(){
+ int i,anzahl;
+ string *trophynamen;
+
+ trophynamen=({});
+
+ foreach(string bla:MIRIL_TROPHYMASTER->GetTrophyListe())
+ trophynamen+=MIRIL_TROPHYMASTER->GetTrophyIds(bla);
+
+ return trophynamen;
+}
+
+static int stell_cmd(string str){
+ string was,identifier;
+ int resultat;
+ object ob;
+ if(!str) return 0;
+ if(strstr(str,"vitrine")<0) return 0;
+ notify_fail("Das ist nicht Deine Vitrine!\n");
+ if(getuuid(TP)!=besitzer)
+ return 0;
+ notify_fail("Die Syntax ist: stelle <gegenstand> in vitrine!\n");
+ if(sscanf(str,"%s in vitrine",was)!=1)
+ return 0;
+
+ notify_fail("Die Vitrine sollte schon offen sein.\n");
+ if(QueryProp(P_CNT_STATUS)!=CNT_STATUS_OPEN && !IS_LEARNER(TP))
+ return 0;
+ notify_fail("Du solltest die Vitrine vorher erstmal saeubern!\n");
+ if(staub>20)
+ return 0;
+ notify_fail("Das kannst Du leider nicht in die Vitrine stellen!\n");
+ if(member(GetAllTrophyNames(),lower_case(was))<0
+ && lower_case(was)!="pokal")
+ return 0;
+ notify_fail("Das hast Du nicht!\n");
+ if(!ob=present(was,TP))
+ return 0;
+ notify_fail("Das kannst Du leider nicht in die Vitrine stellen!\n");
+ if(!ob->id("\nmiril_pokal"))
+ return 0;
+
+ identifier=ob->QueryIdentifier();
+ resultat=MIRIL_TROPHYMASTER->PlaceTrophy(getuuid(TP),identifier);
+
+ notify_fail("Hier stimmt etwas nicht, sag bitte einem Erzmagier Bescheid! "
+ "Resultat="+resultat+"\n");
+ if(resultat!=1)
+ return 0;
+ write(BS("Du stellst den Pokal in die Vitrine und bewunderst ihn noch ein "
+ "wenig.\n"));
+ say(TPN+" stellt einen Pokal in die Vitrine.\n",TP);
+ GetTrophyDetails();
+ ob->remove();
+ if(ob)
+ destruct(ob);
+ return 1;
+}
+