blob: 095d6910190c8525941350242665b0fbd6fcb895 [file] [log] [blame]
MG Mud User88f12472016-06-24 23:31:02 +02001Krankheiten, Gifte und Flueche
2==============================
3
Zesstra6fb467b2019-08-19 20:13:45 +02004 Einmal abgesehen vom einfachen Setzen von P_POISON im Spieler lassen
5 sich Gifte und Krankheiten auch als Objekte ausprogrammieren, die dem
6 Spieler in mehr oder weniger regelmaessigen Abstaenden Lebenspunkte
7 abziehen. Auch Flueche koennen nicht nur als P_CURSED in Waffen und
8 Ruestungen, sondern auch als Objekte vorliegen und dem Spieler das
9 Leben schwermachen.
MG Mud User88f12472016-06-24 23:31:02 +020010
Zesstra6fb467b2019-08-19 20:13:45 +020011 Um ein Objekt als Gift zu kennzeichnen, wird die Klasse CL_POISON
12 gesetzt, fuer eine Krankheit ist CL_DISEASE und fuer einen Fluch
13 CL_CURSE zu setzen (mit AddClass, siehe dort). Zusaetzlich wird die
14 Schwere der Erkrankung bzw. Vergiftung in der Property P_LEVEL
15 abgelegt, wobei P_LEVEL einen Wert zwischen 1 und 100 haben sollte.
16 Mitglieder der Klerikergilde und andere Heiler koennen dann je nach
17 P_LEVEL den betroffenen Spieler mehr oder weniger gut heilen. (Kleriker
MG Mud User88f12472016-06-24 23:31:02 +020018 koennen CL_POISON-Vergiftungen heilen, einige Heiler jedoch nicht.)
19
Zesstra6fb467b2019-08-19 20:13:45 +020020 Eine eindeutige Unterscheidung zwischen Giften, Krankheiten und
21 Fluechen zu treffen, ist schwer, denn die Grenzen verschwimmen.
MG Mud User88f12472016-06-24 23:31:02 +020022 Trotzdem hier eine grobe Klassifizierung:
23
Zesstra6fb467b2019-08-19 20:13:45 +020024 Gifte:
25 bringt der Spieler sich meist selbst bei (in dem er z.B. einen
26 giftigen Pilz isst). Oft auch sind die Stellen, wo ein Spieler
27 sich vergiften kann, beim Forschen erkennbar, so dass eine
28 Vergiftung umgangen werden kann.
MG Mud User88f12472016-06-24 23:31:02 +020029
Zesstra6fb467b2019-08-19 20:13:45 +020030 Bei Giften wird durch das Heilen der Klerikergilde der Level des
31 Giftobjekts abhaengig vom Erfolg gesenkt. Ist der Level <= 0, wird
32 das Objekt vom Kleriker-Spellbook entfernt. Heiler-NPCs sollten das
33 aehnlich machen. Logisch waere es daher, den Schaden, den das
34 Objekt macht, vom momentanen Level abhaengig zu machen.
MG Mud User88f12472016-06-24 23:31:02 +020035
Zesstra6fb467b2019-08-19 20:13:45 +020036 Krankheiten:
37 werden dem Spieler durch Fremdeinwirkung beigebracht, auch durch
38 Ansteckung bei einem anderen Spieler oder NPC.
39
40 Bei ansteckenden Krankheiten ist auf die Ansteckrate zu achten
41 und darauf, dass die Krankheit mit der Zeit auch wieder ausstirbt.
42 Also entweder bei jeder Generation der Krankheit das
43 Ansteckungsrisiko senken oder einmal infizierte Spieler
44 immunisieren. Es sollten sich 2 idelnde Spieler nicht immer wieder
45 gegenseitig bis in alle Ewigkeit anstecken koennen. Auch ist darauf
46 zu achten, dass Netztote nicht angesteckt werden koennen bzw.
47 Netztote niemanden anstecken, da sich sonst die Krankheit im
48 Netztotenraum verbreiten kann.
MG Mud User88f12472016-06-24 23:31:02 +020049
Zesstra6fb467b2019-08-19 20:13:45 +020050 Das Heilen geschieht im Kleriker-Spellbook wie bei Gift, oder
51 bei Heiler-NPCs.
MG Mud User88f12472016-06-24 23:31:02 +020052
Zesstra6fb467b2019-08-19 20:13:45 +020053 Flueche:
54 werden wie Krankheiten durch Fremdeinwirkung beigebracht (der
55 Spieler wird halt verflucht). Vorsicht: Nicht P_CURSED im
56 Spielerobjekt setzen!
57
58 Die Wirkung von Fluechen ist oft nicht auf einfaches Abziehen von
59 Lebenspunkten beschraenkt, sondern der Spieler kann z.B.
60 nicht mehr richtig sprechen (Sprachfluch ueber P_PERM_STRING),
61 ist in der Bewegung eingeschraenkt oder greift wahllos NPCs an.
MG Mud User88f12472016-06-24 23:31:02 +020062
Zesstra6fb467b2019-08-19 20:13:45 +020063 Hier ist das Entfluchen durch einen Kleriker anders. Findet das
64 Spellbook ein CL_CURSE-Objekt im Inv des Spielers, wird gegen
65 das Level des Objekt gewuerfelt. Bei Erfolg wird das Objekt
66 entfernt, bei Misserfolg passiert nichts! Es wird also nicht die
67 Fluchstufe reduziert.
MG Mud User88f12472016-06-24 23:31:02 +020068
Zesstra6fb467b2019-08-19 20:13:45 +020069 Als Anhaltspunkte fuer den Level:
70 - < Level 10 sind einfach zu entfluchen
71 - 10-20 sind fuer kleine Kleriker schon enorm schwierig
72 fuer max. Kleriker gut zu entfluchen.
73 - ueber 20 gelingt es auch einem max. Kleriker nicht immer
74 beim ersten Mal.
75 - ab 30 muss der max. Kleriker schon mal tanken gehen
76 - Ueber Level 40 liegt die Chance schon im Promillebereich!!!
77 - Level 100 laesst sich ueberhaupt nicht mehr entfluchen.
78 Will man dem Spieler also eine reelle (und nicht nur
79 mathematische) Chance lassen, sollte der Fluchlevel unter 40
80 bleiben.
MG Mud User88f12472016-06-24 23:31:02 +020081
Zesstra6fb467b2019-08-19 20:13:45 +020082 Das Schadensobjekt selbst ist unsichtbar, meist autoload und loest die
83 Schadensfunktion z.B. ueber Callouts oder den Reset aus.
MG Mud User88f12472016-06-24 23:31:02 +020084
MG Mud User88f12472016-06-24 23:31:02 +020085
Zesstra6fb467b2019-08-19 20:13:45 +020086BEISPIEL:
87
88 Hier ein Beispiel fuer einen Giftpilz
89 -------------------------------------
90
MG Mud User88f12472016-06-24 23:31:02 +020091 #pragma strong_types
MG Mud User88f12472016-06-24 23:31:02 +020092
93 inherit "/std/thing";
94
Zesstra6fb467b2019-08-19 20:13:45 +020095 #include "../pfad.h"
96
97 protected void create() {
98 if ( !clonep(this_object()) ) {
99 set_next_reset(-1);
100 return;
MG Mud User88f12472016-06-24 23:31:02 +0200101 }
102 ::create();
103
Zesstra6fb467b2019-08-19 20:13:45 +0200104 SetProp(P_SHORT, 0);
105 SetProp(P_INVIS, 1);
106 SetProp(P_LONG, 0);
107 SetProp(P_NODROP, 1);
108 SetProp(P_NEVERDROP, 1);
109 SetProp(P_AUTOLOADOBJ, 1);
110 SetProp(P_WEIGHT, 0);
111 SetProp(P_NAME, "Pilzvergiftung");
112 SetProp(P_KILL_NAME, "Eine Pilzvergiftung");
113 SetProp(P_GENDER, FEMALE);
114 SetProp(P_LEVEL, 10);
115 call_out("next_step", 2);
MG Mud User88f12472016-06-24 23:31:02 +0200116 AddClass(CL_POISON);
117 }
118
MG Mud User88f12472016-06-24 23:31:02 +0200119 void next_step() {
Zesstra6fb467b2019-08-19 20:13:45 +0200120 object pl = environment(this_object());
121 if ( !objectp(pl) || !query_once_interactive(pl) ||
122 pl->QueryProp(P_GHOST) ) {
123 remove(1);
MG Mud User88f12472016-06-24 23:31:02 +0200124 return ;
125 }
Zesstra6fb467b2019-08-19 20:13:45 +0200126 call_out("next_step", 5);
127 if ( interactive(pl) ) {
128 tell_object(pl,
129 "Dein Bauch schmerzt. Du windest Dich in Kraempfen.\n");
130 if ( environment(pl) )
131 tell_room(environment(pl), pl->Name(WER)+" windet sich vor "
132 "Schmerzen am Boden.\n", ({ pl }));
133 pl->do_damage(QueryProp(P_LEVEL)*2 + random(10), this_object());
134 }
MG Mud User88f12472016-06-24 23:31:02 +0200135 }
136
137 SIEHE AUCH:
Zesstra6fb467b2019-08-19 20:13:45 +0200138 P_POISON, P_MAX_POISON, P_POISON_DELAY
139 P_CURSED, P_PERM_STRING
MG Mud User88f12472016-06-24 23:31:02 +0200140
141 LETZTE AeNDERUNG:
Zesstra6fb467b2019-08-19 20:13:45 +0200142 18.08.2019, Arathorn