P_REAL_RACE
***********


NAME
====

   P_REAL_RACE                             "real_race"


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

   /sys/living/description.h


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

   Diese Property enthaelt die Rasse des Livings und sollte wie P_RACE
   aus traditionellen Gruenden gross geschrieben werden.

   Diese Property darf nicht durch Shadows ueberschrieben werden.

      Wirklich interessant ist sie, wenn ein Spieler sich tarnt. Dort
      kann man mit dieser Property trotz Tarnung feststellen, welche
      Rasse der Spieler hat.

      Bei NPC enthaelt sie den gleichen Wert wie P_RACE. Wenn
      P_REAL_RACE allerdings gesetzt wird, kann man damit einen
      getarnten NPC simu- lieren, da dann P_RACE und P_REAL_RACE
      voneinander abweichen.


BEISPIEL
========

   // Ein Zwerg mag Zwergenbrot, fuer Elfen ist es giftig. Selbst wenn der
   // Elf sich als Zwerg tarnt, wird ihm durch lembas sicher uebel werden:
   int futter(string arg) {
     notify_fail("Was willst Du essen?\n");
     if(!arg || !id(arg)) return 0;

     notify_fail("Du kannst nichts mehr essen.\n");
     if(!this_player()->eat_food(55)) return 0;

     write("Du isst ein Stueck Zwegenbrot. Du versuchst es zumindest!\n");
     say(sprintf("%s beisst in ein Stueck Zwergenbrot. Zahnschmerz!!!\n",
         this_player()->Name()));

     switch( this_player()->QueryProp(P_REAL_RACE) )
     {
       case "Zwerg":
         if ((this_player()->QueryProp(P_RACE))!="Zwerg")
           write("Zur Tarnung spuckst Du etwas von dem Brot aus!\n");
         this_player()->buffer_hp(100,10);
         this_player()->buffer_sp(100,10);
         break;

       case "Elf":
         write("Das Zwergenbrot brennt wie Feuer auf Deiner Zunge!");
         // Getarnt?
         if ((this_player()->QueryProp(P_RACE))!="Elf")
           write(" Deine Tarnung nutzt Dir da wenig.\n"
         else
           write("\n");
         this_player()->restore_spell_points(-100);
         this_player()->do_damage(100,this_object());
         break;

       default:
         write("Du bekommst nur wenig davon herunter..\n");
         this_player()->buffer_hp(10,1);
         this_player()->buffer_sp(10,2);
         break;
     }
     remove();
     return 1;
   }


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

   P_RACE
      /std/living/description.c, /sys/living/description.h,

Last modified: 15.10.2018 Zesstra
