nightmare3_fluffos_v2/
nightmare3_fluffos_v2/bin/
nightmare3_fluffos_v2/fluffos-2.9-ds2.08/
nightmare3_fluffos_v2/fluffos-2.9-ds2.08/ChangeLog.old/
nightmare3_fluffos_v2/fluffos-2.9-ds2.08/Win32/
nightmare3_fluffos_v2/fluffos-2.9-ds2.08/compat/
nightmare3_fluffos_v2/fluffos-2.9-ds2.08/compat/simuls/
nightmare3_fluffos_v2/fluffos-2.9-ds2.08/include/
nightmare3_fluffos_v2/fluffos-2.9-ds2.08/testsuite/
nightmare3_fluffos_v2/fluffos-2.9-ds2.08/testsuite/clone/
nightmare3_fluffos_v2/fluffos-2.9-ds2.08/testsuite/command/
nightmare3_fluffos_v2/fluffos-2.9-ds2.08/testsuite/data/
nightmare3_fluffos_v2/fluffos-2.9-ds2.08/testsuite/etc/
nightmare3_fluffos_v2/fluffos-2.9-ds2.08/testsuite/include/
nightmare3_fluffos_v2/fluffos-2.9-ds2.08/testsuite/inherit/
nightmare3_fluffos_v2/fluffos-2.9-ds2.08/testsuite/inherit/master/
nightmare3_fluffos_v2/fluffos-2.9-ds2.08/testsuite/log/
nightmare3_fluffos_v2/fluffos-2.9-ds2.08/testsuite/single/
nightmare3_fluffos_v2/fluffos-2.9-ds2.08/testsuite/single/tests/compiler/
nightmare3_fluffos_v2/fluffos-2.9-ds2.08/testsuite/single/tests/efuns/
nightmare3_fluffos_v2/fluffos-2.9-ds2.08/testsuite/single/tests/operators/
nightmare3_fluffos_v2/fluffos-2.9-ds2.08/testsuite/u/
nightmare3_fluffos_v2/fluffos-2.9-ds2.08/tmp/
nightmare3_fluffos_v2/fluffos-2.9-ds2.08/windows/
nightmare3_fluffos_v2/lib/cmds/ambassador/
nightmare3_fluffos_v2/lib/cmds/database/
nightmare3_fluffos_v2/lib/cmds/hm/
nightmare3_fluffos_v2/lib/cmds/soul/
nightmare3_fluffos_v2/lib/daemon/cfg/
nightmare3_fluffos_v2/lib/daemon/cfg/mon_races/
nightmare3_fluffos_v2/lib/daemon/cfg/races/
nightmare3_fluffos_v2/lib/daemon/include/
nightmare3_fluffos_v2/lib/daemon/save/
nightmare3_fluffos_v2/lib/daemon/services/
nightmare3_fluffos_v2/lib/daemon/soul/
nightmare3_fluffos_v2/lib/doc/
nightmare3_fluffos_v2/lib/doc/TestPlans/
nightmare3_fluffos_v2/lib/doc/approval/
nightmare3_fluffos_v2/lib/doc/approval/QC/
nightmare3_fluffos_v2/lib/doc/approval/balance/
nightmare3_fluffos_v2/lib/doc/build/
nightmare3_fluffos_v2/lib/doc/build/armours/
nightmare3_fluffos_v2/lib/doc/build/economy/
nightmare3_fluffos_v2/lib/doc/build/etc/
nightmare3_fluffos_v2/lib/doc/build/monster/
nightmare3_fluffos_v2/lib/doc/build/room/
nightmare3_fluffos_v2/lib/doc/build/virtual/
nightmare3_fluffos_v2/lib/doc/build/weapon/
nightmare3_fluffos_v2/lib/doc/classes/
nightmare3_fluffos_v2/lib/doc/efun/
nightmare3_fluffos_v2/lib/doc/etc/
nightmare3_fluffos_v2/lib/doc/help/creator/
nightmare3_fluffos_v2/lib/doc/help/hm/
nightmare3_fluffos_v2/lib/doc/law/
nightmare3_fluffos_v2/lib/doc/lpc/basic/
nightmare3_fluffos_v2/lib/doc/lpc/data_types/
nightmare3_fluffos_v2/lib/doc/lpc/etc/
nightmare3_fluffos_v2/lib/doc/lpc/intermediate/
nightmare3_fluffos_v2/lib/doc/lpc/types/
nightmare3_fluffos_v2/lib/doc/mudlib/
nightmare3_fluffos_v2/lib/doc/mudlib/features/
nightmare3_fluffos_v2/lib/domains/Examples/etc/
nightmare3_fluffos_v2/lib/domains/Examples/room/
nightmare3_fluffos_v2/lib/domains/Examples/virtual/
nightmare3_fluffos_v2/lib/domains/Examples/virtual/exaA/
nightmare3_fluffos_v2/lib/domains/Examples/virtual/exaB/
nightmare3_fluffos_v2/lib/domains/Examples/weapon/
nightmare3_fluffos_v2/lib/domains/Praxis/
nightmare3_fluffos_v2/lib/domains/Praxis/adm/
nightmare3_fluffos_v2/lib/domains/Praxis/attic/
nightmare3_fluffos_v2/lib/domains/Praxis/cemetary/
nightmare3_fluffos_v2/lib/domains/Praxis/cemetary/mon/
nightmare3_fluffos_v2/lib/domains/Praxis/data/
nightmare3_fluffos_v2/lib/domains/Praxis/death/
nightmare3_fluffos_v2/lib/domains/Praxis/mountains/
nightmare3_fluffos_v2/lib/domains/Praxis/obj/armour/
nightmare3_fluffos_v2/lib/domains/Praxis/obj/magic/
nightmare3_fluffos_v2/lib/domains/Praxis/obj/weapon/
nightmare3_fluffos_v2/lib/domains/Praxis/orc_valley/
nightmare3_fluffos_v2/lib/domains/Praxis/quests/
nightmare3_fluffos_v2/lib/domains/Praxis/standardOld/
nightmare3_fluffos_v2/lib/include/
nightmare3_fluffos_v2/lib/log/
nightmare3_fluffos_v2/lib/log/errors/
nightmare3_fluffos_v2/lib/log/reports/
nightmare3_fluffos_v2/lib/log/watch/
nightmare3_fluffos_v2/lib/news/
nightmare3_fluffos_v2/lib/secure/cfg/
nightmare3_fluffos_v2/lib/secure/cmds/ambassador/
nightmare3_fluffos_v2/lib/secure/cmds/mortal/
nightmare3_fluffos_v2/lib/secure/save/users/d/
nightmare3_fluffos_v2/lib/secure/std/
nightmare3_fluffos_v2/lib/std/hm/
nightmare3_fluffos_v2/lib/std/living/
nightmare3_fluffos_v2/lib/std/room/
nightmare3_fluffos_v2/lib/std/user/
nightmare3_fluffos_v2/lib/std/virtual/
nightmare3_fluffos_v2/lib/www/
nightmare3_fluffos_v2/lib/www/errors/
nightmare3_fluffos_v2/lib/www/gateways/
nightmare3_fluffos_v2/win32/
//      /std/armour.c
//      from the Nightmare Mudlib
//      the basic inherited armour object
//      created by Descartes of Borg 25 june 1993
 
#include <std.h>
#include <move.h>
 
inherit OBJECT;
 
private mapping armour_save;
private static mapping armour_static;
 
void unwear();
void extinguish_glow();
void unequip();
void set_not_equipped();
void set_ac(int x);
void set_illuminate(int x);
void set_limbs(mixed *borg);
void set_wear(mixed val);
void set_remove(mixed val);
void set_type(string str);
int query_ac();
mixed *query_limbs();
string query_wear_string();
object query_wear_func();
string query_remove_string();
object query_remove_func();
string query_type();
object query_worn();
 
void init() {
    ::init();
    if(environment(this_object()) != this_player()) return;
    add_action("wear", "wear");
    add_action("do_remove", "remove");
    add_action("illuminate", "illuminate");
}
 
void create() {
    ::create();
    set_vendor_type("armour");
    armour_save = ([]);
    armour_static = ([]);
}
 
int wear(string str) {
    mixed *limbs;
    string ret, what, where;
    int i, j;
 
    if(!str) return notify_fail("Wear what?\n");
    if(!id(what = str) && sscanf(str, "%s on %s", what, where) != 2) {
        if(parse_objects(this_player(), str) != this_object()) {
            notify_fail("You don't have that!\n");
            return 0;
        }
    }
    else if(!id(what) && parse_objects(this_player(), what) != this_object()) {
        notify_fail("You don't have that!\n");
        return 0;
    }
    if(query_worn()) {
        message("my_action", "You are already wearing that!", this_player());
        return 1;
    }
    i = sizeof(limbs = query_limbs());
    while(i--) {
        if(stringp(limbs[i])) continue;
        if((j=member_array(where, limbs[i])) != -1) limbs[i] = limbs[i][j];
        else if(where) {
          message("my_action", "You cannot wear this on your "+where+".",
            this_player());
          return 1;
        }
        else {
          message("my_action", "You must specify which limb you want this "
          "on.", this_player());
          return 1;
        }
    }
    if(ret = (string)this_player()->equip_armour_to_limb(this_object(),limbs)){
        if(ret == "NO") return 1;
        message("my_action", ret, this_player());
        return 1;
    }
    if(functionp(armour_static["wear"])) {}
    else if(stringp(armour_static["wear"]))
      message("my_action", armour_static["wear"], this_player());
    else message("my_action", "You wear "+query_short()+".", this_player());
    message("other_action", (string)this_player()->query_cap_name()+
      " wears "+(string)this_player()->query_possessive()+" "+query_short()+
      ".", environment(this_player()), ({ this_player() }));
    armour_static["worn by"] = this_player();
    armour_static["actual limbs"] = limbs;
    return 1;
}
 
int do_remove(string str) {
    if(!str) return notify_fail("Remove what?\n");
    if(!id(str) && parse_objects(this_player(), str) != this_object()) {
        notify_fail("You don't have that!\n");
        return 0;
    }
    if(!query_worn()) {
        message("my_action", "You are not wearing that!", this_player());
        return 1;
    }
	if(functionp(armour_static["unwear"])){
		if(!((*armour_static["unwear"])())) return 1;
	}
    unwear();
    return 1;
}
 
int illuminate(string str) {
    int heure;
 
    if(!query_property("magic item") || 
      member_array("illuminate", query_property("magic item")) == -1) return 0;
    if(!str || !id(str)) {
        notify_fail("Illuminate what?\n");
        return 0;
    }
    heure = 5*((int)this_player()->query_stats("wisdom")) +
      (int)this_player()->query_skill("conjuring");
    if(heure < 20) heure = 20;
    if((int)this_player()->query_mp() < heure/10) {
        write("Too low on magic power.\n");
        return 1;
    }
    this_player()->add_mp(-(heure/10));
    write("Your "+query_name()+" begins to glow.\n");
    say(this_player()->query_cap_name()+"'s "+query_name()+" begins to
glow.\n");
    environment(this_object())->add_property("light",
      (armour_static["lit"] = 1+random(3)));
    call_out("extinguish_glow", heure);
    return 1;
}
 
void unwear() {
    if(stringp(armour_static["unwear"]))
      message("my_action", armour_static["unwear"], armour_static["worn by"]);
    else message("my_action", "You remove your "+query_short()+".",
      armour_static["worn by"]);
    armour_static["worn by"]->remove_armour_from_limb(this_object(),
      armour_static["actual limbs"]);
    message("other_action", (string)armour_static["worn by"]->query_cap_name()+
      " removes "+(string)armour_static["worn by"]->query_possessive()
      +" "+query_name()+".", environment(armour_static["worn by"]),
      ({ armour_static["worn by"] }));
    map_delete(armour_static, "worn by");
    map_delete(armour_static, "actual limbs");
}
 
void extinguish_glow() {
    if(!this_object()) return;
    if(!armour_static["lit"]) return;
    if(living(environment(this_object()))) {
        tell_object(environment(this_object()),"The magic glow of your
"+query_name()+" fades away.\n");
        tell_room(environment(environment(this_object())),
environment(this_object())->query_cap_name()+"'s "+query_name()+
          "magic glow fades away.\n", ({environment(this_object()) }) );
    }
    else tell_room(environment(this_object()), "The magic glow of the "+
      query_name()+" fades away.\n");
    environment(this_object())->add_property("light", -armour_static["lit"]);
    map_delete(armour_static, "lit");
}
 
void unequip() { if(armour_static["worn by"]) unwear(); }
 
void set_not_equipped() {
    if(query_worn()) map_delete(armour_static, "worn by");
    if(armour_static["actual limbs"]) map_delete(armour_static, "actual limbs");}
 
int remove() {
    if(armour_static && armour_static["lit"]) {
      if(environment(this_object()))
        environment(this_object())->add_property("light",-armour_static["lit"]);
        map_delete(armour_static, "lit");
    }
    unequip();
    return ::remove();
}
 
int move(mixed dest) {
    int x;
 
    if(armour_static["lit"])
      environment(this_object())->add_property("light", -armour_static["lit"]);
    x = ::move(dest);
    if(armour_static["lit"])
      environment(this_object())->add_property("light", armour_static["lit"]);
    if(x == MOVE_OK) unequip();
    return x;
}
 
void set_ac(int x) { armour_save["ac"] = x; }
 
void set_illuminate(int x) { set_property("magic item", ({ "illuminate" })); }
 
void set_limbs(mixed *borg) { armour_save["possible limbs"] = borg; }
 
void set_wear(mixed val) {
    armour_static["wear"] = val;
}
 
void set_remove(mixed val) {
    armour_static["unwear"] = val;
}
 
void set_type(string str) { armour_save["type"] = str; }
 
int query_ac() { return armour_save["ac"] + query_property("enchantment"); }
 
mixed *query_limbs() { return armour_save["possible limbs"]; }
 
mixed query_wear() { return armour_static["wear"]; }
 
mixed query_unwear() { return armour_static["unwear"]; }
 
string query_type() { return armour_save["type"]; }
 
object query_worn() { return armour_static["worn by"]; }
 
 
string query_short() {
    if(!armour_static["worn by"]) return ::query_short();
    else return ::query_short()+" (worn)";
}
 
string query_long(string str) {
    string ret;
    int i;
    if(!armour_static["worn by"]) return ::query_long(str);
    else {
        ret = ::query_long(str);
        i = sizeof(armour_static["actual limbs"]);
        ret += "Worn on: "+armour_static["actual limbs"][--i];
        if(i>-1) while(i--) ret += ", "+armour_static["actual limbs"][i];
        ret += ".\n";
        return ret;
    }
}
 
string *query_actual_limbs() { return armour_static["actual limbs"]; }
 
int is_armour() { return 1; }
 
void set_struck(mixed val) {
    armour_static["struck"] = val;
}

mixed query_struck() { return armour_static["struck"]; }