Change the 1 << 5.. << 6 << 7 << 8 to << 1 << 2 << 3 << 4... because race
bitvectors look for a different number.. they look for RACE_.. not
CLASS_.. so the races would think that there were no races.. because they
were looking for a race with the number being 5 6 7 8... instead of 1 2 3
4.... anyways.. hope I helped.. if you want to add races.. here is my
race.doc that I made.. =):
-=-=-=-=-=-=-=-=-=-
structs.h
-=-=-=-=-=-=-=-=-=-
Search for:
#define CLASS_GIANT 5
Below it, add:
#define RACE_UNDEFINED -1
#define RACE_HUMAN 0
#define RACE_ELF 1
#define RACE_GNOME 2
#define RACE_DWARF 3
#define NUM_RACES 4
Search for:
#define CON_DELCNF2 16 /* Delete confirmation 2 */
Below it, add:
#define CON_QRACE 17 /* Race? */
Search for:
struct char_player_data {
char *name; /* PC / NPC s name (kill ... ) */
char *short_descr; /* for NPC 'actions' */
char *long_descr; /* for 'look' */
char *description; /* Extra descriptions */
char *title; /* PC / NPC's title */
byte sex; /* PC / NPC's sex */
byte class; /* PC / NPC's class */
Below it, add:
byte race; /* PC / NPC's race */
Search for:
struct char_file_u {
/* char_player_data */
char name[MAX_NAME_LENGTH+1];
char description[EXDSCR_LENGTH];
char title[MAX_TITLE_LENGTH+1];
byte sex;
byte class;
Below it, add:
byte race;
-=-=-=-=-=-=-=-=-=-
utils.h
-=-=-=-=-=-=-=-=-=-
Search for:
#define CLASS_ABBR(ch) (IS_NPC(ch) ? "--" : class_abbrevs[(int)GET_CLASS(ch)])
Below it, add:
#define RACE_ABBR(ch) (IS_NPC(ch) ? "--" : race_abbrevs[(int)GET_RACE(ch)])
Search for:
#define GET_CLASS(ch) ((ch)->player.class)
Below it, add:
#define GET_RACE(ch) ((ch)->player.race)
-=-=-=-=-=-=-=-=-=-
races.c(MAKE NEW FILE)
-=-=-=-=-=-=-=-=-=-
#include "sysdep.h"
#include "conf.h"
#include "structs.h"
#include "interpreter.h"
#include "utils.h"
const char *race_abbrevs[] = {
"Hum",
"Elf",
"Gno",
"Dwa",
"\n"
};
const char *pc_race_types[] = {
"Human",
"Elf",
"Gnome",
"Dwarf",
"\n"
};
/* The menu for choosing a race in interpreter.c: */
const char *race_menu =
"\r\n"
"Select a race:\r\n"
" [H]uman\r\n"
" [E]lf\r\n"
" [G]nome\r\n"
" [D]warf\r\n";
/*
* The code to interpret a race letter (used in interpreter.c when a
* new character is selecting a race).
*/
int parse_race(char arg)
{
arg = LOWER(arg);
switch (arg) {
case 'h':
return RACE_HUMAN;
break;
case 'e':
return RACE_ELF;
break;
case 'g':
return RACE_GNOME;
break;
case 'd':
return RACE_DWARF;
break;
default:
return RACE_UNDEFINED;
break;
}
}
long find_race_bitvector(char arg)
{
arg = LOWER(arg);
switch (arg) {
case 'h':
return (1 << 0);
break;
case 'e':
return (1 << 1);
break;
case 'g':
return (1 << 2);
break;
case 'd':
return (1 << 3);
break;
default:
return 0;
break;
}
}
-=-=-=-=-=-=-=-=-=-
class.c
-=-=-=-=-=-=-=-=-=-
Search for:
case CLASS_WARRIOR:
ch->real_abils.str = table[0];
ch->real_abils.dex = table[1];
ch->real_abils.con = table[2];
ch->real_abils.wis = table[3];
ch->real_abils.intel = table[4];
ch->real_abils.cha = table[5];
if (ch->real_abils.str == 18)
ch->real_abils.str_add = number(0, 100);
break;
}
Below it, add:
switch (GET_RACE(ch)) {
case RACE_HUMAN:
break;
case RACE_ELF:
ch->real_abils.dex += 1;
ch->real_abils.intel += 1;
ch->real_abils.con -= 1;
ch->real_abils.str -= 1;
break;
case RACE_GNOME:
ch->real_abils.intel += 1;
ch->real_abils.wis -= 1;
break;
case RACE_DWARF:
ch->real_abils.con += 1;
ch->real_abils.intel -= 1;
ch->real_abils.cha -= 1;
break;
default:
break;
}
-=-=-=-=-=-=-=-=-=-
constants.c
-=-=-=-=-=-=-=-=-=-
Search for:
"Self-Delete 2",
Below it, add:
"Select race",
-=-=-=-=-=-=-=-=-=-
db.c
-=-=-=-=-=-=-=-=-=-
Search for:
GET_CLASS(ch) = st->class;
Below it, add:
GET_RACE(ch) = st->race;
Search for:
st->class = GET_CLASS(ch);
Below it, add:
st->race = GET_RACE(ch);
-=-=-=-=-=-=-=-=-=-
interpreter.c
-=-=-=-=-=-=-=-=-=-
Search for:
extern const char *class_menu;
Below it, add:
extern const char *race_menu;
Search for:
int parse_class(char arg);
Below it, add:
int parse_race(char arg);
Search for:
SEND_TO_Q(class_menu, d);
SEND_TO_Q("Class: ", d);
STATE(d) = CON_QCLASS;
break;
Change it to:
SEND_TO_Q(race_menu, d);
SEND_TO_Q("Race: ", d);
STATE(d) = CON_QRACE;
break;
Below it, add:
case CON_QRACE:
load_result = parse_race(*arg);
if (load_result == RACE_UNDEFINED) {
SEND_TO_Q("\r\nThat's not a race.\r\nRace: ", d);
return;
} else
GET_RACE(d->character) = load_result;
SEND_TO_Q(class_menu, d);
SEND_TO_Q("Class: ", d);
STATE(d) = CON_QCLASS;
break;
-=-=-=-=-=-=-=-=-=-
act.wizard.c
-=-=-=-=-=-=-=-=-=-
Search for:
ACMD(do_set)
{
int i, l;
struct char_data *vict = NULL, *cbuf = NULL;
struct char_file_u tmp_store;
char field[MAX_INPUT_LENGTH], name[MAX_INPUT_LENGTH], val_arg[MAX_INPUT_LENGTH]
int on = 0, off = 0, value = 0;
char is_file = 0, is_mob = 0, is_player = 0;
int player_i = 0;
int parse_class(char arg);
Below it, add:
int parse_race(char arg);
Search for:
{ "cha", LVL_GRGOD, BOTH, NUMBER },
Below it, add:
{ "race", LVL_GRGOD, PC, MISC },
Search for:
case 47:
if (IS_NPC(vict) || GET_LEVEL(vict) >= LVL_GRGOD)
RANGE(3, 25);
else
RANGE(3, 18);
vict->real_abils.cha = value;
affect_total(vict);
break;
Below it, add:
case 48:
if ((i = parse_race(*val_arg)) == RACE_UNDEFINED) {
send_to_char("That is not a race.\r\n", ch);
return;
}
GET_RACE(vict) = i;
break;
-=-=-=-=-=-=-=-=-=-
Makefile
-=-=-=-=-=-=-=-=-=-
Search for:
objsave.o olc.o shop.o spec_assign.o spec_procs.o spell_parser.o \
Change it to:
objsave.o olc.o races.o shop.o spec_assign.o spec_procs.o \
spell_parser.o \
Search for:
random.o: random.c
$(CC) -c $(CFLAGS) random.c
Below it, add:
races.o: races.c sysdep.h conf.h structs.h interpreter.h utils.h
$(CC) -c $(CFLAGS) races.c
^^^^^^^^
***MAKE SURE THIS IS A <TAB> OR ELSE THE MAKEFILE WILL PRODUCE ERRORS!!!!!***
That's all you need. Simple, eh? Hope this helps... - Nashak
|-\ \ / /
\ \ \ /<
\ \-| / \
..... asha .....
bmw@efn.org
mud.penguin.net
4000
On Tue, 22 Oct 1996, Peter Hartman wrote:
> Well this time i got the who to work in alongside with races . HOWVER
> this is the catch22: all charcters are now level one (as in no wizards
> as in i cant make myself as wizard)... first I'll say what i did to
> class.c to get it to work and nuke all players and maybe someone will
> have an idea.
>
> /*
> * bitvectors (i.e., powers of two) for each class, mainly for use in
> * do_who and do_users. Add new classes at the end so that all classes
> * use sequential powers of two (1 << 0, 1 << 1, 1 << 2, 1 << 3, 1 << 4,
> * 1 << 5, etc.
> */
>
> long find_class_bitvector(char arg)
> {
> arg = LOWER(arg);
>
> switch (arg) {
> case 'm':
> return (1 << 0);
> break;
> case 'c':
> return (1 << 1);
> break;
> case 't':
> return (1 << 2);
> break;
> case 'w':
> return (1 << 3);
> break;
> case 'b':
> return (1 << 4);
> break;
> default:
> return 0;
> break;
> }
> }
>
> /* [WART] */
> long find_race_bitvector(char arg)
> {
> arg = LOWER(arg);
>
> switch (arg) {
> case 'h':
> return (1 << 5);
> break;
> case 'e':
> return (1 << 6);
> break;
> case 'g':
> return (1 << 7);
> break;
> case 'f':
> return (1 << 8);
> break;
> default:
> return 0;
> break;
> }
> }
>
>
> In the long find_race_bitvector the races.doc said to make it 'h':
> return 1 :: e return 2 :: g return 4 :: and f return 8 but this resulted
> in NO WHO or USERS command. So i made it like it is. Is this the
> source of the prob? as in have i fixed it?
> Now if i have fixed it (so that i CAN do a WHO and CAN have races at
> same time) how do i get atleast one account system admin (or wizard)
> status? Thanks for ANY help :-). I appreciate this emailing list for
> its service!
>
> wart <hartman@kuntrynet.com>
> +-----------------------------------------------------------+
> | Ensure that you have read the CircleMUD Mailing List FAQ: |
> | http://cspo.queensu.ca/~fletcher/Circle/list_faq.html |
> +-----------------------------------------------------------+
>
+-----------------------------------------------------------+
| Ensure that you have read the CircleMUD Mailing List FAQ: |
| http://cspo.queensu.ca/~fletcher/Circle/list_faq.html |
+-----------------------------------------------------------+
This archive was generated by hypermail 2b30 : 12/18/00 PST