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