Finished basic race handling
This commit is contained in:
parent
0ec7dd3b79
commit
a922f0812d
@ -45,6 +45,7 @@ void appear(struct char_data *ch);
|
|||||||
void reset_zone(zone_rnum zone);
|
void reset_zone(zone_rnum zone);
|
||||||
void roll_real_abils(struct char_data *ch);
|
void roll_real_abils(struct char_data *ch);
|
||||||
int parse_class(char arg);
|
int parse_class(char arg);
|
||||||
|
int parse_race(char *arg);
|
||||||
void run_autowiz(void);
|
void run_autowiz(void);
|
||||||
|
|
||||||
/* local functions */
|
/* local functions */
|
||||||
@ -2171,6 +2172,7 @@ ACMD(do_show)
|
|||||||
{ "age", LVL_GRGOD, BOTH, NUMBER },
|
{ "age", LVL_GRGOD, BOTH, NUMBER },
|
||||||
{ "height", LVL_GOD, BOTH, NUMBER },
|
{ "height", LVL_GOD, BOTH, NUMBER },
|
||||||
{ "weight", LVL_GOD, BOTH, NUMBER }, /* 50 */
|
{ "weight", LVL_GOD, BOTH, NUMBER }, /* 50 */
|
||||||
|
{ "race", LVL_GRGOD, PC, MISC },
|
||||||
{ "\n", 0, BOTH, MISC }
|
{ "\n", 0, BOTH, MISC }
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -2497,6 +2499,15 @@ int perform_set(struct char_data *ch, struct char_data *vict, int mode,
|
|||||||
affect_total(vict);
|
affect_total(vict);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case 51:
|
||||||
|
if ((i == parse_race(val_arg)) == RACE_UNDEFINED)
|
||||||
|
{
|
||||||
|
send_to_char(ch, "That is not a race.\r\n");
|
||||||
|
return (0);
|
||||||
|
}
|
||||||
|
GET_RACE(vict) = i;
|
||||||
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
send_to_char(ch, "Can't set that!\r\n");
|
send_to_char(ch, "Can't set that!\r\n");
|
||||||
return (0);
|
return (0);
|
||||||
|
104
src/class.c
104
src/class.c
@ -189,11 +189,14 @@ struct guild_info_type guild_info[] = {
|
|||||||
|
|
||||||
byte saving_throws(int class_num, int type, int level)
|
byte saving_throws(int class_num, int type, int level)
|
||||||
{
|
{
|
||||||
switch (class_num) {
|
switch (class_num)
|
||||||
|
{
|
||||||
case CLASS_MAGIC_USER:
|
case CLASS_MAGIC_USER:
|
||||||
switch (type) {
|
switch (type)
|
||||||
|
{
|
||||||
case SAVING_PARA: /* Paralyzation */
|
case SAVING_PARA: /* Paralyzation */
|
||||||
switch (level) {
|
switch (level)
|
||||||
|
{
|
||||||
case 0: return 90;
|
case 0: return 90;
|
||||||
case 1: return 70;
|
case 1: return 70;
|
||||||
case 2: return 69;
|
case 2: return 69;
|
||||||
@ -240,7 +243,8 @@ byte saving_throws(int class_num, int type, int level)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case SAVING_ROD: /* Rods */
|
case SAVING_ROD: /* Rods */
|
||||||
switch (level) {
|
switch (level)
|
||||||
|
{
|
||||||
case 0: return 90;
|
case 0: return 90;
|
||||||
case 1: return 55;
|
case 1: return 55;
|
||||||
case 2: return 53;
|
case 2: return 53;
|
||||||
@ -287,7 +291,8 @@ byte saving_throws(int class_num, int type, int level)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case SAVING_PETRI: /* Petrification */
|
case SAVING_PETRI: /* Petrification */
|
||||||
switch (level) {
|
switch (level)
|
||||||
|
{
|
||||||
case 0: return 90;
|
case 0: return 90;
|
||||||
case 1: return 65;
|
case 1: return 65;
|
||||||
case 2: return 63;
|
case 2: return 63;
|
||||||
@ -334,7 +339,8 @@ byte saving_throws(int class_num, int type, int level)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case SAVING_BREATH: /* Breath weapons */
|
case SAVING_BREATH: /* Breath weapons */
|
||||||
switch (level) {
|
switch (level)
|
||||||
|
{
|
||||||
case 0: return 90;
|
case 0: return 90;
|
||||||
case 1: return 75;
|
case 1: return 75;
|
||||||
case 2: return 73;
|
case 2: return 73;
|
||||||
@ -381,7 +387,8 @@ byte saving_throws(int class_num, int type, int level)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case SAVING_SPELL: /* Generic spells */
|
case SAVING_SPELL: /* Generic spells */
|
||||||
switch (level) {
|
switch (level)
|
||||||
|
{
|
||||||
case 0: return 90;
|
case 0: return 90;
|
||||||
case 1: return 60;
|
case 1: return 60;
|
||||||
case 2: return 58;
|
case 2: return 58;
|
||||||
@ -433,9 +440,11 @@ byte saving_throws(int class_num, int type, int level)
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case CLASS_CLERIC:
|
case CLASS_CLERIC:
|
||||||
switch (type) {
|
switch (type)
|
||||||
|
{
|
||||||
case SAVING_PARA: /* Paralyzation */
|
case SAVING_PARA: /* Paralyzation */
|
||||||
switch (level) {
|
switch (level)
|
||||||
|
{
|
||||||
case 0: return 90;
|
case 0: return 90;
|
||||||
case 1: return 60;
|
case 1: return 60;
|
||||||
case 2: return 59;
|
case 2: return 59;
|
||||||
@ -482,7 +491,8 @@ byte saving_throws(int class_num, int type, int level)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case SAVING_ROD: /* Rods */
|
case SAVING_ROD: /* Rods */
|
||||||
switch (level) {
|
switch (level)
|
||||||
|
{
|
||||||
case 0: return 90;
|
case 0: return 90;
|
||||||
case 1: return 70;
|
case 1: return 70;
|
||||||
case 2: return 69;
|
case 2: return 69;
|
||||||
@ -529,7 +539,8 @@ byte saving_throws(int class_num, int type, int level)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case SAVING_PETRI: /* Petrification */
|
case SAVING_PETRI: /* Petrification */
|
||||||
switch (level) {
|
switch (level)
|
||||||
|
{
|
||||||
case 0: return 90;
|
case 0: return 90;
|
||||||
case 1: return 65;
|
case 1: return 65;
|
||||||
case 2: return 64;
|
case 2: return 64;
|
||||||
@ -576,7 +587,8 @@ byte saving_throws(int class_num, int type, int level)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case SAVING_BREATH: /* Breath weapons */
|
case SAVING_BREATH: /* Breath weapons */
|
||||||
switch (level) {
|
switch (level)
|
||||||
|
{
|
||||||
case 0: return 90;
|
case 0: return 90;
|
||||||
case 1: return 80;
|
case 1: return 80;
|
||||||
case 2: return 79;
|
case 2: return 79;
|
||||||
@ -623,7 +635,8 @@ byte saving_throws(int class_num, int type, int level)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case SAVING_SPELL: /* Generic spells */
|
case SAVING_SPELL: /* Generic spells */
|
||||||
switch (level) {
|
switch (level)
|
||||||
|
{
|
||||||
case 0: return 90;
|
case 0: return 90;
|
||||||
case 1: return 75;
|
case 1: return 75;
|
||||||
case 2: return 74;
|
case 2: return 74;
|
||||||
@ -675,9 +688,11 @@ byte saving_throws(int class_num, int type, int level)
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case CLASS_THIEF:
|
case CLASS_THIEF:
|
||||||
switch (type) {
|
switch (type)
|
||||||
|
{
|
||||||
case SAVING_PARA: /* Paralyzation */
|
case SAVING_PARA: /* Paralyzation */
|
||||||
switch (level) {
|
switch (level)
|
||||||
|
{
|
||||||
case 0: return 90;
|
case 0: return 90;
|
||||||
case 1: return 65;
|
case 1: return 65;
|
||||||
case 2: return 64;
|
case 2: return 64;
|
||||||
@ -724,7 +739,8 @@ byte saving_throws(int class_num, int type, int level)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case SAVING_ROD: /* Rods */
|
case SAVING_ROD: /* Rods */
|
||||||
switch (level) {
|
switch (level)
|
||||||
|
{
|
||||||
case 0: return 90;
|
case 0: return 90;
|
||||||
case 1: return 70;
|
case 1: return 70;
|
||||||
case 2: return 68;
|
case 2: return 68;
|
||||||
@ -771,7 +787,8 @@ byte saving_throws(int class_num, int type, int level)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case SAVING_PETRI: /* Petrification */
|
case SAVING_PETRI: /* Petrification */
|
||||||
switch (level) {
|
switch (level)
|
||||||
|
{
|
||||||
case 0: return 90;
|
case 0: return 90;
|
||||||
case 1: return 60;
|
case 1: return 60;
|
||||||
case 2: return 59;
|
case 2: return 59;
|
||||||
@ -818,7 +835,8 @@ byte saving_throws(int class_num, int type, int level)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case SAVING_BREATH: /* Breath weapons */
|
case SAVING_BREATH: /* Breath weapons */
|
||||||
switch (level) {
|
switch (level)
|
||||||
|
{
|
||||||
case 0: return 90;
|
case 0: return 90;
|
||||||
case 1: return 80;
|
case 1: return 80;
|
||||||
case 2: return 79;
|
case 2: return 79;
|
||||||
@ -865,7 +883,8 @@ byte saving_throws(int class_num, int type, int level)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case SAVING_SPELL: /* Generic spells */
|
case SAVING_SPELL: /* Generic spells */
|
||||||
switch (level) {
|
switch (level)
|
||||||
|
{
|
||||||
case 0: return 90;
|
case 0: return 90;
|
||||||
case 1: return 75;
|
case 1: return 75;
|
||||||
case 2: return 73;
|
case 2: return 73;
|
||||||
@ -917,9 +936,11 @@ byte saving_throws(int class_num, int type, int level)
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case CLASS_WARRIOR:
|
case CLASS_WARRIOR:
|
||||||
switch (type) {
|
switch (type)
|
||||||
|
{
|
||||||
case SAVING_PARA: /* Paralyzation */
|
case SAVING_PARA: /* Paralyzation */
|
||||||
switch (level) {
|
switch (level)
|
||||||
|
{
|
||||||
case 0: return 90;
|
case 0: return 90;
|
||||||
case 1: return 70;
|
case 1: return 70;
|
||||||
case 2: return 68;
|
case 2: return 68;
|
||||||
@ -976,7 +997,8 @@ byte saving_throws(int class_num, int type, int level)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case SAVING_ROD: /* Rods */
|
case SAVING_ROD: /* Rods */
|
||||||
switch (level) {
|
switch (level)
|
||||||
|
{
|
||||||
case 0: return 90;
|
case 0: return 90;
|
||||||
case 1: return 80;
|
case 1: return 80;
|
||||||
case 2: return 78;
|
case 2: return 78;
|
||||||
@ -1033,7 +1055,8 @@ byte saving_throws(int class_num, int type, int level)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case SAVING_PETRI: /* Petrification */
|
case SAVING_PETRI: /* Petrification */
|
||||||
switch (level) {
|
switch (level)
|
||||||
|
{
|
||||||
case 0: return 90;
|
case 0: return 90;
|
||||||
case 1: return 75;
|
case 1: return 75;
|
||||||
case 2: return 73;
|
case 2: return 73;
|
||||||
@ -1090,7 +1113,8 @@ byte saving_throws(int class_num, int type, int level)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case SAVING_BREATH: /* Breath weapons */
|
case SAVING_BREATH: /* Breath weapons */
|
||||||
switch (level) {
|
switch (level)
|
||||||
|
{
|
||||||
case 0: return 90;
|
case 0: return 90;
|
||||||
case 1: return 85;
|
case 1: return 85;
|
||||||
case 2: return 83;
|
case 2: return 83;
|
||||||
@ -1147,7 +1171,8 @@ byte saving_throws(int class_num, int type, int level)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case SAVING_SPELL: /* Generic spells */
|
case SAVING_SPELL: /* Generic spells */
|
||||||
switch (level) {
|
switch (level)
|
||||||
|
{
|
||||||
case 0: return 90;
|
case 0: return 90;
|
||||||
case 1: return 85;
|
case 1: return 85;
|
||||||
case 2: return 83;
|
case 2: return 83;
|
||||||
@ -1396,15 +1421,18 @@ int thaco(int class_num, int level)
|
|||||||
*/
|
*/
|
||||||
void roll_real_abils(struct char_data *ch)
|
void roll_real_abils(struct char_data *ch)
|
||||||
{
|
{
|
||||||
int i, j, k, temp;
|
int i,
|
||||||
|
j,
|
||||||
|
k,
|
||||||
|
temp;
|
||||||
ubyte table[6];
|
ubyte table[6];
|
||||||
ubyte rolls[4];
|
ubyte rolls[4];
|
||||||
|
|
||||||
for (i = 0; i < 6; i++)
|
for (i = 0; i < 6; i++)
|
||||||
table[i] = 0;
|
table[i] = 0;
|
||||||
|
|
||||||
for (i = 0; i < 6; i++) {
|
for (i = 0; i < 6; i++)
|
||||||
|
{
|
||||||
for (j = 0; j < 4; j++)
|
for (j = 0; j < 4; j++)
|
||||||
rolls[j] = rand_number(1, 6);
|
rolls[j] = rand_number(1, 6);
|
||||||
|
|
||||||
@ -1412,7 +1440,8 @@ void roll_real_abils(struct char_data *ch)
|
|||||||
MIN(rolls[0], MIN(rolls[1], MIN(rolls[2], rolls[3])));
|
MIN(rolls[0], MIN(rolls[1], MIN(rolls[2], rolls[3])));
|
||||||
|
|
||||||
for (k = 0; k < 6; k++)
|
for (k = 0; k < 6; k++)
|
||||||
if (table[k] < temp) {
|
if (table[k] < temp)
|
||||||
|
{
|
||||||
temp ^= table[k];
|
temp ^= table[k];
|
||||||
table[k] ^= temp;
|
table[k] ^= temp;
|
||||||
temp ^= table[k];
|
temp ^= table[k];
|
||||||
@ -1421,7 +1450,8 @@ void roll_real_abils(struct char_data *ch)
|
|||||||
|
|
||||||
ch->real_abils.str_add = 0;
|
ch->real_abils.str_add = 0;
|
||||||
|
|
||||||
switch (GET_CLASS(ch)) {
|
switch (GET_CLASS(ch))
|
||||||
|
{
|
||||||
case CLASS_MAGIC_USER:
|
case CLASS_MAGIC_USER:
|
||||||
ch->real_abils.intel = table[0];
|
ch->real_abils.intel = table[0];
|
||||||
ch->real_abils.wis = table[1];
|
ch->real_abils.wis = table[1];
|
||||||
@ -1457,6 +1487,20 @@ void roll_real_abils(struct char_data *ch)
|
|||||||
ch->real_abils.str_add = rand_number(0, 100);
|
ch->real_abils.str_add = rand_number(0, 100);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TODO: Add race modifiers
|
||||||
|
switch (GET_RACE(ch))
|
||||||
|
{
|
||||||
|
case RACE_HAOON:
|
||||||
|
break;
|
||||||
|
case RACE_UTNIR:
|
||||||
|
break;
|
||||||
|
case RACE_DUARON:
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
ch->aff_abils = ch->real_abils;
|
ch->aff_abils = ch->real_abils;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -238,6 +238,7 @@ const char *connected_types[] = {
|
|||||||
"Changing PW 3",
|
"Changing PW 3",
|
||||||
"Self-Delete 1",
|
"Self-Delete 1",
|
||||||
"Self-Delete 2",
|
"Self-Delete 2",
|
||||||
|
"Select race",
|
||||||
"Disconnecting",
|
"Disconnecting",
|
||||||
"\n"
|
"\n"
|
||||||
};
|
};
|
||||||
|
2
src/db.c
2
src/db.c
@ -2217,6 +2217,7 @@ void store_to_char(struct char_file_u *st, struct char_data *ch)
|
|||||||
|
|
||||||
GET_SEX(ch) = st->sex;
|
GET_SEX(ch) = st->sex;
|
||||||
GET_CLASS(ch) = st->chclass;
|
GET_CLASS(ch) = st->chclass;
|
||||||
|
GET_RACE(ch) = st->race;
|
||||||
GET_LEVEL(ch) = st->level;
|
GET_LEVEL(ch) = st->level;
|
||||||
|
|
||||||
ch->player.short_descr = NULL;
|
ch->player.short_descr = NULL;
|
||||||
@ -2335,6 +2336,7 @@ void char_to_store(struct char_data *ch, struct char_file_u *st)
|
|||||||
st->height = GET_HEIGHT(ch);
|
st->height = GET_HEIGHT(ch);
|
||||||
st->sex = GET_SEX(ch);
|
st->sex = GET_SEX(ch);
|
||||||
st->chclass = GET_CLASS(ch);
|
st->chclass = GET_CLASS(ch);
|
||||||
|
st->race = GET_RACE(ch);
|
||||||
st->level = GET_LEVEL(ch);
|
st->level = GET_LEVEL(ch);
|
||||||
st->abilities = ch->real_abils;
|
st->abilities = ch->real_abils;
|
||||||
st->points = ch->points;
|
st->points = ch->points;
|
||||||
|
@ -29,6 +29,7 @@ extern room_rnum r_mortal_start_room;
|
|||||||
extern room_rnum r_immort_start_room;
|
extern room_rnum r_immort_start_room;
|
||||||
extern room_rnum r_frozen_start_room;
|
extern room_rnum r_frozen_start_room;
|
||||||
extern const char *class_menu;
|
extern const char *class_menu;
|
||||||
|
extern const char *race_menu;
|
||||||
extern char *motd;
|
extern char *motd;
|
||||||
extern char *imotd;
|
extern char *imotd;
|
||||||
extern char *background;
|
extern char *background;
|
||||||
@ -46,6 +47,7 @@ void echo_on(struct descriptor_data *d);
|
|||||||
void echo_off(struct descriptor_data *d);
|
void echo_off(struct descriptor_data *d);
|
||||||
void do_start(struct char_data *ch);
|
void do_start(struct char_data *ch);
|
||||||
int parse_class(char arg);
|
int parse_class(char arg);
|
||||||
|
int parse_race(char *arg);
|
||||||
int special(struct char_data *ch, int cmd, char *arg);
|
int special(struct char_data *ch, int cmd, char *arg);
|
||||||
int isbanned(char *hostname);
|
int isbanned(char *hostname);
|
||||||
int Valid_Name(char *newname);
|
int Valid_Name(char *newname);
|
||||||
@ -1511,6 +1513,19 @@ void nanny(struct descriptor_data *d, char *arg)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
write_to_output(d, "%s\r\nRace: ", race_menu);
|
||||||
|
STATE(d) = CON_QRACE;
|
||||||
|
break;
|
||||||
|
case CON_QRACE:
|
||||||
|
load_result = parse_race(arg);
|
||||||
|
if (load_result == RACE_UNDEFINED)
|
||||||
|
{
|
||||||
|
write_to_output(d, "\r\nThat's not a race.\r\nRace: ");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
GET_RACE(d->character) = load_result;
|
||||||
|
|
||||||
write_to_output(d, "%s\r\nClass: ", class_menu);
|
write_to_output(d, "%s\r\nClass: ", class_menu);
|
||||||
STATE(d) = CON_QCLASS;
|
STATE(d) = CON_QCLASS;
|
||||||
break;
|
break;
|
||||||
|
31
src/races.c
31
src/races.c
@ -1,5 +1,7 @@
|
|||||||
#include "sysdep.h"
|
#include <string.h>
|
||||||
|
|
||||||
#include "conf.h"
|
#include "conf.h"
|
||||||
|
#include "sysdep.h"
|
||||||
#include "structs.h"
|
#include "structs.h"
|
||||||
#include "interpreter.h"
|
#include "interpreter.h"
|
||||||
#include "utils.h"
|
#include "utils.h"
|
||||||
@ -25,25 +27,22 @@ const char *race_menu = "\r\n"
|
|||||||
"( 3) Duaron\r\n";
|
"( 3) Duaron\r\n";
|
||||||
|
|
||||||
int
|
int
|
||||||
parse_race(char arg)
|
parse_race(char *arg)
|
||||||
{
|
{
|
||||||
arg = LOWER(arg);
|
if (strcmp(arg, "1") == 0)
|
||||||
|
|
||||||
switch (arg)
|
|
||||||
{
|
{
|
||||||
case '1':
|
|
||||||
return RACE_HAOON;
|
return RACE_HAOON;
|
||||||
break;
|
|
||||||
case '2':
|
|
||||||
return RACE_UTNIR;
|
|
||||||
break;
|
|
||||||
case '3':
|
|
||||||
return RACE_DUARON;
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
return RACE_UNDEFINED;
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
|
else if (strcmp(arg, "2") == 0)
|
||||||
|
{
|
||||||
|
return RACE_UTNIR;
|
||||||
|
}
|
||||||
|
else if (strcmp(arg, "3") == 0)
|
||||||
|
{
|
||||||
|
return RACE_DUARON;
|
||||||
|
}
|
||||||
|
|
||||||
|
return RACE_UNDEFINED;
|
||||||
}
|
}
|
||||||
|
|
||||||
long
|
long
|
||||||
|
Loading…
Reference in New Issue
Block a user