Dokumentation zu: materialerkennung(WL)

HR Image


Materialerkennung
=================

Bei MaterialName(mat,casus,idinf) und MaterialList(casus,idinf)
ist der Parameter <idinf> als Angabe dafuer gedacht, wie gut Materialien
erkannt werden sollen. Diese Funktionen sind in materialdb.c zu finden
und werden benoetigt um die Objekt-Funktionen MaterialList auszufuehren 
und dem Koennen in der Materialerkennung des Spielers anzupassen.

Die Materialerkennung erfolgt fuer Spieler automatisch. Beim
Aufruf von objekt->MaterialList(casus) wird fuer jedes einzelne
Material aus welchem das <objekt> besteht: 
  MaterialName(mat,casus,PL->QueryProp(P_MATERIAL_KNOWLEDGE))
ausgefuehrtt und danach als Text aufbereitet. Dies uebernimmt die
Funktion ConvMaterialList(mat_liste,casus,idinf) in der materialdb.c

Es sind folgende Arten von Angaben fuer den Parameter <idinf> moeglich:
(zum Verstaendnis folgen Beispiele)

1. Ein Array
   Die einzelnen Arrayelemente werden nach untenstehenden Regeln behandelt
   und deren Ergebnisse addiert.
2. Ein Objekt
   In diesem Fall wird
   Objekt->QueryProp(P_MATERIAL_KNOWLEDGE)
   nach untenstehenden Regeln behandelt.
   Diese Property ist fuer rassenabhaengige Faehigkeiten gedacht.
3. Eine Zahl
   In diesem Fall wird der Wert direkt als Faehigkeit angesehen,
   das Material erkennen zu koennen.
4. Eine Closure
   In diesem Fall wird der Returnwert von
   funcall(closure,material,gruppen_in_denen_diese_material_ist) genommen.
5. Ein Mapping
   In einem Mapping sind 3 Arten von Eintraegen moeglich:
   3a. Ist im Mapping unter <mat> eine Zahl eingetragen, wird diese genommen
       und die weiteren Eintraege nicht weiter ausgewertet.
   3b. Die Werte von allen Gruppen im Mapping, zu denen das Material
       gehoert, werden addiert.
   3c. Falls das Mapping einen Eintrag MATERIAL_SYMMETRIC_RECOGNIZABILITY hat,
       der ein Array von der Form
         ({gruppe1, wert1, gruppe2, wert2, ...})
       ist, wird fuer jede dieser Gruppen der zugehoerige Wert addiert,
       falls das Material in der Gruppe ist, und sonst abgezogen.
Der so ermittelte Wert ist die Erkennungsfaehigkeit fuer dieses Material.

Schwer erkennbare Materialien haben in der Materialdatenbank eine
zusaetzliche Angabe der Form
  ({mat1, wert2, mat3, wert4, mat5, ... wert(n-1), mat(n)})
wobei mat(n) das Material selber ist.
Das erkannte Material ist das Material mat(k), bei dem die
  wert(k-1) <= Erkennungsfaehigkeit < wert(k+1)
ist. Bei Erkennungsfaehigkeit 100 oder mehr wird das
Material auf jeden Fall erkannt.
Der Wert fuer Durchschnittsspieler ist 0.

BEISPIEL:
  Angenommen, bei Platin waere die Angabe in der Datenbank
    ({Metall, -20, Silber, 20, Platin})   
  Ein Spieler ohne besondere Erkennungsfaehigkeiten (also Wert 0)
  wuerde also Platin fuer Silber halten, jemand, der von Metallen
  keine Ahnung hat (beispielsweise mit der Angabe ([MATGROUP_METAL:-25])
  in P_MATERIAL_KNOWLEDGE) sieht nur noch, dass es ein Metall ist
  und jemand mit ueberdurchschnittlicher Faehigkeit erkennt Platin
  als das, was es ist.
  Aufrufe waeren dann wie folgt:
  (1) MaterialName(MAT_PLATINUM,WEM,0) == "Silber"
  (2) MaterialName(MAT_PLATINUM,WEM,([MATGROUP_METAL])) == "Metall"
  (3) MaterialName(MAT_PLATINUM,WEM,30) == "Platin"
  (4) MaterialName(MAT_PLATINUM,WEM,([MAT_PLATINUM:30])) == "Platin"
  (5) MaterialName(MAT_PLATINUM,WEM,([MAT_PLATINUM:30,MATGROUP_METAL:-20]))
      == "Silber", 
      Erklaerung: Platin ist ein Metall --> Erkennung -20,
                  doch Platin selber erkennt man +30 --> Zusammen 10
      Es ist hierdurch moeglich einzelne Materialen aus einer Gruppe
      auszuzeichnen/abzuwerten.

  P_MATERIAL_KNOWLEDGE koennte z.B. fuer Rassen wie folgt gesetzt werden:
  Elf:   ([MATGROUP_WOOD:30])
  Zwerg: ([MATGROUP_STONE:30])

SIEHE AUCH:
    P_MATERIAL(WL), materialliste(WL), materialgruppen(WL), 
    material(WL), QueryMaterial(L), QueryMaterialGroup(L), 
    MaterialList(WL), materialdb(WL)


Start » Magierhandbuch » Docu » Konzepte » Materialerkennung Letzte Generierung: 25.04.2021, 01:58
Email an: mud@wl.mud.de
Valid HTML 4.01!