blob: a2c4d9eee0f3e180ef11d0808d458b79bae84afb [file] [log] [blame]
MG Mud User88f12472016-06-24 23:31:02 +02001Krankheiten, Gifte und Flueche
2==============================
3
4 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
10
11 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
18 koennen CL_POISON-Vergiftungen heilen, einige Heiler jedoch nicht.)
19
20 Eine eindeutige Unterscheidung zwischen Giften, Krankheiten und
21 Fluechen zu treffen, ist schwer, denn die Grenzen verschwimmen.
22 Trotzdem hier eine grobe Klassifizierung:
23
24 Gifte : bringt der Spieler sich meist selbst bei (in dem er z.B.
25 einen giftigen Pilz isst). Oft auch sind die Stellen, wo
26 ein Spieler sich vergiften kann, irgendwie gekennzeichnet,
27 so dass eine Vergiftung umgangen werden kann.
28
29 Bei Giften wird durch das Heilen der Level des Giftobjekts
30 abhaengig vom Erfolg gesenkt. Ist der Level <= 0, wird das
31 Objekt vom Kleriker-Spellbook entfernt. Heiler sollten das
32 aehnlich machen. Logisch waere es daher, den Schaden, den das
33 Objekt macht, vom momentanen Level abhaengig zu machen.
34
35 Krankheit: werden dem Spieler durch Fremdeinwirkung beigebracht, auch
36 durch Ansteckung bei einem anderen Spieler oder NPC.
37 Bei ansteckenden Krankheiten ist auf die Ansteckrate zu achten
38 und darauf, dass die Krankheit mit der Zeit auch wieder
39 ausstirbt. Also entweder bei jeder Generation der Krankheit
40 das Ansteckungsrisiko senken oder einmal infizierte Spieler
41 immunisieren. Es sollten sich 2 idelnde Spieler nicht immer
42 wieder gegenseitig bis in alle ewig anstecken koennen. Auch
43 ist darauf zu achten, dass Netztote nicht angesteckt werden
44 koennen bzw. Netztote niemanden anstecken, da sich sonst die
45 Krankheit im Netztotenraum verbreiten kann.
46
47 Das Heilen geschieht im Kleriker-Spellbook wie bei Gift.
48
49 Flueche: werden wie Krankheiten durch Fremdeinwirkung beigebracht
50 (der Spieler wird halt verflucht). Ausserdem ist die Wirkung
51 von Fluechen oft nicht auf einfaches Abziehen von Lebenspunkten
52 beschraenkt, sondern der Spieler kann z.B. nicht mehr richtig
53 sprechen (Sprachfluch ueber P_PERM_STRING), ist in der Bewegung
54 eingeschraenkt oder greift wahllos NPCs an.
55
56 Hier ist das Entfluchen durch einen Kleriker anders. Findet
57 das Spellbook ein CL_CURSE-Objekt im Inv des Spielers, wird
58 gegen das Level des Objekt gewuerfelt. Bei Erfolg wird das
59 Objekt entfernt, bei Misserfolg passiert nichts!
60
61 Als Anhaltspunkte fuer den Level:
62 - < Level 10 sind einfach zu entfluche
63 - 10 - 20 sind fuer kleine Kleriker schon enorm schwierig
64 fuer max. Kleriker gut zu entfluchen.
65 - ueber 20 gelingt es auch einem max. Kleriker nicht immer
66 beim ersten mal.
67 - ab 30 muss der max. Kleriker schon mal tanken gehen
68 - Ueber Level 40 liegt die Chance schon im Promillebereich!!!
69 - Level 100 laesst sich ueberhaupt nicht mehr entfluchen.
70
71 Will man dem Spieler also eine reelle (und nicht nur
72 mathematische) Chance lassen, sollte der Fluchlevel unter 40
73 bleiben.
74
75 Das Schadensobjekt selbst ist unsichtbar, meist autoload und loest die
76 Schadensfunktion ueber Callouts aus.
77
78 BEISPIEL:
79 Hier ein Beispiel fuer einen Giftpilz (gefunden bei Silvana, in
80 /d/dschungel/silvana/weg/obj/pilz.c):
81 ----------------------------------------------------------------------
82 #pragma strong_types
83 #include "../pfad.h"
84
85 inherit "/std/thing";
86
87 void create() {
88 if(!clonep(TO)) {
89 set_next_reset(-1);
90 return;
91 }
92 ::create();
93
94 SetProp(P_SHORT,0);
95 SetProp(P_INVIS,1);
96 SetProp(P_LONG,0);
97 SetProp(P_NODROP,1);
98 SetProp(P_NEVERDROP,1);
99 SetProp(P_AUTOLOADOBJ,1);
100 SetProp(P_WEIGHT,0);
101 SetProp(P_NAME,"Pilzvergiftung");
102 SetProp(P_KILL_NAME,"Eine Pilzvergiftung");
103 SetProp(P_GENDER,FEMALE);
104 SetProp(P_ARTICLE,1);
105 SetProp(P_LEVEL,10);
106 call_out("next_step",2);
107 AddClass(CL_POISON);
108 }
109
110 void next_step();
111
112 void next_step() {
113 object pl;
114 if(!(pl=TOE) || !query_once_interactive(pl) ||
115 pl->QueryProp(P_GHOST)){
116 remove();
117 return ;
118 }
119 call_out(#'next_step ,5);
120 if(!interactive(pl)) return;
121 tell_object(pl,
122 "Dein Bauch schmerzt. Du windest Dich in Kraempfen.\n");
123 if(ENV(pl)) tell_room(ENV(pl),
124 pl->Name()+" windet sich vor Schmerzen am Boden.\n",({ pl }));
125 pl->do_damage(QueryProp(P_LEVEL)*2 + random(10),TO);
126 }
127
128 SIEHE AUCH:
129 P_POISON, P_CURSED, P_PERM_STRING
130
131 LETZTE AeNDERUNG:
132 11.08.2007, Zesstra