description.c-Dateireferenz

#include <container.h>
#include <properties.h>
#include <defines.h>
#include <wizlevels.h>
Include-Abhängigkeitsdiagramm für description.c:

gehe zum Quellcode dieser Datei

Makrodefinitionen

#define NEED_PROTOTYPES

Funktionen

void create ()
varargs string long (int mode)
private void stringenize (mixed obj, int flags, mixed objs, mixed info)
private string collect (mixed obj)
varargs mixed make_invlist (object viewer, mixed inv, int flags)
static mixed _query_light_transparency ()
static int _query_total_light ()
static int _query_int_light ()
static int _set_light (int light)

Variablen

inherit std thing description
private nosave int last_light_calc

Makro-Dokumentation

#define NEED_PROTOTYPES

Definiert in Zeile 15 der Datei description.c.


Dokumentation der Funktionen

static int _query_int_light (  )  [static]

Definiert in Zeile 150 der Datei description.c.

Benutzt _query_last_content_change(), _query_total_light(), last_light_calc, light(), P_INT_LIGHT, P_LIGHT_TRANSPARENCY, Query() und QueryProp().

Wird benutzt von _query_player_light().

00151 {
00152    int tmp;
00153    if ( _query_last_content_change() != last_light_calc )
00154        _query_total_light();
00155 
00156    // P_INT_LIGHT des environments kann sich natuerlich aendern _ohne_ das
00157    // etwas an einem container geaendert wird. Daher Auswertung jedes mal
00158    // neu aktualisieren.
00159    if (!environment() || !(tmp=(int)environment()->QueryProp(P_INT_LIGHT)))
00160       return Query(P_INT_LIGHT)[2];
00161    else {
00162       int light, dark, reduce;
00163 
00164       light=Query(P_INT_LIGHT)[0];
00165       dark =Query(P_INT_LIGHT)[1];
00166       // bei einem offenen Container kann natuerlich das Licht des
00167       // environments den Container auch ausleuchten....
00168       reduce=QueryProp(P_LIGHT_TRANSPARENCY); // Lichtdurchlaessigkeit
00169       if (tmp>0 && light<tmp-reduce)
00170          light=tmp-reduce;
00171       else if (dark>tmp+reduce) dark=tmp+reduce;
00172       else if (light+dark==0) return tmp;
00173       return light+dark;
00174    }
00175 }

Hier ist ein Graph der zeigt, was diese Funktion aufruft:

Hier ist ein Graph der zeigt, wo diese Funktion aufgerufen wird:

static mixed _query_light_transparency (  )  [static]

Definiert in Zeile 108 der Datei description.c.

Benutzt P_LIGHT_TRANSPARENCY, P_TRANSPARENT, Query() und QueryProp().

00109 {
00110    if (QueryProp(P_TRANSPARENT)) return Query(P_LIGHT_TRANSPARENCY);
00111    return 999;
00112 }

Hier ist ein Graph der zeigt, was diese Funktion aufruft:

static int _query_total_light (  )  [static]

Definiert in Zeile 114 der Datei description.c.

Benutzt _query_last_content_change(), i, inv(), last_light_calc, light(), P_INT_LIGHT, P_LIGHT, P_LIGHT_TRANSPARENCY, P_TOTAL_LIGHT, Query(), QueryProp() und SetProp().

Wird benutzt von _query_int_light().

00115 {
00116    int i, tmp, light, dark;
00117    object *inv;
00118 
00119    if ( _query_last_content_change() == last_light_calc )
00120        return Query(P_TOTAL_LIGHT);
00121 
00122    for (i=sizeof(inv=all_inventory())-1; i>=0; i--) {
00123       tmp=(int)inv[i]->QueryProp(P_TOTAL_LIGHT);
00124       if (tmp>0 && light<tmp)
00125           light=tmp;
00126       else if (dark>tmp) dark=tmp;
00127    }
00128 
00129    // P_INT_LIGHT berechnen...
00130    tmp=QueryProp(P_LIGHT);
00131    if (tmp>0 && light<tmp)
00132       SetProp(P_INT_LIGHT, ({ tmp, dark, tmp+dark }));
00133    else if (dark>tmp) SetProp(P_INT_LIGHT, ({ light, tmp, light+tmp }));
00134    else SetProp(P_INT_LIGHT, ({ light, dark, light+dark }));
00135 
00136    // Container schlucken ggf. Licht nach aussen hin...
00137    light+=dark; // Licht verrechnen
00138    if (light>=0)
00139       i=light-QueryProp(P_LIGHT_TRANSPARENCY); // Lichtdurchlaessigkeit
00140    else i=light+QueryProp(P_LIGHT_TRANSPARENCY);
00141    // wenn sich das Vorzeichen geaendert hat auf 0 setzen.
00142    light=((i^light) & 0x80000000 ? 0 : i);
00143    // wenn das eigene Licht dasselbe vorzeichen hat nur das staerkere nehmen
00144    light=((tmp^light) & 0x80000000 ? light+tmp : (tmp>light ? tmp : light));
00145 
00146    last_light_calc = _query_last_content_change();
00147    return SetProp(P_TOTAL_LIGHT, light);
00148 }

Hier ist ein Graph der zeigt, was diese Funktion aufruft:

Hier ist ein Graph der zeigt, wo diese Funktion aufgerufen wird:

static int _set_light ( int  light  )  [static]

Definiert in Zeile 177 der Datei description.c.

Benutzt env(), last_light_calc, ME, P_LIGHT und Set().

00178 {
00179   object env;
00180   last_light_calc=-1;
00181   env=ME;
00182   while (objectp(env)) {
00183       // Ja. Man ruft die _set_xxx()-Funktionen eigentlich nicht direkt auf.
00184       // Aber das Lichtsystem ist schon *so* rechenintensiv und gerade der
00185       // P_LAST_CONTENT_CHANGE-Cache wird *so* oft benoetigt, dass es mir
00186       // da um jedes bisschen Rechenzeit geht.
00187       // Der Zweck heiligt ja bekanntlich die Mittel. ;-)
00188       //
00189       // Tiamak
00190       env->_set_last_content_change();
00191      env=environment(env);
00192   }
00193   return Set(P_LIGHT, light);
00194 }

Hier ist ein Graph der zeigt, was diese Funktion aufruft:

private string collect ( mixed  obj  ) 

Definiert in Zeile 82 der Datei description.c.

00083 {
00084   //bekommt ein Array ({name,anzahl,objekt})
00085   //Objekte ohne Namen (P_SHORT==0 oder P_INVIS) wegwerfen
00086   if(!strlen(obj[0])) return 0;
00087   // Objektname + (Anzahl) zurueckgeben.
00088   return obj[0] + (obj[1] > 1 ? " ("+obj[1]+")" : "");
00089 }

void create (  ) 

Definiert in Zeile 24 der Datei description.c.

Benutzt AddId(), create(), last_light_calc, P_LIGHT_TRANSPARENCY, P_TRANSPARENT und SetProp().

00025 {
00026   ::create();
00027   SetProp(P_TRANSPARENT, 1);
00028   // wieviel Licht schluckt der Container _muss_ > 0 sein!
00029   SetProp(P_LIGHT_TRANSPARENCY, 2);
00030   AddId("Container");
00031   last_light_calc=-1;
00032 }

Hier ist ein Graph der zeigt, was diese Funktion aufruft:

varargs string long ( int  mode  ) 

Definiert in Zeile 34 der Datei description.c.

Benutzt make_invlist(), ME, P_LONG, P_TRANSPARENT, PL, process_string(), QueryPronoun(), QueryProp() und WER.

00034                               {
00035   string descr, inv_descr;
00036 
00037   descr = process_string(QueryProp(P_LONG));
00038   if(!QueryProp(P_TRANSPARENT)) return descr;
00039 
00040   inv_descr = make_invlist(PL, all_inventory(ME), mode );
00041   if ( inv_descr != "" )
00042     descr += capitalize(QueryPronoun(WER)) + " enthaelt:\n" + inv_descr;
00043   return descr;
00044 }

Hier ist ein Graph der zeigt, was diese Funktion aufruft:

varargs mixed make_invlist ( object  viewer,
mixed  inv,
int  flags 
)

Definiert in Zeile 93 der Datei description.c.

Benutzt IS_LEARNER und P_WANTS_TO_LEARN.

00094 {
00095   int iswiz;
00096   mixed objs, info;
00097 
00098   iswiz = IS_LEARNER( viewer ) && viewer->QueryProp(P_WANTS_TO_LEARN);
00099   objs = ({}); info = ({});
00100   map(inv, #'stringenize/*'*/, iswiz | (flags & 2) | (flags & 4), &objs, &info);
00101   if(flags & 1) return info;
00102   inv = map(info, #'collect/*'*/) - ({ 0 });
00103   if(!sizeof(inv)) return "";
00104   return sprintf("%"+(sizeof(inv) > 6 ? "#" : "=")+"-78s",
00105                  implode(inv, "\n")) + "\n";
00106 }

private void stringenize ( mixed  obj,
int  flags,
mixed  objs,
mixed  info 
)

Definiert in Zeile 48 der Datei description.c.

Benutzt BLUE_NAME und id().

00049 {
00050   string id, tmp;
00051   int idx;
00052   
00053   if ( (!(flags & 4) && (flags & 1))) {
00054     //wenn Magier und Magierinfos angehaengt werden sollen:
00055     tmp = capitalize(obj->short()||"")[0..<2]
00056         + " ["+object_name(obj)+"]";
00057   }
00058   else if (obj->QueryProp(P_INVIS)) {
00059     //keine Ausgabe bzw. leerer String, wird dann von collect rausgeschmissen
00060     tmp="";
00061   }
00062   else {
00063     //Spieler, Magier ohne P_WANTS_TO_LEARN etc.
00064     tmp = capitalize(obj->short()||"")[0..<2];
00065   }
00066   //wenn wizard und 'dont collect equal objects': id ist object_name()
00067   if(flags & 3 || living(obj)) 
00068     id = object_name(obj);
00069   //sonst nehmen wir den Namen der Blueprint ->zusammenfassen der Objekte
00070   else
00071     id = BLUE_NAME(obj) + tmp;
00072   // Anzahl des jeweiligen Objekts (anhand von id) zaehlen.
00073   if((idx = member(objs, id)) == -1)
00074   {
00075     objs += ({ id });
00076     info += ({ ({ tmp, 1, obj}) });
00077   }
00078   else
00079     info[idx][1]++;
00080 }

Hier ist ein Graph der zeigt, was diese Funktion aufruft:


Variablen-Dokumentation

inherit std thing description

Definiert in Zeile 7 der Datei description.c.

private nosave int last_light_calc

Definiert in Zeile 22 der Datei description.c.

Wird benutzt von _query_int_light(), _query_total_light(), _set_light() und create().

Erzeugt am Thu Jun 3 14:42:06 2010 für MorgenGrauen Mudlib von  doxygen 1.6.3