MG Mud User | 88f1247 | 2016-06-24 23:31:02 +0200 | [diff] [blame] | 1 | SetAttackChats() |
Zesstra | 953f997 | 2017-02-18 15:37:36 +0100 | [diff] [blame] | 2 | **************** |
MG Mud User | 88f1247 | 2016-06-24 23:31:02 +0200 | [diff] [blame] | 3 | |
MG Mud User | 88f1247 | 2016-06-24 23:31:02 +0200 | [diff] [blame] | 4 | |
Zesstra | 953f997 | 2017-02-18 15:37:36 +0100 | [diff] [blame] | 5 | FUNKTION |
| 6 | ======== |
MG Mud User | 88f1247 | 2016-06-24 23:31:02 +0200 | [diff] [blame] | 7 | |
Zesstra | 953f997 | 2017-02-18 15:37:36 +0100 | [diff] [blame] | 8 | void SetAttackChats(int chance, mixed strs); |
MG Mud User | 88f1247 | 2016-06-24 23:31:02 +0200 | [diff] [blame] | 9 | |
MG Mud User | 88f1247 | 2016-06-24 23:31:02 +0200 | [diff] [blame] | 10 | |
Zesstra | 953f997 | 2017-02-18 15:37:36 +0100 | [diff] [blame] | 11 | DEFINIERT IN |
| 12 | ============ |
MG Mud User | 88f1247 | 2016-06-24 23:31:02 +0200 | [diff] [blame] | 13 | |
Zesstra | 953f997 | 2017-02-18 15:37:36 +0100 | [diff] [blame] | 14 | /std/npc/chat.c |
MG Mud User | 88f1247 | 2016-06-24 23:31:02 +0200 | [diff] [blame] | 15 | |
MG Mud User | 88f1247 | 2016-06-24 23:31:02 +0200 | [diff] [blame] | 16 | |
Zesstra | 953f997 | 2017-02-18 15:37:36 +0100 | [diff] [blame] | 17 | ARGUMENTE |
| 18 | ========= |
| 19 | |
Zesstra | 0c1a85a | 2018-02-07 23:46:50 +0100 | [diff] [blame] | 20 | int chance |
| 21 | Prozentuale Wahrscheinlichkeit einer Ausgabe |
| 22 | |
| 23 | mixed strs |
| 24 | Array mit den verschiedenen Moeglichkeiten der Monsterchats |
Zesstra | 953f997 | 2017-02-18 15:37:36 +0100 | [diff] [blame] | 25 | |
| 26 | |
| 27 | BESCHREIBUNG |
| 28 | ============ |
| 29 | |
Zesstra | 0c1a85a | 2018-02-07 23:46:50 +0100 | [diff] [blame] | 30 | 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. |
Zesstra | 953f997 | 2017-02-18 15:37:36 +0100 | [diff] [blame] | 35 | |
Zesstra | 0c1a85a | 2018-02-07 23:46:50 +0100 | [diff] [blame] | 36 | Die einzelnen Arrayelemente koennen: |
Zesstra | 953f997 | 2017-02-18 15:37:36 +0100 | [diff] [blame] | 37 | |
Zesstra | 0c1a85a | 2018-02-07 23:46:50 +0100 | [diff] [blame] | 38 | * Strings sein |
Zesstra | 953f997 | 2017-02-18 15:37:36 +0100 | [diff] [blame] | 39 | |
Zesstra | 0c1a85a | 2018-02-07 23:46:50 +0100 | [diff] [blame] | 40 | * 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. |
Zesstra | 953f997 | 2017-02-18 15:37:36 +0100 | [diff] [blame] | 53 | |
| 54 | |
| 55 | BEMERKUNGEN |
| 56 | =========== |
| 57 | |
Zesstra | 0c1a85a | 2018-02-07 23:46:50 +0100 | [diff] [blame] | 58 | * ausserhalb des Kampf werden keine AttackChats ausgegeben, man |
| 59 | muss dann SetChats() verwenden |
Zesstra | 953f997 | 2017-02-18 15:37:36 +0100 | [diff] [blame] | 60 | |
Zesstra | 0c1a85a | 2018-02-07 23:46:50 +0100 | [diff] [blame] | 61 | * die strings werden (noch) durch process_string() geschickt, |
| 62 | dieses sollte man aber nicht mehr verwenden |
Zesstra | 953f997 | 2017-02-18 15:37:36 +0100 | [diff] [blame] | 63 | |
Zesstra | 0c1a85a | 2018-02-07 23:46:50 +0100 | [diff] [blame] | 64 | * 'chance' gilt sowohl fuer Attack- als auch normale Chats |
Zesstra | 953f997 | 2017-02-18 15:37:36 +0100 | [diff] [blame] | 65 | |
Zesstra | 0c1a85a | 2018-02-07 23:46:50 +0100 | [diff] [blame] | 66 | * 'chance' wird in der Property P_CHAT_CHANCE abgelegt. Um einen |
| 67 | NPC voruebergehend 'stillzulegen', kann man P_CHAT_CHANCE auf 0 |
| 68 | setzen |
Zesstra | 953f997 | 2017-02-18 15:37:36 +0100 | [diff] [blame] | 69 | |
Zesstra | e959e72 | 2025-07-09 22:11:16 +0200 | [diff] [blame^] | 70 | * Spieler koennen P_CHAT_CHANCE temporaer auf 0 setzen ('stillen') |
Zesstra | 953f997 | 2017-02-18 15:37:36 +0100 | [diff] [blame] | 71 | |
Zesstra | 0c1a85a | 2018-02-07 23:46:50 +0100 | [diff] [blame] | 72 | * NPC haben bei Abwesenheit von Spielern in der Regel keinen |
| 73 | Heartbeat, weswegen dann auch die Chats ausgeschaltet sind |
Zesstra | 953f997 | 2017-02-18 15:37:36 +0100 | [diff] [blame] | 74 | |
Zesstra | 0c1a85a | 2018-02-07 23:46:50 +0100 | [diff] [blame] | 75 | * 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. |
Zesstra | 953f997 | 2017-02-18 15:37:36 +0100 | [diff] [blame] | 82 | |
| 83 | |
| 84 | BEISPIELE |
| 85 | ========= |
| 86 | |
Zesstra | 0c1a85a | 2018-02-07 23:46:50 +0100 | [diff] [blame] | 87 | protected string knirschschrei(int msg_typ); |
| 88 | |
Zesstra | 953f997 | 2017-02-18 15:37:36 +0100 | [diff] [blame] | 89 | SetAttackChats( 20, |
Zesstra | 0c1a85a | 2018-02-07 23:46:50 +0100 | [diff] [blame] | 90 | ({"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})); |
Zesstra | 953f997 | 2017-02-18 15:37:36 +0100 | [diff] [blame] | 94 | |
Zesstra | 0c1a85a | 2018-02-07 23:46:50 +0100 | [diff] [blame] | 95 | 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."); |
Zesstra | 953f997 | 2017-02-18 15:37:36 +0100 | [diff] [blame] | 105 | } |
Zesstra | 0c1a85a | 2018-02-07 23:46:50 +0100 | [diff] [blame] | 106 | } |
| 107 | return ""; // keine Meldung |
Zesstra | 953f997 | 2017-02-18 15:37:36 +0100 | [diff] [blame] | 108 | } |
| 109 | |
| 110 | |
| 111 | SIEHE AUCH |
| 112 | ========== |
| 113 | |
Zesstra | 0c1a85a | 2018-02-07 23:46:50 +0100 | [diff] [blame] | 114 | Verwandt: |
Zesstra | 6cadc1b | 2018-11-15 22:27:32 +0100 | [diff] [blame] | 115 | SetChats(), AddSpell() |
Zesstra | 953f997 | 2017-02-18 15:37:36 +0100 | [diff] [blame] | 116 | |
Zesstra | 0c1a85a | 2018-02-07 23:46:50 +0100 | [diff] [blame] | 117 | Props: |
Arathorn | 0487fdb | 2019-11-26 19:16:14 +0100 | [diff] [blame] | 118 | P_ACHAT_CHANCE, P_CHATS, P_CHAT_CHANCE |
Zesstra | 953f997 | 2017-02-18 15:37:36 +0100 | [diff] [blame] | 119 | |
Zesstra | 0c1a85a | 2018-02-07 23:46:50 +0100 | [diff] [blame] | 120 | Sonstiges: |
Zesstra | 6cadc1b | 2018-11-15 22:27:32 +0100 | [diff] [blame] | 121 | send_room(), process_string() |
Zesstra | 953f997 | 2017-02-18 15:37:36 +0100 | [diff] [blame] | 122 | |
Zesstra | 0c1a85a | 2018-02-07 23:46:50 +0100 | [diff] [blame] | 123 | 3. April 2017 Gloinson |