/
mudd/docs/html/
mudd/world/
#include <sys/types.h>
#include <ctype.h>
#include <stdio.h>
#include <string.h>
#include <time.h>
#include "mud.h"

int 
is_member (CHAR_DATA * ch, int guildnum)
{
  if (IS_MOB (ch)) 
    return NUM_TIERS; 
  else
    return (ch->pcdata->guilds[guildnum]);
}


void 
do_guild (CHAR_DATA * ch, char *argy)
{  
  int i;
  CHAR_DATA *mob;
  char buf[STD_LENGTH];
  char arg1[SML_LENGTH];
  int guild_num = -1;
  DEFINE_COMMAND ("guild", do_guild, POSITION_STANDING, 0, LOG_NORMAL, "This command allows you to perform guild options at a guild house.")
    if (IS_MOB (ch))
      return;
  argy = one_argy(argy, arg1);
  if (!str_cmp (arg1, "info") || !str_cmp(arg1, "cost") || !str_cmp(arg1,
								    "costs"))
    {
      send_to_char("Help guilds to see information on guilds.\n\r", ch);
      return;
    }		

  for (mob = ch->in_room->people; mob != NULL; mob = mob->next_in_room)
    {
      if (IS_MOB (mob) && mob->pIndexData->opt != NULL && mob->pIndexData->opt->guilds > 0 && mob->pIndexData->opt->guilds <= NUM_GUILDS)
	break;
    }
  if (mob == NULL)
    {
      send_to_char ("There is no guildmaster present here!\n\r", ch);
      return;
    }
  guild_num = mob->pIndexData->opt->guilds -1;
  if (arg1[0] == '\0')
    {
      send_to_char ("\n\rOptions:\n\r---> Guild leave\n\r---> Guild info\n\r---> Guild join\n\r---> Guild status\n\r", ch);
      return;
    }
  
  /*end of GUILD INFO */
  if (!str_cmp (arg1, "status"))
    {
      switch(ch->pcdata->guilds[guild_num])
	{
	case 0:
	default:
	  send_to_char("You are not a member of our guild!\n\r", ch);
	  break;
	case 1:
	  send_to_char("You are an apprentice of our guild!\n\r", ch);
	  break;
	case 2:
	  send_to_char("You are a member of our guild.\n\r", ch);
	  break;
	case 3:
	  send_to_char("You are a trusted member of our guild!\n\r", ch);
	  break;
	case 4:
	  send_to_char("You are a highly respected member of the guild!\n\r", ch);
	  break;
	case 5:
	  send_to_char("You are a master of the guild!\n\r", ch);
	  break;
	}
      return;
    }
  if (!str_cmp (arg1, "leave"))
    {
      
      if (!is_member (ch, (guild_num)))
	{
	  send_to_char ("You aren't even a member!!\n\r", ch);
	  return;
	}
      for (i = 0; i < NUM_GUILDS; i++)
	{
	  if (guild_data[guild_num].stat_modified != NUM_STATS && ch->pcdata->guilds[guild_num] > 2)
	    ch->pcdata->stat[guild_data[guild_num].stat_modified] -=
	      ch->pcdata->guilds[guild_num];
	  for (i = ch->pcdata->guilds[guild_num]; i < 0;i --)
	    ch->pcdata->guild_points += i;
	  ch->pcdata->guilds[guild_num] =0;
	  send_to_char("You are no longer a member of the guild.\n\r", ch);
	  player_preset(ch, "Zlughlkheyn");
	  break;
	}
    }
  
  if (!str_cmp (arg1, "advance") || !str_cmp (arg1, "join"))
    {
      bool can_join = TRUE;
      if (guild_num == GUILD_SORCERER || guild_num == GUILD_BATTLEMASTER || guild_num == GUILD_MYSTIC)
	{
	  if ((guild_num == GUILD_BATTLEMASTER && (ch->pcdata->guilds[GUILD_WARRIOR] - 1 < ch->pcdata->guilds[guild_num] + 1)) && ch->pcdata->guilds[guild_num] < 4)
	    {
	      send_to_char ("You are not a high enough ranking member of the warrior's guild\n\rto advance a tier.\n\r", ch);
	      return;
	    }
	  else if ((guild_num == GUILD_SORCERER && (ch->pcdata->guilds[GUILD_WIZARD] - 1 < ch->pcdata->guilds[guild_num] + 1)) && ch->pcdata->guilds[guild_num] < 4)
	    {
	      send_to_char ("You are not a high enough ranking member of the wizard's guild\n\rto advance a tier.\n\r", ch);
	      return;
	    }
	  else if ((guild_num == GUILD_MYSTIC && (ch->pcdata->guilds[GUILD_HEALER] - 1 < ch->pcdata->guilds[guild_num] + 1)) && ch->pcdata->guilds[guild_num] < 4)
	    {
	      send_to_char ("You are not a high enough ranking member of the healer's guild\n\rto advance a tier.\n\r", ch);
	      return;
	    }
	}
      if (ch->pcdata->guilds[guild_num] > 0 && !str_cmp (arg1, "join"))
	{
	  send_to_char ("You are already a member of our guild.\n\r", ch);
	  send_to_char ("Type guild advance to advance a tier.\n\r", ch);
	  return;
	}
      if (ch->pcdata->guilds[guild_num] >= MAX_TIERS)
	{
	  send_to_char("You are already a master of our arts!\n\r", ch);
	  return;
	}
      if (ch->pcdata->remort_times < ch->pcdata->guilds[guild_num]+1 && guild_num == GUILD_TINKER)
	{
	  sprintf(buf, "You have not remorted enough times to advance a tier!\n\rYou need to have remorted at least %d times to achieve tier %d\n\rin the Tinker's Guild\n\r", ch->pcdata->guilds[guild_num] + 1,
ch->pcdata->guilds[guild_num] + 1);
	  send_to_char (buf, ch);
	  return;
	}
      if (ch->pcdata->guild_points < ch->pcdata->guilds[guild_num]+1 && guild_num != GUILD_TINKER)
	{
	  send_to_char("You do not have enough guild points to advance a tier!\n\rYou need a number of guild points equal to the tier you are trying to attain.\n\r", ch);
	  can_join = FALSE;
	}
      if (tally_coins(ch) < (10000 * (ch->pcdata->guilds[guild_num] + 1)) + (10000 * ch->pcdata->remort_times))
	{
	  sprintf(buf, "You need %d coins to attain this guild tier!\n\r", (10000 * (ch->pcdata->guilds[guild_num] + 1)) + (10000 * ch->pcdata->remort_times));
	  send_to_char(buf, ch);
	  can_join = FALSE;
	}
	  if (ch->pcdata->warpoints < (ch->pcdata->remort_times * ch->pcdata->remort_times * 10) + (10 * (ch->pcdata->guilds[guild_num] + 1)))
	{
	  sprintf(buf, "You need %d warpoints to join attain this guild tier!\n\r", (ch->pcdata->remort_times * ch->pcdata->remort_times * 10) + (10 * (ch->pcdata->guilds[guild_num] + 1)));
	  send_to_char(buf, ch);
	  can_join = FALSE;
	}
      if (!can_join)
	return; 

      ch->pcdata->warpoints -= (ch->pcdata->remort_times * ch->pcdata->remort_times * 10) + (10 * (ch->pcdata->guilds[guild_num] + 1));
      sub_coins ((10000 * (ch->pcdata->guilds[guild_num] + 1)) + (10000 * ch->pcdata->remort_times), ch);
      ch->pcdata->guilds[guild_num]++;
      if (guild_num != GUILD_TINKER)
	ch->pcdata->guild_points -= ch->pcdata->guilds[guild_num];
      if (guild_data[guild_num].stat_modified < NUM_STATS &&
	  ch->pcdata->guilds[guild_num] == 3)
	ch->pcdata->stat[guild_data[guild_num].stat_modified]++;
      if (ch->pcdata->guilds[guild_num] < 2)
	sprintf (buf, "Congratulations! You have become a member of the%s's Guild!\n\r", guild_data[guild_num].what_you_see);
      else
	sprintf(buf, "Congratulations! You have advanced a tier in the%s's Guild!\n\r", guild_data[guild_num].what_you_see);
      send_to_char(buf, ch);
      if (ch->pcdata->guilds[guild_num] < 2)
	sprintf (buf, "Welcome to the%s's guild %s!", guild_data[guild_num].what_you_see, ch->pcdata->name);
      else
	sprintf (buf, "I offer you my congratulations on advancing to Tier %d %s.", ch->pcdata->guilds[guild_num], ch->pcdata->name);
      do_say (mob, buf);
      sprintf (buf, "From now on you shall be known as %s of the%s's guild.", (ch->pcdata->guilds[guild_num] == 1 ? "an apprentice": ch->pcdata->guilds[guild_num] == 2 ? "a member" : ch->pcdata->guilds[guild_num] == 3 ? "a trusted member": ch->pcdata->guilds[guild_num] == 4 ? "a highly respected member": "a master"), guild_data[guild_num].what_you_see);
      do_say (mob, buf);
    }
  return;
}