P_LIGHT_MODIFIER
****************


NAME
====

   P_LIGHT_MODIFIER                     "light_modifier"


DEFINIERT IN
============

   /sys/properties.h


BESCHREIBUNG
============

   Veraendert das Lichtlevel das von einem Lebewesen wahrgenommen wird.
   Der Wert dieser Property wird additiv in P_PLAYER_LIGHT beruecksichtigt.
   Es ist hiermit z.B. moeglich eine Sonnenbrille zu programmieren, diese
   veraendert ja nicht das tatsaechliche Lichtlevel, sondern verdunkelt nur
   die Sicht.


ANMERKUNG
=========

   Damit NPCs in der Lage sind solche Gegenstaende richtig einzuschaetzen,
   sollte diese Property in jedem Gegenstand der einen Light-Modifier setzt,
   auch gesetzt sein. Das veraendern dieser Property in Spielern durch NPCs
   oder Gegenstaende ist selbstverstaendlich genehmigungspflichtig.


BEISPIELE
=========

   // Ein NPC der auch in relativ dunklen Raeumen mit Lichtlevel -2
   // noch sehen kann...
   create_default_npc(10);
   SetProp(P_LIGHT_MODIFIER, 3);

   // Eine Sonnenbrille, die das Lichtlevel um eins senkt.

   create()
   {

      :

      SetProp(P_ARMOUR_TYPE, AT_GLASSES);
      SetProp(P_LIGHT_MODIFIER, -1);

      :

   }

   // Achtung: Falls pl Query- oder Set-Methoden auf P_LIGHT_MODIFIER hat,
   // wird diese Methode hier furchtbar schief gehen und im besten Fall
   // nichts veraendern. In realen Objekten empfiehlt sich zumindest eine
   // Pruefung im Vorfeld, ob eine Query-/Set-Methode gesetzt ist.
   protected void InformWear(object pl, int silent, int all) {
       pl->SetProp(P_LIGHT_MODIFIER, pl->QueryProp(P_LIGHT_MODIFIER) -1);
   }

   protected void InformUnwear(object pl, int silent, int all) {
       pl->SetProp(P_LIGHT_MODIFIER, pl->QueryProp(P_LIGHT_MODIFIER) +1);
   }


SIEHE AUCH
==========

   P_TOTAL_LIGHT, P_INT_LIGHT, P_PLAYER_LIGHT, P_LIGHT_MODIFIER, CannotSee()
