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


NAME
====

   P_REAL_RACE                             "real_race"


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

   /sys/living/description.h


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

   Diese Property enthaelt die Rasse des Livings. Sie 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
==========

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

Last modified: Mon Sep 15 21:15:49 2003 by Vanion
