/***************************************************************************
* Original Diku Mud copyright (C) 1990, 1991 by Sebastian Hammer, *
* Michael Seifert, Hans Henrik St{rfeldt, Tom Madsen, and Katja Nyboe. *
* *
* Merc Diku Mud improvments copyright (C) 1992, 1993 by Michael *
* Chastain, Michael Quan, and Mitchell Tse. *
* *
* In order to use any part of this Merc Diku Mud, you must comply with *
* both the original Diku license in 'license.doc' as well the Merc *
* license in 'license.txt'. In particular, you may not remove either of *
* these copyright notices. *
* *
* Much time and thought has gone into this software and you are *
* benefitting. We hope that you share your changes too. What goes *
* around, comes around. *
***************************************************************************/
#if defined(macintosh)
#include <types.h>
#else
#include <sys/types.h>
#endif
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include "merc.h"
void do_divert (CHAR_DATA *ch, char *argument)
{
CHAR_DATA *victim;
char arg [MAX_INPUT_LENGTH];
CHAR_DATA *opponent;
one_argument(argument, arg);
if ( arg[0] == '\0' )
{
send_to_char("Divert <target> to divert the attack to that person.\r\n", ch);
return;
}
if ( IS_NPC(ch) ) return;
if ( ch->pcdata->legend < 6 )
{
send_to_char("Huh?\r\n", ch);
return;
}
if (( victim = get_char_room(ch, arg)) == NULL )
{
send_to_char("They aren't here.\r\n", ch);
return;
}
if ( IS_NPC(victim) )
{
send_to_char("Only to another member of your group.\r\n", ch);
return;
}
if (!is_same_group(ch, victim) )
{
send_to_char("Only to another member of your group.\r\n", ch);
return;
}
if ( victim == ch )
{
send_to_char("That would be pointless...\r\n", ch);
return;
}
if (ch->position != POS_FIGHTING || ch->fighting == NULL)
{
send_to_char("What are you trying to divert? Attention?\r\n", ch);
return;
}
if (victim->position < POS_FIGHTING)
{
send_to_char("They aren't ready for that.\r\n", ch);
return;
}
opponent = ch->fighting;
if (opponent == NULL)
{
bug("Divert: opponent NULL", 0);
return;
}
if ( ch->in_room->vnum != victim->in_room->vnum )
{
send_to_char("The gang's not all here.\r\n", ch);
return;
}
if ( IS_AFFECTED(opponent, AFF_ETHEREAL) &&
!IS_AFFECTED(victim, AFF_ETHEREAL) )
{
send_to_char( "Ethereal opponents can only be diverted to other ethereal people.\n\r", ch );
return;
}
if ( !IS_AFFECTED(opponent, AFF_ETHEREAL) &&
IS_AFFECTED(victim, AFF_ETHEREAL) )
{
send_to_char( "Ethereal opponents can only be diverted to other ethereal people.\n\r", ch );
return;
}
if ( IS_AFFECTED(opponent, AFF_SHADOWPLANE) && !IS_AFFECTED(victim, AFF_SHADOWPLANE) )
{
send_to_char( "They are too insubstantial!\r\n", ch);
return;
}
if ( !IS_AFFECTED(opponent, AFF_SHADOWPLANE) && IS_AFFECTED(victim, AFF_SHADOWPLANE) )
{
send_to_char( "They are too insubstantial!\r\n", ch);
return;
}
if ( IS_SET(ch->in_room->room_flags,ROOM_SAFE) )
{
send_to_char( "You cannot fight in a safe room.\n\r", ch );
return;
}
one_hit(victim, opponent, TYPE_UNDEFINED, 1);
opponent->fighting = victim;
one_hit( opponent, victim, TYPE_UNDEFINED, 1);
WAIT_STATE(ch, 12);
act("$n diverts the attack to you!", ch, NULL, victim, TO_VICT);
act("You divert the attack to $N!", ch, NULL, victim, TO_CHAR);
act("$n diverts the attack to $N!", ch, NULL, victim, TO_NOTVICT);
return;
}
/*
* Handles deflected damage from the ITEMA_DEFLECT affect. Called from
* multi_hit(). We want a random percent of the damage done to a random
* number of people in the same room as victim. First, decide how many
* "pieces" it will break off into. Then randomly hit people in the room
* until all pieces have landed. Some pieces may hit victim, some may hit
* ch, and it is valid to be hit multiple times.
*/
void deflect_attack (CHAR_DATA *ch, CHAR_DATA *victim, int dam, int dt)
{
}