################################################################################ # # cmd_admin.py # # commands available only to admins. # ################################################################################ from mud import * from mudsys import add_cmd import mudsys, inform, char, string def cmd_shutdown(ch, cmd, arg): '''boom! shut the mud down''' mudsys.do_shutdown() def cmd_shutdown_net(ch, cmd, arg): '''a trap to make sure we spell shutdown out completely''' ch.send("You must spell out shutdown completely!") def cmd_copyover(ch, cmd, arg): '''restart the mud, but keep all sockets attached''' mudsys.do_copyover() def cmd_copyover_net(ch, cmd, arg): '''a trap to make sure we spell copyover out completely''' ch.send("You must spell out copyover completely!") def cmd_repeat(ch, cmd, arg): '''performs the same command multiple times''' try: times, arg = parse_args(ch, True, cmd, arg, "int string") except: return if times < 1: ch.send("Commands may only be repeated a positive number of times.") else: for i in range(times): ch.act(arg, True) def cmd_pulserate(ch, cmd, arg): '''changes the number of pulses the mud experiences each second''' if arg == '': ch.send("The mud currently has "+mudsys.sys_getval("pulses_per_second")+ "pulses per second.") else: pulserate = string.atoi(arg) if pulserate == 0 or 1000 % pulse != 0: ch.send("The number of pulses per second must divide 1000.") else: mudsys.sys_setval("pulses_per_second", str(pulserate)) ch.send("The mud's new pulse rate is %d pulses per second." % pulserate) def cmd_lockdown(ch, cmd, arg): '''Locks the game for anyone not a member of one of the user groups we specify.''' if arg == '': lockdown = mudsys.sys_getval("lockdown") if lockdown == '': ch.send("Lockdown is currently off.") else: ch.send("Lockdown is currently to members not of: " + lockdown) ch.send("To turn off lockdown, use {clockdown off{n") elif arg.lower() == "off": ch.send("Lockdown disabled.") mudsys.sys_setval("lockdown", "") # make sure we're not locking ourself out elif not ch.isInGroup(arg): ch.send("You cannot lock yourself out!") else: ch.send("MUD locked down to everyone not in groups: " + arg) mudsys.sys_setval("lockdown", arg) # kick out everyone who we've just locked out for ch in char.char_list(): if ch.is_pc and not ch.isInGroup(arg): ch.send("The mud has just been locked down to you.") mudsys.do_save(ch) mudsys.do_disconnect(ch) extract(ch) def cmd_at(ch, cmd, arg): '''Perform a command at another room or person''' try: found, type, arg = parse_args(ch, True, cmd, arg, "{ room ch.world.noself } string") except: return # figure out what room we're doing the command at if type == "char": room = found.room else: room = found # transfer us over to the new room, do the command, then transfer back old_room = ch.room ch.room = room ch.act(arg, True) ch.room = old_room def try_force(ch, vict, cmd): '''tries to force a person to do something''' if ch == vict: ch.send("Why don't you just try doing it?") elif vict.isInGroup("admin"): ch.send("But " + vict.name + " has just as many priviledges as you!") else: ch.send("You force " + vict.name + " to '" + cmd + "'") vict.send(inform.see_char_as(vict, ch) + " forces you to '" + cmd + "'") vict.act(cmd, False) def cmd_force(ch, cmd, arg): '''force someone to execute a command''' try: found, multi, arg = parse_args(ch, True, cmd, arg, "ch.world.noself.multiple string") except: return if multi == False: try_force(ch, found, arg) else: for vict in found: try_force(ch, vict, arg) def cmd_goto(ch, cmd, arg): '''Go to a specific room, object, or character in the game. Rooms are referenced by vnum. Everything else is referenced by name. usage: goto <thing> examples: goto room@zone go to room in zone goto jim go to an object/person named jim''' try: found, type = parse_args(ch, True, cmd, arg, "{ room ch.world.noself }") except: return # what did we find? if type == "char": dest = found.room else: dest = found message(ch, None, None, None, True, "to_room", "$n disappears in a puff of smoke.") ch.room = dest ch.act("look") message(ch, None, None, None, True, "to_room", "$n appears in a puff of smoke.") def do_transfer(ch, tgt, dest): '''ch transfers tgt to dest''' if tgt.room == dest: ch.send(tgt.name + " is already there") else: tgt.send(inform.see_char_as(tgt, ch) + " has transferred you to " + dest.name) message(tgt, None, None, None, True, "to_room", "$n disappears in a puff of smoke.") tgt.room = dest tgt.act("look", False) message(tgt, None, None, None, True, "to_room", "$n arrives in a puff of smoke.") def cmd_transfer(ch, cmd, arg): '''The opposite of goto. Instead of moving to a specified location, it takes the target to the user. usage: transfer <player> [[to] room]''' try: found, multi, dest = parse_args(ch, True, cmd, arg, "ch.world.multiple.noself | [to] room") except: return # if we didn't supply a room, use our own if dest == None: dest = ch.room # do our transfers if multi == False: do_transfer(ch, found, dest) else: for tgt in found: do_transfer(ch, tgt, dest) ################################################################################ # add our commands ################################################################################ add_cmd("shutdow", None, cmd_shutdown_net, "unconscious", "flying", "admin", False, False) add_cmd("shutdown", None, cmd_shutdown, "unconscious", "flying", "admin", False, False) add_cmd("copyove", None, cmd_copyover_net, "unconscious", "flying", "admin", False, False) add_cmd("copyover", None, cmd_copyover, "unconscious", "flying", "admin", False, False) add_cmd("at", None, cmd_at, "unconscious", "flying", "admin", False, False) add_cmd("lockdown", None, cmd_lockdown, "unconscious", "flying", "admin", False, False) add_cmd("pulserate", None, cmd_pulserate, "unconscious", "flying", "admin", False, False) add_cmd("repeat", None, cmd_repeat, "unconscious", "flying", "admin", False, False) add_cmd("force", None, cmd_force, "sitting", "flying", "admin", False, False) add_cmd("goto", None, cmd_goto, "sitting", "flying", "admin", False, False) add_cmd("transfer", None, cmd_transfer, "sitting", "flying", "admin", False, False)