예제 #1
0
/* 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;
    }
}
예제 #2
0
파일: game.c 프로젝트: CyberLeo/protomuck
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));
    }
}
예제 #3
0
파일: tune.c 프로젝트: CyberLeo/protomuck
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;
    }
}
예제 #4
0
int
Archperms(dbref what)
{
    if (Arch(what) && TArch(OWNER(what))) return 1;
    return 0;
}
예제 #5
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;
    }
}