blob: c226494ca541104778df4d3f497f9ce7223afc11 [file] [log] [blame]
// (c) 2003 by Padreic (Padreic@mg.mud.de)
// Das Objekt realisiert einen Tarnzauber, aehnlich
// dem Tarnhelm. Jedoch ohne Shadow und nur auf die
// Rasse beschraenkt.
#include <properties.h>
#include <language.h>
#include <moving.h>
#include <defines.h>
inherit "/std/thing";
static string race;
create()
{
if (!clonep(this_object())) return;
::create();
SetProp(P_SHORT, 0);
SetProp(P_LONG, "Tarnzauber");
SetProp(P_NAME, "Tarnzauber");
SetProp(P_INVIS, 1);
SetProp(P_GENDER, MALE);
SetProp(P_VALUE, 0);
SetProp(P_NOGET, 1);
SetProp(P_WEIGHT, 0);
Set(P_DEFEND_FUNC, ME);
AddId("\ntarnzauber");
}
// die NPCs im Zauberwald durchschauen den Zauber... :o)
string _query_race()
{
if (previous_object(1) && getuid(previous_object(1))==getuid())
return previous_object()->_query_race()||race;
return "Dunkelelf";
}
void Initialize(object pl)
{
object *armours;
pl->Set(P_RACE, #'_query_race, F_QUERY_METHOD);
armours=(pl->QueryProp(P_ARMOURS));
if (member(armours, ME)>=0) return 0;
pl->SetProp(P_ARMOURS, armours+({ ME }));
race=pl->Query(P_RACE);
}
int QueryDefend(string *dtyp, mixed spell, object enemy)
{
mixed am;
// noch ein paar paranoide Sicherheitsabfragen... :o)
if (!previous_object() ||
!pointerp(am=previous_object()->QueryProp(P_ARMOURS)) ||
member(am, ME)==-1) return 0;
tell_object(previous_object(), "Dein Tarnzauber loest sich auf.\n");
remove();
}
int DefendFunc(string *dtyp, mixed spell, object enemy)
{
return QueryDefend(dtyp, spell, enemy);
}
varargs int move(mixed dest, int method)
// beim Tod soll sich der Zauber entfernen und auch nirgends rumfliegen
{
int res;
res=(int)::move(dest, method);
if (!living(environment())) remove();
return res;
}
varargs int remove(int silent)
{
if (living(environment())) environment()->Set(P_RACE,0,F_QUERY_METHOD);
return (int)::remove(silent);
}