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
