/* -*- LPC -*- */
/*
* $Locker: $
* $Id: bob.c,v 1.3 2000/06/09 06:47:35 pinkfish Exp $
*
*/
#include <tasks.h>
#include <weapon.h>
#define QUEST_MAX 570
#define DIFFICULTY 100
//#define DEBUG 1
inherit "/std/effect_shadow";
string *data;
void set_data( string *words ) { data = words; }
mapping special_attack( object target ) {
int damage;
int skill;
int difficulty;
object *args;
args = arg();
if((object)environment(target) != (object)environment(player)) {
tell_object(player, "Where did "+target->short()+" go?\n");
remove_this_effect();
return ([ ]);
}
if (!sizeof(match_objects_for_existence("bucket", ({ this_player() }))) &&
!sizeof(match_objects_for_existence("apple", ({ this_player() })))) {
add_failed_mess("You must have an apple and a bucket to use bob.\n");
return 0;
}
difficulty += target->query_str() * 10;
skill = (int)player->query_skill_bonus("fighting.combat.melee."+ data[1]);
damage = 4 + sqrt( damage ) / 2;
damage = 2 * damage + 8 * (random(damage)) +
2 * damage + 8 * (random(damage));
switch( (int)TASKER->perform_task(player, "fighting.combat.melee."+ data[1],
difficulty, TM_COMMAND)) {
case AWARD :
tell_object( player, "%^YELLOW%^"+ replace( ({ "You feel that "+
"your skill with a bucket has increased.", "You feel "+
"more able to use a bucket.", "You seem to be a step "+
"closer to mastering a bucket." })[ random( 3 ) ],
"$weapon$", ( args[ 1 ] == player ? "unarmed combat" :
(string)args[ 1 ]->a_short() ) ) +"%^RESET%^\n" );
case SUCCEED :
tell_object( player, "You grab hold of " +
(string)target->the_short() + "'s head and shove it down "
"into the bucket.\nYou scream out 'Bob for this!'\n"
"You try and drown " + target->the_short() + ".\n");
tell_room( environment(player),
player->the_short() + " grabs hold of " +
(string)target->the_short() + "'s head and shoves it down "
"into the bucket.\n" + player->the_short() +
" scream out 'Bob for this!'\n" +
player->the_short() + " tries to drown " + target->the_short() +
".\n", ({ player, }));
set_arg(0);
break;
default:
tell_object( player, "You manage to botch your use of a bucket.\n");
remove_this_effect();
return 0;
}
#ifdef DEBUG
tell_creator("ceres", sprintf("Crush: player: %s, weapon: %s (%d), Diff: %d, Dam: %d Ski: %d\n",
player->query_name(),
args[ 1 ]->query_name(),
args[1]->query_enchant(),
difficulty, damage, skill));
#endif
remove_this_effect();
return ([ args[ 1 ] : ({ damage }) + data ]);
} /* special_attack() */
int tasking_done() { return 1; }
void event_death(object killed, object * others, object killer, string rmess,
string kmess) {
object *args;
player->event_death(killed, others, killer, rmess, kmess);
args = arg();
if ( killed == args[ 0 ] ) remove_this_effect();
}