#if defined(macintosh)
#include <types.h>
#else
#include <sys/types.h>
#endif
#include <ctype.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include "emlen.h"
CLAN_DATA *clan_index_free;
CLAN_DATA *clan_index_free_2;
CLAN_DATA *
new_clan_index (void)
{
CLAN_DATA *ClanData;
int i;
if (clan_index_free == NULL)
{
ClanData = mem_alloc (sizeof (*ClanData));
top_clan++;
}
else
{
ClanData = clan_index_free;
clan_index_free = clan_index_free->next;
}
ClanData->leader[0] = '\0';
ClanData->name[0] = '\0';
ClanData->alignment = 0;
ClanData->minlev = 0;
ClanData->start_vnum = 0;
ClanData->shitlist = FALSE;
for (i = 0; i < MAX_CLAN_STORAGE; i++)
ClanData->storage[i] = NULL;
for (i= 0; i <= 100; i++)
ClanData->members[i] = NULL;
return ClanData;
}
void
do_cindex_2 (CHAR_DATA * ch, char *argy)
{
char buf[STD_LENGTH];
char line[STD_LENGTH];
char arg[SML_LENGTH];
CLAN_DATA *clan;
int iAtt;
int cnt;
one_argy (argy, arg);
if (arg[0] == '\0')
{
send_to_char ("Cindex which clan?\n\r", ch);
return;
}
if ((clan = get_clan_index_2 (atoi (arg))) == NULL)
{
send_to_char ("Invalid clan VNUM.\n\r", ch);
return;
}
sprintf (buf, "\n\r\x1B[1;30m[\x1B[1;34mClan Number: %d\x1B[1;30m] \x1B[1;37m(%s)\x1B[0m\n\r\n\r", clan->vnum, clan->name);
send_to_char (buf, ch);
sprintf (buf, "Clan Leader/Founder: \x1B[1;37m%s\x1B[0m\n\r", clan->leader);
send_to_char (buf, ch);
sprintf (buf, "Minimum Level Entry: %d\n\r", clan->minlev);
send_to_char (buf, ch);
sprintf (buf, "Clanzone starting Vnum: %d\n\r", clan->start_vnum);
send_to_char (buf, ch);
if (clan-> alignment >= 0 && clan->alignment < NUM_ALIGN)
{
sprintf(buf, "Clan alignment: %s,\n\r\n\r", align_info[clan->alignment].name);
send_to_char (buf, ch);
}
if (clan->shitlist && LEVEL(ch) > 100)
send_to_char("This clan is currently on the shitlist.\n\r", ch);
sprintf (buf, "Clan bank: %d gold and %d warpoints.\n\r", clan_bank[clan->vnum].gold, clan_bank[clan->vnum].warpoints);
send_to_char (buf, ch);
sprintf (buf, "-----[\x1B[1;34mClan Members\x1B[37;0m]----------------------->\n\r\n\r");
send_to_char (buf, ch);
cnt = 0;
line[0] = '\0';
for (iAtt = 0; iAtt < 100; iAtt = iAtt + 1)
{
if (clan->members[iAtt] == NULL || clan->members[iAtt][0] == ' ')
continue;
sprintf (buf, " %-15s ", clan->members[iAtt]);
strcat (line, buf);
++cnt;
if (cnt == 4)
{
cnt = 0;
strcat (line, "\n\r");
send_to_char (line, ch);
line[0] = '\0';
}
}
if (cnt != 0)
{
strcat (line, "\n\r");
send_to_char (line, ch);
}
return;
}
void
do_cindex (CHAR_DATA * ch, char *argy)
{
char buf[STD_LENGTH];
char line[STD_LENGTH];
char arg[SML_LENGTH];
CLAN_DATA *clan;
int iAtt;
int cnt;
one_argy (argy, arg);
if (arg[0] == '\0')
{
send_to_char ("Cindex which clan?\n\r", ch);
return;
}
if ((clan = get_clan_index (atoi (arg))) == NULL)
{
send_to_char ("Invalid clan VNUM.\n\r", ch);
return;
}
sprintf (buf, "\n\r\x1B[1;30m[\x1B[1;34mClan Number: %d\x1B[1;30m] \x1B[1;37m(%s)\x1B[0m\n\r\n\r", clan->vnum, clan->name);
send_to_char (buf, ch);
sprintf (buf, "Clan Leader/Founder: \x1B[1;37m%s\x1B[0m\n\r", clan->leader);
send_to_char (buf, ch);
sprintf (buf, "Minimum Level Entry: %d\n\r", clan->minlev);
send_to_char (buf, ch);
sprintf (buf, "Clanzone starting Vnum: %d\n\r", clan->start_vnum);
send_to_char (buf, ch);
if (clan->alignment < 0 || clan->alignment > NUM_ALIGN-1)
{
clan->alignment = 0;
save_clans();
}
sprintf(buf, "Clan alignment: %s\n\r\n\r\x1b[0;37m", align_info[clan->alignment].name);
send_to_char(buf, ch);
if (clan->shitlist && LEVEL(ch) > 100)
send_to_char("This clan is currently on the shitlist.\n\r", ch);
sprintf (buf, "Clan bank: %d gold and %d warpoints.\n\r", clan_bank[clan->vnum].gold, clan_bank[clan->vnum].warpoints);
send_to_char (buf, ch);
sprintf (buf, "-----[\x1B[1;34mClan Members\x1B[37;0m]----------------------->\n\r\n\r");
send_to_char (buf, ch);
cnt = 0;
line[0] = '\0';
for (iAtt = 0; iAtt < 100; iAtt = iAtt + 1)
{
if (clan->members[iAtt] == NULL || clan->members[iAtt][0] == ' ')
continue;
sprintf (buf, " %-15s ", clan->members[iAtt]);
strcat (line, buf);
++cnt;
if (cnt == 4)
{
cnt = 0;
strcat (line, "\n\r");
send_to_char (line, ch);
line[0] = '\0';
}
}
if (cnt != 0)
{
strcat (line, "\n\r");
send_to_char (line, ch);
}
return;
}
CLAN_DATA *
new_clan_index_2 (void)
{
CLAN_DATA *ClanData;
int iAttack;
if (clan_index_free_2 == NULL)
{
ClanData = mem_alloc (sizeof (*ClanData));
top_clan_2++;
}
else
{
ClanData = clan_index_free_2;
clan_index_free_2 = clan_index_free_2->next;
}
ClanData->leader[0] = '\0';
ClanData->name[0] = '\0';
ClanData->alignment = 0;
ClanData->minlev = 0;
ClanData->start_vnum = 0;
ClanData->shitlist = FALSE;
for (iAttack = 0; iAttack <= 100; iAttack++)
ClanData->members[iAttack] = NULL;
return ClanData;
}
void
cedit (CHAR_DATA * ch, char *argy)
{
CLAN_DATA *ClanData;
char arg[STD_LENGTH];
char arg1[STD_LENGTH];
char arg2[STD_LENGTH];
char buf[STD_LENGTH];
int value;
strcpy (arg, argy);
ClanData = (CLAN_DATA *) ch->desc->pEdit;
smash_tilde (argy);
argy = one_argy (argy, arg1);
strcpy (arg2, argy);
value = atoi (arg2);
if (!str_cmp (arg1, "show") || arg1[0] == '\0')
{
sprintf (buf, "%d", ClanData->vnum);
if (ch->fgt->attacker_turn)
do_cindex_2 (ch, buf);
else
do_cindex (ch, buf);
return;
}
if (!str_cmp (arg1, "done"))
{
ch->desc->pEdit = NULL;
ch->desc->connected = CON_PLAYING;
send_to_char ("Please remember to ASAVE CLANS. :)\n\r", ch);
return;
}
if (!str_cmp (arg1, "leader") && arg2[0] != '\0')
{
strcpy (ClanData->leader, arg2);
send_to_char ("Clan Leader Set.\n\r", ch);
return;
}
if (!str_cmp (arg1, "name") && arg2[0] != '\0')
{
strcpy (ClanData->name, arg2);
send_to_char ("Clan Name Set.\n\r", ch);
return;
}
if (!str_cmp(arg1, "shitlist"))
{
TOGGLE_BIT(ClanData->shitlist,1);
send_to_char("Ok shitlist toggled.\n\r", ch);
return;
}
if ((!str_cmp( arg1, "alignment") || !str_cmp(arg1, "align")) && is_number(arg2) && value >= 0 && value < NUM_ALIGN)
{
ClanData->alignment = value;
send_to_char("Ok, clan alignment changed.\n\r", ch);
return;
}
if ((!str_cmp (arg1, "start") || !str_cmp (arg1, "vnum")) &&
is_number (arg2) && value >= 0)
{
ROOM_DATA *rcheck;
rcheck = get_room_index (value);
if (rcheck == NULL)
{
send_to_char ("Invalid Starting VNUM.\n\r", ch);
return;
}
ClanData->start_vnum = value;
send_to_char ("Clan starting VNUM of clanhouse set.\n\r", ch);
return;
}
if (
(!str_cmp (arg1, "minlev") ||
!str_cmp (arg1, "level") ||
!str_cmp (arg1, "minimum") ||
!str_cmp (arg1, "minlevel"))
&& is_number (arg2) && value >= 0)
{
ClanData->minlev = value;
send_to_char ("Clan minimum entry level set.\n\r", ch);
return;
}
if (!str_cmp (arg1, "add") && arg2[0] != '\0' && strlen (arg2) > 2)
{
int cnum;
char buffy[255];
arg2[0] = UPPER (arg2[0]);
if (check_clan (ClanData, arg2))
{
send_to_char ("That person is already a member!\n\r", ch);
return;
}
cnum = clan_free (ClanData);
if (cnum < 0)
{
send_to_char ("Clan is FULL!\n\r", ch);
return;
}
ClanData->members[cnum] = str_dup (arg2);
send_to_char ("Clan member added!\n\r", ch);
sprintf (buffy, "%s is now a member of the clan!", arg2);
clan_notify (buffy, ClanData->vnum);
return;
}
if (!str_cmp (arg1, "remove") && arg2[0] != '\0' && strlen (arg2) > 2)
{
int i;
bool foundy;
foundy = FALSE;
for (i = 0; i < 100; i++)
{
if (!str_cmp (ClanData->members[i], arg2))
{
free_string (ClanData->members[i]);
ClanData->members[i] = NULL;
foundy = TRUE;
break;
}
}
if (foundy)
send_to_char ("Clan member removed.\n\r", ch);
else
send_to_char ("Clan member not found.\n\r", ch);
return;
}
interpret (ch, arg);
return;
}
void
do_cadd (CHAR_DATA * ch, char *argy)
{
CLAN_DATA *ClanData;
char t[1000];
int i;
DEFINE_COMMAND ("cadd", do_cadd, POSITION_DEAD, 0, LOG_NORMAL, "Adds a member to the clan. For the clan leader only.")
if (IS_MOB (ch))
return;
strcpy (t, argy);
for (i = 0; t[i] != '\0'; i++)
{
if (!isalpha (t[i]))
{
send_to_char ("No SPACES or non-letters can't be used!\n\r", ch);
return;
}
}
if (clan_number (ch) < 1)
{
send_to_char ("You are not a clan leader!!\n\r", ch);
return;
}
if (argy == "" || argy[0] == '\0')
{
send_to_char ("Syntax: CADD <membername>\n\r", ch);
return;
}
ClanData = get_clan_index (clan_number (ch));
if (str_cmp (ch->pcdata->name, ClanData->leader))
{
send_to_char ("Only the clan leader may add members.\n\r", ch);
return;
}
if (scan_clan (argy))
{
send_to_char ("That person is already in another clan!\n\r", ch);
return;
}
{
int cnum;
CHAR_DATA * victim;
char buffy[255];
argy[0] = UPPER (argy[0]);
if (check_clan (ClanData, argy))
{
send_to_char ("That person is already a member!\n\r", ch);
return;
}
if ((victim = get_char_world(ch, argy)) == NULL)
{
send_to_char("They aren't here to add to the clan!\n\r", ch);
return;
}
if (DIFF_ALIGN(ch, victim))
{
send_to_char("They aren't here to add to the clan!\n\r", ch);
return;
}
if (victim !=NULL && IS_SET(victim->act, PLR_NOCLAN))
{
send_to_char ("That person is not permitted to join a clan.\n\r",ch);
return;
}
cnum = clan_free (ClanData);
if (cnum < 0)
{
send_to_char ("Clan is FULL!\n\r", ch);
return;
}
strcpy (buffy, argy);
ClanData->members[cnum] = str_dup (buffy);
{
CHAR_DATA *victim;
if ((victim = get_char_world(ch, argy)) != NULL && IS_PLAYER(victim))
victim->pcdata->clan = cnum;
}
send_to_char ("Clan member added!\n\r", ch);
sprintf (buffy, "%s is now a member of the clan!", argy);
clan_notify (buffy, ClanData->vnum);
save_clans ();
return;
}
return;
}
void
do_cremove (CHAR_DATA * ch, char *argy)
{
CLAN_DATA *ClanData;
DEFINE_COMMAND ("cremove", do_cremove, POSITION_DEAD, 0, LOG_NORMAL, "Removes a member of the clan. For the clan leader only.")
if (IS_MOB (ch))
return;
if (clan_number (ch) < 1)
{
send_to_char ("You are not a clan leader!!\n\r", ch);
return;
}
if (argy == "" || argy[0] == '\0')
{
send_to_char ("Syntax: CREMOVE <membername>\n\r", ch);
return;
}
ClanData = get_clan_index (clan_number (ch));
if (str_cmp (ch->pcdata->name, ClanData->leader))
{
send_to_char ("Only the clan leader may remove members.\n\r", ch);
return;
}
{
int i;
bool foundy;
foundy = FALSE;
for (i = 0; i < 100; i++)
{
if (!str_cmp (ClanData->members[i], argy))
{
free_string (ClanData->members[i]);
ClanData->members[i] = NULL;
foundy = TRUE;
break;
}
}
if (foundy)
{
CHAR_DATA *victim;
if ((victim = get_char_world(ch, argy)) != NULL && IS_PLAYER(victim))
victim->pcdata->clan = -1;
send_to_char ("Clan member removed.\n\r", ch);
}
else
send_to_char ("Clan member not found.\n\r", ch);
save_clans ();
return;
}
return;
}
void
do_clan_quit (CHAR_DATA * ch, char *argy)
{
int k;
CLAN_DATA *ClanData;
DEFINE_COMMAND ("cquit", do_clan_quit, POSITION_DEAD, 0, LOG_NORMAL, "Allows you to leave your current clan.")
k = clan_number (ch);
if (k < 1)
{
send_to_char ("You must first be in a clan before you can leave the clan!\n\r", ch);
return;
}
ClanData = get_clan_index (k);
if (ClanData != NULL)
{
int i;
bool foundy;
char buffy[500];
foundy = FALSE;
for (i = 0; i < 100; i++)
{
if (!str_cmp (ClanData->members[i], NAME (ch)))
{
free_string (ClanData->members[i]);
ClanData->members[i] = NULL;
foundy = TRUE;
break;
}
}
if (foundy)
{
send_to_char ("You have left the clan.\n\r", ch);
ch->pcdata->clan = -1;
}
else
send_to_char ("Clan member not found.\n\r", ch);
sprintf (buffy, "%s has left the clan!!", NAME (ch));
clan_notify (buffy, k);
save_clans ();
return;
}
return;
}
void
clan_check_align (CHAR_DATA * ch)
{
int ii;
int i;
CLAN_DATA *ClanData;
ii = clan_number (ch);
if (ii < 1)
return;
ClanData = get_clan_index (ii);
if (ClanData->alignment != ch->pcdata->alignment)
{
send_to_char ("You are no longer a member of your clan because of your alignment change!\n\r", ch);
for (i = 0; i < 100; i++)
{
if (!str_cmp (ClanData->members[i], RNAME (ch)))
{
free_string (ClanData->members[i]);
ClanData->members[i] = NULL;
break;
}
}
if (!str_cmp (ClanData->leader, RNAME (ch)))
strcpy (ClanData->leader, "Leaderless!");
return;
}
return;
}
int
clan_number (CHAR_DATA * ch)
{
CLAN_DATA *clan;
int j;
if (IS_MOB (ch))
return -1;
for (j = 0; j < 20; j++)
{
for (clan = clan_index_hash[j]; clan != NULL; clan = clan->next)
{
int i;
if (!str_cmp (RNAME (ch), clan->leader))
return clan->vnum;
for (i = 0; i < 100; i++)
{
if (clan->members[i] != NULL && !str_cmp (RNAME (ch), clan->members[i]))
{
return clan->vnum;
}
}
}
}
return -1;
}
int
clan_number_2 (CHAR_DATA * ch)
{
CLAN_DATA *clan;
if (IS_MOB (ch))
return -1;
for
(clan = get_clan_index_2 (1); clan != NULL; clan = get_clan_index_2 (clan->vnum + 1) /*clan->next */ )
{
int i;
if (!str_cmp (RNAME (ch), clan->leader))
return clan->vnum;
for (i = 0; i < 100; i++)
{
if (clan->members[i] != NULL && !str_cmp (RNAME (ch), clan->members[i]))
{
return clan->vnum;
}
}
}
return -1;
}
bool
scan_clan_2 (char *arg)
{
CLAN_DATA *clan;
for
(clan = get_clan_index_2 (1); clan != NULL; clan = get_clan_index_2 (clan->vnum + 1) /*clan->next */ )
{
int i;
if (!str_cmp (arg, clan->leader))
return TRUE;
for (i = 0; i < 100; i++)
{
if (clan->members[i] != NULL && !str_cmp (arg, clan->members[i]))
{
return TRUE;
}
}
}
return FALSE;
}
bool
check_clan (CLAN_DATA * clan, char *argy)
{
int i;
if (!str_cmp (argy, clan->leader))
return TRUE;
for (i = 0; i < 100; i++)
{
if (clan->members[i] == NULL)
continue;
if (!str_cmp (clan->members[i], argy))
return TRUE;
}
return FALSE;
}
bool
scan_clan (char *arg)
{
CLAN_DATA *clan;
for
(clan = get_clan_index (1); clan != NULL; clan = get_clan_index (clan->vnum + 1) /*clan->next */ )
{
int i;
if (!str_cmp (arg, clan->leader))
return TRUE;
for (i = 0; i < 100; i++)
{
if (clan->members[i] != NULL && !str_cmp (arg, clan->members[i]))
{
return TRUE;
}
}
}
return FALSE;
}
int
clan_free (CLAN_DATA * clan)
{
int i;
for (i = 0; i < 100; i++)
{
if (clan->members[i] == NULL)
return i;
}
return -1;
}
void
do_clan (CHAR_DATA * ch, char *argy) /*CLANS by Owen Emlen */
{
int ii;
char buf[450];
CLAN_DATA *t;
DEFINE_COMMAND ("clan", do_clan, POSITION_DEAD, 0, LOG_NORMAL, "Shows 'clan list' or clan info on your current clan.")
if (!str_cmp (argy, "list"))
{
int i;
for (i = 0; i < 20; i++)
{
for (t = clan_index_hash[i]; t != NULL; t = t->next)
{
sprintf (buf, "%d) %s %s - Leader: %s\n\r", t->vnum, t->name,
align_info[t->alignment].name, t->leader);
send_to_char (buf, ch);
}
}
return;
}
ii = clan_number (ch);
if (ii < 1)
{
send_to_char ("You aren't in a clan!\n\r", ch);
return;
}
sprintf (buf, "%d", ii);
do_cindex (ch, buf);
return;
}
void
do_clan_2 (CHAR_DATA * ch, char *argy) /*CLANS by Owen Emlen */
{
int ii;
char buf[450];
CLAN_DATA *t;
DEFINE_COMMAND ("clan2", do_clan_2, POSITION_DEAD, 0, LOG_NORMAL, "Shows 'clan2 list' or clan info on your current clan.")
if (!str_cmp (argy, "list"))
{
int i;
for (i = 0; i < 20; i++)
{
for (t = clan_index_hash_2[i]; t != NULL; t = t->next)
{
sprintf (buf, "%d) %s\n\r", t->vnum, t->name);
send_to_char (buf, ch);
}
}
return;
}
ii = clan_number_2 (ch);
if (ii < 1)
{
send_to_char ("You aren't in a secondary clan!\n\r", ch);
return;
}
sprintf (buf, "%d", ii);
do_cindex_2 (ch, buf);
return;
}