QueryMaterialGroup()
====================

QueryMaterialGroup(L)
---------------------
::

FUNKTION
--------
::

     int QueryMaterialGroup(string grp)

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

     /std/thing/description.c

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

     string grp		- Materialgruppe, auf die getestet werden soll

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

     Liefert eine Angabe, zu welchem Anteil das Objekt aus Materialien
     dieser Gruppe besteht.
     Die Rueckgabe ist im Wertebereich -100 (Antigruppen) bis +100 (%).

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

     Anteil in Prozent.

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

     Ruft MaterialGroup() an der MATERIALDB.

BEISPIELE
---------
::

     // kann man damit was anfangen?
     if(ob->QueryMaterialGroup(MATGROUP_METAL)<50)
       write("Der Schmied sagt: Daraus kann ich kein Schwert fertigen.\n");

     // verbrennt das Ding?
     if(ob->QueryMaterialGroup(MATGROUP_INFLAMMABLE)>50) {
       write(ob->Name(WER)+" geht in Flammen auf.\n");
       ob->remove();
     }

     // wie magnetisch ist es denn?
     if(ob->QueryMaterialGroup(MATGROUP_MAGNETIC)>50)
      write(break_string(
       ob->Name(WER)+" flutscht Dir aus der Hand und bleibt am Magneten "
		     "kleben!",78));

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

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

7. Mai 2004 Gloinson

