blob: 79209b474abb274b2f1677f188ab72228648d9fc [file] [log] [blame]
//--------------------------------------------------------------------------------
// Name des Objects: Kleiderschrank
// Letzte Aenderung: 17.03.2001
// Magier: Swift
//--------------------------------------------------------------------------------
#pragma strong_types,rtt_checks
#include "schrankladen.h"
#include <ansi.h>
inherit LADEN("swift_std_container");
#define VERSION_OBJ "3"
string strall;
protected void create()
{
if (!clonep(TO)) return;
swift_std_container::create();
SetProp(P_SHORT, "Ein Kleiderschrank");
SetProp(P_LONG, BS(
"In diesem massiven Holzschrank kannst Du die Ausruestung fuer eine "
+"halbe Armee unterbringen. Mehrere Regale sorgen dafuer, dass alles "
+"seinen geordneten Platz findet, damit Du es auch schnell "
+"wiederfindest.")+"@@cnt_status@@");
AddId(({"kleiderschrank", "holzschrank", "schrank"}));
SetProp("cnt_version_obj", VERSION_OBJ);
SetProp(P_NAME, "Kleiderschrank");
SetProp(P_GENDER, MALE);
SetProp(P_WEIGHT, 5000); // Gewicht 5 Kg
SetProp(P_MAX_WEIGHT, 1000000); // Es passen fuer 1000 kg Sachen rein.
SetProp(P_WEIGHT_PERCENT, 100); // Dafuer macht er auch nix leichter :)
SetProp(P_MAX_OBJECTS, 100); // Mehr sollte nicht sein, lt. Tiamak.
SetProp(P_VALUE, 0); // Kein materieller Wert. Ist eh nicht verkaufbar.
SetProp(P_NOBUY, 1); // Wird im Laden zerstoert, falls er verkauft wird.
SetProp(P_NOGET, "Das geht nicht. "+Name(WER,1)+" haftet wie magisch am Boden.\n");
SetProp(P_MATERIAL, ({MAT_MISC_WOOD, MAT_MISC_MAGIC}) );
SetProp(P_INFO, "Versuchs mal mit: \"skommandos "+QueryProp(P_IDS)[1]+"\" !\n");
SetProp("obj_cmd", "sliste [Objekt-Id] [Kleidungs-/Ruestungstyp|\"alles\"]\n"
+" Kleidungs-/Ruestungstypen: Helme, Umhaenge, Ruestungen, Hosen, Schuhe,\n"
+" Handschuhe, Guertel, Amulette, Ringe, Koecher,\n"
+" Schilde, Sonstiges\n");
AD(({"regal", "regale"}), BS("Durch die Regale kommt etwas Ordnung in die "
+"vielen Sachen, die man in den Schrank stecken kann. Du kannst Dir z.B. "
+"eine Liste bestimmter Kleidungs-/Ruestungstypen des Schrankinhaltes "
+"mit dem Befehl \"sliste\" anschauen. (Das geht natuerlich nur bei "
+"offenem Schrank!"));
AddCmd(({"sliste"}), "auflistung");
}
varargs int PreventInsert(object ob)
{
// Nur Ruestung/Kleidung hat in diesem Container was verloren!
if ((ob->IsClothing() || ob->QueryProp(P_ARMOUR_TYPE))
&& !ob->QueryProp(P_WEAPON_TYPE) )
{
return ::PreventInsert(ob);
}
write( BS("In "+name(WEN,1)+" kannst Du nur Ruestungs-/Kleidungsstuecke legen!"));
return 1;
}
int auflistung2(string was, string nf_str1, string nf_str2, int alles)
{
string obshort, suche, *strs;
object *obs;
int i;
mapping suchobs;
switch(was)
{
case "helme" : suche=AT_HELMET; break;
case "umhaenge" : suche=AT_CLOAK; break;
case "ruestungen" : suche=AT_ARMOUR; break;
case "hosen" : suche=AT_TROUSERS; break;
case "schuhe" : suche=AT_BOOT; break;
case "handschuhe" : suche=AT_GLOVE; break;
case "guertel" : suche=AT_BELT; break;
case "amulette" : suche=AT_AMULET; break;
case "ringe" : suche=AT_RING; break;
case "koecher" : suche=AT_QUIVER; break;
case "schilde" : suche=AT_SHIELD; break;
case "sonstiges" : suche=AT_MISC; break;
default : write("Fehler: Ungueltiger Kleidungs-/Ruestungstyp. "
+"Folgende Typen gibt es:\n"+nf_str1+nf_str2);
return 1; break;
}
obs=all_inventory();
suchobs=([]);
for(i=0;i<sizeof(obs);i++)
{
obshort=obs[i]->QueryProp(P_SHORT);
if(obshort=="Nichts besonderes") // keine P_SHORT ?
obshort=obs[i]->Name(WER); // Hoffen wir mal dass das Obj. nen Namen hat.
if(obs[i]->QueryProp(P_ARMOUR_TYPE)==suche) // Gesuchter ArmourType gefunden...
{
if(suchobs[obshort]) // P_SHORT des Obj. schon im mapping?
{
if( obs[i]->QueryProp(P_AMOUNT) )
suchobs[obshort]+=obs[i]->QueryProp(P_AMOUNT); // Dann den Zaehler um Amount hoch!
else
suchobs[obshort]+=1; // Dann den Zaehler um 1 hoch!
}
else
{
if( obs[i]->QueryProp(P_AMOUNT) )
suchobs+=([obshort: obs[i]->QueryProp(P_AMOUNT)]);
else
suchobs+=([obshort: 1]);
}
}
}
strs=m_indices(suchobs);
if(sizeof(strs))
{
if(!alles)
{
strall+=Name(WER,1)+" enthaelt folgende "+CAP(was)+":\n";
strall+="------------------------------------------------------------\n";
}
else
strall+=ANSI_BOLD+"=== "+CAP(was)+":\n"+ANSI_NORMAL;
for(i=0;i<sizeof(strs);i++)
{
if(suchobs[strs[i]] > 1)
strall+=strs[i]+". ("+suchobs[strs[i]]+")\n";
else
strall+=strs[i]+".\n";
}
}
else
if(!alles)
strall+=Name(WER,1)+" enthaelt keine "+CAP(was)+"!\n";
return 1;
}
int auflistung(string str)
{
string *strs, ob_id, was, nf_str1,nf_str2;
strall="";
nf_str1=" (Helme, Umhaenge, Ruestungen, Hosen, Schuhe, Handschuhe,\n"
+" Guertel, Amulette, Ringe, Koecher, Schilde, Sonstiges)\n";
nf_str2="Syntax: sliste [Objekt-Id] [Kleidungs-/Ruestungstyp|\"alles\"]\n"
+"Bsp.: sliste "+QueryProp(P_IDS)[1]+" "+"helme\n"
+" sliste "+QueryProp(P_IDS)[1]+" alles\n";
notify_fail("Fehler: Ohne Parameter klappt das nicht.\n"+nf_str2);
if(!str) return 0;
if(present(str)==TO) // Ueberpruefe, ob dieses Objekt gemeint ist!
{
write("Fehler: Es fehlt ein Kleidungs-/Ruestungstyp. Folgende Typen gibt es:\n"
+nf_str1+nf_str2);
return 1;
}
strs=old_explode(str, " ");
notify_fail("Fehler: Du musst eine gueltige Objekt-Id angeben!\n"
+nf_str2);
if( sizeof(strs) < 2 ) return 0; // Nur 1 Par. und der ist nicht die Objekt-Id
if( sizeof(strs) == 2 ) // Anzahl Par. = 2
{
ob_id=strs[0];
was=strs[1];
if( IST_ZAHL(was) ) // Objekt-Id z.B. mit "schrank 2" angesprochen?
if(present(ob_id+" "+was)==TO) // Falls dieses Objekt gemeint ist und kein 3. Par!
{
write("Fehler: Es fehlt ein Kleidungs-/Ruestungstyp. Folgende Typen gibt es:\n"
+nf_str1+nf_str2);
return 1;
}
else
return 0;
}
else if( sizeof(strs) == 3 )
{
ob_id=strs[0]+" "+strs[1];
was=strs[2];
}
else // Anzahl erforderlicher Parameter ueberschritten!
return 0;
if(present(ob_id)!=TO) // Ueberpruefe, ob auch dieses Objekt gemeint ist!
return 0;
if(QueryProp(P_CNT_STATUS)!=CNT_STATUS_OPEN)
{
write("Dazu muesste "+name(WER,1)+" geoeffnet sein.\n");
return 1;
}
//--- Hier ist Parameterpruefung zu Ende.
was=LOWER(was);
if(was!="alles")
auflistung2(was, nf_str1, nf_str2, 0);
else
{
auflistung2("helme", nf_str1, nf_str2, 1);
auflistung2("umhaenge", nf_str1, nf_str2, 1);
auflistung2("ruestungen", nf_str1, nf_str2, 1);
auflistung2("hosen", nf_str1, nf_str2, 1);
auflistung2("schuhe", nf_str1, nf_str2, 1);
auflistung2("handschuhe", nf_str1, nf_str2, 1);
auflistung2("guertel", nf_str1, nf_str2, 1);
auflistung2("amulette", nf_str1, nf_str2, 1);
auflistung2("ringe", nf_str1, nf_str2, 1);
auflistung2("koecher", nf_str1, nf_str2, 1);
auflistung2("schilde", nf_str1, nf_str2, 1);
auflistung2("sonstiges", nf_str1, nf_str2, 1);
}
TP->More(strall);
return 1;
}