/** * This is the creator player object. It gives the creators the * bonus extra commands needed by happy creators. * @author Pinkfish * @see /global/player.c */ #include <login_handler.h> #include <rank.h> #include <command.h> inherit "/global/creator/wiz_file_comm"; private string creator_title; #define ECHO_ALLOWED protected int do_qsnoop( object *obs ); protected int clean_up_files( string word ); protected int bulk_delete( string word ); protected int set_creator_title( string str ); /** @ignore yes */ void move_player_to_start( string bong, int bing, string c_name, string ident, int go_invis ) { if( base_name(PO) != LOGIN_OBJ ) return 0; ::move_player_to_start( bong, bing, c_name, ident ); cat("doc/CREATORNEWS"); if( lordp(geteuid(TO)) ) cat("doc/LORDNEWS"); switch( go_invis ) { case -1 : set_invis( 0 ); break; case 1 : set_invis( creatorp(TO) + lordp(TO) + adminp(TO) ); break; default : } switch( query_invis() ) { case 3 : tell_object( TO, "===> You are currently Admin invisible! <===\n"); break; case 2 : tell_object( TO, "===> You are currently Lord invisible! <===\n"); break; case 1 : tell_object( TO, "===> You are currently invisible! <===\n"); break; default : } add_command("cretitle", TO, "", (: set_creator_title( 0 ) :) ); add_command("cretitle", TO, "<string'title'>", (: set_creator_title( $4[0] ) :) ); add_command("cretitle", TO, "reset", (: set_creator_title("reset") :) ); if( lordp(geteuid(TO)) ) add_command("qsnoop", TO, "<indirect:player>", (: do_qsnoop($1) :) ); add_command("qsnoop", TO, "", (: do_qsnoop :) ); add_command("bulk_delete", TO, "{a|b|c|d|e|f|g|h|i|j|k|l|m|n|o|p|q|r|s|t|u|v|w|x|y|z}", (: bulk_delete($4[0]) :) ); add_command("clean_up_files", TO, "<word>", (: clean_up_files($4[0]) :) ); if( adminp(geteuid(TO)) ) AddSearchPath( ({ DIR_ADMIN_CMDS, DIR_SECURE_ADMIN_CMDS }) ); if( lordp(geteuid(TO)) ) AddSearchPath( ({ DIR_LORD_CMDS, DIR_SECURE_LORD_CMDS }) ); } /* move_player_to_start() */ /** * This method tells us if the object is a creator or not. * @return 1 if the object is a creator, 0 if not. */ int query_creator() { return 1; } /** @ignore yes */ string query_object_type() { switch( rank(TO) ) { case ADMIN: return "A"; case LORD: return "L"; case SENIOR: return "S"; } return "C"; } /* query_object_type() */ /** * This method is used by the snoop efun to allow creator to see * what other players are doing. * @param bing the message to receive */ void receive_snoop( string bing ) { tell_object( TO, "] "+bing ); } /** @ignore yes */ void event_enter( object me, string s1, object from ) { if( lordp(geteuid(TO)) ) { if( ( !s1 || s1 == "") && interactive(me) ) { if( environment() == ENV(me) ) event_inform( me, me->query_cap_name()+" invisibly enters " "the room", "enter"); else event_inform( me, me->query_cap_name()+" invisibly enters " "your inventory", "enter"); } } ::event_enter( me, s1, from ); } /* event_enter() */ /** @ignore yes */ void event_exit( object me, string s1, object from ) { if( lordp(geteuid(TO)) ) { if( (!s1 || s1 == "") && interactive(me) ) { if( environment() == ENV(me) ) event_inform( me, me->query_cap_name()+" invisibly leaves " "the room", "enter"); else event_inform( me, me->query_cap_name()+" invisibly leaves " "your inventory", "enter"); } } ::event_exit( me, s1, from ); } /* event_exit() */ /** @ignore yes */ varargs int adjust_xp( int number, int shared ) { if( lordp(geteuid(TO)) ) { if( objectp(PO) ) event_inform( PO, PO->query_name()+" ("+file_name(PO)+") gives " "you "+number+" xp", "xp"); } return ::adjust_xp( number, shared ); } /* adjust_xp() */ /** * This method forces a bulk delete on a certain letter. * This letter will then be checked to see if any of * those players have timed out and should be deleted. * @param word the letter to bulk delete * @return 0 on falure and 1 on success */ protected int bulk_delete( string word ) { if( GetForced() ) return 0; word = lower_case(word); return BULK_DELETE_H->delete_files(word); } /* bulk_delete() */ /** * This method forces the clean up of certain file son the * bulk deleter. This cleans up all the files associated with * the given player. * @param word the name of the player to clean up * @return 1 on success, 0 on failure */ protected int clean_up_files( string word ) { if( GetForced() ) return 0; return BULK_DELETE_H->clean_up_files(word); } /* clean_up_files() */ /** * This method is used to do a quiet snoop on a player. * @param str the player to snoop * @return 1 on success, 0 on failure */ protected int do_qsnoop( object *obs ) { object targ; if( GetForced() ) return 0; if( !obs || !sizeof(obs) ) { snoop( TO, 0 ); write("Ok, qsnoop cancelled.\n"); return 1; } targ = obs[0]; if( !snoop( TO, targ ) ) return notify_fail("You fail to qsnoop "+ targ->query_cap_name()+".\n"); write("Ok, qsnooping "+targ->query_cap_name()+".\n"); return 1; } /* do_qsnoop() */ /** @ignore yes */ protected int set_creator_title( string str ) { string s; if( !str || str == "") { write("Your creator title is currently set to: "+creator_title+".\n"); return 1; } if( str == "reset") { creator_title = ""; write("Resetting your creator title.\n"); return 1; } if( strlen( strip_colours(str) ) > 60 ) return notify_fail("Titles have to be 50 chars or less.\n"); s = lower_case( str ); if( strsrch( s, "apprentice") != -1 || strsrch( s, "creator") != -1 || strsrch( s, "liaison") != -1 || strsrch( s, "lord") != -1 || strsrch( s, "invisible") != -1 || strsrch( s, "admin") != -1 ) return notify_fail("You cannot set your title to Admin, " "Apprentice, Creator, Liaison, Lord, or Invisible.\n"); creator_title = str; write("You set your creator title to: "+str+".\n"); return 1; } /* set_creator_title */ /** @ignore yes */ string query_creator_title() { return creator_title || ""; }