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