blob: 7ea596ed1fd25617e2311fa98a0ad39be0508f8a [file] [log] [blame]
MG Mud User88f12472016-06-24 23:31:02 +02001// (c) by Padreic (Padreic@mg.mud.de)
2
3#include "../files.h"
4#include <combat.h>
5#include <moving.h>
6#include <new_skills.h>
7#include "/p/zauberer/zauberer.h"
8
9inherit NPC("stdnpc");
10
11string info_tarnzauber()
12{
13 object ob;
14 if (present("\ntarnzauber", PL))
15 return "sagt: Ich habe Dich doch bereist verzaubert.\n";
16 ob=clone_object(OBJ("tarnzauber"));
17 ob->move(PL, M_NOCHECK);
18 ob->Initialize(PL);
19 return "sagt: Nun gut, so sei es...\n"
20 +"macht eine weite Handbewegung und Du fuehlst wie Du Dich verwandelst.\n"
21 +"sagt: Viel Glueck!";
22}
23
24void create()
25{
26 ::create();
27 SetProp(P_SHORT, "Ulinia die Waldfee");
28 SetProp(P_LONG,
29 BS("Ueber dem Teich schwebt Ulinia die Waldfee. Ihr langes goldenes Haar weht "
30 +"leicht im Wind und das einzige was sie bedeckt, ist ein leichtes Blaetterkleid "
31 +"das ihre weiblichen Rundungen ausserordentlich gut zur Geltung bringt. "
32 +"In der Hand haelt sie einen kleinen Zauberstab, mit dem sie hoch ueber allem thront."));
33 SetProp(P_NAME, "Ulinia");
34 SetProp(P_ARTICLE, 0);
35 SetProp(P_GENDER, FEMALE);
36 SetProp(P_LEVEL, 80);
37 SetProp(P_ATTRIBUTES, (["int":80,"con":40,"str":16,"dex":50]) );
38 SetProp(P_DISABLE_ATTACK, -10000); // is nich :)
39 SetProp(P_BODY, 80);
40 SetProp(P_MAX_SP, 2000);
41 SetProp(P_SP, 2000);
42 SetProp(P_MAX_HP, 800);
43 SetProp(P_HP, 800);
44 SetProp(P_ALIGN, 400);
45 SetProp(P_RACE, "Fee");
46 SetProp(P_SIZE, 160+random(16));
47 SetProp(P_ALCOHOL, 0);
48 SetProp(P_CORPSE, OBJ("feenleiche"));
49 SetProp(P_MAX_ALCOHOL, 0); // kein rauschen :)
50 AddAdjective("wunderschoen");
51 AddId(({"fee", "waldfee", "ulinia", WALDID("fee")}));
52 SetProp(P_HANDS, ({" mit ihren zarten Haenden", 150, DT_BLUDGEON}) );
53 SetProp(P_SKILL_ATTRIBUTE_OFFSETS, ([SA_SPELL_PENETRATION: 250]));
54 SetProp(P_XP, 800*200*5*2);
55 SetProp(P_GUILD, "zauberer");
56 SetProp(P_Z_NO_MATERIAL, 1);
57 SetProp(P_DEFAULT_INFO, "schweigt und laechelt Dich einfach nur freundlich an.\n");
58 AddInfo(({"quest", "hilfe", "aufgabe", "dunkelelfenamulett", "delfenamulett"}),
59 "Ohh in der Tat haette ich da eine Aufgabe fuer Dich, aber ich muss Dich "
60 +"warnen, das sie nicht ganz ungefaehrlich ist.\n"
61 +"Ein befreundeter Kobold berichtete mir von einem lange verschollenen Buch, "
62 +"dass in der Bibliothek der Dunkelelfen wieder aufgetaucht ist. In diesem "
63 +"Buch ist unter anderem von einem alten Amulett die Rede, mit dessen Hilfe "
64 +"die Dunkelelfen ihre alte Macht wiedererlangen und erneut Furcht und "
65 +"Schrecken ueber das gesamte Morgengrauen bringen koennten. "
66 +"Wenn Du die Gefahr nicht scheust, waere es ausserordentlich nett wenn Du "
67 +"Dich nach Zzerenzzen begeben wuerdest und dort nach dem Amulett suchst.\n"
68 +"Solltest Du das Amulett tatsaechlich finden, so ist es wichtig das es "
69 +"auf keinen Fall in die Hand der Dunkelelfen geraet und zerstoert wird.",
70 "antwortet: ");
71 AddInfo("gefahr",
72 "Nun Du wirst Dich mitten unter die Dunkelelfen begeben muessen um "
73 +"zu ihrer Bibliothek gelangen zu koennen. In Zzerenzzen wirst Du "
74 +"hierbei voellig auf Dich allein gestellt sein.\n"
75 +"Alles was ich hierbei fuer Dich tun kann, ist einen Tarnzauber zu "
76 +"sprechen der Dich aeusserlich in einen Dunkelelfen verwandelt. "
77 +"Aber vorsicht, spaetestens wenn Du Dich in einen Kampf verwickelst, "
78 +"wird sich der Zauber loesen.", "sagt: ");
79 AddInfo("tarnzauber", #'info_tarnzauber, "");
80 AddInfo(({"furcht", "schrecken", "macht"}),
81 "Ja frueher waren die Dunkelelfen sehr sehr maechtig und alle "
82 +"friedliebenden Geschoepfe dieser Welt sollten hoffen das sie "
83 +"nie wieder ihre alte Macht erlangen werden.", "antwortet: ");
84 AddInfo("amulett",
85 "Nun leider weiss ich auch nichts genaues ueber das Amulett. Ich bin "
86 +"nicht mal sicher ob es existiert oder je existiert hat. Aber sollte "
87 +"es noch existieren, muss es auf jeden Fall zerstoert werden!", "sagt: ");
88 AddInfo("kobold",
89 "Ich habe versprochen ihn nicht zu verraten und so kann ich Dir nichts "
90 +"weiter ueber ihn sagen.", "antwortet: ");
91 AddInfo(({"buch", "bibliothek"}),
92 "Ich denke am besten begibst Du Dich in die Hoehle des Loewen und versuchst "
93 +"in der Bibliothek der Dunkelelfen selbst ein Blick in dies Buch zu werfen.\n"
94 +"Wenn ich das noch recht in Erinnerung habe, handelt es sich hierbei um "
95 +"das Buch eines Dunkelelfen names Teyrion.", "sagt: ");
96 AddInfo("loewen", "Das ist doch bloss eine Redewendung.", "sagt: ");
97 AddInfo("redewendung", "Na das sagt man halt so...", "sagt: ");
98 AddInfo(({"hoehle", "zzerenzzen"}),
99 "Der Eingang nach Zzerenzzen liegt in der naehe von Wilhelmsburg gut hinter "
100 +"einem Wasserfall versteckt.", "sagt: ");
101 ModifySkill("verletze",
102 ([SI_SKILLABILITY:10000, SI_SPELLCOST:0,
103 SI_SPELLFATIGUE:0, SI_NO_CONSEQUENCES:10000,
104 SI_SKILLRESTR_USE:([P_GUILD_LEVEL:0,SR_FREE_HANDS:0]),
105 SI_ARMOUR_RESTR:0]),0,"zauberer");
106 SetProp(P_GUILD, 0);
107 SetProp(P_RESISTANCE_STRENGTHS,
108 ([DT_UNHOLY: 0.25,
109 DT_POISON: 0.15,
110 DT_MAGIC: -0.3]) );
111
112 AddItem(OBJ("zauberstab"), CLONE_WIELD);
113 AddItem(OBJ("kleid"), CLONE_WEAR);
114 if (file_size(SAECKCHEN)>0) AddItem(SAECKCHEN, CLONE_NEW);
115}
116
117void Attack(object enemy)
118{
119 int normal_speed;
120 normal_speed=(enemy->QueryProp(P_SKILL_ATTRIBUTE_OFFSETS)||([]))[SA_SPEED]||100;
121 if (enemy && enemy->QuerySkillAttribute(SA_SPEED) > normal_speed) {
122 write("Die Fee macht eine beruhigende Handbewegung und ploetzlich fuehlst Du Dich\n"
123 +"ruhig und Du merkst wie Du allmaehlich wieder langsamer wirst...\n");
124 enemy->ModifySkillAttribute(SA_SPEED, -20, 180);
125 }
126 if (enemy) ::Attack(enemy);
127 SetProp(P_GUILD, "zauberer");
128 command("verletze mit "+({"feuer", "magie", "eis", "wasser", "gift",
129 "wind", "saeure", "laerm"})[random(8)] );
130 SetProp(P_GUILD, 0);
131}
132
133int Defend(int dam, mixed dts, mixed spell, object enemy)
134{
135 int normal_speed;
136 normal_speed=(enemy->QueryProp(P_SKILL_ATTRIBUTE_OFFSETS)||([]))[SA_SPEED]||100;
137 if (enemy && enemy->QuerySkillAttribute(SA_SPEED) > normal_speed) {
138 write(Name(WER)+" macht eine beruhigende Handbewegung und ploetzlich fuehlst Du Dich\n"
139 +"ruhig und Du merkst wie Du allmaehlich wieder langsamer wirst...\n");
140 enemy->ModifySkillAttribute(SA_SPEED, -20, 180);
141 }
142
143 if ((!spell || (mappingp(spell) && spell[SP_PHYSICAL_ATTACK])) && !random(3)) {
144 tell_room(environment(), Name(WER)+" weicht schnell einen Schritt zurueck und weicht Deinem Angriff aus.\n");
145 dam=0;
146 }
147 return (int)::Defend(dam, dts, spell, enemy);
148}
149
150void NotifyPlayerDeath(object who, object killer, object lost_exp)
151{
152 if (!who || killer!=ME) return; // uninteressant
153 log_file("padreic/kill", ctime(time())+" "+capitalize(getuid(who))+" getoetet von /zauberwald/ulinia\n");
154}
155
156void die()
157{
158 log_file("padreic/kill", ctime(time())+" Ulinia wurde von "+get_killer()+" getoetet.\n");
159 ::die();
160}