blob: c226494ca541104778df4d3f497f9ce7223afc11 [file] [log] [blame]
MG Mud User88f12472016-06-24 23:31:02 +02001// (c) 2003 by Padreic (Padreic@mg.mud.de)
2// Das Objekt realisiert einen Tarnzauber, aehnlich
3// dem Tarnhelm. Jedoch ohne Shadow und nur auf die
4// Rasse beschraenkt.
5
6#include <properties.h>
7#include <language.h>
8#include <moving.h>
9#include <defines.h>
10
11inherit "/std/thing";
12
13static string race;
14
15create()
16{
17 if (!clonep(this_object())) return;
18 ::create();
19 SetProp(P_SHORT, 0);
20 SetProp(P_LONG, "Tarnzauber");
21 SetProp(P_NAME, "Tarnzauber");
22 SetProp(P_INVIS, 1);
23 SetProp(P_GENDER, MALE);
24 SetProp(P_VALUE, 0);
25 SetProp(P_NOGET, 1);
26 SetProp(P_WEIGHT, 0);
27 Set(P_DEFEND_FUNC, ME);
28 AddId("\ntarnzauber");
29}
30
31// die NPCs im Zauberwald durchschauen den Zauber... :o)
32string _query_race()
33{
34 if (previous_object(1) && getuid(previous_object(1))==getuid())
35 return previous_object()->_query_race()||race;
36 return "Dunkelelf";
37}
38
39void Initialize(object pl)
40{
41 object *armours;
42 pl->Set(P_RACE, #'_query_race, F_QUERY_METHOD);
43 armours=(pl->QueryProp(P_ARMOURS));
44 if (member(armours, ME)>=0) return 0;
45 pl->SetProp(P_ARMOURS, armours+({ ME }));
46 race=pl->Query(P_RACE);
47}
48
49int QueryDefend(string *dtyp, mixed spell, object enemy)
50{
51 mixed am;
52 // noch ein paar paranoide Sicherheitsabfragen... :o)
53 if (!previous_object() ||
54 !pointerp(am=previous_object()->QueryProp(P_ARMOURS)) ||
55 member(am, ME)==-1) return 0;
56 tell_object(previous_object(), "Dein Tarnzauber loest sich auf.\n");
57 remove();
58}
59
60int DefendFunc(string *dtyp, mixed spell, object enemy)
61{
62 return QueryDefend(dtyp, spell, enemy);
63}
64
65varargs int move(mixed dest, int method)
66// beim Tod soll sich der Zauber entfernen und auch nirgends rumfliegen
67{
68 int res;
69 res=(int)::move(dest, method);
70 if (!living(environment())) remove();
71 return res;
72}
73
74varargs int remove(int silent)
75{
76 if (living(environment())) environment()->Set(P_RACE,0,F_QUERY_METHOD);
77 return (int)::remove(silent);
78}