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/
/*
 * $Id: chargen_commands.h,v 1.1.1.1 2005/01/11 21:18:04 kstevens Exp $
 *
 * Author: Markus Stenberg <fingon@iki.fi>
 *
 *  Copyright (c) 1996 Markus Stenberg
 *       All rights reserved
 *
 * Created: Wed Sep 18 10:40:06 1996 fingon
 * Last modified: Thu May 14 20:50:26 1998 fingon
 *
 */

#ifndef CHARGEN_COMMANDS_H
#define CHARGEN_COMMANDS_H

#include "help.h"

void chargen_look(dbref player, void *data, char *buffer)
{
    struct chargen_struct *st;
    coolmenu *c;

    DOCHECK(State == NOTBEGUN, BEGINSTARTS);
    DOCHECK(State == DONE &&
	Applied == 2, "Type 'leave' to leave the booth!");
    c = find_proper_menu(st);
    if (State == DONE) {
	notify(player, "Options:");
	if (!Applied) {
	    notify(player, "\tApply Sets your plstats (no Prev after it)");
	    notify(player, "\tPrev  Go back to previous menu(s)");
	}
	notify(player, "\tDone  Finalizes your char creation");
	notify(player, "\tReset Lets you start chargen from beginning");
	return;
    }
    DOCHECK(!c, "Hrm.. no menu, are you sure you're 'k?");
    ShowCoolMenu(player, c);
}

void chargen_begin(dbref player, void *data, char *buffer)
{
    PSTATS *s;
    struct chargen_struct *st;

    DOCHECK(State,
	"You have begun already! Type 'reset' to cancel your present values.");
    DOCHECK(atoi(silly_atr_get(player, A_RANKNUM)) != INITIAL_RANK &&
	!Wiz(player), "There is no going back to chargen! Get out.");
    s = retrieve_stats(player, VALUES_ALL);
    clear_player(s);
    store_stats(player, s, VALUES_ALL);
    st->pritotal = 8;
    advance_state(player, st);	/* To picking priorities */
}

void chargen_apply(dbref player, void *data, char *buffer)
{
    /* Apply values in the N menus into character */
    struct chargen_struct *st;
    int i, j;

    DOCHECK(State != DONE, "You aren't yet done with your chargen!");
    DOCHECK(Applied,
	"Duhh.. Even we aren't that stupid. Be content doing it just once.");
    /* Whee.. looks like we've a valid character who wants their
       stats 'on character' */
    apply_values(player, st->cm[MENU_ADV], 1);
    apply_values(player, st->cm[MENU_ATT], 1);

/*   apply_values(player, st->cm[MENU_PACKSKI], 1); */
    if (st->eacount > 0) {
	j = 0;
	for (i = FIRST_ATT; i <= LAST_ATT; i++)
	    if (st->attributes[i] > 6)
		j |= 1 << (i - FIRST_ATT);
	char_setvaluebycode(player, EA_NUMBER, j);
    }
    for (i = 0; i < NUM_SKIMENUS; i++)
	apply_values(player, st->sm[i], 1);
    notify(player, "Your stats are now set! Enjoy!");
    Applied = 1;
}

void chargen_done(dbref player, void *data, char *buffer)
{
    struct chargen_struct *st, *t;
    int i;

    DOCHECK(State != DONE, "You aren't yet done with your chargen!");
    if (!Applied)
	chargen_apply(player, data, buffer);
    Applied = 2;
    notify(player,
	"Your chargen is now finished! You may leave the booth now.");
    if (!Wiz(player)) {
	silly_atr_set(player, A_JOB, "Looking for a faction to join");
	silly_atr_set(player, A_RANKNUM, tprintf("%d", FINAL_RANK));
    }
    if (chargen_list == st)
	chargen_list = st->next;
    else {
	for (t = chargen_list; t->next != st; t = t->next);
	t->next = st->next;
    }
    for (i = 0; i < NUM_MENUS; i++)
	if (st->cm[i])
	    free((void *) st->cm[i]);
    for (i = 0; i < NUM_SKIMENUS; i++)
	if (st->sm[i])
	    free((void *) st->sm[i]);
    free((void *) st);
}



void chargen_next(dbref player, void *data, char *buffer)
{
    struct chargen_struct *st;
    int i;

    DOCHECK(State == NOTBEGUN, BEGINSTARTS);
    if (can_advance_state(st)) {
	if ((i = can_proceed(player, st)) > 0)
	    advance_state(player, st);
	else if (!i) {
	    notify(player, "Checking data..");
	    notify(player,
		"Syntax error at line 217: Illegal information!");
	}
    } else
	notify(player, "Uh.. where do you want to go next, anyway?");
}

void chargen_prev(dbref player, void *data, char *buffer)
{
    struct chargen_struct *st;

    DOCHECK(State == NOTBEGUN, BEGINSTARTS);
    if (can_go_back_state(st))
	go_back_state(player, st);
    else
	notify(player, "Well.. we all want to go back, don't we?");
}


void chargen_reset(dbref player, void *data, char *buffer)
{
    struct chargen_struct *st;

    DOCHECK(State == NOTBEGUN,
	"You haven't even started yet! Type 'begin' instead.");
    bzero(st, sizeof(struct chargen_struct));

    chargen_begin(player, data, buffer);
}

void chargen_help(dbref player, void *data, char *buffer)
{
    char buf[MBUF_SIZE];

    strcpy(buf, "chargen");
    help_write(player, buf, &mudstate.news_htab, mudconf.news_file, 0);
}

#endif				/* CHARGEN_COMMANDS_H */