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
