MaterialName()
FUNKTION:
     varargs string MaterialName(string mat, int casus, mixed idinf)

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

ARGUMENTE:
     string mat	 - das zu erkennende Material
     int casus	 - der Fall
     mixed idinf - Dinge, welche die Faehigkeiten des Erkennens beeinflussen
		   (siehe "man MaterialList")

BESCHREIBUNG:
     Diese Funktion sucht unter Beruecksichtigung der Erkennungsbe-
     schraenkungen des Materials und Faehigkeiten des Spielers den
     Klarnamen des Materials heraus und gibt den zurueck.

RUECKGABEWERT:
     string: Materialname oder genereller Name.

BEISPIELE:
     // der hier mag alle existierenden Juwelen, auch wenn welche ergaenzt
     // werden sollten
     // Parameter: 1. ein Juwel, 2. Casus, 3. 100% Erkennung - ob er sie
     // beim Empfang dann auch zu 100% erkennt, steht hier nicht!
     string* likeit;
     likeit=MATERIALDB->GetGroupMembers(MATGROUP_JEWEL);
     ...
     write("Der Alte sagt: Ich mag "+
	   MATERIALDB->MaterialName(likeit[random(sizeof(likeit))], WEN, 100)+
	   ".\n");
     ...

     // ein weiser schmied:
     int i;
     string *mat, mname, mgroup;
     mat=m_indices(ob->queryprop(p_material));
     i=sizeof(mat);

     write("der schmied sagt: "+ob->name(wer)+" besteht aus ...\n");
     while(i--) {
      // den namen erkennen/aussprechen:
      // materialien werden allgemein ganz schlecht erkannt (zu 5%), aber
      // alles aus metall wird zu +100% gut erkannt ...
      mname=materialdb->materialname(mat[i], wer,
	     ({5, ([material_symmetric_recognizability:
			({matgroup_metal, 100})])}));

      // und nur metalle analysieren ...
      if(materialdb->materialgroup(([mat[i]:100]),matgroup_metal)>=100) {
       int j;
       string *mgr;
       mgr=materialdb->getmatmembership(mat[i]);
       j=sizeof(mgr);
       mgroup=" gehoert zu ";
       while(j--) {
        mgroup+=materialdb->groupname(mgr[j]);
        if(j>0) mgroup+=", ";
       }
      } else mgroup=" kenne ich nicht";
      printf("%-12.12s: %s\n",mname, mgroup);
     }

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

7. Mai 2004 Gloinson