blob: b5a26e9e68a55cc38c1f0f71baebdff67cb03d27 [file] [log] [blame]
Zesstra953f9972017-02-18 15:37:36 +01001
MG Mud User88f12472016-06-24 23:31:02 +02002SetAttackChats()
Zesstra953f9972017-02-18 15:37:36 +01003****************
MG Mud User88f12472016-06-24 23:31:02 +02004
MG Mud User88f12472016-06-24 23:31:02 +02005
Zesstra953f9972017-02-18 15:37:36 +01006FUNKTION
7========
MG Mud User88f12472016-06-24 23:31:02 +02008
Zesstra953f9972017-02-18 15:37:36 +01009 void SetAttackChats(int chance, mixed strs);
MG Mud User88f12472016-06-24 23:31:02 +020010
MG Mud User88f12472016-06-24 23:31:02 +020011
Zesstra953f9972017-02-18 15:37:36 +010012DEFINIERT IN
13============
MG Mud User88f12472016-06-24 23:31:02 +020014
Zesstra953f9972017-02-18 15:37:36 +010015 /std/npc/chat.c
MG Mud User88f12472016-06-24 23:31:02 +020016
MG Mud User88f12472016-06-24 23:31:02 +020017
Zesstra953f9972017-02-18 15:37:36 +010018ARGUMENTE
19=========
20
Zesstra0c1a85a2018-02-07 23:46:50 +010021 int chance
22 Prozentuale Wahrscheinlichkeit einer Ausgabe
23
24 mixed strs
25 Array mit den verschiedenen Moeglichkeiten der Monsterchats
Zesstra953f9972017-02-18 15:37:36 +010026
27
28BESCHREIBUNG
29============
30
Zesstra0c1a85a2018-02-07 23:46:50 +010031 Der NPC gibt mit der Wahrscheinlichkeit <chance> waehrend des
32 Kampfes pro Heartbeat einen zufaellig gewaehlten Text aus dem Array
33 <strs> in den Raum aus. Dabei wird per Default send_room() ohne
34 erneutes Umbrechen mit den Messagetypen
35 MT_LOOK|MT_LISTEN|MT_FEEL|MT_SMELL verwendet.
Zesstra953f9972017-02-18 15:37:36 +010036
Zesstra0c1a85a2018-02-07 23:46:50 +010037 Die einzelnen Arrayelemente koennen:
Zesstra953f9972017-02-18 15:37:36 +010038
Zesstra0c1a85a2018-02-07 23:46:50 +010039 * Strings sein
Zesstra953f9972017-02-18 15:37:36 +010040
Zesstra0c1a85a2018-02-07 23:46:50 +010041 * Closures sein, deren Rueckgabe ausgegeben wird und die
42 zusaetzlich einen aenderbaren und in send_room() verwendeten
43 'msg_typ' per Referenz uebergeben bekommen
44
45 * Arrays mit der Struktur *({<string|closure msg >, <int
46 msg_typ>})* sein, fuer die obige Regeln auf 'msg' angewendet
47 werden und bei denen 'msg_typ' im send_room() verwendet wird
48
49 Fuer keine Ausgabe muss man einen Leerstring "" zurueckgeben oder
50 verwenden. In allen Funktionen ist this_player() das Monster
51 selbst. Normalerweise muss man die Nachrichten selbst umbrechen,
52 ausser man uebergibt die Message-Typen explizit und uebergibt kein
53 MSG_DONT_WRAP.
Zesstra953f9972017-02-18 15:37:36 +010054
55
56BEMERKUNGEN
57===========
58
Zesstra0c1a85a2018-02-07 23:46:50 +010059 * ausserhalb des Kampf werden keine AttackChats ausgegeben, man
60 muss dann SetChats() verwenden
Zesstra953f9972017-02-18 15:37:36 +010061
Zesstra0c1a85a2018-02-07 23:46:50 +010062 * die strings werden (noch) durch process_string() geschickt,
63 dieses sollte man aber nicht mehr verwenden
Zesstra953f9972017-02-18 15:37:36 +010064
Zesstra0c1a85a2018-02-07 23:46:50 +010065 * 'chance' gilt sowohl fuer Attack- als auch normale Chats
Zesstra953f9972017-02-18 15:37:36 +010066
Zesstra0c1a85a2018-02-07 23:46:50 +010067 * 'chance' wird in der Property P_CHAT_CHANCE abgelegt. Um einen
68 NPC voruebergehend 'stillzulegen', kann man P_CHAT_CHANCE auf 0
69 setzen
Zesstra953f9972017-02-18 15:37:36 +010070
Zesstra0c1a85a2018-02-07 23:46:50 +010071 * Spieler koennen P_CHAT_CHANCE temporaer auf 0 setzen
72 ('stillen')
Zesstra953f9972017-02-18 15:37:36 +010073
Zesstra0c1a85a2018-02-07 23:46:50 +010074 * NPC haben bei Abwesenheit von Spielern in der Regel keinen
75 Heartbeat, weswegen dann auch die Chats ausgeschaltet sind
Zesstra953f9972017-02-18 15:37:36 +010076
Zesstra0c1a85a2018-02-07 23:46:50 +010077 * send_room() bekommt immer MSG_DONT_STORE|MSG_DONT_BUFFER
78 uebergeben
79
80 Man kann AttackChats nutzen, um Monsterspells zu realisieren.
81 Besser ist es aber, dafuer 'AddSpell' zu benutzen, ausser man
82 moechte zB die Spielerfaehigkeit des Abschaltens der Chats
83 verwenden.
Zesstra953f9972017-02-18 15:37:36 +010084
85
86BEISPIELE
87=========
88
Zesstra0c1a85a2018-02-07 23:46:50 +010089 protected string knirschschrei(int msg_typ);
90
Zesstra953f9972017-02-18 15:37:36 +010091 SetAttackChats( 20,
Zesstra0c1a85a2018-02-07 23:46:50 +010092 ({"Der Ork tritt Dir in den Hintern.\n",
93 ({"Der Ork bruellt: Lebend kommst Du hier nicht raus!\n", MT_LISTEN}),
94 ({"Der Ork blutet schon aus mehreren Wunden.\n", MT_LOOK}),
95 #'knirschschrei}));
Zesstra953f9972017-02-18 15:37:36 +010096
Zesstra0c1a85a2018-02-07 23:46:50 +010097 protected string knirsch(int msg_typ) {
98 object helm = this_player()->QueryArmourByType(AT_HELMET);
99 if (objectp(helm)) {
100 // AC nur dann senken, wenn sie nicht schon 0 ist.
101 if (helm->QueryProp(P_AC)>0) {
102 helm->Damage(1);
103 msg_typ = MT_LISTEN|MT_FEEL;
104 return ("Der Ork schreit dich so laut an, dass dabei "+
105 helm->QueryOwn(WER)+" "+
106 helm->name(RAW)+" beschaedigt wird.");
Zesstra953f9972017-02-18 15:37:36 +0100107 }
Zesstra0c1a85a2018-02-07 23:46:50 +0100108 }
109 return ""; // keine Meldung
Zesstra953f9972017-02-18 15:37:36 +0100110 }
111
112
113SIEHE AUCH
114==========
115
Zesstra0c1a85a2018-02-07 23:46:50 +0100116 Verwandt:
117 *SetChats()*, *AddSpell()*
Zesstra953f9972017-02-18 15:37:36 +0100118
Zesstra0c1a85a2018-02-07 23:46:50 +0100119 Props:
120 *P_CHAT_CHANCE*
Zesstra953f9972017-02-18 15:37:36 +0100121
Zesstra0c1a85a2018-02-07 23:46:50 +0100122 Sonstiges:
123 *send_room()*, *process_string()*
Zesstra953f9972017-02-18 15:37:36 +0100124
Zesstra0c1a85a2018-02-07 23:46:50 +01001253. April 2017 Gloinson