ConvMaterialList()
==================

FUNKTION
--------
::

     varargs string ConvMaterialList(mixed mats, int casus, mixed idinf)

DEFINIERT IN
------------
::

     /p/daemon/materialdb.c (MATERIALDB)

ARGUMENTE
---------
::

     mixed mats:  - das zu erkennende Material:
                    - ein Mapping, ein String oder ein Stringarray
                      ([MAT_A:y,MAT_B:x,..]) oder MAT_A oder ({MAT_A,MAT_B,..})
     int casus:   - der Fall: 0..3 -> <language.h>: WAS, WESSEN, WEM, WEN
     mixed idinf  - Dinge, welche die Faehigkeiten des Erkennens beeinflussen
		    (siehe "man MaterialList")

BESCHREIBUNG
------------
::

     Man uebergibt ConvMaterialList() eine Liste von Materialien, die die
     Funktion unter Verwendung von MaterialName() in ihre Bestandteile
     aufsplittet und mit "und" und "," verknuepft zurueckgibt.

RUECKGABEWERT
-------------
::

     string - Materialien, durch Komma und "und" getrennt oder
              "unbekanntes Material"

BEMERKUNGEN
-----------
::

     Wird von /std/thing/description::MaterialList() gerufen.
     Bitte an Objekten auch MaterialList() verwenden.
     Ruft direkt MaterialName() auf.

SIEHE AUCH
----------
::

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

7. Mai 2004 Gloinson

