shadow/
shadow/data/command/
shadow/data/help/
shadow/data/religion/
shadow/data/skill/
#include <sys/types.h>
#include <ctype.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include "merc.h"
#include "const.h"

void make_ring args ( ( CHAR_DATA *victim, CHAR_DATA *victim2 ) );
DECLARE_DO_FUN( do_look );

void do_marry( CHAR_DATA *ch, char *argument)
{
    char arg1[MIL];
    char arg2[MIL];
    CHAR_DATA *victim;
    CHAR_DATA *victim2;

    argument = one_argument( argument, arg1 );
    argument = one_argument( argument, arg2 );

    if ( arg1[0] == '\0' || arg2[0] == '\0' )
    {
       send_to_char("{RSyntax: {Wmarry {M<char1> <char2>{x\n\r",ch);
       return;
    }

    if (!strcmp(arg1, arg2))
    {
        send_to_char("{RYou can not marry anyone to themselves!{x", ch);
	return;
    }

    if ( ((victim = get_char_world(ch,arg1)) == NULL) ||
       ((victim2 = get_char_world(ch,arg2)) == NULL))
    {
       send_to_char("{RBoth characters must be playing!{x\n\r", ch );
       return;
    }

    if ( IS_NPC(victim) || IS_NPC(victim2))
    {
       send_to_char("{RSorry! Mobs can't get married!{x\n\r", ch);
       return;
    }

    if (victim->level < MIN_LEVEL_MARRY || victim2->level < MIN_LEVEL_MARRY)
    {
       send_to_char("{RThey are not of the proper level to marry.{x\n\r", ch);
       return;
    }

    if (victim->pcdata->spouse[0] == '\0' && victim2->pcdata->spouse[0] == '\0')
    {
       printf_to_char( ch, "{GYou now pronounce %s and %s husband and wife.\n\r", victim->name, victim2->name );
       send_to_char("{GYou say 'I do.'{x\n\r", victim);
       send_to_char("{GYou say 'I do.'{x\n\r", victim2);
       act("{W$n {Gand {W$N are now married to each other!{x\n\r", victim, NULL, victim2, TO_NOTVICT);
       info( ch, 0, "{G[INFO]: {R%s and %s are now married to each other.{x\n\r", victim->name, victim2->name );
       victim->pcdata->spouse = str_dup(victim2->name);
       victim2->pcdata->spouse = str_dup(victim->name);
       make_ring( victim, victim2 );
       return;
     }

     else
     {
        send_to_char("{ROne or the other are already wedded!{x\n\r", ch);
        return;
     }

     return;
}

void do_divorce( CHAR_DATA *ch, char *argument)
{
    char arg1[MIL];
    char arg2[MIL];
    CHAR_DATA *victim;
    CHAR_DATA *victim2;

    argument = one_argument( argument, arg1 );
    argument = one_argument( argument, arg2 );

    if ( arg1[0] == '\0' || arg2[0] == '\0' )
    {
       send_to_char("{RSyntax: {Wdivorce {M<char1> <char2>{x\n\r",ch);
       return;
    }

    if ( ((victim = get_char_world(ch,arg1)) == NULL) ||
         ((victim2 = get_char_world(ch,arg2)) == NULL))
    {
       send_to_char("{RBoth characters must be playing!{x\n\r", ch );
       return;
    }

    if ( IS_NPC(victim) || IS_NPC(victim2))
    {
       send_to_char("{RI don't think they're Married to the Mob!{x\n\r", ch);
       return;
    }

   if ( !str_cmp( victim->pcdata->spouse, victim2->name ) && !str_cmp( victim2->pcdata->spouse, victim->name ) )
   {
       printf_to_char( ch, "{RYou give %s and %s their divorce decree.{x\n\r", victim->name, victim2->name );
       printf_to_char( victim, "{RYour divorce from %s is final.{x\n\r", victim2->name );
       printf_to_char( victim2, "{RYour divorce from %s is final.{x\n\r", victim->name );
       info( ch, 0, "{G[INFO]: {R%s and %s have decided to get a divorce.\n\r", victim->name, victim2->name );
       act("{W$n {Gand {W$N {Gswap divorce decrees, they are no-longer married.{x",victim, NULL, victim2, TO_NOTVICT);
       free_string( victim->pcdata->spouse  );
       free_string( victim2->pcdata->spouse );
       victim->pcdata->spouse = str_dup( "" );
       victim2->pcdata->spouse = str_dup( "" );
       return;
   }

   else
   {
       send_to_char("{RThey aren't married, so how can they divorce!{x", ch);
       return;
   }

}

void make_ring( CHAR_DATA *victim, CHAR_DATA *victim2 )
{
    OBJ_DATA * ring;
    OBJ_DATA * ring2;

    ring = create_object( get_obj_index( OBJ_VNUM_DIAMOND_RING ), 0 );
    ring2 = create_object( get_obj_index( OBJ_VNUM_WEDDING_BAND ), 0 );

    switch( victim->sex )
    {
	   case SEX_FEMALE:
	   {
              obj_to_char( ring, victim ); 
              break;
	   }
	
           case SEX_MALE:
	   {
              obj_to_char( ring2, victim ); 
              break;
	   }
	
           case SEX_NEUTRAL:
	   default:
	   {
              obj_to_char( ring2, victim );   
	      break;
	   }
    }

    switch( victim2->sex )
    {
           case SEX_FEMALE:
	   {
               obj_to_char( ring, victim2 );
	       break;
	   }
		
           case SEX_MALE:
	   {
               obj_to_char( ring2, victim2 );
	       break;
	   }
            
	   case SEX_NEUTRAL:
	   default:
	   {
               obj_to_char( ring2, victim2 );
	       break;
	   }
    }
 
    return;
}

void do_spousetalk( CHAR_DATA *ch, char *argument )
{
   CHAR_DATA *spouse;
   char buf[MAX_STRING_LENGTH];

   if (argument[0] == '\0' )
   {
      send_to_char("What do you wish to tell your other half?\n\r", ch);
      return;
   }

   else  
   {
      if ( ( spouse = get_char_world(ch, ch->pcdata->spouse ) ) )
      {
          sprintf(buf, "You say to %s, '%s'\n\r", ch->pcdata->spouse, argument );
          send_to_char(buf, ch);
          sprintf(buf, "%s says to you '%s'\n\r", ch->name, argument );
          send_to_char(buf, spouse);
      }

      else
         send_to_char("Your spouse doesn't seem to be here!", ch);
   }
}

void do_consent( CHAR_DATA *ch )
{
   if (IS_NPC(ch))
       return;
    
   if ( IS_SET(ch->act, PLR_CONSENT) )
   {
       send_to_char( "You no longer give consent.\n\r", ch);
       REMOVE_BIT(ch->act, PLR_CONSENT);
       return;
   }
                           
   send_to_char( "You now give consent to Married!\n\r", ch);
   SET_BIT(ch->act, PLR_CONSENT);
   return;
}

void do_spgate( CHAR_DATA *ch, char *argument )
{
    char buf[MAX_STRING_LENGTH];
    CHAR_DATA *victim;
    int cost = 40;

    if (!IS_AWAKE( ch ) )
    {
	send_to_char( "In your dreams or what?\n\r", ch );
	return;
    }

    if ( ch->fighting != NULL )
    {
	send_to_char( "Not while you are fighting.\n\r", ch );
	return;
    }

    if ( IS_SET( ch->in_room->room_flags, ROOM_NO_RECALL ) )
    {
	send_to_char( "You failed.\n\r", ch );
	return;
    }

    if ( ch->pcdata->spouse[0] == '\0' )
    {
	send_to_char( "But you are not married!\n\r", ch );
	return;
    }

    if ( ( victim = get_char_world( ch, ch->pcdata->spouse ) ) == NULL )
    {
	sprintf( buf, "%s is not connected.\n\r", victim->pcdata->spouse );
	send_to_char( buf, ch );
	return;
    }

    if ( IS_SET( victim->in_room->room_flags, ROOM_NO_RECALL ) ||
	 IS_SET( victim->in_room->room_flags, ROOM_PRIVATE ) ||
	 IS_SET( victim->in_room->room_flags, ROOM_SOLITARY ) ||
	 IS_SET( victim->in_room->room_flags, ROOM_GODS_ONLY ) ||
	 IS_SET( victim->in_room->room_flags, ROOM_IMP_ONLY ) )
    {
	send_to_char( "You failed.\n\r", ch );
	return;
    }
   
    if ( ch->mana > cost )
        ch->mana -= cost;    
    
    else
    {
        printf_to_char( ch, "You need at least %d mana to spouse gate.\n\r", cost );
        return;
    }

    act( "$n steps into a rose-colored gate and disappears.", ch, NULL, NULL, TO_ROOM );

    char_from_room( ch );
    char_to_room( ch, victim->in_room );
    act( "$n steps into the room from a rose-colored gate.", ch, NULL, NULL, TO_ROOM );
    do_look( ch, "auto" );
}