
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
