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()
