#include <stdio.h> #include <strings.h> #include <ctype.h> #include "teeny.h" /* Copyright(C) 1990, Andrew Molitor, All Rights Reserved. This software may be freely used, modified, and redistributed, as long as this copyright message is left intact, and this software is not used to develop any commercial product, or used in any product that is provided on a pay-for-use basis. No warranties whatsoever. This is not guaranteed to compile, nor, in the event that it does compile to binaries, are these binaries guaranteed to perform any function whatsoever. */ /* Wiz only commands */ /* Verify that a player is a wizard. Should be in cmdutils.c. *shrug* */ iswiz(player) int player; { int flags; if(get_int_elt(player,FLAGS,&flags) == -1) goto iswizbomb; if(flags & WIZARD){ return(1); } else { return(0); } iswizbomb: notify_bad(player); return(0); } do_boot(player,arg) int player; char *arg; { int victim; if(!iswiz(player)){ notify_player(player,"Permission denied.\n"); return; } if(arg == NULL){ notify_player(player,"Boot whom?\n"); return; } if((victim = match_player(arg)) == -1){ notify_player(player,"I can't find that player.\n"); return; } notify_player(victim,"You have been booted off the game.\n"); iobdisconnect(victim); notify_player(player,"Ok.\n"); } do_chown(player,argone,argtwo) int player; char *argone,*argtwo; { int owner,obj,flags; if(!iswiz(player)){ notify_player(player,"Permission denied.\n"); return; } if(argtwo == NULL){ notify_player(player,"Chown what to what?\n"); return; } owner = resolve_object(player,argtwo,1); /* Allow *<playername> */ if(owner == -1){ notify_player(player,"I can't find that owner.\n"); return; } if(get_int_elt(owner,FLAGS,&flags) == -1) goto chownbomb; if((flags & TYPE_MASK) != TYP_PLAYER){ notify_player(player,"That's not a player!\n"); return; } obj = resolve_object(player,argone,0); /* NO *<playername> */ if(obj == -1){ notify_player(player,"I can't find that object.\n"); return; } if(get_int_elt(obj,FLAGS,&flags) == -1) goto chownbomb; if((flags & TYPE_MASK) == TYP_PLAYER){ notify_player(player,"Players always own themselves.\n"); return; } /* OK. Do it. */ if(set_int_elt(obj,OWNER,owner) == -1) goto chownbomb; notify_player(player,"Owner changed.\n"); return; chownbomb: notify_bad(player); return; } do_dump(player) int player; { if(!iswiz(player)){ notify_player(player,"Permission denied. Doof.\n"); return; } dump_db(); } do_force(player,argone,argtwo) int player; char *argone,*argtwo; { int obj,flags; if(!iswiz(player)){ notify_player(player,"Permission denied.\n"); return; } if(argtwo == NULL){ notify_player(player,"Force who to do what?\n"); return; } obj = resolve_object(player,argone,1); /* Allow *<playername> */ if(obj == -1 || !exists_object(obj)){ notify_player(player,"I can't find that player.\n"); return; } if(get_int_elt(obj,FLAGS,&flags) == -1) goto forcebomb; if((TYPE_MASK & flags) != TYP_PLAYER){ notify_player(player,"That's not a player!\n"); return; } handle_cmd(obj,argtwo); return; forcebomb: notify_bad(player); return; } do_newpassword(player,argone,argtwo) int player; char *argone,*argtwo; { int obj,flags; char *name,*p; char work[512]; if(!iswiz(player)){ notify_player(player,"Permission denied.\n"); return; } if(argtwo == NULL){ notify_player(player,"Change who's password to what?\n"); return; } obj = resolve_object(player,argone,1); if(obj == -1 || !exists_object(obj)){ notify_player(player,"I can't find that player.\n"); return; } if(get_int_elt(obj,FLAGS,&flags) == -1) goto newbomb; if((TYPE_MASK & flags) != TYP_PLAYER){ notify_player(player,"That's not a player!\n"); return; } if(get_str_elt(obj,NAME,&name) == -1) goto newbomb; for(p = work; !isspace(*name) && *name ;){ *p++ = *name++; } *p++ = ' '; while(*argtwo){ *p++ = *argtwo++; } *p++ = '\0'; if(set_str_elt(obj,NAME,work) == -1) goto newbomb; notify_player(player,"Password changed.\n"); return; newbomb: notify_bad(player); return; } do_toad(player,arg) int player; char *arg; { int obj,flags; char work[512]; char *name,*p; if(!iswiz(player)){ notify_player(player,"Permission denied.\n"); return; } if(arg == NULL){ notify_player(player,"Toad whom?\n"); return; } obj = resolve_object(player,arg,1); if(obj == -1 || !exists_object(obj)){ notify_player(player,"I can't find that player.\n"); return; } if(get_int_elt(obj,FLAGS,&flags) == -1) goto toadbomb; if((flags & TYPE_MASK) != TYP_PLAYER){ notify_player(player,"That's not a player!\n"); return; } /* Make the victim into a thing. */ flags = flags & ~TYPE_MASK; flags = flags | TYP_THING; if(set_int_elt(obj,FLAGS,flags) == -1) goto toadbomb; if(get_str_elt(obj,NAME,&name) == -1) goto toadbomb; /* Change its name */ strcpy(work,"A slimy toad named "); p = work+19; while(!isspace(*name) && *name) *p++ = *name++; *p = '\0'; if(set_str_elt(obj,NAME,work) == -1) goto toadbomb; /* Tell and boot it */ notify_player(obj,"You have been turned into a slimy toad!\n"); iobdisconnect(obj); notify_player(player,"Toaded. Doesn't that feel *GREAT*?\n"); return; toadbomb: notify_bad(player); return; } do_wall(player,arg) int player; char *arg; { char *name,*p,ch; if(!iswiz(player)){ notify_player(player,"But what do you want to do with a wall?\n"); return; } if(arg == NULL){ notify_player(player,"@wall what, silly?\n"); return; } if(get_str_elt(player,NAME,&name) == -1) goto wallbomb; /* Temporarily terminate the name */ for(p = name;!isspace(*p) && *p;) p++; ch = *p; *p = '\0'; notify_wall(name); *p = ch; notify_wall(" shouts, \""); notify_wall(arg); notify_wall("\"\n"); return; wallbomb: notify_bad(player); return; } do_shutdown(player) int player; { if(iswiz(player)){ set_mudstat(STOPPED); notify_player(player,"Ok.\n"); } else { notify_player(player,"Permission denied. Doof.\n"); } } do_teleport(player,argone,argtwo) int player; char *argone; char *argtwo; { int obj,dest,objtype,desttype,objloc; char work[92],*p; if(!iswiz(player)){ notify_player(player,"Only a wizard may teleport things.\n"); return; } if(argtwo == NULL){ notify_player(player,"Teleport what where?\n"); return; } dest = resolve_object(player,argtwo,1); /* *<playername> OK */ if(dest == -1 || !exists_object(dest)){ notify_player(player,"I can't find that destination.\n"); return; } obj = resolve_object(player,argone,1); /* *<playername> OK */ if(obj == -1 || !exists_object(obj)){ notify_player(player,"I can't find that.\n"); return; } if(get_int_elt(dest,FLAGS,&desttype) == -1) goto telbomb; if(get_int_elt(obj,FLAGS,&objtype) == -1) goto telbomb; desttype &= TYPE_MASK; objtype &= TYPE_MASK; switch(objtype){ case TYP_PLAYER: if(desttype != TYP_ROOM){ notify_player(player,"Bad destination.\n"); return; } break; case TYP_THING: if(desttype != TYP_PLAYER && desttype != TYP_ROOM){ notify_player(player,"Bad destination.\n"); return; } break; default: notify_player(player,"You can't teleport that!\n"); return; } if(get_int_elt(obj,LOC,&objloc) == -1) goto telbomb; if(objtype == TYP_PLAYER){ int count = 0; char *name; if(get_str_elt(obj,NAME,&name) == -1) goto telbomb; for(p = work;!isspace(*name) && *name && count < 75;count++) *p++ = *name++; strcpy(p," has left.\n"); notify_oall(obj,work); } list_drop(obj,objloc,1); /* 1 means to/from the contents list */ if(set_int_elt(obj,LOC,dest) == -1) goto telbomb; list_add(obj,dest,1); if(objtype == TYP_PLAYER){ strcpy(p," has arrived.\n"); notify_oall(obj,work); notify_player(obj,"You feel a wrenching sensation...\n"); do_look(obj,(char *)NULL); } notify_player(player,"Teleported.\n"); return; telbomb: notify_bad(player); return; }