blob: 39a54fdf11241282ea82b51f96288990c6e6cfe5 [file] [log] [blame]
MG Mud User88f12472016-06-24 23:31:02 +02001// (c) by Padreic (Padreic@mg.mud.de)
2
3#include <properties.h>
4#include <attributes.h>
5#include <combat.h>
6#include <guard.h>
7#include <moving.h>
8#include <new_skills.h>
9
10// Ein NPC wird nicht von /std/thing direkt geerbt, sondern von /std/npc.
11// Da /std/npc aber seinerseits wieder von /std/thing erbt, sind im NPC auch
12// saemtliche Funktionen definiert, die bereits in /std/thing enthalten sind.
13inherit "/std/npc";
14
15void create()
16{
17 ::create();
18 // create_default_npc() setzt schon mal einige wichtige Properties wie
19 // P_ATTRIBUTES automatisch...
20 create_default_npc(20, 300);
21
22 // Keine Angst: Es muessen keineswegs immer alle diese Properties benutzt
23 // werden, auch wenn ich sie jetzt einmal alle angebe, um eine Uebersicht
24 // zu geben, was man alles ueber Properties steuern kann...
25 SetProp(P_SHORT, "Ein fieser Ork");
26 SetProp(P_LONG, "Der Ork schaut Dich grimmig an.\n");
27 SetProp(P_NAME, "Ork");
28 SetProp(P_NAME_ADJ, "fies");
29 SetProp(P_GENDER, MALE);
30 SetProp(P_MAGIC, 0);
31 SetProp(P_MATERIAL, MAT_MISC_LIVING);
32
33 // nun komen einige wirklich neue Properties
34 SetProp(P_INFO, "Der Ork ist ein ganz gemeiner... :)\n");
35 SetProp(P_ALIGN, -500); // Alignment des Gegners
36 SetProp(P_RACE, "Ork"); // Rasse des NPCs
37 SetProp(P_AGGRESSIVE, 1); // greift aggressiv jeden an
38 SetProp(P_ATTRIBUTES, ([A_INT:5, A_DEX:10, A_STR:25, A_CON:10]));
39 SetProp(P_SIZE, 134); // Groesse in cm
40 SetProp(P_MAX_HP, 300); // max. Lebenspunkte
41 SetProp(P_HP, 300); // Lebenspunkte
42 SetProp(P_MAX_SP, 200); // max. Magiepunkte
43 SetProp(P_SP, 200); // Magiepunkte
44 SetProp(P_BODY, 80); // Grundruestungsschutz des Koerpers
45 SetProp(P_MAX_HANDS, 2); // kaempft mit zwei Haenden...
46 SetProp(P_HANDS, ({" mit blossen Haenden", 150}));
47 SetProp(P_NOMAGIC, 20); // 20% Resistenz gegen Spells
48 SetProp(P_GUARD, 20); // Der NPC laesst sich ggf. weglocken
49 SetProp(P_NO_GLOBAL_ATTACK, 0); // wird von 'toete alles' erfasst
50 SetProp(P_NO_ATTACK, 0); // kann man den NPC ueberhaupt angreifen?
51 SetProp(P_FRIEND, 0); // soll der NPC in Spells als Freund erfasst
52 // werden?
53 SetProp(P_RESISTANCE, DT_FIRE); // Resistenzen
54 SetProp(P_VULNERABILITY, DT_HOLY); // Empfindlichkeiten
55 SetProp(P_FOOD, 0);
56 SetProp(P_MAX_FOOD, 100);
57 SetProp(P_DRINK, 0);
58 SetProp(P_MAX_DRINK, 100);
59 SetProp(P_ALCOHOL, 0);
60 SetProp(P_MAX_ALCOHOL, 100);
61 SetProp(P_XP, QueryProp(P_MAX_HP)*QueryProp(P_HANDS)[0]*5); // Erfahrung
62 SetProp(P_MURDER_MSG, "Ich komme doch eh wieder!\n"); // Moerdermeldung
63 SetProp(P_KILL_NAME, "Ein fieser Testork"); // noetig falls != P_NAME
64 SetProp(P_KILL_MSG, "Das kommt davon wenn man sich mit mir anlegt.\n");
65 SetProp(P_DIE_MSG, "Der Ork schreit ein letztes mal laut auf.\n");
66 SetProp(P_NOCORPSE, 0); // soll der NPC eine Leiche hinterlassen?
67 SetProp(P_HEAL, -10); // wieviel LP bekommt man beim Leichen essen...
68
69 // der Ork ist Mitglied der Abenteurergilde...
70 SetProp(P_GUILD, "abenteurer"); // in die Abenteuergilde mit ihm...
71 SetProp(P_GUILD_LEVEL, 20);
72 ModifySkill("feuerball",([SI_SKILLABILITY:10000]),1,"abenteurer");
73
74 // nun noch eine andere Art zu zaubern...
75 SetProp(P_SPELLRATE, 10);
76 AddSpell(100, 400,
77 "Der Ork tritt Dich einmal feste zwischen die Beine.\n",
78 "Der Ork tritt @WEN einmal feste zwischen die Beine.\n", DT_BLUDGEON);
79
80 // was soll der NPC mit ihm gegebenen Gegenstaenden machen...
81 SetProp(P_REJECT, ({REJECT_DROP, "Damit kann ich nichts anfangen.\n"}));
82
83 // und natuerlich auch noch eine id fuer den ork
84 AddId("ork");
85
86 // Der NPC hat immer einige Juwelen bei sich.
87 AddItem("/doc/beispiele/Praxis-Kurs/juwelen");
88}
89
90// Diese Funktion wird aufgerufen, wenn man einen Gegenstand bekommt...
91public void give_notify(object ob)
92{
93 if (ob->id("milchflasche")) // Milch annehmen und einen Spruch aufsagen
94 write("Der Ork sagt: Ohh.... Danke fuer die leckere Milch.\n");
95 else ::give_notify(ob); // Gegenstand fallen lassen
96}
97
98// Diese Funktion wird aufgerufen, wenn uns jemand im Kampf Schaden zufuegen
99// moechte...
100public varargs int Defend(int dam, mixed dam_type, mixed spell, object enemy)
101{
102 if (!random(4))
103 write("Der Ork weicht Deinem Angriff geschickt aus.\n");
104 else
105 return ::Defend(dam, dam_type, spell, enemy);
106}
107
108public void Attack(object enemy)
109{
110 // das Kommando 'Feuerball' eingeben. Da der NPC Mitglied der
111 // Abenteurergilde ist (s.o.), spricht er also den Spell, falls er genug
112 // Magiepunkt dafuer hat.
113 if (!random(3)) command_me("feuerball");
114 ::Attack(enemy);
115}