blob: c4fe6331c55cbe0ae10884b418cc6029745dbd4d [file] [log] [blame]
Zesstra953f9972017-02-18 15:37:36 +01001
MG Mud User88f12472016-06-24 23:31:02 +02002SetChats()
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
Zesstra0c1a85a2018-02-07 23:46:50 +01009 void SetChats(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=========
MG Mud User88f12472016-06-24 23:31:02 +020020
Zesstra0c1a85a2018-02-07 23:46:50 +010021 int chance
22 Prozentuale Wahrscheinlichkeit einer Ausgabe
23
Zesstraa178b882025-06-20 16:49:42 +020024 <string|closure|<string|closure|int>* >* strs
Zesstra0c1a85a2018-02-07 23:46:50 +010025 Array mit den verschiedenen Moeglichkeiten der Monsterchats
Zesstraa178b882025-06-20 16:49:42 +020026 (optional)
Zesstra953f9972017-02-18 15:37:36 +010027
28
29BESCHREIBUNG
30============
31
Zesstra0c1a85a2018-02-07 23:46:50 +010032 Der NPC gibt mit der Wahrscheinlichkeit <chance> pro Heartbeat
33 einen zufaellig gewaehlten Text aus dem Array <strs> in den Raum
Zesstraa178b882025-06-20 16:49:42 +020034 aus. Wird kein <strs> uebergeben, wird nur die Chat-Chance
35 geaendert und die bisherigen Chats werden beibehalten.
Zesstra953f9972017-02-18 15:37:36 +010036
Zesstraa178b882025-06-20 16:49:42 +020037 Per Default wird send_room() ohne erneutes Umbrechen mit den
38 Messagetypen MT_LOOK|MT_LISTEN|MT_FEEL|MT_SMELL zur Ausgabe
39 verwendet.
Zesstra953f9972017-02-18 15:37:36 +010040
Zesstraa178b882025-06-20 16:49:42 +020041 Die einzelnen Arrayelemente koennen sein:
Zesstra953f9972017-02-18 15:37:36 +010042
Zesstraa178b882025-06-20 16:49:42 +020043 * Strings
44
45 * Closures, deren Rueckgabe ausgegeben wird und die
Zesstra0c1a85a2018-02-07 23:46:50 +010046 zusaetzlich einen aenderbaren und in send_room() verwendeten
47 'msg_typ' per Referenz uebergeben bekommen
Zesstra953f9972017-02-18 15:37:36 +010048
Zesstra0c1a85a2018-02-07 23:46:50 +010049 * Arrays mit der Struktur *({<string|closure msg >, <int
Zesstraa178b882025-06-20 16:49:42 +020050 msg_typ>})*, fuer die obige Regeln auf 'msg' angewendet werden
51 und bei denen 'msg_typ' im send_room() verwendet wird
Zesstra953f9972017-02-18 15:37:36 +010052
Zesstra0c1a85a2018-02-07 23:46:50 +010053 Fuer keine Ausgabe muss man einen Leerstring "" zurueckgeben oder
54 verwenden. In allen Funktionen ist this_player() das Monster
55 selbst. Normalerweise muss man die Nachrichten selbst umbrechen,
56 ausser man uebergibt die Message-Typen explizit und uebergibt kein
57 MSG_DONT_WRAP.
Zesstra953f9972017-02-18 15:37:36 +010058
59
60BEMERKUNGEN
61===========
62
Zesstra0c1a85a2018-02-07 23:46:50 +010063 * im Kampf werden keine Chats ausgegeben, man muss dann
64 SetAttackChats() verwenden
65
66 * die strings werden (noch) durch process_string() geschickt,
67 dieses sollte man aber nicht mehr verwenden
68
69 * 'chance' gilt sowohl fuer Attack- als auch normale Chats
70
71 * 'chance' wird in der Property P_CHAT_CHANCE abgelegt. Um einen
72 NPC voruebergehend 'stillzulegen', kann man P_CHAT_CHANCE auf 0
73 setzen
74
75 * Spieler koennen P_CHAT_CHANCE temporaer auf 0 setzen
76 ('stillen')
77
78 * NPC haben bei Abwesenheit von Spielern in der Regel keinen
79 Heartbeat, weswegen dann auch die Chats ausgeschaltet sind
80
81 * send_room() bekommt immer MSG_DONT_STORE|MSG_DONT_BUFFER
82 uebergeben
83
84
85BEISPIELE
86=========
87
88 // Ein einfaches Beispiel:
89 SetChats(20,
90 ({"Der Ork sagt: Hau ab, bevor ich Dich fresse.\n",
91 "Der Ork grinst Dich unverschaemt an.\n",
92 "Der Ork wedelt mit seinem Saebel vor dir herum.\n",
93 "Der Ork stupst Dich mit dem Finger hart.\n"}));
94
95 // Ein Beispiel mit send_room-Typen ohne MSG_DONT_WRAP
96 SetChats(20,
97 ({({"Der Ork sagt: Hau ab, bevor ich Dich fresse.", MT_LISTEN}),
98 ({"Der Ork grinst Dich unverschaemt an.", MT_LOOK}),
99 ({"Der Ork wedelt mit seinem Saebel vor dir herum.", MT_LOOK}),
100 ({"Der Ork stupst Dich mit dem Finger hart.", MT_LOOK|MT_FEEL})}));
101
102 // Laengeres Beispiel mit Closures
103 protected string chat_flightinfo(int msg_typ);
104 protected string chat_trysteal(int msg_typ);
105
106 void create() {
107 SetChats(20,
108 ({({"Der Ork sagt: Hau ab, bevor ich Dich fresse.\n", MT_LISTEN}),
109 #'chat_flightinfo,
110 #'chat_trysteal}));
111 // [...]
112 }
113
114 protected string chat_flightinfo(int msg_typ) {
115 msg_typ = MT_LISTEN;
116 return ("Der Ork sagt: "+
117 (QueryProp(P_HP)<QueryProp(P_WIMPY)?
118 "Ich hab Angst!":
119 "Guck mich nicht so an, Schwaechling!"));
120 }
121
122 protected string chat_trysteal(int msg_typ) {
123 object *pls = filter(all_inventory(environment()), #'interactive);
124 if(sizeof(pls)) {
125 object pl = pls[random(sizeof(pls))];
126 if(!IS_LEARNER(pl)) {
127 object *objs = all_inventory(pl);
128 if(sizeof(objs)) {
129 object ob = objs[random(sizeof(objs))];
130 if(ob->move(this_object(),
131 M_NO_SHOW|M_GIVE|M_MOVE_ALL)==MOVE_OK) {
132 if(pl->ReceiveMsg(Name(WER)+" stiehlt dir "+ob->name(WEN, 0)+".",
133 MT_FEEL|MT_LOOK)<0)
134 pl->ReceiveMsg("Irgendwie scheint dir jetzt etwas zu fehlen.",
135 MT_FEEL|MT_LOOK|MSG_DONT_IGNORE);
136 send_room(environment(),
137 Name(WER, 1)+" bestiehlt "+pl->name(WEN)+".",
138 MT_LOOK, 0, 0, ({pl}));
139 return "";
140 }
141 }
142 }
143 }
144 msg_typ = MT_LOOK;
145 return Name(WER, 1)+" schaut sich verstohlen um.";
146 }
Zesstra953f9972017-02-18 15:37:36 +0100147
148
149SIEHE AUCH
150==========
151
Zesstra0c1a85a2018-02-07 23:46:50 +0100152 Verwandt:
Zesstra6cadc1b2018-11-15 22:27:32 +0100153 SetAttackChats()
Zesstra953f9972017-02-18 15:37:36 +0100154
Zesstra0c1a85a2018-02-07 23:46:50 +0100155 Props:
Arathorn0487fdb2019-11-26 19:16:14 +0100156 P_CHAT_CHANCE, P_ACHATS, P_ACHAT_CHANCE
Zesstra0c1a85a2018-02-07 23:46:50 +0100157
158 Sonstiges:
Zesstra6cadc1b2018-11-15 22:27:32 +0100159 send_room(), process_string()
Zesstra0c1a85a2018-02-07 23:46:50 +0100160
1613. April 2017 Gloinson