final_realms_fluffos_v1/
final_realms_fluffos_v1/bin/
final_realms_fluffos_v1/fluffos-2.9-ds2.11/
final_realms_fluffos_v1/fluffos-2.9-ds2.11/ChangeLog.old/
final_realms_fluffos_v1/fluffos-2.9-ds2.11/Win32/
final_realms_fluffos_v1/fluffos-2.9-ds2.11/compat/
final_realms_fluffos_v1/fluffos-2.9-ds2.11/compat/simuls/
final_realms_fluffos_v1/fluffos-2.9-ds2.11/include/
final_realms_fluffos_v1/fluffos-2.9-ds2.11/testsuite/
final_realms_fluffos_v1/fluffos-2.9-ds2.11/testsuite/clone/
final_realms_fluffos_v1/fluffos-2.9-ds2.11/testsuite/command/
final_realms_fluffos_v1/fluffos-2.9-ds2.11/testsuite/data/
final_realms_fluffos_v1/fluffos-2.9-ds2.11/testsuite/etc/
final_realms_fluffos_v1/fluffos-2.9-ds2.11/testsuite/include/
final_realms_fluffos_v1/fluffos-2.9-ds2.11/testsuite/inherit/
final_realms_fluffos_v1/fluffos-2.9-ds2.11/testsuite/inherit/master/
final_realms_fluffos_v1/fluffos-2.9-ds2.11/testsuite/log/
final_realms_fluffos_v1/fluffos-2.9-ds2.11/testsuite/single/
final_realms_fluffos_v1/fluffos-2.9-ds2.11/testsuite/single/tests/compiler/
final_realms_fluffos_v1/fluffos-2.9-ds2.11/testsuite/single/tests/efuns/
final_realms_fluffos_v1/fluffos-2.9-ds2.11/testsuite/single/tests/operators/
final_realms_fluffos_v1/fluffos-2.9-ds2.11/testsuite/u/
final_realms_fluffos_v1/fluffos-2.9-ds2.11/tmp/
final_realms_fluffos_v1/fluffos-2.9-ds2.11/windows/
final_realms_fluffos_v1/lib/baseobs/guilds/
final_realms_fluffos_v1/lib/baseobs/misc/
final_realms_fluffos_v1/lib/baseobs/races/shadows/
final_realms_fluffos_v1/lib/cmds/god/
final_realms_fluffos_v1/lib/cmds/handlers/
final_realms_fluffos_v1/lib/cmds/handlers/cmds/
final_realms_fluffos_v1/lib/d/heaven/
final_realms_fluffos_v1/lib/d/heaven/heaven/ave/
final_realms_fluffos_v1/lib/d/mudlib/
final_realms_fluffos_v1/lib/d/newbie/
final_realms_fluffos_v1/lib/d/newbie/docs/
final_realms_fluffos_v1/lib/d/newbie/drow/armour/
final_realms_fluffos_v1/lib/d/newbie/drow/items/
final_realms_fluffos_v1/lib/d/newbie/drow/mobs/
final_realms_fluffos_v1/lib/d/newbie/drow/oldmobs/
final_realms_fluffos_v1/lib/d/newbie/drow/weapons/
final_realms_fluffos_v1/lib/d/newbie/duergar/weapons/
final_realms_fluffos_v1/lib/d/newbie/dwarf/weapons/
final_realms_fluffos_v1/lib/d/newbie/elf/cafe/
final_realms_fluffos_v1/lib/d/newbie/elf/chars/equip/
final_realms_fluffos_v1/lib/d/newbie/elf/items/armours/
final_realms_fluffos_v1/lib/d/newbie/elf/items/obj/
final_realms_fluffos_v1/lib/d/newbie/elf/items/weapons/
final_realms_fluffos_v1/lib/d/newbie/elf/quick_fix/
final_realms_fluffos_v1/lib/d/newbie/gnome/armour/
final_realms_fluffos_v1/lib/d/newbie/gnome/buildings/
final_realms_fluffos_v1/lib/d/newbie/gnome/items/
final_realms_fluffos_v1/lib/d/newbie/gnome/npcs/clones/
final_realms_fluffos_v1/lib/d/newbie/gnome/rooms/northrooms/
final_realms_fluffos_v1/lib/d/newbie/gnome/weapons/
final_realms_fluffos_v1/lib/d/newbie/goblin/armour/
final_realms_fluffos_v1/lib/d/newbie/goblin/items/
final_realms_fluffos_v1/lib/d/newbie/grads/log/
final_realms_fluffos_v1/lib/d/newbie/grads/npcs/
final_realms_fluffos_v1/lib/d/newbie/grads/rooms/
final_realms_fluffos_v1/lib/d/newbie/grads/rooms/cave1/
final_realms_fluffos_v1/lib/d/newbie/grads/temp/
final_realms_fluffos_v1/lib/d/newbie/guests/weapons/
final_realms_fluffos_v1/lib/d/newbie/half-elf/items/
final_realms_fluffos_v1/lib/d/newbie/half-elf/newroomss/
final_realms_fluffos_v1/lib/d/newbie/half-elf/rooms/
final_realms_fluffos_v1/lib/d/newbie/half-elf/rooms/castle/
final_realms_fluffos_v1/lib/d/newbie/half-elf/rooms/drows/
final_realms_fluffos_v1/lib/d/newbie/half-elf/rooms/savannah/
final_realms_fluffos_v1/lib/d/newbie/half-elf/rooms/secret/
final_realms_fluffos_v1/lib/d/newbie/half-elf/rooms/town/
final_realms_fluffos_v1/lib/d/newbie/halfling/
final_realms_fluffos_v1/lib/d/newbie/halfling/misc/
final_realms_fluffos_v1/lib/d/newbie/halfling/rooms/cave/
final_realms_fluffos_v1/lib/d/newbie/human/
final_realms_fluffos_v1/lib/d/newbie/human/armour/
final_realms_fluffos_v1/lib/d/newbie/human/monsters/
final_realms_fluffos_v1/lib/d/newbie/human/obj/
final_realms_fluffos_v1/lib/d/newbie/human/weapons/
final_realms_fluffos_v1/lib/d/newbie/lizard/armour/
final_realms_fluffos_v1/lib/d/newbie/lizard/items/
final_realms_fluffos_v1/lib/d/newbie/lizard/underwater/
final_realms_fluffos_v1/lib/d/newbie/lizard/weapons/
final_realms_fluffos_v1/lib/d/newbie/logs/
final_realms_fluffos_v1/lib/d/newbie/new_halfelf/
final_realms_fluffos_v1/lib/d/newbie/new_halfelf/npcs/
final_realms_fluffos_v1/lib/d/newbie/newdrow/npcs/
final_realms_fluffos_v1/lib/d/newbie/newdrow/rooms/
final_realms_fluffos_v1/lib/d/newbie/newelf/
final_realms_fluffos_v1/lib/d/newbie/newelf/chars/
final_realms_fluffos_v1/lib/d/newbie/newelf/npcs/
final_realms_fluffos_v1/lib/d/newbie/newelf/npcs/recopied/
final_realms_fluffos_v1/lib/d/newbie/newelf/obj/
final_realms_fluffos_v1/lib/d/newbie/newelf/quest_docs./
final_realms_fluffos_v1/lib/d/newbie/newken/
final_realms_fluffos_v1/lib/d/newbie/newken/chars/
final_realms_fluffos_v1/lib/d/newbie/newken/misc/
final_realms_fluffos_v1/lib/d/newbie/newken/npcs/
final_realms_fluffos_v1/lib/d/newbie/newken/obj/
final_realms_fluffos_v1/lib/d/newbie/newliz/
final_realms_fluffos_v1/lib/d/newbie/newliz/cave/
final_realms_fluffos_v1/lib/d/newbie/newliz/npcs/
final_realms_fluffos_v1/lib/d/newbie/orc/items/misc/
final_realms_fluffos_v1/lib/d/newbie/orc/items/weapons/
final_realms_fluffos_v1/lib/d/newbie/orc/tower/
final_realms_fluffos_v1/lib/d/vehicle/
final_realms_fluffos_v1/lib/doc/
final_realms_fluffos_v1/lib/doc/driver/
final_realms_fluffos_v1/lib/doc/driver/concepts/
final_realms_fluffos_v1/lib/doc/driver/driver/
final_realms_fluffos_v1/lib/doc/driver/efuns/arrays/
final_realms_fluffos_v1/lib/doc/driver/efuns/bitstrings/
final_realms_fluffos_v1/lib/doc/driver/efuns/communication/
final_realms_fluffos_v1/lib/doc/driver/efuns/core/
final_realms_fluffos_v1/lib/doc/driver/efuns/debugging/
final_realms_fluffos_v1/lib/doc/driver/efuns/filesystem/
final_realms_fluffos_v1/lib/doc/driver/efuns/interactive/
final_realms_fluffos_v1/lib/doc/driver/efuns/mappings/
final_realms_fluffos_v1/lib/doc/driver/efuns/objects/
final_realms_fluffos_v1/lib/doc/driver/efuns/security/
final_realms_fluffos_v1/lib/doc/driver/efuns/strings/
final_realms_fluffos_v1/lib/doc/driver/efuns/system/
final_realms_fluffos_v1/lib/doc/driver/efuns/types/
final_realms_fluffos_v1/lib/doc/driver/lpc/constructs/
final_realms_fluffos_v1/lib/doc/driver/lpc/types/
final_realms_fluffos_v1/lib/doc/driver/platforms/
final_realms_fluffos_v1/lib/doc/lpc/
final_realms_fluffos_v1/lib/doc/mail/
final_realms_fluffos_v1/lib/doc/man/
final_realms_fluffos_v1/lib/doc/man/html/
final_realms_fluffos_v1/lib/doc/man/html/applies/
final_realms_fluffos_v1/lib/doc/man/html/applies/parsing/
final_realms_fluffos_v1/lib/doc/man/html/driver/
final_realms_fluffos_v1/lib/doc/man/html/efuns/
final_realms_fluffos_v1/lib/doc/man/html/efuns/arrays/
final_realms_fluffos_v1/lib/doc/man/html/efuns/buffers/
final_realms_fluffos_v1/lib/doc/man/html/efuns/compile/
final_realms_fluffos_v1/lib/doc/man/html/efuns/floats/
final_realms_fluffos_v1/lib/doc/man/html/efuns/functions/
final_realms_fluffos_v1/lib/doc/man/html/efuns/general/
final_realms_fluffos_v1/lib/doc/man/html/efuns/numbers/
final_realms_fluffos_v1/lib/doc/man/html/efuns/parsing/
final_realms_fluffos_v1/lib/doc/man/local/
final_realms_fluffos_v1/lib/doc/man/local/applies/
final_realms_fluffos_v1/lib/doc/man/local/applies/interactive/
final_realms_fluffos_v1/lib/doc/man/local/applies/master/
final_realms_fluffos_v1/lib/doc/man/local/concepts/
final_realms_fluffos_v1/lib/doc/man/local/defines/
final_realms_fluffos_v1/lib/doc/man/local/driver/
final_realms_fluffos_v1/lib/doc/man/local/efuns/
final_realms_fluffos_v1/lib/doc/man/local/efuns/arrays/
final_realms_fluffos_v1/lib/doc/man/local/efuns/buffers/
final_realms_fluffos_v1/lib/doc/man/local/efuns/calls/
final_realms_fluffos_v1/lib/doc/man/local/efuns/compile/
final_realms_fluffos_v1/lib/doc/man/local/efuns/filesystem/
final_realms_fluffos_v1/lib/doc/man/local/efuns/floats/
final_realms_fluffos_v1/lib/doc/man/local/efuns/functions/
final_realms_fluffos_v1/lib/doc/man/local/efuns/general/
final_realms_fluffos_v1/lib/doc/man/local/efuns/interactive/
final_realms_fluffos_v1/lib/doc/man/local/efuns/internals/
final_realms_fluffos_v1/lib/doc/man/local/efuns/mappings/
final_realms_fluffos_v1/lib/doc/man/local/efuns/mudlib/
final_realms_fluffos_v1/lib/doc/man/local/efuns/numbers/
final_realms_fluffos_v1/lib/doc/man/local/efuns/objects/
final_realms_fluffos_v1/lib/doc/man/local/efuns/parsing/
final_realms_fluffos_v1/lib/doc/man/local/efuns/sockets/
final_realms_fluffos_v1/lib/doc/man/local/efuns/strings/
final_realms_fluffos_v1/lib/doc/man/local/efuns/system/
final_realms_fluffos_v1/lib/doc/man/local/historical/
final_realms_fluffos_v1/lib/doc/man/local/lfun/QC/
final_realms_fluffos_v1/lib/doc/man/local/lfun/events/
final_realms_fluffos_v1/lib/doc/man/local/lfun/monster/
final_realms_fluffos_v1/lib/doc/man/local/lfun/properties/
final_realms_fluffos_v1/lib/doc/man/local/lpc/
final_realms_fluffos_v1/lib/doc/man/local/lpc/constructs/
final_realms_fluffos_v1/lib/doc/man/local/lpc/types/
final_realms_fluffos_v1/lib/doc/man/local/standards/
final_realms_fluffos_v1/lib/doc/man/local/tutorials/
final_realms_fluffos_v1/lib/doc/man/local/tutorials/basic/
final_realms_fluffos_v1/lib/doc/man/local/tutorials/intermediate/
final_realms_fluffos_v1/lib/doc/man/mudos/applies/
final_realms_fluffos_v1/lib/doc/man/mudos/applies/interactive/
final_realms_fluffos_v1/lib/doc/man/mudos/applies/parsing/
final_realms_fluffos_v1/lib/doc/man/mudos/concepts/
final_realms_fluffos_v1/lib/doc/man/mudos/driver/
final_realms_fluffos_v1/lib/doc/man/mudos/efuns/arrays/
final_realms_fluffos_v1/lib/doc/man/mudos/efuns/buffers/
final_realms_fluffos_v1/lib/doc/man/mudos/efuns/calls/
final_realms_fluffos_v1/lib/doc/man/mudos/efuns/compile/
final_realms_fluffos_v1/lib/doc/man/mudos/efuns/filesystem/
final_realms_fluffos_v1/lib/doc/man/mudos/efuns/floats/
final_realms_fluffos_v1/lib/doc/man/mudos/efuns/functions/
final_realms_fluffos_v1/lib/doc/man/mudos/efuns/general/
final_realms_fluffos_v1/lib/doc/man/mudos/efuns/mappings/
final_realms_fluffos_v1/lib/doc/man/mudos/efuns/mixed/
final_realms_fluffos_v1/lib/doc/man/mudos/efuns/mudlib/
final_realms_fluffos_v1/lib/doc/man/mudos/efuns/numbers/
final_realms_fluffos_v1/lib/doc/man/mudos/efuns/parsing/
final_realms_fluffos_v1/lib/doc/man/mudos/lpc/constructs/
final_realms_fluffos_v1/lib/doc/man/mudos/lpc/types/
final_realms_fluffos_v1/lib/doc/races/
final_realms_fluffos_v1/lib/doc/races/old_race/
final_realms_fluffos_v1/lib/global/virtual/
final_realms_fluffos_v1/lib/global/wiz_backup/
final_realms_fluffos_v1/lib/net/config/
final_realms_fluffos_v1/lib/net/daemon/chars/
final_realms_fluffos_v1/lib/net/inherit/
final_realms_fluffos_v1/lib/net/intermud3/
final_realms_fluffos_v1/lib/net/intermud3/cmds/
final_realms_fluffos_v1/lib/net/intermud3/save/
final_realms_fluffos_v1/lib/net/intermud3/services/
final_realms_fluffos_v1/lib/net/obj/
final_realms_fluffos_v1/lib/net/old/
final_realms_fluffos_v1/lib/net/old/intermud/
final_realms_fluffos_v1/lib/net/old/intermud/adm/
final_realms_fluffos_v1/lib/net/old/intermud/services/
final_realms_fluffos_v1/lib/net/old/intermud/udp/
final_realms_fluffos_v1/lib/net/virtual/
final_realms_fluffos_v1/lib/obj/b_day/
final_realms_fluffos_v1/lib/obj/chars/
final_realms_fluffos_v1/lib/obj/handlers/lists/
final_realms_fluffos_v1/lib/obj/handlers/useless/
final_realms_fluffos_v1/lib/obj/monsters/
final_realms_fluffos_v1/lib/obj/roomgen/
final_realms_fluffos_v1/lib/obj/soul/
final_realms_fluffos_v1/lib/obj/vegetation/
final_realms_fluffos_v1/lib/obj/weapons/oldsys/
final_realms_fluffos_v1/lib/open/
final_realms_fluffos_v1/lib/players/g/
final_realms_fluffos_v1/lib/releasefiles/d/heaven/
final_realms_fluffos_v1/lib/releasefiles/d/mudlib/
final_realms_fluffos_v1/lib/releasefiles/d/newbie/
final_realms_fluffos_v1/lib/releasefiles/doc/
final_realms_fluffos_v1/lib/releasefiles/players/g/
final_realms_fluffos_v1/lib/releasefiles/save/
final_realms_fluffos_v1/lib/releasefiles/save/environ/
final_realms_fluffos_v1/lib/releasefiles/save/roomgen/
final_realms_fluffos_v1/lib/releasefiles/secure/
final_realms_fluffos_v1/lib/releasefiles/w/
final_realms_fluffos_v1/lib/releasefiles/w/god/
final_realms_fluffos_v1/lib/room/
final_realms_fluffos_v1/lib/save/
final_realms_fluffos_v1/lib/save/environ/
final_realms_fluffos_v1/lib/save/roomgen/
final_realms_fluffos_v1/lib/scripts/
final_realms_fluffos_v1/lib/secure/crerem/
final_realms_fluffos_v1/lib/secure/dom/
final_realms_fluffos_v1/lib/secure/log/
final_realms_fluffos_v1/lib/secure/misc/
final_realms_fluffos_v1/lib/std/adnd/
final_realms_fluffos_v1/lib/std/commands/shadows/
final_realms_fluffos_v1/lib/std/creator/
final_realms_fluffos_v1/lib/std/curses/
final_realms_fluffos_v1/lib/std/curses/old_sys/
final_realms_fluffos_v1/lib/std/curses/shadows/
final_realms_fluffos_v1/lib/std/dom/
final_realms_fluffos_v1/lib/std/effects/
final_realms_fluffos_v1/lib/std/effects/healing/
final_realms_fluffos_v1/lib/std/effects/other/
final_realms_fluffos_v1/lib/std/effects/poisons/
final_realms_fluffos_v1/lib/std/environ/
final_realms_fluffos_v1/lib/std/guilds/
final_realms_fluffos_v1/lib/std/guilds/priests/samples/
final_realms_fluffos_v1/lib/std/guilds/wizards/
final_realms_fluffos_v1/lib/std/living/baldy/
final_realms_fluffos_v1/lib/std/living/divstuff/
final_realms_fluffos_v1/lib/std/paran/
final_realms_fluffos_v1/lib/std/poisons/
final_realms_fluffos_v1/lib/std/poisons/shadows/
final_realms_fluffos_v1/lib/std/poisons/weapons/
final_realms_fluffos_v1/lib/std/race_groups/
final_realms_fluffos_v1/lib/std/room/
final_realms_fluffos_v1/lib/std/room/old/
final_realms_fluffos_v1/lib/std/rooms/
final_realms_fluffos_v1/lib/std/shadows/
final_realms_fluffos_v1/lib/std/shadows/test_shad/
final_realms_fluffos_v1/lib/std/socket/
final_realms_fluffos_v1/lib/std/spells/
final_realms_fluffos_v1/lib/std/vaults/
final_realms_fluffos_v1/lib/tmp/
final_realms_fluffos_v1/lib/w/
final_realms_fluffos_v1/lib/w/god/
final_realms_fluffos_v1/old/
final_realms_fluffos_v1/win32/
/* Ok, this time it's this code I will walk through...
 * Baldrick, april '94
 * Removed the deathstuff and pu tit in death.c.
 * looks a lot better that way.
 */

inherit "/std/unarmed_combat";

/* Hmm, are we using these now ? */
int *weapon_attack_out, *attack_out;                //dk

static object attackee;
static object *attacker_list,
*call_outed,
protector;

static object concentrate;
static int dodging;


#define DIV_NUM 6
#include "money.h"

void set_weapon_attack_out(int mess, object *held_ob) { }

int query_dodging() { return dodging; }
int query_my_att_level() { return (int)this_object()->query_level(); }
int set_concentrate(object ob)
{
    if ( member_array(ob, attacker_list) == -1 ) return 0;
    concentrate = ob;
    return 1;
}
object query_concentrate() { return concentrate; }
int query_concentrate_valid() { return 0; }

// Radix, added for unprotect add_action
int remove_protector(object ob) { return(protector = 0); }
object set_protector(object ob) { return (protector = ob); }
object query_protector() { return protector; }
int clear_attackers() { attacker_list=({ }); call_outed=({ }); }

int query_fighting()
{
    int i;

    attacker_list -= ({0});
    call_outed -= ({0});
    for (i=0;i<sizeof(attacker_list);i++)
    {
    if (interactive(attacker_list[i]))
        return 4;
    if (attacker_list[i]->query_aggressive())
        return 1;
    else
        return 2; 
    }

    for (i=0;i<sizeof(call_outed);i++)
    {
    if (interactive(call_outed[i]))
        return 4;
    if (call_outed[i]->query_aggressive())
        return 1;
    else
        return 2; 
    }
    return 0;
}

int query_protect_valid(object attacker, object protectee)
{
    int base_roll;

    // Wonderflug, dec 95, can't protect while berserk
    if ( this_object()->query_property("flipped") )
    return 0;

    base_roll = random(100);   /* this to be replaced by a guild obj call */
    if ( member_array( attacker, attacker_list ) == -1 )
    base_roll -= 20;

    return ( base_roll >= 30 );
}

void actual_death();

void create() 
{
    attacker_list = ({ });
    call_outed = ({ });
    concentrate = 0;
    unarmed_combat::create();
}

void combat_commands() 
{
    add_action("do_protect", "protect");
    add_action("do_unprotect","unprotect");
    unarmed_combat_commands();
}

object query_attackee() { return attackee; }

void attack() 
{
    int i, dam, his_att_lvl, olav, att_level;
    string his_name;
    object *obs,ob,*ww;

    if (!attacker_list)
    attacker_list = ({ });

    if (this_object()->query_dead())
    {
    this_object()->stop_fights();
    attacker_list = ({ });
    return;
    }

    while (i<sizeof(attacker_list)) {
    if (!attacker_list[i])       //dw have they died unexpecedaly? 
        attacker_list = delete(attacker_list,i,1);
    else
        //dw    I will put all the ones not in the correct environ in a new list.

    if (environment(attacker_list[i]) != environment(this_object())) {
        write("You are hunting "+attacker_list[i]->short()+"\n");
        if (!call_outed)
        call_outed = ({ attacker_list[i] });
        else
        call_outed += ({ attacker_list[i] });
        attacker_list = delete(attacker_list,i,1);
    } else
        i++;
    }

    //dw check the not correct environ list to see if any one has come back.  
    i = 0;
    while (i<sizeof(call_outed))
    if (!call_outed[i])
        call_outed = delete(call_outed,i,1);
    else if (environment(this_object()) == environment(call_outed[i])) {
        attacker_list += ({ call_outed[i] });
        call_outed = delete(call_outed,i,1);
    } else
        i++;
    //dw not hitting anyone... do spell effects anyway... 
    if (!sizeof(attacker_list)) {
    attackee = 0;
    return;
    }
    //dw choose a random person from the attacker list; they're in correct env.
    if ( concentrate )
    {
    if ( member_array( concentrate, attacker_list ) == -1 )
    {
        attackee = attacker_list[random(sizeof(attacker_list))];
        concentrate = 0;
    }
    else
    {
        attackee = concentrate;
        if ( !this_object()->query_concentrate_valid(
        concentrate, attacker_list) )
        concentrate = 0;
    }
    }
    else
    attackee = attacker_list[random(sizeof(attacker_list))];

    //dw Check to see if they are being protected.

    if (protector && member_array(protector, attacker_list) != -1) {
    tell_object(this_object(), protector->query_cap_name()+
      " turns against you and starts fighting you.\n");
    tell_object(protector, "You start fighting "+
      this_object()->query_cap_name()+" and stop protecting "+
      this_object()->query_objective()+".\n");
    say(protector->query_cap_name()+" turns against "+
      this_object()->query_cap_name()+" and starts attacking him.\n",
      ({ protector, this_object() }));
    /* This has been missing far too long, Wonderflug */
    protector = 0;
    }
    if ((ob = (object)attackee->query_protector()) &&
      environment(ob) == environment(attackee) &&
      ob->query_protect_valid(this_object(), attackee) )
    {
    if (!ob->query_dead())
    {
        tell_object(attackee, ob->query_cap_name()+
          " valiantly protects you.\n");
        tell_object(ob,"You valiantly protect "+attackee->query_cap_name()+".\n");
        say(ob->query_cap_name()+" valiantly protects "+
          attackee->query_cap_name()+".\n", ({ attackee, ob }));
        attackee = ob;
    }
    }
    his_att_lvl = maxi(({ (int)attackee->query_level(), 1 }) );

    his_name = (string)attackee->query_name();

    attackee->attack_by(this_object());


    // Attack code below by Aragorn.

    ww = (object *)this_object()->query_weapons_wielded();
    if (!sizeof(ww))
    // Radix added this_object()-> for shadows
    dam = this_object()->unarmed_attack(attackee,this_object()); // Bare hands?
    else
    for(olav=0;olav<sizeof(ww);olav++)
        dam += (int)ww[olav]->weapon_attack(attackee,this_object());


    // Here endeth the code by Aragorn

    if (!attackee) 
    {
    tell_object(this_object(),"You killed "+his_name+"\n");
    say(this_object()->query_cap_name()+" killed "+his_name+"\n");
    }

    // Fix by Aragorn
    att_level = (int)this_object()->query_level();
    att_level = att_level?att_level:1;
    ++att_level;
    this_object()->adjust_xp(dam*(his_att_lvl/att_level));
    event(environment(this_object()), "fight_in_progress", attackee);

}

void attack_by(object ob) 
{
    if (ob == this_object())
    return ;
    // Added by Radix, July 1996 - Missing too long
    if(this_object()->query_hidden())
    return ;
    if (!attacker_list)
    attacker_list = ({ });
    if (!sizeof(attacker_list)) 
    {
    dodging = (int)this_object()->query_level();
    }
    if (member_array(ob, attacker_list) == -1 &&
      member_array(ob, call_outed) == -1) 
    {
    tell_object(this_object(), "You are attacked by " + 
      ob->query_short() + ".\n");

    attacker_list += ({ ob });
    }
    set_heart_beat(1);
}

/* Hmm, this is called by the attacker, object ob is the victim */
void attack_ob(object ob) 
{
    if (ob == this_object())
    return;

    if(ob->query_dead() || ob->query_hidden())
    return;

    if (!attacker_list)
    attacker_list = ({ });
    if (!sizeof(attacker_list)) 
    {
    /* This will be changed later.. */
    dodging = (int)this_object()->query_level();
    }
    if (member_array(ob, attacker_list) == -1 &&
      member_array(ob, call_outed) == -1) 
    {
    attacker_list += ({ ob });
    }
    if (ob)
    ob->attack_by(this_object());
}

void check_stop_fight(object ob) 
{
    int i;
    if ((i=member_array(ob,call_outed)) != -1)
    call_outed = delete(call_outed,i,1);
}

int stop_fight(object ob) 
{
    int i;
    if ((i=member_array(ob,call_outed)) != -1) {
    tell_object(this_object(),"You stop hunting "+call_outed[i]->short(0)+
      ".\n");
    call_outed = delete(call_outed, i, 1);
    }
    if ((i=member_array(ob,attacker_list)) != -1)
    attacker_list = delete(attacker_list,i,1);
}

mixed *query_attacker_list()
{
    attacker_list -= ({0});
    return attacker_list;
}

mixed *query_call_outed()
{
    call_outed -= ({0});
    return call_outed;
}


//dw   Sets up protection matrixes.
int do_protect(string str) 
{
    object *obs, *ok; int i;
    if (!str) 
    {
    notify_fail("Syntax: protect <objects>\n");
    return 0;
    }
    obs = find_match(str, environment(this_object()));
    if (!sizeof(obs)) 
    {
    notify_fail("Protect what?\n");
    return 0;
    }
    //dk added member_array to this next line:
    if (member_array(this_object(), obs))
    //dk I changed this next line from this_player() to this_object():
    obs -= ({ this_object() });
    ok = ({ });
    for (i=0; i<sizeof(obs); i++)
    if (obs[i]->set_protector(this_object()))
        ok += ({ obs[i] });
    if (!sizeof(ok)) 
    {
    notify_fail(query_multiple_short(obs)+
      (sizeof(obs)==1?" doesnt":" don't")+" want your protection.\n");
    return 0;
    }
    if (sizeof(obs) != sizeof(ok))
    write("You fail to protect "+query_multiple_short(obs - ok)+".\n");

    write("You protect "+query_multiple_short(ok)+".\n");
    say(this_object()->query_cap_name()+" protects "+query_multiple_short(ok)+
      ".\n", ok);
    for (i=0; i<sizeof(ok); i++)
    tell_object(ok[i], this_object()->query_cap_name()+" protects "+
      query_multiple_short(({ "you" }) + (ok - ok[i..i]))+".\n");
    return 1;
}
// Added by Radix, missing too long...
int do_unprotect(string str)
{
    object tmp;
    if(!str)
    {
    notify_fail("Syntax: unprotect <object>\n");
    return(0);
    }
    tmp = find_living(str);
    if(!tmp)
    {
    notify_fail("Unprotect what?\n");
    return(0);
    }
    if(tmp->query_protector() != this_object())
    {
    write("You are not protecting "+tmp->query_cap_name()+".\n");
    return(1);
    }
    tmp->remove_protector(this_object());
    if(environment(tmp) == environment(this_object()))
    {
    tell_object(tmp,this_object()->query_cap_name()+" withdraws and "
      "no longer protects you.\n");
    tell_room(environment(),this_object()->query_cap_name()+" stops "
      "protecting "+tmp->query_cap_name()+".\n", ({tmp, this_object() }));
    }
    write("You withdraw and stop protecting "+tmp->query_cap_name()+".\n");
    return(1);
}

mixed stats() 
{
    int i; object ob; mixed *ret;
    if (ob=this_object()->query_held_ob(0) && ob->query_weapon())
    ret += ({ ({ "Weapon", ob->short() }) }) + (mixed)ob->weapon_stats();
    if (ob=this_object()->query_held_ob(1) && ob->query_weapon())
    ret += ({ ({ "Secondary weapon", ob->short() }) });
    for (i=0; i<sizeof(attack_out); i+=7) 
    ret += ({ ({ "If",    attack_out[i], }), 
      ({ "Rate",  attack_out[i+1], }), 
      ({ "Attack", attack_out[i+2], }), 
      ({ "Tohit", attack_out[i+3], }), 
      ({ "Number of damage dice", attack_out[i+4], }), 
      ({ "Die size", attack_out[i+5], }), 
      ({ "Addend", attack_out[i+6], }), 
    }); 
    return ret;
}