An easy solution to letting guildguards allow more then one class in the
same exit would be this:
Add bitvectors for each class:
#define CLASS_MAGE_BV (1 << CLASS_MAGIC_USER)
#define CLASS_CLERIC_BV (1 << CLASS_CLERIC)
#define CLASS_THIEF_BV (1 << CLASS_THIEF)
#define CLASS_WARRIOR_BV (1 << CLASS_WARRIOR)
#define CLASS_ASSASSIN_BV (1 << CLASS_ASSASSIN)
Then change all of the guild_info's to:
int guild_info[][3] = {
/* Midgaard */
{CLASS_MAGE_BV, 3017, SCMD_SOUTH},
{CLASS_CLERIC_BV, 3004, SCMD_NORTH},
{CLASS_THIEF_BV, 3027, SCMD_EAST},
{CLASS_WARRIOR_BV, 3021, SCMD_EAST},
then you can add it so a thief can go in the same exit an assassin could
enter the thief guild:
{CLASS_THIEF_BV|CLASS_ASSASSIN_BV, 3027, SCMD_EAST},
And here's a changed guild_guard spec_proc to use the bitvectors
SPECIAL(guild_guard)
{
int i, blocked = TRUE;
extern int guild_info[][3];
struct char_data *guard = (struct char_data *) me;
char *buf = "The guard humiliates you, and blocks your way.\r\n";
char *buf2 = "The guard humiliates $n, and blocks $s way.";
if (!IS_MOVE(cmd) || IS_AFFECTED(guard, AFF_BLIND))
return FALSE;
if (GET_LEVEL(ch) >= LVL_IMMORT)
return FALSE;
for (i = 0; guild_info[i][0] != -1; i++) {
if ((IS_NPC(ch) || !IS_SET(guild_info[i][0], (1 << GET_CLASS(ch)))) &&
world[ch->in_room].number == guild_info[i][1] &&
cmd == guild_info[i][2]) {
return TRUE;
}
}
if (blocked) {
send_to_char(buf, ch);
act(buf2, FALSE, ch, 0, 0, TO_ROOM);
}
else
return FALSE;
return FALSE;
}
This archive was generated by hypermail 2b30 : 12/18/00 PST