/*
* $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 */