/**
* This file contains all of the information related to a player,
* their password, real name, birthday, location etc.
* @author Pinkfish
*/
#include <player.h>
#include <mail.h>
private mapping player_info;
private string password;
private nosave string tmppassword;
string query_name();
private int change_password();
private int change_password2(mixed pass);
private int change_password3(string pass);
private int change_password4(string pass);
int add_command(string command, object ob, mixed format, function func);
/**
* The commands related to the fingering of a player.
* Just the change password command at the moment.
*/
void finger_commands() {
add_command("password", this_object(), "", (: change_password() :));
add_command("passwd", this_object(), "", (: change_password() :));
} /* finger_commands() */
/**
* This method sets the description of the player. The
* description is the little bit of text seen in the long.
* @param str the new description of the player
* @see query_desc()
*/
void set_desc(string str) {
if (!player_info) {
player_info = ([ ]);
}
player_info["desc"] = str;
}
/**
* This method returns the current description of the player.
* @see set_desc()
* @return the current description
*/
string query_desc() {
if (!player_info) {
return "";
}
return player_info["desc"];
} /* query_desc() */
/**
* This method changes the password of the player. It can only
* be called by the login object at startup.
* @param pass the new password
*/
void set_password(string pass) {
if (file_name(previous_object())[0..12] == "/secure/login") {
password = pass;
}
} /* set_password() */
/**
* This method is called when the password is attempted to be changed.
* @return 1 if successful, 0 on failure
*/
private int change_password() {
if (password) {
write("Please enter your old password : ");
input_to((: change_password2 :),1);
return 1;
}
change_password2(0);
return 1;
} /* change_password() */
private int change_password2(mixed pass) {
string str;
if (password) {
str = crypt(pass,password);
if (str != password) {
write("\nIncorrect.\n");
return 1;
}
}
write("\nEnter new Password : ");
input_to((: change_password3 :),1);
return 1;
} /* change_password2() */
private int change_password3(string pass) {
tmppassword = pass;
if(sizeof(pass) < 6) {
write("\nPassword is too short, must be at least 6 characters.\n");
write("Enter new Password :");
input_to((: change_password3 :),1);
return 1;
}
write("\nPlease enter again : ");
input_to((: change_password4 :),1);
return 1;
} /* change_password3() */
private int change_password4(string pass) {
if (tmppassword != pass) {
write("\nIncorrect.\n");
return 1;
}
password = crypt(pass,password);
write("\nOk.\n");
return 1;
} /* change_password4() */
/**
* This will return the real name of the player.
* @return the real name of the player
* @see set_real_name()
*/
string query_real_name() {
if (!player_info) {
return 0;
}
return player_info["real_name"];
} /* query_real_name() */
/**
* This will set the real name of the player.
* @see query_name()
* @param str the new real name of the player
*/
void set_real_name(string str) {
if (!player_info) {
player_info = ([ ]);
}
player_info["real_name"] = str;
} /* set_real_name() */
/**
* This methoid returns the location of the player. The location
* is the location in their funger infor, so like "Perth, oz, whatever".
* @return their currently set location
* @see set_where()
*/
string query_where() {
if (!player_info) {
return "";
}
return player_info["location"];
} /* query_where() */
/**
* This method sets the currnet location of the player.
* @see query_location()
* @param str the new location
*/
void set_where(string str) {
if (!player_info) {
player_info = ([ ]);
}
player_info["location"] = str;
} /* set_where() */
/**
* This method returns the icq number of the player.
* @return their currently set icq number
* @see set_where()
*/
string query_icq() {
if (!player_info) {
return "";
}
return player_info["icq"];
} /* query_icq() */
/**
* This method sets the curret icq_number of the player.
* @see query_icq()
* @param str the new icq
*/
void set_icq(string str) {
if (!player_info) {
player_info = ([ ]);
}
player_info["icq"] = str;
} /* set_icq() */
/**
* This method returns the players birthday. The birthday will be
* of the form "4th of july".
* @return the current birthday
* @see set_birthday()
* @see query_is_birthday_today()
*/
string query_birthday() {
if (!player_info) {
return UNKNOWN_BIRTHDAY;
}
if (!player_info["birthday"]) {
return UNKNOWN_BIRTHDAY;
}
return player_info["birthday"];
} /* query_birthday() */
/**
* This method sets the players current birthday. The birthday
* needs to be of the form: "4th of July".
* @param i the new birthday to set
* @see query_birthday()
* @see query_is_birthday_today()
*/
void set_birthday(string i) {
if (!player_info) {
player_info = ([]);
}
player_info["birthday"] = i;
} /* set_birthday() */
/**
* This method checks to see if it is currently the players birthday.
* @return 1 if it is their birthday, 0 if not
* @see set_birthday()
* @see query_birthday()
*/
int query_is_birthday_today() {
string cmonth;
string dummy;
string bmonth;
int cdate;
int bdate;
if (sscanf(ctime(time()), "%s %s %d %s", dummy, cmonth, cdate, dummy)!=4) {
return 0; /* error in date */
}
if (sscanf(query_birthday(), "%d%s of %s", bdate, dummy, bmonth) !=3) {
return 0; /* no bday set */
}
if (cmonth == bmonth[0..2] && cdate == bdate) {
return 1;
}
} /* query_is_birthday_today() */
/**
* This method returns the current email address of the player.
* @see set_email()
* @return the current email address
*/
string query_email() {
if (!player_info) {
return "";
}
return player_info["email"];
}
/**
* This method sets the current email address of the player.
* @see query_email()
* @param str the new email address
*/
nomask void set_email(string str) {
if (!player_info) {
player_info = ([]);
}
player_info["email"] = str;
} /* set_email() */
/**
* This method queries the current homepage for the player.
* @see set_homepage()
* @return their homepage url
*/
string query_homepage() {
if (!player_info) {
player_info = ([ ]);
}
return player_info["homepage"];
} /* query_homepage() */
/**
* This method sets the players homepage.
* @see query_homepage()
* @param their homepage url
*/
nomask void set_homepage(string str) {
if (!player_info) {
player_info = ([]);
}
player_info["homepage"] = str;
} /* set_homepage() */
/**
* This method returns whether the player has set their finger info.
* @return 1 if they have their finger information set, 0 if not
*/
int finger_set() {
if (!player_info ||
player_info == ([ ]) ||
sizeof(keys(player_info)) == 1) {
return 0;
}
return 1;
} /* finger_set() */