dsIIr4/bin/
dsIIr4/extra/creremote/
dsIIr4/extra/wolfpaw/
dsIIr4/lib/cmds/admins/
dsIIr4/lib/cmds/common/
dsIIr4/lib/cmds/creators/include/
dsIIr4/lib/cmds/creators/include/SCCS/
dsIIr4/lib/daemon/services/
dsIIr4/lib/doc/
dsIIr4/lib/domains/Ylsrim/
dsIIr4/lib/domains/Ylsrim/adm/
dsIIr4/lib/domains/Ylsrim/armor/
dsIIr4/lib/domains/Ylsrim/broken/
dsIIr4/lib/domains/Ylsrim/fish/
dsIIr4/lib/domains/Ylsrim/meal/
dsIIr4/lib/domains/Ylsrim/npc/
dsIIr4/lib/domains/Ylsrim/virtual/
dsIIr4/lib/domains/Ylsrim/weapon/
dsIIr4/lib/domains/campus/adm/
dsIIr4/lib/domains/campus/etc/
dsIIr4/lib/domains/campus/meals/
dsIIr4/lib/domains/campus/npc/
dsIIr4/lib/domains/campus/save/
dsIIr4/lib/domains/campus/txt/
dsIIr4/lib/domains/campus/txt/ai/charles/
dsIIr4/lib/domains/campus/txt/ai/charles/bak2/
dsIIr4/lib/domains/campus/txt/ai/charles/bak2/bak1/
dsIIr4/lib/domains/campus/txt/ai/charly/
dsIIr4/lib/domains/campus/txt/ai/charly/bak/
dsIIr4/lib/domains/campus/txt/jenny/
dsIIr4/lib/domains/default/creator/
dsIIr4/lib/domains/default/doors/
dsIIr4/lib/domains/default/etc/
dsIIr4/lib/domains/default/virtual/
dsIIr4/lib/domains/default/weap/
dsIIr4/lib/domains/town/virtual/
dsIIr4/lib/lib/comp/
dsIIr4/lib/lib/lvs/
dsIIr4/lib/lib/user/
dsIIr4/lib/lib/virtual/
dsIIr4/lib/log/
dsIIr4/lib/obj/book_source/
dsIIr4/lib/obj/include/
dsIIr4/lib/realms/template/
dsIIr4/lib/realms/template/adm/
dsIIr4/lib/realms/template/area/armor/
dsIIr4/lib/realms/template/area/npc/
dsIIr4/lib/realms/template/area/obj/
dsIIr4/lib/realms/template/area/room/
dsIIr4/lib/realms/template/area/weap/
dsIIr4/lib/realms/template/bak/
dsIIr4/lib/realms/template/cmds/
dsIIr4/lib/save/
dsIIr4/lib/save/kills/o/
dsIIr4/lib/secure/cfg/classes/
dsIIr4/lib/secure/cmds/creators/include/
dsIIr4/lib/secure/cmds/players/
dsIIr4/lib/secure/cmds/players/include/
dsIIr4/lib/secure/daemon/include/
dsIIr4/lib/secure/lib/
dsIIr4/lib/secure/lib/include/
dsIIr4/lib/secure/lib/net/include/
dsIIr4/lib/secure/lib/std/
dsIIr4/lib/secure/modules/
dsIIr4/lib/secure/npc/
dsIIr4/lib/secure/obj/include/
dsIIr4/lib/secure/room/
dsIIr4/lib/secure/save/
dsIIr4/lib/secure/save/boards/
dsIIr4/lib/secure/save/players/g/
dsIIr4/lib/secure/tmp/
dsIIr4/lib/secure/verbs/creators/
dsIIr4/lib/shadows/
dsIIr4/lib/spells/
dsIIr4/lib/std/board/
dsIIr4/lib/std/lib/
dsIIr4/lib/tmp/
dsIIr4/lib/verbs/admins/include/
dsIIr4/lib/verbs/common/
dsIIr4/lib/verbs/common/include/
dsIIr4/lib/verbs/creators/include/
dsIIr4/lib/verbs/players/include/SCCS/
dsIIr4/lib/verbs/rooms/
dsIIr4/lib/verbs/rooms/include/
dsIIr4/lib/www/
dsIIr4/v22.2b14-dsouls2/
dsIIr4/v22.2b14-dsouls2/ChangeLog.old/
dsIIr4/v22.2b14-dsouls2/Win32/
dsIIr4/v22.2b14-dsouls2/compat/
dsIIr4/v22.2b14-dsouls2/compat/simuls/
dsIIr4/v22.2b14-dsouls2/include/
dsIIr4/v22.2b14-dsouls2/mudlib/
dsIIr4/v22.2b14-dsouls2/testsuite/
dsIIr4/v22.2b14-dsouls2/testsuite/clone/
dsIIr4/v22.2b14-dsouls2/testsuite/command/
dsIIr4/v22.2b14-dsouls2/testsuite/data/
dsIIr4/v22.2b14-dsouls2/testsuite/etc/
dsIIr4/v22.2b14-dsouls2/testsuite/include/
dsIIr4/v22.2b14-dsouls2/testsuite/inherit/
dsIIr4/v22.2b14-dsouls2/testsuite/inherit/master/
dsIIr4/v22.2b14-dsouls2/testsuite/log/
dsIIr4/v22.2b14-dsouls2/testsuite/single/
dsIIr4/v22.2b14-dsouls2/testsuite/single/tests/compiler/
dsIIr4/v22.2b14-dsouls2/testsuite/single/tests/efuns/
dsIIr4/v22.2b14-dsouls2/testsuite/single/tests/operators/
dsIIr4/v22.2b14-dsouls2/testsuite/u/
dsIIr4/v22.2b14-dsouls2/tmp/
dsIIr4/win32/
/*  /verbs/spells/judge.c
 *  a skill for players to judge the relative worth of items
 *  created 961120 by Bill Gates@Dead Souls
 */

#include <lib.h>
#include <vendor_types.h>
#include <rounds.h>
#include "include/judge.h"

inherit LIB_VERB;

static void create() {
    verb::create();
    SetVerb("judge");
    SetSynonyms("equate");
    SetRules("OBJ to OBJ");
    SetErrorMessage("What two things would you like to equate?");
    SetHelp("Syntax: equate OBJ to OBJ\n\n"
      "A bargaining ability which allows people to compare the "
      "relative worth of two items.  The more experienced you are "
      "at bartering, the better chance you have of correctly judging "
      "the more valuable item.\n\n"
      "See help: item commands");
}

mixed can_judge_obj_to_obj() {
    if( this_player()->GetLevel() < 6 ) {
	this_player()->eventPrint("You are not experienced enough to judge "
	  "the value of items accurately.");
	return 0;
    }
    return this_player()->CanCastMagic(1, "judge");
}


mixed do_judge_obj_to_obj(object obj1, object obj2) {
    int level;
    string name1, name2;
    object caster = this_player();
    if( !((int)caster->GetSkillLevel("bargaining")) ) {
	return "You do not have the skills to judge items."; }
    if (!obj1 || !obj2) return "You must judge one thing vs another.";
    if (obj1 == obj2) return "That would do a lot of good!";

    /* Check for presence of objects */
    name1 = obj1->GetShort();
    name2 = obj2->GetShort();

    if( environment(obj1) != caster ) {
	caster->eventPrint("You do not have "+name1+".");
	return 1;
    }

    if( environment(obj2) != caster ) {
	caster->eventPrint("You do not have "+name2+".");
	return 1;
    }

    level = caster->GetSkillLevel("bargaining");
    caster->eventPrint("You stare intently at "+name1+" and "+name2+".");
    environment(caster)->eventPrint( (string)caster->GetName() +
      " concentrates on " + name1 + " and " + name2 + ".", caster);
    if( (int)this_player()->GetInCombat() )
	this_player()->SetAttack(0,
	  (: eventJudge, this_player(), obj1, obj2, level :),
	  ROUND_OTHER);
    else eventJudge(this_player(), obj1, obj2, level);
    return 1;
}


int eventJudge(object caster, object obj1, object obj2, int level) {

    int obj1lvl, obj2lvl;
    string better;

    int cost = random(50) + 50;

    if( !(obj1 && obj2) ) return 0;
    if( (environment(obj1) != caster) || (environment(obj2) != caster) ) {
	caster->eventPrint("You must have both items in your possesion "
	  "to compare them.");
	return 0;
    }
    if( cost > (int)caster->GetStaminaPoints() ) {
	caster->eventPrint("You are too weary to judge right now.");
	environment(caster)->eventPrint(
	  (string)caster->GetName() + " looks tired.", caster);
	return 0;

    }
    caster->AddStaminaPoints(-cost);
    obj1lvl = (int)obj1->GetValue();
    obj2lvl = (int)obj2->GetValue();

    if( level < (5 + random(35))) {

	if(random(7)) {
	    if(random(5) < 2) {
		better = obj2->GetShort();
	    }
	    else better = obj1->GetShort();
	    caster->eventPrint("%^BOLD%^%^WHITE%^"
	      "You determine that " + better + "%^BOLD%^%^WHITE%^"
	      " is the more valuable object.%^RESET%^");
	    return 0;
	}
	else caster->eventPrint("%^BOLD%^%^WHITE%^"
	      "You determine that these two items are equally valuable."
	      ".%^RESET%^");
	caster->AddSkillPoints("bargaining",random(25));
	return 1;
    }
    /* Return the right answer */
    if(obj1lvl == obj2lvl) {
	caster->eventPrint("%^BOLD%^%^WHITE%^"
	  "You determine that these two items are equally valuable."
	  ".%^RESET%^");
	return 1;
    }
    if(obj1lvl > obj2lvl) {
	better = obj1->GetShort();
    }
    else better = obj2->GetShort();
    caster->eventPrint("%^BOLD%^%^WHITE%^"
      "You determine that " + better + "%^BOLD%^%^WHITE%^"
      " is the more valuable object.%^RESET%^");
    caster->AddSkillPoints("bargaining",random(50));
    return 1;

}