btmux/autom4te.cache/
btmux/doc/.svn/
btmux/event/.svn/
btmux/game/.svn/
btmux/game/bin/.svn/
btmux/game/data/.svn/
btmux/game/logs/.svn/
btmux/game/maps/
btmux/game/maps/.svn/
btmux/game/maps/.svn/prop-base/
btmux/game/maps/.svn/props/
btmux/game/maps/.svn/text-base/
btmux/game/maps/.svn/wcprops/
btmux/game/mechs/
btmux/game/mechs/.svn/
btmux/game/mechs/.svn/prop-base/
btmux/game/mechs/.svn/props/
btmux/game/mechs/.svn/text-base/
btmux/game/mechs/.svn/wcprops/
btmux/game/text/.svn/
btmux/include/.svn/
btmux/misc/
btmux/misc/.svn/
btmux/misc/.svn/prop-base/
btmux/misc/.svn/props/
btmux/misc/.svn/text-base/
btmux/misc/.svn/wcprops/
btmux/python/
btmux/python/.svn/
btmux/python/.svn/prop-base/
btmux/python/.svn/props/
btmux/python/.svn/text-base/
btmux/python/.svn/wcprops/
btmux/src/.svn/prop-base/
btmux/src/.svn/props/
btmux/src/.svn/text-base/
btmux/src/.svn/wcprops/
btmux/src/hcode/.svn/
btmux/src/hcode/btech/
btmux/src/hcode/btech/.svn/
btmux/src/hcode/btech/.svn/prop-base/
btmux/src/hcode/btech/.svn/props/
btmux/src/hcode/btech/.svn/text-base/
btmux/src/hcode/btech/.svn/wcprops/
btmux/src/hcode/include/.svn/
/*
 * mguests.c - multiguest code originally ported from DarkZone 
 */

/*
 * $Id: mguests.c,v 1.3 2005/08/08 09:43:07 murrayma Exp $ 
 */

#include <stdlib.h>

#include "config.h"
#include "copyright.h"
#include "mudconf.h"
#include "externs.h"
#include "mguests.h"
#include "config.h"
#include "db.h"
#include "interface.h"
#include "mail.h"
#include "attrs.h"
#include "powers.h"

extern void destroy_player(dbref);
extern void do_lock(dbref player, dbref cause, int key, char *name,
    char *keytext);
typedef int object_flag_type;

dbref create_guest(name, password)
char *name;
char *password;
{
    dbref player;
    char *buff;

    if (!Wizard(mudconf.guest_nuker) || !Good_obj(mudconf.guest_nuker))
	mudconf.guest_nuker = 1;

    buff = alloc_lbuf("create_guest");

    /*
     * Make the player. 
     */

    player = create_player(name, password, mudconf.guest_nuker, 0, 1);

    if (player == NOTHING) {
	log_text("GUEST: failed in create_player\n");
	return NOTHING;
    }
    /*
     * Turn the player into a guest. 
     */

    s_Guest(player);
    move_object(player, mudconf.start_room);
    s_Flags(player, Flags(player) & ~WIZARD);
    s_Pennies(player, Pennies(mudconf.guest_char));
    s_Zone(player, Zone(mudconf.guest_char));
    s_Parent(player, Parent(mudconf.guest_char));

    /*
     * Make sure the guest is locked. 
     */
    do_lock(player, player, A_LOCK, tprintf("#%d", player), "me");
    do_lock(player, player, A_LENTER, tprintf("#%d", player), "me");

    /*
     * Copy all attributes. 
     */
    atr_cpy(GOD, player, mudconf.guest_char);
    free_lbuf(buff);
    return player;
}

void destroy_guest(guest)
dbref guest;
{
    if (!Wizard(mudconf.guest_nuker) || !Good_obj(mudconf.guest_nuker))
	mudconf.guest_nuker = 1;

    if (!Guest(guest))
	return;

    toast_player(guest);
    atr_add_raw(guest, A_DESTROYER, tprintf("%d", mudconf.guest_nuker));
    destroy_player(guest);
    destroy_obj(mudconf.guest_nuker, guest);
}

char *make_guest(d)
DESC *d;
{
    int i;
    dbref player, p2;
    static char name[50];

    /*
     * Nuke extra guests as new guests connect. 
     */

    for (i = 0; i < mudconf.number_guests; i++) {
	sprintf(name, "%s%d", mudconf.guest_prefix, i + 1);
	p2 = lookup_player(GOD, name, 0);
	if (p2 != NOTHING && !Connected(p2))
	    destroy_guest(p2);
    }

    /*
     * Locate a free guest ID, and eat it. 
     */

    for (i = 0; i < mudconf.number_guests; i++) {
	sprintf(name, "%s%d", mudconf.guest_prefix, i + 1);
	player = lookup_player(GOD, name, 0);
	if (player == NOTHING)
	    break;
    }

    if (i == mudconf.number_guests) {
	queue_string(d,
	    "GAME: All guest ID's are busy, please try again later.\n");
	return NULL;
    }
    sprintf(name, "%s%d", mudconf.guest_prefix, i + 1);
    player = create_guest(name, mudconf.guest_prefix);

    if (player == NOTHING) {
	queue_string(d,
	    "GAME: Error creating guest ID, please try again later.\n");
	log_text(tprintf
	    ("GUEST: Error creating guest ID. '%s' already exists.\n",
		name));
	return NULL;
    }
    return Name(player);
}