P_TARGET_AREA

NAME:
    P_TARGET_AREA     "target_area"

DEFINIERT IN:
    <combat.h>

BESCHREIBUNG:
    Kann in einem Raum gesetzt werden, um einen anderen, von dort aus mit
    Fernkampfwaffen beschiessbaren Raum als Objekt oder Objektnamen (zu
    einem geladenen Objekt) festzulegen.

BEMERKUNGEN:
    Ein Schuetze kann nur in den anderen Raum schiessen, wenn die P_RANGE
    seiner Waffe mindest gleich der P_SHOOTING_AREA des Raums (nicht des
    Zielraums) ist.

    Idealerweise sollte in mit P_TARGET_AREA angegebenen Raeumen auch
    P_NEVER_CLEAN gesetzt sein.

BEISPIELE:
    // #1 Ein Baum-Raum (/std/room)
    void create() {
      ::create();
      SetProp(P_INT_SHORT, "Auf einem Baum");
      SetProp(P_INT_LONG, break_string("Du hockst auf einem Baum und kannst "
        "auf die Lichtung unter Dir sehen.\n");

      AddExit("unten", RAEUME("lichtung"));

      SetProp(P_TARGET_AREA, RAEUME("lichtung"));  // Lichtung beschiessbar
      SetProp(P_SHOOTING_AREA, 15);                // 15 Entfernung
    }

    // #2 Ein Elefanten-Transporter (/std/transport)
    // Er trampelt durch mehrere Raeume durch und der Schuetze kann vom
    // Ruecken des Elefanten aus auf Gegner draussen schiessen.
    void create() {
      ::create();
      SetProp(P_NAME, "Kampfelefant");
      AddId(({"elefant", "kampfelefant")});
      SetProp(P_GENDER, MALE);
      SetProp(P_SHORT, "Ein Kampfelefant");
      SetProp(P_INT_SHORT, "Auf einem Kampfelefanten");
      // P_LONG, P_INT_LONG

      SetProp(P_ENTERCMDS, ({"kletter", "erkletter"}));
      SetProp(P_LEAVECMDS, ({"verlass", "verlasse"}));

      SetProp(P_ARRIVEMSG, ({"Der Elefant trampelt in einen Raum.\n",
                             "Ein Kampfelefant trampelt herein.\n"}));
      SetProp(P_DEPARTMSG, ({"Der Elefant trampelt weiter.\n",
                             "Der Kampfelefant trampelt weiter.\n"}));

      SetProp(P_SHOOTING_AREA, 8); // weiter als 8 sollte man schiessen

      AddRoute(RAEUME("schlachtfeld"), 20+random(10), 6, "Schlachtfeld");
      AddRoute(RAEUME("burgtor"), 20+random(10), 6, "Burgtor");
      AddRoute(RAEUME("burghof"), 20+random(10), 6, "Burghof");
      AddRoute(RAEUME("halle"), 20+random(10), 6, "Halle");
      AddRoute(RAEUME("bresche"), 20+random(10), 6, "Bresche");
      // ...

      Start();
    }

SIEHE AUCH:
    Generell:  P_AMMUNITION, P_SHOOTING_WC, P_STRETCH_TIME
    Methoden:  FindRangedTarget(L), shoot_dam(L), cmd_shoot(L)
    Gebiet:    P_RANGE, P_SHOOTING_AREA
    Raeume:    P_NEVER_CLEAN
    Sonstiges: fernwaffen

29.Jul 2014 Gloinson