struct { byte chclass; char *in_message; room_vnum join_room; } guild_data[NUM_CLASSES] = { /* you could also expand this to have more info for each guild. */ { CLASS_MAGIC_USER, "The high magus calmly writes your name into the guild roster.\r\n", 3023 }, { CLASS_CLERIC, "Herman, the cleric guildmaster, nods at you and accepts you into the guild.\r\n", 3024 }, { CLASS_THIEF, "Fingers McGee glances you over and accepts you into the guild.\r\n", 3025 }, { CLASS_WARRIOR, "The warrior guildmaster laughs loudly and accepts you into the guild.\r\n", 3026 } }; /* make the "enroll" command point to do_not_here in the command list. Then attach this special procedure to the appropriate rooms */ SPECIAL(enroll) { int i; /* doesn't need any arguments, since you can only enroll in one guild per room. */ for (i = 0; i < NUM_CLASSES; i++) { if (world[IN_ROOM(ch)].number == guild_data[i].join_room) break; else if (i == NUM_CLASSES-1) { /* we can only get here if there were no matches. log an error. */ log("SYSERR: enroll spec_proc (wrongly) attached to room #%d", world[IN_ROOM(ch)].number); return (TRUE); } } /* alright, we can assume everything is good to go. */ GET_CLASS(ch) = guild_data[i].chclass; send_to_char(guild_data[i].in_message, ch); return (TRUE); } Alright, that should work, and it makes it easily expandable also. Read through it and e-mail me privately if you have any questions about it. Oh, and it's mailer code, so there's probably a bug or two (I expect the struct to have a problem, it just seems wrong to me). Also, you might want to set up a system so they can change guilds if they want to, but that has a lot more involved in it (if you save their various guild levels). -k. ----- Original Message ----- From: Drew Johnston <Drew29028@aol.com> To: <CIRCLE@post.queensu.ca> Sent: Monday, May 31, 1999 10:10 AM Subject: In game Class Joining *snip* > ACMD(do_enroll) > { > one_argument(argument, arg); > /* check out the for() loop above with the array of guild info. this won't work. */ > if (!*arg && (ch->in_room != join_room)) > send_to_char("Go to a guild if you wish to enroll!\r\n", ch); > /* above message is the one that pops up even when im in the right room */ > > else if (!*arg && (ch->in_room == alchemist_join_room)) { > send_to_char("The alchemist guild leader nods his head and shakes your > hand.\r\n", ch); > ch->player.chclass = CLASS_ALCHEMIST; *snip* +------------------------------------------------------------+ | Ensure that you have read the CircleMUD Mailing List FAQ: | | http://qsilver.queensu.ca/~fletchra/Circle/list-faq.html | +------------------------------------------------------------+
This archive was generated by hypermail 2b30 : 12/15/00 PST