/* Xrakisis's Lazy mans Cotn Quicker Quickmud */
#if defined(macintosh)
#include <types.h>
#else
#include <sys/types.h>
#include <sys/time.h>
#endif
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <ctype.h>
#include <time.h>
#include "merc.h"
#include "interp.h"
#include "magic.h"
#include "recycle.h"
#include "tables.h"
#include "lookup.h"
#include "disease.h"
void do_diseaseself(CHAR_DATA *ch, char *argument)
{
char buf[MAX_STRING_LENGTH];
char arg1 [MAX_INPUT_LENGTH];
argument = one_argument( argument, arg1 );
if (IS_NPC(ch))return;
/* if (!IS_NPC(ch) && ch->disease != 0)
{
send_to_char("You already have a disease.\n\r",ch);
return;
}
*/
if ( arg1[0] == '\0' )
{
stc("Type diseaseself <vampire or werewolf>\n\r",ch);
stc("{G************************************************{x\n\r",ch);
stc("{Y--{CVampire {Y--{CWerewolf\n\r",ch);
stc("{Y--{CDemon {Y--{CUndead Knight\n\r",ch);
stc("{G************************************************{x\n\r",ch);
return;
}
if (!str_cmp(arg1,"werewolf"))
{
ch->disease = DISEASE_WEREWOLF;
SET_BIT(ch->vuln_flags, VULN_SILVER);
send_to_char( "You have Become a {GWerewolf{x.\n\r", ch);
sprintf(buf,"%s Has become a Werewolf.", ch->name);
do_info(ch,buf);
return;
}
if (!str_cmp(arg1,"vampire"))
{
ch->disease = DISEASE_VAMPIRE;
SET_BIT(ch->vuln_flags, VULN_HOLY);
send_to_char( "You have Become a {GVampire{x.\n\r", ch);
sprintf(buf,"%s Has become a Vampire.", ch->name);
do_info(ch,buf);
return;
}
if (!str_cmp(arg1,"undead"))
{
ch->disease = DISEASE_UNDEAD;
SET_BIT(ch->vuln_flags, VULN_HOLY);
send_to_char( "You have Become a {GDeath Knight{x.\n\r", ch);
sprintf(buf,"%s Has become a Death Knight.", ch->name);
do_info(ch,buf);
return;
}
if (!str_cmp(arg1,"demon"))
{
ch->disease = DISEASE_DEMON;
SET_BIT(ch->vuln_flags, VULN_HOLY);
send_to_char( "You have Become a {GDemon{x.\n\r", ch);
sprintf(buf,"%s Has become a Demon.", ch->name);
do_info(ch,buf);
return;
}
else do_diseaseself(ch,"");
return;
}
void do_leech(CHAR_DATA *ch, char *argument)
{
CHAR_DATA *victim = NULL;
char buf[MAX_STRING_LENGTH];
if (ch->disease != DISEASE_DEMON)
{
stc("Huh?\n\r", ch);
return;
}
if (argument[0] == '\0')
{
stc("Who's life do you wish to leech off of?\n\r", ch);
return;
}
if ((victim = get_char_room(ch, argument)) == NULL)
{
stc("They aren't here.\n\r", ch);
return;
}
if (is_safe(ch, victim)) return;
WAIT_STATE(ch, 10);
act("$n stares intently at $N.", ch, NULL, victim, TO_NOTVICT);
act("You stare intently at $N.", ch, NULL, victim, TO_CHAR);
act("$n stares intently at you.", ch, NULL, victim, TO_VICT);
if (victim->hit >= 1000)
{
sh_int power;
sh_int dam;
power = 20;
dam = number_range (5000, 9000);
ch->hit += dam/2;
if (ch->hit >= ch->max_hit + 500)
ch->hit = ch->max_hit + 500;
damage (ch, victim, dam, 0, DAM_NEGATIVE, FALSE);
sprintf(buf,"#1You absorb %d hitpoints.#n\n\r",dam);
stc(buf,ch);
sprintf(buf,"#1%s absorbed %d of your hitpoints!#n\n\r",ch->name,dam);
stc(buf,victim);
}
else stc("Nothing seemed to happen.\n\r",ch);
return;
}
void do_scream(CHAR_DATA * ch, char *argument)
{
CHAR_DATA *vch;
CHAR_DATA *vch_next;
char arg[MAX_INPUT_LENGTH];
argument = one_argument(argument, arg);
if (IS_NPC(ch))
return;
if (ch->disease != DISEASE_VAMPIRE)
{
stc("Huh?\n\r", ch);
return;
}
if (IS_SET(ch->in_room->room_flags, ROOM_SAFE))
{
stc("Your screams will have no effect here.\n\r", ch);
return;
}
if (ch->blood < 50)
{
stc("You have insufficient blood.\n\r", ch);
return;
}
for (vch = char_list; vch != NULL; vch = vch_next)
{
vch_next = vch->next;
if (vch->in_room == NULL)
continue;
if (ch == vch)
continue;
if (vch->in_room == ch->in_room)
{
if (can_see(ch, vch))
{
if (number_range(1,2) == 2)
{
act("$n lets out an ear-popping scream!", ch, NULL, vch, TO_ROOM);
stc("You fall to the ground, clutching your ears.\n\r", vch);
vch->position = POS_STUNNED;
act("$n falls to the ground, stunned.", vch, NULL, vch, TO_NOTVICT);
return;
}
else
{
act("$n lets out an ear-popping scream!", ch, NULL, vch, TO_ROOM);
return;
}
}
else
continue;
return;
}
}
return;
}
void do_conceal(CHAR_DATA * ch, char *argument)
{
char arg[MAX_STRING_LENGTH];
char buf[MAX_STRING_LENGTH];
OBJ_DATA *obj;
one_argument(argument, arg);
if (IS_NPC(ch))
return;
if (ch->disease != DISEASE_VAMPIRE)
{
send_to_char("Huh?\n\r", ch);
return;
}
if (arg[0] == '\0')
{
send_to_char("Syntax: Conceal (item).\n\r", ch);
return;
}
if ((obj = get_obj_carry(ch, arg, ch)) == NULL)
{
send_to_char("You dont have that item.\n\r", ch);
return;
}
if (IS_SET(obj->extra_flags, ITEM_INVIS))
{
sprintf(buf, "%s fades into existance.", obj->short_descr);
send_to_char(buf, ch);
act(buf, ch, NULL, NULL, TO_ROOM);
REMOVE_BIT(obj->extra_flags, ITEM_INVIS);
return;
}
if (!IS_SET(obj->extra_flags, ITEM_INVIS))
{
sprintf(buf, "%s fades out of existance.", obj->short_descr);
send_to_char(buf, ch);
act(buf, ch, NULL, NULL, TO_ROOM);
SET_BIT(obj->extra_flags, ITEM_INVIS);
return;
}
return;
}
void do_fear(CHAR_DATA * ch, char *argument)
{
CHAR_DATA *victim;
char arg[MAX_INPUT_LENGTH];
char buf[MAX_STRING_LENGTH];
argument = one_argument(argument, arg);
if (IS_NPC(ch))
return;
if (ch->disease != DISEASE_VAMPIRE)
{
stc("Huh?\n\r", ch);
return;
}
if ((victim = get_char_room(ch, arg)) == NULL)
{
stc("They aren't here.\n\r", ch);
return;
}
arg[0] = UPPER(arg[0]);
if (ch->fighting == NULL)
{
stc("You must be fighting to use Fear.\n\r", ch);
return;
}
if (victim->fighting == NULL)
{
sprintf(buf, "%s is not fighting anyone.", arg);
stc(buf, ch);
return;
}
WAIT_STATE(ch, 8);
if (IS_NPC(victim))
{
act("You bare your fangs and growl at $N.", ch, NULL, victim,
TO_CHAR);
act("$n bares $s fangs and growls at you.", ch, NULL, victim,
TO_VICT);
act("$n bares $s fangs and growls at $N, and $N flees in terror.", ch, NULL, victim, TO_NOTVICT);
do_flee(victim, "");
return;
}
if (!IS_NPC(victim))
{
if (number_range(1, 6) == 2)
{
act("You bare your fangs and growl at $N, but nothing happens.", ch, NULL, victim, TO_CHAR);
act("$n bares $s fangs and growls at you.",
ch, NULL, victim, TO_VICT);
act("$n bares $s fangs and growls at $N, but nothing happens.", ch, NULL, victim, TO_NOTVICT);
return;
}
act("You bare your fangs and growl at $N.", ch, NULL, victim,
TO_CHAR);
act("$n bares $s fangs and growls at you.", ch, NULL, victim,
TO_VICT);
act("$n bares $s fangs and growls at $N, and $N flees in terror.", ch, NULL, victim, TO_NOTVICT);
do_flee(victim, "");
WAIT_STATE(victim, 8);
return;
}
WAIT_STATE(ch, 10);
return;
}
void do_moonbeam(CHAR_DATA * ch, char *argument)
{
CHAR_DATA *victim;
char arg1[MAX_INPUT_LENGTH];
argument = one_argument(argument, arg1);
if (IS_NPC(ch))
return;
if (ch->disease != DISEASE_WEREWOLF)
{
send_to_char("Huh?\n\r", ch);
return;
}
if (ch->mana < 500)
{
send_to_char("You do not have enough energy to summon a Moonbeam.\n\r", ch);
return;
}
if (arg1[0] == '\0')
{
send_to_char("Who do you wish to strike?\n\r", ch);
return;
}
if ((victim = get_char_room(ch, arg1)) == NULL)
{
send_to_char("They aren't here.\n\r", ch);
return;
}
if (ch == victim)
return;
if (is_safe(ch, victim) == TRUE)
return;
if (ch->fighting == NULL)
set_fighting(ch, victim);
update_pos(victim);
act("$N is struck by a huge moonbeam.", ch, NULL, victim, TO_CHAR);
act("$N is struck by a deadly beam of moonlight from $n.", ch, NULL,
victim, TO_NOTVICT);
act("You are struck by a deadly beam of moonlight!", ch, NULL, victim,
TO_VICT);
if (IS_GOOD(victim)) victim->hit -= 500;
if (IS_EVIL(victim)) victim->hit -= 1000;
if (IS_NEUTRAL(victim)) victim->hit -= 750;
ch->mana -= 500;
WAIT_STATE(ch, 12);
return;
}
void do_roar(CHAR_DATA * ch, char *argument)
{
CHAR_DATA *victim;
char buf[MAX_STRING_LENGTH];
if (IS_NPC(ch))
return;
if (ch->disease != DISEASE_WEREWOLF)
{
send_to_char
("You let out a violent roar\n\r",
ch);
return;
}
if ((victim = ch->fighting) == NULL)
{
send_to_char("You arent fighting anyone.\n\r", ch);
return;
}
if (number_range(1, 6) == 2)
{
sprintf(buf,
"%s roars and screams, intimidating the hell out of %s.",
ch->name, victim->name);
act(buf, ch, NULL, NULL, TO_ROOM);
sprintf(buf,
"You roar and scream, intimidating the hell out of %s.\n\r",
victim->name);
send_to_char(buf, ch);
do_flee(victim, "");
WAIT_STATE(ch, 18);
return;
}
else
{
stc("You roar loudly.\n\r", ch);
stc("Nothing happens.\n\r", ch);
act("$n roars loudly.", ch, NULL, NULL, TO_ROOM);
WAIT_STATE(ch, 12);
return;
}
}
void do_soulsuck(CHAR_DATA *ch, char *argument )
{
CHAR_DATA *victim;
char buf[MAX_STRING_LENGTH];
char arg[MAX_INPUT_LENGTH];
int dam;
argument = one_argument( argument, arg );
if (IS_NPC(ch)) return;
if (ch->disease == DISEASE_UNDEAD)
{
send_to_char("You dont get this power.\n\r",ch);
return;
}
if (ch->alignment > 0)
{
send_to_char("You simply can't get yourself to do this, it's way to evil.\n\r",ch);
return;
}
if ((victim = get_char_room(ch, arg)) == NULL)
{
send_to_char("They are not here.\n\r", ch);
return;
}
if (is_safe(ch,victim)) return;
if (victim == ch)
{
send_to_char("That doesn't seem like a good idea.\n\r",ch);
return;
}
dam = number_range(5000,6600);
sprintf(buf,"You suck the soul out of $N and use the energy to heal yourself [%d]",dam);
act(buf,ch,NULL,victim,TO_CHAR);
sprintf(buf,"$n sucks at your soul, damn it's nasty, ooo, hurts to [%d]",dam);
act(buf,ch,NULL,victim,TO_VICT);
sprintf(buf,"$n looks at $N and grins.");
act(buf,ch,NULL,victim,TO_NOTVICT);
ch->hit += dam;
victim->hit -= dam;
if (ch->hit > ch->max_hit) ch->hit = ch->max_hit;
if (victim->position > POS_STUNNED)
{
if (victim->fighting == NULL) set_fighting(victim, ch);
if (ch->fighting == NULL) set_fighting(ch, victim);
}
damage (ch, victim, dam, 0, DAM_NEGATIVE, TRUE);
WAIT_STATE(ch,10);
return;
}