MG Mud User | 88f1247 | 2016-06-24 23:31:02 +0200 | [diff] [blame^] | 1 | Krankheiten, 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 |