
P_NO_ATTACK
***********


NAME
====

   P_NO_ATTACK "no_attack"


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

   <living/combat.h>


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

   Wenn ein NPC nicht angreifbar sein soll (weil er zum Beispiel in einer
   Gilde oder einer Quest Informationen vermittelt oder aehnlichen), sollte
   man diese Property auf einen Wert ungleich Null setzen. Sie wird immer
   abgefragt, wenn ermittelt wird, ob ein Lebewesen prinzipiell angreifbar
   ist. D.h. auch, dass nach Abfragen von P_NO_ATTACK _nicht_ immer ein
   Kampf gestartet wird und dass man dabei _nicht_ im Kampf sein muss!

   Gibt man hier einen String an (mit einem Satzzeichen und "\n" abge-
   schlossen), wird dieser bei direkten Angriffen ausgegeben. Bei anderen
   Datentypen wird eine Defaultmeldung ausgegeben. Die Defaultmeldung
   lautet: "<Name> laesst sich nicht angreifen!\n"

   Mit direkten Angriffen sind 'toete <name>' und Angriffszauber gemeint
   (bzw. alles, was living/life::Kill(), spellbook::TryAttackSpell(),
   spellbook::TryDefaultAttackSpell() und spellbook::FindEnemyVictim()
   aufruft).


ACHTUNG
=======

   1) Zum Thema QueryMethoden auf P_NO_ATTACK
      Grundsaetzlich legt man entweder eine Query-Methode auf P_NO_ATTACK:
         Set(P_NO_ATTACK, #'my_no_attack, F_QUERY_METHOD);
      oder definiert eine Funktion _query_no_attack() im NPC.

      Wie muss nun eine solche Funktion aussehen? Z.B.:



      int|string my_no_attack() {
        if (!objectp(this_player())) return 0;
        if (opfer==getuid(this_player()) || this_player()==this_object())
          return(0);
        return(1); //nicht angreifbar
      }

      Diese Funktion macht den NPC nun nur fuer den Spieler 'opfer' angreifbar.
      Stattdessen kann natuerlich auch jede andere Bedingung genutzt werden.

      Aber warum die zweite Bedingung, this_player()==this_object()?
      Warum sollte der NPC sich selber angreifen duerfen?

      Das liegt an folgenden 2 Dingen:

      1. Kaempfer kriegen bei eingeschaltetem Fokus Probleme, wenn man das
      nicht macht. Das liegt an folgendem: Wenn der NPC angreift, ruft er
      natuerlich Defend() im Spieler auf. Dieses schaut nach, ob der Spieler
      den Skill SK_MAGICAL_DEFENSE hat. Dieser ist bei Kaempfern das Parieren.
      Dieses schaut nach, ob der Fokus aktiv ist, wenn ja, wird dem
      ge'fokus'te Gegner besonders gut ausgewichen. Zu diesem Zweck wird die
      Liste der Feind im Raum erstellt mit PresentEnemies() abgerufen. Dieses
      fragt aber in allen (potentiellen) Gegnern P_NO_ATTACK ab und beendet
      den Kampf mit allen Gegnern, die nicht angreifbar sind. Bei dieser
      Abfrage ist jedoch TP==NPC, weil der ja angreift. Wenn er nun 1
      zurueckgibt, wird der Kampf an der Stelle beendet.

      2. Wenn der NPC den Spieler angreift, wird im Spieler InsertEnemy(NPC)
      aufgerufen. Auch diesem Fall findet die Abfrage von P_NO_ATTACK statt,
      da InsertEnemy() ja erstmal rausfinden muss, ob der Gegner angreifbar
      ist, bevor er in die Feindliste eingetragen wird. Da der NPC den
      Angriff beginnt, ist TP der NPC. Wenn die Query-Methode auf P_NO_ATTACK
      hier abbricht, wird der NPC nicht in die Feindliste des Spielers
      eingetragen. Dann bekaempft der NPC den Spieler, aber der Spieler nicht
      den NPC.


   2) P_NO_ATTACK des NPC wird z.B. beim Kampf eines Kaempfers mit dem NPC
      pro Kampfrunde um die 10mal abgerufen. Wenn der Kaempfer nur eine
      Attacke macht. Wenn er noch Sonderattacken machen, Spells ausfuehrt,
      etc. wird das noch mehr. D.h. was auch immer ihr in der Query-Methode
      im NPC macht:
      Es sollte schnell sein, jeder Tick an Rechenzeit zaehlt hier xfach!


LETZTE AENDERUNG
================

09.11.2015, Arathorn
