/* player.c */ #include "os.h" #include "copyright.h" #include "config.h" #include "db.h" #include "interface.h" #include "externs.h" extern char *ctime (); dbref connect_player (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 ((char*)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 (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 ((char*)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 (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 ((char*)old, "XX"), d)) { notify (player, "Sorry"); } else if (!ok_password (newobj)) { notify (player, "Bad new password."); } else { s_Pass (player, crypt ((char*)newobj, "XX")); notify (player, "Password changed."); } }