ds2.1.1/bin/
ds2.1.1/extra/wolfpaw/
ds2.1.1/lib/cmds/admins/
ds2.1.1/lib/cmds/common/
ds2.1.1/lib/cmds/creators/include/
ds2.1.1/lib/cmds/creators/include/SCCS/
ds2.1.1/lib/daemon/services/
ds2.1.1/lib/doc/
ds2.1.1/lib/doc/efun/all/
ds2.1.1/lib/doc/efun/arrays/
ds2.1.1/lib/doc/efun/buffers/
ds2.1.1/lib/doc/efun/compile/
ds2.1.1/lib/doc/efun/floats/
ds2.1.1/lib/doc/efun/functions/
ds2.1.1/lib/doc/efun/general/
ds2.1.1/lib/doc/efun/mixed/
ds2.1.1/lib/doc/efun/numbers/
ds2.1.1/lib/doc/efun/parsing/
ds2.1.1/lib/doc/faq/
ds2.1.1/lib/doc/hbook/
ds2.1.1/lib/doc/help/classes/
ds2.1.1/lib/doc/lpc/basic/
ds2.1.1/lib/doc/lpc/concepts/
ds2.1.1/lib/doc/lpc/constructs/
ds2.1.1/lib/doc/lpc/etc/
ds2.1.1/lib/doc/lpc/intermediate/
ds2.1.1/lib/doc/lpc/types/
ds2.1.1/lib/doc/misc/
ds2.1.1/lib/doc/old/
ds2.1.1/lib/domains/Ylsrim/
ds2.1.1/lib/domains/Ylsrim/adm/
ds2.1.1/lib/domains/Ylsrim/armor/
ds2.1.1/lib/domains/Ylsrim/broken/
ds2.1.1/lib/domains/Ylsrim/fish/
ds2.1.1/lib/domains/Ylsrim/meal/
ds2.1.1/lib/domains/Ylsrim/npc/
ds2.1.1/lib/domains/Ylsrim/obj/
ds2.1.1/lib/domains/Ylsrim/virtual/
ds2.1.1/lib/domains/Ylsrim/weapon/
ds2.1.1/lib/domains/campus/adm/
ds2.1.1/lib/domains/campus/etc/
ds2.1.1/lib/domains/campus/meals/
ds2.1.1/lib/domains/campus/npc/
ds2.1.1/lib/domains/campus/txt/ai/charles/
ds2.1.1/lib/domains/campus/txt/ai/charles/bak2/
ds2.1.1/lib/domains/campus/txt/ai/charles/bak2/bak1/
ds2.1.1/lib/domains/campus/txt/ai/charly/
ds2.1.1/lib/domains/campus/txt/ai/charly/bak/
ds2.1.1/lib/domains/campus/txt/jenny/
ds2.1.1/lib/domains/default/creator/
ds2.1.1/lib/domains/default/doors/
ds2.1.1/lib/domains/default/etc/
ds2.1.1/lib/domains/default/weap/
ds2.1.1/lib/domains/town/doors/
ds2.1.1/lib/domains/town/txt/
ds2.1.1/lib/domains/town/txt/shame/
ds2.1.1/lib/domains/town/virtual/
ds2.1.1/lib/lib/comp/
ds2.1.1/lib/lib/lvs/
ds2.1.1/lib/lib/user/
ds2.1.1/lib/lib/virtual/
ds2.1.1/lib/log/
ds2.1.1/lib/obj/book_source/
ds2.1.1/lib/obj/include/
ds2.1.1/lib/realms/template/
ds2.1.1/lib/realms/template/area/armor/
ds2.1.1/lib/realms/template/area/npc/
ds2.1.1/lib/realms/template/area/obj/
ds2.1.1/lib/realms/template/area/room/
ds2.1.1/lib/realms/template/area/weap/
ds2.1.1/lib/realms/template/bak/
ds2.1.1/lib/realms/template/cmds/
ds2.1.1/lib/save/kills/o/
ds2.1.1/lib/secure/cfg/
ds2.1.1/lib/secure/cfg/classes/
ds2.1.1/lib/secure/cfg/races/SCCS/
ds2.1.1/lib/secure/cmds/creators/include/
ds2.1.1/lib/secure/cmds/players/
ds2.1.1/lib/secure/cmds/players/include/
ds2.1.1/lib/secure/daemon/include/
ds2.1.1/lib/secure/lib/
ds2.1.1/lib/secure/lib/include/
ds2.1.1/lib/secure/lib/net/
ds2.1.1/lib/secure/lib/net/include/
ds2.1.1/lib/secure/lib/std/
ds2.1.1/lib/secure/modules/
ds2.1.1/lib/secure/npc/
ds2.1.1/lib/secure/obj/include/
ds2.1.1/lib/secure/room/
ds2.1.1/lib/secure/save/
ds2.1.1/lib/secure/save/boards/
ds2.1.1/lib/secure/verbs/creators/
ds2.1.1/lib/shadows/
ds2.1.1/lib/spells/
ds2.1.1/lib/verbs/admins/include/
ds2.1.1/lib/verbs/common/
ds2.1.1/lib/verbs/common/include/
ds2.1.1/lib/verbs/creators/
ds2.1.1/lib/verbs/creators/include/
ds2.1.1/lib/verbs/players/include/SCCS/
ds2.1.1/lib/verbs/rooms/
ds2.1.1/lib/verbs/rooms/include/
ds2.1.1/lib/www/errors/
ds2.1.1/lib/www/images/
ds2.1.1/v22.2b14/
ds2.1.1/v22.2b14/ChangeLog.old/
ds2.1.1/v22.2b14/Win32/
ds2.1.1/v22.2b14/compat/
ds2.1.1/v22.2b14/compat/simuls/
ds2.1.1/v22.2b14/include/
ds2.1.1/v22.2b14/testsuite/
ds2.1.1/v22.2b14/testsuite/clone/
ds2.1.1/v22.2b14/testsuite/command/
ds2.1.1/v22.2b14/testsuite/data/
ds2.1.1/v22.2b14/testsuite/etc/
ds2.1.1/v22.2b14/testsuite/include/
ds2.1.1/v22.2b14/testsuite/inherit/
ds2.1.1/v22.2b14/testsuite/inherit/master/
ds2.1.1/v22.2b14/testsuite/log/
ds2.1.1/v22.2b14/testsuite/single/
ds2.1.1/v22.2b14/testsuite/single/tests/compiler/
ds2.1.1/v22.2b14/testsuite/single/tests/efuns/
ds2.1.1/v22.2b14/testsuite/single/tests/operators/
ds2.1.1/v22.2b14/testsuite/u/
ds2.1.1/v22.2b14/tmp/
ds2.1.1/win32/
#include <lib.h>
#include <damage_types.h>

inherit LIB_DAEMON;

int eventConsider(object whom, object opponent){
    int score = 0;
    int tmp = 0;
    int protection = 0;
    string *attack_types = ({});
    object *dam_types = ({});
    object *weapons = filter(all_inventory(whom), (: $1->GetWielded() :));
    object *enemy_armor = filter(all_inventory(opponent), (: $1->GetWorn() :));
    enemy_armor = filter(enemy_armor, (: !($1->GetWielded()) :) );

    if(sizeof(weapons)){
	foreach(object weapon in weapons){
	    if(weapon->GetWeaponType() && whom->GetSkill(weapon->GetWeaponType()+" attack")){
		attack_types += ({ weapon->GetWeaponType() });
		score += ( whom->GetSkill(weapon->GetWeaponType()+" attack")["level"] ) * 3;
	    }
	    if(weapon->GetClass())
		score += ( weapon->GetClass() ) * 6;
	    if(weapon->GetHands() > 1) {
		if(!(whom->GetSkill("multi-hand"))) score /= 3;
	    }
	}
	if(sizeof(weapons) >1) {
	    if(!(whom->GetSkill("multi-weapon"))) score /= 3;
	}
    }

    else if((whom->GetMelee())) {
	if(whom->GetSkill("melee attack"))
	    score += (((whom->GetSkill("melee attack")["level"]) * 3)); 
    }
    if(!sizeof(attack_types)) attack_types = ({"blunt"});
    foreach(string Type in attack_types){
	int DamType = 0;
	int tmp_prot = 0;
	object *qual_armor = ({});

	switch(Type){
	case "blade" : DamType = BLADE; break;
	case "blunt" : DamType = BLUNT; break;
	case "knife" : DamType = KNIFE; break;
	case "water" : DamType = WATER; break;
	case "shock" : DamType = SHOCK; break;
	case "cold" : DamType = COLD; break;
	case "heat" : DamType = HEAT; break;
	case "gas" : DamType = GAS; break;
	case "acid" : DamType = ACID; break;
	case "magic" : DamType = MAGIC; break;
	case "poison" : DamType = POISON; break;
	case "disease" : DamType = DISEASE; break;
	case "trauma" : DamType = TRAUMA; break;
	default : DamType = BLUNT; break;
	}

	foreach(object armor in enemy_armor){
	    tmp_prot += armor->GetProtection(DamType);
	    if(armor->GetProtection(DamType)) qual_armor += ({ armor });
	}
	if(sizeof(qual_armor)) protection += tmp_prot / sizeof(qual_armor);
	tmp_prot = 0;
	DamType = 0;
    }



    score += whom->GetStatLevel("speed") * 2;
    score += whom->GetStatLevel("strength") * 3;
    score += whom->GetMaxHealthPoints() / 15;
    score += protection;

    return score;
}

mixed cmd(string str) {
    object thing;
    int totalscore, myscore, theirscore;

    if(!str){
	write("Consider what?");
	return 1;
    }
    if(!(thing = present(str,environment(this_player())))){
	write("That isn't here.");
	return 1;
    }
    if(!living(thing)){
	write("That isn't a living thing.");
	return 1;
    }

    theirscore = eventConsider(thing, this_player());
    myscore = eventConsider(this_player(), thing);

    totalscore = myscore - theirscore;
    if(totalscore > 100) write("Piece of cake.");
    else if(totalscore > 80) write("No problem.");
    else if(totalscore > 60) write("Very easy.");
    else if(totalscore > 40) write("Fairly easy.");
    else if(totalscore > 20) write("You'd probably do fine");
    else if(totalscore > 0) write("A fair match.");
    else if(totalscore > -20) write("A workout.");
    else if(totalscore > -40) write("A serious match.");
    else if(totalscore > -60) write("A major challenge.");
    else if(totalscore > -80) write("An unwise choice.");
    else if(totalscore > -100) write("Really a bad idea.");
    else write("Suicide.");
    return 1;
}


void help() {
    message("help",
      "Syntax: consider <creature>\n"
      "Gives you an idea of how tough a creature would be to defeat "
      "in combat. Gauges relative strengths, skills, weapons, "
      "armor, levels, health, and so on. The resulting comparison "
      "may not be very useful, because a change during combat (such "
      "as the opponent changing weapons) or items of unusual class "
      "or protection (such as magical armor) may not be taken into "
      "account."
      "\n",
      this_player() );
}