#include <sys/types.h>
#include <stdio.h>
#include <string.h>
#include <time.h>
#include "merc.h"
void do_grab(CHAR_DATA *ch, char *argument )
{
char arg[MAX_INPUT_LENGTH];
CHAR_DATA *victim;
char buf[MAX_STRING_LENGTH];
one_argument( argument,arg);
if (IS_NPC(ch)) return;
if (!IS_SPHERE(ch, SPHERE_ILLUSIONIST))
{
send_to_char("#0This is an Illusionist Sphere Power.#n\n\r",ch);
return;
}
if (!IS_AFFECTED(ch, AFF_SHADOWPLANE))
{
send_to_char("You need to be in the Shadowplane, first!\n\r",ch);
return;
}
if (ch->in_room != NULL)
{
if (IS_SET (ch->in_room->room_flags, ROOM_ARENA))
{
send_to_char("Your in the arena.\n\r",ch);
return;
}
}
if ( arg[0] == '\0' )
{
send_to_char( "Who do you wish to Grab?\n\r", ch );
return;
}
if ((victim = get_char_room( ch, arg)) == NULL)
{
send_to_char("They arent here.\n\r",ch);
return;
}
if (IS_AFFECTED(victim, AFF_SHADOWPLANE))
{
send_to_char("They are already in the Shadowplane!\n\r",ch);
return;
}
if (IS_NPC(victim))
{
send_to_char("You cannot Grab a mobile!\n\r",ch);
return;
}
sprintf(buf,
"%s pulls %s into the Shadowplane.",ch->name,victim->name);
act(buf,ch,NULL,NULL,TO_ROOM);
sprintf(buf,
"You pull %s into the Shadowplane!\n\r",victim->name);
send_to_char(buf,ch);
sprintf(buf,
"%s pulls you into the Shadowplane!\n\r",ch->name);
act(buf,ch,NULL,victim,TO_VICT);
WAIT_STATE(ch, 8);
SET_BIT(victim->affected_by, AFF_SHADOWPLANE);
return;
}
void do_shadowsight( CHAR_DATA *ch, char *argument )
{
char arg [MAX_INPUT_LENGTH];
argument = one_argument( argument, arg );
if (IS_NPC(ch)) return;
if (!IS_SPHERE(ch, SPHERE_ILLUSIONIST))
{
send_to_char("#0This is an Illusionist Sphere Power.#n\n\r",ch);
return;
}
if (IS_AFFECTED(ch,AFF_SHADOWSIGHT) )
{
send_to_char("You can no longer see between planes.\n\r",ch);
REMOVE_BIT(ch->affected_by, AFF_SHADOWSIGHT);
return;
}
send_to_char("You can now see between planes.\n\r",ch);
SET_BIT(ch->affected_by, AFF_SHADOWSIGHT);
return;
}
void do_shadowplane( CHAR_DATA *ch, char *argument )
{
OBJ_DATA *obj;
char arg [MAX_INPUT_LENGTH];
argument = one_argument( argument, arg );
if (IS_NPC(ch)) return;
if (!IS_SPHERE(ch, SPHERE_ILLUSIONIST))
{
send_to_char("#0This is an Illusionist Sphere Power.#n\n\r",ch);
return;
}
if ( arg[0] == '\0' )
{
if (!IS_AFFECTED(ch, AFF_SHADOWPLANE))
{
if (has_timer(ch)) return;
send_to_char("You fade into the plane of shadows.\n\r",ch);
act("The shadows flicker and swallow up $n.",ch,NULL,NULL,TO_ROOM);
SET_BIT(ch->affected_by, AFF_SHADOWPLANE);
do_look(ch,"auto");
return;
}
REMOVE_BIT(ch->affected_by, AFF_SHADOWPLANE);
send_to_char("You fade back into the real world.\n\r",ch);
act("The shadows flicker and $n fades into existance.",ch,NULL,NULL,TO_ROOM);
do_look(ch,"auto");
return;
}
if ( ( obj = get_obj_here( ch, arg ) ) == NULL )
{
send_to_char( "What do you wish to toss into the shadow plane?\n\r", ch );
return;
}
if (IS_AFFECTED(ch, AFF_SHADOWPLANE))
send_to_char( "You toss it to the ground and it vanishes.\n\r", ch );
else
send_to_char( "You toss it into a shadow and it vanishes.\n\r", ch );
return;
}
void do_formillusion(CHAR_DATA * ch, char *argument)
{
CHAR_DATA *victim;
char buf[MAX_INPUT_LENGTH];
if (IS_NPC(ch))
return;
if (!IS_SPHERE(ch, SPHERE_ILLUSIONIST))
{
send_to_char("#0You dont have the illusion sphere.#n\n\r", ch);
return;
}
if (ch->pcdata->followers > 4)
{
send_to_char("Nothing happens.\n\r", ch);
return;
}
ch->pcdata->followers++;
victim = create_mobile(get_mob_index(2031));
victim->short_descr = str_dup(ch->name);
printf(buf, "%s is hovering here.\n\r", ch->name);
victim->long_descr = str_dup(buf);
victim->name = str_dup(ch->name);
victim->level = 200;
victim->max_hit = ch->max_hit;
victim->hit = victim->max_hit;
victim->max_mana = ch->max_mana;
victim->mana = victim->max_mana;
victim->max_move = ch->max_move;
victim->move = victim->max_move;
victim->hitroll = ch->hitroll;
victim->damroll = ch->damroll;
SET_BIT(victim->flag2, VAMP_CLONE);
SET_BIT(victim->act, ACT_NOEXP);
char_to_room(victim, ch->in_room);
ch->pcdata->condition[COND_THIRST] -= 30;
act("You concentrate your powers and form an illusion of yourself.",
ch, NULL, victim, TO_CHAR);
act("$n waves $s hands and splits in two.", ch, NULL, victim,
TO_ROOM);
return;
}
void do_illusionaryclone(CHAR_DATA *ch, char *argument)
{
int illusioncost = 5;
if (!IS_SPHERE(ch, SPHERE_ILLUSIONIST))
{
send_to_char("#0You dont have the illusion sphere.#n\n\r", ch);
return;
}
if (!IS_ITEMAFF(ch, ITEMA_ILLUSIONS)
&& ch->practice >= illusioncost)
{
SET_BIT(ch->itemaffect, ITEMA_ILLUSIONS);
ch->practice -= illusioncost;
send_to_char
("You conjure several images of yourself, making it impossibly to tell which is really you.\n\r",
ch);
return;
}
else if (IS_ITEMAFF(ch, ITEMA_ILLUSIONS))
{
send_to_char
("You cannot summon any more illusions.\n\r",
ch);
return;
}
else
{
send_to_char
("it costs 5 primal to invoke the illusions of yourself.\n\r",
ch);
return;
}
return;
}