/*
    Weapon.m  Class definition.
    Copyright (C) 1995  David Flater.

    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program; if not, write to the Free Software
    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/

#include "cheezmud.h"

@implementation Weapon

+ new
{
  self=[super new];
  [self describe: "club": "a club": "the club":
  "This is a chunk of wood that you can use to clobber someone."];
  strcpy (youhit, "clobber");
  strcpy (hehit, "clobbers");
  strcpy (hitwith, " with the club");
  [self setspeeddamage: 4: 4];
  return self;
}

- kill: who: dobj
{
  if ([dobj isdead])
    return self;

  /*  We have to prevent people from getting in extra hits by typing kill */
  /*  over and over.  We only really want to hit if this function was called */
  /*  by the heartbeat.  The heartbeat is nice enough to set a flag for us, */
  /*  since otherwise it would be hard to tell. */

  if ([who checkkillflag]) {
    id owner_location;
    if (dobj == who) {
      [who clue: who];
      return self;
    }
    if (++beatcount == speed) {
      beatcount = 0;
      owner_location = [who getlocation];
      [owner_location emote: who: youhit: hehit: dobj: hitwith];
      [dobj hit: who: (float) (random() % (damage+1))];
      [owner_location theres_a_fight_going_on];
    }
  } else {
    if (dobj == who) {
      [who echo: "If you want to delete your account, e-mail the mud admin!"];
      [who clue: who];
      return self;
    }
    [[who enemies] addIfAbsent: dobj];
  }

  return self;
}

- (void) setspeeddamage: (int) s: (int) d
{
  float tspeed;
  speed = s;
  damage = d;
  tspeed = ((float)s / 4.0 - 1.0) * 0.5 + 1.0;
  prio = (float)damage / tspeed;
}

- (float) priority: (char *) action: (int) numargs
{
  if (numargs == 2) {
    if (!strcmp (action, "kill"))
      return prio;
  }
  /* Not supported */
  return -1.0;
}

@end