CODE: Somebody mention Multi-hit?

From: George (gagreer@dragon.ham.muohio.edu)
Date: 05/14/96


Someone mentioned multihitting in relation to a fountain of code or
something and since it's pretty easy, here goes:

void perform_violence(void)
{
  [code snip]
  int numhits;
  int HIT_CLERIC	= (LVL_IMMORT - 1) / 3;    < The numbers at the
  int HIT_WARRIOR	= (LVL_IMMORT - 1) / 4;    < end basically mean
  int HIT_THIEF		= (LVL_IMMORT - 1) / 2.5;  < that at the max
  int HIT_MAGIC		= (LVL_IMMORT - 1) / 2;    < mortal level, you get
  int HIT_MOB		= (LVL_IMMORT - 1) / 3.5;  < that many attacks.
/* And the decimals are there so when it rounds, some get them faster */

  for (j = 1;j <= 4;j++) {
                 ^^^-- Change the 4 if you add more than 4 attacks/round
  for (ch = combat_list; ch; ch = next_combat_list) {
    next_combat_list = ch->next_fighting;
    switch GET_CLASS(ch) {
      case CLASS_CLERIC:
	numhits = GET_LEVEL(ch) / HIT_CLERIC;
	break;
      case CLASS_WARRIOR:
	numhits = GET_LEVEL(ch) / HIT_WARRIOR;
	break;
      case CLASS_THIEF:
	numhits = GET_LEVEL(ch) / HIT_THIEF;
	break;
      case CLASS_MAGIC_USER:
	numhits = GET_LEVEL(ch) / HIT_MAGIC;
	break;
      default:
        numhits = GET_LEVEL(ch) / HIT_MOB;
    }
    numhits = MAX(1, numhits); << Without this line you will have _0_
				attacks per round (you just sit there)
    if (numhits >= j) {

      if (FIGHTING(ch) == NULL || ch->in_room != FIGHTING(ch)->in_room) {
        stop_fighting(ch);
        continue;
      }

      [npc scrambling snip]

      hit(ch, FIGHTING(ch), TYPE_UNDEFINED);

    if (MOB_FLAGGED(ch, MOB_SPEC) && mob_index[GET_MOB_RNUM(ch)].func != NULL)
      (mob_index[GET_MOB_RNUM(ch)].func) (ch, ch, 0, "");
  }
}

Note: The {}'s might not line up as I had to cut out some of my custom
      code, but you should get the idea...

-George



This archive was generated by hypermail 2b30 : 12/18/00 PST