/* ** Replacement 'privs' command by Mo McKinlay (ekky@ekto.org) ** ** This code may be freely distributed, provided any distributions ** are complete with this message, and the code is unchanged. ** ** The code is fairly self-explanatory. To install, remove the existing ** privs() function from examine.c, and replace it with this one. ** ** CCDID: $privs.c@examine.c/2.0.8$ */ void privs(player * p, char *str) { char *oldstack = stack, name[MAX_NAME + 2], middle[80]; int priv, who = 0; player *p2 = 0; player dummy; strcpy(name, " You"); if (*str && p->residency & (SU | ADMIN)) { lower_case(str); p2 = find_player_global_quiet(str); if (!p2) { strcpy(dummy.lower_name, str); lower_case(dummy.lower_name); dummy.fd = p->fd; if (!load_player(&dummy)) { tell_player(p, " Couldn't find player in saved files.\n"); return; } if (dummy.residency & BANISHD) { tell_player(p, " That is a banished name or player.\n"); return; } p2 = &dummy; } strcpy(name, p2->name); priv = p2->residency; who = 1; sprintf(middle, "Permissions for %s", name); pstack_mid(middle); } else { priv = p->residency; pstack_mid("Your Permissions"); p2=p; } if (priv == NON_RESIDENT) { TELLPLAYER(p, " Information not available (Non-resident).\n"); stack = oldstack; return; } if (priv == SYSTEM_ROOM) { TELLPLAYER(p, " Information not available (System Room).\n"); stack = oldstack; return; } ADDSTACK("^H Rank ^N: "); if(priv & ROBOT_PRIV) ADDSTACK("Robot\n"); else if (priv & CODER) ADDSTACK("%s (Coder)\n", get_config_msg("coder_name")); else if (priv & HCADMIN) ADDSTACK("%s (HeadAdmin)\n", get_config_msg("hc_name")); else if (priv & ADMIN) ADDSTACK("%s (Admin)\n", get_config_msg("admin_name")); else if (priv & LOWER_ADMIN) ADDSTACK("%s (Lower Admin)\n", get_config_msg("la_name")); else if (priv & ASU) ADDSTACK("%s (Advanced SU)\n", get_config_msg("asu_name")); else if (priv & SU) ADDSTACK("%s (Super User)\n", get_config_msg("su_name")); else if (priv & PSU) ADDSTACK("%s (Pseudo SU)\n", get_config_msg("psu_name")); else ADDSTACK("Standard Resident\n"); ADDSTACK("^H Permissions ^N: "); if (priv & LIST) ADDSTACK("[^HList^N] "); if (priv & ECHO_PRIV) ADDSTACK("[^HEcho^N] "); if (priv & BUILD) ADDSTACK("[^HBuild^N] "); if (priv & MAIL) ADDSTACK("[^HMail^N] "); if (priv & SESSION) ADDSTACK("[^HSession^N] "); ADDSTACK("\n"); ADDSTACK("^H Abilities ^N: "); if (priv & MINISTER) ADDSTACK("[^HMinister^N] "); if (priv & BUILDER) ADDSTACK("[^HBuilder^N] "); if (priv & SPECIALK) ADDSTACK("[^HCreator^N] "); ADDSTACK("\n"); ADDSTACK("^H Other ^N: "); if (priv & SPOD) ADDSTACK("[^HSpod^N] "); if (priv & DEBUG) ADDSTACK("[^HDebug^N] "); if (priv & NO_TIMEOUT) ADDSTACK("[^HNo-Timeout^N] "); if (priv & PROTECT) ADDSTACK("[^HProtect^N] "); ADDSTACK("\n"); ADDSTACK("^H Staff ^N: "); if (priv & WARN) ADDSTACK("[^HWarn^N] "); if (priv & DUMB) ADDSTACK("[^HDumb^N] "); if (priv & SCRIPT) ADDSTACK("[^HScript^N] "); if (priv & TRACE) ADDSTACK("[^HTrace^N] "); ADDSTACK("\n%s", LINE); if(p->residency&ADMIN||who) { stack += sprintf(stack, " " RES_BIT_HEAD "\n" "Residency %s\n%s", privs_bit_string(p2->residency), LINE); } stack=end_string(stack); tell_player(p, oldstack); stack = oldstack; }