blob: 2e7f575bfc5fe753e9724e27c7c8da01f7996803 [file] [log] [blame]
MG Mud User88f12472016-06-24 23:31:02 +02001SetAttackChats()
Zesstra953f9972017-02-18 15:37:36 +01002****************
MG Mud User88f12472016-06-24 23:31:02 +02003
MG Mud User88f12472016-06-24 23:31:02 +02004
Zesstra953f9972017-02-18 15:37:36 +01005FUNKTION
6========
MG Mud User88f12472016-06-24 23:31:02 +02007
Zesstra953f9972017-02-18 15:37:36 +01008 void SetAttackChats(int chance, mixed strs);
MG Mud User88f12472016-06-24 23:31:02 +02009
MG Mud User88f12472016-06-24 23:31:02 +020010
Zesstra953f9972017-02-18 15:37:36 +010011DEFINIERT IN
12============
MG Mud User88f12472016-06-24 23:31:02 +020013
Zesstra953f9972017-02-18 15:37:36 +010014 /std/npc/chat.c
MG Mud User88f12472016-06-24 23:31:02 +020015
MG Mud User88f12472016-06-24 23:31:02 +020016
Zesstra953f9972017-02-18 15:37:36 +010017ARGUMENTE
18=========
19
Zesstra0c1a85a2018-02-07 23:46:50 +010020 int chance
21 Prozentuale Wahrscheinlichkeit einer Ausgabe
22
23 mixed strs
24 Array mit den verschiedenen Moeglichkeiten der Monsterchats
Zesstra953f9972017-02-18 15:37:36 +010025
26
27BESCHREIBUNG
28============
29
Zesstra0c1a85a2018-02-07 23:46:50 +010030 Der NPC gibt mit der Wahrscheinlichkeit <chance> waehrend des
31 Kampfes pro Heartbeat einen zufaellig gewaehlten Text aus dem Array
32 <strs> in den Raum aus. Dabei wird per Default send_room() ohne
33 erneutes Umbrechen mit den Messagetypen
34 MT_LOOK|MT_LISTEN|MT_FEEL|MT_SMELL verwendet.
Zesstra953f9972017-02-18 15:37:36 +010035
Zesstra0c1a85a2018-02-07 23:46:50 +010036 Die einzelnen Arrayelemente koennen:
Zesstra953f9972017-02-18 15:37:36 +010037
Zesstra0c1a85a2018-02-07 23:46:50 +010038 * Strings sein
Zesstra953f9972017-02-18 15:37:36 +010039
Zesstra0c1a85a2018-02-07 23:46:50 +010040 * Closures sein, deren Rueckgabe ausgegeben wird und die
41 zusaetzlich einen aenderbaren und in send_room() verwendeten
42 'msg_typ' per Referenz uebergeben bekommen
43
44 * Arrays mit der Struktur *({<string|closure msg >, <int
45 msg_typ>})* sein, fuer die obige Regeln auf 'msg' angewendet
46 werden und bei denen 'msg_typ' im send_room() verwendet wird
47
48 Fuer keine Ausgabe muss man einen Leerstring "" zurueckgeben oder
49 verwenden. In allen Funktionen ist this_player() das Monster
50 selbst. Normalerweise muss man die Nachrichten selbst umbrechen,
51 ausser man uebergibt die Message-Typen explizit und uebergibt kein
52 MSG_DONT_WRAP.
Zesstra953f9972017-02-18 15:37:36 +010053
54
55BEMERKUNGEN
56===========
57
Zesstra0c1a85a2018-02-07 23:46:50 +010058 * ausserhalb des Kampf werden keine AttackChats ausgegeben, man
59 muss dann SetChats() verwenden
Zesstra953f9972017-02-18 15:37:36 +010060
Zesstra0c1a85a2018-02-07 23:46:50 +010061 * die strings werden (noch) durch process_string() geschickt,
62 dieses sollte man aber nicht mehr verwenden
Zesstra953f9972017-02-18 15:37:36 +010063
Zesstra0c1a85a2018-02-07 23:46:50 +010064 * 'chance' gilt sowohl fuer Attack- als auch normale Chats
Zesstra953f9972017-02-18 15:37:36 +010065
Zesstra0c1a85a2018-02-07 23:46:50 +010066 * 'chance' wird in der Property P_CHAT_CHANCE abgelegt. Um einen
67 NPC voruebergehend 'stillzulegen', kann man P_CHAT_CHANCE auf 0
68 setzen
Zesstra953f9972017-02-18 15:37:36 +010069
Zesstrae959e722025-07-09 22:11:16 +020070 * Spieler koennen P_CHAT_CHANCE temporaer auf 0 setzen ('stillen')
Zesstra953f9972017-02-18 15:37:36 +010071
Zesstra0c1a85a2018-02-07 23:46:50 +010072 * NPC haben bei Abwesenheit von Spielern in der Regel keinen
73 Heartbeat, weswegen dann auch die Chats ausgeschaltet sind
Zesstra953f9972017-02-18 15:37:36 +010074
Zesstra0c1a85a2018-02-07 23:46:50 +010075 * send_room() bekommt immer MSG_DONT_STORE|MSG_DONT_BUFFER
76 uebergeben
77
78 Man kann AttackChats nutzen, um Monsterspells zu realisieren.
79 Besser ist es aber, dafuer 'AddSpell' zu benutzen, ausser man
80 moechte zB die Spielerfaehigkeit des Abschaltens der Chats
81 verwenden.
Zesstra953f9972017-02-18 15:37:36 +010082
83
84BEISPIELE
85=========
86
Zesstra0c1a85a2018-02-07 23:46:50 +010087 protected string knirschschrei(int msg_typ);
88
Zesstra953f9972017-02-18 15:37:36 +010089 SetAttackChats( 20,
Zesstra0c1a85a2018-02-07 23:46:50 +010090 ({"Der Ork tritt Dir in den Hintern.\n",
91 ({"Der Ork bruellt: Lebend kommst Du hier nicht raus!\n", MT_LISTEN}),
92 ({"Der Ork blutet schon aus mehreren Wunden.\n", MT_LOOK}),
93 #'knirschschrei}));
Zesstra953f9972017-02-18 15:37:36 +010094
Zesstra0c1a85a2018-02-07 23:46:50 +010095 protected string knirsch(int msg_typ) {
96 object helm = this_player()->QueryArmourByType(AT_HELMET);
97 if (objectp(helm)) {
98 // AC nur dann senken, wenn sie nicht schon 0 ist.
99 if (helm->QueryProp(P_AC)>0) {
100 helm->Damage(1);
101 msg_typ = MT_LISTEN|MT_FEEL;
102 return ("Der Ork schreit dich so laut an, dass dabei "+
103 helm->QueryOwn(WER)+" "+
104 helm->name(RAW)+" beschaedigt wird.");
Zesstra953f9972017-02-18 15:37:36 +0100105 }
Zesstra0c1a85a2018-02-07 23:46:50 +0100106 }
107 return ""; // keine Meldung
Zesstra953f9972017-02-18 15:37:36 +0100108 }
109
110
111SIEHE AUCH
112==========
113
Zesstra0c1a85a2018-02-07 23:46:50 +0100114 Verwandt:
Zesstra6cadc1b2018-11-15 22:27:32 +0100115 SetChats(), AddSpell()
Zesstra953f9972017-02-18 15:37:36 +0100116
Zesstra0c1a85a2018-02-07 23:46:50 +0100117 Props:
Arathorn0487fdb2019-11-26 19:16:14 +0100118 P_ACHAT_CHANCE, P_CHATS, P_CHAT_CHANCE
Zesstra953f9972017-02-18 15:37:36 +0100119
Zesstra0c1a85a2018-02-07 23:46:50 +0100120 Sonstiges:
Zesstra6cadc1b2018-11-15 22:27:32 +0100121 send_room(), process_string()
Zesstra953f9972017-02-18 15:37:36 +0100122
Zesstra0c1a85a2018-02-07 23:46:50 +01001233. April 2017 Gloinson