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