/* $Header: player.c,v 1.1 90/04/14 14:56:48 lachesis Exp $
* $Log: player.c,v $
* Revision 1.1 90/04/14 14:56:48 lachesis
* Initial revision
*
*/
#include "copyright.h"
#include "os.h"
#include "db.h"
#include "config.h"
#include "hashtab.h"
#include "interface.h"
#include "externs.h"
static hash_tab player_list[PLAYER_HASH_SIZE];
dbref lookup_player (const char *name)
{
hash_data *hd;
if ((hd = find_hash (name, player_list, PLAYER_HASH_SIZE)) == NULL)
return NOTHING;
else
return (hd->dbval);
}
dbref connect_player (const char *name, const char *password)
{
dbref player;
if ((player = lookup_player (name)) == NOTHING)
return NOTHING;
if (db[player].sp.player.password
&& *db[player].sp.player.password
&& strcmp (db[player].sp.player.password, password))
return NOTHING;
return player;
}
dbref create_player (const char *name, const char *password)
{
dbref player;
if (!ok_player_name (name) || !ok_password (password))
return NOTHING;
/* else he doesn't already exist, create him */
player = new_object ();
/* initialize everything */
db[player].name = alloc_string (name);
db[player].location = PLAYER_START; /* home */
PUSH (player, db[PLAYER_START].contents);
db[player].flags = TYPE_PLAYER;
db[player].sp.player.home = PLAYER_START;
db[player].sp.player.password = alloc_string (password);
db[player].sp.player.actions = NOTHING;
db[player].sp.player.pennies = 0;
add_player (player);
return player;
}
void do_password (dbref player, const char *old, const char *newobj)
{
if (!db[player].sp.player.password ||
strcmp (old, db[player].sp.player.password)) {
notify (player, "Sorry");
} else if (!ok_password (newobj)) {
notify (player, "Bad new password.");
} else {
free ((void *) db[player].sp.player.password);
db[player].sp.player.password = alloc_string (newobj);
notify (player, "Password changed.");
}
}
void clear_players (void)
{
kill_hash (player_list, PLAYER_HASH_SIZE);
return;
}
void delete_player (dbref who)
{
(void) free_hash (db[who].name, player_list, PLAYER_HASH_SIZE);
return;
}
void add_player (dbref who)
{
hash_data hd;
hd.dbval = who;
if (add_hash (db[who].name, hd, player_list, PLAYER_HASH_SIZE) == NULL)
panic ("Out of memory");
else
return;
}