MaterialList(L)
FUNKTION:
     varargs string MaterialList(int casus, mixed idinf)

DEFINIERT IN:
     /std/thing/description.c

ARGUMENTE:
     int casus	 - der Fall, in dem die Materialien dekliniert werden sollen
     mixed idinf - Dinge, welche die Faehigkeiten des Erkennens beeinflussen:
		   Einzelne Werte:
                   * x: allgemeine Erkennung -100 ... 100
                   * who: der Spieler - P_MATERIAL_KNOWLEDGE wird abgefragt
                   * fun: wird evaluiert
                   * what, kann folgendes enthalten:
                     - Eintrag fuer Materialien ([MAT_XXX:-100...100])
                     - Eintrag fuer Materialiengruppen (dito)
                     - ([MATERIAL_SYMMETRIC_RECOGNIZABILITY: mixed mg])
                       * mg ein Array:
                         ({MATGROUP_X1,int z1, MATGROUP_X2, int z2, ...})
                         wobei bei Zugehoerigkeit von string mat zu Gruppe
                         z<n> auf die Faehigkeit addiert, andernfalls davon
                         subtrahiert wird
		   Array mit obigen Werten:
                   - alle Parameter des Arrays sind optional und additiv
                   - ({int x, object who, mapping what, closure fun})

BESCHREIBUNG:
     Listet die Materialien auf, aus denen ein Objekt besteht.
     Dabei haengt die Genauigkeit der Materialerkennung von idinf ab. D.h.
     je nach den Faehigkeiten/der angegebenen Faehigkeit wird zB Wolfram
     als "Wolfram" oder nur als "Metall" erkannt.

     Wenn ein Spieler etwas identifiziert, sollte auch TP uebergeben werden,
     bei NPCs koennte das anders aussehen.

RUECKGABEWERT:
     String mit Liste der Materialien.

BEMERKUNGEN:
     - es werden nur die Materialien angegeben, nicht die Menge.
     - ruft ConvMaterialList() an der MATERIALDB

BEISPIELE:
     // simpel
     write("Der Gegenstand besteht aus"+ob->MaterialList(WEM,TP)+".\n")
     // -> "Der Gegenstand besteht aus Gold, Silber und Rubin.\n"

     // komplexer
     ob->SetProp(P_MATERIAL, ([P_NITROGLYCERINE:90,P_GUNPOWDER:10]));
     write("Das enthaelt "+ob->MaterialList(WER,TP)+".\n");
     // -> "Das enthaelt Schwarzpulver und Nitroglycerin."

SIEHE AUCH:
     Konzepte:	  material, materialerkennung
     Grundlegend: P_MATERIAL, /sys/thing/material.h
     Methoden:    QueryMaterial(), QueryMaterialGroup()
     Listen:	  AllMaterials(), AllGroups(), Dump()
		  materialliste, materialgruppen
     Master:	  AddMaterial(), ConvMaterialList(), MaterialGroup(),
		  GroupName(), MaterialName(),
		  GetGroupMembers(), GetMatMembership()
     Sonstiges:	  P_MATERIAL_KNOWLEDGE

7. Mai 2004 Gloinson