blob: 7ed953d17037bf06985f8e550177909d14906740 [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 <moving.h>
5#include <combat.h>
6
7inherit NPC("stdnpc");
8
9void create()
10{
11 ::create();
12 SetProp(P_SHORT, "Ein kleiner Pixie");
13 SetProp(P_SIZE, 55+random(11));
14 SetProp(P_LONG, BS(
15 "Der Pixie ist etwa "+QueryProp(P_SIZE)+"cm gross und sieht vermutlich einem "
16 +"kleinen pumeligen Menschenkind am aehnlichsten. Wie alle Pixies scheint er "
17 +"sehr verspielt zu sein und nichts als Unfug im Kopf zu haben, Du solltest "
18 +"Dich also vor ihm ihn acht nehmen. Auch wenn er aussieht wie ein Kind, sich "
19 +"benimmt wie ein Kind, so kann er Dir mit seiner Magie sicher uebel zu spieln."));
20 SetProp(P_INFO, /* kleine Warnung fuer die Kaempfer :) */
21 "Man sollte sich immer vor der Magie der Pixies in acht nehmen, sie ist nicht\n"
22 +"unbedingt gefaehrlich, aber es koennen die unerwartesten Dinge geschehn. So\n"
23 +"ist durchaus von Leuten bekannt die einen Kampf als kleine Ratte beendeten,\n"
24 +"oder deren Schwert im Kampf ploetzlich zu Scheisse zerfloss...\n");
25 SetProp(P_NAME_ADJ, "klein");
26 SetProp(P_NAME, "Pixie");
27 SetProp(P_GENDER, MALE);
28 SetProp(P_RACE, "pixie");
29 SetProp(P_ATTRIBUTES, (["int":30,"con":20,"str":15,"dex":30]) );
30 SetProp(P_LEVEL, 20);
31 SetProp(P_MAX_HP, 600);
32 SetProp(P_HP, 600);
33 SetProp(P_MAX_SP, 800);
34 SetProp(P_SP, 800);
35 SetProp(P_ALIGN, 250);
36 SetProp(P_HANDS, ({" mit seinen kleinen Haenden", 150, DT_BLUDGEON}) );
37 SetProp(P_XP, 600*150*5);
38 AddAdjective("klein");
39 AddId("pixie");
40}
41
42// teleporter Ziele im Gebiet. Der Pixie will ja einfach nur ein bisschen
43// Aergern und nicht helfen (ein Pixiekampf ist kein Ausgang :)
44#define DEST ({"lichtungno", "lichtungso", "lichtungn", "lichtungs", \
45 "lichtungnw", "lichtungsw", "lichtungo", "lichtungw", \
46 "weg2", "stein"})
47
48void Attack(object enemy)
49{
50 object ob, weapon;
51
52 ob=SelectEnemy();
53 if (ob) switch(random(7*8)) { // jede 8te Runde ein Zauberspruch...
54 case 0: // in Frosch verwandeln...
55 if (!ob->QueryProp(P_FROG)) {
56 tell_object(ob, "Der Pixie dreht Dir eine lange Nase und verwandelt Dich in einen Frosch.\n");
57 say(BS("Der Pixie dreht "+ob->name(WEM)+" eine lange Nase und verwandelt "
58 +ob->QueryPronoun(WEN)+" in einen Frosch,"), ob);
59 ob->SetProp(P_FROG, 1);
60 return;
61 }
62 break;
63 case 8..10: // einfach nur nerviger Teleport innerhalb des Gebiets :)
64 tell_object(ob,
65 "Der Pixie schliesst kurz seine Augen und eh Du Dich versiehst, verschwimmt\n"
66 +"alles um Dich herum...\n");
67 say(BS("Der Pixie schliesst kurz seine Augen und ploetzlich loest sich "
68 +ob->name(WER)+" in Luft auf."), ob);
69 ob->move(ROOM(DEST[random(sizeof(DEST))]), M_TPORT|M_NOCHECK|M_SILENT);
70 return;
71 case 16: // Geschlecht aendern... :)
72 tell_object(ob,
73 "Der Pixie grinst breit bis ueber beide Ohren und schaut Dich an, Du weisst\n"
74 +"gar nicht wie Dir geschieht, aber irgendetwas aendert sich an Deinem Koerper.\n");
75 say(BS("Der Pixie grinst "+ob->name(WEN)+" breit an. Ploetzlich "
76 +(ob->QueryProp(P_GENDER)==FEMALE
77 ? "verschwinden ihre Brueste und es waechst ihr ploetzlich ein Bart."
78 : "verschwindet sein Bart und ihm wachsen zwei neue Brueste.")), ob);
79 if (ob->QueryProp(P_GENDER)==FEMALE)
80 ob->SetProp(P_GENDER, MALE);
81 else ob->SetProp(P_GENDER, FEMALE);
82 return;
83 case 24:
84 if (objectp(weapon=ob->QueryProp(P_WEAPON))) {
85 weapon->DoUnwield(1);
86 // verfluchte Waffen nicht betreffen :))
87 if (!objectp(weapon->QueryProp(P_WIELDED))) {
88 string str1, str2;
89 str1=str2=(weapon)->name(WER);
90 if (str1[0..2]=="ein") {
91 str1="D"+str1;
92 str2="s"+str2;
93 }
94 tell_object(ob, BS(
95 "Der Pixie starrt Dir in die Augen und schnippst einmal kurz mit seinen "
96 +"Fingern. Ploetzlich zerrint "+str1+" in Deinen Haenden zu einem Haufen "
97 +"Scheisse."));
98 say(BS("Der Pixie starrt "+weapon->name(WEM)+" in die Augen und "
99 +"schnippst einmal kurz mit den Fingern. Ploetzlich "
100 +"zerrint "+weapon->name(WEM)+" "+str2
101 +" in einen Haufen Scheisse."), ob);
102 weapon->remove();
103 if (weapon) destruct(weapon);
104 return;
105 }
106 }
107 break;
108 case 32:
109 if (!ob->QueryProp(P_BLIND)) {
110 tell_object(ob, BS(
111 "Der Pixie haelt sich die Hand vor die Augen und grinst breit. Ploetzlich "
112 +"merkst Du, wie alles ganz dunkel um Dich rum wird..."));
113 say(BS("Der Pixie haelt sich die Hand vor die Augen und grinst breit. "
114 +ob->name(WER)
115 +" schaut daraufhin ziemlich irritiert in die Gegend."), ob);
116 ob->SetProp(P_BLIND, 1);
117 return;
118 }
119 break;
120 case 40:
121 if (ob->QueryProp(P_POISON)<3 && ob->QueryProp(P_MAX_POISON)>=3) {
122 tell_object(ob, BS(
123 "Der Pixie streicht sich mit der Hand zufrieden ueber seinen Bauch und schaut "
124 +"Dich dabei an. Ploetzlich wird Dir richtig uebel..."));
125 say(BS("Der Pixie streicht sich mit seiner Hand zufrieden ueber seinen Bauch und\n"
126 +"schaut "+ob->name(WEM)+" dabei in die Augen. Ploetzlich wird "+ob->name(WEM)
127 +" ganz uebel."), ob);
128 ob->SetProp(P_POISON, 3);
129 return;
130 }
131 break;
132 case 48:
133 if (!ob->QueryProp(P_DEAF)) {
134 tell_object(ob, "Der Pixie haelt sich die Ohren zu und grinst breit.\n");
135 say(BS("Der Pixie haelt sich die Ohren zu und grinst dabei "
136 +ob->name(WEN)+" an."), ob);
137 ob->SetProp(P_DEAF, 1);
138 return;
139 }
140 break;
141 default:
142 }
143 if (enemy && present(enemy, environment())) ::Attack(enemy);
144}
145
146void NotifyPlayerDeath(object who, object killer, object lost_exp)
147{
148 if (!who || killer!=ME) return; // uninteressant
149 log_file("padreic/kill", ctime(time())+" "+capitalize(getuid(who))+" getoetet von /zauberwald/pixie\n");
150}