blob: 4c0fbec07bb83eecd05e8c9354c6ce69ebddaf75 [file] [log] [blame]
Zesstra18626972017-01-31 10:38:27 +01001SetAttackChats()
2================
3
4FUNKTION
5--------
Zesstra18626972017-01-31 10:38:27 +01006
Christian Georg Beckera32ae762017-04-03 01:06:34 +02007 void SetAttackChats(int chance, mixed strs);
Zesstra18626972017-01-31 10:38:27 +01008
9DEFINIERT IN
10------------
Zesstra18626972017-01-31 10:38:27 +010011
Christian Georg Beckera32ae762017-04-03 01:06:34 +020012 /std/npc/chat.c
Zesstra18626972017-01-31 10:38:27 +010013
14ARGUMENTE
15---------
Zesstra18626972017-01-31 10:38:27 +010016
Christian Georg Beckera32ae762017-04-03 01:06:34 +020017 int chance
18 Prozentuale Wahrscheinlichkeit einer Ausgabe
19 mixed strs
20 Array mit den verschiedenen Moeglichkeiten der Monsterchats
21
Zesstra18626972017-01-31 10:38:27 +010022
23BESCHREIBUNG
24------------
Zesstra18626972017-01-31 10:38:27 +010025
Christian Georg Beckera32ae762017-04-03 01:06:34 +020026 Der NPC gibt mit der Wahrscheinlichkeit <chance> waehrend des Kampfes
27 pro Heartbeat einen zufaellig gewaehlten Text aus dem Array <strs>
28 in den Raum aus. Dabei wird per Default send_room() ohne erneutes
29 Umbrechen mit den Messagetypen MT_LOOK|MT_LISTEN|MT_FEEL|MT_SMELL
30 verwendet.
Zesstra18626972017-01-31 10:38:27 +010031
Christian Georg Beckera32ae762017-04-03 01:06:34 +020032 Die einzelnen Arrayelemente koennen:
33
34 * Strings sein
35 * Closures sein, deren Rueckgabe ausgegeben wird und die zusaetzlich
36 einen aenderbaren und in send_room() verwendeten 'msg_typ' per
37 Referenz uebergeben bekommen
38 * Arrays mit der Struktur
39 `({<string|closure msg >, <int msg_typ>})` sein, fuer
40 die obige Regeln auf 'msg' angewendet werden und bei denen 'msg_typ'
41 im send_room() verwendet wird
Zesstra18626972017-01-31 10:38:27 +010042
Christian Georg Beckera32ae762017-04-03 01:06:34 +020043 Fuer keine Ausgabe muss man einen Leerstring "" zurueckgeben oder
44 verwenden. In allen Funktionen ist this_player() das Monster selbst.
45 Normalerweise muss man die Nachrichten selbst umbrechen, ausser man
46 uebergibt die Message-Typen explizit und uebergibt kein MSG_DONT_WRAP.
Zesstra18626972017-01-31 10:38:27 +010047
48BEMERKUNGEN
49-----------
Zesstra18626972017-01-31 10:38:27 +010050
Christian Georg Beckera32ae762017-04-03 01:06:34 +020051 * ausserhalb des Kampf werden keine AttackChats ausgegeben, man muss
52 dann SetChats() verwenden
53 * die strings werden (noch) durch process_string() geschickt,
54 dieses sollte man aber nicht mehr verwenden
55 * 'chance' gilt sowohl fuer Attack- als auch normale Chats
56 * 'chance' wird in der Property P_CHAT_CHANCE abgelegt. Um einen NPC
57 voruebergehend 'stillzulegen', kann man P_CHAT_CHANCE auf 0 setzen
58 * Spieler koennen P_CHAT_CHANCE temporaer auf 0 setzen ('stillen')
59 * NPC haben bei Abwesenheit von Spielern in der Regel keinen Heartbeat,
60 weswegen dann auch die Chats ausgeschaltet sind
61 * send_room() bekommt immer MSG_DONT_STORE|MSG_DONT_BUFFER uebergeben
Zesstra18626972017-01-31 10:38:27 +010062
Christian Georg Beckera32ae762017-04-03 01:06:34 +020063 Man kann AttackChats nutzen, um Monsterspells zu realisieren. Besser
64 ist es aber, dafuer 'AddSpell' zu benutzen, ausser man moechte zB
65 die Spielerfaehigkeit des Abschaltens der Chats verwenden.
Zesstra18626972017-01-31 10:38:27 +010066
67BEISPIELE
68---------
Zesstra18626972017-01-31 10:38:27 +010069
Christian Georg Beckera32ae762017-04-03 01:06:34 +020070.. code-block:: pike
Zesstra18626972017-01-31 10:38:27 +010071
Christian Georg Beckera32ae762017-04-03 01:06:34 +020072 protected string knirschschrei(int msg_typ);
Zesstra18626972017-01-31 10:38:27 +010073
Christian Georg Beckera32ae762017-04-03 01:06:34 +020074 SetAttackChats( 20,
75 ({"Der Ork tritt Dir in den Hintern.\n",
76 ({"Der Ork bruellt: Lebend kommst Du hier nicht raus!\n", MT_LISTEN}),
77 ({"Der Ork blutet schon aus mehreren Wunden.\n", MT_LOOK}),
78 #'knirschschrei}));
Zesstra18626972017-01-31 10:38:27 +010079
Christian Georg Beckera32ae762017-04-03 01:06:34 +020080 protected string knirsch(int msg_typ) {
81 object helm = this_player()->QueryArmourByType(AT_HELMET);
82 if (objectp(helm)) {
83 // AC nur dann senken, wenn sie nicht schon 0 ist.
84 if (helm->QueryProp(P_AC)>0) {
85 helm->Damage(1);
86 msg_typ = MT_LISTEN|MT_FEEL;
87 return ("Der Ork schreit dich so laut an, dass dabei "+
88 helm->QueryOwn(WER)+" "+
89 helm->name(RAW)+" beschaedigt wird.");
90 }
91 }
92 return ""; // keine Meldung
93 }
Zesstra18626972017-01-31 10:38:27 +010094
95SIEHE AUCH
96----------
Zesstra18626972017-01-31 10:38:27 +010097
Christian Georg Beckera32ae762017-04-03 01:06:34 +020098 Verwandt:
99 :doc:`SetChats`, :doc:`AddSpell`
100 Props:
Arathorn0487fdb2019-11-26 19:16:14 +0100101 :doc:`../props/P_ACHAT_CHANCE`, :doc:`../props/P_CHATS`, :doc:`../props/P_CHAT_CHANCE`
Christian Georg Beckera32ae762017-04-03 01:06:34 +0200102 Sonstiges:
103 :doc:`../sefun/send_room`, :doc:`../sefun/process_string`
Zesstra18626972017-01-31 10:38:27 +0100104
Arathorn0487fdb2019-11-26 19:16:14 +010010503. April 2017 Gloinson