/***************************************************************************
* God Wars Mud copyright (C) 1994, 1995, 1996 by Richard Woolcock *
* *
* Legend of Chrystancia copyright (C) 1999, 2000, 2001 by Matthew Little *
* This mud is NOT to be copied in whole or in part, or to be run without *
* the permission of Matthew Little. Nobody else has permission to *
* authorise the use of this code. *
***************************************************************************/
#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"
/* Local functions... */
void do_notag(CHAR_DATA *ch, char *argument);
void game_in_play(CHAR_DATA *ch, char *name);
void do_tag( CHAR_DATA *ch, char *argument )
{
CHAR_DATA *victim;
char name[MAX_STRING_LENGTH];
char buf[MAX_STRING_LENGTH];
name[0]='\0';
game_in_play(ch, name);
if (IS_NPC(ch))
return;
if ( argument[0] == '\0' )
{
send_to_char("Who do you want to tag?\n\r", ch);
return;
}
if ( strcmp(argument,"show")==0 )
{
if ( name[0] == '\0' )
{
send_to_char("There is no game of tag in progress, why not start one!\n\r", ch);
return;
}
else
{
sprintf(buf, "%s is currently IT!\n\r", name);
send_to_char(buf, ch);
return;
}
}
if ( strcmp(argument,"quit")==0 )
{
if (IS_SET(ch->more, MORE_TAG ))
{
REMOVE_BIT(ch->more, MORE_TAG);
send_to_char("You are nolonger playing TAG.\n\r", ch);
sprintf(buf, "%s has quit the TAG Game, Tag Over", ch->name);
do_taginfo(ch, buf);
return;
}
else
{
send_to_char("But you aren't IT!\n\r", ch);
return;
}
}
victim = get_char_world(ch,argument);
if ( victim == NULL )
{
send_to_char( "They aren't playing!\n\r", ch);
return;
}
if ( IS_NPC(victim) )
{
send_to_char("Sorry! NPC's can't play tag!\n\r", ch);
return;
}
if (IS_SET(victim->more, MORE_NOTAG) )
{
send_to_char("They don't want to play tag... Spoil sports!\n\r", ch);
return;
}
if ( (name[0] == '\0' ) ) /* No Game in progress... */
{
if ( ch->name == victim->name ) /* Player tags self... */
{
SET_BIT(victim->more, MORE_TAG);
send_to_char("You tag yourself, Now go get someone!\n\r", ch);
sprintf(buf,"%s has started a game of TAG, and is IT", ch->name);
do_taginfo(ch, buf);
return;
}
else /* Player tags someone else... */
{
if ((ch->in_room->vnum == victim->in_room->vnum) && can_see(ch, victim)) /* Players can see eachother... */
{
SET_BIT(victim->more, MORE_TAG );
sprintf(buf, "%s Pounces on you shouting 'TAG! You're IT!'\n\r", ch->name);
send_to_char(buf, victim);
sprintf(buf, "You pounce on %s and shout 'TAG! You're IT!'\n\r", victim->name);
send_to_char(buf, ch);
sprintf(buf, "%s has started a game of TAG, and %s is IT!\n\r", ch->name, victim->name);
do_taginfo(ch, buf);
return;
}
else /* Players can't see eachother! */
{
send_to_char("You can't see anyone by that name...\n\r", ch);
return;
}
}
}
else /* There is a game in play... */
{
if (!IS_SET(ch->more, MORE_TAG) ) /* The player calling tag isn't IT */
{
sprintf(buf, "There is allready a game in play, and %s is IT!\n\r", name);
send_to_char(buf, ch);
return;
}
else /* The player calling tag is IT */
{
if (ch->name == victim->name ) /* Player tags self... */
{
send_to_char("Tagging yourself won't get you anywhere!\n\r", ch);
return;
}
else /* Player Tags someone else... */
{
if ((ch->in_room->vnum == victim->in_room->vnum) && can_see(ch, victim)) /* Players can see eachother... */
{
SET_BIT(victim->more, MORE_TAG );
REMOVE_BIT(ch->more, MORE_TAG );
sprintf(buf, "%s Pounces on you shouting 'TAG! You're IT!'\n\r", ch->name);
send_to_char(buf, victim);
sprintf(buf, "You pounce on %s and shout 'TAG! You're IT!'\n\r", victim->name);
send_to_char(buf, ch);
sprintf(buf, "%s has just tagged %s, %s is now IT!", ch->name, victim->name, victim->name);
do_taginfo(ch, buf);
return;
}
else /* Players can't see eachother... */
{
send_to_char("You can't see anyone by that name...\n\r", ch);
return;
}
} /* End of Player Tags someone else... */
} /* End of Player calling tag is IT */
} /* End of there is a game in play */
} /* End of do_tag */
/********************************************************************/
void do_notag(CHAR_DATA *ch, char *argument) /*Removes a players TAG flag if set... */
{
if (IS_SET (ch->more, MORE_NOTAG ) )
{
send_to_char("You now allow people to tag you. (YAY!)\n\r", ch);
REMOVE_BIT( ch->more, MORE_NOTAG );
return;
}
else
{
send_to_char("You nolonger let people tag you... (Spoil Sport!)\n\r", ch);
SET_BIT( ch->more, MORE_NOTAG );
return;
}
}
/********************************************************************/
void game_in_play(CHAR_DATA *ch, char *name)
{
CHAR_DATA *on_it;
DESCRIPTOR_DATA *d;
for ( d = first_descriptor; d; d = d->next )
{
if ( d->connected == CON_PLAYING && IS_SET(d->character->more, MORE_TAG) )
{
on_it = d->character;
strcpy(name, d->character->name);
}
}
return;
}