blob: c4f7b5cc24522b9d2120ff07ac865f36d5f7486a [file] [log] [blame]
// MorgenGrauen MUDlib
//
// container/description.c -- standard description for containers
//
// $Id: description.c 8755 2014-04-26 13:13:40Z Zesstra $
inherit "/std/thing/description";
#pragma strict_types
#pragma save_types
#pragma range_check
#pragma no_clone
#pragma pedantic
#define NEED_PROTOTYPES
#include <container.h>
#include <properties.h>
#include <defines.h>
#include <wizlevels.h>
void create()
{
::create();
SetProp(P_TRANSPARENT, 1);
AddId("Container");
}
varargs string long(int mode) {
string descr, inv_descr;
descr = process_string(QueryProp(P_LONG));
if(!QueryProp(P_TRANSPARENT)) return descr;
inv_descr = make_invlist(PL, all_inventory(ME), mode );
if ( inv_descr != "" )
descr += capitalize(QueryPronoun(WER)) + " enthaelt:\n" + inv_descr;
return descr;
}
// flags: 1 - wizard, 2 - don't collect equal objects '
// flags: 4 - don't append infos for wizards
private void stringenize(mixed obj, int flags, mixed objs, mixed info)
{
string id, tmp;
int idx;
if ( (!(flags & 4) && (flags & 1))) {
//wenn Magier und Magierinfos angehaengt werden sollen:
tmp = capitalize(obj->short()||"")[0..<2]
+ " ["+object_name(obj)+"]";
}
else if (obj->QueryProp(P_INVIS)) {
//keine Ausgabe bzw. leerer String, wird dann von collect rausgeschmissen
tmp="";
}
else {
//Spieler, Magier ohne P_WANTS_TO_LEARN etc.
tmp = capitalize(obj->short()||"")[0..<2];
}
//wenn wizard und 'dont collect equal objects': id ist object_name()
if(flags & 3 || living(obj))
id = object_name(obj);
//sonst nehmen wir den Namen der Blueprint ->zusammenfassen der Objekte
else
id = BLUE_NAME(obj) + tmp;
// Anzahl des jeweiligen Objekts (anhand von id) zaehlen.
if((idx = member(objs, id)) == -1)
{
objs += ({ id });
info += ({ ({ tmp, 1, obj}) });
}
else
info[idx][1]++;
}
private string collect(mixed obj)
{
//bekommt ein Array ({name,anzahl,objekt})
//Objekte ohne Namen (P_SHORT==0 oder P_INVIS) wegwerfen
if(!sizeof(obj[0])) return 0;
// Objektname + (Anzahl) zurueckgeben.
return obj[0] + (obj[1] > 1 ? " ("+obj[1]+")" : "");
}
// flags: 1 - return array, 2 - don't collect equal objects '
// flags: 4 - don't append infos for wizards
varargs mixed make_invlist(object viewer, mixed inv, int flags)
{
int iswiz;
mixed objs, info;
iswiz = IS_LEARNER( viewer ) && viewer->QueryProp(P_WANTS_TO_LEARN);
objs = ({}); info = ({});
map(inv, #'stringenize/*'*/, iswiz | (flags & 2) | (flags & 4), &objs, &info);
if(flags & 1) return info;
inv = map(info, #'collect/*'*/) - ({ 0 });
if(!sizeof(inv)) return "";
return sprintf("%"+(sizeof(inv) > 6 ? "#" : "=")+"-78s",
implode(inv, "\n")) + "\n";
}