#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; }