
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
