/* determines if a player can set a flag based on permission level * 0 indicates they can, 1 indicates they cannot. Only checks flagset2. */ bool restricted2(dbref player, dbref thing, object_flag_type flag) { switch (flag) { case F2GUEST: return (!Mage(OWNER(player))); break; case F2LOGWALL: return (!Arch(OWNER(player))); case F2HIDDEN: /* HIDDEN is now also EXTPERMS for programs */ if (Typeof(thing) == TYPE_PROGRAM) { return !controls(player, thing); } else { if (Typeof(thing) == TYPE_PLAYER) return (!Arch(OWNER(player)) && !(POWERS(player) & POW_HIDE)); else return 1; } case F2ANTIPROTECT: if (Typeof(thing) == TYPE_PLAYER) return (!Boy(OWNER(player))); else return 1; #ifdef CONTROLS_SUPPORT case F2CONTROLS: /* only by W4. Not even by things they own. */ if (Typeof(thing) == TYPE_PLAYER) return (!Boy(player)); if (Typeof(thing) == TYPE_PROGRAM) return (!Wizard(player)); /* anything else, if I truly control it. */ return !truecontrols(player, thing); break; #endif case F2MOBILE: return !(MLevel(OWNER(player)) >= tp_userflag_mlev); break; case F2SUSPECT: return (!Wizard(OWNER(player))); default: return 0; break; } }
void do_restart(dbref player, const char *msg) { if (Arch(player)) { if( *msg == '\0' || strcmp(msg, tp_muckname)) { notify(player, "Usage: @restart muckname" ); return; } log_status("REST: by %s\n", unparse_object(player, player)); shutdown_flag = 1; restart_flag = 1; } else { anotify_fmt(player, CFAIL "%s", tp_noperm_mesg); log_status("SHAM: Restart by %s\n", unparse_object(player, player)); } }
void do_tune(dbref player, char *parmname, char *parmval) { int result; if (!Mage(player)) { anotify_fmt(player, CFAIL "%s", tp_noperm_mesg); return; } if (!Arch(player) && *parmval) { anotify_fmt(player, CFAIL "%s", tp_noperm_mesg); return; } if (*parmname && *parmval) { result = tune_setparm(player, parmname, parmval); switch (result) { case TUNESET_SUCCESS: log_status("TUNE: %s(%d) tuned %s to %s\n", NAME(player), player, parmname, parmval); anotify_nolisten2(player, CSUCC "Parameter set."); tune_display_parms(player, parmname); break; case TUNESET_UNKNOWN: anotify_nolisten2(player, CINFO "Unknown parameter."); break; case TUNESET_SYNTAX: anotify_nolisten2(player, CFAIL "Bad parameter syntax."); break; case TUNESET_BADVAL: anotify_nolisten2(player, CFAIL "Bad parameter value."); break; case TUNESET_NOPERM: anotify_nolisten2(player, CFAIL "Permission denied."); } return; } else if (*parmname) { /* if (!string_compare(parmname, "save")) { tune_save_parmsfile(); anotify_nolisten2(player, CSUCC "Saved parameters to configuration file."); } else if (!string_compare(parmname, "load")) { tune_load_parmsfile(player); anotify_nolisten2(player, CSUCC "Restored parameters from configuration file."); } else */ if (!string_compare(parmname, "strings") || !string_compare(parmname, "str")) tune_show_strings(player, parmname); else if (!string_compare(parmname, "times") || !string_compare(parmname, "time")) tune_show_times(player, parmname); else if (!string_compare(parmname, "int") || !string_compare(parmname, "ints")) tune_show_vals(player, parmname); else if (!string_compare(parmname, "ref") || !string_compare(parmname, "refs") || !string_compare(parmname, "dbrefs") || !string_compare(parmname, "dbref")) tune_show_refs(player, parmname); else if (!string_compare(parmname, "bool") || !string_compare(parmname, "bools")) tune_show_bool(player, parmname); else tune_display_parms(player, parmname); return; } else if (!*parmval && !*parmname) { tune_display_parms(player, parmname); } else { anotify_nolisten2(player, CINFO "Tune what?"); return; } }
int Archperms(dbref what) { if (Arch(what) && TArch(OWNER(what))) return 1; return 0; }
/* Indicates if a flag can or cannot be set. * Returns 1 if the flag can't be set, 0 if it can. * Note that this function only handles flagset 1. restricted2 for flagset2 */ bool restricted(dbref player, dbref thing, object_flag_type flag) { switch (flag) { case ABODE: return (!Mage(OWNER(player)) && (Typeof(thing) == TYPE_PROGRAM)); break; case ZOMBIE: if (tp_wiz_puppets) if (Typeof(thing) == TYPE_THING) return (!Mage(OWNER(player))); if (Typeof(thing) == TYPE_PLAYER) return (!Mage(OWNER(player))); if ((Typeof(thing) == TYPE_THING) && (FLAGS(OWNER(player)) & ZOMBIE)) return (!Mage(OWNER(player))); return (0); case VEHICLE: if (Typeof(thing) == TYPE_PLAYER) return (!Mage(OWNER(player))); if (tp_wiz_vehicles) { if (Typeof(thing) == TYPE_THING) return (!Mage(OWNER(player))); } else { if ((Typeof(thing) == TYPE_THING) && (FLAGS(player) & VEHICLE)) return (!Mage(OWNER(player))); } return (0); case DARK: if (!Arch(OWNER(player)) && !(POWERS(player) & POW_HIDE)) { if (Typeof(thing) == TYPE_PLAYER) return (1); if (!tp_exit_darking && Typeof(thing) == TYPE_EXIT) return (1); if (!tp_thing_darking && Typeof(thing) == TYPE_THING) return (1); } return (0); break; case QUELL: return (TMage(thing) && (thing != player) && (Typeof(thing) == TYPE_PLAYER)); break; case BUILDER: if ((Typeof(thing) == TYPE_PLAYER) || (Typeof(thing) == TYPE_PROGRAM)) return (!Mage(OWNER(player))); else return (!truecontrols(player, thing)); break; case CHOWN_OK: if (Typeof(thing) == TYPE_PLAYER) return !((OWNER(thing) == player) || Mage(player)); else return !truecontrols(player, thing); break; case W1: /* We use @set to make our own rules for these */ case W2: case W3: case W4: return 1; break; default: return 0; break; } }