blob: a6c5aaf5c0728d4b5114fcc4c709c32b7599cc47 [file] [log] [blame]
MG Mud User88f12472016-06-24 23:31:02 +02001/*
2 Ein magisch begabter Beispiel-NPC (von Zesstra, angelehnt an Boings
3 bspmon1.c)
4*/
5
6// Diese Pragmas sorgen dafuer, dass der Driver darauf achtet, dass bei
7// Funktionsargumenten, -Rueckgabewerten und teilweise bei Zuweisung von
8// Werten an Variablen der richtige Datentyp verwendet wird (z.b. kein string
9// anstelle eines int verwendet wird). Sollte in keinem Objekt fehlen.
10#pragma strong_types, save_types, rtt_checks
11// Einige Warnungen werden als Fehler betrachtet (empfohlen)
12#pragma pedantic, range_check
13// Schaltet bestimmte Warnungen ein (empfohlen)
14#pragma warn_deprecated, warn_empty_casts, warn_missing_return
15#pragma warn_function_inconsistent
16
17// Dieser NPC soll ein Rotaugenvampir sein, der ein paar Spells kann. Und nen
18// Rotaugenvampir gibt es schon. Also einfach den normalen Rotaugenvampir
19// aus diesem Verzeichnis erben.
20inherit __DIR__+"rotaugenvampir";
21
22// Inkludiert Definitionen fuer Properties
23#include <properties.h>
24
25protected void create()
26{
27 // Nicht vergessen, ohne das geht nichts. Fuehrt das create() des geerbten
28 // Rotaugenvampir aus und konfiguriert ihn.
29 ::create();
30
31/* Die Kurzbeschreibung wird zum Beispiel angezeigt wenn man in einen Raum
32 mit dem Monster reinlaeuft */
33 SetProp(P_SHORT, "Rotaugenvampirmagier");
34
35/* Beim Anschauen des Monsters wird die long-description angezeigt,
36 * Zeilenumbruch nach Bedarf nach 78 Zeichen. */
37 SetProp(P_LONG, break_string(
38 "Ein finster aussehender Rotaugenvampir in einer Kutte.",78));
39
40/* Ein Name muss sein, da sonst z.B. im Todesfall 'Leiche von 0' daliegt */
41 SetProp(P_NAME, "Rotaugenvampirmagier");
42 SetProp(P_NAME_ADJ,"listenreich");
43
44 // fast alle Eigenschaften uebernehmen wir einfach unveraendert unveraendert
45 // vom normalen Rotaugenvampir. Die Hands nicht, der Magier haut nicht so
46 // gut zu...
47 SetProp(P_HANDS, ({" mit seinen Haenden", 85}));
48
49 // ok, spielt wenig Rolle in diesem Fall, aber damits stilecht ist, kriegt
50 // der hier jetzt etwas mehr an Magiepunkten (spellpoints)
51 SetProp(P_MAX_SP, 350);
52
53 // und noch ein paar Spells
54 // Anmerkung: diese Spells haben nichts mit irgendwelchen Gildenspells zu
55 // tun und - ja, tatsaechlich - verbrauchen keine Magiepunkte...
56
57 // wahrscheinlichkeit in % pro runde, einen Spell zu casten:
58 SetProp(P_SPELLRATE,30);
59 // Ein Spell, der 100 Schadenspunkte macht und in 60% der Faelle ausgewaehlt
60 // wird. Erste Meldung geht an den Spieler, die zweite an den Raum.
61 // Schadenstyp ist Schlagschaden.
62 AddSpell(60,100,
63 break_string(Name(WER) + " macht eine Handbewegung vor Deinem Gesicht. "
64 "So abgelenkt stolperst Du in faellst hart zu Boden.",78),
65 break_string(Name(WER) + " macht eine Handbewegung vor @WESSEN Gesicht. "
66 "@WER stolpert und faellt hart auf den Boden.",78),
67 ({DT_BLUDGEON}) );
68 // Ein Spell, der 800 Schadenspunkte macht und in 40% der Faelle ausgewaehlt
69 // wird. Schadenstyp: Feuer.
70 AddSpell(40,800,
71 break_string(Name(WER) + " schaut Dich mit brennenden Augen "
72 "durchdringend an. Du glaubst, innerlich zu verbrennen.",78),
73 break_string(Name(WER) + " schaut @WEN mit gluehenden Augen an. "
74 "@WER kruemmt sich vor Schmerzen.",78),
75 ({DT_FIRE}) );
76}
77