Automatisch erzeugte Manpages.
Damit nicht jeder sphinx auf dem Rechner haben muss,
behalten wir bis auf weiteres die aus den .rst
erzeugten Manpoages auch im Repo.
Change-Id: Id556c0d11cf5f79659d8350952ce1c014d81ea44
diff --git a/doc/sphinx/man/props/P_NO_ATTACK b/doc/sphinx/man/props/P_NO_ATTACK
new file mode 100644
index 0000000..9ca4c95
--- /dev/null
+++ b/doc/sphinx/man/props/P_NO_ATTACK
@@ -0,0 +1,99 @@
+
+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