#include <alias.h>
inherit COMMAND_BASE;
mapping editing_alias;
/** @ignore yes */
void create() {
editing_alias = ([ ]);
} /* create() */
/**
* The method used by the 'ealias' command.
* @param str the alias name to edit
* @return 1 on success, 0 on failure
* @see cmd::ealias
* @see finish_alias_edit()
*/
protected int edit_alias( string str ) {
string al;
if( editing_alias[TP] ) {
add_failed_mess("You are already editing the '"+
editing_alias[TP]+"' alias.\n");
return 0;
}
if( !TP->is_alias(str) ) {
add_failed_mess("No alias '"+str+"' defined.\n");
return 0;
}
editing_alias[TP] = str;
al = replace( ALIAS_CMD->alias_string( TP->query_player_alias(str) ),
";", "\n");
TP->do_edit( al, "finish_alias_edit", 0 );
return 1;
} /* edit_alias() */
/**
* This method used to copy an alias to another one and then edit the
* result.
* @param alias the alias to copy
* @param new_alias the alias to copy to
* @return 1 on success, 0 on failure
* @see cmd::ealias
* @see finish_alias_edit()
*/
protected int edit_alias_copy( string alias, string new_alias ) {
string al;
if( !TP->is_alias(alias) ) {
add_failed_mess("No alias '"+alias+"' defined.\n");
return 0;
}
if( TP->is_alias(new_alias) ) {
add_failed_mess("The alias '"+alias+"' already exists.\n");
return 0;
}
editing_alias[TP] = new_alias;
al = replace( ALIAS_CMD->alias_string( TP->query_player_alias(alias)),
";", "\n");
TP->do_edit( al, "finish_alias_edit", 0 );
return 1;
} /* edit_alias_copy() */
/**
* The method called when the editing of the alias has been completed.
* @param str the new alias value
* @return 1 on success, 0 on failure
*/
void finish_alias_edit( string str ) {
string alias;
if( !editing_alias[TP] ) {
write("Oh dear. We got terribly confused and forgot "
"what you were trying to do. Terribly sorry.\n");
return;
}
if( !str ) {
map_delete( editing_alias, TP );
return;
}
alias = editing_alias[TP];
if( alias == ".plan" || alias == ".project" || alias == ".signature") {
if( sizeof(str) > MAX_PLAN_LENGTH ) {
write("Sorry, the maximum length of .plan, .project and "
".signature aliases is "+MAX_PLAN_LENGTH+" characters.\n");
return;
}
}
if( sizeof(str) > MAX_ALIAS_LENGTH ) {
write("Sorry, the maximum alias length is "+
MAX_ALIAS_LENGTH+" characters.\n");
return;
}
str = replace( str, "\n", ";");
TP->add_player_alias( alias, ALIAS_CMD->compile_alias(str) );
write("Changed alias '"+alias+"'\n");
map_delete( editing_alias, TP );
return;
} /* finish_alias_edit() */
/** @ignore yes */
mixed query_patterns() {
return ({
"<word'alias'>", (: edit_alias($4[0]) :),
"copy <word'alias'> to <word'new alias'>",
(: edit_alias_copy($4[0], $4[1]) :),
});
} /* query_patterns() */