MaterialGroup()
FUNKTION:
     int MaterialGroup(mapping mats, string grp)

DEFINIERT IN:
     /p/daemon/materialdb.c (MATERIALDB)

ARGUMENTE:
     mapping mats - Materialienmapping
     string grp   - Materialiengruppe

BESCHREIBUNG:
     Die Materialien im Mapping werden auf Zugehoerigkeit zu der Gruppe
     untersucht und der Gesamtanteil dieser Materialiengruppe am Mapping
     in Prozent zurueckgegeben (wenn das Mapping sich auf 100% aufaddiert).

RUECKGABEWERT:
     int - prozentualer Anteil der Materialiengruppe -100 ... 100 %

BEISPIELE:
     if(MATERIALDB->MaterialGroup(
		([MAT_MISC_STONE:40,MAT_AMETHYST:50,MAT_MISC_METAL:10]),
		MATGROUP_JEWEL)>50)
      write("Oh ja, darin sind sehr viele Edelsteine!\n");

BEMERKUNGEN:
     Wird von /std/thing/description::QueryMaterialGroup() gerufen.
     Bitte an Objekten auch QueryMaterialGroup() verwenden.

SIEHE AUCH:
     Konzepte:	  material, materialerkennung
     Grundlegend: P_MATERIAL, /sys/thing/material.h
     Master:	  AddMaterial(), ConvMaterialList()
		  GroupName(), MaterialName(),
		  GetGroupMembers(), GetMatMembership()

7. Mai 2004 Gloinson