# # Patch name: slug.patch # Patch version: 1 # Author's name: Kurt Fitzner # Author's email: kfitzner@nexus.v-wave.com # Version of PennMUSH: 1.7.2p26 # Date patch made: Fri Aug 13 17:24:00 1999 # Author is willing to support (yes/no): no # Patch format: diff -u5 # # # This is a contributed PennMUSH patch. Its use is subject to the # same restrictions found in PennMUSH's hdrs/copyrite.h file. # # No warranty is given for this patch. It is not necessarily going # to work on your system, with any version of PennMUSH other than # the one above, etc. # # If the author given above was willing to support the patch, you # should write to the author if you have any questions or problems. Do # *NOT* send email messages to Javelin or any PennMUSH mailing list about # this patch! # # Below this line is the author's description of the patch, # followed by the patch itself. If the patch is in context diff # format, you'll probably apply it by typing: patch < patchfile # in your top-level MUSH directory, unless instructed otherwise # below. # # # slug.patch # All the utility, and twice the humiliation of @toad. Yup, # instead of a wart toad, you can make someone into a # 'gooey slug'. # This patch is an either or. It won't work with toad.patch. # You gotta pick whether you want light humiliation, or super # double-patty-with-cheese-and-bacon humiliation. # diff -u5r pennmush-vanilla/game/txt/hlp/penncmd.hlp pennmush-slug/game/txt/hlp/penncmd.hlp --- pennmush-vanilla/game/txt/hlp/penncmd.hlp Sun Jul 18 10:14:27 1999 +++ pennmush-slug/game/txt/hlp/penncmd.hlp Fri Aug 13 17:24:00 1999 @@ -67,11 +67,11 @@ @allhalt @allquota @boot @chownall @chzoneall @comment @dbck @disable @dump @enable @fixdb @hide @kick @log @motd @newpassword @pcreate @poll @poor @power @purge @quota @readcache @rejectmotd @shutdown - @sitelock @squota @uptime @wall + @sitelock @slug @squota @uptime @wall @wallemit @wallpose @wizemit @wizmotd @wizpose @wizwall cd ch & @@ @@ -2425,10 +2425,16 @@ Teleportation triggers the @oxtport/@tport/@otport/@atport attributes, unless is an exit. See also: JUMP_OK, NO_TEL, @oxtport, @tport, @otport, @atport, @lock +& @slug + @slug + + This is a wizard only command. It changes a player into an object, and + @chowns all of the previous players possessions over to the '@slug'ing + wizard. Some MUSHes may disable this command. & @tport @tport [=] Sets the shown to when is teleported. & @trigger diff -u5r pennmush-vanilla/game/txt/hlp/pennflag.hlp pennmush-slug/game/txt/hlp/pennflag.hlp --- pennmush-vanilla/game/txt/hlp/pennflag.hlp Sun Jul 18 10:14:27 1999 +++ pennmush-slug/game/txt/hlp/pennflag.hlp Fri Aug 13 17:24:00 1999 @@ -476,11 +476,12 @@ See also: TRANSPARENT, look & PLAYER Flag: PLAYER (player) The PLAYER flag identifies you as a player. This flag cannot - be reset by any player, not even a Wizard. It is used by hardcode to + be reset by any player, not even a Wizard (although the @slug command + changes a player to an object). It is used mainly by hardcode to identify your commands, check for validity of commands or locks, etc. You can just pretend it isn't there. & PUPPET Flag: PUPPET (things) @@ -632,11 +633,11 @@ In general, WIZARDs can do anything using # or *. Only player #1 can set and unset the WIZARD flag of other players. No WIZARD can turn their own WIZARD flag off. Other objects may also be set WIZARD, and they then have all the - powers of a Wizard except that they cannot @nuke players. + powers of a Wizard except that they cannot @nuke/@slug players. Only Wizards may set the WIZARD flag on objects. See also: ROYALTY, @power & Z_TEL Flag: Z_TEL (all types) diff -u5r pennmush-vanilla/hdrs/game.h pennmush-slug/hdrs/game.h --- pennmush-vanilla/hdrs/game.h Sun Jul 18 10:12:56 1999 +++ pennmush-slug/hdrs/game.h Fri Aug 13 17:24:00 1999 @@ -170,10 +170,11 @@ extern void do_allquota _((dbref player, const char *arg1, int quiet)); #endif extern void do_teleport _((dbref player, const char *arg1, const char *arg2)); extern void do_force _((dbref player, const char *what, char *command)); extern void do_stats _((dbref player, const char *name)); +extern void do_slug _((dbref player, const char *name)); extern void do_newpassword _((dbref player, const char *name, const char *password)); extern void do_boot _((dbref player, const char *name, int flag)); extern void do_chzoneall _((dbref player, const char *name, const char *target)); extern int force_by_number _((dbref player, char *command)); extern void do_power _((dbref player, const char *name, const char *power)); diff -u5r pennmush-vanilla/src/cmds.c pennmush-slug/src/cmds.c --- pennmush-vanilla/src/cmds.c Sun Jul 18 10:13:14 1999 +++ pennmush-slug/src/cmds.c Fri Aug 13 17:24:00 1999 @@ -685,10 +685,14 @@ COMMAND (cmd_trigger) { do_trigger(player, arg_left, args_right); } +COMMAND (cmd_slug) { + do_slug(player, arg_left); +} + COMMAND (cmd_ulock) { do_lock(player, arg_left, arg_right, (char *) Use_Lock); } COMMAND (cmd_undestroy) { diff -u5r pennmush-vanilla/src/command.c pennmush-slug/src/command.c --- pennmush-vanilla/src/command.c Sun Jul 18 10:13:14 1999 +++ pennmush-slug/src/command.c Fri Aug 13 17:24:57 1999 @@ -151,10 +151,11 @@ {"@SEARCH", NULL, cmd_search, CMD_T_ANY | CMD_T_EQSPLIT | CMD_T_RS_ARGS | CMD_T_RS_NOPARSE, 0, 0, 0}, {"@SELECT", NULL, cmd_select, CMD_T_ANY | CMD_T_EQSPLIT | CMD_T_RS_ARGS | CMD_T_RS_NOPARSE, 0, 0, 0}, {"@SET", NULL, cmd_set, CMD_T_ANY | CMD_T_EQSPLIT | CMD_T_NOGAGGED, 0, 0, 0}, {"@SHUTDOWN", "PANIC REBOOT PARANOID", cmd_shutdown, CMD_T_ANY, WIZARD, 0, 0}, {"@SITELOCK", "BAN REGISTER NAME", cmd_sitelock, CMD_T_ANY | CMD_T_EQSPLIT, WIZARD, 0, 0}, + {"@SLUG", NULL, cmd_slug, CMD_T_ANY, WIZARD, 0, 0}, {"@STATS", NULL, cmd_stats, CMD_T_ANY, 0, 0, 0}, {"@SWEEP", "CONNECTED HERE INVENTORY EXITS", cmd_sweep, CMD_T_ANY, 0, 0, 0}, {"@SWITCH", "FIRST ALL", cmd_switch, CMD_T_ANY | CMD_T_EQSPLIT | CMD_T_RS_ARGS | CMD_T_RS_NOPARSE | CMD_T_NOGAGGED, 0, 0, 0}, #ifdef QUOTA {"@SQUOTA", NULL, cmd_squota, CMD_T_ANY | CMD_T_EQSPLIT, 0, 0, 0}, diff -u5r pennmush-vanilla/src/wiz.c pennmush-slug/src/wiz.c --- pennmush-vanilla/src/wiz.c Sun Jul 18 10:13:55 1999 +++ pennmush-slug/src/wiz.c Fri Aug 13 17:25:15 1999 @@ -79,10 +79,11 @@ int tport_control_ok _((dbref player, dbref victim, dbref loc)); void do_teleport _((dbref player, const char *arg1, const char *arg2)); void do_force _((dbref player, const char *what, char *command)); int force_by_number _((dbref player, char *command)); void do_stats _((dbref player, const char *name)); +void do_slug _((dbref player, const char *name)); void do_newpassword _((dbref player, const char *name, const char *password)); void do_boot _((dbref player, const char *name, int flag)); #ifdef CONCENTRATOR int parse_conc_descriptor _((char *str, int cport, int port)); #endif @@ -697,10 +698,69 @@ if (Hasprivs(player)) notify(player, tprintf("%d bytes memory used.", memused())); if (God(player)) verify_sfltable(player); #endif +} + + +void +do_slug(player, name) + dbref player; + const char *name; +{ + dbref victim; + char tbuf1[BUFFER_LEN]; + ATTR *atemp; + char alias[PLAYER_NAME_LIMIT]; + DESC *d; + + if (!Wizard(player)) { + notify(player, "Only a Wizard can slug a person."); + return; + } + if ((victim = noisy_match_result(player, name, TYPE_PLAYER, MAT_LIMITED)) == NOTHING) + return; + + if (!IsPlayer(victim)) { + notify(player, "Try @destroy instead!"); + } else if (Wizard(victim)) { + notify(player, "You can't slug a Wizard."); + } else if (Contents(victim) != NOTHING) { + notify(player, "You need to destroy their contents first."); + } else { + /* we're ok */ + + /* notify people */ + notify(victim, + "You have been turned into a slimy slug."); + notify(player, tprintf("You 'slug'ed %s!", Name(victim))); + do_log(LT_WIZ, player, victim, "*** SLUG ***"); + + /* do it */ + atr_clr(victim, "XYXXY", GOD); + Flags(victim) = TYPE_THING; + Owner(victim) = player; /* you get it */ + s_Pennies(victim, 1); + +#ifdef USE_MAILER + do_mail_clear(victim, NULL); +#endif + + /* reset name */ + delete_player(victim, NULL); + if ((atemp = atr_get_noparent(victim, "ALIAS")) != NULL) { + strcpy(alias, uncompress(atemp->value)); + delete_player(victim, alias); + } + while ((d = player_desc(victim))) + boot_desc(d); + sprintf(tbuf1, + "A gooey slug named %s", Name(victim)); + SET(Name(victim), tbuf1); + do_chownall(player, name, ""); + } } void do_newpassword(player, name, password) dbref player;