/* /verbs/spells/judge.c * a skill for players to judge the relative worth of items * created 961120 by Bill Gates@Dead Souls */ #include #include #include #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"); } 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( !(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( caster->GetName() + " concentrates on " + name1 + " and " + name2 + ".", caster); if( 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 > caster->GetStaminaPoints() ) { caster->eventPrint("You are too weary to judge right now."); environment(caster)->eventPrint( caster->GetName() + " looks tired.", caster); return 0; } caster->AddStaminaPoints(-cost); obj1lvl = obj1->GetValue(); obj2lvl = 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; }