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