/* player.c */ #include "copyright.h" #include <string.h> #include <sys/time.h> #include <sys/types.h> #include "config.h" #include "db.h" #include "interface.h" #include "externs.h" extern char *ctime(); dbref connect_player(name, password) const char *name; const char *password; { dbref player; time_t tt; char *s; ATTR *a; if ((player = lookup_player(name)) == NOTHING) return NOTHING; if ((a = atr_get(player, "XYXXY")) && strcmp(uncompress(a->value), password) && strcmp(crypt(password, "XX"), uncompress(a->value))) return NOTHING; tt = time((time_t *) 0); s = ctime(&tt); s[strlen(s) - 1] = 0; /* compare to last connect see if player gets salary */ a = atr_get(player, "LAST"); if (a && (strncmp(uncompress(a->value), s, 10) != 0)) giveto(player, PAY_CHECK); (void) atr_add(player, "LAST", s, GOD, NOTHING); db[player].pageto = NOTHING; return player; } dbref create_player(name, password) const char *name; const char *password; { dbref player; time_t tt; char *s; if (!ok_player_name(name) || !ok_password(password)) return NOTHING; /* else he doesn't already exist, create him */ tt = time((time_t *) 0); s = ctime(&tt); s[strlen(s) - 1] = 0; player = new_object(); /* initialize everything */ SET(db[player].name, name); db[player].location = PLAYER_START; db[player].exits = PLAYER_START; /* home */ db[player].owner = player; db[player].pageto = NOTHING; db[player].flags = TYPE_PLAYER; s_Pass(player, crypt(password, "XX")); giveto(player, START_BONUS); /* starting bonus */ (void) atr_add(player, "LAST", s, GOD, NOTHING); #ifdef QUOTA (void) atr_add(player, "RQUOTA", START_QUOTA, GOD, NOTHING); #endif /* QUOTA */ /* link him to PLAYER_START */ PUSH(player, db[PLAYER_START].contents); add_player(player); return player; } void do_password(player, old, newobj) dbref player; const char *old; const char *newobj; { ATTR *a; const char *d; #ifdef GUEST_RESTRICT if (Guest(player)) { notify(player, "Guests may not change their passwords."); return; } #endif if((a = atr_get(player, "XYXXY")) && *(d = uncompress(a->value)) && strcmp(d, old) && strcmp(crypt(old, "XX"), d)) { notify(player, "Sorry"); } else if (!ok_password(newobj)) { notify(player, "Bad new password."); } else { s_Pass(player, crypt(newobj, "XX")); notify(player, "Password changed."); } }